UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

765 lines 77.6 kB
/** * @fileoverview added by tsickle * Generated from: operable-tree.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, EventEmitter, Input, Output, ViewChild, ContentChild, ViewChildren, QueryList } from '@angular/core'; import { TreeComponent } from './tree.component'; import { TreeMaskService } from './tree-mask.service'; import { I18nService } from '@duoduo-oba/ng-devui/i18n'; var OperableTreeComponent = /** @class */ (function () { function OperableTreeComponent(i18n) { var _this = this; this.i18n = i18n; this.checkable = true; this.deletable = false; this.addable = false; this.editable = false; this.draggable = false; this.checkboxInput = {}; this.canActivateNode = true; this.canActivateParentNode = true; this.treeNodeTitleKey = 'title'; this.nodeSelected = new EventEmitter(); this.nodeDblClicked = new EventEmitter(); this.nodeDeleted = new EventEmitter(); this.nodeToggled = new EventEmitter(); this.nodeChecked = new EventEmitter(); this.nodeEdited = new EventEmitter(); this.editValueChange = new EventEmitter(); this.nodeOnDrop = new EventEmitter(); this.addingNode = false; this.treeNodeDragoverResponder = { node: null, timeout: null }; this.deleteNodesProxy = (/** * @param {?} event * @param {?} treeNode * @return {?} */ function (event, treeNode) { _this.deleteNodes(event, treeNode); }); this.addChildNodeProxy = (/** * @param {?} event * @param {?} treeNode * @param {?=} newNode * @return {?} */ function (event, treeNode, newNode) { _this.addChildNode(event, treeNode, newNode); }); this.editNodeProxy = (/** * @param {?} event * @param {?} treeNode * @return {?} */ function (event, treeNode) { _this.editNode(event, treeNode); }); this.i18nCommonText = this.i18n.getI18nText().common; this.i18nSubscription = this.i18n.langChange().subscribe((/** * @param {?} data * @return {?} */ function (data) { _this.i18nCommonText = data.common; })); } /** * @return {?} */ OperableTreeComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { this.elementAsMask = TreeMaskService.creatMaskElement(); }; /** * @param {?} e * @return {?} */ OperableTreeComponent.prototype.addBackGround = /** * @param {?} e * @return {?} */ function (e) { e.stopPropagation(); TreeMaskService.addMask(e.target, this.elementAsMask, TreeMaskService.calcWidth(this.treeNodeContent)); }; /** * @param {?} e * @return {?} */ OperableTreeComponent.prototype.removeBackGround = /** * @param {?} e * @return {?} */ function (e) { e.stopPropagation(); TreeMaskService.removeMask(e.target, this.elementAsMask); }; /** * @param {?} event * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.onDragstart = /** * @param {?} event * @param {?} treeNode * @return {?} */ function (event, treeNode) { /** @type {?} */ var data = { type: 'operable-tree-node', nodeId: treeNode.id, parentId: treeNode.parentId, nodeTitle: treeNode.data.title, isParent: treeNode.data.isParent }; event.dataTransfer.setData('Text', JSON.stringify(data)); }; /** * @param {?} event * @param {?} droppable * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.onDragover = /** * @param {?} event * @param {?} droppable * @param {?} treeNode * @return {?} */ function (event, droppable, treeNode) { var _this = this; if (droppable) { event.preventDefault(); event.dataTransfer.dropEffect = 'move'; if (!this.treeNodeDragoverResponder.node || (this.treeNodeDragoverResponder.node && this.treeNodeDragoverResponder.node.id !== treeNode.id)) { clearTimeout(this.treeNodeDragoverResponder.timeout); this.treeNodeDragoverResponder.node = treeNode; this.treeNodeDragoverResponder.timeout = setTimeout((/** * @return {?} */ function () { _this.treeFactory.openNodesById(treeNode.id); _this.nodeToggled.emit(treeNode); }), 1000); } } }; /** * @param {?} event * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.onDragleave = /** * @param {?} event * @param {?} treeNode * @return {?} */ function (event, treeNode) { if (this.treeNodeDragoverResponder.node && this.treeNodeDragoverResponder.node.id === treeNode.id) { this.treeNodeDragoverResponder.node = null; clearTimeout(this.treeNodeDragoverResponder.timeout); } }; /** * @param {?} event * @param {?} newParentNode * @return {?} */ OperableTreeComponent.prototype.onDrop = /** * @param {?} event * @param {?} newParentNode * @return {?} */ function (event, newParentNode) { var _this = this; if (!this.draggable) { return; } event.preventDefault(); /** @type {?} */ var transferDataStr = event.dataTransfer.getData('Text'); if (transferDataStr) { try { /** @type {?} */ var transferData = JSON.parse(transferDataStr); if (typeof (transferData) === 'object' && transferData.type === 'operable-tree-node') { /** @type {?} */ var dragNodeId_1 = transferData['nodeId']; /** @type {?} */ var dragNodeParentId = transferData['parentId']; if (dragNodeId_1 === newParentNode.id || dragNodeId_1 === newParentNode.parentId || dragNodeParentId === newParentNode.id || dragNodeParentId === undefined) { return; } /** @type {?} */ var dragResult = Promise.resolve(true); if (this.beforeNodeDrop) { dragResult = this.beforeNodeDrop(dragNodeId_1, newParentNode.id); } dragResult.then((/** * @return {?} */ function () { /** @type {?} */ var movingNode = _this.treeFactory.nodes[dragNodeId_1]; /** @type {?} */ var originalParentNode = _this.treeFactory.nodes[movingNode.parentId]; movingNode.parentId = newParentNode.id; _this.treeFactory.addChildNode(newParentNode, movingNode); originalParentNode.data.children = originalParentNode.data.children.filter((/** * @param {?} node * @return {?} */ function (node) { return node.id !== dragNodeId_1; })); if (!originalParentNode.data.children || !originalParentNode.data.children.length) { originalParentNode.data.isParent = false; } _this.nodeToggled.emit(newParentNode); _this.treeFactory.openNodesById(newParentNode.id); newParentNode.data.isParent = true; })); } } catch (e) { } finally { if (this.nodeOnDrop.observers.length > 0) { this.nodeOnDrop.emit({ event: event, treeNode: newParentNode }); } } } }; /** * @param {?} event * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.selectNode = /** * @param {?} event * @param {?} treeNode * @return {?} */ function (event, treeNode) { if (treeNode.data.disabled) { return; } if (!this.canActivateNode) { this.checkNode(event, treeNode); return; } if (this.canActivateParentNode || (!this.canActivateParentNode && !treeNode.data.isParent)) { this.treeFactory.activeNodeById(treeNode.id); } else { this.toggleNode(event, treeNode); } this.nodeSelected.emit(treeNode); }; /** * @param {?} event * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.toggleNode = /** * @param {?} event * @param {?} treeNode * @return {?} */ function (event, treeNode) { this.nodeToggled.emit(treeNode); this.treeFactory.toggleNodeById(treeNode.id); }; /** * @param {?} event * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.deleteNodes = /** * @param {?} event * @param {?} treeNode * @return {?} */ function (event, treeNode) { var _this = this; /** @type {?} */ var delResult = Promise.resolve(true); if (this.beforeDeleteNode) { delResult = this.beforeDeleteNode(treeNode); } delResult.then((/** * @return {?} */ function () { _this.treeFactory.deleteNodeById(treeNode.id); _this.nodeDeleted.emit(treeNode); })); }; /** * @param {?} event * @param {?} treeNode * @param {?=} newNode * @return {?} */ OperableTreeComponent.prototype.addChildNode = /** * @param {?} event * @param {?} treeNode * @param {?=} newNode * @return {?} */ function (event, treeNode, newNode) { var _this = this; /** @type {?} */ var addResult = Promise.resolve(newNode ? newNode : true); if (this.beforeAddNode) { addResult = this.beforeAddNode(treeNode); } addResult.then((/** * @param {?} nodeInfo * @return {?} */ function (nodeInfo) { /** @type {?} */ var node = _this.treeFactory.addNode({ parentId: treeNode.id, title: nodeInfo['title'] ? nodeInfo['title'] : '新增节点', isParent: nodeInfo['isParent'], id: nodeInfo['id'] ? nodeInfo['id'] : undefined, data: nodeInfo.data }); _this.treeFactory.editNodeTitle(node.id); _this.addingNode = true; treeNode.data.isOpen = true; treeNode.data.isParent = true; return treeNode; })); }; /** * @param {?} event * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.editNode = /** * @param {?} event * @param {?} treeNode * @return {?} */ function (event, treeNode) { var _this = this; /** @type {?} */ var editResult = Promise.resolve(true); if (this.beforeEditNode) { editResult = this.beforeEditNode(treeNode); } editResult.then((/** * @return {?} */ function () { _this.treeFactory.editNodeTitle(treeNode.id); })); }; /** * @param {?} checked * @param {?} id * @return {?} */ OperableTreeComponent.prototype.checkNodeById = /** * @param {?} checked * @param {?} id * @return {?} */ function (checked, id) { /** @type {?} */ var results = this.treeFactory.checkNodesById(id, checked); this.nodeChecked.emit(results); }; /** * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.onBlurEdit = /** * @param {?} treeNode * @return {?} */ function (treeNode) { if (!treeNode.data.errTips) { treeNode.data.editable = false; return this.postEditNode(treeNode); } }; /** * @param {?} currentValue * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.onInputChange = /** * @param {?} currentValue * @param {?} treeNode * @return {?} */ function (currentValue, treeNode) { this.editValueChange.emit({ value: currentValue, callback: (/** * @param {?} validateInfo * @return {?} */ function (validateInfo) { if (validateInfo && validateInfo.errTips) { treeNode.data.errTips = validateInfo.errTips; } else { if (treeNode.data.errTips) { delete treeNode.data.errTips; } } }) }); }; /** * @param {?} treeNode * @param {?} type * @return {?} */ OperableTreeComponent.prototype.treeNodeHover = /** * @param {?} treeNode * @param {?} type * @return {?} */ function (treeNode, type) { treeNode.data.isHover = type === 'enter'; }; /** * @param {?} node * @return {?} */ OperableTreeComponent.prototype.isSelectedNode = /** * @param {?} node * @return {?} */ function (node) { if (this.checkable) { return node.isChecked; } else { return node.isActive; } }; Object.defineProperty(OperableTreeComponent.prototype, "nodes", { get: /** * @return {?} */ function () { var _this = this; return this.operableTree ? Object.keys(this.treeFactory.nodes).map((/** * @param {?} k * @return {?} */ function (k) { return _this.treeFactory.nodes[k]; })) : []; }, enumerable: true, configurable: true }); /** * @private * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.postEditNode = /** * @private * @param {?} treeNode * @return {?} */ function (treeNode) { var _this = this; if (this.addingNode === true) { this.addingNode = false; if (typeof this.postAddNode === 'function') { /** @type {?} */ var originalId_1 = treeNode.id; return this.postAddNode(treeNode).then((/** * @param {?} nodeInfo * @return {?} */ function (nodeInfo) { // Swap id if id was modified by outer system treeNode.id = nodeInfo.id ? nodeInfo.id : originalId_1; delete _this.treeFactory.nodes[originalId_1]; if (nodeInfo.hasOwnProperty('data') && nodeInfo.data) { if (treeNode.hasOwnProperty('data') && treeNode.data.hasOwnProperty('data')) { treeNode.data.data = Object.assign({}, treeNode.data.data, nodeInfo.data); } else { treeNode.data = Object.assign(treeNode.data, { data: nodeInfo.data }); } } _this.treeFactory.nodes[treeNode.id] = treeNode; return treeNode; })).catch((/** * @param {?} e * @param {?=} reaction * @return {?} */ function (e, reaction) { if (reaction === void 0) { reaction = 'cancel'; } switch (reaction) { case 'justify': /** @type {?} */ var parentNode = _this.treeFactory.nodes[treeNode.parentId]; /** @type {?} */ var title = treeNode.data.title; _this.treeFactory.deleteNodeById(treeNode.id); _this.addChildNode(null, parentNode, { title: title }); break; case 'cancel': default: _this.treeFactory.deleteNodeById(treeNode.id); } return Promise.reject(e); })); } } else { this.nodeEdited.emit(treeNode); } return Promise.resolve(treeNode); }; /** * @param {?} treeItems * @param {?} parentId * @return {?} */ OperableTreeComponent.prototype.appendTreeItems = /** * @param {?} treeItems * @param {?} parentId * @return {?} */ function (treeItems, parentId) { if (!this.treeFactory.nodes[parentId]) { throw new Error('parent node does not exist.'); } this.treeFactory.mapTreeItems({ treeItems: treeItems, parentId: parentId, treeNodeChildrenKey: this.treeNodeChildrenKey, treeNodeIdKey: this.treeNodeIdKey, checkboxDisabledKey: this.checkboxDisabledKey, treeNodeTitleKey: this.treeNodeTitleKey }); }; Object.defineProperty(OperableTreeComponent.prototype, "treeFactory", { get: /** * @return {?} */ function () { return this.operableTree.treeFactory; }, enumerable: true, configurable: true }); /** * @param {?} checked * @param {?} treeNode * @return {?} */ OperableTreeComponent.prototype.checkNode = /** * @param {?} checked * @param {?} treeNode * @return {?} */ function (checked, treeNode) { if (!treeNode.data.disabled) { treeNode.data.isChecked = !treeNode.data.isChecked; this.checkNodeById(treeNode.data.isChecked, treeNode.id); } }; /** * @param {?} event * @param {?} node * @return {?} */ OperableTreeComponent.prototype.nodeDblClick = /** * @param {?} event * @param {?} node * @return {?} */ function (event, node) { this.nodeDblClicked.emit(node); }; /** * @return {?} */ OperableTreeComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.i18nSubscription) { this.i18nSubscription.unsubscribe(); } }; OperableTreeComponent.decorators = [ { type: Component, args: [{ selector: 'd-operable-tree', template: "<d-tree\r\n #operableTree\r\n [tree]=\"tree\"\r\n [treeNodeIdKey]=\"treeNodeIdKey\"\r\n [treeNodeChildrenKey]=\"treeNodeChildrenKey\"\r\n [treeNodesRef]=\"operableTreeNodeRef\"\r\n [iconParentOpen]=\"iconParentOpen\"\r\n [iconParentClose]=\"iconParentClose\"\r\n [iconLeaf]=\"iconLeaf\"\r\n [treeNodeTitleKey]=\"treeNodeTitleKey\"\r\n [checkboxDisabledKey]=\"checkboxDisabledKey\"\r\n>\r\n</d-tree>\r\n\r\n<ng-template #operableTreeNodeRef let-treeNode=\"treeNode\" let-treeFactory=\"treeFactory\">\r\n <div\r\n class=\"devui-tree-node devui-operable-tree-node\"\r\n [style.display]=\"treeNode.data.isHide ? 'none' : ''\"\r\n [ngClass]=\"{ selected: isSelectedNode(treeNode.data) }\"\r\n #treeNodeContent\r\n >\r\n <div\r\n class=\"devui-tree-node__content\"\r\n [class.devui-tree-node--parent]=\"(treeNode.data.children || []).length > 0\"\r\n (mouseenter)=\"treeNodeHover(treeNode, 'enter')\"\r\n (mouseleave)=\"treeNodeHover(treeNode, 'leave')\"\r\n [draggable]=\"draggable && treeNode.parentId !== undefined\"\r\n (dragstart)=\"onDragstart($event, treeNode)\"\r\n (dragover)=\"onDragover($event, draggable, treeNode)\"\r\n (dragleave)=\"onDragleave($event, treeNode)\"\r\n (drop)=\"onDrop($event, treeNode)\"\r\n (mouseenter)=\"addBackGround($event)\"\r\n (mouseleave)=\"removeBackGround($event)\"\r\n >\r\n <div class=\"devui-tree-node__content--value-wrapper\" [class.isMatch]=\"treeNode.data.isMatch\">\r\n <span\r\n (click)=\"toggleNode($event, treeNode)\"\r\n *ngIf=\"(treeNode.data.children || []).length > 0 || treeNode.data.isParent\"\r\n class=\"devui-tree-node__folder\"\r\n >\r\n <span\r\n [ngStyle]=\"{\r\n display: iconParentClose && !treeNode.data.isOpen ? 'inline' : 'none'\r\n }\"\r\n [innerHTML]=\"iconParentClose | safe: 'html'\"\r\n ></span>\r\n <span\r\n [ngStyle]=\"{\r\n display: iconParentOpen && treeNode.data.isOpen ? 'inline' : 'none'\r\n }\"\r\n [innerHTML]=\"iconParentOpen | safe: 'html'\"\r\n ></span>\r\n <span\r\n [ngStyle]=\"{\r\n display: !iconParentOpen && !treeNode.data.isOpen ? 'inline' : 'none'\r\n }\"\r\n >\r\n <svg\r\n class=\"svg-icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n >\r\n <g id=\"\u56FE\u6807\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g id=\"fold\">\r\n <rect id=\"Rectangle-175\" x=\"0\" y=\"0\" width=\"16\" height=\"16\" />\r\n <path\r\n d=\"M14,6 L14,5 L7.58578644,5 L5.58578644,3 L2,3 L2,6 L14,6 Z M14,7 L2,7 L2,13 L14,13 L14,7 Z M1,2 L6,2 L8,4 L15,4 L15,14 L1,14 L1,2 Z\"\r\n id=\"\u5F62\u72B6\"\r\n fill=\"#293040\"\r\n fill-rule=\"nonzero\"\r\n />\r\n </g>\r\n </g>\r\n </svg>\r\n </span>\r\n <span\r\n [ngStyle]=\"{\r\n display: !iconParentOpen && treeNode.data.isOpen ? 'inline' : 'none'\r\n }\"\r\n >\r\n <svg\r\n class=\"svg-icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n >\r\n <g id=\"\u56FE\u6807\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g id=\"fold-copy-3\">\r\n <rect id=\"Rectangle-175\" x=\"0\" y=\"0\" width=\"16\" height=\"16\" />\r\n <path\r\n d=\"M14,5 L14,4 L7.58578644,4 L5.58578644,2 L2,2 L2,5 L1,5 L1,1 L6,1 L8,3 L15,3 L15,5 L14,5 Z M1.28077641,7 L2.78077641,13 L13.2192236,13 L14.7192236,7 L1.28077641,7 Z M0,6 L16,6 L14,14 L2,14 L0,6 Z\"\r\n id=\"\u5F62\u72B6\"\r\n fill=\"#293040\"\r\n fill-rule=\"nonzero\"\r\n />\r\n </g>\r\n </g>\r\n </svg>\r\n </span>\r\n </span>\r\n <span class=\"devui-tree-node__leaf\" *ngIf=\"(treeNode.data.children || []).length === 0 && !treeNode.data.isParent\">\r\n <span *ngIf=\"!iconLeaf\">\r\n <svg\r\n class=\"svg-icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n >\r\n <g id=\"\u56FE\u6807\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g id=\"\u6587\u4EF6\">\r\n <rect id=\"Rectangle-175\" x=\"0\" y=\"0\" width=\"16\" height=\"16\" />\r\n <path\r\n d=\"M13,6 L9,6 L9,2 L3,2 L3,14 L13,14 L13,6 Z M12.5857864,5 L10,2.41421356 L10,5 L12.5857864,5 Z M2,1 L10,1 L14,5 L14,15 L2,15 L2,1 Z\"\r\n id=\"\u5F62\u72B6\"\r\n fill=\"#293040\"\r\n fill-rule=\"nonzero\"\r\n />\r\n </g>\r\n </g>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"iconLeaf\" [innerHTML]=\"iconLeaf | safe: 'html'\"></span>\r\n </span>\r\n <ng-container *ngIf=\"iconTemplate && iconTemplatePosition === 'before-checkbox'\">\r\n <ng-template [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode.data }\"> </ng-template>\r\n </ng-container>\r\n <d-checkbox\r\n *ngIf=\"checkable\"\r\n [(ngModel)]=\"treeNode.data.isChecked\"\r\n (ngModelChange)=\"checkNodeById($event, treeNode.id)\"\r\n [halfchecked]=\"treeNode.data.halfChecked\"\r\n [color]=\"checkboxInput?.color\"\r\n [cssClass]=\"'devui-tree-node__checkbox'\"\r\n [disabled]=\"treeNode.data.disabled\"\r\n >\r\n </d-checkbox>\r\n <ng-container *ngIf=\"iconTemplate && (!iconTemplatePosition || iconTemplatePosition === 'after-checkbox')\">\r\n <ng-template [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode.data }\"> </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"nodeTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"nodeTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode.data }\"> </ng-template>\r\n </ng-container>\r\n <span\r\n *ngIf=\"!nodeTemplate && !treeNode.data?.editable\"\r\n (click)=\"selectNode($event, treeNode)\"\r\n (dblclick)=\"nodeDblClick($event, treeNode)\"\r\n class=\"devui-tree-node__title\"\r\n [class.active]=\"treeNode.data.isActive\"\r\n [class.disabled]=\"treeNode.data.disabled\"\r\n title=\"{{ treeNode.data.title }}\"\r\n >{{ treeNode.data.title }}</span\r\n >\r\n <span class=\"devui-tree-node__edit\" *ngIf=\"!nodeTemplate && treeNode.data?.editable\">\r\n <input\r\n [class.error]=\"!!treeNode.data.errTips\"\r\n class=\"devui-form-control devui-input-sm\"\r\n type=\"text\"\r\n dTreeAutoFocus\r\n [(ngModel)]=\"treeNode.data.title\"\r\n (blur)=\"onBlurEdit(treeNode)\"\r\n (keyup.enter)=\"onBlurEdit(treeNode)\"\r\n (input)=\"onInputChange($event.target.value, treeNode)\"\r\n dPopover\r\n [content]=\"treeNode.data.errTips\"\r\n [position]=\"'top'\"\r\n [appendToBody]=\"true\"\r\n [visible]=\"!!treeNode.data.errTips\"\r\n [popType]=\"'error'\"\r\n />\r\n </span>\r\n <ng-container *ngIf=\"statusTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"statusTemplate\" [ngTemplateOutletContext]=\"{ node: treeNode }\"> </ng-template>\r\n </ng-container>\r\n <span dLoading [showLoading]=\"treeNode.data.loading\" [loadingTemplateRef]=\"customizedLoadingRef\"> </span>\r\n <span\r\n class=\"devui-tree-icons\"\r\n *ngIf=\"!treeNode.data.disableAdd && (treeNode.data.isActive || treeNode.data.isHover) && addable\"\r\n (click)=\"addChildNode($event, treeNode)\"\r\n >\r\n <svg\r\n width=\"12px\"\r\n height=\"12px\"\r\n viewBox=\"0 0 12 12\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g id=\"add-plus\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-531.000000, -168.000000)\">\r\n <g transform=\"translate(529.000000, 166.000000)\">\r\n <path d=\"M7,7 L7,2 L9,2 L9,7 L14,7 L14,9 L9,9 L9,14 L7,14 L7,9 L2,9 L2,7 L7,7 Z\" id=\"add-path\" fill=\"#293040\"></path>\r\n </g>\r\n </g>\r\n </g>\r\n </svg>\r\n </span>\r\n <span\r\n class=\"devui-tree-icons\"\r\n *ngIf=\"!treeNode.data.disableEdit && (treeNode.data.isActive || treeNode.data.isHover) && editable\"\r\n (click)=\"editNode($event, treeNode)\"\r\n >\r\n <svg\r\n width=\"12px\"\r\n height=\"12px\"\r\n viewBox=\"0 0 12 12\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g id=\"edit\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-652.000000, -1070.000000)\">\r\n <g transform=\"translate(650.000000, 1068.000000)\">\r\n <path\r\n d=\"M9.48528137,3.41421356 L10.8994949,2 L13.7279221,4.82842712 L12.3137085,6.24264069 L9.48528137,3.41421356 Z M5.24264069,13.3137085 L2.41421356,13.3137085 L2.41421356,10.4852814 L8.77817459,4.12132034 L11.6066017,6.94974747 L5.24264069,13.3137085 Z\"\r\n id=\"edit-path\"\r\n fill=\"#293040\"\r\n ></path>\r\n </g>\r\n </g>\r\n </g>\r\n </svg>\r\n </span>\r\n <span\r\n class=\"devui-tree-icons\"\r\n *ngIf=\"!treeNode.data.disableDelete && (treeNode.data.isActive || treeNode.data.isHover) && deletable\"\r\n (click)=\"deleteNodes($event, treeNode)\"\r\n >\r\n <svg\r\n width=\"12px\"\r\n height=\"12px\"\r\n viewBox=\"0 0 12 12\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g id=\"delete\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-1693.000000, -168.000000)\" fill=\"#3C4458\" fill-rule=\"nonzero\" id=\"delete-path\">\r\n <g transform=\"translate(1691.000000, 166.000000)\">\r\n <polygon\r\n id=\"Mask\"\r\n points=\"8 6.58578644 12.2426407 2.34314575 13.6568542 3.75735931 9.41421356 8 13.6568542 12.2426407 12.2426407 13.6568542 8 9.41421356 3.75735931 13.6568542 2.34314575 12.2426407 6.58578644 8 2.34314575 3.75735931 3.75735931 2.34314575\"\r\n ></polygon>\r\n </g>\r\n </g>\r\n </g>\r\n </svg>\r\n </span>\r\n <ng-container *ngIf=\"operatorTemplate && (treeNode.data.isActive || treeNode.data.isHover)\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"operatorTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: this, node: treeNode, addNode: addChildNodeProxy, editNode: editNodeProxy, deleteNode: deleteNodesProxy}\"\r\n >\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"devui-tree-node__children\" *ngIf=\"treeNode.data.isOpen\">\r\n <d-tree-nodes [treeList]=\"treeNode.data.children || []\" [treeNodesRef]=\"operableTreeNodeRef\" [treeFactory]=\"treeFactory\">\r\n </d-tree-nodes>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #customizedLoadingRef>\r\n <span class=\"devui-loading-children\">{{ i18nCommonText?.loading }}</span>\r\n</ng-template>\r\n", exportAs: 'dOperableTreeComponent', styles: [".devui-tree-node{color:#575d6c;line-height:1;white-space:nowrap;position:relative}.devui-tree-node .devui-tree-node__content{display:-webkit-inline-box;display:inline-flex;-webkit-box-align:center;align-items:center;font-size:14px}.devui-tree-node .devui-tree-node__content--value-wrapper{display:-webkit-inline-box;display:inline-flex;-webkit-box-align:center;align-items:center;padding:.1em;margin:.3em 0}.devui-tree-node .devui-tree-node__content--value-wrapper.isMatch{color:#5e7ce0;border:1px solid #dfe1e6;border-radius:.2em}.devui-tree-node .devui-tree-node__children{padding-left:.8em}.devui-tree-node .devui-tree-node__children:first-child{border-left-color:transparent}.devui-tree-node .devui-tree-node__children .devui-tree-node{margin-left:1.2em;content:'';position:relative}.devui-tree-node .devui-tree-node__children .devui-tree-node:last-child{border-left-color:transparent}.devui-tree-node .devui-tree-node__title{margin-left:.4em;padding:.1em;display:inline-block;border:1px dashed transparent;border-radius:2px;cursor:pointer}.devui-tree-node .devui-tree-node__title.active{background-color:#f2f5fc;color:#5e7ce0;text-decoration:none;border-color:transparent}.devui-tree-node .devui-tree-node__edit{margin-left:.4em;padding:.1em}.devui-tree-node .devui-tree-node__edit>.devui-input-sm{height:26px}.devui-tree-node .devui-tree-node__edit>.devui-input-sm.error,.devui-tree-node .devui-tree-node__edit>.devui-input-sm.error:focus,.devui-tree-node .devui-tree-node__edit>.devui-input-sm.error:hover{border-color:#f66f6a}.devui-tree-node .devui-tree-node__leaf{cursor:default}.devui-tree-node .devui-tree-node__leaf .devui-tree-node__leaf--default{color:#f2a71f}.devui-tree-node .devui-tree-node__folder{display:inline-block;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.devui-tree-node .devui-tree-node__folder .devui-tree-node__folder--default{color:#f2b806}.devui-tree-node .devui-loading-children{display:inline-block;vertical-align:middle;margin-left:.5em;margin-top:.15em;color:#5e7ce0;font-style:italic;font-size:1em;-webkit-animation-name:devui-loading-children;animation-name:devui-loading-children;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}@-webkit-keyframes devui-loading-children{0%,12.5%{color:#627fe1}25%{color:#617fe1}37.5%{color:#617ee1}50%,62.5%{color:#607ee0}75%{color:#5f7de0}100%,87.5%{color:#5e7ce0}}@keyframes devui-loading-children{0%,12.5%{color:#627fe1}25%{color:#617fe1}37.5%{color:#617ee1}50%,62.5%{color:#607ee0}75%{color:#5f7de0}100%,87.5%{color:#5e7ce0}}.devui-tree-node svg.svg-icon>g>g>path{fill:#575d6c}::ng-deep .devui-tree-mask{background:#f2f5fc}:host{display:block}.disabled{opacity:.3;cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::ng-deep.devui-tree-node.devui-operable-tree-node .devui-tree-node__checkbox{margin-left:.5em;margin-top:-.2em}::ng-deep.devui-tree-node.devui-operable-tree-node .devui-tree-node__checkbox .devui-checkbox-material{width:16px;height:16px}::ng-deep.devui-tree-node.devui-operable-tree-node .devui-tree-icons{margin-left:.5em;cursor:pointer}::ng-deep.devui-tree-node.devui-operable-tree-node .devui-tree-icons svg #add-path{fill:#252b3a}::ng-deep.devui-tree-node.devui-operable-tree-node .devui-tree-icons svg #edit-path{fill:#252b3a}::ng-deep.devui-tree-node.devui-operable-tree-node .devui-tree-icons svg #delete-path{fill:#252b3a}::ng-deep.devui-tree-node.devui-operable-tree-node .devui-tree-icons:hover #add-path{fill:#344899}::ng-deep.devui-tree-node.devui-operable-tree-node .devui-tree-icons:hover #edit-path{fill:#344899}::ng-deep.devui-tree-node.devui-operable-tree-node .devui-tree-icons:hover #delete-path{fill:#344899}::ng-deep.devui-tree-node.devui-operable-tree-node svg.svg-icon>g>g>path{fill:#575d6c}.devui-form-control{outline:0}"] }] } ]; /** @nocollapse */ OperableTreeComponent.ctorParameters = function () { return [ { type: I18nService } ]; }; OperableTreeComponent.propDecorators = { tree: [{ type: Input }], treeNodeIdKey: [{ type: Input }], treeNodeChildrenKey: [{ type: Input }], checkboxDisabledKey: [{ type: Input }], iconParentOpen: [{ type: Input }], iconParentClose: [{ type: Input }], iconLeaf: [{ type: Input }], showLoading: [{ type: Input }], checkable: [{ type: Input }], deletable: [{ type: Input }], addable: [{ type: Input }], editable: [{ type: Input }], draggable: [{ type: Input }], checkboxInput: [{ type: Input }], beforeAddNode: [{ type: Input }], beforeDeleteNode: [{ type: Input }], beforeNodeDrop: [{ type: Input }], beforeEditNode: [{ type: Input }], canActivateNode: [{ type: Input }], canActivateParentNode: [{ type: Input }], treeNodeTitleKey: [{ type: Input }], postAddNode: [{ type: Input }], iconTemplatePosition: [{ type: Input }], nodeSelected: [{ type: Output }], nodeDblClicked: [{ type: Output }], nodeDeleted: [{ type: Output }], nodeToggled: [{ type: Output }], nodeChecked: [{ type: Output }], nodeEdited: [{ type: Output }], editValueChange: [{ type: Output }], nodeOnDrop: [{ type: Output }], operableTree: [{ type: ViewChild, args: ['operableTree', { static: true },] }], iconTemplate: [{ type: ContentChild, args: ['iconTemplate', { static: false },] }], nodeTemplate: [{ type: ContentChild, args: ['nodeTemplate', { static: false },] }], operatorTemplate: [{ type: ContentChild, args: ['operatorTemplate', { static: false },] }], statusTemplate: [{ type: ContentChild, args: ['statusTemplate', { static: false },] }], treeNodeContent: [{ type: ViewChildren, args: ['treeNodeContent',] }] }; return OperableTreeComponent; }()); export { OperableTreeComponent }; if (false) { /** @type {?} */ OperableTreeComponent.prototype.tree; /** @type {?} */ OperableTreeComponent.prototype.treeNodeIdKey; /** @type {?} */ OperableTreeComponent.prototype.treeNodeChildrenKey; /** @type {?} */ OperableTreeComponent.prototype.checkboxDisabledKey; /** @type {?} */ OperableTreeComponent.prototype.iconParentOpen; /** @type {?} */ OperableTreeComponent.prototype.iconParentClose; /** @type {?} */ OperableTreeComponent.prototype.iconLeaf; /** @type {?} */ OperableTreeComponent.prototype.showLoading; /** @type {?} */ OperableTreeComponent.prototype.checkable; /** @type {?} */ OperableTreeComponent.prototype.deletable; /** @type {?} */ OperableTreeComponent.prototype.addable; /** @type {?} */ OperableTreeComponent.prototype.editable; /** @type {?} */ OperableTreeComponent.prototype.draggable; /** @type {?} */ OperableTreeComponent.prototype.checkboxInput; /** @type {?} */ OperableTreeComponent.prototype.beforeAddNode; /** @type {?} */ OperableTreeComponent.prototype.beforeDeleteNode; /** @type {?} */ OperableTreeComponent.prototype.beforeNodeDrop; /** @type {?} */ OperableTreeComponent.prototype.beforeEditNode; /** @type {?} */ OperableTreeComponent.prototype.canActivateNode; /** @type {?} */ OperableTreeComponent.prototype.canActivateParentNode; /** @type {?} */ OperableTreeComponent.prototype.treeNodeTitleKey; /** @type {?} */ OperableTreeComponent.prototype.postAddNode; /** @type {?} */ OperableTreeComponent.prototype.iconTemplatePosition; /** @type {?} */ OperableTreeComponent.prototype.nodeSelected; /** @type {?} */ OperableTreeComponent.prototype.nodeDblClicked; /** @type {?} */ OperableTreeComponent.prototype.nodeDeleted; /** @type {?} */ OperableTreeComponent.prototype.nodeToggled; /** @type {?} */ OperableTreeComponent.prototype.nodeChecked; /** @type {?} */ OperableTreeComponent.prototype.nodeEdited; /** @type {?} */ OperableTreeComponent.prototype.editValueChange; /** @type {?} */ OperableTreeComponent.prototype.nodeOnDrop; /** @type {?} */ OperableTreeComponent.prototype.operableTree; /** @type {?} */ OperableTreeComponent.prototype.iconTemplate; /** @type {?} */ OperableTreeComponent.prototype.nodeTemplate; /** @type {?} */ OperableTreeComponent.prototype.operatorTemplate; /** @type {?} */ OperableTreeComponent.prototype.statusTemplate; /** * @type {?} * @private */ OperableTreeComponent.prototype.addingNode; /** * @type {?} * @private */ OperableTreeComponent.prototype.treeNodeDragoverResponder; /** @type {?} */ OperableTreeComponent.prototype.treeNodeContent; /** @type {?} */ OperableTreeComponent.prototype.elementAsMask; /** @type {?} */ OperableTreeComponent.prototype.i18nCommonText; /** @type {?} */ OperableTreeComponent.prototype.i18nSubscription; /** @type {?} */ OperableTreeComponent.prototype.deleteNodesProxy; /** @type {?} */ OperableTreeComponent.prototype.addChildNodeProxy; /** @type {?} */ OperableTreeComponent.prototype.editNodeProxy; /** * @type {?} * @private */ OperableTreeComponent.prototype.i18n; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmFibGUtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS90cmVlLyIsInNvdXJjZXMiOlsib3BlcmFibGUtdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBRVosWUFBWSxFQUVaLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRTNEO0lBb0RFLCtCQUFvQixJQUFpQjtRQUFyQyxpQkFLQztRQUxtQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBckM1QixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBS25DLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM3QixxQkFBZ0IsR0FBRyxPQUFPLENBQUM7UUFHMUIsaUJBQVksR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyRCxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZELGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEQsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwRCxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BELGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuRCxvQkFBZSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hELGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU1yRCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLDhCQUF5QixHQUFHO1lBQ2xDLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO1FBMElGLHFCQUFnQjs7Ozs7UUFBRyxVQUFDLEtBQUssRUFBRSxRQUFrQjtZQUMzQyxLQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwQyxDQUFDLEVBQUE7UUF3QkQsc0JBQWlCOzs7Ozs7UUFBRyxVQUFDLEtBQUssRUFBRSxRQUFrQixFQUFFLE9BQVE7WUFDdEQsS0FBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUMsRUFBQTtRQVlELGtCQUFhOzs7OztRQUFHLFVBQUMsS0FBSyxFQUFFLFFBQWtCO1lBQ3hDLEtBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsRUFBQTtRQTlLQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFDLElBQUk7WUFDNUQsS0FBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3BDLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7OztJQUNELCtDQUFlOzs7SUFBZjtRQUNFLElBQUksQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUQsQ0FBQzs7Ozs7SUFFRCw2Q0FBYTs7OztJQUFiLFVBQWMsQ0FBQztRQUNiLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7Ozs7O0lBRUQsZ0RBQWdCOzs7O0lBQWhCLFVBQWlCLENBQUM7UUFDaEIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7Ozs7O0lBRUQsMkNBQVc7Ozs7O0lBQVgsVUFBWSxLQUFLLEVBQUUsUUFBUTs7WUFDbkIsSUFBSSxHQUFHO1lBQ1gsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDbkIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1lBQzNCLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDOUIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUNqQztRQUNELEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7Ozs7OztJQUVELDBDQUFVOzs7Ozs7SUFBVixVQUFXLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUTtRQUFyQyxpQkFjQztRQWJDLElBQUksU0FBUyxFQUFFO1lBQ2IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUk7Z0JBQ3RDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ2pHLFlBQVksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO2dCQUMvQyxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxHQUFHLFVBQVU7OztnQkFBQztvQkFDbEQsS0FBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM1QyxLQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEMsQ0FBQyxHQUFFLElBQUksQ0FBQyxDQUFDO2FBQ1Y7U0FDRjtJQUNILENBQUM7Ozs7OztJQUVELDJDQUFXOzs7OztJQUFYLFVBQVksS0FBSyxFQUFFLFFBQVE7UUFDekIsSUFBSSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDakcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDM0MsWUFBWSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7Ozs7OztJQUdELHNDQUFNOzs7OztJQUFOLFVBQU8sS0FBSyxFQUFFLGFBQWE7UUFBM0IsaUJBMkNDO1FBMUNDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ25CLE9BQU87U0FDUjtRQUNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzs7WUFDakIsZUFBZSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUMxRCxJQUFJLGVBQWUsRUFBRTtZQUNuQixJQUFJOztvQkFDSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7Z0JBQ2hELElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFOzt3QkFDOUUsWUFBVSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7O3dCQUNuQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO29CQUNqRCxJQUFJLFlBQVUsS0FBSyxhQUFhLENBQUMsRUFBRSxJQUFJLFlBQVUsS0FBSyxhQUFhLENBQUMsUUFBUTsyQkFDdkUsZ0JBQWdCLEtBQUssYUFBYSxDQUFDLEVBQUUsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7d0JBQzVFLE9BQU87cUJBQ1I7O3dCQUNHLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUN2QixVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFVLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNoRTtvQkFFRCxVQUFVLENBQUMsSUFBSTs7O29CQUFDOzs0QkFDUixVQUFVLEdBQUcsS0FBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBVSxDQUFDOzs0QkFDL0Msa0JBQWtCLEdBQUcsS0FBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQzt3QkFDdEUsVUFBVSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDO3dCQUN2QyxLQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ3pELGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNOzs7O3dCQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLEVBQUUsS0FBSyxZQUFVLEVBQXRCLENBQXNCLEVBQUMsQ0FBQzt3QkFDM0csSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTs0QkFDakYsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7eUJBQzFDO3dCQUNELEtBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUNyQyxLQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ2pELGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDckMsQ0FBQyxFQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2FBRVg7b0JBQVM7Z0JBQ1IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBQSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO2lCQUMxRDthQUNGO1NBQ0Y7SUFDSCxDQUFDOzs7Ozs7SUFFRCwwQ0FBVTs7Ozs7SUFBVixVQUFXLEtBQUssRUFBRSxRQUFrQjtRQUNsQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzFCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENB