@elite.framework/ng.ui.core 1.0.96 → 1.0.98

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.
@@ -1 +1 @@
1
- {"version":3,"file":"elite.framework-ng.ui.core-generic-view.mjs","sources":["../tmp-esm2022/generic-view/lib/generic-view.js","../tmp-esm2022/generic-view/lib/generic-view-module.js","../tmp-esm2022/generic-view/elite.framework-ng.ui.core-generic-view.js"],"sourcesContent":["import { TooltipModule } from 'primeng/tooltip';\nimport { Component, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';\nimport { CommonModule, Location } from '@angular/common';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ButtonModule } from 'primeng/button';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { TabsModule } from 'primeng/tabs';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BreadcrumbComponent } from '@elite.framework/ng.ui.core/breadcrumb';\nimport { BaseService, IdParserService, SwalService } from '@elite.framework/ng.core/services';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';\nimport { GenericButton } from '@elite.framework/ng.ui.core/generic-button';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/toolbar\";\nimport * as i3 from \"primeng/api\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"primeng/tabs\";\nimport * as i6 from \"@angular/forms\";\nimport * as i7 from \"primeng/tooltip\";\nimport * as i8 from \"primeng/progressspinner\";\nimport * as i9 from \"@ngx-translate/core\";\nexport class GenericViewComponent {\n route = inject(ActivatedRoute);\n router = inject(Router);\n idParser = inject(IdParserService);\n form = new UntypedFormGroup({});\n title = '';\n actions = [];\n createEditActions = [];\n actions_ = [];\n tabs = [];\n viewMode = true;\n breadcrumb;\n service = inject(BaseService);\n formFields = [];\n apiName = '';\n idField = 'id';\n standaloneMode = false;\n isViewMode = true; // وضع المشاهدة فقط\n isCreateMode = false; // وضع الاضافة فقط\n isEditMode = false; // وضع التعديل\n model = {};\n displayMode = 'drawer';\n mode = 'full';\n action = new EventEmitter();\n afterDelete = new EventEmitter();\n dialog;\n inlineForm;\n tabs_ = [];\n model_ = {};\n currentId;\n list = [];\n totalRecords = 0;\n loading = false;\n // pagination state\n pageSize = 10;\n pageIndex = 0;\n sort = '';\n currentFilters = {};\n pageFilters = {};\n searchGlobal = '';\n swalService = inject(SwalService);\n _location = inject(Location);\n ngOnInit() {\n this.loading = true;\n if (this.apiName) {\n this.service.apiName = this.apiName;\n }\n this.actions_ = this.actions.filter(c => c.name != 'view');\n this.route.paramMap.subscribe(params => {\n const id = params.get(this.idField);\n if (id) {\n this.currentId = id;\n if (this.standaloneMode) {\n this.loadList();\n }\n }\n this.refresh();\n });\n }\n refresh() {\n // detect mode based on route\n const url = this.router.url.toLowerCase();\n this.isViewMode = url.includes('/view');\n this.isEditMode = url.includes('/edit');\n this.isCreateMode = url.includes('/create') || url.endsWith('/new') || url.endsWith('/add');\n this.tabs_ = [];\n for (let i = 0; i < this.tabs.length; i++) {\n const t = this.tabs[i];\n this.tabs_.push({\n ...t,\n fields: [\n {\n props: { label: '' },\n fieldGroupClassName: 'grid grid-cols-1 md:grid-cols-2 gap-3',\n fieldGroup: this.isCreateMode || this.isEditMode\n ? this.getCreateEditFields(i == 0 ? this.formFields : t.fields)\n : this.getViewFields(i == 0 ? this.formFields : t.fields),\n },\n ],\n });\n }\n this.loading = false;\n }\n // as form\n getCreateEditFields(fields = []) {\n return fields.map(f => ({\n ...f,\n props: { ...f.props, readonly: this.viewMode, disabled: this.viewMode },\n }));\n }\n getViewFields(fields = []) {\n const flatten = (fields) => fields.flatMap(field => {\n if (field.fieldGroup?.length)\n return flatten(field.fieldGroup);\n if (!field.props\n || field.props['view']?.hidden\n // || field.props['table']?.hidden\n )\n return [];\n const type = field.props['view']?.type || field.props['table']?.type || 'custom-label-type';\n return [{\n type,\n key: field['key'],\n readonly: this.viewMode,\n disabled: this.viewMode,\n wrappers: field.wrappers ?? ['field-wrapper'],\n props: {\n ...field.props,\n ...(field.props['view']?.props || field.props['table']?.props),\n },\n expressions: field.props['view']?.expressions || field.props['view']?.expressions,\n }];\n });\n return flatten(fields);\n }\n // Use a map to store form groups for each row and column\n cellForms = new Map();\n getForm(rowIndex) {\n const key = `${rowIndex}_`;\n let form = this.cellForms.get(key);\n if (!form) {\n form = new FormGroup({});\n this.cellForms.set(key, form);\n }\n return form;\n }\n async handleCreateEditAction(btn) {\n try {\n if (btn.action) {\n // Execute the provided action\n await btn.action(null); // You can pass row or context here\n }\n else {\n // Fallback to emitting event\n if (btn.actionName == 'cancel') {\n this.back();\n }\n else {\n this.action.emit({\n name: btn.actionName ?? 'cancel',\n row: null, // provide row if available\n });\n }\n }\n }\n catch (err) {\n console.error('Button action error', err);\n }\n }\n onAction(act, model) {\n if (act.action) {\n act.action(model);\n }\n else {\n // this.action.emit({ name: act.name, row:model });\n this.emitAction({ name: act.name, row: model });\n }\n }\n emitAction(event) {\n switch (event.name) {\n case 'edit':\n this.dialog.openForm(\"edit\", event.row);\n break;\n case 'delete':\n this.onDelete(event.row);\n break;\n default:\n this.action.emit(event);\n break;\n }\n }\n onDelete(item) {\n // const id = item[this.idField];\n const id = this.idParser.parseIds(item, this.idField);\n this.swalService.confirm('تأكيد الحذف', 'هل تريد حذف هذا السجل فعلاً؟', 'نعم، احذف', 'إلغاء').then((result) => {\n if (result.isConfirmed) {\n this.service.delete(id).subscribe({\n next: () => {\n this.swalService.success('تم الحذف بنجاح');\n this.back();\n },\n error: (err) => {\n this.loading = false;\n }\n });\n }\n });\n }\n afterSave(event) {\n this.model = event.response;\n // set the id from backend response\n this.currentId = event.response[this.idField];\n if (this.isCreateMode) {\n this.goToMode('view');\n }\n else if (this.isEditMode) {\n this.goToMode('view');\n }\n }\n goToMode(mode) {\n const tree = this.router.parseUrl(this.router.url);\n const segments = tree.root.children['primary']?.segments.map(s => s.path) ?? [];\n let newSegments;\n if (mode === 'create') {\n // always navigate to \"add\"\n newSegments = [\n ...segments.filter(s => !['view', 'edit', 'add'].includes(s)),\n 'add',\n ];\n }\n else {\n // if in \"add\" mode, replace it with the new id\n if (segments.includes('add')) {\n newSegments = [\n ...segments.filter(s => s !== 'add'),\n String(this.currentId),\n mode,\n ];\n }\n else {\n const idIndex = segments.findIndex(s => s === String(this.currentId));\n if (idIndex === -1) {\n newSegments = [...segments, String(this.currentId), mode];\n }\n else {\n newSegments = segments.slice(0, idIndex + 1);\n newSegments.push(mode);\n }\n }\n }\n this.router.navigate(newSegments);\n this.refresh();\n }\n backToList() {\n this.router.navigate(['../']);\n }\n back() {\n // this.router.navigate(['..']);\n this._location.back();\n }\n loadList() {\n this.loading = true;\n const filters = {\n maxResultCount: this.pageSize,\n skipCount: this.pageIndex * this.pageSize,\n sorting: this.sort,\n ...this.currentFilters,\n ...this.pageFilters,\n ...(this.searchGlobal ? { filter: this.searchGlobal } : {}),\n };\n this.service.getList(filters).subscribe({\n next: (res) => {\n this.list = res.items;\n this.totalRecords = res.totalCount;\n this.loading = false;\n // set model_ to current id item\n const found = this.list.find(x => x[this.idField] == this.currentId);\n if (found) {\n this.model_ = found;\n }\n },\n error: err => {\n console.error('Error loading list', err);\n this.loading = false;\n }\n });\n }\n next() {\n if (!this.currentId)\n return;\n // increment currentId numerically\n // const newId = Number(this.currentId) + 1;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n previous() {\n if (!this.currentId)\n return;\n // decrement currentId numerically\n // const newId = Number(this.currentId) - 1;\n // if (newId <= 0) return;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericViewComponent, isStandalone: true, selector: \"app-detail-view\", inputs: { title: \"title\", actions: \"actions\", createEditActions: \"createEditActions\", tabs: \"tabs\", viewMode: \"viewMode\", breadcrumb: \"breadcrumb\", service: \"service\", formFields: \"formFields\", apiName: \"apiName\", idField: \"idField\", standaloneMode: \"standaloneMode\", isViewMode: \"isViewMode\", isCreateMode: \"isCreateMode\", isEditMode: \"isEditMode\", model: \"model\", displayMode: \"displayMode\", mode: \"mode\", loading: \"loading\" }, outputs: { action: \"action\", afterDelete: \"afterDelete\" }, viewQueries: [{ propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }, { propertyName: \"inlineForm\", first: true, predicate: [\"inlineForm\"], descendants: true }], ngImport: i0, template: \"\\r\\n@if (mode === 'detail') {\\r\\n<div class=\\\"w-full flex flex-col gap-3\\\">\\r\\n <!-- overlay -->\\r\\n <div *ngIf=\\\"loading\\\"\\r\\n class=\\\"absolute inset-0 bg-white/70 flex items-center justify-center z-50\\\">\\r\\n <p-progress-spinner/>\\r\\n </div>\\r\\n\\r\\n <!-- actual content -->\\r\\n <!-- Toolbar -->\\r\\n <p-toolbar style=\\\"background: transparent;border: 0px;box-shadow: none;\\\" class=\\\"bg-transparent shadow-none border-none rounded-md px-3\\\">\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n <!-- <span class=\\\"font-semibold text-lg xs:hidden block\\\">{{ title }}</span> -->\\r\\n <app-breadcrumb class=\\\"xs:block\\\" [breadcrumb]=\\\"breadcrumb\\\"></app-breadcrumb> <!-- xs:block hidden -->\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u062A\\u0627\\u0644\\u064A\\\"\\r\\n (click)=\\\"next()\\\"\\r\\n ></button>\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\\"\\r\\n (click)=\\\"previous()\\\"\\r\\n ></button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-toolbar>\\r\\n <p-toolbar class=\\\"bg-white shadow rounded-md px-3\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n @if (isViewMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (action of actions_; track $index) {\\r\\n <button\\r\\n pButton pRipple\\r\\n [icon]=\\\"action.icon ?? ''\\\"\\r\\n [label]=\\\"(action.label ?? '') | translate\\\"\\r\\n class=\\\"fd-btn\\\"\\r\\n (click)=\\\"onAction(action,model)\\\"\\r\\n ></button>\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (btn of createEditActions; track $index) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n @if (btn.type == 'submit' && inlineForm) {\\r\\n <lib-generic-button\\r\\n [type]=\\\"'submit'\\\"\\r\\n [loading]=\\\"inlineForm.loading\\\"\\r\\n [disabled]=\\\"inlineForm.loading || form.invalid\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"inlineForm.onSubmit()\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n @else{\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleCreateEditAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n\\r\\n </p-toolbar>\\r\\n\\r\\n <!-- Tabs -->\\r\\n <p-tabs value=\\\"0\\\">\\r\\n <p-tablist>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tab value=\\\"{{$index}}\\\">\\r\\n <i [class]=\\\"tab.icon\\\"></i>\\r\\n <span class=\\\"mr-1 ml-1\\\">{{ tab.header }}</span>\\r\\n </p-tab>\\r\\n }\\r\\n </p-tablist>\\r\\n <p-tabpanels>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tabpanel value=\\\"{{$index}}\\\">\\r\\n\\r\\n <!-- Formly fields -->\\r\\n <!-- p-4 grid grid-cols-1 md:grid-cols-2 gap-4 -->\\r\\n <div class=\\\"border border-surface p-4\\\">\\r\\n @if (tab.fields.length && $index == 0) {\\r\\n\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\">\\r\\n @if (tab.fields.length && $index == 0 ) {\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <app-generic-dialog\\r\\n #inlineForm\\r\\n [form]=\\\"form\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"'inline'\\\"\\r\\n [mode]=\\\"'form-only'\\\"\\r\\n [forceState]=\\\"isCreateMode ? 'create':'edit'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n@else if(isViewMode){\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n ></formly-form>\\r\\n}\\r\\n}\\r\\n </form>\\r\\n\\r\\n }\\r\\n @if (tab.fields.length && $index > 0) {\\r\\n\\r\\n\\r\\n <formly-form\\r\\n [form]=\\\"getForm($index)\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"tab.model || model\\\"\\r\\n ></formly-form>\\r\\n\\r\\n }\\r\\n\\r\\n <!-- Custom template -->\\r\\n @if (tab.content) {\\r\\n <ng-container *ngTemplateOutlet=\\\"tab.content\\\"></ng-container>\\r\\n }\\r\\n </div>\\r\\n </p-tabpanel>\\r\\n }\\r\\n </p-tabpanels>\\r\\n </p-tabs>\\r\\n</div>\\r\\n\\r\\n<!-- [model]=\\\"model\\\" -->\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"displayMode ?? 'dialog'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"component\", type: i2.Toolbar, selector: \"p-toolbar\", inputs: [\"styleClass\", \"ariaLabelledBy\"] }, { kind: \"directive\", type: i3.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i4.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: TabsModule }, { kind: \"component\", type: i5.Tabs, selector: \"p-tabs\", inputs: [\"value\", \"scrollable\", \"lazy\", \"selectOnFocus\", \"showNavigators\", \"tabindex\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i5.TabPanels, selector: \"p-tabpanels\" }, { kind: \"component\", type: i5.TabPanel, selector: \"p-tabpanel\", inputs: [\"value\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i5.TabList, selector: \"p-tablist\" }, { kind: \"component\", type: i5.Tab, selector: \"p-tab\", inputs: [\"value\", \"disabled\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: FormsModule }, { 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: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i6.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"component\", type: BreadcrumbComponent, selector: \"app-breadcrumb\", inputs: [\"breadcrumb\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i7.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"component\", type: GenericDialogComponent, selector: \"app-generic-dialog\", inputs: [\"form\", \"service\", \"formFields\", \"model\", \"apiName\", \"idField\", \"dialogMaxWidth\", \"displayMode\", \"mode\", \"forceState\", \"drawerVisible\", \"dialogVisible\", \"isViewMode\", \"isEditMode\", \"useConfirmOnSave\", \"loading\", \"errorMsg\", \"errorMessage\", \"beforeSaveTransform\", \"hideTable\", \"autoShowForm\"], outputs: [\"action\", \"afterSave\", \"afterDelete\", \"beforeSave\", \"beforeDelete\", \"formCancel\", \"formInit\", \"dataLoaded\", \"selectionChange\", \"error\", \"visibleChange\"] }, { kind: \"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: ProgressSpinnerModule }, { kind: \"component\", type: i8.ProgressSpinner, selector: \"p-progressSpinner, p-progress-spinner, p-progressspinner\", inputs: [\"styleClass\", \"strokeWidth\", \"fill\", \"animationDuration\", \"ariaLabel\"] }, { kind: \"pipe\", type: i9.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-detail-view', standalone: true, imports: [\n CommonModule,\n ToolbarModule,\n ButtonModule,\n TabsModule,\n FormlyForm,\n FormsModule,\n ReactiveFormsModule,\n TranslateModule,\n BreadcrumbComponent,\n TooltipModule,\n GenericDialogComponent,\n GenericButton,\n ProgressSpinnerModule\n ], template: \"\\r\\n@if (mode === 'detail') {\\r\\n<div class=\\\"w-full flex flex-col gap-3\\\">\\r\\n <!-- overlay -->\\r\\n <div *ngIf=\\\"loading\\\"\\r\\n class=\\\"absolute inset-0 bg-white/70 flex items-center justify-center z-50\\\">\\r\\n <p-progress-spinner/>\\r\\n </div>\\r\\n\\r\\n <!-- actual content -->\\r\\n <!-- Toolbar -->\\r\\n <p-toolbar style=\\\"background: transparent;border: 0px;box-shadow: none;\\\" class=\\\"bg-transparent shadow-none border-none rounded-md px-3\\\">\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n <!-- <span class=\\\"font-semibold text-lg xs:hidden block\\\">{{ title }}</span> -->\\r\\n <app-breadcrumb class=\\\"xs:block\\\" [breadcrumb]=\\\"breadcrumb\\\"></app-breadcrumb> <!-- xs:block hidden -->\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u062A\\u0627\\u0644\\u064A\\\"\\r\\n (click)=\\\"next()\\\"\\r\\n ></button>\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\\"\\r\\n (click)=\\\"previous()\\\"\\r\\n ></button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-toolbar>\\r\\n <p-toolbar class=\\\"bg-white shadow rounded-md px-3\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n @if (isViewMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (action of actions_; track $index) {\\r\\n <button\\r\\n pButton pRipple\\r\\n [icon]=\\\"action.icon ?? ''\\\"\\r\\n [label]=\\\"(action.label ?? '') | translate\\\"\\r\\n class=\\\"fd-btn\\\"\\r\\n (click)=\\\"onAction(action,model)\\\"\\r\\n ></button>\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (btn of createEditActions; track $index) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n @if (btn.type == 'submit' && inlineForm) {\\r\\n <lib-generic-button\\r\\n [type]=\\\"'submit'\\\"\\r\\n [loading]=\\\"inlineForm.loading\\\"\\r\\n [disabled]=\\\"inlineForm.loading || form.invalid\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"inlineForm.onSubmit()\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n @else{\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleCreateEditAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n\\r\\n </p-toolbar>\\r\\n\\r\\n <!-- Tabs -->\\r\\n <p-tabs value=\\\"0\\\">\\r\\n <p-tablist>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tab value=\\\"{{$index}}\\\">\\r\\n <i [class]=\\\"tab.icon\\\"></i>\\r\\n <span class=\\\"mr-1 ml-1\\\">{{ tab.header }}</span>\\r\\n </p-tab>\\r\\n }\\r\\n </p-tablist>\\r\\n <p-tabpanels>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tabpanel value=\\\"{{$index}}\\\">\\r\\n\\r\\n <!-- Formly fields -->\\r\\n <!-- p-4 grid grid-cols-1 md:grid-cols-2 gap-4 -->\\r\\n <div class=\\\"border border-surface p-4\\\">\\r\\n @if (tab.fields.length && $index == 0) {\\r\\n\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\">\\r\\n @if (tab.fields.length && $index == 0 ) {\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <app-generic-dialog\\r\\n #inlineForm\\r\\n [form]=\\\"form\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"'inline'\\\"\\r\\n [mode]=\\\"'form-only'\\\"\\r\\n [forceState]=\\\"isCreateMode ? 'create':'edit'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n@else if(isViewMode){\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n ></formly-form>\\r\\n}\\r\\n}\\r\\n </form>\\r\\n\\r\\n }\\r\\n @if (tab.fields.length && $index > 0) {\\r\\n\\r\\n\\r\\n <formly-form\\r\\n [form]=\\\"getForm($index)\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"tab.model || model\\\"\\r\\n ></formly-form>\\r\\n\\r\\n }\\r\\n\\r\\n <!-- Custom template -->\\r\\n @if (tab.content) {\\r\\n <ng-container *ngTemplateOutlet=\\\"tab.content\\\"></ng-container>\\r\\n }\\r\\n </div>\\r\\n </p-tabpanel>\\r\\n }\\r\\n </p-tabpanels>\\r\\n </p-tabs>\\r\\n</div>\\r\\n\\r\\n<!-- [model]=\\\"model\\\" -->\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"displayMode ?? 'dialog'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n\" }]\n }], propDecorators: { title: [{\n type: Input\n }], actions: [{\n type: Input\n }], createEditActions: [{\n type: Input\n }], tabs: [{\n type: Input\n }], viewMode: [{\n type: Input\n }], breadcrumb: [{\n type: Input\n }], service: [{\n type: Input\n }], formFields: [{\n type: Input\n }], apiName: [{\n type: Input\n }], idField: [{\n type: Input\n }], standaloneMode: [{\n type: Input\n }], isViewMode: [{\n type: Input\n }], isCreateMode: [{\n type: Input\n }], isEditMode: [{\n type: Input\n }], model: [{\n type: Input\n }], displayMode: [{\n type: Input\n }], mode: [{\n type: Input\n }], action: [{\n type: Output\n }], afterDelete: [{\n type: Output\n }], dialog: [{\n type: ViewChild,\n args: ['dialog']\n }], inlineForm: [{\n type: ViewChild,\n args: ['inlineForm']\n }], loading: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdmlldy9zcmMvbGliL2dlbmVyaWMtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXZpZXcvc3JjL2xpYi9nZW5lcmljLXZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVB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Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxVQUFVO3NCQUFsQixLQUFLO2dCQUNFLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFuQixLQUFLO2dCQVdDLElBQUk7c0JBQVosS0FBSztnQkFFTyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFYyxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ00sVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQVFoQixPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUb29sYmFyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sYmFyJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBGb3JtbHlGb3JtLCBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUYWJzTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJzJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iQ29tcG9uZW50IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2JyZWFkY3J1bWInO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSwgSWRQYXJzZXJTZXJ2aWNlLCBTd2FsU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBY3Rpb25EZWYsIEJ1dHRvbkNvbmZpZywgUGFnaW5hdGVkUmVzdWx0IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcclxuaW1wb3J0IHsgR2VuZXJpY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWRpYWxvZyc7XHJcbmltcG9ydCB7IEdlbmVyaWNCdXR0b24gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1idXR0b24nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZXRhaWxUYWIge1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xyXG4gIG1vZGVsPzogYW55O1xyXG4gIGNvbnRlbnQ/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kZXRhaWwtdmlldycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUb29sYmFyTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgVGFic01vZHVsZSxcclxuICAgIEZvcm1seUZvcm0sXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBCcmVhZGNydW1iQ29tcG9uZW50LFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIEdlbmVyaWNEaWFsb2dDb21wb25lbnQsXHJcbiAgICBHZW5lcmljQnV0dG9uLFxyXG4gICAgUHJvZ3Jlc3NTcGlubmVyTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy12aWV3Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xyXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgIHByaXZhdGUgaWRQYXJzZXI9IGluamVjdChJZFBhcnNlclNlcnZpY2UpO1xyXG5cclxuICBmb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG5cclxuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGFjdGlvbnM6IEFjdGlvbkRlZjxhbnk+W10gPSBbXTtcclxuICAgQElucHV0KCkgY3JlYXRlRWRpdEFjdGlvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgIGFjdGlvbnNfOiBBY3Rpb25EZWY8YW55PltdID0gW107XHJcbiAgQElucHV0KCkgdGFiczogRGV0YWlsVGFiW10gPSBbXTtcclxuICBASW5wdXQoKSB2aWV3TW9kZSA9IHRydWU7XHJcbiAgQElucHV0KCkgYnJlYWRjcnVtYjogTWVudUl0ZW1bXSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZXJ2aWNlOiBCYXNlU2VydmljZSA9IGluamVjdChCYXNlU2VydmljZSk7XHJcbiAgQElucHV0KCkgZm9ybUZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGFwaU5hbWUgPSAnJztcclxuICBASW5wdXQoKSBpZEZpZWxkID0gJ2lkJztcclxuIEBJbnB1dCgpIHN0YW5kYWxvbmVNb2RlID0gZmFsc2U7XHJcbiBASW5wdXQoKSBpc1ZpZXdNb2RlID0gdHJ1ZTsgLy8g2YjYtti5INin2YTZhdi02KfZh9iv2Kkg2YHZgti3XHJcbiBASW5wdXQoKSBpc0NyZWF0ZU1vZGUgPSBmYWxzZTsgLy8g2YjYtti5INin2YTYp9i22KfZgdipINmB2YLYt1xyXG4gIEBJbnB1dCgpIGlzRWRpdE1vZGUgPSBmYWxzZTsgLy8g2YjYtti5INin2YTYqti52K/ZitmEXHJcbiBASW5wdXQoKSBtb2RlbCA9IHt9O1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlNb2RlOlxyXG4gICAgfCAnZHJhd2VyJ1xyXG4gICAgfCAnZGlhbG9nJ1xyXG4gICAgfCAncm91dGUnXHJcbiAgICB8ICdpbmxpbmUnXHJcbiAgICB8IFBhcnRpYWw8XHJcbiAgICAgIFJlY29yZDxcclxuICAgICAgICAnYWRkJyB8ICdlZGl0JyB8ICd2aWV3JyxcclxuICAgICAgICAnZHJhd2VyJyB8ICdkaWFsb2cnIHwgJ3JvdXRlJyB8ICdpbmxpbmUnXHJcbiAgICAgID5cclxuICAgID4gPSAnZHJhd2VyJztcclxuQElucHV0KCkgbW9kZTogJ2Z1bGwnIHwgJ2Zvcm0tb25seScgfCAndGFibGUtb25seScgfCAnZGV0YWlsJyA9ICdmdWxsJztcclxuXHJcbiAgIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyByb3c6IGFueSB9PigpO1xyXG4gICAgQE91dHB1dCgpIGFmdGVyRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogYW55OyByZXNwb25zZT86IGFueSB9PigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZycpIGRpYWxvZyE6IEdlbmVyaWNEaWFsb2dDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdpbmxpbmVGb3JtJykgaW5saW5lRm9ybSE6IEdlbmVyaWNEaWFsb2dDb21wb25lbnQ7XHJcblxyXG4gIHRhYnNfOiBEZXRhaWxUYWJbXSA9IFtdO1xyXG4gIG1vZGVsXzogYW55ID0ge307XHJcblxyXG4gIGN1cnJlbnRJZCE6IHN0cmluZyB8IG51bWJlcjtcclxuICBsaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHRvdGFsUmVjb3JkcyA9IDA7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAvLyBwYWdpbmF0aW9uIHN0YXRlXHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBwYWdlSW5kZXggPSAwO1xyXG4gIHNvcnQgPSAnJztcclxuICBjdXJyZW50RmlsdGVyczogYW55ID0ge307XHJcbiAgcGFnZUZpbHRlcnM6IGFueSA9IHt9O1xyXG4gIHNlYXJjaEdsb2JhbCA9ICcnO1xyXG4gcHJpdmF0ZSBzd2FsU2VydmljZSA9IGluamVjdChTd2FsU2VydmljZSk7XHJcblxyXG4gX2xvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmFwaU5hbWUpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmFwaU5hbWUgPSB0aGlzLmFwaU5hbWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuYWN0aW9uc18gPSB0aGlzLmFjdGlvbnMuZmlsdGVyKGM9PmMubmFtZSAhPSAndmlldycpO1xyXG5cclxuICAgICAgdGhpcy5yb3V0ZS5wYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJhbXMuZ2V0KHRoaXMuaWRGaWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudElkID0gaWQ7XHJcbiAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhbmRhbG9uZU1vZGUpe1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZExpc3QoKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG5cclxuICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCl7XHJcblxyXG4gICAgLy8gZGV0ZWN0IG1vZGUgYmFzZWQgb24gcm91dGVcclxuICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICB0aGlzLmlzVmlld01vZGUgPSB1cmwuaW5jbHVkZXMoJy92aWV3Jyk7XHJcbiAgdGhpcy5pc0VkaXRNb2RlID0gdXJsLmluY2x1ZGVzKCcvZWRpdCcpO1xyXG4gIHRoaXMuaXNDcmVhdGVNb2RlID0gdXJsLmluY2x1ZGVzKCcvY3JlYXRlJykgfHwgdXJsLmVuZHNXaXRoKCcvbmV3JykgfHwgdXJsLmVuZHNXaXRoKCcvYWRkJyk7XHJcblxyXG4gIHRoaXMudGFic18gPSBbXTtcclxuZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhYnMubGVuZ3RoOyBpKyspIHtcclxuICBjb25zdCB0ID0gdGhpcy50YWJzW2ldO1xyXG4gIHRoaXMudGFic18ucHVzaCh7XHJcbiAgICAuLi50LFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBwcm9wczogeyBsYWJlbDogJycgfSxcclxuICAgICAgICBmaWVsZEdyb3VwQ2xhc3NOYW1lOiAnZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtMycsXHJcbiAgICAgICAgZmllbGRHcm91cDpcclxuICAgICAgICAgIHRoaXMuaXNDcmVhdGVNb2RlIHx8IHRoaXMuaXNFZGl0TW9kZVxyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q3JlYXRlRWRpdEZpZWxkcyhpID09IDAgPyB0aGlzLmZvcm1GaWVsZHM6IHQuZmllbGRzKVxyXG4gICAgICAgICAgICA6IHRoaXMuZ2V0Vmlld0ZpZWxkcyhpID09IDAgPyB0aGlzLmZvcm1GaWVsZHMgOiB0LmZpZWxkcyksXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH0pO1xyXG59XHJcbnRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuICAvLyBhcyBmb3JtXHJcbiAgIGdldENyZWF0ZUVkaXRGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBmaWVsZHMubWFwKGYgPT4gKHtcclxuICAgICAgLi4uZixcclxuICAgICAgcHJvcHM6IHsgLi4uZi5wcm9wcywgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsIGRpc2FibGVkOiB0aGlzLnZpZXdNb2RlIH0sXHJcbiAgICB9KSk7XHJcbiAgfVxyXG4gIGdldFZpZXdGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIGNvbnN0IGZsYXR0ZW4gPSAoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogRm9ybWx5RmllbGRDb25maWdbXSA9PlxyXG4gICAgICBmaWVsZHMuZmxhdE1hcChmaWVsZCA9PiB7XHJcbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXA/Lmxlbmd0aCkgcmV0dXJuIGZsYXR0ZW4oZmllbGQuZmllbGRHcm91cCk7XHJcbiAgICAgICAgaWYgKCFmaWVsZC5wcm9wc1xyXG4gICAgICAgICAgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uaGlkZGVuXHJcbiAgICAgICAgICAvLyB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8uaGlkZGVuXHJcbiAgICAgICAgICkgcmV0dXJuIFtdO1xyXG5cclxuICAgICAgICBjb25zdCB0eXBlID0gZmllbGQucHJvcHNbJ3ZpZXcnXT8udHlwZSB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8udHlwZSB8fCAnY3VzdG9tLWxhYmVsLXR5cGUnO1xyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIGtleTogZmllbGRbJ2tleSddLFxyXG4gICAgICAgICAgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsXHJcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICAgIHdyYXBwZXJzOiBmaWVsZC53cmFwcGVycyA/PyBbJ2ZpZWxkLXdyYXBwZXInXSxcclxuICAgICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgIC4uLmZpZWxkLnByb3BzLFxyXG4gICAgICAgICAgICAuLi4oZmllbGQucHJvcHNbJ3ZpZXcnXT8ucHJvcHMgfHwgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnByb3BzKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBleHByZXNzaW9uczogZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMsXHJcbiAgICAgICAgfV07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmbGF0dGVuKGZpZWxkcyk7XHJcbiAgfVxyXG5cclxuICAgICAvLyBVc2UgYSBtYXAgdG8gc3RvcmUgZm9ybSBncm91cHMgZm9yIGVhY2ggcm93IGFuZCBjb2x1bW5cclxuICBwcml2YXRlIGNlbGxGb3JtczogTWFwPHN0cmluZywgRm9ybUdyb3VwPiA9IG5ldyBNYXAoKTtcclxuICAgIGdldEZvcm0ocm93SW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB7XHJcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH1fYDtcclxuICAgIGxldCBmb3JtID0gdGhpcy5jZWxsRm9ybXMuZ2V0KGtleSk7XHJcblxyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5jZWxsRm9ybXMuc2V0KGtleSwgZm9ybSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG5cclxuICAgYXN5bmMgaGFuZGxlQ3JlYXRlRWRpdEFjdGlvbihidG46IEJ1dHRvbkNvbmZpZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGJ0bi5hY3Rpb24pIHtcclxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBwcm92aWRlZCBhY3Rpb25cclxuICAgICAgICBhd2FpdCBidG4uYWN0aW9uKG51bGwpOyAvLyBZb3UgY2FuIHBhc3Mgcm93IG9yIGNvbnRleHQgaGVyZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGVtaXR0aW5nIGV2ZW50XHJcbiAgICAgICAgaWYoYnRuLmFjdGlvbk5hbWUgPT0gJ2NhbmNlbCcpe1xyXG4gICAgICAgICAgdGhpcy5iYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgICBuYW1lOiBidG4uYWN0aW9uTmFtZSA/PyAnY2FuY2VsJyxcclxuICAgICAgICAgIHJvdzogbnVsbCEsIC8vIHByb3ZpZGUgcm93IGlmIGF2YWlsYWJsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdCdXR0b24gYWN0aW9uIGVycm9yJywgZXJyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxub25BY3Rpb24oYWN0OiBBY3Rpb25EZWY8YW55PiwgbW9kZWw6IGFueSkge1xyXG4gICAgaWYgKGFjdC5hY3Rpb24pIHtcclxuICAgICAgYWN0LmFjdGlvbihtb2RlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLmFjdGlvbi5lbWl0KHsgbmFtZTogYWN0Lm5hbWUsIHJvdzptb2RlbCB9KTtcclxuICAgICAgdGhpcy5lbWl0QWN0aW9uKHsgbmFtZTogYWN0Lm5hbWUsIHJvdzptb2RlbCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgZW1pdEFjdGlvbihldmVudDogeyBuYW1lOiBzdHJpbmc7IHJvdzogYW55IHwgbnVsbCB9KTogdm9pZCB7XHJcbiAgc3dpdGNoIChldmVudC5uYW1lKSB7XHJcbiAgICBjYXNlICdlZGl0JzpcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbkZvcm0oXCJlZGl0XCIsZXZlbnQucm93KTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICB0aGlzLm9uRGVsZXRlKGV2ZW50LnJvdyEpO1xyXG4gICAgICBicmVhaztcclxuICAgIGRlZmF1bHQgOlxyXG4gICAgICB0aGlzLmFjdGlvbi5lbWl0KGV2ZW50KTtcclxuICAgICAgYnJlYWs7XHJcbiAgfVxyXG59XHJcblxyXG5vbkRlbGV0ZShpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAvLyBjb25zdCBpZCA9IGl0ZW1bdGhpcy5pZEZpZWxkXTtcclxuICBjb25zdCBpZCA9IHRoaXMuaWRQYXJzZXIucGFyc2VJZHMoaXRlbSwgdGhpcy5pZEZpZWxkKTtcclxuXHJcbiAgdGhpcy5zd2FsU2VydmljZS5jb25maXJtKFxyXG4gICAgJ9iq2KPZg9mK2K8g2KfZhNit2LDZgScsXHJcbiAgICAn2YfZhCDYqtix2YrYryDYrdiw2YEg2YfYsNinINin2YTYs9is2YQg2YHYudmE2KfZi9ifJyxcclxuICAgICfZhti52YXYjCDYp9it2LDZgScsXHJcbiAgICAn2KXZhNi62KfYoSdcclxuICApLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlKGlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3dhbFNlcnZpY2Uuc3VjY2Vzcygn2KrZhSDYp9mE2K3YsNmBINio2YbYrNin2K0nKTtcclxuICAgICAgICAgIHRoaXMuYmFjaygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuIGFmdGVyU2F2ZShldmVudDogYW55KSB7XHJcbiAgdGhpcy5tb2RlbCA9IGV2ZW50LnJlc3BvbnNlO1xyXG5cclxuICAvLyBzZXQgdGhlIGlkIGZyb20gYmFja2VuZCByZXNwb25zZVxyXG4gIHRoaXMuY3VycmVudElkID0gZXZlbnQucmVzcG9uc2VbdGhpcy5pZEZpZWxkXTtcclxuXHJcbiAgaWYgKHRoaXMuaXNDcmVhdGVNb2RlKSB7XHJcbiAgICB0aGlzLmdvVG9Nb2RlKCd2aWV3Jyk7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgIHRoaXMuZ29Ub01vZGUoJ3ZpZXcnKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuZ29Ub01vZGUobW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ2NyZWF0ZScpIHtcclxuICBjb25zdCB0cmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcclxuICBjb25zdCBzZWdtZW50cyA9IHRyZWUucm9vdC5jaGlsZHJlblsncHJpbWFyeSddPy5zZWdtZW50cy5tYXAocyA9PiBzLnBhdGgpID8/IFtdO1xyXG5cclxuICBsZXQgbmV3U2VnbWVudHM6IHN0cmluZ1tdO1xyXG5cclxuICBpZiAobW9kZSA9PT0gJ2NyZWF0ZScpIHtcclxuICAgIC8vIGFsd2F5cyBuYXZpZ2F0ZSB0byBcImFkZFwiXHJcbiAgICBuZXdTZWdtZW50cyA9IFtcclxuICAgICAgLi4uc2VnbWVudHMuZmlsdGVyKHMgPT4gIVsndmlldycsICdlZGl0JywgJ2FkZCddLmluY2x1ZGVzKHMpKSxcclxuICAgICAgJ2FkZCcsXHJcbiAgICBdO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBpZiBpbiBcImFkZFwiIG1vZGUsIHJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IGlkXHJcbiAgICBpZiAoc2VnbWVudHMuaW5jbHVkZXMoJ2FkZCcpKSB7XHJcbiAgICAgIG5ld1NlZ21lbnRzID0gW1xyXG4gICAgICAgIC4uLnNlZ21lbnRzLmZpbHRlcihzID0+IHMgIT09ICdhZGQnKSxcclxuICAgICAgICBTdHJpbmcodGhpcy5jdXJyZW50SWQpLFxyXG4gICAgICAgIG1vZGUsXHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpZEluZGV4ID0gc2VnbWVudHMuZmluZEluZGV4KHMgPT4gcyA9PT0gU3RyaW5nKHRoaXMuY3VycmVudElkKSk7XHJcbiAgICAgIGlmIChpZEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgIG5ld1NlZ21lbnRzID0gWy4uLnNlZ21lbnRzLCBTdHJpbmcodGhpcy5jdXJyZW50SWQpLCBtb2RlXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdTZWdtZW50cyA9IHNlZ21lbnRzLnNsaWNlKDAsIGlkSW5kZXggKyAxKTtcclxuICAgICAgICBuZXdTZWdtZW50cy5wdXNoKG1vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdTZWdtZW50cyk7XHJcbiAgdGhpcy5yZWZyZXNoKCk7XHJcbn1cclxuXHJcblxyXG5iYWNrVG9MaXN0KCl7XHJcbiAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddKTtcclxuICAgIH1cclxuYmFjaygpe1xyXG4gICAgICAvLyAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLiddKTtcclxuICAgICAgIHRoaXMuX2xvY2F0aW9uLmJhY2soKVxyXG4gICAgfVxyXG4gIGxvYWRMaXN0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZpbHRlcnMgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBza2lwQ291bnQ6IHRoaXMucGFnZUluZGV4ICogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgc29ydGluZzogdGhpcy5zb3J0LFxyXG4gICAgICAuLi50aGlzLmN1cnJlbnRGaWx0ZXJzLFxyXG4gICAgICAuLi50aGlzLnBhZ2VGaWx0ZXJzLFxyXG4gICAgICAuLi4odGhpcy5zZWFyY2hHbG9iYWwgPyB7IGZpbHRlcjogdGhpcy5zZWFyY2hHbG9iYWwgfSA6IHt9KSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXJ2aWNlLmdldExpc3QoZmlsdGVycykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogUGFnaW5hdGVkUmVzdWx0PGFueT4pID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QgPSByZXMuaXRlbXM7XHJcbiAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXMudG90YWxDb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gc2V0IG1vZGVsXyB0byBjdXJyZW50IGlkIGl0ZW1cclxuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMubGlzdC5maW5kKHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWxfID0gZm91bmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGxpc3QnLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiBuZXh0KCkge1xyXG4gIGlmICghdGhpcy5jdXJyZW50SWQpIHJldHVybjtcclxuXHJcbiAgLy8gaW5jcmVtZW50IGN1cnJlbnRJZCBudW1lcmljYWxseVxyXG4gIC8vIGNvbnN0IG5ld0lkID0gTnVtYmVyKHRoaXMuY3VycmVudElkKSArIDE7XHJcbiAgLy8gdGhpcy5jdXJyZW50SWQgPSBuZXdJZDtcclxuICAvLyB1c2UgZ29Ub01vZGUgdG8gbmF2aWdhdGUgYW5kIGtlZXAgbW9kZVxyXG4gIGNvbnN0IGN1cnJlbnRNb2RlID0gdGhpcy5pc0VkaXRNb2RlID8gJ2VkaXQnIDogJ3ZpZXcnO1xyXG4gIC8vIHRoaXMuZ29Ub01vZGUoY3VycmVudE1vZGUpO1xyXG59XHJcblxyXG5wcmV2aW91cygpIHtcclxuICBpZiAoIXRoaXMuY3VycmVudElkKSByZXR1cm47XHJcblxyXG4gIC8vIGRlY3JlbWVudCBjdXJyZW50SWQgbnVtZXJpY2FsbHlcclxuICAvLyBjb25zdCBuZXdJZCA9IE51bWJlcih0aGlzLmN1cnJlbnRJZCkgLSAxO1xyXG4gIC8vIGlmIChuZXdJZCA8PSAwKSByZXR1cm47XHJcblxyXG4gIC8vIHRoaXMuY3VycmVudElkID0gbmV3SWQ7XHJcblxyXG4gIC8vIHVzZSBnb1RvTW9kZSB0byBuYXZpZ2F0ZSBhbmQga2VlcCBtb2RlXHJcbiAgY29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmlzRWRpdE1vZGUgPyAnZWRpdCcgOiAndmlldyc7XHJcbiAgLy8gdGhpcy5nb1RvTW9kZShjdXJyZW50TW9kZSk7XHJcbn1cclxuXHJcblxyXG4gIC8vIG5leHQoKSB7XHJcbiAgLy8gICBjb25zdCBpZHggPSB0aGlzLmxpc3QuZmluZEluZGV4KHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAvLyAgIGlmIChpZHggPj0gMCAmJiBpZHggPCB0aGlzLmxpc3QubGVuZ3RoIC0gMSkge1xyXG4gIC8vICAgICBjb25zdCBuZXdJZCA9IHRoaXMubGlzdFtpZHggKyAxXVt0aGlzLmlkRmllbGRdO1xyXG4gIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycsIG5ld0lkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJldmlvdXMoKSB7XHJcbiAgLy8gICBjb25zdCBpZHggPSB0aGlzLmxpc3QuZmluZEluZGV4KHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAvLyAgIGlmIChpZHggPiAwKSB7XHJcbiAgLy8gICAgIGNvbnN0IG5ld0lkID0gdGhpcy5saXN0W2lkeCAtIDFdW3RoaXMuaWRGaWVsZF07XHJcbiAgLy8gICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgbmV3SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG59XHJcblxyXG4iLCJcclxuQGlmIChtb2RlID09PSAnZGV0YWlsJykge1xyXG48ZGl2ICBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtY29sIGdhcC0zXCI+XHJcbiAgPCEtLSBvdmVybGF5IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCJcclxuICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy13aGl0ZS83MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB6LTUwXCI+XHJcbiAgICA8cC1wcm9ncmVzcy1zcGlubmVyLz5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBhY3R1YWwgY29udGVudCAtLT5cclxuICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgPHAtdG9vbGJhciBzdHlsZT1cImJhY2tncm91bmQ6IHRyYW5zcGFyZW50O2JvcmRlcjogMHB4O2JveC1zaGFkb3c6IG5vbmU7XCIgY2xhc3M9XCJiZy10cmFuc3BhcmVudCBzaGFkb3ctbm9uZSBib3JkZXItbm9uZSByb3VuZGVkLW1kIHB4LTNcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XHJcbiAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtbGcgeHM6aGlkZGVuIGJsb2NrXCI+e3sgdGl0bGUgfX08L3NwYW4+IC0tPlxyXG4gICAgICA8YXBwLWJyZWFkY3J1bWIgY2xhc3M9XCJ4czpibG9ja1wiIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJcIj48L2FwcC1icmVhZGNydW1iPiA8IS0tIHhzOmJsb2NrIGhpZGRlbiAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgICBpY29uPVwicGkgcGktY2hldnJvbi1yaWdodFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtIGZkLWJ0blwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCLYp9mE2KrYp9mE2YpcIlxyXG4gICAgICAgIChjbGljayk9XCJuZXh0KClcIlxyXG4gICAgICA+PC9idXR0b24+XHJcbiAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgICAgaWNvbj1cInBpIHBpLWNoZXZyb24tbGVmdFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtIGZkLWJ0blwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCLYp9mE2LPYp9io2YJcIlxyXG4gICAgICAgIChjbGljayk9XCJwcmV2aW91cygpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRvb2xiYXI+XHJcbiAgIDxwLXRvb2xiYXIgY2xhc3M9XCJiZy13aGl0ZSBzaGFkb3cgcm91bmRlZC1tZCBweC0zXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgIEBpZiAoaXNWaWV3TW9kZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMVwiPlxyXG4gICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGFjdGlvbnNfOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgIFtpY29uXT1cImFjdGlvbi5pY29uID8/ICcnXCJcclxuICAgICAgICAgIFtsYWJlbF09XCIoYWN0aW9uLmxhYmVsID8/ICcnKSB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgY2xhc3M9XCJmZC1idG5cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkFjdGlvbihhY3Rpb24sbW9kZWwpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgQGlmIChpc0VkaXRNb2RlIHx8IGlzQ3JlYXRlTW9kZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMVwiPlxyXG4gICAgICAgQGZvciAoYnRuIG9mIGNyZWF0ZUVkaXRBY3Rpb25zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgQGlmICghYnRuLnZpc2libGUgfHwgKGJ0bi52aXNpYmxlICYmIGJ0bi52aXNpYmxlID09PSB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICBAaWYgKGJ0bi50eXBlID09ICdzdWJtaXQnICYmIGlubGluZUZvcm0pIHtcclxuICAgICAgICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCInc3VibWl0J1wiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpbmxpbmVGb3JtLmxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlubGluZUZvcm0ubG9hZGluZyB8fCBmb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiYnRuLmljb25cIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImJ0bi5sYWJlbCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbdmFyaWFudF09XCJidG4udmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiYnRuLnNldmVyaXR5XCJcclxuICAgICAgICAgICAgICAgIFtzaXplXT1cImJ0bi5zaXplXCJcclxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJidG4uc3BsaXRBY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgIFtwZXJtaXNzaW9uXT1cImJ0bi5wZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImlubGluZUZvcm0ub25TdWJtaXQoKVwiXHJcbiAgICAgICAgICAgICAgPjwvbGliLWdlbmVyaWMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIEBlbHNle1xyXG4gICAgICAgICAgICAgICAgIDxsaWItZ2VuZXJpYy1idXR0b25cclxuICAgICAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJidG4ubGFiZWwgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImJ0bi5zZXZlcml0eVwiXHJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbbW9kZWxdPVwiYnRuLnNwbGl0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJoYW5kbGVDcmVhdGVFZGl0QWN0aW9uKGJ0bilcIlxyXG4gICAgICAgICAgICAgID48L2xpYi1nZW5lcmljLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPCEtLSBUYWJzIC0tPlxyXG4gIDxwLXRhYnMgdmFsdWU9XCIwXCI+XHJcbiAgICA8cC10YWJsaXN0PlxyXG4gICAgICAgQGZvciAodGFiIG9mIHRhYnNfOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8cC10YWIgdmFsdWU9XCJ7eyRpbmRleH19XCI+XHJcbiAgICAgICAgICA8aSBbY2xhc3NdPVwidGFiLmljb25cIj48L2k+XHJcbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0xIG1sLTFcIj57eyB0YWIuaGVhZGVyIH19PC9zcGFuPlxyXG4gICAgICAgIDwvcC10YWI+XHJcbiAgICAgICB9XHJcbiAgICA8L3AtdGFibGlzdD5cclxuICAgIDxwLXRhYnBhbmVscz5cclxuICAgICAgQGZvciAodGFiIG9mIHRhYnNfOyB0cmFjayAkaW5kZXgpIHtcclxuIDxwLXRhYnBhbmVsIHZhbHVlPVwie3skaW5kZXh9fVwiPlxyXG5cclxuICAgICAgPCEtLSBGb3JtbHkgZmllbGRzIC0tPlxyXG4gICAgICA8IS0tIHAtNCBncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC00IC0tPlxyXG4gICAgICA8ZGl2ICBjbGFzcz1cImJvcmRlciBib3JkZXItc3VyZmFjZSBwLTRcIj5cclxuICAgICAgICBAaWYgKHRhYi5maWVsZHMubGVuZ3RoICYmICRpbmRleCA9PSAwKSB7XHJcblxyXG4gICAgICAgPGZvcm0gKm5nSWY9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICAgICAgIEBpZiAodGFiLmZpZWxkcy5sZW5ndGggJiYgJGluZGV4ID09IDAgKSB7XHJcbiBAaWYgKGlzRWRpdE1vZGUgfHwgaXNDcmVhdGVNb2RlKSB7XHJcbiAgICAgICAgIDxhcHAtZ2VuZXJpYy1kaWFsb2dcclxuICAgICAgICAgI2lubGluZUZvcm1cclxuICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICBbZm9ybUZpZWxkc109XCJmb3JtRmllbGRzID8/IFtdXCJcclxuICAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxyXG4gICAgW2lkRmllbGRdPVwiaWRGaWVsZCA/PydpZCdcIlxyXG4gICAgW2Rpc3BsYXlNb2RlXT1cIidpbmxpbmUnXCJcclxuICAgICBbbW9kZV09XCInZm9ybS1vbmx5J1wiXHJcbiAgICAgW2ZvcmNlU3RhdGVdPVwiaXNDcmVhdGVNb2RlID8gJ2NyZWF0ZSc6J2VkaXQnXCJcclxuICAgIChhZnRlclNhdmUpPVwiYWZ0ZXJTYXZlKCRldmVudClcIlxyXG4gID5cclxuICA8L2FwcC1nZW5lcmljLWRpYWxvZz5cclxufVxyXG5AZWxzZSBpZihpc1ZpZXdNb2RlKXtcclxuIDxmb3JtbHktZm9ybVxyXG4gICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICBbZmllbGRzXT1cInRhYi5maWVsZHNcIlxyXG4gICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxufVxyXG59XHJcbiAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKHRhYi5maWVsZHMubGVuZ3RoICYmICRpbmRleCA+IDApIHtcclxuXHJcblxyXG4gICAgICAgIDxmb3JtbHktZm9ybVxyXG4gICAgICAgICAgW2Zvcm1dPVwiZ2V0Rm9ybSgkaW5kZXgpXCJcclxuICAgICAgICAgIFtmaWVsZHNdPVwidGFiLmZpZWxkc1wiXHJcbiAgICAgICAgICBbbW9kZWxdPVwidGFiLm1vZGVsIHx8IG1vZGVsXCJcclxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gQ3VzdG9tIHRlbXBsYXRlIC0tPlxyXG4gICAgICBAaWYgKHRhYi5jb250ZW50KSB7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYi5jb250ZW50XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgICA8L3AtdGFicGFuZWw+XHJcbiAgICB9XHJcbiAgICA8L3AtdGFicGFuZWxzPlxyXG4gIDwvcC10YWJzPlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gW21vZGVsXT1cIm1vZGVsXCIgLS0+XHJcbiAgPGFwcC1nZW5lcmljLWRpYWxvZ1xyXG4gICAgI2RpYWxvZ1xyXG4gICAgW2Zvcm1GaWVsZHNdPVwiZm9ybUZpZWxkcyA/PyBbXVwiXHJcbiAgICBbYXBpTmFtZV09XCJhcGlOYW1lXCJcclxuICAgIFtpZEZpZWxkXT1cImlkRmllbGQgPz8naWQnXCJcclxuICAgIFtkaXNwbGF5TW9kZV09XCJkaXNwbGF5TW9kZSA/PyAnZGlhbG9nJ1wiXHJcbiAgICAoYWZ0ZXJTYXZlKT1cImFmdGVyU2F2ZSgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9hcHAtZ2VuZXJpYy1kaWFsb2c+XHJcbn1cclxuIl19","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericViewModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12aWV3LW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXZpZXcvc3JjL2xpYi9nZW5lcmljLXZpZXctbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8saUJBQWlCO3VHQUFqQixpQkFBaUI7d0dBQWpCLGlCQUFpQixZQUZsQixZQUFZO3dHQUVYLGlCQUFpQixZQUZsQixZQUFZOzsyRkFFWCxpQkFBaUI7a0JBSDdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZpZXdNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdmlldy9zcmMvZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"elite.framework-ng.ui.core-generic-view.mjs","sources":["../tmp-esm2022/generic-view/lib/generic-view.js","../tmp-esm2022/generic-view/lib/generic-view-module.js","../tmp-esm2022/generic-view/elite.framework-ng.ui.core-generic-view.js"],"sourcesContent":["import { TooltipModule } from 'primeng/tooltip';\nimport { Component, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';\nimport { CommonModule, Location } from '@angular/common';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ButtonModule } from 'primeng/button';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { TabsModule } from 'primeng/tabs';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BreadcrumbComponent } from '@elite.framework/ng.ui.core/breadcrumb';\nimport { BaseService, SwalService } from '@elite.framework/ng.core/services';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';\nimport { GenericButton } from '@elite.framework/ng.ui.core/generic-button';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/toolbar\";\nimport * as i3 from \"primeng/api\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"primeng/tabs\";\nimport * as i6 from \"@angular/forms\";\nimport * as i7 from \"primeng/tooltip\";\nimport * as i8 from \"primeng/progressspinner\";\nimport * as i9 from \"@ngx-translate/core\";\nexport class GenericViewComponent {\n route = inject(ActivatedRoute);\n router = inject(Router);\n form = new UntypedFormGroup({});\n title = '';\n actions = [];\n createEditActions = [];\n actions_ = [];\n tabs = [];\n viewMode = true;\n breadcrumb;\n service = inject(BaseService);\n formFields = [];\n apiName = '';\n idField = 'id';\n standaloneMode = false;\n isViewMode = true; // وضع المشاهدة فقط\n isCreateMode = false; // وضع الاضافة فقط\n isEditMode = false; // وضع التعديل\n model = {};\n displayMode = 'drawer';\n mode = 'full';\n action = new EventEmitter();\n afterDelete = new EventEmitter();\n dialog;\n inlineForm;\n tabs_ = [];\n model_ = {};\n currentId;\n list = [];\n totalRecords = 0;\n loading = false;\n // pagination state\n pageSize = 10;\n pageIndex = 0;\n sort = '';\n currentFilters = {};\n pageFilters = {};\n searchGlobal = '';\n swalService = inject(SwalService);\n _location = inject(Location);\n ngOnInit() {\n this.loading = true;\n if (this.apiName) {\n this.service.apiName = this.apiName;\n }\n this.actions_ = this.actions.filter(c => c.name != 'view');\n this.route.paramMap.subscribe(params => {\n const id = params.get(this.idField);\n if (id) {\n this.currentId = id;\n if (this.standaloneMode) {\n this.loadList();\n }\n }\n this.refresh();\n });\n }\n refresh() {\n // detect mode based on route\n const url = this.router.url.toLowerCase();\n this.isViewMode = url.includes('/view');\n this.isEditMode = url.includes('/edit');\n this.isCreateMode = url.includes('/create') || url.endsWith('/new') || url.endsWith('/add');\n this.tabs_ = [];\n for (let i = 0; i < this.tabs.length; i++) {\n const t = this.tabs[i];\n this.tabs_.push({\n ...t,\n fields: [\n {\n props: { label: '' },\n fieldGroupClassName: 'grid grid-cols-1 md:grid-cols-2 gap-3',\n fieldGroup: this.isCreateMode || this.isEditMode\n ? this.getCreateEditFields(i == 0 ? this.formFields : t.fields)\n : this.getViewFields(i == 0 ? this.formFields : t.fields),\n },\n ],\n });\n }\n this.loading = false;\n }\n // as form\n getCreateEditFields(fields = []) {\n return fields.map(f => ({\n ...f,\n props: { ...f.props, readonly: this.viewMode, disabled: this.viewMode },\n }));\n }\n getViewFields(fields = []) {\n const flatten = (fields) => fields.flatMap(field => {\n // 1. HANDLE NORMAL FIELD GROUP\n if (field.fieldGroup?.length) {\n return flatten(field.fieldGroup);\n }\n // 2. HANDLE FIELD ARRAY (REPEAT)\n const fieldArrayConfig = typeof field.fieldArray === 'function'\n ? field.fieldArray(field)\n : field.fieldArray;\n if (field.fieldArray) {\n // If the whole array is hidden in view, skip it\n if (field.props && (field.props['view']?.hidden))\n return [];\n const children = flatten(fieldArrayConfig?.fieldGroup || []);\n // IF NO CHILDREN RETURN EMPTY\n if (!children.length)\n return [];\n // Return copy of repeat wrapper but in view-mode\n return [{\n ...field,\n type: field.props ? field.props['view']?.type || field.type : 'custom-label-type',\n readonly: this.viewMode,\n disabled: this.viewMode,\n fieldArray: {\n ...fieldArrayConfig,\n fieldGroup: children\n }\n }];\n }\n // 3. NORMAL FIELD (SINGLE)\n if (!field.props ||\n field.props['view']?.hidden) {\n return [];\n }\n const type = field.props['view']?.type ||\n field.props['table']?.type ||\n field.props['filter']?.type ||\n 'custom-label-type';\n return [{\n type,\n key: field.key,\n readonly: this.viewMode,\n disabled: this.viewMode,\n wrappers: field.wrappers ?? ['field-wrapper'],\n className: field.className,\n props: {\n ...field.props,\n ...(field.props['view']?.props ||\n field.props['table']?.props ||\n field.props['filter']?.props ||\n {}),\n },\n expressions: field.props['view']?.expressions ||\n field.props['table']?.expressions ||\n field.props['filter']?.expressions\n }];\n });\n return flatten(fields);\n }\n // getViewFields(fields: FormlyFieldConfig[] = []): FormlyFieldConfig[] {\n // const flatten = (fields: FormlyFieldConfig[]): FormlyFieldConfig[] =>\n // fields.flatMap(field => {\n // if (field.fieldGroup?.length) return flatten(field.fieldGroup);\n // if (!field.props\n // || field.props['view']?.hidden\n // // || field.props['table']?.hidden\n // ) return [];\n // const type = field.props['view']?.type || field.props['table']?.type || 'custom-label-type';\n // return [{\n // type,\n // key: field['key'],\n // readonly: this.viewMode,\n // disabled: this.viewMode,\n // wrappers: field.wrappers ?? ['field-wrapper'],\n // props: {\n // ...field.props,\n // ...(field.props['view']?.props || field.props['table']?.props),\n // },\n // expressions: field.props['view']?.expressions || field.props['view']?.expressions,\n // }];\n // });\n // return flatten(fields);\n // }\n // Use a map to store form groups for each row and column\n cellForms = new Map();\n getForm(rowIndex) {\n const key = `${rowIndex}_`;\n let form = this.cellForms.get(key);\n if (!form) {\n form = new FormGroup({});\n this.cellForms.set(key, form);\n }\n return form;\n }\n async handleCreateEditAction(btn) {\n try {\n if (btn.action) {\n // Execute the provided action\n await btn.action(null); // You can pass row or context here\n }\n else {\n // Fallback to emitting event\n if (btn.actionName == 'cancel') {\n this.back();\n }\n else {\n this.action.emit({\n name: btn.actionName ?? 'cancel',\n row: null, // provide row if available\n });\n }\n }\n }\n catch (err) {\n console.error('Button action error', err);\n }\n }\n onAction(act, model) {\n if (act.action) {\n act.action(model);\n }\n else {\n // this.action.emit({ name: act.name, row:model });\n this.emitAction({ name: act.name, row: model });\n }\n }\n emitAction(event) {\n switch (event.name) {\n case 'edit':\n this.dialog.openForm(\"edit\", event.row);\n break;\n case 'delete':\n this.onDelete(event.row);\n break;\n default:\n this.action.emit(event);\n break;\n }\n }\n onDelete(item) {\n const id = item[this.idField];\n this.swalService.confirm('تأكيد الحذف', 'هل تريد حذف هذا السجل فعلاً؟', 'نعم، احذف', 'إلغاء').then((result) => {\n if (result.isConfirmed) {\n this.service.delete(id).subscribe({\n next: () => {\n this.swalService.success('تم الحذف بنجاح');\n this.back();\n },\n error: (err) => {\n this.loading = false;\n }\n });\n }\n });\n }\n afterSave(event) {\n this.model = event.response;\n // set the id from backend response\n this.currentId = event.response[this.idField];\n if (this.isCreateMode) {\n this.goToMode('view');\n }\n else if (this.isEditMode) {\n this.goToMode('view');\n }\n }\n goToMode(mode) {\n const tree = this.router.parseUrl(this.router.url);\n const segments = tree.root.children['primary']?.segments.map(s => s.path) ?? [];\n let newSegments;\n if (mode === 'create') {\n // always navigate to \"add\"\n newSegments = [\n ...segments.filter(s => !['view', 'edit', 'add'].includes(s)),\n 'add',\n ];\n }\n else {\n // if in \"add\" mode, replace it with the new id\n if (segments.includes('add')) {\n newSegments = [\n ...segments.filter(s => s !== 'add'),\n String(this.currentId),\n mode,\n ];\n }\n else {\n const idIndex = segments.findIndex(s => s === String(this.currentId));\n if (idIndex === -1) {\n newSegments = [...segments, String(this.currentId), mode];\n }\n else {\n newSegments = segments.slice(0, idIndex + 1);\n newSegments.push(mode);\n }\n }\n }\n this.router.navigate(newSegments);\n this.refresh();\n }\n backToList() {\n this.router.navigate(['../']);\n }\n back() {\n // this.router.navigate(['..']);\n this._location.back();\n }\n loadList() {\n this.loading = true;\n const filters = {\n maxResultCount: this.pageSize,\n skipCount: this.pageIndex * this.pageSize,\n sorting: this.sort,\n ...this.currentFilters,\n ...this.pageFilters,\n ...(this.searchGlobal ? { filter: this.searchGlobal } : {}),\n };\n this.service.getList(filters).subscribe({\n next: (res) => {\n this.list = res.items;\n this.totalRecords = res.totalCount;\n this.loading = false;\n // set model_ to current id item\n const found = this.list.find(x => x[this.idField] == this.currentId);\n if (found) {\n this.model_ = found;\n }\n },\n error: err => {\n console.error('Error loading list', err);\n this.loading = false;\n }\n });\n }\n next() {\n if (!this.currentId)\n return;\n // increment currentId numerically\n // const newId = Number(this.currentId) + 1;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n previous() {\n if (!this.currentId)\n return;\n // decrement currentId numerically\n // const newId = Number(this.currentId) - 1;\n // if (newId <= 0) return;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericViewComponent, isStandalone: true, selector: \"app-detail-view\", inputs: { title: \"title\", actions: \"actions\", createEditActions: \"createEditActions\", tabs: \"tabs\", viewMode: \"viewMode\", breadcrumb: \"breadcrumb\", service: \"service\", formFields: \"formFields\", apiName: \"apiName\", idField: \"idField\", standaloneMode: \"standaloneMode\", isViewMode: \"isViewMode\", isCreateMode: \"isCreateMode\", isEditMode: \"isEditMode\", model: \"model\", displayMode: \"displayMode\", mode: \"mode\", loading: \"loading\" }, outputs: { action: \"action\", afterDelete: \"afterDelete\" }, viewQueries: [{ propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }, { propertyName: \"inlineForm\", first: true, predicate: [\"inlineForm\"], descendants: true }], ngImport: i0, template: \"\\r\\n@if (mode === 'detail') {\\r\\n<div class=\\\"w-full flex flex-col gap-3\\\">\\r\\n <!-- overlay -->\\r\\n <div *ngIf=\\\"loading\\\"\\r\\n class=\\\"absolute inset-0 bg-white/70 flex items-center justify-center z-50\\\">\\r\\n <p-progress-spinner/>\\r\\n </div>\\r\\n\\r\\n <!-- actual content -->\\r\\n <!-- Toolbar -->\\r\\n <p-toolbar style=\\\"background: transparent;border: 0px;box-shadow: none;\\\" class=\\\"bg-transparent shadow-none border-none rounded-md px-3\\\">\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n <!-- <span class=\\\"font-semibold text-lg xs:hidden block\\\">{{ title }}</span> -->\\r\\n <app-breadcrumb class=\\\"xs:block\\\" [breadcrumb]=\\\"breadcrumb\\\"></app-breadcrumb> <!-- xs:block hidden -->\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u062A\\u0627\\u0644\\u064A\\\"\\r\\n (click)=\\\"next()\\\"\\r\\n ></button>\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\\"\\r\\n (click)=\\\"previous()\\\"\\r\\n ></button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-toolbar>\\r\\n <p-toolbar class=\\\"bg-white shadow rounded-md px-3\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n @if (isViewMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (action of actions_; track $index) {\\r\\n <button\\r\\n pButton pRipple\\r\\n [icon]=\\\"action.icon ?? ''\\\"\\r\\n [label]=\\\"(action.label ?? '') | translate\\\"\\r\\n class=\\\"fd-btn\\\"\\r\\n (click)=\\\"onAction(action,model)\\\"\\r\\n ></button>\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (btn of createEditActions; track $index) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n @if (btn.type == 'submit' && inlineForm) {\\r\\n <lib-generic-button\\r\\n [type]=\\\"'submit'\\\"\\r\\n [loading]=\\\"inlineForm.loading\\\"\\r\\n [disabled]=\\\"inlineForm.loading || form.invalid\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"inlineForm.onSubmit()\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n @else{\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleCreateEditAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n\\r\\n </p-toolbar>\\r\\n\\r\\n <!-- Tabs -->\\r\\n <p-tabs value=\\\"0\\\">\\r\\n <p-tablist>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tab value=\\\"{{$index}}\\\">\\r\\n <i [class]=\\\"tab.icon\\\"></i>\\r\\n <span class=\\\"mr-1 ml-1\\\">{{ tab.header }}</span>\\r\\n </p-tab>\\r\\n }\\r\\n </p-tablist>\\r\\n <p-tabpanels>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tabpanel value=\\\"{{$index}}\\\">\\r\\n\\r\\n <!-- Formly fields -->\\r\\n <!-- p-4 grid grid-cols-1 md:grid-cols-2 gap-4 -->\\r\\n <div class=\\\"border border-surface p-4\\\">\\r\\n @if (tab.fields.length && $index == 0) {\\r\\n\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\">\\r\\n @if (tab.fields.length && $index == 0 ) {\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <app-generic-dialog\\r\\n #inlineForm\\r\\n [form]=\\\"form\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"'inline'\\\"\\r\\n [mode]=\\\"'form-only'\\\"\\r\\n [forceState]=\\\"isCreateMode ? 'create':'edit'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n@else if(isViewMode){\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n ></formly-form>\\r\\n}\\r\\n}\\r\\n </form>\\r\\n\\r\\n }\\r\\n @if (tab.fields.length && $index > 0) {\\r\\n\\r\\n\\r\\n <formly-form\\r\\n [form]=\\\"getForm($index)\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"tab.model || model\\\"\\r\\n ></formly-form>\\r\\n\\r\\n }\\r\\n\\r\\n <!-- Custom template -->\\r\\n @if (tab.content) {\\r\\n <ng-container *ngTemplateOutlet=\\\"tab.content\\\"></ng-container>\\r\\n }\\r\\n </div>\\r\\n </p-tabpanel>\\r\\n }\\r\\n </p-tabpanels>\\r\\n </p-tabs>\\r\\n</div>\\r\\n\\r\\n<!-- [model]=\\\"model\\\" -->\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"displayMode ?? 'dialog'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"component\", type: i2.Toolbar, selector: \"p-toolbar\", inputs: [\"styleClass\", \"ariaLabelledBy\"] }, { kind: \"directive\", type: i3.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i4.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: TabsModule }, { kind: \"component\", type: i5.Tabs, selector: \"p-tabs\", inputs: [\"value\", \"scrollable\", \"lazy\", \"selectOnFocus\", \"showNavigators\", \"tabindex\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i5.TabPanels, selector: \"p-tabpanels\" }, { kind: \"component\", type: i5.TabPanel, selector: \"p-tabpanel\", inputs: [\"value\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i5.TabList, selector: \"p-tablist\" }, { kind: \"component\", type: i5.Tab, selector: \"p-tab\", inputs: [\"value\", \"disabled\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: FormsModule }, { 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: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i6.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"component\", type: BreadcrumbComponent, selector: \"app-breadcrumb\", inputs: [\"breadcrumb\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i7.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"component\", type: GenericDialogComponent, selector: \"app-generic-dialog\", inputs: [\"form\", \"service\", \"formFields\", \"model\", \"apiName\", \"idField\", \"dialogMaxWidth\", \"displayMode\", \"mode\", \"forceState\", \"drawerVisible\", \"dialogVisible\", \"isViewMode\", \"isEditMode\", \"useConfirmOnSave\", \"loading\", \"errorMsg\", \"errorMessage\", \"beforeSaveTransform\", \"hideTable\", \"autoShowForm\"], outputs: [\"action\", \"afterSave\", \"afterDelete\", \"beforeSave\", \"beforeDelete\", \"formCancel\", \"formInit\", \"dataLoaded\", \"selectionChange\", \"error\", \"visibleChange\"] }, { kind: \"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: ProgressSpinnerModule }, { kind: \"component\", type: i8.ProgressSpinner, selector: \"p-progressSpinner, p-progress-spinner, p-progressspinner\", inputs: [\"styleClass\", \"strokeWidth\", \"fill\", \"animationDuration\", \"ariaLabel\"] }, { kind: \"pipe\", type: i9.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-detail-view', standalone: true, imports: [\n CommonModule,\n ToolbarModule,\n ButtonModule,\n TabsModule,\n FormlyForm,\n FormsModule,\n ReactiveFormsModule,\n TranslateModule,\n BreadcrumbComponent,\n TooltipModule,\n GenericDialogComponent,\n GenericButton,\n ProgressSpinnerModule\n ], template: \"\\r\\n@if (mode === 'detail') {\\r\\n<div class=\\\"w-full flex flex-col gap-3\\\">\\r\\n <!-- overlay -->\\r\\n <div *ngIf=\\\"loading\\\"\\r\\n class=\\\"absolute inset-0 bg-white/70 flex items-center justify-center z-50\\\">\\r\\n <p-progress-spinner/>\\r\\n </div>\\r\\n\\r\\n <!-- actual content -->\\r\\n <!-- Toolbar -->\\r\\n <p-toolbar style=\\\"background: transparent;border: 0px;box-shadow: none;\\\" class=\\\"bg-transparent shadow-none border-none rounded-md px-3\\\">\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n <!-- <span class=\\\"font-semibold text-lg xs:hidden block\\\">{{ title }}</span> -->\\r\\n <app-breadcrumb class=\\\"xs:block\\\" [breadcrumb]=\\\"breadcrumb\\\"></app-breadcrumb> <!-- xs:block hidden -->\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u062A\\u0627\\u0644\\u064A\\\"\\r\\n (click)=\\\"next()\\\"\\r\\n ></button>\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\\"\\r\\n (click)=\\\"previous()\\\"\\r\\n ></button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-toolbar>\\r\\n <p-toolbar class=\\\"bg-white shadow rounded-md px-3\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n @if (isViewMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (action of actions_; track $index) {\\r\\n <button\\r\\n pButton pRipple\\r\\n [icon]=\\\"action.icon ?? ''\\\"\\r\\n [label]=\\\"(action.label ?? '') | translate\\\"\\r\\n class=\\\"fd-btn\\\"\\r\\n (click)=\\\"onAction(action,model)\\\"\\r\\n ></button>\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (btn of createEditActions; track $index) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n @if (btn.type == 'submit' && inlineForm) {\\r\\n <lib-generic-button\\r\\n [type]=\\\"'submit'\\\"\\r\\n [loading]=\\\"inlineForm.loading\\\"\\r\\n [disabled]=\\\"inlineForm.loading || form.invalid\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"inlineForm.onSubmit()\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n @else{\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleCreateEditAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n\\r\\n </p-toolbar>\\r\\n\\r\\n <!-- Tabs -->\\r\\n <p-tabs value=\\\"0\\\">\\r\\n <p-tablist>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tab value=\\\"{{$index}}\\\">\\r\\n <i [class]=\\\"tab.icon\\\"></i>\\r\\n <span class=\\\"mr-1 ml-1\\\">{{ tab.header }}</span>\\r\\n </p-tab>\\r\\n }\\r\\n </p-tablist>\\r\\n <p-tabpanels>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tabpanel value=\\\"{{$index}}\\\">\\r\\n\\r\\n <!-- Formly fields -->\\r\\n <!-- p-4 grid grid-cols-1 md:grid-cols-2 gap-4 -->\\r\\n <div class=\\\"border border-surface p-4\\\">\\r\\n @if (tab.fields.length && $index == 0) {\\r\\n\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\">\\r\\n @if (tab.fields.length && $index == 0 ) {\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <app-generic-dialog\\r\\n #inlineForm\\r\\n [form]=\\\"form\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"'inline'\\\"\\r\\n [mode]=\\\"'form-only'\\\"\\r\\n [forceState]=\\\"isCreateMode ? 'create':'edit'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n@else if(isViewMode){\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"model\\\"\\r\\n ></formly-form>\\r\\n}\\r\\n}\\r\\n </form>\\r\\n\\r\\n }\\r\\n @if (tab.fields.length && $index > 0) {\\r\\n\\r\\n\\r\\n <formly-form\\r\\n [form]=\\\"getForm($index)\\\"\\r\\n [fields]=\\\"tab.fields\\\"\\r\\n [model]=\\\"tab.model || model\\\"\\r\\n ></formly-form>\\r\\n\\r\\n }\\r\\n\\r\\n <!-- Custom template -->\\r\\n @if (tab.content) {\\r\\n <ng-container *ngTemplateOutlet=\\\"tab.content\\\"></ng-container>\\r\\n }\\r\\n </div>\\r\\n </p-tabpanel>\\r\\n }\\r\\n </p-tabpanels>\\r\\n </p-tabs>\\r\\n</div>\\r\\n\\r\\n<!-- [model]=\\\"model\\\" -->\\r\\n <app-generic-dialog\\r\\n #dialog\\r\\n [formFields]=\\\"formFields ?? []\\\"\\r\\n [apiName]=\\\"apiName\\\"\\r\\n [idField]=\\\"idField ??'id'\\\"\\r\\n [displayMode]=\\\"displayMode ?? 'dialog'\\\"\\r\\n (afterSave)=\\\"afterSave($event)\\\"\\r\\n >\\r\\n </app-generic-dialog>\\r\\n}\\r\\n\" }]\n }], propDecorators: { title: [{\n type: Input\n }], actions: [{\n type: Input\n }], createEditActions: [{\n type: Input\n }], tabs: [{\n type: Input\n }], viewMode: [{\n type: Input\n }], breadcrumb: [{\n type: Input\n }], service: [{\n type: Input\n }], formFields: [{\n type: Input\n }], apiName: [{\n type: Input\n }], idField: [{\n type: Input\n }], standaloneMode: [{\n type: Input\n }], isViewMode: [{\n type: Input\n }], isCreateMode: [{\n type: Input\n }], isEditMode: [{\n type: Input\n }], model: [{\n type: Input\n }], displayMode: [{\n type: Input\n }], mode: [{\n type: Input\n }], action: [{\n type: Output\n }], afterDelete: [{\n type: Output\n }], dialog: [{\n type: ViewChild,\n args: ['dialog']\n }], inlineForm: [{\n type: ViewChild,\n args: ['inlineForm']\n }], loading: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdmlldy9zcmMvbGliL2dlbmVyaWMtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXZpZXcvc3JjL2xpYi9nZW5lcmljLXZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlC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LGNBQ2YsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2Isc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLHFCQUFxQjtxQkFDdEI7OEJBU1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUUsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNFLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0UsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQW5CLEtBQUs7Z0JBV0MsSUFBSTtzQkFBWixLQUFLO2dCQUVPLE1BQU07c0JBQWYsTUFBTTtnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVjLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDTSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBUWhCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRvb2xiYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2xiYXInO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IEZvcm1seUZvcm0sIEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJDb21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvYnJlYWRjcnVtYic7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBTd2FsU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBY3Rpb25EZWYsIEJ1dHRvbkNvbmZpZywgUGFnaW5hdGVkUmVzdWx0IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcclxuaW1wb3J0IHsgR2VuZXJpY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWRpYWxvZyc7XHJcbmltcG9ydCB7IEdlbmVyaWNCdXR0b24gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1idXR0b24nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZXRhaWxUYWIge1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xyXG4gIG1vZGVsPzogYW55O1xyXG4gIGNvbnRlbnQ/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kZXRhaWwtdmlldycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUb29sYmFyTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgVGFic01vZHVsZSxcclxuICAgIEZvcm1seUZvcm0sXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBCcmVhZGNydW1iQ29tcG9uZW50LFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIEdlbmVyaWNEaWFsb2dDb21wb25lbnQsXHJcbiAgICBHZW5lcmljQnV0dG9uLFxyXG4gICAgUHJvZ3Jlc3NTcGlubmVyTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy12aWV3Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xyXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gIGZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gIEBJbnB1dCgpIHRpdGxlID0gJyc7XHJcbiAgQElucHV0KCkgYWN0aW9uczogQWN0aW9uRGVmPGFueT5bXSA9IFtdO1xyXG4gICBASW5wdXQoKSBjcmVhdGVFZGl0QWN0aW9uczogQnV0dG9uQ29uZmlnW10gPSBbXTtcclxuICAgYWN0aW9uc186IEFjdGlvbkRlZjxhbnk+W10gPSBbXTtcclxuICBASW5wdXQoKSB0YWJzOiBEZXRhaWxUYWJbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHZpZXdNb2RlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBicmVhZGNydW1iOiBNZW51SXRlbVtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNlcnZpY2U6IEJhc2VTZXJ2aWNlID0gaW5qZWN0KEJhc2VTZXJ2aWNlKTtcclxuICBASW5wdXQoKSBmb3JtRmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgYXBpTmFtZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGlkRmllbGQgPSAnaWQnO1xyXG4gQElucHV0KCkgc3RhbmRhbG9uZU1vZGUgPSBmYWxzZTtcclxuIEBJbnB1dCgpIGlzVmlld01vZGUgPSB0cnVlOyAvLyDZiNi22Lkg2KfZhNmF2LTYp9mH2K/YqSDZgdmC2LdcclxuIEBJbnB1dCgpIGlzQ3JlYXRlTW9kZSA9IGZhbHNlOyAvLyDZiNi22Lkg2KfZhNin2LbYp9mB2Kkg2YHZgti3XHJcbiAgQElucHV0KCkgaXNFZGl0TW9kZSA9IGZhbHNlOyAvLyDZiNi22Lkg2KfZhNiq2LnYr9mK2YRcclxuIEBJbnB1dCgpIG1vZGVsID0ge307XHJcbiAgQElucHV0KCkgZGlzcGxheU1vZGU6XHJcbiAgICB8ICdkcmF3ZXInXHJcbiAgICB8ICdkaWFsb2cnXHJcbiAgICB8ICdyb3V0ZSdcclxuICAgIHwgJ2lubGluZSdcclxuICAgIHwgUGFydGlhbDxcclxuICAgICAgUmVjb3JkPFxyXG4gICAgICAgICdhZGQnIHwgJ2VkaXQnIHwgJ3ZpZXcnLFxyXG4gICAgICAgICdkcmF3ZXInIHwgJ2RpYWxvZycgfCAncm91dGUnIHwgJ2lubGluZSdcclxuICAgICAgPlxyXG4gICAgPiA9ICdkcmF3ZXInO1xyXG5ASW5wdXQoKSBtb2RlOiAnZnVsbCcgfCAnZm9ybS1vbmx5JyB8ICd0YWJsZS1vbmx5JyB8ICdkZXRhaWwnID0gJ2Z1bGwnO1xyXG5cclxuICAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHJvdzogYW55IH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgYWZ0ZXJEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBhbnk7IHJlc3BvbnNlPzogYW55IH0+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nJykgZGlhbG9nITogR2VuZXJpY0RpYWxvZ0NvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUZvcm0nKSBpbmxpbmVGb3JtITogR2VuZXJpY0RpYWxvZ0NvbXBvbmVudDtcclxuXHJcbiAgdGFic186IERldGFpbFRhYltdID0gW107XHJcbiAgbW9kZWxfOiBhbnkgPSB7fTtcclxuXHJcbiAgY3VycmVudElkITogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGxpc3Q6IGFueVtdID0gW107XHJcbiAgdG90YWxSZWNvcmRzID0gMDtcclxuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vIHBhZ2luYXRpb24gc3RhdGVcclxuICBwYWdlU2l6ZSA9IDEwO1xyXG4gIHBhZ2VJbmRleCA9IDA7XHJcbiAgc29ydCA9ICcnO1xyXG4gIGN1cnJlbnRGaWx0ZXJzOiBhbnkgPSB7fTtcclxuICBwYWdlRmlsdGVyczogYW55ID0ge307XHJcbiAgc2VhcmNoR2xvYmFsID0gJyc7XHJcbiBwcml2YXRlIHN3YWxTZXJ2aWNlID0gaW5qZWN0KFN3YWxTZXJ2aWNlKTtcclxuXHJcbiBfbG9jYXRpb246IExvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuYXBpTmFtZSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UuYXBpTmFtZSA9IHRoaXMuYXBpTmFtZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5hY3Rpb25zXyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoYz0+Yy5uYW1lICE9ICd2aWV3Jyk7XHJcblxyXG4gICAgICB0aGlzLnJvdXRlLnBhcmFtTWFwLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpZCA9IHBhcmFtcy5nZXQodGhpcy5pZEZpZWxkKTtcclxuICAgICAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SWQgPSBpZDtcclxuICAgICAgICAgICAgICAgaWYodGhpcy5zdGFuZGFsb25lTW9kZSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkTGlzdCgpO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcblxyXG4gICAgICAgICAgfSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHJlZnJlc2goKXtcclxuXHJcbiAgICAvLyBkZXRlY3QgbW9kZSBiYXNlZCBvbiByb3V0ZVxyXG4gIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgIHRoaXMuaXNWaWV3TW9kZSA9IHVybC5pbmNsdWRlcygnL3ZpZXcnKTtcclxuICB0aGlzLmlzRWRpdE1vZGUgPSB1cmwuaW5jbHVkZXMoJy9lZGl0Jyk7XHJcbiAgdGhpcy5pc0NyZWF0ZU1vZGUgPSB1cmwuaW5jbHVkZXMoJy9jcmVhdGUnKSB8fCB1cmwuZW5kc1dpdGgoJy9uZXcnKSB8fCB1cmwuZW5kc1dpdGgoJy9hZGQnKTtcclxuXHJcbiAgdGhpcy50YWJzXyA9IFtdO1xyXG5mb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFicy5sZW5ndGg7IGkrKykge1xyXG4gIGNvbnN0IHQgPSB0aGlzLnRhYnNbaV07XHJcbiAgdGhpcy50YWJzXy5wdXNoKHtcclxuICAgIC4uLnQsXHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAge1xyXG4gICAgICAgIHByb3BzOiB7IGxhYmVsOiAnJyB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6ICdncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC0zJyxcclxuICAgICAgICBmaWVsZEdyb3VwOlxyXG4gICAgICAgICAgdGhpcy5pc0NyZWF0ZU1vZGUgfHwgdGhpcy5pc0VkaXRNb2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDcmVhdGVFZGl0RmllbGRzKGkgPT0gMCA/IHRoaXMuZm9ybUZpZWxkczogdC5maWVsZHMpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRWaWV3RmllbGRzKGkgPT0gMCA/IHRoaXMuZm9ybUZpZWxkcyA6IHQuZmllbGRzKSxcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgfSk7XHJcbn1cclxudGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG4gIC8vIGFzIGZvcm1cclxuICAgZ2V0Q3JlYXRlRWRpdEZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZiA9PiAoe1xyXG4gICAgICAuLi5mLFxyXG4gICAgICBwcm9wczogeyAuLi5mLnByb3BzLCByZWFkb25seTogdGhpcy52aWV3TW9kZSwgZGlzYWJsZWQ6IHRoaXMudmlld01vZGUgfSxcclxuICAgIH0pKTtcclxuICB9XHJcbiAgZ2V0Vmlld0ZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gIGNvbnN0IGZsYXR0ZW4gPSAoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogRm9ybWx5RmllbGRDb25maWdbXSA9PlxyXG4gICAgZmllbGRzLmZsYXRNYXAoZmllbGQgPT4ge1xyXG5cclxuICAgICAgLy8gMS4gSEFORExFIE5PUk1BTCBGSUVMRCBHUk9VUFxyXG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZsYXR0ZW4oZmllbGQuZmllbGRHcm91cCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIDIuIEhBTkRMRSBGSUVMRCBBUlJBWSAoUkVQRUFUKVxyXG4gICAgICAgICAgIGNvbnN0IGZpZWxkQXJyYXlDb25maWcgPVxyXG4gICAgICAgICAgdHlwZW9mIGZpZWxkLmZpZWxkQXJyYXkgPT09ICdmdW5jdGlvbidcclxuICAgICAgICAgICAgPyBmaWVsZC5maWVsZEFycmF5KGZpZWxkKVxyXG4gICAgICAgICAgICA6IGZpZWxkLmZpZWxkQXJyYXk7XHJcblxyXG4gICAgICBpZiAoZmllbGQuZmllbGRBcnJheSkge1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgd2hvbGUgYXJyYXkgaXMgaGlkZGVuIGluIHZpZXcsIHNraXAgaXRcclxuICAgICAgICBpZiAoZmllbGQucHJvcHMgJiYgKFxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ3ZpZXcnXT8uaGlkZGVuKVxyXG4gICAgICAgICkgcmV0dXJuIFtdO1xyXG5cclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZsYXR0ZW4oZmllbGRBcnJheUNvbmZpZz8uZmllbGRHcm91cHx8IFtdKTtcclxuXHJcbiAgICAgICAgLy8gSUYgTk8gQ0hJTERSRU4gUkVUVVJOIEVNUFRZXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIGNvcHkgb2YgcmVwZWF0IHdyYXBwZXIgYnV0IGluIHZpZXctbW9kZVxyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgLi4uZmllbGQsXHJcbiAgICAgICAgICB0eXBlOiBmaWVsZC5wcm9wcyA/IGZpZWxkLnByb3BzWyd2aWV3J10/LnR5cGUgfHwgZmllbGQudHlwZSA6ICAnY3VzdG9tLWxhYmVsLXR5cGUnLFxyXG4gICAgICAgICAgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsXHJcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICAgIGZpZWxkQXJyYXk6IHtcclxuICAgICAgICAgICAgLi4uZmllbGRBcnJheUNvbmZpZyxcclxuICAgICAgICAgICAgZmllbGRHcm91cDogY2hpbGRyZW5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMy4gTk9STUFMIEZJRUxEIChTSU5HTEUpXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhZmllbGQucHJvcHMgfHxcclxuICAgICAgICBmaWVsZC5wcm9wc1sndmlldyddPy5oaWRkZW5cclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0eXBlID1cclxuICAgICAgICBmaWVsZC5wcm9wc1sndmlldyddPy50eXBlIHx8XHJcbiAgICAgICAgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnR5cGUgfHxcclxuICAgICAgICBmaWVsZC5wcm9wc1snZmlsdGVyJ10/LnR5cGUgfHxcclxuICAgICAgICAnY3VzdG9tLWxhYmVsLXR5cGUnO1xyXG5cclxuICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBrZXk6IGZpZWxkLmtleSxcclxuICAgICAgICByZWFkb25seTogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICB3cmFwcGVyczogZmllbGQud3JhcHBlcnMgPz8gWydmaWVsZC13cmFwcGVyJ10sXHJcbiAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIC4uLmZpZWxkLnByb3BzLFxyXG4gICAgICAgICAgLi4uKGZpZWxkLnByb3BzWyd2aWV3J10/LnByb3BzIHx8XHJcbiAgICAgICAgICAgIGZpZWxkLnByb3BzWyd0YWJsZSddPy5wcm9wcyB8fFxyXG4gICAgICAgICAgICBmaWVsZC5wcm9wc1snZmlsdGVyJ10/LnByb3BzIHx8XHJcbiAgICAgICAgICAgIHt9KSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGV4cHJlc3Npb25zOlxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMgfHxcclxuICAgICAgICAgIGZpZWxkLnByb3BzWyd0YWJsZSddPy5leHByZXNzaW9ucyB8fFxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ2ZpbHRlciddPy5leHByZXNzaW9uc1xyXG4gICAgICB9XTtcclxuICAgIH0pO1xyXG5cclxuICByZXR1cm4gZmxhdHRlbihmaWVsZHMpO1xyXG59XHJcblxyXG4gIC8vIGdldFZpZXdGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAvLyAgIGNvbnN0IGZsYXR0ZW4gPSAoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogRm9ybWx5RmllbGRDb25maWdbXSA9PlxyXG4gIC8vICAgICBmaWVsZHMuZmxhdE1hcChmaWVsZCA9PiB7XHJcbiAgLy8gICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXA/Lmxlbmd0aCkgcmV0dXJuIGZsYXR0ZW4oZmllbGQuZmllbGRHcm91cCk7XHJcbiAgLy8gICAgICAgaWYgKCFmaWVsZC5wcm9wc1xyXG4gIC8vICAgICAgICAgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uaGlkZGVuXHJcbiAgLy8gICAgICAgICAvLyB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8uaGlkZGVuXHJcbiAgLy8gICAgICAgICkgcmV0dXJuIFtdO1xyXG5cclxuICAvLyAgICAgICBjb25zdCB0eXBlID0gZmllbGQucHJvcHNbJ3ZpZXcnXT8udHlwZSB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8udHlwZSB8fCAnY3VzdG9tLWxhYmVsLXR5cGUnO1xyXG4gIC8vICAgICAgIHJldHVybiBbe1xyXG4gIC8vICAgICAgICAgdHlwZSxcclxuICAvLyAgICAgICAgIGtleTogZmllbGRbJ2tleSddLFxyXG4gIC8vICAgICAgICAgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsXHJcbiAgLy8gICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAvLyAgICAgICAgIHdyYXBwZXJzOiBmaWVsZC53cmFwcGVycyA/PyBbJ2ZpZWxkLXdyYXBwZXInXSxcclxuICAvLyAgICAgICAgIHByb3BzOiB7XHJcbiAgLy8gICAgICAgICAgIC4uLmZpZWxkLnByb3BzLFxyXG4gIC8vICAgICAgICAgICAuLi4oZmllbGQucHJvcHNbJ3ZpZXcnXT8ucHJvcHMgfHwgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnByb3BzKSxcclxuICAvLyAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICBleHByZXNzaW9uczogZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMsXHJcbiAgLy8gICAgICAgfV07XHJcbiAgLy8gICAgIH0pO1xyXG5cclxuICAvLyAgIHJldHVybiBmbGF0dGVuKGZpZWxkcyk7XHJcbiAgLy8gfVxyXG5cclxuICAgICAvLyBVc2UgYSBtYXAgdG8gc3RvcmUgZm9ybSBncm91cHMgZm9yIGVhY2ggcm93IGFuZCBjb2x1bW5cclxuICBwcml2YXRlIGNlbGxGb3JtczogTWFwPHN0cmluZywgRm9ybUdyb3VwPiA9IG5ldyBNYXAoKTtcclxuICAgIGdldEZvcm0ocm93SW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB7XHJcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH1fYDtcclxuICAgIGxldCBmb3JtID0gdGhpcy5jZWxsRm9ybXMuZ2V0KGtleSk7XHJcblxyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5jZWxsRm9ybXMuc2V0KGtleSwgZm9ybSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG5cclxuICAgYXN5bmMgaGFuZGxlQ3JlYXRlRWRpdEFjdGlvbihidG46IEJ1dHRvbkNvbmZpZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGJ0bi5hY3Rpb24pIHtcclxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBwcm92aWRlZCBhY3Rpb25cclxuICAgICAgICBhd2FpdCBidG4uYWN0aW9uKG51bGwpOyAvLyBZb3UgY2FuIHBhc3Mgcm93IG9yIGNvbnRleHQgaGVyZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGVtaXR0aW5nIGV2ZW50XHJcbiAgICAgICAgaWYoYnRuLmFjdGlvbk5hbWUgPT0gJ2NhbmNlbCcpe1xyXG4gICAgICAgICAgdGhpcy5iYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgICBuYW1lOiBidG4uYWN0aW9uTmFtZSA/PyAnY2FuY2VsJyxcclxuICAgICAgICAgIHJvdzogbnVsbCEsIC8vIHByb3ZpZGUgcm93IGlmIGF2YWlsYWJsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdCdXR0b24gYWN0aW9uIGVycm9yJywgZXJyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxub25BY3Rpb24oYWN0OiBBY3Rpb25EZWY8YW55PiwgbW9kZWw6IGFueSkge1xyXG4gICAgaWYgKGFjdC5hY3Rpb24pIHtcclxuICAgICAgYWN0LmFjdGlvbihtb2RlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLmFjdGlvbi5lbWl0KHsgbmFtZTogYWN0Lm5hbWUsIHJvdzptb2RlbCB9KTtcclxuICAgICAgdGhpcy5lbWl0QWN0aW9uKHsgbmFtZTogYWN0Lm5hbWUsIHJvdzptb2RlbCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgZW1pdEFjdGlvbihldmVudDogeyBuYW1lOiBzdHJpbmc7IHJvdzogYW55IHwgbnVsbCB9KTogdm9pZCB7XHJcbiAgc3dpdGNoIChldmVudC5uYW1lKSB7XHJcbiAgICBjYXNlICdlZGl0JzpcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbkZvcm0oXCJlZGl0XCIsZXZlbnQucm93KTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICB0aGlzLm9uRGVsZXRlKGV2ZW50LnJvdyEpO1xyXG4gICAgICBicmVhaztcclxuICAgIGRlZmF1bHQgOlxyXG4gICAgICB0aGlzLmFjdGlvbi5lbWl0KGV2ZW50KTtcclxuICAgICAgYnJlYWs7XHJcbiAgfVxyXG59XHJcblxyXG5vbkRlbGV0ZShpdGVtOiBhbnkpOiB2b2lkIHtcclxuICBjb25zdCBpZCA9IGl0ZW1bdGhpcy5pZEZpZWxkXTtcclxuXHJcbiAgdGhpcy5zd2FsU2VydmljZS5jb25maXJtKFxyXG4gICAgJ9iq2KPZg9mK2K8g2KfZhNit2LDZgScsXHJcbiAgICAn2YfZhCDYqtix2YrYryDYrdiw2YEg2YfYsNinINin2YTYs9is2YQg2YHYudmE2KfZi9ifJyxcclxuICAgICfZhti52YXYjCDYp9it2LDZgScsXHJcbiAgICAn2KXZhNi62KfYoSdcclxuICApLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlKGlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3dhbFNlcnZpY2Uuc3VjY2Vzcygn2KrZhSDYp9mE2K3YsNmBINio2YbYrNin2K0nKTtcclxuICAgICAgICAgIHRoaXMuYmFjaygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuIGFmdGVyU2F2ZShldmVudDogYW55KSB7XHJcbiAgdGhpcy5tb2RlbCA9IGV2ZW50LnJlc3BvbnNlO1xyXG5cclxuICAvLyBzZXQgdGhlIGlkIGZyb20gYmFja2VuZCByZXNwb25zZVxyXG4gIHRoaXMuY3VycmVudElkID0gZXZlbnQucmVzcG9uc2VbdGhpcy5pZEZpZWxkXTtcclxuXHJcbiAgaWYgKHRoaXMuaXNDcmVhdGVNb2RlKSB7XHJcbiAgICB0aGlzLmdvVG9Nb2RlKCd2aWV3Jyk7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgIHRoaXMuZ29Ub01vZGUoJ3ZpZXcnKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuZ29Ub01vZGUobW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ2NyZWF0ZScpIHtcclxuICBjb25zdCB0cmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcclxuICBjb25zdCBzZWdtZW50cyA9IHRyZWUucm9vdC5jaGlsZHJlblsncHJpbWFyeSddPy5zZWdtZW50cy5tYXAocyA9PiBzLnBhdGgpID8/IFtdO1xyXG5cclxuICBsZXQgbmV3U2VnbWVudHM6IHN0cmluZ1tdO1xyXG5cclxuICBpZiAobW9kZSA9PT0gJ2NyZWF0ZScpIHtcclxuICAgIC8vIGFsd2F5cyBuYXZpZ2F0ZSB0byBcImFkZFwiXHJcbiAgICBuZXdTZWdtZW50cyA9IFtcclxuICAgICAgLi4uc2VnbWVudHMuZmlsdGVyKHMgPT4gIVsndmlldycsICdlZGl0JywgJ2FkZCddLmluY2x1ZGVzKHMpKSxcclxuICAgICAgJ2FkZCcsXHJcbiAgICBdO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBpZiBpbiBcImFkZFwiIG1vZGUsIHJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IGlkXHJcbiAgICBpZiAoc2VnbWVudHMuaW5jbHVkZXMoJ2FkZCcpKSB7XHJcbiAgICAgIG5ld1NlZ21lbnRzID0gW1xyXG4gICAgICAgIC4uLnNlZ21lbnRzLmZpbHRlcihzID0+IHMgIT09ICdhZGQnKSxcclxuICAgICAgICBTdHJpbmcodGhpcy5jdXJyZW50SWQpLFxyXG4gICAgICAgIG1vZGUsXHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpZEluZGV4ID0gc2VnbWVudHMuZmluZEluZGV4KHMgPT4gcyA9PT0gU3RyaW5nKHRoaXMuY3VycmVudElkKSk7XHJcbiAgICAgIGlmIChpZEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgIG5ld1NlZ21lbnRzID0gWy4uLnNlZ21lbnRzLCBTdHJpbmcodGhpcy5jdXJyZW50SWQpLCBtb2RlXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdTZWdtZW50cyA9IHNlZ21lbnRzLnNsaWNlKDAsIGlkSW5kZXggKyAxKTtcclxuICAgICAgICBuZXdTZWdtZW50cy5wdXNoKG1vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdTZWdtZW50cyk7XHJcbiAgdGhpcy5yZWZyZXNoKCk7XHJcbn1cclxuXHJcblxyXG5iYWNrVG9MaXN0KCl7XHJcbiAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddKTtcclxuICAgIH1cclxuYmFjaygpe1xyXG4gICAgICAvLyAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLiddKTtcclxuICAgICAgIHRoaXMuX2xvY2F0aW9uLmJhY2soKVxyXG4gICAgfVxyXG4gIGxvYWRMaXN0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZpbHRlcnMgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBza2lwQ291bnQ6IHRoaXMucGFnZUluZGV4ICogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgc29ydGluZzogdGhpcy5zb3J0LFxyXG4gICAgICAuLi50aGlzLmN1cnJlbnRGaWx0ZXJzLFxyXG4gICAgICAuLi50aGlzLnBhZ2VGaWx0ZXJzLFxyXG4gICAgICAuLi4odGhpcy5zZWFyY2hHbG9iYWwgPyB7IGZpbHRlcjogdGhpcy5zZWFyY2hHbG9iYWwgfSA6IHt9KSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXJ2aWNlLmdldExpc3QoZmlsdGVycykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogUGFnaW5hdGVkUmVzdWx0PGFueT4pID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QgPSByZXMuaXRlbXM7XHJcbiAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXMudG90YWxDb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gc2V0IG1vZGVsXyB0byBjdXJyZW50IGlkIGl0ZW1cclxuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMubGlzdC5maW5kKHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWxfID0gZm91bmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGxpc3QnLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiBuZXh0KCkge1xyXG4gIGlmICghdGhpcy5jdXJyZW50SWQpIHJldHVybjtcclxuXHJcbiAgLy8gaW5jcmVtZW50IGN1cnJlbnRJZCBudW1lcmljYWxseVxyXG4gIC8vIGNvbnN0IG5ld0lkID0gTnVtYmVyKHRoaXMuY3VycmVudElkKSArIDE7XHJcbiAgLy8gdGhpcy5jdXJyZW50SWQgPSBuZXdJZDtcclxuICAvLyB1c2UgZ29Ub01vZGUgdG8gbmF2aWdhdGUgYW5kIGtlZXAgbW9kZVxyXG4gIGNvbnN0IGN1cnJlbnRNb2RlID0gdGhpcy5pc0VkaXRNb2RlID8gJ2VkaXQnIDogJ3ZpZXcnO1xyXG4gIC8vIHRoaXMuZ29Ub01vZGUoY3VycmVudE1vZGUpO1xyXG59XHJcblxyXG5wcmV2aW91cygpIHtcclxuICBpZiAoIXRoaXMuY3VycmVudElkKSByZXR1cm47XHJcblxyXG4gIC8vIGRlY3JlbWVudCBjdXJyZW50SWQgbnVtZXJpY2FsbHlcclxuICAvLyBjb25zdCBuZXdJZCA9IE51bWJlcih0aGlzLmN1cnJlbnRJZCkgLSAxO1xyXG4gIC8vIGlmIChuZXdJZCA8PSAwKSByZXR1cm47XHJcblxyXG4gIC8vIHRoaXMuY3VycmVudElkID0gbmV3SWQ7XHJcblxyXG4gIC8vIHVzZSBnb1RvTW9kZSB0byBuYXZpZ2F0ZSBhbmQga2VlcCBtb2RlXHJcbiAgY29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmlzRWRpdE1vZGUgPyAnZWRpdCcgOiAndmlldyc7XHJcbiAgLy8gdGhpcy5nb1RvTW9kZShjdXJyZW50TW9kZSk7XHJcbn1cclxuXHJcblxyXG4gIC8vIG5leHQoKSB7XHJcbiAgLy8gICBjb25zdCBpZHggPSB0aGlzLmxpc3QuZmluZEluZGV4KHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAvLyAgIGlmIChpZHggPj0gMCAmJiBpZHggPCB0aGlzLmxpc3QubGVuZ3RoIC0gMSkge1xyXG4gIC8vICAgICBjb25zdCBuZXdJZCA9IHRoaXMubGlzdFtpZHggKyAxXVt0aGlzLmlkRmllbGRdO1xyXG4gIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycsIG5ld0lkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJldmlvdXMoKSB7XHJcbiAgLy8gICBjb25zdCBpZHggPSB0aGlzLmxpc3QuZmluZEluZGV4KHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAvLyAgIGlmIChpZHggPiAwKSB7XHJcbiAgLy8gICAgIGNvbnN0IG5ld0lkID0gdGhpcy5saXN0W2lkeCAtIDFdW3RoaXMuaWRGaWVsZF07XHJcbiAgLy8gICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgbmV3SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG59XHJcblxyXG4iLCJcclxuQGlmIChtb2RlID09PSAnZGV0YWlsJykge1xyXG48ZGl2ICBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtY29sIGdhcC0zXCI+XHJcbiAgPCEtLSBvdmVybGF5IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCJcclxuICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy13aGl0ZS83MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB6LTUwXCI+XHJcbiAgICA8cC1wcm9ncmVzcy1zcGlubmVyLz5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBhY3R1YWwgY29udGVudCAtLT5cclxuICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgPHAtdG9vbGJhciBzdHlsZT1cImJhY2tncm91bmQ6IHRyYW5zcGFyZW50O2JvcmRlcjogMHB4O2JveC1zaGFkb3c6IG5vbmU7XCIgY2xhc3M9XCJiZy10cmFuc3BhcmVudCBzaGFkb3ctbm9uZSBib3JkZXItbm9uZSByb3VuZGVkLW1kIHB4LTNcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XHJcbiAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtbGcgeHM6aGlkZGVuIGJsb2NrXCI+e3sgdGl0bGUgfX08L3NwYW4+IC0tPlxyXG4gICAgICA8YXBwLWJyZWFkY3J1bWIgY2xhc3M9XCJ4czpibG9ja1wiIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJcIj48L2FwcC1icmVhZGNydW1iPiA8IS0tIHhzOmJsb2NrIGhpZGRlbiAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgICBpY29uPVwicGkgcGktY2hldnJvbi1yaWdodFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtIGZkLWJ0blwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCLYp9mE2KrYp9mE2YpcIlxyXG4gICAgICAgIChjbGljayk9XCJuZXh0KClcIlxyXG4gICAgICA+PC9idXR0b24+XHJcbiAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgICAgaWNvbj1cInBpIHBpLWNoZXZyb24tbGVmdFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtIGZkLWJ0blwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCLYp9mE2LPYp9io2YJcIlxyXG4gICAgICAgIChjbGljayk9XCJwcmV2aW91cygpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRvb2xiYXI+XHJcbiAgIDxwLXRvb2xiYXIgY2xhc3M9XCJiZy13aGl0ZSBzaGFkb3cgcm91bmRlZC1tZCBweC0zXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgIEBpZiAoaXNWaWV3TW9kZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMVwiPlxyXG4gICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGFjdGlvbnNfOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgIFtpY29uXT1cImFjdGlvbi5pY29uID8/ICcnXCJcclxuICAgICAgICAgIFtsYWJlbF09XCIoYWN0aW9uLmxhYmVsID8/ICcnKSB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgY2xhc3M9XCJmZC1idG5cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkFjdGlvbihhY3Rpb24sbW9kZWwpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgQGlmIChpc0VkaXRNb2RlIHx8IGlzQ3JlYXRlTW9kZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMVwiPlxyXG4gICAgICAgQGZvciAoYnRuIG9mIGNyZWF0ZUVkaXRBY3Rpb25zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgQGlmICghYnRuLnZpc2libGUgfHwgKGJ0bi52aXNpYmxlICYmIGJ0bi52aXNpYmxlID09PSB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICBAaWYgKGJ0bi50eXBlID09ICdzdWJtaXQnICYmIGlubGluZUZvcm0pIHtcclxuICAgICAgICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCInc3VibWl0J1wiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpbmxpbmVGb3JtLmxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlubGluZUZvcm0ubG9hZGluZyB8fCBmb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiYnRuLmljb25cIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImJ0bi5sYWJlbCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbdmFyaWFudF09XCJidG4udmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiYnRuLnNldmVyaXR5XCJcclxuICAgICAgICAgICAgICAgIFtzaXplXT1cImJ0bi5zaXplXCJcclxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJidG4uc3BsaXRBY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgIFtwZXJtaXNzaW9uXT1cImJ0bi5wZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImlubGluZUZvcm0ub25TdWJtaXQoKVwiXHJcbiAgICAgICAgICAgICAgPjwvbGliLWdlbmVyaWMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIEBlbHNle1xyXG4gICAgICAgICAgICAgICAgIDxsaWItZ2VuZXJpYy1idXR0b25cclxuICAgICAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJidG4ubGFiZWwgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImJ0bi5zZXZlcml0eVwiXHJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbbW9kZWxdPVwiYnRuLnNwbGl0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJoYW5kbGVDcmVhdGVFZGl0QWN0aW9uKGJ0bilcIlxyXG4gICAgICAgICAgICAgID48L2xpYi1nZW5lcmljLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPCEtLSBUYWJzIC0tPlxyXG4gIDxwLXRhYnMgdmFsdWU9XCIwXCI+XHJcbiAgICA8cC10YWJsaXN0PlxyXG4gICAgICAgQGZvciAodGFiIG9mIHRhYnNfOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8cC10YWIgdmFsdWU9XCJ7eyRpbmRleH19XCI+XHJcbiAgICAgICAgICA8aSBbY2xhc3NdPVwidGFiLmljb25cIj48L2k+XHJcbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0xIG1sLTFcIj57eyB0YWIuaGVhZGVyIH19PC9zcGFuPlxyXG4gICAgICAgIDwvcC10YWI+XHJcbiAgICAgICB9XHJcbiAgICA8L3AtdGFibGlzdD5cclxuICAgIDxwLXRhYnBhbmVscz5cclxuICAgICAgQGZvciAodGFiIG9mIHRhYnNfOyB0cmFjayAkaW5kZXgpIHtcclxuIDxwLXRhYnBhbmVsIHZhbHVlPVwie3skaW5kZXh9fVwiPlxyXG5cclxuICAgICAgPCEtLSBGb3JtbHkgZmllbGRzIC0tPlxyXG4gICAgICA8IS0tIHAtNCBncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC00IC0tPlxyXG4gICAgICA8ZGl2ICBjbGFzcz1cImJvcmRlciBib3JkZXItc3VyZmFjZSBwLTRcIj5cclxuICAgICAgICBAaWYgKHRhYi5maWVsZHMubGVuZ3RoICYmICRpbmRleCA9PSAwKSB7XHJcblxyXG4gICAgICAgPGZvcm0gKm5nSWY9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICAgICAgIEBpZiAodGFiLmZpZWxkcy5sZW5ndGggJiYgJGluZGV4ID09IDAgKSB7XHJcbiBAaWYgKGlzRWRpdE1vZGUgfHwgaXNDcmVhdGVNb2RlKSB7XHJcbiAgICAgICAgIDxhcHAtZ2VuZXJpYy1kaWFsb2dcclxuICAgICAgICAgI2lubGluZUZvcm1cclxuICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICBbZm9ybUZpZWxkc109XCJmb3JtRmllbGRzID8/IFtdXCJcclxuICAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxyXG4gICAgW2lkRmllbGRdPVwiaWRGaWVsZCA/PydpZCdcIlxyXG4gICAgW2Rpc3BsYXlNb2RlXT1cIidpbmxpbmUnXCJcclxuICAgICBbbW9kZV09XCInZm9ybS1vbmx5J1wiXHJcbiAgICAgW2ZvcmNlU3RhdGVdPVwiaXNDcmVhdGVNb2RlID8gJ2NyZWF0ZSc6J2VkaXQnXCJcclxuICAgIChhZnRlclNhdmUpPVwiYWZ0ZXJTYXZlKCRldmVudClcIlxyXG4gID5cclxuICA8L2FwcC1nZW5lcmljLWRpYWxvZz5cclxufVxyXG5AZWxzZSBpZihpc1ZpZXdNb2RlKXtcclxuIDxmb3JtbHktZm9ybVxyXG4gICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICBbZmllbGRzXT1cInRhYi5maWVsZHNcIlxyXG4gICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxufVxyXG59XHJcbiAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKHRhYi5maWVsZHMubGVuZ3RoICYmICRpbmRleCA+IDApIHtcclxuXHJcblxyXG4gICAgICAgIDxmb3JtbHktZm9ybVxyXG4gICAgICAgICAgW2Zvcm1dPVwiZ2V0Rm9ybSgkaW5kZXgpXCJcclxuICAgICAgICAgIFtmaWVsZHNdPVwidGFiLmZpZWxkc1wiXHJcbiAgICAgICAgICBbbW9kZWxdPVwidGFiLm1vZGVsIHx8IG1vZGVsXCJcclxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gQ3VzdG9tIHRlbXBsYXRlIC0tPlxyXG4gICAgICBAaWYgKHRhYi5jb250ZW50KSB7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYi5jb250ZW50XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgICA8L3AtdGFicGFuZWw+XHJcbiAgICB9XHJcbiAgICA8L3AtdGFicGFuZWxzPlxyXG4gIDwvcC10YWJzPlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gW21vZGVsXT1cIm1vZGVsXCIgLS0+XHJcbiAgPGFwcC1nZW5lcmljLWRpYWxvZ1xyXG4gICAgI2RpYWxvZ1xyXG4gICAgW2Zvcm1GaWVsZHNdPVwiZm9ybUZpZWxkcyA/PyBbXVwiXHJcbiAgICBbYXBpTmFtZV09XCJhcGlOYW1lXCJcclxuICAgIFtpZEZpZWxkXT1cImlkRmllbGQgPz8naWQnXCJcclxuICAgIFtkaXNwbGF5TW9kZV09XCJkaXNwbGF5TW9kZSA/PyAnZGlhbG9nJ1wiXHJcbiAgICAoYWZ0ZXJTYXZlKT1cImFmdGVyU2F2ZSgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9hcHAtZ2VuZXJpYy1kaWFsb2c+XHJcbn1cclxuIl19","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericViewModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12aWV3LW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXZpZXcvc3JjL2xpYi9nZW5lcmljLXZpZXctbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8saUJBQWlCO3VHQUFqQixpQkFBaUI7d0dBQWpCLGlCQUFpQixZQUZsQixZQUFZO3dHQUVYLGlCQUFpQixZQUZsQixZQUFZOzsyRkFFWCxpQkFBaUI7a0JBSDdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZpZXdNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdmlldy9zcmMvZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
@@ -139,9 +139,122 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
139
139
  }]
140
140
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
141
141
 
142
+ class RepeatTableViewType extends FieldArrayType {
143
+ get columns() {
144
+ const group = this.field?.fieldArray?.fieldGroup || [];
145
+ return group.map((f) => ({
146
+ key: f.key,
147
+ label: f.props?.label || f.key
148
+ }));
149
+ }
150
+ get rows() {
151
+ return this.model || [];
152
+ }
153
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: RepeatTableViewType, deps: null, target: i0.ɵɵFactoryTarget.Component });
154
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.8", type: RepeatTableViewType, isStandalone: true, selector: "formly-repeat-table-view", usesInheritance: true, ngImport: i0, template: `
155
+ <div class="mb-0">
156
+
157
+ <!-- <label class="block text-lg font-semibold mb-3">
158
+ {{ field.props?.label }}
159
+ </label> -->
160
+
161
+ <div class="overflow-x-auto rounded-xl border">
162
+ <table class="min-w-full bg-white border-collapse">
163
+
164
+ <thead class="bg-gray-100">
165
+ <tr>
166
+ <!-- text-left -->
167
+ <th
168
+ *ngFor="let col of columns"
169
+ class="px-4 py-3 text-right font-medium border-b"
170
+ >
171
+ {{ col.label | translate }}
172
+ </th>
173
+ </tr>
174
+ </thead>
175
+
176
+ <tbody>
177
+ <tr *ngFor="let row of rows; let i = index"
178
+ class="border-b hover:bg-gray-50">
179
+ <td *ngFor="let col of columns"
180
+ class="px-4 py-2">
181
+ {{ row[col.key] }}
182
+ </td>
183
+ </tr>
184
+
185
+ <tr *ngIf="!rows || rows.length === 0">
186
+ <td [attr.colspan]="columns.length"
187
+ class="text-center py-6 text-gray-400">
188
+ No data
189
+ </td>
190
+ </tr>
191
+
192
+ </tbody>
193
+
194
+ </table>
195
+ </div>
196
+
197
+ </div>
198
+
199
+ `, isInline: true, 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: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
200
+ }
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: RepeatTableViewType, decorators: [{
202
+ type: Component,
203
+ args: [{
204
+ selector: 'formly-repeat-table-view',
205
+ template: `
206
+ <div class="mb-0">
207
+
208
+ <!-- <label class="block text-lg font-semibold mb-3">
209
+ {{ field.props?.label }}
210
+ </label> -->
211
+
212
+ <div class="overflow-x-auto rounded-xl border">
213
+ <table class="min-w-full bg-white border-collapse">
214
+
215
+ <thead class="bg-gray-100">
216
+ <tr>
217
+ <!-- text-left -->
218
+ <th
219
+ *ngFor="let col of columns"
220
+ class="px-4 py-3 text-right font-medium border-b"
221
+ >
222
+ {{ col.label | translate }}
223
+ </th>
224
+ </tr>
225
+ </thead>
226
+
227
+ <tbody>
228
+ <tr *ngFor="let row of rows; let i = index"
229
+ class="border-b hover:bg-gray-50">
230
+ <td *ngFor="let col of columns"
231
+ class="px-4 py-2">
232
+ {{ row[col.key] }}
233
+ </td>
234
+ </tr>
235
+
236
+ <tr *ngIf="!rows || rows.length === 0">
237
+ <td [attr.colspan]="columns.length"
238
+ class="text-center py-6 text-gray-400">
239
+ No data
240
+ </td>
241
+ </tr>
242
+
243
+ </tbody>
244
+
245
+ </table>
246
+ </div>
247
+
248
+ </div>
249
+
250
+ `,
251
+ imports: [CommonModule, TranslateModule],
252
+ }]
253
+ }] });
254
+
142
255
  /**
143
256
  * Generated bundle index. Do not edit.
144
257
  */
145
258
 
146
- export { RepeatModule, RepeatTypeComponent };
259
+ export { RepeatModule, RepeatTableViewType, RepeatTypeComponent };
147
260
  //# sourceMappingURL=elite.framework-ng.ui.core-repeat.mjs.map