UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

645 lines 73.3 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'; export class OperableTreeComponent { /** * @param {?} i18n */ constructor(i18n) { 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 {?} */ (event, treeNode) => { this.deleteNodes(event, treeNode); }); this.addChildNodeProxy = (/** * @param {?} event * @param {?} treeNode * @param {?=} newNode * @return {?} */ (event, treeNode, newNode) => { this.addChildNode(event, treeNode, newNode); }); this.editNodeProxy = (/** * @param {?} event * @param {?} treeNode * @return {?} */ (event, treeNode) => { this.editNode(event, treeNode); }); this.i18nCommonText = this.i18n.getI18nText().common; this.i18nSubscription = this.i18n.langChange().subscribe((/** * @param {?} data * @return {?} */ (data) => { this.i18nCommonText = data.common; })); } /** * @return {?} */ ngAfterViewInit() { this.elementAsMask = TreeMaskService.creatMaskElement(); } /** * @param {?} e * @return {?} */ addBackGround(e) { e.stopPropagation(); TreeMaskService.addMask(e.target, this.elementAsMask, TreeMaskService.calcWidth(this.treeNodeContent)); } /** * @param {?} e * @return {?} */ removeBackGround(e) { e.stopPropagation(); TreeMaskService.removeMask(e.target, this.elementAsMask); } /** * @param {?} event * @param {?} treeNode * @return {?} */ onDragstart(event, treeNode) { /** @type {?} */ const 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 {?} */ onDragover(event, droppable, treeNode) { 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 {?} */ () => { this.treeFactory.openNodesById(treeNode.id); this.nodeToggled.emit(treeNode); }), 1000); } } } /** * @param {?} event * @param {?} treeNode * @return {?} */ onDragleave(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 {?} */ onDrop(event, newParentNode) { if (!this.draggable) { return; } event.preventDefault(); /** @type {?} */ const transferDataStr = event.dataTransfer.getData('Text'); if (transferDataStr) { try { /** @type {?} */ const transferData = JSON.parse(transferDataStr); if (typeof (transferData) === 'object' && transferData.type === 'operable-tree-node') { /** @type {?} */ const dragNodeId = transferData['nodeId']; /** @type {?} */ const dragNodeParentId = transferData['parentId']; if (dragNodeId === newParentNode.id || dragNodeId === newParentNode.parentId || dragNodeParentId === newParentNode.id || dragNodeParentId === undefined) { return; } /** @type {?} */ let dragResult = Promise.resolve(true); if (this.beforeNodeDrop) { dragResult = this.beforeNodeDrop(dragNodeId, newParentNode.id); } dragResult.then((/** * @return {?} */ () => { /** @type {?} */ const movingNode = this.treeFactory.nodes[dragNodeId]; /** @type {?} */ const 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 {?} */ node => node.id !== dragNodeId)); 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, treeNode: newParentNode }); } } } } /** * @param {?} event * @param {?} treeNode * @return {?} */ selectNode(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 {?} */ toggleNode(event, treeNode) { this.nodeToggled.emit(treeNode); this.treeFactory.toggleNodeById(treeNode.id); } /** * @param {?} event * @param {?} treeNode * @return {?} */ deleteNodes(event, treeNode) { /** @type {?} */ let delResult = Promise.resolve(true); if (this.beforeDeleteNode) { delResult = this.beforeDeleteNode(treeNode); } delResult.then((/** * @return {?} */ () => { this.treeFactory.deleteNodeById(treeNode.id); this.nodeDeleted.emit(treeNode); })); } /** * @param {?} event * @param {?} treeNode * @param {?=} newNode * @return {?} */ addChildNode(event, treeNode, newNode) { /** @type {?} */ let addResult = Promise.resolve(newNode ? newNode : true); if (this.beforeAddNode) { addResult = this.beforeAddNode(treeNode); } addResult.then((/** * @param {?} nodeInfo * @return {?} */ (nodeInfo) => { /** @type {?} */ const 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 {?} */ editNode(event, treeNode) { /** @type {?} */ let editResult = Promise.resolve(true); if (this.beforeEditNode) { editResult = this.beforeEditNode(treeNode); } editResult.then((/** * @return {?} */ () => { this.treeFactory.editNodeTitle(treeNode.id); })); } /** * @param {?} checked * @param {?} id * @return {?} */ checkNodeById(checked, id) { /** @type {?} */ const results = this.treeFactory.checkNodesById(id, checked); this.nodeChecked.emit(results); } /** * @param {?} treeNode * @return {?} */ onBlurEdit(treeNode) { if (!treeNode.data.errTips) { treeNode.data.editable = false; return this.postEditNode(treeNode); } } /** * @param {?} currentValue * @param {?} treeNode * @return {?} */ onInputChange(currentValue, treeNode) { this.editValueChange.emit({ value: currentValue, callback: (/** * @param {?} validateInfo * @return {?} */ (validateInfo) => { if (validateInfo && validateInfo.errTips) { treeNode.data.errTips = validateInfo.errTips; } else { if (treeNode.data.errTips) { delete treeNode.data.errTips; } } }) }); } /** * @param {?} treeNode * @param {?} type * @return {?} */ treeNodeHover(treeNode, type) { treeNode.data.isHover = type === 'enter'; } /** * @param {?} node * @return {?} */ isSelectedNode(node) { if (this.checkable) { return node.isChecked; } else { return node.isActive; } } /** * @return {?} */ get nodes() { return this.operableTree ? Object.keys(this.treeFactory.nodes).map((/** * @param {?} k * @return {?} */ (k) => { return this.treeFactory.nodes[k]; })) : []; } /** * @private * @param {?} treeNode * @return {?} */ postEditNode(treeNode) { if (this.addingNode === true) { this.addingNode = false; if (typeof this.postAddNode === 'function') { /** @type {?} */ const originalId = treeNode.id; return this.postAddNode(treeNode).then((/** * @param {?} nodeInfo * @return {?} */ (nodeInfo) => { // Swap id if id was modified by outer system treeNode.id = nodeInfo.id ? nodeInfo.id : originalId; delete this.treeFactory.nodes[originalId]; 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 {?} */ (e, reaction = 'cancel') => { switch (reaction) { case 'justify': /** @type {?} */ const parentNode = this.treeFactory.nodes[treeNode.parentId]; /** @type {?} */ const 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 {?} */ appendTreeItems(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 }); } /** * @return {?} */ get treeFactory() { return this.operableTree.treeFactory; } /** * @param {?} checked * @param {?} treeNode * @return {?} */ checkNode(checked, treeNode) { if (!treeNode.data.disabled) { treeNode.data.isChecked = !treeNode.data.isChecked; this.checkNodeById(treeNode.data.isChecked, treeNode.id); } } /** * @param {?} event * @param {?} node * @return {?} */ nodeDblClick(event, node) { this.nodeDblClicked.emit(node); } /** * @return {?} */ ngOnDestroy() { 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 = () => [ { 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',] }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmFibGUtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS90cmVlLyIsInNvdXJjZXMiOlsib3BlcmFibGUtdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBRVosWUFBWSxFQUVaLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBUTNELE1BQU0sT0FBTyxxQkFBcUI7Ozs7SUE4Q2hDLFlBQW9CLElBQWlCO1FBQWpCLFNBQUksR0FBSixJQUFJLENBQWE7UUFyQzVCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFLbkMsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLHFCQUFnQixHQUFHLE9BQU8sQ0FBQztRQUcxQixpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JELG1CQUFjLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkQsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwRCxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BELGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEQsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELG9CQUFlLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEQsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBTXJELGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsOEJBQXlCLEdBQUc7WUFDbEMsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7UUEwSUYscUJBQWdCOzs7OztRQUFHLENBQUMsS0FBSyxFQUFFLFFBQWtCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwQyxDQUFDLEVBQUE7UUF3QkQsc0JBQWlCOzs7Ozs7UUFBRyxDQUFDLEtBQUssRUFBRSxRQUFrQixFQUFFLE9BQVEsRUFBRSxFQUFFO1lBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxDQUFDLEVBQUE7UUFZRCxrQkFBYTs7Ozs7UUFBRyxDQUFDLEtBQUssRUFBRSxRQUFrQixFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakMsQ0FBQyxFQUFBO1FBOUtDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDckQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUzs7OztRQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3BDLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7OztJQUNELGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFELENBQUM7Ozs7O0lBRUQsYUFBYSxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUN6RyxDQUFDOzs7OztJQUVELGdCQUFnQixDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7Ozs7O0lBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFROztjQUNuQixJQUFJLEdBQUc7WUFDWCxJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNuQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDM0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSztZQUM5QixRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQ2pDO1FBQ0QsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDOzs7Ozs7O0lBRUQsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUTtRQUNuQyxJQUFJLFNBQVMsRUFBRTtZQUNiLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJO2dCQUN0QyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNqRyxZQUFZLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sR0FBRyxVQUFVOzs7Z0JBQUMsR0FBRyxFQUFFO29CQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLEdBQUUsSUFBSSxDQUFDLENBQUM7YUFDVjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7O0lBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQ3pCLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ2pHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQzNDLFlBQVksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEQ7SUFDSCxDQUFDOzs7Ozs7SUFHRCxNQUFNLENBQUMsS0FBSyxFQUFFLGFBQWE7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkIsT0FBTztTQUNSO1FBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDOztjQUNqQixlQUFlLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzFELElBQUksZUFBZSxFQUFFO1lBQ25CLElBQUk7O3NCQUNJLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFDaEQsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssUUFBUSxJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUU7OzBCQUM5RSxVQUFVLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQzs7MEJBQ25DLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7b0JBQ2pELElBQUksVUFBVSxLQUFLLGFBQWEsQ0FBQyxFQUFFLElBQUksVUFBVSxLQUFLLGFBQWEsQ0FBQyxRQUFROzJCQUN2RSxnQkFBZ0IsS0FBSyxhQUFhLENBQUMsRUFBRSxJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRTt3QkFDNUUsT0FBTztxQkFDUjs7d0JBQ0csVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUN0QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7d0JBQ3ZCLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ2hFO29CQUVELFVBQVUsQ0FBQyxJQUFJOzs7b0JBQUMsR0FBRyxFQUFFOzs4QkFDYixVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDOzs4QkFDL0Msa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQzt3QkFDdEUsVUFBVSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDO3dCQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ3pELGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNOzs7O3dCQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxVQUFVLEVBQUMsQ0FBQzt3QkFDM0csSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTs0QkFDakYsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7eUJBQzFDO3dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ2pELGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDckMsQ0FBQyxFQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2FBRVg7b0JBQVM7Z0JBQ1IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztpQkFDMUQ7YUFDRjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7O0lBRUQsVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFrQjtRQUNsQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzFCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzFGLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM5QzthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDOzs7Ozs7SUFFRCxVQUFVLENBQUMsS0FBSyxFQUFFLFFBQWtCO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDOzs7Ozs7SUFFRCxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQWtCOztZQUMvQixTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3QztRQUVELFNBQVMsQ0FBQyxJQUFJOzs7UUFBQyxHQUFHLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7OztJQU1ELFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBa0IsRUFBRSxPQUFROztZQUMxQyxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxQztRQUVELFNBQVMsQ0FBQyxJQUFJOzs7O1FBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTs7a0JBQ3BCLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztnQkFDcEMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNyQixLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQ3JELFFBQVEsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDO2dCQUM5QixFQUFFLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQy9DLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTthQUNwQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUM1QixRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDOUIsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7SUFNRCxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQWtCOztZQUM1QixVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsVUFBVSxDQUFDLElBQUk7OztRQUFDLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7SUFPTSxhQUFhLENBQUMsT0FBZ0IsRUFBRSxFQUFVOztjQUN6QyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDOzs7OztJQUVELFVBQVUsQ0FBQyxRQUFRO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMxQixRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQzs7Ozs7O0lBRUQsYUFBYSxDQUFDLFlBQVksRUFBRSxRQUFRO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3hCLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUTs7OztZQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQzlDLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7b0JBQ3hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7aUJBQzlDO3FCQUFNO29CQUNMLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQ3pCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7cUJBQzlCO2lCQUNGO1lBQ0gsQ0FBQyxDQUFBO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7O0lBRUQsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJO1FBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksS0FBSyxPQUFPLENBQUM7SUFDM0MsQ0FBQzs7Ozs7SUFFRCxjQUFjLENBQUMsSUFBUztRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7U0FD