imm-element-ui 0.1.9 → 0.2.0

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.
@@ -184,7 +184,7 @@ export class PageFormComponent extends AmComponent {
184
184
  });
185
185
  }
186
186
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
187
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PageFormComponent, isStandalone: true, selector: "app-page-form", inputs: { addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, gridList: { classPropertyName: "gridList", publicName: "gridList", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, getPrmInput: { classPropertyName: "getPrmInput", publicName: "getPrmInput", isSignal: true, isRequired: true, transformFunction: null }, statusSteps: { classPropertyName: "statusSteps", publicName: "statusSteps", isSignal: true, isRequired: false, transformFunction: null }, statusKey: { classPropertyName: "statusKey", publicName: "statusKey", isSignal: true, isRequired: false, transformFunction: null }, hrefBtnList: { classPropertyName: "hrefBtnList", publicName: "hrefBtnList", isSignal: true, isRequired: false, transformFunction: null }, setTitle: { classPropertyName: "setTitle", publicName: "setTitle", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, modelLog: { classPropertyName: "modelLog", publicName: "modelLog", isSignal: true, isRequired: false, transformFunction: null }, formDisabled: { classPropertyName: "formDisabled", publicName: "formDisabled", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], viewQueries: [{ propertyName: "customGrid", first: true, predicate: ["customGrid"], descendants: true }, { propertyName: "cForm", first: true, predicate: ["cForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"overflow-hidden\">\r\n <div class=\"flex items-center justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\r\n <app-crumb-action\r\n [addVisible]=\"addVisible()\"\r\n [newUrl]=\"newUrl\"\r\n [isShowCog]=\"true\"\r\n [outlined]=\"true\"\r\n [authLevel]=\"authLevel()\"\r\n (saveEvent)=\"submitForm()\">\r\n </app-crumb-action>\r\n <div class=\"hrefBtnList\">\r\n @if(id){\r\n @for(btn of hrefBtnList();track btn){\r\n <p-button \r\n [variant]=\"btn?.variant\" \r\n [severity]=\"btn?.severity\" \r\n class=\"mr-[6px]\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{btn.i18nKey? i18n.fanyi(btn.i18nKey) : btn.label}}\"\r\n (click)=\"goRun(btn)\"\r\n >\r\n </p-button>\r\n }\r\n }\r\n \r\n </div>\r\n <div></div>\r\n \r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"px-2 flex flex-wrap items-center md:basis-2/3 basis-full\">\r\n <div class=\"md:basis-1/3 py-1 basis-full flex items-center gap-2 flex-row order-1\">\r\n @for (btn of actionList();let i = $index; track btn) {\r\n <p-button\r\n [variant]=\"btn?.variant\"\r\n [severity]=\"btn?.severity\"\r\n class=\"mr-[4px]\"\r\n size=\"small\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{ btn.i18nKey ? (btn.i18nKey | translate) : btn.label }}\"\r\n (click)=\"authClick(btn)\"\r\n [disabled]=\"btn.btnDisabled ? btn.btnDisabled(getPrm.data) : false\"\r\n >\r\n </p-button>\r\n }\r\n </div>\r\n \r\n <div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first\">\r\n <custom-steps\r\n [steps]=\"statusSteps()\"\r\n [current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\r\n [authLevel]=\"authLevel()\"\r\n (change)=\"statusChange($event)\">\r\n </custom-steps>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"main flex flex-wrap overflow-y-hidden\">\r\n <div class=\"md:basis-2/3 basis-full h-full overflow-y-auto\">\r\n <div class=\"bg-white mx-2 form-panel\">\r\n <div class=\"p-2 flex-1\">\r\n <form\r\n [formGroup]=\"form().form!\">\r\n <custom-form\r\n #cForm\r\n [options]=\"formOptions\"\r\n [upsert]=\"upsertPrm\"\r\n [model]=\"getPrm.data??{}\"></custom-form>\r\n </form>\r\n </div>\r\n @if(gridList() && gridList().length > 1){\r\n <div class=\"relative mb-2\">\r\n <p-tabs [(value)]=\"indexValue\">\r\n <p-tablist>\r\n @for (fchild of gridList();let i = $index; track fchild) {\r\n <p-tab [value]=\"i\">\r\n {{fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title}}\r\n </p-tab>\r\n }\r\n </p-tablist>\r\n </p-tabs>\r\n </div>\r\n }\r\n @for (grid of gridList(); let i = $index;track grid) {\r\n <custom-grid\r\n #customGrid\r\n [hidden]=\"indexValue !=i \"\r\n [rowData]=\"getPrm.data?.[grid.subDataKey!]|| []\"\r\n [upsert]=\"upsertPrm\"\r\n (deleteEmit)=\"delRows($event)\"\r\n [addType]=\"grid.subTableSource\"\r\n (addEmit)=\"dataSourceShow()\"\r\n [gridOptions]=\"grid.gridOptions\"\r\n [authLevel]=\"authLevel()\"\r\n [selectData]=\"grid.selectData\">\r\n </custom-grid>\r\n } \r\n </div>\r\n </div>\r\n <div class=\"md:basis-1/3 basis-full h-full overflow-y-auto\">\r\n <custom-log [logs]=\"getPrm.data?.log??[]\"></custom-log>\r\n </div>\r\n </div>\r\n</div>\r\n<p-toast />\r\n<row-selector\r\n\t[(visible)]=\"visible\"\r\n\t[searchPrm]=\"dialogSearchPrm\"\r\n\t[gridOptions]=\"selectOptions\"\r\n\t(onOk)=\"onOk($event)\">\r\n</row-selector>", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 140px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}.form-panel{border:solid 1px #dbdbdb}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormComponent, selector: "custom-form", inputs: ["options", "model", "upsert"] }, { kind: "component", type: LogComponent, selector: "custom-log", inputs: ["logs", "id"] }, { kind: "component", type: CrumbActionComponent, selector: "app-crumb-action", inputs: ["isShowCog", "addVisible", "newUrl", "onExport", "outlined", "isList", "authLevel", "actionList"], outputs: ["saveEvent", "cancelEvent", "actionEvent"] }, { kind: "component", type: StepsComponent, selector: "custom-steps", inputs: ["steps", "current", "authLevel"], outputs: ["change"] }, { kind: "component", type: GridComponent, selector: "custom-grid", inputs: ["gridOptions", "upsert", "rowData", "searchPrm", "addType", "selectData", "showAct", "actPos", "authLevel"], outputs: ["searchPrmChange", "deleteEmit", "addEmit"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i3.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i3.TabList, selector: "p-tablist" }, { kind: "component", type: i3.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: RowSelectorComponent, selector: "row-selector", inputs: ["title", "gridOptions", "searchPrm", "visible"], outputs: ["onOk", "visibleChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PageFormComponent, isStandalone: true, selector: "app-page-form", inputs: { addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, gridList: { classPropertyName: "gridList", publicName: "gridList", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, getPrmInput: { classPropertyName: "getPrmInput", publicName: "getPrmInput", isSignal: true, isRequired: true, transformFunction: null }, statusSteps: { classPropertyName: "statusSteps", publicName: "statusSteps", isSignal: true, isRequired: false, transformFunction: null }, statusKey: { classPropertyName: "statusKey", publicName: "statusKey", isSignal: true, isRequired: false, transformFunction: null }, hrefBtnList: { classPropertyName: "hrefBtnList", publicName: "hrefBtnList", isSignal: true, isRequired: false, transformFunction: null }, setTitle: { classPropertyName: "setTitle", publicName: "setTitle", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, modelLog: { classPropertyName: "modelLog", publicName: "modelLog", isSignal: true, isRequired: false, transformFunction: null }, formDisabled: { classPropertyName: "formDisabled", publicName: "formDisabled", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], viewQueries: [{ propertyName: "customGrid", first: true, predicate: ["customGrid"], descendants: true }, { propertyName: "cForm", first: true, predicate: ["cForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"overflow-hidden\">\r\n <div class=\"flex items-center justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\r\n <app-crumb-action\r\n [addVisible]=\"addVisible()\"\r\n [newUrl]=\"newUrl\"\r\n [isShowCog]=\"true\"\r\n [outlined]=\"true\"\r\n [authLevel]=\"authLevel()\"\r\n [actionList]=\"actionList()\"\r\n (actionEvent)=\"authClick($event)\"\r\n (saveEvent)=\"submitForm()\">\r\n </app-crumb-action>\r\n <div class=\"hrefBtnList\">\r\n @if(id){\r\n @for(btn of hrefBtnList();track btn){\r\n <p-button \r\n [variant]=\"btn?.variant\" \r\n [severity]=\"btn?.severity\" \r\n class=\"mr-[6px]\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{btn.i18nKey? i18n.fanyi(btn.i18nKey) : btn.label}}\"\r\n (click)=\"goRun(btn)\"\r\n >\r\n </p-button>\r\n }\r\n }\r\n \r\n </div>\r\n <div></div>\r\n \r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"px-2 flex flex-wrap items-center md:basis-2/3 basis-full\">\r\n <div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center gap-2 flex-row order-1\">\r\n @for (btn of actionList();let i = $index; track btn) {\r\n <p-button\r\n [variant]=\"btn?.variant\"\r\n [severity]=\"btn?.severity\"\r\n class=\"mr-[4px]\"\r\n size=\"small\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{ btn.i18nKey ? (btn.i18nKey | translate) : btn.label }}\"\r\n (click)=\"authClick(btn)\"\r\n [disabled]=\"btn.btnDisabled ? btn.btnDisabled(getPrm.data) : false\"\r\n >\r\n </p-button>\r\n }\r\n </div>\r\n \r\n <div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first\">\r\n <custom-steps\r\n [steps]=\"statusSteps()\"\r\n [current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\r\n [authLevel]=\"authLevel()\"\r\n (change)=\"statusChange($event)\">\r\n </custom-steps>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"main flex flex-wrap overflow-y-hidden\">\r\n <div class=\"md:basis-2/3 basis-full h-full overflow-y-auto\">\r\n <div class=\"bg-white mx-2 form-panel\">\r\n <div class=\"p-2 flex-1\">\r\n <form\r\n [formGroup]=\"form().form!\">\r\n <custom-form\r\n #cForm\r\n [options]=\"formOptions\"\r\n [upsert]=\"upsertPrm\"\r\n [model]=\"getPrm.data??{}\"></custom-form>\r\n </form>\r\n </div>\r\n @if(gridList() && gridList().length > 1){\r\n <div class=\"relative mb-2\">\r\n <p-tabs [(value)]=\"indexValue\">\r\n <p-tablist>\r\n @for (fchild of gridList();let i = $index; track fchild) {\r\n <p-tab [value]=\"i\">\r\n {{fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title}}\r\n </p-tab>\r\n }\r\n </p-tablist>\r\n </p-tabs>\r\n </div>\r\n }\r\n @for (grid of gridList(); let i = $index;track grid) {\r\n <custom-grid\r\n #customGrid\r\n [hidden]=\"indexValue !=i \"\r\n [rowData]=\"getPrm.data?.[grid.subDataKey!]|| []\"\r\n [upsert]=\"upsertPrm\"\r\n (deleteEmit)=\"delRows($event)\"\r\n [addType]=\"grid.subTableSource\"\r\n (addEmit)=\"dataSourceShow()\"\r\n [gridOptions]=\"grid.gridOptions\"\r\n [authLevel]=\"authLevel()\"\r\n [selectData]=\"grid.selectData\">\r\n </custom-grid>\r\n } \r\n </div>\r\n </div>\r\n <div class=\"md:basis-1/3 basis-full h-full overflow-y-auto\">\r\n <custom-log [logs]=\"getPrm.data?.log??[]\"></custom-log>\r\n </div>\r\n </div>\r\n</div>\r\n<p-toast />\r\n<row-selector\r\n\t[(visible)]=\"visible\"\r\n\t[searchPrm]=\"dialogSearchPrm\"\r\n\t[gridOptions]=\"selectOptions\"\r\n\t(onOk)=\"onOk($event)\">\r\n</row-selector>", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 140px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}.form-panel{border:solid 1px #dbdbdb}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormComponent, selector: "custom-form", inputs: ["options", "model", "upsert"] }, { kind: "component", type: LogComponent, selector: "custom-log", inputs: ["logs", "id"] }, { kind: "component", type: CrumbActionComponent, selector: "app-crumb-action", inputs: ["isShowCog", "addVisible", "newUrl", "onExport", "outlined", "isList", "authLevel", "actionList"], outputs: ["saveEvent", "cancelEvent", "actionEvent"] }, { kind: "component", type: StepsComponent, selector: "custom-steps", inputs: ["steps", "current", "authLevel"], outputs: ["change"] }, { kind: "component", type: GridComponent, selector: "custom-grid", inputs: ["gridOptions", "upsert", "rowData", "searchPrm", "addType", "selectData", "showAct", "actPos", "authLevel"], outputs: ["searchPrmChange", "deleteEmit", "addEmit"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i3.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i3.TabList, selector: "p-tablist" }, { kind: "component", type: i3.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: RowSelectorComponent, selector: "row-selector", inputs: ["title", "gridOptions", "searchPrm", "visible"], outputs: ["onOk", "visibleChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
188
188
  }
189
189
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageFormComponent, decorators: [{
190
190
  type: Component,
@@ -200,7 +200,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
200
200
  Toast,
201
201
  RowSelectorComponent,
202
202
  TranslatePipe,
203
- ], providers: [], template: "<div class=\"overflow-hidden\">\r\n <div class=\"flex items-center justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\r\n <app-crumb-action\r\n [addVisible]=\"addVisible()\"\r\n [newUrl]=\"newUrl\"\r\n [isShowCog]=\"true\"\r\n [outlined]=\"true\"\r\n [authLevel]=\"authLevel()\"\r\n (saveEvent)=\"submitForm()\">\r\n </app-crumb-action>\r\n <div class=\"hrefBtnList\">\r\n @if(id){\r\n @for(btn of hrefBtnList();track btn){\r\n <p-button \r\n [variant]=\"btn?.variant\" \r\n [severity]=\"btn?.severity\" \r\n class=\"mr-[6px]\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{btn.i18nKey? i18n.fanyi(btn.i18nKey) : btn.label}}\"\r\n (click)=\"goRun(btn)\"\r\n >\r\n </p-button>\r\n }\r\n }\r\n \r\n </div>\r\n <div></div>\r\n \r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"px-2 flex flex-wrap items-center md:basis-2/3 basis-full\">\r\n <div class=\"md:basis-1/3 py-1 basis-full flex items-center gap-2 flex-row order-1\">\r\n @for (btn of actionList();let i = $index; track btn) {\r\n <p-button\r\n [variant]=\"btn?.variant\"\r\n [severity]=\"btn?.severity\"\r\n class=\"mr-[4px]\"\r\n size=\"small\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{ btn.i18nKey ? (btn.i18nKey | translate) : btn.label }}\"\r\n (click)=\"authClick(btn)\"\r\n [disabled]=\"btn.btnDisabled ? btn.btnDisabled(getPrm.data) : false\"\r\n >\r\n </p-button>\r\n }\r\n </div>\r\n \r\n <div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first\">\r\n <custom-steps\r\n [steps]=\"statusSteps()\"\r\n [current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\r\n [authLevel]=\"authLevel()\"\r\n (change)=\"statusChange($event)\">\r\n </custom-steps>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"main flex flex-wrap overflow-y-hidden\">\r\n <div class=\"md:basis-2/3 basis-full h-full overflow-y-auto\">\r\n <div class=\"bg-white mx-2 form-panel\">\r\n <div class=\"p-2 flex-1\">\r\n <form\r\n [formGroup]=\"form().form!\">\r\n <custom-form\r\n #cForm\r\n [options]=\"formOptions\"\r\n [upsert]=\"upsertPrm\"\r\n [model]=\"getPrm.data??{}\"></custom-form>\r\n </form>\r\n </div>\r\n @if(gridList() && gridList().length > 1){\r\n <div class=\"relative mb-2\">\r\n <p-tabs [(value)]=\"indexValue\">\r\n <p-tablist>\r\n @for (fchild of gridList();let i = $index; track fchild) {\r\n <p-tab [value]=\"i\">\r\n {{fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title}}\r\n </p-tab>\r\n }\r\n </p-tablist>\r\n </p-tabs>\r\n </div>\r\n }\r\n @for (grid of gridList(); let i = $index;track grid) {\r\n <custom-grid\r\n #customGrid\r\n [hidden]=\"indexValue !=i \"\r\n [rowData]=\"getPrm.data?.[grid.subDataKey!]|| []\"\r\n [upsert]=\"upsertPrm\"\r\n (deleteEmit)=\"delRows($event)\"\r\n [addType]=\"grid.subTableSource\"\r\n (addEmit)=\"dataSourceShow()\"\r\n [gridOptions]=\"grid.gridOptions\"\r\n [authLevel]=\"authLevel()\"\r\n [selectData]=\"grid.selectData\">\r\n </custom-grid>\r\n } \r\n </div>\r\n </div>\r\n <div class=\"md:basis-1/3 basis-full h-full overflow-y-auto\">\r\n <custom-log [logs]=\"getPrm.data?.log??[]\"></custom-log>\r\n </div>\r\n </div>\r\n</div>\r\n<p-toast />\r\n<row-selector\r\n\t[(visible)]=\"visible\"\r\n\t[searchPrm]=\"dialogSearchPrm\"\r\n\t[gridOptions]=\"selectOptions\"\r\n\t(onOk)=\"onOk($event)\">\r\n</row-selector>", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 140px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}.form-panel{border:solid 1px #dbdbdb}\n"] }]
203
+ ], providers: [], template: "<div class=\"overflow-hidden\">\r\n <div class=\"flex items-center justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\r\n <app-crumb-action\r\n [addVisible]=\"addVisible()\"\r\n [newUrl]=\"newUrl\"\r\n [isShowCog]=\"true\"\r\n [outlined]=\"true\"\r\n [authLevel]=\"authLevel()\"\r\n [actionList]=\"actionList()\"\r\n (actionEvent)=\"authClick($event)\"\r\n (saveEvent)=\"submitForm()\">\r\n </app-crumb-action>\r\n <div class=\"hrefBtnList\">\r\n @if(id){\r\n @for(btn of hrefBtnList();track btn){\r\n <p-button \r\n [variant]=\"btn?.variant\" \r\n [severity]=\"btn?.severity\" \r\n class=\"mr-[6px]\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{btn.i18nKey? i18n.fanyi(btn.i18nKey) : btn.label}}\"\r\n (click)=\"goRun(btn)\"\r\n >\r\n </p-button>\r\n }\r\n }\r\n \r\n </div>\r\n <div></div>\r\n \r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"px-2 flex flex-wrap items-center md:basis-2/3 basis-full\">\r\n <div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center gap-2 flex-row order-1\">\r\n @for (btn of actionList();let i = $index; track btn) {\r\n <p-button\r\n [variant]=\"btn?.variant\"\r\n [severity]=\"btn?.severity\"\r\n class=\"mr-[4px]\"\r\n size=\"small\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{ btn.i18nKey ? (btn.i18nKey | translate) : btn.label }}\"\r\n (click)=\"authClick(btn)\"\r\n [disabled]=\"btn.btnDisabled ? btn.btnDisabled(getPrm.data) : false\"\r\n >\r\n </p-button>\r\n }\r\n </div>\r\n \r\n <div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first\">\r\n <custom-steps\r\n [steps]=\"statusSteps()\"\r\n [current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\r\n [authLevel]=\"authLevel()\"\r\n (change)=\"statusChange($event)\">\r\n </custom-steps>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"main flex flex-wrap overflow-y-hidden\">\r\n <div class=\"md:basis-2/3 basis-full h-full overflow-y-auto\">\r\n <div class=\"bg-white mx-2 form-panel\">\r\n <div class=\"p-2 flex-1\">\r\n <form\r\n [formGroup]=\"form().form!\">\r\n <custom-form\r\n #cForm\r\n [options]=\"formOptions\"\r\n [upsert]=\"upsertPrm\"\r\n [model]=\"getPrm.data??{}\"></custom-form>\r\n </form>\r\n </div>\r\n @if(gridList() && gridList().length > 1){\r\n <div class=\"relative mb-2\">\r\n <p-tabs [(value)]=\"indexValue\">\r\n <p-tablist>\r\n @for (fchild of gridList();let i = $index; track fchild) {\r\n <p-tab [value]=\"i\">\r\n {{fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title}}\r\n </p-tab>\r\n }\r\n </p-tablist>\r\n </p-tabs>\r\n </div>\r\n }\r\n @for (grid of gridList(); let i = $index;track grid) {\r\n <custom-grid\r\n #customGrid\r\n [hidden]=\"indexValue !=i \"\r\n [rowData]=\"getPrm.data?.[grid.subDataKey!]|| []\"\r\n [upsert]=\"upsertPrm\"\r\n (deleteEmit)=\"delRows($event)\"\r\n [addType]=\"grid.subTableSource\"\r\n (addEmit)=\"dataSourceShow()\"\r\n [gridOptions]=\"grid.gridOptions\"\r\n [authLevel]=\"authLevel()\"\r\n [selectData]=\"grid.selectData\">\r\n </custom-grid>\r\n } \r\n </div>\r\n </div>\r\n <div class=\"md:basis-1/3 basis-full h-full overflow-y-auto\">\r\n <custom-log [logs]=\"getPrm.data?.log??[]\"></custom-log>\r\n </div>\r\n </div>\r\n</div>\r\n<p-toast />\r\n<row-selector\r\n\t[(visible)]=\"visible\"\r\n\t[searchPrm]=\"dialogSearchPrm\"\r\n\t[gridOptions]=\"selectOptions\"\r\n\t(onOk)=\"onOk($event)\">\r\n</row-selector>", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 140px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}.form-panel{border:solid 1px #dbdbdb}\n"] }]
204
204
  }], ctorParameters: () => [], propDecorators: { customGrid: [{
205
205
  type: ViewChild,
206
206
  args: ['customGrid']
@@ -208,4 +208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
208
208
  type: ViewChild,
209
209
  args: ['cForm']
210
210
  }] } });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxHQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFC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QUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO2dCQUN2RSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQWEsQ0FBQyxNQUFNLENBQUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtnQkFDeEYsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOytHQTNLVSxpQkFBaUI7bUdBQWpCLGlCQUFpQiwrbkRBRmxCLEVBQUUsNE9DckNkLGdqSUE4R2UsK1FEdkZYLFlBQVksaWJBQ1osbUJBQW1CLHFiQUNuQixhQUFhLGdHQUNiLFlBQVksK0VBQ1osb0JBQW9CLCtOQUNwQixjQUFjLHlIQUNkLGFBQWEsb09BQ2IsVUFBVSw0WEFDVixLQUFLLGlVQUNMLG9CQUFvQixrSkFDcEIsYUFBYTs7NEZBTUosaUJBQWlCO2tCQXBCN0IsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixLQUFLO3dCQUNMLG9CQUFvQjt3QkFDcEIsYUFBYTtxQkFDZCxhQUdTLEVBQUU7d0RBZWEsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNILEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdXNlckhpc3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCwgaW5wdXQsIGVmZmVjdCwgY29tcHV0ZWQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZvcm1Db21wb25lbnQsRm9ybU9wdGlvbnMgfSBmcm9tICcuLi9mb3JtL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSb3dTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL3Jvdy1zZWxlY3Rvci9yb3ctc2VsZWN0b3IuY29tcG9uZW50J1xyXG5pbXBvcnQgeyBMb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2cvbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgQ3J1bWJBY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9jcnVtYi1hY3Rpb24vY3J1bWItYWN0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0ZXBzQ29tcG9uZW50LFN0ZXAgfSBmcm9tICcuLi9zdGVwcy9zdGVwcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBHcmlkQ29tcG9uZW50LCBHcmlkT3B0aW9ucyB9IGZyb20gJy4uL2dyaWQvZ3JpZC9ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xyXG5pbXBvcnQgeyBBbUNvbXBvbmVudCwgR2V0LCB9IGZyb20gJy4uL2FtL2FtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcbmltcG9ydCB7IFNlYXJjaCB9IGZyb20gJy4uL2FtL2FtLmNvbXBvbmVudCdcclxuaW1wb3J0IHsgSHJlZkJ0bkxpc3QsR3JpZExpc3QgfSBmcm9tICcuL3BhZ2UtZm9ybS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uQnRuIH0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgZm9ybVR5cGVUb1Byb3BzIH0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJ1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wYWdlLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1Db21wb25lbnQsXHJcbiAgICBMb2dDb21wb25lbnQsXHJcbiAgICBDcnVtYkFjdGlvbkNvbXBvbmVudCxcclxuICAgIFN0ZXBzQ29tcG9uZW50LFxyXG4gICAgR3JpZENvbXBvbmVudCxcclxuICAgIFRhYnNNb2R1bGUsXHJcbiAgICBUb2FzdCxcclxuICAgIFJvd1NlbGVjdG9yQ29tcG9uZW50LFxyXG4gICAgVHJhbnNsYXRlUGlwZSxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50LnNjc3MnLFxyXG4gIHByb3ZpZGVyczpbXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnZUZvcm1Db21wb25lbnQgZXh0ZW5kcyBBbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuICBhZGRWaXNpYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKVxyXG4gIGdyaWRMaXN0ID0gaW5wdXQ8R3JpZExpc3RbXT4oW10pXHJcbiAgZm9ybSA9IGlucHV0LnJlcXVpcmVkPEZvcm1PcHRpb25zPih7fSlcclxuICBnZXRQcm1JbnB1dCA9IGlucHV0LnJlcXVpcmVkPEdldD4oe30pXHJcbiAgc3RhdHVzU3RlcHMgPSBpbnB1dDxTdGVwW10+KFtdKVxyXG4gIHN0YXR1c0tleSA9IGlucHV0KCdzdGF0dXMnKVxyXG4gIGhyZWZCdG5MaXN0ID0gaW5wdXQ8SHJlZkJ0bkxpc3RbXT4oW10pXHJcbiAgc2V0VGl0bGUgPSBpbnB1dDxzdHJpbmc+KClcclxuICBhY3Rpb25MaXN0ID0gaW5wdXQ8UGVybWlzc2lvbkJ0bltdPihbXSlcclxuICBtb2RlbExvZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKVxyXG4gIGZvcm1EaXNhYmxlZCA9IGlucHV0PEZ1bmN0aW9uPigpXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbUdyaWQnKSBjdXN0b21HcmlkITogR3JpZENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdjRm9ybScpIGNGb3JtITogRm9ybUNvbXBvbmVudFxyXG4gIHVzZXJIaXN0b3J5U2VydmljZSA9ICBpbmplY3QoVXNlckhpc3RvcnlTZXJ2aWNlKVxyXG4gIGluZGV4VmFsdWUgPSAwXHJcbiAgdmlzaWJsZSA9IGZhbHNlXHJcbiAgZGlhbG9nU2VhcmNoUHJtITogU2VhcmNoXHJcbiAgc2VsZWN0T3B0aW9ucyE6R3JpZE9wdGlvbnNcclxuICBzZWxlY3REYXRhIDphbnlbXT0gW11cclxuICBwYWdlVXJsID0gJydcclxuICBuZXdVcmwgPSAnJ1xyXG4gIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpXHJcbiAgYXV0aExldmVsID0gaW5wdXQ8bnVtYmVyPigtMSlcclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5pZCA9IE51bWJlcih0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKSlcclxuICAgIHRoaXMucGFnZVVybCA9IHRoaXMucm91dGUuc25hcHNob3QudXJsLm1hcChzZWdtZW50ID0+IHNlZ21lbnQucGF0aCkuam9pbignLycpLnJlcGxhY2UoLyhbXlxcL10qKSQvLCBcIlwiKVxyXG4gICAgdGhpcy5uZXdVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9bmV3YFxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgdGhpcy5tb2RlbE5hbWUgPSB0aGlzLmdldFBybUlucHV0KCkubW9kZWxOYW1lIVxyXG4gICAgICB0aGlzLmdldFBybSA9IHsuLi50aGlzLmdldFBybUlucHV0KCl9XHJcbiAgICAgIHRoaXMuaWQgJiYgKHRoaXMuZ2V0UHJtLmlkID0gdGhpcy5pZClcclxuICAgICAgdGhpcy5pZCAmJiB0aGlzLmdldERldGFpbCgpXHJcbiAgICB9LHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSlcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1PcHRpb25zID0gey4uLnRoaXMuZm9ybSgpfVxyXG4gICAgfSlcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2cgPSB0aGlzLm1vZGVsTG9nKClcclxuICAgICAgY29uc29sZS5sb2coJ21vZGVsLS0tLS0nLHRoaXMuaXNMb2csdGhpcy5tb2RlbExvZygpKVxyXG4gICAgfSx7YWxsb3dTaWduYWxXcml0ZXM6dHJ1ZX0pXHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cENiID0gdGhpcy51cENiLmJpbmQodGhpcylcclxuICB9XHJcblxyXG4gIHN1Ym1pdEZvcm0oKSA6YW55e1xyXG4gICAgaWYodGhpcy5jRm9ybS52YWxpZGF0ZSgpKXtcclxuICAgICAgbGV0IGNiOmFueSA9IHRoaXMuaWQgPT09IDAgPyBudWxsIDogdGhpcy51cENiXHJcbiAgICAgIHRoaXMudXBzZXJ0KG51bGwsY2IpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZWxSb3dzKGU6YW55KSB7XHJcbiAgICBjb25zdCBncmlkVGFiID0gdGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1cclxuICAgIGNvbnN0IGRlbGV0ZUZ1bmMgPSBncmlkVGFiLmRlbGV0ZUZ1bmNcclxuICAgIGNvbnN0IHN1YlRhYmxlID0gZ3JpZFRhYi5ncmlkT3B0aW9ucy5tb2RlbE5hbWU7XHJcblxyXG4gICAgbGV0IHBybSA9IHsgXHJcbiAgICAgIG1vZGVsTmFtZTogc3ViVGFibGUsIFxyXG4gICAgICBpZHM6ZSBcclxuICAgIH07XHJcbiAgICBpZighZGVsZXRlRnVuYyl7XHJcbiAgICAgIHRoaXMud2ViX3JlbW92ZShwcm0pLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5nZXQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGVGdW5jKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmdldCgpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcbiAgdXBDYihyZXM/OmFueSl7XHJcbiAgICBpZihyZXMuaWQgPT0gMCl7XHJcbiAgICAgIHRoaXMuZ2V0RGV0YWlsKClcclxuICAgIH1lbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgbGV0IGVkaXRVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9JHtyZXMuaWR9YFxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtlZGl0VXJsXSlcclxuICAgICAgfSwgMTUwMClcclxuICAgIH1cclxuICAgIHRoaXMuY0Zvcm0uZmluYWxpemUoKVxyXG4gIH1cclxuICAvLyBUT0RPIOaYr+WQpumcgOimgeaVsOaNrui9rOaNouWbnuiwg+WHveaVsFxyXG4gIG9uT2soZTphbnkpe1xyXG4gICAgdGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV0uc2VsZWN0RGF0YSA9IFtdXHJcbiAgICBpZihlLmxlbmd0aCA+IDApe1xyXG4gICAgICBsZXQgeyBzZWxlY3REYXRhQ2IgfSA9IHRoaXMuZ3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdXHJcbiAgICAgIGUuZm9yRWFjaCgoaXRlbTphbnkpID0+IHtcclxuICAgICAgICBsZXQgb2JqID0gc2VsZWN0RGF0YUNiID8gc2VsZWN0RGF0YUNiKGl0ZW0pOiB7Li4uaXRlbX1cclxuICAgICAgICB0aGlzLmdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXS5zZWxlY3REYXRhIS5wdXNoKG9iailcclxuICAgICAgfSlcclxuICAgIH0gXHJcbiAgfVxyXG4gIGdldERldGFpbCgpe1xyXG4gICAgdGhpcy53ZWJfZ2V0KHRoaXMuZ2V0UHJtKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVUaXRsZShyZXMpXHJcbiAgICAgIHRoaXMuZm9ybURpc2FibGVkKCkgJiYgdGhpcy5mb3JtRGlzRnVuYygpXHJcbiAgICB9KVxyXG4gIH1cclxuICB1cGRhdGVUaXRsZShyZXM6YW55KXtcclxuICAgIC8vIGxldCB0aXRsZSA9IHRoaXMuc2V0VGl0bGUoKSA/IHRoaXMuc2V0VGl0bGUoKSA6ICcnXHJcbiAgICAvLyB0aXRsZSAhPT0gJycgJiYgdGhpcy51c2VySGlzdG9yeVNlcnZpY2Uuc2V0TGFzdFRpdGxlKHRpdGxlKVxyXG4gICAgbGV0IG1haW5GaWVsZCA9IHRoaXMuZm9ybSgpLm1haW5GaWVsZFxyXG4gICAgbGV0IHRpdGxlID0gcmVzW21haW5GaWVsZCFdXHJcbiAgICB0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5zZXRMYXN0VGl0bGUodGl0bGUpXHJcbiAgfVxyXG4gIGRhdGFTb3VyY2VTaG93KCl7XHJcbiAgICB0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHsuLi50aGlzLmdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXVsnc2VhcmNoUHJtJ10hfVxyXG4gICAgdGhpcy5zZWxlY3RPcHRpb25zID0gdGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1bJ3NlbGVjdE9wdGlvbnMnXSFcclxuICAgIGNvbnNvbGUubG9nKCdzZWxldGMtLS0tLScsdGhpcy5zZWxlY3RPcHRpb25zKVxyXG4gICAgdGhpcy5kaWFsb2dTZWFyY2hQcm0ubW9kZWxOYW1lID0gdGhpcy5zZWxlY3RPcHRpb25zLm1vZGVsTmFtZVxyXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ29SdW4oZGF0YTphbnkpe1xyXG4gICAgaWYoZGF0YS5pZEtleSl7XHJcbiAgICAgIGxldCBpZCA9IHRoaXMuZ2V0UHJtLmRhdGFbZGF0YS5pZEtleV1cclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake2RhdGEudXJsfS8ke2lkfWBdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2RhdGEudXJsXSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGF1dGhDbGljayhidG46YW55KXtcclxuICAgIGNvbnNvbGUubG9nKCdhdXRoQ2xpY2snLGJ0bilcclxuICAgIGlmKGJ0bi5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpKXtcclxuICAgICAgYnRuLm9uQ2xpY2sodGhpcy5nZXRQcm0uZGF0YSlcclxuICAgIH1cclxuICB9XHJcbiAgc3RhdHVzQ2hhbmdlKHZhbHVlOmFueSl7XHJcbiAgICBpZih0aGlzLmF1dGhMZXZlbCgpIDwgNCkgcmV0dXJuO1xyXG4gICAgaWYodGhpcy5pZCl7XHJcbiAgICAgIGxldCBwYXJhbSA6YW55PSB7XHJcbiAgICAgICAgbW9kZWxOYW1lOiB0aGlzLm1vZGVsTmFtZSxcclxuICAgICAgICBkYXRhOntpZDogdGhpcy5pZCwgW3RoaXMuc3RhdHVzS2V5KCldOiB2YWx1ZX1cclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLmlzTG9nKXtcclxuICAgICAgICBwYXJhbS5sb2dNb2RlbCA9IGAke3RoaXMubW9kZWxOYW1lfUxvZ2BcclxuICAgICAgICBwYXJhbS5sb2cgPSB7XHJcbiAgICAgICAgICBwaWQ6dGhpcy5pZCxcclxuICAgICAgICAgIGNvbnRlbnQ6YFvnirbmgIFdICR7dGhpcy5nZXRQcm0uZGF0YSFbdGhpcy5zdGF0dXNLZXkoKV19IC0+ICR7dmFsdWV9YFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLndlYl93cml0ZShwYXJhbSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5nZXREZXRhaWwoKVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRQcm0uZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5nZXRQcm0uZGF0YXx8e30se1xyXG4gICAgICAgIFt0aGlzLnN0YXR1c0tleSgpXTp2YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnVwc2VydFBybS5hZGREYXRhIVt0aGlzLnN0YXR1c0tleSgpXSA9IHZhbHVlXHJcbiAgICAgIHRoaXMuY0Zvcm0udHJpZ2dlck1vZGVsRWZmZWN0KHtbdGhpcy5zdGF0dXNLZXkoKV06dmFsdWV9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybURpc0Z1bmMoKXtcclxuICAgIHRoaXMuZm9ybU9wdGlvbnMuZmllbGRzPy5mb3JFYWNoKCh2KSA9PiB7XHJcbiAgICAgIHYuZ3JvdXA/LmZvckVhY2goKGc6YW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGZpZWxkRGlzYWJsZWQgPSBnW2Zvcm1UeXBlVG9Qcm9wc1tnLnR5cGVdXS5kaXNhYmxlZCB8fCBmYWxzZVxyXG4gICAgICAgIGlmKHRoaXMuZm9ybURpc2FibGVkKCkhKHRoaXMuZ2V0UHJtLmRhdGEpICl7XHJcbiAgICAgICAgICB0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSkgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICFmaWVsZERpc2FibGVkICYmIHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pIFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHktMSBweC0xIGJvcmRlci1iLVsxcHhdIGJvcmRlci1bI2RiZGJkYl0gYmctd2hpdGVcIj5cclxuICAgIDxhcHAtY3J1bWItYWN0aW9uXHJcbiAgICAgIFthZGRWaXNpYmxlXT1cImFkZFZpc2libGUoKVwiXHJcbiAgICAgIFtuZXdVcmxdPVwibmV3VXJsXCJcclxuICAgICAgW2lzU2hvd0NvZ109XCJ0cnVlXCJcclxuICAgICAgW291dGxpbmVkXT1cInRydWVcIlxyXG4gICAgICBbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcclxuICAgICAgKHNhdmVFdmVudCk9XCJzdWJtaXRGb3JtKClcIj5cclxuICAgIDwvYXBwLWNydW1iLWFjdGlvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJocmVmQnRuTGlzdFwiPlxyXG4gICAgICBAaWYoaWQpe1xyXG4gICAgICAgIEBmb3IoYnRuIG9mIGhyZWZCdG5MaXN0KCk7dHJhY2sgYnRuKXtcclxuICAgICAgICAgIDxwLWJ1dHRvbiBcclxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuPy52YXJpYW50XCIgXHJcbiAgICAgICAgICAgIFtzZXZlcml0eV09XCJidG4/LnNldmVyaXR5XCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXItWzZweF1cIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJidG4/Lmljb25cIlxyXG4gICAgICAgICAgICBsYWJlbD1cInt7YnRuLmkxOG5LZXk/IGkxOG4uZmFueWkoYnRuLmkxOG5LZXkpIDogYnRuLmxhYmVsfX1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29SdW4oYnRuKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXY+PC9kaXY+XHJcbiAgICBcclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInB4LTIgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIG1kOmJhc2lzLTIvMyBiYXNpcy1mdWxsXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZDpiYXNpcy0xLzMgcHktMSBiYXNpcy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGZsZXgtcm93IG9yZGVyLTFcIj5cclxuICAgICAgICBAZm9yIChidG4gb2YgYWN0aW9uTGlzdCgpO2xldCBpID0gJGluZGV4OyB0cmFjayBidG4pIHtcclxuICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICBbdmFyaWFudF09XCJidG4/LnZhcmlhbnRcIlxyXG4gICAgICAgICAgICBbc2V2ZXJpdHldPVwiYnRuPy5zZXZlcml0eVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXItWzRweF1cIlxyXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJidG4/Lmljb25cIlxyXG4gICAgICAgICAgICBsYWJlbD1cInt7IGJ0bi5pMThuS2V5ID8gKGJ0bi5pMThuS2V5IHwgdHJhbnNsYXRlKSA6IGJ0bi5sYWJlbCB9fVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhdXRoQ2xpY2soYnRuKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4uYnRuRGlzYWJsZWQgPyBidG4uYnRuRGlzYWJsZWQoZ2V0UHJtLmRhdGEpIDogZmFsc2VcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3AtYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZDpiYXNpcy0yLzMgYmFzaXMtZnVsbCBmbGV4IG1kOmZsZXgtcm93LXJldmVyc2UgZmxleC1yb3cgbWQ6b3JkZXItMiBvcmRlci1maXJzdFwiPlxyXG4gICAgICAgIDxjdXN0b20tc3RlcHNcclxuICAgICAgICAgIFtzdGVwc109XCJzdGF0dXNTdGVwcygpXCJcclxuICAgICAgICAgIFtjdXJyZW50XT1cImdldFBybS5kYXRhICYmIGdldFBybS5kYXRhW3N0YXR1c0tleSgpXSAhPT0gdW5kZWZpbmVkID8gZ2V0UHJtLmRhdGFbc3RhdHVzS2V5KCldIDogMFwiXHJcbiAgICAgICAgICBbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwic3RhdHVzQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICA8L2N1c3RvbS1zdGVwcz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWFpbiBmbGV4IGZsZXgtd3JhcCBvdmVyZmxvdy15LWhpZGRlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1kOmJhc2lzLTIvMyBiYXNpcy1mdWxsIGgtZnVsbCBvdmVyZmxvdy15LWF1dG9cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIG14LTIgZm9ybS1wYW5lbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgZmxleC0xXCI+XHJcbiAgICAgICAgICA8Zm9ybVxyXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm0oKS5mb3JtIVwiPlxyXG4gICAgICAgICAgICA8Y3VzdG9tLWZvcm1cclxuICAgICAgICAgICAgICAjY0Zvcm1cclxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJmb3JtT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxyXG4gICAgICAgICAgICAgIFttb2RlbF09XCJnZXRQcm0uZGF0YT8/e31cIj48L2N1c3RvbS1mb3JtPlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBpZihncmlkTGlzdCgpICYmIGdyaWRMaXN0KCkubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgbWItMlwiPlxyXG4gICAgICAgICAgICA8cC10YWJzIFsodmFsdWUpXT1cImluZGV4VmFsdWVcIj5cclxuICAgICAgICAgICAgICA8cC10YWJsaXN0PlxyXG4gICAgICAgICAgICAgICAgQGZvciAoZmNoaWxkIG9mIGdyaWRMaXN0KCk7bGV0IGkgPSAkaW5kZXg7IHRyYWNrIGZjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICA8cC10YWIgW3ZhbHVlXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2ZjaGlsZC5pMThuS2V5ID8gaTE4bi5mYW55aShmY2hpbGQuaTE4bktleSkgOiBmY2hpbGQudGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICA8L3AtdGFiPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvcC10YWJsaXN0PlxyXG4gICAgICAgICAgICA8L3AtdGFicz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZm9yIChncmlkIG9mIGdyaWRMaXN0KCk7IGxldCBpID0gJGluZGV4O3RyYWNrIGdyaWQpIHtcclxuICAgICAgICAgIDxjdXN0b20tZ3JpZFxyXG4gICAgICAgICAgICAjY3VzdG9tR3JpZFxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImluZGV4VmFsdWUgIT1pIFwiXHJcbiAgICAgICAgICAgIFtyb3dEYXRhXT1cImdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5IV18fCBbXVwiXHJcbiAgICAgICAgICAgIFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcclxuICAgICAgICAgICAgKGRlbGV0ZUVtaXQpPVwiZGVsUm93cygkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2FkZFR5cGVdPVwiZ3JpZC5zdWJUYWJsZVNvdXJjZVwiXHJcbiAgICAgICAgICAgIChhZGRFbWl0KT1cImRhdGFTb3VyY2VTaG93KClcIlxyXG4gICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ3JpZC5ncmlkT3B0aW9uc1wiXHJcbiAgICAgICAgICAgIFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0RGF0YV09XCJncmlkLnNlbGVjdERhdGFcIj5cclxuICAgICAgICAgIDwvY3VzdG9tLWdyaWQ+XHJcbiAgICAgICAgfSAgICAgICBcclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtZDpiYXNpcy0xLzMgYmFzaXMtZnVsbCBoLWZ1bGwgb3ZlcmZsb3cteS1hdXRvXCI+XHJcbiAgICAgIDxjdXN0b20tbG9nIFtsb2dzXT1cImdldFBybS5kYXRhPy5sb2c/P1tdXCI+PC9jdXN0b20tbG9nPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48cC10b2FzdCAvPlxyXG48cm93LXNlbGVjdG9yXHJcblx0Wyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcclxuXHRbc2VhcmNoUHJtXT1cImRpYWxvZ1NlYXJjaFBybVwiXHJcblx0W2dyaWRPcHRpb25zXT1cInNlbGVjdE9wdGlvbnNcIlxyXG5cdChvbk9rKT1cIm9uT2soJGV2ZW50KVwiPlxyXG48L3Jvdy1zZWxlY3Rvcj4iXX0=
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxHQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFC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QUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO2dCQUN2RSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQWEsQ0FBQyxNQUFNLENBQUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtnQkFDeEYsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOytHQTNLVSxpQkFBaUI7bUdBQWpCLGlCQUFpQiwrbkRBRmxCLEVBQUUsNE9DckNkLDhvSUFnSGUsK1FEekZYLFlBQVksaWJBQ1osbUJBQW1CLHFiQUNuQixhQUFhLGdHQUNiLFlBQVksK0VBQ1osb0JBQW9CLCtOQUNwQixjQUFjLHlIQUNkLGFBQWEsb09BQ2IsVUFBVSw0WEFDVixLQUFLLGlVQUNMLG9CQUFvQixrSkFDcEIsYUFBYTs7NEZBTUosaUJBQWlCO2tCQXBCN0IsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixLQUFLO3dCQUNMLG9CQUFvQjt3QkFDcEIsYUFBYTtxQkFDZCxhQUdTLEVBQUU7d0RBZWEsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNILEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdXNlckhpc3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCwgaW5wdXQsIGVmZmVjdCwgY29tcHV0ZWQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZvcm1Db21wb25lbnQsRm9ybU9wdGlvbnMgfSBmcm9tICcuLi9mb3JtL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSb3dTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL3Jvdy1zZWxlY3Rvci9yb3ctc2VsZWN0b3IuY29tcG9uZW50J1xyXG5pbXBvcnQgeyBMb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2cvbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgQ3J1bWJBY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9jcnVtYi1hY3Rpb24vY3J1bWItYWN0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0ZXBzQ29tcG9uZW50LFN0ZXAgfSBmcm9tICcuLi9zdGVwcy9zdGVwcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBHcmlkQ29tcG9uZW50LCBHcmlkT3B0aW9ucyB9IGZyb20gJy4uL2dyaWQvZ3JpZC9ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xyXG5pbXBvcnQgeyBBbUNvbXBvbmVudCwgR2V0LCB9IGZyb20gJy4uL2FtL2FtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcbmltcG9ydCB7IFNlYXJjaCB9IGZyb20gJy4uL2FtL2FtLmNvbXBvbmVudCdcclxuaW1wb3J0IHsgSHJlZkJ0bkxpc3QsR3JpZExpc3QgfSBmcm9tICcuL3BhZ2UtZm9ybS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uQnRuIH0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgZm9ybVR5cGVUb1Byb3BzIH0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJ1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wYWdlLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1Db21wb25lbnQsXHJcbiAgICBMb2dDb21wb25lbnQsXHJcbiAgICBDcnVtYkFjdGlvbkNvbXBvbmVudCxcclxuICAgIFN0ZXBzQ29tcG9uZW50LFxyXG4gICAgR3JpZENvbXBvbmVudCxcclxuICAgIFRhYnNNb2R1bGUsXHJcbiAgICBUb2FzdCxcclxuICAgIFJvd1NlbGVjdG9yQ29tcG9uZW50LFxyXG4gICAgVHJhbnNsYXRlUGlwZSxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50LnNjc3MnLFxyXG4gIHByb3ZpZGVyczpbXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnZUZvcm1Db21wb25lbnQgZXh0ZW5kcyBBbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuICBhZGRWaXNpYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKVxyXG4gIGdyaWRMaXN0ID0gaW5wdXQ8R3JpZExpc3RbXT4oW10pXHJcbiAgZm9ybSA9IGlucHV0LnJlcXVpcmVkPEZvcm1PcHRpb25zPih7fSlcclxuICBnZXRQcm1JbnB1dCA9IGlucHV0LnJlcXVpcmVkPEdldD4oe30pXHJcbiAgc3RhdHVzU3RlcHMgPSBpbnB1dDxTdGVwW10+KFtdKVxyXG4gIHN0YXR1c0tleSA9IGlucHV0KCdzdGF0dXMnKVxyXG4gIGhyZWZCdG5MaXN0ID0gaW5wdXQ8SHJlZkJ0bkxpc3RbXT4oW10pXHJcbiAgc2V0VGl0bGUgPSBpbnB1dDxzdHJpbmc+KClcclxuICBhY3Rpb25MaXN0ID0gaW5wdXQ8UGVybWlzc2lvbkJ0bltdPihbXSlcclxuICBtb2RlbExvZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKVxyXG4gIGZvcm1EaXNhYmxlZCA9IGlucHV0PEZ1bmN0aW9uPigpXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbUdyaWQnKSBjdXN0b21HcmlkITogR3JpZENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdjRm9ybScpIGNGb3JtITogRm9ybUNvbXBvbmVudFxyXG4gIHVzZXJIaXN0b3J5U2VydmljZSA9ICBpbmplY3QoVXNlckhpc3RvcnlTZXJ2aWNlKVxyXG4gIGluZGV4VmFsdWUgPSAwXHJcbiAgdmlzaWJsZSA9IGZhbHNlXHJcbiAgZGlhbG9nU2VhcmNoUHJtITogU2VhcmNoXHJcbiAgc2VsZWN0T3B0aW9ucyE6R3JpZE9wdGlvbnNcclxuICBzZWxlY3REYXRhIDphbnlbXT0gW11cclxuICBwYWdlVXJsID0gJydcclxuICBuZXdVcmwgPSAnJ1xyXG4gIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpXHJcbiAgYXV0aExldmVsID0gaW5wdXQ8bnVtYmVyPigtMSlcclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5pZCA9IE51bWJlcih0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKSlcclxuICAgIHRoaXMucGFnZVVybCA9IHRoaXMucm91dGUuc25hcHNob3QudXJsLm1hcChzZWdtZW50ID0+IHNlZ21lbnQucGF0aCkuam9pbignLycpLnJlcGxhY2UoLyhbXlxcL10qKSQvLCBcIlwiKVxyXG4gICAgdGhpcy5uZXdVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9bmV3YFxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgdGhpcy5tb2RlbE5hbWUgPSB0aGlzLmdldFBybUlucHV0KCkubW9kZWxOYW1lIVxyXG4gICAgICB0aGlzLmdldFBybSA9IHsuLi50aGlzLmdldFBybUlucHV0KCl9XHJcbiAgICAgIHRoaXMuaWQgJiYgKHRoaXMuZ2V0UHJtLmlkID0gdGhpcy5pZClcclxuICAgICAgdGhpcy5pZCAmJiB0aGlzLmdldERldGFpbCgpXHJcbiAgICB9LHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSlcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1PcHRpb25zID0gey4uLnRoaXMuZm9ybSgpfVxyXG4gICAgfSlcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2cgPSB0aGlzLm1vZGVsTG9nKClcclxuICAgICAgY29uc29sZS5sb2coJ21vZGVsLS0tLS0nLHRoaXMuaXNMb2csdGhpcy5tb2RlbExvZygpKVxyXG4gICAgfSx7YWxsb3dTaWduYWxXcml0ZXM6dHJ1ZX0pXHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cENiID0gdGhpcy51cENiLmJpbmQodGhpcylcclxuICB9XHJcblxyXG4gIHN1Ym1pdEZvcm0oKSA6YW55e1xyXG4gICAgaWYodGhpcy5jRm9ybS52YWxpZGF0ZSgpKXtcclxuICAgICAgbGV0IGNiOmFueSA9IHRoaXMuaWQgPT09IDAgPyBudWxsIDogdGhpcy51cENiXHJcbiAgICAgIHRoaXMudXBzZXJ0KG51bGwsY2IpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZWxSb3dzKGU6YW55KSB7XHJcbiAgICBjb25zdCBncmlkVGFiID0gdGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1cclxuICAgIGNvbnN0IGRlbGV0ZUZ1bmMgPSBncmlkVGFiLmRlbGV0ZUZ1bmNcclxuICAgIGNvbnN0IHN1YlRhYmxlID0gZ3JpZFRhYi5ncmlkT3B0aW9ucy5tb2RlbE5hbWU7XHJcblxyXG4gICAgbGV0IHBybSA9IHsgXHJcbiAgICAgIG1vZGVsTmFtZTogc3ViVGFibGUsIFxyXG4gICAgICBpZHM6ZSBcclxuICAgIH07XHJcbiAgICBpZighZGVsZXRlRnVuYyl7XHJcbiAgICAgIHRoaXMud2ViX3JlbW92ZShwcm0pLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5nZXQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGVGdW5jKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmdldCgpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcbiAgdXBDYihyZXM/OmFueSl7XHJcbiAgICBpZihyZXMuaWQgPT0gMCl7XHJcbiAgICAgIHRoaXMuZ2V0RGV0YWlsKClcclxuICAgIH1lbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgbGV0IGVkaXRVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9JHtyZXMuaWR9YFxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtlZGl0VXJsXSlcclxuICAgICAgfSwgMTUwMClcclxuICAgIH1cclxuICAgIHRoaXMuY0Zvcm0uZmluYWxpemUoKVxyXG4gIH1cclxuICAvLyBUT0RPIOaYr+WQpumcgOimgeaVsOaNrui9rOaNouWbnuiwg+WHveaVsFxyXG4gIG9uT2soZTphbnkpe1xyXG4gICAgdGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV0uc2VsZWN0RGF0YSA9IFtdXHJcbiAgICBpZihlLmxlbmd0aCA+IDApe1xyXG4gICAgICBsZXQgeyBzZWxlY3REYXRhQ2IgfSA9IHRoaXMuZ3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdXHJcbiAgICAgIGUuZm9yRWFjaCgoaXRlbTphbnkpID0+IHtcclxuICAgICAgICBsZXQgb2JqID0gc2VsZWN0RGF0YUNiID8gc2VsZWN0RGF0YUNiKGl0ZW0pOiB7Li4uaXRlbX1cclxuICAgICAgICB0aGlzLmdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXS5zZWxlY3REYXRhIS5wdXNoKG9iailcclxuICAgICAgfSlcclxuICAgIH0gXHJcbiAgfVxyXG4gIGdldERldGFpbCgpe1xyXG4gICAgdGhpcy53ZWJfZ2V0KHRoaXMuZ2V0UHJtKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVUaXRsZShyZXMpXHJcbiAgICAgIHRoaXMuZm9ybURpc2FibGVkKCkgJiYgdGhpcy5mb3JtRGlzRnVuYygpXHJcbiAgICB9KVxyXG4gIH1cclxuICB1cGRhdGVUaXRsZShyZXM6YW55KXtcclxuICAgIC8vIGxldCB0aXRsZSA9IHRoaXMuc2V0VGl0bGUoKSA/IHRoaXMuc2V0VGl0bGUoKSA6ICcnXHJcbiAgICAvLyB0aXRsZSAhPT0gJycgJiYgdGhpcy51c2VySGlzdG9yeVNlcnZpY2Uuc2V0TGFzdFRpdGxlKHRpdGxlKVxyXG4gICAgbGV0IG1haW5GaWVsZCA9IHRoaXMuZm9ybSgpLm1haW5GaWVsZFxyXG4gICAgbGV0IHRpdGxlID0gcmVzW21haW5GaWVsZCFdXHJcbiAgICB0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5zZXRMYXN0VGl0bGUodGl0bGUpXHJcbiAgfVxyXG4gIGRhdGFTb3VyY2VTaG93KCl7XHJcbiAgICB0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHsuLi50aGlzLmdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXVsnc2VhcmNoUHJtJ10hfVxyXG4gICAgdGhpcy5zZWxlY3RPcHRpb25zID0gdGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1bJ3NlbGVjdE9wdGlvbnMnXSFcclxuICAgIGNvbnNvbGUubG9nKCdzZWxldGMtLS0tLScsdGhpcy5zZWxlY3RPcHRpb25zKVxyXG4gICAgdGhpcy5kaWFsb2dTZWFyY2hQcm0ubW9kZWxOYW1lID0gdGhpcy5zZWxlY3RPcHRpb25zLm1vZGVsTmFtZVxyXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ29SdW4oZGF0YTphbnkpe1xyXG4gICAgaWYoZGF0YS5pZEtleSl7XHJcbiAgICAgIGxldCBpZCA9IHRoaXMuZ2V0UHJtLmRhdGFbZGF0YS5pZEtleV1cclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake2RhdGEudXJsfS8ke2lkfWBdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2RhdGEudXJsXSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGF1dGhDbGljayhidG46YW55KXtcclxuICAgIGNvbnNvbGUubG9nKCdhdXRoQ2xpY2snLGJ0bilcclxuICAgIGlmKGJ0bi5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpKXtcclxuICAgICAgYnRuLm9uQ2xpY2sodGhpcy5nZXRQcm0uZGF0YSlcclxuICAgIH1cclxuICB9XHJcbiAgc3RhdHVzQ2hhbmdlKHZhbHVlOmFueSl7XHJcbiAgICBpZih0aGlzLmF1dGhMZXZlbCgpIDwgNCkgcmV0dXJuO1xyXG4gICAgaWYodGhpcy5pZCl7XHJcbiAgICAgIGxldCBwYXJhbSA6YW55PSB7XHJcbiAgICAgICAgbW9kZWxOYW1lOiB0aGlzLm1vZGVsTmFtZSxcclxuICAgICAgICBkYXRhOntpZDogdGhpcy5pZCwgW3RoaXMuc3RhdHVzS2V5KCldOiB2YWx1ZX1cclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLmlzTG9nKXtcclxuICAgICAgICBwYXJhbS5sb2dNb2RlbCA9IGAke3RoaXMubW9kZWxOYW1lfUxvZ2BcclxuICAgICAgICBwYXJhbS5sb2cgPSB7XHJcbiAgICAgICAgICBwaWQ6dGhpcy5pZCxcclxuICAgICAgICAgIGNvbnRlbnQ6YFvnirbmgIFdICR7dGhpcy5nZXRQcm0uZGF0YSFbdGhpcy5zdGF0dXNLZXkoKV19IC0+ICR7dmFsdWV9YFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLndlYl93cml0ZShwYXJhbSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5nZXREZXRhaWwoKVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRQcm0uZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5nZXRQcm0uZGF0YXx8e30se1xyXG4gICAgICAgIFt0aGlzLnN0YXR1c0tleSgpXTp2YWx1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnVwc2VydFBybS5hZGREYXRhIVt0aGlzLnN0YXR1c0tleSgpXSA9IHZhbHVlXHJcbiAgICAgIHRoaXMuY0Zvcm0udHJpZ2dlck1vZGVsRWZmZWN0KHtbdGhpcy5zdGF0dXNLZXkoKV06dmFsdWV9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybURpc0Z1bmMoKXtcclxuICAgIHRoaXMuZm9ybU9wdGlvbnMuZmllbGRzPy5mb3JFYWNoKCh2KSA9PiB7XHJcbiAgICAgIHYuZ3JvdXA/LmZvckVhY2goKGc6YW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGZpZWxkRGlzYWJsZWQgPSBnW2Zvcm1UeXBlVG9Qcm9wc1tnLnR5cGVdXS5kaXNhYmxlZCB8fCBmYWxzZVxyXG4gICAgICAgIGlmKHRoaXMuZm9ybURpc2FibGVkKCkhKHRoaXMuZ2V0UHJtLmRhdGEpICl7XHJcbiAgICAgICAgICB0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSkgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICFmaWVsZERpc2FibGVkICYmIHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pIFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHktMSBweC0xIGJvcmRlci1iLVsxcHhdIGJvcmRlci1bI2RiZGJkYl0gYmctd2hpdGVcIj5cclxuICAgIDxhcHAtY3J1bWItYWN0aW9uXHJcbiAgICAgIFthZGRWaXNpYmxlXT1cImFkZFZpc2libGUoKVwiXHJcbiAgICAgIFtuZXdVcmxdPVwibmV3VXJsXCJcclxuICAgICAgW2lzU2hvd0NvZ109XCJ0cnVlXCJcclxuICAgICAgW291dGxpbmVkXT1cInRydWVcIlxyXG4gICAgICBbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcclxuICAgICAgW2FjdGlvbkxpc3RdPVwiYWN0aW9uTGlzdCgpXCJcclxuICAgICAgKGFjdGlvbkV2ZW50KT1cImF1dGhDbGljaygkZXZlbnQpXCJcclxuICAgICAgKHNhdmVFdmVudCk9XCJzdWJtaXRGb3JtKClcIj5cclxuICAgIDwvYXBwLWNydW1iLWFjdGlvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJocmVmQnRuTGlzdFwiPlxyXG4gICAgICBAaWYoaWQpe1xyXG4gICAgICAgIEBmb3IoYnRuIG9mIGhyZWZCdG5MaXN0KCk7dHJhY2sgYnRuKXtcclxuICAgICAgICAgIDxwLWJ1dHRvbiBcclxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuPy52YXJpYW50XCIgXHJcbiAgICAgICAgICAgIFtzZXZlcml0eV09XCJidG4/LnNldmVyaXR5XCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXItWzZweF1cIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJidG4/Lmljb25cIlxyXG4gICAgICAgICAgICBsYWJlbD1cInt7YnRuLmkxOG5LZXk/IGkxOG4uZmFueWkoYnRuLmkxOG5LZXkpIDogYnRuLmxhYmVsfX1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29SdW4oYnRuKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXY+PC9kaXY+XHJcbiAgICBcclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInB4LTIgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIG1kOmJhc2lzLTIvMyBiYXNpcy1mdWxsXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmFzaXMtMS8zIHB5LTEgYmFzaXMtZnVsbCBtZDpmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBmbGV4LXJvdyBvcmRlci0xXCI+XHJcbiAgICAgICAgQGZvciAoYnRuIG9mIGFjdGlvbkxpc3QoKTtsZXQgaSA9ICRpbmRleDsgdHJhY2sgYnRuKSB7XHJcbiAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuPy52YXJpYW50XCJcclxuICAgICAgICAgICAgW3NldmVyaXR5XT1cImJ0bj8uc2V2ZXJpdHlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1yLVs0cHhdXCJcclxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgW2ljb25dPVwiYnRuPy5pY29uXCJcclxuICAgICAgICAgICAgbGFiZWw9XCJ7eyBidG4uaTE4bktleSA/IChidG4uaTE4bktleSB8IHRyYW5zbGF0ZSkgOiBidG4ubGFiZWwgfX1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYXV0aENsaWNrKGJ0bilcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuLmJ0bkRpc2FibGVkID8gYnRuLmJ0bkRpc2FibGVkKGdldFBybS5kYXRhKSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWQ6YmFzaXMtMi8zIGJhc2lzLWZ1bGwgZmxleCBtZDpmbGV4LXJvdy1yZXZlcnNlIGZsZXgtcm93IG1kOm9yZGVyLTIgb3JkZXItZmlyc3RcIj5cclxuICAgICAgICA8Y3VzdG9tLXN0ZXBzXHJcbiAgICAgICAgICBbc3RlcHNdPVwic3RhdHVzU3RlcHMoKVwiXHJcbiAgICAgICAgICBbY3VycmVudF09XCJnZXRQcm0uZGF0YSAmJiBnZXRQcm0uZGF0YVtzdGF0dXNLZXkoKV0gIT09IHVuZGVmaW5lZCA/IGdldFBybS5kYXRhW3N0YXR1c0tleSgpXSA6IDBcIlxyXG4gICAgICAgICAgW2F1dGhMZXZlbF09XCJhdXRoTGV2ZWwoKVwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cInN0YXR1c0NoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9jdXN0b20tc3RlcHM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1haW4gZmxleCBmbGV4LXdyYXAgb3ZlcmZsb3cteS1oaWRkZW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtZDpiYXNpcy0yLzMgYmFzaXMtZnVsbCBoLWZ1bGwgb3ZlcmZsb3cteS1hdXRvXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBteC0yIGZvcm0tcGFuZWxcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicC0yIGZsZXgtMVwiPlxyXG4gICAgICAgICAgPGZvcm1cclxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtKCkuZm9ybSFcIj5cclxuICAgICAgICAgICAgPGN1c3RvbS1mb3JtXHJcbiAgICAgICAgICAgICAgI2NGb3JtXHJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZm9ybU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgIFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcclxuICAgICAgICAgICAgICBbbW9kZWxdPVwiZ2V0UHJtLmRhdGE/P3t9XCI+PC9jdXN0b20tZm9ybT5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBAaWYoZ3JpZExpc3QoKSAmJiBncmlkTGlzdCgpLmxlbmd0aCA+IDEpe1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG1iLTJcIj5cclxuICAgICAgICAgICAgPHAtdGFicyBbKHZhbHVlKV09XCJpbmRleFZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgPHAtdGFibGlzdD5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGZjaGlsZCBvZiBncmlkTGlzdCgpO2xldCBpID0gJGluZGV4OyB0cmFjayBmY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgPHAtdGFiIFt2YWx1ZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tmY2hpbGQuaTE4bktleSA/IGkxOG4uZmFueWkoZmNoaWxkLmkxOG5LZXkpIDogZmNoaWxkLnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgPC9wLXRhYj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L3AtdGFibGlzdD5cclxuICAgICAgICAgICAgPC9wLXRhYnM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGZvciAoZ3JpZCBvZiBncmlkTGlzdCgpOyBsZXQgaSA9ICRpbmRleDt0cmFjayBncmlkKSB7XHJcbiAgICAgICAgICA8Y3VzdG9tLWdyaWRcclxuICAgICAgICAgICAgI2N1c3RvbUdyaWRcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJpbmRleFZhbHVlICE9aSBcIlxyXG4gICAgICAgICAgICBbcm93RGF0YV09XCJnZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleSFdfHwgW11cIlxyXG4gICAgICAgICAgICBbdXBzZXJ0XT1cInVwc2VydFBybVwiXHJcbiAgICAgICAgICAgIChkZWxldGVFbWl0KT1cImRlbFJvd3MoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFthZGRUeXBlXT1cImdyaWQuc3ViVGFibGVTb3VyY2VcIlxyXG4gICAgICAgICAgICAoYWRkRW1pdCk9XCJkYXRhU291cmNlU2hvdygpXCJcclxuICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cImdyaWQuZ3JpZE9wdGlvbnNcIlxyXG4gICAgICAgICAgICBbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcclxuICAgICAgICAgICAgW3NlbGVjdERhdGFdPVwiZ3JpZC5zZWxlY3REYXRhXCI+XHJcbiAgICAgICAgICA8L2N1c3RvbS1ncmlkPlxyXG4gICAgICAgIH0gICAgICAgXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWQ6YmFzaXMtMS8zIGJhc2lzLWZ1bGwgaC1mdWxsIG92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICA8Y3VzdG9tLWxvZyBbbG9nc109XCJnZXRQcm0uZGF0YT8ubG9nPz9bXVwiPjwvY3VzdG9tLWxvZz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPHAtdG9hc3QgLz5cclxuPHJvdy1zZWxlY3RvclxyXG5cdFsodmlzaWJsZSldPVwidmlzaWJsZVwiXHJcblx0W3NlYXJjaFBybV09XCJkaWFsb2dTZWFyY2hQcm1cIlxyXG5cdFtncmlkT3B0aW9uc109XCJzZWxlY3RPcHRpb25zXCJcclxuXHQob25Payk9XCJvbk9rKCRldmVudClcIj5cclxuPC9yb3ctc2VsZWN0b3I+Il19
@@ -6551,7 +6551,7 @@ class PageFormComponent extends AmComponent {
6551
6551
  });
