{"version":3,"file":"ngx-butterfly-data-mapping.mjs","sources":["../../../ngx-butterfly-data-mapping/src/lib/canvas/canvas.js","../../../ngx-butterfly-data-mapping/src/lib/canvas/empty.js","../../../ngx-butterfly-data-mapping/src/lib/canvas/endpoint.js","../../../ngx-butterfly-data-mapping/src/lib/canvas/node.js","../../../ngx-butterfly-data-mapping/src/lib/util.ts","../../../ngx-butterfly-data-mapping/src/lib/data-mapping/data-mapping.component.ts","../../../ngx-butterfly-data-mapping/src/lib/butterfly-data-mapping.module.ts","../../../ngx-butterfly-data-mapping/src/public-api.ts","../../../ngx-butterfly-data-mapping/src/ngx-butterfly-data-mapping.ts"],"sourcesContent":["'use strict';\n\nimport {Canvas} from 'butterfly-dag';\nimport $ from 'jquery';\n\nexport default class MappingCanvas extends Canvas {\n    constructor(opts) {\n        super(opts);\n        this.extraPos = opts.extraPos;\n    }\n\n    _calcPos() {\n        let sourceTop = 0 + _.get(this, 'extraPos.paddingTop', 0);\n        let sourceLeft = 0 + _.get(this, 'extraPos.paddingLeft', 0);\n        let sourceNodes = this.nodes.filter(i => i.options.type === 'source')\n            .map((item) => {\n                item.moveTo(sourceLeft, sourceTop);\n                sourceTop += item.height + item.PADDING_VERTICAL;\n                return item;\n            });\n\n        let targetTop = 0 + _.get(this, 'extraPos.paddingTop', 0);\n        let targetLeft = _.get(sourceNodes, '[0].width', 0) + _.get(sourceNodes, '[0].PADDING_HORIZONTAL', 0) + _.get(this, 'extraPos.paddingLeft', 0);\n        this.nodes.filter(i => i.options.type === 'target')\n            .forEach((item) => {\n                item.moveTo(targetLeft, targetTop);\n                targetTop += item.height + item.PADDING_VERTICAL;\n                return item;\n            });\n    }\n\n    _autoResize(type) {\n        let totalHeight = 0;\n        let totleWidth = 0;\n\n        let _sourceHeight = 0;\n        let _targetHeight = 0;\n\n        let souceNodes = this.nodes.filter((item) => {\n            return item.options.type === 'source';\n        });\n        let targetNodes = this.nodes.filter((item) => {\n            return item.options.type === 'target';\n        });\n\n        souceNodes.forEach((item) => {\n            _sourceHeight += item.height + item.PADDING_VERTICAL;\n        });\n\n        targetNodes.forEach((item) => {\n            _targetHeight += item.height + item.PADDING_VERTICAL;\n        });\n\n        // 计算所有节点大小总和\n        totalHeight = _sourceHeight > _targetHeight ? _sourceHeight : _targetHeight;\n        totleWidth = (_.get(souceNodes, '[0].width', 0) + _.get(souceNodes, '[0].PADDING_HORIZONTAL', 0) + _.get(targetNodes, '[0].width', 0)) || 200;\n\n        // 计算边缘\n        totalHeight += _.get(this, 'extraPos.paddingTop', 0) + _.get(this, 'extraPos.paddingBottom', 0);\n        totleWidth += _.get(this, 'extraPos.paddingLeft', 0) + _.get(this, 'extraPos.paddingRight', 0);\n\n        if (type === 'width') {\n            $(this.root).css('width', totleWidth);\n        }\n        if (type === 'height') {\n            $(this.root).css('height', totalHeight);\n        }\n        this.updateRootResize();\n    }\n\n    // 纠正获取左右锚点\n    _getEndpoint = (point) => {\n        let _node = this.getNode(point.nodeId);\n        let _point = undefined;\n        if (_node && point.originId) {\n            _point = _node.getEndpoint(point.originId);\n            return _point;\n        } else {\n            return point;\n        }\n    };\n\n    // 改变linked状态\n    _linkedChain(links) {\n        links.forEach((edge) => {\n            let _sourceEndpoint = this._getEndpoint(edge.sourceEndpoint);\n            let _targetEndpoint = this._getEndpoint(edge.targetEndpoint);\n            _sourceEndpoint && $(_sourceEndpoint.dom).addClass('link');\n            _targetEndpoint && $(_targetEndpoint.dom).addClass('link');\n        });\n    }\n\n    _unLinkedChain(links) {\n        links.forEach((edge) => {\n            let _sourceEndpoint = this._getEndpoint(edge.sourceEndpoint);\n            let _targetEndpoint = this._getEndpoint(edge.targetEndpoint);\n            _sourceEndpoint && $(_sourceEndpoint.dom).removeClass('link').removeClass('focus');\n            _targetEndpoint && $(_targetEndpoint.dom).removeClass('link').removeClass('focus');\n        });\n    }\n\n    // 聚焦链路\n    _focusChain(point) {\n        let edges = this._findChain(point);\n        edges.forEach((item) => {\n            this._changeFoucsStatus(item, true);\n        });\n    }\n\n    _unFocusChain(point) {\n        let edges = this._findChain(point);\n        edges.forEach((item) => {\n            this._changeFoucsStatus(item, false);\n        });\n    }\n\n    _changeFoucsStatus(edge, status) {\n\n        let _sourceEndpoint = this._getEndpoint(edge.sourceEndpoint);\n        let _targetEndpoint = this._getEndpoint(edge.targetEndpoint);\n\n        if (status) {\n            $(edge.dom).addClass('focus');\n            $(edge.arrowDom).addClass('focus');\n            _sourceEndpoint && $(_sourceEndpoint.dom).addClass('focus');\n            _targetEndpoint && $(_targetEndpoint.dom).addClass('focus');\n        } else {\n            $(edge.dom).removeClass('focus');\n            $(edge.arrowDom).removeClass('focus');\n            _sourceEndpoint && $(_sourceEndpoint.dom).removeClass('focus');\n            _targetEndpoint && $(_targetEndpoint.dom).removeClass('focus');\n        }\n    }\n\n    _findChain(point) {\n        let type = point.type;\n        let neighborEdges = this.getNeighborEdges(point.nodeId);\n        let targetsEdges = neighborEdges.filter((item) => {\n            return item[type + 'Node'].id === point.nodeId && item[type + 'Endpoint'].originId === point.id;\n        });\n        return targetsEdges;\n    }\n\n    // 检查连接数量限制\n    _checkLinkNum(point, targetEdge, type) {\n        let _linkNums =\n            this.edges.filter((_edge) => {\n                return (\n                    _edge[`${type}Node`].id === point.nodeId &&\n                    _edge[`${type}Endpoint`].id === point.id\n                );\n            }).length + 1;\n        let _isValidLink = true;\n        let _pointLimitedNum = -1;\n        if (point.limitNum && typeof point.limitNum === \"number\") {\n            if (_linkNums > point.limitNum) {\n                _pointLimitedNum = point.limitNum;\n                _isValidLink = false;\n            }\n        }\n        if (\n            point.limitNum &&\n            Object.prototype.toString.call(point.limitNum) === \"[object Object]\"\n        ) {\n            if (point.limitNum.source && type === \"source\") {\n                if (_linkNums > point.limitNum.source) {\n                    _pointLimitedNum = point.limitNum.source;\n                    _isValidLink = false;\n                }\n            }\n            if (point.limitNum.target && type === \"target\") {\n                if (_linkNums > point.limitNum.target) {\n                    _pointLimitedNum = point.limitNum.target;\n                    _isValidLink = false;\n                }\n            }\n        }\n        if (!_isValidLink) {\n            console.warn(\n                `id为${point.id}的锚点限制了${_pointLimitedNum}条连线`\n            );\n            targetEdge && targetEdge.destroy();\n            this._dragEdges = [];\n            this._dragType = null;\n        }\n        return _isValidLink;\n    }\n\n    addFields(data) {\n        data.forEach((item) => {\n            let node = this.getNode(item.id);\n            node && node.addFields(item.fields);\n        });\n    }\n\n    removeFields(data) {\n        data.forEach((item) => {\n            let node = this.getNode(item.id);\n            node && node.removeFields(item.fields);\n        });\n    }\n\n    updateDisableStatus(newData) {\n        (newData.nodes || []).forEach((newNode) => {\n            let oldNode = _.find(this.nodes, (item) => {\n                return item.id === newNode.id;\n            });\n\n            if (oldNode) {\n                let oldFields = oldNode.options.fields;\n                let newFields = newNode.fields;\n                oldFields.forEach((oldField) => {\n                    let newField = _.find(newFields, (item) => {\n                        return item.id === oldField.id;\n                    });\n                    if (newField && newField.disable !== oldField.disable) {\n                        oldField.disable = newField.disable;\n                        let pos = oldNode.options.type === 'source' ? 'right' : 'left';\n                        oldNode.endpoints.filter((item) => {\n                            return item.id === oldField.id || item.id === `${oldField.id}-${pos}`;\n                        }).forEach((item) => {\n                            item.options.disable = newField.disable;\n                            if (newField.disable) {\n                                $(item.dom).addClass('disable');\n                            } else {\n                                $(item.dom).removeClass('disable');\n                            }\n                        });\n                    }\n                });\n            }\n        });\n    }\n\n    updateCheckedStatus(checkFields) {\n        for (let f of checkFields) {\n            let node = this.getNode(f.id);\n            node && node.updateCheckedStatus(f.fields);\n        }\n    }\n};","import $ from 'jquery';\n\n/**\n * params {Object} config\n * params {JSX.Element | String} config.content\n * params {Number | String} config.width\n */\nexport default (config, callback) => {\n  const content = config.content;\n  let width = config.width;\n\n  if (!width) {\n    width = '150px';\n  }\n  \n  if (typeof config.width === 'number') {\n    width = config.width + 'px';\n  }\n\n  let emptyDom = '<div style=\"width: ' + width + '\"></div>';\n\n  if (content) {\n    // if (isReactEle(content)) {\n    //   emptyDom = ReactDOM.render(content, document.createElement('div'), callback);\n    // } else {\n      emptyDom = $(content);\n    // }\n  } else {\n    emptyDom = $('<div class=\"no-data\" style=\"width: ' + width + '\"></div>');\n    const iconDom = $('<i class=\"no-data-icon data-mapping-icon data-mapping-icon-kongshuju\"></i>');\n  \n    emptyDom.append(iconDom);\n  }\n\n  return emptyDom;\n};\n","'use strict';\n\nimport {Endpoint} from 'butterfly-dag';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nclass NewEndPoint extends Endpoint {\n  constructor(opts) {\n    super(opts);\n    if (!this.options._isNodeSelf) {\n      this.originId = (this.id || '').replace('-left', '').replace('-right', '');\n    }\n  }\n  attachEvent() {\n    $(this.dom).on('mousedown', (e) => {\n      const LEFT_KEY = 0;\n      if (e.button !== LEFT_KEY) {\n        return;\n      }\n      \n      e.preventDefault();\n      e.stopPropagation();\n\n      if (this.options.disable) {\n        return;\n      }\n\n      // 点击中了上移/下移的按钮,需要阻止\n      let classname = e.target.className || '';\n      if (!_.isString(classname) || classname.indexOf('move-up') !== -1 || classname.indexOf('move-down') !== -1) {\n        return;\n      }\n\n      if (this.options._isNodeSelf && this.type === 'target') {\n        this.emit('custom.endpoint.dragNode', {\n          data: this\n        });\n      } else {\n        this.emit('InnerEvents', {\n          type: 'endpoint:drag',\n          data: this\n        });\n      }\n    });\n\n    if (this.options._isNodeSelf) {\n      $(this.dom).on('mouseover', (e) => {\n        this.emit('custom.endpoint.focus', {\n          point: this\n        });\n      });\n  \n      $(this.dom).on('mouseout', (e) => {\n        this.emit('custom.endpoint.unFocus', {\n          point: this\n        });\n      });\n    }\n  }\n}\n\nexport default NewEndPoint;\n","'use strict';\n\nimport {Node} from 'butterfly-dag';\nimport $ from 'jquery';\nimport * as _ from 'lodash';\nimport {Tips} from 'butterfly-dag';\nimport emptyDom from './empty';\nimport Endpoint from './endpoint';\n\nexport default class TableNode extends Node {\n    constructor(opts) {\n        super(opts);\n        // 标题高度\n        this.TITLE_HEIGHT = 34;\n        // 列标题高度\n        this.COLUMNS_TITLE_HEIGHT = 28;\n        // 每列宽度\n        this.COLUMN_WIDTH = 60;\n        // 每行高度\n        this.ROW_HEIGHT = _.get(opts, '_extraPos.rowHeight') || 26;\n        // 垂直间距\n        this.PADDING_VERTICAL = _.get(opts, '_extraPos.nodeVerticalPadding') || 10;\n        // 水平间距\n        this.PADDING_HORIZONTAL = _.get(opts, '_extraPos.paddingCenter') || 150;\n        // 排序宽度\n        this.SORTABLE_WIDTH = 40;\n        // checkout宽度\n        this.CHECKBOX_WIDTH = this.ROW_HEIGHT;\n\n        this.height = 0;\n        this.width = 0;\n\n        // 选择状态\n        this.checked = opts.checked;\n        // 只读状态\n        this.readonly = opts.readonly;\n\n        this.fieldsList = [];\n        this.primaryKey = null;\n    }\n\n    _addEventListener() {\n        $(this.dom).on('mouseDown', (e) => {\n            const LEFT_KEY = 0;\n            if (e.button !== LEFT_KEY) {\n                return;\n            }\n\n            if (this.draggable) {\n                this._isMoving = true;\n                this.emit('InnerEvents', {\n                    type: 'node:dragBegin',\n                    data: this\n                });\n            } else {\n                // 单纯为了抛错事件给canvas，为了让canvas的dragtype不为空，不会触发canvas:click事件\n                this.emit('InnerEvents', {\n                    type: 'node:mouseDown',\n                    data: this\n                });\n\n                return true;\n            }\n        });\n    }\n\n    mounted() {\n        // 生成endpoint\n        this._createNodeEndpoint();\n\n        // 保持title宽度\n        if (!this.fieldsList.length) {\n            $(this.dom).find('.title').css('width', this.options._emptyWidth || 150);\n        }\n\n        // 加tips\n        this._addFieldItemTips();\n    }\n\n    draw(obj) {\n        let _dom = obj.dom;\n        if (!_dom) {\n            _dom = $('<div></div>')\n                .attr('class', 'node table-node')\n                .attr('id', obj.name);\n        }\n        if (!_.isEmpty(obj.options._sourceClassName) && _.get(obj, 'options.type') === 'source') {\n            _dom.addClass(obj.options._sourceClassName)\n        }\n        if (!_.isEmpty(obj.options._targetClassName) && _.get(obj, 'options.type') === 'target') {\n            _dom.addClass(obj.options._targetClassName)\n        }\n        const node = $(_dom);\n        // 计算节点坐标\n        if (obj.top !== undefined) {\n            node.css('top', `${obj.top + _.get(obj, 'options._extraPos.paddingTop', 0)}px`);\n        }\n        if (obj.left !== undefined) {\n            node.css('left', `${obj.left + _.get(obj, 'options._extraPos.paddingLeft', 0)}px`);\n        }\n\n        this._calcSize(node, obj);\n\n        this._createTableName(node); // 表名\n        this._createFieldTitle(node); // 字段标题\n        this._createFields(node); // 字段\n        return node[0];\n    }\n\n    _createTableName(container = this.dom) {\n        let title = _.get(this, 'options.title');\n        if (title) {\n            let titleDom = $(`<div class=\"title\">${title}</div>`);\n            titleDom.css({\n                'height': this.TITLE_HEIGHT + 'px',\n                'line-height': this.TITLE_HEIGHT + 'px'\n            });\n            $(container).append(titleDom);\n        }\n    }\n\n    _addFieldItemTips(fieldItems) {\n        const _fieldItems = fieldItems || $(this.dom).find('.field-item');\n        const fieldItemDoms = Array.prototype.slice.apply(_fieldItems);\n        fieldItemDoms.forEach((_fieldItem, index) => {\n            if (_fieldItem.scrollWidth > _fieldItem.clientWidth) {\n                const fieldItem = $(_fieldItems[index])\n                Tips.createTip({\n                    className: 'field-item-tooltip',\n                    targetDom: fieldItem[0],\n                    genTipDom: () => fieldItem.text(),\n                });\n            }\n        })\n    }\n\n    _getColumns() {\n        return _.get(this, ['options', _.get(this, 'options.type', '') === 'source' ? '_sourceColumns' : '_targetColumns'], []);\n    }\n\n    _createFieldTitle(container = this.dom) {\n        let type = _.get(this, 'options.type', '');\n        let columns = this._getColumns();\n        let checkable = _.get(this, 'options.checkable');\n        let hasFieldTitle = _.some(columns, i => i.title);\n        let isObject = (object) => Object.prototype.toString.call(object) === \"[object Object]\";\n        if (hasFieldTitle) {\n            const columnsTitleDom = $('<div class=\"filed-title\"></div>');\n            if (checkable) {\n                let hasCheckBox = false;\n                if (type === 'source') {\n                    if (isObject(checkable) && checkable.source) {\n                        hasCheckBox = true;\n                    }\n                } else if (type === 'target') {\n                    if (isObject(checkable) && checkable.target) {\n                        hasCheckBox = true;\n                    }\n                }\n                if (typeof (checkable) === 'boolean') {\n                    hasCheckBox = true;\n                }\n                if (hasCheckBox) {\n                    let emptyDom = $(`<span class=\"filed-title-item\"></span>`);\n                    emptyDom.css('width', this.CHECKBOX_WIDTH + 'px');\n                    columnsTitleDom.append(emptyDom);\n                }\n            }\n            columns.forEach(_col => {\n                const columnsTitleItem = $(`<span class=\"filed-title-item\">${_col.title}</span>`);\n                columnsTitleItem.css('width', (_col.width || this.COLUMN_WIDTH) + 'px');\n                columnsTitleDom.append(columnsTitleItem);\n            });\n            columnsTitleDom.css('height', this.COLUMNS_TITLE_HEIGHT + 'px')\n                .css('line-height', this.COLUMNS_TITLE_HEIGHT + 'px')\n            container.append(columnsTitleDom);\n        }\n    }\n\n    _createSortableBtn(field) {\n        let sortFieldDom = $(`\n      <span class=\"field-sort\">\n        <i class=\"data-mapping-icon data-mapping-icon-paixu-top move-up\"></i>\n        <i class=\"data-mapping-icon data-mapping-icon-paixu-bottom move-down\"></i>\n      </span>\n    `);\n        sortFieldDom.css({\n            width: this.SORTABLE_WIDTH + 'px',\n        });\n        sortFieldDom.find('.move-up').click(this._moveUp.bind(this, field));\n        sortFieldDom.find('.move-down').click(this._moveDown.bind(this, field));\n        return sortFieldDom;\n    }\n\n    _createCheckBox(field) {\n        let checkboxDom = $(`\n      <span class=\"field-checkbox\">\n        <span class=\"dm-checkbox\">\n          <span class=\"dm-checkbox-inner\"></span>\n        </span>\n      </span>\n    `);\n        checkboxDom.css('height', this.CHECKBOX_WIDTH + 'px');\n        if (field.checked) {\n            checkboxDom.find('.dm-checkbox').addClass('dm-checkbox-checked');\n        }\n        if (this.readonly) {\n            checkboxDom.addClass('field-checkbox-disable');\n        }\n        checkboxDom.click((e) => {\n            e.preventDefault();\n            e.stopPropagation();\n            if (this.readonly) {\n                return;\n            }\n            // 发送事件，更新选择状态\n            this.emit('custom.field.checked', {\n                nodeId: this.id,\n                nodeType: this.options.type,\n                fieldId: field[this.primaryKey],\n                checked: !field.checked,\n            });\n        });\n        return checkboxDom;\n    }\n\n    _createFields(container = $(this.dom), addFields = []) {\n        let fields = addFields.length === 0 ? _.get(this, 'options.fields') : addFields;\n        let type = _.get(this, 'options.type', '');\n        let columns = this._getColumns();\n        let sortable = _.get(this, 'options.sortable');\n        let checkable = _.get(this, 'options.checkable');\n        let isObject = (object) => Object.prototype.toString.call(object) === \"[object Object]\";\n        let result = [];\n        if (columns.length) {\n            try {\n                this.primaryKey = this.columns.find(i => i.primaryKey === true).key\n            } catch (e) {\n                this.primaryKey = columns[0].key;\n            }\n        }\n\n        if (fields && fields.length) {\n            fields.forEach((f, index) => {\n                let fieldDom = $('<div class=\"field\"></div>');\n                let sortFieldDom = undefined;\n                let checkFieldDom = undefined;\n\n                if (sortable) {\n                    sortFieldDom = this._createSortableBtn(f);\n                }\n                if (checkable) {\n                    if (type === 'source') {\n                        if (isObject(checkable) && checkable.source) {\n                            checkFieldDom = this._createCheckBox(f);\n                            fieldDom.append(checkFieldDom);\n                        }\n                    } else if (type === 'target') {\n                        if (isObject(checkable) && checkable.target) {\n                            checkFieldDom = this._createCheckBox(f);\n                            fieldDom.append(checkFieldDom);\n                        }\n                    }\n                    if (typeof (checkable) === 'boolean') {\n                        checkFieldDom = this._createCheckBox(f);\n                        fieldDom.append(checkFieldDom);\n                    }\n                }\n                fieldDom.css({\n                    height: this.ROW_HEIGHT + 'px',\n                    'line-height': this.ROW_HEIGHT + 'px'\n                });\n                columns.forEach((col) => {\n                    if (col.render) {\n                        let fieldItemDom = $(`<span class=\"field-item\"></span>`);\n                        fieldItemDom.css('width', (col.width || this.COLUMN_WIDTH) + 'px');\n                        fieldItemDom.html(col.render(f[col.key], f, index));\n                        fieldDom.append(fieldItemDom);\n                    } else {\n                        let fieldItemDom = $(`<span class=\"field-item\">${f[col.key]}</span>`);\n                        fieldItemDom.css('width', (col.width || this.COLUMN_WIDTH) + 'px');\n                        fieldDom.append(fieldItemDom);\n                    }\n                });\n                if (sortFieldDom) {\n                    fieldDom.append(sortFieldDom);\n                }\n                if (type === 'source') {\n                    let rightPoint = $('<div class=\"point right-point\"></div>');\n                    fieldDom.append(rightPoint);\n                    if (isObject(sortable) && sortable.source) {\n                        sortFieldDom = this._createSortableBtn(f);\n                        fieldDom.append(sortFieldDom);\n                    }\n                } else if (type === 'target') {\n                    let leftPoint = $('<div class=\"point left-point\"></div>');\n                    fieldDom.append(leftPoint);\n                    if (isObject(sortable) && sortable.target) {\n                        sortFieldDom = this._createSortableBtn(f);\n                        fieldDom.append(sortFieldDom);\n                    }\n                }\n                container.append(fieldDom);\n                result.push({\n                    id: f[this.primaryKey],\n                    dom: fieldDom,\n                    option: f,\n                });\n            });\n            this.fieldsList = this.fieldsList.concat(result);\n        } else {\n            const _emptyContent = _.get(this.options, '_emptyContent');\n            const noDataTree = emptyDom({\n                content: _emptyContent,\n                width: this.options._emptyWidth\n            });\n            container.append(noDataTree);\n            this.height = $(container).outerHeight();\n        }\n\n        return result;\n    }\n\n    _createNodeEndpoint(fieldList) {\n        let type = this.options.type;\n        let _fieldList = fieldList || this.fieldsList || [];\n\n        _fieldList.forEach((item) => {\n            this.addEndpoint({\n                id: item.id,\n                orientation: type === 'source' ? [1, 0] : [-1, 0],\n                type: type,\n                _isNodeSelf: true,\n                dom: item.dom[0],\n                Class: Endpoint\n            });\n            if (type === 'source') {\n                this.addEndpoint({\n                    id: item.id + '-right',\n                    orientation: [1, 0],\n                    type: type,\n                    _isNodeSelf: false,\n                    dom: $(item.dom).find('.right-point')[0],\n                    Class: Endpoint,\n                    linkable: false\n                });\n            } else if (type === 'target') {\n                this.addEndpoint({\n                    id: item.id + '-left',\n                    orientation: [-1, 0],\n                    type: type,\n                    _isNodeSelf: false,\n                    dom: $(item.dom).find('.left-point')[0],\n                    Class: Endpoint,\n                    disLinkable: false\n                });\n            }\n        });\n    }\n\n    _calcSize(node, obj) {\n        let fields = _.get(obj, 'options.fields', []);\n        let columns = this._getColumns();\n        let sortable = _.get(obj, 'options.sortable');\n        let type = _.get(obj, 'options.type');\n\n        if (_.get(obj, 'options.title')) {  // has title\n            this.height += this.TITLE_HEIGHT;\n        }\n        if (columns.some(i => i.title)) { // has column title\n            this.height += this.COLUMNS_TITLE_HEIGHT;\n        }\n        this.height += fields.length * this.ROW_HEIGHT;\n\n        columns.forEach((item) => {\n            this.width += item.width || this.COLUMN_WIDTH;\n        });\n\n        if (typeof (sortable) === 'boolean') this.width += this.SORTABLE_WIDTH;\n\n        if (Object.prototype.toString.call(sortable) === '[object Object]') {\n            if (type === 'source') this.width += this.SORTABLE_WIDTH;\n            if (type === 'target') this.width += this.SORTABLE_WIDTH;\n        }\n        // todo: 记得算上SORTABLE_WIDTH\n    }\n\n    _moveUp(curField, event) {\n        event.preventDefault();\n        event.stopPropagation();\n        let curIndex = this.fieldsList.findIndex(i => i.id === curField.id);\n        let oldFields = _.get(this, 'options.fields', []);\n        let oldFieldsItem = oldFields.splice(curIndex, 1);\n        let point = this.getEndpoint(curField.id);\n        let curFieldDom = point.dom;\n        let curFieldData = this.fieldsList[curIndex];\n        // 处理边界\n        if (curIndex === 0) {\n            console.warn('this field has reach the top!');\n            return;\n        }\n        let preFieldData = this.fieldsList[curIndex - 1];\n        let preFieldDom = preFieldData.dom;\n\n        // 交换dom\n        $(preFieldDom).before(curFieldDom);\n\n        // 交换数据\n        this.fieldsList[curIndex] = preFieldData;\n        this.fieldsList[curIndex - 1] = curFieldData;\n        oldFields.splice(curIndex - 1, 0, oldFieldsItem[0]);\n\n        // 发送事件，更新线段和锚点坐标\n        this.emit('custom.field.sort', {\n            nodeId: this.id,\n            pointIds: [curFieldData.id, preFieldData.id]\n        });\n    }\n\n    _moveDown(curField, event) {\n        event.preventDefault();\n        event.stopPropagation();\n        let curIndex = this.fieldsList.findIndex(i => i.id === curField.id);\n        let oldFields = _.get(this, 'options.fields', []);\n        let oldFieldsItem = oldFields.splice(curIndex, 1);\n        let point = this.getEndpoint(curField.id);\n        let curFieldDom = point.dom;\n        let curFieldData = this.fieldsList[curIndex];\n        // 处理边界\n        if (curIndex === this.fieldsList.length - 1) {\n            console.warn('this field has reach the bottom!');\n            return;\n        }\n        let nextFieldData = this.fieldsList[curIndex + 1];\n        let nextFieldDom = nextFieldData.dom;\n\n        // 交换dom\n        $(nextFieldDom).after(curFieldDom);\n\n        // 交换数据\n        this.fieldsList[curIndex] = nextFieldData;\n        this.fieldsList[curIndex + 1] = curFieldData;\n        oldFields.splice(curIndex + 1, 0, oldFieldsItem[0]);\n\n        // 发送事件，更新线段和锚点坐标\n        this.emit('custom.field.sort', {\n            nodeId: this.id,\n            pointIds: [curFieldData.id, nextFieldData.id]\n        });\n\n    }\n\n    setReadOnly(newStatus) {\n        if (this.readonly != newStatus) {\n            this.readonly = newStatus;\n            if (newStatus) {\n                $(this.dom).find('.field-checkbox').addClass('field-checkbox-disable');\n            } else {\n                $(this.dom).find('.field-checkbox').removeClass('field-checkbox-disable');\n            }\n        }\n    }\n\n    addFields(fields) {\n        let _addFieldsList = this._createFields(undefined, fields);\n        this._createNodeEndpoint(_addFieldsList);\n        let _addFieldsDomList = _addFieldsList.map((item) => {\n            return $(item.dom).find('.field-item');\n        });\n        this._addFieldItemTips(_addFieldsDomList);\n    }\n\n    removeFields(fields) {\n        fields.forEach((item) => {\n            let index = _.findIndex(this.fieldsList, _field => _field.id === item.id);\n            if (index === -1) {\n                return;\n            }\n            let field = this.fieldsList.splice(index, 1)[0];\n            if (field) {\n                $(field.dom).find('.field-item').off();\n                $(field.dom).off();\n                $(field.dom).remove();\n            }\n        });\n    }\n\n    updateCheckedStatus(fields) {\n        fields.forEach((f) => {\n            let realField = _.find(this.fieldsList, i => i.id === f[this.primaryKey]);\n            realField.option.checked = f.checked;\n            if (f.checked) {\n                realField.dom.find('.dm-checkbox').addClass('dm-checkbox-checked');\n            } else {\n                realField.dom.find('.dm-checkbox').removeClass('dm-checkbox-checked');\n            }\n        });\n    }\n};\n","export function levenshteinDistance(str1, str2) {\r\n    const len1 = str1.length;\r\n    const len2 = str2.length;\r\n\r\n    // 初始化一个二维数组，用于存储编辑距离\r\n    const dp = Array(len1 + 1).fill(null).map(() => Array(len2 + 1).fill(null));\r\n\r\n    // 填充数组的初始值\r\n    for (let i = 0; i <= len1; i++) {\r\n        dp[i][0] = i;\r\n    }\r\n    for (let j = 0; j <= len2; j++) {\r\n        dp[0][j] = j;\r\n    }\r\n\r\n    // 动态规划填充编辑距离表\r\n    for (let i = 1; i <= len1; i++) {\r\n        for (let j = 1; j <= len2; j++) {\r\n            const cost = str1[i - 1] === str2[j - 1] ? 0 : 1;\r\n            dp[i][j] = Math.min(\r\n                dp[i - 1][j] + 1,    // 删除\r\n                dp[i][j - 1] + 1,    // 插入\r\n                dp[i - 1][j - 1] + cost // 替换\r\n            );\r\n        }\r\n    }\r\n\r\n    // 编辑距离在表的右下角\r\n    return dp[len1][len2];\r\n}\r\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnChanges,\n    Output,\n    SimpleChanges,\n    ViewEncapsulation\n} from '@angular/core';\nimport * as _ from 'lodash';\nimport Canvas from '../canvas/canvas';\nimport TableNode from \"../canvas/node\";\nimport { levenshteinDistance } from \"../util\";\n\n\n@Component({\n    selector: 'data-mapping',\n    template: `\n        <div [class]=\"getClassName()\"></div>\n    `,\n    styleUrls: ['./data-mapping.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None\n})\nexport class DataMappingComponent implements AfterViewInit, OnChanges {\n    @Input() width?: number | string;\n    @Input() height?: number | string;\n    @Input() type?: 'single' | 'multiple';\n    @Input() className?: string;\n    @Input() sourceClassName?: string;\n    @Input() targetClassName?: string;\n    @Input() columns: Column[];\n    @Input() sourceColumns: Column[]\n    @Input() targetColumns: Column[]\n    @Input() sourceData: any[] | Object;\n    @Input() targetData: any[] | Object;\n    @Input() mappingData: MappingEdge[];\n    @Input() readonly?: boolean;\n    @Input() config?: Config;\n    @Input() emptyContent?: string | HTMLElement;\n    @Input() emptyWidth?: number | string;\n    /** 自定义限制映射建立 */\n    @Input() canConnect?: (edge: any) => boolean;\n\n    @Output() loaded = new EventEmitter<DataMappingComponent>();\n    @Output() change = new EventEmitter<ChangeEvent>();\n    @Output() rowMouseOver = new EventEmitter<any>();\n    @Output() rowMouseOut = new EventEmitter<any>();\n    @Output() edgeClick = new EventEmitter<EdgeClickEvent>();\n\n    private canvas: any;\n    private renderingPromise: Promise<void>;\n    private isOnchange = false;\n    private viewInited = false;\n\n    constructor(private elementRef: ElementRef) {\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        this.readonly = this.readonly || false;\n        if (!this.viewInited) {\n            return;\n        }\n\n        if (changes.width || changes.height) {\n            const root = (this.elementRef.nativeElement as any).children[0] as HTMLElement;\n            if (this.width !== undefined || this.width !== 'auto') {\n                root.style.width = (this.width || 500) + 'px';\n            }\n            if (this.height !== undefined || this.height !== 'auto') {\n                root.style.height = (this.height || 500) + 'px';\n            }\n        }\n        if (this.renderingPromise) {\n            this.renderingPromise.then(() => {\n                this.updateCanvas();\n            });\n            this.renderingPromise = null;\n        } else {\n            this.updateCanvas();\n        }\n    }\n\n    ngAfterViewInit(): void {\n        const root = (this.elementRef.nativeElement as any).children[0] as HTMLElement;\n\n        if (this.width !== undefined || this.width !== 'auto') {\n            root.style.width = (this.width || 500) + 'px';\n        }\n        if (this.height !== undefined || this.height !== 'auto') {\n            root.style.height = (this.height || 500) + 'px';\n        }\n\n        const result = transformInitData({\n            columns: this.columns,\n            sourceColumns: this.sourceColumns,\n            targetColumns: this.targetColumns,\n            type: this.type || 'single',\n            sortable: _.get(this.config, 'sortable') || false,\n            checkable: _.get(this.config, 'checkable') || false,\n            sourceData: _.cloneDeep(this.sourceData),\n            targetData: _.cloneDeep(this.targetData),\n            mappingData: _.cloneDeep(this.mappingData),\n            extraPos: _.get(this.config, 'extraPos'),\n            linkNumLimit: _.get(this.config, 'linkNumLimit'),\n            emptyContent: this.emptyContent,\n            emptyWidth: this.emptyWidth,\n            sourceClassName: this.sourceClassName || '',\n            targetClassName: this.targetClassName || '',\n            readonly: this.readonly\n        });\n\n        const canvasObj: any = {\n            root: root,\n            disLinkable: true,\n            linkable: true,\n            draggable: false,\n            zoomable: false,\n            moveable: false,\n            theme: {\n                edge: {\n                    type: 'endpoint',\n                    shapeType: 'AdvancedBezier',\n                    arrow: true,\n                    isExpandWidth: true,\n                    arrowPosition: 1,\n                    arrowOffset: 5\n                },\n                endpoint: {\n                    limitNum: undefined,\n                    expandArea: {\n                        left: 0,\n                        right: 0,\n                        top: 0,\n                        bottom: 0\n                    }\n                }\n            },\n            extraPos: _.get(this.config, 'extraPos')\n        };\n\n        if (!!this.readonly) {\n            canvasObj.disLinkable = false;\n            canvasObj.linkable = false;\n        }\n\n        const _linkNumLimit = _.get(this.config, 'linkNumLimit');\n        if (typeof _linkNumLimit === 'number' && !isNaN(_linkNumLimit)) {\n            canvasObj.theme.endpoint.limitNum = _linkNumLimit;\n        }\n        if (Object.prototype.toString.call(_linkNumLimit) === '[object Object]') {\n            canvasObj.theme.endpoint.limitNum = _linkNumLimit;\n        }\n\n        this.canvas = new Canvas(canvasObj);\n\n        this.renderingPromise = new Promise<void>((resolve) => {\n            setTimeout(() => {\n                this.canvas.draw(result, () => {\n                    this.canvas._calcPos();\n                    if (this.width === 'auto') {\n                        this.canvas._autoResize('width');\n                    }\n                    if (this.height === 'auto') {\n                        this.canvas._autoResize('height');\n                    }\n                    resolve();\n                    this.loaded.emit(this);\n                    this.canvas._coordinateService._calcScrollPos(true);\n                    this.canvas.nodes.forEach((item) => {\n                        item.endpoints.forEach((point) => {\n                            point.updatePos();\n                        });\n                    });\n                    this.canvas.edges.forEach((item) => {\n                        item.redraw();\n                    });\n                });\n                this.addEventListeners();\n            }, _.get(this.config, 'delayDraw', 0));\n        });\n        this.viewInited = true;\n    }\n\n    /** 获取Butterfly Canvas */\n    get getCanvas() { return this.canvas }\n\n    /** 自动创建映射（使用自定义算法） */\n    autoMappingCustom(func: (sourceField, targetField) => boolean): MappingEdge[] {\n        let sources = this.canvas.nodes.filter(i => i.options.type == 'source');\n        let targets = this.canvas.nodes.filter(i => i.options.type == 'target');\n        let ret = [];\n        for (let s of sources) {\n            for (let sf of s.options.fields) {\n                for (let t of targets) {\n                    for (let tf of t.options.fields) {\n                        if (func(sf, tf)) {\n                            ret.push({\n                                id: `${sf[s.primaryKey]}-${tf[t.primaryKey]}`,\n                                type: 'endpoint',\n                                sourceNode: s.id,\n                                source: sf[s.primaryKey],\n                                targetNode: t.id,\n                                target: tf[t.primaryKey]\n                            })\n                        }\n                    }\n                }\n            }\n        }\n        this.canvas.addEdges(ret);\n        return ret.map(i => new MappingEdge(i.source, i.target, i.sourceNode, i.targetNode));\n    }\n\n    /** 自动创建映射（使用编辑距离算法） */\n    autoMapping(columnKey: string, threshold=0.7): MappingEdge[] {\n        let func = (sf, tf) => {\n            let a = sf[columnKey];\n            let b = tf[columnKey];\n            if (a == null || b == null) {\n                return false;\n            }\n            let dis = levenshteinDistance(a.toLowerCase(), b.toLowerCase());\n            return (1 - dis / Math.max(a.length, b.length)) > threshold;\n        }\n        return this.autoMappingCustom(func);\n    }\n\n    private updateCanvas() {\n        const result = transformInitData({\n            columns: this.columns,\n            sourceColumns: this.sourceColumns,\n            targetColumns: this.targetColumns,\n            type: this.type || 'single',\n            sortable: _.get(this, 'config.sortable') || false,\n            checkable: _.get(this.config, 'checkable') || false,\n            sourceData: _.cloneDeep(this.sourceData),\n            targetData: _.cloneDeep(this.targetData),\n            mappingData: _.cloneDeep(this.mappingData),\n            extraPos: _.get(this, 'config.extraPos'),\n            linkNumLimit: _.get(this, 'config.linkNumLimit'),\n            emptyContent: this.emptyContent,\n            emptyWidth: this.emptyWidth,\n            sourceClassName: this.sourceClassName || '',\n            targetClassName: this.targetClassName || '',\n            readonly: this.readonly || false\n        });\n\n        const diffInfo = diffPropsData(result, {\n            nodes: this.canvas.nodes,\n            edges: this.canvas.edges.map((item) => {\n                return _.assign(item.options, {\n                    source: (item.options.source || '').replace('-right', ''),\n                    target: (item.options.target || '').replace('-left', '')\n                });\n            })\n        });\n\n        if (diffInfo.rmEdges?.length > 0) {\n            this.canvas.removeEdges(diffInfo.rmEdges.map((item) => item.id));\n        }\n        if (diffInfo.addEdges?.length > 0) {\n            this.canvas.addEdges(diffInfo.addEdges);\n        }\n        if (diffInfo.rmNodes?.length > 0) {\n            this.canvas.removeNodes(diffInfo.rmNodes);\n        }\n        if (diffInfo.addNodes?.length > 0) {\n            this.canvas.addNodes(diffInfo.addNodes);\n            this.canvas._calcPos();\n        }\n        if (diffInfo.rmFields?.length > 0) {\n            this.canvas.removeFields(diffInfo.rmFields);\n        }\n        if (diffInfo.addFields?.length > 0) {\n            this.canvas.addFields(diffInfo.addFields);\n        }\n        if (diffInfo.checkedFields?.length > 0) {\n            this.canvas.updateCheckedStatus(diffInfo.checkedFields);\n        }\n\n        if (this.readonly !== this.readonly) {\n            this.canvas.setLinkable(!!!this.readonly);\n            this.canvas.setDisLinkable(!!!this.readonly);\n            (this.canvas.nodes || []).forEach((item) => item.setReadOnly(this.readonly));\n        }\n\n        this.canvas.updateDisableStatus(result);\n    }\n\n    private onChange() {\n        if (!this.isOnchange) {\n            this.isOnchange = true;\n            setTimeout(() => {\n                let result = transformChangeData(this.canvas.getDataMap(), this.type || 'single');\n                this.change.emit(result);\n                this.isOnchange = false;\n            }, 0);\n        }\n    }\n\n    getClassName() {\n        return this.className ? `${this.className} butterfly-data-mapping` : 'butterfly-data-mapping';\n    }\n\n    private addLinks(links: any) {\n        let newLinkOpts = links.map((item: any) => {\n            let _oldSource = _.get(item, 'sourceEndpoint.id', '');\n            let _oldTarget = _.get(item, 'targetEndpoint.id', '');\n            let _newSource = _oldSource.indexOf('-right') !== -1 ? _oldSource : _oldSource + '-right';\n            let _newTarget = _oldTarget.indexOf('-left') !== -1 ? _oldTarget : _oldTarget + '-left';\n            return {\n                id: item.options.id || `${item.options.sourceNode}-${item.options.targetNode}`,\n                sourceNode: item.options.sourceNode,\n                targetNode: item.options.targetNode,\n                source: _newSource,\n                target: _newTarget,\n                type: 'endpoint'\n            };\n        });\n        this.canvas.removeEdges(links, true);\n        newLinkOpts = newLinkOpts.filter((item) => {\n            let targetNode = this.canvas.getNode(item.targetNode);\n            let targetEndpoint = targetNode.getEndpoint(item.target);\n            let sourceEndpoint = targetNode.getEndpoint(item.source);\n            let result = this.canvas._checkLinkNum(targetEndpoint, undefined, 'target');\n            // 取消link状态\n            if(!result) {\n                sourceEndpoint && sourceEndpoint.dom.classList.remove('link');\n            }\n            return result;\n        });\n        return this.canvas.addEdges(newLinkOpts, true);\n    }\n\n    private addEventListeners() {\n        let _isInit = true;\n        this.canvas.on('system.link.connect', (data: { links: any; }) => {\n            let addEdges = this.addLinks(data.links || []);\n            let result = [];\n            addEdges.forEach((item) => {\n                let canConnect = true;\n                this.canConnect && (canConnect = this.canConnect(item));\n                if (canConnect) {\n                    result.push(item);\n                } else {\n                    this.canvas.removeEdge(item, true);\n                }\n            });\n            if (!_isInit) {\n                this.onChange();\n            }\n            _isInit = false;\n            this.canvas._linkedChain(result);\n        });\n\n        this.canvas.on('system.link.reconnect', (data: { addLinks: any, delLinks: any }) => {\n            let addEdges = this.addLinks(data.addLinks || []);\n            let result = [];\n            addEdges.forEach((item) => {\n                let canConnect = true;\n                this.canConnect && (canConnect = this.canConnect(item));\n                if (canConnect) {\n                    result.push(item);\n                } else {\n                    this.canvas.removeEdge(item, true);\n                }\n            });\n            this.onChange();\n            this.canvas._unLinkedChain(data.delLinks);\n            this.canvas._linkedChain(result);\n        });\n\n        this.canvas.on('system.links.delete', (data: { links: any; }) => {\n            this.onChange();\n            this.canvas._unLinkedChain(data.links);\n        });\n\n        // 线段删除特殊处理\n        this.canvas.on('custom.endpoint.dragNode', (data: { data: any; }) => {\n            let point = data.data;\n            let node = this.canvas.getNode(point.nodeId);\n            let linkedPoint = node.getEndpoint(point.id + '-left', 'target');\n            this.canvas.emit('InnerEvents', {\n                type: 'endpoint:drag',\n                data: linkedPoint\n            });\n        });\n        // 连线特殊处理\n        this.canvas.on('system.drag.move', (data: any) => {\n            let dragEdge = _.get(data, 'dragEdges[0]');\n            let sourcePointId = _.get(dragEdge, 'sourceEndpoint.id', '');\n            if (sourcePointId.indexOf('right') === -1) {\n                let souceNode = _.get(dragEdge, 'sourceNode');\n                let newSourcePoint = souceNode.getEndpoint(sourcePointId + '-right');\n                dragEdge.sourceEndpoint = newSourcePoint;\n                dragEdge.options.sourceEndpoint = newSourcePoint;\n                this.canvas._checkLinkNum(newSourcePoint, dragEdge, 'source');\n            }\n        });\n        // 聚焦链路\n        this.canvas.on('custom.endpoint.focus', (data: { point: any; }) => {\n            this.canvas._focusChain(data.point);\n            this.rowMouseOver.emit(data.point);\n        });\n        // 失焦链路\n        this.canvas.on('custom.endpoint.unFocus', (data: { point: any; }) => {\n            this.canvas._unFocusChain(data.point);\n            this.rowMouseOut.emit(data.point);\n        });\n\n        // 字段重新排列\n        this.canvas.on('custom.field.sort', (data?: any) => {\n            const {nodeId, pointIds} = data;\n            let node = this.canvas.getNode(nodeId);\n            if (!node) {\n                return;\n            }\n            pointIds.forEach((pointId: string) => {\n                let fieldPoints = [\n                    node.getEndpoint(pointId),\n                    node.getEndpoint(pointId + '-left'),\n                    node.getEndpoint(pointId + '-right')\n                ];\n                fieldPoints.forEach((point) => {\n                    if (!point) {\n                        return;\n                    }\n                    point.updatePos();\n                });\n                let updateEdges = this.canvas.edges.filter((item: any) => {\n                    if (nodeId === item.sourceNode.id && (pointId + '-right' === item.sourceEndpoint.id)) {\n                        return true;\n                    }\n                    if (nodeId === item.targetNode.id && (pointId + '-left' === item.targetEndpoint.id)) {\n                        return true;\n                    }\n                    return false;\n                });\n                updateEdges.forEach(i => {\n                    i.redraw();\n                });\n                this.onChange();\n            });\n        });\n\n        // 字段选择状态变更\n        this.canvas.on('custom.field.checked', (checkData) => {\n            let node = this.canvas.getNode(checkData.nodeId);\n            let targetField = _.find(node.options.fields, i => i[node.primaryKey] === checkData.fieldId);\n            targetField.checked = checkData.checked;\n            this.canvas.updateCheckedStatus([node.options]);\n            let result = transformChangeData(this.canvas.getDataMap(), this.type || 'single');\n            this.change.emit(result);\n        });\n\n        this.canvas.on('system.link.click', (data?: any) => {\n            let _edge = data.edge;\n            this.edgeClick.emit(new EdgeClickEvent(\n                _edge.id,\n                _edge.sourceNode.id,\n                _edge.targetNode.id,\n                _edge.sourceEndpoint.originId,\n                _edge.targetEndpoint.originId\n            ));\n        })\n    }\n}\n\nexport interface Column {\n    /** 列名 */\n    title?: string;\n    /** 键 */\n    key: string;\n    /** 列宽度 */\n    width?: number;\n    /** 指定为库内部用于区分每一行数据用的键 */\n    primaryKey?: boolean;\n    /** 渲染自定义HTML代码 */\n    render?(text: any, record: any, index: number): string;\n}\n\nexport interface Config {\n    delayDraw?: number;\n    extraPos?: {\n        paddingLeft?: number;\n        paddingRight?: number;\n        paddingTop?: number;\n        paddingBottom?: number;\n        paddingCenter?: number;\n        nodeVerticalPadding?: number;\n        rowHeight?: number;\n    };\n    sortable?: boolean | {\n        source?: boolean;\n        target?: boolean;\n    };\n    checkable?: boolean | {\n        source?: boolean;\n        target?: boolean;\n    };\n    linkNumLimit?: number | {\n        source?: number;\n        target?: number;\n    };\n}\n\nexport class MappingEdge {\n    constructor(public source, public target, public sourceNode?, public targetNode?) { }\n}\n\nexport class EdgeClickEvent {\n    constructor(public id, public sourceNodeId, public targetNodeId, public sourceEndpointId, public targetEndpointId) {\n    }\n}\n\nexport class ChangeEvent {\n    mappingData: MappingEdge[];\n    sourceData: any[] | object;\n    targetData: any[] | object;\n}\n\nfunction transformInitData(data) {\n    let {\n        columns, sourceColumns, targetColumns,\n        sourceData, targetData,\n        mappingData, type, extraPos,\n        sortable, checkable, emptyContent, emptyWidth,\n        sourceClassName, targetClassName, readonly\n    } = data;\n\n    let _sourceColumns = [];\n    let _targetColumns = [];\n    _sourceColumns = sourceColumns ? sourceColumns : columns;\n    _targetColumns = targetColumns ? targetColumns : columns;\n\n    const _genNodes = (data, nodeType, comType) => {\n        if (comType === 'single' && data.constructor === Object) {\n            return [_.assign({\n                id: nodeType,\n                type: nodeType,\n                _sourceColumns,\n                _targetColumns,\n                _extraPos: extraPos,\n                Class: TableNode,\n                _emptyContent: emptyContent,\n                _emptyWidth: emptyWidth,\n                _sourceClassName: sourceClassName,\n                _targetClassName: targetClassName,\n                sortable,\n                checkable,\n                readonly\n            }, data)];\n        } else if (comType === 'multiple' && data.constructor === Array) {\n            return data.map((item) => {\n                return _.assign({\n                    type: nodeType,\n                    _sourceColumns,\n                    _targetColumns,\n                    _extraPos: extraPos,\n                    Class: TableNode,\n                    _emptyContent: emptyContent,\n                    _emptyWidth: emptyWidth,\n                    _sourceClassName: sourceClassName,\n                    _targetClassName: targetClassName,\n                    sortable,\n                    checkable,\n                    readonly\n                }, item);\n            });\n        }\n    }\n    let sourceNodes = _genNodes(sourceData, 'source', type);\n    let targetNodes = _genNodes(targetData, 'target', type);\n    let edges = mappingData.map((item) => {\n        return {\n            id: `${item.source}-${item.target}`,\n            type: 'endpoint',\n            sourceNode: item.sourceNode || sourceNodes[0].id,\n            source: item.source,\n            targetNode: item.targetNode || targetNodes[0].id,\n            target: item.target\n        }\n    });\n    return {\n        nodes: [].concat(sourceNodes).concat(targetNodes),\n        edges: edges\n    };\n}\n\nfunction transformChangeData(data, comType) {\n    let result = new ChangeEvent();\n    let sourceNodes = data.nodes.filter(i => i.options.type === 'source');\n    let targetNodes = data.nodes.filter(i => i.options.type === 'target');\n    if (comType === 'single') {\n        let _sourceNode = sourceNodes[0];\n        let _targetNode = targetNodes[0];\n        result.mappingData = data.edges.map((item) => {\n            return {\n                source: item.sourceEndpoint.originId,\n                target: item.targetEndpoint.originId\n            }\n        });\n        result.sourceData = {\n            id: _sourceNode.id,\n            title: _.get(_sourceNode, 'options.title'),\n            fields: _.get(_sourceNode, 'options.fields')\n        };\n        result.targetData = {\n            id: _targetNode.id,\n            title: _.get(_targetNode, 'options.title'),\n            fields: _.get(_targetNode, 'options.fields')\n        };\n    } else if (comType === 'multiple') {\n        result.mappingData = data.edges.map((item) => {\n            return {\n                sourceNode: item.sourceNode.id,\n                targetNode: item.targetNode.id,\n                source: item.sourceEndpoint.originId,\n                target: item.targetEndpoint.originId\n            }\n        });\n        result.sourceData = sourceNodes.map((item) => {\n            return {\n                id: item.id,\n                title: _.get(item, 'options.title'),\n                fields: _.get(item, 'options.fields')\n            };\n        });\n        result.targetData = targetNodes.map((item) => {\n            return {\n                id: item.id,\n                title: _.get(item, 'options.title'),\n                fields: _.get(item, 'options.fields')\n            };\n        });\n    }\n    return _.cloneDeep(result);\n}\n\nfunction getPrimaryKey(nodeData) {\n    try {\n        return nodeData._sourceColumns.filter(i => i.primaryKey === true).key;\n    } catch (e) {  // fallback if no primary key set, use first entry\n        return nodeData._sourceColumns[0].key;\n    }\n}\n\nfunction diffPropsData(newData, oldData) {\n    const primaryKey = getPrimaryKey(newData.nodes[0]);\n\n    const isSameId = (a, b) => a[primaryKey] === b[primaryKey];\n    const isSameCheck = (a, b) => a.id === b.id && a.checked === b.checked;\n\n    let addNodes = _.differenceWith(newData.nodes, oldData.nodes, isSameId);\n    let rmNodes = _.differenceWith(oldData.nodes, newData.nodes, isSameId);\n\n\n    let addFields = [];\n    let rmFields = [];\n    let checkedFields = [];\n    newData.nodes.forEach((_newNode) => {\n        let _oldNode = _.find(oldData.nodes, _node => _node.id === _newNode.id);\n        if (_oldNode) {\n\n            let addResult = _.differenceWith(_newNode.fields, _.get(_oldNode, 'options.fields'), isSameId);\n            let checkResult = _.differenceWith(_newNode.fields, _.get(_oldNode, 'options.fields'), isSameCheck);\n            if (checkResult.length > 0) {\n                checkedFields.push({\n                    id: _newNode.id,\n                    type: _newNode.type,\n                    fields: checkResult\n                });\n            }\n            if (addResult.length > 0) {\n                addFields.push({\n                    id: _newNode.id,\n                    type: _newNode.type,\n                    fields: addResult\n                });\n            }\n        }\n    });\n\n    oldData.nodes.forEach((_oldNode) => {\n        let _newNode = _.find(newData.nodes, _node => _node.id === _oldNode.id);\n        if (_newNode) {\n            let result = _.differenceWith(_.get(_oldNode, 'options.fields'), _newNode.fields, isSameId);\n            if (result.length > 0) {\n                rmFields.push({\n                    id: _newNode.id,\n                    type: _newNode.type,\n                    fields: result\n                });\n            }\n        }\n    });\n\n    const isSameEdge = (a, b) => {\n        return (\n            a.sourceNode === b.sourceNode &&\n            a.targetNode === b.targetNode &&\n            a.source === b.source &&\n            a.target === b.target\n        );\n    }\n\n    let addEdges = _.differenceWith(newData.edges, oldData.edges, isSameEdge);\n    let rmEdges = _.differenceWith(oldData.edges, newData.edges, isSameEdge);\n\n    return {\n        addEdges,\n        rmEdges,\n        addNodes,\n        rmNodes,\n        addFields,\n        rmFields,\n        checkedFields\n    };\n}\n","import { NgModule } from '@angular/core';\nimport { DataMappingComponent } from './data-mapping/data-mapping.component';\nimport { CommonModule } from \"@angular/common\";\n\n\n@NgModule({\n    declarations: [\n        DataMappingComponent,\n    ],\n    imports: [\n        CommonModule,\n    ],\n    exports: [\n        DataMappingComponent\n    ],\n    providers: [\n    ]\n})\nexport class ButterflyDataMappingModule {\n}\n","/*\n * Public API Surface of butterfly-data-mapping\n */\n\nexport * from './lib/butterfly-data-mapping.module';\nexport * from './lib/data-mapping/data-mapping.component'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_","Endpoint","Canvas"],"mappings":"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"}