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

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 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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LGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixVQUFVO3dCQUNWLFVBQVU7d0JBQ1YsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLHNCQUFzQjt3QkFDdEIsYUFBYTt3QkFDYixxQkFBcUI7cUJBQ3RCOzhCQVNRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVFLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxVQUFVO3NCQUFsQixLQUFLO2dCQUNFLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFuQixLQUFLO2dCQVdDLElBQUk7c0JBQVosS0FBSztnQkFFTyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFYyxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ00sVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQVFoQixPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUb29sYmFyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sYmFyJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBGb3JtbHlGb3JtLCBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUYWJzTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJzJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iQ29tcG9uZW50IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2JyZWFkY3J1bWInO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSwgU3dhbFNlcnZpY2UgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvc2VydmljZXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQWN0aW9uRGVmLCBCdXR0b25Db25maWcsIFBhZ2luYXRlZFJlc3VsdCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Byb2dyZXNzc3Bpbm5lcic7XHJcbmltcG9ydCB7IEdlbmVyaWNEaWFsb2dDb21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1kaWFsb2cnO1xyXG5pbXBvcnQgeyBHZW5lcmljQnV0dG9uIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtYnV0dG9uJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGV0YWlsVGFiIHtcclxuICBoZWFkZXI6IHN0cmluZztcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXTtcclxuICBtb2RlbD86IGFueTtcclxuICBjb250ZW50PzogVGVtcGxhdGVSZWY8YW55PjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZGV0YWlsLXZpZXcnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgVG9vbGJhck1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIFRhYnNNb2R1bGUsXHJcbiAgICBGb3JtbHlGb3JtLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgQnJlYWRjcnVtYkNvbXBvbmVudCxcclxuICAgIFRvb2x0aXBNb2R1bGUsXHJcbiAgICBHZW5lcmljRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgR2VuZXJpY0J1dHRvbixcclxuICAgIFByb2dyZXNzU3Bpbm5lck1vZHVsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMtdmlldy5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdlbmVyaWNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG5cclxuICBmb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG5cclxuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGFjdGlvbnM6IEFjdGlvbkRlZjxhbnk+W10gPSBbXTtcclxuICAgQElucHV0KCkgY3JlYXRlRWRpdEFjdGlvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgIGFjdGlvbnNfOiBBY3Rpb25EZWY8YW55PltdID0gW107XHJcbiAgQElucHV0KCkgdGFiczogRGV0YWlsVGFiW10gPSBbXTtcclxuICBASW5wdXQoKSB2aWV3TW9kZSA9IHRydWU7XHJcbiAgQElucHV0KCkgYnJlYWRjcnVtYjogTWVudUl0ZW1bXSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZXJ2aWNlOiBCYXNlU2VydmljZSA9IGluamVjdChCYXNlU2VydmljZSk7XHJcbiAgQElucHV0KCkgZm9ybUZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGFwaU5hbWUgPSAnJztcclxuICBASW5wdXQoKSBpZEZpZWxkID0gJ2lkJztcclxuIEBJbnB1dCgpIHN0YW5kYWxvbmVNb2RlID0gZmFsc2U7XHJcbiBASW5wdXQoKSBpc1ZpZXdNb2RlID0gdHJ1ZTsgLy8g2YjYtti5INin2YTZhdi02KfZh9iv2Kkg2YHZgti3XHJcbiBASW5wdXQoKSBpc0NyZWF0ZU1vZGUgPSBmYWxzZTsgLy8g2YjYtti5INin2YTYp9i22KfZgdipINmB2YLYt1xyXG4gIEBJbnB1dCgpIGlzRWRpdE1vZGUgPSBmYWxzZTsgLy8g2YjYtti5INin2YTYqti52K/ZitmEXHJcbiBASW5wdXQoKSBtb2RlbCA9IHt9O1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlNb2RlOlxyXG4gICAgfCAnZHJhd2VyJ1xyXG4gICAgfCAnZGlhbG9nJ1xyXG4gICAgfCAncm91dGUnXHJcbiAgICB8ICdpbmxpbmUnXHJcbiAgICB8IFBhcnRpYWw8XHJcbiAgICAgIFJlY29yZDxcclxuICAgICAgICAnYWRkJyB8ICdlZGl0JyB8ICd2aWV3JyxcclxuICAgICAgICAnZHJhd2VyJyB8ICdkaWFsb2cnIHwgJ3JvdXRlJyB8ICdpbmxpbmUnXHJcbiAgICAgID5cclxuICAgID4gPSAnZHJhd2VyJztcclxuQElucHV0KCkgbW9kZTogJ2Z1bGwnIHwgJ2Zvcm0tb25seScgfCAndGFibGUtb25seScgfCAnZGV0YWlsJyA9ICdmdWxsJztcclxuXHJcbiAgIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyByb3c6IGFueSB9PigpO1xyXG4gICAgQE91dHB1dCgpIGFmdGVyRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogYW55OyByZXNwb25zZT86IGFueSB9PigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZycpIGRpYWxvZyE6IEdlbmVyaWNEaWFsb2dDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdpbmxpbmVGb3JtJykgaW5saW5lRm9ybSE6IEdlbmVyaWNEaWFsb2dDb21wb25lbnQ7XHJcblxyXG4gIHRhYnNfOiBEZXRhaWxUYWJbXSA9IFtdO1xyXG4gIG1vZGVsXzogYW55ID0ge307XHJcblxyXG4gIGN1cnJlbnRJZCE6IHN0cmluZyB8IG51bWJlcjtcclxuICBsaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHRvdGFsUmVjb3JkcyA9IDA7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAvLyBwYWdpbmF0aW9uIHN0YXRlXHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBwYWdlSW5kZXggPSAwO1xyXG4gIHNvcnQgPSAnJztcclxuICBjdXJyZW50RmlsdGVyczogYW55ID0ge307XHJcbiAgcGFnZUZpbHRlcnM6IGFueSA9IHt9O1xyXG4gIHNlYXJjaEdsb2JhbCA9ICcnO1xyXG4gcHJpdmF0ZSBzd2FsU2VydmljZSA9IGluamVjdChTd2FsU2VydmljZSk7XHJcblxyXG4gX2xvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmFwaU5hbWUpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmFwaU5hbWUgPSB0aGlzLmFwaU5hbWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuYWN0aW9uc18gPSB0aGlzLmFjdGlvbnMuZmlsdGVyKGM9PmMubmFtZSAhPSAndmlldycpO1xyXG5cclxuICAgICAgdGhpcy5yb3V0ZS5wYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJhbXMuZ2V0KHRoaXMuaWRGaWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudElkID0gaWQ7XHJcbiAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhbmRhbG9uZU1vZGUpe1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZExpc3QoKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG5cclxuICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCl7XHJcblxyXG4gICAgLy8gZGV0ZWN0IG1vZGUgYmFzZWQgb24gcm91dGVcclxuICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICB0aGlzLmlzVmlld01vZGUgPSB1cmwuaW5jbHVkZXMoJy92aWV3Jyk7XHJcbiAgdGhpcy5pc0VkaXRNb2RlID0gdXJsLmluY2x1ZGVzKCcvZWRpdCcpO1xyXG4gIHRoaXMuaXNDcmVhdGVNb2RlID0gdXJsLmluY2x1ZGVzKCcvY3JlYXRlJykgfHwgdXJsLmVuZHNXaXRoKCcvbmV3JykgfHwgdXJsLmVuZHNXaXRoKCcvYWRkJyk7XHJcblxyXG4gIHRoaXMudGFic18gPSBbXTtcclxuZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhYnMubGVuZ3RoOyBpKyspIHtcclxuICBjb25zdCB0ID0gdGhpcy50YWJzW2ldO1xyXG4gIHRoaXMudGFic18ucHVzaCh7XHJcbiAgICAuLi50LFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBwcm9wczogeyBsYWJlbDogJycgfSxcclxuICAgICAgICBmaWVsZEdyb3VwQ2xhc3NOYW1lOiAnZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtMycsXHJcbiAgICAgICAgZmllbGRHcm91cDpcclxuICAgICAgICAgIHRoaXMuaXNDcmVhdGVNb2RlIHx8IHRoaXMuaXNFZGl0TW9kZVxyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q3JlYXRlRWRpdEZpZWxkcyhpID09IDAgPyB0aGlzLmZvcm1GaWVsZHM6IHQuZmllbGRzKVxyXG4gICAgICAgICAgICA6IHRoaXMuZ2V0Vmlld0ZpZWxkcyhpID09IDAgPyB0aGlzLmZvcm1GaWVsZHMgOiB0LmZpZWxkcyksXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH0pO1xyXG59XHJcbnRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuICAvLyBhcyBmb3JtXHJcbiAgIGdldENyZWF0ZUVkaXRGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBmaWVsZHMubWFwKGYgPT4gKHtcclxuICAgICAgLi4uZixcclxuICAgICAgcHJvcHM6IHsgLi4uZi5wcm9wcywgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsIGRpc2FibGVkOiB0aGlzLnZpZXdNb2RlIH0sXHJcbiAgICB9KSk7XHJcbiAgfVxyXG4gIGdldFZpZXdGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICBjb25zdCBmbGF0dGVuID0gKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10gPT5cclxuICAgIGZpZWxkcy5mbGF0TWFwKGZpZWxkID0+IHtcclxuXHJcbiAgICAgIC8vIDEuIEhBTkRMRSBOT1JNQUwgRklFTEQgR1JPVVBcclxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXA/Lmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmbGF0dGVuKGZpZWxkLmZpZWxkR3JvdXApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyAyLiBIQU5ETEUgRklFTEQgQVJSQVkgKFJFUEVBVClcclxuICAgICAgICAgICBjb25zdCBmaWVsZEFycmF5Q29uZmlnID1cclxuICAgICAgICAgIHR5cGVvZiBmaWVsZC5maWVsZEFycmF5ID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICAgID8gZmllbGQuZmllbGRBcnJheShmaWVsZClcclxuICAgICAgICAgICAgOiBmaWVsZC5maWVsZEFycmF5O1xyXG5cclxuICAgICAgaWYgKGZpZWxkLmZpZWxkQXJyYXkpIHtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIHdob2xlIGFycmF5IGlzIGhpZGRlbiBpbiB2aWV3LCBza2lwIGl0XHJcbiAgICAgICAgaWYgKGZpZWxkLnByb3BzICYmIChcclxuICAgICAgICAgIGZpZWxkLnByb3BzWyd2aWV3J10/LmhpZGRlbilcclxuICAgICAgICApIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBmbGF0dGVuKGZpZWxkQXJyYXlDb25maWc/LmZpZWxkR3JvdXB8fCBbXSk7XHJcblxyXG4gICAgICAgIC8vIElGIE5PIENISUxEUkVOIFJFVFVSTiBFTVBUWVxyXG4gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIC8vIFJldHVybiBjb3B5IG9mIHJlcGVhdCB3cmFwcGVyIGJ1dCBpbiB2aWV3LW1vZGVcclxuICAgICAgICByZXR1cm4gW3tcclxuICAgICAgICAgIC4uLmZpZWxkLFxyXG4gICAgICAgICAgdHlwZTogZmllbGQucHJvcHMgPyBmaWVsZC5wcm9wc1sndmlldyddPy50eXBlIHx8IGZpZWxkLnR5cGUgOiAgJ2N1c3RvbS1sYWJlbC10eXBlJyxcclxuICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnZpZXdNb2RlLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IHRoaXMudmlld01vZGUsXHJcbiAgICAgICAgICBmaWVsZEFycmF5OiB7XHJcbiAgICAgICAgICAgIC4uLmZpZWxkQXJyYXlDb25maWcsXHJcbiAgICAgICAgICAgIGZpZWxkR3JvdXA6IGNoaWxkcmVuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIDMuIE5PUk1BTCBGSUVMRCAoU0lOR0xFKVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIWZpZWxkLnByb3BzIHx8XHJcbiAgICAgICAgZmllbGQucHJvcHNbJ3ZpZXcnXT8uaGlkZGVuXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdHlwZSA9XHJcbiAgICAgICAgZmllbGQucHJvcHNbJ3ZpZXcnXT8udHlwZSB8fFxyXG4gICAgICAgIGZpZWxkLnByb3BzWyd0YWJsZSddPy50eXBlIHx8XHJcbiAgICAgICAgZmllbGQucHJvcHNbJ2ZpbHRlciddPy50eXBlIHx8XHJcbiAgICAgICAgJ2N1c3RvbS1sYWJlbC10eXBlJztcclxuXHJcbiAgICAgIHJldHVybiBbe1xyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAga2V5OiBmaWVsZC5rZXksXHJcbiAgICAgICAgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsXHJcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMudmlld01vZGUsXHJcbiAgICAgICAgd3JhcHBlcnM6IGZpZWxkLndyYXBwZXJzID8/IFsnZmllbGQtd3JhcHBlciddLFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAuLi5maWVsZC5wcm9wcyxcclxuICAgICAgICAgIC4uLihmaWVsZC5wcm9wc1sndmlldyddPy5wcm9wcyB8fFxyXG4gICAgICAgICAgICBmaWVsZC5wcm9wc1sndGFibGUnXT8ucHJvcHMgfHxcclxuICAgICAgICAgICAgZmllbGQucHJvcHNbJ2ZpbHRlciddPy5wcm9wcyB8fFxyXG4gICAgICAgICAgICB7fSksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBleHByZXNzaW9uczpcclxuICAgICAgICAgIGZpZWxkLnByb3BzWyd2aWV3J10/LmV4cHJlc3Npb25zIHx8XHJcbiAgICAgICAgICBmaWVsZC5wcm9wc1sndGFibGUnXT8uZXhwcmVzc2lvbnMgfHxcclxuICAgICAgICAgIGZpZWxkLnByb3BzWydmaWx0ZXInXT8uZXhwcmVzc2lvbnNcclxuICAgICAgfV07XHJcbiAgICB9KTtcclxuXHJcbiAgcmV0dXJuIGZsYXR0ZW4oZmllbGRzKTtcclxufVxyXG5cclxuICAvLyBnZXRWaWV3RmllbGRzKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdKTogRm9ybWx5RmllbGRDb25maWdbXSB7XHJcbiAgLy8gICBjb25zdCBmbGF0dGVuID0gKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10gPT5cclxuICAvLyAgICAgZmllbGRzLmZsYXRNYXAoZmllbGQgPT4ge1xyXG4gIC8vICAgICAgIGlmIChmaWVsZC5maWVsZEdyb3VwPy5sZW5ndGgpIHJldHVybiBmbGF0dGVuKGZpZWxkLmZpZWxkR3JvdXApO1xyXG4gIC8vICAgICAgIGlmICghZmllbGQucHJvcHNcclxuICAvLyAgICAgICAgIHx8IGZpZWxkLnByb3BzWyd2aWV3J10/LmhpZGRlblxyXG4gIC8vICAgICAgICAgLy8gfHwgZmllbGQucHJvcHNbJ3RhYmxlJ10/LmhpZGRlblxyXG4gIC8vICAgICAgICApIHJldHVybiBbXTtcclxuXHJcbiAgLy8gICAgICAgY29uc3QgdHlwZSA9IGZpZWxkLnByb3BzWyd2aWV3J10/LnR5cGUgfHwgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnR5cGUgfHwgJ2N1c3RvbS1sYWJlbC10eXBlJztcclxuICAvLyAgICAgICByZXR1cm4gW3tcclxuICAvLyAgICAgICAgIHR5cGUsXHJcbiAgLy8gICAgICAgICBrZXk6IGZpZWxkWydrZXknXSxcclxuICAvLyAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnZpZXdNb2RlLFxyXG4gIC8vICAgICAgICAgZGlzYWJsZWQ6IHRoaXMudmlld01vZGUsXHJcbiAgLy8gICAgICAgICB3cmFwcGVyczogZmllbGQud3JhcHBlcnMgPz8gWydmaWVsZC13cmFwcGVyJ10sXHJcbiAgLy8gICAgICAgICBwcm9wczoge1xyXG4gIC8vICAgICAgICAgICAuLi5maWVsZC5wcm9wcyxcclxuICAvLyAgICAgICAgICAgLi4uKGZpZWxkLnByb3BzWyd2aWV3J10/LnByb3BzIHx8IGZpZWxkLnByb3BzWyd0YWJsZSddPy5wcm9wcyksXHJcbiAgLy8gICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgZXhwcmVzc2lvbnM6IGZpZWxkLnByb3BzWyd2aWV3J10/LmV4cHJlc3Npb25zIHx8IGZpZWxkLnByb3BzWyd2aWV3J10/LmV4cHJlc3Npb25zLFxyXG4gIC8vICAgICAgIH1dO1xyXG4gIC8vICAgICB9KTtcclxuXHJcbiAgLy8gICByZXR1cm4gZmxhdHRlbihmaWVsZHMpO1xyXG4gIC8vIH1cclxuXHJcbiAgICAgLy8gVXNlIGEgbWFwIHRvIHN0b3JlIGZvcm0gZ3JvdXBzIGZvciBlYWNoIHJvdyBhbmQgY29sdW1uXHJcbiAgcHJpdmF0ZSBjZWxsRm9ybXM6IE1hcDxzdHJpbmcsIEZvcm1Hcm91cD4gPSBuZXcgTWFwKCk7XHJcbiAgICBnZXRGb3JtKHJvd0luZGV4OiBudW1iZXIpOiBGb3JtR3JvdXAge1xyXG4gICAgY29uc3Qga2V5ID0gYCR7cm93SW5kZXh9X2A7XHJcbiAgICBsZXQgZm9ybSA9IHRoaXMuY2VsbEZvcm1zLmdldChrZXkpO1xyXG5cclxuICAgIGlmICghZm9ybSkge1xyXG4gICAgICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgIHRoaXMuY2VsbEZvcm1zLnNldChrZXksIGZvcm0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuXHJcbiAgIGFzeW5jIGhhbmRsZUNyZWF0ZUVkaXRBY3Rpb24oYnRuOiBCdXR0b25Db25maWcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChidG4uYWN0aW9uKSB7XHJcbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgcHJvdmlkZWQgYWN0aW9uXHJcbiAgICAgICAgYXdhaXQgYnRuLmFjdGlvbihudWxsKTsgLy8gWW91IGNhbiBwYXNzIHJvdyBvciBjb250ZXh0IGhlcmVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBGYWxsYmFjayB0byBlbWl0dGluZyBldmVudFxyXG4gICAgICAgIGlmKGJ0bi5hY3Rpb25OYW1lID09ICdjYW5jZWwnKXtcclxuICAgICAgICAgIHRoaXMuYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICAgICAgbmFtZTogYnRuLmFjdGlvbk5hbWUgPz8gJ2NhbmNlbCcsXHJcbiAgICAgICAgICByb3c6IG51bGwhLCAvLyBwcm92aWRlIHJvdyBpZiBhdmFpbGFibGVcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignQnV0dG9uIGFjdGlvbiBlcnJvcicsIGVycik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbm9uQWN0aW9uKGFjdDogQWN0aW9uRGVmPGFueT4sIG1vZGVsOiBhbnkpIHtcclxuICAgIGlmIChhY3QuYWN0aW9uKSB7XHJcbiAgICAgIGFjdC5hY3Rpb24obW9kZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5hY3Rpb24uZW1pdCh7IG5hbWU6IGFjdC5uYW1lLCByb3c6bW9kZWwgfSk7XHJcbiAgICAgIHRoaXMuZW1pdEFjdGlvbih7IG5hbWU6IGFjdC5uYW1lLCByb3c6bW9kZWwgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAgIGVtaXRBY3Rpb24oZXZlbnQ6IHsgbmFtZTogc3RyaW5nOyByb3c6IGFueSB8IG51bGwgfSk6IHZvaWQge1xyXG4gIHN3aXRjaCAoZXZlbnQubmFtZSkge1xyXG4gICAgY2FzZSAnZWRpdCc6XHJcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW5Gb3JtKFwiZWRpdFwiLGV2ZW50LnJvdyk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgdGhpcy5vbkRlbGV0ZShldmVudC5yb3chKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBkZWZhdWx0IDpcclxuICAgICAgdGhpcy5hY3Rpb24uZW1pdChldmVudCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gIH1cclxufVxyXG5cclxub25EZWxldGUoaXRlbTogYW55KTogdm9pZCB7XHJcbiAgY29uc3QgaWQgPSBpdGVtW3RoaXMuaWRGaWVsZF07XHJcblxyXG4gIHRoaXMuc3dhbFNlcnZpY2UuY29uZmlybShcclxuICAgICfYqtij2YPZitivINin2YTYrdiw2YEnLFxyXG4gICAgJ9mH2YQg2KrYsdmK2K8g2K3YsNmBINmH2LDYpyDYp9mE2LPYrNmEINmB2LnZhNin2YvYnycsXHJcbiAgICAn2YbYudmF2Iwg2KfYrdiw2YEnLFxyXG4gICAgJ9il2YTYutin2KEnXHJcbiAgKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgIGlmIChyZXN1bHQuaXNDb25maXJtZWQpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZShpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN3YWxTZXJ2aWNlLnN1Y2Nlc3MoJ9iq2YUg2KfZhNit2LDZgSDYqNmG2KzYp9itJyk7XHJcbiAgICAgICAgICB0aGlzLmJhY2soKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcbiBhZnRlclNhdmUoZXZlbnQ6IGFueSkge1xyXG4gIHRoaXMubW9kZWwgPSBldmVudC5yZXNwb25zZTtcclxuXHJcbiAgLy8gc2V0IHRoZSBpZCBmcm9tIGJhY2tlbmQgcmVzcG9uc2VcclxuICB0aGlzLmN1cnJlbnRJZCA9IGV2ZW50LnJlc3BvbnNlW3RoaXMuaWRGaWVsZF07XHJcblxyXG4gIGlmICh0aGlzLmlzQ3JlYXRlTW9kZSkge1xyXG4gICAgdGhpcy5nb1RvTW9kZSgndmlldycpO1xyXG4gIH0gZWxzZSBpZiAodGhpcy5pc0VkaXRNb2RlKSB7XHJcbiAgICB0aGlzLmdvVG9Nb2RlKCd2aWV3Jyk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuXHJcbmdvVG9Nb2RlKG1vZGU6ICd2aWV3JyB8ICdlZGl0JyB8ICdjcmVhdGUnKSB7XHJcbiAgY29uc3QgdHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XHJcbiAgY29uc3Qgc2VnbWVudHMgPSB0cmVlLnJvb3QuY2hpbGRyZW5bJ3ByaW1hcnknXT8uc2VnbWVudHMubWFwKHMgPT4gcy5wYXRoKSA/PyBbXTtcclxuXHJcbiAgbGV0IG5ld1NlZ21lbnRzOiBzdHJpbmdbXTtcclxuXHJcbiAgaWYgKG1vZGUgPT09ICdjcmVhdGUnKSB7XHJcbiAgICAvLyBhbHdheXMgbmF2aWdhdGUgdG8gXCJhZGRcIlxyXG4gICAgbmV3U2VnbWVudHMgPSBbXHJcbiAgICAgIC4uLnNlZ21lbnRzLmZpbHRlcihzID0+ICFbJ3ZpZXcnLCAnZWRpdCcsICdhZGQnXS5pbmNsdWRlcyhzKSksXHJcbiAgICAgICdhZGQnLFxyXG4gICAgXTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gaWYgaW4gXCJhZGRcIiBtb2RlLCByZXBsYWNlIGl0IHdpdGggdGhlIG5ldyBpZFxyXG4gICAgaWYgKHNlZ21lbnRzLmluY2x1ZGVzKCdhZGQnKSkge1xyXG4gICAgICBuZXdTZWdtZW50cyA9IFtcclxuICAgICAgICAuLi5zZWdtZW50cy5maWx0ZXIocyA9PiBzICE9PSAnYWRkJyksXHJcbiAgICAgICAgU3RyaW5nKHRoaXMuY3VycmVudElkKSxcclxuICAgICAgICBtb2RlLFxyXG4gICAgICBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaWRJbmRleCA9IHNlZ21lbnRzLmZpbmRJbmRleChzID0+IHMgPT09IFN0cmluZyh0aGlzLmN1cnJlbnRJZCkpO1xyXG4gICAgICBpZiAoaWRJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICBuZXdTZWdtZW50cyA9IFsuLi5zZWdtZW50cywgU3RyaW5nKHRoaXMuY3VycmVudElkKSwgbW9kZV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3U2VnbWVudHMgPSBzZWdtZW50cy5zbGljZSgwLCBpZEluZGV4ICsgMSk7XHJcbiAgICAgICAgbmV3U2VnbWVudHMucHVzaChtb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGhpcy5yb3V0ZXIubmF2aWdhdGUobmV3U2VnbWVudHMpO1xyXG4gIHRoaXMucmVmcmVzaCgpO1xyXG59XHJcblxyXG5cclxuYmFja1RvTGlzdCgpe1xyXG4gICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSk7XHJcbiAgICB9XHJcbmJhY2soKXtcclxuICAgICAgLy8gIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nXSk7XHJcbiAgICAgICB0aGlzLl9sb2NhdGlvbi5iYWNrKClcclxuICAgIH1cclxuICBsb2FkTGlzdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xyXG4gICAgICBtYXhSZXN1bHRDb3VudDogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgc2tpcENvdW50OiB0aGlzLnBhZ2VJbmRleCAqIHRoaXMucGFnZVNpemUsXHJcbiAgICAgIHNvcnRpbmc6IHRoaXMuc29ydCxcclxuICAgICAgLi4udGhpcy5jdXJyZW50RmlsdGVycyxcclxuICAgICAgLi4udGhpcy5wYWdlRmlsdGVycyxcclxuICAgICAgLi4uKHRoaXMuc2VhcmNoR2xvYmFsID8geyBmaWx0ZXI6IHRoaXMuc2VhcmNoR2xvYmFsIH0gOiB7fSksXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2VydmljZS5nZXRMaXN0KGZpbHRlcnMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IFBhZ2luYXRlZFJlc3VsdDxhbnk+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0ID0gcmVzLml0ZW1zO1xyXG4gICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzLnRvdGFsQ291bnQ7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIHNldCBtb2RlbF8gdG8gY3VycmVudCBpZCBpdGVtXHJcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmxpc3QuZmluZCh4ID0+IHhbdGhpcy5pZEZpZWxkXSA9PSB0aGlzLmN1cnJlbnRJZCk7XHJcbiAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsXyA9IGZvdW5kO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBsaXN0JywgZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gbmV4dCgpIHtcclxuICBpZiAoIXRoaXMuY3VycmVudElkKSByZXR1cm47XHJcblxyXG4gIC8vIGluY3JlbWVudCBjdXJyZW50SWQgbnVtZXJpY2FsbHlcclxuICAvLyBjb25zdCBuZXdJZCA9IE51bWJlcih0aGlzLmN1cnJlbnRJZCkgKyAxO1xyXG4gIC8vIHRoaXMuY3VycmVudElkID0gbmV3SWQ7XHJcbiAgLy8gdXNlIGdvVG9Nb2RlIHRvIG5hdmlnYXRlIGFuZCBrZWVwIG1vZGVcclxuICBjb25zdCBjdXJyZW50TW9kZSA9IHRoaXMuaXNFZGl0TW9kZSA/ICdlZGl0JyA6ICd2aWV3JztcclxuICAvLyB0aGlzLmdvVG9Nb2RlKGN1cnJlbnRNb2RlKTtcclxufVxyXG5cclxucHJldmlvdXMoKSB7XHJcbiAgaWYgKCF0aGlzLmN1cnJlbnRJZCkgcmV0dXJuO1xyXG5cclxuICAvLyBkZWNyZW1lbnQgY3VycmVudElkIG51bWVyaWNhbGx5XHJcbiAgLy8gY29uc3QgbmV3SWQgPSBOdW1iZXIodGhpcy5jdXJyZW50SWQpIC0gMTtcclxuICAvLyBpZiAobmV3SWQgPD0gMCkgcmV0dXJuO1xyXG5cclxuICAvLyB0aGlzLmN1cnJlbnRJZCA9IG5ld0lkO1xyXG5cclxuICAvLyB1c2UgZ29Ub01vZGUgdG8gbmF2aWdhdGUgYW5kIGtlZXAgbW9kZVxyXG4gIGNvbnN0IGN1cnJlbnRNb2RlID0gdGhpcy5pc0VkaXRNb2RlID8gJ2VkaXQnIDogJ3ZpZXcnO1xyXG4gIC8vIHRoaXMuZ29Ub01vZGUoY3VycmVudE1vZGUpO1xyXG59XHJcblxyXG5cclxuICAvLyBuZXh0KCkge1xyXG4gIC8vICAgY29uc3QgaWR4ID0gdGhpcy5saXN0LmZpbmRJbmRleCh4ID0+IHhbdGhpcy5pZEZpZWxkXSA9PSB0aGlzLmN1cnJlbnRJZCk7XHJcbiAgLy8gICBpZiAoaWR4ID49IDAgJiYgaWR4IDwgdGhpcy5saXN0Lmxlbmd0aCAtIDEpIHtcclxuICAvLyAgICAgY29uc3QgbmV3SWQgPSB0aGlzLmxpc3RbaWR4ICsgMV1bdGhpcy5pZEZpZWxkXTtcclxuICAvLyAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nLCBuZXdJZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIHByZXZpb3VzKCkge1xyXG4gIC8vICAgY29uc3QgaWR4ID0gdGhpcy5saXN0LmZpbmRJbmRleCh4ID0+IHhbdGhpcy5pZEZpZWxkXSA9PSB0aGlzLmN1cnJlbnRJZCk7XHJcbiAgLy8gICBpZiAoaWR4ID4gMCkge1xyXG4gIC8vICAgICBjb25zdCBuZXdJZCA9IHRoaXMubGlzdFtpZHggLSAxXVt0aGlzLmlkRmllbGRdO1xyXG4gIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycsIG5ld0lkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxufVxyXG5cclxuIiwiXHJcbkBpZiAobW9kZSA9PT0gJ2RldGFpbCcpIHtcclxuPGRpdiAgY2xhc3M9XCJ3LWZ1bGwgZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxyXG4gIDwhLS0gb3ZlcmxheSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiXHJcbiAgICAgICBjbGFzcz1cImFic29sdXRlIGluc2V0LTAgYmctd2hpdGUvNzAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgei01MFwiPlxyXG4gICAgPHAtcHJvZ3Jlc3Mtc3Bpbm5lci8+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gYWN0dWFsIGNvbnRlbnQgLS0+XHJcbiAgPCEtLSBUb29sYmFyIC0tPlxyXG4gIDxwLXRvb2xiYXIgc3R5bGU9XCJiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtib3JkZXI6IDBweDtib3gtc2hhZG93OiBub25lO1wiIGNsYXNzPVwiYmctdHJhbnNwYXJlbnQgc2hhZG93LW5vbmUgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCBweC0zXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxyXG4gICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LWxnIHhzOmhpZGRlbiBibG9ja1wiPnt7IHRpdGxlIH19PC9zcGFuPiAtLT5cclxuICAgICAgPGFwcC1icmVhZGNydW1iIGNsYXNzPVwieHM6YmxvY2tcIiBbYnJlYWRjcnVtYl09XCJicmVhZGNydW1iXCI+PC9hcHAtYnJlYWRjcnVtYj4gPCEtLSB4czpibG9jayBoaWRkZW4gLS0+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XHJcblxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgICAgaWNvbj1cInBpIHBpLWNoZXZyb24tcmlnaHRcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zbSBmZC1idG5cIlxyXG4gICAgICAgIHBUb29sdGlwPVwi2KfZhNiq2KfZhNmKXCJcclxuICAgICAgICAoY2xpY2spPVwibmV4dCgpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHBCdXR0b24gcFJpcHBsZVxyXG4gICAgICAgIGljb249XCJwaSBwaS1jaGV2cm9uLWxlZnRcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zbSBmZC1idG5cIlxyXG4gICAgICAgIHBUb29sdGlwPVwi2KfZhNiz2KfYqNmCXCJcclxuICAgICAgICAoY2xpY2spPVwicHJldmlvdXMoKVwiXHJcbiAgICAgID48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC10b29sYmFyPlxyXG4gICA8cC10b29sYmFyIGNsYXNzPVwiYmctd2hpdGUgc2hhZG93IHJvdW5kZWQtbWQgcHgtM1wiPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XHJcbiAgICAgICBAaWYgKGlzVmlld01vZGUpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTFcIj5cclxuICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25zXzsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHBCdXR0b24gcFJpcHBsZVxyXG4gICAgICBbaWNvbl09XCJhY3Rpb24uaWNvbiA/PyAnJ1wiXHJcbiAgICAgICAgICBbbGFiZWxdPVwiKGFjdGlvbi5sYWJlbCA/PyAnJykgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIGNsYXNzPVwiZmQtYnRuXCJcclxuICAgICAgICAoY2xpY2spPVwib25BY3Rpb24oYWN0aW9uLG1vZGVsKVwiXHJcbiAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XHJcbiAgICAgIEBpZiAoaXNFZGl0TW9kZSB8fCBpc0NyZWF0ZU1vZGUpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTFcIj5cclxuICAgICAgIEBmb3IgKGJ0biBvZiBjcmVhdGVFZGl0QWN0aW9uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIEBpZiAoIWJ0bi52aXNpYmxlIHx8IChidG4udmlzaWJsZSAmJiBidG4udmlzaWJsZSA9PT0gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgQGlmIChidG4udHlwZSA9PSAnc3VibWl0JyAmJiBpbmxpbmVGb3JtKSB7XHJcbiAgICAgICAgICAgICAgPGxpYi1nZW5lcmljLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiJ3N1Ym1pdCdcIlxyXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiaW5saW5lRm9ybS5sb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbmxpbmVGb3JtLmxvYWRpbmcgfHwgZm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJidG4ubGFiZWwgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImJ0bi5zZXZlcml0eVwiXHJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbbW9kZWxdPVwiYnRuLnNwbGl0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJpbmxpbmVGb3JtLm9uU3VibWl0KClcIlxyXG4gICAgICAgICAgICAgID48L2xpYi1nZW5lcmljLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBAZWxzZXtcclxuICAgICAgICAgICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJidG4uaWNvblwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnRuLmxhYmVsIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cImJ0bi52YXJpYW50XCJcclxuICAgICAgICAgICAgICAgIFtzZXZlcml0eV09XCJidG4uc2V2ZXJpdHlcIlxyXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiYnRuLnNpemVcIlxyXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cImJ0bi5zcGxpdEFjdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgW3Blcm1pc3Npb25dPVwiYnRuLnBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiaGFuZGxlQ3JlYXRlRWRpdEFjdGlvbihidG4pXCJcclxuICAgICAgICAgICAgICA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPC9wLXRvb2xiYXI+XHJcblxyXG4gIDwhLS0gVGFicyAtLT5cclxuICA8cC10YWJzIHZhbHVlPVwiMFwiPlxyXG4gICAgPHAtdGFibGlzdD5cclxuICAgICAgIEBmb3IgKHRhYiBvZiB0YWJzXzsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHAtdGFiIHZhbHVlPVwie3skaW5kZXh9fVwiPlxyXG4gICAgICAgICAgPGkgW2NsYXNzXT1cInRhYi5pY29uXCI+PC9pPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMSBtbC0xXCI+e3sgdGFiLmhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICA8L3AtdGFiPlxyXG4gICAgICAgfVxyXG4gICAgPC9wLXRhYmxpc3Q+XHJcbiAgICA8cC10YWJwYW5lbHM+XHJcbiAgICAgIEBmb3IgKHRhYiBvZiB0YWJzXzsgdHJhY2sgJGluZGV4KSB7XHJcbiA8cC10YWJwYW5lbCB2YWx1ZT1cInt7JGluZGV4fX1cIj5cclxuXHJcbiAgICAgIDwhLS0gRm9ybWx5IGZpZWxkcyAtLT5cclxuICAgICAgPCEtLSBwLTQgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNCAtLT5cclxuICAgICAgPGRpdiAgY2xhc3M9XCJib3JkZXIgYm9yZGVyLXN1cmZhY2UgcC00XCI+XHJcbiAgICAgICAgQGlmICh0YWIuZmllbGRzLmxlbmd0aCAmJiAkaW5kZXggPT0gMCkge1xyXG5cclxuICAgICAgIDxmb3JtICpuZ0lmPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgICAgICBAaWYgKHRhYi5maWVsZHMubGVuZ3RoICYmICRpbmRleCA9PSAwICkge1xyXG4gQGlmIChpc0VkaXRNb2RlIHx8IGlzQ3JlYXRlTW9kZSkge1xyXG4gICAgICAgICA8YXBwLWdlbmVyaWMtZGlhbG9nXHJcbiAgICAgICAgICNpbmxpbmVGb3JtXHJcbiAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxyXG4gICAgW2Zvcm1GaWVsZHNdPVwiZm9ybUZpZWxkcyA/PyBbXVwiXHJcbiAgICBbYXBpTmFtZV09XCJhcGlOYW1lXCJcclxuICAgIFtpZEZpZWxkXT1cImlkRmllbGQgPz8naWQnXCJcclxuICAgIFtkaXNwbGF5TW9kZV09XCInaW5saW5lJ1wiXHJcbiAgICAgW21vZGVdPVwiJ2Zvcm0tb25seSdcIlxyXG4gICAgIFtmb3JjZVN0YXRlXT1cImlzQ3JlYXRlTW9kZSA/ICdjcmVhdGUnOidlZGl0J1wiXHJcbiAgICAoYWZ0ZXJTYXZlKT1cImFmdGVyU2F2ZSgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9hcHAtZ2VuZXJpYy1kaWFsb2c+XHJcbn1cclxuQGVsc2UgaWYoaXNWaWV3TW9kZSl7XHJcbiA8Zm9ybWx5LWZvcm1cclxuICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgW2ZpZWxkc109XCJ0YWIuZmllbGRzXCJcclxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICAgICAgPjwvZm9ybWx5LWZvcm0+XHJcbn1cclxufVxyXG4gICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgIH1cclxuICAgICAgQGlmICh0YWIuZmllbGRzLmxlbmd0aCAmJiAkaW5kZXggPiAwKSB7XHJcblxyXG5cclxuICAgICAgICA8Zm9ybWx5LWZvcm1cclxuICAgICAgICAgIFtmb3JtXT1cImdldEZvcm0oJGluZGV4KVwiXHJcbiAgICAgICAgICBbZmllbGRzXT1cInRhYi5maWVsZHNcIlxyXG4gICAgICAgICAgW21vZGVsXT1cInRhYi5tb2RlbCB8fCBtb2RlbFwiXHJcbiAgICAgICAgPjwvZm9ybWx5LWZvcm0+XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tIEN1c3RvbSB0ZW1wbGF0ZSAtLT5cclxuICAgICAgQGlmICh0YWIuY29udGVudCkge1xyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWIuY29udGVudFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgICAgPC9wLXRhYnBhbmVsPlxyXG4gICAgfVxyXG4gICAgPC9wLXRhYnBhbmVscz5cclxuICA8L3AtdGFicz5cclxuPC9kaXY+XHJcblxyXG48IS0tIFttb2RlbF09XCJtb2RlbFwiIC0tPlxyXG4gIDxhcHAtZ2VuZXJpYy1kaWFsb2dcclxuICAgICNkaWFsb2dcclxuICAgIFtmb3JtRmllbGRzXT1cImZvcm1GaWVsZHMgPz8gW11cIlxyXG4gICAgW2FwaU5hbWVdPVwiYXBpTmFtZVwiXHJcbiAgICBbaWRGaWVsZF09XCJpZEZpZWxkID8/J2lkJ1wiXHJcbiAgICBbZGlzcGxheU1vZGVdPVwiZGlzcGxheU1vZGUgPz8gJ2RpYWxvZydcIlxyXG4gICAgKGFmdGVyU2F2ZSk9XCJhZnRlclNhdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvYXBwLWdlbmVyaWMtZGlhbG9nPlxyXG59XHJcbiJdfQ==","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,120 @@ 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
+ <th
167
+ *ngFor="let col of columns"
168
+ class="px-4 py-3 text-left font-medium border-b"
169
+ >
170
+ {{ col.label | translate }}
171
+ </th>
172
+ </tr>
173
+ </thead>
174
+
175
+ <tbody>
176
+ <tr *ngFor="let row of rows; let i = index"
177
+ class="border-b hover:bg-gray-50">
178
+ <td *ngFor="let col of columns"
179
+ class="px-4 py-2">
180
+ {{ row[col.key] }}
181
+ </td>
182
+ </tr>
183
+
184
+ <tr *ngIf="!rows || rows.length === 0">
185
+ <td [attr.colspan]="columns.length"
186
+ class="text-center py-6 text-gray-400">
187
+ No data
188
+ </td>
189
+ </tr>
190
+
191
+ </tbody>
192
+
193
+ </table>
194
+ </div>
195
+
196
+ </div>
197
+
198
+ `, 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" }] });
199
+ }
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: RepeatTableViewType, decorators: [{
201
+ type: Component,
202
+ args: [{
203
+ selector: 'formly-repeat-table-view',
204
+ template: `
205
+ <div class="mb-0">
206
+
207
+ <!-- <label class="block text-lg font-semibold mb-3">
208
+ {{ field.props?.label }}
209
+ </label> -->
210
+
211
+ <div class="overflow-x-auto rounded-xl border">
212
+ <table class="min-w-full bg-white border-collapse">
213
+
214
+ <thead class="bg-gray-100">
215
+ <tr>
216
+ <th
217
+ *ngFor="let col of columns"
218
+ class="px-4 py-3 text-left font-medium border-b"
219
+ >
220
+ {{ col.label | translate }}
221
+ </th>
222
+ </tr>
223
+ </thead>
224
+
225
+ <tbody>
226
+ <tr *ngFor="let row of rows; let i = index"
227
+ class="border-b hover:bg-gray-50">
228
+ <td *ngFor="let col of columns"
229
+ class="px-4 py-2">
230
+ {{ row[col.key] }}
231
+ </td>
232
+ </tr>
233
+
234
+ <tr *ngIf="!rows || rows.length === 0">
235
+ <td [attr.colspan]="columns.length"
236
+ class="text-center py-6 text-gray-400">
237
+ No data
238
+ </td>
239
+ </tr>
240
+
241
+ </tbody>
242
+
243
+ </table>
244
+ </div>
245
+
246
+ </div>
247
+
248
+ `,
249
+ imports: [CommonModule, TranslateModule],
250
+ }]
251
+ }] });
252
+
142
253
  /**
143
254
  * Generated bundle index. Do not edit.
144
255
  */
145
256
 
146
- export { RepeatModule, RepeatTypeComponent };
257
+ export { RepeatModule, RepeatTableViewType, RepeatTypeComponent };
147
258
  //# sourceMappingURL=elite.framework-ng.ui.core-repeat.mjs.map