!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@gspwidget/widget-devkit"),require("@gspwidget/widget-core"),require("@angular/common/http"),require("@angular/forms"),require("@gspwidget/util"),require("@ngx-translate/core"),require("ng-zorro-antd/modal"),require("@angular/common"),require("ng-zorro-antd/upload"),require("ng-zorro-antd/auto-complete"),require("ng-zorro-antd/dropdown"),require("ng-zorro-antd/select"),require("ng-zorro-antd/switch"),require("ng-zorro-antd/tooltip"),require("ngx-bootstrap/accordion"),require("ng-zorro-antd"),require("ng-zorro-antd/input-number"),require("@angular/cdk/drag-drop"),require("ng-zorro-antd/icon"),require("sortablejs"),require("ng-zorro-antd/table"),require("ng-zorro-antd/tree"),require("change-case"),require("rxjs"),require("rxjs/operators"),require("ng-zorro-antd/menu"),require("ng-zorro-antd/notification"),require("ng-zorro-antd/button"),require("ng-zorro-antd/date-picker"),require("ng-zorro-antd/input"),require("ng-zorro-antd/radio"),require("ngx-monaco-editor"),require("ngx-bootstrap/modal"),require("@angular/router"),require("ng-zorro-antd/message")):"function"==typeof define&&define.amd?define("@gspwidget/common",["exports","@angular/core","@gspwidget/widget-devkit","@gspwidget/widget-core","@angular/common/http","@angular/forms","@gspwidget/util","@ngx-translate/core","ng-zorro-antd/modal","@angular/common","ng-zorro-antd/upload","ng-zorro-antd/auto-complete","ng-zorro-antd/dropdown","ng-zorro-antd/select","ng-zorro-antd/switch","ng-zorro-antd/tooltip","ngx-bootstrap/accordion","ng-zorro-antd","ng-zorro-antd/input-number","@angular/cdk/drag-drop","ng-zorro-antd/icon","sortablejs","ng-zorro-antd/table","ng-zorro-antd/tree","change-case","rxjs","rxjs/operators","ng-zorro-antd/menu","ng-zorro-antd/notification","ng-zorro-antd/button","ng-zorro-antd/date-picker","ng-zorro-antd/input","ng-zorro-antd/radio","ngx-monaco-editor","ngx-bootstrap/modal","@angular/router","ng-zorro-antd/message"],t):t(((e=e||self).gspwidget=e.gspwidget||{},e.gspwidget.common={}),e.ng.core,e.widgetDevkit,e.widgetCore,e.ng.common.http,e.ng.forms,e.util,e.core$1,e.modal,e.ng.common,e.upload,e.autoComplete,e.dropdown,e.select,e._switch,e.tooltip,e.accordion,e.ngZorroAntd,e.inputNumber,e.ng.cdk["drag-drop"],e.icon,e.Sortable,e.table,e.tree,e.changeCase,e.rxjs,e.rxjs.operators,e.menu,e.notification,e.button,e.datePicker,e.input,e.radio,e.ngxMonacoEditor,e.modal$1,e.ng.router,e.message)}(this,(function(e,t,n,o,a,r,l,i,s,c,p,d,u,m,g,h,f,b,y,v,x,C,w,z,I,k,P,D,T,M,F,S,O,V,E,A,R){"use strict";C=C&&C.hasOwnProperty("default")?C.default:C;
/*! *****************************************************************************
    Copyright (c) Microsoft Corporation.

    Permission to use, copy, modify, and/or distribute this software for any
    purpose with or without fee is hereby granted.

    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    PERFORMANCE OF THIS SOFTWARE.
    ***************************************************************************** */