6552
6552
  }
6553
6553
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6554
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PageFormComponent, isStandalone: true, selector: "app-page-form", inputs: { addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, gridList: { classPropertyName: "gridList", publicName: "gridList", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, getPrmInput: { classPropertyName: "getPrmInput", publicName: "getPrmInput", isSignal: true, isRequired: true, transformFunction: null }, statusSteps: { classPropertyName: "statusSteps", publicName: "statusSteps", isSignal: true, isRequired: false, transformFunction: null }, statusKey: { classPropertyName: "statusKey", publicName: "statusKey", isSignal: true, isRequired: false, transformFunction: null }, hrefBtnList: { classPropertyName: "hrefBtnList", publicName: "hrefBtnList", isSignal: true, isRequired: false, transformFunction: null }, setTitle: { classPropertyName: "setTitle", publicName: "setTitle", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, modelLog: { classPropertyName: "modelLog", publicName: "modelLog", isSignal: true, isRequired: false, transformFunction: null }, formDisabled: { classPropertyName: "formDisabled", publicName: "formDisabled", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], viewQueries: [{ propertyName: "customGrid", first: true, predicate: ["customGrid"], descendants: true }, { propertyName: "cForm", first: true, predicate: ["cForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"overflow-hidden\">\r\n <div class=\"flex items-center justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\r\n <app-crumb-action\r\n [addVisible]=\"addVisible()\"\r\n [newUrl]=\"newUrl\"\r\n [isShowCog]=\"true\"\r\n [outlined]=\"true\"\r\n [authLevel]=\"authLevel()\"\r\n (saveEvent)=\"submitForm()\">\r\n </app-crumb-action>\r\n <div class=\"hrefBtnList\">\r\n @if(id){\r\n @for(btn of hrefBtnList();track btn){\r\n <p-button \r\n [variant]=\"btn?.variant\" \r\n [severity]=\"btn?.severity\" \r\n class=\"mr-[6px]\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{btn.i18nKey? i18n.fanyi(btn.i18nKey) : btn.label}}\"\r\n (click)=\"goRun(btn)\"\r\n >\r\n </p-button>\r\n }\r\n }\r\n \r\n </div>\r\n <div></div>\r\n \r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"px-2 flex flex-wrap items-center md:basis-2/3 basis-full\">\r\n <div class=\"md:basis-1/3 py-1 basis-full flex items-center gap-2 flex-row order-1\">\r\n @for (btn of actionList();let i = $index; track btn) {\r\n <p-button\r\n [variant]=\"btn?.variant\"\r\n [severity]=\"btn?.severity\"\r\n class=\"mr-[4px]\"\r\n size=\"small\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{ btn.i18nKey ? (btn.i18nKey | translate) : btn.label }}\"\r\n (click)=\"authClick(btn)\"\r\n [disabled]=\"btn.btnDisabled ? btn.btnDisabled(getPrm.data) : false\"\r\n >\r\n </p-button>\r\n }\r\n </div>\r\n \r\n <div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first\">\r\n <custom-steps\r\n [steps]=\"statusSteps()\"\r\n [current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\r\n [authLevel]=\"authLevel()\"\r\n (change)=\"statusChange($event)\">\r\n </custom-steps>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"main flex flex-wrap overflow-y-hidden\">\r\n <div class=\"md:basis-2/3 basis-full h-full overflow-y-auto\">\r\n <div class=\"bg-white mx-2 form-panel\">\r\n <div class=\"p-2 flex-1\">\r\n <form\r\n [formGroup]=\"form().form!\">\r\n <custom-form\r\n #cForm\r\n [options]=\"formOptions\"\r\n [upsert]=\"upsertPrm\"\r\n [model]=\"getPrm.data??{}\"></custom-form>\r\n </form>\r\n </div>\r\n @if(gridList() && gridList().length > 1){\r\n <div class=\"relative mb-2\">\r\n <p-tabs [(value)]=\"indexValue\">\r\n <p-tablist>\r\n @for (fchild of gridList();let i = $index; track fchild) {\r\n <p-tab [value]=\"i\">\r\n {{fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title}}\r\n </p-tab>\r\n }\r\n </p-tablist>\r\n </p-tabs>\r\n </div>\r\n }\r\n @for (grid of gridList(); let i = $index;track grid) {\r\n <custom-grid\r\n #customGrid\r\n [hidden]=\"indexValue !=i \"\r\n [rowData]=\"getPrm.data?.[grid.subDataKey!]|| []\"\r\n [upsert]=\"upsertPrm\"\r\n (deleteEmit)=\"delRows($event)\"\r\n [addType]=\"grid.subTableSource\"\r\n (addEmit)=\"dataSourceShow()\"\r\n [gridOptions]=\"grid.gridOptions\"\r\n [authLevel]=\"authLevel()\"\r\n [selectData]=\"grid.selectData\">\r\n </custom-grid>\r\n } \r\n </div>\r\n </div>\r\n <div class=\"md:basis-1/3 basis-full h-full overflow-y-auto\">\r\n <custom-log [logs]=\"getPrm.data?.log??[]\"></custom-log>\r\n </div>\r\n </div>\r\n</div>\r\n<p-toast />\r\n<row-selector\r\n\t[(visible)]=\"visible\"\r\n\t[searchPrm]=\"dialogSearchPrm\"\r\n\t[gridOptions]=\"selectOptions\"\r\n\t(onOk)=\"onOk($event)\">\r\n</row-selector>", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 140px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}.form-panel{border:solid 1px #dbdbdb}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormComponent, selector: "custom-form", inputs: ["options", "model", "upsert"] }, { kind: "component", type: LogComponent, selector: "custom-log", inputs: ["logs", "id"] }, { kind: "component", type: CrumbActionComponent, selector: "app-crumb-action", inputs: ["isShowCog", "addVisible", "newUrl", "onExport", "outlined", "isList", "authLevel", "actionList"], outputs: ["saveEvent", "cancelEvent", "actionEvent"] }, { kind: "component", type: StepsComponent, selector: "custom-steps", inputs: ["steps", "current", "authLevel"], outputs: ["change"] }, { kind: "component", type: GridComponent, selector: "custom-grid", inputs: ["gridOptions", "upsert", "rowData", "searchPrm", "addType", "selectData", "showAct", "actPos", "authLevel"], outputs: ["searchPrmChange", "deleteEmit", "addEmit"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i3$1.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i3$1.TabList, selector: "p-tablist" }, { kind: "component", type: i3$1.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: RowSelectorComponent, selector: "row-selector", inputs: ["title", "gridOptions", "searchPrm", "visible"], outputs: ["onOk", "visibleChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6554
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PageFormComponent, isStandalone: true, selector: "app-page-form", inputs: { addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, gridList: { classPropertyName: "gridList", publicName: "gridList", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, getPrmInput: { classPropertyName: "getPrmInput", publicName: "getPrmInput", isSignal: true, isRequired: true, transformFunction: null }, statusSteps: { classPropertyName: "statusSteps", publicName: "statusSteps", isSignal: true, isRequired: false, transformFunction: null }, statusKey: { classPropertyName: "statusKey", publicName: "statusKey", isSignal: true, isRequired: false, transformFunction: null }, hrefBtnList: { classPropertyName: "hrefBtnList", publicName: "hrefBtnList", isSignal: true, isRequired: false, transformFunction: null }, setTitle: { classPropertyName: "setTitle", publicName: "setTitle", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, modelLog: { classPropertyName: "modelLog", publicName: "modelLog", isSignal: true, isRequired: false, transformFunction: null }, formDisabled: { classPropertyName: "formDisabled", publicName: "formDisabled", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], viewQueries: [{ propertyName: "customGrid", first: true, predicate: ["customGrid"], descendants: true }, { propertyName: "cForm", first: true, predicate: ["cForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"overflow-hidden\">\r\n <div class=\"flex items-center justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\r\n <app-crumb-action\r\n [addVisible]=\"addVisible()\"\r\n [newUrl]=\"newUrl\"\r\n [isShowCog]=\"true\"\r\n [outlined]=\"true\"\r\n [authLevel]=\"authLevel()\"\r\n [actionList]=\"actionList()\"\r\n (actionEvent)=\"authClick($event)\"\r\n (saveEvent)=\"submitForm()\">\r\n </app-crumb-action>\r\n <div class=\"hrefBtnList\">\r\n @if(id){\r\n @for(btn of hrefBtnList();track btn){\r\n <p-button \r\n [variant]=\"btn?.variant\" \r\n [severity]=\"btn?.severity\" \r\n class=\"mr-[6px]\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{btn.i18nKey? i18n.fanyi(btn.i18nKey) : btn.label}}\"\r\n (click)=\"goRun(btn)\"\r\n >\r\n </p-button>\r\n }\r\n }\r\n \r\n </div>\r\n <div></div>\r\n \r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"px-2 flex flex-wrap items-center md:basis-2/3 basis-full\">\r\n <div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center gap-2 flex-row order-1\">\r\n @for (btn of actionList();let i = $index; track btn) {\r\n <p-button\r\n [variant]=\"btn?.variant\"\r\n [severity]=\"btn?.severity\"\r\n class=\"mr-[4px]\"\r\n size=\"small\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{ btn.i18nKey ? (btn.i18nKey | translate) : btn.label }}\"\r\n (click)=\"authClick(btn)\"\r\n [disabled]=\"btn.btnDisabled ? btn.btnDisabled(getPrm.data) : false\"\r\n >\r\n </p-button>\r\n }\r\n </div>\r\n \r\n <div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first\">\r\n <custom-steps\r\n [steps]=\"statusSteps()\"\r\n [current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\r\n [authLevel]=\"authLevel()\"\r\n (change)=\"statusChange($event)\">\r\n </custom-steps>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"main flex flex-wrap overflow-y-hidden\">\r\n <div class=\"md:basis-2/3 basis-full h-full overflow-y-auto\">\r\n <div class=\"bg-white mx-2 form-panel\">\r\n <div class=\"p-2 flex-1\">\r\n <form\r\n [formGroup]=\"form().form!\">\r\n <custom-form\r\n #cForm\r\n [options]=\"formOptions\"\r\n [upsert]=\"upsertPrm\"\r\n [model]=\"getPrm.data??{}\"></custom-form>\r\n </form>\r\n </div>\r\n @if(gridList() && gridList().length > 1){\r\n <div class=\"relative mb-2\">\r\n <p-tabs [(value)]=\"indexValue\">\r\n <p-tablist>\r\n @for (fchild of gridList();let i = $index; track fchild) {\r\n <p-tab [value]=\"i\">\r\n {{fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title}}\r\n </p-tab>\r\n }\r\n </p-tablist>\r\n </p-tabs>\r\n </div>\r\n }\r\n @for (grid of gridList(); let i = $index;track grid) {\r\n <custom-grid\r\n #customGrid\r\n [hidden]=\"indexValue !=i \"\r\n [rowData]=\"getPrm.data?.[grid.subDataKey!]|| []\"\r\n [upsert]=\"upsertPrm\"\r\n (deleteEmit)=\"delRows($event)\"\r\n [addType]=\"grid.subTableSource\"\r\n (addEmit)=\"dataSourceShow()\"\r\n [gridOptions]=\"grid.gridOptions\"\r\n [authLevel]=\"authLevel()\"\r\n [selectData]=\"grid.selectData\">\r\n </custom-grid>\r\n } \r\n </div>\r\n </div>\r\n <div class=\"md:basis-1/3 basis-full h-full overflow-y-auto\">\r\n <custom-log [logs]=\"getPrm.data?.log??[]\"></custom-log>\r\n </div>\r\n </div>\r\n</div>\r\n<p-toast />\r\n<row-selector\r\n\t[(visible)]=\"visible\"\r\n\t[searchPrm]=\"dialogSearchPrm\"\r\n\t[gridOptions]=\"selectOptions\"\r\n\t(onOk)=\"onOk($event)\">\r\n</row-selector>", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 140px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}.form-panel{border:solid 1px #dbdbdb}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormComponent, selector: "custom-form", inputs: ["options", "model", "upsert"] }, { kind: "component", type: LogComponent, selector: "custom-log", inputs: ["logs", "id"] }, { kind: "component", type: CrumbActionComponent, selector: "app-crumb-action", inputs: ["isShowCog", "addVisible", "newUrl", "onExport", "outlined", "isList", "authLevel", "actionList"], outputs: ["saveEvent", "cancelEvent", "actionEvent"] }, { kind: "component", type: StepsComponent, selector: "custom-steps", inputs: ["steps", "current", "authLevel"], outputs: ["change"] }, { kind: "component", type: GridComponent, selector: "custom-grid", inputs: ["gridOptions", "upsert", "rowData", "searchPrm", "addType", "selectData", "showAct", "actPos", "authLevel"], outputs: ["searchPrmChange", "deleteEmit", "addEmit"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i3$1.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i3$1.TabList, selector: "p-tablist" }, { kind: "component", type: i3$1.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: RowSelectorComponent, selector: "row-selector", inputs: ["title", "gridOptions", "searchPrm", "visible"], outputs: ["onOk", "visibleChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6555
6555
  }
6556
6556
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageFormComponent, decorators: [{
6557
6557
  type: Component,
@@ -6567,7 +6567,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
6567
6567
  Toast,
6568
6568
  RowSelectorComponent,
6569
6569
  TranslatePipe,
6570
- ], providers: [], template: "<div class=\"overflow-hidden\">\r\n <div class=\"flex items-center justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\r\n <app-crumb-action\r\n [addVisible]=\"addVisible()\"\r\n [newUrl]=\"newUrl\"\r\n [isShowCog]=\"true\"\r\n [outlined]=\"true\"\r\n [authLevel]=\"authLevel()\"\r\n (saveEvent)=\"submitForm()\">\r\n </app-crumb-action>\r\n <div class=\"hrefBtnList\">\r\n @if(id){\r\n @for(btn of hrefBtnList();track btn){\r\n <p-button \r\n [variant]=\"btn?.variant\" \r\n [severity]=\"btn?.severity\" \r\n class=\"mr-[6px]\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{btn.i18nKey? i18n.fanyi(btn.i18nKey) : btn.label}}\"\r\n (click)=\"goRun(btn)\"\r\n >\r\n </p-button>\r\n }\r\n }\r\n \r\n </div>\r\n <div></div>\r\n \r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"px-2 flex flex-wrap items-center md:basis-2/3 basis-full\">\r\n <div class=\"md:basis-1/3 py-1 basis-full flex items-center gap-2 flex-row order-1\">\r\n @for (btn of actionList();let i = $index; track btn) {\r\n <p-button\r\n [variant]=\"btn?.variant\"\r\n [severity]=\"btn?.severity\"\r\n class=\"mr-[4px]\"\r\n size=\"small\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{ btn.i18nKey ? (btn.i18nKey | translate) : btn.label }}\"\r\n (click)=\"authClick(btn)\"\r\n [disabled]=\"btn.btnDisabled ? btn.btnDisabled(getPrm.data) : false\"\r\n >\r\n </p-button>\r\n }\r\n </div>\r\n \r\n <div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first\">\r\n <custom-steps\r\n [steps]=\"statusSteps()\"\r\n [current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\r\n [authLevel]=\"authLevel()\"\r\n (change)=\"statusChange($event)\">\r\n </custom-steps>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"main flex flex-wrap overflow-y-hidden\">\r\n <div class=\"md:basis-2/3 basis-full h-full overflow-y-auto\">\r\n <div class=\"bg-white mx-2 form-panel\">\r\n <div class=\"p-2 flex-1\">\r\n <form\r\n [formGroup]=\"form().form!\">\r\n <custom-form\r\n #cForm\r\n [options]=\"formOptions\"\r\n [upsert]=\"upsertPrm\"\r\n [model]=\"getPrm.data??{}\"></custom-form>\r\n </form>\r\n </div>\r\n @if(gridList() && gridList().length > 1){\r\n <div class=\"relative mb-2\">\r\n <p-tabs [(value)]=\"indexValue\">\r\n <p-tablist>\r\n @for (fchild of gridList();let i = $index; track fchild) {\r\n <p-tab [value]=\"i\">\r\n {{fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title}}\r\n </p-tab>\r\n }\r\n </p-tablist>\r\n </p-tabs>\r\n </div>\r\n }\r\n @for (grid of gridList(); let i = $index;track grid) {\r\n <custom-grid\r\n #customGrid\r\n [hidden]=\"indexValue !=i \"\r\n [rowData]=\"getPrm.data?.[grid.subDataKey!]|| []\"\r\n [upsert]=\"upsertPrm\"\r\n (deleteEmit)=\"delRows($event)\"\r\n [addType]=\"grid.subTableSource\"\r\n (addEmit)=\"dataSourceShow()\"\r\n [gridOptions]=\"grid.gridOptions\"\r\n [authLevel]=\"authLevel()\"\r\n [selectData]=\"grid.selectData\">\r\n </custom-grid>\r\n } \r\n </div>\r\n </div>\r\n <div class=\"md:basis-1/3 basis-full h-full overflow-y-auto\">\r\n <custom-log [logs]=\"getPrm.data?.log??[]\"></custom-log>\r\n </div>\r\n </div>\r\n</div>\r\n<p-toast />\r\n<row-selector\r\n\t[(visible)]=\"visible\"\r\n\t[searchPrm]=\"dialogSearchPrm\"\r\n\t[gridOptions]=\"selectOptions\"\r\n\t(onOk)=\"onOk($event)\">\r\n</row-selector>", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 140px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}.form-panel{border:solid 1px #dbdbdb}\n"] }]
6570
+ ], providers: [], template: "<div class=\"overflow-hidden\">\r\n <div class=\"flex items-center justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\r\n <app-crumb-action\r\n [addVisible]=\"addVisible()\"\r\n [newUrl]=\"newUrl\"\r\n [isShowCog]=\"true\"\r\n [outlined]=\"true\"\r\n [authLevel]=\"authLevel()\"\r\n [actionList]=\"actionList()\"\r\n (actionEvent)=\"authClick($event)\"\r\n (saveEvent)=\"submitForm()\">\r\n </app-crumb-action>\r\n <div class=\"hrefBtnList\">\r\n @if(id){\r\n @for(btn of hrefBtnList();track btn){\r\n <p-button \r\n [variant]=\"btn?.variant\" \r\n [severity]=\"btn?.severity\" \r\n class=\"mr-[6px]\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{btn.i18nKey? i18n.fanyi(btn.i18nKey) : btn.label}}\"\r\n (click)=\"goRun(btn)\"\r\n >\r\n </p-button>\r\n }\r\n }\r\n \r\n </div>\r\n <div></div>\r\n \r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"px-2 flex flex-wrap items-center md:basis-2/3 basis-full\">\r\n <div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center gap-2 flex-row order-1\">\r\n @for (btn of actionList();let i = $index; track btn) {\r\n <p-button\r\n [variant]=\"btn?.variant\"\r\n [severity]=\"btn?.severity\"\r\n class=\"mr-[4px]\"\r\n size=\"small\"\r\n [icon]=\"btn?.icon\"\r\n label=\"{{ btn.i18nKey ? (btn.i18nKey | translate) : btn.label }}\"\r\n (click)=\"authClick(btn)\"\r\n [disabled]=\"btn.btnDisabled ? btn.btnDisabled(getPrm.data) : false\"\r\n >\r\n </p-button>\r\n }\r\n </div>\r\n \r\n <div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first\">\r\n <custom-steps\r\n [steps]=\"statusSteps()\"\r\n [current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\r\n [authLevel]=\"authLevel()\"\r\n (change)=\"statusChange($event)\">\r\n </custom-steps>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"main flex flex-wrap overflow-y-hidden\">\r\n <div class=\"md:basis-2/3 basis-full h-full overflow-y-auto\">\r\n <div class=\"bg-white mx-2 form-panel\">\r\n <div class=\"p-2 flex-1\">\r\n <form\r\n [formGroup]=\"form().form!\">\r\n <custom-form\r\n #cForm\r\n [options]=\"formOptions\"\r\n [upsert]=\"upsertPrm\"\r\n [model]=\"getPrm.data??{}\"></custom-form>\r\n </form>\r\n </div>\r\n @if(gridList() && gridList().length > 1){\r\n <div class=\"relative mb-2\">\r\n <p-tabs [(value)]=\"indexValue\">\r\n <p-tablist>\r\n @for (fchild of gridList();let i = $index; track fchild) {\r\n <p-tab [value]=\"i\">\r\n {{fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title}}\r\n </p-tab>\r\n }\r\n </p-tablist>\r\n </p-tabs>\r\n </div>\r\n }\r\n @for (grid of gridList(); let i = $index;track grid) {\r\n <custom-grid\r\n #customGrid\r\n [hidden]=\"indexValue !=i \"\r\n [rowData]=\"getPrm.data?.[grid.subDataKey!]|| []\"\r\n [upsert]=\"upsertPrm\"\r\n (deleteEmit)=\"delRows($event)\"\r\n [addType]=\"grid.subTableSource\"\r\n (addEmit)=\"dataSourceShow()\"\r\n [gridOptions]=\"grid.gridOptions\"\r\n [authLevel]=\"authLevel()\"\r\n [selectData]=\"grid.selectData\">\r\n </custom-grid>\r\n } \r\n </div>\r\n </div>\r\n <div class=\"md:basis-1/3 basis-full h-full overflow-y-auto\">\r\n <custom-log [logs]=\"getPrm.data?.log??[]\"></custom-log>\r\n </div>\r\n </div>\r\n</div>\r\n<p-toast />\r\n<row-selector\r\n\t[(visible)]=\"visible\"\r\n\t[searchPrm]=\"dialogSearchPrm\"\r\n\t[gridOptions]=\"selectOptions\"\r\n\t(onOk)=\"onOk($event)\">\r\n</row-selector>", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 140px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}.form-panel{border:solid 1px #dbdbdb}\n"] }]
6571
6571
  }], ctorParameters: () => [], propDecorators: { customGrid: [{
6572
6572
  type: ViewChild,
6573
6573
  args: ['customGrid']