{"__symbolic":"module","version":4,"metadata":{"TemplateEditorService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":9,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":15,"character":22},{"__symbolic":"reference","module":"@farris/ui-modal","name":"BsModalService","line":16,"character":26},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":17,"character":22},{"__symbolic":"reference","name":"ɵa"}]}],"openTemplateEditor":[{"__symbolic":"method"}],"getTemplateClassName":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"TemplateEditorComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":26,"character":1},"arguments":[{"selector":"ide-template-editor","template":"<div class=\"editor-wrapper\" [class.dim]=\"globalService.popupState\">\r\n  <!-- 自定义模式编辑器 -->\r\n  <div class=\"code-editor-panel\" [style.display]=\"customMode || previewMode ? undefined : 'none'\">\r\n    <angular-monaco-editor\r\n      class=\"code-editor\"\r\n      [(ngModel)]=\"customCode\"\r\n      [options]=\"codeEditorOptions\"\r\n      (onInit)=\"onMonacoInit()\">\r\n    </angular-monaco-editor>\r\n  </div>\r\n\r\n  <!-- 简单模式编辑器 -->\r\n  <div class=\"easy-editor-panel\" [style.display]=\"!customMode && !previewMode ? undefined : 'none'\">\r\n    <div class=\"template-nav\">\r\n      <block-nav [navData]=\"navData\" [initialNavId]=\"initialNavId\" (navChange)=\"handleNavChange($event)\"></block-nav>\r\n    </div>\r\n    <div class=\"template-block\">\r\n      <div class=\"template-preview\" [class.maximum]=\"previewMaximum\" (click)=\"previewMaximum = !previewMaximum\">\r\n        <div class=\"preview-title\">模板预览</div>\r\n        <ng-container *ngIf=\"!previewImageError && templatePreviewImageUrl; else imageErrorBlock\">\r\n          <img [src]=\"templatePreviewImageUrl\"\r\n            (error)=\"previewImageError = true\"\r\n            (dragstart)=\"imageDragstart()\" />\r\n        </ng-container>\r\n        <ng-template #imageErrorBlock>\r\n          <div class=\"image-error\">\r\n            {{ !templatePreviewImageUrl ? \"图片加载中...\" : \"图片加载失败\" }}\r\n          </div>\r\n        </ng-template>\r\n      </div>\r\n      <div class=\"template-grid\">\r\n        <grid-editor #gridEditor\r\n          [templateDesc]=\"templateDesc\"\r\n          [initValue]=\"initValue\"\r\n          [initValueTrusted]=\"initValueTrusted\"\r\n          [resourceData]=\"resourceData\">\r\n        </grid-editor>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<ng-template #footer>\r\n  <button type=\"button\" class=\"btn btn-secondary\" (click)=\"handlePreviewClick()\" *ngIf=\"!customMode\">\r\n    {{ previewMode ? \"返回\" : \"预览\" }}\r\n  </button>\r\n  <button type=\"button\" class=\"btn btn-secondary mode-switch\" (click)=\"switchMode()\"\r\n    [class.disabled]=\"previewMode\">\r\n    <i class=\"f-icon f-icon-refresh\"></i>{{ customMode ? \"可视化模式\" : \"自定义模式\" }}\r\n  </button>\r\n  <div class=\"btn-divider\"></div>\r\n  <button type=\"button\" class=\"btn btn-secondary\" (click)=\"close()\">取消</button>\r\n  <button type=\"button\" class=\"btn btn-primary\" (click)=\"save()\">完成</button>\r\n</ng-template>\r\n","styles":[".editor-wrapper{position:relative;box-sizing:border-box;overflow:hidden;height:100%}.editor-wrapper.dim{filter:blur(8px)}.easy-editor-panel{position:relative;box-sizing:border-box;overflow:hidden;height:100%;display:flex}.easy-editor-panel .template-nav{flex:0 0 auto;height:100%;background-color:#f8f8fa}.easy-editor-panel .template-block{flex:1 1 0px;height:100%;overflow:auto;padding:28px 34px 0;display:flex;flex-direction:column}.easy-editor-panel .template-block .template-preview{cursor:zoom-in;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;flex:0 0 auto;height:196px;border:1px dashed #d8d8d8;border-radius:10px;box-shadow:0 0 10px 0 rgba(179,188,203,.04);background-image:linear-gradient(180deg,#fafbff 0,#fefeff 25%,#fff 77%,#fcfdfe 100%);margin-bottom:20px}.easy-editor-panel .template-block .template-preview.maximum{cursor:zoom-out;z-index:9999;position:absolute;height:auto;top:0;bottom:0;left:0;right:0;border-radius:0;margin-bottom:0}.easy-editor-panel .template-block .template-preview.maximum .preview-title{border-top-left-radius:0}.easy-editor-panel .template-block .template-preview img{display:block;-o-object-fit:contain;object-fit:contain;width:100%;height:100%;margin:auto}.easy-editor-panel .template-block .template-preview .image-error{display:flex;border-radius:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;justify-content:center;align-items:center;height:100%;font-size:18px;letter-spacing:1px;color:#c0c4cc;background-color:#f5f7fa}.easy-editor-panel .template-block .template-preview .preview-title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;top:0;left:0;width:86px;height:34px;font-size:14px;letter-spacing:1px;line-height:34px;color:#fff;text-align:center;border-radius:8px 0 28px;background-image:linear-gradient(123deg,#3485ff 0,#7bccff 100%)}.easy-editor-panel .template-block .template-preview .preview-title:hover{background:0 0;color:transparent}.easy-editor-panel .template-block .template-grid{flex:1 1 0;overflow:auto}.code-editor-panel{position:relative;height:100%}.code-editor-panel .code-editor{position:absolute;top:0;right:0;bottom:0;left:0}.btn-divider{width:1px;height:1.2em;margin:0 6px;background-color:#cccfd1}.mode-switch{display:flex;align-items:center}.mode-switch i{font-size:13px;margin-right:5px;color:#9094af;transition:transform .5s}.mode-switch:hover i{color:#59a1ff;transform:rotate(360deg)}.mode-switch:active i{color:#0068f3}.mode-switch.disabled i{color:rgba(0,0,0,.25)}.mode-switch.disabled:hover i{transform:none}"]}]}],"members":{"updateCodeEditorOptions":[{"__symbolic":"method"}],"gridEditor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":75,"character":3},"arguments":["gridEditor"]}]}],"modalFooter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":111,"character":3},"arguments":["footer"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@farris/ui-notify","name":"NotifyService","line":125,"character":27},{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","module":"@farris/ui-loading","name":"LoadingService","line":127,"character":28},{"__symbolic":"reference","module":"@farris/ui-messager","name":"MessagerService","line":128,"character":29},{"__symbolic":"reference","name":"ɵb"}]}],"ngOnInit":[{"__symbolic":"method"}],"setNavData":[{"__symbolic":"method"}],"handleNavChange":[{"__symbolic":"method"}],"imageDragstart":[{"__symbolic":"method"}],"onMonacoInit":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}],"switchMode":[{"__symbolic":"method"}],"switchToEasyMode":[{"__symbolic":"method"}],"switchToCustomMode":[{"__symbolic":"method"}],"handlePreviewClick":[{"__symbolic":"method"}]}},"TemplateEditorOpenerComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"app-template-editor-opener","template":"<div class=\"farris-input-wrap modalIcon\">\r\n  <input type=\"input\" class=\"form-control form-control-sm\" [ngModel]=\"displayValue\" readonly>\r\n  <i class=\"material-icons moreIcon\" (click)=\"openModal()\">filter_none</i>\r\n</div>\r\n","styles":[".modalIcon .showClearButton{display:none}.modalIcon:hover .allowClear.showClearButton{display:block}.modalIcon input{padding-right:30px}.modalIcon .moreIcon{position:absolute;top:6px;right:6px;cursor:pointer;font-size:16px;color:#758a96}.modalIcon .clearIcon{position:absolute;top:5px;right:30px;cursor:pointer;font-size:19px;color:#758a96}"]}]}],"members":{"submitModal":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":13,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateEditorService"}]}],"ngOnInit":[{"__symbolic":"method"}],"openModal":[{"__symbolic":"method"}]}},"TemplateEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":27,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"TemplateEditorComponent"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵg"},{"__symbolic":"reference","name":"ɵh"},{"__symbolic":"reference","name":"ɵi"},{"__symbolic":"reference","name":"TemplateEditorOpenerComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":38,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":39,"character":4},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@farris/ui-notify","name":"NotifyModule","line":40,"character":4},"member":"forRoot"}},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@farris/ui-modal","name":"ModalModule","line":41,"character":4},"member":"forRoot"}},{"__symbolic":"reference","module":"@farris/ui-combo-list","name":"ComboListModule","line":42,"character":4},{"__symbolic":"reference","module":"@farris/ui-messager","name":"MessagerModule","line":43,"character":4},{"__symbolic":"reference","module":"@farris/ui-treetable","name":"TreeTableModule","line":44,"character":4},{"__symbolic":"reference","module":"@farris/ui-forms","name":"FarrisFormsModule","line":45,"character":4},{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClientModule","line":46,"character":4},{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"BrowserAnimationsModule","line":47,"character":4},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@farris/ide-devkit","name":"AngularMonacoEditorModule","line":48,"character":4},"member":"forRoot"},"arguments":[{"baseUrl":"assets","defaultOptions":{"scrollBeyondLastLine":false}}]}],"exports":[{"__symbolic":"reference","name":"TemplateEditorComponent"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"TemplateEditorOpenerComponent"}],"entryComponents":[{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"TemplateEditorComponent"},{"__symbolic":"reference","name":"TemplateEditorOpenerComponent"}]}]}],"members":{}},"CellValue":{"__symbolic":"interface"},"ValueItem":{"__symbolic":"interface"},"Editor":{"__symbolic":"interface"},"FragmentItem":{"__symbolic":"interface"},"EditorMap":{"__symbolic":"interface"},"TemplateDesc":{"__symbolic":"interface"},"TemplateCellDesc":{"__symbolic":"interface"},"ValueItemDesc":{"__symbolic":"interface"},"FragmentItemDesc":{"__symbolic":"interface"},"GenerateResult":{"__symbolic":"interface"},"TemplateLog":{"__symbolic":"interface"},"UniInputType":{"Const":"Const","Custom":"Custom","LocalVariable":"LocalVariable","RemoteVariable":"RemoteVariable","Field":"Field"},"UniInputTypeText":{"__symbolic":"error","message":"Expression form not supported","line":120,"character":2,"module":"./template-editor.interface"},"ResourceData":{"__symbolic":"interface"},"TYPE":"TemplateEditorLog","ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":13,"character":28}]}],"getTemplateDescIndex":[{"__symbolic":"method"}],"getTemplateDesc":[{"__symbolic":"method"}],"getThumbnailImageUrl":[{"__symbolic":"method"}],"getPreviewImageUrl":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":2,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"grid-editor","template":"<div class=\"grid-editor\">\r\n  <div class=\"empty\" *ngIf=\"!grid; else gridBlock\">No Template Here</div>\r\n  <ng-template #gridBlock>\r\n    <div class=\"grid-wrapper\">\r\n      <table class=\"grid\">\r\n        <tr *ngFor=\"let row of grid\">\r\n          <ng-container *ngFor=\"let cell of row\">\r\n            <ng-container *ngIf=\"cell.type === 'value'; else fragmentBlock\">\r\n              <ng-container *ngTemplateOutlet=\"valueEditor; context: {cell: cell, item: curValue[cell.value.id]}\"></ng-container>\r\n            </ng-container>\r\n            <ng-template #fragmentBlock>\r\n              <ng-container *ngTemplateOutlet=\"fragmentEditor; context: {cell: cell, item: curValue[cell.fragment.id]}\"></ng-container>\r\n            </ng-template>\r\n          </ng-container>\r\n        </tr>\r\n      </table>\r\n    </div>\r\n  </ng-template>\r\n</div>\r\n\r\n<ng-template #cellContent let-cell=\"cell\" let-item=\"item\">\r\n  <span class=\"cell-name\" [class.show-small]=\"item.displayValue || item.value\">\r\n    {{ cell.name }}\r\n  </span>\r\n  <span class=\"cell-value\" *ngIf=\"item.displayValue || item.value\">\r\n    {{ item.displayValue || item.value }}\r\n  </span>\r\n</ng-template>\r\n\r\n<ng-template #valueEditor let-cell=\"cell\" let-item=\"item\">\r\n  <td class=\"cell\"\r\n    [width]=\"cell.width\"\r\n    [colSpan]=\"cell.colspan || 1\"\r\n    [rowSpan]=\"cell.rowspan || 1\"\r\n    [ngClass]=\"{ 'active': activeItem === item }\"\r\n    (click)=\"$event.stopPropagation(); handleCellClick(item)\">\r\n    <div class=\"cell-wrapper\"\r\n      [title]=\"cell.name\">\r\n      <ng-container *ngTemplateOutlet=\"cellContent; context: {cell: cell, item: item}\"></ng-container>\r\n    </div>\r\n    <simulate-border [show]=\"activeItem === item\"></simulate-border>\r\n    <cell-dropdown [show]=\"activeItem === item\" [cellValue]=\"item\" [resourceData]=\"resourceData\"></cell-dropdown>\r\n  </td>\r\n</ng-template>\r\n\r\n<ng-template #fragmentEditor let-cell=\"cell\" let-item=\"item\">\r\n  <!-- 不可新增不可删除的片段，长度始终为一 -->\r\n  <ng-container *ngIf=\"cell.fragment.uncopyable; else commonFragmentBlock\">\r\n    <td class=\"cell\"\r\n      [width]=\"cell.width\"\r\n      [colSpan]=\"cell.colspan || 1\"\r\n      [rowSpan]=\"cell.rowspan || 1\"\r\n      [ngClass]=\"{ 'active': activeItem === item.itemGroupArr[0] }\"\r\n      (click)=\"$event.stopPropagation(); handleCellClick(item.itemGroupArr[0])\">\r\n      <div class=\"cell-wrapper\"\r\n        [title]=\"cell.name\">\r\n        <ng-container *ngTemplateOutlet=\"cellContent; context: {cell: cell, item: getMainValueItem(cell, item.itemGroupArr[0])}\"></ng-container>\r\n      </div>\r\n      <simulate-border [show]=\"activeItem === item.itemGroupArr[0]\"></simulate-border>\r\n      <cell-dropdown [show]=\"activeItem === item.itemGroupArr[0]\" [cellValue]=\"item.itemGroupArr[0]\" [resourceData]=\"resourceData\"></cell-dropdown>\r\n    </td>\r\n  </ng-container>\r\n  <!-- 可以新增或删除的普通片段 -->\r\n  <ng-template #commonFragmentBlock>\r\n    <td class=\"inner cell\"\r\n      [width]=\"cell.width\"\r\n      [colSpan]=\"cell.colspan || 1\"\r\n      [rowSpan]=\"cell.rowspan || 1\">\r\n      <table class=\"inner grid\" *ngIf=\"item.itemGroupArr.length > 0; else appendBlock\">\r\n        <tr>\r\n          <td class=\"cell\"\r\n            (click)=\"$event.stopPropagation(); handleCellClick(itemGroup)\"\r\n            [ngClass]=\"{ 'active': activeItem === itemGroup }\"\r\n            *ngFor=\"let itemGroup of item.itemGroupArr; let idx = index\">\r\n            <div class=\"cell-wrapper\"\r\n              [title]=\"cell.name\">\r\n              <ng-container *ngTemplateOutlet=\"cellContent; context: {cell: cell, item: getMainValueItem(cell, itemGroup)}\"></ng-container>\r\n            </div>\r\n            <div class=\"add f-icon f-icon-add\"\r\n              (click)=\"$event.stopPropagation(); handleFragmentAddition(cell, item, idx)\"></div>\r\n            <div class=\"add append f-icon f-icon-add\"\r\n              *ngIf=\"idx === item.itemGroupArr.length - 1\"\r\n              (click)=\"$event.stopPropagation(); handleFragmentAddition(cell, item, -1)\"></div>\r\n            <div class=\"minus f-icon f-icon-delete\"\r\n              (click)=\"$event.stopPropagation(); handleFragmentMinus(itemGroup, cell, item)\"></div>\r\n            <simulate-border [show]=\"activeItem === itemGroup\"></simulate-border>\r\n            <cell-dropdown [show]=\"activeItem === itemGroup\" [cellValue]=\"itemGroup\" [resourceData]=\"resourceData\"></cell-dropdown>\r\n          </td>\r\n        </tr>\r\n      </table>\r\n      <ng-template #appendBlock>\r\n        <i class=\"fragment-append f-icon f-icon-add\"\r\n          *ngIf=\"item.itemGroupArr.length === 0\"\r\n          (click)=\"handleFragmentAddition(cell, item, -1)\"\r\n          [title]=\"cell.name\">\r\n        </i>\r\n      </ng-template>\r\n    </td>\r\n  </ng-template>\r\n</ng-template>\r\n","styles":[".grid-editor{overflow:auto;box-sizing:border-box;height:100%;padding:30px 10px 10px}.grid-editor .grid-wrapper{box-shadow:0 0 8px 0 rgba(91,163,255,.16)}.grid-editor .grid{width:100%;table-layout:auto;border-collapse:collapse}.grid-editor .grid .cell-wrapper{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;min-width:150px}.grid-editor .grid .cell-wrapper .cell-name{font-size:15px;color:#a0a4ac}.grid-editor .grid .cell-wrapper .cell-name.show-small{font-size:13px}.grid-editor .grid .cell-wrapper .cell-value{font-size:15px;color:#303133}.grid-editor .grid .cell{cursor:text;box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;text-align:center;vertical-align:middle;height:68px;background:#f8fafc;border:2px dashed #8f9db0}.grid-editor .grid .cell .minus{opacity:0;font-size:14px;z-index:10;cursor:pointer;position:absolute;top:5px;right:5px;height:20px;width:23px;border-radius:10px;box-shadow:0 2px 4px 0 rgba(123,131,142,.16);background-color:#fff;display:flex;justify-content:center;align-items:center;color:#b3b7ba}.grid-editor .grid .cell:hover>.minus{opacity:1}.grid-editor .grid .cell .add{box-sizing:content-box;opacity:0;position:absolute;cursor:pointer;height:72px;width:4px;background-clip:content-box;background-color:#007cff;box-shadow:0 3px 8px 0 rgba(78,148,255,.65);left:0;bottom:0;transform:translateX(-50%)}.grid-editor .grid .cell .add::before{cursor:pointer;position:absolute;width:24px;height:24px;top:0;left:50%;transform:translateX(-50%) translateY(-90%);background-image:linear-gradient(214deg,#3f65ff 0,#4d9aff 100%);box-shadow:0 3px 8px 0 rgba(78,148,255,.65);display:flex;justify-content:center;align-items:center;color:#fff;font-size:18px;border-radius:50%}.grid-editor .grid .cell .add::after{content:'';position:absolute;top:0;bottom:0;left:-9px;right:-9px}.grid-editor .grid .cell .add:hover{opacity:1}.grid-editor .grid .cell .add.append{left:auto;right:0;transform:translateX(50%)}.grid-editor .grid .cell.inner{border-style:solid;border-color:#bfcde0;padding-left:0;padding-right:0}.grid-editor .grid.inner{height:100%}.fragment-append{cursor:pointer;width:100%;height:100%;display:flex;justify-content:center;align-items:center}.fragment-append::before{color:#bfcde0;font-size:32px}"]}]}],"members":{"initValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"templateDesc":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"initValueTrusted":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":18,"character":3}}]}],"resourceData":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}}]}],"setClickAreaNativeEl":[{"__symbolic":"method"}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","module":"@farris/ui-notify","name":"NotifyService","line":53,"character":27}]}],"ngOnDestroy":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"mergeInitValueFromTemplateDesc":[{"__symbolic":"method"}],"setCustomValue":[{"__symbolic":"method"}],"mergeInitValue":[{"__symbolic":"method"}],"mergeValueItem":[{"__symbolic":"method"}],"mergeFragmentItem":[{"__symbolic":"method"}],"pushFragmentItem":[{"__symbolic":"method"}],"collectPlaceholder":[{"__symbolic":"method"}],"render":[{"__symbolic":"method"}],"handleCellClick":[{"__symbolic":"method"}],"handleFragmentAddition":[{"__symbolic":"method"}],"handleFragmentMinus":[{"__symbolic":"method"}],"getMainValueItem":[{"__symbolic":"method"}],"generateHtml":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵe"}]}],"escape":[{"__symbolic":"method"}],"antiEscape":[{"__symbolic":"method"}],"isFragmentItem":[{"__symbolic":"method"}],"inferItemType":[{"__symbolic":"method"}],"reduceCurValue":[{"__symbolic":"method"}],"generate":[{"__symbolic":"method"}],"replaceFragmentItem":[{"__symbolic":"method"}],"replaceValueItem":[{"__symbolic":"method"}],"checkRequired":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"convert":[{"__symbolic":"method"}],"handleValueItem":[{"__symbolic":"method"}],"convertRemoteVariable":[{"__symbolic":"method"}],"convertLocalVariable":[{"__symbolic":"method"}],"convertField":[{"__symbolic":"method"}],"convertCustom":[{"__symbolic":"method"}],"jointBracket":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"uni-input","template":"<div class=\"uni-input-wrapper\">\r\n  <div class=\"border-bottom p-2\">\r\n    <farris-radiogroup [horizontal]=\"true\" textField=\"text\" valueField=\"value\" [data]=\"inputTypeRadioData\"\r\n      [(ngModel)]=\"inputType\" (changeValue)=\"changeInputType()\">\r\n    </farris-radiogroup>\r\n  </div>\r\n\r\n  <!-- 自定义输入 -->\r\n  <div *ngIf=\"inputType === 'Custom'\" class=\"farris-form-controls-inline mt-3 mr-3\">\r\n    <div class=\"farris-group-wrap\">\r\n      <!-- 自定义字符串输入框 -->\r\n      <div class=\"form-group farris-form-group\">\r\n        <label class=\"col-form-label\">\r\n          <span class=\"farris-label-text\">请输入</span>\r\n        </label>\r\n        <div class=\"farris-input-wrap\">\r\n          <input #customInput type=\"input\" class=\"form-control\" [(ngModel)]=\"customValue\">\r\n        </div>\r\n      </div>\r\n      <!-- 国际化选项 -->\r\n      <div class=\"form-group farris-form-group\" *ngIf=\"!item.editor.disableI18N\">\r\n        <label class=\"col-form-label\">\r\n          <span class=\"farris-label-text\"></span>\r\n        </label>\r\n        <div class=\"farris-input-wrap\">\r\n          <div class=\"custom-control custom-checkbox custom-control-inline\">\r\n            <input type=\"checkbox\" [(ngModel)]=\"enableI18N\" class=\"custom-control-input\" id=\"enableI18N\">\r\n            <label class=\"custom-control-label\" for=\"enableI18N\">启用国际化</label>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <!-- 使用方法提示 -->\r\n      <div class=\"custom-tips\">\r\n        小贴士：<br />\r\n        1. 在其它类型选择一个变量、字段等，然后切换回自定义类型，可以继续编辑<br />\r\n        2. 应该仅为“标签式”的常量勾选国际化\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- 下拉框常量选择 -->\r\n  <div *ngIf=\"inputType === 'Const'\" class=\"farris-form-controls-inline m-3\">\r\n    <div class=\"farris-group-wrap\">\r\n      <div class=\"form-group farris-form-group\">\r\n        <label class=\"col-form-label\">\r\n          <span class=\"farris-label-text\">请选择</span>\r\n        </label>\r\n        <div class=\"farris-input-wrap\">\r\n          <farris-combo-list [(ngModel)]=\"comboValue\" idField=\"value\" textField=\"text\"\r\n            [data]=\"item.editor.enums\" [editable]=\"false\" [enableClear]=\"true\" (valueChange)=\"comboListValueChange($event)\">\r\n          </farris-combo-list>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- 变量或字段类型选择 -->\r\n  <div [style.display]=\"inputType === 'LocalVariable' || inputType === 'RemoteVariable' || inputType === 'Field' ? 'block' : 'none'\"\r\n    class=\"uni-input-tree\">\r\n    <farris-treetable #treeTable [data]=\"treeData\" [columns]=\"treeCols\" [idField]=\"'id'\" [fixedHeader]=\"true\"\r\n      [width]=\"'100%'\" [height]=\"'100%'\" [singleSelect]=\"true\" [showFilterBar]=\"false\" [resizableColumns]=\"true\"\r\n      [showBorder]=\"false\" [fit]=\"true\" [striped]=\"true\">\r\n      <ng-template farrisTemplate=\"body\" let-rowIndex let-rowNode let-rowData=\"rowData\" let-columns=\"columns\">\r\n        <tr [selectRow]=\"rowNode\" [rowIndex]=\"\" [dblclick]=\"true\" [selectRowDisabled]=\"!canChecked(rowNode.node)\"\r\n          [class.farris-table-selectedrow]=\"rowNode.isSelected\">\r\n          <td *ngFor=\"let col of columns; let i = index\">\r\n            <farris-treeTableToggler [rowNode]=\"rowNode\" *ngIf=\"i == 0\"></farris-treeTableToggler>\r\n            {{ rowData[col.field] }}\r\n          </td>\r\n        </tr>\r\n      </ng-template>\r\n    </farris-treetable>\r\n  </div>\r\n</div>\r\n\r\n<ng-template #footer>\r\n  <button type=\"button\" class=\"btn btn-secondary\" (click)=\"close()\">取消</button>\r\n  <button type=\"button\" class=\"btn btn-primary\" (click)=\"confirm()\">确认</button>\r\n</ng-template>\r\n","styles":[".uni-input-wrapper{overflow:auto;box-sizing:border-box;height:100%;display:flex;flex-direction:column}.uni-input-wrapper .uni-input-tree{flex:1}.custom-tips{margin-top:80px;margin-left:50px;color:#a0a4ac;line-height:1.6;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}"]}]}],"members":{"treeTable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":50,"character":3},"arguments":["treeTable"]}]}],"modalFooter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":56,"character":3},"arguments":["footer"]}]}],"customInput":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":59,"character":3},"arguments":["customInput"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@farris/ui-notify","name":"NotifyService","line":62,"character":27},{"__symbolic":"reference","name":"ɵe"}]}],"ngOnInit":[{"__symbolic":"method"}],"resetEnableI18N":[{"__symbolic":"method"}],"initComponentValue":[{"__symbolic":"method"}],"setInputTypeRadioData":[{"__symbolic":"method"}],"canChecked":[{"__symbolic":"method"}],"changeInputType":[{"__symbolic":"method"}],"getLastValue":[{"__symbolic":"method"}],"comboListValueChange":[{"__symbolic":"method"}],"confirm":[{"__symbolic":"method"}],"handleTreeDataConfirm":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}]}},"ɵg":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"block-nav","template":"<div class=\"block-nav\">\r\n  <div class=\"nav-item\"\r\n    *ngFor=\"let item of navData\"\r\n    [class.active]=\"activeNavId === item.id\"\r\n    [class.down]=\"mousedownId === item.id\"\r\n    (click)=\"handleNavItemClick(item.id)\"\r\n    (mouseout)=\"handleMouseout(item.id)\"\r\n    (mousedown)=\"handleMousedown(item.id)\"\r\n    (mouseup)=\"handleMouseup()\">\r\n    <div class=\"item-image\">\r\n      <ng-container *ngIf=\"!item['error']; else imageErrorBlock\">\r\n        <img src=\"{{item.image}}\"\r\n          (error)=\"item['error'] = true\"\r\n          (dragstart)=\"imageDragstart()\" />\r\n      </ng-container>\r\n      <ng-template #imageErrorBlock>\r\n        <div class=\"image-error\">\r\n          图片加载失败\r\n        </div>\r\n      </ng-template>\r\n    </div>\r\n    <div class=\"item-text\">\r\n      <div class=\"text-wrapper\">{{ item.text }}</div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","styles":[".block-nav{box-sizing:border-box;width:285px;height:100%;overflow-y:auto}.block-nav .nav-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;width:265px;background-color:#fff;margin:10px auto auto;border:1px solid #e8e8e8;border-radius:8px;transition:transform 80ms}.block-nav .nav-item.active{border-color:#0091ff;background-color:#f7faff}.block-nav .nav-item:hover{border-color:#0091ff}.block-nav .nav-item.down{transform:scale(.96)}.block-nav .nav-item .item-image{height:85px;padding:15px 8px 0}.block-nav .nav-item .item-image img{display:block;-o-object-fit:contain;object-fit:contain;border-radius:3.5px 3.5px 0 0;width:100%;height:100%;margin:auto}.block-nav .nav-item .item-image .image-error{display:flex;border-radius:3.5px 3.5px 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;justify-content:center;align-items:center;height:100%;font-size:18px;letter-spacing:1px;color:#c0c4cc;background-color:#f5f7fa}.block-nav .nav-item .item-text{height:28px;color:#4a5479;font-size:14px;padding:0 10px;display:flex;align-items:center;box-shadow:0 -2px 4px 0 rgba(217,230,246,.5);overflow:hidden}.block-nav .nav-item .item-text .text-wrapper{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}"]}]}],"members":{"navData":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":15,"character":3}}]}],"initialNavId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"navChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":17,"character":3}}]}],"ngOnChanges":[{"__symbolic":"method"}],"initialActiveNavId":[{"__symbolic":"method"}],"handleNavItemClick":[{"__symbolic":"method"}],"handleMouseout":[{"__symbolic":"method"}],"handleMousedown":[{"__symbolic":"method"}],"handleMouseup":[{"__symbolic":"method"}],"imageDragstart":[{"__symbolic":"method"}]}},"ɵh":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"simulate-border","template":"\n    <div *ngIf=\"show\" @borderTrigger class=\"simulate-border top\"></div>\n    <div *ngIf=\"show\" @borderTrigger class=\"simulate-border right\"></div>\n    <div *ngIf=\"show\" @borderTrigger class=\"simulate-border bottom\"></div>\n    <div *ngIf=\"show\" @borderTrigger class=\"simulate-border left\"></div>\n  ","animations":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":18,"character":4},"arguments":["borderTrigger",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":19,"character":6},"arguments":[":enter",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":20,"character":8},"arguments":[{"backgroundColor":"#8F9DB0"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":23,"character":8},"arguments":["50ms",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":23,"character":24},"arguments":[{"backgroundColor":"#2C80F3"}]}]}]]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":27,"character":6},"arguments":[":leave",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":28,"character":8},"arguments":["30ms",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":28,"character":24},"arguments":[{"backgroundColor":"#8F9DB0"}]}]}]]}]]}],"styles":[".simulate-border{position:absolute;background-color:#2c80f3;box-sizing:content-box;padding:0!important;margin:0!important;border:none!important}.simulate-border.top{top:-2px;left:-2px;right:-2px;height:2px}.simulate-border.right{right:-2px;top:-2px;bottom:-2px;width:2px}.simulate-border.bottom{bottom:-2px;left:-2px;right:-2px;height:2px}.simulate-border.left{left:-2px;top:-2px;bottom:-2px;width:2px}.simulate-border.show{display:block}"]}]}],"members":{"show":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":3}}]}]}},"ɵi":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":14,"character":1},"arguments":[{"selector":"cell-dropdown","animations":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":19,"character":4},"arguments":["cellDropdownTrigger",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":20,"character":6},"arguments":[":enter",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":21,"character":8},"arguments":[{"top":"50%","opacity":0}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":25,"character":8},"arguments":["50ms",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":25,"character":24},"arguments":[{"top":"100%","opacity":1}]}]}]]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":30,"character":6},"arguments":[":leave",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":31,"character":8},"arguments":["30ms",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":31,"character":24},"arguments":[{"top":"70%","opacity":0}]}]}]]}]]}],"template":"<div class=\"cell-dropdown\"\r\n  *ngIf=\"show\"\r\n  @cellDropdownTrigger\r\n  (click)=\"$event.stopPropagation();\">\r\n  <!-- 编辑条目列表 -->\r\n  <div class=\"value-item\" *ngFor=\"let item of valueArr\">\r\n    <div class=\"item-label\" [title]=\"item.editor.name\">\r\n      {{ item.editor.name }}\r\n    </div>\r\n    <div class=\"item-input\" [ngClass]=\"{'popover-mode': item.popover}\" (click)=\"handleItemClick(item)\">\r\n      <ng-container *ngIf=\"item.popover; else normalInput\">\r\n        <input class=\"popover-input\" [ngModel]=\"item.displayValue || item.value\" readonly=\"readonly\" />\r\n      </ng-container>\r\n      <ng-template #normalInput>\r\n        <input class=\"normal-input\" [(ngModel)]=\"item.value\" />\r\n      </ng-template>\r\n      <div class=\"popover-icon\" *ngIf=\"item.popover\">\r\n        <i class=\"f-icon f-icon-arrow-60-right\"></i>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","styles":[".cell-dropdown{position:absolute;z-index:100;top:100%;margin-top:5px;left:0;right:0;background-color:#fff;box-shadow:0 2px 10px 0 rgba(0,0,0,.15);border-radius:6px;cursor:default;font-size:13px;color:#949494;padding:10px 12px 20px;text-align:left}.cell-dropdown .value-item+.value-item{margin-top:6px}.cell-dropdown .item-label{line-height:28px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.cell-dropdown .item-input{position:relative;background:#fff;border:1px solid #eeeff2;height:28px;padding:5px 7px;box-sizing:border-box}.cell-dropdown .item-input.popover-mode{padding-right:30px}.cell-dropdown .item-input input{width:100%;border:none;outline:0;line-height:18px;color:#262626}.cell-dropdown .item-input input.popover-input{cursor:pointer}.cell-dropdown .item-input input.normal-input{cursor:text}.cell-dropdown .item-input .popover-icon{cursor:pointer;width:20px;height:20px;border-radius:50%;position:absolute;right:5px;top:50%;transform:translateY(-50%);display:flex;justify-content:center;align-items:center;background-color:#f1f4f9;border:1px solid #e1e4ea;color:#5c6777}"]}]}],"members":{"show":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":42,"character":3}}]}],"cellValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":44,"character":3}}]}],"resourceData":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":46,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":51,"character":22},{"__symbolic":"reference","module":"@farris/ui-modal","name":"BsModalService","line":52,"character":26},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":53,"character":22},{"__symbolic":"reference","name":"ɵb"}]}],"ngOnChanges":[{"__symbolic":"method"}],"handleItemClick":[{"__symbolic":"method"}]}}},"origins":{"TemplateEditorService":"./template-editor/template-editor.service","TemplateEditorComponent":"./template-editor/template-editor.component","TemplateEditorOpenerComponent":"./opener/opener.component","TemplateEditorModule":"./template-editor/template-editor.module","CellValue":"./template-editor.interface","ValueItem":"./template-editor.interface","Editor":"./template-editor.interface","FragmentItem":"./template-editor.interface","EditorMap":"./template-editor.interface","TemplateDesc":"./template-editor.interface","TemplateCellDesc":"./template-editor.interface","ValueItemDesc":"./template-editor.interface","FragmentItemDesc":"./template-editor.interface","GenerateResult":"./template-editor.interface","TemplateLog":"./template-editor.interface","UniInputType":"./template-editor.interface","UniInputTypeText":"./template-editor.interface","ResourceData":"./template-editor.interface","TYPE":"./template-editor.interface","ɵa":"./template-editor/resource.service","ɵb":"./global-variable","ɵc":"./grid-editor/grid-editor.component","ɵd":"./grid-editor/generate.service","ɵe":"./grid-editor/input-converter.service","ɵf":"./uni-input/uni-input.component","ɵg":"./block-nav/block-nav.component","ɵh":"./simulate-border/simulate-border.component","ɵi":"./cell-dropdown/cell-dropdown.component"},"importAs":"@farris/ide-template-editor"}