var j=function(e,t){return(j=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function L(e,t){function n(){this.constructor=e}j(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var N=function(){return(N=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)};function B(e,t,n,o){var a,r=arguments.length,l=r<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,o);else for(var i=e.length-1;i>=0;i--)(a=e[i])&&(l=(r<3?a(l):r>3?a(t,n,l):a(t,n))||l);return r>3&&l&&Object.defineProperty(t,n,l),l}function W(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function H(e,t,n,o){return new(n||(n=Promise))((function(a,r){function l(e){try{s(o.next(e))}catch(e){r(e)}}function i(e){try{s(o.throw(e))}catch(e){r(e)}}function s(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,i)}s((o=o.apply(e,t||[])).next())}))}function q(e,t){var n,o,a,r,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return r={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function i(r){return function(i){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;l;)try{if(n=1,o&&(a=2&r[0]?o.return:r[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,r[1])).done)return a;switch(o=0,a&&(r=[2&r[0],a.value]),r[0]){case 0:case 1:a=r;break;case 4:return l.label++,{value:r[1],done:!1};case 5:l.label++,o=r[1],r=[0];continue;case 7:r=l.ops.pop(),l.trys.pop();continue;default:if(!(a=l.trys,(a=a.length>0&&a[a.length-1])||6!==r[0]&&2!==r[0])){l=0;continue}if(3===r[0]&&(!a||r[1]>a[0]&&r[1]<a[3])){l.label=r[1];break}if(6===r[0]&&l.label<a[1]){l.label=a[1],a=r;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(r);break}a[2]&&l.ops.pop(),l.trys.pop();continue}r=t.call(e,l)}catch(e){r=[6,e],o=0}finally{n=a=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,i])}}}function _(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var o,a,r=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(o=r.next()).done;)l.push(o.value)}catch(e){a={error:e}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(a)throw a.error}}return l}function U(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(_(arguments[t]));return e}var $=function(){function e(e,o){var a=this;this.widgetProperty=e,this.cdr=o,this.PropertyTypes=n.PropertyTypes,this.TrackByFn=function(e,t){return t||e},this.onChangeValue=new t.EventEmitter,this.handleSortChange=function(){a.onChangeValue.emit(a.valueArray.slice())}}return Object.defineProperty(e.prototype,"propAndValue",{set:function(e){this.prop=e.prop,Array.isArray(e.value)?this.valueArray=e.value:(this.valueArray=[],this.onChangeValue.emit(this.valueArray))},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){},e.prototype.handleChangeValueItem=function(e,t){this.valueArray[e]=t,this.onChangeValue.emit(this.valueArray.slice())},e.prototype.handleAddValueItem=function(){var e=this.widgetProperty.getPropertyDefaultValue(this.prop,!0,this.valueArray.length);this.valueArray.push(e),this.onChangeValue.emit(this.valueArray.slice())},e.prototype.handleRemoveValueItem=function(e){this.valueArray.splice(e,1),this.onChangeValue.emit(this.valueArray.slice())},e.decorators=[{type:t.Component,args:[{selector:"ce-array",template:'<div class="ce-array mb-1">\n  <ul\n    [sortablejs]="valueArray"\n    [sortablejsOptions]="{\n      onUpdate: handleSortChange,\n      handle: \'.drag-handle\'\n    }"\n    >\n    <li\n      *ngFor="let valueItem of valueArray; let i = index; trackBy: TrackByFn"\n      class="{{prop.type === PropertyTypes.Object ? \'pt-3\' : \'pt-3\'}} pb-1 pl-2 pr-2"\n      >\n      <div class="flex-fill d-flex overflow-hidden">\n        <ce-item\n          class="overflow-hidden w-100"\n          [mb0]="true"\n          [context]="context"\n          [propAndValue]="{ prop: prop, value: valueItem }"\n          [showLabel]="false"\n          (onChangeValue)="handleChangeValueItem(i, $event)"\n          ></ce-item>\n      </div>\n      <div class="remove-btn" (click)="handleRemoveValueItem(i)">{{i + 1}}</div>\n      <img\n        class="drag-handle hover:opacity-1"\n        src="assets/img/drag-handle.svg"\n        style="\n          cursor: grab;\n          width: 16px;\n          position: absolute;\n          left: 0;\n          opacity: .5;\n          right: 0;\n          margin: 0 auto;\n          transform: rotate(90deg);\n          top: 0;\n        "\n        title="拖动以排序"\n        >\n    </li>\n  </ul>\n  <div class="btn-add-padding">\n    <button class="btn w-100 btn-add"\n      (click)="handleAddValueItem()"\n      >\n      <span class="fs-12 align-middle">{{\'add\' | translate}}</span>\n      <i class="material-icons align-middle fs-16">add</i>\n    </button>\n  </div>\n</div>'}]}],e.ctorParameters=function(){return[{type:o.WidgetPropertyService},{type:t.ChangeDetectorRef}]},e.propDecorators={propAndValue:[{type:t.Input}],context:[{type:t.Input}],onChangeValue:[{type:t.Output}]},e}();var G=function(){function e(e,t,n){this.datasetRepo=e,this.cd=t,this.translate=n,this.fs=new l.FilterSchema,this.vertical=!1,this.ArrUtil=l.ArrUtil,this.intactData=null,this.allItemsFromData=[],this.listOfOption=["最近三天","最近七天","最近半年"],this.listOfSelectedValue=[],this.curLang=this.translate.currentLang}return e.prototype.ngOnInit=function(){this.checkNUpdateEnum()},e.prototype.handleChangeType=function(){this.checkNUpdateEnum()},e.prototype.handleAddLastTimeItem=function(){l.ArrUtil.Add(this.fs.date.lastTimeItems,new l.FSLastTimeItem)},e.prototype.handleAddEnumItem=function(){l.ArrUtil.Add(this.fs.enum.itemsManual,new l.FSEnumItem)},e.prototype.handleChangeEnumSource=function(){this.checkNUpdateEnum()},e.prototype.handleChangeItemsDataset=function(e){this.fs.enum.itemsDatasetId=e.id,this.updateDatasetResult()},e.prototype.handleItemFieldChange=function(){this.updateDatasetEnumItems()},e.prototype.handleTableDataChange=function(e){this.setCurEnumItems(U(e)),this.cd.markForCheck()},e.prototype.checkNUpdateEnum=function(){var e=this.fs,t=e.type,n=e.enum;void 0===this.fs.enum.firstDefault&&(this.fs.enum.firstDefault="false");var o=n.source;"enum"===t&&("manual"===o?this.setCurEnumItems(this.fs.enum.itemsManual):"dataset"===o&&(this.curItemsDatasetResult?this.updateDatasetEnumItems():this.updateDatasetResult()))},e.prototype.updateDatasetResult=function(){var e=this;"dataset"===this.fs.enum.source&&this.fs.enum.itemsDatasetId&&(this.datasetRepo.getDatasetById(this.fs.enum.itemsDatasetId).subscribe((function(t){e.curFsEnumDataset=t,e.cd.markForCheck()})),this.datasetRepo.getResultByDatasetId(this.fs.enum.itemsDatasetId).subscribe((function(t){e.curItemsDatasetResult=t,e.updateDatasetEnumItems(),e.cd.markForCheck()})))},e.prototype.updateDatasetEnumItems=function(){var e=this;this.curItemsDatasetResult&&this.setCurEnumItems(this.curItemsDatasetResult.map((function(t){return{label:t[e.fs.enum.itemsLabelField],value:t[e.fs.enum.itemsValueField]}})))},e.prototype.setCurEnumItems=function(e){var t=this;this.curEnumItems=e.map((function(e){return N({},e,{displayLabel:t.resolveLabel(e)})})),this.cd.markForCheck()},e.prototype.resolveLabel=function(e){return null===e.label||void 0===e.label?e.value:"string"==typeof e.label?e.label:"object"==typeof e.label&&e.label[this.curLang]||e.value},e.decorators=[{type:t.Component,args:[{selector:"lib-fe-filter-modal",template:'\n<div\n  class="wrapper h-100 d-flex"\n  [class.vertical]="vertical"\n  >\n\n  \x3c!-- preview --\x3e\n  <div\n    class="preview-section d-flex flex-column"\n    style="width: 250px;"\n    >\n    <div\n      class="fs-16 mb-1"\n      style="\n        color: rgba(0,0,0,0.85);\n      "\n      >{{\'preview\'|translate}}</div>\n    <div class="preview h-100">\n      <filter\n        [filterSchema]="fs"\n        [openPicker]= "true"\n      ></filter>\n    </div>\n  </div>\n\n\n  \x3c!-- form --\x3e\n  <div class="setting-section flex-fill overflow-auto">\n    <div class="form-group row">\n      <label class="col-sm-3 col-form-label">{{\'FilterTitle\'|translate}}</label>\n      <lib-i18n-input\n        [maxLength]="50"\n        [(value)]="fs.i18nName"\n        ></lib-i18n-input>\n    </div>\n    <div class="form-group row">\n      <label class="col-sm-3 col-form-label">{{\'filter\'|translate}} Code</label>\n      <input\n        type="text"\n        class="form-control form-control-sm"\n        [(ngModel)]="fs.code"\n        [placeholder]="\'input\'|translate"\n        />\n    </div>\n\n    \x3c!-- 是否隐藏收折 --\x3e\n    <div class="form-group row">\n      \x3c!-- 隐藏 --\x3e\n      <label class="col-sm-3 col-form-label">{{\'isHidden\'|translate}}</label>\n      <div class="col-sm-3">\n        <nz-radio-group \n        [(ngModel)]="fs.isHide" [nzButtonStyle]="\'solid\'" nzSize="default">\n          <label nz-radio [nzValue]="true">{{\'yes\'|translate}}</label>\n          <label nz-radio [nzValue]="false">{{\'no\'|translate}}</label>\n        </nz-radio-group>\n      </div>\n      \x3c!-- 收折 --\x3e\n      <label class="col-sm-3 col-form-label">{{\'isCollapse\'|translate}}</label>\n      <div class="col-sm-3">\n        <nz-radio-group \n        [(ngModel)]="fs.isIn" [nzButtonStyle]="\'solid\'" nzSize="default">\n          <label nz-radio [nzValue]="true">{{\'yes\'|translate}}</label>\n          <label nz-radio [nzValue]="false">{{\'no\'|translate}}</label>\n        </nz-radio-group>\n      </div>\n    </div>\n\n    \x3c!-- 是否隐藏标题 --\x3e\n    <div class="form-group row">\n      <label class="col-sm-3 col-form-label">{{\'ifHideTitle\'|translate}}</label>\n      <div class="col-sm-3">\n        <nz-radio-group \n        [(ngModel)]="fs.showName" [nzButtonStyle]="\'solid\'" nzSize="default">\n          <label nz-radio [nzValue]="false">{{\'hidden\'|translate}}</label>\n          <label nz-radio [nzValue]="true">{{\'show\'|translate}}</label>\n        </nz-radio-group>\n      </div>\n    </div>\n\n    <div class="form-group row">\n      <label class="col-sm-3 col-form-label">{{\'filterWidth\'|translate}}</label>\n      \x3c!-- <div class="col-sm-3"> --\x3e\n        <input\n          type="number"\n          class="form-control form-control-sm"\n          nz-input\n          [(ngModel)]="fs.width"\n          >\n      \x3c!-- </div> --\x3e\n    </div>\n\n    \x3c!-- 类型 --\x3e\n    <div class="form-group row">\n      <label class="col-sm-3 col-form-label">{{\'FilterType\'|translate}}</label>\n      <div class=col-sm-9>\n        <nz-radio-group\n          [(ngModel)]="fs.type"\n          [nzButtonStyle]="\'solid\'"\n          nzSize="default"\n          (ngModelChange)="handleChangeType()"\n          >\n          \x3c!-- (ngModelChange)="tryNRefreshIntactData()" --\x3e\n          <label nz-radio nzValue="date">{{\'date\' | translate}}</label>\n          <label nz-radio nzValue="enum">{{\'enum\' | translate}}</label>\n          <label nz-radio nzValue="number">{{\'number\' | translate}}</label>\n          <label nz-radio nzValue="text">{{\'text\' | translate}}</label>\n          <label nz-radio nzValue="tree">{{\'help\' | translate}}</label>\n          \x3c!-- <label nzDisabled nz-radio-button nzValue="help">{{\'help\' | translate}}</label> --\x3e\n        </nz-radio-group>\n      </div>\n    </div>\n\n    <hr class="mt-1 mb-2" style="width: 90%;margin-left: 7%;">\n    \x3c!-- 筛选类型说明 --\x3e\n    \x3c!-- <div>{{typeNameMap[fs.type]}}型筛选</div> --\x3e\n\n    \x3c!-- date --\x3e\n    <ng-container *ngIf="fs.type === \'date\'">\n      \x3c!-- date.format --\x3e\n      \n      \x3c!-- date.type --\x3e\n      <div class="form-group row">\n        <label class="col-sm-3 col-form-label">{{\'dateType\'|translate}}</label>\n        \x3c!-- <div class=col-sm-9> --\x3e\n          <nz-radio-group [(ngModel)]="fs.date.type" [nzButtonStyle]="\'solid\'" nzSize="default">\n            <label nz-radio nzValue="single">{{\'single\' | translate}}</label>\n            <label nz-radio nzValue="range">{{\'interval\' | translate}}</label>\n            \x3c!-- <label nz-radio nzValue="lastTimeEnum">{{\'Last Time Enum\' | translate}}</label> --\x3e\n          </nz-radio-group>\n        \x3c!-- </div> --\x3e\n      </div>\n      <div\n        *ngIf="fs.date.type === \'single\'"\n        class="form-group row">\n        <label class="col-sm-3 col-form-label">{{\'timeParticle\'|translate}}</label>\n        \x3c!-- <div class=col-sm-9> --\x3e\n          <nz-radio-group [(ngModel)]="fs?.date.singleUnit" [nzButtonStyle]="\'solid\'" nzSize="default">\n            <label nz-radio nzValue="year">{{\'year\' | translate}}</label>\n            <label nz-radio nzValue="month">{{\'month\' | translate}}</label>\n            <label nz-radio nzValue="day">{{\'day\' | translate}}</label>\n          </nz-radio-group>\n        \x3c!-- </div> --\x3e\n      </div>\n      <div class="form-group">\n        <label class="col-sm-3 col-form-label">{{\'dateFormat\'|translate}}</label>\n        \x3c!-- <div class=col-sm-9> --\x3e\n          <input\n            type="text"\n            nz-input\n            [(ngModel)]="fs.date.format"\n            style="width: 274px;height: 26px;\n            border-radius: 6px;"\n            >\n        \x3c!-- </div> --\x3e\n      </div>\n      \x3c!-- single unit deafult --\x3e\n      <div\n        *ngIf="fs.date.type === \'single\'"\n        class="form-group" style="margin-top: 12px;">\n        <label class="col-sm-3 col-form-label">{{\'defaultFilterValue\'|translate}}</label>       \n          <nz-radio-group [(ngModel)]="fs?.date.singleDefaultType">\n            <label nz-radio nzValue="current">\n              \x3c!-- {{\'current\' | translate}}{{fs.date.singleUnit | translate}} --\x3e\n              {{\'currentDate\'|translate}}\n            </label>\n            <label nz-radio nzValue="specified" >\n              {{\'customDate\'|translate}} \n            </label>\n         \n          </nz-radio-group>\n          <nz-date-picker *ngIf="fs.date.singleDefaultType === \'specified\'" style="display: block;margin-top: 12px;margin-left: 25%;" [(ngModel)]="fs.date.singleDefaultSpecified"></nz-date-picker>\n      </div>\n      <div style="margin-left: 4%;margin-top: 12px;" *ngIf="fs.date.type === \'single\'">\n        <span style="padding: 0px 14px 0px 14px;">{{\'CustomQuickFilter\'|translate}}</span>\n        <nz-select style="width: 57%;border-radius: 6px;" nzMode="multiple" [nzPlaceHolder]="\'selectQueryScope\'|translate" [(ngModel)]="listOfSelectedValue">        \n          <ng-container *ngFor="let option of listOfOption" >\n            <nz-option [nzLabel]="option | translate"  [nzValue]="option" ></nz-option>     \n          </ng-container> \n        </nz-select>\n      </div>\n     \n      \x3c!-- range --\x3e\n      <ng-container *ngIf="fs.date.type === \'range\'">\n        <div class="form-group row" style="align-items: center;margin: 12px 0px 0px 0px;">\n          <label class="col-sm-3 col-form-label required" style="margin: 0;">default-start</label>\n          <div class=col-sm-9 style="padding: 0;">\n            <nz-input-group nzCompact>\n              <nz-input-number [nzMin]="0" [(ngModel)]="fs.date.rangeDefault.beforeNum"></nz-input-number>\n              <nz-select [(ngModel)]="fs.date.rangeDefault.beforeUnit">\n                <nz-option [nzLabel]="\'year\'" [nzValue]="\'year\'"></nz-option>\n                <nz-option [nzLabel]="\'month\'" [nzValue]="\'month\'"></nz-option>\n                <nz-option [nzLabel]="\'day\'" [nzValue]="\'day\'"></nz-option>\n              </nz-select>\n              <input type="text" nz-input [ngModel]="\'before\'" readonly style="width: 50px;margin-top: 5px;"/>\n            </nz-input-group>\n          </div>\n        </div>\n        <div class="form-group row" style="align-items: center;margin: 12px 0px 0px 0px;">\n          <label class="col-sm-3 col-form-label required" style="margin: 0;">default-end</label>\n          <div class=col-sm-9 style="padding: 0;">\n            <nz-input-group nzCompact>\n              <nz-input-number [(ngModel)]="fs.date.rangeDefault.afterNum"></nz-input-number>\n              <nz-select [(ngModel)]="fs.date.rangeDefault.afterUnit">\n                <nz-option [nzLabel]="\'year\'" [nzValue]="\'year\'"></nz-option>\n                <nz-option [nzLabel]="\'month\'" [nzValue]="\'month\'"></nz-option>\n                <nz-option [nzLabel]="\'day\'" [nzValue]="\'day\'"></nz-option>\n              </nz-select>\n              <input type="text" nz-input [ngModel]="\'after\'" readonly style="width: 50px;margin-top: 5px;"/>\n            </nz-input-group>\n          </div>\n        </div>\n      </ng-container>\n      \x3c!-- lastTimeDisplayType --\x3e\n      <div\n        *ngIf="fs.date.type === \'lastTimeEnum\'"\n        class="form-group row" style="align-items: center;margin: 12px 0px 0px 0px;">\n        <label class="col-sm-3 col-form-label " style="margin: 0;">lastTimeDisplayType</label>\n        \x3c!-- <div class=col-sm-9 style="padding: 0;"> --\x3e\n          <nz-radio-group [(ngModel)]="fs?.date.lastTimeDisplayType" [nzButtonStyle]="\'solid\'" nzSize="default">\n            <label nz-radio nzValue="select">select</label>\n            <label nz-radio nzValue="flat">flat</label>\n          </nz-radio-group>\n        \x3c!-- </div> --\x3e\n      </div>\n      \x3c!-- lastTimeItems --\x3e\n      <div\n        *ngIf="fs.date.type === \'lastTimeEnum\'"\n        class="form-group row" style="align-items: center;margin: 12px 0px 0px 0px;">\n        <label class="col-sm-3 col-form-label " style="margin: 0;">lastTimeItems ({{fs.date.lastTimeItems?.length}})</label>\n        <div class=col-sm-9 style="padding: 0;">\n          <ul>\n            <li\n              *ngFor="let item of fs.date.lastTimeItems"\n              class="form-group row">\n              <nz-input-group nzCompact>\n                <input type="text" nz-input [ngModel]="\'last\'" readonly style="width: 50px;"/>\n                <nz-input-number [(ngModel)]="item.num"></nz-input-number>\n                <nz-select [(ngModel)]="item.unit">\n                  <nz-option [nzLabel]="\'year\'" [nzValue]="\'year\'"></nz-option>\n                  <nz-option [nzLabel]="\'month\'" [nzValue]="\'month\'"></nz-option>\n                  <nz-option [nzLabel]="\'day\'" [nzValue]="\'day\'"></nz-option>\n                </nz-select>\n              </nz-input-group>\n              <div>\n                <button class="btn" (click)="ArrUtil.Remove(fs.date.lastTimeItems, item)">x</button>\n                <button class="btn" (click)="ArrUtil.Up(fs.date.lastTimeItems, item)">^</button>\n                <button class="btn" (click)="ArrUtil.Down(fs.date.lastTimeItems, item)">v</button>\n              </div>\n            </li>\n            <li>\n              <button class="btn btn-primary" (click)="handleAddLastTimeItem()">{{\'add\'|translate}}</button>\n            </li>\n          </ul>\n        </div>\n      </div>\n    </ng-container>\n\n    \x3c!-- enum --\x3e\n    <ng-container *ngIf="fs.type === \'enum\'" >\n     \n      <div class="form-group row" style="margin: 20px 0px 0px 0px;align-items: center;">\n        <label class="col-sm-3 col-form-label " style="margin: 0">{{\'selectType\'|translate}}</label>\n        \x3c!-- <div class=col-sm-9> --\x3e\n          <nz-radio-group [(ngModel)]="fs?.enum.multi" [nzButtonStyle]="\'solid\'" nzSize="default">\n            <label nz-radio [nzValue]="false">{{\'single\'|translate}}</label>\n            <label nz-radio [nzValue]="true">{{\'multi\'|translate}}</label>\n          </nz-radio-group>\n        \x3c!-- </div> --\x3e\n      </div>\n      <div\n        *ngIf="!fs.enum.multi"\n        class="form-group row" style="align-items: center;margin: 12px 0px 0px 0px;">\n        <label class="col-sm-3 col-form-label " style="margin: 0">{{\'displayType\'|translate}}</label>\n        \x3c!-- <div class=col-sm-9> --\x3e\n          <nz-radio-group [(ngModel)]="fs?.enum.displayType" [nzButtonStyle]="\'solid\'" nzSize="default">\n            <label nz-radio nzValue="select">{{\'selectBox\'|translate}}</label>\n            <label nz-radio nzValue="flat">{{\'tile\'|translate}}</label>\n          </nz-radio-group>\n        \x3c!-- </div> --\x3e\n      </div>\n      <div class="form-group row" style="align-items: center;margin: 12px 0px 0px 0px;">\n        <label class="col-sm-3 col-form-label " style="margin: 0">{{\'optionValueSource\'|translate}}</label>\n        \x3c!-- <div class=col-sm-9> --\x3e\n          <nz-radio-group\n            [(ngModel)]="fs?.enum.source"\n            (ngModelChange)="handleChangeEnumSource()"\n            [nzButtonStyle]="\'solid\'"\n            nzSize="default">\n            \x3c!-- <label nz-radio-button nzValue="dataField">{{ \'dataField\' | translate }}</label> --\x3e\n            <label nz-radio nzValue="manual">{{ \'manual\' | translate }}</label>\n            <label nz-radio nzValue="dataset">{{ \'dataset\' | translate }}</label>\n          </nz-radio-group>\n        \x3c!-- </div> --\x3e\n      </div>\n      <div\n        *ngIf="fs.enum.source === \'manual\'"\n        class="form-group row" style="margin: 12px 0px 0px 0px;">\x3c!--({{fs.enum.itemsManual?.length}})--\x3e\n        <label class="col-sm-3 col-form-label " style="margin: 0;">{{\'optionValue\'|translate}} </label>\n        \x3c!-- <div class=col-sm-9> --\x3e\n          <editable-table\n            [data]="fs?.enum?.itemsManual"\n            [columns]="[\n              { title:\'name\', name: \'label\', type:\'i18n\' },\n              { title:\'value\', name: \'value\' }\n            ]"\n            (dataChange)="handleTableDataChange($event)"\n          ></editable-table>\n        \x3c!-- </div> --\x3e\n      </div>\n      <ng-container *ngIf="fs.enum.source === \'dataset\'">\n        <div class="form-group row" style="margin: 12px 0px 0px 0px;align-items: center;">\n          <label class="col-sm-3 col-form-label " style="margin: 0;">{{\'dataset\'|translate}}</label>\n          <div class="col-sm-5" style="padding: 0;">\n            <epp-help\n              title="{{\'selectDataset\'|translate}}"\n              [getData]="datasetRepo.getDatasets()"\n              class="w-100"\n              [tableFields]="[\'name\', \'datasourceName\']"\n              [display]="curFsEnumDataset?.name"\n              (selectedItemChange)="handleChangeItemsDataset($event)"\n              ></epp-help>\n          </div>\n        </div>\n        <div class="form-group row" style="margin: 12px 0px 0px 0px;align-items: center;">\n          <label class="col-sm-3 col-form-label " style="margin: 0;">{{\'filterValueField\'|translate}}</label>\n          <div class="col-sm-5" style="padding: 0;">\n            <nz-select\n              [(ngModel)]="fs.enum.itemsValueField"\n              (ngModelChange)="handleItemFieldChange()">\n              <nz-option\n                *ngFor="let dim of curFsEnumDataset?.cols?.dimensions"\n                [nzValue]="dim.name"\n                [nzLabel]="dim.label"\n                ></nz-option>\n            </nz-select>\n          </div>\n        </div>\n        <div class="form-group row" style="margin: 12px 0px 0px 0px;align-items: center;">\n          <label class="col-sm-3 col-form-label " style="margin: 0;">{{\'displayNameField\'|translate}}</label>\n          <div class="col-sm-5" style="padding: 0;">\n            <nz-select\n              [(ngModel)]="fs.enum.itemsLabelField"\n              (ngModelChange)="handleItemFieldChange()">\n              <nz-option\n                *ngFor="let dim of curFsEnumDataset?.cols?.dimensions"\n                [nzValue]="dim.name"\n                [nzLabel]="dim.label"\n                ></nz-option>\n            </nz-select>\n          </div>\n        </div>\n      </ng-container>\n      \x3c!-- enum default --\x3e\n       \x3c!-- <ng-container *ngIf="!fs.enum.multi"> --\x3e\n        <div class="form-group row" style="align-items: center;margin: 12px 0px 0px 0px;">\n          <label class="col-sm-3 col-form-label">{{\'defaultFirstValue\'|translate}}</label>\n          <nz-radio-group [(ngModel)]="fs.enum.firstDefault" [nzButtonStyle]="\'solid\'"  nzSize="default">\n            <label nz-radio nzValue="true">{{\'yes\' | translate}}</label>\n            <label nz-radio nzValue="false">{{\'no\' | translate}}</label>\n          </nz-radio-group>\n        </div>\n        \x3c!-- </ng-container> --\x3e\n        <ng-container *ngIf="fs.enum.firstDefault === \'false\'">\n          <div \n            class="form-group row" style="align-items: center;margin: 12px 0px 0px 0px;">\n            <label class="col-sm-3 col-form-label " style="margin: 0">{{\'defaultFilterValue\'|translate}}</label>\n            \x3c!-- <div class=col-sm-9> --\x3e\n              \x3c!-- class="col-sm-5" --\x3e\n              <nz-select  *ngIf="!fs.enum.multi"\n                [nzMode]="fs.enum.multi ? \'multiple\' : \'default\'"\n                nzAllowClear\n                [(ngModel)]="fs.enum.singleDefault">\n                <nz-option\n                  *ngFor="let item of curEnumItems"\n                  [nzValue]="item.value"\n                  [nzLabel]="item.displayLabel"></nz-option>\n              </nz-select>\n              <nz-select  *ngIf="fs.enum.multi"\n                [nzMode]="fs.enum.multi ? \'multiple\' : \'default\'"\n                nzAllowClear\n                [(ngModel)]="fs.enum.multiDefault">\n                <nz-option\n                  *ngFor="let item of curEnumItems"\n                  [nzValue]="item.value"\n                  [nzLabel]="item.displayLabel"></nz-option>\n              </nz-select>\n            \x3c!-- </div> --\x3e\n          </div>\n       </ng-container>\n    </ng-container>\n\n    \x3c!-- number --\x3e\n    <ng-container *ngIf="fs.type === \'number\'">\n      <div class="form-group row" style="align-items: center;margin-top: 30px;">\n        <label class="col-sm-3 col-form-label " style="margin: 0;">default</label>\n        \x3c!-- <div class=col-sm-9> --\x3e\n          <input\n            type="text"\n            class="form-control form-control-sm"\n            [(ngModel)]="fs.number.default"\n            />\n        \x3c!-- </div> --\x3e\n      </div>\n    </ng-container>\n\n    \x3c!-- text --\x3e\n    <ng-container *ngIf="fs.type === \'text\'">\n      <div class="form-group row" style="align-items: center;margin-top: 30px;">\n      <label class="col-sm-3 col-form-label " style="margin: 0;">default</label>\n      \x3c!-- <div class=col-sm-9> --\x3e\n        <input\n          type="text"\n          class="form-control form-control-sm"\n          [(ngModel)]="fs.text.default"\n          />\n      \x3c!-- </div> --\x3e\n    </div>\n    </ng-container>\n\n    \x3c!-- tree --\x3e\n    <ng-container *ngIf="fs.type === \'tree\'">\n      <div class="form-group row" style="margin: 20px 0px 0px 0px;align-items: center;">\n        <label class="col-sm-3 col-form-label " style="margin: 0">{{\'range\'|translate}}</label>\n        <nz-radio-group [(ngModel)]="fs.tree.type" [nzButtonStyle]="\'solid\'" nzSize="default">\n          <label nz-radio [nzValue]="\'store\'">{{\'library\'|translate}}</label>\n          <label nz-radio [nzValue]="\'column\'">{{\'column\'|translate}}</label>\n        </nz-radio-group>\n      </div>\n    </ng-container>\n\n  </div>\n\n</div>\n\n<ng-template #tagPlaceHolder let-selectedList> {{\'selected\'|translate}} {{selectedList.length}} {{\'item\'|translate}}</ng-template>\n',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".wrapper{border:1px solid #e9ecf3;border-radius:8px;max-height:calc(80vh - 110px)}.wrapper .preview-section{padding:9px 12px;border-right:1px solid #e9ecf3;border-bottom:none}.wrapper .preview-section .preview{padding:15px}.wrapper .setting-section{padding:20px 5px}.wrapper.vertical{flex-direction:column}.wrapper.vertical .preview-section{border-bottom:1px solid #e9ecf3}.preview{padding:20px 0 30px 20px;border-radius:4px;background:#fbfbfc;border:1px solid rgba(220,220,220,.25)}input,nz-select{min-width:150px}::ng-deep lib-fe-filter-modal .ant-modal-content{height:60vh;border-radius:16px!important}::ng-deep lib-fe-filter-modal .col-form-label{white-space:nowrap;font-size:13px;color:rgba(0,0,0,.85)}::ng-deep lib-fe-filter-modal .ant-calendar-picker-input{width:214px;height:32px}::ng-deep lib-fe-filter-modal .ant-radio-button-wrapper:first-child{border-radius:2px 0 0 2px}::ng-deep lib-fe-filter-modal .ant-radio-button-wrapper:last-child{border-radius:0 2px 2px 0}::ng-deep lib-fe-filter-modal .form-control-sm{width:17rem;border:1px solid #e9ecf3;border-radius:8px}::ng-deep lib-fe-filter-modal .body-p-vert-0 .ant-modal-footer button+button{width:100px}::ng-deep lib-fe-filter-modal nz-select .ant-select-selection{border-radius:6px}::ng-deep lib-fe-filter-modal .ant-modal-title{font-size:17px!important;color:#2d2f33!important}::ng-deep lib-fe-filter-modal .ant-modal-footer{padding:10px 40px!important}::ng-deep lib-fe-filter-modal nz-modal .body-p-vert-0{min-width:919px!important}"]}]}],e.ctorParameters=function(){return[{type:l.DatasetRepo},{type:t.ChangeDetectorRef},{type:i.TranslateService}]},e.propDecorators={fs:[{type:t.Input,args:["filterSchema"]}],vertical:[{type:t.Input}],filterComp:[{type:t.ViewChild,args:[o.FilterComponent]}]},e}();function J(e,t){var n=Object.values(e).findIndex(t);return Object.keys(e)[n]}function K(e,t){var n=e.findIndex(t);n>-1&&e.splice(n,1)}var X={table:0,treeTable:1,transfer:2,treeTransfer:3};X[X.table]="table",X[X.treeTable]="treeTable",X[X.transfer]="transfer",X[X.treeTransfer]="treeTransfer";var Y=function(){function e(e){this.cd=e,this.getData=[],this.tableFields=[],this.structure=X.table,this.selectDataItem=new t.EventEmitter,this.expandedKeys=[],this.HelpStructure=X,this.tableData=[],this.loadingTable=!1,this.checkedItems=[]}return e.prototype.ngOnInit=function(){var e=this;"function"==typeof this.getData?this.getData().subscribe((function(t){e.data=t,e.cd.markForCheck()})):this.getData.subscribe?this.getData.subscribe((function(t){e.data=t,e.cd.markForCheck()})):"number"==typeof this.getData.length&&(this.data=this.getData)},e.prototype.handleSearch=function(e){var t=this;this.filteredData=e?this.data.filter((function(n){return t.tableFields.some((function(t){return n[t]&&n[t].indexOf(e)>-1}))})):null},e.prototype.handleClickItem=function(e){this.selectedDataItem=e},e.prototype.handleDbClickItem=function(e){this.selectDataItem.emit(e)},e.prototype.handleClickTreeNode=function(e){if(this.loadingTable=!0,this.getTableOnSelectTree){var t=this.getTableOnSelectTree(e.node.origin);t&&t.subscribe(this.setTableData.bind(this))}e.node.origin.isTableParent&&this.setTableData(e.node.origin.children)},e.prototype.setTableData=function(e){this.tableData=e,this.loadingTable=!1,this.cd.markForCheck()},e.prototype.handleClickCheckAllRightTable=function(e){var t=this;e?this.tableData.forEach((function(e){t.getIfChecked(e)||t.checkedItems.push(e)})):this.tableData.forEach((function(e){return t.removeCheckedItem(e)}))},e.prototype.handleClickCheckItem=function(e){this.getIfChecked(e)?this.removeCheckedItem(e):this.checkedItems.push(e)},e.prototype.removeCheckedItem=function(e){K(this.checkedItems,(function(t){return t.id===e.id}))},e.prototype.getIfChecked=function(e){return this.checkedItems.some((function(t){return t.id===e.id}))},e.prototype.getIfAllChecked=function(){return this.tableData.length>0&&this.tableData.every(this.getIfChecked.bind(this))},e.decorators=[{type:t.Component,args:[{selector:"wdesgin-help-shell",template:'<div class="help-shell">\n  <ng-container *ngIf="structure===HelpStructure.table">\n    <div class="d-flex flex-column h-100">\n      <app-search-input\n        class="d-block"\n        (onSearch)="handleSearch($event)"\n        ></app-search-input>\n      <nz-table\n        class="mt-2 flex-fill overflow-auto"\n        nzSize="small"\n        #nzTable\n        [nzData]="filteredData || data || []"\n        [nzPageSize]="10" >\n        <thead>\n          <tr>\n            <th *ngFor="let col of tableFields">{{col | translate}}</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr *ngFor="let dataItem of nzTable.data"\n            [class.active]="selectedDataItem === dataItem"\n            (click)="handleClickItem(dataItem)"\n            (dblclick)="handleDbClickItem(dataItem)"\n            >\n            <td *ngFor="let col of tableFields">{{dataItem[col]}}</td>\n          </tr>\n        </tbody>\n      </nz-table>\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf="structure===HelpStructure.treeTable">\n    <div class="d-flex align-items-stretch h-100">\n      <div class="h-100 overflow-auto"\n        style="border-right: 1px solid #e9edf1;">\n        <nz-tree\n          #nzTreeComponent\n          [nzExpandedKeys]="expandedKeys"\n          [nzData]="data"\n          (nzClick)="handleClickTreeNode($event)"\n          >\n        </nz-tree>\n      </div>\n      <div class="h-100 overflow-auto flex-fill">\n        <nz-table\n          class="mt-2"\n          nzSize="small"\n          #nzTable\n          [nzLoading]="loadingTable"\n          [nzData]="tableData || []"\n          [nzPageSize]="10" >\n          <thead>\n            <tr>\n              <th *ngFor="let col of tableFields">{{(col.pop ? col[col.length-1] : col) | translate}}</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr *ngFor="let dataItem of nzTable.data"\n              [class.active]="selectedDataItem === dataItem"\n              (click)="handleClickItem(dataItem)"\n              (dblclick)="handleDbClickItem(dataItem)"\n              >\n              \x3c!-- <td *ngFor="let col of tableFields">{{dataItem[col]}}</td> --\x3e\n              <td *ngFor="let col of tableFields">{{dataItem | dataPath:col}}</td>\n            </tr>\n          </tbody>\n        </nz-table>\n      </div>\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf="structure===HelpStructure.treeTransfer">\n    <div class="d-flex align-items-stretch h-100">\n      <div class="h-100 overflow-auto"\n        style="border-right: 1px solid #e9edf1;">\n        <nz-tree\n          #nzTreeComponent\n          [nzExpandedKeys]="expandedKeys"\n          [nzData]="data"\n          (nzClick)="handleClickTreeNode($event)"\n          >\n        </nz-tree>\n      </div>\n      <div class="h-100 overflow-scroll flex-fill">\n        <nz-table\n          class="mt-2 flex-fill mr-2"\n          nzSize="small"\n          #nzTable\n          [nzLoading]="loadingTable"\n          [nzData]="tableData || []"\n          [nzPageSize]="10" >\n          <thead>\n            <tr>\n              <th\n                nzShowCheckbox\n                (nzCheckedChange)="handleClickCheckAllRightTable($event)"\n                [nzChecked]="getIfAllChecked()"\n                [nzDisabled]="tableData.length===0"\n                ></th>\n              <th *ngFor="let col of tableFields">{{(col.pop ? col[col.length-1] : col) | translate}}</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr *ngFor="let dataItem of nzTable.data"\n              [class.active]="selectedDataItem === dataItem"\n              (click)="handleClickCheckItem(dataItem)"\n              >\n              <td\n                nzShowCheckbox\n                [nzChecked]="getIfChecked(dataItem)"\n                (nzCheckedChange)="handleClickCheckItem(dataItem)"\n                ></td>\n              <td *ngFor="let col of tableFields">{{dataItem | dataPath:col}}</td>\n            </tr>\n          </tbody>\n        </nz-table>\n      </div>\n\n      <div style="width: 200px;background: #f9fafb;" >\n        <nz-table\n          class="mt-2 checkedTable"\n          #checkedTable\n          [nzData]="checkedItems"\n          nzSize="small"\n          [nzPageSize]="10"\n        >\n          <thead>\n            <tr>\n              <th> {{\'selected\' + checkedItems.length + \'item\' | translate}} </th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr *ngFor="let checkedItem of checkedItems"\n            >\n            \x3c!-- [class.active]="selectedDataItem === checkedItem" --\x3e\n              <td class="d-flex align-items-center">\n                <span class="flex-fill">{{checkedItem.name}}</span>\n                <i class="material-icons remove-btn"\n                  (click)="removeCheckedItem(checkedItem)"\n                >close</i>\n              </td>\n            </tr>\n          </tbody>\n        </nz-table>\n\n      </div>\n    </div>\n  </ng-container>\n</div>',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".help-shell{height:60vh}.help-shell tr:hover .remove-btn{opacity:1}.help-shell tr .remove-btn{transition:opacity .3s;opacity:0;font-size:18px;cursor:pointer;color:gray}.help-shell tr .remove-btn:hover{color:#e91e63}::ng-deep .checkedTable .ant-table-placeholder{display:none}"]}]}],e.ctorParameters=function(){return[{type:t.ChangeDetectorRef}]},e.propDecorators={getData:[{type:t.Input}],getTableOnSelectTree:[{type:t.Input}],tableFields:[{type:t.Input}],structure:[{type:t.Input}],selectDataItem:[{type:t.Output}],expandedKeys:[{type:t.Input}]},e}();var Z,Q=function(){function e(){}return e.prototype.transform=function(e,t){if("string"==typeof t)return e[t];if(t.pop){var n=N({},e);return t.forEach((function(e){n=n[e]})),n}},e.decorators=[{type:t.Pipe,args:[{name:"dataPath"}]}],e}();var ee=((Z={})[X.table]=520,Z[X.treeTable]=750,Z[X.treeTransfer]=900,Z),te=function(){function e(e,t){this.modal=e,this.translate=t}return e.prototype.show=function(e){var n,o=this,a=e.title,r=void 0===a?this.translate.translations[this.translate.currentLang].pleaseSelect:a,l=e.structure,i=void 0===l?X.table:l,s=e.getData,c=e.tableFields,p=void 0===c?["name"]:c,d=e.getTableOnSelectTree,u=e.expandedKeys,m=new t.EventEmitter;return this.modalRef=this.modal.create({nzTitle:r,nzContent:Y,nzComponentParams:{getData:s,tableFields:p,structure:i,getTableOnSelectTree:d,expandedKeys:u},nzWidth:ee[i],nzClassName:"body-p-vert-0",nzFooter:[{label:this.translate.translations[this.translate.currentLang].confirm,type:"primary",disabled:function(){return!n||!n.selectedDataItem&&0===n.checkedItems.length},onClick:function(){m.emit(i===X.treeTransfer?n.checkedItems:n.selectedDataItem),o.modalRef.destroy()}},{label:this.translate.translations[this.translate.currentLang].cancel,shape:"default",onClick:function(){return o.modalRef.destroy()}}]}),this.modalRef.afterOpen.subscribe((function(){(n=o.modalRef.getContentComponent()).selectDataItem.subscribe((function(e){m.emit(e),o.modalRef.destroy()}))})),m},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:s.NzModalService},{type:i.TranslateService}]},e.ngInjectableDef=t.defineInjectable({factory:function(){return new e(t.inject(s.NzModalService),t.inject(i.TranslateService))},token:e,providedIn:"root"}),e}();var ne=function(){function e(){this.schema=new l.NumFormatSchema}return e.prototype.ngOnInit=function(){this.schema||(this.schema=new l.NumFormatSchema)},e.decorators=[{type:t.Component,args:[{selector:"lib-num-format-modal",template:'\n<div class="d-flex flex-column flex">\n  \x3c!-- form --\x3e\n  <div class="flex-fill overflow-auto px-3">\n\n    \x3c!-- 1. 小数位数 --\x3e\n    <div class="form-group row">\n      <label class="col-sm-3 col-form-label">{{\'decimalDigit\'|translate}}</label>\n      <div class=col-sm-9>\n        <nz-input-number\n          style="width: 200px;"\n          [nzMin]="-1"\n          [(ngModel)]="schema.decimal"\n          ></nz-input-number>\n      </div>\n    </div>\n\n    \x3c!-- 3. 数量单位 --\x3e\n    <div class="form-group row">\n      <label class="col-sm-3 col-form-label">{{\'quantityUnit\' | translate}}</label>\n      <div class=col-sm-9>\n        <nz-select [(ngModel)]="schema.numUnit" style="width: 200px;">\n          <nz-option [nzLabel]="\'none\' | translate" [nzValue]="1"></nz-option>\n          <nz-option [nzLabel]="\'thousand\' | translate" [nzValue]="1000"></nz-option>\n          <nz-option [nzLabel]="\'tenThousand\' | translate" [nzValue]="10000"></nz-option>\n          <nz-option [nzLabel]="\'million\' | translate" [nzValue]="1000000"></nz-option>\n          <nz-option [nzLabel]="\'tenMillion\' | translate" [nzValue]="1000000"></nz-option>\n          <nz-option [nzLabel]="\'hundredMillion\' | translate" [nzValue]="100000000"></nz-option>\n        </nz-select>\n      </div>\n    </div>\n\n    \x3c!-- 2. 千分位 --\x3e\n    <div class="form-group row">\n      <label class="col-sm-3 col-form-label">{{\'thousandSeparator\'|translate}}</label>\n      <div class=col-sm-9>\n        <div class="custom-control custom-checkbox">\n          <input\n            id="enableThousandSep"\n            type="checkbox"\n            [(ngModel)]="schema.enableThousandSep"\n            class="custom-control-input">\n          <label class="custom-control-label" for="enableThousandSep"></label>\n        </div>\n      </div>\n    </div>\n\n    \x3c!-- 4. 百分比 --\x3e\n    <div class="form-group row" >\n      <label class="col-sm-3 col-form-label">{{\'percent\' | translate}}</label>\n      <div class=col-sm-9>\n        <div class="custom-control custom-checkbox">\n          <input\n            id="isPercent"\n            type="checkbox"\n            [(ngModel)]="schema.isPercent"\n            class="custom-control-input">\n          <label class="custom-control-label" for="isPercent"></label>\n        </div>\n      </div>\n    </div>\n\n    \x3c!-- 5. 单位后缀 --\x3e\n    <div class="form-group row">\n      <label class="col-sm-3 col-form-label">{{\'unitSuffix\'|translate}}</label>\n      <div class=col-sm-9>\n        <lib-i18n-input\n          style="width: 200px; display: inline-block;"\n          [maxLength]="50"\n          [(value)]="schema.suffix"\n          [placeholder]="\'customInput\'| translate"\n          ></lib-i18n-input>\n      </div>\n    </div>\n\n  </div>\n</div>\n\n',styles:[""]}]}],e.ctorParameters=function(){return[]},e}();var oe=function(){function e(e,o,a,r,i,s,c,p){var d=this;this.http=e,this.cd=o,this.help=a,this.widgetProperty=r,this.modal=i,this.translate=s,this.datasetRepo=c,this.help2=p,this.showLabel=!0,this.mb0=!1,this.onChangeValue=new t.EventEmitter,this.PropertyTypes=n.PropertyTypes,this.handleLoadedSelectHelpData=function(e){Array.isArray(e)&&(d.selectHelpData=e),Array.isArray(e.data)&&(d.selectHelpData=e.data),d.cd.detectChanges()},this.handleChangeValue=function(e){d.value=e,d.onChangeValue.emit(d.value)},this.imgInputType="upload",this.beforeUpload=function(e){return l.getBase64(e,(function(e){d.value=e,d.handleChangeValue(d.value)})),!1}}return Object.defineProperty(e.prototype,"propAndValue",{set:function(e){if(e){var t=e.prop,o=e.value;if(t!==this.prop){switch(this.prop=t,this.value=o,t.type){case n.PropertyTypes.DataField:"string"==typeof o&&(this.value={name:o,label:o},this.handleChangeDataFieldValue(o));break;case n.PropertyTypes.Color:break;case n.PropertyTypes.Object:this.objPropsAndValues={props:Object.values(this.prop.objectOption.objPropertyOptions),propValues:o};break;case n.PropertyTypes.Code:case n.PropertyTypes.Html:case n.PropertyTypes.Text:this.formControl=new r.FormControl(o,{updateOn:"blur"}),this.formControl.valueChanges.subscribe(this.handleChangeValue);break;case n.PropertyTypes.Number:this.formControl=new r.FormControl(o),this.formControl.valueChanges.subscribe(this.handleChangeValue);break;case n.PropertyTypes.SelectHelp:var a=t.selectHelpOption,i=a.url,s=a.body;t.selectHelpOption.usePost?this.http.post(i,s).subscribe(this.handleLoadedSelectHelpData):this.http.get(i).subscribe(this.handleLoadedSelectHelpData),this.formControl=new r.FormControl(o),this.formControl.valueChanges.subscribe(this.handleChangeValue);break;case n.PropertyTypes.Bool:case n.PropertyTypes.Enum:default:this.formControl=new r.FormControl(o),this.formControl.valueChanges.subscribe(this.handleChangeValue)}t.type===n.PropertyTypes.Bool&&(this.id=l.uuidv4())}}},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.prop.type===n.PropertyTypes.Color&&(this.colors=this.widgetProperty.getColorsByColorOption(this.prop.colorOption))},e.prototype.handleChangeObjectValue=function(e){var t=e.propName,n=e.value;this.value[t]=n,this.onChangeValue.emit(this.value)},e.prototype.handleChangeDataFieldValue=function(e){if(this.oldPlainString!==e){this.oldPlainString=e;var t=this.context.extra.cols;if(t){if(t.length>0)return;var n=t.find((function(t){return t.name===e||t.label===e}));if(n){var o=n.name,a=n.label;this.handleChangeValue({name:o,label:a})}else this.handleChangeValue({name:e,label:e})}else this.handleChangeValue({name:e,label:e})}},e.prototype.handleSelectCol=function(e){if(e){var t=this.findColInAggByName(e),n=t.name,o=t.label;this.value={name:n,label:o}}else this.value=null;this.changeCol()},e.prototype.changeCol=function(){this.handleChangeValue(N({},this.value))},e.prototype.getColShowLabel=function(e,t){return t?"string"==typeof t?t:t[this.translate.currentLang]?t[this.translate.currentLang]:e:e},e.prototype.findColInAggByName=function(e){if(this.context.extra&&this.context.extra.cols)return this.context.extra.cols.find((function(t){return t.name===e||t.label===e}))},e.prototype.handleClickDataFieldSetting=function(){var e=this,t=this.modal.create({nzTitle:this.translate.translations[this.translate.currentLang].numericalFormat,nzContent:ne,nzComponentParams:{schema:this.value.numFormat},nzWidth:600,nzClassName:"body-p-vert-0",nzFooter:[{label:this.translate.translations[this.translate.currentLang].cancel,shape:"default",onClick:function(){return t.destroy()}},{label:this.translate.translations[this.translate.currentLang].confirm,type:"primary",onClick:function(){e.value.numFormat=t.getContentComponent().schema,e.changeCol(),t.destroy()}}]})},e.prototype.handleClickOpenHelp=function(){var e=this,t=this.prop,n=t.helpOption,o=(t.displayName,n.getData),a=n.structure,r=n.tableFields,l=n.valueField,i=n.nameField,s=n.getTableOnSelectTree;this.help.show({title:this.translate.translations[this.translate.currentLang].pleaseSelect,structure:a,tableFields:r,nameField:i,getData:o?function(){return o(e.http)}:null,getTableOnSelectTree:s?function(t){return s(t,e.http)}:null}).subscribe((function(t){e.formControl.setValue(t[i]),e.handleChangeValue({__type:"help",value:t[l],name:t[i]})}))},e.prototype.handleHelp2ValueChange=function(e){var t=this,n=this.prop.help2Option,o=n.valueField,a=n.labelField,r=n.getResult;r?r(e).then((function(e){var n=e.value,o=e.label,a=e.path;t.setHelp2ValueObject(n,o,a)})):Array.isArray(e.selected)?this.setHelp2ValueObject(e.selected.map((function(e){return e[o]})),this.translate.instant("Selected"),e.path):this.setHelp2ValueObject(e.selected[o],e.selected[a],e.path)},e.prototype.setHelp2ValueObject=function(e,t,n){this.value={__type:"help",value:e,label:t,path:n,preset:this.prop.help2Option.preset},this.handleChangeValue(this.value)},e.prototype.getHelp2Label=function(){if(this.value){var e=this.value,t=e.value,n=e.label;if(!Array.isArray(t))return n&&t?n+" ("+t+")":n||t}},e.prototype.handleClickOpenFilter=function(){var e=this,t=this.modal.create({nzTitle:this.translate.translations[this.translate.currentLang].filterConfig,nzContent:G,nzComponentParams:{fs:this.value||new l.FilterSchema},nzWidth:"55%",nzClassName:"body-p-vert-0",nzFooter:[{label:this.translate.translations[this.translate.currentLang].cancel,shape:"default",onClick:function(){return t.destroy()}},{label:this.translate.translations[this.translate.currentLang].confirm,type:"primary",onClick:function(){var n=t.getContentComponent().fs;n.i18nName._notProcess=!0,e.handleChangeValue(N({},n)),t.destroy()}}]})},e.prototype.handleBlurScss=function(){this.handleChangeValue(this.value)},e.prototype.handleOpenEditor=function(e){var t=this,n=(new Date).toString(),o=this.editorWin;o&&!o.closed?o.focus():this.editorWin=l.openEditorWindowService({xcWindowId:n,xcInitialContent:this.value,xcLang:e,xcOnConfirm:function(e){t.value=e,t.formControl.setValue(e),t.handleChangeValue(t.value),t.cd.detectChanges(),window.cd&&window.cd.detectChanges()}})},e.prototype.ngOnDestroy=function(){this.editorWin&&this.editorWin.close()},e.decorators=[{type:t.Component,args:[{selector:"ce-item",template:'\n\x3c!-- 非 Object --\x3e\n<div class="row no-gutters" [class.mb-0]="mb0">\n  <ng-container *ngIf="prop.type!=PropertyTypes.Object">\n    <ng-container [ngSwitch]="prop.type">\n      <label\n        nz-tooltip\n        nzTitle="\n          {{(prop.displayName || prop.name) | translate}}\n          {{prop.tip ? (\': \' + prop.tip | translate) : \'\'}}\n        "\n        nzPlacement="left"\n        *ngIf="showLabel"\n        class="col-sm-3 col-form-label text-truncate">{{(prop.displayName || prop.name) | translate}}</label>\n      <div\n        [ngClass]="{\n          \'col-9\': showLabel,\n          \'col-12\': !showLabel,\n          \'col-form-right\': showLabel\n        }"\n        class="">\n\n        \x3c!-- Bool --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.Bool">\n          <div class="custom-control custom-checkbox">\n            <nz-switch\n              nzSize="small"\n              [ngModel]="value"\n              (ngModelChange)="handleChangeValue($event)"\n              ></nz-switch>\n            \x3c!-- <input type="checkbox"\n              class="custom-control-input"\n              [formControl]="formControl" [id]="id">\n            <label class="custom-control-label" [for]="id"></label> --\x3e\n          </div>\n        </ng-container>\n\n        \x3c!-- Color --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.Color">\n          \x3c!-- <div\n            [cpPresetColors]="[\'#FF9300\', \'#388FFF\', \'#5AC1C3\', \'#FEC520\']"\n            cpPosition="bottom"\n            [cpPositionOffset]="\'-50%\'"\n            [cpPositionRelativeToArrow]="true"\n            [(colorPicker)]="value"\n            (colorPickerChange)="handleChangeValue($event)"\n            class="d-inline-block color-picker-custom"\n            >\n            <div class="color-indicator align-middle"\n              [style.background]="value"></div>\n            <div class="d-inline-block color-value align-middle ml-2">{{value}}</div>\n          </div> --\x3e\n          <epp-color-picker\n            [types]="prop.colorOption?.type"\n            [list]="colors"\n            [(color)]="value"\n            (colorChange)="handleChangeValue($event)">\n          </epp-color-picker>\n        </ng-container>\n\n        \n        \x3c!-- Enum --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.Enum">\n          <select\n            class="form-control form-control-sm"\n            [formControl]="formControl">\n            <option\n              *ngFor="let item of prop.enumOption?.items"\n              [value]="item.replace ? item : item.value">\n              {{(item.replace ? item : (item.displayName || item.value)) | translate}}\n            </option>\n          </select>\n        </ng-container>\n\n        \x3c!-- Enum Help --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.SelectHelp">\n          <div\n            *ngIf="!selectHelpData"\n            class="form-control form-control-sm"\n            style="padding-top: 2px;"\n            >{{\'loading\' | translate}}</div>\n          <select\n            *ngIf="selectHelpData"\n            class="form-control form-control-sm"\n            name="aa"\n            [formControl]="formControl">\n            <option *ngFor="let item of selectHelpData"\n              [value]="item.replace ? item : item[prop.selectHelpOption.valueField]">\n              {{\n                (\n                  item.replace ?\n                  item :\n                  (item[prop.selectHelpOption.displayField] || item[prop.selectHelpOption.valueField])\n                )  | translate\n              }}\n            </option>\n          </select>\n        </ng-container>\n\n        \x3c!-- Number --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.Number">\n          <input type="number"\n            class="form-control form-control-sm"\n            [formControl]="formControl" >\n        </ng-container>\n        \n        \x3c!-- Data Field --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.DataField">\n          \x3c!-- 有 agg，下拉选择不可手输 --\x3e\n          <div\n            *ngIf="context?.extra?.cols && context?.extra?.cols[0]"\n            class="d-flex align-items-center"\n            >\n            <nz-select\n              class="flex-fill overflow-hidden"\n              nzShowSearch\n              [nzAllowClear]="true"\n              [ngModel]="value?.name"\n              (ngModelChange)="handleSelectCol($event)"\n              >\n              <nz-option\n                *ngFor="let col of context?.extra?.cols"\n                [nzLabel]="col.label || col.name"\n                [nzValue]="col.name"\n                ></nz-option>\n            </nz-select>\n            <i\n              class="num-format-btn mti theme-color-hover"\n              [class.theme-color]="value?.numFormat"\n              (click)="handleClickDataFieldSetting()"\n              >settings</i>\n          </div>\n          \x3c!-- 无 agg，允许手输。auto complete 也没有必要了 --\x3e\n          <ng-container\n            *ngIf="!context?.extra?.cols || !context?.extra?.cols[0]">\n            <input\n              class="form-control form-control-sm"\n              [ngModel]="getColShowLabel(value?.name, value?.label)"\n              [ngModelOptions]="{updateOn: \'blur\'}"\n              (ngModelChange)="handleChangeDataFieldValue($event)"\n            >\n              \x3c!-- [nzAutocomplete]="dataFieldAuto" --\x3e\n            \x3c!-- TODO: 若确定无用，删除 --\x3e\n            \x3c!-- <nz-autocomplete #dataFieldAuto >\n              <nz-auto-option\n                *ngFor="let col of context.extra.agg?.cols"\n                (click)="handleSelectCol(col)"\n                [nzValue]="getColShowLabel(col.name, col.i18nLabel)"\n                >{{getColShowLabel(col.name, col.i18nLabel)}}</nz-auto-option>\n              <nz-auto-option\n                *ngFor="let col of context.extra.agg?.computedCols"\n                (click)="handleSelectCol(col)"\n                [nzValue]="getColShowLabel(col.name, col.i18nLabel)"\n                >{{getColShowLabel(col.name, col.i18nLabel)}}</nz-auto-option>\n            </nz-autocomplete> --\x3e\n          </ng-container>\n        </ng-container>\n\n        \x3c!-- Help --\x3e\n        \x3c!-- TODO: 统一成 help2 的 <help-input> --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.Help">\n          <div class="help-input d-flex justify-content-between align-items-center">\n            <input type="text"\n              (click)="handleClickOpenHelp()"\n              class="help-input form-control form-control-sm flex-fill"\n              readonly\n              placeholder="({{\'emptyAdj\' | translate}})"\n              [ngModel]="value?.name || value"\n              >\n            <i class="material-icons">adjust</i>\n          </div>\n        </ng-container>\n\n        \x3c!-- Help2 --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.Help2">\n          \n          <xc-help-input\n            [xcTitle]="(prop.displayName || prop.name) | translate"\n            [xcPreset]="prop.help2Option.preset"\n            [xcParts]="prop.help2Option.parts"\n            [xcLabel]="getHelp2Label()"\n            [xcValueKeys]="value?.value"\n            [xcInitSelectedPath]="value?.path"\n            (xcValueChange)="handleHelp2ValueChange($event)"\n            ></xc-help-input>\n        </ng-container>\n\n        \x3c!-- Filter --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.Filter">\n          <div class="help-input d-flex justify-content-between align-items-center">\n            <input type="text"\n              [value]="value ? value?.type + \' filter\' : undefined"\n              (click)="handleClickOpenFilter()"\n              class="help-input form-control form-control-sm flex-fill"\n              readonly\n              placeholder="({{\'emptyAdj\' | translate}})"\n              [formControl]="formControl" >\n            <i class="material-icons">adjust</i>\n          </div>\n        </ng-container>\n\n        \x3c!-- TODO: Data Param --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.DataParam">\n          \x3c!-- 没有的情况 --\x3e\n          <div\n            *ngIf="!context.extra.dataParams"\n            class="form-control form-control-sm"\n            style="padding-top: 2px;"\n            >{{\'loading\' | translate}}</div>\n          <select\n            *ngIf="context.extra.dataParams"\n            class="form-control form-control-sm"\n            name="aa"\n            [formControl]="formControl">\n            <option\n              *ngFor="let dp of context.extra.dataParams"\n              [value]="dp.id" >{{dp.name}}</option>\n          </select>\n        </ng-container>\n\n        \x3c!-- code --\x3e\n        <ng-container\n          *ngSwitchCase="\n            prop.type === PropertyTypes.Code || prop.type === PropertyTypes.Html\n            ? prop.type\n            : \'NOT_POSSIBLE_VALUE\'"\n          >\n          <div class="editor-opener">\n            <textarea\n              class="w-100"\n              [formControl]="formControl" name="" id=""\n              rows="4"\n              ></textarea>\n            <div class="toolbar justify-content-between">\n              <span class="lang">{{prop?.codeOption?.lang || \'html\'}}</span>\n              <div\n                class="d-flex align-items-center fs-12 cursor-pointer theme-color-hover"\n                style="color: #6d6d6d;"\n                (click)="handleOpenEditor(prop?.codeOption?.lang || \'html\')"\n                >\n                {{\'弹出编辑\' | translate}}\n                <i class="mti fs-14 ml-1">launch</i>\n              </div>\n            </div>\n          </div>\n        </ng-container>\n\n        \x3c!-- image --\x3e\n        <ng-container *ngSwitchCase="PropertyTypes.Image">\n          <nz-radio-group [(ngModel)]="imgInputType" class="mb-1" nzSize="small">\n            <label nz-radio-button nzValue="upload">{{\'imgInputUpload\' | translate}}</label>\n            <label nz-radio-button nzValue="URL">{{\'lastModifyTime\' | translate}}</label>\n          </nz-radio-group>\n          <ng-container\n            *ngIf="imgInputType === \'upload\'"\n            >\n            <nz-upload\n              nzName="avatar"\n              nzListType="picture-card"\n              [nzShowUploadList]="false"\n              [nzBeforeUpload]="beforeUpload"\n            >\n              <ng-container *ngIf="!value">\n                <i class="upload-icon" nz-icon [nzType]="\'plus\'"></i>\n                <div class="ant-upload-text">Upload</div>\n              </ng-container>\n              <img *ngIf="value" [src]="value" class="w-100" />\n            </nz-upload>\n            <div class="fs-12 text-black-50 p-2 bg-light mb-1">上传图片大小建议小于 500KB，否则可能延长部件加载时间。</div>\n          </ng-container>\n          <input\n            *ngIf="imgInputType === \'URL\'"\n            type="text"\n            placeholder="({{\'emptyAdj\' | translate}})"\n            class="form-control form-control-sm flex-fill"\n            [ngModelOptions]="{updateOn: \'blur\'}"\n            [ngModel]="value"\n            (ngModelChange)="handleChangeValue($event)">\n        </ng-container>\n\n        \x3c!-- 默认为 text --\x3e\n        <ng-container *ngSwitchDefault>\n          <input\n            *ngIf="prop.textOption && !prop.textOption.i18n"\n            type="text"\n            placeholder="({{\'emptyAdj\' | translate}})"\n            class="form-control form-control-sm flex-fill"\n            [ngModelOptions]="{updateOn: \'blur\'}"\n            [ngModel]="value"\n            (ngModelChange)="handleChangeValue($event)">\n          <lib-i18n-input\n            *ngIf="!prop.textOption || prop.textOption.i18n"\n            placeholder="({{\'emptyAdj\' | translate}})"\n            [value]="value"\n            (valueChange)="handleChangeValue($event)"></lib-i18n-input>\n        </ng-container>\n      \n      </div>\n    </ng-container>\n  </ng-container>\n\n\n  \x3c!-- Object --\x3e\n  <ng-container *ngIf="prop.type==PropertyTypes.Object">\n    \x3c!-- Object 专有 label --\x3e\n    <div \n      *ngIf="showLabel"\n      class="object-label-row d-flex align-items-center w-100 mb-2">\n      <label class="mr-1 ml-3 flex-shrink-0">{{(prop.displayName || prop.name) | translate}}</label>\n      <div class="line flex-fill"></div>\n    </div>\n    <div class="w-100" [class.mb-2]="!mb0">\n      <config-editor2\n        [extra]="context.extra"\n        [showCategory]="false"\n        [propsAndValues]="objPropsAndValues"\n        (onChange)="handleChangeObjectValue($event)"></config-editor2>\n    </div>\n  </ng-container>\n</div>\n'}]}],e.ctorParameters=function(){return[{type:a.HttpClient},{type:t.ChangeDetectorRef},{type:te},{type:o.WidgetPropertyService},{type:s.NzModalService},{type:i.TranslateService},{type:l.DatasetRepo},{type:l.XcHelpService}]},e.propDecorators={context:[{type:t.Input}],showLabel:[{type:t.Input}],mb0:[{type:t.Input}],propAndValue:[{type:t.Input}],onChangeValue:[{type:t.Output}]},e}();var ae=function(){function e(e){this.cd=e,this.onChange=new t.EventEmitter,this.copyGroupValues=new t.EventEmitter,this.pasteGroupValues=new t.EventEmitter,this.userCustomOnly=!1,this.showCategory=!0,this.extra={}}return Object.defineProperty(e.prototype,"propsAndValues",{set:function(e){if(e){var t=e.props,a=e.propValues;this.props=function(e,t){void 0===t&&(t=!1);var a=[];return e.forEach((function(e,r){if(!t||e.userCustom)if(e.type===n.PropertyTypes.Dynamic){var l=void 0;e.dynamicOption.name?l=o.WidgetPropertyService.GetRegisteredProperties(e.dynamicOption.name):e.dynamicOption.getOptions&&(l=e.dynamicOption.getOptions()),l&&a.push.apply(a,U(l))}else a.push(e)})),a}(t,this.userCustomOnly),this.propValues=a?l.deepClone(a):{},this.propCategories=function(e){var t=[],n={name:"other",children:[]};e&&e.forEach((function(e){if(e.category){var o=t.find((function(t){return t.name===e.category}));o||(o={name:e.category,children:[]},t.push(o)),o.children.push(e)}else n.children.push(e)}));n.children.length>0&&t.push(n);return t}(this.props)}},enumerable:!0,configurable:!0}),e.prototype.handleValueChange=function(e,t){this._changeValue(e,t)},e.prototype._changeValue=function(e,t){this.propValues[e.name]=t,this.propValues=l.deepClone(this.propValues),this.onChange.emit({propName:e.name,value:t}),e.afterChange&&e.afterChange(this.propValues,t,this.cd)},e.prototype.ngOnInit=function(){},e.prototype.handleCopyCEGroupPVs=function(e,t){e.preventDefault(),e.stopPropagation(),this.copyGroupValues.emit({group:t,allValues:this.propValues})},e.prototype.handlePasteCEGroupPVs=function(e,t){e.preventDefault(),e.stopPropagation(),this.pasteGroupValues.emit({group:t,allValues:this.propValues})},e.decorators=[{type:t.Component,args:[{selector:"config-editor2",template:'<div class="config-editor">\n  <ng-content></ng-content>\n\n  <accordion *ngIf="showCategory" [isAnimated]="true">\n    <accordion-group\n      *ngFor="let category of propCategories"\n      [isOpen]="true" >\n      <div accordion-heading\n        class="heading d-flex justify-content-between" >\n        <div class="d-flex align-items-center">\n          \x3c!-- <i class="material-icons status-icon mr-2">chevron_right</i> --\x3e\n          {{category.name | translate}}\n        </div>\n        <div class="d-flex align-items-center">\n          <nz-dropdown nzTrigger="click" class="d-flex">\n            <i\n              nz-dropdown\n              class="material-icons"\n              >more_vert</i>\n            <ul nz-menu nzSelectable>\n              <li\n                (click)="handleCopyCEGroupPVs($event, category)"\n                nz-menu-item\n                >{{\'Copygroupvalues\' | translate}}</li>\n              <li\n                nz-menu-item\n                (click)="handlePasteCEGroupPVs($event, category)"\n                >{{\'Pastevaluesintogroup\' | translate}}</li>\n            </ul>\n          </nz-dropdown>\n        </div>\n      </div>\n      <ng-container *ngTemplateOutlet="ceList; context: {$implicit: category.children}"></ng-container>\n    </accordion-group>\n  </accordion>\n\n  <ng-container *ngIf="!showCategory">\n    <ng-container *ngTemplateOutlet="ceList; context: {$implicit: props}"></ng-container>\n  </ng-container>\n\n</div>\n<ng-template #ceList let-props>\n  <ul>\n    \x3c!-- -len:{{props.length}}- --\x3e\n    <li *ngFor="let prop of props">\n      <ng-container *ngIf="propValues && (!prop.ifShow || prop.ifShow(propValues))">\n        \x3c!-- 非数组 --\x3e\n        <ce-item\n          *ngIf="!prop.isArray && propValues"\n          [context]="{\n            extra: extra\n          }"\n          [propAndValue]="{ prop: prop, value: propValues[prop.name] }"\n          (onChangeValue)="handleValueChange(prop, $event)"\n          ></ce-item>\n\n        \x3c!-- 数组 --\x3e\n        <div *ngIf="prop.isArray" class="row no-gutters">\n          <label\n            nz-tooltip\n            [nzTitle]="(prop.displayName || prop.name) | translate"\n            nzPlacement="left"\n            class="col-sm-3 col-form-label">{{(prop.displayName || prop.name) | translate}}</label>\n          <div class="col-sm-9 col-form-right">\n            \x3c!-- <span *ngIf="prop.isArray && propValues[prop.name]"\n              class="length">({{propValues[prop.name].length}}项)</span> --\x3e\n            <ce-array\n              [context]="{\n                extra: extra\n              }"\n              [propAndValue]="{ prop: prop, value: propValues[prop.name] }"\n              (onChangeValue)="handleValueChange(prop, $event)"\n              ></ce-array>\n          </div>\n        </div>\n\n      </ng-container>\n    </li>\n  </ul>\n</ng-template>',changeDetection:t.ChangeDetectionStrategy.OnPush,encapsulation:t.ViewEncapsulation.None,styles:[".config-editor accordion accordion-group:first-child .heading{border-top:none}.config-editor accordion accordion-group .heading{font-size:13px;font-weight:700;padding:14px;border-top:1px solid #eeeff0}.config-editor accordion accordion-group .card{background:0 0}.config-editor accordion accordion-group .material-icons{font-size:18px;transition:transform .3s}.config-editor accordion accordion-group.panel-open .status-icon{transform:rotate(90deg)}.config-editor accordion accordion-group .panel-collapse{padding:2px 10px 5px 15px}.config-editor>ul>li:last-child ce-item>.row{margin-bottom:0!important}.config-editor .row{margin-bottom:5px}.config-editor .row .col-form-label{font-size:12px;padding:4px 0}.config-editor .row .col-form-right{padding:0 0 0 10px}.config-editor .row .col-form-right.col-form-right-plain{padding:4px 10px}.config-editor .row .custom-checkbox{padding-top:2px}.config-editor .row .color-picker-custom{cursor:default}.config-editor .row .color-picker-custom .color-indicator{width:22px;height:22px;display:inline-block;border-radius:4px;border:1px solid rgba(0,0,0,.14)}.config-editor .row .color-picker-custom .color-value{font-size:12px;font-weight:700}.config-editor ce-array{width:100%}.config-editor ce-array .ce-array>ul>li{display:flex;align-items:stretch;position:relative;background:#f9f9fb;margin-bottom:5px;border-radius:5px}.config-editor ce-array .ce-array>ul>li:hover .remove-btn::after{content:'close';font-family:'Material Icons';position:absolute;left:0;top:0;width:100%;font-size:14px;background:#bcbcce}.config-editor ce-array .ce-array>ul>li .index{position:absolute;font-size:24px;top:0;left:10px;text-align:right;font-weight:700;color:#dbdee5}.config-editor ce-array .ce-array>ul>li .remove-btn{cursor:pointer;border-radius:3px;transition:.2s;background:#bcbcce;position:absolute;top:-8px;right:-10px;color:#fff;width:15px;height:15px;text-align:center;line-height:15px;font-size:10px;zoom:.9;overflow:hidden}.config-editor ce-array .ce-array>ul>li .remove-btn:hover::after{background:#e10000}.config-editor ce-array .btn-add-padding .btn-add{box-shadow:none;padding:4px;background:#f9f9fb;color:#7e7e7e;border-radius:5px}.config-editor ce-array .btn-add-padding .btn-add:hover{background:#f3f3f5;color:inherit}.config-editor ce-item .form-control-sm{height:24px;padding:0 5px}.config-editor .object-label-row label{font-size:13px;opacity:.6}.config-editor .object-label-row .line{border-top:1px solid rgba(0,0,0,.1);width:100%}.help-input{cursor:pointer}.help-input:hover i{color:#687380}.help-input input{background:rgba(234,237,240,.33);cursor:pointer}.help-input input:focus{box-shadow:none}.help-input i{font-size:14px;color:#b2bbc6;margin:0 5px;transition:.3s}.help-input2{background:#f9f9fb;color:#919191;border-radius:5px;padding:3px 10px;cursor:pointer}.editor-opener .code,.editor-opener textarea{background:#303030;padding:3px;color:#d0d0d0;border-radius:5px;position:relative;min-height:28px;font-size:12px;overflow:auto}.editor-opener .code:hover .mask,.editor-opener textarea:hover .mask{opacity:1}.editor-opener .code .mask,.editor-opener textarea .mask{position:absolute;top:0;height:100%;width:100%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;background:#303030d1;opacity:0;transition:opacity .2s}.editor-opener .toolbar{margin-top:3px;display:flex}.editor-opener .toolbar .lang{background:#ececef;padding:1px 8px 2px;border-radius:4px;color:#74747a;line-height:1;display:block}.num-format-btn{padding:0 5px;font-size:16px;cursor:pointer;transition:color .3s;color:#9a9a9c}"]}]}],e.ctorParameters=function(){return[{type:t.ChangeDetectorRef}]},e.propDecorators={onChange:[{type:t.Output}],copyGroupValues:[{type:t.Output}],pasteGroupValues:[{type:t.Output}],userCustomOnly:[{type:t.Input}],propsAndValues:[{type:t.Input}],showCategory:[{type:t.Input}],extra:[{type:t.Input}]},e}();var re=function(){function e(){this.palettesPure=l.presetPalettesPure,this.palettesGradient=l.presetPalettesGradient,this.color="",this.types=["gradient","pure"],this.colorChange=new t.EventEmitter}return e.prototype.ngOnInit=function(){},e.prototype.colorSelect=function(e){this.color=e,this.colorChange.emit(e)},e.decorators=[{type:t.Component,args:[{selector:"epp-color-picker",template:'<div class="epp-color-picker">\n  <nz-dropdown nzTrigger="click">\n    \x3c!-- 外面，展示颜色、色值 --\x3e\n    <div nz-dropdown>\n      <ng-container *ngIf="colorBlock; else textTempalte">\n        <ng-container *ngTemplateOutlet="colorBlock"></ng-container>\n      </ng-container>\n      <ng-template #textTempalte>\n        <div\n          class="color-block"\n          [ngStyle]="{\'background\' : color?.indexOf(\',\')>-1 ? \'linear-gradient(to right,\'+ color +\')\' : color}"\n          >\n        </div>\n      </ng-template>\n    </div>\n    \x3c!-- palettes --\x3e\n    \x3c!-- 里面，颜色选择器、色板 --\x3e\n    <nz-tabset class="dropdown-panel">\n      <nz-tab [nzTitle]="\'pureColor\' | translate"  *ngIf="!types || types.includes(\'pure\')">\n\n        \x3c!-- 透明度条 --\x3e\n        \x3c!-- <div class="d-flex justify-content-between">\n          <span>透明度</span>\n          <span>${value}</span>\n        </div> --\x3e\n        \x3c!-- <nz-slider [(ngModel)]="value1" [nzDisabled]="disabled"></nz-slider> --\x3e\n\n        \x3c!-- 预览 --\x3e\n        <ng-container *ngTemplateOutlet="colorBlock"></ng-container>\n\n        \x3c!-- 输入 --\x3e\n        <input\n          class="form-control form-control-sm mb-3 text-center"\n          type="text"\n          [ngModel]="color"\n          (ngModelChange)="colorSelect($event)"\n          >\n        \n        \x3c!-- 色板 --\x3e\n        <ng-container *ngFor="let palette of palettesPure">\n          <div class="fs-12 my-1">{{palette.name | translate }}</div>\n          <ul class="color-list">\n            <li\n              *ngFor="let color of palette.colors"\n              [ngStyle]="{\n                background: color.includes(\',\') && !color.includes(\'rgb\')\n                ? \'linear-gradient(to right,\' + color + \')\'\n                : color\n              }"\n              (click)="colorSelect(color)"\n            ></li>\n            </ul>\n        </ng-container>\n\n      </nz-tab>\n\n      <nz-tab [nzTitle]="\'grdient\' | translate" *ngIf="!types || types.includes(\'gradient\')">\n        <ng-container *ngFor="let palette of  palettesGradient">\n          <div class="fs-12 my-1">{{palette.name | translate }}</div>\n          <ul class="color-list">\n            <li\n              *ngFor="let color of palette.colors"\n              [ngStyle]="{\n                background: color.indexOf(\',\') > -1\n                ? \'linear-gradient(to right,\' + color + \')\'\n                : color\n              }"\n              (click)="colorSelect(color)"\n            ></li>\n            </ul>\n        </ng-container>\n      </nz-tab>\n    </nz-tabset>\n  </nz-dropdown>\n</div>',styles:[".color-block{width:60px;height:26px;border-radius:2px;cursor:pointer;border:1px solid #dcdcdc}.dropdown-panel{background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.15);padding:0 10px 10px}ul.color-list{display:flex;flex-wrap:wrap;width:220px}ul.color-list li{width:20px;height:20px;margin:0 3px 3px 0;border:1px solid #e6e6e6;border-radius:3px;transition:.1s;cursor:pointer}ul.color-list li:hover{transform:scale(1.1);transition:.1s}"]}]}],e.ctorParameters=function(){return[]},e.propDecorators={list:[{type:t.Input}],palettesPure:[{type:t.Input}],palettesGradient:[{type:t.Input}],color:[{type:t.Input}],types:[{type:t.Input}],colorChange:[{type:t.Output}],colorBlock:[{type:t.ContentChild,args:["colorBlock"]}]},e}();var le=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[re],imports:[c.CommonModule,u.NzDropDownModule,b.NzTabsModule,b.NzSliderModule,r.FormsModule,i.TranslateModule],exports:[re]}]}],e}(),ie=function(e,t){this.code=e,this.name=t};var se=function(){};var ce=function(){function e(e,n,o){var a=this;this.translate=e,this.cd=n,this.config=o,this.required=!1,this.maxLength=20,this.valueChangeOnBlur=!0,this.valueChange=new t.EventEmitter,this.innerValue=new l.I18nValue,this.tempValue=new l.I18nValue,this.showingDropdown=!1,this.langs=[],this.curLang=this.translate.currentLang,this.translate.onLangChange.subscribe((function(e){return a.setMainLang(e.lang)})),o&&o.langs&&(o.langs.then?o.langs.then((function(e){return a.setLangs(e)})):this.setLangs(o.langs))}return e.prototype.ngAfterViewInit=function(){var e=this;this.mainInput.statusChanges.subscribe((function(t){e.valid="VALID"===t}))},e.prototype.setLangs=function(e){this.langs=e,this.setMainLang(this.translate.currentLang)},e.prototype.setMainLang=function(e){this.curLang=e;var t=this.langs.findIndex((function(t){return t.code===e}));this.orderedLangs=this.langs.slice(),v.moveItemInArray(this.orderedLangs,t,0)},e.prototype.ngOnChanges=function(e){var t;if(e.value.currentValue!==e.value.previousValue){var n="string"!=typeof this.value&&this.value?this.value:((t={})[this.translate.currentLang]=this.value,t);this.innerValue=N({},n),this.tempValue=N({},n)}},e.prototype.handleInputChange=function(){this.valueChange.emit(this.innerValue),this.tempValue=N({},this.innerValue)},e.prototype.handleConfirm=function(){this.innerValue=N({},this.tempValue),this.valueChange.emit(this.innerValue),this.showingDropdown=!1},e.prototype.handleCancel=function(){this.tempValue=N({},this.innerValue),this.showingDropdown=!1},e.decorators=[{type:t.Component,args:[{selector:"lib-i18n-input",template:'\n<div class="i18n-input position-relative">\n  \x3c!-- [formControl]="mainInputControl" --\x3e\n  \x3c!-- [placeholder]="placeholder" --\x3e\n  <input type="text"\n    style="padding: 3px 22px 3px 5px;"\n    *ngIf="innerValue"\n    #mainInput="ngModel"\n    [placeholder]="placeholder || \'input\' | translate"\n    class="form-control form-control-sm"\n    [(ngModel)]="innerValue[curLang]"\n    [ngModelOptions]="{updateOn: valueChangeOnBlur ? \'blur\' : \'change\'}"\n    (ngModelChange)="handleInputChange()"\n    [required]="required"\n    [maxlength]="maxLength"\n    >\n  \x3c!-- 多语字段按钮 --\x3e\n  <nz-dropdown\n    nzTrigger="click"\n    nzPlacement="bottomRight"\n    [nzClickHide]="false"\n    [(nzVisible)]="showingDropdown">\n    <span nz-dropdown [class.active]="showingDropdown" class="open-icon material-icons">language</span>\n    <ul nz-menu style="width: 300px">\n      <li\n        class="d-flex align-items-center pl-2 pr-2 pt-1"\n        *ngFor="let lang of orderedLangs"\n        >\n        <label style="width: 80px" class="col-form-label mr-2 fs-12">{{(\'lang:\'+lang.code) | translate}}</label>\n        <input\n          class="flex-fill"\n          [(ngModel)]="tempValue[lang.code]"\n          class="form-control form-control-sm"\n          type="text"\n          [required]="required"\n          [maxlength]="(curLang === \'en\') ? (maxLength * 2) : maxLength"\n          >\n      </li>\n      <li class="d-flex justify-content-end pl-2 pr-2 pt-2 pb-1">\n        <button class="btn btn-primary mr-1" (click)="handleConfirm()">{{\'confirm\' | translate}}</button>\n        <button class="btn btn-secondary" (click)="handleCancel()">{{\'cancel\' | translate}}</button>\n      </li>\n    </ul>\n  </nz-dropdown>\n</div>',styles:[".i18n-input .open-icon{position:absolute;top:0;font-size:16px;right:0;color:#dcdcdc;cursor:pointer;height:100%;display:flex;align-items:center;padding:5px;transition:.3s}"]}]}],e.ctorParameters=function(){return[{type:i.TranslateService},{type:t.ChangeDetectorRef},{type:se,decorators:[{type:t.Optional}]}]},e.propDecorators={placeholder:[{type:t.Input}],value:[{type:t.Input}],required:[{type:t.Input}],maxLength:[{type:t.Input}],valueChangeOnBlur:[{type:t.Input}],valueChange:[{type:t.Output}],mainInput:[{type:t.ViewChild,args:["mainInput"]}]},e}();var pe=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[ce],imports:[c.CommonModule,u.NzDropDownModule,r.FormsModule,i.TranslateModule],exports:[ce]}]}],e}(),de=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[ne],imports:[c.CommonModule,y.NzInputNumberModule,r.FormsModule,m.NzSelectModule,pe,i.TranslateModule]}]}],e}(),ue=new t.InjectionToken("Global config for sortablejs"),me=function(){function e(e){this.target=e}return e.prototype.insert=function(e,t){this.isFormArray?this.target.insert(e,t):this.target.splice(e,0,t)},e.prototype.get=function(e){return this.isFormArray?this.target.at(e):this.target[e]},e.prototype.remove=function(e){var t;return this.isFormArray?(t=this.target.at(e),this.target.removeAt(e)):t=this.target.splice(e,1)[0],t},Object.defineProperty(e.prototype,"isFormArray",{get:function(){return!!this.target.at&&!!this.target.insert&&!!this.target.reset},enumerable:!0,configurable:!0}),e}();var ge=function(){function e(e){this.bindings=e.map((function(e){return new me(e)}))}return e.prototype.injectIntoEvery=function(e,t){this.bindings.forEach((function(n,o){return n.insert(e,t[o])}))},e.prototype.getFromEvery=function(e){return this.bindings.map((function(t){return t.get(e)}))},e.prototype.extractFromEvery=function(e){return this.bindings.map((function(t){return t.remove(e)}))},Object.defineProperty(e.prototype,"provided",{get:function(){return!!this.bindings.length},enumerable:!0,configurable:!0}),e}();var he=function(){function e(){}return e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ngInjectableDef=t.defineInjectable({factory:function(){return new e},token:e,providedIn:"root"}),e}();var fe=function(e){return e.hasOwnProperty("newDraggableIndex")&&e.hasOwnProperty("oldDraggableIndex")?{new:e.newDraggableIndex,old:e.oldDraggableIndex}:{new:e.newIndex,old:e.oldIndex}},be=function(){function e(e,n,o,a,r){this.globalConfig=e,this.service=n,this.element=o,this.zone=a,this.renderer=r,this.sortablejsInit=new t.EventEmitter}return e.prototype.ngOnInit=function(){C&&C.create&&this.create()},e.prototype.ngOnChanges=function(e){var t=this,n=e.sortablejsOptions;if(n&&!n.isFirstChange()){var o=n.previousValue,a=n.currentValue;Object.keys(a).forEach((function(e){a[e]!==o[e]&&t.sortableInstance.option(e,t.options[e])}))}},e.prototype.ngOnDestroy=function(){this.sortableInstance&&this.sortableInstance.destroy()},e.prototype.create=function(){var e=this,t=this.sortablejsContainer?this.element.nativeElement.querySelector(this.sortablejsContainer):this.element.nativeElement;setTimeout((function(){e.sortableInstance=C.create(t,e.options),e.sortablejsInit.emit(e.sortableInstance)}),0)},e.prototype.getBindings=function(){return this.sortablejs?this.sortablejs instanceof ge?this.sortablejs:new ge([this.sortablejs]):new ge([])},Object.defineProperty(e.prototype,"options",{get:function(){return N({},this.optionsWithoutEvents,this.overridenOptions)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"optionsWithoutEvents",{get:function(){return N({},this.globalConfig||{},this.sortablejsOptions||{})},enumerable:!0,configurable:!0}),e.prototype.proxyEvent=function(e){for(var t=this,n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];this.zone.run((function(){var o;t.optionsWithoutEvents&&t.optionsWithoutEvents[e]&&(o=t.optionsWithoutEvents)[e].apply(o,U(n))}))},Object.defineProperty(e.prototype,"isCloning",{get:function(){return"clone"===this.sortableInstance.options.group.checkPull(this.sortableInstance,this.sortableInstance)},enumerable:!0,configurable:!0}),e.prototype.clone=function(e){return(this.sortablejsCloneFunction||function(e){return e})(e)},Object.defineProperty(e.prototype,"overridenOptions",{get:function(){var e=this;return{onAdd:function(t){e.service.transfer=function(n){e.getBindings().injectIntoEvery(t.newIndex,n),e.proxyEvent("onAdd",t)},e.proxyEvent("onAddOriginal",t)},onRemove:function(t){var n=e.getBindings();n.provided&&(e.isCloning?(e.service.transfer(n.getFromEvery(t.oldIndex).map((function(t){return e.clone(t)}))),e.renderer.removeChild(t.item.parentNode,t.item),e.renderer.insertBefore(t.clone.parentNode,t.item,t.clone),e.renderer.removeChild(t.clone.parentNode,t.clone)):e.service.transfer(n.extractFromEvery(t.oldIndex)),e.service.transfer=null),e.proxyEvent("onRemove",t)},onUpdate:function(t){var n=e.getBindings(),o=fe(t);n.injectIntoEvery(o.new,n.extractFromEvery(o.old)),e.proxyEvent("onUpdate",t)}}},enumerable:!0,configurable:!0}),e.decorators=[{type:t.Directive,args:[{selector:"[sortablejs]"}]}],e.ctorParameters=function(){return[{type:void 0,decorators:[{type:t.Optional},{type:t.Inject,args:[ue]}]},{type:he},{type:t.ElementRef},{type:t.NgZone},{type:t.Renderer2}]},e.propDecorators={sortablejs:[{type:t.Input}],sortablejsContainer:[{type:t.Input}],sortablejsOptions:[{type:t.Input}],sortablejsCloneFunction:[{type:t.Input}],sortablejsInit:[{type:t.Output}]},e}();var ye=function(){function e(){}return e.forRoot=function(t){return{ngModule:e,providers:[{provide:ue,useValue:t}]}},e.decorators=[{type:t.NgModule,args:[{declarations:[be],exports:[be]}]}],e}(),ve=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[ae,$,oe],imports:[c.CommonModule,d.NzAutocompleteModule,u.NzDropDownModule,r.FormsModule,r.ReactiveFormsModule,f.AccordionModule,i.TranslateModule,pe,le,h.NzToolTipModule,g.NzSwitchModule,m.NzSelectModule,l.XcHelp2Module,de,p.NzUploadModule,x.NzIconModule,b.NzRadioModule,ye.forRoot({animation:150})],exports:[ae,$,oe]}]}],e}(),xe=function(){function e(){}return e.prototype.transform=function(e,t){var n=_(t[0],2),o=n[0],a=void 0===o?"parentId":o,r=n[1],l=void 0===r?"id":r,i=e.filter((function(e){return!e[a]}));return function e(t,n,o,a){n.forEach((function(n){n.value=n.key=n[a],n.label=n.title=n.name,n.children=t.filter((function(e){return e[o]===n[a]})),e(t,n.children,o,a)}))}(e,i,a,l),i},e.decorators=[{type:t.Pipe,args:[{name:"toTree"}]}],e}();var Ce=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[xe],imports:[c.CommonModule],exports:[xe]}]}],e}(),we=function(){function e(e,n,o){this.help=e,this.cd=n,this.translate=o,this.title=this.translate.translations[this.translate.currentLang].pleaseSelect,this.placeholder=this.translate.translations[this.translate.currentLang].pleaseSelect,this.structure=X.table,this.tableFields=["name"],this.displayField="name",this.selectedItemChange=new t.EventEmitter}return e.prototype.ngOnInit=function(){},e.prototype.handleClickOpenHelp=function(){var e=this;this.help.show({title:this.title,structure:this.structure,getData:this.getData,tableFields:this.tableFields,getTableOnSelectTree:this.getTableOnSelectTree,expandedKeys:this.expandedKeys}).subscribe((function(t){e.selectedItem=t,e.selectedItemChange.emit(t),e.display=t[e.displayField],e.cd.markForCheck()}))},e.decorators=[{type:t.Component,args:[{selector:"epp-help",template:'\n<div class="help-input d-flex justify-content-between align-items-center position-relative">\n  <input type="text"\n    readonly\n    [placeholder]="placeholder"\n    class="form-control form-control-sm flex-fill"\n    (click)="handleClickOpenHelp()"\n    [ngModel]="display"\n    >\n    \x3c!-- [ngModel]="selectedItem ? selectedItem[displayField] : display" --\x3e\n  <i class="material-icons pointer-events-none">more_horiz</i>\n</div>',styles:[".help-input{width:100%;cursor:pointer}.help-input:hover i{color:#687380}.help-input input{padding-right:26px;background:#fff;cursor:pointer}.help-input input:focus{box-shadow:none}.help-input input::-moz-placeholder{opacity:.6}.help-input input::placeholder{opacity:.6}.help-input i{font-size:18px;color:#b2bbc6;margin:0 5px;transition:.3s;position:absolute;right:0;top:50%;transform:translateY(-50%)}"]}]}],e.ctorParameters=function(){return[{type:te},{type:t.ChangeDetectorRef},{type:i.TranslateService}]},e.propDecorators={title:[{type:t.Input}],placeholder:[{type:t.Input}],structure:[{type:t.Input}],getData:[{type:t.Input}],tableFields:[{type:t.Input}],displayField:[{type:t.Input}],getTableOnSelectTree:[{type:t.Input}],display:[{type:t.Input}],expandedKeys:[{type:t.Input}],selectedItemChange:[{type:t.Output}]},e}();var ze=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[Y,we,Q],imports:[c.CommonModule,r.FormsModule,w.NzTableModule,l.SearchInputModule,z.NzTreeModule,Ce,s.NzModalModule,i.TranslateModule],exports:[Y,we]}]}],e}(),Ie=function(){function e(){this.required=!1,this.maxLength=500,this.valueChange=new t.EventEmitter,this.toBeReset=!1,this.toBeResetChange=new t.EventEmitter}return e.prototype.validate=function(e){},e.prototype.registerOnValidatorChange=function(e){},e.prototype.ngOnInit=function(){},e.prototype.reset=function(){this.toBeReset=!1,this.toBeResetChange.emit(this.toBeReset),this.value="",this.valueChange.emit(this.value)},e.decorators=[{type:t.Component,args:[{selector:"epp-password",template:'\x3c!-- [name]="param.name" --\x3e\n<input\n  *ngIf="!toBeReset"\n  #ngModel="ngModel"\n  type="password"\n  class="form-control form-control-sm"\n  [placeholder]="placeholder | translate"\n  [ngModel]="value"\n  [required]="required"\n  [maxLength]="maxLength"\n  (ngModelChange)="valueChange.emit($event)"\n  />\n<button\n  *ngIf="toBeReset"\n  class="btn btn-primary"\n  (click)="reset()"\n  >{{\'reset\' | translate}}</button>',styles:[""]}]}],e.ctorParameters=function(){return[]},e.propDecorators={placeholder:[{type:t.Input}],required:[{type:t.Input}],maxLength:[{type:t.Input}],value:[{type:t.Input}],valueChange:[{type:t.Output}],toBeReset:[{type:t.Input}],toBeResetChange:[{type:t.Output}],ngModel:[{type:t.ViewChild,args:["ngModel"]}]},e}();var ke=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[Ie],imports:[r.FormsModule,i.TranslateModule,c.CommonModule],providers:[{provide:r.NG_VALIDATORS,useExisting:Ie}],exports:[Ie]}]}],e}();window.DashboardApi||(window.DashboardApi={});var Pe=[{month:"1月",totalSale:100,lastYear:120,area1:450,area2:90,area3:60},{month:"2月",totalSale:300,lastYear:220,area1:280,area2:70,area3:70},{month:"3月",totalSale:400,lastYear:380,area1:130,area2:90,area3:80},{month:"4月",totalSale:300,lastYear:420,area1:180,area2:75,area3:75},{month:"5月",totalSale:500,lastYear:290,area1:300,area2:100,area3:60},{month:"6月",totalSale:200,lastYear:350,area1:80,area2:60,area3:64},{month:"7月",totalSale:400,lastYear:220,area1:280,area2:60,area3:72}],De=["#F5B805","#FF9300","#EC7658","#897AFB","#5E6EEB","#4D97FF","#01BBC7","#3DDB88","#A4EA4D","#93A3D3"],Te=["#FBDD0C,#F5B805","#FFB046,#FF9300","#FF9579,#EC7658","#8B99FF,#897AFB","#7F8DFF,#5E6EEB","#79B1FF,#4D97FF","#00DBE9,#01BBC7","#46FA9B,#3DDB88","#C1FF73,#A4EA4D","#B5C7FD,#93A3D3"];var Me=function(){function e(e){var n=this;this.cd=e,this.widgetComponents=[],this.getData=null,this.widgetInfosAll=null,this.widgetPropValuesMap=null,this.curEditingWidgetInfoAll=null,this.curEditingWC=null,this.checkedWidgets=[],this.copySuccessStatus=!1,this.innerGetData=function(){return(n.getData?n.getData():k.of(Pe)).pipe(P.tap((function(e){n.dataFields=Object.keys(e[0])})),P.delay(1))},this.dataFields=[],this.savePropValuesDebounce=new t.EventEmitter,this.savePropValuesDebounce.pipe(P.debounceTime(5e3)).subscribe((function(){localStorage.setItem("PROP_VALUES",JSON.stringify(n.widgetPropValuesMap))})),l.PlThemeColors.SetColors(De,Te)}return e.prototype.ngOnInit=function(){var e=this;this.widgetInfosAll=this.widgetComponents.map((function(e){var t=I.paramCase(e.name);return t.includes("-component")?t.replace("-component",""):t.replace("component",""),{widgetComponent:e,name:I.paramCase(e.name).replace("-component",""),version:"DEV_PREVIEW"}}));var t=JSON.parse(localStorage.getItem("PROP_VALUES"));t?this.widgetPropValuesMap=t:(this.widgetPropValuesMap={},this.widgetInfosAll.forEach((function(t){e.widgetPropValuesMap[t.name]={}}))),(JSON.parse(localStorage.getItem("CHECKED_WIDGETS"))||[]).forEach((function(t){var n=e.widgetInfosAll.find((function(e){return e.name===t}));n&&(n.checked=!0)})),this._refreshCheckStatus()},e.prototype.handleClickWidget=function(e,t){this.curEditingWidgetInfoAll=e,this.curEditingWC=t},e.prototype.handleChangePropertyValue=function(e){var t=e.propName,n=e.value,o=this.curEditingWidgetInfoAll.name;this.curEditingWC.setPropertyValue(t,n),this.widgetPropValuesMap[o]||(this.widgetPropValuesMap[o]={}),this.widgetPropValuesMap[o][t]=n,this.savePropValuesDebounce.emit()},e.prototype.handleWidgetLoaded=function(e,t){e.properties=t.properties,e.allPropValues=t.propValues},e.prototype.handleWidgetCheckChange=function(e,t){e.checked=t,this._refreshCheckStatus()},e.prototype.handleCheckAllChange=function(e){this.widgetInfosAll.forEach((function(t){return t.checked=e})),this._refreshCheckStatus()},e.prototype.copyBuildCmd=function(){var e=this;navigator.clipboard.writeText(this.getBuildCommand()).then((function(){e.copySuccessStatus=!0,e.cd.markForCheck(),setTimeout((function(){e.copySuccessStatus=!1,e.cd.markForCheck()}),800)}))},e.prototype._refreshCheckStatus=function(){this.checkedWidgets=this.widgetInfosAll.filter((function(e){return e.checked}));var e=this.checkedWidgets.map((function(e){return e.name}));localStorage.setItem("CHECKED_WIDGETS",JSON.stringify(e))},e.prototype.getBuildCommand=function(){return this.checkedWidgets.map((function(e){return"widget build "+e.name})).join("; ")},e.decorators=[{type:t.Component,args:[{selector:"widget-project-preview-page",template:'<div class=" widget-project-public d-flex align-items-stretch">\n  \x3c!-- left --\x3e\n  <div class="left flex-fill h-100 p-2">\n    \x3c!-- <div class="container"> --\x3e\n    <div class="title d-flex align-items-center">\n      <i class="material-icons">dashboard</i>\n      <span class="main">Widget Project</span>\n      \x3c!-- <span class="title-badge">{{title}}</span> --\x3e\n    </div>\n    <div class="content mb-5">\n      <p>{{\'addAndBuild\' | translate}}</p>\n      <p>{{\'previewWidget\' | translate}}</p>\n      <div *ngIf="checkedWidgets.length === 0">{{\'generateBuildCommand\' | translate}}</div>\n      <p *ngIf="checkedWidgets.length > 0">{{\'buildCommand\' | translate}}</p>\n      <div *ngIf="checkedWidgets.length > 0" class="build-cmd">\n        <div>\n          <span (click)="copyBuildCmd()" class="copy-btn">{{copySuccessStatus ? \'copySuccess\' : \'copy\' | translate}}</span>\n        </div>\n        {{getBuildCommand()}}\n      </div>\n    </div>\n    \x3c!-- </div> --\x3e\n    \x3c!-- 全选 --\x3e\n    <div class="custom-control custom-checkbox">\n      <input\n        type="checkbox"\n        class="custom-control-input"\n        [ngModel]="widgetInfosAll.length === checkedWidgets.length"\n        (ngModelChange)="handleCheckAllChange($event)"\n        id="selectAll">\n      <label class="custom-control-label" for="selectAll">{{\'selectAll\' | translate}}</label>\n    </div>\n\n    \x3c!-- 元部件列表 --\x3e\n    <ul class="d-flex flex-wrap">\n      <li\n        *ngFor="let widgetInfoAll of widgetInfosAll"\n        class="widget-container-debug {{widgetInfoAll.name}} d-flex flex-column overflow-hidden">\n        <div class="header">\n          <div class="custom-control custom-checkbox">\n            <input\n              type="checkbox"\n              (ngModelChange)="handleWidgetCheckChange(widgetInfoAll, $event)"\n              [ngModel]="widgetInfoAll.checked"\n              class="custom-control-input" [id]="widgetInfoAll.name">\n            <label class="custom-control-label" [for]="widgetInfoAll.name">{{widgetInfoAll.name}}</label>\n          </div>\n        </div>\n        <div\n          class="wrapper flex-fill"\n          (click)="handleClickWidget(widgetInfoAll, wc)"\n          [class.active]="widgetInfoAll==curEditingWidgetInfoAll">\n          <lib-widget #wc\n            [mode]="1"\n            [assetsBaseUrl]="\'assets/\' + widgetInfoAll.name + \'/\'"\n            [basicWidgetInfo]="widgetInfoAll"\n            [propValues]="widgetPropValuesMap[widgetInfoAll.name]"\n            (widgetLoaded)="handleWidgetLoaded(widgetInfoAll, $event)"\n            [getData]="innerGetData">\n          </lib-widget>\n        </div>\n      </li>\n    </ul>\n  </div>\n\n  \x3c!-- right --\x3e\n  <div class="right flex-shrink-0">\n    <div *ngIf="curEditingWidgetInfoAll" class="ce2-wrapper">\n        \x3c!-- {{widgetPropertiesMap[curEditingWidget.name] | json}} --\x3e\n      <config-editor2\n        [propsAndValues]="{\n          props: curEditingWidgetInfoAll.properties,\n          propValues: curEditingWidgetInfoAll.allPropValues\n        }"\n        (onChange)="handleChangePropertyValue($event)"\n        [extra]="{\n          dataFields: dataFields\n        }"\n        ></config-editor2>\n    </div>\n    <div class="placeholder" *ngIf="!curEditingWidgetInfoAll">{{\'selectLeftWidget\' | translate}}</div>\n  </div>\n\n</div>\n  ',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".widget-project-public{height:100vh}.widget-project-public .title{font-size:30px;font-weight:700;color:#c8cdd4;margin-bottom:20px}.widget-project-public .title .material-icons{font-size:40px;vertical-align:middle}.widget-project-public .title .main{margin:0 15px}.widget-project-public .title .title-badge{font-size:12px;font-weight:400;background:#c8cdd4;color:#fff;padding:3px 6px;border-radius:3px;opacity:.6}.widget-project-public .content{color:#061c2d;font-size:12px}.widget-project-public .content p{margin-bottom:5px}.widget-project-public .left,.widget-project-public .right{height:100%;overflow-y:scroll}.widget-project-public .right{width:350px;border-left:6px solid #f9f9fb;background:#f9f9fb}.widget-project-public .right .ce2-wrapper{height:100%;background:#fff}.widget-project-public .copy-btn{font-size:12px;padding:3px 10px;background:#e7e7e7;border-radius:3px;cursor:pointer;transition:.3s}.widget-project-public .build-cmd{max-width:93%;font-family:consolas;background:#f8f8f8;color:#072d3f;font-size:14px;padding:10px 15px;border-radius:3px}.widget-container-debug{width:30%;height:300px;margin:10px 15px 10px 0}.widget-container-debug .header{padding:3px 0}.widget-container-debug .header .custom-control-input,.widget-container-debug .header .custom-control-label{cursor:pointer}.widget-container-debug .header .custom-control-label{font-size:14px;font-family:consolas}.widget-container-debug .wrapper{box-shadow:0 5px 15px 0 #e5edf0;transition:box-shadow .3s;border-radius:3px;vertical-align:top}.widget-container-debug .wrapper:hover{box-shadow:0 0 0 2px rgba(0,0,0,.06)}.widget-container-debug .wrapper.active{box-shadow:0 0 0 2px #388fff}"]}]}],e.ctorParameters=function(){return[{type:t.ChangeDetectorRef}]},e.propDecorators={widgetComponents:[{type:t.Input}],getData:[{type:t.Input}]},e}();var Fe=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[Me],imports:[c.CommonModule,r.FormsModule,o.WidgetCoreModule,ve,i.TranslateModule],exports:[Me]}]}],e}(),Se=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[],imports:[c.CommonModule,r.ReactiveFormsModule,r.FormsModule,r.ReactiveFormsModule,o.WidgetCoreModule,l.SearchInputModule,ze],exports:[l.SearchInputComponent,Fe,ve,ze,ke]}]}],e}();var Oe=function(){function e(e,n,o,a){this.translate=e,this.portletRepo=n,this.igixRepo=o,this.cd=a,this.dragPortlet=new t.EventEmitter}return e.prototype.ngOnInit=function(){var e=this;this.isUserDesigner&&this.portalCustomizePortlets?this.portletRepo.getPortlets().subscribe((function(t){e.userCustomizePortlets=t.filter((function(t){return e.portalCustomizePortlets.some((function(e){return e===t.id}))})),e.cd.markForCheck()})):this.portletRepo.getPortletsByModuleId().subscribe((function(t){e.eppPortletItems=t.map((function(e){return{portlet:e,isPortlet:!0,title:e.name}})),e.igixRepo.getPortletCategoryTree().subscribe((function(t){var n=e.eppPortletItems.filter((function(e){return!e.portlet.moduleId}));n.forEach((function(e){return e.layer=1}));var o={title:"commonPortlets",isCategory:!0,layer:1,children:n.filter((function(e){return!l.Portlet.IsDemoPortlet(e.portlet)}))},a={title:"demoPortlets",isCategory:!0,layer:1,children:n.filter((function(e){return l.Portlet.IsDemoPortlet(e.portlet)}))};e.tree=U([o],t,[a]),l.eppConfig&&l.eppConfig.enableBAInHome&&e.initBAMenu(),e.cd.markForCheck()}))}))},e.prototype.initBAMenu=function(){var e=this;this.igixRepo.getBAPortletsAll().subscribe((function(t){var n={title:"BAPortlet",isCategory:!0,layer:0,children:t.map((function(e){return{portlet:e,isPortlet:!0,layer:1}})),portletsAmount:t.length};e.tree.push(n),e.tree=e.tree.slice(),e.cd.markForCheck()}))},e.prototype.handleWidgetDragStart=function(e,t){e.preview=!1,t.dataTransfer.setData("text",JSON.stringify({p:e})),this.dragPortlet.emit(e)},e.prototype.handleSubmenuOpenChange=function(e,t){var n=this;e&&!t.children&&this.portletRepo.getPortletsByModuleId(t.id).subscribe((function(e){0===e.length&&(t.isEmpty=!0),t.children=e.map((function(e){return{portlet:e,isPortlet:!0,layer:parseInt(t.layer)+1}})),n.cd.markForCheck()}))},e.prototype.searchPortlet=function(e){var t=this;e?this.portletRepo.getPortletsByName(e).subscribe((function(e){t.isUserDesigner&&t.portalCustomizePortlets?t.searchPortletList=e.filter((function(e){return t.portalCustomizePortlets.some((function(t){return t===e.id}))})):t.searchPortletList=e,t.cd.markForCheck()})):this.searchPortletList=null},e.prototype.mousedown=function(e){e.preview=!1,this.cd.markForCheck()},e.prototype.mouseup=function(e){e.preview=null,this.cd.markForCheck()},e.decorators=[{type:t.Component,args:[{selector:"pl-draggable-portlet-list",template:'<div class="h-100">\n  <app-search-input\n    class="d-block px-2 pt-2"\n    (onSearch)="searchPortlet($event)"\n    ></app-search-input>\n  <ul\n    *ngIf="!searchPortletList && !isUserDesigner"\n    class="portlets-tree dashboard-menu flex-shrink-0 pb-4 overflow-auto h-calc-40"\n    nz-menu\n    nzMode="inline"\n    style="user-select:none;">\n    <ng-container *ngTemplateOutlet="menuTpl; context: { $implicit: tree }"></ng-container>\n    <ng-template #menuTpl let-menus>\n      <ng-container *ngFor="let menu of menus">\n        \x3c!-- folder --\x3e\n        <li\n          *ngIf="!menu.isPortlet"\n          [nzDisabled]="menu.isEmpty"\n          nz-submenu\n          [nzPaddingLeft]="14"\n          (nzOpenChange)="handleSubmenuOpenChange($event, menu)"\n          >\n          <span title>\n            <ng-container *ngIf="menu.layer === \'2\'">\n              <img class="icon-open" src="assets/img/icons/menu-open.svg" alt="">\n              <img class="icon-not-open" src="assets/img/icons/menu-fold.svg" alt="">\n            </ng-container>\n            {{ menu.title | translate }}</span>\n          <ul [class]="(menu.layer === \'1\' && menu.funcType) ? \'portlet-menu-item\':\'portlet-submenu-item\'">\n            <ng-container *ngTemplateOutlet="menuTpl; context: { $implicit: menu.children }"></ng-container>\n          </ul>\n        </li>\n        \x3c!-- portlet --\x3e\n        \x3c!-- nz-menu-item --\x3e\n        <li\n          #portletItem\n          *ngIf="menu.isPortlet"\n          nz-tooltip\n          nzPlacement="top"\n          [nzTitle]="previewTemplate"\n          [nzOverlayClassName]="\'preview-ant-tooltip\'"\n          draggable="true"\n          (dragstart)="handleWidgetDragStart(menu.portlet, $event)"\n          class="portlet-item"\n          [nzMouseEnterDelay]=".4"\n          (mousedown)="mousedown(menu.portlet)"\n          (mouseup)="mouseup(menu.portlet)"\n          (mouseout)="mouseup(menu.portlet)"\n          [nzVisible]="menu.portlet?.preview"\n          >\n          <div title class="portlet-item-content">\n            <div class="portlet-img">\n              <img\n                style="width: 30px; height: 30px"\n                [src]="menu.portlet?.widget?.logoImgUrl"\n                class="widget-logo"\n                onerror="javascript:this.src = DEFAULT_WIDGET_ICON;"\n                >\n            </div>\n            <div class="portlet-name">{{ menu.portlet.name }}</div>\n          </div>\n          \n          <ng-template #previewTemplate>\n            <div class="preview-img">\n              <div>{{menu.portlet.name}}</div>\n              <img \n                src={{menu.portlet.widget.previewImgUrl}}\n                onerror="javascript: this.src = DEFAULT_WIDGET_PREVIEWIMG"\n              >\n            </div>\n          </ng-template>\n          \n        </li>\n      </ng-container>\n    </ng-template>\n  </ul>\n  <div class="py-2 overflow-auto h-calc-40">\n    <ul *ngIf="searchPortletList || isUserDesigner" class="portlet-submenu-item">\n      <li\n        *ngFor="let item of searchPortletList?searchPortletList:userCustomizePortlets"\n        nz-tooltip\n        nzPlacement="right"\n        [nzTitle]="previewTemplate"\n        [nzOverlayClassName]="\'preview-ant-tooltip\'"\n        draggable="true"\n        (dragstart)="handleWidgetDragStart(item, $event)"\n        class="portlet-item"\n        [nzMouseEnterDelay]="0.5"\n        >\n        <div title class="portlet-item-content">\n          <div class="portlet-img">\n            <img\n              style="width: 30px; height: 30px"\n              [src]="item.widget.logoImgUrl"\n              class="widget-logo"\n              onerror="javascript:this.src = DEFAULT_WIDGET_ICON;"\n              >\n          </div>\n          <div class="portlet-name">{{ item.name }}</div>\n        </div>\n        \n        <ng-template #previewTemplate>\n          <div class="preview-img">\n            <div>{{item.name}}</div>\n            <img \n              src={{item.widget.previewImgUrl}}\n              onerror="javascript: this.src = DEFAULT_WIDGET_PREVIEWIMG"\n            >\n          </div>\n        </ng-template>\n      </li>\n    </ul>\n  </div>\n</div>\n\n',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:["::ng-deep ul.portlets-tree .ant-menu-submenu>.ant-menu{background:0 0}::ng-deep ul.portlets-tree .ant-menu-item,::ng-deep ul.portlets-tree .ant-menu-submenu-title{font-size:14px}::ng-deep ul.portlets-tree .ant-menu-item:not(:last-child){margin-bottom:0}::ng-deep ul.portlets-tree .icon-not-open,::ng-deep ul.portlets-tree .icon-open{color:#eab05a;font-size:20px;margin-right:5px}::ng-deep ul.portlets-tree .icon-open{display:none}::ng-deep ul.portlets-tree .ant-menu-submenu-open>div>span>.icon-not-open{display:none}::ng-deep ul.portlets-tree .ant-menu-submenu-open>div>span>.icon-open{display:inline-block}::ng-deep ul.portlets-tree .ant-menu-item-selected{background:0 0!important}::ng-deep .ant-menu-item,::ng-deep .portlet-menu-item .ant-menu-submenu-title{font-size:12px;color:#3f4764;font-weight:400}::ng-deep .ant-menu-item .ant-menu-submenu-arrow,::ng-deep .portlet-menu-item .ant-menu-submenu-title .ant-menu-submenu-arrow{display:none}::ng-deep .portlet-submenu-item{display:flex;flex-wrap:wrap;margin-left:14px!important}::ng-deep .preview-ant-tooltip{max-width:-moz-fit-content!important;max-width:fit-content!important}::ng-deep .preview-ant-tooltip .ant-tooltip-inner{padding:0!important;border-radius:12px;background-color:rgba(255,255,255,.5)!important;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}::ng-deep .preview-img{font-size:15px;color:#2d2f33;width:294px;height:192px;font-weight:500;border-radius:12px;padding:8px 25px;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}::ng-deep .preview-img img{width:244px;height:120px;border:1px solid #d9dee7;border-radius:12px;margin-top:10px}.portlet-item{width:71px;height:71px;background:#fff;padding:0 10px!important;line-height:40px;cursor:grab;border-radius:10px}.portlet-item:hover{background:#f5f7f9;position:relative;overflow:visible;z-index:9;transition:.3s}.portlet-item:hover .portlet-name{color:#4190ff!important}.portlet-item .portlet-item-content{width:100%;height:100%}.portlet-item .portlet-item-content .portlet-img{text-align:center}.portlet-item .portlet-item-content .portlet-name{font-size:10px;color:rgba(63,71,100,.65);white-space:normal;text-align:center;line-height:15px;display:-webkit-box;overflow:hidden;/*! autoprefixer: off; */-webkit-box-orient:vertical;-webkit-line-clamp:2;zoom:.88}"]}]}],e.ctorParameters=function(){return[{type:i.TranslateService},{type:l.PortletRepo},{type:l.IgixRepo},{type:t.ChangeDetectorRef}]},e.propDecorators={dragPortlet:[{type:t.Output}],portalCustomizePortlets:[{type:t.Input}],isUserDesigner:[{type:t.Input}]},e}();var Ve=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[Oe],imports:[c.CommonModule,D.NzMenuModule,i.TranslateModule,h.NzToolTipModule,l.SearchInputModule],exports:[Oe]}]}],e}(),Ee=function(){function e(e){this.noti=e,this.noti.config({nzPlacement:"topRight",nzTop:14})}return e.prototype.init=function(e){this.notiTmpl=e},e.prototype.notify=function(e){if("string"==typeof e.error)try{e.errorObj=JSON.parse(e.error)}catch(t){l.Log.Error(e.error)}else e.errorObj=e.error;this.noti.template(this.notiTmpl,{nzData:e})},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:T.NzNotificationService}]},e.ngInjectableDef=t.defineInjectable({factory:function(){return new e(t.inject(T.NzNotificationService))},token:e,providedIn:"root"}),e}();var Ae,Re={tokenizer:{root:[[/[a-zA-Z_$][\w$]*/,"epp-default"],[/[\[\]\{\}\(\)]/,"epp-brackets"],[/[+\-*/]/,"epp-number-operator"],[/[><=]/,"epp-logic-operator"],[/sys.[a-zA-Z_$][\w$]*/,"epp-sys-var"],[/[a-zA-Z_$][\w$]*(?=\(\))/,"epp-function"],[/\d+/,"epp-number"]]}},je=new Promise((function(e){Ae=e}));function Le(){monaco.languages.register({id:"eppExp"}),monaco.languages.setMonarchTokensProvider("eppExp",Re),Be("eppExp"),monaco.editor.defineTheme("eppTheme",{base:"vs-dark",inherit:!0,rules:[{token:"epp-default",foreground:"ffc107"},{token:"epp-brackets",foreground:"78dce8"},{token:"epp-number-operator",foreground:"a9dc76"},{token:"epp-logic-operator",foreground:"ff0081"},{token:"epp-sys-var",foreground:"F59BAC",fontStyle:"bold"},{token:"epp-function",foreground:"607d8b"},{token:"epp-number",foreground:"#ff6188"}],colors:{"editor.foreground":"#F9FFEE","editor.background":"#1a1d24","editorCursor.foreground":"#ffffff","editor.lineHighlightBackground":"#ffffff15","editorLineNumber.foreground":"#008800","editor.selectionBackground":"#ffffff21","editor.inactiveSelectionBackground":"#ffffff41"}}),Ae()}var Ne=[{name:"username",doc:"当前用户名，字符串"},{name:"username2",doc:"方法大幅度反对法大幅度反对法的的方式反对反对犯得上方法的"},{name:"pp",doc:"大苏打实打实大大实打实大苏打"},{name:"time",doc:"当范德萨范德萨分"}];function Be(e){monaco.languages.registerCompletionItemProvider(e,{provideCompletionItems:function(){return{suggestions:[{label:"sys",kind:monaco.languages.CompletionItemKind.Class,documentation:"系统变量",insertText:"sys",range:null}]}}}),monaco.languages.registerCompletionItemProvider(e,{provideCompletionItems:function(e,t){return{suggestions:Ne.map((function(e){return{label:e.name,kind:monaco.languages.CompletionItemKind.Field,insertText:e.name,range:null,detail:"(系统变量) username: string",documentation:e.doc}}))}},triggerCharacters:["."]})}var We=function(){function e(e){var n=this;this.cdr=e,this.suggestionGroups=[],this.code="",this.codeChange=new t.EventEmitter,this.JSON=JSON,this.editorOptions={language:"eppExp",theme:"vs-dark",minimap:{enabled:!1},lineNumbers:"off",glyphMargin:!1,folding:!1,lineDecorationsWidth:5,lineNumbersMinChars:0,fontSize:16},je.then((function(){n.suggestionGroups.forEach((function(e){var t=e.suggestions;monaco.languages.registerCompletionItemProvider("eppExp",{provideCompletionItems:function(){return{suggestions:t.map((function(e){var t=e.label,n=e.kind,o=e.insertText,a=e.detail,r=e.documentation;return{label:""+t,kind:n||monaco.languages.CompletionItemKind.Variable,insertText:o,detail:a,documentation:r,range:null}}))}}})}))}))}return e.prototype.ngOnInit=function(){this.sqlMonacoEditor.options=JSON.parse(JSON.stringify(this.editorOptions)),this.cdr.markForCheck()},e.prototype.handleCodeChange=function(e){this.codeChange.emit(e)},e.decorators=[{type:t.Component,args:[{selector:"exp-editor",template:'\n<ngx-monaco-editor\n  #sqlMonacoEditor\n  style="height: 80px"\n  name="sql"\n  [options]="editorOptions"\n  [(ngModel)]="code"\n  (ngModelChange)="handleCodeChange($event)"\n></ngx-monaco-editor>',styles:[""]}]}],e.ctorParameters=function(){return[{type:t.ChangeDetectorRef}]},e.propDecorators={suggestionGroups:[{type:t.Input}],code:[{type:t.Input}],codeChange:[{type:t.Output}],sqlMonacoEditor:[{type:t.ViewChild,args:["sqlMonacoEditor"]}]},e}();var He=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[We],imports:[c.CommonModule,r.FormsModule,V.MonacoEditorModule.forRoot({onMonacoLoad:Le})],exports:[We]}]}],e}();var qe=function(){function e(e){this.modalSvc=e,this.data=[],this.rawDims=[],this.dataChange=new t.EventEmitter,this.JSON=JSON,this.sysVars=Ne,this.curRowIndex=-1}return e.prototype.ngOnInit=function(){},e.prototype.trackByFn=function(e,t){return e+t},e.prototype.deleteRow=function(e){this.data.splice(e,1),this.dataChange.emit(this.data)},e.prototype.upRow=function(e){l.ArrUtil.UpI(this.data,e)},e.prototype.downRow=function(e){l.ArrUtil.DownI(this.data,e)},e.prototype.handleChangeNewRowValue=function(e,t,n){var o;if(t===this.data.length){if(!n)return;this.data.push(((o={})[e]=n,o.type=this.paramType,o)),this.dataChange.emit(this.data)}},e.prototype.handleClickExp=function(e,t){var n=t>-1&&t<this.data.length;this.curRowClone=n?l.deepClone(this.data[t]):{},this.curRowIndex=t,this.curExpCol=e,this.modalRef=this.modalSvc.show(this.expModalTmpl)},e.prototype.handleConfirmExp=function(){this.curRowIndex>-1&&this.curRowIndex<this.data.length?this.data[this.curRowIndex]=this.curRowClone:this.data.push(this.curRowClone),this.modalRef.hide()},e.decorators=[{type:t.Component,args:[{selector:"editable-table",template:'<nz-table class="editable-table table-striped"\n  #editRowTable\n  [nzShowPagination]="false"\n  [nzFrontPagination]="false"\n  [nzData]="data?.concat(JSON.parse(JSON.stringify({})))">\n  <thead>\n    <tr>\n      \x3c!-- <th nzWidth="30">{{\'orderNumber\'|translate}}</th> --\x3e\n      <th *ngFor="let col of columns">{{(col.title || col.name) | translate}}</th>\n      <th *ngIf="!keyReadonly">{{\'operations\'|translate}}</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr *ngFor="let rowData of editRowTable.data; let i=index; trackBy: trackByFn"\n      class="editable-row">\n      \x3c!-- <td><span class="hide-in-last-row pl-1">{{i+1}}</span></td> --\x3e\n      <td *ngFor="let col of columns">\n        <ng-container *ngIf="!col.template">\n          <ng-container *ngIf="!col.type || col.type===\'text\'">\n            <input \n              class="form-control form-control-sm"\n              type="text"\n              nz-input\n              [(ngModel)]="rowData[col.name]"\n              (ngModelChange)="handleChangeNewRowValue(col.name, i, $event)"\n              [name]="col.name + i"\n              [placeholder]="col.placeholder || col.name"\n              [readonly]="keyReadonly&&col.name===\'config\'"\n            />\n          </ng-container>\n          <ng-container *ngIf="col.type===\'exp\'">\n            <div>\n              <input\n                class="form-control form-control-sm help"\n                type="text"\n                nz-input\n                [ngModel]="rowData[col.name]"\n                [name]="col.name + i"\n                [placeholder]="col.placeholder || col.name"\n                readonly\n                (click)="handleClickExp(col, i)"\n                />\n            </div>\n          </ng-container>\n          <ng-container *ngIf="col.type===\'i18n\'">\n            <div>              \n                <lib-i18n-input                \n                [valueChangeOnBlur]="true"\n                [maxLength]="50"\n                [placeholder]="col.placeholder || col.name"\n                [(value)]="rowData[col.name]"\n                (valueChange)="handleChangeNewRowValue(col.name, i, $event)"                            \n                ></lib-i18n-input>\n            </div>\n          </ng-container>\n        </ng-container>\n        <ng-container *ngIf="col.template">\n          <ng-container *ngTemplateOutlet="col.template"></ng-container>\n        </ng-container>\n      </td>\n      <td *ngIf="!keyReadonly">\n        <div class="hide-in-last-row">\n          \x3c!-- <a\n            (click)="deleteRow(i)"\n          >{{\'delete\'|translate}}</a> --\x3e\n          \x3c!-- <i class="mti icon-btn theme-color-hover"\n            (click)="deleteRow(i)"\n            >\n          </i> --\x3e\n          <img class="act-btn-icon" src="assets/img/icons/delete.svg" (click)="deleteRow(i)" alt="">\n          <img class="act-btn-icon" src="assets/img/icons/arrow-up.svg" (click)="upRow(i)" alt="">\n          <img class="act-btn-icon" src="assets/img/icons/arrow-down.svg" (click)="downRow(i)" alt="">\n          \x3c!-- <i class="mti icon-btn theme-color-hover"\n            (click)="upRow(i)"\n            >arrow_upward</i>\n          <i class="mti icon-btn theme-color-hover"\n            (click)="downRow(i)"\n            >arrow_downward</i> --\x3e\n        </div>\n      </td>\n    </tr>\n  </tbody>\n</nz-table>\n\n\n\n<ng-template #expModalTmpl>\n  <div class="modal-header">\n  <h4 class="modal-title pull-left">{{\'paramValue\'|translate}}</h4>\n    <button type="button" class="close pull-right" aria-label="Close" (click)="modalRef.hide()">\n      <span aria-hidden="true">&times;</span>\n    </button>\n  </div>\n  <div class="modal-body">\n    <form #editForm="ngForm">\n      <div class="form-group">\n        <label class="mb-1">{{\'paramExpression\'|translate}}</label>\n        \x3c!-- [suggestionGroups]="colSuggestionGroups" --\x3e\n        <exp-editor\n          [(code)]="curRowClone[curExpCol.name]">\n        </exp-editor>\n        <small class="form-text text-muted">{{\'example\' | translate}}：col1 * (col2 + 2) .</small>\n        <small class="form-text text-muted">{{\'AvailableOperatorsAndDesc\' | translate}}</small>\n        <small class="form-text text-muted">{{\'availableFields\' | translate}}：\n          <span *ngFor="let col of rawDims">\n            {{col.name}}, \n          </span>\n        </small>\n        <small class="form-text text-muted">{{\'availableSysVars\'+\':\'+\'none\' | translate}}\n          \x3c!-- <span *ngFor="let dim of sysVars">\n            sys.{{dim.name}}, \n          </span> --\x3e\n        </small>\n        <small class="form-text text-muted">{{\'detailsHere\' | translate}}<a target="_blank" href="https://open.inspuronline.com/iGIX/#/document/mddoc/docs-gsp-cloud-ds%2Fdev-guide-beta%2Fadvanced-development%2Foperating-framework%2Fdashboard%2Fdashboard-manual.md">{{\'doc\' | translate}}</a>。</small>\n      </div>\n    </form>\n  </div>\n  <div class="modal-footer">\n    <button type="button"\n      class="btn btn-primary"\n      [disabled]="editForm.invalid"\n      [class.loading]="false"\n      (click)="handleConfirmExp()">\n      <i class="btn-icon-loading material-icons">public</i>\n      {{\'confirm\'|translate}}</button>\n    <button type="button"\n      class="btn btn-secondary"\n      (click)="modalRef.hide()">{{\'cancel\'|translate}}</button>\n  </div>\n</ng-template>\n\n',styles:['@charset "UTF-8";.ant-table-thead>tr>th{padding:5px!important}.ant-table-tbody>tr:last-child>td .form-control::-moz-placeholder{opacity:.5!important}.ant-table-tbody>tr:last-child>td .form-control::placeholder{opacity:.5!important}.ant-table-tbody>tr:last-child>td .hide-in-last-row{display:none}.ant-table-tbody>tr>td{padding:3px}.ant-table-tbody>tr>td .form-control{transition:border-color .3s}.ant-table-tbody>tr>td .form-control::-moz-placeholder{opacity:0}.ant-table-tbody>tr>td .form-control::placeholder{opacity:0}.ant-table-tbody>tr>td .form-control:not(:focus){border-color:transparent}.ant-table-tbody>tr>td .form-control-sm{height:calc(1.5em + .5rem + 0px)}.ant-table-tbody>tr>td .help[disabled]{background:#fff;cursor:pointer}.ant-table-tbody>tr>td .icon-btn{font-size:16px;color:#a6a6a6}::ng-deep .editable-table{border-radius:8px;overflow:hidden;border:1px solid #dee1ea;border-bottom:0}::ng-deep .editable-table thead{background:#f1f3f7}::ng-deep .editable-table thead tr th:not(:first-child) .ant-table-header-column{border-left:1px solid #e6e9f0!important;padding-left:12px;margin-left:-12px}::ng-deep .editable-table .ant-table-tbody .editable-row.ant-table-row input{width:calc(100% - 2px);margin:0 auto;border-radius:6px}::ng-deep .editable-table .ant-table-tbody .act-btn-icon{width:15px;height:13px;margin-left:4px}::ng-deep .editable-table tbody tr:nth-of-type(even) input:not(:focus){background:0 0!important}']}]}],e.ctorParameters=function(){return[{type:E.BsModalService}]},e.propDecorators={data:[{type:t.Input}],columns:[{type:t.Input}],rawDims:[{type:t.Input}],paramType:[{type:t.Input}],keyReadonly:[{type:t.Input}],dataChange:[{type:t.Output}],expModalTmpl:[{type:t.ViewChild,args:["expModalTmpl"]}]},e}();var _e=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[qe],imports:[c.CommonModule,w.NzTableModule,i.TranslateModule,r.FormsModule,He,pe],exports:[qe]}]}],e}(),Ue=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[G],imports:[c.CommonModule,r.FormsModule,O.NzRadioModule,o.FilterModule,i.TranslateModule,F.NzDatePickerModule,pe,S.NzInputModule,m.NzSelectModule,y.NzInputNumberModule,M.NzButtonModule,_e,ze,l.XcHelp2Module],exports:[G]}]}],e}();var $e=function(){function e(){this.schemas=[],this.valueObject={},this.passwordToBeReset=!1,this.init=new t.EventEmitter}return e.prototype.ngOnInit=function(){this.init.emit(this)},e.prototype.isValid=function(){return this.form&&this.form.invalid},e.decorators=[{type:t.Component,args:[{selector:"simple-form",template:'\n<form #form="ngForm">\n  <ng-container *ngFor="let schema of this.schemas">\n    <div\n      *ngIf="schema.showIf ? schema.showIf() : true"\n      class="form-group row">\n      <label\n        class="col-sm-3 col-form-label"\n        [class.required]="schema.required"\n      >{{schema.label || schema.name | translate}}</label>\n      <div class=col-sm-9>\n        <ng-container [ngSwitch]="schema.type">\n          <ng-container *ngSwitchCase="\'i18nInput\'">\n            <lib-i18n-input\n              [maxLength]="50"\n              [placeholder]="\'(\'+(\'emptyAdj\' | translate)+\')\'"\n              (valueChange)="valueObject[schema.name]=($event)"\n              [value]="valueObject[schema.name]"\n              ></lib-i18n-input>\n          </ng-container>\n          <ng-container *ngSwitchCase="\'input\'">\n            <input\n              [name]="schema.name"\n              class="form-control form-control-sm"\n              [(ngModel)]="valueObject[schema.name]"\n              [placeholder]="schema.placeholder"\n              [required]="schema.required"\n              />\n          </ng-container>\n          <ng-container *ngSwitchCase="\'textarea\'">\n            <textarea\n              [name]="schema.name"\n              [placeholder]="schema.placeholder | translate"\n              [(ngModel)]="valueObject[schema.name]"\n              cols="30"\n              rows="10"></textarea>\n          </ng-container>\n          <ng-container *ngSwitchCase="\'password\'">\n            <epp-password\n              [placeholder]="schema.placeholder"\n              [(value)]="valueObject[schema.name]"\n              [required]="schema.required"\n              [toBeReset]="passwordToBeReset"\n              ></epp-password>\n          </ng-container>\n          <ng-container *ngSwitchCase="\'checkbox\'">\n            <div class="custom-control custom-checkbox">\n              <input\n                [id]="schema.name"\n                [name]="schema.name"\n                [(ngModel)]="valueObject[schema.name]"\n                type="checkbox"\n                class="custom-control-input"\n                [required]="schema.required"\n                >\n              <label\n                [for]="schema.name"\n                class="custom-control-label"></label>\n            </div>\n          </ng-container>\n          <ng-container *ngSwitchCase="\'select\'">\n            <select\n              [name]="schema.name"\n              class="form-control form-control-sm"\n              [(ngModel)]="valueObject[schema.name]"\n              [required]="schema.required"\n              >\n              <option\n                *ngFor="let option of schema.options"\n                [value]="option">{{option | translate}}</option>\n            </select>\n          </ng-container>\n        </ng-container>\n      </div>\n    </div>\n  </ng-container>\n</form>',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[""]}]}],e.ctorParameters=function(){return[]},e.propDecorators={schemas:[{type:t.Input}],valueObject:[{type:t.Input}],passwordToBeReset:[{type:t.Input}],init:[{type:t.Output}],form:[{type:t.ViewChild,args:["form"]}]},e}();var Ge=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[$e],imports:[c.CommonModule,r.FormsModule,i.TranslateModule,ke,pe],exports:[$e]}]}],e}(),Je=function(){function e(){this.topPercent=30}return e.decorators=[{type:t.Component,args:[{selector:"app-loading",template:'<div\n                class="loading d-flex justify-content-center"\n                [style.padding-top]="topPercent + \'%\'"\n              >\n              <img\n                class="spin-ball"\n                src="assets/img/loading.svg"\n                >\n            </div>',styles:["\n    .loading {\n      position: absolute;\n      z-index: 1;\n      width: 100%;\n      top: 0;\n      left: 0;\n      height: 100%;\n      background: rgba(255,255,255,0.7);\n    }\n    img {\n      width: 50px;\n      height: 50px;\n    }\n  "]}]}],e.ctorParameters=function(){return[]},e.propDecorators={topPercent:[{type:t.Input}]},e}();var Ke={Normal:0,Loading:1,Empty:2};Ke[Ke.Normal]="Normal",Ke[Ke.Loading]="Loading",Ke[Ke.Empty]="Empty";var Xe=function(){function e(e,t,n){this.templateRef=e,this.vc=t,this.componentFactoryResolver=n,this.loadingFactory=this.componentFactoryResolver.resolveComponentFactory(Je)}return Object.defineProperty(e.prototype,"eppStatus",{set:function(e){switch(e){case Ke.Empty:case Ke.Loading:this.vc.clear(),this.loadingComponent=this.vc.createComponent(this.loadingFactory);break;case Ke.Normal:this.vc.clear(),this.vc.createEmbeddedView(this.templateRef)}},enumerable:!0,configurable:!0}),e.decorators=[{type:t.Directive,args:[{selector:"[eppStatus]"}]}],e.ctorParameters=function(){return[{type:t.TemplateRef},{type:t.ViewContainerRef},{type:t.ComponentFactoryResolver}]},e.propDecorators={eppStatus:[{type:t.Input}]},e}();var Ye=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[Xe,Je],entryComponents:[Je],imports:[c.CommonModule],exports:[Xe]}]}],e}();var Ze=function(e){function a(t,o,a,r,i,s){var c=e.call(this)||this;return c.portletRepo=t,c.cd=o,c.widgetDevkitService=a,c.dataService=r,c.route=i,c.shellService=s,c.JumpTypes=n.JumpTypes,c.IGIX_HOME_PATH=l.WEB_PATH_HOME,c.pageFilterValues=[],c}return L(a,e),a.prototype.ngOnInit=function(){return H(this,void 0,void 0,(function(){var e=this;return q(this,(function(t){switch(t.label){case 0:return this.tabConfigs?[4,this.calcPageFilterInit()]:[2];case 1:return t.sent(),[4,this.refreshPortletsByIds()];case 2:return t.sent(),this.setActiveTab(),this.dataService.loadData().subscribe((function(t){e.data=t,e.cd.markForCheck()})),[2]}}))}))},a.prototype.calcPageFilterInit=function(){return H(this,void 0,void 0,(function(){var e;return q(this,(function(t){return this.route.snapshot.queryParams,(e=this.shellService.getPageFilterConfig())?(this.pageFilterValues=e.map((function(e){return{filter:e.filter,value:e.val}})),[2]):[2]}))}))},a.prototype.getTitle=function(e){try{return l.tmpl2(e,this.data,{},0)}catch(e){}},a.prototype.onPropChange=function(e){return H(this,void 0,void 0,(function(){return q(this,(function(t){switch(t.label){case 0:return this.tabConfigs?[4,this.refreshPortletsByIds()]:[2];case 1:return t.sent(),"tabConfigs"===e&&this.setActiveTab(),[2]}}))}))},a.prototype.onRefresh=function(){return H(this,void 0,void 0,(function(){return q(this,(function(e){switch(e.label){case 0:return[4,this.refreshPortletsByIds()];case 1:return e.sent(),this.setActiveTab(),[2]}}))}))},a.prototype.hasAclInPortlets=function(e){return Array.isArray(e)&&e.some((function(e){return!!e.hasAcl}))},a.prototype.setActiveTab=function(){var e=this,t=this.activeTab;this.activeTab=null,this.tabConfigs&&0!==this.tabConfigs.length&&(this.activeTab=this.tabConfigs.find((function(t){return t.feOnly&&t.feOnly.portlets&&e.hasAclInPortlets(t.feOnly.portlets)})),this.activeTab!==t&&this.cd.markForCheck())},a.prototype.refreshPortletsByIds=function(){return H(this,void 0,void 0,(function(){var e,t=this;return q(this,(function(n){switch(n.label){case 0:return this.tabConfigs?(e=this.tabConfigs.map((function(e){e.feOnly||(e.feOnly={}),e.portletIds||(e.portletIds=[]),!e.portletId||e.portletIds&&e.portletIds[0]||(e.portletIds=[e.portletId]);var n=e.portletIds.filter((function(e){return e}))||[];if(0===n.length)return e.feOnly.portlets=[],Promise.resolve();var o=n.map((function(e){return t.portletRepo.getPortletById(e)}));return k.forkJoin(o).toPromise().then((function(t){e.feOnly.portlets=t}))})),[4,Promise.all(e)]):[2];case 1:return n.sent(),this.cd.markForCheck(),[2]}}))}))},a.prototype.handleClickRightTopJump=function(){this.widgetDevkitService.jumpWithData(this.activeTab.rightJump,this.data&&this.data[0]||{})},a.prototype.getFirstPortletOfTab=function(e){return e&&e.feOnly&&e.feOnly.portlets&&e.feOnly.portlets[0]&&e.feOnly.portlets[0].name},a.prototype.setFilterValue=function(e,t){var n=this;e.targets.forEach((function(o){if(o&&o.enabled){var a=n.portletComps.find((function(e){return e.portletId===o.portletId||e.portlet.id===o.portletId}));a&&a.widgetComp&&a.widgetComp.setFilterDpValues([{dpId:o.dpId,value:t,fs:e.schema}])}})),this.mergeToPageFilterValues(e,t)},a.prototype.mergeToPageFilterValues=function(e,t){l.ArrUtil.RemovePredicateOnce(this.pageFilterValues,(function(t){return t.filter.schema===e.schema})),this.pageFilterValues.push({filter:e,value:t})},a.prototype.handleWCompCreated=function(e,t){var n=this.pageFilterValues.map((function(e){var n=e.filter.targets.filter((function(e){return e&&e.dpId&&e.enabled&&e.portletId===t.id}));return 0===n.length?[]:n.map((function(t){return{dpId:t.dpId,value:e.value,fs:e.filter.schema}}))})).reduce((function(e,t){return e.concat(t)}),[]);n&&e.setFilterDpValues(n,!1)},a.ctorParameters=function(){return[{type:l.PortletRepo},{type:t.ChangeDetectorRef},{type:n.WidgetDevkitService},{type:n.WidgetDataService},{type:A.ActivatedRoute},{type:l.ShellService}]},a.decorators=[{type:t.Component,args:[{selector:"lib-shell-tab",template:'\n<div class="flex-fill d-flex flex-column justify-content-center align-items-center fs-13" *ngIf="tabConfigs.length === 0">{{\'AdminDidNotSelectPortlet\' | translate}}</div>\n<ng-container *ngIf="tabConfigs.length > 0">\n  <div class="d-flex flex-column overflow-hidden h-100">\n    <div class="d-flex justify-content-between px-2">\n      <ul class="portlet-tabs m-1 d-flex"> \n        <ng-container *ngFor="let tab of tabConfigs">\n          <li\n            *ngIf="(tab.title || tab.feOnly?.portlets?.length > 0) && hasAclInPortlets(tab.feOnly?.portlets)"\n            class="cursor-pointer"\n            style="margin-right: 14px;"\n            [class.active]="tab === activeTab"\n            [class.theme-bg]="tab === activeTab"\n            [class.theme-shadow]="tab === activeTab"\n            (click)="activeTab = tab"\n            >{{getTitle(tab.title) || getFirstPortletOfTab(tab)}}</li>\n        </ng-container>\n      </ul>\n      <div class="d-flex align-items-center">\n        <div\n          *ngIf="activeTab?.rightJump?.jumpType && activeTab?.rightJump?.jumpType !== JumpTypes.None"\n          (click)="handleClickRightTopJump()"\n          class="d-flex align-items-center cursor-pointer hover-parent fs-13 theme-color-hover"\n          style="\n            font-size: 13px;\n            color: #747B8B;\n          "\n          >\n          <div class="transition-all flex-shrink-0" style="margin-right: 2px;">{{ \'more\' | translate }}</div>\n          <img\n            class="hover-child:opacity-1 transition-all"\n            style="opacity: .6;"\n            src="assets/img/more.svg"\n            >\n        </div>\n      </div>\n    </div>\n    \x3c!-- Tab content --\x3e\n    \x3c!-- <div *ngIf="activeTab && activeTab.feOnly?.portlets?.length > 0; else noContentPrompt"> --\x3e\n    <ng-container *ngIf="activeTab; else noActiveTab">\n      <div\n        *ngFor="let p of activeTab?.feOnly?.portlets || []" class="portlets overflow-auto h-100">\n        <lib-portlet\n          *ngIf="p"\n          [portlet]="p"\n          (widgetCompCreated)="handleWCompCreated($event, p)"\n          ></lib-portlet>\n      </div>\n    \x3c!-- </div> --\x3e\n      <ng-container *ngIf="(activeTab.feOnly?.portlets || []).length === 0">\n         <ng-template [ngTemplateOutlet]="noContentPrompt"></ng-template>\n      </ng-container>\n    </ng-container>\n\n    <ng-template #noActiveTab>\n      \x3c!-- 可选：当没有 activeTab 时也显示提示 --\x3e\n      <ng-template [ngTemplateOutlet]="noContentPrompt"></ng-template>\n    </ng-template>\n\n    \x3c!-- Prompt for no content after filtering --\x3e\n    <ng-template #noContentPrompt>\n      <div class="layer-no-data position-absolute h-100 w-100 d-flex flex-column">\n        <div class="flex-fill d-flex flex-column justify-content-center align-items-center">\n          <img src="{{IGIX_HOME_PATH}}assets/img/data-empty.svg" style="transform:translateY(-5px)" alt="" />\n          <div class="fs-13" style="color:gray">{{ \'noDataAvailable\' | translate }}</div>\n        </div>\n      </div>\n    </ng-template>\n   </div>\n</ng-container>',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:["ul.portlet-tabs li{font-size:14px;padding:4px 12px;border-radius:100px;white-space:nowrap;background:#f1f3f7;color:#2d2f33}ul.portlet-tabs li.active{box-shadow:0 5px 10px 0 var(--primary-20);background:var(--page-switch-btn-bg,var(--primary));color:#fff}"]}]}],a.ctorParameters=function(){return[{type:l.PortletRepo},{type:t.ChangeDetectorRef},{type:n.WidgetDevkitService},{type:n.WidgetDataService},{type:A.ActivatedRoute},{type:l.ShellService}]},a.propDecorators={portletComps:[{type:t.ViewChildren,args:[o.PortletComponent]}]},B([n.Property({isArray:!0,type:n.PropertyTypes.Object,userCustom:!0,objectOption:{objPropertyOptions:[{displayName:"portlet",name:"portletIds",type:n.PropertyTypes.Help2,isArray:!0,help2Option:{preset:"eppPortlet",valueField:"id",labelField:"name"}},{name:"title",displayName:"标签名"},N({name:"rightJump"},n.dataJumpOption)]}}),W("design:type",Array)],a.prototype,"tabConfigs",void 0),a=B([n.Widget({name:"shell-tab",enableCommonTitleBar:!0,enableDataConfig:!0,showIfNoData:!0}),W("design:paramtypes",[l.PortletRepo,t.ChangeDetectorRef,n.WidgetDevkitService,n.WidgetDataService,A.ActivatedRoute,l.ShellService])],a)}(n.WidgetBase);l.registerInnerWidget({widgetComponent:Ze,baseUrl:"",id:"shell-tab",name:"shell-tab",version:"6",isDevMode:!0});var Qe=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[Ze],entryComponents:[],imports:[c.CommonModule,o.PortletModule,i.TranslateModule],exports:[Ze],providers:[]}]}],e}(),et=function(e){function o(t,n){var o=e.call(this)||this;return o.portletRepo=t,o.cd=n,o}return L(o,e),o.prototype.onPropertyChange=function(e,t){"portletOpts"===e&&this.refreshPortletsByIds()},o.prototype.ngOnInit=function(){},o.prototype.refreshPortletsByIds=function(){var e=this;if(this.portletOpts){var t=this.portletOpts.filter((function(e){return e&&e.portletId}));t&&t[0]||(this.portlets=null);var n=t.map((function(t){return e.portletRepo.getPortletById(t.portletId)}));k.forkJoin(n).subscribe((function(n){e.portlets=n,e.portlets.forEach((function(e){e.feOnly={width:t.find((function(t){return t.portletId===e.id})).width}})),e.cd.markForCheck()}))}else this.portlets=null},o.ctorParameters=function(){return[{type:l.PortletRepo},{type:t.ChangeDetectorRef}]},o.decorators=[{type:t.Component,args:[{selector:"lib-shell-layout",template:'<div class="d-flex flex-wrap h-100">\n  <div\n    *ngFor="let pl of portlets"\n    [style.width]="pl.feOnly.width"\n    >\n    <lib-portlet\n      *ngIf="pl"\n      [portlet]="pl"\n      ></lib-portlet>\n  </div>\n</div>',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[""]}]}],o.ctorParameters=function(){return[{type:l.PortletRepo},{type:t.ChangeDetectorRef}]},B([n.Property({type:n.PropertyTypes.Object,isArray:!0,objectOption:{objPropertyOptions:[{name:"portletId",type:n.PropertyTypes.Help2,help2Option:{preset:"eppPortlet",valueField:"id",labelField:"name"}},{name:"width",textOption:{default:"50%"}}]}}),W("design:type",Array)],o.prototype,"portletOpts",void 0),o=B([n.Widget({name:"shell-layout",enableCommonTitleBar:!0}),W("design:paramtypes",[l.PortletRepo,t.ChangeDetectorRef])],o)}(n.WidgetBase);l.registerInnerWidget({widgetComponent:et,baseUrl:"",id:"shell-layout",name:"shell-layout",version:"6",isDevMode:!0});var tt=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[et],imports:[c.CommonModule,o.PortletModule],exports:[et],providers:[]}]}],e}(),nt=function(){function e(e,t,n,o){this.datasetRepo=e,this.cd=t,this.translate=n,this.portletRepo=o,this.flatPInsList=[]}return e.prototype.ngOnInit=function(){return H(this,void 0,void 0,(function(){return q(this,(function(e){switch(e.label){case 0:return this.filter=this.originalFilter?l.deepClone(this.originalFilter):new l.PageFilterConfig,this.flatPInsList=U(this.pageConfig.layout),this.addShellInsidersToFlatPInsList(),[4,this.loadNSetAllPInsDataset()];case 1:return e.sent(),[4,this.buildTargetsFromPInsList()];case 2:return e.sent(),this.cd.markForCheck(),[2]}}))}))},e.prototype.addShellInsidersToFlatPInsList=function(){var e=this;this.pageConfig.layout.filter((function(e){return e.feOnly.widgetComp&&!!e.feOnly.widgetComp.propValues.tabConfigs})).forEach((function(t){t.feOnly.widgetComp.propValues.tabConfigs.forEach((function(n){n.portletIds.forEach((function(n){e.flatPInsList.push({portletId:n,instanceId:l.uuidv4(),gridsterItem:null,isBAPortlet:t.isBAPortlet})}))}))}))},e.prototype.loadNSetAllPInsDataset=function(){return H(this,void 0,void 0,(function(){var e,t=this;return q(this,(function(n){return e=this.flatPInsList.map((function(e){return H(t,void 0,void 0,(function(){var t,n;return q(this,(function(o){switch(o.label){case 0:return e.portlet?[3,2]:(t=e,[4,this.portletRepo.getPortletById(e.portletId).toPromise()]);case 1:t.portlet=o.sent(),o.label=2;case 2:return e.portlet.datasetId?[4,this.datasetRepo.getDatasetById(e.portlet.datasetId).toPromise()]:[2];case 3:return n=o.sent(),e.feOnly||(e.feOnly={}),e.feOnly.dataset=n,[2]}}))}))})),[2,Promise.all(e)]}))}))},e.prototype.buildTargetsFromPInsList=function(){return H(this,void 0,void 0,(function(){return q(this,(function(e){return this.filter.targets=this.flatPInsList.map(this.convertPInsToFilterTarget.bind(this)),[2]}))}))},e.prototype.convertPInsToFilterTarget=function(e){var t=this.filter.targets.find((function(t){return t&&t.portletId===e.portletId}));return e.feOnly.dataset?{portletId:e.portletId,enabled:!!t&&t.enabled,dpId:t?t.dpId:null}:null},e.decorators=[{type:t.Component,args:[{selector:"lib-page-filter-modal",template:'<div\n  class="d-flex"\n  style="\n    max-height: calc(80vh - 110px);\n  ">\n  \x3c!-- 左：筛选项列表 --\x3e\n  \x3c!-- <ul>\n    <li\n      *ngFor="let f of pageConfig.filters"\n      [class.active]="curPageFilter === f"\n      >\n      {{f?.name}}\n    </li>\n  </ul> --\x3e\n  \x3c!-- 中：部件、dp 选择 --\x3e\n  <div\n    class="mr-3 overflow-hidden"\n    style="width: 45%;"\n    >\n    <h6>{{\'AssociatePartAndField\' | translate}}</h6>\n    \x3c!-- 名称 <input type="text" [(ngModel)]="filter.name"> --\x3e\n    \x3c!-- *{{filter.targets | json}}* --\x3e\n    <ul class="mt-3 flex-fill overflow-auto" style="height: calc(100% - 36px);">\n      <ng-container\n        *ngFor="let pIns of flatPInsList; let i = index;"\n        >\n        <li\n          class="d-flex my-1 align-items-center"\n          *ngIf="pIns?.feOnly?.dataset && filter.targets && filter.targets[i]"\n          >\n          \x3c!-- -{{pIns?.feOnly?.dataset}}-{{filter.targets && filter.targets[i]}}- --\x3e\n          \x3c!-- <div\n            class="d-flex w-100"\n            > --\x3e\n            <div class="custom-control custom-checkbox">\n              <input\n                id="enabled{{i}}"\n                type="checkbox"\n                [(ngModel)]="filter.targets[i].enabled"\n                class="custom-control-input">\n              <label class="custom-control-label" for="enabled{{i}}"></label>\n            </div>\n            <div\n              class="flex-fill mr-1 text-truncate"\n              [title]="pIns?.portlet?.name"\n              >{{pIns?.portlet?.name}}</div>\n            <div\n              class="flex-shrink-0 mr-1 text-truncate"\n              style="width: 110px; color: gray;"\n              [title]="pIns?.feOnly?.dataset?.name"\n              >{{pIns?.feOnly?.dataset?.name}}</div>\n            <nz-select\n              nzAllowClear\n              class="flex-shrink-0"\n              style="width: 100px;"\n              [(ngModel)]="filter.targets[i].dpId"\n              >\n              <nz-option\n                *ngFor="let dp of pIns?.feOnly?.dataset?.dataParams"\n                [nzLabel]="dp.name"\n                [nzValue]="dp.id"\n                ></nz-option>\n            </nz-select>\n            \x3c!-- <div>\n              {{ pIns?.feOnly?.dataset?.dataParams | json }}\n            </div> --\x3e\n          \x3c!-- </div> --\x3e\n          \x3c!-- <nz-select>\n            <nz-item>dataParams</nz-item>\n          </nz-select> --\x3e\n        </li>\n      </ng-container>\n    </ul>\n  </div>\n  \x3c!-- 右：筛选配置 --\x3e\n  <div class="d-flex flex-column overflow-hidden flex-fill">\n    <h6>{{\'filterConfig\' | translate}}</h6>\n    <lib-fe-filter-modal\n      class="overflow-hidden"\n      [filterSchema]="filter.schema"\n      [vertical]="true"\n    ></lib-fe-filter-modal>\n  </div>\n</div>',styles:[""]}]}],e.ctorParameters=function(){return[{type:l.DatasetRepo},{type:t.ChangeDetectorRef},{type:i.TranslateService},{type:l.PortletRepo}]},e}();var ot=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[nt],imports:[c.CommonModule,r.FormsModule,m.NzSelectModule,Ue,i.TranslateModule]}]}],e}(),at=function(){function e(e,n){this.translate=e,this.route=n,this.valueChange=new t.EventEmitter}return e.prototype.ngOnInit=function(){},e.prototype.ngOnChanges=function(e){},e.prototype.handleFilterSingleChange=function(e,t){this.valueChange.emit({filter:t,value:e})},e.prototype.handleFilterMultiChange=function(e,t){this.valueChange.emit({filter:t,value:e})},e.decorators=[{type:t.Component,args:[{selector:"lib-page-filter",template:'<div>\n  <ul\n    class="d-flex"\n    >\n    <li\n      *ngFor="let filter of filters"\n      class="mx-1"\n      >\n      <nz-dropdown nzTrigger="click" nzPlacement="bottomCenter">\n        <div class="title d-flex align-items-center" nz-dropdown>\n          <span>{{filter?.schema?.i18nName[translate.currentLang]}}</span>\n          <span></span>\n          <i class="ml-1 mti fs-16" style="color: gray;">keyboard_arrow_down</i>\n        </div>\n        <div class="dropdown-wrapper">\n          <filter\n            [filterSchema]="filter.schema"\n            (singleValueChange)="handleFilterSingleChange($event, filter)"\n            (multiValueChange)="handleFilterMultiChange($event, filter)"\n            ></filter>\n        </div>\n      </nz-dropdown>\n    </li>\n  </ul>\n</div>',styles:[".title{padding:3px 10px;background:#f2fafe;border-radius:6px;border:1px solid #d5ecfd;color:#4b4d52;cursor:pointer}.dropdown-wrapper{padding:20px;background:#fff;border-radius:10px;box-shadow:0 0 10px 0 #ececec}"]}]}],e.ctorParameters=function(){return[{type:i.TranslateService},{type:A.ActivatedRoute}]},e.propDecorators={filters:[{type:t.Input}],valueChange:[{type:t.Output}]},e}();var rt=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[at],imports:[c.CommonModule,u.NzDropDownModule,o.FilterModule,l.XcHelp2Module],exports:[at]}]}],e}(),lt=function(){function e(e,t,n,o,a,r){this.messageSvc=e,this.rtfUtilSvc=t,this.nzModal=n,this.widgetDevkit=o,this.http=a,this.help2=r,window.DashboardApi=this}return e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:R.NzMessageService},{type:l.RtfUtilService},{type:s.NzModalService},{type:n.WidgetDevkitService},{type:a.HttpClient},{type:l.XcHelpService}]},e.ngInjectableDef=t.defineInjectable({factory:function(){return new e(t.inject(R.NzMessageService),t.inject(l.RtfUtilService),t.inject(s.NzModalService),t.inject(n.WidgetDevkitService),t.inject(a.HttpClient),t.inject(l.XcHelpService))},token:e,providedIn:"root"}),e}();var it=function(){function e(e,t,n){this.el=e,this.renderer=t,this.zone=n}return e.prototype.ngOnInit=function(){var e=this;if("none"!==this.orient&&this.orient){var t=document.createElement("div");this.renderer.addClass(t,"xc-resizable-handler"),this.renderer.setStyle(t,this.orient||"left","0"),this.renderer.appendChild(this.el.nativeElement,t),this.renderer.listen(t,"mousedown",(function(t){e.initMouseX=t.clientX,e.initWidth=parseInt(window.getComputedStyle(e.el.nativeElement).width.replace("px","")),e.zone.runOutsideAngular((function(){e.unlistenMouseMove=e.renderer.listen("document","mousemove",(function(t){var n=t.clientX,o=e.initWidth-(n-e.initMouseX)*("left"===e.orient?1:-1);e.renderer.setStyle(e.el.nativeElement,"width",o+"px")})),e.renderer.listen("document","mouseup",(function(t){e.unlistenMouseMove&&e.unlistenMouseMove()}))}))}))}},e.decorators=[{type:t.Directive,args:[{selector:"[xcResizable]"}]}],e.ctorParameters=function(){return[{type:t.ElementRef},{type:t.Renderer2},{type:t.NgZone}]},e.propDecorators={orient:[{type:t.Input,args:["xcResizable"]}]},e}();var st=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[it],imports:[c.CommonModule],exports:[it]}]}],e}();e.CeArrayComponent=$,e.CeItemComponent=oe,e.ConfigEditor2Component=ae,e.ConfigEditor2Module=ve,e.DASHBOARD_API="DashboardApi",e.DashboardApi=lt,e.DashboardCommonModule=Se,e.DataPathPipe=Q,e.DraggablePortletListComponent=Oe,e.DraggablePortletListModule=Ve,e.EditableTableComponent=qe,e.EditableTableModule=_e,e.EppColorPickerComponent=re,e.EppColorPickerModule=le,e.EppPasswordModule=ke,e.EppStatus=Ke,e.ErrorNotificationService=Ee,e.ExpEditorComponent=We,e.ExpEditorModule=He,e.FeFilterModalComponent=G,e.FeFilterModalModule=Ue,e.HelpComponent=we,e.HelpModule=ze,e.HelpService=te,e.HelpShellComponent=Y,e.HelpStructure=X,e.I18N_INPUT_CONFIG=se,e.I18nInputComponent=ce,e.I18nInputModule=pe,e.LANG_EPP_EXP="eppExp",e.Lang=ie,e.LoadingComponent=Je,e.NumFormatModalComponent=ne,e.NumFormatModalModule=de,e.PageFilterComponent=at,e.PageFilterModalComponent=nt,e.PageFilterModalModule=ot,e.PageFilterModule=rt,e.PasswordComponent=Ie,e.ResizableDirective=it,e.ResizableModule=st,e.ShellLayoutComponent=et,e.ShellLayoutModule=tt,e.ShellTabComponent=Ze,e.ShellTabModule=Qe,e.SimpleFormComponent=$e,e.SimpleFormModule=Ge,e.SortablejsDirective=be,e.SortablejsModule=ye,e.StatusDirective=Xe,e.StatusModule=Ye,e.ToTreeModule=Ce,e.ToTreePipe=xe,e.WidgetProjectPreviewPageComponent=Me,e.WidgetProjectPreviewPageModule=Fe,e.eppExpLanguageDef=Re,e.findKeyByValue=function(e,t){return J(e,(function(e){return e===t}))},e.findKeyByValuePredicate=J,e.handleMonacoLoad=Le,e.monacoLoadPromise=je,e.registerSysVarsCompletion=Be,e.removeInArray=K,e.sysVars=Ne,e.ɵa=ue,e.ɵb=he,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=gspwidget-common.umd.min.js.map