@elite.framework/ng.ui.core 2.0.31 → 2.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs +1 -1
- package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs.map +1 -1
- package/fesm2022/elite.framework-ng.ui.core-generic-dialog.mjs +5 -1
- package/fesm2022/elite.framework-ng.ui.core-generic-dialog.mjs.map +1 -1
- package/fesm2022/elite.framework-ng.ui.core-generic-selector.mjs +6 -1
- package/fesm2022/elite.framework-ng.ui.core-generic-selector.mjs.map +1 -1
- package/fesm2022/elite.framework-ng.ui.core-generic-view.mjs +1 -1
- package/fesm2022/elite.framework-ng.ui.core-generic-view.mjs.map +1 -1
- package/generic-dialog/index.d.ts +2 -1
- package/generic-selector/index.d.ts +1 -0
- package/package.json +41 -41
|
@@ -374,7 +374,7 @@ class GenericViewComponent {
|
|
|
374
374
|
// this.goToMode(currentMode);
|
|
375
375
|
}
|
|
376
376
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: GenericViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
377
|
-
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 <!-- border border-surface p-4-->\r\n <div class=\"\">\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\r\n *ngTemplateOutlet=\"tab.content; context: { model: model }\">\r\n </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: "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: TranslatePipe, name: "translate" }] });
|
|
377
|
+
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 <!-- border border-surface p-4-->\r\n <div class=\"\">\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\r\n *ngTemplateOutlet=\"tab.content; context: { model: model }\">\r\n </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: "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", "moduleName", "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: TranslatePipe, name: "translate" }] });
|
|
378
378
|
}
|
|
379
379
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: GenericViewComponent, decorators: [{
|
|
380
380
|
type: Component,
|
|
@@ -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 { TranslatePipe } from '@elite.framework/ng.core/pipes';\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\";\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', // TODO\n fieldGroupClassName: '',\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. GROUP / PANEL / WRAPPER */\n if (field.fieldGroup?.length) {\n const children = flatten(field.fieldGroup);\n if (!children.length)\n return [];\n return [{\n ...field,\n wrappers: field.wrappers,\n props: { ...field.props },\n fieldGroupClassName: field.fieldGroupClassName,\n fieldGroup: children\n }];\n }\n /* 2. FIELD ARRAY (REPEAT / TABLE / MULTI) */\n const fieldArrayConfig = typeof field.fieldArray === 'function'\n ? field.fieldArray(field)\n : field.fieldArray;\n if (field.fieldArray) {\n if (field.props?.['view']?.hidden)\n return [];\n const children = flatten(fieldArrayConfig?.fieldGroup || []);\n if (!children.length)\n return [];\n return [{\n ...field,\n type: field.props?.['view']?.type || field.type,\n readonly: this.viewMode,\n disabled: this.viewMode,\n fieldArray: {\n ...fieldArrayConfig,\n fieldGroup: children\n }\n }];\n }\n /* 3. SINGLE FIELD */\n if (!field.props || field.props['view']?.hidden)\n return [];\n const type = field.props['view']?.type ||\n field.props['table']?.type ||\n field.props['filter']?.type ||\n 'custom-label-type';\n return [{\n type,\n key: field.key,\n readonly: this.viewMode,\n disabled: this.viewMode,\n wrappers: field.wrappers ?? ['field-wrapper'],\n className: field.className,\n props: {\n ...field.props,\n ...(field.props['view']?.props ||\n field.props['table']?.props ||\n field.props['filter']?.props ||\n {}),\n },\n expressions: field.props['view']?.expressions ||\n field.props['table']?.expressions ||\n field.props['filter']?.expressions\n }];\n });\n return flatten(fields);\n }\n // getViewFields(fields: FormlyFieldConfig[] = []): FormlyFieldConfig[] {\n // const flatten = (fields: FormlyFieldConfig[]): FormlyFieldConfig[] =>\n // fields.flatMap(field => {\n // if (field.fieldGroup?.length) return flatten(field.fieldGroup);\n // if (!field.props\n // || field.props['view']?.hidden\n // // || field.props['table']?.hidden\n // ) return [];\n // const type = field.props['view']?.type || field.props['table']?.type || 'custom-label-type';\n // return [{\n // type,\n // key: field['key'],\n // readonly: this.viewMode,\n // disabled: this.viewMode,\n // wrappers: field.wrappers ?? ['field-wrapper'],\n // props: {\n // ...field.props,\n // ...(field.props['view']?.props || field.props['table']?.props),\n // },\n // expressions: field.props['view']?.expressions || field.props['view']?.expressions,\n // }];\n // });\n // return flatten(fields);\n // }\n // Use a map to store form groups for each row and column\n cellForms = new Map();\n getForm(rowIndex) {\n const key = `${rowIndex}_`;\n let form = this.cellForms.get(key);\n if (!form) {\n form = new FormGroup({});\n this.cellForms.set(key, form);\n }\n return form;\n }\n async handleCreateEditAction(btn) {\n try {\n if (btn.action) {\n // Execute the provided action\n await btn.action(null); // You can pass row or context here\n }\n else {\n // Fallback to emitting event\n if (btn.actionName == 'cancel') {\n this.back();\n }\n else {\n this.action.emit({\n name: btn.actionName ?? 'cancel',\n row: null, // provide row if available\n });\n }\n }\n }\n catch (err) {\n console.error('Button action error', err);\n }\n }\n onAction(act, model) {\n if (act.action) {\n act.action(model);\n }\n else {\n // this.action.emit({ name: act.name, row:model });\n this.emitAction({ name: act.name, row: model });\n }\n }\n emitAction(event) {\n switch (event.name) {\n case 'edit':\n this.dialog.openForm(\"edit\", event.row);\n break;\n case 'delete':\n this.onDelete(event.row);\n break;\n default:\n this.action.emit(event);\n break;\n }\n }\n onDelete(item) {\n const id = item[this.idField];\n this.swalService.confirm('تأكيد الحذف', 'هل تريد حذف هذا السجل فعلاً؟', 'نعم، احذف', 'إلغاء').then((result) => {\n if (result.isConfirmed) {\n this.service.delete(id).subscribe({\n next: () => {\n this.swalService.success('تم الحذف بنجاح');\n this.back();\n },\n error: (err) => {\n this.loading = false;\n }\n });\n }\n });\n }\n afterSave(event) {\n this.model = event.response;\n // set the id from backend response\n this.currentId = event.response[this.idField];\n if (this.isCreateMode) {\n this.goToMode('view');\n }\n else if (this.isEditMode) {\n this.goToMode('view');\n }\n }\n goToMode(mode) {\n const tree = this.router.parseUrl(this.router.url);\n const segments = tree.root.children['primary']?.segments.map(s => s.path) ?? [];\n let newSegments;\n if (mode === 'create') {\n // always navigate to \"add\"\n newSegments = [\n ...segments.filter(s => !['view', 'edit', 'add'].includes(s)),\n 'add',\n ];\n }\n else {\n // if in \"add\" mode, replace it with the new id\n if (segments.includes('add')) {\n newSegments = [\n ...segments.filter(s => s !== 'add'),\n String(this.currentId),\n mode,\n ];\n }\n else {\n const idIndex = segments.findIndex(s => s === String(this.currentId));\n if (idIndex === -1) {\n newSegments = [...segments, String(this.currentId), mode];\n }\n else {\n newSegments = segments.slice(0, idIndex + 1);\n newSegments.push(mode);\n }\n }\n }\n this.router.navigate(newSegments);\n this.refresh();\n }\n backToList() {\n this.router.navigate(['../']);\n }\n back() {\n // this.router.navigate(['..']);\n this._location.back();\n }\n loadList() {\n this.loading = true;\n const filters = {\n maxResultCount: this.pageSize,\n skipCount: this.pageIndex * this.pageSize,\n sorting: this.sort,\n ...this.currentFilters,\n ...this.pageFilters,\n ...(this.searchGlobal ? { filter: this.searchGlobal } : {}),\n };\n this.service.getList(filters).subscribe({\n next: (res) => {\n this.list = res.items;\n this.totalRecords = res.totalCount;\n this.loading = false;\n // set model_ to current id item\n const found = this.list.find(x => x[this.idField] == this.currentId);\n if (found) {\n this.model_ = found;\n }\n },\n error: err => {\n console.error('Error loading list', err);\n this.loading = false;\n }\n });\n }\n next() {\n if (!this.currentId)\n return;\n // increment currentId numerically\n // const newId = Number(this.currentId) + 1;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n previous() {\n if (!this.currentId)\n return;\n // decrement currentId numerically\n // const newId = Number(this.currentId) - 1;\n // if (newId <= 0) return;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericViewComponent, isStandalone: true, selector: \"app-detail-view\", inputs: { title: \"title\", actions: \"actions\", createEditActions: \"createEditActions\", tabs: \"tabs\", viewMode: \"viewMode\", breadcrumb: \"breadcrumb\", service: \"service\", formFields: \"formFields\", apiName: \"apiName\", idField: \"idField\", standaloneMode: \"standaloneMode\", isViewMode: \"isViewMode\", isCreateMode: \"isCreateMode\", isEditMode: \"isEditMode\", model: \"model\", displayMode: \"displayMode\", mode: \"mode\", loading: \"loading\" }, outputs: { action: \"action\", afterDelete: \"afterDelete\" }, viewQueries: [{ propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }, { propertyName: \"inlineForm\", first: true, predicate: [\"inlineForm\"], descendants: true }], ngImport: i0, template: \"\\r\\n@if (mode === 'detail') {\\r\\n<div class=\\\"w-full flex flex-col gap-3\\\">\\r\\n <!-- overlay -->\\r\\n <div *ngIf=\\\"loading\\\"\\r\\n class=\\\"absolute inset-0 bg-white/70 flex items-center justify-center z-50\\\">\\r\\n <p-progress-spinner/>\\r\\n </div>\\r\\n\\r\\n <!-- actual content -->\\r\\n <!-- Toolbar -->\\r\\n <p-toolbar style=\\\"background: transparent;border: 0px;box-shadow: none;\\\" class=\\\"bg-transparent shadow-none border-none rounded-md px-3\\\">\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n <!-- <span class=\\\"font-semibold text-lg xs:hidden block\\\">{{ title }}</span> -->\\r\\n <app-breadcrumb class=\\\"xs:block\\\" [breadcrumb]=\\\"breadcrumb\\\"></app-breadcrumb> <!-- xs:block hidden -->\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u062A\\u0627\\u0644\\u064A\\\"\\r\\n (click)=\\\"next()\\\"\\r\\n ></button>\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\\"\\r\\n (click)=\\\"previous()\\\"\\r\\n ></button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-toolbar>\\r\\n <p-toolbar class=\\\"bg-white shadow rounded-md px-3\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n @if (isViewMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (action of actions_; track $index) {\\r\\n <button\\r\\n pButton pRipple\\r\\n [icon]=\\\"action.icon ?? ''\\\"\\r\\n [label]=\\\"(action.label ?? '') | translate\\\"\\r\\n class=\\\"fd-btn\\\"\\r\\n (click)=\\\"onAction(action,model)\\\"\\r\\n ></button>\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (btn of createEditActions; track $index) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n @if (btn.type === 'submit' && inlineForm) {\\r\\n <lib-generic-button\\r\\n [type]=\\\"'submit'\\\"\\r\\n [loading]=\\\"inlineForm.loading\\\"\\r\\n [disabled]=\\\"inlineForm.loading || form.invalid\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"inlineForm.onSubmit()\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n @else{\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleCreateEditAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n\\r\\n </p-toolbar>\\r\\n\\r\\n <!-- Tabs -->\\r\\n <p-tabs value=\\\"0\\\">\\r\\n <p-tablist>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tab value=\\\"{{$index}}\\\">\\r\\n <i [class]=\\\"tab.icon\\\"></i>\\r\\n <span class=\\\"mr-1 ml-1\\\">{{ tab.header }}</span>\\r\\n </p-tab>\\r\\n }\\r\\n </p-tablist>\\r\\n <p-tabpanels>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tabpanel value=\\\"{{$index}}\\\">\\r\\n\\r\\n <!-- Formly fields -->\\r\\n <!-- border border-surface p-4-->\\r\\n <div class=\\\"\\\">\\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\\r\\n *ngTemplateOutlet=\\\"tab.content; context: { model: model }\\\">\\r\\n </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: \"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: 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 TranslatePipe,\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 <!-- border border-surface p-4-->\\r\\n <div class=\\\"\\\">\\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\\r\\n *ngTemplateOutlet=\\\"tab.content; context: { model: model }\\\">\\r\\n </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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdmlldy9zcmMvbGliL2dlbmVyaWMtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXZpZXcvc3JjL2xpYi9nZW5lcmljLXZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlC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bVNBQ1gsbUJBQW1CLGdMQUVuQixtQkFBbUIsa0ZBQ25CLGFBQWEsc1hBQ2Isc0JBQXNCLGloQkFDdEIsYUFBYSw4UEFDYixxQkFBcUIsa09BTHJCLGFBQWE7OzJGQVNKLG9CQUFvQjtrQkFwQmhDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2Isc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLHFCQUFxQjtxQkFDdEI7OEJBU1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUUsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNFLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0UsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQW5CLEtBQUs7Z0JBV0MsSUFBSTtzQkFBWixLQUFLO2dCQUVPLE1BQU07c0JBQWYsTUFBTTtnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVjLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDTSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBUWhCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRvb2xiYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2xiYXInO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IEZvcm1seUZvcm0sIEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3BpcGVzJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJDb21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvYnJlYWRjcnVtYic7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBTd2FsU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBY3Rpb25EZWYsIEJ1dHRvbkNvbmZpZywgUGFnaW5hdGVkUmVzdWx0IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcclxuaW1wb3J0IHsgR2VuZXJpY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWRpYWxvZyc7XHJcbmltcG9ydCB7IEdlbmVyaWNCdXR0b24gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1idXR0b24nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZXRhaWxUYWIge1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xyXG4gIG1vZGVsPzogYW55O1xyXG4gIGNvbnRlbnQ/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kZXRhaWwtdmlldycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUb29sYmFyTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgVGFic01vZHVsZSxcclxuICAgIEZvcm1seUZvcm0sXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgQnJlYWRjcnVtYkNvbXBvbmVudCxcclxuICAgIFRvb2x0aXBNb2R1bGUsXHJcbiAgICBHZW5lcmljRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgR2VuZXJpY0J1dHRvbixcclxuICAgIFByb2dyZXNzU3Bpbm5lck1vZHVsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMtdmlldy5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdlbmVyaWNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG5cclxuICBmb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG5cclxuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGFjdGlvbnM6IEFjdGlvbkRlZjxhbnk+W10gPSBbXTtcclxuICAgQElucHV0KCkgY3JlYXRlRWRpdEFjdGlvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgIGFjdGlvbnNfOiBBY3Rpb25EZWY8YW55PltdID0gW107XHJcbiAgQElucHV0KCkgdGFiczogRGV0YWlsVGFiW10gPSBbXTtcclxuICBASW5wdXQoKSB2aWV3TW9kZSA9IHRydWU7XHJcbiAgQElucHV0KCkgYnJlYWRjcnVtYjogTWVudUl0ZW1bXSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZXJ2aWNlOiBCYXNlU2VydmljZSA9IGluamVjdChCYXNlU2VydmljZSk7XHJcbiAgQElucHV0KCkgZm9ybUZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGFwaU5hbWUgPSAnJztcclxuICBASW5wdXQoKSBpZEZpZWxkID0gJ2lkJztcclxuIEBJbnB1dCgpIHN0YW5kYWxvbmVNb2RlID0gZmFsc2U7XHJcbiBASW5wdXQoKSBpc1ZpZXdNb2RlID0gdHJ1ZTsgLy8g2YjYtti5INin2YTZhdi02KfZh9iv2Kkg2YHZgti3XHJcbiBASW5wdXQoKSBpc0NyZWF0ZU1vZGUgPSBmYWxzZTsgLy8g2YjYtti5INin2YTYp9i22KfZgdipINmB2YLYt1xyXG4gIEBJbnB1dCgpIGlzRWRpdE1vZGUgPSBmYWxzZTsgLy8g2YjYtti5INin2YTYqti52K/ZitmEXHJcbiBASW5wdXQoKSBtb2RlbCA9IHt9O1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlNb2RlOlxyXG4gICAgfCAnZHJhd2VyJ1xyXG4gICAgfCAnZGlhbG9nJ1xyXG4gICAgfCAncm91dGUnXHJcbiAgICB8ICdpbmxpbmUnXHJcbiAgICB8IFBhcnRpYWw8XHJcbiAgICAgIFJlY29yZDxcclxuICAgICAgICAnYWRkJyB8ICdlZGl0JyB8ICd2aWV3JyxcclxuICAgICAgICAnZHJhd2VyJyB8ICdkaWFsb2cnIHwgJ3JvdXRlJyB8ICdpbmxpbmUnXHJcbiAgICAgID5cclxuICAgID4gPSAnZHJhd2VyJztcclxuQElucHV0KCkgbW9kZTogJ2Z1bGwnIHwgJ2Zvcm0tb25seScgfCAndGFibGUtb25seScgfCAnZGV0YWlsJyA9ICdmdWxsJztcclxuXHJcbiAgIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyByb3c6IGFueSB9PigpO1xyXG4gICAgQE91dHB1dCgpIGFmdGVyRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogYW55OyByZXNwb25zZT86IGFueSB9PigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZycpIGRpYWxvZyE6IEdlbmVyaWNEaWFsb2dDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdpbmxpbmVGb3JtJykgaW5saW5lRm9ybSE6IEdlbmVyaWNEaWFsb2dDb21wb25lbnQ7XHJcblxyXG4gIHRhYnNfOiBEZXRhaWxUYWJbXSA9IFtdO1xyXG4gIG1vZGVsXzogYW55ID0ge307XHJcblxyXG4gIGN1cnJlbnRJZCE6IHN0cmluZyB8IG51bWJlcjtcclxuICBsaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHRvdGFsUmVjb3JkcyA9IDA7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAvLyBwYWdpbmF0aW9uIHN0YXRlXHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBwYWdlSW5kZXggPSAwO1xyXG4gIHNvcnQgPSAnJztcclxuICBjdXJyZW50RmlsdGVyczogYW55ID0ge307XHJcbiAgcGFnZUZpbHRlcnM6IGFueSA9IHt9O1xyXG4gIHNlYXJjaEdsb2JhbCA9ICcnO1xyXG4gcHJpdmF0ZSBzd2FsU2VydmljZSA9IGluamVjdChTd2FsU2VydmljZSk7XHJcblxyXG4gX2xvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmFwaU5hbWUpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmFwaU5hbWUgPSB0aGlzLmFwaU5hbWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuYWN0aW9uc18gPSB0aGlzLmFjdGlvbnMuZmlsdGVyKGM9PmMubmFtZSAhPSAndmlldycpO1xyXG5cclxuICAgICAgdGhpcy5yb3V0ZS5wYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJhbXMuZ2V0KHRoaXMuaWRGaWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudElkID0gaWQ7XHJcbiAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhbmRhbG9uZU1vZGUpe1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZExpc3QoKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG5cclxuICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCl7XHJcblxyXG4gICAgLy8gZGV0ZWN0IG1vZGUgYmFzZWQgb24gcm91dGVcclxuICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICB0aGlzLmlzVmlld01vZGUgPSB1cmwuaW5jbHVkZXMoJy92aWV3Jyk7XHJcbiAgdGhpcy5pc0VkaXRNb2RlID0gdXJsLmluY2x1ZGVzKCcvZWRpdCcpO1xyXG4gIHRoaXMuaXNDcmVhdGVNb2RlID0gdXJsLmluY2x1ZGVzKCcvY3JlYXRlJykgfHwgdXJsLmVuZHNXaXRoKCcvbmV3JykgfHwgdXJsLmVuZHNXaXRoKCcvYWRkJyk7XHJcblxyXG4gIHRoaXMudGFic18gPSBbXTtcclxuZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhYnMubGVuZ3RoOyBpKyspIHtcclxuICBjb25zdCB0ID0gdGhpcy50YWJzW2ldO1xyXG4gIHRoaXMudGFic18ucHVzaCh7XHJcbiAgICAuLi50LFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBwcm9wczogeyBsYWJlbDogJycgfSxcclxuICAgICAgICAgLy8gZmllbGRHcm91cENsYXNzTmFtZTogJ2dyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTMnLCAvLyBUT0RPXHJcbiAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJycsXHJcbiAgICAgICAgZmllbGRHcm91cDpcclxuICAgICAgICAgIHRoaXMuaXNDcmVhdGVNb2RlIHx8IHRoaXMuaXNFZGl0TW9kZVxyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q3JlYXRlRWRpdEZpZWxkcyhpID09IDAgPyB0aGlzLmZvcm1GaWVsZHM6IHQuZmllbGRzKVxyXG4gICAgICAgICAgICA6IHRoaXMuZ2V0Vmlld0ZpZWxkcyhpID09IDAgPyB0aGlzLmZvcm1GaWVsZHMgOiB0LmZpZWxkcyksXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH0pO1xyXG59XHJcbnRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuICAvLyBhcyBmb3JtXHJcbiAgIGdldENyZWF0ZUVkaXRGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBmaWVsZHMubWFwKGYgPT4gKHtcclxuICAgICAgLi4uZixcclxuICAgICAgcHJvcHM6IHsgLi4uZi5wcm9wcywgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsIGRpc2FibGVkOiB0aGlzLnZpZXdNb2RlIH0sXHJcbiAgICB9KSk7XHJcbiAgfVxyXG4gIGdldFZpZXdGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICBjb25zdCBmbGF0dGVuID0gKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10gPT5cclxuICAgIGZpZWxkcy5mbGF0TWFwKChmaWVsZDphbnkpID0+IHtcclxuXHJcbiAgICAgIC8qIDEuIEdST1VQIC8gUEFORUwgLyBXUkFQUEVSICovXHJcbiAgICAgIGlmIChmaWVsZC5maWVsZEdyb3VwPy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZsYXR0ZW4oZmllbGQuZmllbGRHcm91cCk7XHJcblxyXG4gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgLi4uZmllbGQsXHJcbiAgICAgICAgICB3cmFwcGVyczogZmllbGQud3JhcHBlcnMsXHJcbiAgICAgICAgICBwcm9wczogeyAuLi5maWVsZC5wcm9wcyB9LFxyXG4gICAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogZmllbGQuZmllbGRHcm91cENsYXNzTmFtZSxcclxuICAgICAgICAgIGZpZWxkR3JvdXA6IGNoaWxkcmVuXHJcbiAgICAgICAgfV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIDIuIEZJRUxEIEFSUkFZIChSRVBFQVQgLyBUQUJMRSAvIE1VTFRJKSAqL1xyXG4gICAgICBjb25zdCBmaWVsZEFycmF5Q29uZmlnID1cclxuICAgICAgICB0eXBlb2YgZmllbGQuZmllbGRBcnJheSA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICAgICAgPyBmaWVsZC5maWVsZEFycmF5KGZpZWxkKVxyXG4gICAgICAgICAgOiBmaWVsZC5maWVsZEFycmF5O1xyXG5cclxuICAgICAgaWYgKGZpZWxkLmZpZWxkQXJyYXkpIHtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLnByb3BzPy5bJ3ZpZXcnXT8uaGlkZGVuKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZmxhdHRlbihmaWVsZEFycmF5Q29uZmlnPy5maWVsZEdyb3VwIHx8IFtdKTtcclxuXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgICAuLi5maWVsZCxcclxuICAgICAgICAgIHR5cGU6IGZpZWxkLnByb3BzPy5bJ3ZpZXcnXT8udHlwZSB8fCBmaWVsZC50eXBlLFxyXG4gICAgICAgICAgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsXHJcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICAgIGZpZWxkQXJyYXk6IHtcclxuICAgICAgICAgICAgLi4uZmllbGRBcnJheUNvbmZpZyxcclxuICAgICAgICAgICAgZmllbGRHcm91cDogY2hpbGRyZW5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogMy4gU0lOR0xFIEZJRUxEICovXHJcbiAgICAgIGlmICghZmllbGQucHJvcHMgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uaGlkZGVuKSByZXR1cm4gW107XHJcblxyXG4gICAgICBjb25zdCB0eXBlID1cclxuICAgICAgICBmaWVsZC5wcm9wc1sndmlldyddPy50eXBlIHx8XHJcbiAgICAgICAgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnR5cGUgfHxcclxuICAgICAgICBmaWVsZC5wcm9wc1snZmlsdGVyJ10/LnR5cGUgfHxcclxuICAgICAgICAnY3VzdG9tLWxhYmVsLXR5cGUnO1xyXG5cclxuICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBrZXk6IGZpZWxkLmtleSxcclxuICAgICAgICByZWFkb25seTogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICB3cmFwcGVyczogZmllbGQud3JhcHBlcnMgPz8gWydmaWVsZC13cmFwcGVyJ10sXHJcbiAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIC4uLmZpZWxkLnByb3BzLFxyXG4gICAgICAgICAgLi4uKGZpZWxkLnByb3BzWyd2aWV3J10/LnByb3BzIHx8XHJcbiAgICAgICAgICAgIGZpZWxkLnByb3BzWyd0YWJsZSddPy5wcm9wcyB8fFxyXG4gICAgICAgICAgICBmaWVsZC5wcm9wc1snZmlsdGVyJ10/LnByb3BzIHx8XHJcbiAgICAgICAgICAgIHt9KSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGV4cHJlc3Npb25zOlxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMgfHxcclxuICAgICAgICAgIGZpZWxkLnByb3BzWyd0YWJsZSddPy5leHByZXNzaW9ucyB8fFxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ2ZpbHRlciddPy5leHByZXNzaW9uc1xyXG4gICAgICB9XTtcclxuICAgIH0pO1xyXG5cclxuICByZXR1cm4gZmxhdHRlbihmaWVsZHMpO1xyXG59XHJcblxyXG4gIC8vIGdldFZpZXdGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAvLyAgIGNvbnN0IGZsYXR0ZW4gPSAoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogRm9ybWx5RmllbGRDb25maWdbXSA9PlxyXG4gIC8vICAgICBmaWVsZHMuZmxhdE1hcChmaWVsZCA9PiB7XHJcbiAgLy8gICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXA/Lmxlbmd0aCkgcmV0dXJuIGZsYXR0ZW4oZmllbGQuZmllbGRHcm91cCk7XHJcbiAgLy8gICAgICAgaWYgKCFmaWVsZC5wcm9wc1xyXG4gIC8vICAgICAgICAgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uaGlkZGVuXHJcbiAgLy8gICAgICAgICAvLyB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8uaGlkZGVuXHJcbiAgLy8gICAgICAgICkgcmV0dXJuIFtdO1xyXG5cclxuICAvLyAgICAgICBjb25zdCB0eXBlID0gZmllbGQucHJvcHNbJ3ZpZXcnXT8udHlwZSB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8udHlwZSB8fCAnY3VzdG9tLWxhYmVsLXR5cGUnO1xyXG4gIC8vICAgICAgIHJldHVybiBbe1xyXG4gIC8vICAgICAgICAgdHlwZSxcclxuICAvLyAgICAgICAgIGtleTogZmllbGRbJ2tleSddLFxyXG4gIC8vICAgICAgICAgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsXHJcbiAgLy8gICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAvLyAgICAgICAgIHdyYXBwZXJzOiBmaWVsZC53cmFwcGVycyA/PyBbJ2ZpZWxkLXdyYXBwZXInXSxcclxuICAvLyAgICAgICAgIHByb3BzOiB7XHJcbiAgLy8gICAgICAgICAgIC4uLmZpZWxkLnByb3BzLFxyXG4gIC8vICAgICAgICAgICAuLi4oZmllbGQucHJvcHNbJ3ZpZXcnXT8ucHJvcHMgfHwgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnByb3BzKSxcclxuICAvLyAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICBleHByZXNzaW9uczogZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMsXHJcbiAgLy8gICAgICAgfV07XHJcbiAgLy8gICAgIH0pO1xyXG5cclxuICAvLyAgIHJldHVybiBmbGF0dGVuKGZpZWxkcyk7XHJcbiAgLy8gfVxyXG5cclxuICAgICAvLyBVc2UgYSBtYXAgdG8gc3RvcmUgZm9ybSBncm91cHMgZm9yIGVhY2ggcm93IGFuZCBjb2x1bW5cclxuICBwcml2YXRlIGNlbGxGb3JtczogTWFwPHN0cmluZywgRm9ybUdyb3VwPiA9IG5ldyBNYXAoKTtcclxuICAgIGdldEZvcm0ocm93SW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB7XHJcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH1fYDtcclxuICAgIGxldCBmb3JtID0gdGhpcy5jZWxsRm9ybXMuZ2V0KGtleSk7XHJcblxyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5jZWxsRm9ybXMuc2V0KGtleSwgZm9ybSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG5cclxuICAgYXN5bmMgaGFuZGxlQ3JlYXRlRWRpdEFjdGlvbihidG46IEJ1dHRvbkNvbmZpZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGJ0bi5hY3Rpb24pIHtcclxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBwcm92aWRlZCBhY3Rpb25cclxuICAgICAgICBhd2FpdCBidG4uYWN0aW9uKG51bGwpOyAvLyBZb3UgY2FuIHBhc3Mgcm93IG9yIGNvbnRleHQgaGVyZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGVtaXR0aW5nIGV2ZW50XHJcbiAgICAgICAgaWYoYnRuLmFjdGlvbk5hbWUgPT0gJ2NhbmNlbCcpe1xyXG4gICAgICAgICAgdGhpcy5iYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgICBuYW1lOiBidG4uYWN0aW9uTmFtZSA/PyAnY2FuY2VsJyxcclxuICAgICAgICAgIHJvdzogbnVsbCEsIC8vIHByb3ZpZGUgcm93IGlmIGF2YWlsYWJsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdCdXR0b24gYWN0aW9uIGVycm9yJywgZXJyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxub25BY3Rpb24oYWN0OiBBY3Rpb25EZWY8YW55PiwgbW9kZWw6IGFueSkge1xyXG4gICAgaWYgKGFjdC5hY3Rpb24pIHtcclxuICAgICAgYWN0LmFjdGlvbihtb2RlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLmFjdGlvbi5lbWl0KHsgbmFtZTogYWN0Lm5hbWUsIHJvdzptb2RlbCB9KTtcclxuICAgICAgdGhpcy5lbWl0QWN0aW9uKHsgbmFtZTogYWN0Lm5hbWUsIHJvdzptb2RlbCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgZW1pdEFjdGlvbihldmVudDogeyBuYW1lOiBzdHJpbmc7IHJvdzogYW55IHwgbnVsbCB9KTogdm9pZCB7XHJcbiAgc3dpdGNoIChldmVudC5uYW1lKSB7XHJcbiAgICBjYXNlICdlZGl0JzpcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbkZvcm0oXCJlZGl0XCIsZXZlbnQucm93KTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICB0aGlzLm9uRGVsZXRlKGV2ZW50LnJvdyEpO1xyXG4gICAgICBicmVhaztcclxuICAgIGRlZmF1bHQgOlxyXG4gICAgICB0aGlzLmFjdGlvbi5lbWl0KGV2ZW50KTtcclxuICAgICAgYnJlYWs7XHJcbiAgfVxyXG59XHJcblxyXG5vbkRlbGV0ZShpdGVtOiBhbnkpOiB2b2lkIHtcclxuICBjb25zdCBpZCA9IGl0ZW1bdGhpcy5pZEZpZWxkXTtcclxuXHJcbiAgdGhpcy5zd2FsU2VydmljZS5jb25maXJtKFxyXG4gICAgJ9iq2KPZg9mK2K8g2KfZhNit2LDZgScsXHJcbiAgICAn2YfZhCDYqtix2YrYryDYrdiw2YEg2YfYsNinINin2YTYs9is2YQg2YHYudmE2KfZi9ifJyxcclxuICAgICfZhti52YXYjCDYp9it2LDZgScsXHJcbiAgICAn2KXZhNi62KfYoSdcclxuICApLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlKGlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3dhbFNlcnZpY2Uuc3VjY2Vzcygn2KrZhSDYp9mE2K3YsNmBINio2YbYrNin2K0nKTtcclxuICAgICAgICAgIHRoaXMuYmFjaygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuIGFmdGVyU2F2ZShldmVudDogYW55KSB7XHJcbiAgdGhpcy5tb2RlbCA9IGV2ZW50LnJlc3BvbnNlO1xyXG5cclxuICAvLyBzZXQgdGhlIGlkIGZyb20gYmFja2VuZCByZXNwb25zZVxyXG4gIHRoaXMuY3VycmVudElkID0gZXZlbnQucmVzcG9uc2VbdGhpcy5pZEZpZWxkXTtcclxuXHJcbiAgaWYgKHRoaXMuaXNDcmVhdGVNb2RlKSB7XHJcbiAgICB0aGlzLmdvVG9Nb2RlKCd2aWV3Jyk7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgIHRoaXMuZ29Ub01vZGUoJ3ZpZXcnKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuZ29Ub01vZGUobW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ2NyZWF0ZScpIHtcclxuICBjb25zdCB0cmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcclxuICBjb25zdCBzZWdtZW50cyA9IHRyZWUucm9vdC5jaGlsZHJlblsncHJpbWFyeSddPy5zZWdtZW50cy5tYXAocyA9PiBzLnBhdGgpID8/IFtdO1xyXG5cclxuICBsZXQgbmV3U2VnbWVudHM6IHN0cmluZ1tdO1xyXG5cclxuICBpZiAobW9kZSA9PT0gJ2NyZWF0ZScpIHtcclxuICAgIC8vIGFsd2F5cyBuYXZpZ2F0ZSB0byBcImFkZFwiXHJcbiAgICBuZXdTZWdtZW50cyA9IFtcclxuICAgICAgLi4uc2VnbWVudHMuZmlsdGVyKHMgPT4gIVsndmlldycsICdlZGl0JywgJ2FkZCddLmluY2x1ZGVzKHMpKSxcclxuICAgICAgJ2FkZCcsXHJcbiAgICBdO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBpZiBpbiBcImFkZFwiIG1vZGUsIHJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IGlkXHJcbiAgICBpZiAoc2VnbWVudHMuaW5jbHVkZXMoJ2FkZCcpKSB7XHJcbiAgICAgIG5ld1NlZ21lbnRzID0gW1xyXG4gICAgICAgIC4uLnNlZ21lbnRzLmZpbHRlcihzID0+IHMgIT09ICdhZGQnKSxcclxuICAgICAgICBTdHJpbmcodGhpcy5jdXJyZW50SWQpLFxyXG4gICAgICAgIG1vZGUsXHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpZEluZGV4ID0gc2VnbWVudHMuZmluZEluZGV4KHMgPT4gcyA9PT0gU3RyaW5nKHRoaXMuY3VycmVudElkKSk7XHJcbiAgICAgIGlmIChpZEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgIG5ld1NlZ21lbnRzID0gWy4uLnNlZ21lbnRzLCBTdHJpbmcodGhpcy5jdXJyZW50SWQpLCBtb2RlXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdTZWdtZW50cyA9IHNlZ21lbnRzLnNsaWNlKDAsIGlkSW5kZXggKyAxKTtcclxuICAgICAgICBuZXdTZWdtZW50cy5wdXNoKG1vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdTZWdtZW50cyk7XHJcbiAgdGhpcy5yZWZyZXNoKCk7XHJcbn1cclxuXHJcblxyXG5iYWNrVG9MaXN0KCl7XHJcbiAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddKTtcclxuICAgIH1cclxuYmFjaygpe1xyXG4gICAgICAvLyAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLiddKTtcclxuICAgICAgIHRoaXMuX2xvY2F0aW9uLmJhY2soKVxyXG4gICAgfVxyXG4gIGxvYWRMaXN0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZpbHRlcnMgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBza2lwQ291bnQ6IHRoaXMucGFnZUluZGV4ICogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgc29ydGluZzogdGhpcy5zb3J0LFxyXG4gICAgICAuLi50aGlzLmN1cnJlbnRGaWx0ZXJzLFxyXG4gICAgICAuLi50aGlzLnBhZ2VGaWx0ZXJzLFxyXG4gICAgICAuLi4odGhpcy5zZWFyY2hHbG9iYWwgPyB7IGZpbHRlcjogdGhpcy5zZWFyY2hHbG9iYWwgfSA6IHt9KSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXJ2aWNlLmdldExpc3QoZmlsdGVycykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogUGFnaW5hdGVkUmVzdWx0PGFueT4pID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QgPSByZXMuaXRlbXM7XHJcbiAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXMudG90YWxDb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gc2V0IG1vZGVsXyB0byBjdXJyZW50IGlkIGl0ZW1cclxuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMubGlzdC5maW5kKHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWxfID0gZm91bmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGxpc3QnLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiBuZXh0KCkge1xyXG4gIGlmICghdGhpcy5jdXJyZW50SWQpIHJldHVybjtcclxuXHJcbiAgLy8gaW5jcmVtZW50IGN1cnJlbnRJZCBudW1lcmljYWxseVxyXG4gIC8vIGNvbnN0IG5ld0lkID0gTnVtYmVyKHRoaXMuY3VycmVudElkKSArIDE7XHJcbiAgLy8gdGhpcy5jdXJyZW50SWQgPSBuZXdJZDtcclxuICAvLyB1c2UgZ29Ub01vZGUgdG8gbmF2aWdhdGUgYW5kIGtlZXAgbW9kZVxyXG4gIGNvbnN0IGN1cnJlbnRNb2RlID0gdGhpcy5pc0VkaXRNb2RlID8gJ2VkaXQnIDogJ3ZpZXcnO1xyXG4gIC8vIHRoaXMuZ29Ub01vZGUoY3VycmVudE1vZGUpO1xyXG59XHJcblxyXG5wcmV2aW91cygpIHtcclxuICBpZiAoIXRoaXMuY3VycmVudElkKSByZXR1cm47XHJcblxyXG4gIC8vIGRlY3JlbWVudCBjdXJyZW50SWQgbnVtZXJpY2FsbHlcclxuICAvLyBjb25zdCBuZXdJZCA9IE51bWJlcih0aGlzLmN1cnJlbnRJZCkgLSAxO1xyXG4gIC8vIGlmIChuZXdJZCA8PSAwKSByZXR1cm47XHJcblxyXG4gIC8vIHRoaXMuY3VycmVudElkID0gbmV3SWQ7XHJcblxyXG4gIC8vIHVzZSBnb1RvTW9kZSB0byBuYXZpZ2F0ZSBhbmQga2VlcCBtb2RlXHJcbiAgY29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmlzRWRpdE1vZGUgPyAnZWRpdCcgOiAndmlldyc7XHJcbiAgLy8gdGhpcy5nb1RvTW9kZShjdXJyZW50TW9kZSk7XHJcbn1cclxuXHJcblxyXG4gIC8vIG5leHQoKSB7XHJcbiAgLy8gICBjb25zdCBpZHggPSB0aGlzLmxpc3QuZmluZEluZGV4KHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAvLyAgIGlmIChpZHggPj0gMCAmJiBpZHggPCB0aGlzLmxpc3QubGVuZ3RoIC0gMSkge1xyXG4gIC8vICAgICBjb25zdCBuZXdJZCA9IHRoaXMubGlzdFtpZHggKyAxXVt0aGlzLmlkRmllbGRdO1xyXG4gIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycsIG5ld0lkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJldmlvdXMoKSB7XHJcbiAgLy8gICBjb25zdCBpZHggPSB0aGlzLmxpc3QuZmluZEluZGV4KHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAvLyAgIGlmIChpZHggPiAwKSB7XHJcbiAgLy8gICAgIGNvbnN0IG5ld0lkID0gdGhpcy5saXN0W2lkeCAtIDFdW3RoaXMuaWRGaWVsZF07XHJcbiAgLy8gICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgbmV3SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG59XHJcblxyXG4iLCJcclxuQGlmIChtb2RlID09PSAnZGV0YWlsJykge1xyXG48ZGl2ICBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtY29sIGdhcC0zXCI+XHJcbiAgPCEtLSBvdmVybGF5IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCJcclxuICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy13aGl0ZS83MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB6LTUwXCI+XHJcbiAgICA8cC1wcm9ncmVzcy1zcGlubmVyLz5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBhY3R1YWwgY29udGVudCAtLT5cclxuICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgPHAtdG9vbGJhciBzdHlsZT1cImJhY2tncm91bmQ6IHRyYW5zcGFyZW50O2JvcmRlcjogMHB4O2JveC1zaGFkb3c6IG5vbmU7XCIgY2xhc3M9XCJiZy10cmFuc3BhcmVudCBzaGFkb3ctbm9uZSBib3JkZXItbm9uZSByb3VuZGVkLW1kIHB4LTNcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XHJcbiAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtbGcgeHM6aGlkZGVuIGJsb2NrXCI+e3sgdGl0bGUgfX08L3NwYW4+IC0tPlxyXG4gICAgICA8YXBwLWJyZWFkY3J1bWIgY2xhc3M9XCJ4czpibG9ja1wiIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJcIj48L2FwcC1icmVhZGNydW1iPiA8IS0tIHhzOmJsb2NrIGhpZGRlbiAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgICBpY29uPVwicGkgcGktY2hldnJvbi1yaWdodFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtIGZkLWJ0blwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCLYp9mE2KrYp9mE2YpcIlxyXG4gICAgICAgIChjbGljayk9XCJuZXh0KClcIlxyXG4gICAgICA+PC9idXR0b24+XHJcbiAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgICAgaWNvbj1cInBpIHBpLWNoZXZyb24tbGVmdFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtIGZkLWJ0blwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCLYp9mE2LPYp9io2YJcIlxyXG4gICAgICAgIChjbGljayk9XCJwcmV2aW91cygpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRvb2xiYXI+XHJcbiAgIDxwLXRvb2xiYXIgY2xhc3M9XCJiZy13aGl0ZSBzaGFkb3cgcm91bmRlZC1tZCBweC0zXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgIEBpZiAoaXNWaWV3TW9kZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMVwiPlxyXG4gICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGFjdGlvbnNfOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgIFtpY29uXT1cImFjdGlvbi5pY29uID8/ICcnXCJcclxuICAgICAgICAgIFtsYWJlbF09XCIoYWN0aW9uLmxhYmVsID8/ICcnKSB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgY2xhc3M9XCJmZC1idG5cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkFjdGlvbihhY3Rpb24sbW9kZWwpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgQGlmIChpc0VkaXRNb2RlIHx8IGlzQ3JlYXRlTW9kZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMVwiPlxyXG4gICAgICAgQGZvciAoYnRuIG9mIGNyZWF0ZUVkaXRBY3Rpb25zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgQGlmICghYnRuLnZpc2libGUgfHwgKGJ0bi52aXNpYmxlICYmIGJ0bi52aXNpYmxlID09PSB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICBAaWYgKGJ0bi50eXBlID09PSAnc3VibWl0JyAmJiBpbmxpbmVGb3JtKSB7XHJcbiAgICAgICAgICAgICAgPGxpYi1nZW5lcmljLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiJ3N1Ym1pdCdcIlxyXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiaW5saW5lRm9ybS5sb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbmxpbmVGb3JtLmxvYWRpbmcgfHwgZm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJidG4ubGFiZWwgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImJ0bi5zZXZlcml0eVwiXHJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbbW9kZWxdPVwiYnRuLnNwbGl0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJpbmxpbmVGb3JtLm9uU3VibWl0KClcIlxyXG4gICAgICAgICAgICAgID48L2xpYi1nZW5lcmljLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBAZWxzZXtcclxuICAgICAgICAgICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJidG4uaWNvblwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnRuLmxhYmVsIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cImJ0bi52YXJpYW50XCJcclxuICAgICAgICAgICAgICAgIFtzZXZlcml0eV09XCJidG4uc2V2ZXJpdHlcIlxyXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiYnRuLnNpemVcIlxyXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cImJ0bi5zcGxpdEFjdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgW3Blcm1pc3Npb25dPVwiYnRuLnBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiaGFuZGxlQ3JlYXRlRWRpdEFjdGlvbihidG4pXCJcclxuICAgICAgICAgICAgICA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPC9wLXRvb2xiYXI+XHJcblxyXG4gIDwhLS0gVGFicyAtLT5cclxuICA8cC10YWJzIHZhbHVlPVwiMFwiPlxyXG4gICAgPHAtdGFibGlzdD5cclxuICAgICAgIEBmb3IgKHRhYiBvZiB0YWJzXzsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHAtdGFiIHZhbHVlPVwie3skaW5kZXh9fVwiPlxyXG4gICAgICAgICAgPGkgW2NsYXNzXT1cInRhYi5pY29uXCI+PC9pPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMSBtbC0xXCI+e3sgdGFiLmhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICA8L3AtdGFiPlxyXG4gICAgICAgfVxyXG4gICAgPC9wLXRhYmxpc3Q+XHJcbiAgICA8cC10YWJwYW5lbHM+XHJcbiAgICAgIEBmb3IgKHRhYiBvZiB0YWJzXzsgdHJhY2sgJGluZGV4KSB7XHJcbiA8cC10YWJwYW5lbCB2YWx1ZT1cInt7JGluZGV4fX1cIj5cclxuXHJcbiAgICAgIDwhLS0gRm9ybWx5IGZpZWxkcyAtLT5cclxuICAgICAgPCEtLSBib3JkZXIgYm9yZGVyLXN1cmZhY2UgcC00LS0+XHJcbiAgICAgIDxkaXYgIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgQGlmICh0YWIuZmllbGRzLmxlbmd0aCAmJiAkaW5kZXggPT09IDApIHtcclxuXHJcbiAgICAgICA8Zm9ybSAqbmdJZj1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgICAgICAgQGlmICh0YWIuZmllbGRzLmxlbmd0aCAmJiAkaW5kZXggPT09IDAgKSB7XHJcbiBAaWYgKGlzRWRpdE1vZGUgfHwgaXNDcmVhdGVNb2RlKSB7XHJcbiAgICAgICAgIDxhcHAtZ2VuZXJpYy1kaWFsb2dcclxuICAgICAgICAgI2lubGluZUZvcm1cclxuICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICBbZm9ybUZpZWxkc109XCJmb3JtRmllbGRzID8/IFtdXCJcclxuICAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxyXG4gICAgW2lkRmllbGRdPVwiaWRGaWVsZCA/PydpZCdcIlxyXG4gICAgW2Rpc3BsYXlNb2RlXT1cIidpbmxpbmUnXCJcclxuICAgICBbbW9kZV09XCInZm9ybS1vbmx5J1wiXHJcbiAgICAgW2ZvcmNlU3RhdGVdPVwiaXNDcmVhdGVNb2RlID8gJ2NyZWF0ZSc6J2VkaXQnXCJcclxuICAgIChhZnRlclNhdmUpPVwiYWZ0ZXJTYXZlKCRldmVudClcIlxyXG4gID5cclxuICA8L2FwcC1nZW5lcmljLWRpYWxvZz5cclxufVxyXG5AZWxzZSBpZihpc1ZpZXdNb2RlKXtcclxuIDxmb3JtbHktZm9ybVxyXG4gICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICBbZmllbGRzXT1cInRhYi5maWVsZHNcIlxyXG4gICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxufVxyXG59XHJcbiAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKHRhYi5maWVsZHMubGVuZ3RoICYmICRpbmRleCA+IDApIHtcclxuXHJcblxyXG4gICAgICAgIDxmb3JtbHktZm9ybVxyXG4gICAgICAgICAgW2Zvcm1dPVwiZ2V0Rm9ybSgkaW5kZXgpXCJcclxuICAgICAgICAgIFtmaWVsZHNdPVwidGFiLmZpZWxkc1wiXHJcbiAgICAgICAgICBbbW9kZWxdPVwidGFiLm1vZGVsIHx8IG1vZGVsXCJcclxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gQ3VzdG9tIHRlbXBsYXRlIC0tPlxyXG4gICAgICBAaWYgKHRhYi5jb250ZW50KSB7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYi5jb250ZW50OyBjb250ZXh0OiB7IG1vZGVsOiBtb2RlbCB9XCI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICAgIDwvcC10YWJwYW5lbD5cclxuICAgIH1cclxuICAgIDwvcC10YWJwYW5lbHM+XHJcbiAgPC9wLXRhYnM+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBbbW9kZWxdPVwibW9kZWxcIiAtLT5cclxuICA8YXBwLWdlbmVyaWMtZGlhbG9nXHJcbiAgICAjZGlhbG9nXHJcbiAgICBbZm9ybUZpZWxkc109XCJmb3JtRmllbGRzID8/IFtdXCJcclxuICAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxyXG4gICAgW2lkRmllbGRdPVwiaWRGaWVsZCA/PydpZCdcIlxyXG4gICAgW2Rpc3BsYXlNb2RlXT1cImRpc3BsYXlNb2RlID8/ICdkaWFsb2cnXCJcclxuICAgIChhZnRlclNhdmUpPVwiYWZ0ZXJTYXZlKCRldmVudClcIlxyXG4gID5cclxuICA8L2FwcC1nZW5lcmljLWRpYWxvZz5cclxufVxyXG4iXX0=","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 { TranslatePipe } from '@elite.framework/ng.core/pipes';\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\";\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', // TODO\n fieldGroupClassName: '',\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. GROUP / PANEL / WRAPPER */\n if (field.fieldGroup?.length) {\n const children = flatten(field.fieldGroup);\n if (!children.length)\n return [];\n return [{\n ...field,\n wrappers: field.wrappers,\n props: { ...field.props },\n fieldGroupClassName: field.fieldGroupClassName,\n fieldGroup: children\n }];\n }\n /* 2. FIELD ARRAY (REPEAT / TABLE / MULTI) */\n const fieldArrayConfig = typeof field.fieldArray === 'function'\n ? field.fieldArray(field)\n : field.fieldArray;\n if (field.fieldArray) {\n if (field.props?.['view']?.hidden)\n return [];\n const children = flatten(fieldArrayConfig?.fieldGroup || []);\n if (!children.length)\n return [];\n return [{\n ...field,\n type: field.props?.['view']?.type || field.type,\n readonly: this.viewMode,\n disabled: this.viewMode,\n fieldArray: {\n ...fieldArrayConfig,\n fieldGroup: children\n }\n }];\n }\n /* 3. SINGLE FIELD */\n if (!field.props || field.props['view']?.hidden)\n return [];\n const type = field.props['view']?.type ||\n field.props['table']?.type ||\n field.props['filter']?.type ||\n 'custom-label-type';\n return [{\n type,\n key: field.key,\n readonly: this.viewMode,\n disabled: this.viewMode,\n wrappers: field.wrappers ?? ['field-wrapper'],\n className: field.className,\n props: {\n ...field.props,\n ...(field.props['view']?.props ||\n field.props['table']?.props ||\n field.props['filter']?.props ||\n {}),\n },\n expressions: field.props['view']?.expressions ||\n field.props['table']?.expressions ||\n field.props['filter']?.expressions\n }];\n });\n return flatten(fields);\n }\n // getViewFields(fields: FormlyFieldConfig[] = []): FormlyFieldConfig[] {\n // const flatten = (fields: FormlyFieldConfig[]): FormlyFieldConfig[] =>\n // fields.flatMap(field => {\n // if (field.fieldGroup?.length) return flatten(field.fieldGroup);\n // if (!field.props\n // || field.props['view']?.hidden\n // // || field.props['table']?.hidden\n // ) return [];\n // const type = field.props['view']?.type || field.props['table']?.type || 'custom-label-type';\n // return [{\n // type,\n // key: field['key'],\n // readonly: this.viewMode,\n // disabled: this.viewMode,\n // wrappers: field.wrappers ?? ['field-wrapper'],\n // props: {\n // ...field.props,\n // ...(field.props['view']?.props || field.props['table']?.props),\n // },\n // expressions: field.props['view']?.expressions || field.props['view']?.expressions,\n // }];\n // });\n // return flatten(fields);\n // }\n // Use a map to store form groups for each row and column\n cellForms = new Map();\n getForm(rowIndex) {\n const key = `${rowIndex}_`;\n let form = this.cellForms.get(key);\n if (!form) {\n form = new FormGroup({});\n this.cellForms.set(key, form);\n }\n return form;\n }\n async handleCreateEditAction(btn) {\n try {\n if (btn.action) {\n // Execute the provided action\n await btn.action(null); // You can pass row or context here\n }\n else {\n // Fallback to emitting event\n if (btn.actionName == 'cancel') {\n this.back();\n }\n else {\n this.action.emit({\n name: btn.actionName ?? 'cancel',\n row: null, // provide row if available\n });\n }\n }\n }\n catch (err) {\n console.error('Button action error', err);\n }\n }\n onAction(act, model) {\n if (act.action) {\n act.action(model);\n }\n else {\n // this.action.emit({ name: act.name, row:model });\n this.emitAction({ name: act.name, row: model });\n }\n }\n emitAction(event) {\n switch (event.name) {\n case 'edit':\n this.dialog.openForm(\"edit\", event.row);\n break;\n case 'delete':\n this.onDelete(event.row);\n break;\n default:\n this.action.emit(event);\n break;\n }\n }\n onDelete(item) {\n const id = item[this.idField];\n this.swalService.confirm('تأكيد الحذف', 'هل تريد حذف هذا السجل فعلاً؟', 'نعم، احذف', 'إلغاء').then((result) => {\n if (result.isConfirmed) {\n this.service.delete(id).subscribe({\n next: () => {\n this.swalService.success('تم الحذف بنجاح');\n this.back();\n },\n error: (err) => {\n this.loading = false;\n }\n });\n }\n });\n }\n afterSave(event) {\n this.model = event.response;\n // set the id from backend response\n this.currentId = event.response[this.idField];\n if (this.isCreateMode) {\n this.goToMode('view');\n }\n else if (this.isEditMode) {\n this.goToMode('view');\n }\n }\n goToMode(mode) {\n const tree = this.router.parseUrl(this.router.url);\n const segments = tree.root.children['primary']?.segments.map(s => s.path) ?? [];\n let newSegments;\n if (mode === 'create') {\n // always navigate to \"add\"\n newSegments = [\n ...segments.filter(s => !['view', 'edit', 'add'].includes(s)),\n 'add',\n ];\n }\n else {\n // if in \"add\" mode, replace it with the new id\n if (segments.includes('add')) {\n newSegments = [\n ...segments.filter(s => s !== 'add'),\n String(this.currentId),\n mode,\n ];\n }\n else {\n const idIndex = segments.findIndex(s => s === String(this.currentId));\n if (idIndex === -1) {\n newSegments = [...segments, String(this.currentId), mode];\n }\n else {\n newSegments = segments.slice(0, idIndex + 1);\n newSegments.push(mode);\n }\n }\n }\n this.router.navigate(newSegments);\n this.refresh();\n }\n backToList() {\n this.router.navigate(['../']);\n }\n back() {\n // this.router.navigate(['..']);\n this._location.back();\n }\n loadList() {\n this.loading = true;\n const filters = {\n maxResultCount: this.pageSize,\n skipCount: this.pageIndex * this.pageSize,\n sorting: this.sort,\n ...this.currentFilters,\n ...this.pageFilters,\n ...(this.searchGlobal ? { filter: this.searchGlobal } : {}),\n };\n this.service.getList(filters).subscribe({\n next: (res) => {\n this.list = res.items;\n this.totalRecords = res.totalCount;\n this.loading = false;\n // set model_ to current id item\n const found = this.list.find(x => x[this.idField] == this.currentId);\n if (found) {\n this.model_ = found;\n }\n },\n error: err => {\n console.error('Error loading list', err);\n this.loading = false;\n }\n });\n }\n next() {\n if (!this.currentId)\n return;\n // increment currentId numerically\n // const newId = Number(this.currentId) + 1;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n previous() {\n if (!this.currentId)\n return;\n // decrement currentId numerically\n // const newId = Number(this.currentId) - 1;\n // if (newId <= 0) return;\n // this.currentId = newId;\n // use goToMode to navigate and keep mode\n const currentMode = this.isEditMode ? 'edit' : 'view';\n // this.goToMode(currentMode);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericViewComponent, isStandalone: true, selector: \"app-detail-view\", inputs: { title: \"title\", actions: \"actions\", createEditActions: \"createEditActions\", tabs: \"tabs\", viewMode: \"viewMode\", breadcrumb: \"breadcrumb\", service: \"service\", formFields: \"formFields\", apiName: \"apiName\", idField: \"idField\", standaloneMode: \"standaloneMode\", isViewMode: \"isViewMode\", isCreateMode: \"isCreateMode\", isEditMode: \"isEditMode\", model: \"model\", displayMode: \"displayMode\", mode: \"mode\", loading: \"loading\" }, outputs: { action: \"action\", afterDelete: \"afterDelete\" }, viewQueries: [{ propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }, { propertyName: \"inlineForm\", first: true, predicate: [\"inlineForm\"], descendants: true }], ngImport: i0, template: \"\\r\\n@if (mode === 'detail') {\\r\\n<div class=\\\"w-full flex flex-col gap-3\\\">\\r\\n <!-- overlay -->\\r\\n <div *ngIf=\\\"loading\\\"\\r\\n class=\\\"absolute inset-0 bg-white/70 flex items-center justify-center z-50\\\">\\r\\n <p-progress-spinner/>\\r\\n </div>\\r\\n\\r\\n <!-- actual content -->\\r\\n <!-- Toolbar -->\\r\\n <p-toolbar style=\\\"background: transparent;border: 0px;box-shadow: none;\\\" class=\\\"bg-transparent shadow-none border-none rounded-md px-3\\\">\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n <!-- <span class=\\\"font-semibold text-lg xs:hidden block\\\">{{ title }}</span> -->\\r\\n <app-breadcrumb class=\\\"xs:block\\\" [breadcrumb]=\\\"breadcrumb\\\"></app-breadcrumb> <!-- xs:block hidden -->\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-right\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u062A\\u0627\\u0644\\u064A\\\"\\r\\n (click)=\\\"next()\\\"\\r\\n ></button>\\r\\n <button\\r\\n pButton pRipple\\r\\n icon=\\\"pi pi-chevron-left\\\"\\r\\n class=\\\"p-button-text p-button-sm fd-btn\\\"\\r\\n pTooltip=\\\"\\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\\"\\r\\n (click)=\\\"previous()\\\"\\r\\n ></button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-toolbar>\\r\\n <p-toolbar class=\\\"bg-white shadow rounded-md px-3\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"left\\\">\\r\\n @if (isViewMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (action of actions_; track $index) {\\r\\n <button\\r\\n pButton pRipple\\r\\n [icon]=\\\"action.icon ?? ''\\\"\\r\\n [label]=\\\"(action.label ?? '') | translate\\\"\\r\\n class=\\\"fd-btn\\\"\\r\\n (click)=\\\"onAction(action,model)\\\"\\r\\n ></button>\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"right\\\">\\r\\n @if (isEditMode || isCreateMode) {\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n @for (btn of createEditActions; track $index) {\\r\\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\\r\\n @if (btn.type === 'submit' && inlineForm) {\\r\\n <lib-generic-button\\r\\n [type]=\\\"'submit'\\\"\\r\\n [loading]=\\\"inlineForm.loading\\\"\\r\\n [disabled]=\\\"inlineForm.loading || form.invalid\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"inlineForm.onSubmit()\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n @else{\\r\\n <lib-generic-button\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [severity]=\\\"btn.severity\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"handleCreateEditAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n }\\r\\n }\\r\\n }\\r\\n </div>\\r\\n }\\r\\n </ng-template>\\r\\n\\r\\n </p-toolbar>\\r\\n\\r\\n <!-- Tabs -->\\r\\n <p-tabs value=\\\"0\\\">\\r\\n <p-tablist>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tab value=\\\"{{$index}}\\\">\\r\\n <i [class]=\\\"tab.icon\\\"></i>\\r\\n <span class=\\\"mr-1 ml-1\\\">{{ tab.header }}</span>\\r\\n </p-tab>\\r\\n }\\r\\n </p-tablist>\\r\\n <p-tabpanels>\\r\\n @for (tab of tabs_; track $index) {\\r\\n <p-tabpanel value=\\\"{{$index}}\\\">\\r\\n\\r\\n <!-- Formly fields -->\\r\\n <!-- border border-surface p-4-->\\r\\n <div class=\\\"\\\">\\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\\r\\n *ngTemplateOutlet=\\\"tab.content; context: { model: model }\\\">\\r\\n </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: \"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\", \"moduleName\", \"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: 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 TranslatePipe,\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 <!-- border border-surface p-4-->\\r\\n <div class=\\\"\\\">\\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\\r\\n *ngTemplateOutlet=\\\"tab.content; context: { model: model }\\\">\\r\\n </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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdmlldy9zcmMvbGliL2dlbmVyaWMtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXZpZXcvc3JjL2xpYi9nZW5lcmljLXZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlC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bVNBQ1gsbUJBQW1CLGdMQUVuQixtQkFBbUIsa0ZBQ25CLGFBQWEsc1hBQ2Isc0JBQXNCLCtoQkFDdEIsYUFBYSw4UEFDYixxQkFBcUIsa09BTHJCLGFBQWE7OzJGQVNKLG9CQUFvQjtrQkFwQmhDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2Isc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLHFCQUFxQjtxQkFDdEI7OEJBU1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUUsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNFLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0UsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQW5CLEtBQUs7Z0JBV0MsSUFBSTtzQkFBWixLQUFLO2dCQUVPLE1BQU07c0JBQWYsTUFBTTtnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVjLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDTSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBUWhCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRvb2xiYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2xiYXInO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IEZvcm1seUZvcm0sIEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3BpcGVzJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJDb21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvYnJlYWRjcnVtYic7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBTd2FsU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBY3Rpb25EZWYsIEJ1dHRvbkNvbmZpZywgUGFnaW5hdGVkUmVzdWx0IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcclxuaW1wb3J0IHsgR2VuZXJpY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWRpYWxvZyc7XHJcbmltcG9ydCB7IEdlbmVyaWNCdXR0b24gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1idXR0b24nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZXRhaWxUYWIge1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xyXG4gIG1vZGVsPzogYW55O1xyXG4gIGNvbnRlbnQ/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kZXRhaWwtdmlldycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUb29sYmFyTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgVGFic01vZHVsZSxcclxuICAgIEZvcm1seUZvcm0sXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgQnJlYWRjcnVtYkNvbXBvbmVudCxcclxuICAgIFRvb2x0aXBNb2R1bGUsXHJcbiAgICBHZW5lcmljRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgR2VuZXJpY0J1dHRvbixcclxuICAgIFByb2dyZXNzU3Bpbm5lck1vZHVsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMtdmlldy5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdlbmVyaWNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG5cclxuICBmb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG5cclxuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGFjdGlvbnM6IEFjdGlvbkRlZjxhbnk+W10gPSBbXTtcclxuICAgQElucHV0KCkgY3JlYXRlRWRpdEFjdGlvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgIGFjdGlvbnNfOiBBY3Rpb25EZWY8YW55PltdID0gW107XHJcbiAgQElucHV0KCkgdGFiczogRGV0YWlsVGFiW10gPSBbXTtcclxuICBASW5wdXQoKSB2aWV3TW9kZSA9IHRydWU7XHJcbiAgQElucHV0KCkgYnJlYWRjcnVtYjogTWVudUl0ZW1bXSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZXJ2aWNlOiBCYXNlU2VydmljZSA9IGluamVjdChCYXNlU2VydmljZSk7XHJcbiAgQElucHV0KCkgZm9ybUZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGFwaU5hbWUgPSAnJztcclxuICBASW5wdXQoKSBpZEZpZWxkID0gJ2lkJztcclxuIEBJbnB1dCgpIHN0YW5kYWxvbmVNb2RlID0gZmFsc2U7XHJcbiBASW5wdXQoKSBpc1ZpZXdNb2RlID0gdHJ1ZTsgLy8g2YjYtti5INin2YTZhdi02KfZh9iv2Kkg2YHZgti3XHJcbiBASW5wdXQoKSBpc0NyZWF0ZU1vZGUgPSBmYWxzZTsgLy8g2YjYtti5INin2YTYp9i22KfZgdipINmB2YLYt1xyXG4gIEBJbnB1dCgpIGlzRWRpdE1vZGUgPSBmYWxzZTsgLy8g2YjYtti5INin2YTYqti52K/ZitmEXHJcbiBASW5wdXQoKSBtb2RlbCA9IHt9O1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlNb2RlOlxyXG4gICAgfCAnZHJhd2VyJ1xyXG4gICAgfCAnZGlhbG9nJ1xyXG4gICAgfCAncm91dGUnXHJcbiAgICB8ICdpbmxpbmUnXHJcbiAgICB8IFBhcnRpYWw8XHJcbiAgICAgIFJlY29yZDxcclxuICAgICAgICAnYWRkJyB8ICdlZGl0JyB8ICd2aWV3JyxcclxuICAgICAgICAnZHJhd2VyJyB8ICdkaWFsb2cnIHwgJ3JvdXRlJyB8ICdpbmxpbmUnXHJcbiAgICAgID5cclxuICAgID4gPSAnZHJhd2VyJztcclxuQElucHV0KCkgbW9kZTogJ2Z1bGwnIHwgJ2Zvcm0tb25seScgfCAndGFibGUtb25seScgfCAnZGV0YWlsJyA9ICdmdWxsJztcclxuXHJcbiAgIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyByb3c6IGFueSB9PigpO1xyXG4gICAgQE91dHB1dCgpIGFmdGVyRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogYW55OyByZXNwb25zZT86IGFueSB9PigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZycpIGRpYWxvZyE6IEdlbmVyaWNEaWFsb2dDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdpbmxpbmVGb3JtJykgaW5saW5lRm9ybSE6IEdlbmVyaWNEaWFsb2dDb21wb25lbnQ7XHJcblxyXG4gIHRhYnNfOiBEZXRhaWxUYWJbXSA9IFtdO1xyXG4gIG1vZGVsXzogYW55ID0ge307XHJcblxyXG4gIGN1cnJlbnRJZCE6IHN0cmluZyB8IG51bWJlcjtcclxuICBsaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHRvdGFsUmVjb3JkcyA9IDA7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAvLyBwYWdpbmF0aW9uIHN0YXRlXHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBwYWdlSW5kZXggPSAwO1xyXG4gIHNvcnQgPSAnJztcclxuICBjdXJyZW50RmlsdGVyczogYW55ID0ge307XHJcbiAgcGFnZUZpbHRlcnM6IGFueSA9IHt9O1xyXG4gIHNlYXJjaEdsb2JhbCA9ICcnO1xyXG4gcHJpdmF0ZSBzd2FsU2VydmljZSA9IGluamVjdChTd2FsU2VydmljZSk7XHJcblxyXG4gX2xvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmFwaU5hbWUpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmFwaU5hbWUgPSB0aGlzLmFwaU5hbWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuYWN0aW9uc18gPSB0aGlzLmFjdGlvbnMuZmlsdGVyKGM9PmMubmFtZSAhPSAndmlldycpO1xyXG5cclxuICAgICAgdGhpcy5yb3V0ZS5wYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJhbXMuZ2V0KHRoaXMuaWRGaWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudElkID0gaWQ7XHJcbiAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhbmRhbG9uZU1vZGUpe1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZExpc3QoKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG5cclxuICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCl7XHJcblxyXG4gICAgLy8gZGV0ZWN0IG1vZGUgYmFzZWQgb24gcm91dGVcclxuICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICB0aGlzLmlzVmlld01vZGUgPSB1cmwuaW5jbHVkZXMoJy92aWV3Jyk7XHJcbiAgdGhpcy5pc0VkaXRNb2RlID0gdXJsLmluY2x1ZGVzKCcvZWRpdCcpO1xyXG4gIHRoaXMuaXNDcmVhdGVNb2RlID0gdXJsLmluY2x1ZGVzKCcvY3JlYXRlJykgfHwgdXJsLmVuZHNXaXRoKCcvbmV3JykgfHwgdXJsLmVuZHNXaXRoKCcvYWRkJyk7XHJcblxyXG4gIHRoaXMudGFic18gPSBbXTtcclxuZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhYnMubGVuZ3RoOyBpKyspIHtcclxuICBjb25zdCB0ID0gdGhpcy50YWJzW2ldO1xyXG4gIHRoaXMudGFic18ucHVzaCh7XHJcbiAgICAuLi50LFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBwcm9wczogeyBsYWJlbDogJycgfSxcclxuICAgICAgICAgLy8gZmllbGRHcm91cENsYXNzTmFtZTogJ2dyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTMnLCAvLyBUT0RPXHJcbiAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJycsXHJcbiAgICAgICAgZmllbGRHcm91cDpcclxuICAgICAgICAgIHRoaXMuaXNDcmVhdGVNb2RlIHx8IHRoaXMuaXNFZGl0TW9kZVxyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q3JlYXRlRWRpdEZpZWxkcyhpID09IDAgPyB0aGlzLmZvcm1GaWVsZHM6IHQuZmllbGRzKVxyXG4gICAgICAgICAgICA6IHRoaXMuZ2V0Vmlld0ZpZWxkcyhpID09IDAgPyB0aGlzLmZvcm1GaWVsZHMgOiB0LmZpZWxkcyksXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH0pO1xyXG59XHJcbnRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuICAvLyBhcyBmb3JtXHJcbiAgIGdldENyZWF0ZUVkaXRGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBmaWVsZHMubWFwKGYgPT4gKHtcclxuICAgICAgLi4uZixcclxuICAgICAgcHJvcHM6IHsgLi4uZi5wcm9wcywgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsIGRpc2FibGVkOiB0aGlzLnZpZXdNb2RlIH0sXHJcbiAgICB9KSk7XHJcbiAgfVxyXG4gIGdldFZpZXdGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICBjb25zdCBmbGF0dGVuID0gKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSk6IEZvcm1seUZpZWxkQ29uZmlnW10gPT5cclxuICAgIGZpZWxkcy5mbGF0TWFwKChmaWVsZDphbnkpID0+IHtcclxuXHJcbiAgICAgIC8qIDEuIEdST1VQIC8gUEFORUwgLyBXUkFQUEVSICovXHJcbiAgICAgIGlmIChmaWVsZC5maWVsZEdyb3VwPy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZsYXR0ZW4oZmllbGQuZmllbGRHcm91cCk7XHJcblxyXG4gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgLi4uZmllbGQsXHJcbiAgICAgICAgICB3cmFwcGVyczogZmllbGQud3JhcHBlcnMsXHJcbiAgICAgICAgICBwcm9wczogeyAuLi5maWVsZC5wcm9wcyB9LFxyXG4gICAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogZmllbGQuZmllbGRHcm91cENsYXNzTmFtZSxcclxuICAgICAgICAgIGZpZWxkR3JvdXA6IGNoaWxkcmVuXHJcbiAgICAgICAgfV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIDIuIEZJRUxEIEFSUkFZIChSRVBFQVQgLyBUQUJMRSAvIE1VTFRJKSAqL1xyXG4gICAgICBjb25zdCBmaWVsZEFycmF5Q29uZmlnID1cclxuICAgICAgICB0eXBlb2YgZmllbGQuZmllbGRBcnJheSA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICAgICAgPyBmaWVsZC5maWVsZEFycmF5KGZpZWxkKVxyXG4gICAgICAgICAgOiBmaWVsZC5maWVsZEFycmF5O1xyXG5cclxuICAgICAgaWYgKGZpZWxkLmZpZWxkQXJyYXkpIHtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLnByb3BzPy5bJ3ZpZXcnXT8uaGlkZGVuKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZmxhdHRlbihmaWVsZEFycmF5Q29uZmlnPy5maWVsZEdyb3VwIHx8IFtdKTtcclxuXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgICAuLi5maWVsZCxcclxuICAgICAgICAgIHR5cGU6IGZpZWxkLnByb3BzPy5bJ3ZpZXcnXT8udHlwZSB8fCBmaWVsZC50eXBlLFxyXG4gICAgICAgICAgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsXHJcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICAgIGZpZWxkQXJyYXk6IHtcclxuICAgICAgICAgICAgLi4uZmllbGRBcnJheUNvbmZpZyxcclxuICAgICAgICAgICAgZmllbGRHcm91cDogY2hpbGRyZW5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogMy4gU0lOR0xFIEZJRUxEICovXHJcbiAgICAgIGlmICghZmllbGQucHJvcHMgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uaGlkZGVuKSByZXR1cm4gW107XHJcblxyXG4gICAgICBjb25zdCB0eXBlID1cclxuICAgICAgICBmaWVsZC5wcm9wc1sndmlldyddPy50eXBlIHx8XHJcbiAgICAgICAgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnR5cGUgfHxcclxuICAgICAgICBmaWVsZC5wcm9wc1snZmlsdGVyJ10/LnR5cGUgfHxcclxuICAgICAgICAnY3VzdG9tLWxhYmVsLXR5cGUnO1xyXG5cclxuICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBrZXk6IGZpZWxkLmtleSxcclxuICAgICAgICByZWFkb25seTogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAgICAgICB3cmFwcGVyczogZmllbGQud3JhcHBlcnMgPz8gWydmaWVsZC13cmFwcGVyJ10sXHJcbiAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIC4uLmZpZWxkLnByb3BzLFxyXG4gICAgICAgICAgLi4uKGZpZWxkLnByb3BzWyd2aWV3J10/LnByb3BzIHx8XHJcbiAgICAgICAgICAgIGZpZWxkLnByb3BzWyd0YWJsZSddPy5wcm9wcyB8fFxyXG4gICAgICAgICAgICBmaWVsZC5wcm9wc1snZmlsdGVyJ10/LnByb3BzIHx8XHJcbiAgICAgICAgICAgIHt9KSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGV4cHJlc3Npb25zOlxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMgfHxcclxuICAgICAgICAgIGZpZWxkLnByb3BzWyd0YWJsZSddPy5leHByZXNzaW9ucyB8fFxyXG4gICAgICAgICAgZmllbGQucHJvcHNbJ2ZpbHRlciddPy5leHByZXNzaW9uc1xyXG4gICAgICB9XTtcclxuICAgIH0pO1xyXG5cclxuICByZXR1cm4gZmxhdHRlbihmaWVsZHMpO1xyXG59XHJcblxyXG4gIC8vIGdldFZpZXdGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAvLyAgIGNvbnN0IGZsYXR0ZW4gPSAoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogRm9ybWx5RmllbGRDb25maWdbXSA9PlxyXG4gIC8vICAgICBmaWVsZHMuZmxhdE1hcChmaWVsZCA9PiB7XHJcbiAgLy8gICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXA/Lmxlbmd0aCkgcmV0dXJuIGZsYXR0ZW4oZmllbGQuZmllbGRHcm91cCk7XHJcbiAgLy8gICAgICAgaWYgKCFmaWVsZC5wcm9wc1xyXG4gIC8vICAgICAgICAgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uaGlkZGVuXHJcbiAgLy8gICAgICAgICAvLyB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8uaGlkZGVuXHJcbiAgLy8gICAgICAgICkgcmV0dXJuIFtdO1xyXG5cclxuICAvLyAgICAgICBjb25zdCB0eXBlID0gZmllbGQucHJvcHNbJ3ZpZXcnXT8udHlwZSB8fCBmaWVsZC5wcm9wc1sndGFibGUnXT8udHlwZSB8fCAnY3VzdG9tLWxhYmVsLXR5cGUnO1xyXG4gIC8vICAgICAgIHJldHVybiBbe1xyXG4gIC8vICAgICAgICAgdHlwZSxcclxuICAvLyAgICAgICAgIGtleTogZmllbGRbJ2tleSddLFxyXG4gIC8vICAgICAgICAgcmVhZG9ubHk6IHRoaXMudmlld01vZGUsXHJcbiAgLy8gICAgICAgICBkaXNhYmxlZDogdGhpcy52aWV3TW9kZSxcclxuICAvLyAgICAgICAgIHdyYXBwZXJzOiBmaWVsZC53cmFwcGVycyA/PyBbJ2ZpZWxkLXdyYXBwZXInXSxcclxuICAvLyAgICAgICAgIHByb3BzOiB7XHJcbiAgLy8gICAgICAgICAgIC4uLmZpZWxkLnByb3BzLFxyXG4gIC8vICAgICAgICAgICAuLi4oZmllbGQucHJvcHNbJ3ZpZXcnXT8ucHJvcHMgfHwgZmllbGQucHJvcHNbJ3RhYmxlJ10/LnByb3BzKSxcclxuICAvLyAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICBleHByZXNzaW9uczogZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMgfHwgZmllbGQucHJvcHNbJ3ZpZXcnXT8uZXhwcmVzc2lvbnMsXHJcbiAgLy8gICAgICAgfV07XHJcbiAgLy8gICAgIH0pO1xyXG5cclxuICAvLyAgIHJldHVybiBmbGF0dGVuKGZpZWxkcyk7XHJcbiAgLy8gfVxyXG5cclxuICAgICAvLyBVc2UgYSBtYXAgdG8gc3RvcmUgZm9ybSBncm91cHMgZm9yIGVhY2ggcm93IGFuZCBjb2x1bW5cclxuICBwcml2YXRlIGNlbGxGb3JtczogTWFwPHN0cmluZywgRm9ybUdyb3VwPiA9IG5ldyBNYXAoKTtcclxuICAgIGdldEZvcm0ocm93SW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB7XHJcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH1fYDtcclxuICAgIGxldCBmb3JtID0gdGhpcy5jZWxsRm9ybXMuZ2V0KGtleSk7XHJcblxyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5jZWxsRm9ybXMuc2V0KGtleSwgZm9ybSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG5cclxuICAgYXN5bmMgaGFuZGxlQ3JlYXRlRWRpdEFjdGlvbihidG46IEJ1dHRvbkNvbmZpZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGJ0bi5hY3Rpb24pIHtcclxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBwcm92aWRlZCBhY3Rpb25cclxuICAgICAgICBhd2FpdCBidG4uYWN0aW9uKG51bGwpOyAvLyBZb3UgY2FuIHBhc3Mgcm93IG9yIGNvbnRleHQgaGVyZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGVtaXR0aW5nIGV2ZW50XHJcbiAgICAgICAgaWYoYnRuLmFjdGlvbk5hbWUgPT0gJ2NhbmNlbCcpe1xyXG4gICAgICAgICAgdGhpcy5iYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgICBuYW1lOiBidG4uYWN0aW9uTmFtZSA/PyAnY2FuY2VsJyxcclxuICAgICAgICAgIHJvdzogbnVsbCEsIC8vIHByb3ZpZGUgcm93IGlmIGF2YWlsYWJsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdCdXR0b24gYWN0aW9uIGVycm9yJywgZXJyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxub25BY3Rpb24oYWN0OiBBY3Rpb25EZWY8YW55PiwgbW9kZWw6IGFueSkge1xyXG4gICAgaWYgKGFjdC5hY3Rpb24pIHtcclxuICAgICAgYWN0LmFjdGlvbihtb2RlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLmFjdGlvbi5lbWl0KHsgbmFtZTogYWN0Lm5hbWUsIHJvdzptb2RlbCB9KTtcclxuICAgICAgdGhpcy5lbWl0QWN0aW9uKHsgbmFtZTogYWN0Lm5hbWUsIHJvdzptb2RlbCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgZW1pdEFjdGlvbihldmVudDogeyBuYW1lOiBzdHJpbmc7IHJvdzogYW55IHwgbnVsbCB9KTogdm9pZCB7XHJcbiAgc3dpdGNoIChldmVudC5uYW1lKSB7XHJcbiAgICBjYXNlICdlZGl0JzpcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbkZvcm0oXCJlZGl0XCIsZXZlbnQucm93KTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICB0aGlzLm9uRGVsZXRlKGV2ZW50LnJvdyEpO1xyXG4gICAgICBicmVhaztcclxuICAgIGRlZmF1bHQgOlxyXG4gICAgICB0aGlzLmFjdGlvbi5lbWl0KGV2ZW50KTtcclxuICAgICAgYnJlYWs7XHJcbiAgfVxyXG59XHJcblxyXG5vbkRlbGV0ZShpdGVtOiBhbnkpOiB2b2lkIHtcclxuICBjb25zdCBpZCA9IGl0ZW1bdGhpcy5pZEZpZWxkXTtcclxuXHJcbiAgdGhpcy5zd2FsU2VydmljZS5jb25maXJtKFxyXG4gICAgJ9iq2KPZg9mK2K8g2KfZhNit2LDZgScsXHJcbiAgICAn2YfZhCDYqtix2YrYryDYrdiw2YEg2YfYsNinINin2YTYs9is2YQg2YHYudmE2KfZi9ifJyxcclxuICAgICfZhti52YXYjCDYp9it2LDZgScsXHJcbiAgICAn2KXZhNi62KfYoSdcclxuICApLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlKGlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3dhbFNlcnZpY2Uuc3VjY2Vzcygn2KrZhSDYp9mE2K3YsNmBINio2YbYrNin2K0nKTtcclxuICAgICAgICAgIHRoaXMuYmFjaygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuIGFmdGVyU2F2ZShldmVudDogYW55KSB7XHJcbiAgdGhpcy5tb2RlbCA9IGV2ZW50LnJlc3BvbnNlO1xyXG5cclxuICAvLyBzZXQgdGhlIGlkIGZyb20gYmFja2VuZCByZXNwb25zZVxyXG4gIHRoaXMuY3VycmVudElkID0gZXZlbnQucmVzcG9uc2VbdGhpcy5pZEZpZWxkXTtcclxuXHJcbiAgaWYgKHRoaXMuaXNDcmVhdGVNb2RlKSB7XHJcbiAgICB0aGlzLmdvVG9Nb2RlKCd2aWV3Jyk7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgIHRoaXMuZ29Ub01vZGUoJ3ZpZXcnKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuZ29Ub01vZGUobW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ2NyZWF0ZScpIHtcclxuICBjb25zdCB0cmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcclxuICBjb25zdCBzZWdtZW50cyA9IHRyZWUucm9vdC5jaGlsZHJlblsncHJpbWFyeSddPy5zZWdtZW50cy5tYXAocyA9PiBzLnBhdGgpID8/IFtdO1xyXG5cclxuICBsZXQgbmV3U2VnbWVudHM6IHN0cmluZ1tdO1xyXG5cclxuICBpZiAobW9kZSA9PT0gJ2NyZWF0ZScpIHtcclxuICAgIC8vIGFsd2F5cyBuYXZpZ2F0ZSB0byBcImFkZFwiXHJcbiAgICBuZXdTZWdtZW50cyA9IFtcclxuICAgICAgLi4uc2VnbWVudHMuZmlsdGVyKHMgPT4gIVsndmlldycsICdlZGl0JywgJ2FkZCddLmluY2x1ZGVzKHMpKSxcclxuICAgICAgJ2FkZCcsXHJcbiAgICBdO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBpZiBpbiBcImFkZFwiIG1vZGUsIHJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IGlkXHJcbiAgICBpZiAoc2VnbWVudHMuaW5jbHVkZXMoJ2FkZCcpKSB7XHJcbiAgICAgIG5ld1NlZ21lbnRzID0gW1xyXG4gICAgICAgIC4uLnNlZ21lbnRzLmZpbHRlcihzID0+IHMgIT09ICdhZGQnKSxcclxuICAgICAgICBTdHJpbmcodGhpcy5jdXJyZW50SWQpLFxyXG4gICAgICAgIG1vZGUsXHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpZEluZGV4ID0gc2VnbWVudHMuZmluZEluZGV4KHMgPT4gcyA9PT0gU3RyaW5nKHRoaXMuY3VycmVudElkKSk7XHJcbiAgICAgIGlmIChpZEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgIG5ld1NlZ21lbnRzID0gWy4uLnNlZ21lbnRzLCBTdHJpbmcodGhpcy5jdXJyZW50SWQpLCBtb2RlXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdTZWdtZW50cyA9IHNlZ21lbnRzLnNsaWNlKDAsIGlkSW5kZXggKyAxKTtcclxuICAgICAgICBuZXdTZWdtZW50cy5wdXNoKG1vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdTZWdtZW50cyk7XHJcbiAgdGhpcy5yZWZyZXNoKCk7XHJcbn1cclxuXHJcblxyXG5iYWNrVG9MaXN0KCl7XHJcbiAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddKTtcclxuICAgIH1cclxuYmFjaygpe1xyXG4gICAgICAvLyAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLiddKTtcclxuICAgICAgIHRoaXMuX2xvY2F0aW9uLmJhY2soKVxyXG4gICAgfVxyXG4gIGxvYWRMaXN0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZpbHRlcnMgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBza2lwQ291bnQ6IHRoaXMucGFnZUluZGV4ICogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgc29ydGluZzogdGhpcy5zb3J0LFxyXG4gICAgICAuLi50aGlzLmN1cnJlbnRGaWx0ZXJzLFxyXG4gICAgICAuLi50aGlzLnBhZ2VGaWx0ZXJzLFxyXG4gICAgICAuLi4odGhpcy5zZWFyY2hHbG9iYWwgPyB7IGZpbHRlcjogdGhpcy5zZWFyY2hHbG9iYWwgfSA6IHt9KSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXJ2aWNlLmdldExpc3QoZmlsdGVycykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogUGFnaW5hdGVkUmVzdWx0PGFueT4pID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QgPSByZXMuaXRlbXM7XHJcbiAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXMudG90YWxDb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gc2V0IG1vZGVsXyB0byBjdXJyZW50IGlkIGl0ZW1cclxuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMubGlzdC5maW5kKHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWxfID0gZm91bmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGxpc3QnLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiBuZXh0KCkge1xyXG4gIGlmICghdGhpcy5jdXJyZW50SWQpIHJldHVybjtcclxuXHJcbiAgLy8gaW5jcmVtZW50IGN1cnJlbnRJZCBudW1lcmljYWxseVxyXG4gIC8vIGNvbnN0IG5ld0lkID0gTnVtYmVyKHRoaXMuY3VycmVudElkKSArIDE7XHJcbiAgLy8gdGhpcy5jdXJyZW50SWQgPSBuZXdJZDtcclxuICAvLyB1c2UgZ29Ub01vZGUgdG8gbmF2aWdhdGUgYW5kIGtlZXAgbW9kZVxyXG4gIGNvbnN0IGN1cnJlbnRNb2RlID0gdGhpcy5pc0VkaXRNb2RlID8gJ2VkaXQnIDogJ3ZpZXcnO1xyXG4gIC8vIHRoaXMuZ29Ub01vZGUoY3VycmVudE1vZGUpO1xyXG59XHJcblxyXG5wcmV2aW91cygpIHtcclxuICBpZiAoIXRoaXMuY3VycmVudElkKSByZXR1cm47XHJcblxyXG4gIC8vIGRlY3JlbWVudCBjdXJyZW50SWQgbnVtZXJpY2FsbHlcclxuICAvLyBjb25zdCBuZXdJZCA9IE51bWJlcih0aGlzLmN1cnJlbnRJZCkgLSAxO1xyXG4gIC8vIGlmIChuZXdJZCA8PSAwKSByZXR1cm47XHJcblxyXG4gIC8vIHRoaXMuY3VycmVudElkID0gbmV3SWQ7XHJcblxyXG4gIC8vIHVzZSBnb1RvTW9kZSB0byBuYXZpZ2F0ZSBhbmQga2VlcCBtb2RlXHJcbiAgY29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmlzRWRpdE1vZGUgPyAnZWRpdCcgOiAndmlldyc7XHJcbiAgLy8gdGhpcy5nb1RvTW9kZShjdXJyZW50TW9kZSk7XHJcbn1cclxuXHJcblxyXG4gIC8vIG5leHQoKSB7XHJcbiAgLy8gICBjb25zdCBpZHggPSB0aGlzLmxpc3QuZmluZEluZGV4KHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAvLyAgIGlmIChpZHggPj0gMCAmJiBpZHggPCB0aGlzLmxpc3QubGVuZ3RoIC0gMSkge1xyXG4gIC8vICAgICBjb25zdCBuZXdJZCA9IHRoaXMubGlzdFtpZHggKyAxXVt0aGlzLmlkRmllbGRdO1xyXG4gIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycsIG5ld0lkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJldmlvdXMoKSB7XHJcbiAgLy8gICBjb25zdCBpZHggPSB0aGlzLmxpc3QuZmluZEluZGV4KHggPT4geFt0aGlzLmlkRmllbGRdID09IHRoaXMuY3VycmVudElkKTtcclxuICAvLyAgIGlmIChpZHggPiAwKSB7XHJcbiAgLy8gICAgIGNvbnN0IG5ld0lkID0gdGhpcy5saXN0W2lkeCAtIDFdW3RoaXMuaWRGaWVsZF07XHJcbiAgLy8gICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgbmV3SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG59XHJcblxyXG4iLCJcclxuQGlmIChtb2RlID09PSAnZGV0YWlsJykge1xyXG48ZGl2ICBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtY29sIGdhcC0zXCI+XHJcbiAgPCEtLSBvdmVybGF5IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCJcclxuICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy13aGl0ZS83MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB6LTUwXCI+XHJcbiAgICA8cC1wcm9ncmVzcy1zcGlubmVyLz5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBhY3R1YWwgY29udGVudCAtLT5cclxuICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgPHAtdG9vbGJhciBzdHlsZT1cImJhY2tncm91bmQ6IHRyYW5zcGFyZW50O2JvcmRlcjogMHB4O2JveC1zaGFkb3c6IG5vbmU7XCIgY2xhc3M9XCJiZy10cmFuc3BhcmVudCBzaGFkb3ctbm9uZSBib3JkZXItbm9uZSByb3VuZGVkLW1kIHB4LTNcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XHJcbiAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtbGcgeHM6aGlkZGVuIGJsb2NrXCI+e3sgdGl0bGUgfX08L3NwYW4+IC0tPlxyXG4gICAgICA8YXBwLWJyZWFkY3J1bWIgY2xhc3M9XCJ4czpibG9ja1wiIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJcIj48L2FwcC1icmVhZGNydW1iPiA8IS0tIHhzOmJsb2NrIGhpZGRlbiAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgICBpY29uPVwicGkgcGktY2hldnJvbi1yaWdodFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtIGZkLWJ0blwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCLYp9mE2KrYp9mE2YpcIlxyXG4gICAgICAgIChjbGljayk9XCJuZXh0KClcIlxyXG4gICAgICA+PC9idXR0b24+XHJcbiAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgICAgaWNvbj1cInBpIHBpLWNoZXZyb24tbGVmdFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtIGZkLWJ0blwiXHJcbiAgICAgICAgcFRvb2x0aXA9XCLYp9mE2LPYp9io2YJcIlxyXG4gICAgICAgIChjbGljayk9XCJwcmV2aW91cygpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRvb2xiYXI+XHJcbiAgIDxwLXRvb2xiYXIgY2xhc3M9XCJiZy13aGl0ZSBzaGFkb3cgcm91bmRlZC1tZCBweC0zXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgIEBpZiAoaXNWaWV3TW9kZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMVwiPlxyXG4gICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGFjdGlvbnNfOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgIFtpY29uXT1cImFjdGlvbi5pY29uID8/ICcnXCJcclxuICAgICAgICAgIFtsYWJlbF09XCIoYWN0aW9uLmxhYmVsID8/ICcnKSB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgY2xhc3M9XCJmZC1idG5cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkFjdGlvbihhY3Rpb24sbW9kZWwpXCJcclxuICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgQGlmIChpc0VkaXRNb2RlIHx8IGlzQ3JlYXRlTW9kZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMVwiPlxyXG4gICAgICAgQGZvciAoYnRuIG9mIGNyZWF0ZUVkaXRBY3Rpb25zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgQGlmICghYnRuLnZpc2libGUgfHwgKGJ0bi52aXNpYmxlICYmIGJ0bi52aXNpYmxlID09PSB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICBAaWYgKGJ0bi50eXBlID09PSAnc3VibWl0JyAmJiBpbmxpbmVGb3JtKSB7XHJcbiAgICAgICAgICAgICAgPGxpYi1nZW5lcmljLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiJ3N1Ym1pdCdcIlxyXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiaW5saW5lRm9ybS5sb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbmxpbmVGb3JtLmxvYWRpbmcgfHwgZm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJidG4ubGFiZWwgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImJ0bi5zZXZlcml0eVwiXHJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbbW9kZWxdPVwiYnRuLnNwbGl0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJpbmxpbmVGb3JtLm9uU3VibWl0KClcIlxyXG4gICAgICAgICAgICAgID48L2xpYi1nZW5lcmljLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBAZWxzZXtcclxuICAgICAgICAgICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJidG4uaWNvblwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnRuLmxhYmVsIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cImJ0bi52YXJpYW50XCJcclxuICAgICAgICAgICAgICAgIFtzZXZlcml0eV09XCJidG4uc2V2ZXJpdHlcIlxyXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiYnRuLnNpemVcIlxyXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cImJ0bi5zcGxpdEFjdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgW3Blcm1pc3Npb25dPVwiYnRuLnBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiaGFuZGxlQ3JlYXRlRWRpdEFjdGlvbihidG4pXCJcclxuICAgICAgICAgICAgICA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPC9wLXRvb2xiYXI+XHJcblxyXG4gIDwhLS0gVGFicyAtLT5cclxuICA8cC10YWJzIHZhbHVlPVwiMFwiPlxyXG4gICAgPHAtdGFibGlzdD5cclxuICAgICAgIEBmb3IgKHRhYiBvZiB0YWJzXzsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHAtdGFiIHZhbHVlPVwie3skaW5kZXh9fVwiPlxyXG4gICAgICAgICAgPGkgW2NsYXNzXT1cInRhYi5pY29uXCI+PC9pPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMSBtbC0xXCI+e3sgdGFiLmhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICA8L3AtdGFiPlxyXG4gICAgICAgfVxyXG4gICAgPC9wLXRhYmxpc3Q+XHJcbiAgICA8cC10YWJwYW5lbHM+XHJcbiAgICAgIEBmb3IgKHRhYiBvZiB0YWJzXzsgdHJhY2sgJGluZGV4KSB7XHJcbiA8cC10YWJwYW5lbCB2YWx1ZT1cInt7JGluZGV4fX1cIj5cclxuXHJcbiAgICAgIDwhLS0gRm9ybWx5IGZpZWxkcyAtLT5cclxuICAgICAgPCEtLSBib3JkZXIgYm9yZGVyLXN1cmZhY2UgcC00LS0+XHJcbiAgICAgIDxkaXYgIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgQGlmICh0YWIuZmllbGRzLmxlbmd0aCAmJiAkaW5kZXggPT09IDApIHtcclxuXHJcbiAgICAgICA8Zm9ybSAqbmdJZj1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgICAgICAgQGlmICh0YWIuZmllbGRzLmxlbmd0aCAmJiAkaW5kZXggPT09IDAgKSB7XHJcbiBAaWYgKGlzRWRpdE1vZGUgfHwgaXNDcmVhdGVNb2RlKSB7XHJcbiAgICAgICAgIDxhcHAtZ2VuZXJpYy1kaWFsb2dcclxuICAgICAgICAgI2lubGluZUZvcm1cclxuICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICBbZm9ybUZpZWxkc109XCJmb3JtRmllbGRzID8/IFtdXCJcclxuICAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxyXG4gICAgW2lkRmllbGRdPVwiaWRGaWVsZCA/PydpZCdcIlxyXG4gICAgW2Rpc3BsYXlNb2RlXT1cIidpbmxpbmUnXCJcclxuICAgICBbbW9kZV09XCInZm9ybS1vbmx5J1wiXHJcbiAgICAgW2ZvcmNlU3RhdGVdPVwiaXNDcmVhdGVNb2RlID8gJ2NyZWF0ZSc6J2VkaXQnXCJcclxuICAgIChhZnRlclNhdmUpPVwiYWZ0ZXJTYXZlKCRldmVudClcIlxyXG4gID5cclxuICA8L2FwcC1nZW5lcmljLWRpYWxvZz5cclxufVxyXG5AZWxzZSBpZihpc1ZpZXdNb2RlKXtcclxuIDxmb3JtbHktZm9ybVxyXG4gICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICBbZmllbGRzXT1cInRhYi5maWVsZHNcIlxyXG4gICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxufVxyXG59XHJcbiAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKHRhYi5maWVsZHMubGVuZ3RoICYmICRpbmRleCA+IDApIHtcclxuXHJcblxyXG4gICAgICAgIDxmb3JtbHktZm9ybVxyXG4gICAgICAgICAgW2Zvcm1dPVwiZ2V0Rm9ybSgkaW5kZXgpXCJcclxuICAgICAgICAgIFtmaWVsZHNdPVwidGFiLmZpZWxkc1wiXHJcbiAgICAgICAgICBbbW9kZWxdPVwidGFiLm1vZGVsIHx8IG1vZGVsXCJcclxuICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gQ3VzdG9tIHRlbXBsYXRlIC0tPlxyXG4gICAgICBAaWYgKHRhYi5jb250ZW50KSB7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYi5jb250ZW50OyBjb250ZXh0OiB7IG1vZGVsOiBtb2RlbCB9XCI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICAgIDwvcC10YWJwYW5lbD5cclxuICAgIH1cclxuICAgIDwvcC10YWJwYW5lbHM+XHJcbiAgPC9wLXRhYnM+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBbbW9kZWxdPVwibW9kZWxcIiAtLT5cclxuICA8YXBwLWdlbmVyaWMtZGlhbG9nXHJcbiAgICAjZGlhbG9nXHJcbiAgICBbZm9ybUZpZWxkc109XCJmb3JtRmllbGRzID8/IFtdXCJcclxuICAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxyXG4gICAgW2lkRmllbGRdPVwiaWRGaWVsZCA/PydpZCdcIlxyXG4gICAgW2Rpc3BsYXlNb2RlXT1cImRpc3BsYXlNb2RlID8/ICdkaWFsb2cnXCJcclxuICAgIChhZnRlclNhdmUpPVwiYWZ0ZXJTYXZlKCRldmVudClcIlxyXG4gID5cclxuICA8L2FwcC1nZW5lcmljLWRpYWxvZz5cclxufVxyXG4iXX0=","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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"}
|
|
@@ -23,6 +23,7 @@ declare class GenericDialogComponent implements OnInit, OnChanges {
|
|
|
23
23
|
formFields: FormlyFieldConfig[];
|
|
24
24
|
model: any;
|
|
25
25
|
apiName: string;
|
|
26
|
+
moduleName: string;
|
|
26
27
|
idField: string;
|
|
27
28
|
dialogMaxWidth: string;
|
|
28
29
|
displayMode: 'drawer' | 'dialog' | 'route' | 'inline' | Partial<Record<'add' | 'edit' | 'view', 'drawer' | 'dialog' | 'route' | 'inline'>>;
|
|
@@ -86,7 +87,7 @@ declare class GenericDialogComponent implements OnInit, OnChanges {
|
|
|
86
87
|
/** New cancel method for form-only mode */
|
|
87
88
|
onCancel(): void;
|
|
88
89
|
static ɵfac: i0.ɵɵFactoryDeclaration<GenericDialogComponent, never>;
|
|
89
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GenericDialogComponent, "app-generic-dialog", never, { "form": { "alias": "form"; "required": false; }; "service": { "alias": "service"; "required": false; }; "formFields": { "alias": "formFields"; "required": false; }; "model": { "alias": "model"; "required": false; }; "apiName": { "alias": "apiName"; "required": false; }; "idField": { "alias": "idField"; "required": false; }; "dialogMaxWidth": { "alias": "dialogMaxWidth"; "required": false; }; "displayMode": { "alias": "displayMode"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "forceState": { "alias": "forceState"; "required": false; }; "drawerVisible": { "alias": "drawerVisible"; "required": false; }; "dialogVisible": { "alias": "dialogVisible"; "required": false; }; "isViewMode": { "alias": "isViewMode"; "required": false; }; "isEditMode": { "alias": "isEditMode"; "required": false; }; "useConfirmOnSave": { "alias": "useConfirmOnSave"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "errorMsg": { "alias": "errorMsg"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "beforeSaveTransform": { "alias": "beforeSaveTransform"; "required": false; }; "hideTable": { "alias": "hideTable"; "required": false; }; "autoShowForm": { "alias": "autoShowForm"; "required": false; }; }, { "action": "action"; "afterSave": "afterSave"; "afterDelete": "afterDelete"; "beforeSave": "beforeSave"; "beforeDelete": "beforeDelete"; "formCancel": "formCancel"; "formInit": "formInit"; "dataLoaded": "dataLoaded"; "selectionChange": "selectionChange"; "error": "error"; "visibleChange": "visibleChange"; }, never, never, true, never>;
|
|
90
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GenericDialogComponent, "app-generic-dialog", never, { "form": { "alias": "form"; "required": false; }; "service": { "alias": "service"; "required": false; }; "formFields": { "alias": "formFields"; "required": false; }; "model": { "alias": "model"; "required": false; }; "apiName": { "alias": "apiName"; "required": false; }; "moduleName": { "alias": "moduleName"; "required": false; }; "idField": { "alias": "idField"; "required": false; }; "dialogMaxWidth": { "alias": "dialogMaxWidth"; "required": false; }; "displayMode": { "alias": "displayMode"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "forceState": { "alias": "forceState"; "required": false; }; "drawerVisible": { "alias": "drawerVisible"; "required": false; }; "dialogVisible": { "alias": "dialogVisible"; "required": false; }; "isViewMode": { "alias": "isViewMode"; "required": false; }; "isEditMode": { "alias": "isEditMode"; "required": false; }; "useConfirmOnSave": { "alias": "useConfirmOnSave"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "errorMsg": { "alias": "errorMsg"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "beforeSaveTransform": { "alias": "beforeSaveTransform"; "required": false; }; "hideTable": { "alias": "hideTable"; "required": false; }; "autoShowForm": { "alias": "autoShowForm"; "required": false; }; }, { "action": "action"; "afterSave": "afterSave"; "afterDelete": "afterDelete"; "beforeSave": "beforeSave"; "beforeDelete": "beforeDelete"; "formCancel": "formCancel"; "formInit": "formInit"; "dataLoaded": "dataLoaded"; "selectionChange": "selectionChange"; "error": "error"; "visibleChange": "visibleChange"; }, never, never, true, never>;
|
|
90
91
|
}
|
|
91
92
|
|
|
92
93
|
export { GenericDialogComponent, GenericDialogModule };
|