@syncfusion/ej2-treegrid 20.3.60 → 20.3.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-treegrid.min.js","sources":["../../src/treegrid/utils.js","../../src/treegrid/actions/crud-actions.js","../../src/treegrid/models/column.js","../../src/treegrid/models/filter-settings.js","../../src/treegrid/models/textwrap-settings.js","../../src/treegrid/actions/logger.js","../../src/treegrid/actions/clipboard.js","../../src/treegrid/base/constant.js","../../src/treegrid/actions/selection.js","../../src/treegrid/actions/print.js","../../src/treegrid/models/search-settings.js","../../src/treegrid/models/selection-settings.js","../../src/treegrid/renderer/render.js","../../src/treegrid/base/data.js","../../src/treegrid/enum.js","../../src/treegrid/models/page-settings.js","../../src/treegrid/models/summary.js","../../src/treegrid/models/edit-settings.js","../../src/treegrid/models/sort-settings.js","../../src/treegrid/models/infinite-scroll-settings.js","../../src/treegrid/base/treegrid.js","../../src/treegrid/actions/reorder.js","../../src/treegrid/actions/resize.js","../../src/treegrid/actions/rowdragdrop.js","../../src/treegrid/models/rowdrop-settings.js","../../src/treegrid/renderer/virtual-row-model-generator.js","../../src/treegrid/actions/filter.js","../../src/treegrid/actions/excel-export.js","../../src/treegrid/actions/pdf-export.js","../../src/treegrid/actions/page.js","../../src/treegrid/actions/toolbar.js","../../src/treegrid/actions/summary.js","../../src/treegrid/actions/sort.js","../../src/treegrid/actions/column-menu.js","../../src/treegrid/actions/context-menu.js","../../src/treegrid/actions/batch-edit.js","../../src/treegrid/actions/edit.js","../../src/treegrid/actions/command-column.js","../../src/treegrid/actions/detail-row.js","../../src/treegrid/renderer/virtual-tree-content-render.js","../../src/treegrid/actions/virtual-scroll.js","../../src/treegrid/renderer/virtual-tree-freeze-render.js","../../src/treegrid/actions/freeze-column.js","../../src/treegrid/actions/column-chooser.js","../../src/treegrid/actions/infinite-scroll.js","../../src/global.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[i].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[i]);\n if (hasChild) {\n datas.push(records[i]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords.filter(function (item) { return !item.isSummaryRow; });\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[id][value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[control.idMapping] === currentData_1[control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData_1[control.idMapping]) {\n if (!control.enableImmutableMode && parentData.childRecords.length === parentData['Children'].length) {\n parentData['childRecords'].splice(p, 1);\n }\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n return \"break\";\n }\n }\n else {\n if (action === 'edit') {\n for (j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(treeData[i], keys[j]) && ((control.editSettings.mode !== 'Cell'\n || (!isNullOrUndefined(batchChanges) && batchChanges[changedRecords].length === 0))\n || keys[j] === columnName)) {\n var editedData = getParentData(control, modifiedData[k].uniqueID);\n treeData[i][keys[j]] = modifiedData[k][keys[j]];\n if (editedData && editedData.taskData) {\n editedData.taskData[keys[j]] = editedData[keys[j]] = treeData[i][keys[j]];\n }\n }\n }\n }\n else if (action === 'add' || action === 'batchsave') {\n var index = void 0;\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData.taskData[control.parentIdMapping] = treeData[i][control.idMapping];\n treeData.splice(i + 1, 0, originalData.taskData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(treeData[i], control.childMapping)) {\n treeData[i][control.childMapping] = [];\n }\n treeData[i][control.childMapping].push(originalData.taskData);\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n treeData.splice(i + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i + 1], action, control, isSelfReference, originalData);\n }\n }\n else if (!addRowIndex) {\n index = 0;\n treeData.splice(index, 0, originalData.taskData);\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n treeData.splice(i, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n }\n return \"break\";\n }\n }\n else if (!isNullOrUndefined(treeData[i][control.childMapping])) {\n if (removeChildRecords(treeData[i][control.childMapping], modifiedData[k], action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference);\n }\n }\n };\n while (i-- && i >= 0) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n }\n }\n}\n/**\n * Performs Add action to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {Object[]} treeData - Tree Grid data source\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord) {\n var value;\n var isSkip = false;\n var currentViewRecords = control.grid.getCurrentViewRecords();\n value = extend({}, details.value);\n value = getPlainData(value);\n switch (control.editSettings.newRowPosition) {\n case 'Top':\n treeData.unshift(value);\n isSkip = true;\n break;\n case 'Bottom':\n treeData.push(value);\n isSkip = true;\n break;\n case 'Above':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n value = extend({}, currentViewRecords[addRowIndex + 1]);\n value = getPlainData(value);\n }\n break;\n case 'Below':\n case 'Child':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var currentdata = currentViewRecords[addRowIndex];\n if (!isNullOrUndefined(currentdata) && currentdata[primaryKeys] === details.value[primaryKeys] || selectedIndex !== -1) {\n value = extend({}, currentdata);\n }\n else {\n value = extend({}, details.value);\n }\n value = getPlainData(value);\n var internalProperty = 'internalProperties';\n control.editModule[internalProperty].taskData = value;\n }\n if (selectedIndex === -1) {\n treeData.unshift(value);\n isSkip = true;\n }\n }\n return { value: value, isSkip: isSkip };\n}\n/**\n * @param {ITreeData[]} childRecords - Child Records collection\n * @param {Object} modifiedData - Modified data in crud action\n * @param {string} action - crud action type\n * @param {string} key - Primary key field name\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether Self Referential data binding\n * @param {ITreeData} originalData - Non updated data from data source, of edited data\n * @param {string} columnName - column field name\n * @returns {boolean} Returns whether child records exists\n */\nexport function removeChildRecords(childRecords, modifiedData, action, key, control, isSelfReference, originalData, columnName) {\n var isChildAll = false;\n var j = childRecords.length;\n while (j-- && j >= 0) {\n if (childRecords[j][key] === modifiedData[key] ||\n (isSelfReference && childRecords[j][control.parentIdMapping] === modifiedData[control.idMapping])) {\n if (action === 'edit') {\n var keys = Object.keys(modifiedData);\n var editedData = getParentData(control, modifiedData.uniqueID);\n for (var i = 0; i < keys.length; i++) {\n if (Object.prototype.hasOwnProperty.call(childRecords[j], keys[i]) && (control.editSettings.mode !== 'Cell' || keys[i] === columnName)) {\n editedData[keys[i]] = editedData.taskData[keys[i]] = childRecords[j][keys[i]] = modifiedData[keys[i]];\n if (control.grid.editSettings.mode === 'Normal' && control.editSettings.mode === 'Cell') {\n var editModule = 'editModule';\n control.grid.editModule[editModule].editRowIndex = modifiedData.index;\n control.grid.editModule[editModule].updateCurrentViewData(modifiedData);\n }\n }\n }\n break;\n }\n else if (action === 'add' || action === 'batchsave') {\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData[control.parentIdMapping] = childRecords[j][control.idMapping];\n childRecords.splice(j + 1, 0, originalData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(childRecords[j], control.childMapping)) {\n childRecords[j][control.childMapping] = [];\n }\n childRecords[j][control.childMapping].push(originalData.taskData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n childRecords.splice(j, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n childRecords.splice(j + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n }\n else {\n childRecords.splice(j, 1);\n if (!childRecords.length) {\n isChildAll = true;\n }\n }\n }\n else if (!isNullOrUndefined(childRecords[j][control.childMapping])) {\n if (removeChildRecords(childRecords[j][control.childMapping], modifiedData, action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference);\n }\n }\n }\n return isChildAll;\n}\n/**\n * @param {string} key - Primary key field name\n * @param {ITreeData} record - Parent Record which has to be updated\n * @param {string} action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether self referential data binding\n * @param {ITreeData} child - Specifies child record\n * @returns {void}\n */\nexport function updateParentRow(key, record, action, control, isSelfReference, child) {\n if ((control.editSettings.newRowPosition === 'Above' || control.editSettings.newRowPosition === 'Below')\n && ((action === 'add' || action === 'batchsave')) && !isNullOrUndefined(child.parentItem)) {\n var parentData = getParentData(control, child.parentItem.uniqueID);\n parentData.childRecords.push(child);\n }\n else {\n var currentRecords = control.grid.getCurrentViewRecords();\n var index_1;\n currentRecords.map(function (e, i) { if (e[key] === record[key]) {\n index_1 = i;\n return;\n } });\n if (control.enableVirtualization && isNullOrUndefined(index_1)) {\n var updatedParent = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n record = updatedParent;\n }\n if (!isNullOrUndefined(index_1)) {\n record = currentRecords[index_1];\n }\n if (control.enableVirtualization && isNullOrUndefined(record) && !isNullOrUndefined(child)) {\n record = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n }\n if (!isSelfReference && !isNullOrUndefined(record.childRecords) && record.childRecords.length) {\n record.hasChildRecords = true;\n }\n else {\n record.hasChildRecords = false;\n }\n if (action === 'add' || action === 'batchsave') {\n record.expanded = true;\n record.hasChildRecords = true;\n if (control.sortSettings.columns.length && isNullOrUndefined(child)) {\n child = currentRecords.filter(function (e) {\n if (e.parentUniqueID === record.uniqueID) {\n return e;\n }\n else {\n return null;\n }\n });\n }\n var childRecords = child ? child instanceof Array ? child[0] : child : currentRecords[index_1 + 1];\n if (control.editSettings.newRowPosition !== 'Below') {\n if (!Object.prototype.hasOwnProperty.call(record, 'childRecords')) {\n record.childRecords = [];\n }\n else {\n if (!isNullOrUndefined(child) && record[key] !== child[key]) {\n record.childRecords.push(child);\n }\n }\n if (record.childRecords.indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record.childRecords.unshift(childRecords);\n }\n if (isSelfReference) {\n if (!Object.prototype.hasOwnProperty.call(record, control.childMapping)) {\n record[control.childMapping] = [];\n }\n if (record[control.childMapping].indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record[control.childMapping].unshift(childRecords);\n }\n }\n }\n }\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var data = control.grid.dataSource instanceof DataManager ?\n control.grid.dataSource.dataSource.json : control.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n if (data[i][primaryKeys] === record[primaryKeys]) {\n data[i] = record;\n break;\n }\n }\n control.grid.setRowData(key, record);\n var row = control.getRowByIndex(index_1);\n if (control.editSettings.mode === 'Batch') {\n if (action === 'add') {\n row = control.getRows()[control.grid.getCurrentViewRecords().indexOf(record)];\n }\n else {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index_1);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n var index_2 = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index_2 = index_2 + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[index_2] ? row.cells[index_2]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n if (control.enableImmutableMode && control['action'] === 'indenting' || control['action'] === 'outdenting') {\n control.renderModule.RowModifier({\n data: record, row: row\n });\n }\n }\n }\n}\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n /**\n * Update the State changes reflected for TreeGrid columndirective in react platform.\n *\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent['isReact'] && keys[i] === 'template') {\n var refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'].renderModule[refreshReactColumnTemplateByUid](this.uid);\n }\n }\n };\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Represents the Tree Grid predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the textwrap behavior of the TreeGrid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Logger as GridLogger, Grid, detailLists } from '@syncfusion/ej2-grids';\n/**\n * Logger module for TreeGrid\n *\n * @hidden\n */\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar WARNING = '[EJ2TreeGrid.Warning]';\nvar ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar INFO = '[EJ2TreeGrid.Info]';\nvar IsRowDDEnabled = false;\nvar Logger = /** @class */ (function (_super) {\n __extends(Logger, _super);\n function Logger(parent) {\n var _this = this;\n Grid.Inject(GridLogger);\n _this = _super.call(this, parent) || this;\n return _this;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[i]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n var message = item.generateMessage(args, this.parent, cOp.options);\n message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');\n if (IsRowDDEnabled && type[i] === 'primary_column_missing') {\n message = message.replace('Editing', 'Row DragAndDrop');\n IsRowDDEnabled = false;\n }\n var index = message.indexOf('https');\n var gridurl = message.substring(index);\n if (type[i] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[i] === 'primary_column_missing' || type[i] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[i] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[i] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[i] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[i] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[i] === 'datasource_syntax_mismatch') {\n if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n else {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n };\n Logger.prototype.treeLog = function (types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter(function (column) { return column.isPrimaryKey; }).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (var i = 0; i < type.length; i++) {\n var item = treeGridDetails[type[i]];\n var cOp = item.check(args, treeGrid);\n if (cOp.success) {\n var message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n };\n return Logger;\n}(GridLogger));\nexport { Logger };\nexport var treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check: function (args, parent) {\n var opt = { success: false };\n if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)\n && isNullOrUndefined(parent.parentIdMapping)) ||\n (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||\n (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {\n opt = { success: true };\n }\n return opt;\n },\n generateMessage: function () {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n (BASE_DOC_URL + \"/api/treegrid#childmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#idmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#$parentidmapping\");\n }\n }\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Clipboard as GridClipboard } from '@syncfusion/ej2-grids';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n *\n * @hidden\n */\nvar TreeClipboard = /** @class */ (function (_super) {\n __extends(TreeClipboard, _super);\n function TreeClipboard(parent, serviceLocator) {\n var _this = _super.call(this, parent.grid, serviceLocator) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\n _this.serviceLocator = serviceLocator;\n return _this;\n }\n TreeClipboard.prototype.setCopyData = function (withHeader) {\n var copyContent = 'copyContent';\n var getCopyData = 'getCopyData';\n var isSelect = 'isSelect';\n var uniqueID = 'uniqueID';\n var currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[copyContent] = '';\n var rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort(function (a, b) {\n return a - b;\n });\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.treeCopyContent += '\\n';\n }\n if (!rows[selectedIndexes[i]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[i][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[i], rows, withHeader, i);\n }\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += this[copyContent];\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n if (this.treeGridParent.copyHierarchyMode === 'Child' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.childContentData(currentRecords, selectedIndexes[i], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.treeGridParent.getVisibleColumns()[i].headerText;\n }\n this[getCopyData](headerTextArray, false, '\\t', withHeader);\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n var args = {\n data: this.treeCopyContent,\n cancel: false\n };\n this.treeGridParent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this[copyContent] = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this[isSelect] = true;\n this.copiedUniqueIdCollection = [];\n this.treeCopyContent = '';\n }\n else {\n _super.prototype.setCopyData.call(this, withHeader);\n }\n }\n };\n TreeClipboard.prototype.parentContentData = function (currentRecords, selectedIndex, rows, withHeader, index) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var level = 'level';\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem])) {\n var treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n if (index > 0) {\n this.treeCopyContent = this.treeCopyContent + this[copyContent] + '\\n';\n }\n else {\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n break;\n }\n }\n }\n }\n }\n };\n TreeClipboard.prototype.copy = function (withHeader) {\n _super.prototype.copy.call(this, withHeader);\n };\n TreeClipboard.prototype.paste = function (data, rowIndex, colIndex) {\n _super.prototype.paste.call(this, data, rowIndex, colIndex);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns clipboard module name\n */\n TreeClipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n TreeClipboard.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n TreeClipboard.prototype.childContentData = function (currentRecords, selectedIndex, rows, withHeader) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var childRecords = 'childRecords';\n var hasChildRecords = 'hasChildRecords';\n var uniqueID = 'uniqueID';\n if (currentRecords[selectedIndex][hasChildRecords]) {\n var childData = currentRecords[selectedIndex][childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[i][uniqueID]) && currentRecords[j][uniqueID] === childData[i][uniqueID]) {\n if ((!isNullOrUndefined(rows[j])) && !rows[j].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += ('\\n' + this[copyContent]);\n this[copyContent] = '';\n this.copiedUniqueIdCollection.push(uniqueid);\n this.childContentData(currentRecords, j, rows, withHeader);\n }\n }\n break;\n }\n }\n }\n }\n };\n return TreeClipboard;\n}(GridClipboard));\nexport { TreeClipboard };\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var headerContent = 'e-headercontent';\n/** @hidden */\nexport var movableContent = 'e-movablecontent';\n/** @hidden */\nexport var movableHeader = 'e-movableheader';\n/** @hidden */\nexport var frozenContent = 'e-frozencontent';\n/** @hidden */\nexport var frozenHeader = 'e-frozenheader';\n/** @hidden */\nexport var content = 'e-content';\n/** @hidden */\nexport var table = 'e-table';\n/** @hidden */\nexport var leftRight = 'Left-Right';\n/** @hidden */\nexport var frozenRight = 'frozen-right';\n/** @hidden */\nexport var frozenLeft = 'frozen-left';\n/** @hidden */\nexport var dataColIndex = 'data-colindex';\n/** @hidden */\nexport var ariaColIndex = 'aria-colindex';\n/** @hidden */\nexport var dataRowIndex = 'data-rowindex';\n/** @hidden */\nexport var ariaRowIndex = 'aria-rowindex';\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.searchingRecords = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var stackedHeader = 'stackedHeader';\n var columnModel = 'columnModel';\n var columns = this.parent[stackedHeader] ? this.parent[columnModel] : (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = columns[col].uid;\n }\n }\n var headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (var j = 0; j < headerCelllength; j++) {\n var headercell = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[j];\n if (headercell.getAttribute('e-mappinguid') === mappingUid) {\n columnIndex = j;\n }\n }\n return columnIndex;\n };\n Selection.prototype.headerCheckbox = function () {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n var value = false;\n var rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n if (!isNullOrUndefined(headerElement)) {\n headerElement.insertBefore(checkWrap, headerElement.firstChild);\n }\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n else if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length > 0) {\n var checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n var checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n };\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox', 'aria-label': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n if (this.parent.allowTextWrap) {\n checkWrap.querySelector('.e-frame').style.width = '18px';\n }\n if (data.checkboxState === 'indeterminate') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-stop');\n }\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\n };\n Selection.prototype.columnCheckbox = function (container) {\n var checkWrap = this.renderColumnCheckbox(container);\n var containerELe = container.cell.querySelector('.e-treecolumn-container');\n if (!isNullOrUndefined(containerELe)) {\n if (!container.cell.querySelector('.e-hierarchycheckbox')) {\n containerELe.insertBefore(checkWrap, containerELe.querySelectorAll('.e-treecell')[0]);\n }\n }\n else {\n var spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n var data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n var divEle = this.parent.createElement('div', { className: 'e-treecheckbox-container' });\n divEle.appendChild(checkWrap);\n divEle.appendChild(spanEle);\n container.cell.appendChild(divEle);\n }\n };\n Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n var flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n var checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n var keys = Object.keys(record);\n for (var j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(flatRecord, keys[j])) {\n flatRecord[keys[j]] = record[keys[j]];\n }\n }\n this.traverSelection(record, checkboxState, false);\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n };\n Selection.prototype.traverSelection = function (record, checkboxState, ischildItem) {\n var length = 0;\n this.updateSelectedItems(record, checkboxState);\n if (!ischildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n if (record.childRecords && this.parent.autoCheckHierarchy) {\n var childRecords = record.childRecords;\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords.length;\n for (var count = 0; count < length; count++) {\n if (!childRecords[count].isSummaryRow) {\n if (childRecords[count].hasChildRecords) {\n this.traverSelection(childRecords[count], checkboxState, true);\n }\n else {\n this.updateSelectedItems(childRecords[count], checkboxState);\n }\n }\n }\n }\n };\n Selection.prototype.getFilteredChildRecords = function (childRecords) {\n var _this = this;\n var filteredChildRecords = childRecords.filter(function (e) {\n return _this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n };\n Selection.prototype.updateParentSelection = function (parentRecord) {\n var length = 0;\n var childRecords = [];\n var record = getParentData(this.parent, parentRecord.uniqueID);\n if (record && record.childRecords) {\n childRecords = record.childRecords;\n }\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords && childRecords.length;\n var indeter = 0;\n var checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (var i = 0; i < childRecords.length; i++) {\n var currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n var checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && (!record.hasFilteredChildRecords || isNullOrUndefined(record.hasFilteredChildRecords)) && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check') {\n record.checkboxState = 'check';\n }\n else if ((checkChildRecords === 0 && indeter === 0) || (checkChildRecords === 0 && record.hasFilteredChildRecords && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check')) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n //This property used to maintain the check state of the currentview data after clear filtering\n var multiFilterCheckState = false;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n if (this.parent.grid.searchSettings.key.length) {\n this.searchingRecords = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n multiFilterCheckState = true;\n }\n else {\n multiFilterCheckState = false;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length && !this.parent.grid.searchSettings.key.length) {\n this.filteredList = [];\n }\n if (this.searchingRecords.length && !isNullOrUndefined(checkAll)) {\n this.filteredList = this.searchingRecords;\n }\n }\n var data;\n if (this.parent.filterModule.filteredResult.length === 0 && this.parent.getCurrentViewRecords().length === 0 &&\n this.parent.filterSettings.columns.length > 0) {\n data = this.filteredList;\n }\n else {\n data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList : this.parent.flatData;\n }\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n if (multiFilterCheckState) {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var tr = this.parent.getRows()[recordIndex];\n var checkbox;\n if (recordIndex > -1) {\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n var chkstate = checkState === 'check' ? 'checked' : checkState === 'uncheck' ? 'unchecked' : 'mixed';\n tr.querySelector('.e-treecheckselect').setAttribute('aria-checked', checkState === 'check' ? 'true' : checkState === 'uncheck' ? 'false' : 'mixed');\n tr.querySelector('.e-frame').setAttribute('title', 'checkbox' + chkstate);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords && record.childRecords.length > 0) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import * as events from '../base/constant';\nimport { Grid, getObject, Print as GridPrint } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Print module\n *\n * @hidden\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Print(parent) {\n this.parent = parent;\n Grid.Inject(GridPrint);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Print module name\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Print.prototype.addEventListener = function () {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n };\n Print.prototype.removeEventListener = function () {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n };\n Print.prototype.printTreeGrid = function (printGrid) {\n var grid = getObject('printgrid', printGrid);\n var gridElement = getObject('element', printGrid);\n grid.addEventListener(events.queryCellInfo, this.parent.grid.queryCellInfo);\n grid.addEventListener(events.rowDataBound, this.parent.grid.rowDataBound);\n grid.addEventListener(events.beforeDataBound, this.parent.grid.beforeDataBound);\n addClass([gridElement], 'e-treegrid');\n };\n Print.prototype.print = function () {\n this.parent.grid.print();\n };\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the selection behavior of the TreeGrid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend, CellRenderer } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed) {\n args.row.style.display = 'none';\n }\n }\n if (isRemoteData(this.parent) && !isOffline(this.parent)) {\n var proxy_1 = this.parent;\n var parentrec = this.parent.getCurrentViewRecords().filter(function (rec) {\n return getValue(proxy_1.idMapping, rec) === getValue(proxy_1.parentIdMapping, data);\n });\n if (parentrec.length > 0 && !parentrec[0].isSummaryRow) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n args.cell.setAttribute('aria-expanded', data.expanded ? 'true' : 'false');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n if (args.column.template) {\n args.cell.innerHTML = null;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('data-colindex', colindex + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n args.column.template = treeColumn.template;\n args.column[templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[templateFn](args.data, this.parent, 'template', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[portals])) {\n this.parent.grid[portals] = this.parent[portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Render.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.parent.grid.getRowsObject();\n var indent = _this.parent.grid.getIndentCount();\n var cellIndex = _this.parent.grid.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n var cell = rowsObj[j][cells][cellIndex];\n var cellRenderer = new CellRenderer(_this.parent.grid, _this.parent.grid.serviceLocator);\n var td = _this.parent.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n var treecell = _this.parent.getRows()[j].cells[cellIndex];\n _this.cellRender({ data: rowsObj[j].data, cell: treecell, column: cell.column });\n }\n }\n });\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = <DataManager>this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (Object.keys(data).length === 0 && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var tempData = data[i];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[i];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var records = args.result;\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (!this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (!this.parent.loadChildOnDemand) {\n for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records) && !((this.parent.loadChildOnDemand) && isCountRequired(this.parent) && !isNullOrUndefined(this.parent['dataResults']['expandRecord']))) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result_1], true);\n }\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n var keys = Object.keys(data);\n for (var i = 0, len = keys.length; i < len; i++) {\n var currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if ((!isNullOrUndefined(currentData[this.parent.childMapping]) && !isCountRequired(this.parent)) ||\n ((currentData[this.parent.hasChildMapping]) && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n this.parent['infiniteScrollData'].push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n if (this.parent.allowRowDragAndDrop && !isNullOrUndefined(this.parent.rowDragAndDropModule['draggedRecord']) &&\n this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n modifiedData.splice(dragdIndex, 1);\n var dropdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n modifiedData.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n modifiedData.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n ContextMenuItems[ContextMenuItems[\"RowIndent\"] = 16] = \"RowIndent\";\n ContextMenuItems[ContextMenuItems[\"RowOutdent\"] = 17] = \"RowOutdent\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the TreeGrid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n __decorate([\n Property('All')\n ], PageSettings.prototype, \"pageSizeMode\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, getEnumValue, compile } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { CellType } from '@syncfusion/ej2-grids';\n/**\n * Configures the TreeGrid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.intl = new Internationalization();\n _this.templateFn = {};\n return _this;\n }\n /**\n * Custom format function\n *\n * @hidden\n * @param {string} cultureName - culture name to format\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = this.getFormatFunction(this.format);\n }\n };\n /**\n * @param {NumberFormatOptions | DateFormatOptions} format - formatting options for number and date values\n * @hidden\n * @returns {Function} - return formatter function\n */\n AggregateColumn.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n /**\n * @hidden\n * @returns {Function} - Returns formatter function\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - updates aggregate properties without change detection\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], AggregateRow.prototype, \"showChildSummary\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Configures the edit behavior of the TreeGrid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Cell')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of TreeGrid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the infinite scroll behavior of Tree Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend, merge } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\nimport * as literals from '../base/constant';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.indentOutdentAction = 'indentOutdentAction';\n _this.modifiedRecords = [];\n _this.stackedHeader = false;\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.infiniteScrollData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n var freezePresent = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'freeze';\n });\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || freezePresent.length) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n var IsRowDDInjected = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'rowDragAndDrop';\n });\n if (this.allowRowDragAndDrop || IsRowDDInjected.length) {\n if ((!isNullOrUndefined(this.toolbar) && (this.toolbar['includes']('Indent') ||\n this.toolbar['includes']('Outdent')))) {\n this.isIndentEnabled = true;\n }\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n if (this.isVue) {\n this.grid.isVue = true;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n var root = 'root';\n this.grid[root] = this[root] ? this[root] : this;\n this.grid.appendTo(gridContainer);\n if (this.isIndentEnabled) {\n this.refreshToolbarItems();\n }\n this.wireEvents();\n this.renderComplete();\n var destroyTemplate = 'destroyTemplate';\n var destroyTemplateFn = this.grid[destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[destroyTemplate] = function (args, index) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[portals]))) {\n _this.clearTemplate(args, index);\n }\n };\n };\n TreeGrid.prototype.refreshToolbarItems = function () {\n var toolbarElement = this.toolbarModule.getToolbar();\n var indentID = this.element.id + '_gridcontrol_indent';\n var outdentID = this.element.id + '_gridcontrol_outdent';\n var indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n var outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this, this.grid.serviceLocator);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n this.grid.enableVirtualMaskRow = false; // Need to update in virtual mask row feature implementation.\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.IsExpandCollapseClicked = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))\n && (!isNullOrUndefined(args.data) && args.data['hasChildRecords'])) {\n args.cancel = true;\n return;\n }\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowDeselecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowDeselecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[action] === 'expand' || _this.dataResults[action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[index], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n if (args.action.requestType !== 'infiniteScroll') {\n _this.infiniteScrollData = [];\n }\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 && _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (args.action === 'filter') {\n if (_this.filterModule['currentFilterObject'] !== '' && _this.enableVirtualization && !_this.initialRender) {\n _this.expandAll();\n }\n }\n if (args.requestType === 'searching') {\n if (_this.searchSettings.key !== '' && _this.enableVirtualization && !_this.initialRender) {\n _this.expandAll();\n }\n }\n if (args.action === 'clearFilter' && _this.enableCollapseAll) {\n _this.collapseAll();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var selectedItem_1 = [_this.selectedRecords];\n var actionArgs = {\n data: selectedItem_1,\n dropIndex: _this.dropIndex,\n dropPosition: _this.dropPosition,\n modifiedRecords: _this.modifiedRecords,\n requestType: _this.action,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n var currentPageItem = _this.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === selectedItem_1[0].uniqueID;\n });\n if (!currentPageItem.length) {\n _this.refreshToolbarItems();\n }\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = _this.modifiedRecords = [];\n }\n else {\n if (_this.grid.isFrozenGrid() && _this.enableVirtualization && args['tableName'] === 'movable') {\n var movableContent = _this.grid.element.querySelector('.' + literals.movableContent);\n var frozenContent = _this.grid.element.querySelector('.' + literals.frozenContent);\n movableContent.style.height = frozenContent.style.height = 'auto';\n }\n _this.trigger(events.actionComplete, args);\n }\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (<DataManager>this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[guid] = this.editSettings[guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n case 'Indent':\n case ContextMenuItems.RowIndent:\n items.push({ text: this.l10n.getConstant('RowIndent'),\n target: '.e-content', iconCss: 'e-indent e-icons', id: this.element.id + '_gridcontrol_cmenu_Indent' });\n break;\n case 'Outdent':\n case ContextMenuItems.RowOutdent:\n items.push({ text: this.l10n.getConstant('RowOutdent'),\n target: '.e-content', iconCss: 'e-outdent e-icons', id: this.element.id + '_gridcontrol_cmenu_Outdent' });\n break;\n default:\n items.push(this.contextMenuItems[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n TreeGrid.prototype.getGridToolbar = function () {\n if (this.toolbar) {\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[i]) {\n case 'Search':\n case ToolbarItem.Search:\n items.push('Search');\n break;\n case 'Print':\n case ToolbarItem.Print:\n items.push('Print');\n break;\n case 'ExpandAll':\n case ToolbarItem.ExpandAll:\n tooltipText = this.l10n.getConstant('ExpandAll');\n items.push({ text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-expand', id: this.element.id + '_gridcontrol_expandall' });\n break;\n case 'CollapseAll':\n case ToolbarItem.CollapseAll:\n tooltipText = this.l10n.getConstant('CollapseAll');\n items.push({ text: tooltipText,\n tooltipText: tooltipText, prefixIcon: 'e-collapse', id: this.element.id + '_gridcontrol_collapseall'\n });\n break;\n case 'Indent':\n case ToolbarItem.RowIndent:\n tooltipText = this.l10n.getConstant('RowIndent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-indent', id: this.element.id + '_gridcontrol_indent'\n });\n break;\n case 'Outdent':\n case ToolbarItem.RowOutdent:\n tooltipText = this.l10n.getConstant('RowOutdent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n TreeGrid.prototype.getGridColumns = function (columns, isEmptyColumnModel, index) {\n if (isEmptyColumnModel === void 0) { isEmptyColumnModel = true; }\n if (index === void 0) { index = 0; }\n var column = columns;\n var stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n var treeGridColumn;\n var gridColumn;\n if (this.columnModel.length == 0) {\n index = index === 0 ? -1 : index;\n }\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[i].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[i] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[i];\n }\n else {\n for (var _i = 0, _a = Object.keys(column[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, this.columnModel.length - 1);\n treeGridColumn[prop] = column[i][prop];\n }\n else if (this.initialRender && !isNullOrUndefined(treeColumn) && this.enablePersistence && prop === 'edit') {\n gridColumn[prop] = treeGridColumn[prop] = treeColumn[prop];\n }\n else if (!(treeColumn) || prop !== 'sortComparer') {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n if (!isNullOrUndefined(this.columnModel[this.treeColumnIndex]) && this.enableRtl) {\n if (gridColumn.field === this.columnModel[this.treeColumnIndex].field) {\n if (isNullOrUndefined(this.treeColumnTextAlign)) {\n this.treeColumnTextAlign = this.columnModel[this.treeColumnIndex].textAlign;\n this.treeColumnField = this.columnModel[this.treeColumnIndex].field;\n }\n gridColumn.textAlign = 'Right';\n }\n }\n }\n return gridColumnCollection;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeGridModel} newProp - properties details which has to be modified\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.onPropertyChanged = function (newProp) {\n var properties = Object.keys(newProp);\n var requireRefresh = false;\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'columns':\n this.grid.columns = this.getGridColumns(this.columns);\n break;\n case 'treeColumnIndex':\n this.grid.refreshColumns();\n break;\n case 'allowPaging':\n this.grid.allowPaging = this.allowPaging;\n break;\n case 'pageSettings':\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n requireRefresh = true;\n break;\n case 'enableVirtualization':\n this.grid.enableVirtualization = this.enableVirtualization;\n break;\n case 'enableColumnVirtualization':\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n break;\n case 'toolbar':\n this.grid.toolbar = this.getGridToolbar();\n break;\n case 'allowSelection':\n this.grid.allowSelection = this.allowSelection;\n break;\n case 'selectionSettings':\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n break;\n case 'allowSorting':\n this.grid.allowSorting = this.allowSorting;\n break;\n case 'allowMultiSorting':\n this.grid.allowMultiSorting = this.allowMultiSorting;\n break;\n case 'sortSettings':\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n break;\n case 'searchSettings':\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n break;\n case 'allowFiltering':\n this.grid.allowFiltering = this.allowFiltering;\n break;\n case 'filterSettings':\n if (!this.initialRender) {\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n }\n break;\n case 'showColumnMenu':\n this.grid.showColumnMenu = this.showColumnMenu;\n break;\n case 'allowRowDragAndDrop':\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n break;\n case 'aggregates':\n this.grid.aggregates = getActualProperties(this.aggregates);\n break;\n case 'enableInfiniteScrolling':\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n break;\n case 'dataSource':\n this.isLocalData = (!(this.dataSource instanceof DataManager) || (!isNullOrUndefined(this.dataSource.ready))\n || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.convertTreeData(this.dataSource);\n if (this.isLocalData) {\n if (isCountRequired(this)) {\n var count = getValue('count', this.dataSource);\n this.grid.dataSource = { result: this.flatData, count: count };\n }\n else {\n var data = this.dataSource;\n this.grid.dataSource = !(data instanceof DataManager) ?\n this.flatData : new DataManager(data.dataSource, data.defaultQuery, data.adaptor);\n }\n if (this.enableVirtualization) {\n this.grid.contentModule.isDataSourceChanged = true;\n }\n }\n else {\n this.bindedDataSource();\n if (this.enableVirtualization) {\n this.grid.contentModule.removeEventListener();\n this.grid.contentModule.eventListener('on');\n this.grid.contentModule.renderTable();\n }\n }\n break;\n case 'query':\n this.grid.query = this.query;\n break;\n case 'enableCollapseAll':\n if (newProp[prop]) {\n this.collapseAll();\n }\n else {\n this.expandAll();\n }\n break;\n case 'expandStateMapping':\n this.grid.refresh();\n break;\n case 'gridLines':\n this.grid.gridLines = this.gridLines;\n break;\n case 'rowTemplate':\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n break;\n case 'frozenRows':\n this.grid.frozenRows = this.frozenRows;\n break;\n case 'frozenColumns':\n this.grid.frozenColumns = this.frozenColumns;\n break;\n case 'rowHeight':\n this.grid.rowHeight = this.rowHeight;\n break;\n case 'height':\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n this.grid.height = this.height;\n break;\n case 'width':\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.grid.width = this.width;\n break;\n case 'locale':\n this.grid.locale = this.locale;\n this.TreeGridLocale();\n this.grid.toolbar = this.getGridToolbar();\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableAdaptiveUI':\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n if (!isNullOrUndefined(this.treeColumnField)) {\n this.updateTreeColumnTextAlign();\n }\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'editSettings':\n if (this.grid.isEdit && this.grid.editSettings.mode === 'Normal' && newProp[prop].mode &&\n (newProp[prop].mode === 'Cell' || newProp[prop].mode === 'Row')) {\n this.grid.closeEdit();\n }\n this.grid.editSettings = this.getGridEditSettings();\n break;\n }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n };\n TreeGrid.prototype.updateTreeColumnTextAlign = function () {\n var gridColumn = this.grid.getColumnByField(this.treeColumnField);\n gridColumn.textAlign = this.enableRtl ? 'Right' : this.treeColumnTextAlign;\n this.grid.refreshColumns();\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\n var treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n var hasTreeGridChild = treeGridElement.querySelector('.' + 'e-gridheader') &&\n treeGridElement.querySelector('.' + 'e-gridcontent') ? true : false;\n if (hasTreeGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n if (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n var modules = ['dataModule', 'sortModule', 'renderModule', 'filterModule', 'printModule', 'clipboardModule',\n 'excelExportModule', 'pdfExportModule', 'toolbarModule', 'summaryModule', 'reorderModule', 'resizeModule',\n 'pagerModule', 'keyboardModule', 'columnMenuModule', 'contextMenuModule', 'editModule', 'virtualScrollModule',\n 'selectionModule', 'detailRow', 'rowDragAndDropModule', 'freezeModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n this.grid = null;\n };\n /**\n * Update the TreeGrid model\n *\n * @method dataBind\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.dataBind = function () {\n if (isNullOrUndefined(this.grid)) {\n return;\n }\n if (!isNullOrUndefined(this.rowDropSettings.targetID) &&\n isNullOrUndefined(document.getElementById(this.grid.rowDropSettings.targetID))) {\n document.getElementById(this.rowDropSettings.targetID).id = this.grid.rowDropSettings.targetID;\n this.rowDropSettings.targetID = this.grid.rowDropSettings.targetID;\n }\n _super.prototype.dataBind.call(this);\n this.grid.dataBind();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns persist properties details\n * @hidden\n */\n TreeGrid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'pageSizeMode', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[i]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[k];\n delete currentObject[objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n TreeGrid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n this.ignoreInArrays(ignoreOnColumn, columns[i].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n var target = e.target;\n if ((target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && (!this.isEditCollapse && !this.grid.isEdit)) {\n this.expandCollapseRequest(target);\n }\n this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n TreeGrid.prototype.getPager = function () {\n return this.grid.getPager(); //get element from pager\n };\n /**\n * Adds a new record to the TreeGrid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\n * @returns {void}\n */\n TreeGrid.prototype.addRecord = function (data, index, position) {\n if (this.editModule) {\n var isAddedRowByMethod = 'isAddedRowByMethod';\n this.editModule[isAddedRowByMethod] = true;\n this.editModule.addRecord(data, index, position);\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n * @returns {void}\n */\n TreeGrid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.grid.editModule) {\n this.grid.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n TreeGrid.prototype.updateRow = function (index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n var griddata = this.grid.getCurrentViewRecords()[index];\n extend(griddata, data);\n this.grid.editModule.updateRow(index, griddata);\n }\n else {\n this.grid.editModule.updateRow(index, data);\n }\n }\n };\n /**\n * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldName - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\n * @returns {void}\n */\n TreeGrid.prototype.startEdit = function (row) {\n if (this.grid.editModule) {\n this.grid.editModule.startEdit(row);\n }\n };\n /**\n * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell edit.\n * @returns {void}\n */\n TreeGrid.prototype.editCell = function (rowIndex, field) {\n if (this.editModule) {\n this.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n * @returns {void}\n */\n TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRow = function (tr) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRow(tr);\n }\n };\n /**\n * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n * @returns {void}\n */\n TreeGrid.prototype.setCellValue = function (key, field, value) {\n this.grid.setCellValue(key, field, value);\n var rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n var record = this.getCurrentViewRecords()[rowIndex];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n * @returns {void}\n */\n TreeGrid.prototype.setRowData = function (key, rowData) {\n var currentRecords = this.getCurrentViewRecords();\n var primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n var level = 0;\n var record = {};\n currentRecords.some(function (value) {\n if (value[primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n this.grid.setRowData(key, rowData);\n var visibleRecords = this.getVisibleRecords();\n if (visibleRecords.length > 0 && key === (visibleRecords[visibleRecords.length - 1])[primaryKey]) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(this.getRows()[currentRecords.indexOf(record)], sHeight <= clientHeight);\n }\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n TreeGrid.prototype.goToPage = function (pageNo) {\n if (this.grid.pagerModule) {\n this.grid.pagerModule.goToPage(pageNo);\n }\n };\n /**\n * Defines the text of external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n TreeGrid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.grid.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Gets a cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns cell element in grid content\n */\n TreeGrid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a Column by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.columnModel, function (item) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByUid = function (uid) {\n var Columns = this.initialRender ? this.grid.columns : this.columns;\n var columnModel = 'columnModel';\n if (this.grid.columns.length !== this.columnModel.length) {\n Columns = this.grid[columnModel];\n }\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} - Returns column field name as collection\n */\n TreeGrid.prototype.getColumnFieldNames = function () {\n return this.grid.getColumnFieldNames();\n };\n /**\n * Gets the footer div of the TreeGrid.\n *\n * @returns {Element} - Returns footer content div element\n */\n TreeGrid.prototype.getFooterContent = function () {\n return this.grid.getFooterContent();\n };\n /**\n * Gets the footer table element of the TreeGrid.\n *\n * @returns {Element} - Returns footer content table element\n */\n TreeGrid.prototype.getFooterContentTable = function () {\n return this.grid.getFooterContentTable();\n };\n /**\n * Shows a column by its column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.showColumns = function (keys, showBy) {\n this.grid.showColumns(keys, showBy);\n this.updateColumnModel();\n };\n /**\n * Hides a column by column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.hideColumns = function (keys, hideBy) {\n this.grid.hideColumns(keys, hideBy);\n this.updateColumnModel();\n };\n /**\n * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByField = function (field) {\n return this.grid.getColumnHeaderByField(field);\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByUid = function (uid) {\n return this.grid.getColumnHeaderByUid(uid);\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByField = function (field) {\n return this.grid.getColumnIndexByField(field);\n };\n TreeGrid.prototype.getVirtualColIndexByUid = function (uid) {\n var columnModel = 'columnModel';\n var index = iterateArrayOrObject(this.grid[columnModel], function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByUid = function (uid) {\n return this.grid.getColumnIndexByUid(uid);\n };\n /**\n * Gets the columns from the TreeGrid.\n *\n * @param {boolean} isRefresh - Defined whether to update DOM\n * @returns {Column[]} - Returns treegrid columns collection\n */\n TreeGrid.prototype.getColumns = function (isRefresh) {\n this.updateColumnModel(this.grid.getColumns(isRefresh));\n return this.columnModel;\n };\n TreeGrid.prototype.updateColumnModel = function (column) {\n var temp;\n var field;\n var gridColumns = isNullOrUndefined(column) ? this.grid.getColumns() : column;\n if (this.treeColumnIndex !== -1 && this.columnModel[this.treeColumnIndex] &&\n !isNullOrUndefined(this.columnModel[this.treeColumnIndex].template)) {\n temp = this.columnModel[this.treeColumnIndex].template;\n field = this.columnModel[this.treeColumnIndex].field;\n }\n var gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var _i = 0, _a = Object.keys(gridColumns[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[prop] = gridColumns[i][prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[i].field && this.columnModel[i].type !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[i].template = temp;\n }\n }\n }\n var deepMerge = 'deepMerge';\n this[deepMerge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n this.stackedHeader = true;\n }\n if (!this.stackedHeader) {\n merge(this.columns, this.columnModel);\n }\n this[deepMerge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n TreeGrid.prototype.getContent = function () {\n return this.grid.getContent();\n };\n TreeGrid.prototype.mergePersistTreeGridData = function () {\n var persist1 = 'mergePersistGridData';\n this.grid[persist1].apply(this);\n };\n TreeGrid.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.grid[persist2].apply(this, [storedColumn, columns]);\n };\n TreeGrid.prototype.updateTreeGridModel = function () {\n this.setProperties({ filterSettings: getObject('properties', this.grid.filterSettings) }, true);\n this.setProperties({ pageSettings: getObject('properties', this.grid.pageSettings) }, true);\n this.setProperties({ searchSettings: getObject('properties', this.grid.searchSettings) }, true);\n this.setProperties({ sortSettings: getObject('properties', this.grid.sortSettings) }, true);\n };\n /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n TreeGrid.prototype.getDataRows = function () {\n var dRows = [];\n var rows = this.grid.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n return this.grid.currentViewData;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n if (!(this.dataSource instanceof DataManager)) {\n this.grid.dataSource = this.flatData;\n }\n else {\n this.grid.setProperties({\n dataSource: new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor)\n }, true);\n }\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\n * @isGenericType true\n */\n TreeGrid.prototype.getVisibleRecords = function () {\n var visibleRecords = [];\n var currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (var i = 0; i < currentViewRecords.length; i++) {\n visibleRecords.push(currentViewRecords[i]);\n if (!currentViewRecords[i].expanded) {\n i += findChildrenRecords(currentViewRecords[i]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\n * @returns {void}\n */\n TreeGrid.prototype.refreshColumns = function (refreshUI) {\n if (isNullOrUndefined(refreshUI) || refreshUI) {\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshHeader = function () {\n this.grid.refreshHeader();\n };\n /**\n * Expands or collapse child records\n *\n * @param {HTMLElement} target - Expand collapse icon cell as target element\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.expandCollapseRequest = function (target) {\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n if ((this.getBatchChanges()[this.changedRecords].length ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length)\n && this.editSettings.showConfirmDialog) {\n var dialogObj = this.grid.editModule[obj];\n this.grid.editModule[showDialog]('CancelEdit', dialogObj);\n this.targetElement = target;\n return;\n }\n }\n if (this.rowTemplate) {\n var rowInfo = target.closest('.e-treerowcell').parentElement;\n var record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo, record);\n }\n else {\n this.expandRow(rowInfo, record);\n }\n }\n else {\n var rowInfo_1 = this.grid.getRowInfo(target);\n var record = rowInfo_1.rowData;\n if (this.grid.isFrozenGrid() && this.enableVirtualization && !Object.keys(record).length) {\n var freezeRows = 'freezeRows';\n record = this.grid.contentModule[freezeRows].filter(function (e) { return e.uid === rowInfo_1.row.getAttribute('data-uid'); })[0].data;\n }\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo_1.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo_1.row, record);\n }\n else {\n this.expandRow(rowInfo_1.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @param {Object} key - Primary key value\n * @param {number} level - Specifies the hierarchical level of the record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record, key, level) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n _this.expandCollapse('expand', row, record);\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n var children = 'Children';\n if (!(isRemoteData(_this) && !isOffline(_this)) && (!isCountRequired(_this) || !isNullOrUndefined(record[children]))) {\n var collapseArgs = { data: record, row: row };\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, true);\n }\n _this.trigger(events.expanded, collapseArgs);\n }\n }\n });\n };\n TreeGrid.prototype.expandCollapseAllChildren = function (record, action, key, level) {\n if ((!isNullOrUndefined(key) && record[this.getPrimaryKeyFieldNames()[0]] !== key) ||\n (!isNullOrUndefined(level) && level !== record.level)) {\n return;\n }\n var records = findChildrenRecords(record).filter(function (e) {\n return e.hasChildRecords;\n });\n records.unshift(record);\n for (var i = 0; i < records.length; i++) {\n this.expandCollapse(action, null, records[i]);\n }\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\n }\n };\n TreeGrid.prototype.getCollapseExpandRecords = function (row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n else if (isNullOrUndefined(record)) {\n if (this.detailTemplate) {\n record = this.grid.getCurrentViewRecords()[row.getAttribute('data-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, false);\n }\n _this.trigger(events.collapsed, collapseArgs);\n if (_this.enableInfiniteScrolling) {\n var scrollHeight = _this.grid.getContent().firstElementChild.scrollHeight;\n var scrollTop = _this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < _this.grid.getRowHeight() + +_this.height) {\n _this.grid.getContent().firstElementChild.scrollBy(0, _this.grid.getRowHeight());\n }\n }\n }\n }\n });\n };\n TreeGrid.prototype.updateExpandStateMapping = function (record, state) {\n var totalRecords = record;\n if (totalRecords.length) {\n for (var i = 0; i < totalRecords.length; i++) {\n totalRecords[i][this.expandStateMapping] = state;\n editAction({ value: totalRecords[i], action: 'edit' }, this, this.isSelfReference, totalRecords[i].index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n }\n else {\n record[this.expandStateMapping] = state;\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandAction(rec, null, level, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var record = getObject('records', rec);\n this.expandAction(record, null, level);\n }\n };\n /**\n * Expands the records by given primary key value\n *\n * @param {Object} key - Expands the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.expandByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Expand');\n };\n TreeGrid.prototype.expandAction = function (record, key, level, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n var _loop_1 = function (i) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n var puniqueID_1 = record[i].parentItem.uniqueID;\n var parentItem = this_1.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_1)) {\n parentItem = this_1.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n }\n if (parentItem[0].expanded === false) {\n record.push(parentItem[0]);\n parentItem[0].expanded = true;\n }\n else {\n if (!getExpandStatus(this_1, parentItem[0], this_1.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_1.expandRow(null, record[i], key, level);\n }\n };\n var this_1 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_1(i);\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to be collapsed\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseAction(record, null, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var records = getObject('records', rec);\n this.collapseAction(records);\n }\n };\n /**\n * Collapses the records by given primary key value\n *\n * @param {Object} key - Collapses the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n };\n TreeGrid.prototype.expandCollapseActionByKey = function (key, action) {\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n var dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n var rec = dataSource.filter(function (e) {\n return e[primaryKeyField].toString() === key.toString();\n });\n if (action === 'Expand') {\n this.expandAction(rec, key, null);\n }\n else {\n this.collapseAction(rec, key);\n }\n }\n };\n TreeGrid.prototype.collapseAction = function (record, key, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (var i = 0; i < record.length; i++) {\n this.collapseRow(null, record[i], key);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[endIndex] = -1;\n }\n };\n /**\n * Expands All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if ((!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) || (action === 'collapse' || (this.isExpandAll && this.loadChildOnDemand) && !isRemoteData(this) && this.isSelfReference && isCountRequired(this))) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('data-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n row.querySelectorAll('.e-treerowcell')[0].setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (!isNullOrUndefined(targetEle) && targetEle.closest('.e-treerowcell').classList.contains('e-cellselectionbackground')) {\n targetEle.closest('.e-treerowcell').classList.remove('e-cellselectionbackground');\n targetEle.closest('.e-treerowcell').removeAttribute('aria-selected');\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n if (expandingArgs.requestType === 'collapse' && isCountRequired(this)) {\n var flatDataRecords = this.flatData.slice();\n for (var i = 0; i < flatDataRecords.length; i++) {\n if (flatDataRecords[i]['parentUniqueID'] === expandingArgs.data['uniqueID']) {\n flatDataRecords.splice(i, 1);\n i = i - 1;\n }\n }\n this.dataResults.result = flatDataRecords;\n return;\n }\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n if (isCountRequired(_this)) {\n _this.flatData = _this.dataResults.result;\n }\n if (_this.enableInfiniteScrolling && isCountRequired(_this)) {\n _this.flatData = _this.infiniteScrollData;\n }\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n if (isCountRequired(_this) && record[_this.childMapping] && record[_this.childMapping][i]) {\n currentData.splice(index + 1 + i, 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, record[_this.childMapping] &&\n record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n if (isCountRequired(_this) && _this.loadChildOnDemand && expandingArgs.requestType === 'expand') {\n _this.dataResults['expandRecord'] = {};\n _this.dataResults['expandRecord'] = expandingArgs.data;\n }\n _this.isExpandRefresh = true;\n var scrollHeightBeforeRefresh = _this.getContentTable().parentElement.scrollTop;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n if (_this.enableInfiniteScrolling) {\n _this.getContentTable().parentElement.scrollTop = scrollHeightBeforeRefresh;\n }\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return ((r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1))) || (r.querySelector('.e-gridrowindex' + record.index + 'level0' + '.e-summarycell')));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var gridRowsObject = this.grid.getRowsObject();\n if (gridRowsObject[record.index].visible !== false) {\n gridRowsObject[record.index].visible = true;\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(rows[i]) && !this.allowPaging && !(this.enableVirtualization || this.enableInfiniteScrolling || isRemoteData(this) || isCountRequired(this))) {\n gridRowsObject[rows[i].rowIndex].visible = displayAction != 'none' ? true : false;\n if (\"parentItem\" in record) {\n if (gridRows[record.parentItem.index].getElementsByClassName('e-treegridcollapse').length) {\n gridRowsObject[record.index].visible = false;\n }\n }\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if ((!isNullOrUndefined(childRecords[i].childRecords) && childRecords[i].childRecords.length > 0) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\n }\n for (var i = 0; i < detailrows.length; i++) {\n if (!isNullOrUndefined(detailrows[i]) && !this.allowPaging && !(this.enableVirtualization || this.enableInfiniteScrolling || isRemoteData(this) || isCountRequired(this))) {\n gridRowsObject[detailrows[i].rowIndex].visible = displayAction != 'none' ? true : false;\n detailrows[i].style.display = displayAction;\n }\n }\n if (!this.allowPaging && !(this.enableVirtualization || this.enableInfiniteScrolling || isRemoteData(this) || isCountRequired(this))) {\n this.grid.notify('refresh-Expand-and-Collapse', { rows: this.grid.getRowsObject() });\n }\n };\n TreeGrid.prototype.updateAltRow = function (rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n var visibleRowCount = 0;\n for (var i = 0; rows && i < rows.length; i++) {\n var gridRow = rows[i];\n if (gridRow.style.display !== 'none') {\n if (gridRow.classList.contains('e-altrow')) {\n removeClass([gridRow], 'e-altrow');\n }\n if (visibleRowCount % 2 !== 0 && !gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n addClass([gridRow], 'e-altrow');\n }\n if (!gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n visibleRowCount++;\n }\n }\n }\n }\n };\n TreeGrid.prototype.treeColumnRowTemplate = function () {\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n var row = rows[i];\n var rowData = this.grid.getRowsObject()[i].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n var rows = rowDetails.rows;\n var row;\n var childRecord;\n var movablerows = [];\n var rightrows = [];\n var freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n rows[i].style.display = 'none';\n row = rows[i];\n var collapsingTd = rows[i].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[i].style.display = 'none';\n rightrows[i].style.display = 'none';\n if (!rows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[i];\n }\n else if (rightrows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[i];\n }\n }\n }\n if (row.querySelector('.e-treecolumn-container .e-treegridexpand')) {\n var expandElement = row.querySelector('.e-treecolumn-container .e-treegridexpand');\n childRecord = this.rowTemplate ? this.grid.getCurrentViewRecords()[rows[i].rowIndex] :\n this.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(expandElement) && childRecord.expanded) {\n removeClass([expandElement], 'e-treegridexpand');\n addClass([expandElement], 'e-treegridcollapse');\n }\n var cRow = [];\n var eRows = this.getRows();\n for (var i_1 = 0; i_1 < eRows.length; i_1++) {\n if (eRows[i_1].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i_1]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\n };\n /**\n * Updates the rows and cells\n *\n * @param {Object[]} records - Updates the given records\n * @param {HTMLTableRowElement[]} rows - Updates the given rows\n * @param {number} index - Updates the given cell index\n * @returns {void}\n */\n TreeGrid.prototype.updateRowAndCellElements = function (records, rows, index) {\n for (var i = 0; i < records.length; i++) {\n this.renderModule.cellRender({\n data: records[i], cell: rows[i].cells[index],\n column: this.grid.getColumns()[this.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this['action'] === 'indenting' || this['action'] === 'outdenting') {\n this.renderModule.RowModifier({\n data: records[i], row: rows[i]\n });\n }\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.addListener = function () {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n };\n TreeGrid.prototype.updateResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off('updateResults', this.updateResultModel);\n this.grid.off('initial-end', this.afterGridRender);\n };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\n * @returns {void}\n */\n TreeGrid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.grid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearFiltering = function () {\n this.grid.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.grid.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\n * @returns {void}\n */\n TreeGrid.prototype.paste = function (data, rowIndex, colIndex) {\n this.clipboardModule.paste(data, rowIndex, colIndex);\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\n */\n TreeGrid.prototype.getSelectedRows = function () {\n return this.grid.getSelectedRows();\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns movable cell element from the indexes passed\n */\n TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets all the TreeGrid's movable table data rows.\n *\n * @returns {Element[]} - Returns element collection of movable rows\n */\n TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns movable row based on index passed\n */\n TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(index);\n };\n /**\n * Gets the Tree Grid's frozen right content rows from frozen Tree Grid.\n *\n * @returns {Element[]} returns the element\n */\n TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(index);\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n TreeGrid.prototype.getMovableColumnsCount = function () {\n return this.grid.getMovableColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n TreeGrid.prototype.getFrozenLeftColumnsCount = function () {\n return this.grid.getFrozenLeftColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n TreeGrid.prototype.getFrozenRightColumnsCount = function () {\n return this.grid.getFrozenRightColumnsCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenLeftColumns = function () {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenRightColumns = function () {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n TreeGrid.prototype.getVisibleMovableCount = function () {\n return this.grid.getVisibleMovableCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n TreeGrid.prototype.getVisibleFrozenRightCount = function () {\n return this.grid.getVisibleFrozenRightCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n TreeGrid.prototype.getVisibleFrozenLeftCount = function () {\n return this.grid.getVisibleFrozenLeftCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getMovableColumns = function () {\n this.updateColumnModel(this.grid.getMovableColumns());\n return this.columnModel;\n };\n /**\n * Gets the number of frozen column in tree grid\n *\n * @hidden\n * @returns {number} - Returns frozen column count\n */\n TreeGrid.prototype.getFrozenColumns = function () {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n };\n TreeGrid.prototype.getFrozenCount = function (cols, cnt) {\n for (var j = 0, len = cols.length; j < len; j++) {\n if (cols[j].columns) {\n cnt = this.getFrozenCount(cols[j].columns, cnt);\n }\n else {\n if (cols[j].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n };\n /**\n * Indents the record to one level of hierarchy. Moves the selected row as the last child of its previous row.\n *\n * @param {Object} record – specifies the record to do indented\n * @returns {void}\n */\n TreeGrid.prototype.indent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'indent');\n }\n };\n /**\n * Outdent the record to one level of hierarchy. Moves the selected row as sibling to its parent row.\n *\n * @param {Object} record – specifies the record to do outdented\n * @returns {void}\n */\n TreeGrid.prototype.outdent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'outdent');\n }\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.modifiedRecords = 'modifiedRecords';\n /** @hidden */\n this.selectedRecords = 'selectedRecords';\n /** @hidden */\n this.selectedRows = 'selectedRows';\n /** @hidden */\n this.hasDropItem = true;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n var action = 'action';\n var dropPosition = 'dropPosition';\n var updateRowAndCellElements = 'updateRowAndCellElements';\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n this.parent[dropPosition] = this.dropPosition;\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n var index = this.parent.getRowByIndex(fromIndexes[i]).rowIndex;\n data[i] = this.parent.getCurrentViewRecords()[index];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'indenting') {\n index = this.parent.treeColumnIndex;\n }\n var row = this.parent.getRows()[fromIndexes[0]];\n var dropData = args.data[0];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n var parentData = getParentData(this.parent, args.data[0][parentUniqueID]);\n var parentrow = this.parent.getRows()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n if (this.parent.enableImmutableMode && this.parent[action] === 'outdenting') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'outdenting') {\n index = this.parent.treeColumnIndex;\n }\n var record = args.data[0];\n var row = this.parent.getRows()[fromIndexes[0]];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(record);\n rows.push(row);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.indentOutdentAction = function (record, request) {\n var tObj = this.parent;\n var action = 'action';\n var droppedIndex = 'dropIndex';\n var selectedItemIndex = -1;\n if (isNullOrUndefined(record) && this.parent.selectedRowIndex === -1) {\n return;\n }\n else {\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n this.selectedItem = isNullOrUndefined(record) ?\n tObj.getCurrentViewRecords()[selectedItemIndex] : record;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(this.selectedItem[primaryKeyField]);\n this.selectedRow = this.parent[this.selectedRows] = selectedItemIndex !== -1 ?\n this.parent.getSelectedRows()[0]\n : this.parent.grid.getRowByIndex(rowIndex);\n this.selectedRecord = this.parent[this.selectedRecords] = selectedItemIndex !== -1 ?\n tObj.getCurrentViewRecords()[selectedItemIndex]\n : this.selectedItem;\n if (request === 'indent') {\n var record_1 = tObj.getCurrentViewRecords()[this.selectedRow.rowIndex - 1];\n var dropIndex = void 0;\n if (this.selectedRow.rowIndex === 0 || this.selectedRow.rowIndex === -1 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level - record_1.level === 1) {\n return;\n }\n if (record_1.level > this.selectedRecord.level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record_1.parentItem.taskData) {\n dropIndex = i;\n if (tObj.enableVirtualization) {\n dropIndex = parseInt(tObj.getRows()[i].getAttribute('data-rowindex'), 10);\n }\n }\n }\n }\n else {\n dropIndex = this.selectedRow.rowIndex - 1;\n }\n if (this.parent.enableVirtualization && this.selectedRecord && !(record_1.level > this.selectedRecord.level)) {\n dropIndex = parseInt(this.selectedRow.getAttribute('data-rowindex'), 10) - 1;\n }\n tObj[action] = 'indenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('indenting', dropIndex);\n }\n else if (request === 'outdent') {\n if (this.selectedRow.rowIndex === -1 || this.selectedRow.rowIndex === 0 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level === 0) {\n return;\n }\n var dropIndex = void 0;\n var parentItem = this.selectedRecord.parentItem;\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].uniqueID === parentItem.uniqueID) {\n dropIndex = i;\n }\n }\n if (this.parent.enableVirtualization && this.selectedRecord) {\n dropIndex = parseInt(this.parent.getRows()[dropIndex].getAttribute('data-rowindex'), 10);\n }\n tObj[action] = 'outdenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('outdenting', dropIndex);\n }\n }\n };\n RowDD.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var actionArgs = {\n action: action,\n cancel: false,\n data: [this.parent[this.selectedRecords]],\n row: this.parent[this.selectedRows]\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.action === 'indenting') {\n if (_this.parent.enableVirtualization) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('data-rowindex'), 10)], dropIndex, 'child');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n }\n else if (actionArgs.action === 'outdenting') {\n if (_this.parent.enableVirtualization) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('data-rowindex'), 10)], dropIndex, 'below');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\n }\n }\n }\n });\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n for (var i = 0; i < currentData.length; i++) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = getValue('uniqueIDCollection.' + currentData[i].parentUniqueID, this.parent);\n currentData[i].parentItem.index = updatedParent.index;\n }\n }\n return currentData;\n };\n RowDD.prototype.rowsAdded = function (e) {\n var draggedRecord;\n var dragRecords = e.records;\n for (var i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (draggedRecord.parentUniqueID) {\n var record = dragRecords.filter(function (data) {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n var index = record[0].childRecords.indexOf(draggedRecord);\n var parentRecord = record[0];\n if (index !== -1) {\n if (isNullOrUndefined(this.parent.idMapping)) {\n parentRecord.childRecords.splice(index, 1);\n if (!parentRecord.childRecords.length) {\n parentRecord.hasChildRecords = false;\n parentRecord.hasFilteredChildRecords = false;\n }\n }\n this.isDraggedWithChild = true;\n }\n }\n }\n }\n if (isNullOrUndefined(this.parent.dataSource) || !this.parent.dataSource.length) {\n var tObj = this.parent;\n var draggedRecord_1;\n var dragRecords_1 = e.records;\n var dragLength = e.records.length;\n for (var i = dragLength - 1; i > -1; i--) {\n draggedRecord_1 = dragRecords_1[i];\n if (!i && draggedRecord_1.hasChildRecords) {\n draggedRecord_1.taskData[this.parent.parentIdMapping] = null;\n }\n var recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord_1.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord_1.taskData, tObj.childMapping)) {\n draggedRecord_1.taskData[tObj.childMapping] = [];\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.childMapping) &&\n (draggedRecord_1[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n var childData = (draggedRecord_1[tObj.childMapping]);\n for (var j = 0; j < childData.length; j++) {\n if (dragRecords_1.indexOf(childData[j]) === -1) {\n dragRecords_1.splice(j, 0, childData[j]);\n childData[j].taskData = extend({}, childData[j]);\n i += 1;\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping)\n && draggedRecord_1[tObj.parentIdMapping] !== null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n var keys = Object.keys(tempDataSource);\n for (var i = 0; i < keys.length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][i] = childRecords[i].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex;\n if (this.parent.enableVirtualization) {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\n else {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n };\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n if (this.parent.enableVirtualization) {\n rowTop = rowEle.getBoundingClientRect().top;\n }\n else {\n rowTop = rowPositionHeight + contentHeight + roundOff;\n }\n var rowBottom = rowTop + row[0].offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\n };\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (this.hasDropItem && dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) + ele.offsetWidth + 16;\n var spanLeft = !this.parent.enableRtl ? dropItemLeft : 0;\n dropItemSpan.style.left = spanLeft + \"px\";\n this.hasDropItem = false;\n }\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n var errorValue = document.querySelector('.errorValue');\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (errorelem) {\n if (dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) - errorelem.offsetWidth - 16;\n setStyleAttribute(errorValue, {\n paddingLeft: '0px'\n });\n if (!this.parent.enableRtl) {\n setStyleAttribute(dropItemSpan, {\n left: dropItemLeft + \"px\"\n });\n }\n }\n errorelem.remove();\n }\n this.hasDropItem = true;\n };\n RowDD.prototype.topOrBottomBorder = function (target) {\n var rowElement = [];\n var element = closest(target, 'tr');\n rowElement = element ? [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse')) : [];\n if (rowElement.length) {\n if (this.dropPosition === 'topSegment') {\n this.addRemoveClasses(rowElement, true, 'e-droptop');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n this.addRemoveClasses(rowElement, true, 'e-dropbottom');\n }\n }\n };\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\n };\n RowDD.prototype.addRemoveClasses = function (cells, add, className) {\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n cells[i].classList.add(className);\n }\n else {\n cells[i].classList.remove(className);\n }\n }\n };\n RowDD.prototype.getOffset = function (element) {\n var box = element.getBoundingClientRect();\n var body = document.body;\n var docElem = document.documentElement;\n var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n };\n RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = rowEle ? rowEle.rowIndex : -1;\n var dragRecords = [];\n var droppedRecord = tObj.getCurrentViewRecords()[rowIdx];\n this.removeErrorElem();\n this.canDrop = true;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n if (rowIdx !== -1) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.canDrop = false;\n this.addErrorElem();\n }\n if (!tObj.rowDropSettings.targetID && this.canDrop) {\n tObj.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n if (tObj.rowDropSettings.targetID) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n var srcControl = dropElement.ej2_instances[0];\n srcControl.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n }\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID)) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n };\n RowDD.prototype.rowDropped = function (args) {\n var tObj = this.parent;\n var parentItem = 'parentItem';\n if (!tObj.rowDropSettings.targetID) {\n if (parentsUntil(args.target, 'e-content')) {\n if (this.parent.element.querySelector('.e-errorelem')) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\n if (!isCountRequired(this.parent)) {\n this.dropRows(args);\n }\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n tObj.grid.refresh();\n if (!isNullOrUndefined(tObj.getHeaderContent().querySelector('.e-firstrow-border'))) {\n tObj.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n }\n }\n }\n else {\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID) || parentsUntil(args.target, 'e-treegrid') &&\n parentsUntil(args.target, 'e-treegrid').id === tObj.rowDropSettings.targetID || args.target && document.getElementById(tObj.rowDropSettings.targetID)) {\n setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\n this.dragDropGrid(args);\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n }\n }\n }\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-firstrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n else if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-lastrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n if (this.parent.enableImmutableMode && !this.parent.allowPaging && !isNullOrUndefined(args.data[0][parentItem])) {\n var index = this.parent.treeColumnIndex;\n index = index + 1;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField]);\n var row = this.parent.getRows()[rowIndex];\n var data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n var record = [];\n var rows = [];\n record.push(data);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[primaryKeyField]);\n var parentrow = this.parent.getRows()[rowIndex];\n record.push(data);\n rows.push(parentrow);\n for (var i = 0; i < record.length; i++) {\n this.parent.renderModule.cellRender({\n data: record[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n var targetEle = parentrow.getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n else {\n this.parent.renderModule.cellRender({\n data: data, cell: row.cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n };\n RowDD.prototype.dragDropGrid = function (args) {\n var tObj = this.parent;\n var targetRow = closest(args.target, 'tr');\n var targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n var srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n var records = tObj.getSelectedRecords();\n var indexes = [];\n for (var i = 0; i < records.length; i++) {\n indexes[i] = records[i].index;\n }\n var data = srcControl.dataSource;\n if (this.parent.idMapping !== null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n var actualData = [];\n for (var i = 0; i < records.length; i++) {\n if (records[i].hasChildRecords) {\n actualData.push(records[i]);\n var child = findChildrenRecords(records[i]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[i_1]); // push child records to drop the parent record along with its child records\n }\n }\n }\n if (actualData.length) {\n records = actualData;\n }\n }\n tObj.notify(events.rowsRemove, { indexes: indexes, records: records });\n srcControl.notify(events.rowsAdd, { toIndex: targetIndex, records: records });\n var srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (var i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[i].parentUniqueID + '.index', srcControl);\n srcControlFlatData[i].parentItem.index = actualIndex;\n }\n }\n }\n tObj.grid.refresh();\n srcControl.grid.refresh();\n if (srcControl.grid.dataSource.length > 1) {\n srcControl.grid.refresh();\n if (!isNullOrUndefined(srcControl.getHeaderContent().querySelector('.e-firstrow-border'))) {\n srcControl.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n if (!isNullOrUndefined(srcControl.getContent().querySelector('.e-lastrow-border'))) {\n srcControl.getContent().querySelector('.e-lastrow-border').remove();\n }\n }\n }\n if (isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n tObj.grid.refresh();\n srcControl.grid.refresh();\n }\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('data-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record, data) {\n var parentItem = record.parentItem;\n var selectedItemIndex = -1;\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n if (this.dropPosition === 'bottomSegment') {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = selectedItemIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(data[0][primaryKeyField]))\n : this.parent.getSelectedRowIndexes()[0];\n var selectedRecord = this.parent.getCurrentViewRecords()[rowIndex];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getCurrentViewRecords()[selectedItemIndex].level;\n if (level === parentItem.level) {\n this.droppedRecord = getParentData(this.parent, parentItem.uniqueID);\n }\n else {\n this.getParentData(parentItem);\n }\n }\n };\n RowDD.prototype.dropRows = function (args, isByMethod) {\n if (this.dropPosition !== 'Invalid' && !isRemoteData(this.parent)) {\n var tObj = this.parent;\n var draggedRecord_2;\n var droppedRecord = void 0;\n if (isNullOrUndefined(args.dropIndex)) {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = tObj.selectedRowIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField])) - 1\n : tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record, args.data);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n if (this.parent.enableVirtualization) {\n var index = this.parent.getRowByIndex(args.dropIndex).rowIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[index];\n }\n else {\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n this.parent[this.modifiedRecords].push(args.data[0], droppedRecord);\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n var _loop_1 = function (i) {\n draggedRecord_2 = dragRecords[i];\n this_1.draggedRecord = draggedRecord_2;\n if (this_1.dropPosition !== 'Invalid') {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this_1.deleteDragRow();\n }\n if (this_1.draggedRecord === this_1.droppedRecord) {\n var correctIndex = this_1.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this_1.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this_1.droppedRecord = this_1.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this_1.dropPosition === 'middleSegment') {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n var recordIndex1 = this_1.treeGridData.indexOf(droppedRecord);\n this_1.dropAtTop(recordIndex1);\n if (this_1.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + 1, 0, this_1.draggedRecord);\n }\n else {\n count = this_1.getChildCount(droppedRecord, 0);\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord_2.parentItem;\n delete draggedRecord_2.parentUniqueID;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n draggedRecord_2.level = droppedRecord.level;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_1(i);\n }\n }\n };\n RowDD.prototype.dropMiddle = function (recordIndex) {\n var tObj = this.parent;\n var childRecords = findChildrenRecords(this.droppedRecord);\n var childRecordsLength = (isNullOrUndefined(childRecords) ||\n childRecords.length === 0) ? recordIndex + 1 :\n childRecords.length + recordIndex + 1;\n if (this.dropPosition === 'middleSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(childRecordsLength, 0, this.draggedRecord.taskData);\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n else {\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n this.recordLevel();\n if (this.draggedRecord.hasChildRecords) {\n this.updateChildRecord(this.draggedRecord, childRecordsLength);\n }\n }\n };\n RowDD.prototype.dropAtTop = function (recordIndex1) {\n var tObj = this.parent;\n if (this.dropPosition === 'topSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(recordIndex1, 0, this.draggedRecord.taskData);\n }\n this.draggedRecord.parentItem = this.treeGridData[recordIndex1].parentItem;\n this.draggedRecord.parentUniqueID = this.treeGridData[recordIndex1].parentUniqueID;\n this.draggedRecord.level = this.treeGridData[recordIndex1].level;\n this.treeGridData.splice(recordIndex1, 0, this.draggedRecord);\n if (this.draggedRecord.hasChildRecords) {\n var level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n var rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n };\n RowDD.prototype.recordLevel = function () {\n var tObj = this.parent;\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var childItem = tObj.childMapping;\n if (!droppedRecord.hasChildRecords) {\n droppedRecord.hasChildRecords = true;\n droppedRecord.hasFilteredChildRecords = true;\n if (isNullOrUndefined(droppedRecord.childRecords) || droppedRecord.childRecords.length === 0) {\n droppedRecord.childRecords = [];\n if (!tObj.parentIdMapping && isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[childItem] = [];\n }\n }\n }\n if (this.dropPosition === 'middleSegment') {\n var parentItem = extend({}, droppedRecord);\n delete parentItem.childRecords;\n draggedRecord.parentItem = parentItem;\n draggedRecord.parentUniqueID = droppedRecord.uniqueID;\n droppedRecord.childRecords.splice(droppedRecord.childRecords.length, 0, draggedRecord);\n var isSelfReference = 'isSelfReference';\n if (tObj[isSelfReference]) {\n droppedRecord[tObj.childMapping] = [];\n droppedRecord[tObj.childMapping].splice(droppedRecord[tObj.childMapping].length, 0, draggedRecord);\n }\n if (!isNullOrUndefined(draggedRecord) && !tObj.parentIdMapping && !isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[tObj.childMapping].splice(droppedRecord.childRecords.length, 0, draggedRecord.taskData);\n }\n if (!draggedRecord.hasChildRecords) {\n draggedRecord.level = droppedRecord.level + 1;\n }\n else {\n var level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n };\n RowDD.prototype.deleteDragRow = function () {\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n this.treeGridData = this.parent.grid.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n var deletedRow = getParentData(this.parent, this.draggedRecord.uniqueID);\n if (!isNullOrUndefined(deletedRow.childRecords) && deletedRow.childRecords.length) {\n deletedRow.hasChildRecords = true;\n }\n this.removeRecords(deletedRow);\n };\n RowDD.prototype.updateChildRecord = function (record, count) {\n var currentRecord;\n var tObj = this.parent;\n var length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n if (!this.isMultipleGrid) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, tObj);\n }\n else {\n currentRecord = record.childRecords[i];\n }\n count++;\n tObj.flatData.splice(count, 0, currentRecord);\n setValue('uniqueIDCollection.' + currentRecord.uniqueID, currentRecord, this.parent);\n if (tObj.parentIdMapping) {\n this.treeData.splice(count, 0, currentRecord.taskData);\n }\n if (currentRecord.hasChildRecords) {\n count = this.updateChildRecord(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.updateChildRecordLevel = function (record, level) {\n var length = 0;\n var currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n if (!this.isMultipleGrid) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\n }\n else {\n currentRecord = record.childRecords[i];\n }\n var parentData = void 0;\n if (record.parentItem) {\n parentData = getParentData(this.parent, record.parentItem.uniqueID);\n }\n if (isNullOrUndefined(parentData) && !isNullOrUndefined(record.parentItem)) {\n parentData = record.parentItem;\n }\n currentRecord.level = record.parentItem ? parentData.level + level : record.level + 1;\n if (currentRecord.hasChildRecords) {\n level--;\n level = this.updateChildRecordLevel(currentRecord, level);\n }\n }\n return level;\n };\n RowDD.prototype.removeRecords = function (record) {\n var tObj = this.parent;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n var deletedRow = record;\n var isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n var flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n var childRecords = flatParentData ? flatParentData.childRecords : [];\n var childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping || tObj.enableImmutableMode) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var idx = void 0;\n var idz = void 0;\n var treeGridData = dataSource;\n for (var i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idz = i;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n }\n var recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n var parentIndex = this.parent.parentData.indexOf(deletedRow);\n if (parentIndex !== -1) {\n tObj.parentData.splice(parentIndex, 1);\n dataSource.splice(parentIndex, 1);\n }\n }\n if (recordIndex === -1 && !tObj.parentIdMapping) {\n var primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (var j = 0; j < this.treeGridData.length; j++) {\n if (this.treeGridData[j][primaryKeyField] === deletedRow[primaryKeyField]) {\n recordIndex = j;\n }\n }\n }\n if (!tObj.parentIdMapping) {\n var deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n if (this.parent[this.modifiedRecords].indexOf(flatParentData) === -1 && !isNullOrUndefined(flatParentData)) {\n this.parent[this.modifiedRecords].push(flatParentData);\n }\n if (!isNullOrUndefined(flatParentData)) {\n this.updateModifiedRecords(flatParentData);\n }\n }\n };\n RowDD.prototype.updateModifiedRecords = function (record) {\n var parentData = getParentData(this.parent, record.parentUniqueID);\n if (!isNullOrUndefined(parentData)) {\n this.parent[this.modifiedRecords].push(parentData);\n this.updateModifiedRecords(parentData);\n }\n };\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[i_2][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[i_3][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n return;\n }\n }\n });\n };\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the row drop settings of the TreeGrid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n if (!((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent))\n || notifyArgs.virtualInfo.blockIndexes.length === 1) {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[model].currentPage;\n if (clear) {\n this.cache = {};\n this.movableCache = {};\n this.frozenRightCache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n this.movableCache = {};\n this.frozenRightCache = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[count].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Grid, ExcelExport as GridExcel } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';\nimport { isNullOrUndefined, setValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid Excel Export module\n *\n * @hidden\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ExcelExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridExcel);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ExcelExport module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.addEventListener = function () {\n this.parent.on('updateResults', this.updateExcelResultModel, this);\n this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);\n this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);\n this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);\n };\n /**\n * To destroy the Excel Export\n *\n * @returns {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateResults', this.updateExcelResultModel);\n this.parent.off('excelCellInfo', this.excelQueryCellInfo);\n this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);\n this.parent.grid.off('finalPageSetup', this.finalPageSetup);\n };\n ExcelExport.prototype.updateExcelResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n ExcelExport.prototype.Map = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n var _this = this;\n var dataSource = this.parent.dataSource;\n var property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\n }\n return new Promise(function (resolve) {\n var dm = _this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : _this.parent.dataSource;\n var query = new Query();\n if (!_this.isLocal()) {\n query = _this.generateQuery(query);\n setValue('query', query, property);\n }\n _this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));\n if (getObject('cancel', property)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customData = null;\n if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {\n customData = excelExportProperties.dataSource;\n }\n excelExportProperties = _this.manipulateExportProperties(excelExportProperties, dataSource, e);\n return _this.parent.grid.excelExportModule.Map(_this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then(function (book) {\n if (customData != null) {\n excelExportProperties.dataSource = customData;\n }\n else {\n delete excelExportProperties.dataSource;\n }\n resolve(book);\n });\n });\n });\n };\n ExcelExport.prototype.generateQuery = function (query, property) {\n if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n property.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n ExcelExport.prototype.manipulateExportProperties = function (property, dtSrc, queryResult) {\n //count not required for this query\n var args = Object();\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {\n setValue('exportType', property.exportType, args);\n }\n if (!this.isLocal()) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getObject('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!this.isLocal()) {\n this.parent.flatData = [];\n }\n if (property && property.dataSource && this.isLocal()) {\n var flatsData = this.parent.flatData;\n var dataSrc = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatsData;\n }\n property = isNullOrUndefined(property) ? Object() : property;\n property.dataSource = new DataManager({ json: dtSrc });\n return property;\n };\n /**\n * TreeGrid Excel Export cell modifier\n *\n * @param {ExcelQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = args.data;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.indent = pad;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('excelQueryCellInfo', args);\n };\n ExcelExport.prototype.exportRowDataBound = function (excelRow) {\n if (excelRow.type === 'excel') {\n var excelrowobj = excelRow.rowObj.data;\n var filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var expandedStatus = false;\n var sublevelState = false;\n var state = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);\n if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {\n expandedStatus = true;\n sublevelState = excelrowobj.expanded ? false : true;\n }\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,\n isHidden: expandedStatus };\n }\n else if (excelrowobj.hasChildRecords && isNullOrUndefined(excelrowobj.parentItem)) {\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel };\n }\n }\n };\n /* eslint-disable-next-line */\n ExcelExport.prototype.finalPageSetup = function (workbook) {\n for (var i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n };\n ExcelExport.prototype.isLocal = function () {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { getObject, PdfExport as GridPdf, Grid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline } from '../utils';\nimport { isNullOrUndefined, setValue, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid PDF Export module\n *\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function PdfExport(parent) {\n Grid.Inject(GridPdf);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} PdfExport module name\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.addEventListener = function () {\n this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);\n this.parent.on('updateResults', this.updatePdfResultModel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);\n this.parent.off('updateResults', this.updatePdfResultModel);\n };\n /**\n * To destroy the PDF Export\n *\n * @returns {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n PdfExport.prototype.updatePdfResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n PdfExport.prototype.Map = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n var dtSrc = this.parent.dataSource;\n var prop = Object();\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise(function (resolve) {\n var dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : _this.parent.dataSource;\n var query = new Query();\n if (!isLocal) {\n query = _this.generateQuery(query);\n setValue('query', query, prop);\n }\n _this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));\n if (getObject('cancel', prop)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customsData = null;\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {\n customsData = pdfExportProperties.dataSource;\n }\n pdfExportProperties = _this.manipulatePdfProperties(pdfExportProperties, dtSrc, e);\n return _this.parent.grid.pdfExportModule.Map(_this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then(function (document) {\n if (customsData != null) {\n pdfExportProperties.dataSource = customsData;\n }\n else {\n delete pdfExportProperties.dataSource;\n }\n resolve(document);\n });\n });\n });\n };\n PdfExport.prototype.generateQuery = function (query, prop) {\n if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n prop.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n PdfExport.prototype.manipulatePdfProperties = function (prop, dtSrc, queryResult) {\n var args = {};\n //count not required for this query\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n setValue('isPdfExport', true, args);\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)) {\n setValue('isCollapsedStatePersist', prop.isCollapsedStatePersist, args);\n }\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {\n setValue('exportType', prop.exportType, args);\n }\n if (!isLocal) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getValue('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!isLocal) {\n this.parent.flatData = [];\n }\n if (prop && prop.dataSource && isLocal) {\n var flatDatas = this.parent.flatData;\n var dataSrc = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatDatas;\n }\n prop = isNullOrUndefined(prop) ? {} : prop;\n prop.dataSource = new DataManager({ json: dtSrc });\n return prop;\n };\n /**\n * TreeGrid PDF Export cell modifier\n *\n * @param {PdfQueryCellInfoEventArgs} args - Current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = getObject('data', args);\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.paragraphIndent = pad * 3;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('pdfQueryCellInfo', args);\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","import { Grid } from '@syncfusion/ej2-grids';\nimport { Page as GridPage } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * The `Page` module is used to render pager and handle paging action.\n *\n * @hidden\n */\nvar Page = /** @class */ (function () {\n function Page(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.addEventListener = function () {\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);\n this.parent.on(events.pagingActions, this.pageAction, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);\n this.parent.off(events.pagingActions, this.pageAction);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Pager module name\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.parent.grid.pagerModule.refresh();\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.parent.grid.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n this.parent.grid.pagerModule.updateExternalMessage(message);\n };\n /**\n * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments\n * @param {string} rowDetails.action - Expand Collapse action type\n * @param {HTMLTableRowElement} rowDetails.row - Row element\n * @param {ITreeData} rowDetails.record - Row object data\n * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments\n * @hidden\n * @returns {void}\n */\n Page.prototype.collapseExpandPagedchilds = function (rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n this.parent.flatData.map(function (e) { return e.expanded = e.uniqueID === rowDetails.record.uniqueID &&\n e.expanded !== rowDetails.record.expanded ? rowDetails.record.expanded : e.expanded; });\n if (this.parent.enableImmutableMode) {\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var record = this.parent.flatData.filter(function (e) {\n return e[primaryKeyField_1] === rowDetails.record[primaryKeyField_1];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n var ret = {\n result: this.parent.flatData,\n row: rowDetails.row,\n action: rowDetails.action,\n record: rowDetails.record,\n count: this.parent.flatData.length\n };\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);\n if (this.parent.enableImmutableMode) {\n var row = 'row';\n var action = 'action';\n var targetEle = void 0;\n if (ret[action] === 'collapse') {\n targetEle = ret[row].getElementsByClassName('e-treegridexpand')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridexpand');\n addClass([targetEle], 'e-treegridcollapse');\n }\n }\n else if (ret[action] === 'expand') {\n targetEle = ret[row].getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n }\n };\n Page.prototype.pageRoot = function (pagedResults, temp, result) {\n var newResults = isNullOrUndefined(result) ? [] : result;\n var _loop_1 = function (t) {\n newResults.push(temp[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this_1.pageRoot(pagedResults, res, newResults);\n }\n };\n var this_1 = this;\n for (var t = 0; t < temp.length; t++) {\n _loop_1(t);\n }\n return newResults;\n };\n Page.prototype.updatePageSize = function (pageingDetails) {\n var updateSize = pageingDetails.result.length;\n var gridPagerModule = this.parent.grid.pagerModule;\n if (this.parent.pageSettings.pageSizes === true) {\n if (gridPagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === gridPagerModule.pagerObj.getLocalizedLabel('All')) {\n gridPagerModule['pagerObj'].totalRecordsCount = updateSize;\n this.parent.grid.pageSettings.pageSize = updateSize;\n }\n }\n };\n Page.prototype.pageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n var temp = [];\n var propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n var query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n var newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n var dm_1 = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents_1 = dm_1.executeLocal(new Query().where(expanded));\n var visualData = void 0;\n if (isFilterChildHierarchy(this.parent) && ((this.parent.searchSettings.key !== this.parent.grid.searchSettings.key) ||\n (this.parent.filterSettings.columns.length !== this.parent.grid.filterSettings.columns.length))) {\n visualData = parents_1;\n }\n else {\n visualData = parents_1.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents_1);\n });\n }\n pageingDetails.count = visualData.length;\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n this.updatePageSize(pageingDetails);\n var current = this.parent.grid.pageSettings.currentPage;\n if (visualData.length < (current * size)) {\n current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);\n current = current ? current : 1;\n this.parent.grid.setProperties({ pageSettings: { currentPage: current } }, true);\n }\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm_1.dataSource.json = visualData;\n pageingDetails.result = dm_1.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n return Page;\n}());\nexport { Page };\n","import { Grid, Toolbar as tool } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Toolbar Module for TreeGrid\n *\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n Grid.Inject(tool);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Toolbar module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.rowDeselected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.rowDeselected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var toolbarElement = this.parent.grid.toolbarModule.getToolbar();\n if (!isNullOrUndefined(toolbarElement)) {\n var tObj = this.parent;\n var indentElement = void 0;\n var outdentElement = void 0;\n var indentID = tObj.element.id + '_gridcontrol_indent';\n var outdentID = tObj.element.id + '_gridcontrol_outdent';\n var indentEle = toolbarElement.querySelector('#' + indentID);\n var outdentEle = toolbarElement.querySelector('#' + outdentID);\n var row = args.row;\n var selectedrow = tObj.getSelectedRows()[0];\n if (!isNullOrUndefined(row[0])) {\n row = row[0];\n }\n row = (!isNullOrUndefined(selectedrow) && selectedrow.rowIndex !== row.rowIndex) ? selectedrow : row;\n if (indentEle !== null && outdentEle !== null) {\n indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n if (row.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[row.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[row.rowIndex - 1].level)) {\n indentElement.classList.add('e-hidden');\n }\n else {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[row.rowIndex - 1].level) {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === 0) {\n outdentElement.classList.add('e-hidden');\n }\n if (selectedItem.level !== 0) {\n outdentElement.classList.remove('e-hidden');\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indentElement.classList.add('e-hidden');\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdentElement.classList.add('e-hidden');\n }\n }\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n var indentOutdentAction = 'indentOutdentAction';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'indent');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'outdent');\n }\n };\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.parent.grid.toolbarModule.getToolbar();\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n this.parent.grid.toolbarModule.enableItems(items, isEnable);\n };\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';\nimport { findParentRecords } from '../utils';\nimport { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Aggregate module\n *\n * @hidden\n */\nvar Aggregate = /** @class */ (function () {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Aggregate(parent) {\n Grid.Inject(GridAggregate);\n this.parent = parent;\n this.flatChildRecords = [];\n this.summaryQuery = [];\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Summary module name\n */\n Aggregate.prototype.getModuleName = function () {\n return 'summary';\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n };\n /**\n * Function to calculate summary values\n *\n * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations\n * @param {Object[]} filteredData - Filtered data collection\n * @param {boolean} isSort - Specified whether sorting operation performed\n * @hidden\n * @returns {Object[]} - return flat records with summary values\n */\n Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n var parentRecord;\n var parentDataLength = Object.keys(filteredData).length;\n var parentData = [];\n for (var p = 0, len = parentDataLength; p < len; p++) {\n var summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\n var parentRecords = findParentRecords(parentData);\n var flatRecords = parentData.slice();\n var summaryLength = Object.keys(this.parent.aggregates).length;\n var dataLength = Object.keys(parentRecords).length;\n var childRecordsLength;\n var columns = this.parent.getColumns();\n if (this.parent.aggregates.filter(function (x) { return x.showChildSummary; }).length) {\n for (var i = 0, len = dataLength; i < len; i++) {\n parentRecord = parentRecords[i];\n childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);\n if (childRecordsLength) {\n var _loop_1 = function (summaryRowIndex, len_1) {\n var item = void 0;\n item = {};\n for (var i_1 = 0; i_1 < columns.length; i_1++) {\n var field = (isNullOrUndefined(getObject('field', columns[i_1]))) ?\n columns[i_1] : getObject('field', (columns[i_1]));\n item[field] = null;\n }\n item = this_1.createSummaryItem(item, this_1.parent.aggregates[summaryRowIndex - 1]);\n if (this_1.parent.aggregates[summaryRowIndex - 1].showChildSummary) {\n var idx_1;\n flatRecords.map(function (e, i) {\n if (e.uniqueID === parentRecord.uniqueID) {\n idx_1 = i;\n return;\n }\n });\n var currentIndex = idx_1 + childRecordsLength + summaryRowIndex;\n var summaryParent = extend({}, parentRecord);\n delete summaryParent.childRecords;\n delete summaryParent[this_1.parent.childMapping];\n setValue('parentItem', summaryParent, item);\n var level = getObject('level', summaryParent);\n setValue('level', level + 1, item);\n setValue('isSummaryRow', true, item);\n setValue('parentUniqueID', summaryParent.uniqueID, item);\n if (isSort) {\n var childRecords = getObject('childRecords', parentRecord);\n if (childRecords.length) {\n childRecords.push(item);\n }\n }\n flatRecords.splice(currentIndex, 0, item);\n }\n else {\n return \"continue\";\n }\n };\n var this_1 = this;\n for (var summaryRowIndex = 1, len_1 = summaryLength; summaryRowIndex <= len_1; summaryRowIndex++) {\n _loop_1(summaryRowIndex, len_1);\n }\n this.flatChildRecords = [];\n }\n }\n }\n else {\n var items = {};\n for (var columnIndex = 0, length_1 = columns.length; columnIndex < length_1; columnIndex++) {\n var fields = isNullOrUndefined(getObject('field', columns[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\n items[fields] = null;\n }\n for (var summaryRowIndex = 1, length_2 = summaryLength; summaryRowIndex <= length_2; summaryRowIndex++) {\n this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);\n }\n }\n return flatRecords;\n };\n Aggregate.prototype.getChildRecordsLength = function (parentData, flatData) {\n var recordLength = Object.keys(flatData).length;\n var record;\n for (var i = 0, len = recordLength; i < len; i++) {\n record = flatData[i];\n var parent_1 = isNullOrUndefined(record.parentItem) ? null :\n flatData.filter(function (e) { return e.uniqueID === record.parentItem.uniqueID; })[0];\n if (parentData === parent_1) {\n this.flatChildRecords.push(record);\n var hasChild = getObject('hasChildRecords', record);\n if (hasChild) {\n this.getChildRecordsLength(record, flatData);\n }\n else {\n continue;\n }\n }\n }\n return this.flatChildRecords.length;\n };\n Aggregate.prototype.createSummaryItem = function (itemData, summary) {\n var summaryColumnLength = Object.keys(summary.columns).length;\n for (var i = 0, len = summaryColumnLength; i < len; i++) {\n var displayColumn = isNullOrUndefined(summary.columns[i].columnName) ? summary.columns[i].field :\n summary.columns[i].columnName;\n var keys = Object.keys(itemData);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key === displayColumn) {\n if (this.flatChildRecords.length) {\n itemData[key] = this.getSummaryValues(summary.columns[i], this.flatChildRecords);\n }\n else if (this.parent.isLocalData) {\n var data = this.parent.dataSource instanceof DataManager ? this.parent.dataSource.dataSource.json\n : this.parent.flatData;\n itemData[key] = this.getSummaryValues(summary.columns[i], data);\n }\n }\n else {\n continue;\n }\n }\n }\n return itemData;\n };\n Aggregate.prototype.getSummaryValues = function (summaryColumn, summaryData) {\n var qry = new Query();\n var single = {};\n var helper = {};\n var type = !isNullOrUndefined(summaryColumn.field) ?\n this.parent.getColumnByField(summaryColumn.field).type : undefined;\n summaryColumn.setPropertiesSilent({ format: this.getFormatFromType(summaryColumn.format, type) });\n summaryColumn.setFormatter(this.parent.grid.locale);\n var formatFn = summaryColumn.getFormatter() || (function () { return function (a) { return a; }; })();\n summaryColumn.setTemplate(helper);\n var tempObj = summaryColumn.getTemplate(2);\n qry.queries = this.summaryQuery;\n qry.requiresCount();\n var sumData = new DataManager(summaryData).executeLocal(qry);\n var types = summaryColumn.type;\n var summaryKey;\n types = [summaryColumn.type];\n for (var i = 0; i < types.length; i++) {\n summaryKey = types[i];\n var key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n var val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n var disp = summaryColumn.columnName;\n var value_1 = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value_1;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value_1) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n var cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\n var renderReactTemplates = 'renderReactTemplates';\n tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property, '', null, null, cellElement);\n this.parent[renderReactTemplates]();\n }\n else {\n appendChildren(cellElement, tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property));\n }\n var value = single[summaryColumn.columnName][summaryKey];\n var summaryValue;\n if (cellElement.innerHTML.indexOf(value) === -1) {\n summaryValue = cellElement.innerHTML + value;\n return summaryValue;\n }\n else {\n return cellElement.innerHTML;\n }\n };\n Aggregate.prototype.getFormatFromType = function (summaryformat, type) {\n if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {\n return summaryformat;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: summaryformat };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: summaryformat };\n break;\n case 'date':\n obj = { type: type, skeleton: summaryformat };\n break;\n }\n return obj;\n };\n /**\n * To destroy the Aggregate module\n *\n * @returns {void}\n * @hidden\n */\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Aggregate;\n}());\nexport { Aggregate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Sort as GridSort, Grid, getActualProperties } from '@syncfusion/ej2-grids';\nimport { getParentData } from '../utils';\n/**\n * Internal dataoperations for TreeGrid\n *\n * @hidden\n */\nvar Sort = /** @class */ (function () {\n function Sort(grid) {\n Grid.Inject(GridSort);\n this.parent = grid;\n this.taskIds = [];\n this.flatSortedData = [];\n this.storedIndex = -1;\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Sort module name\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n this.parent.on('updateModel', this.updateModel, this);\n this.parent.on('createSort', this.createdSortedRecords, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateModel', this.updateModel);\n this.parent.off('createSort', this.createdSortedRecords);\n };\n Sort.prototype.createdSortedRecords = function (sortParams) {\n var data = sortParams.modifiedData;\n var srtQry = sortParams.srtQry;\n this.iterateSort(data, srtQry);\n this.storedIndex = -1;\n sortParams.modifiedData = this.flatSortedData;\n this.flatSortedData = [];\n };\n Sort.prototype.iterateSort = function (data, srtQry) {\n for (var d = 0; d < data.length; d++) {\n if (this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {\n if (!isNullOrUndefined(getParentData(this.parent, data[d].uniqueID, true))) {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n }\n else {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n if (data[d].hasChildRecords) {\n var childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\n if (this.parent.allowRowDragAndDrop && data[d].childRecords.indexOf(this.parent.rowDragAndDropModule['draggedRecord']) !== -1 && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n childSort.splice(dragdIndex, 1);\n var dropdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n childSort.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n childSort.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n };\n ContextMenu.prototype.contextMenuOpen = function (args) {\n var addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n var editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n var indent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Indent', args.element);\n var outdent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Outdent', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false || this.parent.grid.isEdit) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n var tObj = this.parent;\n var selectedrow = tObj.getSelectedRows()[0];\n if ((indent || outdent) && !isNullOrUndefined(selectedrow)) {\n var targetElement = args.event.target.closest('td');\n if (isNullOrUndefined(targetElement) || (!isNullOrUndefined(targetElement) && !targetElement.classList.contains('e-rowcell'))) {\n indent.style.display = outdent.style.display = 'none';\n }\n else {\n if (selectedrow.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indent.style.display = outdent.style.display = 'none';\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[selectedrow.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) || this.parent.editSettings.mode === 'Batch'\n || this.parent.editSettings.mode === 'Cell') {\n indent.style.display = 'none';\n }\n else {\n indent.style.display = 'block';\n }\n if ((selectedItem.level === tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) && this.parent.editSettings.mode !== 'Batch'\n && this.parent.editSettings.mode !== 'Cell') {\n indent.style.display = 'block';\n }\n if ((selectedItem.level === 0) || this.parent.editSettings.mode === 'Batch'\n || this.parent.editSettings.mode === 'Cell') {\n outdent.style.display = 'none';\n }\n else {\n outdent.style.display = 'block';\n }\n }\n }\n }\n }\n else {\n if (tObj.grid.isEdit && isNullOrUndefined(selectedrow)) {\n indent.style.display = 'none';\n outdent.style.display = 'none';\n }\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.editModule['isAddedRowByContextMenu'] = true;\n this.parent.addRecord();\n }\n if (args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' || args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Outdent') {\n if (!isNullOrUndefined(this.parent.rowDragAndDropModule)) {\n var indentOutdentAction = 'indentOutdentAction';\n var action = args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' ? 'indent' : 'outdent';\n this.parent.rowDragAndDropModule[indentOutdentAction](null, action);\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n ContextMenu.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Gets the context menu element from the TreeGrid.\n *\n * @returns {Element} Return Context Menu root element.\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.parent.grid.contextMenuModule.getContextMenu();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined, extend, setValue, getValue, merge } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\nimport { classList } from '@syncfusion/ej2-base';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cellSaved, this.cellSaved);\n this.parent.off(events.batchAdd, this.batchAdd);\n this.parent.off(events.batchSave, this.batchSave);\n this.parent.off(events.beforeBatchAdd, this.beforeBatchAdd);\n this.parent.off(events.beforeBatchDelete, this.beforeBatchDelete);\n this.parent.off(events.beforeBatchSave, this.beforeBatchSave);\n this.parent.off('batchPageAction', this.batchPageAction);\n this.parent.off('batchCancelAction', this.batchCancelAction);\n this.parent.grid.off('immutable-batch-cancel', this.immutableBatchAction);\n this.parent.grid.off('next-cell-index', this.nextCellIndex);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n BatchEdit.prototype.getBatchRecords = function () {\n return this.batchRecords;\n };\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n BatchEdit.prototype.getAddRowIndex = function () {\n return this.addRowIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n BatchEdit.prototype.getSelectedIndex = function () {\n return this.selectedIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n BatchEdit.prototype.getBatchChildCount = function () {\n return this.batchChildCount;\n };\n BatchEdit.prototype.batchPageAction = function () {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.cell.cellIndex;\n var frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n var colCount = this.parent.getFrozenLeftColumnsCount() + actualCellIndex;\n if (colCount === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n }\n else if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n if (this.isAdd && this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var added = void 0;\n var level = 'level';\n var primaryKey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var currentDataIndex = void 0;\n var indexvalue = void 0;\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var parentRecord = this.selectedIndex > -1 ? this.batchRecords[this.addRowIndex][parentItem] : null;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentIdMapping = void 0;\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Top' || this.selectedIndex === -1 ? 0 :\n this.parent.editSettings.newRowPosition === 'Above' ? this.addRowIndex\n : this.addRowIndex + 1;\n rowObjectIndex = this.getActualRowObjectIndex(rowObjectIndex);\n if (this.newBatchRowAdded) {\n if (this.batchRecords.length) {\n idMapping = this.batchRecords[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = this.batchRecords[this.addRowIndex][this.parent.parentIdMapping];\n if (this.batchRecords[this.addRowIndex][parentItem]) {\n parentUniqueID = this.batchRecords[this.addRowIndex][parentItem][uniqueID];\n }\n }\n this.batchAddedRecords = extendArray(this.batchAddedRecords);\n this.batchAddRowRecord = extendArray(this.batchAddRowRecord);\n this.batchAddRowRecord.push(this.batchRecords[this.addRowIndex]);\n added = this.parent.grid.getRowsObject()[rowObjectIndex].changes;\n added.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + added.uniqueID, added, this.parent);\n if (!Object.prototype.hasOwnProperty.call(added, 'level')) {\n this.batchIndex = this.selectedIndex === -1 ? 0 : this.batchIndex;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n added.primaryParent = parentRecord;\n if (this.selectedIndex > -1) {\n added.parentItem = extend({}, this.batchRecords[this.addRowIndex]);\n added.parentUniqueID = added.parentItem.uniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n added.level = added.parentItem.level + 1;\n added.index = this.batchIndex;\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey_1, added.parentItem, 'add', this.parent, this.isSelfReference, added);\n }\n }\n else if ((this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')\n && !isNullOrUndefined(this.batchRecords[this.addRowIndex])) {\n added.level = this.batchRecords[this.addRowIndex][level];\n if (added.level && this.selectedIndex > -1) {\n added.parentItem = parentRecord;\n added.parentUniqueID = parentUniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n }\n added.index = this.parent.editSettings.newRowPosition === 'Below' ? this.batchIndex : this.batchIndex - 1;\n if (this.parent.editSettings.newRowPosition === 'Below' && this.selectedIndex > -1) {\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n var record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = parentIdMapping;\n }\n }\n added.index = added.index === -1 ? 0 : added.index;\n added.hasChildRecords = false;\n added.childRecords = [];\n this.batchRecords.splice(added.index, 0, added);\n this.currentViewRecords.splice(added.index, 0, added);\n if (currentDataIndex) {\n indexvalue = currentDataIndex;\n }\n else {\n indexvalue = added.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Above') {\n indexvalue = added.index === 0 ? indexvalue : indexvalue + 1;\n }\n data.splice(indexvalue, 0, added);\n this.batchAddedRecords.push(added);\n }\n this.parent.grid.getRowsObject()[rowObjectIndex].data = added;\n this.newBatchRowAdded = false;\n }\n if (this.parent.frozenColumns || this.parent.getFrozenColumns()\n && this.parent.grid.getRowsObject()[rowObjectIndex].edit === 'add') {\n merge(this.currentViewRecords[rowObjectIndex], this.parent.grid.getRowsObject()[rowObjectIndex].changes);\n }\n }\n };\n BatchEdit.prototype.beforeBatchAdd = function (e) {\n var isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[isTabLastRow] = false;\n return;\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) &&\n !this.parent.editModule['isAddedRowByContextMenu'] && (this.parent.grid.selectedRowIndex === -1 || this.parent.editModule['batchEditModule'].isAdd)) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = this.batchRecords.length ? this.batchRecords[this.selectedIndex]\n : this.parent.getCurrentViewRecords()[this.selectedIndex];\n }\n else {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.parent.editModule['addRowIndex'] = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n classList(this.parent.grid.getDataRows()[0], ['e-batchrow'], []);\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\n // if (this.parent.frozenRows || this.parent.frozenColumns) {\n // actualIndex = this.batchIndex;\n // }\n }\n focusModule.getContent().matrix.current = [actualIndex, focusModule.getContent().matrix.current[1]];\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n var newlyAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var index = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[newlyAddedRecords.length - 1].getAttribute('data-rowindex'), 10);\n this.batchRecords.splice(index, 0, newlyAddedRecords[newlyAddedRecords.length - 1]);\n }\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.getAttribute('data-uid');\n }\n else {\n data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n childs = findChildrenRecords(data);\n uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n }\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('data-rowindex'), 10);\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[i].setAttribute('data-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('data-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('data-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n if (index !== -1) {\n data.splice(index, 1);\n }\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n for (var i_1 = 0; i_1 < addRecords.length; i_1++) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[i_1].getAttribute('data-rowindex'), 10);\n data.splice(index_1, 0, addRecords[i_1]);\n }\n }\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length) {\n var startIndex = totalRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(currentViewRecords[0][primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n if (addRecords.length > 1 && this.parent.editModule['isAddedRowByContextMenu']) {\n var rowPosition = this.parent.editSettings.newRowPosition;\n this.parent.editSettings.newRowPosition = this.parent.editModule['previousNewRowPosition'];\n this.parent.editModule['previousNewRowPosition'] = rowPosition;\n }\n addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem]) &&\n (isNullOrUndefined(this.parent.editModule['addRowIndex']) || this.isSelfReference)) {\n var indexValue = currentViewRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(addRecords[i][parentItem][primarykey_1]);\n var children = currentViewRecords[indexValue][childRecords];\n for (var j = 0; j < children.length; j++) {\n if (children[j][primarykey_1] === addRecords[i][primarykey_1]) {\n currentViewRecords[indexValue][childRecords].splice(j, 1);\n }\n }\n }\n }\n if (batchChanges[deletedRecords].length) {\n for (i = 0; i < batchChanges[deletedRecords].length; i++) {\n editAction({ value: batchChanges[deletedRecords][i], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n }\n }\n this.parent.parentData = [];\n for (var i_2 = 0; i_2 < data.length; i_2++) {\n data[i_2][index] = i_2;\n setValue('uniqueIDCollection.' + data[i_2][uniqueID] + '.index', i_2, this.parent);\n if (!data[i_2][level]) {\n this.parent.parentData.push(data[i_2]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n this.parent.editModule['isAddedRowByContextMenu'] = false;\n }\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n if (this.parent.getSelectedRows().length) {\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n }\n else {\n args[index] = this.batchIndex;\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n this.isAddedRowByContextMenu = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.dataRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = treeObj.dataSource.adaptor;\n if ((isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[rowIndex][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[i].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[page];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('data-colindex'));\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('data-rowindex');\n tr.setAttribute('data-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n else if (this.parent.editSettings.mode === 'Cell' && (!column.allowEditing || column.isPrimaryKey)) {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('data-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n if (this.parent.enableVirtualization) {\n this.parent.grid.contentModule['editedRowIndex'] = this.parent.grid.editModule.editModule['index'];\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row, args.rowIndex);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n if (this.parent.enableVirtualization) {\n this.parent.grid.contentModule['virtualData'] = {};\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[rowIndex].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (!this.parent.enableInfiniteScrolling) {\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n if (!isNullOrUndefined(data1)) {\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[l].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (var k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[k].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[count];\n if (!isNullOrUndefined(data2)) {\n var index = data2.index;\n var level = data2.level;\n var row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[l];\n var remove = /e-gridrowindex/i;\n var removed = /e-griddetailrowindex/i;\n var result = value.match(remove);\n var results = value.match(removed);\n if (result != null) {\n removeClass([treecell], value);\n }\n if (results != null) {\n removeClass([treecell], value);\n }\n }\n if (!rows[k].classList.contains('e-detailrow')) {\n addClass([treecell], 'e-gridrowindex' + index + 'level' + level);\n }\n else {\n addClass([treecell], 'e-griddetailrowindex' + index + 'level' + level);\n }\n }\n }\n }\n };\n Edit.prototype.beginAdd = function () {\n var position;\n var index = this.addRowIndex;\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch') {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n records = this.batchEditModule.getBatchRecords();\n }\n }\n var rows = this.parent.grid.getDataRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[index]) && records[index].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[r].splice(0, 1);\n this.parent.grid.contentModule[r].splice(rowObjectIndex, 0, newRowObject);\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n if (!this.parent.enableVirtualization || this.parent.enableVirtualization && !Object.keys(this.parent.grid.contentModule['emptyRowData']).length) {\n focussedElement.focus();\n }\n if (this.parent.enableVirtualization && !Object.keys(this.parent.grid.contentModule['emptyRowData']).length) {\n this.parent.grid.contentModule['createEmptyRowdata']();\n }\n }\n }\n if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1 && this['isAddedRowByMethod'] && !this.isAddedRowByContextMenu) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n var batchAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var newlyAddedRecord = void 0;\n if (batchAddedRecords.length) {\n for (var i = 0; i < batchAddedRecords.length; i++) {\n if (isNullOrUndefined(batchAddedRecords[i].uniqueID)) {\n newlyAddedRecord = batchAddedRecords[i];\n }\n }\n }\n var args = {\n action: 'add',\n data: newlyAddedRecord,\n index: index,\n seletedRow: 0\n };\n this.beginAddEdit(args);\n this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);\n this.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[primaryKeys_2[0]] === args.data[i][primaryKeys_2[0]]) {\n data_1[i] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[data-rowindex=\"' + this.selectedIndex + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[data-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n if (args.index !== 0) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex;\n }\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[this.parent.grid.selectedRowIndex];\n if (this.parent.enableVirtualization && this.isAddedRowByContextMenu) {\n this.addRowRecord = this.parent.getCurrentViewRecords()[this.addRowIndex];\n }\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = void 0;\n if (this.parent.enableVirtualization && args.index !== 0) {\n currentData = this.parent.flatData;\n }\n else if (this.parent.editSettings.mode === 'Batch' && this['isAddedRowByMethod'] && !isNullOrUndefined(this.addRowIndex)) {\n currentData = this.batchEditModule['batchRecords'];\n }\n else {\n currentData = this.parent.grid.getCurrentViewRecords();\n }\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.flatData.indexOf(this.addRowRecord);\n this.selectedIndex = this.addRowIndex;\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withinRange = this.parent.enableVirtualization && args.index !== 0 ? true :\n this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n if (!this.parent.isLocalData && this.parent.editModule.selectedIndex === -1) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = null;\n }\n else {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n }\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent) {\n Grid.Inject(Command);\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns CommandColumn module name\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n CommandColumn.prototype.destroy = function () {\n //this.removeEventListener();\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { Grid, getObject } from '@syncfusion/ej2-grids';\nimport { DetailRow as detailrow } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isRemoteData } from '../utils';\n/**\n * TreeGrid Detail Row module\n *\n * @hidden\n */\nvar DetailRow = /** @class */ (function () {\n function DetailRow(parent) {\n Grid.Inject(detailrow);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns DetailRow module name\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n DetailRow.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.on('detaildataBound', this.detaildataBound, this);\n this.parent.grid.on('detail-indentcell-info', this.setIndentVisibility, this);\n this.parent.on('childRowExpand', this.childRowExpand, this);\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('actioncomplete', this.actioncomplete, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DetailRow.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.off('detaildataBound', this.detaildataBound);\n this.parent.off('childRowExpand', this.childRowExpand);\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('actioncomplete', this.actioncomplete);\n this.parent.grid.off('detail-indentcell-info', this.setIndentVisibility);\n };\n DetailRow.prototype.setIndentVisibility = function (args) {\n var visible = 'visible';\n args[visible] = false;\n };\n DetailRow.prototype.dataBoundArg = function () {\n var detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\n if (isNullOrUndefined(parentItem) || !isNullOrUndefined(parentItem) &&\n getExpandStatus(this.parent, detailData.data, this.parent.grid.getCurrentViewRecords())) {\n this.parent.grid.detailRowModule.expand(elements[0]);\n }\n }\n };\n DetailRow.prototype.childRowExpand = function (args) {\n var detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n };\n DetailRow.prototype.rowExpandCollapse = function (args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (var i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n };\n DetailRow.prototype.detaildataBound = function (args) {\n var data = args.data;\n var row = args.detailElement.parentElement.previousSibling;\n var index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n var expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n var classlist = row.querySelector('.' + expandClass).classList;\n var gridClas = [].slice.call(classlist).filter(function (gridclass) { return (gridclass === expandClass); });\n var newNo = gridClas[0].length;\n var slicedclas = gridClas.toString().slice(6, newNo);\n var detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n };\n DetailRow.prototype.actioncomplete = function (args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n var spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n var focusModule = getObject('focusModule', this.parent.grid);\n var matrix = 'refreshMatrix';\n focusModule[matrix](true)({ rows: this.parent.grid.contentModule.getRows() });\n };\n /**\n * Destroys the DetailModule.\n *\n * @function destroy\n * @returns {void}\n */\n DetailRow.prototype.destroy = function () {\n this.removeEventListener();\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Cell, CellType } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport * as literals from '../base/constant';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('data-rowindex'), 10) === index; })[0];\n };\n VirtualTreeContentRenderer.prototype.getMovableVirtualRowByIndex = function (index) {\n return this.getRowCollection(index, true);\n };\n VirtualTreeContentRenderer.prototype.getFrozenRightVirtualRowByIndex = function (index) {\n return this.getRowCollection(index, false, false, true);\n };\n VirtualTreeContentRenderer.prototype.getRowCollection = function (index, isMovable, isRowObject, isFrozenRight) {\n var startIdx = parseInt(this.parent.getRows()[0].getAttribute(literals.dataRowIndex), 10);\n var rowCollection = isMovable ? this.parent.getMovableDataRows() : this.parent.getDataRows();\n rowCollection = isFrozenRight ? this.parent.getFrozenRightDataRows() : rowCollection;\n var collection = isRowObject ? this.parent.getCurrentViewRecords() : rowCollection;\n var selectedRow = collection[index - startIdx];\n if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n if (!isRowObject) {\n selectedRow = index <= this.parent.frozenRows ? rowCollection[index]\n : rowCollection[(index - startIdx) + this.parent.frozenRows];\n }\n else {\n selectedRow = index <= this.parent.frozenRows ? this.parent.getRowsObject()[index].data : selectedRow;\n }\n }\n return selectedRow;\n };\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else if (this.parent.root.editSettings.newRowPosition !== 'Top' && this.parent.root.editModule.selectedIndex !== -1 || this.parent.root.editModule.selectedIndex !== -1) {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n };\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[action]('data-ready', this.onDataReady, this);\n this.parent[action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction(), _this.parent);\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[action]('edit-reset', this.resetIseditValue, this);\n this.parent[action]('get-virtual-data', this.getData, this);\n this.parent[action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[action]('virtaul-cell-focus', this.cellFocus, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\n };\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n // To overcome the white space issue in last page when records collapsed\n if (this.parent.isFrozenGrid() && e.count < Object.keys(this.parent.dataSource).length) {\n var width = this.parent.enableColumnVirtualization ?\n this.getColumnOffset(this.parent.columns.length - 1) + 'px' : '100%';\n var height = (this.parent.getRowHeight() * e.count) -\n (this.parent.getRowHeight() * this.parent.pageSettings.pageSize);\n getValue('virtualEle', this).setVirtualHeight(height, width);\n }\n if (!this.parent.enableColumnVirtualization && !this.parent.isFrozenGrid()) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || (this.isDataSourceChanged && (this.startIndex === -1 || this.startIndex === 0 && this['preStartIndex'] === 0))) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n this['editedRowIndex'] = e.index;\n var selector = '.e-row[data-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = addArgs.dataRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[addAction].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n _super.prototype[resetIsEdit].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.editModule.addRecord(null, this.parent.root.editModule.selectedIndex);\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = this.parent.root.editModule.selectedIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[preventEvent]) {\n _this.parent.showSpinner();\n }\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n if (!_this.parent.isFrozenGrid()) {\n _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n this['scrollAfterEdit']();\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n var currentViewData = this.parent.currentViewData;\n var indexValue = 'index';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / this.parent.getRowHeight())\n + Math.ceil(vHeight / this.parent.getRowHeight()))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 && index !== this[selectedRowIndex]) {\n index = this[selectedRowIndex];\n }\n this.startIndex = index;\n this.endIndex = index + this.parent.pageSettings.pageSize;\n if (this.endIndex > this.totalRecords) {\n var lastInx = this.totalRecords - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n if (currentViewData.length && (currentViewData[0][indexValue] >= this.parent.pageSettings.pageSize / 2) &&\n ((currentViewData[0][indexValue] - this.startIndex) < (this.parent.pageSettings.pageSize / 2))) {\n this.startIndex = currentViewData[0][indexValue] - (this.parent.pageSettings.pageSize / 2);\n this.endIndex = this.startIndex + this.parent.pageSettings.pageSize;\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('data-rowindex');\n }\n if (firsttdinx === 0) {\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var isLastBlock = (this[selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (currentViewData.length && this.startIndex > currentViewData[0][indexValue] &&\n ((this.startIndex - currentViewData[0][indexValue]) < (this.parent.pageSettings.pageSize / 2))) {\n this.startIndex = currentViewData[0][indexValue] + (this.parent.pageSettings.pageSize / 2);\n }\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left') ||\n ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent))) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n this.requestType = 'virtualscroll';\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n var isFrozen = this.parent.isFrozenGrid();\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent) || this.parent.isFrozenGrid()) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n if (isFrozen && isNullOrUndefined(this.requestType) && getValue('requestTypes', this).indexOf('isFrozen') === -1) {\n getValue('requestTypes', this).push('isFrozen');\n this.requestType = 'isFrozen';\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n if (getValue('requestTypes', this).indexOf('isFrozen') !== -1) {\n getValue('requestTypes', this).splice(getValue('requestTypes', this).indexOf('isFrozen'), 1);\n this.requestType = this.requestType === 'isFrozen' ? undefined : this.requestType;\n }\n if (isFrozen && (!this.isExpandCollapse || this.translateY === 0)) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(0, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.dataRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback, instance) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback, instance), this);\n if (getValue('options', this).movableContainer) {\n var movableContainerRect = 'movableContainerRect';\n _super.prototype[movableContainerRect] = getValue('options', this).movableContainer.getBoundingClientRect();\n EventHandler.add(getValue('options', this).movableContainer, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback, instance), this);\n }\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback, instance) {\n var _this = this;\n //const delay: number = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n //const debounced100: Function = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced50;\n if (current.axis === 'X') {\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n if ((instance.dataSource instanceof DataManager && instance.dataSource.dataSource.url !== undefined\n && !instance.dataSource.dataSource.offline && instance.dataSource.dataSource.url !== '') || isCountRequired(instance)) {\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({\n direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement\n });\n }\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || requestType === 'searching' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else if (!this.parent['isExpandAll']) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n startIndex = startIndex < 0 ? 0 : startIndex;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (!parentGrid.isFrozenGrid()) {\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n //renderer.addRenderer(RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this)));\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ColumnFreezeContentRenderer, FreezeContentRender, FreezeRowModelGenerator, RenderType } from '@syncfusion/ej2-grids';\nimport * as literals from '../base/constant';\nimport { ColumnVirtualFreezeRenderer, setDebounce, VirtualFreezeHdrRenderer, VirtualFreezeRenderer } from '@syncfusion/ej2-grids';\nimport { TreeInterSectionObserver, VirtualTreeContentRenderer } from './virtual-tree-content-render';\nimport { getValue } from '@syncfusion/ej2-base';\n/**\n * VirtualTreeFreezeRenderer is used to render the virtual table within the frozen and movable content table\n *\n * @hidden\n */\nvar VirtualTreeFreezeRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeFreezeRenderer, _super);\n function VirtualTreeFreezeRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * @returns {void}\n * @hidden\n */\n VirtualTreeFreezeRenderer.prototype.renderTable = function () {\n this.freezeRowGenerator = new FreezeRowModelGenerator(this.parent);\n this.virtualRenderer = new VirtualTreeContentRenderer(this.parent, this.serviceLoc);\n this.virtualRenderer.header = this.serviceLoc.getService('rendererFactory')\n .getRenderer(RenderType.Header).virtualHdrRenderer;\n FreezeContentRender.prototype.renderTable.call(this);\n this.virtualRenderer.setPanel(this.parent.getContent());\n this.scrollbar = this.parent.getContent().querySelector('.e-movablescrollbar');\n var movableCont = this.getMovableContent();\n var minHeight = this.parent.height;\n this.virtualRenderer.virtualEle.content = this.virtualRenderer.content = this.getPanel().querySelector('.' + literals.content);\n this.virtualRenderer.virtualEle.content.style.overflowX = 'hidden';\n this.virtualRenderer.virtualEle.renderFrozenWrapper(minHeight);\n this.virtualRenderer.virtualEle.renderFrozenPlaceHolder();\n if (this.parent.enableColumnVirtualization) {\n this.virtualRenderer.virtualEle.movableContent = this.virtualRenderer.movableContent\n = this.getPanel().querySelector('.' + literals.movableContent);\n this.virtualRenderer.virtualEle.renderMovableWrapper(minHeight);\n this.virtualRenderer.virtualEle.renderMovablePlaceHolder();\n var tbl = movableCont.querySelector('table');\n this.virtualRenderer.virtualEle.movableTable = tbl;\n this.virtualRenderer.virtualEle.movableWrapper.appendChild(tbl);\n movableCont.appendChild(this.virtualRenderer.virtualEle.movableWrapper);\n movableCont.appendChild(this.virtualRenderer.virtualEle.movablePlaceholder);\n }\n this.virtualRenderer.virtualEle.wrapper.appendChild(this.getFrozenContent());\n this.virtualRenderer.virtualEle.wrapper.appendChild(movableCont);\n this.virtualRenderer.virtualEle.table = this.getTable();\n setDebounce(this.parent, this.virtualRenderer, this.scrollbar, this.getMovableContent());\n };\n /**\n * @param {HTMLElement} target - specifies the target\n * @param {DocumentFragment} newChild - specifies the newChild\n * @param {NotifyArgs} e - specifies the notifyargs\n * @returns {void}\n * @hidden\n */\n VirtualTreeFreezeRenderer.prototype.appendContent = function (target, newChild, e) {\n getValue('observer', this.virtualRenderer).options.debounceEvent = false;\n this.virtualRenderer['observers'] = new TreeInterSectionObserver(getValue('observer', this.virtualRenderer).element, getValue('observer', this.virtualRenderer).options, getValue('observer', this.virtualRenderer).movableEle);\n this.virtualRenderer['contents'] = this.getPanel().firstChild;\n _super.prototype.appendContent.call(this, target, newChild, e);\n };\n /**\n * @param {Object[]} data - specifies the data\n * @param {NotifyArgs} e - specifies the notifyargs\n * @returns {Row<Column>[]} returns the row\n * @hidden\n */\n VirtualTreeFreezeRenderer.prototype.generateRows = function (data, e) {\n return _super.prototype.generateRows.call(this, data, e);\n };\n return VirtualTreeFreezeRenderer;\n}(VirtualFreezeRenderer));\nexport { VirtualTreeFreezeRenderer };\n/**\n * ColumnVirtualTreeFreezeRenderer is used to render the virtual table within the frozen and movable content table\n *\n * @hidden\n */\nvar ColumnVirtualTreeFreezeRenderer = /** @class */ (function (_super) {\n __extends(ColumnVirtualTreeFreezeRenderer, _super);\n function ColumnVirtualTreeFreezeRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.serviceLoc = locator;\n _this.eventListener('on');\n return _this;\n }\n /**\n * @returns {void}\n * @hidden\n */\n ColumnVirtualTreeFreezeRenderer.prototype.renderTable = function () {\n this.virtualRenderer = new VirtualTreeContentRenderer(this.parent, this.serviceLoc);\n this.virtualRenderer.header = this.serviceLoc.getService('rendererFactory')\n .getRenderer(RenderType.Header).virtualHdrRenderer;\n this.freezeRowGenerator = new FreezeRowModelGenerator(this.parent);\n ColumnFreezeContentRenderer.prototype.renderTable.call(this);\n this.virtualRenderer.setPanel(this.parent.getContent());\n this.scrollbar = this.parent.getContent().querySelector('.e-movablescrollbar');\n var frozenRightCont = this.getFrozenRightContent();\n var frzCont = this.getFrozenContent();\n var movableCont = this.getMovableContent();\n if (this.parent.getFrozenMode() === 'Right') {\n frzCont = frozenRightCont;\n }\n this.virtualRenderer.virtualEle.content = this.virtualRenderer.content = this.getPanel().querySelector('.' + literals.content);\n this.virtualRenderer.virtualEle.content.style.overflowX = 'hidden';\n var minHeight = this.parent.height;\n this.virtualRenderer.virtualEle.renderFrozenWrapper(minHeight);\n this.virtualRenderer.virtualEle.renderFrozenPlaceHolder();\n _super.prototype['renderVirtualFrozenLeft'].call(this, frzCont, movableCont);\n _super.prototype['renderVirtualFrozenRight'].call(this, frzCont, movableCont);\n _super.prototype['renderVirtualFrozenLeftRight'].call(this, frzCont, movableCont, frozenRightCont);\n this.virtualRenderer.virtualEle.table = this.getTable();\n setDebounce(this.parent, this.virtualRenderer, this.scrollbar, this.getMovableContent());\n };\n ColumnVirtualTreeFreezeRenderer.prototype.appendContent = function (target, newChild, e) {\n getValue('observer', this.virtualRenderer).options.debounceEvent = false;\n this.virtualRenderer['observers'] = new TreeInterSectionObserver(getValue('observer', this.virtualRenderer).element, getValue('observer', this.virtualRenderer).options, getValue('observer', this.virtualRenderer).movableEle);\n this.virtualRenderer['contents'] = this.getPanel().firstChild;\n _super.prototype.appendContent.call(this, target, newChild, e);\n };\n return ColumnVirtualTreeFreezeRenderer;\n}(ColumnVirtualFreezeRenderer));\nexport { ColumnVirtualTreeFreezeRenderer };\n/**\n * VirtualTreeFreezeHdrRenderer is used to render the virtual table within the frozen and movable header table\n *\n * @hidden\n */\nvar VirtualTreeFreezeHdrRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeFreezeHdrRenderer, _super);\n function VirtualTreeFreezeHdrRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @returns {void}\n * @hidden\n */\n VirtualTreeFreezeHdrRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n };\n VirtualTreeFreezeHdrRenderer.prototype.rfshMovable = function () {\n _super.prototype.rfshMovable.call(this);\n };\n return VirtualTreeFreezeHdrRenderer;\n}(VirtualFreezeHdrRenderer));\nexport { VirtualTreeFreezeHdrRenderer };\n","import { ColumnFreezeContentRenderer, ColumnFreezeHeaderRenderer, FreezeContentRender, FreezeRender, parentsUntil, RenderType } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass, getValue } from '@syncfusion/ej2-base';\nimport { ColumnVirtualTreeFreezeRenderer, VirtualTreeFreezeRenderer, VirtualTreeFreezeHdrRenderer } from '../renderer/virtual-tree-freeze-render';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n this.parent.grid.on('initial-load', this.instantiateRenderer, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n this.parent.grid.off('initial-load', this.instantiateRenderer);\n };\n Freeze.prototype.instantiateRenderer = function () {\n var renderer = getValue('serviceLocator', this.parent.grid).getService('rendererFactory');\n if (this.parent.getFrozenColumns()) {\n if (this.parent.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualTreeFreezeHdrRenderer(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n else {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new FreezeRender(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n if (this.parent.enableVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeFreezeRenderer(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n else {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new FreezeContentRender(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n }\n if (this.parent.getFrozenLeftColumnsCount() || this.parent.getFrozenRightColumnsCount()) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new ColumnFreezeHeaderRenderer(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n if (this.parent.enableVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new ColumnVirtualTreeFreezeRenderer(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n else {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new ColumnFreezeContentRenderer(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n }\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getMovableDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell' && (!e.target['classList'].contains('e-treegridcollapse') && !e.target['classList'].contains('e-treegridexpand'))) {\n this.parent.grid.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getExpandStatus } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n if (this.parent.grid.infiniteScrollModule['isInitialRender'] && !this.parent.initialRender) {\n this.parent.grid.pageSettings.currentPage = 1;\n }\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.grid.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.grid.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n };\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n InfiniteScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return InfiniteScroll;\n}());\nexport { InfiniteScroll };\n","import * as index from './index';\nindex.TreeGrid.Inject(index.Filter, index.Page, index.Sort, index.Reorder, index.Toolbar, index.Aggregate, index.Resize, index.ColumnMenu, index.ExcelExport, index.PdfExport, index.CommandColumn, index.ContextMenu, index.Edit, index.Selection, index.VirtualScroll, index.DetailRow, index.RowDD, index.Freeze, index.ColumnChooser, index.Logger, index.InfiniteScroll);\nexport * from './index';\n"],"names":["isRemoteData","parent","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","showCheckbox","isFilterChildHierarchy","isNullOrUndefined","grid","searchSettings","key","hierarchyMode","allowFiltering","filterSettings","findParentRecords","records","datas","len","Object","keys","getObject","push","getExpandStatus","record","parents","childParent","parentRecord","parentItem","getParentData","uniqueID","initialRender","expandStateMapping","expanded","findChildrenRecords","hasChildRecords","childRecords","filter","item","isSummaryRow","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","addAction","Array","extend","newRowPosition","k","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","e","p","enableImmutableMode","removeChildRecords","currentViewRecords","getCurrentViewRecords","unshift","primaryKeys","currentdata","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","updatedParent","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","TreeClipboard","serviceLocator","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","getSelection","toString","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","selectedItems","filteredList","searchingRecords","addEventListener","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","checkBox","checkWrap","parentsUntil","querySelector","closest","selectCheckboxes","triggerChkChangeEvent","nextElementSibling","autoCheckHierarchy","checkBoxvalue","headerSelection","checkState","rowElement","checked","rowData","getCheckedRecords","getCheckboxcolumnIndex","mappingUid","columnIndex","col","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","aria-label","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","indeter","checkChildRecords","checkBoxRecord","hasFilteredChildRecords","checkAll","multiFilterCheckState","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","chkstate","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Print","GridPrint","printTreeGrid","printGrid","gridElement","queryCellInfo","rowDataBound","beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","expandIcon","expand","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","template","rowTemplate","treeColumn","colindex","templateCompiler","textContent","appendChildren","children","tempID","element","id","isReact","result","refreshReactColumnTemplateByUid","columnUid","clearTemplate","undefined","rowsObj","getRowsObject","indent","getIndentCount","cellIndex","getNormalizedColumnIndex","isDataRow","cellRenderer","CellRenderer","td","getCellFromIndex","refreshTD","treecell","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","collectExpandingRecs","dataProcessor","isRemote","convertToFlatData","query","Query","filterKey","params","param","where","addParams","hasChildMapping","qry","clone","queries","executeQuery","then","DataUtil","distinct","httpRequest","statusText","setValue","zerothLevelData","dataManagerSuccess","hideSpinner","convertJSONData","tempData","selfData","mappingData","executeLocal","group","groupData","items","selfReferenceUpdate","createRecords","referenceData","shift","loadChildOnDemand","getUid","Math","ceil","random","rowDetails","isChild","gridRows","getContentTable","childRecord","targetEle","getElementsByClassName","getRowObjectFromUID","childRows","parentRow","expandingTd","detailRowModule","fetchRemoteChildData","getDataModule","generateQuery","clonequries","fn","showSpinner","currentViewData","inx","haveChild","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","compFun","sortComparer","bind","direction","sortBy","rowDragAndDropModule","dragdIndex","dropdIndex","sortArgs","temp","paging","printMode","actArgs","actualResults","dataResult","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","templateFn","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","indentOutdentAction","modifiedRecords","stackedHeader","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","mergePersistTreeGridData","injectedModules","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","search","searchString","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","findnextRowElement","selectRow","row_1","clearSelection","findPreviousRowElement","rIndex","cIndex","summaryRowElement","previousElementSibling","infiniteScrollData","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","getGridColumns","member","toolbar","contextMenuItems","allowExcelExport","freezePresent","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","portals","isVue","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","refreshToolbarItems","renderComplete","destroyTemplateFn","toolbarElement","toolbarModule","getToolbar","indentID","outdentID","indentElement","outdentElement","afterGridRender","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","enableAdaptiveUI","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","enableVirtualMaskRow","triggerEvents","IsExpandCollapseClicked","bindGridEvents","rowSelecting","rowDeselecting","rowSelected","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","recordDoubleClick","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","persistSelection","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","toolbarClick","callBackPromise","toolbarargs","cellSelecting","cellselectingArgs","beginEdit","begineditArgs","isExpandRefresh","cellSave","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","cellsaveArgs","cellSaved","cellEdit","promise","batchAdd","beforeBatchSave","beforeBatchAdd","batchDelete","beforeBatchDelete","batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","actionBegin","dataManager","isQueryInvokedFromData","callBackPromise_2","actionComplete","updateTreeGridModel","ag","showChildSummary","refresh","selectedItem_1","selectedRecords","dropIndex","dropPosition","selectedRows","isFrozenGrid","movableContent","frozenContent","detailDataBound","contextMenuClick","contextMenuOpen","rowDragStartHelper","rowDragStart","rowDrag","isEdit","rowDrop","registeredTemplate","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","iconCss","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","enablePersistence","treeColumnTextAlign","textAlign","treeColumnField","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","updateTreeColumnTextAlign","closeEdit","getColumnByField","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","ignoreOnColumn","currentObject","val","ignoreInArrays","addOnPersist","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","visibleRecords","getVisibleRecords","sHeight","scrollHeight","clientHeight","getContent","goToPage","pageNo","pagerModule","updateExternalMessage","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","rowInfo_1","getCollapseExpandRecords","expandingArgs","expandCollapse","expandCollapseAllChildren","collapseArgs","setHeightForFrozenContent","updateExpandStateMapping","freeze","refreshScrollOffset","collapsingArgs","firstElementChild","scrollTop","getRowHeight","scrollBy","state","totalRecords","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","this_1","puniqueID_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","remoteExpand","localExpand","removeAttribute","flatDataRecords","deff","data_1","length_1","scrollHeightBeforeRefresh","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","getMovableRows","getFrozenRightRows","gridRowsObject","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","updateRowAndCellElements","updateResultModel","returnResult","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getFrozenRightRowByIndex","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cnt","isFrozen","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","outdent","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","rowDropped","rowsAdded","rowsRemoved","tObj","dropRows","orderToIndex","dropData","totalRecord","parentrow","request","selectedItemIndex","selectedItem","selectedRow","selectedRecord","record_1","eventTrigger","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","tempDataSource","idx","droppedRecord","proxy","removeFirstrowBorder","canremove","removeLastrowBorder","islastRowIndex","isEmptyRow","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","getBoundingClientRect","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","dropItemSpan","dropItemLeft","left","spanLeft","errorelem","errorValue","setStyleAttribute","border","box","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","updateModifiedRecords","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","getDatas","visualData","getDataInfo","getData","generateRows","virtualInfo","info","url","blockIndexes","getBlockIndexes","checkAndResetCache","clear","cache","movableCache","frozenRightCache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","isCollapsedStatePersist","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","updatePageSize","pageingDetails","updateSize","gridPagerModule","pageSizes","pagerObj","pagerdropdownModule","getLocalizedLabel","pageSize","propname","skip","size","take","dm_1","or","parents_1","floor","Toolbar","tool","refreshToolbar","toolbarClickHandler","indentEle","outdentEle","selectedrow","isCheckBoxSelection","Aggregate","GridAggregate","flatChildRecords","isSort","flatRecords","summaryLength","dataLength","getChildRecordsLength","summaryRowIndex","len_1","createSummaryItem","idx_1","currentIndex","summaryParent","length_2","itemData","summary","displayColumn","keys_1","getSummaryValues","summaryColumn","single","getFormatFromType","tempObj","requiresCount","summaryKey","sumData","toLowerCase","calculateAggregate","disp","value_1","summaryformat","Sort","GridSort","flatSortedData","updateModel","createdSortedRecords","sortParams","iterateSort","childSort","ColumnMenu","GridColumnMenu","getColumnMenu","columnMenuModule","ContextMenu","cmenu","addRow","editRecord","event","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","batchSave","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","frozenCols","columnObject","getColumnByIndex","added","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","changes","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","table","matrix","newlyAddedRecords","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","endIndex","rowPosition","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","isAddedRowByContextMenu","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","crudAction","beginAdd","keyPressed","lastCellTab","contentready","editActionEvents","gridDblClick","customCellSave","savePreviousRowPosition","beforeStartEdit","beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","dataRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","toolbarID","cellDetails","treeCell","afterCellSave","form","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","mRow","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","treeColIndex","l","data2","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","newlyAddedRecord","seletedRow","beginAddEdit","primaryKeys_2","selector","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","dataBoundArg","detaildataBound","setIndentVisibility","childRowExpand","rowExpandCollapse","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","getMovableVirtualRowByIndex","getRowCollection","getFrozenRightVirtualRowByIndex","isMovable","isRowObject","isFrozenRight","startIdx","rowCollection","virtualOtherAction","indexModifier","setTop","nextSetResIndex","lastIndex","root","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","getColumnOffset","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","gridTop","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","instance","virtualScrollHandlers","movableContainer","debounced50","debounce","prevTop","prevLeft","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","VirtualTreeFreezeRenderer","freezeRowGenerator","FreezeRowModelGenerator","virtualRenderer","serviceLoc","getRenderer","virtualHdrRenderer","FreezeContentRender","setPanel","movableCont","getMovableContent","minHeight","overflowX","renderFrozenWrapper","renderFrozenPlaceHolder","renderMovableWrapper","renderMovablePlaceHolder","tbl","movableTable","movableWrapper","movablePlaceholder","wrapper","getFrozenContent","setDebounce","movableEle","VirtualFreezeRenderer","ColumnVirtualTreeFreezeRenderer","ColumnFreezeContentRenderer","frozenRightCont","getFrozenRightContent","frzCont","getFrozenMode","ColumnVirtualFreezeRenderer","VirtualTreeFreezeHdrRenderer","rfshMovable","VirtualFreezeHdrRenderer","Freeze","FreezeColumn","dblClickHandler","instantiateRenderer","FreezeRender","ColumnFreezeHeaderRenderer","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","actions","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow","index.TreeGrid","index.Filter","index.Page","index.Sort","index.Reorder","index.Toolbar","index.Aggregate","index.Resize","index.ColumnMenu","index.ExcelExport","index.PdfExport","index.CommandColumn","index.ContextMenu","index.Edit","index.Selection","index.VirtualScroll","index.DetailRow","index.RowDD","index.Freeze","index.ColumnChooser","index.Logger","index.InfiniteScroll"],"mappings":"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WACD1f,EAASjgB,UAAW,eAAY,IACnC8E,IACI66B,WACD1f,EAASjgB,UAAW,gBAAa,IACpC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,gBAAa,IACpC8E,IACI66B,WACD1f,EAASjgB,UAAW,eAAY,IACnC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,wBAAqB,IAC5C8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,eAAY,IACnC8E,IACI66B,WACD1f,EAASjgB,UAAW,oBAAiB,IACxC8E,IACI66B,WACD1f,EAASjgB,UAAW,gBAAa,IACpC8E,IACI66B,WACD1f,EAASjgB,UAAW,wBAAqB,IAC5C8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,wBAAqB,IAC5C8E,IACI66B,WACD1f,EAASjgB,UAAW,mBAAgB,IACvC8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,oBAAiB,IACxC8E,IACIc,YAAS,IACVqa,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,mBAAgB,IACvC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,oBAAiB,IACxC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,oBAAiB,IACxC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,mBAAgB,IACvC8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,eAAY,IACnC8E,IACI66B,WACD1f,EAASjgB,UAAW,iBAAc,IACrC8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,iBAAc,IACrC8E,IACI66B,WACD1f,EAASjgB,UAAW,iBAAc,IACrC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,oBAAiB,IACxC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,mBAAgB,IACvC8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,uBAAoB,IAC3C8E,IACI66B,WACD1f,EAASjgB,UAAW,iBAAc,IACrC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,cAAW,IAClC8E,IACI66B,WACD1f,EAASjgB,UAAW,mBAAgB,IACvC8E,IACI66B,WACD1f,EAASjgB,UAAW,yBAAsB,IAC7C8E,IACI66B,WACD1f,EAASjgB,UAAW,cAAW,IAClC8E,IACIc,YAAU,IACXqa,EAASjgB,UAAW,uBAAoB,IAC3C8E,IACI26B,aAAYnuB,IACb2O,EAASjgB,UAAW,wBAAqB,IAC5C8E,IACIc,YAAS,IACVqa,EAASjgB,UAAW,uBAAoB,IAC3C8E,IACIc,YAAS,IACVqa,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,uBAAoB,IAC3C8E,IACI66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"}
1
+ {"version":3,"file":"ej2-treegrid.min.js","sources":["../../src/treegrid/utils.js","../../src/treegrid/actions/crud-actions.js","../../src/treegrid/models/column.js","../../src/treegrid/models/filter-settings.js","../../src/treegrid/models/textwrap-settings.js","../../src/treegrid/actions/logger.js","../../src/treegrid/actions/clipboard.js","../../src/treegrid/base/constant.js","../../src/treegrid/actions/selection.js","../../src/treegrid/actions/print.js","../../src/treegrid/models/search-settings.js","../../src/treegrid/models/selection-settings.js","../../src/treegrid/renderer/render.js","../../src/treegrid/base/data.js","../../src/treegrid/enum.js","../../src/treegrid/models/page-settings.js","../../src/treegrid/models/summary.js","../../src/treegrid/models/edit-settings.js","../../src/treegrid/models/sort-settings.js","../../src/treegrid/models/infinite-scroll-settings.js","../../src/treegrid/base/treegrid.js","../../src/treegrid/actions/reorder.js","../../src/treegrid/actions/resize.js","../../src/treegrid/actions/rowdragdrop.js","../../src/treegrid/models/rowdrop-settings.js","../../src/treegrid/renderer/virtual-row-model-generator.js","../../src/treegrid/actions/filter.js","../../src/treegrid/actions/excel-export.js","../../src/treegrid/actions/pdf-export.js","../../src/treegrid/actions/page.js","../../src/treegrid/actions/toolbar.js","../../src/treegrid/actions/summary.js","../../src/treegrid/actions/sort.js","../../src/treegrid/actions/column-menu.js","../../src/treegrid/actions/context-menu.js","../../src/treegrid/actions/batch-edit.js","../../src/treegrid/actions/edit.js","../../src/treegrid/actions/command-column.js","../../src/treegrid/actions/detail-row.js","../../src/treegrid/renderer/virtual-tree-content-render.js","../../src/treegrid/actions/virtual-scroll.js","../../src/treegrid/renderer/virtual-tree-freeze-render.js","../../src/treegrid/actions/freeze-column.js","../../src/treegrid/actions/column-chooser.js","../../src/treegrid/actions/infinite-scroll.js","../../src/global.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[i].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[i]);\n if (hasChild) {\n datas.push(records[i]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords.filter(function (item) { return !item.isSummaryRow; });\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[id][value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[control.idMapping] === currentData_1[control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData_1[control.idMapping]) {\n if (!control.enableImmutableMode && parentData.childRecords.length === parentData['Children'].length) {\n parentData['childRecords'].splice(p, 1);\n }\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n return \"break\";\n }\n }\n else {\n if (action === 'edit') {\n for (j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(treeData[i], keys[j]) && ((control.editSettings.mode !== 'Cell'\n || (!isNullOrUndefined(batchChanges) && batchChanges[changedRecords].length === 0))\n || keys[j] === columnName)) {\n var editedData = getParentData(control, modifiedData[k].uniqueID);\n treeData[i][keys[j]] = modifiedData[k][keys[j]];\n if (editedData && editedData.taskData) {\n editedData.taskData[keys[j]] = editedData[keys[j]] = treeData[i][keys[j]];\n }\n }\n }\n }\n else if (action === 'add' || action === 'batchsave') {\n var index = void 0;\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData.taskData[control.parentIdMapping] = treeData[i][control.idMapping];\n treeData.splice(i + 1, 0, originalData.taskData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(treeData[i], control.childMapping)) {\n treeData[i][control.childMapping] = [];\n }\n treeData[i][control.childMapping].push(originalData.taskData);\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n treeData.splice(i + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i + 1], action, control, isSelfReference, originalData);\n }\n }\n else if (!addRowIndex) {\n index = 0;\n treeData.splice(index, 0, originalData.taskData);\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n treeData.splice(i, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n }\n return \"break\";\n }\n }\n else if (!isNullOrUndefined(treeData[i][control.childMapping])) {\n if (removeChildRecords(treeData[i][control.childMapping], modifiedData[k], action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference);\n }\n }\n };\n while (i-- && i >= 0) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n }\n }\n}\n/**\n * Performs Add action to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {Object[]} treeData - Tree Grid data source\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord) {\n var value;\n var isSkip = false;\n var currentViewRecords = control.grid.getCurrentViewRecords();\n value = extend({}, details.value);\n value = getPlainData(value);\n switch (control.editSettings.newRowPosition) {\n case 'Top':\n treeData.unshift(value);\n isSkip = true;\n break;\n case 'Bottom':\n treeData.push(value);\n isSkip = true;\n break;\n case 'Above':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n value = extend({}, currentViewRecords[addRowIndex + 1]);\n value = getPlainData(value);\n }\n break;\n case 'Below':\n case 'Child':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var currentdata = currentViewRecords[addRowIndex];\n if (!isNullOrUndefined(currentdata) && currentdata[primaryKeys] === details.value[primaryKeys] || selectedIndex !== -1) {\n value = extend({}, currentdata);\n }\n else {\n value = extend({}, details.value);\n }\n value = getPlainData(value);\n var internalProperty = 'internalProperties';\n control.editModule[internalProperty].taskData = value;\n }\n if (selectedIndex === -1) {\n treeData.unshift(value);\n isSkip = true;\n }\n }\n return { value: value, isSkip: isSkip };\n}\n/**\n * @param {ITreeData[]} childRecords - Child Records collection\n * @param {Object} modifiedData - Modified data in crud action\n * @param {string} action - crud action type\n * @param {string} key - Primary key field name\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether Self Referential data binding\n * @param {ITreeData} originalData - Non updated data from data source, of edited data\n * @param {string} columnName - column field name\n * @returns {boolean} Returns whether child records exists\n */\nexport function removeChildRecords(childRecords, modifiedData, action, key, control, isSelfReference, originalData, columnName) {\n var isChildAll = false;\n var j = childRecords.length;\n while (j-- && j >= 0) {\n if (childRecords[j][key] === modifiedData[key] ||\n (isSelfReference && childRecords[j][control.parentIdMapping] === modifiedData[control.idMapping])) {\n if (action === 'edit') {\n var keys = Object.keys(modifiedData);\n var editedData = getParentData(control, modifiedData.uniqueID);\n for (var i = 0; i < keys.length; i++) {\n if (Object.prototype.hasOwnProperty.call(childRecords[j], keys[i]) && (control.editSettings.mode !== 'Cell' || keys[i] === columnName)) {\n editedData[keys[i]] = editedData.taskData[keys[i]] = childRecords[j][keys[i]] = modifiedData[keys[i]];\n if (control.grid.editSettings.mode === 'Normal' && control.editSettings.mode === 'Cell') {\n var editModule = 'editModule';\n control.grid.editModule[editModule].editRowIndex = modifiedData.index;\n control.grid.editModule[editModule].updateCurrentViewData(modifiedData);\n }\n }\n }\n break;\n }\n else if (action === 'add' || action === 'batchsave') {\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData[control.parentIdMapping] = childRecords[j][control.idMapping];\n childRecords.splice(j + 1, 0, originalData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(childRecords[j], control.childMapping)) {\n childRecords[j][control.childMapping] = [];\n }\n childRecords[j][control.childMapping].push(originalData.taskData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n childRecords.splice(j, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n childRecords.splice(j + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n }\n else {\n childRecords.splice(j, 1);\n if (!childRecords.length) {\n isChildAll = true;\n }\n }\n }\n else if (!isNullOrUndefined(childRecords[j][control.childMapping])) {\n if (removeChildRecords(childRecords[j][control.childMapping], modifiedData, action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference);\n }\n }\n }\n return isChildAll;\n}\n/**\n * @param {string} key - Primary key field name\n * @param {ITreeData} record - Parent Record which has to be updated\n * @param {string} action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether self referential data binding\n * @param {ITreeData} child - Specifies child record\n * @returns {void}\n */\nexport function updateParentRow(key, record, action, control, isSelfReference, child) {\n if ((control.editSettings.newRowPosition === 'Above' || control.editSettings.newRowPosition === 'Below')\n && ((action === 'add' || action === 'batchsave')) && !isNullOrUndefined(child.parentItem)) {\n var parentData = getParentData(control, child.parentItem.uniqueID);\n parentData.childRecords.push(child);\n }\n else {\n var currentRecords = control.grid.getCurrentViewRecords();\n var index_1;\n currentRecords.map(function (e, i) { if (e[key] === record[key]) {\n index_1 = i;\n return;\n } });\n if (control.enableVirtualization && isNullOrUndefined(index_1)) {\n var updatedParent = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n record = updatedParent;\n }\n if (!isNullOrUndefined(index_1)) {\n record = currentRecords[index_1];\n }\n if (control.enableVirtualization && isNullOrUndefined(record) && !isNullOrUndefined(child)) {\n record = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n }\n if (!isSelfReference && !isNullOrUndefined(record.childRecords) && record.childRecords.length) {\n record.hasChildRecords = true;\n }\n else {\n record.hasChildRecords = false;\n }\n if (action === 'add' || action === 'batchsave') {\n record.expanded = true;\n record.hasChildRecords = true;\n if (control.sortSettings.columns.length && isNullOrUndefined(child)) {\n child = currentRecords.filter(function (e) {\n if (e.parentUniqueID === record.uniqueID) {\n return e;\n }\n else {\n return null;\n }\n });\n }\n var childRecords = child ? child instanceof Array ? child[0] : child : currentRecords[index_1 + 1];\n if (control.editSettings.newRowPosition !== 'Below') {\n if (!Object.prototype.hasOwnProperty.call(record, 'childRecords')) {\n record.childRecords = [];\n }\n else {\n if (!isNullOrUndefined(child) && record[key] !== child[key]) {\n record.childRecords.push(child);\n }\n }\n if (record.childRecords.indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record.childRecords.unshift(childRecords);\n }\n if (isSelfReference) {\n if (!Object.prototype.hasOwnProperty.call(record, control.childMapping)) {\n record[control.childMapping] = [];\n }\n if (record[control.childMapping].indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record[control.childMapping].unshift(childRecords);\n }\n }\n }\n }\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var data = control.grid.dataSource instanceof DataManager ?\n control.grid.dataSource.dataSource.json : control.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n if (data[i][primaryKeys] === record[primaryKeys]) {\n data[i] = record;\n break;\n }\n }\n control.grid.setRowData(key, record);\n var row = control.getRowByIndex(index_1);\n if (control.editSettings.mode === 'Batch') {\n if (action === 'add') {\n row = control.getRows()[control.grid.getCurrentViewRecords().indexOf(record)];\n }\n else {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index_1);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n var index_2 = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index_2 = index_2 + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[index_2] ? row.cells[index_2]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n if (control.enableImmutableMode && control['action'] === 'indenting' || control['action'] === 'outdenting') {\n control.renderModule.RowModifier({\n data: record, row: row\n });\n }\n }\n }\n}\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n /**\n * Update the State changes reflected for TreeGrid columndirective in react platform.\n *\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent['isReact'] && keys[i] === 'template') {\n var refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'].renderModule[refreshReactColumnTemplateByUid](this.uid);\n }\n }\n };\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Represents the Tree Grid predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the textwrap behavior of the TreeGrid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Logger as GridLogger, Grid, detailLists } from '@syncfusion/ej2-grids';\n/**\n * Logger module for TreeGrid\n *\n * @hidden\n */\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar WARNING = '[EJ2TreeGrid.Warning]';\nvar ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar INFO = '[EJ2TreeGrid.Info]';\nvar IsRowDDEnabled = false;\nvar Logger = /** @class */ (function (_super) {\n __extends(Logger, _super);\n function Logger(parent) {\n var _this = this;\n Grid.Inject(GridLogger);\n _this = _super.call(this, parent) || this;\n return _this;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[i]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n var message = item.generateMessage(args, this.parent, cOp.options);\n message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');\n if (IsRowDDEnabled && type[i] === 'primary_column_missing') {\n message = message.replace('Editing', 'Row DragAndDrop');\n IsRowDDEnabled = false;\n }\n var index = message.indexOf('https');\n var gridurl = message.substring(index);\n if (type[i] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[i] === 'primary_column_missing' || type[i] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[i] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[i] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[i] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[i] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[i] === 'datasource_syntax_mismatch') {\n if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n else {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n };\n Logger.prototype.treeLog = function (types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter(function (column) { return column.isPrimaryKey; }).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (var i = 0; i < type.length; i++) {\n var item = treeGridDetails[type[i]];\n var cOp = item.check(args, treeGrid);\n if (cOp.success) {\n var message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n };\n return Logger;\n}(GridLogger));\nexport { Logger };\nexport var treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check: function (args, parent) {\n var opt = { success: false };\n if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)\n && isNullOrUndefined(parent.parentIdMapping)) ||\n (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||\n (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {\n opt = { success: true };\n }\n return opt;\n },\n generateMessage: function () {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n (BASE_DOC_URL + \"/api/treegrid#childmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#idmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#$parentidmapping\");\n }\n }\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Clipboard as GridClipboard } from '@syncfusion/ej2-grids';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n *\n * @hidden\n */\nvar TreeClipboard = /** @class */ (function (_super) {\n __extends(TreeClipboard, _super);\n function TreeClipboard(parent, serviceLocator) {\n var _this = _super.call(this, parent.grid, serviceLocator) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\n _this.serviceLocator = serviceLocator;\n return _this;\n }\n TreeClipboard.prototype.setCopyData = function (withHeader) {\n var copyContent = 'copyContent';\n var getCopyData = 'getCopyData';\n var isSelect = 'isSelect';\n var uniqueID = 'uniqueID';\n var currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[copyContent] = '';\n var rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort(function (a, b) {\n return a - b;\n });\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.treeCopyContent += '\\n';\n }\n if (!rows[selectedIndexes[i]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[i][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[i], rows, withHeader, i);\n }\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += this[copyContent];\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n if (this.treeGridParent.copyHierarchyMode === 'Child' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.childContentData(currentRecords, selectedIndexes[i], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.treeGridParent.getVisibleColumns()[i].headerText;\n }\n this[getCopyData](headerTextArray, false, '\\t', withHeader);\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n var args = {\n data: this.treeCopyContent,\n cancel: false\n };\n this.treeGridParent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this[copyContent] = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this[isSelect] = true;\n this.copiedUniqueIdCollection = [];\n this.treeCopyContent = '';\n }\n else {\n _super.prototype.setCopyData.call(this, withHeader);\n }\n }\n };\n TreeClipboard.prototype.parentContentData = function (currentRecords, selectedIndex, rows, withHeader, index) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var level = 'level';\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem])) {\n var treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n if (index > 0) {\n this.treeCopyContent = this.treeCopyContent + this[copyContent] + '\\n';\n }\n else {\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n break;\n }\n }\n }\n }\n }\n };\n TreeClipboard.prototype.copy = function (withHeader) {\n _super.prototype.copy.call(this, withHeader);\n };\n TreeClipboard.prototype.paste = function (data, rowIndex, colIndex) {\n _super.prototype.paste.call(this, data, rowIndex, colIndex);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns clipboard module name\n */\n TreeClipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n TreeClipboard.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n TreeClipboard.prototype.childContentData = function (currentRecords, selectedIndex, rows, withHeader) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var childRecords = 'childRecords';\n var hasChildRecords = 'hasChildRecords';\n var uniqueID = 'uniqueID';\n if (currentRecords[selectedIndex][hasChildRecords]) {\n var childData = currentRecords[selectedIndex][childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[i][uniqueID]) && currentRecords[j][uniqueID] === childData[i][uniqueID]) {\n if ((!isNullOrUndefined(rows[j])) && !rows[j].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += ('\\n' + this[copyContent]);\n this[copyContent] = '';\n this.copiedUniqueIdCollection.push(uniqueid);\n this.childContentData(currentRecords, j, rows, withHeader);\n }\n }\n break;\n }\n }\n }\n }\n };\n return TreeClipboard;\n}(GridClipboard));\nexport { TreeClipboard };\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var headerContent = 'e-headercontent';\n/** @hidden */\nexport var movableContent = 'e-movablecontent';\n/** @hidden */\nexport var movableHeader = 'e-movableheader';\n/** @hidden */\nexport var frozenContent = 'e-frozencontent';\n/** @hidden */\nexport var frozenHeader = 'e-frozenheader';\n/** @hidden */\nexport var content = 'e-content';\n/** @hidden */\nexport var table = 'e-table';\n/** @hidden */\nexport var leftRight = 'Left-Right';\n/** @hidden */\nexport var frozenRight = 'frozen-right';\n/** @hidden */\nexport var frozenLeft = 'frozen-left';\n/** @hidden */\nexport var dataColIndex = 'data-colindex';\n/** @hidden */\nexport var ariaColIndex = 'aria-colindex';\n/** @hidden */\nexport var dataRowIndex = 'data-rowindex';\n/** @hidden */\nexport var ariaRowIndex = 'aria-rowindex';\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.searchingRecords = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var stackedHeader = 'stackedHeader';\n var columnModel = 'columnModel';\n var columns = this.parent[stackedHeader] ? this.parent[columnModel] : (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = columns[col].uid;\n }\n }\n var headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (var j = 0; j < headerCelllength; j++) {\n var headercell = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[j];\n if (headercell.getAttribute('e-mappinguid') === mappingUid) {\n columnIndex = j;\n }\n }\n return columnIndex;\n };\n Selection.prototype.headerCheckbox = function () {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n var value = false;\n var rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n if (!isNullOrUndefined(headerElement)) {\n headerElement.insertBefore(checkWrap, headerElement.firstChild);\n }\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n else if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length > 0) {\n var checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n var checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n };\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox', 'aria-label': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n if (this.parent.allowTextWrap) {\n checkWrap.querySelector('.e-frame').style.width = '18px';\n }\n if (data.checkboxState === 'indeterminate') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-stop');\n }\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\n };\n Selection.prototype.columnCheckbox = function (container) {\n var checkWrap = this.renderColumnCheckbox(container);\n var containerELe = container.cell.querySelector('.e-treecolumn-container');\n if (!isNullOrUndefined(containerELe)) {\n if (!container.cell.querySelector('.e-hierarchycheckbox')) {\n containerELe.insertBefore(checkWrap, containerELe.querySelectorAll('.e-treecell')[0]);\n }\n }\n else {\n var spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n var data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n var divEle = this.parent.createElement('div', { className: 'e-treecheckbox-container' });\n divEle.appendChild(checkWrap);\n divEle.appendChild(spanEle);\n container.cell.appendChild(divEle);\n }\n };\n Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n var flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n var checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n var keys = Object.keys(record);\n for (var j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(flatRecord, keys[j])) {\n flatRecord[keys[j]] = record[keys[j]];\n }\n }\n this.traverSelection(record, checkboxState, false);\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n };\n Selection.prototype.traverSelection = function (record, checkboxState, ischildItem) {\n var length = 0;\n this.updateSelectedItems(record, checkboxState);\n if (!ischildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n if (record.childRecords && this.parent.autoCheckHierarchy) {\n var childRecords = record.childRecords;\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords.length;\n for (var count = 0; count < length; count++) {\n if (!childRecords[count].isSummaryRow) {\n if (childRecords[count].hasChildRecords) {\n this.traverSelection(childRecords[count], checkboxState, true);\n }\n else {\n this.updateSelectedItems(childRecords[count], checkboxState);\n }\n }\n }\n }\n };\n Selection.prototype.getFilteredChildRecords = function (childRecords) {\n var _this = this;\n var filteredChildRecords = childRecords.filter(function (e) {\n return _this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n };\n Selection.prototype.updateParentSelection = function (parentRecord) {\n var length = 0;\n var childRecords = [];\n var record = getParentData(this.parent, parentRecord.uniqueID);\n if (record && record.childRecords) {\n childRecords = record.childRecords;\n }\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords && childRecords.length;\n var indeter = 0;\n var checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (var i = 0; i < childRecords.length; i++) {\n var currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n var checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && (!record.hasFilteredChildRecords || isNullOrUndefined(record.hasFilteredChildRecords)) && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check') {\n record.checkboxState = 'check';\n }\n else if ((checkChildRecords === 0 && indeter === 0) || (checkChildRecords === 0 && record.hasFilteredChildRecords && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check')) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n //This property used to maintain the check state of the currentview data after clear filtering\n var multiFilterCheckState = false;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n if (this.parent.grid.searchSettings.key.length) {\n this.searchingRecords = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n multiFilterCheckState = true;\n }\n else {\n multiFilterCheckState = false;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length && !this.parent.grid.searchSettings.key.length) {\n this.filteredList = [];\n }\n if (this.searchingRecords.length && !isNullOrUndefined(checkAll)) {\n this.filteredList = this.searchingRecords;\n }\n }\n var data;\n if (this.parent.filterModule.filteredResult.length === 0 && this.parent.getCurrentViewRecords().length === 0 &&\n this.parent.filterSettings.columns.length > 0) {\n data = this.filteredList;\n }\n else {\n data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList : this.parent.flatData;\n }\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n if (multiFilterCheckState) {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var tr = this.parent.getRows()[recordIndex];\n var checkbox;\n if (recordIndex > -1) {\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n var chkstate = checkState === 'check' ? 'checked' : checkState === 'uncheck' ? 'unchecked' : 'mixed';\n tr.querySelector('.e-treecheckselect').setAttribute('aria-checked', checkState === 'check' ? 'true' : checkState === 'uncheck' ? 'false' : 'mixed');\n tr.querySelector('.e-frame').setAttribute('title', 'checkbox' + chkstate);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords && record.childRecords.length > 0) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import * as events from '../base/constant';\nimport { Grid, getObject, Print as GridPrint } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Print module\n *\n * @hidden\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Print(parent) {\n this.parent = parent;\n Grid.Inject(GridPrint);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Print module name\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Print.prototype.addEventListener = function () {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n };\n Print.prototype.removeEventListener = function () {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n };\n Print.prototype.printTreeGrid = function (printGrid) {\n var grid = getObject('printgrid', printGrid);\n var gridElement = getObject('element', printGrid);\n grid.addEventListener(events.queryCellInfo, this.parent.grid.queryCellInfo);\n grid.addEventListener(events.rowDataBound, this.parent.grid.rowDataBound);\n grid.addEventListener(events.beforeDataBound, this.parent.grid.beforeDataBound);\n addClass([gridElement], 'e-treegrid');\n };\n Print.prototype.print = function () {\n this.parent.grid.print();\n };\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the selection behavior of the TreeGrid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend, CellRenderer } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed) {\n args.row.style.display = 'none';\n }\n }\n if (isRemoteData(this.parent) && !isOffline(this.parent)) {\n var proxy_1 = this.parent;\n var parentrec = this.parent.getCurrentViewRecords().filter(function (rec) {\n return getValue(proxy_1.idMapping, rec) === getValue(proxy_1.parentIdMapping, data);\n });\n if (parentrec.length > 0 && !parentrec[0].isSummaryRow) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n args.cell.setAttribute('aria-expanded', data.expanded ? 'true' : 'false');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n if (args.column.template) {\n args.cell.innerHTML = null;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('data-colindex', colindex + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n args.column.template = treeColumn.template;\n args.column[templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[templateFn](args.data, this.parent, 'template', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[portals])) {\n this.parent.grid[portals] = this.parent[portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Render.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.parent.grid.getRowsObject();\n var indent = _this.parent.grid.getIndentCount();\n var cellIndex = _this.parent.grid.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n var cell = rowsObj[j][cells][cellIndex];\n var cellRenderer = new CellRenderer(_this.parent.grid, _this.parent.grid.serviceLocator);\n var td = _this.parent.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n var treecell = _this.parent.getRows()[j].cells[cellIndex];\n _this.cellRender({ data: rowsObj[j].data, cell: treecell, column: cell.column });\n }\n }\n });\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = <DataManager>this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (Object.keys(data).length === 0 && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var tempData = data[i];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[i];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var records = args.result;\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (!this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (!this.parent.loadChildOnDemand) {\n for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records) && !((this.parent.loadChildOnDemand) && isCountRequired(this.parent) && !isNullOrUndefined(this.parent['dataResults']['expandRecord']))) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result_1], true);\n }\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n var keys = Object.keys(data);\n for (var i = 0, len = keys.length; i < len; i++) {\n var currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if ((!isNullOrUndefined(currentData[this.parent.childMapping]) && !isCountRequired(this.parent)) ||\n ((currentData[this.parent.hasChildMapping]) && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n this.parent['infiniteScrollData'].push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n if (this.parent.allowRowDragAndDrop && !isNullOrUndefined(this.parent.rowDragAndDropModule['draggedRecord']) &&\n this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n modifiedData.splice(dragdIndex, 1);\n var dropdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n modifiedData.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n modifiedData.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n ContextMenuItems[ContextMenuItems[\"RowIndent\"] = 16] = \"RowIndent\";\n ContextMenuItems[ContextMenuItems[\"RowOutdent\"] = 17] = \"RowOutdent\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the TreeGrid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n __decorate([\n Property('All')\n ], PageSettings.prototype, \"pageSizeMode\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, getEnumValue, compile } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { CellType } from '@syncfusion/ej2-grids';\n/**\n * Configures the TreeGrid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.intl = new Internationalization();\n _this.templateFn = {};\n return _this;\n }\n /**\n * Custom format function\n *\n * @hidden\n * @param {string} cultureName - culture name to format\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = this.getFormatFunction(this.format);\n }\n };\n /**\n * @param {NumberFormatOptions | DateFormatOptions} format - formatting options for number and date values\n * @hidden\n * @returns {Function} - return formatter function\n */\n AggregateColumn.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n /**\n * @hidden\n * @returns {Function} - Returns formatter function\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - updates aggregate properties without change detection\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], AggregateRow.prototype, \"showChildSummary\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Configures the edit behavior of the TreeGrid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Cell')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of TreeGrid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the infinite scroll behavior of Tree Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend, merge } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\nimport * as literals from '../base/constant';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.indentOutdentAction = 'indentOutdentAction';\n _this.modifiedRecords = [];\n _this.stackedHeader = false;\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.infiniteScrollData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n var freezePresent = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'freeze';\n });\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || freezePresent.length) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n var IsRowDDInjected = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'rowDragAndDrop';\n });\n if (this.allowRowDragAndDrop || IsRowDDInjected.length) {\n if ((!isNullOrUndefined(this.toolbar) && (this.toolbar['includes']('Indent') ||\n this.toolbar['includes']('Outdent')))) {\n this.isIndentEnabled = true;\n }\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n if (this.isVue) {\n this.grid.isVue = true;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n var root = 'root';\n this.grid[root] = this[root] ? this[root] : this;\n this.grid.appendTo(gridContainer);\n if (this.isIndentEnabled) {\n this.refreshToolbarItems();\n }\n this.wireEvents();\n this.renderComplete();\n var destroyTemplate = 'destroyTemplate';\n var destroyTemplateFn = this.grid[destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[destroyTemplate] = function (args, index) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[portals]))) {\n _this.clearTemplate(args, index);\n }\n };\n };\n TreeGrid.prototype.refreshToolbarItems = function () {\n var toolbarElement = this.toolbarModule.getToolbar();\n var indentID = this.element.id + '_gridcontrol_indent';\n var outdentID = this.element.id + '_gridcontrol_outdent';\n var indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n var outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this, this.grid.serviceLocator);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n this.grid.enableVirtualMaskRow = false; // Need to update in virtual mask row feature implementation.\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.IsExpandCollapseClicked = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))\n && (!isNullOrUndefined(args.data) && args.data['hasChildRecords'])) {\n args.cancel = true;\n return;\n }\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowDeselecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowDeselecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[action] === 'expand' || _this.dataResults[action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[index], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n if (args.action.requestType !== 'infiniteScroll') {\n _this.infiniteScrollData = [];\n }\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 && _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (args.action === 'filter') {\n if (_this.filterModule['currentFilterObject'] !== '' && _this.enableVirtualization && !_this.initialRender) {\n _this.expandAll();\n }\n }\n if (args.requestType === 'searching') {\n if (_this.searchSettings.key !== '' && _this.enableVirtualization && !_this.initialRender) {\n _this.expandAll();\n }\n }\n if (args.action === 'clearFilter' && _this.enableCollapseAll) {\n _this.collapseAll();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var selectedItem_1 = [_this.selectedRecords];\n var actionArgs = {\n data: selectedItem_1,\n dropIndex: _this.dropIndex,\n dropPosition: _this.dropPosition,\n modifiedRecords: _this.modifiedRecords,\n requestType: _this.action,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n var currentPageItem = _this.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === selectedItem_1[0].uniqueID;\n });\n if (!currentPageItem.length) {\n _this.refreshToolbarItems();\n }\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = _this.modifiedRecords = [];\n }\n else {\n if (_this.grid.isFrozenGrid() && _this.enableVirtualization && args['tableName'] === 'movable') {\n var movableContent = _this.grid.element.querySelector('.' + literals.movableContent);\n var frozenContent = _this.grid.element.querySelector('.' + literals.frozenContent);\n movableContent.style.height = frozenContent.style.height = 'auto';\n }\n _this.trigger(events.actionComplete, args);\n }\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (<DataManager>this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[guid] = this.editSettings[guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n case 'Indent':\n case ContextMenuItems.RowIndent:\n items.push({ text: this.l10n.getConstant('RowIndent'),\n target: '.e-content', iconCss: 'e-indent e-icons', id: this.element.id + '_gridcontrol_cmenu_Indent' });\n break;\n case 'Outdent':\n case ContextMenuItems.RowOutdent:\n items.push({ text: this.l10n.getConstant('RowOutdent'),\n target: '.e-content', iconCss: 'e-outdent e-icons', id: this.element.id + '_gridcontrol_cmenu_Outdent' });\n break;\n default:\n items.push(this.contextMenuItems[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n TreeGrid.prototype.getGridToolbar = function () {\n if (this.toolbar) {\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[i]) {\n case 'Search':\n case ToolbarItem.Search:\n items.push('Search');\n break;\n case 'Print':\n case ToolbarItem.Print:\n items.push('Print');\n break;\n case 'ExpandAll':\n case ToolbarItem.ExpandAll:\n tooltipText = this.l10n.getConstant('ExpandAll');\n items.push({ text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-expand', id: this.element.id + '_gridcontrol_expandall' });\n break;\n case 'CollapseAll':\n case ToolbarItem.CollapseAll:\n tooltipText = this.l10n.getConstant('CollapseAll');\n items.push({ text: tooltipText,\n tooltipText: tooltipText, prefixIcon: 'e-collapse', id: this.element.id + '_gridcontrol_collapseall'\n });\n break;\n case 'Indent':\n case ToolbarItem.RowIndent:\n tooltipText = this.l10n.getConstant('RowIndent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-indent', id: this.element.id + '_gridcontrol_indent'\n });\n break;\n case 'Outdent':\n case ToolbarItem.RowOutdent:\n tooltipText = this.l10n.getConstant('RowOutdent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n TreeGrid.prototype.getGridColumns = function (columns, isEmptyColumnModel, index) {\n if (isEmptyColumnModel === void 0) { isEmptyColumnModel = true; }\n if (index === void 0) { index = 0; }\n var column = columns;\n var stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n var treeGridColumn;\n var gridColumn;\n if (this.columnModel.length == 0) {\n index = index === 0 ? -1 : index;\n }\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[i].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[i] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[i];\n }\n else {\n for (var _i = 0, _a = Object.keys(column[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, this.columnModel.length - 1);\n treeGridColumn[prop] = column[i][prop];\n }\n else if (this.initialRender && !isNullOrUndefined(treeColumn) && this.enablePersistence && prop === 'edit') {\n gridColumn[prop] = treeGridColumn[prop] = treeColumn[prop];\n }\n else if (!(treeColumn) || prop !== 'sortComparer') {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n if (!isNullOrUndefined(this.columnModel[this.treeColumnIndex]) && this.enableRtl) {\n if (gridColumn.field === this.columnModel[this.treeColumnIndex].field) {\n if (isNullOrUndefined(this.treeColumnTextAlign)) {\n this.treeColumnTextAlign = this.columnModel[this.treeColumnIndex].textAlign;\n this.treeColumnField = this.columnModel[this.treeColumnIndex].field;\n }\n gridColumn.textAlign = 'Right';\n }\n }\n }\n return gridColumnCollection;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeGridModel} newProp - properties details which has to be modified\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.onPropertyChanged = function (newProp) {\n var properties = Object.keys(newProp);\n var requireRefresh = false;\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'columns':\n this.grid.columns = this.getGridColumns(this.columns);\n break;\n case 'treeColumnIndex':\n this.grid.refreshColumns();\n break;\n case 'allowPaging':\n this.grid.allowPaging = this.allowPaging;\n break;\n case 'pageSettings':\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n requireRefresh = true;\n break;\n case 'enableVirtualization':\n this.grid.enableVirtualization = this.enableVirtualization;\n break;\n case 'enableColumnVirtualization':\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n break;\n case 'toolbar':\n this.grid.toolbar = this.getGridToolbar();\n break;\n case 'allowSelection':\n this.grid.allowSelection = this.allowSelection;\n break;\n case 'selectionSettings':\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n break;\n case 'allowSorting':\n this.grid.allowSorting = this.allowSorting;\n break;\n case 'allowMultiSorting':\n this.grid.allowMultiSorting = this.allowMultiSorting;\n break;\n case 'sortSettings':\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n break;\n case 'searchSettings':\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n break;\n case 'allowFiltering':\n this.grid.allowFiltering = this.allowFiltering;\n break;\n case 'filterSettings':\n if (!this.initialRender) {\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n }\n break;\n case 'showColumnMenu':\n this.grid.showColumnMenu = this.showColumnMenu;\n break;\n case 'allowRowDragAndDrop':\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n break;\n case 'aggregates':\n this.grid.aggregates = getActualProperties(this.aggregates);\n break;\n case 'enableInfiniteScrolling':\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n break;\n case 'dataSource':\n this.isLocalData = (!(this.dataSource instanceof DataManager) || (!isNullOrUndefined(this.dataSource.ready))\n || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.convertTreeData(this.dataSource);\n if (this.isLocalData) {\n if (isCountRequired(this)) {\n var count = getValue('count', this.dataSource);\n this.grid.dataSource = { result: this.flatData, count: count };\n }\n else {\n var data = this.dataSource;\n this.grid.dataSource = !(data instanceof DataManager) ?\n this.flatData : new DataManager(data.dataSource, data.defaultQuery, data.adaptor);\n }\n if (this.enableVirtualization) {\n this.grid.contentModule.isDataSourceChanged = true;\n }\n }\n else {\n this.bindedDataSource();\n if (this.enableVirtualization) {\n this.grid.contentModule.removeEventListener();\n this.grid.contentModule.eventListener('on');\n this.grid.contentModule.renderTable();\n }\n }\n break;\n case 'query':\n this.grid.query = this.query;\n break;\n case 'enableCollapseAll':\n if (newProp[prop]) {\n this.collapseAll();\n }\n else {\n this.expandAll();\n }\n break;\n case 'expandStateMapping':\n this.grid.refresh();\n break;\n case 'gridLines':\n this.grid.gridLines = this.gridLines;\n break;\n case 'rowTemplate':\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n break;\n case 'frozenRows':\n this.grid.frozenRows = this.frozenRows;\n break;\n case 'frozenColumns':\n this.grid.frozenColumns = this.frozenColumns;\n break;\n case 'rowHeight':\n this.grid.rowHeight = this.rowHeight;\n break;\n case 'height':\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n this.grid.height = this.height;\n break;\n case 'width':\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.grid.width = this.width;\n break;\n case 'locale':\n this.grid.locale = this.locale;\n this.TreeGridLocale();\n this.grid.toolbar = this.getGridToolbar();\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableAdaptiveUI':\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n if (!isNullOrUndefined(this.treeColumnField)) {\n this.updateTreeColumnTextAlign();\n }\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'editSettings':\n if (this.grid.isEdit && this.grid.editSettings.mode === 'Normal' && newProp[prop].mode &&\n (newProp[prop].mode === 'Cell' || newProp[prop].mode === 'Row')) {\n this.grid.closeEdit();\n }\n this.grid.editSettings = this.getGridEditSettings();\n break;\n }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n };\n TreeGrid.prototype.updateTreeColumnTextAlign = function () {\n var gridColumn = this.grid.getColumnByField(this.treeColumnField);\n gridColumn.textAlign = this.enableRtl ? 'Right' : this.treeColumnTextAlign;\n this.grid.refreshColumns();\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\n var treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n var hasTreeGridChild = treeGridElement.querySelector('.' + 'e-gridheader') &&\n treeGridElement.querySelector('.' + 'e-gridcontent') ? true : false;\n if (hasTreeGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n if (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n var modules = ['dataModule', 'sortModule', 'renderModule', 'filterModule', 'printModule', 'clipboardModule',\n 'excelExportModule', 'pdfExportModule', 'toolbarModule', 'summaryModule', 'reorderModule', 'resizeModule',\n 'pagerModule', 'keyboardModule', 'columnMenuModule', 'contextMenuModule', 'editModule', 'virtualScrollModule',\n 'selectionModule', 'detailRow', 'rowDragAndDropModule', 'freezeModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n this.grid = null;\n };\n /**\n * Update the TreeGrid model\n *\n * @method dataBind\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.dataBind = function () {\n if (isNullOrUndefined(this.grid)) {\n return;\n }\n if (!isNullOrUndefined(this.rowDropSettings.targetID) &&\n isNullOrUndefined(document.getElementById(this.grid.rowDropSettings.targetID))) {\n document.getElementById(this.rowDropSettings.targetID).id = this.grid.rowDropSettings.targetID;\n this.rowDropSettings.targetID = this.grid.rowDropSettings.targetID;\n }\n _super.prototype.dataBind.call(this);\n this.grid.dataBind();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns persist properties details\n * @hidden\n */\n TreeGrid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'pageSizeMode', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[i]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[k];\n delete currentObject[objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n TreeGrid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n this.ignoreInArrays(ignoreOnColumn, columns[i].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n var target = e.target;\n if ((target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && (!this.isEditCollapse && !this.grid.isEdit)) {\n this.expandCollapseRequest(target);\n }\n this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n TreeGrid.prototype.getPager = function () {\n return this.grid.getPager(); //get element from pager\n };\n /**\n * Adds a new record to the TreeGrid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\n * @returns {void}\n */\n TreeGrid.prototype.addRecord = function (data, index, position) {\n if (this.editModule) {\n var isAddedRowByMethod = 'isAddedRowByMethod';\n this.editModule[isAddedRowByMethod] = true;\n this.editModule.addRecord(data, index, position);\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n * @returns {void}\n */\n TreeGrid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.grid.editModule) {\n this.grid.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n TreeGrid.prototype.updateRow = function (index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n var griddata = this.grid.getCurrentViewRecords()[index];\n extend(griddata, data);\n this.grid.editModule.updateRow(index, griddata);\n }\n else {\n this.grid.editModule.updateRow(index, data);\n }\n }\n };\n /**\n * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldName - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\n * @returns {void}\n */\n TreeGrid.prototype.startEdit = function (row) {\n if (this.grid.editModule) {\n this.grid.editModule.startEdit(row);\n }\n };\n /**\n * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell edit.\n * @returns {void}\n */\n TreeGrid.prototype.editCell = function (rowIndex, field) {\n if (this.editModule) {\n this.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n * @returns {void}\n */\n TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRow = function (tr) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRow(tr);\n }\n };\n /**\n * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n * @returns {void}\n */\n TreeGrid.prototype.setCellValue = function (key, field, value) {\n this.grid.setCellValue(key, field, value);\n var rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n var record = this.getCurrentViewRecords()[rowIndex];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n * @returns {void}\n */\n TreeGrid.prototype.setRowData = function (key, rowData) {\n var currentRecords = this.getCurrentViewRecords();\n var primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n var level = 0;\n var record = {};\n currentRecords.some(function (value) {\n if (value[primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n this.grid.setRowData(key, rowData);\n var visibleRecords = this.getVisibleRecords();\n if (visibleRecords.length > 0 && key === (visibleRecords[visibleRecords.length - 1])[primaryKey]) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(this.getRows()[currentRecords.indexOf(record)], sHeight <= clientHeight);\n }\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n TreeGrid.prototype.goToPage = function (pageNo) {\n if (this.grid.pagerModule) {\n this.grid.pagerModule.goToPage(pageNo);\n }\n };\n /**\n * Defines the text of external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n TreeGrid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.grid.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Gets a cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns cell element in grid content\n */\n TreeGrid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a Column by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.columnModel, function (item) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByUid = function (uid) {\n var Columns = this.initialRender ? this.grid.columns : this.columns;\n var columnModel = 'columnModel';\n if (this.grid.columns.length !== this.columnModel.length) {\n Columns = this.grid[columnModel];\n }\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} - Returns column field name as collection\n */\n TreeGrid.prototype.getColumnFieldNames = function () {\n return this.grid.getColumnFieldNames();\n };\n /**\n * Gets the footer div of the TreeGrid.\n *\n * @returns {Element} - Returns footer content div element\n */\n TreeGrid.prototype.getFooterContent = function () {\n return this.grid.getFooterContent();\n };\n /**\n * Gets the footer table element of the TreeGrid.\n *\n * @returns {Element} - Returns footer content table element\n */\n TreeGrid.prototype.getFooterContentTable = function () {\n return this.grid.getFooterContentTable();\n };\n /**\n * Shows a column by its column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.showColumns = function (keys, showBy) {\n this.grid.showColumns(keys, showBy);\n this.updateColumnModel();\n };\n /**\n * Hides a column by column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.hideColumns = function (keys, hideBy) {\n this.grid.hideColumns(keys, hideBy);\n this.updateColumnModel();\n };\n /**\n * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByField = function (field) {\n return this.grid.getColumnHeaderByField(field);\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByUid = function (uid) {\n return this.grid.getColumnHeaderByUid(uid);\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByField = function (field) {\n return this.grid.getColumnIndexByField(field);\n };\n TreeGrid.prototype.getVirtualColIndexByUid = function (uid) {\n var columnModel = 'columnModel';\n var index = iterateArrayOrObject(this.grid[columnModel], function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByUid = function (uid) {\n return this.grid.getColumnIndexByUid(uid);\n };\n /**\n * Gets the columns from the TreeGrid.\n *\n * @param {boolean} isRefresh - Defined whether to update DOM\n * @returns {Column[]} - Returns treegrid columns collection\n */\n TreeGrid.prototype.getColumns = function (isRefresh) {\n this.updateColumnModel(this.grid.getColumns(isRefresh));\n return this.columnModel;\n };\n TreeGrid.prototype.updateColumnModel = function (column) {\n var temp;\n var field;\n var gridColumns = isNullOrUndefined(column) ? this.grid.getColumns() : column;\n if (this.treeColumnIndex !== -1 && this.columnModel[this.treeColumnIndex] &&\n !isNullOrUndefined(this.columnModel[this.treeColumnIndex].template)) {\n temp = this.columnModel[this.treeColumnIndex].template;\n field = this.columnModel[this.treeColumnIndex].field;\n }\n var gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var _i = 0, _a = Object.keys(gridColumns[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[prop] = gridColumns[i][prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[i].field && this.columnModel[i].type !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[i].template = temp;\n }\n }\n }\n var deepMerge = 'deepMerge';\n this[deepMerge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n this.stackedHeader = true;\n }\n if (!this.stackedHeader) {\n merge(this.columns, this.columnModel);\n }\n this[deepMerge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n TreeGrid.prototype.getContent = function () {\n return this.grid.getContent();\n };\n TreeGrid.prototype.mergePersistTreeGridData = function () {\n var persist1 = 'mergePersistGridData';\n this.grid[persist1].apply(this);\n };\n TreeGrid.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.grid[persist2].apply(this, [storedColumn, columns]);\n };\n TreeGrid.prototype.updateTreeGridModel = function () {\n this.setProperties({ filterSettings: getObject('properties', this.grid.filterSettings) }, true);\n this.setProperties({ pageSettings: getObject('properties', this.grid.pageSettings) }, true);\n this.setProperties({ searchSettings: getObject('properties', this.grid.searchSettings) }, true);\n this.setProperties({ sortSettings: getObject('properties', this.grid.sortSettings) }, true);\n };\n /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n TreeGrid.prototype.getDataRows = function () {\n var dRows = [];\n var rows = this.grid.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n return this.grid.currentViewData;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n if (!(this.dataSource instanceof DataManager)) {\n this.grid.dataSource = this.flatData;\n }\n else {\n this.grid.setProperties({\n dataSource: new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor)\n }, true);\n }\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\n * @isGenericType true\n */\n TreeGrid.prototype.getVisibleRecords = function () {\n var visibleRecords = [];\n var currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (var i = 0; i < currentViewRecords.length; i++) {\n visibleRecords.push(currentViewRecords[i]);\n if (!currentViewRecords[i].expanded) {\n i += findChildrenRecords(currentViewRecords[i]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\n * @returns {void}\n */\n TreeGrid.prototype.refreshColumns = function (refreshUI) {\n if (isNullOrUndefined(refreshUI) || refreshUI) {\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshHeader = function () {\n this.grid.refreshHeader();\n };\n /**\n * Expands or collapse child records\n *\n * @param {HTMLElement} target - Expand collapse icon cell as target element\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.expandCollapseRequest = function (target) {\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n if ((this.getBatchChanges()[this.changedRecords].length ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length)\n && this.editSettings.showConfirmDialog) {\n var dialogObj = this.grid.editModule[obj];\n this.grid.editModule[showDialog]('CancelEdit', dialogObj);\n this.targetElement = target;\n return;\n }\n }\n if (this.rowTemplate) {\n var rowInfo = target.closest('.e-treerowcell').parentElement;\n var record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo, record);\n }\n else {\n this.expandRow(rowInfo, record);\n }\n }\n else {\n var rowInfo_1 = this.grid.getRowInfo(target);\n var record = rowInfo_1.rowData;\n if (this.grid.isFrozenGrid() && this.enableVirtualization && !Object.keys(record).length) {\n var freezeRows = 'freezeRows';\n record = this.grid.contentModule[freezeRows].filter(function (e) { return e.uid === rowInfo_1.row.getAttribute('data-uid'); })[0].data;\n }\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo_1.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo_1.row, record);\n }\n else {\n this.expandRow(rowInfo_1.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @param {Object} key - Primary key value\n * @param {number} level - Specifies the hierarchical level of the record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record, key, level) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n _this.expandCollapse('expand', row, record);\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n var children = 'Children';\n if (!(isRemoteData(_this) && !isOffline(_this)) && (!isCountRequired(_this) || !isNullOrUndefined(record[children]))) {\n var collapseArgs = { data: record, row: row };\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, true);\n }\n _this.trigger(events.expanded, collapseArgs);\n }\n }\n });\n };\n TreeGrid.prototype.expandCollapseAllChildren = function (record, action, key, level) {\n if ((!isNullOrUndefined(key) && record[this.getPrimaryKeyFieldNames()[0]] !== key) ||\n (!isNullOrUndefined(level) && level !== record.level)) {\n return;\n }\n var records = findChildrenRecords(record).filter(function (e) {\n return e.hasChildRecords;\n });\n records.unshift(record);\n for (var i = 0; i < records.length; i++) {\n this.expandCollapse(action, null, records[i]);\n }\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\n }\n };\n TreeGrid.prototype.getCollapseExpandRecords = function (row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n else if (isNullOrUndefined(record)) {\n if (this.detailTemplate) {\n record = this.grid.getCurrentViewRecords()[row.getAttribute('data-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[parseInt(row.getAttribute('data-rowindex'), 10)];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, false);\n }\n _this.trigger(events.collapsed, collapseArgs);\n if (_this.enableInfiniteScrolling) {\n var scrollHeight = _this.grid.getContent().firstElementChild.scrollHeight;\n var scrollTop = _this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < _this.grid.getRowHeight() + +_this.height) {\n _this.grid.getContent().firstElementChild.scrollBy(0, _this.grid.getRowHeight());\n }\n }\n }\n }\n });\n };\n TreeGrid.prototype.updateExpandStateMapping = function (record, state) {\n var totalRecords = record;\n if (totalRecords.length) {\n for (var i = 0; i < totalRecords.length; i++) {\n totalRecords[i][this.expandStateMapping] = state;\n editAction({ value: totalRecords[i], action: 'edit' }, this, this.isSelfReference, totalRecords[i].index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n }\n else {\n record[this.expandStateMapping] = state;\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandAction(rec, null, level, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var record = getObject('records', rec);\n this.expandAction(record, null, level);\n }\n };\n /**\n * Expands the records by given primary key value\n *\n * @param {Object} key - Expands the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.expandByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Expand');\n };\n TreeGrid.prototype.expandAction = function (record, key, level, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n var _loop_1 = function (i) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n var puniqueID_1 = record[i].parentItem.uniqueID;\n var parentItem = this_1.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_1)) {\n parentItem = this_1.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n }\n if (parentItem[0].expanded === false) {\n record.push(parentItem[0]);\n parentItem[0].expanded = true;\n }\n else {\n if (!getExpandStatus(this_1, parentItem[0], this_1.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_1.expandRow(null, record[i], key, level);\n }\n };\n var this_1 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_1(i);\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to be collapsed\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseAction(record, null, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var records = getObject('records', rec);\n this.collapseAction(records);\n }\n };\n /**\n * Collapses the records by given primary key value\n *\n * @param {Object} key - Collapses the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n };\n TreeGrid.prototype.expandCollapseActionByKey = function (key, action) {\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n var dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n var rec = dataSource.filter(function (e) {\n return e[primaryKeyField].toString() === key.toString();\n });\n if (action === 'Expand') {\n this.expandAction(rec, key, null);\n }\n else {\n this.collapseAction(rec, key);\n }\n }\n };\n TreeGrid.prototype.collapseAction = function (record, key, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (var i = 0; i < record.length; i++) {\n this.collapseRow(null, record[i], key);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[endIndex] = -1;\n }\n };\n /**\n * Expands All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if ((!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) || (action === 'collapse' || (this.isExpandAll && this.loadChildOnDemand) && !isRemoteData(this) && this.isSelfReference && isCountRequired(this))) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('data-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n row.querySelectorAll('.e-treerowcell')[0].setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (!isNullOrUndefined(targetEle) && targetEle.closest('.e-treerowcell').classList.contains('e-cellselectionbackground')) {\n targetEle.closest('.e-treerowcell').classList.remove('e-cellselectionbackground');\n targetEle.closest('.e-treerowcell').removeAttribute('aria-selected');\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n if (expandingArgs.requestType === 'collapse' && isCountRequired(this)) {\n var flatDataRecords = this.flatData.slice();\n for (var i = 0; i < flatDataRecords.length; i++) {\n if (flatDataRecords[i]['parentUniqueID'] === expandingArgs.data['uniqueID']) {\n flatDataRecords.splice(i, 1);\n i = i - 1;\n }\n }\n this.dataResults.result = flatDataRecords;\n return;\n }\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n if (isCountRequired(_this)) {\n _this.flatData = _this.dataResults.result;\n }\n if (_this.enableInfiniteScrolling && isCountRequired(_this)) {\n _this.flatData = _this.infiniteScrollData;\n }\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n if (isCountRequired(_this) && record[_this.childMapping] && record[_this.childMapping][i]) {\n currentData.splice(index + 1 + i, 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, record[_this.childMapping] &&\n record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n if (isCountRequired(_this) && _this.loadChildOnDemand && expandingArgs.requestType === 'expand') {\n _this.dataResults['expandRecord'] = {};\n _this.dataResults['expandRecord'] = expandingArgs.data;\n }\n _this.isExpandRefresh = true;\n var scrollHeightBeforeRefresh = _this.getContentTable().parentElement.scrollTop;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n if (_this.enableInfiniteScrolling) {\n _this.getContentTable().parentElement.scrollTop = scrollHeightBeforeRefresh;\n }\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return ((r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1))) || (r.querySelector('.e-gridrowindex' + record.index + 'level0' + '.e-summarycell')));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var gridRowsObject = this.grid.getRowsObject();\n if (!isNullOrUndefined(gridRowsObject[this.getCurrentViewRecords().indexOf(record)].visible) && gridRowsObject[this.getCurrentViewRecords().indexOf(record)].visible !== false) {\n gridRowsObject[this.getCurrentViewRecords().indexOf(record)].visible = true;\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(rows[i]) && !this.allowPaging && !(this.enableVirtualization || this.enableInfiniteScrolling || isRemoteData(this) || isCountRequired(this))) {\n gridRowsObject[rows[i].rowIndex].visible = displayAction != 'none' ? true : false;\n var parentRecord = getValue('uniqueIDCollection.' + record.parentUniqueID, this);\n if (!isNullOrUndefined(parentRecord) && gridRows[this.getCurrentViewRecords().indexOf(parentRecord)].getElementsByClassName('e-treegridcollapse').length) {\n gridRowsObject[this.getCurrentViewRecords().indexOf(record)].visible = false;\n }\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if ((!isNullOrUndefined(childRecords[i].childRecords) && childRecords[i].childRecords.length > 0) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\n }\n for (var i = 0; i < detailrows.length; i++) {\n if (!isNullOrUndefined(detailrows[i]) && !this.allowPaging && !(this.enableVirtualization || this.enableInfiniteScrolling || isRemoteData(this) || isCountRequired(this))) {\n gridRowsObject[detailrows[i].rowIndex].visible = displayAction != 'none' ? true : false;\n detailrows[i].style.display = displayAction;\n }\n }\n if (!this.allowPaging && !(this.enableVirtualization || this.enableInfiniteScrolling || isRemoteData(this) || isCountRequired(this))) {\n this.grid.notify('refresh-Expand-and-Collapse', { rows: this.grid.getRowsObject() });\n }\n };\n TreeGrid.prototype.updateAltRow = function (rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n var visibleRowCount = 0;\n for (var i = 0; rows && i < rows.length; i++) {\n var gridRow = rows[i];\n if (gridRow.style.display !== 'none') {\n if (gridRow.classList.contains('e-altrow')) {\n removeClass([gridRow], 'e-altrow');\n }\n if (visibleRowCount % 2 !== 0 && !gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n addClass([gridRow], 'e-altrow');\n }\n if (!gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n visibleRowCount++;\n }\n }\n }\n }\n };\n TreeGrid.prototype.treeColumnRowTemplate = function () {\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n var row = rows[i];\n var rowData = this.grid.getRowsObject()[i].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n var rows = rowDetails.rows;\n var row;\n var childRecord;\n var movablerows = [];\n var rightrows = [];\n var freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n rows[i].style.display = 'none';\n row = rows[i];\n var collapsingTd = rows[i].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[i].style.display = 'none';\n rightrows[i].style.display = 'none';\n if (!rows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[i];\n }\n else if (rightrows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[i];\n }\n }\n }\n if (row.querySelector('.e-treecolumn-container .e-treegridexpand')) {\n var expandElement = row.querySelector('.e-treecolumn-container .e-treegridexpand');\n childRecord = this.rowTemplate ? this.grid.getCurrentViewRecords()[rows[i].rowIndex] :\n this.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(expandElement) && childRecord.expanded) {\n removeClass([expandElement], 'e-treegridexpand');\n addClass([expandElement], 'e-treegridcollapse');\n }\n var cRow = [];\n var eRows = this.getRows();\n for (var i_1 = 0; i_1 < eRows.length; i_1++) {\n if (eRows[i_1].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i_1]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\n };\n /**\n * Updates the rows and cells\n *\n * @param {Object[]} records - Updates the given records\n * @param {HTMLTableRowElement[]} rows - Updates the given rows\n * @param {number} index - Updates the given cell index\n * @returns {void}\n */\n TreeGrid.prototype.updateRowAndCellElements = function (records, rows, index) {\n for (var i = 0; i < records.length; i++) {\n this.renderModule.cellRender({\n data: records[i], cell: rows[i].cells[index],\n column: this.grid.getColumns()[this.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this['action'] === 'indenting' || this['action'] === 'outdenting') {\n this.renderModule.RowModifier({\n data: records[i], row: rows[i]\n });\n }\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.addListener = function () {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n };\n TreeGrid.prototype.updateResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off('updateResults', this.updateResultModel);\n this.grid.off('initial-end', this.afterGridRender);\n };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\n * @returns {void}\n */\n TreeGrid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.grid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearFiltering = function () {\n this.grid.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.grid.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\n * @returns {void}\n */\n TreeGrid.prototype.paste = function (data, rowIndex, colIndex) {\n this.clipboardModule.paste(data, rowIndex, colIndex);\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\n */\n TreeGrid.prototype.getSelectedRows = function () {\n return this.grid.getSelectedRows();\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns movable cell element from the indexes passed\n */\n TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets all the TreeGrid's movable table data rows.\n *\n * @returns {Element[]} - Returns element collection of movable rows\n */\n TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns movable row based on index passed\n */\n TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(index);\n };\n /**\n * Gets the Tree Grid's frozen right content rows from frozen Tree Grid.\n *\n * @returns {Element[]} returns the element\n */\n TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(index);\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n TreeGrid.prototype.getMovableColumnsCount = function () {\n return this.grid.getMovableColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n TreeGrid.prototype.getFrozenLeftColumnsCount = function () {\n return this.grid.getFrozenLeftColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n TreeGrid.prototype.getFrozenRightColumnsCount = function () {\n return this.grid.getFrozenRightColumnsCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenLeftColumns = function () {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenRightColumns = function () {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n TreeGrid.prototype.getVisibleMovableCount = function () {\n return this.grid.getVisibleMovableCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n TreeGrid.prototype.getVisibleFrozenRightCount = function () {\n return this.grid.getVisibleFrozenRightCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n TreeGrid.prototype.getVisibleFrozenLeftCount = function () {\n return this.grid.getVisibleFrozenLeftCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getMovableColumns = function () {\n this.updateColumnModel(this.grid.getMovableColumns());\n return this.columnModel;\n };\n /**\n * Gets the number of frozen column in tree grid\n *\n * @hidden\n * @returns {number} - Returns frozen column count\n */\n TreeGrid.prototype.getFrozenColumns = function () {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n };\n TreeGrid.prototype.getFrozenCount = function (cols, cnt) {\n for (var j = 0, len = cols.length; j < len; j++) {\n if (cols[j].columns) {\n cnt = this.getFrozenCount(cols[j].columns, cnt);\n }\n else {\n if (cols[j].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n };\n /**\n * Indents the record to one level of hierarchy. Moves the selected row as the last child of its previous row.\n *\n * @param {Object} record – specifies the record to do indented\n * @returns {void}\n */\n TreeGrid.prototype.indent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'indent');\n }\n };\n /**\n * Outdent the record to one level of hierarchy. Moves the selected row as sibling to its parent row.\n *\n * @param {Object} record – specifies the record to do outdented\n * @returns {void}\n */\n TreeGrid.prototype.outdent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'outdent');\n }\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.modifiedRecords = 'modifiedRecords';\n /** @hidden */\n this.selectedRecords = 'selectedRecords';\n /** @hidden */\n this.selectedRows = 'selectedRows';\n /** @hidden */\n this.hasDropItem = true;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n var action = 'action';\n var dropPosition = 'dropPosition';\n var updateRowAndCellElements = 'updateRowAndCellElements';\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n this.parent[dropPosition] = this.dropPosition;\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n var index = this.parent.getRowByIndex(fromIndexes[i]).rowIndex;\n data[i] = this.parent.getCurrentViewRecords()[index];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'indenting') {\n index = this.parent.treeColumnIndex;\n }\n var row = this.parent.getRows()[fromIndexes[0]];\n var dropData = args.data[0];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n var parentData = getParentData(this.parent, args.data[0][parentUniqueID]);\n var parentrow = this.parent.getRows()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n if (this.parent.enableImmutableMode && this.parent[action] === 'outdenting') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'outdenting') {\n index = this.parent.treeColumnIndex;\n }\n var record = args.data[0];\n var row = this.parent.getRows()[fromIndexes[0]];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(record);\n rows.push(row);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.indentOutdentAction = function (record, request) {\n var tObj = this.parent;\n var action = 'action';\n var droppedIndex = 'dropIndex';\n var selectedItemIndex = -1;\n if (isNullOrUndefined(record) && this.parent.selectedRowIndex === -1) {\n return;\n }\n else {\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n this.selectedItem = isNullOrUndefined(record) ?\n tObj.getCurrentViewRecords()[selectedItemIndex] : record;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(this.selectedItem[primaryKeyField]);\n this.selectedRow = this.parent[this.selectedRows] = selectedItemIndex !== -1 ?\n this.parent.getSelectedRows()[0]\n : this.parent.grid.getRowByIndex(rowIndex);\n this.selectedRecord = this.parent[this.selectedRecords] = selectedItemIndex !== -1 ?\n tObj.getCurrentViewRecords()[selectedItemIndex]\n : this.selectedItem;\n if (request === 'indent') {\n var record_1 = tObj.getCurrentViewRecords()[this.selectedRow.rowIndex - 1];\n var dropIndex = void 0;\n if (this.selectedRow.rowIndex === 0 || this.selectedRow.rowIndex === -1 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level - record_1.level === 1) {\n return;\n }\n if (record_1.level > this.selectedRecord.level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record_1.parentItem.taskData) {\n dropIndex = i;\n if (tObj.enableVirtualization) {\n dropIndex = parseInt(tObj.getRows()[i].getAttribute('data-rowindex'), 10);\n }\n }\n }\n }\n else {\n dropIndex = this.selectedRow.rowIndex - 1;\n }\n if (this.parent.enableVirtualization && this.selectedRecord && !(record_1.level > this.selectedRecord.level)) {\n dropIndex = parseInt(this.selectedRow.getAttribute('data-rowindex'), 10) - 1;\n }\n tObj[action] = 'indenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('indenting', dropIndex);\n }\n else if (request === 'outdent') {\n if (this.selectedRow.rowIndex === -1 || this.selectedRow.rowIndex === 0 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level === 0) {\n return;\n }\n var dropIndex = void 0;\n var parentItem = this.selectedRecord.parentItem;\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].uniqueID === parentItem.uniqueID) {\n dropIndex = i;\n }\n }\n if (this.parent.enableVirtualization && this.selectedRecord) {\n dropIndex = parseInt(this.parent.getRows()[dropIndex].getAttribute('data-rowindex'), 10);\n }\n tObj[action] = 'outdenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('outdenting', dropIndex);\n }\n }\n };\n RowDD.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var actionArgs = {\n action: action,\n cancel: false,\n data: [this.parent[this.selectedRecords]],\n row: this.parent[this.selectedRows]\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.action === 'indenting') {\n if (_this.parent.enableVirtualization) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('data-rowindex'), 10)], dropIndex, 'child');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n }\n else if (actionArgs.action === 'outdenting') {\n if (_this.parent.enableVirtualization) {\n _this.reorderRows([parseInt(_this.selectedRow.getAttribute('data-rowindex'), 10)], dropIndex, 'below');\n }\n else {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\n }\n }\n }\n });\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n for (var i = 0; i < currentData.length; i++) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = getValue('uniqueIDCollection.' + currentData[i].parentUniqueID, this.parent);\n currentData[i].parentItem.index = updatedParent.index;\n }\n }\n return currentData;\n };\n RowDD.prototype.rowsAdded = function (e) {\n var draggedRecord;\n var dragRecords = e.records;\n for (var i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (draggedRecord.parentUniqueID) {\n var record = dragRecords.filter(function (data) {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n var index = record[0].childRecords.indexOf(draggedRecord);\n var parentRecord = record[0];\n if (index !== -1) {\n if (isNullOrUndefined(this.parent.idMapping)) {\n parentRecord.childRecords.splice(index, 1);\n if (!parentRecord.childRecords.length) {\n parentRecord.hasChildRecords = false;\n parentRecord.hasFilteredChildRecords = false;\n }\n }\n this.isDraggedWithChild = true;\n }\n }\n }\n }\n if (isNullOrUndefined(this.parent.dataSource) || !this.parent.dataSource.length) {\n var tObj = this.parent;\n var draggedRecord_1;\n var dragRecords_1 = e.records;\n var dragLength = e.records.length;\n for (var i = dragLength - 1; i > -1; i--) {\n draggedRecord_1 = dragRecords_1[i];\n if (!i && draggedRecord_1.hasChildRecords) {\n draggedRecord_1.taskData[this.parent.parentIdMapping] = null;\n }\n var recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord_1.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord_1.taskData, tObj.childMapping)) {\n draggedRecord_1.taskData[tObj.childMapping] = [];\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.childMapping) &&\n (draggedRecord_1[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n var childData = (draggedRecord_1[tObj.childMapping]);\n for (var j = 0; j < childData.length; j++) {\n if (dragRecords_1.indexOf(childData[j]) === -1) {\n dragRecords_1.splice(j, 0, childData[j]);\n childData[j].taskData = extend({}, childData[j]);\n i += 1;\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping)\n && draggedRecord_1[tObj.parentIdMapping] !== null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n var keys = Object.keys(tempDataSource);\n for (var i = 0; i < keys.length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][i] = childRecords[i].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex;\n if (this.parent.enableVirtualization) {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\n else {\n islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n }\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n };\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n if (this.parent.enableVirtualization) {\n rowTop = rowEle.getBoundingClientRect().top;\n }\n else {\n rowTop = rowPositionHeight + contentHeight + roundOff;\n }\n var rowBottom = rowTop + row[0].offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\n };\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRows()[this.parent.getCurrentViewRecords().length - 1].getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (this.hasDropItem && dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) + ele.offsetWidth + 16;\n var spanLeft = !this.parent.enableRtl ? dropItemLeft : 0;\n dropItemSpan.style.left = spanLeft + \"px\";\n this.hasDropItem = false;\n }\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n var errorValue = document.querySelector('.errorValue');\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (errorelem) {\n if (dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) - errorelem.offsetWidth - 16;\n setStyleAttribute(errorValue, {\n paddingLeft: '0px'\n });\n if (!this.parent.enableRtl) {\n setStyleAttribute(dropItemSpan, {\n left: dropItemLeft + \"px\"\n });\n }\n }\n errorelem.remove();\n }\n this.hasDropItem = true;\n };\n RowDD.prototype.topOrBottomBorder = function (target) {\n var rowElement = [];\n var element = closest(target, 'tr');\n rowElement = element ? [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse')) : [];\n if (rowElement.length) {\n if (this.dropPosition === 'topSegment') {\n this.addRemoveClasses(rowElement, true, 'e-droptop');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n this.addRemoveClasses(rowElement, true, 'e-dropbottom');\n }\n }\n };\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\n };\n RowDD.prototype.addRemoveClasses = function (cells, add, className) {\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n cells[i].classList.add(className);\n }\n else {\n cells[i].classList.remove(className);\n }\n }\n };\n RowDD.prototype.getOffset = function (element) {\n var box = element.getBoundingClientRect();\n var body = document.body;\n var docElem = document.documentElement;\n var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n };\n RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = rowEle ? rowEle.rowIndex : -1;\n var dragRecords = [];\n var droppedRecord = tObj.getCurrentViewRecords()[rowIdx];\n this.removeErrorElem();\n this.canDrop = true;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n if (rowIdx !== -1) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.canDrop = false;\n this.addErrorElem();\n }\n if (!tObj.rowDropSettings.targetID && this.canDrop) {\n tObj.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n if (tObj.rowDropSettings.targetID) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n var srcControl = dropElement.ej2_instances[0];\n srcControl.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n }\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID)) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n };\n RowDD.prototype.rowDropped = function (args) {\n var tObj = this.parent;\n var parentItem = 'parentItem';\n if (!tObj.rowDropSettings.targetID) {\n if (parentsUntil(args.target, 'e-content')) {\n if (this.parent.element.querySelector('.e-errorelem')) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\n if (!isCountRequired(this.parent)) {\n this.dropRows(args);\n }\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n tObj.grid.refresh();\n if (!isNullOrUndefined(tObj.getHeaderContent().querySelector('.e-firstrow-border'))) {\n tObj.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n }\n }\n }\n else {\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID) || parentsUntil(args.target, 'e-treegrid') &&\n parentsUntil(args.target, 'e-treegrid').id === tObj.rowDropSettings.targetID || args.target && document.getElementById(tObj.rowDropSettings.targetID)) {\n setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\n this.dragDropGrid(args);\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n }\n }\n }\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-firstrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n else if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-lastrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n if (this.parent.enableImmutableMode && !this.parent.allowPaging && !isNullOrUndefined(args.data[0][parentItem])) {\n var index = this.parent.treeColumnIndex;\n index = index + 1;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField]);\n var row = this.parent.getRows()[rowIndex];\n var data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n var record = [];\n var rows = [];\n record.push(data);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[primaryKeyField]);\n var parentrow = this.parent.getRows()[rowIndex];\n record.push(data);\n rows.push(parentrow);\n for (var i = 0; i < record.length; i++) {\n this.parent.renderModule.cellRender({\n data: record[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n var targetEle = parentrow.getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n else {\n this.parent.renderModule.cellRender({\n data: data, cell: row.cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n };\n RowDD.prototype.dragDropGrid = function (args) {\n var tObj = this.parent;\n var targetRow = closest(args.target, 'tr');\n var targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n var srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n var records = tObj.getSelectedRecords();\n var indexes = [];\n for (var i = 0; i < records.length; i++) {\n indexes[i] = records[i].index;\n }\n var data = srcControl.dataSource;\n if (this.parent.idMapping !== null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n var actualData = [];\n for (var i = 0; i < records.length; i++) {\n if (records[i].hasChildRecords) {\n actualData.push(records[i]);\n var child = findChildrenRecords(records[i]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[i_1]); // push child records to drop the parent record along with its child records\n }\n }\n }\n if (actualData.length) {\n records = actualData;\n }\n }\n tObj.notify(events.rowsRemove, { indexes: indexes, records: records });\n srcControl.notify(events.rowsAdd, { toIndex: targetIndex, records: records });\n var srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (var i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[i].parentUniqueID + '.index', srcControl);\n srcControlFlatData[i].parentItem.index = actualIndex;\n }\n }\n }\n tObj.grid.refresh();\n srcControl.grid.refresh();\n if (srcControl.grid.dataSource.length > 1) {\n srcControl.grid.refresh();\n if (!isNullOrUndefined(srcControl.getHeaderContent().querySelector('.e-firstrow-border'))) {\n srcControl.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n if (!isNullOrUndefined(srcControl.getContent().querySelector('.e-lastrow-border'))) {\n srcControl.getContent().querySelector('.e-lastrow-border').remove();\n }\n }\n }\n if (isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n tObj.grid.refresh();\n srcControl.grid.refresh();\n }\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('data-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record, data) {\n var parentItem = record.parentItem;\n var selectedItemIndex = -1;\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n if (this.dropPosition === 'bottomSegment') {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = selectedItemIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(data[0][primaryKeyField]))\n : this.parent.getSelectedRowIndexes()[0];\n var selectedRecord = this.parent.getCurrentViewRecords()[rowIndex];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getCurrentViewRecords()[selectedItemIndex].level;\n if (level === parentItem.level) {\n this.droppedRecord = getParentData(this.parent, parentItem.uniqueID);\n }\n else {\n this.getParentData(parentItem);\n }\n }\n };\n RowDD.prototype.dropRows = function (args, isByMethod) {\n if (this.dropPosition !== 'Invalid' && !isRemoteData(this.parent)) {\n var tObj = this.parent;\n var draggedRecord_2;\n var droppedRecord = void 0;\n if (isNullOrUndefined(args.dropIndex)) {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = tObj.selectedRowIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField])) - 1\n : tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record, args.data);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n if (this.parent.enableVirtualization) {\n var index = this.parent.getRowByIndex(args.dropIndex).rowIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[index];\n }\n else {\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n this.parent[this.modifiedRecords].push(args.data[0], droppedRecord);\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n var _loop_1 = function (i) {\n draggedRecord_2 = dragRecords[i];\n this_1.draggedRecord = draggedRecord_2;\n if (this_1.dropPosition !== 'Invalid') {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this_1.deleteDragRow();\n }\n if (this_1.draggedRecord === this_1.droppedRecord) {\n var correctIndex = this_1.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this_1.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this_1.droppedRecord = this_1.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this_1.dropPosition === 'middleSegment') {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n var recordIndex1 = this_1.treeGridData.indexOf(droppedRecord);\n this_1.dropAtTop(recordIndex1);\n if (this_1.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + 1, 0, this_1.draggedRecord);\n }\n else {\n count = this_1.getChildCount(droppedRecord, 0);\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord_2.parentItem;\n delete draggedRecord_2.parentUniqueID;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n draggedRecord_2.level = droppedRecord.level;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_1(i);\n }\n }\n };\n RowDD.prototype.dropMiddle = function (recordIndex) {\n var tObj = this.parent;\n var childRecords = findChildrenRecords(this.droppedRecord);\n var childRecordsLength = (isNullOrUndefined(childRecords) ||\n childRecords.length === 0) ? recordIndex + 1 :\n childRecords.length + recordIndex + 1;\n if (this.dropPosition === 'middleSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(childRecordsLength, 0, this.draggedRecord.taskData);\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n else {\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n this.recordLevel();\n if (this.draggedRecord.hasChildRecords) {\n this.updateChildRecord(this.draggedRecord, childRecordsLength);\n }\n }\n };\n RowDD.prototype.dropAtTop = function (recordIndex1) {\n var tObj = this.parent;\n if (this.dropPosition === 'topSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(recordIndex1, 0, this.draggedRecord.taskData);\n }\n this.draggedRecord.parentItem = this.treeGridData[recordIndex1].parentItem;\n this.draggedRecord.parentUniqueID = this.treeGridData[recordIndex1].parentUniqueID;\n this.draggedRecord.level = this.treeGridData[recordIndex1].level;\n this.treeGridData.splice(recordIndex1, 0, this.draggedRecord);\n if (this.draggedRecord.hasChildRecords) {\n var level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n var rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n };\n RowDD.prototype.recordLevel = function () {\n var tObj = this.parent;\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var childItem = tObj.childMapping;\n if (!droppedRecord.hasChildRecords) {\n droppedRecord.hasChildRecords = true;\n droppedRecord.hasFilteredChildRecords = true;\n if (isNullOrUndefined(droppedRecord.childRecords) || droppedRecord.childRecords.length === 0) {\n droppedRecord.childRecords = [];\n if (!tObj.parentIdMapping && isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[childItem] = [];\n }\n }\n }\n if (this.dropPosition === 'middleSegment') {\n var parentItem = extend({}, droppedRecord);\n delete parentItem.childRecords;\n draggedRecord.parentItem = parentItem;\n draggedRecord.parentUniqueID = droppedRecord.uniqueID;\n droppedRecord.childRecords.splice(droppedRecord.childRecords.length, 0, draggedRecord);\n var isSelfReference = 'isSelfReference';\n if (tObj[isSelfReference]) {\n droppedRecord[tObj.childMapping] = [];\n droppedRecord[tObj.childMapping].splice(droppedRecord[tObj.childMapping].length, 0, draggedRecord);\n }\n if (!isNullOrUndefined(draggedRecord) && !tObj.parentIdMapping && !isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[tObj.childMapping].splice(droppedRecord.childRecords.length, 0, draggedRecord.taskData);\n }\n if (!draggedRecord.hasChildRecords) {\n draggedRecord.level = droppedRecord.level + 1;\n }\n else {\n var level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n };\n RowDD.prototype.deleteDragRow = function () {\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n this.treeGridData = this.parent.grid.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n var deletedRow = getParentData(this.parent, this.draggedRecord.uniqueID);\n if (!isNullOrUndefined(deletedRow.childRecords) && deletedRow.childRecords.length) {\n deletedRow.hasChildRecords = true;\n }\n this.removeRecords(deletedRow);\n };\n RowDD.prototype.updateChildRecord = function (record, count) {\n var currentRecord;\n var tObj = this.parent;\n var length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n if (!this.isMultipleGrid) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, tObj);\n }\n else {\n currentRecord = record.childRecords[i];\n }\n count++;\n tObj.flatData.splice(count, 0, currentRecord);\n setValue('uniqueIDCollection.' + currentRecord.uniqueID, currentRecord, this.parent);\n if (tObj.parentIdMapping) {\n this.treeData.splice(count, 0, currentRecord.taskData);\n }\n if (currentRecord.hasChildRecords) {\n count = this.updateChildRecord(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.updateChildRecordLevel = function (record, level) {\n var length = 0;\n var currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n if (!this.isMultipleGrid) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\n }\n else {\n currentRecord = record.childRecords[i];\n }\n var parentData = void 0;\n if (record.parentItem) {\n parentData = getParentData(this.parent, record.parentItem.uniqueID);\n }\n if (isNullOrUndefined(parentData) && !isNullOrUndefined(record.parentItem)) {\n parentData = record.parentItem;\n }\n currentRecord.level = record.parentItem ? parentData.level + level : record.level + 1;\n if (currentRecord.hasChildRecords) {\n level--;\n level = this.updateChildRecordLevel(currentRecord, level);\n }\n }\n return level;\n };\n RowDD.prototype.removeRecords = function (record) {\n var tObj = this.parent;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n var deletedRow = record;\n var isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n var flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n var childRecords = flatParentData ? flatParentData.childRecords : [];\n var childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping || tObj.enableImmutableMode) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var idx = void 0;\n var idz = void 0;\n var treeGridData = dataSource;\n for (var i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idz = i;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n }\n var recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n var parentIndex = this.parent.parentData.indexOf(deletedRow);\n if (parentIndex !== -1) {\n tObj.parentData.splice(parentIndex, 1);\n dataSource.splice(parentIndex, 1);\n }\n }\n if (recordIndex === -1 && !tObj.parentIdMapping) {\n var primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (var j = 0; j < this.treeGridData.length; j++) {\n if (this.treeGridData[j][primaryKeyField] === deletedRow[primaryKeyField]) {\n recordIndex = j;\n }\n }\n }\n if (!tObj.parentIdMapping) {\n var deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n if (this.parent[this.modifiedRecords].indexOf(flatParentData) === -1 && !isNullOrUndefined(flatParentData)) {\n this.parent[this.modifiedRecords].push(flatParentData);\n }\n if (!isNullOrUndefined(flatParentData)) {\n this.updateModifiedRecords(flatParentData);\n }\n }\n };\n RowDD.prototype.updateModifiedRecords = function (record) {\n var parentData = getParentData(this.parent, record.parentUniqueID);\n if (!isNullOrUndefined(parentData)) {\n this.parent[this.modifiedRecords].push(parentData);\n this.updateModifiedRecords(parentData);\n }\n };\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[i_2][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[i_3][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n return;\n }\n }\n });\n };\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the row drop settings of the TreeGrid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n if (!((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent))\n || notifyArgs.virtualInfo.blockIndexes.length === 1) {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[model].currentPage;\n if (clear) {\n this.cache = {};\n this.movableCache = {};\n this.frozenRightCache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n this.movableCache = {};\n this.frozenRightCache = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[count].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Grid, ExcelExport as GridExcel } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';\nimport { isNullOrUndefined, setValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid Excel Export module\n *\n * @hidden\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ExcelExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridExcel);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ExcelExport module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.addEventListener = function () {\n this.parent.on('updateResults', this.updateExcelResultModel, this);\n this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);\n this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);\n this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);\n };\n /**\n * To destroy the Excel Export\n *\n * @returns {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateResults', this.updateExcelResultModel);\n this.parent.off('excelCellInfo', this.excelQueryCellInfo);\n this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);\n this.parent.grid.off('finalPageSetup', this.finalPageSetup);\n };\n ExcelExport.prototype.updateExcelResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n ExcelExport.prototype.Map = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n var _this = this;\n var dataSource = this.parent.dataSource;\n var property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\n }\n return new Promise(function (resolve) {\n var dm = _this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : _this.parent.dataSource;\n var query = new Query();\n if (!_this.isLocal()) {\n query = _this.generateQuery(query);\n setValue('query', query, property);\n }\n _this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));\n if (getObject('cancel', property)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customData = null;\n if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {\n customData = excelExportProperties.dataSource;\n }\n excelExportProperties = _this.manipulateExportProperties(excelExportProperties, dataSource, e);\n return _this.parent.grid.excelExportModule.Map(_this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then(function (book) {\n if (customData != null) {\n excelExportProperties.dataSource = customData;\n }\n else {\n delete excelExportProperties.dataSource;\n }\n resolve(book);\n });\n });\n });\n };\n ExcelExport.prototype.generateQuery = function (query, property) {\n if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n property.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n ExcelExport.prototype.manipulateExportProperties = function (property, dtSrc, queryResult) {\n //count not required for this query\n var args = Object();\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {\n setValue('exportType', property.exportType, args);\n }\n if (!this.isLocal()) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getObject('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!this.isLocal()) {\n this.parent.flatData = [];\n }\n if (property && property.dataSource && this.isLocal()) {\n var flatsData = this.parent.flatData;\n var dataSrc = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatsData;\n }\n property = isNullOrUndefined(property) ? Object() : property;\n property.dataSource = new DataManager({ json: dtSrc });\n return property;\n };\n /**\n * TreeGrid Excel Export cell modifier\n *\n * @param {ExcelQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = args.data;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.indent = pad;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('excelQueryCellInfo', args);\n };\n ExcelExport.prototype.exportRowDataBound = function (excelRow) {\n if (excelRow.type === 'excel') {\n var excelrowobj = excelRow.rowObj.data;\n var filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var expandedStatus = false;\n var sublevelState = false;\n var state = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);\n if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {\n expandedStatus = true;\n sublevelState = excelrowobj.expanded ? false : true;\n }\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,\n isHidden: expandedStatus };\n }\n else if (excelrowobj.hasChildRecords && isNullOrUndefined(excelrowobj.parentItem)) {\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel };\n }\n }\n };\n /* eslint-disable-next-line */\n ExcelExport.prototype.finalPageSetup = function (workbook) {\n for (var i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n };\n ExcelExport.prototype.isLocal = function () {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { getObject, PdfExport as GridPdf, Grid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline } from '../utils';\nimport { isNullOrUndefined, setValue, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid PDF Export module\n *\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function PdfExport(parent) {\n Grid.Inject(GridPdf);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} PdfExport module name\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.addEventListener = function () {\n this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);\n this.parent.on('updateResults', this.updatePdfResultModel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);\n this.parent.off('updateResults', this.updatePdfResultModel);\n };\n /**\n * To destroy the PDF Export\n *\n * @returns {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n PdfExport.prototype.updatePdfResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n PdfExport.prototype.Map = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n var dtSrc = this.parent.dataSource;\n var prop = Object();\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise(function (resolve) {\n var dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : _this.parent.dataSource;\n var query = new Query();\n if (!isLocal) {\n query = _this.generateQuery(query);\n setValue('query', query, prop);\n }\n _this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));\n if (getObject('cancel', prop)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customsData = null;\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {\n customsData = pdfExportProperties.dataSource;\n }\n pdfExportProperties = _this.manipulatePdfProperties(pdfExportProperties, dtSrc, e);\n return _this.parent.grid.pdfExportModule.Map(_this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then(function (document) {\n if (customsData != null) {\n pdfExportProperties.dataSource = customsData;\n }\n else {\n delete pdfExportProperties.dataSource;\n }\n resolve(document);\n });\n });\n });\n };\n PdfExport.prototype.generateQuery = function (query, prop) {\n if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n prop.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n PdfExport.prototype.manipulatePdfProperties = function (prop, dtSrc, queryResult) {\n var args = {};\n //count not required for this query\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n setValue('isPdfExport', true, args);\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)) {\n setValue('isCollapsedStatePersist', prop.isCollapsedStatePersist, args);\n }\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {\n setValue('exportType', prop.exportType, args);\n }\n if (!isLocal) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getValue('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!isLocal) {\n this.parent.flatData = [];\n }\n if (prop && prop.dataSource && isLocal) {\n var flatDatas = this.parent.flatData;\n var dataSrc = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatDatas;\n }\n prop = isNullOrUndefined(prop) ? {} : prop;\n prop.dataSource = new DataManager({ json: dtSrc });\n return prop;\n };\n /**\n * TreeGrid PDF Export cell modifier\n *\n * @param {PdfQueryCellInfoEventArgs} args - Current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = getObject('data', args);\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.paragraphIndent = pad * 3;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('pdfQueryCellInfo', args);\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","import { Grid } from '@syncfusion/ej2-grids';\nimport { Page as GridPage } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * The `Page` module is used to render pager and handle paging action.\n *\n * @hidden\n */\nvar Page = /** @class */ (function () {\n function Page(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.addEventListener = function () {\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);\n this.parent.on(events.pagingActions, this.pageAction, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);\n this.parent.off(events.pagingActions, this.pageAction);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Pager module name\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.parent.grid.pagerModule.refresh();\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.parent.grid.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n this.parent.grid.pagerModule.updateExternalMessage(message);\n };\n /**\n * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments\n * @param {string} rowDetails.action - Expand Collapse action type\n * @param {HTMLTableRowElement} rowDetails.row - Row element\n * @param {ITreeData} rowDetails.record - Row object data\n * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments\n * @hidden\n * @returns {void}\n */\n Page.prototype.collapseExpandPagedchilds = function (rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n this.parent.flatData.map(function (e) { return e.expanded = e.uniqueID === rowDetails.record.uniqueID &&\n e.expanded !== rowDetails.record.expanded ? rowDetails.record.expanded : e.expanded; });\n if (this.parent.enableImmutableMode) {\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var record = this.parent.flatData.filter(function (e) {\n return e[primaryKeyField_1] === rowDetails.record[primaryKeyField_1];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n var ret = {\n result: this.parent.flatData,\n row: rowDetails.row,\n action: rowDetails.action,\n record: rowDetails.record,\n count: this.parent.flatData.length\n };\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);\n if (this.parent.enableImmutableMode) {\n var row = 'row';\n var action = 'action';\n var targetEle = void 0;\n if (ret[action] === 'collapse') {\n targetEle = ret[row].getElementsByClassName('e-treegridexpand')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridexpand');\n addClass([targetEle], 'e-treegridcollapse');\n }\n }\n else if (ret[action] === 'expand') {\n targetEle = ret[row].getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n }\n };\n Page.prototype.pageRoot = function (pagedResults, temp, result) {\n var newResults = isNullOrUndefined(result) ? [] : result;\n var _loop_1 = function (t) {\n newResults.push(temp[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this_1.pageRoot(pagedResults, res, newResults);\n }\n };\n var this_1 = this;\n for (var t = 0; t < temp.length; t++) {\n _loop_1(t);\n }\n return newResults;\n };\n Page.prototype.updatePageSize = function (pageingDetails) {\n var updateSize = pageingDetails.result.length;\n var gridPagerModule = this.parent.grid.pagerModule;\n if (this.parent.pageSettings.pageSizes === true) {\n if (gridPagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === gridPagerModule.pagerObj.getLocalizedLabel('All')) {\n gridPagerModule['pagerObj'].totalRecordsCount = updateSize;\n this.parent.grid.pageSettings.pageSize = updateSize;\n }\n }\n };\n Page.prototype.pageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n var temp = [];\n var propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n var query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n var newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n var dm_1 = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents_1 = dm_1.executeLocal(new Query().where(expanded));\n var visualData = void 0;\n if (isFilterChildHierarchy(this.parent) && ((this.parent.searchSettings.key !== this.parent.grid.searchSettings.key) ||\n (this.parent.filterSettings.columns.length !== this.parent.grid.filterSettings.columns.length))) {\n visualData = parents_1;\n }\n else {\n visualData = parents_1.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents_1);\n });\n }\n pageingDetails.count = visualData.length;\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n this.updatePageSize(pageingDetails);\n var current = this.parent.grid.pageSettings.currentPage;\n if (visualData.length < (current * size)) {\n current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);\n current = current ? current : 1;\n this.parent.grid.setProperties({ pageSettings: { currentPage: current } }, true);\n }\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm_1.dataSource.json = visualData;\n pageingDetails.result = dm_1.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n return Page;\n}());\nexport { Page };\n","import { Grid, Toolbar as tool } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Toolbar Module for TreeGrid\n *\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n Grid.Inject(tool);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Toolbar module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.rowDeselected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.rowDeselected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var toolbarElement = this.parent.grid.toolbarModule.getToolbar();\n if (!isNullOrUndefined(toolbarElement)) {\n var tObj = this.parent;\n var indentElement = void 0;\n var outdentElement = void 0;\n var indentID = tObj.element.id + '_gridcontrol_indent';\n var outdentID = tObj.element.id + '_gridcontrol_outdent';\n var indentEle = toolbarElement.querySelector('#' + indentID);\n var outdentEle = toolbarElement.querySelector('#' + outdentID);\n var row = args.row;\n var selectedrow = tObj.getSelectedRows()[0];\n if (!isNullOrUndefined(row[0])) {\n row = row[0];\n }\n row = (!isNullOrUndefined(selectedrow) && selectedrow.rowIndex !== row.rowIndex) ? selectedrow : row;\n if (indentEle !== null && outdentEle !== null) {\n indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n if (row.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[row.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[row.rowIndex - 1].level)) {\n indentElement.classList.add('e-hidden');\n }\n else {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[row.rowIndex - 1].level) {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === 0) {\n outdentElement.classList.add('e-hidden');\n }\n if (selectedItem.level !== 0) {\n outdentElement.classList.remove('e-hidden');\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indentElement.classList.add('e-hidden');\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdentElement.classList.add('e-hidden');\n }\n }\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n var indentOutdentAction = 'indentOutdentAction';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'indent');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'outdent');\n }\n };\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.parent.grid.toolbarModule.getToolbar();\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n this.parent.grid.toolbarModule.enableItems(items, isEnable);\n };\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';\nimport { findParentRecords } from '../utils';\nimport { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Aggregate module\n *\n * @hidden\n */\nvar Aggregate = /** @class */ (function () {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Aggregate(parent) {\n Grid.Inject(GridAggregate);\n this.parent = parent;\n this.flatChildRecords = [];\n this.summaryQuery = [];\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Summary module name\n */\n Aggregate.prototype.getModuleName = function () {\n return 'summary';\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n };\n /**\n * Function to calculate summary values\n *\n * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations\n * @param {Object[]} filteredData - Filtered data collection\n * @param {boolean} isSort - Specified whether sorting operation performed\n * @hidden\n * @returns {Object[]} - return flat records with summary values\n */\n Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n var parentRecord;\n var parentDataLength = Object.keys(filteredData).length;\n var parentData = [];\n for (var p = 0, len = parentDataLength; p < len; p++) {\n var summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\n var parentRecords = findParentRecords(parentData);\n var flatRecords = parentData.slice();\n var summaryLength = Object.keys(this.parent.aggregates).length;\n var dataLength = Object.keys(parentRecords).length;\n var childRecordsLength;\n var columns = this.parent.getColumns();\n if (this.parent.aggregates.filter(function (x) { return x.showChildSummary; }).length) {\n for (var i = 0, len = dataLength; i < len; i++) {\n parentRecord = parentRecords[i];\n childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);\n if (childRecordsLength) {\n var _loop_1 = function (summaryRowIndex, len_1) {\n var item = void 0;\n item = {};\n for (var i_1 = 0; i_1 < columns.length; i_1++) {\n var field = (isNullOrUndefined(getObject('field', columns[i_1]))) ?\n columns[i_1] : getObject('field', (columns[i_1]));\n item[field] = null;\n }\n item = this_1.createSummaryItem(item, this_1.parent.aggregates[summaryRowIndex - 1]);\n if (this_1.parent.aggregates[summaryRowIndex - 1].showChildSummary) {\n var idx_1;\n flatRecords.map(function (e, i) {\n if (e.uniqueID === parentRecord.uniqueID) {\n idx_1 = i;\n return;\n }\n });\n var currentIndex = idx_1 + childRecordsLength + summaryRowIndex;\n var summaryParent = extend({}, parentRecord);\n delete summaryParent.childRecords;\n delete summaryParent[this_1.parent.childMapping];\n setValue('parentItem', summaryParent, item);\n var level = getObject('level', summaryParent);\n setValue('level', level + 1, item);\n setValue('isSummaryRow', true, item);\n setValue('parentUniqueID', summaryParent.uniqueID, item);\n if (isSort) {\n var childRecords = getObject('childRecords', parentRecord);\n if (childRecords.length) {\n childRecords.push(item);\n }\n }\n flatRecords.splice(currentIndex, 0, item);\n }\n else {\n return \"continue\";\n }\n };\n var this_1 = this;\n for (var summaryRowIndex = 1, len_1 = summaryLength; summaryRowIndex <= len_1; summaryRowIndex++) {\n _loop_1(summaryRowIndex, len_1);\n }\n this.flatChildRecords = [];\n }\n }\n }\n else {\n var items = {};\n for (var columnIndex = 0, length_1 = columns.length; columnIndex < length_1; columnIndex++) {\n var fields = isNullOrUndefined(getObject('field', columns[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\n items[fields] = null;\n }\n for (var summaryRowIndex = 1, length_2 = summaryLength; summaryRowIndex <= length_2; summaryRowIndex++) {\n this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);\n }\n }\n return flatRecords;\n };\n Aggregate.prototype.getChildRecordsLength = function (parentData, flatData) {\n var recordLength = Object.keys(flatData).length;\n var record;\n for (var i = 0, len = recordLength; i < len; i++) {\n record = flatData[i];\n var parent_1 = isNullOrUndefined(record.parentItem) ? null :\n flatData.filter(function (e) { return e.uniqueID === record.parentItem.uniqueID; })[0];\n if (parentData === parent_1) {\n this.flatChildRecords.push(record);\n var hasChild = getObject('hasChildRecords', record);\n if (hasChild) {\n this.getChildRecordsLength(record, flatData);\n }\n else {\n continue;\n }\n }\n }\n return this.flatChildRecords.length;\n };\n Aggregate.prototype.createSummaryItem = function (itemData, summary) {\n var summaryColumnLength = Object.keys(summary.columns).length;\n for (var i = 0, len = summaryColumnLength; i < len; i++) {\n var displayColumn = isNullOrUndefined(summary.columns[i].columnName) ? summary.columns[i].field :\n summary.columns[i].columnName;\n var keys = Object.keys(itemData);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key === displayColumn) {\n if (this.flatChildRecords.length) {\n itemData[key] = this.getSummaryValues(summary.columns[i], this.flatChildRecords);\n }\n else if (this.parent.isLocalData) {\n var data = this.parent.dataSource instanceof DataManager ? this.parent.dataSource.dataSource.json\n : this.parent.flatData;\n itemData[key] = this.getSummaryValues(summary.columns[i], data);\n }\n }\n else {\n continue;\n }\n }\n }\n return itemData;\n };\n Aggregate.prototype.getSummaryValues = function (summaryColumn, summaryData) {\n var qry = new Query();\n var single = {};\n var helper = {};\n var type = !isNullOrUndefined(summaryColumn.field) ?\n this.parent.getColumnByField(summaryColumn.field).type : undefined;\n summaryColumn.setPropertiesSilent({ format: this.getFormatFromType(summaryColumn.format, type) });\n summaryColumn.setFormatter(this.parent.grid.locale);\n var formatFn = summaryColumn.getFormatter() || (function () { return function (a) { return a; }; })();\n summaryColumn.setTemplate(helper);\n var tempObj = summaryColumn.getTemplate(2);\n qry.queries = this.summaryQuery;\n qry.requiresCount();\n var sumData = new DataManager(summaryData).executeLocal(qry);\n var types = summaryColumn.type;\n var summaryKey;\n types = [summaryColumn.type];\n for (var i = 0; i < types.length; i++) {\n summaryKey = types[i];\n var key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n var val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n var disp = summaryColumn.columnName;\n var value_1 = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value_1;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value_1) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n var cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\n var renderReactTemplates = 'renderReactTemplates';\n tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property, '', null, null, cellElement);\n this.parent[renderReactTemplates]();\n }\n else {\n appendChildren(cellElement, tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property));\n }\n var value = single[summaryColumn.columnName][summaryKey];\n var summaryValue;\n if (cellElement.innerHTML.indexOf(value) === -1) {\n summaryValue = cellElement.innerHTML + value;\n return summaryValue;\n }\n else {\n return cellElement.innerHTML;\n }\n };\n Aggregate.prototype.getFormatFromType = function (summaryformat, type) {\n if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {\n return summaryformat;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: summaryformat };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: summaryformat };\n break;\n case 'date':\n obj = { type: type, skeleton: summaryformat };\n break;\n }\n return obj;\n };\n /**\n * To destroy the Aggregate module\n *\n * @returns {void}\n * @hidden\n */\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Aggregate;\n}());\nexport { Aggregate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Sort as GridSort, Grid, getActualProperties } from '@syncfusion/ej2-grids';\nimport { getParentData } from '../utils';\n/**\n * Internal dataoperations for TreeGrid\n *\n * @hidden\n */\nvar Sort = /** @class */ (function () {\n function Sort(grid) {\n Grid.Inject(GridSort);\n this.parent = grid;\n this.taskIds = [];\n this.flatSortedData = [];\n this.storedIndex = -1;\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Sort module name\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n this.parent.on('updateModel', this.updateModel, this);\n this.parent.on('createSort', this.createdSortedRecords, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateModel', this.updateModel);\n this.parent.off('createSort', this.createdSortedRecords);\n };\n Sort.prototype.createdSortedRecords = function (sortParams) {\n var data = sortParams.modifiedData;\n var srtQry = sortParams.srtQry;\n this.iterateSort(data, srtQry);\n this.storedIndex = -1;\n sortParams.modifiedData = this.flatSortedData;\n this.flatSortedData = [];\n };\n Sort.prototype.iterateSort = function (data, srtQry) {\n for (var d = 0; d < data.length; d++) {\n if (this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {\n if (!isNullOrUndefined(getParentData(this.parent, data[d].uniqueID, true))) {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n }\n else {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n if (data[d].hasChildRecords) {\n var childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\n if (this.parent.allowRowDragAndDrop && data[d].childRecords.indexOf(this.parent.rowDragAndDropModule['draggedRecord']) !== -1 && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n childSort.splice(dragdIndex, 1);\n var dropdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n childSort.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n childSort.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n };\n ContextMenu.prototype.contextMenuOpen = function (args) {\n var addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n var editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n var indent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Indent', args.element);\n var outdent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Outdent', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false || this.parent.grid.isEdit) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n var tObj = this.parent;\n var selectedrow = tObj.getSelectedRows()[0];\n if ((indent || outdent) && !isNullOrUndefined(selectedrow)) {\n var targetElement = args.event.target.closest('td');\n if (isNullOrUndefined(targetElement) || (!isNullOrUndefined(targetElement) && !targetElement.classList.contains('e-rowcell'))) {\n indent.style.display = outdent.style.display = 'none';\n }\n else {\n if (selectedrow.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indent.style.display = outdent.style.display = 'none';\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[selectedrow.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) || this.parent.editSettings.mode === 'Batch'\n || this.parent.editSettings.mode === 'Cell') {\n indent.style.display = 'none';\n }\n else {\n indent.style.display = 'block';\n }\n if ((selectedItem.level === tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) && this.parent.editSettings.mode !== 'Batch'\n && this.parent.editSettings.mode !== 'Cell') {\n indent.style.display = 'block';\n }\n if ((selectedItem.level === 0) || this.parent.editSettings.mode === 'Batch'\n || this.parent.editSettings.mode === 'Cell') {\n outdent.style.display = 'none';\n }\n else {\n outdent.style.display = 'block';\n }\n }\n }\n }\n }\n else {\n if (tObj.grid.isEdit && isNullOrUndefined(selectedrow)) {\n indent.style.display = 'none';\n outdent.style.display = 'none';\n }\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.editModule['isAddedRowByContextMenu'] = true;\n this.parent.addRecord();\n }\n if (args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' || args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Outdent') {\n if (!isNullOrUndefined(this.parent.rowDragAndDropModule)) {\n var indentOutdentAction = 'indentOutdentAction';\n var action = args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' ? 'indent' : 'outdent';\n this.parent.rowDragAndDropModule[indentOutdentAction](null, action);\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n ContextMenu.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Gets the context menu element from the TreeGrid.\n *\n * @returns {Element} Return Context Menu root element.\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.parent.grid.contextMenuModule.getContextMenu();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined, extend, setValue, getValue, merge } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\nimport { classList } from '@syncfusion/ej2-base';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cellSaved, this.cellSaved);\n this.parent.off(events.batchAdd, this.batchAdd);\n this.parent.off(events.batchSave, this.batchSave);\n this.parent.off(events.beforeBatchAdd, this.beforeBatchAdd);\n this.parent.off(events.beforeBatchDelete, this.beforeBatchDelete);\n this.parent.off(events.beforeBatchSave, this.beforeBatchSave);\n this.parent.off('batchPageAction', this.batchPageAction);\n this.parent.off('batchCancelAction', this.batchCancelAction);\n this.parent.grid.off('immutable-batch-cancel', this.immutableBatchAction);\n this.parent.grid.off('next-cell-index', this.nextCellIndex);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n BatchEdit.prototype.getBatchRecords = function () {\n return this.batchRecords;\n };\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n BatchEdit.prototype.getAddRowIndex = function () {\n return this.addRowIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n BatchEdit.prototype.getSelectedIndex = function () {\n return this.selectedIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n BatchEdit.prototype.getBatchChildCount = function () {\n return this.batchChildCount;\n };\n BatchEdit.prototype.batchPageAction = function () {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.cell.cellIndex;\n var frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n var colCount = this.parent.getFrozenLeftColumnsCount() + actualCellIndex;\n if (colCount === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n }\n else if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n if (this.isAdd && this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var added = void 0;\n var level = 'level';\n var primaryKey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var currentDataIndex = void 0;\n var indexvalue = void 0;\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var parentRecord = this.selectedIndex > -1 ? this.batchRecords[this.addRowIndex][parentItem] : null;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentIdMapping = void 0;\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Top' || this.selectedIndex === -1 ? 0 :\n this.parent.editSettings.newRowPosition === 'Above' ? this.addRowIndex\n : this.addRowIndex + 1;\n rowObjectIndex = this.getActualRowObjectIndex(rowObjectIndex);\n if (this.newBatchRowAdded) {\n if (this.batchRecords.length) {\n idMapping = this.batchRecords[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = this.batchRecords[this.addRowIndex][this.parent.parentIdMapping];\n if (this.batchRecords[this.addRowIndex][parentItem]) {\n parentUniqueID = this.batchRecords[this.addRowIndex][parentItem][uniqueID];\n }\n }\n this.batchAddedRecords = extendArray(this.batchAddedRecords);\n this.batchAddRowRecord = extendArray(this.batchAddRowRecord);\n this.batchAddRowRecord.push(this.batchRecords[this.addRowIndex]);\n added = this.parent.grid.getRowsObject()[rowObjectIndex].changes;\n added.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + added.uniqueID, added, this.parent);\n if (!Object.prototype.hasOwnProperty.call(added, 'level')) {\n this.batchIndex = this.selectedIndex === -1 ? 0 : this.batchIndex;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n added.primaryParent = parentRecord;\n if (this.selectedIndex > -1) {\n added.parentItem = extend({}, this.batchRecords[this.addRowIndex]);\n added.parentUniqueID = added.parentItem.uniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n added.level = added.parentItem.level + 1;\n added.index = this.batchIndex;\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey_1, added.parentItem, 'add', this.parent, this.isSelfReference, added);\n }\n }\n else if ((this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')\n && !isNullOrUndefined(this.batchRecords[this.addRowIndex])) {\n added.level = this.batchRecords[this.addRowIndex][level];\n if (added.level && this.selectedIndex > -1) {\n added.parentItem = parentRecord;\n added.parentUniqueID = parentUniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n }\n added.index = this.parent.editSettings.newRowPosition === 'Below' ? this.batchIndex : this.batchIndex - 1;\n if (this.parent.editSettings.newRowPosition === 'Below' && this.selectedIndex > -1) {\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n var record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = parentIdMapping;\n }\n }\n added.index = added.index === -1 ? 0 : added.index;\n added.hasChildRecords = false;\n added.childRecords = [];\n this.batchRecords.splice(added.index, 0, added);\n this.currentViewRecords.splice(added.index, 0, added);\n if (currentDataIndex) {\n indexvalue = currentDataIndex;\n }\n else {\n indexvalue = added.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Above') {\n indexvalue = added.index === 0 ? indexvalue : indexvalue + 1;\n }\n data.splice(indexvalue, 0, added);\n this.batchAddedRecords.push(added);\n }\n this.parent.grid.getRowsObject()[rowObjectIndex].data = added;\n this.newBatchRowAdded = false;\n }\n if (this.parent.frozenColumns || this.parent.getFrozenColumns()\n && this.parent.grid.getRowsObject()[rowObjectIndex].edit === 'add') {\n merge(this.currentViewRecords[rowObjectIndex], this.parent.grid.getRowsObject()[rowObjectIndex].changes);\n }\n }\n };\n BatchEdit.prototype.beforeBatchAdd = function (e) {\n var isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[isTabLastRow] = false;\n return;\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) &&\n !this.parent.editModule['isAddedRowByContextMenu'] && (this.parent.grid.selectedRowIndex === -1 || this.parent.editModule['batchEditModule'].isAdd)) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = this.batchRecords.length ? this.batchRecords[this.selectedIndex]\n : this.parent.getCurrentViewRecords()[this.selectedIndex];\n }\n else {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.parent.editModule['addRowIndex'] = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n classList(this.parent.grid.getDataRows()[0], ['e-batchrow'], []);\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\n // if (this.parent.frozenRows || this.parent.frozenColumns) {\n // actualIndex = this.batchIndex;\n // }\n }\n focusModule.getContent().matrix.current = [actualIndex, focusModule.getContent().matrix.current[1]];\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n var newlyAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var index = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[newlyAddedRecords.length - 1].getAttribute('data-rowindex'), 10);\n this.batchRecords.splice(index, 0, newlyAddedRecords[newlyAddedRecords.length - 1]);\n }\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.getAttribute('data-uid');\n }\n else {\n data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n childs = findChildrenRecords(data);\n uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n }\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('data-rowindex'), 10);\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[i].setAttribute('data-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('data-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('data-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n if (index !== -1) {\n data.splice(index, 1);\n }\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n for (var i_1 = 0; i_1 < addRecords.length; i_1++) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[i_1].getAttribute('data-rowindex'), 10);\n data.splice(index_1, 0, addRecords[i_1]);\n }\n }\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length) {\n var startIndex = totalRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(currentViewRecords[0][primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n if (addRecords.length > 1 && this.parent.editModule['isAddedRowByContextMenu']) {\n var rowPosition = this.parent.editSettings.newRowPosition;\n this.parent.editSettings.newRowPosition = this.parent.editModule['previousNewRowPosition'];\n this.parent.editModule['previousNewRowPosition'] = rowPosition;\n }\n addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem]) &&\n (isNullOrUndefined(this.parent.editModule['addRowIndex']) || this.isSelfReference)) {\n var indexValue = currentViewRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(addRecords[i][parentItem][primarykey_1]);\n var children = currentViewRecords[indexValue][childRecords];\n for (var j = 0; j < children.length; j++) {\n if (children[j][primarykey_1] === addRecords[i][primarykey_1]) {\n currentViewRecords[indexValue][childRecords].splice(j, 1);\n }\n }\n }\n }\n if (batchChanges[deletedRecords].length) {\n for (i = 0; i < batchChanges[deletedRecords].length; i++) {\n editAction({ value: batchChanges[deletedRecords][i], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n }\n }\n this.parent.parentData = [];\n for (var i_2 = 0; i_2 < data.length; i_2++) {\n data[i_2][index] = i_2;\n setValue('uniqueIDCollection.' + data[i_2][uniqueID] + '.index', i_2, this.parent);\n if (!data[i_2][level]) {\n this.parent.parentData.push(data[i_2]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n this.parent.editModule['isAddedRowByContextMenu'] = false;\n }\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n if (this.parent.getSelectedRows().length) {\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n }\n else {\n args[index] = this.batchIndex;\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n this.isAddedRowByContextMenu = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.dataRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = treeObj.dataSource.adaptor;\n if ((isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[rowIndex][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[i].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[page];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('data-colindex'));\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('data-rowindex');\n tr.setAttribute('data-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n else if (this.parent.editSettings.mode === 'Cell' && (!column.allowEditing || column.isPrimaryKey)) {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('data-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n if (this.parent.enableVirtualization) {\n this.parent.grid.contentModule['editedRowIndex'] = this.parent.grid.editModule.editModule['index'];\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row, args.rowIndex);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n if (this.parent.enableVirtualization) {\n this.parent.grid.contentModule['virtualData'] = {};\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[rowIndex].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (!this.parent.enableInfiniteScrolling) {\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n if (!isNullOrUndefined(data1)) {\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[l].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (var k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[k].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[count];\n if (!isNullOrUndefined(data2)) {\n var index = data2.index;\n var level = data2.level;\n var row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[l];\n var remove = /e-gridrowindex/i;\n var removed = /e-griddetailrowindex/i;\n var result = value.match(remove);\n var results = value.match(removed);\n if (result != null) {\n removeClass([treecell], value);\n }\n if (results != null) {\n removeClass([treecell], value);\n }\n }\n if (!rows[k].classList.contains('e-detailrow')) {\n addClass([treecell], 'e-gridrowindex' + index + 'level' + level);\n }\n else {\n addClass([treecell], 'e-griddetailrowindex' + index + 'level' + level);\n }\n }\n }\n }\n };\n Edit.prototype.beginAdd = function () {\n var position;\n var index = this.addRowIndex;\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch') {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n records = this.batchEditModule.getBatchRecords();\n }\n }\n var rows = this.parent.grid.getDataRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[index]) && records[index].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[r].splice(0, 1);\n this.parent.grid.contentModule[r].splice(rowObjectIndex, 0, newRowObject);\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n if (!this.parent.enableVirtualization || this.parent.enableVirtualization && !Object.keys(this.parent.grid.contentModule['emptyRowData']).length) {\n focussedElement.focus();\n }\n if (this.parent.enableVirtualization && !Object.keys(this.parent.grid.contentModule['emptyRowData']).length) {\n this.parent.grid.contentModule['createEmptyRowdata']();\n }\n }\n }\n if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1 && this['isAddedRowByMethod'] && !this.isAddedRowByContextMenu) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n var batchAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var newlyAddedRecord = void 0;\n if (batchAddedRecords.length) {\n for (var i = 0; i < batchAddedRecords.length; i++) {\n if (isNullOrUndefined(batchAddedRecords[i].uniqueID)) {\n newlyAddedRecord = batchAddedRecords[i];\n }\n }\n }\n var args = {\n action: 'add',\n data: newlyAddedRecord,\n index: index,\n seletedRow: 0\n };\n this.beginAddEdit(args);\n this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);\n this.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[primaryKeys_2[0]] === args.data[i][primaryKeys_2[0]]) {\n data_1[i] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[data-rowindex=\"' + this.selectedIndex + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[data-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n if (args.index !== 0) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex;\n }\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[this.parent.grid.selectedRowIndex];\n if (this.parent.enableVirtualization && this.isAddedRowByContextMenu) {\n this.addRowRecord = this.parent.getCurrentViewRecords()[this.addRowIndex];\n }\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = void 0;\n if (this.parent.enableVirtualization && args.index !== 0) {\n currentData = this.parent.flatData;\n }\n else if (this.parent.editSettings.mode === 'Batch' && this['isAddedRowByMethod'] && !isNullOrUndefined(this.addRowIndex)) {\n currentData = this.batchEditModule['batchRecords'];\n }\n else {\n currentData = this.parent.grid.getCurrentViewRecords();\n }\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.flatData.indexOf(this.addRowRecord);\n this.selectedIndex = this.addRowIndex;\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withinRange = this.parent.enableVirtualization && args.index !== 0 ? true :\n this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n if (!this.parent.isLocalData && this.parent.editModule.selectedIndex === -1) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = null;\n }\n else {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n }\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent) {\n Grid.Inject(Command);\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns CommandColumn module name\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n CommandColumn.prototype.destroy = function () {\n //this.removeEventListener();\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { Grid, getObject } from '@syncfusion/ej2-grids';\nimport { DetailRow as detailrow } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isRemoteData } from '../utils';\n/**\n * TreeGrid Detail Row module\n *\n * @hidden\n */\nvar DetailRow = /** @class */ (function () {\n function DetailRow(parent) {\n Grid.Inject(detailrow);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns DetailRow module name\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n DetailRow.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.on('detaildataBound', this.detaildataBound, this);\n this.parent.grid.on('detail-indentcell-info', this.setIndentVisibility, this);\n this.parent.on('childRowExpand', this.childRowExpand, this);\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('actioncomplete', this.actioncomplete, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DetailRow.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.off('detaildataBound', this.detaildataBound);\n this.parent.off('childRowExpand', this.childRowExpand);\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('actioncomplete', this.actioncomplete);\n this.parent.grid.off('detail-indentcell-info', this.setIndentVisibility);\n };\n DetailRow.prototype.setIndentVisibility = function (args) {\n var visible = 'visible';\n args[visible] = false;\n };\n DetailRow.prototype.dataBoundArg = function () {\n var detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\n if (isNullOrUndefined(parentItem) || !isNullOrUndefined(parentItem) &&\n getExpandStatus(this.parent, detailData.data, this.parent.grid.getCurrentViewRecords())) {\n this.parent.grid.detailRowModule.expand(elements[0]);\n }\n }\n };\n DetailRow.prototype.childRowExpand = function (args) {\n var detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n };\n DetailRow.prototype.rowExpandCollapse = function (args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (var i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n };\n DetailRow.prototype.detaildataBound = function (args) {\n var data = args.data;\n var row = args.detailElement.parentElement.previousSibling;\n var index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n var expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n var classlist = row.querySelector('.' + expandClass).classList;\n var gridClas = [].slice.call(classlist).filter(function (gridclass) { return (gridclass === expandClass); });\n var newNo = gridClas[0].length;\n var slicedclas = gridClas.toString().slice(6, newNo);\n var detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n };\n DetailRow.prototype.actioncomplete = function (args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n var spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n var focusModule = getObject('focusModule', this.parent.grid);\n var matrix = 'refreshMatrix';\n focusModule[matrix](true)({ rows: this.parent.grid.contentModule.getRows() });\n };\n /**\n * Destroys the DetailModule.\n *\n * @function destroy\n * @returns {void}\n */\n DetailRow.prototype.destroy = function () {\n this.removeEventListener();\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Cell, CellType } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport * as literals from '../base/constant';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('data-rowindex'), 10) === index; })[0];\n };\n VirtualTreeContentRenderer.prototype.getMovableVirtualRowByIndex = function (index) {\n return this.getRowCollection(index, true);\n };\n VirtualTreeContentRenderer.prototype.getFrozenRightVirtualRowByIndex = function (index) {\n return this.getRowCollection(index, false, false, true);\n };\n VirtualTreeContentRenderer.prototype.getRowCollection = function (index, isMovable, isRowObject, isFrozenRight) {\n var startIdx = parseInt(this.parent.getRows()[0].getAttribute(literals.dataRowIndex), 10);\n var rowCollection = isMovable ? this.parent.getMovableDataRows() : this.parent.getDataRows();\n rowCollection = isFrozenRight ? this.parent.getFrozenRightDataRows() : rowCollection;\n var collection = isRowObject ? this.parent.getCurrentViewRecords() : rowCollection;\n var selectedRow = collection[index - startIdx];\n if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n if (!isRowObject) {\n selectedRow = index <= this.parent.frozenRows ? rowCollection[index]\n : rowCollection[(index - startIdx) + this.parent.frozenRows];\n }\n else {\n selectedRow = index <= this.parent.frozenRows ? this.parent.getRowsObject()[index].data : selectedRow;\n }\n }\n return selectedRow;\n };\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else if (this.parent.root.editSettings.newRowPosition !== 'Top' && this.parent.root.editModule.selectedIndex !== -1 || this.parent.root.editModule.selectedIndex !== -1) {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n };\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[action]('data-ready', this.onDataReady, this);\n this.parent[action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction(), _this.parent);\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[action]('edit-reset', this.resetIseditValue, this);\n this.parent[action]('get-virtual-data', this.getData, this);\n this.parent[action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[action]('virtaul-cell-focus', this.cellFocus, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\n };\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n // To overcome the white space issue in last page when records collapsed\n if (this.parent.isFrozenGrid() && e.count < Object.keys(this.parent.dataSource).length) {\n var width = this.parent.enableColumnVirtualization ?\n this.getColumnOffset(this.parent.columns.length - 1) + 'px' : '100%';\n var height = (this.parent.getRowHeight() * e.count) -\n (this.parent.getRowHeight() * this.parent.pageSettings.pageSize);\n getValue('virtualEle', this).setVirtualHeight(height, width);\n }\n if (!this.parent.enableColumnVirtualization && !this.parent.isFrozenGrid()) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || (this.isDataSourceChanged && (this.startIndex === -1 || this.startIndex === 0 && this['preStartIndex'] === 0))) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n this['editedRowIndex'] = e.index;\n var selector = '.e-row[data-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = addArgs.dataRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[addAction].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n _super.prototype[resetIsEdit].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.editModule.addRecord(null, this.parent.root.editModule.selectedIndex);\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = this.parent.root.editModule.selectedIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[preventEvent]) {\n _this.parent.showSpinner();\n }\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n if (!_this.parent.isFrozenGrid()) {\n _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n this['scrollAfterEdit']();\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n var currentViewData = this.parent.currentViewData;\n var indexValue = 'index';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / this.parent.getRowHeight())\n + Math.ceil(vHeight / this.parent.getRowHeight()))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 && index !== this[selectedRowIndex]) {\n index = this[selectedRowIndex];\n }\n this.startIndex = index;\n this.endIndex = index + this.parent.pageSettings.pageSize;\n if (this.endIndex > this.totalRecords) {\n var lastInx = this.totalRecords - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n if (currentViewData.length && (currentViewData[0][indexValue] >= this.parent.pageSettings.pageSize / 2) &&\n ((currentViewData[0][indexValue] - this.startIndex) < (this.parent.pageSettings.pageSize / 2))) {\n this.startIndex = currentViewData[0][indexValue] - (this.parent.pageSettings.pageSize / 2);\n this.endIndex = this.startIndex + this.parent.pageSettings.pageSize;\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('data-rowindex');\n }\n if (firsttdinx === 0) {\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var isLastBlock = (this[selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (currentViewData.length && this.startIndex > currentViewData[0][indexValue] &&\n ((this.startIndex - currentViewData[0][indexValue]) < (this.parent.pageSettings.pageSize / 2))) {\n this.startIndex = currentViewData[0][indexValue] + (this.parent.pageSettings.pageSize / 2);\n }\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - this.parent.getRowHeight() * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left') ||\n ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent))) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n this.requestType = 'virtualscroll';\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n var isFrozen = this.parent.isFrozenGrid();\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent) || this.parent.isFrozenGrid()) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n if (isFrozen && isNullOrUndefined(this.requestType) && getValue('requestTypes', this).indexOf('isFrozen') === -1) {\n getValue('requestTypes', this).push('isFrozen');\n this.requestType = 'isFrozen';\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n if (getValue('requestTypes', this).indexOf('isFrozen') !== -1) {\n getValue('requestTypes', this).splice(getValue('requestTypes', this).indexOf('isFrozen'), 1);\n this.requestType = this.requestType === 'isFrozen' ? undefined : this.requestType;\n }\n if (isFrozen && (!this.isExpandCollapse || this.translateY === 0)) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(0, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.dataRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback, instance) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback, instance), this);\n if (getValue('options', this).movableContainer) {\n var movableContainerRect = 'movableContainerRect';\n _super.prototype[movableContainerRect] = getValue('options', this).movableContainer.getBoundingClientRect();\n EventHandler.add(getValue('options', this).movableContainer, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback, instance), this);\n }\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback, instance) {\n var _this = this;\n //const delay: number = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n //const debounced100: Function = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced50;\n if (current.axis === 'X') {\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n if ((instance.dataSource instanceof DataManager && instance.dataSource.dataSource.url !== undefined\n && !instance.dataSource.dataSource.offline && instance.dataSource.dataSource.url !== '') || isCountRequired(instance)) {\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({\n direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement\n });\n }\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || requestType === 'searching' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else if (!this.parent['isExpandAll']) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n startIndex = startIndex < 0 ? 0 : startIndex;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (!parentGrid.isFrozenGrid()) {\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n //renderer.addRenderer(RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this)));\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ColumnFreezeContentRenderer, FreezeContentRender, FreezeRowModelGenerator, RenderType } from '@syncfusion/ej2-grids';\nimport * as literals from '../base/constant';\nimport { ColumnVirtualFreezeRenderer, setDebounce, VirtualFreezeHdrRenderer, VirtualFreezeRenderer } from '@syncfusion/ej2-grids';\nimport { TreeInterSectionObserver, VirtualTreeContentRenderer } from './virtual-tree-content-render';\nimport { getValue } from '@syncfusion/ej2-base';\n/**\n * VirtualTreeFreezeRenderer is used to render the virtual table within the frozen and movable content table\n *\n * @hidden\n */\nvar VirtualTreeFreezeRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeFreezeRenderer, _super);\n function VirtualTreeFreezeRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * @returns {void}\n * @hidden\n */\n VirtualTreeFreezeRenderer.prototype.renderTable = function () {\n this.freezeRowGenerator = new FreezeRowModelGenerator(this.parent);\n this.virtualRenderer = new VirtualTreeContentRenderer(this.parent, this.serviceLoc);\n this.virtualRenderer.header = this.serviceLoc.getService('rendererFactory')\n .getRenderer(RenderType.Header).virtualHdrRenderer;\n FreezeContentRender.prototype.renderTable.call(this);\n this.virtualRenderer.setPanel(this.parent.getContent());\n this.scrollbar = this.parent.getContent().querySelector('.e-movablescrollbar');\n var movableCont = this.getMovableContent();\n var minHeight = this.parent.height;\n this.virtualRenderer.virtualEle.content = this.virtualRenderer.content = this.getPanel().querySelector('.' + literals.content);\n this.virtualRenderer.virtualEle.content.style.overflowX = 'hidden';\n this.virtualRenderer.virtualEle.renderFrozenWrapper(minHeight);\n this.virtualRenderer.virtualEle.renderFrozenPlaceHolder();\n if (this.parent.enableColumnVirtualization) {\n this.virtualRenderer.virtualEle.movableContent = this.virtualRenderer.movableContent\n = this.getPanel().querySelector('.' + literals.movableContent);\n this.virtualRenderer.virtualEle.renderMovableWrapper(minHeight);\n this.virtualRenderer.virtualEle.renderMovablePlaceHolder();\n var tbl = movableCont.querySelector('table');\n this.virtualRenderer.virtualEle.movableTable = tbl;\n this.virtualRenderer.virtualEle.movableWrapper.appendChild(tbl);\n movableCont.appendChild(this.virtualRenderer.virtualEle.movableWrapper);\n movableCont.appendChild(this.virtualRenderer.virtualEle.movablePlaceholder);\n }\n this.virtualRenderer.virtualEle.wrapper.appendChild(this.getFrozenContent());\n this.virtualRenderer.virtualEle.wrapper.appendChild(movableCont);\n this.virtualRenderer.virtualEle.table = this.getTable();\n setDebounce(this.parent, this.virtualRenderer, this.scrollbar, this.getMovableContent());\n };\n /**\n * @param {HTMLElement} target - specifies the target\n * @param {DocumentFragment} newChild - specifies the newChild\n * @param {NotifyArgs} e - specifies the notifyargs\n * @returns {void}\n * @hidden\n */\n VirtualTreeFreezeRenderer.prototype.appendContent = function (target, newChild, e) {\n getValue('observer', this.virtualRenderer).options.debounceEvent = false;\n this.virtualRenderer['observers'] = new TreeInterSectionObserver(getValue('observer', this.virtualRenderer).element, getValue('observer', this.virtualRenderer).options, getValue('observer', this.virtualRenderer).movableEle);\n this.virtualRenderer['contents'] = this.getPanel().firstChild;\n _super.prototype.appendContent.call(this, target, newChild, e);\n };\n /**\n * @param {Object[]} data - specifies the data\n * @param {NotifyArgs} e - specifies the notifyargs\n * @returns {Row<Column>[]} returns the row\n * @hidden\n */\n VirtualTreeFreezeRenderer.prototype.generateRows = function (data, e) {\n return _super.prototype.generateRows.call(this, data, e);\n };\n return VirtualTreeFreezeRenderer;\n}(VirtualFreezeRenderer));\nexport { VirtualTreeFreezeRenderer };\n/**\n * ColumnVirtualTreeFreezeRenderer is used to render the virtual table within the frozen and movable content table\n *\n * @hidden\n */\nvar ColumnVirtualTreeFreezeRenderer = /** @class */ (function (_super) {\n __extends(ColumnVirtualTreeFreezeRenderer, _super);\n function ColumnVirtualTreeFreezeRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.serviceLoc = locator;\n _this.eventListener('on');\n return _this;\n }\n /**\n * @returns {void}\n * @hidden\n */\n ColumnVirtualTreeFreezeRenderer.prototype.renderTable = function () {\n this.virtualRenderer = new VirtualTreeContentRenderer(this.parent, this.serviceLoc);\n this.virtualRenderer.header = this.serviceLoc.getService('rendererFactory')\n .getRenderer(RenderType.Header).virtualHdrRenderer;\n this.freezeRowGenerator = new FreezeRowModelGenerator(this.parent);\n ColumnFreezeContentRenderer.prototype.renderTable.call(this);\n this.virtualRenderer.setPanel(this.parent.getContent());\n this.scrollbar = this.parent.getContent().querySelector('.e-movablescrollbar');\n var frozenRightCont = this.getFrozenRightContent();\n var frzCont = this.getFrozenContent();\n var movableCont = this.getMovableContent();\n if (this.parent.getFrozenMode() === 'Right') {\n frzCont = frozenRightCont;\n }\n this.virtualRenderer.virtualEle.content = this.virtualRenderer.content = this.getPanel().querySelector('.' + literals.content);\n this.virtualRenderer.virtualEle.content.style.overflowX = 'hidden';\n var minHeight = this.parent.height;\n this.virtualRenderer.virtualEle.renderFrozenWrapper(minHeight);\n this.virtualRenderer.virtualEle.renderFrozenPlaceHolder();\n _super.prototype['renderVirtualFrozenLeft'].call(this, frzCont, movableCont);\n _super.prototype['renderVirtualFrozenRight'].call(this, frzCont, movableCont);\n _super.prototype['renderVirtualFrozenLeftRight'].call(this, frzCont, movableCont, frozenRightCont);\n this.virtualRenderer.virtualEle.table = this.getTable();\n setDebounce(this.parent, this.virtualRenderer, this.scrollbar, this.getMovableContent());\n };\n ColumnVirtualTreeFreezeRenderer.prototype.appendContent = function (target, newChild, e) {\n getValue('observer', this.virtualRenderer).options.debounceEvent = false;\n this.virtualRenderer['observers'] = new TreeInterSectionObserver(getValue('observer', this.virtualRenderer).element, getValue('observer', this.virtualRenderer).options, getValue('observer', this.virtualRenderer).movableEle);\n this.virtualRenderer['contents'] = this.getPanel().firstChild;\n _super.prototype.appendContent.call(this, target, newChild, e);\n };\n return ColumnVirtualTreeFreezeRenderer;\n}(ColumnVirtualFreezeRenderer));\nexport { ColumnVirtualTreeFreezeRenderer };\n/**\n * VirtualTreeFreezeHdrRenderer is used to render the virtual table within the frozen and movable header table\n *\n * @hidden\n */\nvar VirtualTreeFreezeHdrRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeFreezeHdrRenderer, _super);\n function VirtualTreeFreezeHdrRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @returns {void}\n * @hidden\n */\n VirtualTreeFreezeHdrRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n };\n VirtualTreeFreezeHdrRenderer.prototype.rfshMovable = function () {\n _super.prototype.rfshMovable.call(this);\n };\n return VirtualTreeFreezeHdrRenderer;\n}(VirtualFreezeHdrRenderer));\nexport { VirtualTreeFreezeHdrRenderer };\n","import { ColumnFreezeContentRenderer, ColumnFreezeHeaderRenderer, FreezeContentRender, FreezeRender, parentsUntil, RenderType } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass, getValue } from '@syncfusion/ej2-base';\nimport { ColumnVirtualTreeFreezeRenderer, VirtualTreeFreezeRenderer, VirtualTreeFreezeHdrRenderer } from '../renderer/virtual-tree-freeze-render';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n this.parent.grid.on('initial-load', this.instantiateRenderer, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n this.parent.grid.off('initial-load', this.instantiateRenderer);\n };\n Freeze.prototype.instantiateRenderer = function () {\n var renderer = getValue('serviceLocator', this.parent.grid).getService('rendererFactory');\n if (this.parent.getFrozenColumns()) {\n if (this.parent.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualTreeFreezeHdrRenderer(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n else {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new FreezeRender(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n if (this.parent.enableVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeFreezeRenderer(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n else {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new FreezeContentRender(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n }\n if (this.parent.getFrozenLeftColumnsCount() || this.parent.getFrozenRightColumnsCount()) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new ColumnFreezeHeaderRenderer(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n if (this.parent.enableVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new ColumnVirtualTreeFreezeRenderer(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n else {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new ColumnFreezeContentRenderer(getValue('grid', this.parent), getValue('serviceLocator', this.parent.grid))]);\n }\n }\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getMovableDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell' && (!e.target['classList'].contains('e-treegridcollapse') && !e.target['classList'].contains('e-treegridexpand'))) {\n this.parent.grid.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getExpandStatus } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n if (this.parent.grid.infiniteScrollModule['isInitialRender'] && !this.parent.initialRender) {\n this.parent.grid.pageSettings.currentPage = 1;\n }\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.grid.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.grid.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n };\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n InfiniteScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return InfiniteScroll;\n}());\nexport { InfiniteScroll };\n","import * as index from './index';\nindex.TreeGrid.Inject(index.Filter, index.Page, index.Sort, index.Reorder, index.Toolbar, index.Aggregate, index.Resize, index.ColumnMenu, index.ExcelExport, index.PdfExport, index.CommandColumn, index.ContextMenu, index.Edit, index.Selection, index.VirtualScroll, index.DetailRow, index.RowDD, index.Freeze, index.ColumnChooser, index.Logger, index.InfiniteScroll);\nexport * from './index';\n"],"names":["isRemoteData","parent","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","showCheckbox","isFilterChildHierarchy","isNullOrUndefined","grid","searchSettings","key","hierarchyMode","allowFiltering","filterSettings","findParentRecords","records","datas","len","Object","keys","getObject","push","getExpandStatus","record","parents","childParent","parentRecord","parentItem","getParentData","uniqueID","initialRender","expandStateMapping","expanded","findChildrenRecords","hasChildRecords","childRecords","filter","item","isSummaryRow","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","addAction","Array","extend","newRowPosition","k","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","e","p","enableImmutableMode","removeChildRecords","currentViewRecords","getCurrentViewRecords","unshift","primaryKeys","currentdata","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","updatedParent","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","TreeClipboard","serviceLocator","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","getSelection","toString","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","selectedItems","filteredList","searchingRecords","addEventListener","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","checkBox","checkWrap","parentsUntil","querySelector","closest","selectCheckboxes","triggerChkChangeEvent","nextElementSibling","autoCheckHierarchy","checkBoxvalue","headerSelection","checkState","rowElement","checked","rowData","getCheckedRecords","getCheckboxcolumnIndex","mappingUid","columnIndex","col","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","aria-label","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","indeter","checkChildRecords","checkBoxRecord","hasFilteredChildRecords","checkAll","multiFilterCheckState","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","chkstate","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Print","GridPrint","printTreeGrid","printGrid","gridElement","queryCellInfo","rowDataBound","beforeDataBound","addClass","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","expandIcon","expand","updateTreeCell","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","template","rowTemplate","treeColumn","colindex","templateCompiler","textContent","appendChildren","children","tempID","element","id","isReact","result","refreshReactColumnTemplateByUid","columnUid","clearTemplate","undefined","rowsObj","getRowsObject","indent","getIndentCount","cellIndex","getNormalizedColumnIndex","isDataRow","cellRenderer","CellRenderer","td","getCellFromIndex","refreshTD","treecell","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","collectExpandingRecs","dataProcessor","isRemote","convertToFlatData","query","Query","filterKey","params","param","where","addParams","hasChildMapping","qry","clone","queries","executeQuery","then","DataUtil","distinct","httpRequest","statusText","setValue","zerothLevelData","dataManagerSuccess","hideSpinner","convertJSONData","tempData","selfData","mappingData","executeLocal","group","groupData","items","selfReferenceUpdate","createRecords","referenceData","shift","loadChildOnDemand","getUid","Math","ceil","random","rowDetails","isChild","gridRows","getContentTable","childRecord","targetEle","getElementsByClassName","getRowObjectFromUID","childRows","parentRow","expandingTd","detailRowModule","fetchRemoteChildData","getDataModule","generateQuery","clonequries","fn","showSpinner","currentViewData","inx","haveChild","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","compFun","sortComparer","bind","direction","sortBy","rowDragAndDropModule","dragdIndex","dropdIndex","sortArgs","temp","paging","printMode","actArgs","actualResults","dataResult","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","templateFn","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","indentOutdentAction","modifiedRecords","stackedHeader","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","mergePersistTreeGridData","injectedModules","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","search","searchString","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","findnextRowElement","selectRow","row_1","clearSelection","findPreviousRowElement","rIndex","cIndex","summaryRowElement","previousElementSibling","infiniteScrollData","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","getGridColumns","member","toolbar","contextMenuItems","allowExcelExport","freezePresent","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","portals","isVue","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","refreshToolbarItems","renderComplete","destroyTemplateFn","toolbarElement","toolbarModule","getToolbar","indentID","outdentID","indentElement","outdentElement","afterGridRender","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","enableAdaptiveUI","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","enableVirtualMaskRow","triggerEvents","IsExpandCollapseClicked","bindGridEvents","rowSelecting","rowDeselecting","rowSelected","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","recordDoubleClick","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","persistSelection","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","toolbarClick","callBackPromise","toolbarargs","cellSelecting","cellselectingArgs","beginEdit","begineditArgs","isExpandRefresh","cellSave","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","cellsaveArgs","cellSaved","cellEdit","promise","batchAdd","beforeBatchSave","beforeBatchAdd","batchDelete","beforeBatchDelete","batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","actionBegin","dataManager","isQueryInvokedFromData","callBackPromise_2","actionComplete","updateTreeGridModel","ag","showChildSummary","refresh","selectedItem_1","selectedRecords","dropIndex","dropPosition","selectedRows","isFrozenGrid","movableContent","frozenContent","detailDataBound","contextMenuClick","contextMenuOpen","rowDragStartHelper","rowDragStart","rowDrag","isEdit","rowDrop","registeredTemplate","allowEditOnDblClick","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","iconCss","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","enablePersistence","treeColumnTextAlign","textAlign","treeColumnField","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","updateTreeColumnTextAlign","closeEdit","getColumnByField","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","ignoreOnColumn","currentObject","val","ignoreInArrays","addOnPersist","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","startEdit","editCell","enableToolbarItems","isEnable","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","visibleRecords","getVisibleRecords","sHeight","scrollHeight","clientHeight","getContent","goToPage","pageNo","pagerModule","updateExternalMessage","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","rowInfo_1","getCollapseExpandRecords","expandingArgs","expandCollapse","expandCollapseAllChildren","collapseArgs","setHeightForFrozenContent","updateExpandStateMapping","freeze","refreshScrollOffset","collapsingArgs","firstElementChild","scrollTop","getRowHeight","scrollBy","state","totalRecords","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","this_1","puniqueID_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","remoteExpand","localExpand","removeAttribute","flatDataRecords","deff","data_1","length_1","scrollHeightBeforeRefresh","rows_1","args_1","collapseRemoteChild","movableRows","freezeRightRows","rows_2","getMovableRows","getFrozenRightRows","gridRowsObject","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","cRow","eRows","i_1","updateRowAndCellElements","updateResultModel","returnResult","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getFrozenRightRowByIndex","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cnt","isFrozen","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","outdent","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","rowDropped","rowsAdded","rowsRemoved","tObj","dropRows","orderToIndex","dropData","totalRecord","parentrow","request","selectedItemIndex","selectedItem","selectedRow","selectedRecord","record_1","eventTrigger","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","tempDataSource","idx","droppedRecord","proxy","removeFirstrowBorder","canremove","removeLastrowBorder","islastRowIndex","isEmptyRow","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","getBoundingClientRect","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","dropItemSpan","dropItemLeft","left","spanLeft","errorelem","errorValue","setStyleAttribute","border","box","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","updateModifiedRecords","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","getDatas","visualData","getDataInfo","getData","generateRows","virtualInfo","info","url","blockIndexes","getBlockIndexes","checkAndResetCache","clear","cache","movableCache","frozenRightCache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","isCollapsedStatePersist","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","updatePageSize","pageingDetails","updateSize","gridPagerModule","pageSizes","pagerObj","pagerdropdownModule","getLocalizedLabel","pageSize","propname","skip","size","take","dm_1","or","parents_1","floor","Toolbar","tool","refreshToolbar","toolbarClickHandler","indentEle","outdentEle","selectedrow","isCheckBoxSelection","Aggregate","GridAggregate","flatChildRecords","isSort","flatRecords","summaryLength","dataLength","getChildRecordsLength","summaryRowIndex","len_1","createSummaryItem","idx_1","currentIndex","summaryParent","length_2","itemData","summary","displayColumn","keys_1","getSummaryValues","summaryColumn","single","getFormatFromType","tempObj","requiresCount","summaryKey","sumData","toLowerCase","calculateAggregate","disp","value_1","summaryformat","Sort","GridSort","flatSortedData","updateModel","createdSortedRecords","sortParams","iterateSort","childSort","ColumnMenu","GridColumnMenu","getColumnMenu","columnMenuModule","ContextMenu","cmenu","addRow","editRecord","event","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","batchSave","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","frozenCols","columnObject","getColumnByIndex","added","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","changes","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","table","matrix","newlyAddedRecords","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","endIndex","rowPosition","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","isAddedRowByContextMenu","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","crudAction","beginAdd","keyPressed","lastCellTab","contentready","editActionEvents","gridDblClick","customCellSave","savePreviousRowPosition","beforeStartEdit","beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","dataRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","toolbarID","cellDetails","treeCell","afterCellSave","form","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","mRow","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","treeColIndex","l","data2","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","newlyAddedRecord","seletedRow","beginAddEdit","primaryKeys_2","selector","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","dataBoundArg","detaildataBound","setIndentVisibility","childRowExpand","rowExpandCollapse","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","getMovableVirtualRowByIndex","getRowCollection","getFrozenRightVirtualRowByIndex","isMovable","isRowObject","isFrozenRight","startIdx","rowCollection","virtualOtherAction","indexModifier","setTop","nextSetResIndex","lastIndex","root","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","getColumnOffset","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","gridTop","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","instance","virtualScrollHandlers","movableContainer","debounced50","debounce","prevTop","prevLeft","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","VirtualTreeFreezeRenderer","freezeRowGenerator","FreezeRowModelGenerator","virtualRenderer","serviceLoc","getRenderer","virtualHdrRenderer","FreezeContentRender","setPanel","movableCont","getMovableContent","minHeight","overflowX","renderFrozenWrapper","renderFrozenPlaceHolder","renderMovableWrapper","renderMovablePlaceHolder","tbl","movableTable","movableWrapper","movablePlaceholder","wrapper","getFrozenContent","setDebounce","movableEle","VirtualFreezeRenderer","ColumnVirtualTreeFreezeRenderer","ColumnFreezeContentRenderer","frozenRightCont","getFrozenRightContent","frzCont","getFrozenMode","ColumnVirtualFreezeRenderer","VirtualTreeFreezeHdrRenderer","rfshMovable","VirtualFreezeHdrRenderer","Freeze","FreezeColumn","dblClickHandler","instantiateRenderer","FreezeRender","ColumnFreezeHeaderRenderer","frozenRightRows","frozenrows","rData","queryselector","freezeModule","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","actions","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow","index.TreeGrid","index.Filter","index.Page","index.Sort","index.Reorder","index.Toolbar","index.Aggregate","index.Resize","index.ColumnMenu","index.ExcelExport","index.PdfExport","index.CommandColumn","index.ContextMenu","index.Edit","index.Selection","index.VirtualScroll","index.DetailRow","index.RowDD","index.Freeze","index.ColumnChooser","index.Logger","index.InfiniteScroll"],"mappings":"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EAASjgB,UAAW,WAAQ,IAC/B8E,IACI66B,WACD1f,EAASjgB,UAAW,gBAAa,IACpC8E,IACI66B,WACD1f,EAASjgB,UAAW,eAAY,IACnC8E,IACI66B,WACD1f,EAASjgB,UAAW,iBAAc,IACrC8E,IACI66B,WACD1f,EAASjgB,UAAW,gBAAa,IACpC8E,IACI66B,WACD1f,EAASjgB,UAAW,eAAY,IACnC8E,IACI66B,WACD1f,EAASjgB,UAAW,gBAAa,IACpC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,gBAAa,IACpC8E,IACI66B,WACD1f,EAASjgB,UAAW,eAAY,IACnC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,wBAAqB,IAC5C8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,eAAY,IACnC8E,IACI66B,WACD1f,EAASjgB,UAAW,oBAAiB,IACxC8E,IACI66B,WACD1f,EAASjgB,UAAW,gBAAa,IACpC8E,IACI66B,WACD1f,EAASjgB,UAAW,wBAAqB,IAC5C8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,wBAAqB,IAC5C8E,IACI66B,WACD1f,EAASjgB,UAAW,mBAAgB,IACvC8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,oBAAiB,IACxC8E,IACIc,YAAS,IACVqa,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,mBAAgB,IACvC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,oBAAiB,IACxC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,oBAAiB,IACxC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,mBAAgB,IACvC8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,eAAY,IACnC8E,IACI66B,WACD1f,EAASjgB,UAAW,iBAAc,IACrC8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,iBAAc,IACrC8E,IACI66B,WACD1f,EAASjgB,UAAW,iBAAc,IACrC8E,IACI66B,WACD1f,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,oBAAiB,IACxC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,mBAAgB,IACvC8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,uBAAoB,IAC3C8E,IACI66B,WACD1f,EAASjgB,UAAW,iBAAc,IACrC8E,IACI66B,WACD1f,EAASjgB,UAAW,kBAAe,IACtC8E,IACI66B,WACD1f,EAASjgB,UAAW,cAAW,IAClC8E,IACI66B,WACD1f,EAASjgB,UAAW,mBAAgB,IACvC8E,IACI66B,WACD1f,EAASjgB,UAAW,yBAAsB,IAC7C8E,IACI66B,WACD1f,EAASjgB,UAAW,cAAW,IAClC8E,IACIc,YAAU,IACXqa,EAASjgB,UAAW,uBAAoB,IAC3C8E,IACI26B,aAAYnuB,IACb2O,EAASjgB,UAAW,wBAAqB,IAC5C8E,IACIc,YAAS,IACVqa,EAASjgB,UAAW,uBAAoB,IAC3C8E,IACIc,YAAS,IACVqa,EAASjgB,UAAW,qBAAkB,IACzC8E,IACI66B,WACD1f,EAASjgB,UAAW,uBAAoB,IAC3C8E,IACI66B,WACD1f,EAASjgB,UAAW,6BAA0B,IACjD8E,IACI66B,WACD1f,EAASjgB,UAAW,yBAAsB,IAC7C8E,IACI66B,WACD1f,EAASjgB,UAAW,+BAA4B,IACnD8E,IACI66B,WACD1f,EAASjgB,UAAW,wBAAqB,IAC5C8E,IACI66B,WACD1f,EAASjgB,UAAW,0BAAuB,IAC9C8E,IACI66B,WACD1f,EAASjgB,UAAW,sBAAmB,IAC1C8E,IACI66B,WACD1f,EAASjgB,UAAW,wBAAqB,IAC5CigB,EAAWe,EAAalc,IACpB86B,yBACD3f,IAEL4f,aC/6HEC,GAAyB,WAMzB,QAASA,GAAQ9lC,GACbqM,OAAKC,OAAOy5B,WACZt8B,KAAKzJ,OAASA,EACdyJ,KAAKwH,mBAgDT,MAxCA60B,GAAQ9/B,UAAUwG,cAAgB,WAC9B,MAAO,WAMXs5B,EAAQ9/B,UAAUiL,iBAAmB,WACjCxH,KAAKzJ,OAAOkR,GAAG,iBAAkBzH,KAAKu8B,cAAev8B,OAEzDq8B,EAAQ9/B,UAAUuL,oBAAsB,WAChC9H,KAAKzJ,OAAOwR,aAGhB/H,KAAKzJ,OAAOyR,IAAI,iBAAkBhI,KAAKu8B,gBAQ3CF,EAAQ9/B,UAAU0K,QAAU,WACxBjH,KAAK8H,uBAETu0B,EAAQ9/B,UAAUggC,cAAgB,WAK9B,IAAK,GAFDC,GADAjsB,EAAavQ,KAAKzJ,OAAkB,YAAEyJ,KAAKzJ,OAAO6I,iBAElDq9B,EAAcz8B,KAAKzJ,OAAOoJ,aACrB+8B,EAAI,EAAGA,EAAID,EAAYrlC,OAAQslC,IAGpC,GAFsBtkC,YAAU,QAASmY,KACjBnY,YAAU,QAASqkC,EAAYC,IACZ,CACvCF,EAAYE,CACZ,OAGR18B,KAAKzJ,OAAOkK,eAAgBrB,gBAAiBo9B,IAAa,IAEvDH,KCzDPM,GAAwB,WAMxB,QAASA,GAAOpmC,GACZqM,OAAKC,OAAO+5B,UACZ58B,KAAKzJ,OAASA,EAgClB,MAxBAomC,GAAOpgC,UAAUujB,eAAiB,SAAU+c,GACxC78B,KAAKzJ,OAAOiB,KAAKsoB,eAAe+c,IAQpCF,EAAOpgC,UAAUwG,cAAgB,WAC7B,MAAO,UAQX45B,EAAOpgC,UAAU0K,QAAU,WACnBjH,KAAKzJ,OAAOwR,aAGhB/H,KAAKzJ,OAAOiB,KAAKwoB,aAAa/Y,WAE3B01B,KClCPG,GAAuB,WAMvB,QAASA,GAAMvmC,GAEXyJ,KAAK+8B,SAAU,EAEf/8B,KAAKg9B,oBAAqB,EAE1Bh9B,KAAK8c,gBAAkB,kBAEvB9c,KAAKutB,gBAAkB,kBAEvBvtB,KAAK0tB,aAAe,eAEpB1tB,KAAKi9B,aAAc,EAEnBj9B,KAAKk9B,eAAgB,EACrBt6B,OAAKC,OAAOs6B,SACZn9B,KAAKzJ,OAASA,EACdyJ,KAAKwH,mBAk0CT,MAh0CAs1B,GAAMvgC,UAAU6gC,0BAA4B,SAAUrsB,GAWlD,OATI/Q,KAAKzJ,OAAOC,qBAAsBC,gBAAe+C,EAAUwG,KAAKzJ,QAC3CyJ,KAAKzJ,OAAOiB,KAAKhB,WAAWA,WAAWiF,KAGvCuE,KAAKzJ,OAAOiB,KAAKhB,YAEV4C,OAAO,SAAU+D,GAC7C,MAAOA,GAAEtE,WAAakY,KAQ9B+rB,EAAMvgC,UAAUiL,iBAAmB,WAC/BxH,KAAKzJ,OAAOkR,GhBsEI,cgBtEkBzH,KAAKq9B,WAAYr9B,MACnDA,KAAKzJ,OAAOkR,GhBuEI,cgBvEkBzH,KAAKs9B,WAAYt9B,MACnDA,KAAKzJ,OAAOkR,GhBgEC,WgBhEkBzH,KAAKu9B,UAAWv9B,MAC/CA,KAAKzJ,OAAOkR,GhBiEI,cgBjEkBzH,KAAKw9B,YAAax9B,OAUxD88B,EAAMvgC,UAAUq/B,YAAc,SAAUC,EAAaC,EAASnK,GAC1D,GAAI8L,GAAOz9B,KAAKzJ,MAIhB,IAAIslC,EAAY,KAAOC,IAA8D,KAAlD,QAAS,QAAS,SAASt9B,QAAQmzB,GAAtE,CACqB,UAAbA,IACA3xB,KAAKytB,aAAe,cAEP,UAAbkE,IACA3xB,KAAKytB,aAAe,iBAEP,UAAbkE,IACA3xB,KAAKytB,aAAe,iBAExBztB,KAAKzJ,OAAmB,aAAIyJ,KAAKytB,YAEjC,KAAK,GADDhvB,MACKvH,EAAI,EAAGA,EAAI2kC,EAAYzkC,OAAQF,IAAK,CACrCgD,EAAQ8F,KAAKzJ,OAAOqI,cAAci9B,EAAY3kC,IAAI6P,QACtDtI,GAAKvH,GAAK8I,KAAKzJ,OAAOiH,wBAAwBtD,GAElD,GACIgJ,IACAzE,KAAMA,EACN+uB,UAAWsO,EAef,IAbK9kC,EAAgBgJ,KAAKzJ,SACtByJ,KAAK09B,SAASx6B,GAND,GASbu6B,EAAK3kB,cACL2kB,EAAKvgC,SAAW8C,KAAK29B,aAAaF,EAAKvgC,WAEf,eAAxB8C,KAAKzJ,OAAa,SACbgB,oBAAkBkH,EAAK,GAAG9F,cAC3B8F,EAAK,GAAGtE,MAAQsE,EAAK,GAAG9F,WAAWwB,MAAQ,IAGnD6F,KAAKzJ,OAAOiB,KAAK61B,UACbrtB,KAAKzJ,OAAO8G,qBAA6C,kBAAtB2C,KAAKytB,aAAkC,CACtEvzB,MAAQ,EACR8F,MAAKzJ,OAAO8I,oBACZnF,EAAQ8F,KAAKzJ,OAAO6I,gBAAkB,EAET,cAAxBY,KAAKzJ,OAAa,SACvB2D,EAAQ8F,KAAKzJ,OAAO6I,gBAExB,IAAIT,GAAMqB,KAAKzJ,OAAOsI,UAAUg9B,EAAY,IACxC+B,EAAW16B,EAAKzE,KAAK,GAErB0G,MADA04B,MAEQxlC,KAAKulC,GACjBz4B,EAAK9M,KAAKsG,EACV,IACI1B,GAAarE,EAAcoH,KAAKzJ,OAAQ2M,EAAKzE,KAAK,GAAiB,gBACnEq/B,EAAY99B,KAAKzJ,OAAOsI,UAAUi9B,EACtC+B,GAAYxlC,KAAK4E,GACjBkI,EAAK9M,KAAKylC,GACV99B,KAAKzJ,OAA+B,yBAAEsnC,EAAa14B,EAAMjL,GAE7D,GAAI8F,KAAKzJ,OAAO8G,qBAA+C,eAAxB2C,KAAKzJ,OAAa,OAAoB,CACzE,GAAI2D,OAAQ,EACR8F,MAAKzJ,OAAO8I,oBACZnF,EAAQ8F,KAAKzJ,OAAO6I,gBAAkB,EAET,eAAxBY,KAAKzJ,OAAa,SACvB2D,EAAQ8F,KAAKzJ,OAAO6I,gBAExB,IAAI7G,GAAS2K,EAAKzE,KAAK,GACnBE,EAAMqB,KAAKzJ,OAAOsI,UAAUg9B,EAAY,IACxCgC,KACA14B,IACJ04B,GAAYxlC,KAAKE,GACjB4M,EAAK9M,KAAKsG,GACVqB,KAAKzJ,OAA+B,yBAAEsnC,EAAa14B,EAAMjL,MAOrE4iC,EAAMvgC,UAAUsgB,oBAAsB,SAAUtkB,EAAQwlC,GACpD,GAAIN,GAAOz9B,KAAKzJ,OAGZynC,GAAqB,CACzB,KAAIzmC,oBAAkBgB,KAA6C,IAAlCyH,KAAKzJ,OAAO4wB,iBAA7C,CAIQnnB,KAAKzJ,OAAO4H,uBAA0D,IAAlC6B,KAAKzJ,OAAO4wB,iBAChD6W,EAAoBh+B,KAAKzJ,OAAOmkC,kBAAkB,GAAG3zB,UAEd,IAAlC/G,KAAKzJ,OAAO4wB,mBACjB6W,EAAoBh+B,KAAKzJ,OAAO4wB,kBAEpCnnB,KAAKi+B,aAAe1mC,oBAAkBgB,GAClCklC,EAAKjgC,wBAAwBwgC,GAAqBzlC,CACtD,IAAI8+B,GAAkBr3B,KAAKzJ,OAAOgF,0BAA0B,GACxDwL,EAAW/G,KAAKzJ,OAAOiB,KAAKsH,wBAAwBkB,KAAKi+B,aAAa5G,GAO1E,IANAr3B,KAAKk+B,YAAcl+B,KAAKzJ,OAAOyJ,KAAK0tB,eAAuC,IAAvBsQ,EAChDh+B,KAAKzJ,OAAOmkC,kBAAkB,GAC5B16B,KAAKzJ,OAAOiB,KAAKoH,cAAcmI,GACrC/G,KAAKm+B,eAAiBn+B,KAAKzJ,OAAOyJ,KAAKutB,kBAA0C,IAAvByQ,EACtDP,EAAKjgC,wBAAwBwgC,GAC3Bh+B,KAAKi+B,aACK,WAAZF,EAAsB,CACtB,GAAIK,GAAWX,EAAKjgC,wBAAwBwC,KAAKk+B,YAAYn3B,SAAW,GACpEymB,MAAY,EAChB,IAAkC,IAA9BxtB,KAAKk+B,YAAYn3B,WAAiD,IAA/B/G,KAAKk+B,YAAYn3B,UACpD02B,EAAKjgC,wBAAwBwC,KAAKk+B,YAAYn3B,UAAU5M,MAAQikC,EAASjkC,OAAU,EACnF,MAEJ,IAAIikC,EAASjkC,MAAQ6F,KAAKm+B,eAAehkC,MACrC,IAASjD,EAAI,EAAGA,EAAIumC,EAAKjgC,wBAAwBpG,OAAQF,IACjDumC,EAAKjgC,wBAAwBtG,GAAGkD,WAAagkC,EAASzlC,WAAWyB,WACjEozB,EAAYt2B,EACRumC,EAAKt/B,uBACLqvB,EAAYrd,SAASstB,EAAK5+B,UAAU3H,GAAGqS,aAAa,iBAAkB,UAMlFikB,GAAYxtB,KAAKk+B,YAAYn3B,SAAW,GAExC/G,KAAKzJ,OAAO4H,uBAAwB6B,KAAKm+B,gBAAoBC,EAASjkC,MAAQ6F,KAAKm+B,eAAehkC,QAClGqzB,EAAYrd,SAASnQ,KAAKk+B,YAAY30B,aAAa,iBAAkB,IAAM,GAE/Ek0B,EAAW,OAAI,YACfA,EAAiB,UAAIjQ,EACrBxtB,KAAKq+B,aAAa,YAAa7Q,OAE9B,IAAgB,YAAZuQ,EAAuB,CAC5B,IAAmC,IAA/B/9B,KAAKk+B,YAAYn3B,UAAiD,IAA9B/G,KAAKk+B,YAAYn3B,UACa,IAAlE02B,EAAKjgC,wBAAwBwC,KAAKk+B,YAAYn3B,UAAU5M,MACxD,MAIJ,KAAK,GAFDqzB,OAAY,GACZ70B,EAAaqH,KAAKm+B,eAAexlC,WAC5BzB,EAAI,EAAGA,EAAIumC,EAAKjgC,wBAAwBpG,OAAQF,IACjDumC,EAAKjgC,wBAAwBtG,GAAG2B,WAAaF,EAAWE,WACxD20B,EAAYt2B,EAGhB8I,MAAKzJ,OAAO4H,sBAAwB6B,KAAKm+B,iBACzC3Q,EAAYrd,SAASnQ,KAAKzJ,OAAOsI,UAAU2uB,GAAWjkB,aAAa,iBAAkB,KAEzFk0B,EAAW,OAAI,aACfA,EAAiB,UAAIjQ,EACrBxtB,KAAKq+B,aAAa,aAAc7Q,MAI5CsP,EAAMvgC,UAAU8hC,aAAe,SAAU/iC,EAAQkyB,GAC7C,GAAI9oB,GAAQ1E,KACRyY,GACAnd,OAAQA,EACR+K,QAAQ,EACR5H,MAAOuB,KAAKzJ,OAAOyJ,KAAKutB,kBACxB5uB,IAAKqB,KAAKzJ,OAAOyJ,KAAK0tB,cAE1B1tB,MAAKzJ,OAAO+P,QhBzNK,cgByNuBmS,EAAY,SAAUA,GACrDA,EAAWpS,SACc,cAAtBoS,EAAWnd,OACPoJ,EAAMnO,OAAO4H,qBACbuG,EAAMk3B,aAAazrB,SAASzL,EAAMw5B,YAAY30B,aAAa,iBAAkB,KAAMikB,EAAW,SAG9F9oB,EAAMk3B,aAAal3B,EAAMw5B,YAAYn3B,UAAWymB,EAAW,SAGpC,eAAtB/U,EAAWnd,SACZoJ,EAAMnO,OAAO4H,qBACbuG,EAAMk3B,aAAazrB,SAASzL,EAAMw5B,YAAY30B,aAAa,iBAAkB,KAAMikB,EAAW,SAG9F9oB,EAAMk3B,aAAal3B,EAAMw5B,YAAYn3B,UAAWymB,EAAW,cAM/EsP,EAAMvgC,UAAUohC,aAAe,SAAUxlB,GACrC,IAAK,GAAIjhB,GAAI,EAAGA,EAAIihB,EAAY/gB,OAAQF,IAEpC,GADAihB,EAAYjhB,GAAGgD,MAAQhD,GAClBK,oBAAkB4gB,EAAYjhB,GAAGyB,YAAa,CAC/C,GAAIyF,GAAgBC,WAAS,sBAAwB8Z,EAAYjhB,GAAGoH,eAAgB0B,KAAKzJ,OACzF4hB,GAAYjhB,GAAGyB,WAAWuB,MAAQkE,EAAclE,MAGxD,MAAOie,IAEX2kB,EAAMvgC,UAAUghC,UAAY,SAAUpgC,GAGlC,IAAK,GAFDmhC,GACAC,EAAcphC,EAAEpF,QACXb,EAAIiG,EAAEpF,QAAQX,OAAS,EAAGF,GAAK,EAAGA,IAEvC,IADAonC,EAAgBC,EAAYrnC,IACVoH,eAAgB,CAC9B,GAAI/F,GAASgmC,EAAYnlC,OAAO,SAAUqF,GACtC,MAAOA,GAAK5F,WAAaylC,EAAchgC,gBAE3C,IAAI/F,EAAOnB,OAAQ,CACf,GAAI8C,GAAQ3B,EAAO,GAAGY,aAAaqF,QAAQ8/B,GACvC5lC,EAAeH,EAAO,IACX,IAAX2B,IACI3C,oBAAkByI,KAAKzJ,OAAOqG,aAC9BlE,EAAaS,aAAa0D,OAAO3C,EAAO,GACnCxB,EAAaS,aAAa/B,SAC3BsB,EAAaQ,iBAAkB,EAC/BR,EAAaoT,yBAA0B,IAG/C9L,KAAKg9B,oBAAqB,IAK1C,GAAIzlC,oBAAkByI,KAAKzJ,OAAOC,cAAgBwJ,KAAKzJ,OAAOC,WAAWY,OAAQ,CAK7E,IAAK,GAHDonC,GADAf,EAAOz9B,KAAKzJ,OAEZkoC,EAAgBthC,EAAEpF,QAEbb,EADQiG,EAAEpF,QAAQX,OACD,EAAGF,GAAK,EAAGA,IAAK,CACtCsnC,EAAkBC,EAAcvnC,IAC3BA,GAAKsnC,EAAgBtlC,kBACtBslC,EAAgBpkC,SAAS4F,KAAKzJ,OAAOoG,iBAAmB,KAU5D,IAPKpF,oBAAkBkmC,EAAK9gC,mBACxB8gC,EAAK3gC,aAAe,MAEnBvF,oBAAkBinC,EAAgBpkC,WAAc7C,oBAAkBkmC,EAAK3gC,eACvE5E,OAAOqE,UAAUC,eAAeC,KAAK+hC,EAAgBpkC,SAAUqjC,EAAK3gC,gBACrE0hC,EAAgBpkC,SAASqjC,EAAK3gC,kBAE9B5E,OAAOqE,UAAUC,eAAeC,KAAK+hC,EAAiBf,EAAK3gC,eAC1D0hC,EAAgBf,EAAK3gC,cAAe1F,SAAW4I,KAAKg9B,qBACpDzlC,oBAAkBkmC,EAAK9gC,iBAExB,IAAK,GADDuK,GAAas3B,EAAgBf,EAAK3gC,cAC7B/C,EAAI,EAAGA,EAAImN,EAAU9P,OAAQ2C,KACW,IAAzC0kC,EAAcjgC,QAAQ0I,EAAUnN,MAChC0kC,EAAc5hC,OAAO9C,EAAG,EAAGmN,EAAUnN,IACrCmN,EAAUnN,GAAGK,SAAWgC,YAAW8K,EAAUnN,IAC7C7C,GAAK,EAIbgB,QAAOqE,UAAUC,eAAeC,KAAK+hC,EAAiBf,EAAK9gC,kBACd,OAA1C6hC,EAAgBf,EAAK9gC,mBACpBqD,KAAKg9B,qBACTwB,EAAgBpkC,SAASqjC,EAAK9gC,iBAAmB,WAC1C6hC,GAAgB7lC,iBAChB6lC,GAAgBlgC,gBAEvB/G,oBAAkBkmC,EAAKjnC,cACvBinC,EAAKjnC,eAETinC,EAAKjnC,WAAWqG,OA9BG,EA8BkB,EAAG2hC,EAAgBpkC,UAE5DqjC,EAAKh9B,eAAgBjK,WAAYinC,EAAKjnC,aAAc,OAEnD,CACD,IAASU,EAAI,EAAGA,EAAIqnC,EAAYnnC,OAAQF,IACpCkd,WAAS,sBAAwBmqB,EAAYrnC,GAAG2B,SAAU0lC,EAAYrnC,GAAI8I,KAAKzJ,OAEnF,IAAI2M,IAASzE,KAAMtB,EAAEpF,QAASy1B,UAAWrwB,EAAE2+B,QACvC97B,MAAKzJ,OAAOC,qBAAsBC,gBAClCuJ,KAAKkY,aAAelY,KAAKzJ,OAAOC,WAAWA,WAAWiF,KACtDuE,KAAKxE,SAAWwE,KAAKzJ,OAAOC,WAAWA,WAAWiF,OAGlDuE,KAAKkY,aAAelY,KAAKzJ,OAAOiB,KAAKhB,WACrCwJ,KAAKxE,SAAWwE,KAAKzJ,OAAOC,YAE5Be,oBAAkByI,KAAKytB,gBACvBztB,KAAKytB,aAAe,gBACpBvqB,EAAKsqB,UAAYxtB,KAAKzJ,OAAOiH,wBAAwBpG,OAAS,EAAI4I,KAAKzJ,OAAOiH,wBAAwBpG,OAAS,EAC3G8L,EAAKsqB,UACTtqB,EAAKzE,KAAOyE,EAAKzE,KAAKP,IAAI,SAAUhH,GAChC,MAAIA,GAAEgC,iBAAmB3B,oBAAkBL,EAAEyB,aACzCzB,EAAEiD,MAAQ,EACHjD,UAGAA,GAAEyB,iBACFzB,GAAEoH,eACTpH,EAAEiD,MAAQ,EACHjD,MAInB8I,KAAK09B,SAASx6B,KAGtB45B,EAAMvgC,UAAUihC,YAAc,SAAUrgC,GACpC,IAAK,GAAIjG,GAAI,EAAGA,EAAIiG,EAAEpF,QAAQX,OAAQF,IAClC8I,KAAKs+B,cAAgBnhC,EAAEpF,QAAQb,IAC3B8I,KAAKs+B,cAAcplC,iBAAmB8G,KAAKs+B,cAAc3lC,aAE8B,IADvFqH,KAAKzJ,OAAOiB,KAAKhB,WACbgI,QAAQwB,KAAKo9B,0BAA0Bp9B,KAAKs+B,cAAchgC,gBAAgB,KACjD,IAA7B0B,KAAKs+B,cAAcnkC,QACnB6F,KAAK0+B,iBAIjB5B,EAAMvgC,UAAUoiC,sBAAwB,WACpC,GAGIC,GACAC,EAJAP,EAAgBt+B,KAAKs+B,cACrBQ,EAAgB9+B,KAAK8+B,cACrBC,EAAQ/+B,KAAKzJ,MAUjB,MANIqoC,EADA5+B,KAAKzJ,OAAOC,qBAAsBC,gBAAe+C,EAAUwG,KAAKzJ,QAC/CwoC,EAAMvoC,WAAWA,WAAWiF,KAG5BsjC,EAAMvoC,aAGHe,oBAAkBunC,IAAmBA,EAAcnmC,YAAgBpB,oBAAkBunC,EAAc1kC,WAkBtH,IAAK4F,KAAKzJ,OAAOoG,kBAAqBpF,oBAAkBunC,IAAkBA,EAAcnmC,aAC/D,eAAtBqH,KAAKytB,cAAuD,kBAAtBztB,KAAKytB,cAG3C,IAAK,GADDt0B,GADS6G,KAAKo9B,0BAA0B0B,EAAcxgC,gBAAgB,GAChDnF,aACjBjC,EAAI,EAAGA,EAAIiC,EAAa/B,OAAQF,IACrC4nC,EAAcnmC,WAAWyB,SAAS4F,KAAKzJ,OAAOuG,cAAc5F,GAAKiC,EAAajC,GAAGkD,aAvByC,CAElI,IAAK,GADDjC,GAAOD,OAAOC,KAAKymC,GACd1nC,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,IACzB0nC,EAAe1nC,GAAG8I,KAAKzJ,OAAOuG,gBAAkBgiC,EAAc1kC,SAAS4F,KAAKzJ,OAAOuG,gBACnF+hC,EAAM3nC,EAGY,gBAAtB8I,KAAKytB,aACAztB,KAAKzJ,OAAOqG,WACbgiC,EAAe/hC,OAAOgiC,EAAK,EAAGP,EAAclkC,UAGrB,kBAAtB4F,KAAKytB,eACLztB,KAAKzJ,OAAOqG,WACbgiC,EAAe/hC,OAAOgiC,EAAM,EAAG,EAAGP,EAAclkC,WAaxD4F,KAAKzJ,OAAOoG,kBACR2hC,EAAc3lC,WACY,eAAtBqH,KAAKytB,cAAuD,kBAAtBztB,KAAKytB,cAC3C6Q,EAAct+B,KAAKzJ,OAAOoG,iBAAmBmiC,EAAc9+B,KAAKzJ,OAAOoG,iBACvE2hC,EAAclkC,SAAS4F,KAAKzJ,OAAOoG,iBAAmBmiC,EAAc9+B,KAAKzJ,OAAOoG,mBAGhF2hC,EAAct+B,KAAKzJ,OAAOoG,iBAAmBmiC,EAAc9+B,KAAKzJ,OAAOqG,WACvE0hC,EAAclkC,SAAS4F,KAAKzJ,OAAOoG,iBAAmBmiC,EAAc9+B,KAAKzJ,OAAOqG,aAIpF0hC,EAAclkC,SAAS4F,KAAKzJ,OAAOoG,iBAAmB,KACtD2hC,EAAct+B,KAAKzJ,OAAOoG,iBAAmB,QAIzDmgC,EAAMvgC,UAAUyiC,qBAAuB,SAAUluB,GAC7C,GAAImuB,GAAkC,kBAAtBj/B,KAAKytB,YACjBztB,MAAKzJ,OAAOua,QAAQiF,uBAAuB,qBAAqB3e,OAAS,GAAK0Z,IACxD,IAArBA,EAAQ/J,UAAkBk4B,IAC3Bj/B,KAAKzJ,OAAOua,QAAQiF,uBAAuB,qBAAqB,GAAGuO,UAG3EwY,EAAMvgC,UAAU2iC,oBAAsB,SAAUpuB,GAC5C,GAEIquB,GAFAC,EAAatuB,IAAYA,EAAQrL,UAAUC,SAAS,eAAiBoL,EAAQrL,UAAUC,SAAS,mBAC7FoL,EAAQrL,UAAUC,SAAS,gBAY9Bu5B,GATAE,EADAn/B,KAAKzJ,OAAO4H,qBACK2S,IAAYsuB,GACzBp/B,KAAKzJ,OAAOsI,UAAUmB,KAAKzJ,OAAOiH,wBAAwBpG,OAAS,GAAGmS,aAAa,cAC/EuH,EAAQvH,aAAa,YAGZuH,IAAYsuB,GACzBp/B,KAAKzJ,OAAOqI,cAAcoB,KAAKzJ,OAAOiH,wBAAwBpG,OAAS,GAAGmS,aAAa,cACnFuH,EAAQvH,aAAa,cAEuB,eAAtBvJ,KAAKytB,YACnCztB,MAAKzJ,OAAOua,QAAQiF,uBAAuB,oBAAoB3e,OAAS,GAAK0Z,IAAYquB,GAAkBF,IAC3Gj/B,KAAKzJ,OAAOua,QAAQiF,uBAAuB,oBAAoB,GAAGuO,UAG1EwY,EAAMvgC,UAAU8iC,WAAa,SAAU1gC,EAAKzE,EAAOgJ,GAC/C,GAAIo8B,GAASp8B,EAAK3B,OAAS8G,UAAQnF,EAAK3B,OAAQ,MAAQ,IACxDvB,MAAKytB,iBAAepc,EACpB,IAAIkuB,GAAoB,CACxBv/B,MAAKg/B,qBAAqBM,GAC1Bt/B,KAAKk/B,oBAAoBI,EACzB,KAAK,GAAIpoC,GAAI,EAAGA,EAAIgM,EAAKiC,KAAK/N,OAAQF,KAC7BK,oBAAkB+nC,IAAWA,EAAO/1B,aAAa,cAAgBrG,EAAKiC,KAAKjO,GAAGqS,aAAa,cACxFpB,eAAajF,EAAK3B,OAAQ,mBAC9BvB,KAAKytB,aAAe,UACpBztB,KAAKw/B,eAIb,IAAI/B,GAAOz9B,KAAKzJ,OACZkpC,EAAS,EAETC,EAAajC,EAAKra,SAAWqa,EAAKra,QAAQhsB,OAC1Cw5B,SAASC,eAAe4M,EAAK3sB,QAAQC,GAAK,6BAA6B4uB,aAAe,EAEtFC,EAAiB5/B,KAAK6/B,UAAUpC,EAAK3sB,SAErCgvB,EAAgBrC,EAAKn0B,mBAAmBq2B,aAAeC,EAAeG,IAAML,EAC5ErJ,EAAYoH,EAAKtK,aAAaiD,kBAAkBC,SAC/C9+B,qBAAkB+nC,KACnBC,EAAoBD,EAAOU,UAAY3J,EAS3C,IAEI4J,KAPAR,EADAz/B,KAAKzJ,OAAO4H,qBACHmhC,EAAOY,wBAAwBH,IAG/BR,EAAoBO,EAhBlB,GAkBUnhC,EAAI,GAAGghC,aACHF,GACH,EACtBU,EAAgBV,EAASQ,EACzBG,EAAmBD,EAAgBF,EACnCI,EAAmBD,EAAmBH,EACtCK,EAAaloC,YAAU,sBAAuB8K,GAC9Cq9B,EAAanoC,YAAU,sBAAuB8K,GAC9Cs9B,EAA4B,cAApBF,EAAWn9B,KAAwBm9B,EAAWG,MAAWlpC,oBAAkBgpC,IAClFhpC,oBAAkBgpC,EAAWG,gBAAwD,KAArCH,EAAWG,eAAe,GAAGD,MAC9EE,EAAeH,GAAQL,EACvBS,EAAsBJ,EAAOL,GAAiBK,GAAQJ,EACtDS,EAAsBL,EAAOJ,GAAoBI,GAAQH,CAC7D,IAAIM,GAAgBC,GAAsBC,EAAoB,CAU1D,GATIF,GAAsC,YAAtB3gC,KAAKytB,eACrBztB,KAAK8gC,oBACL9gC,KAAKytB,aAAe,aACpBztB,KAAK+gC,0BACL/gC,KAAKghC,kBAAkB1B,GACvBt/B,KAAKihC,kBACLjhC,KAAKk/B,oBAAoBI,GACzBt/B,KAAKkhC,kBAAkBh+B,EAAK3B,SAE5Bq/B,GAA4C,YAAtB5gC,KAAKytB,aAA4B,CACvDztB,KAAK+gC,yBACL,IAAIl4B,MACAiI,EAAUzI,UAAQnF,EAAK3B,OAAQ,OACnCsH,KAAgBlD,MAAMlJ,KAAKqU,EAAQlL,iBAAiB,oDACrCxO,OAAS,GACpB4I,KAAKmhC,iBAAiBt4B,GAAY,EAAM,iBAE5C7I,KAAKohC,iBAAiB9B,GACtBt/B,KAAKghC,kBAAkB1B,GACvBt/B,KAAKytB,aAAe,gBAEpBoT,GAA4C,YAAtB7gC,KAAKytB,eAC3BztB,KAAKihC,kBACLjhC,KAAK+gC,0BACL/gC,KAAK8gC,oBACL9gC,KAAKytB,aAAe,gBACpBztB,KAAKohC,iBAAiB9B,GACtBt/B,KAAKg/B,qBAAqBM,GAC1Bt/B,KAAKkhC,kBAAkBh+B,EAAK3B,SAGpC,MAAOvB,MAAKytB,cAEhBqP,EAAMvgC,UAAUukC,kBAAoB,WAChC,GAAIO,OACJA,KAAgB17B,MAAMlJ,KAAKuD,KAAKzJ,OAAOua,QAAQlL,iBAAiB,oBACjDxO,OAAS,GACpB4I,KAAKmhC,iBAAiBE,GAAY,EAAO,kBAGjDvE,EAAMvgC,UAAUykC,kBAAoB,SAAUM,GAC1C,GAAIC,GAAOvhC,KAAKzJ,OAAOua,QACnB2sB,EAAOz9B,KAAKzJ,MAChB,IAAI+qC,GAAoC,IAAvBA,EAAUv6B,WAAmBu6B,EAAU77B,UAAUC,SAAS,cAAe,CACtF,GAAI87B,GAAMxhC,KAAKzJ,OAAOmT,cAAc,OAASC,UAAW,sBACpD83B,EAAgBzhC,KAAKzJ,OAAO+S,mBAC5Bo4B,EAAgB,CAChBjE,GAAKra,UACLse,EAAgBjE,EAAK9X,cAAcC,aAAa+Z,aAEpD,IAAIgC,IAAgBpqC,oBAAkByI,KAAKzJ,OAAOyuB,gBAAgBC,SAC9D0c,KACAH,EAAIhnC,MAAMulC,IAAM//B,KAAKzJ,OAAOiB,KAAKsZ,QAAQiF,uBAAuB,gBAAgB,GAAG4pB,aAC7E+B,EAAgB,MAE1BF,EAAIhnC,MAAMgQ,MAAQm3B,EAAeJ,EAAKK,YAAc,KAChDL,EAAKK,YAAc5hC,KAAK6hC,iBAAmB,KAC1CJ,EAAc77B,iBAAiB,sBAAsBxO,QACtDqqC,EAAcz2B,YAAYw2B,KAItC1E,EAAMvgC,UAAU6kC,iBAAmB,SAAUU,GACzC,GAAI1C,GAAa0C,IAAcA,EAAUr8B,UAAUC,SAAS,eACxDo8B,EAAUr8B,UAAUC,SAAS,mBAAqBo8B,EAAUr8B,UAAUC,SAAS,eACnF,IAAIo8B,IAAc1C,GAAcp/B,KAAKzJ,OAAOsI,UAAUmB,KAAKzJ,OAAOiH,wBAAwBpG,OAAS,GAAGmS,aAAa,cAC/Gu4B,EAAUv4B,aAAa,YAAa,CACpC,GAAIw4B,GAAe/hC,KAAKzJ,OAAOmT,cAAc,OAASC,UAAW,qBAC7Dq4B,EAAiBhiC,KAAKzJ,OAAO48B,YACjC4O,GAAavnC,MAAMgQ,MAAQxK,KAAKzJ,OAAOua,QAAQ8wB,YAAc5hC,KAAK6hC,iBAAmB,KAChFG,EAAep8B,iBAAiB,qBAAqBxO,SACtD4qC,EAAev8B,UAAUsE,IAAI,uBAC7Bi4B,EAAeh3B,YAAY+2B,GAC3BA,EAAavnC,MAAMynC,OAASjiC,KAAK6hC,iBAAmB,QAIhE/E,EAAMvgC,UAAUslC,eAAiB,WAC7B,GAAIK,GAAaliC,KAAKzJ,OAAO48B,aAAaiD,iBAC1C,OAAO8L,GAAWC,YAAcD,EAAWN,YAAcQ,SAAOC,oBAAsB,GAE1FvF,EAAMvgC,UAAUijC,aAAe,WAC3B,GAAI8C,GAAW1R,SAAS7a,uBAAuB,qBAAqB,EAEpE,KADgBusB,EAAS18B,iBAAiB,gBAAgBxO,SACvC4I,KAAKzJ,OAAOyuB,gBAAgBC,SAAU,CACrD,GAAIsd,GAAM3R,SAASlnB,cAAc,MACjCjE,aAAU88B,GAAM,wBAChB98B,YAAU88B,GAAM,UAAW,kBAC3B,IAAIC,GAAWF,EAASl6B,cAAc,eAClCq6B,EAAUH,EAASl6B,cAAc,cAAc0C,SAC/C03B,KACAC,EAAUD,EAAS13B,UACnB03B,EAASE,WAAWC,YAAYH,IAEpCF,EAASl6B,cAAc,cAAc0C,UAAY,EACjD,IAAI83B,GAAchS,SAASlnB,cAAc,OACzCk5B,GAAYj5B,UAAY,aACxBi5B,EAAYpoC,MAAMqoC,YAAc,OAChCD,EAAY93B,UAAY23B,EACxBH,EAASl6B,cAAc,cAAc4C,YAAYu3B,GACjDD,EAASl6B,cAAc,cAAc4C,YAAY43B,EACjD,IAAIE,GAAelS,SAASxoB,cAAc,oBAC1C,IAAIpI,KAAKi9B,aAAe6F,EAAc,CAClC,GAAIC,GAAe5yB,SAAS2yB,EAAatoC,MAAMwoC,KAAM,IAAMT,EAAIX,YAAc,GACzEqB,EAAYjjC,KAAKzJ,OAAO8vB,UAA2B,EAAf0c,CACxCD,GAAatoC,MAAMwoC,KAAOC,EAAW,KACrCjjC,KAAKi9B,aAAc,KAI/BH,EAAMvgC,UAAU0kC,gBAAkB,WAC9B,GAAIiC,GAAYtS,SAASxoB,cAAc,gBACnC+6B,EAAavS,SAASxoB,cAAc,eACpC06B,EAAelS,SAASxoB,cAAc,oBAC1C,IAAI86B,EAAW,CACX,GAAIJ,EAAc,CACd,GAAIC,GAAe5yB,SAAS2yB,EAAatoC,MAAMwoC,KAAM,IAAME,EAAUtB,YAAc,EACnFwB,qBAAkBD,GACdN,YAAa,QAEZ7iC,KAAKzJ,OAAO8vB,WACb+c,oBAAkBN,GACdE,KAAMD,EAAe,OAIjCG,EAAU5e,SAEdtkB,KAAKi9B,aAAc,GAEvBH,EAAMvgC,UAAU2kC,kBAAoB,SAAU3/B,GAC1C,GAAIsH,MACAiI,EAAUzI,UAAQ9G,EAAQ,OAC9BsH,EAAaiI,KAAanL,MAAMlJ,KAAKqU,EAAQlL,iBAAiB,uDAC/CxO,SACe,eAAtB4I,KAAKytB,eACLztB,KAAKmhC,iBAAiBt4B,GAAY,EAAM,aACpC7I,KAAKzJ,OAAOua,QAAQiF,uBAAuB,wBAAwB3e,OAAS,GAC5E4I,KAAKzJ,OAAOua,QAAQiF,uBAAuB,wBAAwB,GAAGuO,UAGpD,kBAAtBtkB,KAAKytB,cACLztB,KAAKmhC,iBAAiBt4B,GAAY,EAAM,kBAIpDi0B,EAAMvgC,UAAUwkC,wBAA0B,WACtC,GAAIsC,OACJA,KAAY19B,MAAMlJ,KAAKuD,KAAKzJ,OAAOua,QAAQlL,iBAAiB,+BACjDxO,SACP4I,KAAKmhC,iBAAiBkC,GAAQ,EAAO,gBACrCrjC,KAAKmhC,iBAAiBkC,GAAQ,EAAO,eAG7CvG,EAAMvgC,UAAU4kC,iBAAmB,SAAU1hC,EAAOsK,EAAKJ,GACrD,IAAK,GAAIzS,GAAI,EAAGe,EAAMwH,EAAMrI,OAAQF,EAAIe,EAAKf,IACrC6S,EACAtK,EAAMvI,GAAGuO,UAAUsE,IAAIJ,GAGvBlK,EAAMvI,GAAGuO,UAAU6e,OAAO3a,IAItCmzB,EAAMvgC,UAAUsjC,UAAY,SAAU/uB,GAClC,GAAIwyB,GAAMxyB,EAAQovB,wBACdqD,EAAO3S,SAAS2S,KAChBC,EAAU5S,SAAS6S,gBACnBpN,EAAY57B,OAAOipC,aAAeF,EAAQnN,WAAakN,EAAKlN,UAC5DsN,EAAalpC,OAAOmpC,aAAeJ,EAAQG,YAAcJ,EAAKI,WAC9DE,EAAYL,EAAQK,WAAaN,EAAKM,WAAa,EACnDC,EAAaN,EAAQM,YAAcP,EAAKO,YAAc,EACtD/D,EAAMuD,EAAIvD,IAAM1J,EAAYwN,EAC5Bb,EAAOM,EAAIN,KAAOW,EAAaG,CACnC,QAAS/D,IAAKzqB,KAAKyuB,MAAMhE,GAAMiD,KAAM1tB,KAAKyuB,MAAMf,KAEpDlG,EAAMvgC,UAAU8gC,WAAa,SAAUn6B,GACnC,GAAIu6B,GAAOz9B,KAAKzJ,OACZytC,EAAehkC,KAAKzJ,OAAOua,QAAQ1I,cAAc,qBACrD47B,GAAaxpC,MAAMypC,OAAS,EAC5B,IAAI3E,GAASp8B,EAAK3B,OAAS8G,UAAQnF,EAAK3B,OAAQ,MAAQ,KACpD2iC,EAAS5E,EAASA,EAAOv4B,UAAY,EACrCw3B,KACAO,EAAgBrB,EAAKjgC,wBAAwB0mC,EA0BjD,IAzBAlkC,KAAKihC,kBACLjhC,KAAK+8B,SAAU,EACV75B,EAAKzE,KAAK,GAIX8/B,EAAcr7B,EAAKzE,KAHnB8/B,EAAYlmC,KAAK6K,EAAKzE,OAKV,IAAZylC,EACAlkC,KAAKmkC,mBAAmB5F,EAAaO,IAGrC9+B,KAAK+8B,SAAU,EACf/8B,KAAKw/B,iBAEJ/B,EAAKzY,gBAAgBC,UAAYjlB,KAAK+8B,SACvCU,EAAK3jB,qBAAqBulB,WAAWn8B,EAAKiC,KAAM++B,EAAQhhC,GAExDu6B,EAAKzY,gBAAgBC,WACjBmf,EAAcj8B,eAAajF,EAAK3B,OAAQ,gBACzB6iC,EAAYrzB,KAAO/Q,KAAKzJ,OAAOyuB,gBAAgBC,UAC7Cmf,EAAYC,cAAc,GAChCvqB,qBAAqBulB,WAAWn8B,EAAKiC,KAAM++B,EAAQhhC,GAGlEA,EAAK3B,QAAU8G,UAAQnF,EAAK3B,OAAQ,IAAMk8B,EAAKzY,gBAAgBC,UAAW,CAC1E,GAAImf,GAAcj8B,eAAajF,EAAK3B,OAAQ,aACvC6iC,KACDJ,EAAaxpC,MAAMypC,OAAS,aAIxCnH,EAAMvgC,UAAU+gC,WAAa,SAAUp6B,GACnC,GAAIu6B,GAAOz9B,KAAKzJ,MA6ChB,IA3CKknC,EAAKzY,gBAAgBC,UAuBlB/hB,EAAK3B,QAAU8G,UAAQnF,EAAK3B,OAAQ,IAAMk8B,EAAKzY,gBAAgBC,WAAa9c,eAAajF,EAAK3B,OAAQ,eACtG4G,eAAajF,EAAK3B,OAAQ,cAAcwP,KAAO0sB,EAAKzY,gBAAgBC,UAAY/hB,EAAK3B,QAAUqvB,SAASC,eAAe4M,EAAKzY,gBAAgBC,aAC5I7Q,WAAS,eAAgBpU,KAAKytB,aAAcvqB,GAC5Cu6B,EAAKn3B,QhBznBA,UgBynBwBpD,IACxBA,EAAKmD,QAAUo3B,EAAKzY,gBAAgBC,WACrCjlB,KAAKskC,aAAaphC,GACdu6B,EAAK3kB,cACL2kB,EAAKvgC,SAAW8C,KAAK29B,aAAaF,EAAKvgC,aA7B/CiL,eAAajF,EAAK3B,OAAQ,eACtBvB,KAAKzJ,OAAOua,QAAQ1I,cAAc,kBAClCpI,KAAKytB,aAAe,WAExBrZ,WAAS,eAAgBpU,KAAKytB,aAAcvqB,GAC5CA,EAAKsqB,UAAYtqB,EAAKsqB,YAActqB,EAAKqhC,UAAYvkC,KAAKwkC,aAAathC,EAAK3B,OAAO0f,eAAiB/d,EAAKsqB,UACzGiQ,EAAKn3B,QhBtmBA,UgBsmBwBpD,GACxBA,EAAKmD,SACDrP,EAAgBgJ,KAAKzJ,SACtByJ,KAAK09B,SAASx6B,GAEdu6B,EAAK3kB,cACL2kB,EAAKvgC,SAAW8C,KAAK29B,aAAaF,EAAKvgC,WAE3CugC,EAAKjmC,KAAK61B,UACL91B,oBAAkBkmC,EAAKn0B,mBAAmBlB,cAAc,wBACzDq1B,EAAKn0B,mBAAmBlB,cAAc,sBAAsBkc,WAkB5EtkB,KAAK+gC,0BACL/gC,KAAK8gC,oBACAvpC,oBAAkByI,KAAKzJ,OAAOua,QAAQiF,uBAAuB,qBAAqB,IAG7Exe,oBAAkByI,KAAKzJ,OAAOua,QAAQiF,uBAAuB,oBAAoB,KACvF/V,KAAKzJ,OAAOua,QAAQiF,uBAAuB,oBAAoB,GAAGuO,SAHlEtkB,KAAKzJ,OAAOua,QAAQiF,uBAAuB,qBAAqB,GAAGuO,SAKnEtkB,KAAKzJ,OAAO8G,sBAAwB2C,KAAKzJ,OAAO2X,cAAgB3W,oBAAkB2L,EAAKzE,KAAK,GAAa,YAAI,CAC7G,GAAIvE,GAAQ8F,KAAKzJ,OAAO6I,eACxBlF,IAAgB,CAChB,IAAIm9B,GAAkBr3B,KAAKzJ,OAAOgF,0BAA0B,GACxDwL,EAAW/G,KAAKzJ,OAAOiB,KAAKsH,wBAAwBoE,EAAKzE,KAAK,GAAG44B,IACjE14B,EAAMqB,KAAKzJ,OAAOsI,UAAUkI,GAC5BtI,EAAOyE,EAAKzE,KAAK,EACrB,IAA0B,kBAAtBuB,KAAKytB,aAAkC,CACvC,GAAIl1B,MACA4M,IACJ5M,GAAOF,KAAKoG,GACZ0G,EAAK9M,KAAKsG,EAEVF,GAAO7F,EAAcoH,KAAKzJ,OAAQ2M,EAAKzE,KAAK,GAAiB,gBAC7DsI,EAAW/G,KAAKzJ,OAAOiB,KAAKsH,wBAAwBL,EAAK44B,GACzD,IAAIyG,GAAY99B,KAAKzJ,OAAOsI,UAAUkI,EACtCxO,GAAOF,KAAKoG,GACZ0G,EAAK9M,KAAKylC,EACV,KAAK,GAAI5mC,GAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAC/B8I,KAAKzJ,OAAO+I,aAAaC,YACrBd,KAAMlG,EAAOrB,GAAIsI,KAAM2F,EAAKjO,GAAGuI,MAAMvF,GACrCwF,OAAQM,KAAKzJ,OAAOiB,KAAKmI,aAAaK,KAAKzJ,OAAO6I,iBAClDQ,YAAa,kBAGrB,IAAIkW,GAAYgoB,EAAU/nB,uBAAuB,sBAAsB,EAClExe,qBAAkBue,KACnBpL,eAAaoL,GAAY,sBACzBpI,YAAUoI,GAAY,yBAI1B9V,MAAKzJ,OAAO+I,aAAaC,YACrBd,KAAMA,EAAMe,KAAMb,EAAIc,MAAMvF,GAC5BwF,OAAQM,KAAKzJ,OAAOiB,KAAKmI,aAAaK,KAAKzJ,OAAO6I,iBAClDQ,YAAa,qBAK7Bk9B,EAAMvgC,UAAU+nC,aAAe,SAAUphC,GACrC,GAIIuhC,GAJAhH,EAAOz9B,KAAKzJ,OACZ+qC,EAAYj5B,UAAQnF,EAAK3B,OAAQ,MACjCmjC,EAAcC,MAAM3kC,KAAKwkC,aAAalD,IAAc,EAAIthC,KAAKwkC,aAAalD,GAC1E8C,EAAcj8B,eAAajF,EAAK3B,OAAQ,aAE5C,IAAI6iC,GAAeA,EAAYrzB,KAAO/Q,KAAKzJ,OAAOyuB,gBAAgBC,WAAa3uB,EAAa0J,KAAKzJ,UACzFS,EAAgBgJ,KAAKzJ,QAAS,CAClCkuC,EAAaL,EAAYC,cAAc,EAGvC,KAAK,GAFDtsC,GAAU0lC,EAAK33B,qBACfmvB,KACK/9B,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC+9B,EAAQ/9B,GAAKa,EAAQb,GAAGgD,KAE5B,IAAIuE,GAAOgmC,EAAWjuC,UACtB,IAA8B,OAA1BwJ,KAAKzJ,OAAOqG,YAAuBrF,oBAAkByI,KAAKytB,eAAuC,kBAAtBztB,KAAKytB,cAA0D,YAAtBztB,KAAKytB,gBAAiChvB,EAAY,OAAE,CAExK,IAAK,GADDmmC,MACK1tC,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC,GAAIa,EAAQb,GAAGgC,gBAAiB,CAC5B0rC,EAAWvsC,KAAKN,EAAQb,GAExB,KAAK,GADD6G,GAAQ9E,EAAoBlB,EAAQb,IAC/BsiC,EAAM,EAAGA,EAAMz7B,EAAM3G,OAAQoiC,IAClCoL,EAAWvsC,KAAK0F,EAAMy7B,IAI9BoL,EAAWxtC,SACXW,EAAU6sC,GAGlBnH,EAAKxtB,OhB1sBO,egB0sBqBglB,QAASA,EAASl9B,QAASA,IAC5D0sC,EAAWx0B,OhB7sBF,YgB6sB2B6rB,QAAS4I,EAAa3sC,QAASA,GACnE,IAAI8sC,GAAqBJ,EAAW3qB,qBAAqB5B,YACzD,KAAK3gB,oBAAkBstC,GACnB,IAAS3tC,EAAI,EAAGA,EAAI2tC,EAAmBztC,OAAQF,IAE3C,GADA2tC,EAAmB3tC,GAAGgD,MAAQhD,GACzBK,oBAAkBstC,EAAmB3tC,GAAGyB,YAAa,CACtD,GAAImsC,GAAczmC,WAAS,sBAAwBwmC,EAAmB3tC,GAAGoH,eAAiB,SAAUmmC,EACpGI,GAAmB3tC,GAAGyB,WAAWuB,MAAQ4qC,EAIrDrH,EAAKjmC,KAAK61B,UACVoX,EAAWjtC,KAAK61B,UACZoX,EAAWjtC,KAAKhB,WAAWY,OAAS,IACpCqtC,EAAWjtC,KAAK61B,UACX91B,oBAAkBktC,EAAWn7B,mBAAmBlB,cAAc,wBAC/Dq8B,EAAWn7B,mBAAmBlB,cAAc,sBAAsBkc,SAEjE/sB,oBAAkBktC,EAAWtR,aAAa/qB,cAAc,uBACzDq8B,EAAWtR,aAAa/qB,cAAc,qBAAqBkc,UAInEttB,EAAgBgJ,KAAKzJ,UACrBkuC,EAAaL,EAAYC,cAAc,GACvC5G,EAAKjmC,KAAK61B,UACVoX,EAAWjtC,KAAK61B,YAGxByP,EAAMvgC,UAAUioC,aAAe,SAAUlD,GACrC,MAAOA,GAAYnxB,SAASmxB,EAAU/3B,aAAa,iBAAkB,IAAM,GAE/EuzB,EAAMvgC,UAAU3D,cAAgB,SAAUL,EAAQkG,GAC9C,GAAI9F,GAAaJ,EAAOI,WACpBqlC,GAAqB,CAOzB,IANIh+B,KAAKzJ,OAAO4H,uBAA0D,IAAlC6B,KAAKzJ,OAAO4wB,iBAChD6W,EAAoBh+B,KAAKzJ,OAAOmkC,kBAAkB,GAAG3zB,UAEd,IAAlC/G,KAAKzJ,OAAO4wB,mBACjB6W,EAAoBh+B,KAAKzJ,OAAO4wB,kBAEV,kBAAtBnnB,KAAKytB,aAAkC,CACvC,GAAI4J,GAAkBr3B,KAAKzJ,OAAOgF,0BAA0B,GACxDwL,GAAkC,IAAvBi3B,EACVh+B,KAAKzJ,OAAOiB,KAAKsH,wBAAwBL,EAAK,GAAG44B,IAChDr3B,KAAKzJ,OAAO+O,wBAAwB,GACtC64B,EAAiBn+B,KAAKzJ,OAAOiH,wBAAwBuJ,EACzD/G,MAAK8+B,cAAgBlmC,EAAcoH,KAAKzJ,OAAQ4nC,EAAexlC,WAAWE,UAEpD,kBAAtBmH,KAAKytB,eACOztB,KAAKzJ,OAAOiH,wBAAwBwgC,GAAmB7jC,QACrDxB,EAAWwB,MACrB6F,KAAK8+B,cAAgBlmC,EAAcoH,KAAKzJ,OAAQoC,EAAWE,UAG3DmH,KAAKpH,cAAcD,KAI/BmkC,EAAMvgC,UAAUmhC,SAAW,SAAUx6B,EAAM6hC,GACvC,GAA0B,YAAtB/kC,KAAKytB,eAA+Bn3B,EAAa0J,KAAKzJ,QAAS,CAC/D,GACIyuC,GADAvH,EAAOz9B,KAAKzJ,OAEZuoC,MAAgB,EACpB,IAAIvnC,oBAAkB2L,EAAKsqB,WAAY,CACnC,GAAI6J,GAAkBr3B,KAAKzJ,OAAOgF,0BAA0B,GACxDwL,GAAsC,IAA3B02B,EAAKtW,iBACfnnB,KAAKzJ,OAAOiB,KAAKsH,wBAAwBoE,EAAKzE,KAAK,GAAG44B,IAAqB,EAC1EoG,EAAKn4B,wBAAwB,GAAK,EACpC/M,EAASklC,EAAKjgC,wBAAwBuJ,EAC1C/G,MAAKpH,cAAcL,EAAQ2K,EAAKzE,UAIhC,IADAyE,EAAKsqB,UAAYtqB,EAAKsqB,YAActqB,EAAKqhC,UAAYvkC,KAAKwkC,aAAathC,EAAK3B,OAAO0f,eAAiB/d,EAAKsqB,UACrGxtB,KAAKzJ,OAAO4H,qBAAsB,CAClC,GAAIjE,GAAQ8F,KAAKzJ,OAAOqI,cAAcsE,EAAKsqB,WAAWzmB,QACtD/G,MAAK8+B,cAAgBrB,EAAKjgC,wBAAwBtD,OAGlD8F,MAAK8+B,cAAgBrB,EAAKjgC,wBAAwB0F,EAAKsqB,UAG/D,IAAI+Q,KACJO,GAAgB9+B,KAAK8+B,cAChB57B,EAAKzE,KAAK,GAIX8/B,EAAcr7B,EAAKzE,KAHnB8/B,EAAYlmC,KAAK6K,EAAKzE,MAK1BuB,KAAKzJ,OAAOyJ,KAAK8c,iBAAiBzkB,KAAK6K,EAAKzE,KAAK,GAAIqgC,EACrD,IAAIpzB,GAAQ,EACRi2B,EAAe3hC,KAAKzJ,OAAOyuB,gBAAgBC,QAC/CjlB,MAAKilC,eAAiBtD,EACjBA,EAID3hC,KAAKk9B,cAAgByE,GAAgB3hC,KAAKg9B,mBAH1Ch9B,KAAKmkC,mBAAmB5F,EAAaO,EAKzC,IAAIoG,GAAa3G,EAAYnnC,MACxBG,qBAAkByI,KAAKzJ,OAAOqG,YAC/B2hC,EAAY4G,SAyFhB,KAAK,GADDnO,GAASh3B,KACJ9I,EAAI,EAAGA,EAAIguC,EAAYhuC,KAvFlB,SAAUA,GAGpB,GAFA8tC,EAAkBzG,EAAYrnC,GAC9B8/B,EAAOsH,cAAgB0G,EACK,YAAxBhO,EAAOvJ,aAA4B,CAInC,GAHKgQ,EAAKzY,gBAAgBC,WAAY8f,GAClC/N,EAAO0H,gBAEP1H,EAAOsH,gBAAkBtH,EAAO8H,cAAe,CAC/C,GAAIsG,GAAepO,EAAOwN,aAAathC,EAAK3B,OAAO8jC,aAAapkB,cAC5D0jB,OAAMS,KACNA,EAAepO,EAAOwN,aAAathC,EAAK3B,OAAO0f,gBAEnD/d,EAAKsqB,UAAY4X,EACjBtG,EAAgB9H,EAAO8H,cAAgB9H,EAAOzgC,OAAOiH,wBAAwB0F,EAAKsqB,YAElFsR,EAAcnmC,YAAsC,kBAAxBq+B,EAAOvJ,gBAGX,KADpB6X,GADArtB,EAAgBwlB,EAAKxgC,YACUuB,QAAQw4B,EAAOsH,iBAE9CrmB,EAAcpb,OAAOyoC,EAAgB,EAG7C,IAAIC,GAAevO,EAAO9e,aAAa1Z,QAAQsgC,EAE/C,IADA9H,EAAOwO,UAAUD,GACW,kBAAxBvO,EAAOvJ,aAAkC,CAsBzC,GArBKqR,EAAc5lC,iBAOfwS,EAAQsrB,EAAOyO,cAAc3G,EAAe,GACxC9H,EAAOzgC,OAAOoG,iBACdq6B,EAAOx7B,SAASqB,OAAO0oC,EAAe75B,EAAQ,EAAG,EAAGsrB,EAAOsH,cAAclkC,UAE7E48B,EAAO9e,aAAarb,OAAO0oC,EAAe75B,EAAQ,EAAG,EAAGsrB,EAAOsH,iBAV3DtH,EAAOzgC,OAAOoG,iBACdq6B,EAAOx7B,SAASqB,OAAO0oC,EAAe,EAAG,EAAGvO,EAAOsH,cAAclkC,UAErE48B,EAAO9e,aAAarb,OAAO0oC,EAAe,EAAG,EAAGvO,EAAOsH,gBASvD/mC,oBAAkBunC,EAAcnmC,oBACzBqsC,GAAgBrsC,iBAChBqsC,GAAgB1mC,eACvB0mC,EAAgB7qC,MAAQ,EACpB68B,EAAOzgC,OAAOoG,kBACdqoC,EAAgBhO,EAAOzgC,OAAOoG,iBAAmB,OAGrDmiC,EAAcnmC,WAAY,CAC1B,GACIQ,GADM69B,EAAOoG,0BAA0B0B,EAAcxgC,gBAClC,GAAGnF,aACtBusC,EAAqBvsC,EAAaqF,QAAQsgC,GAAiB,CAC/D3lC,GAAa0D,OAAO6oC,EAAoB,EAAGV,GAC3CA,EAAgBrsC,WAAammC,EAAcnmC,WAC3CqsC,EAAgB1mC,eAAiBwgC,EAAcxgC,eAC/C0mC,EAAgB7qC,MAAQ2kC,EAAc3kC,MAClC68B,EAAOzgC,OAAOoG,kBACdqoC,EAAgBhO,EAAOzgC,OAAOoG,iBAAmBmiC,EAAc9H,EAAOzgC,OAAOoG,iBAC7EqoC,EAAgBrsC,WAAammC,EAAcnmC,WAC3CqsC,EAAgB7qC,MAAQ2kC,EAAc3kC,OAG9C,GAAI6qC,EAAgB9rC,gBAAiB,CAEjC89B,EAAO2O,uBAAuBX,EADlB,GAEZhO,EAAO4O,kBAAkBZ,EAAiBO,EAAe75B,EAAQ,IAGzEsrB,EAAO6O,WAAWN,GAEtB,GAAIhuC,oBAAkBytC,EAAgBrsC,YAAa,CAC/C,GAAIsf,GAAgBwlB,EAAKxgC,WACrBqoC,EAAiBrtB,EAAczZ,QAAQw4B,EAAO8H,eAC9CgH,EAAc,CAClB7tB,GAAc7e,OAAO,SAAU+D,GACvB6nC,EAAgBnsC,WAAasE,EAAEtE,UAC/BitC,MAGoB,kBAAxB9O,EAAOvJ,cAAoD,IAAhBqY,EAC3C7tB,EAAcpb,OAAOyoC,EAAiB,EAAG,EAAGN,GAEf,eAAxBhO,EAAOvJ,cAAiD,IAAhBqY,GAC7C7tB,EAAcpb,OAAOyoC,EAAgB,EAAGN,GAGhDvH,EAAK3jB,qBAAqB6kB,yBAIlBznC,KAIpB4lC,EAAMvgC,UAAUspC,WAAa,SAAUx5B,GACnC,GAAIoxB,GAAOz9B,KAAKzJ,OACZ4C,EAAeF,EAAoB+G,KAAK8+B,eACxCiH,EAAsBxuC,oBAAkB4B,IAChB,IAAxBA,EAAa/B,OAAgBiV,EAAc,EAC3ClT,EAAa/B,OAASiV,EAAc,CACd,mBAAtBrM,KAAKytB,eACDgQ,EAAK9gC,iBACLqD,KAAKxE,SAASqB,OAAOkpC,EAAoB,EAAG/lC,KAAKs+B,cAAclkC,UAC/D4F,KAAKkY,aAAarb,OAAOkpC,EAAoB,EAAG/lC,KAAKs+B,gBAGrDt+B,KAAKkY,aAAarb,OAAOkpC,EAAoB,EAAG/lC,KAAKs+B,eAEzDt+B,KAAKgmC,cACDhmC,KAAKs+B,cAAcplC,iBACnB8G,KAAK4lC,kBAAkB5lC,KAAKs+B,cAAeyH,KAIvDjJ,EAAMvgC,UAAUipC,UAAY,SAAUD,GAClC,GAAI9H,GAAOz9B,KAAKzJ,MAChB,IAA0B,eAAtByJ,KAAKytB,aAA+B,CAQpC,GAPIgQ,EAAK9gC,iBACLqD,KAAKxE,SAASqB,OAAO0oC,EAAc,EAAGvlC,KAAKs+B,cAAclkC,UAE7D4F,KAAKs+B,cAAc3lC,WAAaqH,KAAKkY,aAAaqtB,GAAc5sC,WAChEqH,KAAKs+B,cAAchgC,eAAiB0B,KAAKkY,aAAaqtB,GAAcjnC,eACpE0B,KAAKs+B,cAAcnkC,MAAQ6F,KAAKkY,aAAaqtB,GAAcprC,MAC3D6F,KAAKkY,aAAarb,OAAO0oC,EAAc,EAAGvlC,KAAKs+B,eAC3Ct+B,KAAKs+B,cAAcplC,gBAAiB,CAEpC8G,KAAK4lC,kBAAkB5lC,KAAKs+B,cAAeiH,GAC3CvlC,KAAK2lC,uBAAuB3lC,KAAKs+B,cAFrB,GAIhB,GAAIt+B,KAAK8+B,cAAcnmC,WAAY,CAC/B,GACIQ,GADM6G,KAAKo9B,0BAA0Bp9B,KAAK8+B,cAAcxgC,gBACrC,GAAGnF,aACtBusC,EAAqBvsC,EAAaqF,QAAQwB,KAAK8+B,cACnD3lC,GAAa0D,OAAO6oC,EAAoB,EAAG1lC,KAAKs+B,kBAI5DxB,EAAMvgC,UAAUypC,YAAc,WAC1B,GAAIvI,GAAOz9B,KAAKzJ,OACZ+nC,EAAgBt+B,KAAKs+B,cACrBQ,EAAgB9+B,KAAK8+B,cACrBmH,EAAYxI,EAAK3gC,YAWrB,IAVKgiC,EAAc5lC,kBACf4lC,EAAc5lC,iBAAkB,EAChC4lC,EAAchzB,yBAA0B,GACpCvU,oBAAkBunC,EAAc3lC,eAAuD,IAAtC2lC,EAAc3lC,aAAa/B,UAC5E0nC,EAAc3lC,iBACTskC,EAAK9gC,iBAAmBpF,oBAAkBunC,EAAc1kC,SAAS6rC,MAClEnH,EAAc1kC,SAAS6rC,SAIT,kBAAtBjmC,KAAKytB,aAAkC,CACvC,GAAI90B,GAAayD,YAAW0iC,SACrBnmC,GAAWQ,aAClBmlC,EAAc3lC,WAAaA,EAC3B2lC,EAAchgC,eAAiBwgC,EAAcjmC,SAC7CimC,EAAc3lC,aAAa0D,OAAOiiC,EAAc3lC,aAAa/B,OAAQ,EAAGknC,EASxE,IAPIb,EAAoB,kBACpBqB,EAAcrB,EAAK3gC,iBACnBgiC,EAAcrB,EAAK3gC,cAAcD,OAAOiiC,EAAcrB,EAAK3gC,cAAc1F,OAAQ,EAAGknC,IAEnF/mC,oBAAkB+mC,IAAmBb,EAAK9gC,iBAAoBpF,oBAAkBunC,EAAc1kC,SAAS6rC,KACxGnH,EAAc1kC,SAASqjC,EAAK3gC,cAAcD,OAAOiiC,EAAc3lC,aAAa/B,OAAQ,EAAGknC,EAAclkC,UAEpGkkC,EAAcplC,gBAGd,CAEDolC,EAAcnkC,MAAQ2kC,EAAc3kC,MAAQ,EAC5C6F,KAAK2lC,uBAAuBrH,EAFhB,OAHZA,GAAcnkC,MAAQ2kC,EAAc3kC,MAAQ,CAOhD2kC,GAAc9lC,UAAW,IAGjC8jC,EAAMvgC,UAAUmiC,cAAgB,WACxB1+B,KAAKzJ,OAAOC,qBAAsBC,gBAAe+C,EAAUwG,KAAKzJ,SAChEyJ,KAAKkY,aAAelY,KAAKzJ,OAAOiB,KAAKhB,WAAWA,WAAWiF,KAC3DuE,KAAKxE,SAAWwE,KAAKzJ,OAAOC,WAAWA,WAAWiF,OAGlDuE,KAAKkY,aAAelY,KAAKzJ,OAAOiB,KAAKhB,WACrCwJ,KAAKxE,SAAWwE,KAAKzJ,OAAOC,WAEhC,IAAI0vC,GAAattC,EAAcoH,KAAKzJ,OAAQyJ,KAAKs+B,cAAczlC,WAC1DtB,oBAAkB2uC,EAAW/sC,eAAiB+sC,EAAW/sC,aAAa/B,SACvE8uC,EAAWhtC,iBAAkB,GAEjC8G,KAAKmmC,cAAcD,IAEvBpJ,EAAMvgC,UAAUqpC,kBAAoB,SAAUrtC,EAAQmT,GAClD,GAAIS,GACAsxB,EAAOz9B,KAAKzJ,OACZa,EAAS,CACb,KAAKmB,EAAOW,gBACR,MAAO,EAEX9B,GAASmB,EAAOY,aAAa/B,MAC7B,KAAK,GAAIF,GAAI,EAAGA,EAAIE,EAAQF,IAKpBiV,EAJCnM,KAAKilC,eAIU1sC,EAAOY,aAAajC,GAHpBmH,WAAS,sBAAwB9F,EAAOY,aAAajC,GAAG2B,SAAU4kC,GAKtF/xB,IACA+xB,EAAKvgC,SAASL,OAAO6O,EAAO,EAAGS,GAC/BiI,WAAS,sBAAwBjI,EAActT,SAAUsT,EAAenM,KAAKzJ,QACzEknC,EAAK9gC,iBACLqD,KAAKxE,SAASqB,OAAO6O,EAAO,EAAGS,EAAc/R,UAE7C+R,EAAcjT,kBACdwS,EAAQ1L,KAAK4lC,kBAAkBz5B,EAAeT,GAGtD,OAAOA,IAEXoxB,EAAMvgC,UAAUopC,uBAAyB,SAAUptC,EAAQ4B,GACvD,GACIgS,GADA/U,EAAS,CAGb,IADA+C,KACK5B,EAAOW,gBACR,MAAO,EAEX9B,GAASmB,EAAOY,aAAa/B,MAC7B,KAAK,GAAIF,GAAI,EAAGA,EAAIE,EAAQF,IAAK,CAKzBiV,EAJCnM,KAAKilC,eAIU1sC,EAAOY,aAAajC,GAHpBmH,WAAS,sBAAwB9F,EAAOY,aAAajC,GAAG2B,SAAUmH,KAAKzJ,OAK3F,IAAI0G,OAAa,EACb1E,GAAOI,aACPsE,EAAarE,EAAcoH,KAAKzJ,OAAQgC,EAAOI,WAAWE,WAE1DtB,oBAAkB0F,KAAgB1F,oBAAkBgB,EAAOI,cAC3DsE,EAAa1E,EAAOI,YAExBwT,EAAchS,MAAQ5B,EAAOI,WAAasE,EAAW9C,MAAQA,EAAQ5B,EAAO4B,MAAQ,EAChFgS,EAAcjT,kBACdiB,IACAA,EAAQ6F,KAAK2lC,uBAAuBx5B,EAAehS,IAG3D,MAAOA,IAEX2iC,EAAMvgC,UAAU4pC,cAAgB,SAAU5tC,GACtC,GACI/B,GADAinC,EAAOz9B,KAAKzJ,MAGZC,GADAwJ,KAAKzJ,OAAOC,qBAAsBC,gBAAe+C,EAAUwG,KAAKzJ,QACnDyJ,KAAKzJ,OAAOC,WAAWA,WAAWiF,KAGlCuE,KAAKzJ,OAAOC,UAE7B,IAAI0vC,GAAa3tC,EACbyC,GAAmBzD,oBAAkBkmC,EAAK9gC,iBAC1CypC,EAAiBpmC,KAAKo9B,0BAA0B8I,EAAW5nC,gBAAgB,EAC/E,IAAI4nC,EAAY,CACZ,GAAIA,EAAWvtC,WAAY,CACvB,GAAIQ,GAAeitC,EAAiBA,EAAejtC,gBAC/CktC,EAAa,CACbltC,IAAgBA,EAAa/B,OAAS,IACtCivC,EAAaltC,EAAaqF,QAAQ0nC,GAClCE,EAAejtC,aAAa0D,OAAOwpC,EAAY,GAC1CrmC,KAAKzJ,OAAOoG,kBAAmB8gC,EAAKpgC,qBACrCxC,GAAaZ,MAAOisC,EAAY5qC,OAAQ,UAAY0E,KAAKzJ,OAAQyE,EAAiBkrC,EAAWhsC,MAAOgsC,EAAWhsC,QAI3H,GAAIujC,EAAK9gC,gBAAiB,CAClBupC,EAAWhtC,iBAAmBgtC,EAAW/sC,aAAa/B,OAAS,GAC/D4I,KAAKsmC,gBAAgBJ,EAKzB,KAAK,GAHDrH,OAAM,GACN0H,MAAM,GACNruB,EAAe1hB,EACVU,EAAI,EAAGA,EAAIghB,EAAa9gB,OAAQF,IACjCghB,EAAahhB,GAAG8I,KAAKzJ,OAAOqG,aAAespC,EAAW9rC,SAAS4F,KAAKzJ,OAAOqG,aAC3EiiC,EAAM3nC,EAGd,KAASA,EAAI,EAAGA,EAAI8I,KAAKkY,aAAa9gB,OAAQF,IACtC8I,KAAKkY,aAAahhB,GAAG8I,KAAKzJ,OAAOqG,aAAespC,EAAW9rC,SAAS4F,KAAKzJ,OAAOqG,aAChF2pC,EAAMrvC,IAGD,IAAT2nC,GAAetnC,oBAAkBsnC,IACjCroC,EAAWqG,OAAOgiC,EAAK,IAEd,IAAT0H,GAAehvC,oBAAkBgvC,IACjCvmC,KAAKkY,aAAarb,OAAO0pC,EAAK,GAGtC,GAAIl6B,GAAcrM,KAAKkY,aAAa1Z,QAAQ0nC,EAC5C,KAAKzI,EAAK9gC,gBAAiB,CACvB,GAAI6pC,GAAcxmC,KAAKzJ,OAAO0G,WAAWuB,QAAQ0nC,IAC5B,IAAjBM,IACA/I,EAAKxgC,WAAWJ,OAAO2pC,EAAa,GACpChwC,EAAWqG,OAAO2pC,EAAa,IAGvC,IAAqB,IAAjBn6B,IAAuBoxB,EAAK9gC,gBAE5B,IAAK,GADD06B,GAAkBoG,EAAKliC,0BAA0B,GAC5CxB,EAAI,EAAGA,EAAIiG,KAAKkY,aAAa9gB,OAAQ2C,IACtCiG,KAAKkY,aAAane,GAAGs9B,KAAqB6O,EAAW7O,KACrDhrB,EAActS,EAI1B,KAAK0jC,EAAK9gC,gBAAiB,CACvB,GAAI8pC,GAAqBzmC,KAAKylC,cAAcS,EAAY,EACxDlmC,MAAKkY,aAAarb,OAAOwP,EAAao6B,EAAqB,GAE3DP,EAAWvtC,YAAcytC,GAAkBA,EAAejtC,eAAiBitC,EAAejtC,aAAa/B,SACvGgvC,EAAeptC,UAAW,EAC1BotC,EAAeltC,iBAAkB,EACjCktC,EAAet6B,yBAA0B,IAEsB,IAA/D9L,KAAKzJ,OAAOyJ,KAAK8c,iBAAiBte,QAAQ4nC,IAA2B7uC,oBAAkB6uC,IACvFpmC,KAAKzJ,OAAOyJ,KAAK8c,iBAAiBzkB,KAAK+tC,GAEtC7uC,oBAAkB6uC,IACnBpmC,KAAK0mC,sBAAsBN,KAIvCtJ,EAAMvgC,UAAUmqC,sBAAwB,SAAUnuC,GAC9C,GAAI0E,GAAarE,EAAcoH,KAAKzJ,OAAQgC,EAAO+F,eAC9C/G,qBAAkB0F,KACnB+C,KAAKzJ,OAAOyJ,KAAK8c,iBAAiBzkB,KAAK4E,GACvC+C,KAAK0mC,sBAAsBzpC,KAGnC6/B,EAAMvgC,UAAU+pC,gBAAkB,SAAU/tC,GACxC,GAAI4T,GACA0yB,EACA0H,EACA/vC,CAEAA,GADAwJ,KAAKzJ,OAAOC,qBAAsBC,gBAAe+C,EAAUwG,KAAKzJ,QACnDyJ,KAAKzJ,OAAOC,WAAWA,WAAWiF,KAGlCuE,KAAKzJ,OAAOC,UAE7B,KAAK,GAAIU,GAAI,EAAGA,EAAIqB,EAAOY,aAAa/B,OAAQF,IAAK,CACjDiV,EAAgB5T,EAAOY,aAAajC,IAC/BK,oBAAkB4U,EAAchT,eAAiBgT,EAAchT,aAAa/B,SAC7E+U,EAAcjT,iBAAkB,EAEpC,IAAIgf,OAAe,EAEfA,GADAlY,KAAKzJ,OAAOC,qBAAsBC,gBAAe+C,EAAUwG,KAAKzJ,QACjDyJ,KAAKzJ,OAAOC,WAAWA,WAAWiF,KAGlCuE,KAAKzJ,OAAOC,UAE/B,KAAK,GAAImwC,GAAM,EAAGA,EAAMzuB,EAAa9gB,OAAQuvC,IACrCzuB,EAAayuB,GAAK3mC,KAAKzJ,OAAOqG,aAAeuP,EAAc/R,SAAS4F,KAAKzJ,OAAOqG,aAChFiiC,EAAM8H,EAGd,KAAK,GAAIC,GAAM,EAAGA,EAAM5mC,KAAKkY,aAAa9gB,OAAQwvC,IAC9C,GAAI5mC,KAAKkY,aAAa0uB,GAAK5mC,KAAKzJ,OAAOqG,aAAeuP,EAAc/R,SAAS4F,KAAKzJ,OAAOqG,WAAY,CACjG2pC,EAAMK,CACN,QAGK,IAAT/H,GAAetnC,oBAAkBsnC,IACjCroC,EAAWqG,OAAOgiC,EAAK,IAEd,IAAT0H,GAAehvC,oBAAkBgvC,IACjCvmC,KAAKkY,aAAarb,OAAO0pC,EAAK,GAE9Bp6B,EAAcjT,iBACd8G,KAAKsmC,gBAAgBn6B,KAIjC2wB,EAAMvgC,UAAUkpC,cAAgB,SAAUltC,EAAQmT,GAC9C,GAAIS,EACJ,KAAK5T,EAAOW,gBACR,MAAO,EAEX,KAAK,GAAIhC,GAAI,EAAGA,EAAIqB,EAAOY,aAAa/B,OAAQF,IAE5CwU,KADAS,EAAgB5T,EAAOY,aAAajC,IAElBgC,kBACdwS,EAAQ1L,KAAKylC,cAAct5B,EAAeT,GAGlD,OAAOA,IAEXoxB,EAAMvgC,UAAU4nC,mBAAqB,SAAU0C,EAAgB16B,GAC3D,GAAIzH,GAAQ1E,IACZ6mC,GAAeztC,OAAO,SAAU+D,GAC5B,GAAIA,EAAEjE,kBAAoB3B,oBAAkB4F,EAAEhE,cAAe,CAEzD,IAAe,IADHgE,EAAEhE,aAAaqF,QAAQ2N,GAQ/B,MAHAzH,GAAM+oB,aAAe,UACrB/oB,EAAM86B,oBACN96B,EAAMq4B,SAAU,EALhBr4B,GAAMy/B,mBAAmBhnC,EAAEhE,aAAcgT,OAWzD2wB,EAAMvgC,UAAU0K,QAAU,WACtBjH,KAAK8H,uBAMTg1B,EAAMvgC,UAAUuL,oBAAsB,WAC9B9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IhBvtCI,cgButCmBhI,KAAKq9B,YACxCr9B,KAAKzJ,OAAOyR,IhBttCI,cgBstCmBhI,KAAKs9B,YACxCt9B,KAAKzJ,OAAOyR,IhB7tCC,WgB6tCmBhI,KAAKu9B,WACrCv9B,KAAKzJ,OAAOyR,IhB5tCI,cgB4tCmBhI,KAAKw9B,eAW5CV,EAAMvgC,UAAUwG,cAAgB,WAC5B,MAAO,kBAEJ+5B,KCr2CPl8B,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB3I,OAAO8I,iBAChBC,uBAA2B9E,QAAS,SAAU2E,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAI3D,KAAK2D,GAAOA,EAAEvE,eAAeY,KAAI0D,EAAE1D,GAAK2D,EAAE3D,MACpD0D,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASG,KAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEvE,UAAkB,OAANwE,EAAa7I,OAAOkJ,OAAOL,IAAMG,EAAG3E,UAAYwE,EAAExE,UAAW,GAAI2E,QAGnFG,GAA0C,SAAUC,EAAYC,EAAQ7J,EAAK8J,GAC7E,GAA2HV,GAAvHW,EAAIC,UAAUtK,OAAQuK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOtJ,OAAO0J,yBAAyBL,EAAQ7J,GAAO8J,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ7J,EAAK8J,OACpH,KAAK,GAAItK,GAAIoK,EAAWlK,OAAS,EAAGF,GAAK,EAAGA,KAAS4J,EAAIQ,EAAWpK,MAAIyK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ7J,EAAKiK,GAAKb,EAAES,EAAQ7J,KAASiK,EAChJ,OAAOF,GAAI,GAAKE,GAAKzJ,OAAO6J,eAAeR,EAAQ7J,EAAKiK,GAAIA,GAM5Ds6B,GAAiC,SAAUh6B,GAE3C,QAASg6B,KACL,MAAkB,QAAXh6B,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAK/D,MAPAY,IAAUq7B,EAAiBh6B,GAI3BZ,IACIc,cACD85B,EAAgB1/B,UAAW,eAAY,IACnC0/B,GACT75B,iBChCExB,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB3I,OAAO8I,iBAChBC,uBAA2B9E,QAAS,SAAU2E,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAI3D,KAAK2D,GAAOA,EAAEvE,eAAeY,KAAI0D,EAAE1D,GAAK2D,EAAE3D,MACpD0D,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASG,KAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEvE,UAAkB,OAANwE,EAAa7I,OAAOkJ,OAAOL,IAAMG,EAAG3E,UAAYwE,EAAExE,UAAW,GAAI2E,QAanF4lC,GAA8C,SAAU7kC,GAExD,QAAS6kC,GAA6BvwC,GAClC,GAAImO,GAAQzC,EAAOxF,KAAKuD,KAAMzJ,IAAWyJ,IAEzC,OADA0E,GAAM8C,mBACC9C,EA8EX,MAlFA9D,IAAUkmC,EAA8B7kC,GAMxC6kC,EAA6BvqC,UAAUiL,iBAAmB,WACtDxH,KAAKzJ,OAAOkR,GlBsEM,gBkBtEkBzH,KAAK+mC,SAAU/mC,OAEvD8mC,EAA6BvqC,UAAUwqC,SAAW,SAAU7jC,GACxDlD,KAAKgnC,WAAa9jC,EAAKzE,MAE3BqoC,EAA6BvqC,UAAU0qC,YAAc,WACjD,MAAOhlC,GAAO1F,UAAU2qC,QAAQzqC,KAAKuD,OAEzC8mC,EAA6BvqC,UAAU4qC,aAAe,SAAU1oC,EAAM+Y,IAC7DjgB,oBAAkBigB,EAAW4vB,cAAgB5vB,EAAW4vB,YAAYvvB,UACrEL,EAAW4vB,YAAYrvB,SAASC,OAAShY,KAAKzJ,OAAO4X,aAAa2J,YAClE9X,KAAKzJ,OAAOkK,eAAgB0N,cAAgB2J,YAAaN,EAAW4vB,YAAYrvB,SAASC,QAAU,GAE7FzgB,oBAAkBigB,EAAW4vB,cAAiB5vB,EAAW4vB,YAAYvvB,UAC3EL,EAAW4vB,YAAYpvB,OAAShY,KAAKzJ,OAAO4X,aAAa2J,aACzD9X,KAAKzJ,OAAOkK,eAAgB0N,cAAgB2J,YAAaN,EAAW4vB,YAAYpvB,QAAU,EAE9F,IAAIqvB,GAAOrnC,KAAKinC,aAahB,IAZK1vC,oBAAkBigB,EAAW4vB,eACW,UAArC5vB,EAAW4vB,YAAYxtB,WAA8D,SAArCpC,EAAW4vB,YAAYxtB,WAChE5Z,KAAKzJ,OAAOC,qBAAsBC,oBAAyD4a,KAA1CrR,KAAKzJ,OAAOC,WAAWA,WAAW8wC,MAClFtnC,KAAKzJ,OAAOC,WAAWA,WAAW8rB,SAAqD,KAA1CtiB,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAAetwC,EAAgBgJ,KAAKzJ,UACrE,IAA/CihB,EAAW4vB,YAAYG,aAAanwC,SACvCogB,EAAW4vB,YAAYG,aAAeF,EAAKE,cAI/C/vB,EAAW4vB,YAAYG,aAAevnC,KAAKwnC,gBAAgBhwB,EAAW4vB,YAAYpvB,OAGrFhY,KAAKzJ,OAAOC,qBAAsBC,oBAAyD4a,KAA1CrR,KAAKzJ,OAAOC,WAAWA,WAAW8wC,MAChFtnC,KAAKzJ,OAAOC,WAAWA,WAAW8rB,SAAqD,KAA1CtiB,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAAetwC,EAAgBgJ,KAAKzJ,QACvH,MAAO0L,GAAO1F,UAAU4qC,aAAa1qC,KAAKuD,KAAMvB,EAAM+Y,EAGjDjgB,qBAAkBigB,EAAW5X,cAAsD,gBAAtC4X,EAAW5X,YAAYqF,aACrEuS,EAAW5X,YAAc,UAG7B,KAAK,GADDuF,GAAOlD,EAAO1F,UAAU4qC,aAAa1qC,KAAKuD,KAAMvB,EAAM+Y,GACjD7V,EAAI,EAAGA,EAAIwD,EAAK/N,OAAQuK,IAC7BwD,EAAKxD,GAAGzH,MAAS8F,gBAAiBxB,QAAQ2G,EAAKxD,GAAGlD,KAEtD,OAAO0G,IAGf2hC,EAA6BvqC,UAAUkrC,mBAAqB,SAAUnsC,GAClE,GAAIosC,IAAS,SAAU,UAAW,UAAW,YAAa,YAAa,UACnE,OAAQ,UAAUxjB,KAAK,SAAUjqB,GAAS,MAAOqB,KAAWrB,GAChE,IAAK+F,KAAKzJ,OAAOC,qBAAsBC,oBAAyD4a,KAA1CrR,KAAKzJ,OAAOC,WAAWA,WAAW8wC,MAChFtnC,KAAKzJ,OAAOC,WAAWA,WAAW8rB,SAAqD,KAA1CtiB,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAAetwC,EAAgBgJ,KAAKzJ,QAAS,CAChI,GACIuhB,GAAc9X,KAAU,MAAE8X,WAC1B4vB,IACA1nC,KAAK2nC,SACL3nC,KAAK4nC,gBACL5nC,KAAK6nC,oBACL7nC,KAAKvB,QACLuB,KAAK8nC,WAEW,kBAAXxsC,GAA8B0E,KAAK2nC,MAAM7vB,IAC9C9X,KAAK2nC,MAAM7vB,GAAa1gB,OAAU4I,KAAKzJ,qBAAsBwxC,sBACtD/nC,MAAK2nC,MAAM7vB,QAIlB4vB,GAAoB,kBAAXpsC,KACT0E,KAAK2nC,SACL3nC,KAAKvB,QACLuB,KAAK8nC,UACL9nC,KAAK4nC,gBACL5nC,KAAK6nC,oBAGb,OAAOH,IAEJZ,GACTkB,4BCnGEC,GAAwB,WAMxB,QAASA,GAAO1xC,GACZqM,OAAKC,OAAOqlC,UACZloC,KAAKzJ,OAASA,EACdyJ,KAAKmoC,mBAAoB,EACzBnoC,KAAKwL,kBACLxL,KAAKooC,oBACLpoC,KAAKqoC,sBACLroC,KAAKwH,mBAiNT,MAzMAygC,GAAO1rC,UAAUwG,cAAgB,WAC7B,MAAO,UAQXklC,EAAO1rC,UAAU0K,QAAU,WACvBjH,KAAK8H,uBAMTmgC,EAAO1rC,UAAUiL,iBAAmB,WAChCxH,KAAKzJ,OAAOkR,GAAG,mBAAoBzH,KAAKsoC,sBAAuBtoC,MAC/DA,KAAKzJ,OAAOkR,GAAG,eAAgBzH,KAAKuoC,iBAAkBvoC,OAM1DioC,EAAO1rC,UAAUuL,oBAAsB,WAC/B9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IAAI,mBAAoBhI,KAAKsoC,uBACzCtoC,KAAKzJ,OAAOyR,IAAI,eAAgBhI,KAAKuoC,oBAUzCN,EAAO1rC,UAAU+rC,sBAAwB,SAAUE,GAC/Cp0B,WAAS,8BAAgCpU,KAAKzJ,QAC9CyJ,KAAKooC,iBAAmBI,EAAY/pC,KACpCuB,KAAKqoC,sBACLroC,KAAKwL,kBACLxL,KAAKmoC,mBAAoB,CACzB,KAAK,GAAIzL,GAAI,EAAGA,EAAI18B,KAAKooC,iBAAiBhxC,OAAQslC,IAAK,CACnD,GAAIxwB,GAAMlM,KAAKooC,iBAAiB1L,EAChC18B,MAAKyoC,gBAAgBv8B,EACrB,IAAIvU,GAAwD,KAAxCqI,KAAKzJ,OAAOiB,KAAKC,eAAeC,IAAasI,KAAKzJ,OAAOsB,eAAeF,cACtFqI,KAAKzJ,OAAOkB,eAAeE,aACT,WAAlBA,GAA+C,SAAlBA,GACqB,IAAnDqI,KAAKzJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAAwD,KAAxC4I,KAAKzJ,OAAOiB,KAAKC,eAAeC,MACzFsI,KAAKmoC,mBAAoB,EAE7B,IAAIO,GAAUtwC,YAAU,eAAgB8T,IACnC3U,oBAAkBmxC,IAAYA,EAAQtxC,QACvCgd,WAAS,0BAA2BpU,KAAK2oC,iBAAiBz8B,GAAMA,EAEpE,IAAI08B,GAAWxwC,YAAU,aAAc8T,EACvC,KAAK3U,oBAAkBqxC,GAAW,CAC9B,GAAIC,GAAYjwC,EAAcoH,KAAKzJ,OAAQ2V,EAAIvT,WAAWE,UAAU,EAGpEub,YAAS,2BAA2B,EAAMy0B,GACtCA,GAAaA,EAAUlwC,YACvBqH,KAAK8oC,2BAA2BD,IAIxC7oC,KAAKooC,iBAAiBhxC,OAAS,GAAK4I,KAAKmoC,mBACzCnoC,KAAK+oC,oBAET/oC,KAAKzJ,OAAO0Z,OAAO,gBAAkBgB,OAAQjR,KAAKwL,kBAEtDy8B,EAAO1rC,UAAUusC,2BAA6B,SAAUvwC,GACpD,GAAIswC,GAAYjwC,EAAcoH,KAAKzJ,OAAQgC,EAAOI,WAAWE,UAAU,GACnEmwC,EAAgB3qC,WAAS,2BAA4B2B,KAAKzJ,OAC1DsyC,IAAa3wC,OAAOqE,UAAUC,eAAeC,KAAKusC,EAAeH,EAAUhwC,WAC3Eub,WAAS,2BAA2B,EAAMy0B,GAE1CA,GAAaA,EAAUlwC,YACvBqH,KAAK8oC,2BAA2BD,IAGxCZ,EAAO1rC,UAAUksC,gBAAkB,SAAUlwC,GACzC,GAAIhC,GAASqC,EAAcoH,KAAKzJ,OAAQgC,EAAO+F,eAI/C,IAAsB,UAFsC,KAAxC0B,KAAKzJ,OAAOiB,KAAKC,eAAeC,IAAasI,KAAKzJ,OAAOsB,eAAeF,cACtFqI,KAAKzJ,OAAOkB,eAAeE,gBACmD,IAAnDqI,KAAKzJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC1B,KAAxC4I,KAAKzJ,OAAOiB,KAAKC,eAAeC,IA4B9BH,oBAAkBhB,KAGK,WAFsC,KAAxCyJ,KAAKzJ,OAAOiB,KAAKC,eAAeC,IAClDsI,KAAKzJ,OAAOsB,eAAeF,cAAgBqI,KAAKzJ,OAAOkB,eAAeE,gBACa,IAAnDqI,KAAKzJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC7B,KAAxC4I,KAAKzJ,OAAOiB,KAAKC,eAAeC,IAMnCsI,KAAKyoC,gBAAgBlyC,IAL0B,IAA3CyJ,KAAKooC,iBAAiB5pC,QAAQjI,IAC9ByJ,KAAKyoC,gBAAgBlyC,KAOY,IAAzCyJ,KAAKwL,eAAehN,QAAQjG,KAC5ByH,KAAKwL,eAAenT,KAAKE,GACzB6b,WAAS,4BAA8B7b,EAAOM,SAAUN,EAAQyH,KAAKzJ,aA1CzE,IAAIgB,oBAAkBhB,IAClB,IAA+C,IAA3CyJ,KAAKooC,iBAAiB5pC,QAAQjG,GAM9B,aAL6C,IAAzCyH,KAAKwL,eAAehN,QAAQjG,KAC5ByH,KAAKwL,eAAenT,KAAKE,GACzB6b,WAAS,4BAA8B7b,EAAOM,SAAUN,EAAQyH,KAAKzJ,QACrEgC,EAAOuT,yBAA0B,QAMzC9L,MAAKyoC,gBAAgBlyC,IAC0B,IAA3CyJ,KAAKooC,iBAAiB5pC,QAAQjI,KAA2D,IAAzCyJ,KAAKwL,eAAehN,QAAQjI,IAC/B,IAAzCyJ,KAAKwL,eAAehN,QAAQjG,KAC5ByH,KAAKwL,eAAenT,KAAKE,GACzB6b,WAAS,4BAA8B7b,EAAOM,SAAUN,EAAQyH,KAAKzJ,UAI5B,IAAzCyJ,KAAKwL,eAAehN,QAAQjG,KAA6D,IAA3CyH,KAAKooC,iBAAiB5pC,QAAQjG,KAC5EyH,KAAKwL,eAAenT,KAAKE,GACzB6b,WAAS,4BAA8B7b,EAAOM,SAAUN,EAAQyH,KAAKzJ,UAyBzF0xC,EAAO1rC,UAAUosC,iBAAmB,SAAU5wC,GAG1C,IAAK,GAFDkxC,GAAW7wC,YAAU,eAAgBL,GACrCmxC,GAAU,EACLx9B,EAAQ,EAAGA,EAAQu9B,EAAS7xC,OAAQsU,IAAS,CAClD,GAAIg9B,GAAUO,EAASv9B,GAAOvS,aAC1BxB,EAAwD,KAAxCqI,KAAKzJ,OAAOiB,KAAKC,eAAeC,IAChDsI,KAAKzJ,OAAOsB,eAAeF,cAAgBqI,KAAKzJ,OAAOkB,eAAeE,aAC1E,MAAwB,UAAlBA,GAA+C,SAAlBA,GAAiF,IAAnDqI,KAAKzJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC1D,KAAxC4I,KAAKzJ,OAAOiB,KAAKC,eAAeC,KAAc,CACjD,GAAIsxC,GAAgB3qC,WAAS,2BAA4B2B,KAAKzJ,OACzD2B,QAAOqE,UAAUC,eAAeC,KAAKusC,EAAeC,EAASv9B,GAAO7S,YACrEmH,KAAKwL,eAAenT,KAAK4wC,EAASv9B,IAClC0I,WAAS,4BAA8B60B,EAASv9B,GAAO7S,SAAUowC,EAASv9B,GAAQ1L,KAAKzJ,QACvF2yC,GAAU,GAGlB,GAAuB,SAAlBvxC,IACsD,IAAnDqI,KAAKzJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAAwD,KAAxC4I,KAAKzJ,OAAOiB,KAAKC,eAAeC,OACpC,IAApDsI,KAAKooC,iBAAiB5pC,QAAQyqC,EAASv9B,IAAgB,CACvDw9B,GAAU,CACV,QAGH3xC,oBAAkBmxC,IAAYA,EAAQtxC,SACvC8xC,EAAUlpC,KAAK2oC,iBAAiBM,EAASv9B,KAEtB,UAAlB/T,GAA+C,SAAlBA,IAA6BsxC,EAAS7xC,SACpE8xC,GAAU,GAGlB,MAAOA,IAEXjB,EAAO1rC,UAAUwsC,kBAAoB,WAGjC,IAAK,GAFDxwC,GAASyH,KAAKwL,eACdvT,EAAM+H,KAAKwL,eAAepU,OACrBqK,EAAI,EAAGA,EAAIxJ,EAAKwJ,IAAK,CAC1B,GAAI0nC,GAAWvwC,EAAcoH,KAAKzJ,OAAQgC,EAAOkJ,GAAGnD,eAEpD,KAD2C,IAA9B/F,EAAOiG,QAAQ2qC,GAChB,CACR,GAAIC,GAAWxwC,EAAcoH,KAAKzJ,OAAQgC,EAAOkJ,GAAGnD,gBAAgB,EACpE/F,GAAOkJ,GAAGiN,YAAc06B,EAAS16B,YAAc,MAG/CnW,GAAOkJ,GAAGiN,YAAc,EACxB1O,KAAKqoC,mBAAmBhwC,KAAKE,EAAOkJ,MAIhDwmC,EAAO1rC,UAAUgsC,iBAAmB,SAAU9pC,GAC1C,GAGI0N,GAHAT,EAAQ,EACRxO,EAAWuB,EAAKvB,SAChBjF,EAAMiF,EAAS9F,MAEnB,KAAKsU,EAAOA,EAAQzT,EAAKyT,IAAS,CAE9B,GAAI29B,IADJl9B,EAAgBjP,EAASwO,IACEgD,aACvB26B,GAAqB,IAAXA,GAAiB9xC,oBAAkB4U,EAAcL,2BAC3DK,EAAcL,wBAA0B,KACxCK,EAAcuC,YAAc,MAGpC1O,KAAKwL,kBACLxL,KAAKzJ,OAAO0Z,OAAO,iBAAmBgB,OAAQ/T,EAAUwO,MAAOxO,EAAS9F,UAErE6wC,KC5NPqB,GAA6B,WAM7B,QAASA,GAAY/yC,GACjByJ,KAAKupC,yBAA0B,EAC/B3mC,OAAKC,OAAO2mC,eACZxpC,KAAKzJ,OAASA,EACdyJ,KAAK2S,eACL3S,KAAKwH,mBAoLT,MA5KA8hC,GAAY/sC,UAAUwG,cAAgB,WAClC,MAAO,eAMXumC,EAAY/sC,UAAUiL,iBAAmB,WACrCxH,KAAKzJ,OAAOkR,GAAG,gBAAiBzH,KAAKypC,uBAAwBzpC,MAC7DA,KAAKzJ,OAAOkR,GAAG,gBAAiBzH,KAAKooB,mBAAoBpoB,MACzDA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,sBAAuBzH,KAAK0pC,mBAAoB1pC,MACpEA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,iBAAkBzH,KAAK2pC,eAAgB3pC,OAQ/DspC,EAAY/sC,UAAU0K,QAAU,WAC5BjH,KAAK8H,uBAMTwhC,EAAY/sC,UAAUuL,oBAAsB,WACpC9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IAAI,gBAAiBhI,KAAKypC,wBACtCzpC,KAAKzJ,OAAOyR,IAAI,gBAAiBhI,KAAKooB,oBACtCpoB,KAAKzJ,OAAOiB,KAAKwQ,IAAI,sBAAuBhI,KAAK0pC,oBACjD1pC,KAAKzJ,OAAOiB,KAAKwQ,IAAI,iBAAkBhI,KAAK2pC,kBAEhDL,EAAY/sC,UAAUktC,uBAAyB,SAAU9P,GACrD35B,KAAK2S,YAAcgnB,GAEvB2P,EAAY/sC,UAAU0hB,IAAM,SAAUL,EAEtCC,EAAkBC,EAAUC,EAAQ6rB,GAChC,GAAIllC,GAAQ1E,KACRxJ,EAAawJ,KAAKzJ,OAAOC,WACzBulB,EAAW7jB,QAMf,OALAkc,YAAS,QAASw1B,EAAO7tB,GACzB3H,WAAS,UAAU,EAAO2H,GACrBxkB,oBAAkBqmB,KACnB5d,KAAKupC,wBAA0B3rB,EAAsB2rB,yBAElD,GAAIM,SAAQ,SAAU5e,GACzB,GAAIxxB,IAAKiL,EAAMolC,WAAetzC,YAAsBC,eAC9CiO,EAAMnO,OAAOC,WADgD,GAAIC,eAAYD,GAE/E2c,EAAQ,GAAIC,QAMhB,IALK1O,EAAMolC,YACP32B,EAAQzO,EAAM6R,cAAcpD,GAC5BiB,WAAS,QAASjB,EAAO4I,IAE7BrX,EAAMnO,OAAO+P,QpBzDM,oBoByD2BlK,SAAO2f,EAAU6B,IAC3DxlB,YAAU,SAAU2jB,GACpB,MAAO,KAEXtiB,GAAGqa,aAAaX,GAAOY,KAAK,SAAU5W,GAClC,GAAI4sC,GAAa,IAKjB,OAJKxyC,qBAAkBqmB,IAA2BrmB,oBAAkBqmB,EAAsBpnB,cACtFuzC,EAAansB,EAAsBpnB,YAEvConB,EAAwBlZ,EAAMslC,2BAA2BpsB,EAAuBpnB,EAAY2G,GACrFuH,EAAMnO,OAAOiB,KAAKwmB,kBAAkBC,IAAIvZ,EAAMnO,OAAOiB,KAAMomB,EAAuBC,EAAkBC,EAAU8rB,EAAO7rB,GAAQhK,KAAK,SAAUk2B,GAC7H,MAAdF,EACAnsB,EAAsBpnB,WAAauzC,QAG5BnsB,GAAsBpnB,WAEjCy0B,EAAQgf,UAKxBX,EAAY/sC,UAAUga,cAAgB,SAAUpD,EAAO4I,GAQnD,OAPKxkB,oBAAkBwkB,IAAqC,gBAAxBA,EAASxD,YACtCvY,KAAKzJ,OAAO2X,cACf6N,EAASxD,WAAa,WACtBpF,EAAMM,UAAU,aAAc,eAC9BN,EAAMK,MAAMxT,KAAKzJ,OAAOoG,gBAAiB,QAAS,MAClDwW,EAAQ/a,YAAU,mCAAoC4H,KAAKzJ,QAAQ4c,IAEhEA,GAEXm2B,EAAY/sC,UAAUytC,2BAA6B,SAAUjuB,EAAUmuB,EAAOC,GAE1E,GAAIjnC,GAAOhL,QAkBX,IAjBAkc,WAAS,QAASpU,KAAKzJ,OAAOiB,KAAK8e,gBAAgBC,eAAc,GAAOrT,GACxEkR,WAAS,YAAY,EAAMlR,GACtB3L,oBAAkBwkB,IAAcxkB,oBAAkBwkB,EAASxD,aAC5DnE,WAAS,aAAc2H,EAASxD,WAAYrV,GAE3ClD,KAAK8pC,YACN9pC,KAAKzJ,OAAO0G,cACZ+C,KAAKzJ,OAAOquB,WAAW1R,kBAAkB9a,YAAU,SAAU+xC,IAC7D/1B,WAAS,aAAcpU,KAAKzJ,OAAO2G,SAAUgG,IAEjDlD,KAAKzJ,OAAO0Z,OAAO,gBAAiB/M,GAEpCA,EAAOlD,KAAK2S,YACZu3B,EAAQ3yC,oBAAkB2L,EAAK+N,QAAUjR,KAAKzJ,OAAO2G,SAASyI,MAAM,GAAKzC,EAAK+N,OACzEjR,KAAK8pC,YACN9pC,KAAKzJ,OAAO2G,aAEZ6e,GAAYA,EAASvlB,YAAcwJ,KAAK8pC,UAAW,CACnD,GAAIM,GAAYpqC,KAAKzJ,OAAO2G,SACxBmtC,EAAUtuB,EAASvlB,qBAAsBC,eAAcslB,EAASvlB,WAAWA,WAAWiF,KAAOsgB,EAASvlB,UAC1GwJ,MAAKzJ,OAAOquB,WAAW1R,kBAAkBm3B,GACzCH,EAAQlqC,KAAKzJ,OAAO2G,SACpB8C,KAAKzJ,OAAO2G,SAAWktC,EAI3B,MAFAruB,GAAWxkB,oBAAkBwkB,GAAY7jB,SAAW6jB,EACpDA,EAASvlB,WAAa,GAAIC,gBAAcgF,KAAMyuC,IACvCnuB,GASXutB,EAAY/sC,UAAU6rB,mBAAqB,SAAUllB,GACjD,GAAIlD,KAAKzJ,OAAOiB,KAAKwX,oBAAoB9L,EAAKxD,OAAOiB,OAASX,KAAKzJ,OAAO6I,gBAAiB,CACvF,GAAI5E,MACAiE,EAAOyE,EAAKzE,KAEZgQ,EADclX,oBAAkBkH,EAAKiQ,aACjBjQ,EAAKtE,MAAQsE,EAAKiQ,WAC1ClU,GAAMgX,OAAS/C,EACfvL,EAAK1I,MAAQA,EAEjBwF,KAAKzJ,OAAO0Z,OAAO,gBAAiB/M,GACpClD,KAAKzJ,OAAO+P,QAAQ,qBAAsBpD,IAE9ComC,EAAY/sC,UAAUmtC,mBAAqB,SAAUY,GACjD,GAAsB,UAAlBA,EAASnnC,KAAkB,CAC3B,GAAIonC,GAAcD,EAASE,OAAO/rC,KAC9BgsC,EAAqBzqC,KAAKzJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAC7DszC,EAAYJ,EAASK,UAAUvzC,OAC/BwzC,EAAWL,EAAYpwC,KAC3B,IAAIowC,EAAY5xC,YAAcC,EAAcoH,KAAKzJ,OAAQg0C,EAAY5xC,WAAWE,SAAUgyC,QAAQJ,IAAsB,CACpH,GAAIK,IAAiB,EACjBC,GAAgB,EAChBvU,EAAQl+B,EAAgB0H,KAAKzJ,OAAQg0C,EAAavqC,KAAKzJ,OAAO0G,aAC9D+C,KAAKupC,yBAA6B/S,GAAUx2B,KAAKzJ,OAAOuiB,cACxDgyB,GAAiB,EACjBC,GAAgBR,EAAYvxC,UAEhCsxC,EAASK,UAAUD,EAAY,GAAGM,UAAaC,aAAcL,EAAUM,YAAaH,EAChFzwC,SAAUwwC,OAETP,GAAYrxC,iBAAmB3B,oBAAkBgzC,EAAY5xC,cAClE2xC,EAASK,UAAUD,EAAY,GAAGM,UAAaC,aAAcL,MAKzEtB,EAAY/sC,UAAUotC,eAAiB,SAAU7rB,GAC7C,IAAK,GAAI5mB,GAAI,EAAGA,EAAI4mB,EAASqtB,WAAW/zC,OAAQF,IACxC4mB,EAASqtB,WAAWj0C,GAAGiO,OACvB2Y,EAASqtB,WAAWj0C,GAAGk0C,WAAcC,mBAAmB,KAIpE/B,EAAY/sC,UAAUutC,QAAU,WAC5B,OAAQxzC,EAAa0J,KAAKzJ,SAAWiD,EAAUwG,KAAKzJ,SAEjD+yC,KC/LPgC,GAA2B,WAM3B,QAASA,GAAU/0C,GACfqM,OAAKC,OAAO0oC,aACZvrC,KAAKzJ,OAASA,EACdyJ,KAAK2S,eACL3S,KAAKwH,mBA+IT,MAvIA8jC,GAAU/uC,UAAUwG,cAAgB,WAChC,MAAO,aAMXuoC,EAAU/uC,UAAUiL,iBAAmB,WACnCxH,KAAKzJ,OAAOkR,GAAG,cAAezH,KAAKqoB,iBAAkBroB,MACrDA,KAAKzJ,OAAOkR,GAAG,gBAAiBzH,KAAKwrC,qBAAsBxrC,OAM/DsrC,EAAU/uC,UAAUuL,oBAAsB,WAClC9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IAAI,cAAehI,KAAKqoB,kBACpCroB,KAAKzJ,OAAOyR,IAAI,gBAAiBhI,KAAKwrC,wBAQ1CF,EAAU/uC,UAAU0K,QAAU,WAC1BjH,KAAK8H,uBAETwjC,EAAU/uC,UAAUivC,qBAAuB,SAAU7R,GACjD35B,KAAK2S,YAAcgnB,GAEvB2R,EAAU/uC,UAAU0hB,IAAM,SAAUG,EAAqBP,EAAkBQ,EAAQN,GAC/E,GAAIrZ,GAAQ1E,KACRkqC,EAAQlqC,KAAKzJ,OAAOC,WACpB0lB,EAAOhkB,SACP4xC,GAAWxzC,EAAa0J,KAAKzJ,SAAWiD,EAAUwG,KAAKzJ,OAE3D,OADA6d,YAAS,UAAU,EAAO8H,GACnB,GAAI2tB,SAAQ,SAAU5e,GACzB,GAAIxxB,IAAKqwC,GAAaI,YAAiBzzC,eACjCiO,EAAMnO,OAAOC,WADmC,GAAIC,eAAYyzC,GAElE/2B,EAAQ,GAAIC,QAMhB,IALK02B,IACD32B,EAAQzO,EAAM6R,cAAcpD,GAC5BiB,WAAS,QAASjB,EAAO+I,IAE7BxX,EAAMnO,OAAO+P,QrB7CI,kBqB6C2BlK,SAAO8f,EAAMkC,IACrDhmB,YAAU,SAAU8jB,GACpB,MAAO,KAEXziB,GAAGqa,aAAaX,GAAOY,KAAK,SAAU5W,GAClC,GAAIsuC,GAAc,IAKlB,OAJKl0C,qBAAkB6mB,IAAyB7mB,oBAAkB6mB,EAAoB5nB,cAClFi1C,EAAcrtB,EAAoB5nB,YAEtC4nB,EAAsB1Z,EAAMgnC,wBAAwBttB,EAAqB8rB,EAAO/sC,GACzEuH,EAAMnO,OAAOiB,KAAK8mB,gBAAgBL,IAAIvZ,EAAMnO,OAAOiB,KAAM4mB,EAAqBP,EAAkBQ,EAAQN,GAAQhK,KAAK,SAAU6c,GAC/G,MAAf6a,EACArtB,EAAoB5nB,WAAai1C,QAG1BrtB,GAAoB5nB,WAE/By0B,EAAQ2F,UAKxB0a,EAAU/uC,UAAUga,cAAgB,SAAUpD,EAAO+I,GAQjD,OAPK3kB,oBAAkB2kB,IAA6B,gBAApBA,EAAK3D,YAC9BvY,KAAKzJ,OAAO2X,cACfgO,EAAK3D,WAAa,WAClBpF,EAAMM,UAAU,aAAc,eAC9BN,EAAMK,MAAMxT,KAAKzJ,OAAOoG,gBAAiB,QAAS,MAClDwW,EAAQ/a,YAAU,mCAAoC4H,KAAKzJ,QAAQ4c,IAEhEA,GAEXm4B,EAAU/uC,UAAUmvC,wBAA0B,SAAUxvB,EAAMguB,EAAOC,GACjE,GAAIjnC,MAEA4mC,GAAWxzC,EAAa0J,KAAKzJ,SAAWiD,EAAUwG,KAAKzJ,OAsB3D,IArBA6d,WAAS,QAASpU,KAAKzJ,OAAOiB,KAAK8e,gBAAgBC,eAAc,GAAOrT,GACxEkR,WAAS,YAAY,EAAMlR,GAC3BkR,WAAS,eAAe,EAAMlR,GACzB3L,oBAAkB2kB,IAAU3kB,oBAAkB2kB,EAAKqtB,0BACpDn1B,WAAS,0BAA2B8H,EAAKqtB,wBAAyBrmC,GAEjE3L,oBAAkB2kB,IAAU3kB,oBAAkB2kB,EAAK3D,aACpDnE,WAAS,aAAc8H,EAAK3D,WAAYrV,GAEvC4mC,IACD9pC,KAAKzJ,OAAO0G,cACZ+C,KAAKzJ,OAAOquB,WAAW1R,kBAAkB7U,WAAS,SAAU8rC,IAC5D/1B,WAAS,aAAcpU,KAAKzJ,OAAO2G,SAAUgG,IAEjDlD,KAAKzJ,OAAO0Z,OAAO,gBAAiB/M,GAEpCA,EAAOlD,KAAK2S,YACZu3B,EAAQ3yC,oBAAkB2L,EAAK+N,QAAUjR,KAAKzJ,OAAO2G,SAASyI,MAAM,GAAKzC,EAAK+N,OACzE64B,IACD9pC,KAAKzJ,OAAO2G,aAEZgf,GAAQA,EAAK1lB,YAAcszC,EAAS,CACpC,GAAI6B,GAAY3rC,KAAKzJ,OAAO2G,SACxBmtC,EAAUnuB,EAAK1lB,qBAAsBC,eAAcylB,EAAK1lB,WAAWA,WAAWiF,KAAOygB,EAAK1lB,UAC9FwJ,MAAKzJ,OAAOquB,WAAW1R,kBAAkBm3B,GACzCH,EAAQlqC,KAAKzJ,OAAO2G,SACpB8C,KAAKzJ,OAAO2G,SAAWyuC,EAI3B,MAFAzvB,GAAO3kB,oBAAkB2kB,MAAaA,EACtCA,EAAK1lB,WAAa,GAAIC,gBAAcgF,KAAMyuC,IACnChuB,GASXovB,EAAU/uC,UAAU8rB,iBAAmB,SAAUnlB,GAC7C,GAAIlD,KAAKzJ,OAAOiB,KAAKwX,oBAAoB9L,EAAKxD,OAAOiB,OAASX,KAAKzJ,OAAO6I,gBAAiB,CACvF,GAAI5E,MACAiE,EAAOrG,YAAU,OAAQ8K,GAEzBuL,EADclX,oBAAkBkH,EAAKiQ,aACjBjQ,EAAKtE,MAAQsE,EAAKiQ,WAC1ClU,GAAMoxC,gBAAwB,EAANn9B,EACxBvL,EAAK1I,MAAQA,EAEjBwF,KAAKzJ,OAAO0Z,OAAO,gBAAiB/M,GACpClD,KAAKzJ,OAAO+P,QAAQ,mBAAoBpD,IAErCooC,KCxJPO,GAAsB,WACtB,QAASA,GAAKt1C,GACVqM,OAAKC,OAAOipC,QACZ9rC,KAAKzJ,OAASA,EACdyJ,KAAKwH,mBAiMT,MA3LAqkC,GAAKtvC,UAAUiL,iBAAmB,WAC9BxH,KAAKzJ,OAAOkR,GtBuBkB,2BsBvBkBzH,KAAK+rC,0BAA2B/rC,MAChFA,KAAKzJ,OAAOkR,GtBwBO,gBsBxBkBzH,KAAKgsC,WAAYhsC,OAM1D6rC,EAAKtvC,UAAUuL,oBAAsB,WAC7B9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,ItBYkB,2BsBZmBhI,KAAK+rC,2BACtD/rC,KAAKzJ,OAAOyR,ItBaO,gBsBbmBhI,KAAKgsC,cAQ/CH,EAAKtvC,UAAUwG,cAAgB,WAC3B,MAAO,SAOX8oC,EAAKtvC,UAAU8wB,QAAU,WACrBrtB,KAAKzJ,OAAOiB,KAAK87B,YAAYjG,WAQjCwe,EAAKtvC,UAAU0K,QAAU,WACrBjH,KAAK8H,uBAQT+jC,EAAKtvC,UAAU62B,SAAW,SAAUC,GAChCrzB,KAAKzJ,OAAOiB,KAAK87B,YAAYF,SAASC,IAQ1CwY,EAAKtvC,UAAUg3B,sBAAwB,SAAU/vB,GAC7CxD,KAAKzJ,OAAOiB,KAAK87B,YAAYC,sBAAsB/vB,IAWvDqoC,EAAKtvC,UAAUwvC,0BAA4B,SAAUt2B,GAIjD,GAHAA,EAAWld,OAAOS,SAAiC,aAAtByc,EAAWna,OACxC0E,KAAKzJ,OAAO2G,SAASgB,IAAI,SAAUf,GAAK,MAAOA,GAAEnE,SAAWmE,EAAEtE,WAAa4c,EAAWld,OAAOM,UACzFsE,EAAEnE,WAAayc,EAAWld,OAAOS,SAAWyc,EAAWld,OAAOS,SAAWmE,EAAEnE,WAC3EgH,KAAKzJ,OAAO8G,oBAAqB,CACjC,GAAI4uC,GAAoBjsC,KAAKzJ,OAAOgF,0BAA0B,GAC1DhD,EAASyH,KAAKzJ,OAAO2G,SAAS9D,OAAO,SAAU+D,GAC/C,MAAOA,GAAE8uC,KAAuBx2B,EAAWld,OAAO0zC,IAElD1zC,GAAOnB,SACPmB,EAAO,GAAGS,SAAWyc,EAAWld,OAAOS,UAG/C,GAAIkzC,IACAj7B,OAAQjR,KAAKzJ,OAAO2G,SACpByB,IAAK8W,EAAW9W,IAChBrD,OAAQma,EAAWna,OACnB/C,OAAQkd,EAAWld,OACnBmT,MAAO1L,KAAKzJ,OAAO2G,SAAS9F,OAGhC,IADAiH,WAAS,oBAAqB2B,KAAKzJ,QAAQ+d,mBAAmB43B,GAC1DlsC,KAAKzJ,OAAO8G,oBAAqB,CACjC,GAEIyY,OAAY,EACI,cAAhBo2B,EAAU,QACVp2B,EAAYo2B,EAAO,IAAEn2B,uBAAuB,oBAAoB,GAC3Dxe,oBAAkBue,KACnBpL,eAAaoL,GAAY,oBACzBpI,YAAUoI,GAAY,wBAGL,WAAhBo2B,EAAU,SACfp2B,EAAYo2B,EAAO,IAAEn2B,uBAAuB,sBAAsB,GAC7Dxe,oBAAkBue,KACnBpL,eAAaoL,GAAY,sBACzBpI,YAAUoI,GAAY,wBAKtC+1B,EAAKtvC,UAAU4vC,SAAW,SAAUC,EAAclyB,EAAMjJ,GAapD,IAAK,GAZDo7B,GAAa90C,oBAAkB0Z,MAAeA,EAW9C+lB,EAASh3B,KACJssC,EAAI,EAAGA,EAAIpyB,EAAK9iB,OAAQk1C,KAXnB,SAAUA,GACpBD,EAAWh0C,KAAK6hB,EAAKoyB,GACrB,IAAIC,KACAryB,GAAKoyB,GAAGpzC,kBACRqzC,EAAMH,EAAahzC,OAAO,SAAU+D,GAChC,MAAO+c,GAAKoyB,GAAGzzC,WAAasE,EAAEmB,iBAElC+tC,EAAarV,EAAOmV,SAASC,EAAcG,EAAKF,KAK5CC,EAEZ,OAAOD,IAEXR,EAAKtvC,UAAUiwC,eAAiB,SAAUC,GACtC,GAAIC,GAAaD,EAAex7B,OAAO7Z,OACnCu1C,EAAkB3sC,KAAKzJ,OAAOiB,KAAK87B,aACI,IAAvCtzB,KAAKzJ,OAAO4X,aAAay+B,WACrBD,EAAgBE,SAASC,oBAAwC,mBAAE7yC,QAAU0yC,EAAgBE,SAASE,kBAAkB,SACxHJ,EAA0B,SAAEt1B,kBAAoBq1B,EAChD1sC,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,SAAWN,IAIrDb,EAAKtvC,UAAUyvC,WAAa,SAAUS,GAClC,GAAI/nC,GAAQ1E,KACRvG,EAAK,GAAIhD,eAAYg2C,EAAex7B,OACxC,IAA8C,SAA1CjR,KAAKzJ,OAAO4X,aAAaC,aAAyB,CAClD,GAAI8L,MACA+yB,EAAYjtC,KAAKzJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAAS,IACf,UAA7C4I,KAAKzJ,OAAOsB,eAAeF,eAA0E,SAA7CqI,KAAKzJ,OAAOsB,eAAeF,eACpF,cAAgB,QAChBwb,GAAQ,GAAIC,UAAQI,MAAMy5B,EAAU,QAAS,EACjD/yB,GAAOzgB,EAAGmb,aAAazB,GACvBs5B,EAAe/gC,MAAQwO,EAAK9iB,MAGxB81C,IAFAC,EAAOntC,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,YACrC9vB,EAAUld,KAAKzJ,OAAOiB,KAAK2W,aAAa2J,aACf,EAC7B3E,GAAQA,EAAM+5B,KAAKA,GAAME,KAAKD,GAC9BjzB,EAAOzgB,EAAGmb,aAAazB,EACvB,IAAIk5B,GAAarsC,KAAKmsC,SAASM,EAAex7B,OAAQiJ,EACtDuyB,GAAex7B,OAASo7B,MAEvB,CACD,GAAIgB,GAAO,GAAI52C,eAAYg2C,EAAex7B,QACtCjY,EAAW,GAAIgJ,aAAU,WAAY,WAAY,MAAMsrC,GAAG,WAAY,eAAYj8B,IAClFk8B,EAAYF,EAAKz4B,cAAa,GAAIxB,UAAQI,MAAMxa,IAChDguC,MAAa,EAMbA,IALA1vC,EAAuB0I,KAAKzJ,SAAayJ,KAAKzJ,OAAOkB,eAAeC,MAAQsI,KAAKzJ,OAAOiB,KAAKC,eAAeC,KAC3GsI,KAAKzJ,OAAOsB,eAAeV,QAAQC,SAAW4I,KAAKzJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAI1Em2C,EAAUn0C,OAAO,SAAU+D,GACpC,MAAO7E,GAAgBoM,EAAMnO,OAAQ4G,EAAGowC,KAJ/BA,EAOjBd,EAAe/gC,MAAQs7B,EAAW5vC,MAClC,IAAI+b,GAAQ,GAAIC,SACZ+5B,EAAOntC,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,QACzChtC,MAAKwsC,eAAeC,EACpB,IAAIvvB,GAAUld,KAAKzJ,OAAOiB,KAAK2W,aAAa2J,WACxCkvB,GAAW5vC,OAAU8lB,EAAUiwB,IAE/BjwB,GADAA,EAAW5H,KAAKk4B,MAAMxG,EAAW5vC,OAAS+1C,IAAWnG,EAAW5vC,OAAS+1C,EAAQ,EAAI,KACvD,EAC9BntC,KAAKzJ,OAAOiB,KAAKiJ,eAAgB0N,cAAgB2J,YAAaoF,KAAa,GAE/E,IAAIgwB,GAAOC,GAAQjwB,EAAU,EAC7B/J,GAAQA,EAAM+5B,KAAKA,GAAME,KAAKD,GAC9BE,EAAK72C,WAAWiF,KAAOurC,EACvByF,EAAex7B,OAASo8B,EAAKz4B,aAAazB,GAE9CnT,KAAKzJ,OAAO0Z,OAAO,eAAgBw8B,IAEhCZ,KCxMP4B,GAAyB,WACzB,QAASA,GAAQl3C,GACbqM,OAAKC,OAAO6qC,WACZ1tC,KAAKzJ,OAASA,EACdyJ,KAAKwH,mBA0IT,MAlIAimC,GAAQlxC,UAAUwG,cAAgB,WAC9B,MAAO,WAMX0qC,EAAQlxC,UAAUiL,iBAAmB,WACjCxH,KAAKzJ,OAAOkR,GvBPK,cuBOkBzH,KAAK2tC,eAAgB3tC,MACxDA,KAAKzJ,OAAOkR,GvBJO,gBuBIkBzH,KAAK2tC,eAAgB3tC,MAC1DA,KAAKzJ,OAAOkR,GvBHM,euBGkBzH,KAAK4tC,oBAAqB5tC,OAMlEytC,EAAQlxC,UAAUuL,oBAAsB,WAChC9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IvBnBK,cuBmBmBhI,KAAK2tC,gBACzC3tC,KAAKzJ,OAAOyR,IvBhBO,gBuBgBmBhI,KAAK2tC,gBAC3C3tC,KAAKzJ,OAAOyR,IvBfM,euBemBhI,KAAK4tC,uBAE9CH,EAAQlxC,UAAUoxC,eAAiB,SAAUzqC,GACzC,GAAIwiB,GAAiB1lB,KAAKzJ,OAAOiB,KAAKmuB,cAAcC,YACpD,KAAKruB,oBAAkBmuB,GAAiB,CACpC,GAAI+X,GAAOz9B,KAAKzJ,OACZwvB,MAAgB,GAChBC,MAAiB,GACjBH,EAAW4X,EAAK3sB,QAAQC,GAAK,sBAC7B+U,EAAY2X,EAAK3sB,QAAQC,GAAK,uBAC9B88B,EAAYnoB,EAAetd,cAAc,IAAMyd,GAC/CioB,EAAapoB,EAAetd,cAAc,IAAM0d,GAChDnnB,EAAMuE,EAAKvE,IACXovC,EAActQ,EAAK/C,kBAAkB,EAKzC,IAJKnjC,oBAAkBoH,EAAI,MACvBA,EAAMA,EAAI,IAEdA,EAAQpH,oBAAkBw2C,IAAgBA,EAAYhnC,WAAapI,EAAIoI,SAA0BpI,EAAdovC,EACjE,OAAdF,GAAqC,OAAfC,EAAqB,CAG3C,GAFA/nB,EAAgBL,EAAetd,cAAc,IAAMyd,GAAU5E,cAC7D+E,EAAiBN,EAAetd,cAAc,IAAM0d,GAAW7E,cAC1C,IAAjBtiB,EAAIoI,UAAkB02B,EAAKn4B,wBAAwBlO,OAAS,EAC5D2uB,EAActgB,UAAUsE,IAAI,YAC5Bic,EAAevgB,UAAUsE,IAAI,gBAE5B,IAAqB,kBAAjB7G,EAAW,OAA2B3L,oBAAkBw2C,IAAgBtQ,EAAKjmC,KAAKw2C,oBAAsB,CAC7G,GAAI/P,GAAeR,EAAKjgC,wBAAwBmB,EAAIoI,SAC/CxP,qBAAkB0mC,KACdA,EAAa9jC,MAAQsjC,EAAKjgC,wBAAwBmB,EAAIoI,SAAW,GAAG5M,MACrE4rB,EAActgB,UAAUsE,IAAI,YAG5Bgc,EAActgB,UAAU6e,OAAO,YAE/B2Z,EAAa9jC,QAAUsjC,EAAKjgC,wBAAwBmB,EAAIoI,SAAW,GAAG5M,OACtE4rB,EAActgB,UAAU6e,OAAO,YAER,IAAvB2Z,EAAa9jC,OACb6rB,EAAevgB,UAAUsE,IAAI,YAEN,IAAvBk0B,EAAa9jC,OACb6rB,EAAevgB,UAAU6e,OAAO,aAIvB,kBAAjBphB,EAAW,MAAyB3L,oBAAkBw2C,KAAiBtQ,EAAKjmC,KAAKw2C,sBAC7EhuC,KAAKzJ,OAAO6sB,QAAkB,SAAE,WAChC2C,EAActgB,UAAUsE,IAAI,YAE5B/J,KAAKzJ,OAAO6sB,QAAkB,SAAE,YAChC4C,EAAevgB,UAAUsE,IAAI,gBAMjD0jC,EAAQlxC,UAAUqxC,oBAAsB,SAAU1qC,GAC9C,GAAIu6B,GAAOz9B,KAAKzJ,MAEsB,UAAlCyJ,KAAKzJ,OAAOsF,aAAaC,MAA0D,UAAvCkE,KAAKzJ,OAAOiB,KAAKqE,aAAaC,MAC1EoH,EAAK7J,KAAK0X,KAAO/Q,KAAKzJ,OAAOiB,KAAKsZ,QAAQC,GAAK,YAC/C7N,EAAKmD,QAAS,EACdrG,KAAKzJ,OAAOiB,KAAKuE,WAAW61B,YAE5B1uB,EAAK7J,KAAK0X,KAAO/Q,KAAKzJ,OAAOiB,KAAKsZ,QAAQC,GAAK,cAC/C/Q,KAAKzJ,OAAOuqB,YAEZ5d,EAAK7J,KAAK0X,KAAO/Q,KAAKzJ,OAAOiB,KAAKsZ,QAAQC,GAAK,gBAC/C/Q,KAAKzJ,OAAOwqB,cAEZ7d,EAAK7J,KAAK0X,KAAO0sB,EAAKjmC,KAAKsZ,QAAQC,GAAK,WAAa0sB,EAAK33B,qBAAqB1O,SAC3EG,oBAAkBkmC,EAAK3jB,uBAC3B9Z,KAAKzJ,OAAOujB,qBAAwC,oBAAE,KAAM,UAE5D5W,EAAK7J,KAAK0X,KAAO0sB,EAAKjmC,KAAKsZ,QAAQC,GAAK,YAAc0sB,EAAK33B,qBAAqB1O,SAC5EG,oBAAkBkmC,EAAK3jB,uBAC3B9Z,KAAKzJ,OAAOujB,qBAAwC,oBAAE,KAAM,YASpE2zB,EAAQlxC,UAAUqpB,WAAa,WAC3B,MAAO5lB,MAAKzJ,OAAOiB,KAAKmuB,cAAcC,cAU1C6nB,EAAQlxC,UAAU81B,YAAc,SAAUtd,EAAOqd,GAC7CpyB,KAAKzJ,OAAOiB,KAAKmuB,cAAc0M,YAAYtd,EAAOqd,IAQtDqb,EAAQlxC,UAAU0K,QAAU,WACxBjH,KAAK8H,uBAEF2lC,KC7IPQ,GAA2B,WAM3B,QAASA,GAAU13C,GACfqM,OAAKC,OAAOqrC,aACZluC,KAAKzJ,OAASA,EACdyJ,KAAKmuC,oBACLnuC,KAAKiX,gBAoOT,MA5NAg3B,GAAU1xC,UAAUwG,cAAgB,WAChC,MAAO,WAEXkrC,EAAU1xC,UAAUuL,oBAAsB,WAClC9H,KAAKzJ,OAAOwR,aAapBkmC,EAAU1xC,UAAU6a,sBAAwB,SAAUH,EAAcoC,EAAc+0B,GAC9EpuC,KAAKiX,aAAeA,CAIpB,KAAK,GAHDve,GAEAuE,KACKG,EAAI,EAAGnF,EAFOC,OAAOC,KAAKkhB,GAAcjiB,OAETgG,EAAInF,EAAKmF,IAC5BhF,YAAU,eAAgBihB,EAAajc,KAEpDH,EAAW5E,KAAKghB,EAAajc,GAGrC,IAII2oC,GAJA9tB,EAAgBngB,EAAkBmF,GAClCoxC,EAAcpxC,EAAW0I,QACzB2oC,EAAgBp2C,OAAOC,KAAK6H,KAAKzJ,OAAOugB,YAAY1f,OACpDm3C,EAAar2C,OAAOC,KAAK8f,GAAe7gB,OAExCD,EAAU6I,KAAKzJ,OAAOoJ,YAC1B,IAAIK,KAAKzJ,OAAOugB,WAAW1d,OAAO,SAAUo5B,GAAK,MAAOA,GAAEpF,mBAAqBh2B,QAC3E,IAAK,GAAIF,GAAI,EAAGe,EAAMs2C,EAAYr3C,EAAIe,EAAKf,IAGvC,GAFAwB,EAAeuf,EAAc/gB,GAC7B6uC,EAAqB/lC,KAAKwuC,sBAAsB91C,EAAc21C,GACtC,CAwCpB,IAAK,GADDrX,GAASh3B,KACJyuC,EAAkB,EAAGC,EAAQJ,EAAeG,GAAmBC,EAAOD,KAvCjE,SAAUA,EAAiBC,GACrC,GAAIr1C,OAAO,EACXA,KACA,KAAK,GAAImgC,GAAM,EAAGA,EAAMriC,EAAQC,OAAQoiC,IAGpCngC,EAFa9B,oBAAkBa,YAAU,QAASjB,EAAQqiC,KACtDriC,EAAQqiC,GAAOphC,YAAU,QAAUjB,EAAQqiC,KACjC,IAGlB,IADAngC,EAAO29B,EAAO2X,kBAAkBt1C,EAAM29B,EAAOzgC,OAAOugB,WAAW23B,EAAkB,KAC7EzX,EAAOzgC,OAAOugB,WAAW23B,EAAkB,GAAGrhB,iBA0B9C,MAAO,UAzBP,IAAIwhB,EACJP,GAAYnwC,IAAI,SAAUf,EAAGjG,GACzB,GAAIiG,EAAEtE,WAAaH,EAAaG,SAE5B,YADA+1C,EAAQ13C,IAIhB,IAAI23C,GAAeD,EAAQ7I,EAAqB0I,EAC5CK,EAAgB1yC,YAAW1D,SACxBo2C,GAAc31C,mBACd21C,GAAc9X,EAAOzgC,OAAOuG,cACnCsX,WAAS,aAAc06B,EAAez1C,EACtC,IAAIc,GAAQ/B,YAAU,QAAS02C,EAI/B,IAHA16B,WAAS,QAASja,EAAQ,EAAGd,GAC7B+a,WAAS,gBAAgB,EAAM/a,GAC/B+a,WAAS,iBAAkB06B,EAAcj2C,SAAUQ,GAC/C+0C,EAAQ,CACR,GAAIj1C,GAAef,YAAU,eAAgBM,EACzCS,GAAa/B,QACb+B,EAAad,KAAKgB,GAG1Bg1C,EAAYxxC,OAAOgyC,EAAc,EAAGx1C,IAQhCo1C,EAEZzuC,MAAKmuC,yBAIZ,CAED,IAAK,GADDp5B,MACK5L,EAAc,EAAG+uB,EAAW/gC,EAAQC,OAAQ+R,EAAc+uB,EAAU/uB,IAGzE4L,EAFaxd,oBAAkBa,YAAU,QAASjB,EAAQgS,KACtDhS,EAAQgS,GAAe/Q,YAAU,QAASjB,EAAQgS,KACtC,IAEpB,KAAK,GAAIslC,GAAkB,EAAGM,EAAWT,EAAeG,GAAmBM,EAAUN,IACjFzuC,KAAK2uC,kBAAkB55B,EAAO/U,KAAKzJ,OAAOugB,WAAW23B,EAAkB,IAG/E,MAAOJ,IAEXJ,EAAU1xC,UAAUiyC,sBAAwB,SAAUvxC,EAAYC,GAG9D,IAAK,GADD3E,GACKrB,EAAI,EAAGe,EAFGC,OAAOC,KAAK+E,GAAU9F,OAELF,EAAIe,EAAKf,IAIzC,GAHAqB,EAAS2E,EAAShG,GAGd+F,KAFW1F,oBAAkBgB,EAAOI,YAAc,KAClDuE,EAAS9D,OAAO,SAAU+D,GAAK,MAAOA,GAAEtE,WAAaN,EAAOI,WAAWE,WAAa,IAC3D,CAGzB,GAFAmH,KAAKmuC,iBAAiB91C,KAAKE,IACZH,YAAU,kBAAmBG,GAKxC,QAHAyH,MAAKwuC,sBAAsBj2C,EAAQ2E,GAO/C,MAAO8C,MAAKmuC,iBAAiB/2C,QAEjC62C,EAAU1xC,UAAUoyC,kBAAoB,SAAUK,EAAUC,GAExD,IAAK,GAAI/3C,GAAI,EAAGe,EADUC,OAAOC,KAAK82C,EAAQ93C,SAASC,OACZF,EAAIe,EAAKf,IAIhD,IAAK,GAHDg4C,GAAgB33C,oBAAkB03C,EAAQ93C,QAAQD,GAAGiE,YAAc8zC,EAAQ93C,QAAQD,GAAG8Y,MACtFi/B,EAAQ93C,QAAQD,GAAGiE,WAEdm0B,EAAK,EAAG6f,EADNj3C,OAAOC,KAAK62C,GACS1f,EAAK6f,EAAO/3C,OAAQk4B,IAAM,CACtD,GAAI53B,GAAMy3C,EAAO7f,EACjB,IAAI53B,IAAQw3C,EACR,GAAIlvC,KAAKmuC,iBAAiB/2C,OACtB43C,EAASt3C,GAAOsI,KAAKovC,iBAAiBH,EAAQ93C,QAAQD,GAAI8I,KAAKmuC,sBAE9D,IAAInuC,KAAKzJ,OAAOuiB,YAAa,CAC9B,GAAIra,GAAOuB,KAAKzJ,OAAOC,qBAAsBC,eAAcuJ,KAAKzJ,OAAOC,WAAWA,WAAWiF,KACvFuE,KAAKzJ,OAAO2G,QAClB8xC,GAASt3C,GAAOsI,KAAKovC,iBAAiBH,EAAQ93C,QAAQD,GAAIuH,IAQ1E,MAAOuwC,IAEXf,EAAU1xC,UAAU6yC,iBAAmB,SAAUC,EAAej/B,GAC5D,GAAIuD,GAAM,GAAIP,SACVk8B,KACA7zB,KACAtY,EAAQ5L,oBAAkB83C,EAAcr/B,WACiBqB,GAAzDrR,KAAKzJ,OAAOg6B,iBAAiB8e,EAAcr/B,OAAO7M,IACtDksC,GAAcpzB,qBAAsBhB,OAAQjb,KAAKuvC,kBAAkBF,EAAcp0B,OAAQ9X,KACzFksC,EAAct0B,aAAa/a,KAAKzJ,OAAOiB,KAAK6nB,OAC5C,IAAIlE,GAAWk0B,EAAc9zB,gBAAkB,WAAe,MAAO,UAAU/V,GAAK,MAAOA,MAC3F6pC,GAAc7zB,YAAYC,EAC1B,IAAI+zB,GAAUH,EAAcrzB,YAAY,EACxCrI,GAAIE,QAAU7T,KAAKiX,aACnBtD,EAAI87B,eACJ,IAEIC,GAFAC,EAAU,GAAIl5C,eAAY2Z,GAAawE,aAAajB,GACpD1Q,EAAQosC,EAAclsC,IAE1BF,IAASosC,EAAclsC,KACvB,KAAK,GAAIjM,GAAI,EAAGA,EAAI+L,EAAM7L,OAAQF,IAAK,CACnCw4C,EAAazsC,EAAM/L,EACnB,IAAIQ,GAAM23C,EAAcr/B,MAAQ,MAAQ/M,EAAM/L,GAAG04C,cAC7Cze,EAAmB,WAAbluB,EAAM/L,GAAkBkB,YAAU,aAAcu3C,GACtDE,qBAAmB5sC,EAAM/L,GAAIy4C,EAASN,EAAervC,KAAKzJ,QAC1Du5C,EAAOT,EAAcl0C,WACrB40C,EAAuB,WAAb9sC,EAAM/L,GAAkBi6B,EAAIz5B,GAAOy5B,CACjDme,GAAOQ,GAAQR,EAAOQ,OACtBR,EAAOQ,GAAMp4C,GAAOq4C,EACpBT,EAAOQ,GAAM7sC,EAAM/L,IAAOK,oBAAkB45B,GAA2B,IAApBhW,EAAS40B,GAEhEt0B,EAAOR,OAASo0B,EAAc9zB,cAC9B,IAAI/M,GAAc9E,gBAAc,MAC5BC,UAAW,aAEf,IAAI3J,KAAKzJ,OAAOya,QAAS,CAErBw+B,EAAQ/4B,GAAG64B,EAAOD,EAAcl0C,YAAa6E,KAAKzJ,OAAQi5C,EAAQzzB,SAAU,GAAI,KAAM,KAAMvN,GAC5FxO,KAAKzJ,OAA2B,2BAGhCoa,kBAAenC,EAAaghC,EAAQ/4B,GAAG64B,EAAOD,EAAcl0C,YAAa6E,KAAKzJ,OAAQi5C,EAAQzzB,UAElG,IAAI9hB,GAAQq1C,EAAOD,EAAcl0C,YAAYu0C,EAE7C,QAA8C,IAA1ClhC,EAAY1D,UAAUtM,QAAQvE,GACfuU,EAAY1D,UAAY7Q,EAIhCuU,EAAY1D,WAG3BmjC,EAAU1xC,UAAUgzC,kBAAoB,SAAUS,EAAe7sC,GAC7D,GAAI5L,oBAAkB4L,IAAkC,gBAAlB6sC,GAClC,MAAOA,EAEX,IAAIn2C,EACJ,QAAQsJ,GACJ,IAAK,SACDtJ,GAAQohB,OAAQ+0B,EAChB,MACJ,KAAK,WACDn2C,GAAQsJ,KAAM,WAAY+X,SAAU80B,EACpC,MACJ,KAAK,OACDn2C,GAAQsJ,KAAMA,EAAM+X,SAAU80B,GAGtC,MAAOn2C,IAQXo0C,EAAU1xC,UAAU0K,QAAU,WAC1BjH,KAAK8H,uBAEFmmC,KC9OPgC,GAAsB,WACtB,QAASA,GAAKz4C,GACVoL,OAAKC,OAAOqtC,QACZlwC,KAAKzJ,OAASiB,EACdwI,KAAKsS,WACLtS,KAAKmwC,kBACLnwC,KAAKwS,aAAe,EACpBxS,KAAKhF,iBAAmBzD,oBAAkByI,KAAKzJ,OAAOoG,iBACtDqD,KAAKwH,mBA2GT,MAnGAyoC,GAAK1zC,UAAUwG,cAAgB,WAC3B,MAAO,QAKXktC,EAAK1zC,UAAUiL,iBAAmB,WAC9BxH,KAAKzJ,OAAOkR,GAAG,cAAezH,KAAKowC,YAAapwC,MAChDA,KAAKzJ,OAAOkR,GAAG,aAAczH,KAAKqwC,qBAAsBrwC,OAM5DiwC,EAAK1zC,UAAUuL,oBAAsB,WAC7B9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IAAI,cAAehI,KAAKowC,aACpCpwC,KAAKzJ,OAAOyR,IAAI,aAAchI,KAAKqwC,wBAEvCJ,EAAK1zC,UAAU8zC,qBAAuB,SAAUC,GAC5C,GAAI7xC,GAAO6xC,EAAW50C,aAClB6d,EAAS+2B,EAAW/2B,MACxBvZ,MAAKuwC,YAAY9xC,EAAM8a,GACvBvZ,KAAKwS,aAAe,EACpB89B,EAAW50C,aAAesE,KAAKmwC,eAC/BnwC,KAAKmwC,mBAETF,EAAK1zC,UAAUg0C,YAAc,SAAU9xC,EAAM8a,GACzC,IAAK,GAAIzY,GAAI,EAAGA,EAAIrC,EAAKrH,OAAQ0J,IAW7B,GAVId,KAAKzJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAAS,GAA6C,KAAxC4I,KAAKzJ,OAAOiB,KAAKC,eAAeC,IACjFH,oBAAkBqB,EAAcoH,KAAKzJ,OAAQkI,EAAKqC,GAAGjI,UAAU,MAChEmH,KAAKwS,cACLxS,KAAKmwC,eAAenwC,KAAKwS,aAAe/T,EAAKqC,KAIjDd,KAAKwS,cACLxS,KAAKmwC,eAAenwC,KAAKwS,aAAe/T,EAAKqC,IAE7CrC,EAAKqC,GAAG5H,gBAAiB,CACzB,GAAIs3C,GAAa,GAAI/5C,eAAYgI,EAAKqC,GAAG3H,cAAcyb,aAAa2E,EACpE,IAAIvZ,KAAKzJ,OAAO8I,sBAA4G,IAArFZ,EAAKqC,GAAG3H,aAAaqF,QAAQwB,KAAKzJ,OAAOujB,qBAAoC,gBAAkE,kBAArD9Z,KAAKzJ,OAAOujB,qBAAmC,aAAuB,CACnM,GAAIC,GAAay2B,EAAUhyC,QAAQwB,KAAKzJ,OAAOujB,qBAAoC,cACnF02B,GAAU3zC,OAAOkd,EAAY,EAC7B,IAAIC,GAAaw2B,EAAUhyC,QAAQwB,KAAKzJ,OAAOujB,qBAAoC,cAC1B,gBAArD9Z,KAAKzJ,OAAOujB,qBAAmC,aAC/C02B,EAAU3zC,OAAOmd,EAAY,EAAGha,KAAKzJ,OAAOujB,qBAAoC,eAEtB,kBAArD9Z,KAAKzJ,OAAOujB,qBAAmC,cACpD02B,EAAU3zC,OAAOmd,EAAa,EAAG,EAAGha,KAAKzJ,OAAOujB,qBAAoC,eAG5F9Z,KAAKuwC,YAAYC,EAAWj3B,KAYxC02B,EAAK1zC,UAAUkjB,WAAa,SAAUtkB,EAAYye,EAAW2F,GACzDvf,KAAKzJ,OAAOiB,KAAKioB,WAAWtkB,EAAYye,EAAW2F,IAEvD0wB,EAAK1zC,UAAUojB,iBAAmB,SAAU3P,GACxChQ,KAAKzJ,OAAOiB,KAAKmoB,iBAAiB3P,IAQtCigC,EAAK1zC,UAAU6zC,YAAc,WACzBpwC,KAAKzJ,OAAOkK,eAAgBlC,aAAcgoB,sBAAoBvmB,KAAKzJ,OAAOiB,KAAK+G,gBAAiB,IAOpG0xC,EAAK1zC,UAAUmjB,aAAe,WAC1B1f,KAAKzJ,OAAOiB,KAAKkoB,eACjB1f,KAAKowC,eAQTH,EAAK1zC,UAAU0K,QAAU,WACrBjH,KAAK8H,uBAEFmoC,KCtHPQ,GAA4B,WAM5B,QAASA,GAAWl6C,GAChBqM,OAAKC,OAAO6tC,cACZ1wC,KAAKzJ,OAASA,EAiBlB,MAfAk6C,GAAWl0C,UAAUo0C,cAAgB,WACjC,MAAO3wC,MAAKzJ,OAAOiB,KAAKo5C,iBAAiBD,iBAE7CF,EAAWl0C,UAAU0K,QAAU,aAS/BwpC,EAAWl0C,UAAUwG,cAAgB,WACjC,MAAO,cAEJ0tC,KCxBPI,GAA6B,WAC7B,QAASA,GAAYt6C,GACjBqM,OAAKC,OAAOiuC,eACZ9wC,KAAKzJ,OAASA,EACdyJ,KAAKwH,mBA0HT,MApHAqpC,GAAYt0C,UAAUiL,iBAAmB,WACrCxH,KAAKzJ,OAAOkR,GAAG,kBAAmBzH,KAAKguB,gBAAiBhuB,MACxDA,KAAKzJ,OAAOkR,GAAG,mBAAoBzH,KAAK+tB,iBAAkB/tB,OAM9D6wC,EAAYt0C,UAAUuL,oBAAsB,WACpC9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IAAI,kBAAmBhI,KAAKguB,iBACxChuB,KAAKzJ,OAAOyR,IAAI,mBAAoBhI,KAAK+tB,oBAE7C8iB,EAAYt0C,UAAUyxB,gBAAkB,SAAU9qB,GAC9C,GAAI6tC,GAASpqC,SAAO,IAAM3G,KAAKzJ,OAAOua,QAAQC,GAAK,4BAA6B7N,EAAK4N,SACjFkgC,EAAarqC,SAAO,IAAM3G,KAAKzJ,OAAOua,QAAQC,GAAK,0BAA2B7N,EAAK4N,SACnFU,EAAS7K,SAAO,IAAM3G,KAAKzJ,OAAOua,QAAQC,GAAK,4BAA6B7N,EAAK4N,SACjFirB,EAAUp1B,SAAO,IAAM3G,KAAKzJ,OAAOua,QAAQC,GAAK,6BAA8B7N,EAAK4N,QACnFigC,MACkD,IAA9C/wC,KAAKzJ,OAAOiB,KAAKqE,aAAaioB,aAAyB9jB,KAAKzJ,OAAOiB,KAAK42B,OACxE2iB,EAAOv2C,MAAMG,QAAU,OAGvBo2C,EAAOv2C,MAAMG,QAAU,SAGQ,SAAlCqF,KAAKzJ,OAAOsF,aAAaC,MAAqD,UAAlCkE,KAAKzJ,OAAOsF,aAAaC,MACjEvE,oBAAkBy5C,IAAkBA,EAAWvrC,UAAUC,SAAS,iBACvEsrC,EAAWx2C,MAAMG,QAAU,OAE/B,IAAI8iC,GAAOz9B,KAAKzJ,OACZw3C,EAActQ,EAAK/C,kBAAkB,EACzC,KAAKlpB,IAAUuqB,GAAaxkC,oBAAkBw2C,GAmCtCtQ,EAAKjmC,KAAK42B,QAAU72B,oBAAkBw2C,KACtCv8B,EAAOhX,MAAMG,QAAU,OACvBohC,EAAQvhC,MAAMG,QAAU,YArC4B,CACxD,GAAI06B,GAAgBnyB,EAAK+tC,MAAM1vC,OAAO8G,QAAQ,KAC9C,IAAI9Q,oBAAkB89B,KAAoB99B,oBAAkB89B,KAAmBA,EAAc5vB,UAAUC,SAAS,aAC5G8L,EAAOhX,MAAMG,QAAUohC,EAAQvhC,MAAMG,QAAU,WAG/C,IAA6B,IAAzBozC,EAAYhnC,UAAkB02B,EAAKn4B,wBAAwBlO,OAAS,EACpEoa,EAAOhX,MAAMG,QAAUohC,EAAQvhC,MAAMG,QAAU,WAE9C,IAAqB,kBAAjBuI,EAAW,OAA2B3L,oBAAkBw2C,IAAgBtQ,EAAKjmC,KAAKw2C,oBAAsB,CAC7G,GAAI/P,GAAeR,EAAKjgC,wBAAwBuwC,EAAYhnC,SACvDxP,qBAAkB0mC,KACdA,EAAa9jC,MAAQsjC,EAAKjgC,wBAAwBuwC,EAAYhnC,SAAW,GAAG5M,OAA4C,UAAlC6F,KAAKzJ,OAAOsF,aAAaC,MAC3E,SAAlCkE,KAAKzJ,OAAOsF,aAAaC,KAC5B0V,EAAOhX,MAAMG,QAAU,OAGvB6W,EAAOhX,MAAMG,QAAU,QAEtBsjC,EAAa9jC,QAAUsjC,EAAKjgC,wBAAwBuwC,EAAYhnC,SAAW,GAAG5M,OAA4C,UAAlC6F,KAAKzJ,OAAOsF,aAAaC,MAC7E,SAAlCkE,KAAKzJ,OAAOsF,aAAaC,OAC5B0V,EAAOhX,MAAMG,QAAU,SAEC,IAAvBsjC,EAAa9jC,OAAkD,UAAlC6F,KAAKzJ,OAAOsF,aAAaC,MAClB,SAAlCkE,KAAKzJ,OAAOsF,aAAaC,KAC5BigC,EAAQvhC,MAAMG,QAAU,OAGxBohC,EAAQvhC,MAAMG,QAAU,YAahDk2C,EAAYt0C,UAAUwxB,iBAAmB,SAAU7qB,GAO/C,GANqB,UAAjBA,EAAK7J,KAAK0X,IAAmC,UAAjB7N,EAAK7J,KAAK0X,IAAmC,UAAjB7N,EAAK7J,KAAK0X,KAClE/Q,KAAKzJ,OAAO0Z,OAAO,0BAA2B/M,GAC9ClD,KAAKzJ,OAAOkK,eAAgB5E,cAAgBQ,eAAgB6G,EAAK7J,KAAK0X,MAAQ,GAC9E/Q,KAAKzJ,OAAOwF,WAAoC,yBAAI,EACpDiE,KAAKzJ,OAAOm7B,cAEZxuB,EAAK7J,KAAK0X,KAAO/Q,KAAKzJ,OAAOua,QAAQC,GAAK,6BAA+B7N,EAAK7J,KAAK0X,KAAO/Q,KAAKzJ,OAAOua,QAAQC,GAAK,gCAC9GxZ,oBAAkByI,KAAKzJ,OAAOujB,sBAAuB,CACtD,GACIxe,GAAS4H,EAAK7J,KAAK0X,KAAO/Q,KAAKzJ,OAAOua,QAAQC,GAAK,4BAA8B,SAAW,SAChG/Q,MAAKzJ,OAAOujB,qBAAwC,oBAAE,KAAMxe,KAUxEu1C,EAAYt0C,UAAUwG,cAAgB,WAClC,MAAO,eAQX8tC,EAAYt0C,UAAU0K,QAAU,WAC5BjH,KAAK8H,uBAOT+oC,EAAYt0C,UAAU6qB,eAAiB,WACnC,MAAOpnB,MAAKzJ,OAAOiB,KAAKq0B,kBAAkBzE,kBAEvCypB,KCzHPK,GAA2B,WAC3B,QAASA,GAAU36C,GACfyJ,KAAKmxC,gBAAkB,EACvBnxC,KAAKoS,aAAe,eACpBpS,KAAK4c,eAAiB,iBACtB5c,KAAKoxC,qBACLpxC,KAAKqxC,uBACLrxC,KAAKsxC,qBACLtxC,KAAKzJ,OAASA,EACdyJ,KAAKhF,iBAAmBzD,oBAAkBhB,EAAOoG,iBACjDqD,KAAKuxC,gBACLvxC,KAAKzC,sBACLyC,KAAKwxC,OAAQ,EACbxxC,KAAKwH,mBA0mBT,MAxmBA0pC,GAAU30C,UAAUiL,iBAAmB,WACnCxH,KAAKzJ,OAAOkR,G5B2CG,Y4B3CkBzH,KAAKgsB,UAAWhsB,MACjDA,KAAKzJ,OAAOkR,G5BkDE,W4BlDkBzH,KAAKmsB,SAAUnsB,MAC/CA,KAAKzJ,OAAOkR,G5BqDQ,iB4BrDkBzH,KAAKqsB,eAAgBrsB,MAC3DA,KAAKzJ,OAAOkR,G5BwDG,Y4BxDkBzH,KAAKyxC,UAAWzxC,MACjDA,KAAKzJ,OAAOkR,G5BiDW,oB4BjDkBzH,KAAKusB,kBAAmBvsB,MACjEA,KAAKzJ,OAAOkR,G5BoDS,kB4BpDkBzH,KAAKosB,gBAAiBpsB,MAC7DA,KAAKzJ,OAAOkR,GAAG,kBAAmBzH,KAAK0xC,gBAAiB1xC,MACxDA,KAAKzJ,OAAOkR,GAAG,oBAAqBzH,KAAK2xC,kBAAmB3xC,MAC5DA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,yBAA0BzH,KAAK4xC,qBAAsB5xC,MACzEA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,kBAAmBzH,KAAK6xC,cAAe7xC,OAM/DkxC,EAAU30C,UAAUuL,oBAAsB,WAClC9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,I5BwBG,Y4BxBmBhI,KAAKgsB,WACvChsB,KAAKzJ,OAAOyR,I5B+BE,W4B/BmBhI,KAAKmsB,UACtCnsB,KAAKzJ,OAAOyR,I5BsCG,Y4BtCmBhI,KAAKyxC,WACvCzxC,KAAKzJ,OAAOyR,I5BiCQ,iB4BjCmBhI,KAAKqsB,gBAC5CrsB,KAAKzJ,OAAOyR,I5B8BW,oB4B9BmBhI,KAAKusB,mBAC/CvsB,KAAKzJ,OAAOyR,I5BiCS,kB4BjCmBhI,KAAKosB,iBAC7CpsB,KAAKzJ,OAAOyR,IAAI,kBAAmBhI,KAAK0xC,iBACxC1xC,KAAKzJ,OAAOyR,IAAI,oBAAqBhI,KAAK2xC,mBAC1C3xC,KAAKzJ,OAAOiB,KAAKwQ,IAAI,yBAA0BhI,KAAK4xC,sBACpD5xC,KAAKzJ,OAAOiB,KAAKwQ,IAAI,kBAAmBhI,KAAK6xC,iBAQjDX,EAAU30C,UAAU0K,QAAU,WAC1BjH,KAAK8H,uBAMTopC,EAAU30C,UAAUu1C,gBAAkB,WAClC,MAAO9xC,MAAKuxC,cAMhBL,EAAU30C,UAAUw1C,eAAiB,WACjC,MAAO/xC,MAAK/E,aAMhBi2C,EAAU30C,UAAUy1C,iBAAmB,WACnC,MAAOhyC,MAAK9E,eAMhBg2C,EAAU30C,UAAU01C,mBAAqB,WACrC,MAAOjyC,MAAKmxC,iBAEhBD,EAAU30C,UAAUm1C,gBAAkB,WAClC,GAGIx3C,GAHAuE,EAAQuB,KAAKzJ,OAAOiB,KAAKhB,qBAAsBC,eAC/CuJ,KAAKzJ,OAAOiB,KAAKhB,WAAWA,WAAWiF,KAAOuE,KAAKzJ,OAAOiB,KAAKhB,WAC/Dq8B,EAAa7yB,KAAKzJ,OAAOiB,KAAK+D,0BAA0B,EAE5D,KAAKhE,oBAAkByI,KAAKoxC,oBAAsBpxC,KAAKoxC,kBAAkBh6C,OACrE,IAAK,GAAIF,GAAI,EAAGA,EAAI8I,KAAKoxC,kBAAkBh6C,OAAQF,IAC/CgD,EAAQuE,EAAKP,IAAI,SAAUf,GAAK,MAAOA,GAAE01B,KAAgBr0B,QAAQwB,KAAKoxC,kBAAkBl6C,GAAG27B,IAC3Fp0B,EAAK5B,OAAO3C,EAAO,EAG3B8F,MAAKoxC,kBAAoBpxC,KAAKuxC,aAAevxC,KAAKsxC,kBAAoBtxC,KAAKqxC,oBAAsBrxC,KAAKzC,uBAE1G2zC,EAAU30C,UAAUyvB,UAAY,SAAU9oB,GACtC,GAAIgvC,GAAkBhvC,EAAK1D,KAAKkS,UAC5BygC,EAAanyC,KAAKzJ,OAAOuY,eAAiB9O,KAAKzJ,OAAO0I,kBAmB1D,IAlBIkzC,GAAcjvC,EAAKkvC,aAAal4C,MAAQi4C,IACxCD,GAAoCC,GAE1BnyC,KAAKzJ,OAAOiZ,4BAA8B,GACpDxP,KAAKzJ,OAAOkZ,6BAA+B,EAE5BzP,KAAKzJ,OAAOiZ,4BAA8B0iC,IACxClyC,KAAKzJ,OAAO6I,iBACzBY,KAAKzJ,OAAO+I,aAAaC,YAAad,KAAMyE,EAAK6F,QAASvJ,KAAM0D,EAAK1D,KACjEE,OAAQM,KAAKzJ,OAAOiB,KAAK66C,iBAAiBnvC,EAAK1D,KAAKkS,aAIvDwgC,IAAoBlyC,KAAKzJ,OAAO6I,iBACrCY,KAAKzJ,OAAO+I,aAAaC,YAAad,KAAMyE,EAAK6F,QAASvJ,KAAM0D,EAAK1D,KACjEE,OAAQM,KAAKzJ,OAAOiB,KAAK66C,iBAAiBnvC,EAAK1D,KAAKkS,aAGxD1R,KAAKwxC,OAA2C,UAAlCxxC,KAAKzJ,OAAOsF,aAAaC,MAAgE,WAA5CkE,KAAKzJ,OAAOsF,aAAaQ,eAA6B,CACjH,GAAIoC,GAAQuB,KAAKzJ,OAAOiB,KAAKhB,qBAAsBC,eAC/CuJ,KAAKzJ,OAAOiB,KAAKhB,WAAWA,WAAWiF,KAAOuE,KAAKzJ,OAAOiB,KAAKhB,WAC/D87C,MAAQ,GAERC,EAAevyC,KAAKzJ,OAAOiB,KAAK+D,0BAA0B,GAC1Di3C,MAAmB,GACnBC,MAAa,GAGb/5C,EAAesH,KAAK9E,eAAiB,EAAI8E,KAAKuxC,aAAavxC,KAAK/E,aAAuB,WAAI,KAC3F2B,MAAY,GACZ0B,MAAiB,GACjB3B,MAAkB,GAClB+1C,EAA6D,QAA5C1yC,KAAKzJ,OAAOsF,aAAaQ,iBAAoD,IAAxB2D,KAAK9E,cAAuB,EACtD,UAA5C8E,KAAKzJ,OAAOsF,aAAaQ,eAA6B2D,KAAK/E,YACrD+E,KAAK/E,YAAc,CAE7B,IADAy3C,EAAiB1yC,KAAK2yC,wBAAwBD,GAC1C1yC,KAAK4yC,iBAAkB,CAcvB,GAbI5yC,KAAKuxC,aAAan6C,SAClBwF,EAAYoD,KAAKuxC,aAAavxC,KAAK/E,aAAa+E,KAAKzJ,OAAOqG,WAC5DD,EAAkBqD,KAAKuxC,aAAavxC,KAAK/E,aAAa+E,KAAKzJ,OAAOoG,iBAC9DqD,KAAKuxC,aAAavxC,KAAK/E,aAAuB,aAC9CqD,EAAiB0B,KAAKuxC,aAAavxC,KAAK/E,aAAuB,WAAU,WAGjF+E,KAAKoxC,kBAAoBz3C,EAAYqG,KAAKoxC,mBAC1CpxC,KAAKsxC,kBAAoB33C,EAAYqG,KAAKsxC,mBAC1CtxC,KAAKsxC,kBAAkBj5C,KAAK2H,KAAKuxC,aAAavxC,KAAK/E,cACnDq3C,EAAQtyC,KAAKzJ,OAAOiB,KAAK+Z,gBAAgBmhC,GAAgBG,QACzDP,EAAMz5C,SAAWwc,SAAOrV,KAAKzJ,OAAOua,QAAQC,GAAK,UACjDqD,WAAS,sBAAwBk+B,EAAMz5C,SAAUy5C,EAAOtyC,KAAKzJ,SACxD2B,OAAOqE,UAAUC,eAAeC,KAAK61C,EAAO,SAAU,CAEvD,GADAtyC,KAAK8yC,YAAqC,IAAxB9yC,KAAK9E,cAAuB,EAAI8E,KAAK8yC,WACP,UAA5C9yC,KAAKzJ,OAAOsF,aAAaQ,gBAEzB,GADAi2C,EAAMS,cAAgBr6C,EAClBsH,KAAK9E,eAAiB,EAAG,CACzBo3C,EAAM35C,WAAayD,YAAW4D,KAAKuxC,aAAavxC,KAAK/E,cACrDq3C,EAAMh0C,eAAiBg0C,EAAM35C,WAAWE,eACjCy5C,GAAM35C,WAAWQ,mBACjBm5C,GAAM35C,WAAWqH,KAAKzJ,OAAOuG,cACpCw1C,EAAMn4C,MAAQm4C,EAAM35C,WAAWwB,MAAQ,EACvCm4C,EAAMp4C,MAAQ8F,KAAK8yC,UACnB,IAAIE,GAAmB/5C,EAAoB+G,KAAKuxC,aAAavxC,KAAK/E,cAAc7D,OAC5EmB,EAASU,EAAoB+G,KAAKuxC,aAAavxC,KAAK/E,cAAc+3C,EAAmB,EACzFz6C,GAAShB,oBAAkBgB,GAAUyH,KAAKuxC,aAAavxC,KAAK/E,aAAe1C,EAC3Ei6C,EAAmB/zC,EAAKP,IAAI,SAAUf,GAAK,MAAOA,GAAEo1C,KAAkB/zC,QAAQjG,EAAOg6C,IACjFvyC,KAAKhF,kBACLs3C,EAAMtyC,KAAKzJ,OAAOoG,iBAAmBC,GAEzCG,EAAgBw1C,EAAcD,EAAM35C,WAAY,MAAOqH,KAAKzJ,OAAQyJ,KAAKhF,gBAAiBs3C,QAG7F,KAAiD,UAA5CtyC,KAAKzJ,OAAOsF,aAAaQ,gBAA0E,UAA5C2D,KAAKzJ,OAAOsF,aAAaQ,kBAClF9E,oBAAkByI,KAAKuxC,aAAavxC,KAAK/E,cAAe,CAS5D,GARAq3C,EAAMn4C,MAAQ6F,KAAKuxC,aAAavxC,KAAK/E,aAAkB,MACnDq3C,EAAMn4C,OAAS6F,KAAK9E,eAAiB,IACrCo3C,EAAM35C,WAAaD,EACnB45C,EAAMh0C,eAAiBA,QAChBg0C,GAAM35C,WAAWQ,mBACjBm5C,GAAM35C,WAAWqH,KAAKzJ,OAAOuG,eAExCw1C,EAAMp4C,MAAoD,UAA5C8F,KAAKzJ,OAAOsF,aAAaQ,eAA6B2D,KAAK8yC,WAAa9yC,KAAK8yC,WAAa,EACxD,UAA5C9yC,KAAKzJ,OAAOsF,aAAaQ,gBAA8B2D,KAAK9E,eAAiB,EAAG,CAChF,GAAI83C,GAAmB/5C,EAAoB+G,KAAKuxC,aAAavxC,KAAK/E,cAAc7D,OAC5EmB,EAASU,EAAoB+G,KAAKuxC,aAAavxC,KAAK/E,cAAc+3C,EAAmB,EACzFz6C,GAAShB,oBAAkBgB,GAAUyH,KAAKuxC,aAAavxC,KAAK/E,aAAe1C,EAC3Ei6C,EAAmB/zC,EAAKP,IAAI,SAAUf,GAAK,MAAOA,GAAEo1C,KAAkB/zC,QAAQjG,EAAOg6C,IAEzF,GAAgD,UAA5CvyC,KAAKzJ,OAAOsF,aAAaQ,gBAA8B2D,KAAK9E,eAAiB,EAAG,CAC5E3C,EAASyH,KAAKuxC,aAAavxC,KAAK/E,YACpCu3C,GAAmB/zC,EAAKP,IAAI,SAAUf,GAAK,MAAOA,GAAEo1C,KAAkB/zC,QAAQjG,EAAOg6C,IAErFvyC,KAAKhF,kBACLs3C,EAAMtyC,KAAKzJ,OAAOoG,iBAAmBA,GAG7C21C,EAAMp4C,OAAyB,IAAjBo4C,EAAMp4C,MAAe,EAAIo4C,EAAMp4C,MAC7Co4C,EAAMp5C,iBAAkB,EACxBo5C,EAAMn5C,gBACN6G,KAAKuxC,aAAa10C,OAAOy1C,EAAMp4C,MAAO,EAAGo4C,GACzCtyC,KAAKzC,mBAAmBV,OAAOy1C,EAAMp4C,MAAO,EAAGo4C,GAE3CG,EADAD,GAIaF,EAAMp4C,MAEyB,UAA5C8F,KAAKzJ,OAAOsF,aAAaQ,iBACzBo2C,EAA6B,IAAhBH,EAAMp4C,MAAcu4C,EAAaA,EAAa,GAE/Dh0C,EAAK5B,OAAO41C,EAAY,EAAGH,GAC3BtyC,KAAKoxC,kBAAkB/4C,KAAKi6C,GAEhCtyC,KAAKzJ,OAAOiB,KAAK+Z,gBAAgBmhC,GAAgBj0C,KAAO6zC,EACxDtyC,KAAK4yC,kBAAmB,GAExB5yC,KAAKzJ,OAAOuY,eAAiB9O,KAAKzJ,OAAO0I,oBACoB,QAA1De,KAAKzJ,OAAOiB,KAAK+Z,gBAAgBmhC,GAAgBxyC,OACpDM,QAAMR,KAAKzC,mBAAmBm1C,GAAiB1yC,KAAKzJ,OAAOiB,KAAK+Z,gBAAgBmhC,GAAgBG,WAI5G3B,EAAU30C,UAAU8vB,eAAiB,SAAUlvB,GAE3C,GAAsC,SAAlC6C,KAAKzJ,OAAOsF,aAAaC,MAAmBkE,KAAKzJ,OAAOwF,WAAuB,aAG/E,MAFAoB,GAAEkJ,QAAS,OACXrG,KAAKzJ,OAAOwF,WAAuB,cAAI,IAGvCiE,KAAKzJ,OAAOwF,WAA+B,oBAAMxE,oBAAkByI,KAAKzJ,OAAOwF,WAAwB,cACtGiE,KAAKzJ,OAAOwF,WAAoC,0BAA6C,IAAvCiE,KAAKzJ,OAAOiB,KAAK2vB,mBAA2BnnB,KAAKzJ,OAAOwF,WAA4B,gBAAEy1C,OAO7IxxC,KAAK9E,cAAgB8E,KAAKzJ,OAAOiB,KAAK2vB,iBACtCnnB,KAAK/E,YAAc+E,KAAKzJ,OAAOiB,KAAK2vB,kBAAoB,EAAInnB,KAAKzJ,OAAOiB,KAAK2vB,iBAAmB,EAChGnnB,KAAKzJ,OAAOwF,WAAwB,YAAIiE,KAAKzJ,OAAOiB,KAAK2vB,kBAAoB,EAAInnB,KAAKzJ,OAAOiB,KAAK2vB,iBAAmB,EACrHnnB,KAAK5E,aAAe4E,KAAKzJ,OAAOuP,qBAAqB,KATrD9F,KAAK9E,cAAgB8E,KAAKzJ,OAAOwF,WAA0B,cAC3DiE,KAAK/E,YAAc+E,KAAKzJ,OAAOwF,WAAwB,YACvDiE,KAAK5E,aAAe4E,KAAKuxC,aAAan6C,OAAS4I,KAAKuxC,aAAavxC,KAAK9E,eAChE8E,KAAKzJ,OAAOiH,wBAAwBwC,KAAK9E,iBASvDg2C,EAAU30C,UAAU4vB,SAAW,SAAUhvB,GACrC,GAAgD,WAA5C6C,KAAKzJ,OAAOsF,aAAaQ,eAA6B,CACtD2D,KAAKwxC,OAAQ,EACbxxC,KAAK4yC,kBAAmB,CACxB,IAAI9N,GAAc,CASlB,IARK9kC,KAAKuxC,aAAan6C,SACnB4I,KAAKoxC,qBACLpxC,KAAKuxC,aAAe53C,EAAYqG,KAAKzJ,OAAOiB,KAAKgG,yBACjDwC,KAAKzC,mBAAqB5D,EAAYqG,KAAKzJ,OAAOiB,KAAKgG,0BAEvDwC,KAAKzJ,OAAOwF,WAA+B,qBAAMxE,oBAAkByI,KAAKzJ,OAAOwF,WAAwB,cACvG0J,YAAUzF,KAAKzJ,OAAOiB,KAAKk9B,cAAc,IAAK,kBAEF,QAA5C10B,KAAKzJ,OAAOsF,aAAaQ,eAA0B,CACnD,GAAItE,GAAUiI,KAAKzJ,OAAOiB,KAAKgG,uBACO,WAAlCwC,KAAKzJ,OAAOsF,aAAaC,OAAqBkE,KAAKzJ,OAAOyF,kBAAkBgE,KAAKoS,cAAchb,OAAS,GACrG4I,KAAKzJ,OAAOyF,kBAAkBgE,KAAK4c,gBAAgBxlB,UACtDW,EAAUiI,KAAKuxC,cAEnBvxC,KAAKizC,iBAAiBl7C,GACtBiI,KAAKzJ,OAAO0Z,O5BhNN,e4BiNNjQ,KAAKmxC,gBAAkB,EAE3BnxC,KAAKkzC,gBAEL,IAAIC,GAAc90C,WAAS,cAAe2B,KAAKzJ,OAAOiB,MAClD47C,EAAQpzC,KAAKzJ,OAAOqf,iBAYxB,IAXI5V,KAAKzJ,OAAOyF,kBAAkBgE,KAAK4c,gBAAgBxlB,QAAsD,UAA5C4I,KAAKzJ,OAAOsF,aAAaQ,gBACtFyoC,EAAc3nC,EAAEwB,IAAIoI,SACpBosC,EAAYhgB,aAAakgB,OAAOA,OAASrzC,KAAKqzC,QAG9CvO,EAAcsO,EAAMr9B,uBAAuB,cAAc,GAAGhP,SAKhEosC,EAAYhgB,aAAakgB,OAAOn2B,SAAW4nB,EAAaqO,EAAYhgB,aAAakgB,OAAOn2B,QAAQ,IAC5Fld,KAAKzJ,OAAOwF,WAA+B,qBAAMxE,oBAAkByI,KAAKzJ,OAAOwF,WAAwB,eAAOiE,KAAKzJ,OAAOwF,WAAoC,wBAAG,CACjK,GAAIu3C,GAAoBtzC,KAAKzJ,OAAOyF,kBAAgC,aAChE9B,EAAQiW,SAASnQ,KAAKzJ,OAAOqf,kBAAkBG,uBAAuB,iBAAiBu9B,EAAkBl8C,OAAS,GAAGmS,aAAa,iBAAkB,GACxJvJ,MAAKuxC,aAAa10C,OAAO3C,EAAO,EAAGo5C,EAAkBA,EAAkBl8C,OAAS,OAI5F85C,EAAU30C,UAAUgwB,kBAAoB,SAAUrpB,GACzClD,KAAKuxC,aAAan6C,SACnB4I,KAAKuxC,aAAe53C,EAAYqG,KAAKzJ,OAAOiB,KAAKgG,yBACjDwC,KAAKzC,mBAAqB5D,EAAYqG,KAAKzJ,OAAOiB,KAAKgG,yBAE3D,IAAI21C,GAAc90C,WAAS,cAAe2B,KAAKzJ,OAAOiB,KACtDwI,MAAKqzC,OAASF,EAAYhgB,aAAakgB,OAAOA,MAC9C,IAGI50C,GACA80C,EACA5yC,EALAhC,KACA5G,KACAy7C,EAAaxzC,KAAKzJ,OAAOiB,KAAK+D,0BAA0B,EAIvDhE,qBAAkB2L,EAAKvE,OAA6D,IAArDqB,KAAKzJ,OAAOmkC,kBAAkBl8B,QAAQ0E,EAAKvE,MAO3E40C,EAASt6C,EADTwF,EAAOuB,KAAKzJ,OAAOiB,KAAKsO,qBAAqB9F,KAAKzJ,OAAOiB,KAAKsO,qBAAqB1O,OAAS,IAE5FuJ,EAAMX,KAAKzJ,OAAOmkC,kBAAkB,GAAGnxB,aAAa,cANpDgqC,EAASt6C,EADTwF,EAAOyE,EAAK6F,SAEZpI,EAAMuC,EAAKvE,IAAI4K,aAAa,YAOhC,IAAIkqC,GAAiBtjC,SAASnQ,KAAKzJ,OAAOiB,KAAKk8C,mBAAmB/yC,GAAK4I,aAAa,iBAAkB,GACtG,IAAIgqC,EAAOn8C,OAGP,IAAK,GAFDu8C,GAAaF,EAAiBF,EAAOn8C,OAEhCF,EADau8C,EAAiB,EACTv8C,GAAKy8C,EAAYz8C,IAC3CyH,EAAItG,KAAK2H,KAAKzJ,OAAOiB,KAAKk9B,cAAcx9B,KACpC8I,KAAKzJ,OAAOyI,YAAcgB,KAAKzJ,OAAOuY,eAAiB9O,KAAKzJ,OAAO0I,qBACnEN,EAAItG,KAAK2H,KAAKzJ,OAAOiB,KAAKkhC,iBAAiBxhC,GAIvD,KAAKK,oBAAkBkH,EAAK9F,YAAa,CACrC,GAAIA,GAAaC,EAAcoH,KAAKzJ,OAAQkI,EAAK9F,WAAWE,SAC5D,KAAKtB,oBAAkBoB,IAAeA,EAAWO,gBAAiB,CAC9D,GAAImtC,GAAa1tC,EAAWQ,aAAaqF,QAAQC,EACjD9F,GAAWQ,aAAa0D,OAAOwpC,EAAY,GAE/CrmC,KAAKqxC,oBAAsB13C,EAAYqG,KAAKqxC,qBAC5CrxC,KAAKqxC,oBAAoBh5C,KAAKoG,GAElC80C,EAAOl7C,KAAKoG,GACZ1G,EAAUw7C,CACV,KAASr8C,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAAK,CACrC,GAAIu7C,GAAazyC,KAAKuxC,aAAarzC,IAAI,SAAUf,GAAK,MAAOA,GAAEq2C,KAAgBh1C,QAAQzG,EAAQb,GAAGs8C,KAC9E,IAAhBf,GACAzyC,KAAKuxC,aAAa10C,OAAO41C,EAAY,GAG7C,IAASv7C,EAAI,EAAGA,EAAIyH,EAAIvH,OAAQF,IACvBK,oBAAkBoH,EAAIzH,KACvB8I,KAAKzJ,OAAOiB,KAAKwwB,gBAAgBuF,gBAAgBl1B,KAAKsG,EAAIzH,KAItEg6C,EAAU30C,UAAU22C,eAAiB,WAEjC,IAAK,GADD/tC,GAAOnF,KAAKzJ,OAAOiB,KAAKk9B,cACnBx9B,EAAI,EAAGA,EAAIiO,EAAK/N,OAAQF,IAC7BiO,EAAKjO,GAAGmT,aAAa,gBAAiBnT,EAAE+N,WAE5C,IAAIgxB,GAAUj2B,KAAKzJ,OAAOiZ,4BAA8B,GACpDxP,KAAKzJ,OAAOkZ,6BAA+B,CAC/C,IAAIzP,KAAKzJ,OAAOyI,YAAcgB,KAAKzJ,OAAO0I,oBAAsBe,KAAKzJ,OAAOuY,eAAiBmnB,EAGzF,IAAK,GAFD2d,GAAQ5zC,KAAKzJ,OAAOiB,KAAKiV,qBACzB+rB,EAAkBx4B,KAAKzJ,OAAOiB,KAAKqjC,yBAC9B3jC,EAAI,EAAGA,EAAI08C,EAAMx8C,OAAQF,IAC9B08C,EAAM18C,GAAGmT,aAAa,gBAAiBnT,EAAE+N,YACrCgxB,GACAuC,EAAgBthC,GAAGmT,aAAa,gBAAiBnT,EAAE+N,aAKnEisC,EAAU30C,UAAU02C,iBAAmB,SAAUl7C,GAI7C,IAAK,GAHD86B,GAAa7yB,KAAKzJ,OAAOiB,KAAK+D,0BAA0B,GAExD5C,EAAyD,UAA5CqH,KAAKzJ,OAAOsF,aAAaQ,eAA6B,gBAAkB,aAChFnF,EAAI,EAAGA,EAAI8I,KAAKzJ,OAAOyF,kBAA8B,aAAE5E,OAAQF,IAC/DK,oBAAkByI,KAAKzJ,OAAOyF,kBAA8B,aAAE9E,GAAGyB,KAC9DqH,KAAKzJ,OAAOyF,kBAA8B,aAAE9E,GAAGyB,GAAYk6B,KAAgB96B,EAAQiI,KAAK/E,aAAa43B,KACrG7yB,KAAKmxC,gBAAkBnxC,KAAKmxC,gBAAkB,IAK9DD,EAAU30C,UAAU6vB,gBAAkB,SAAUjvB,GAC5C,GAEIwf,GAAiBxf,EAAE9B,aAA0B,cACjD,IAAI8B,EAAE9B,aAA0B,eAAEjE,OAE9B,IAASF,EAAI,EAAGA,EAAIylB,EAAevlB,OAAQF,IACvC2D,GAAaZ,MAAO0iB,EAAezlB,GAAIoE,OAAQ,QAAU0E,KAAKzJ,OAAQyJ,KAAKhF,gBAAiBgF,KAAK/E,YAAa+E,KAAK9E,kBAFtG,GAKrB,IAAIiC,EAAE9B,aAA0B,eAAEjE,OAG9B,IAAK,GADDmB,GADiB4E,EAAE9B,aAA0B,eAExCnE,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAAK,CACpC8I,KAAK6zC,eAAet7C,EAAOrB,GAAG2B,SAE9B,KAAK,GADD06C,GAASt6C,EAAoBV,EAAOrB,IAC/BuK,EAAI,EAAGA,EAAI8xC,EAAOn8C,OAAQqK,IAC/BzB,KAAK6zC,eAAeN,EAAO9xC,GAAG5I,SAElCsE,GAAE9B,aAA0B,eAAI8B,EAAE9B,aAA0B,eAAE9B,OAAOg6C,GAG7EvzC,KAAKwxC,OAAQ,GAEjBN,EAAU30C,UAAUs3C,eAAiB,SAAU55C,SAEpC+F,MAAKzJ,OAAe,yBAAE0D,SAEtB+F,MAAKzJ,OAAS,mBAAE0D,IAE3Bi3C,EAAU30C,UAAUo1C,kBAAoB,WACpC,GACIz3C,GAGAqD,EAAqByC,KAAKzJ,OAAOiB,KAAKgG,wBAEtCiB,EAAQuB,KAAKzJ,OAAOiB,KAAKhB,qBAAsBC,eAC/CuJ,KAAKzJ,OAAOiB,KAAKhB,WAAWA,WAAWiF,KAAOuE,KAAKzJ,OAAOiB,KAAKhB,WAC/Dq8B,EAAa7yB,KAAKzJ,OAAOiB,KAAK+D,0BAA0B,EAC5D,KAAKhE,oBAAkByI,KAAKoxC,mBACxB,IAASl6C,EAAI,EAAGA,EAAI8I,KAAKoxC,kBAAkBh6C,OAAQF,IAK/C,IAHe,KADfgD,EAAQuE,EAAKP,IAAI,SAAUf,GAAK,MAAOA,GAAE01B,KAAgBr0B,QAAQwB,KAAKoxC,kBAAkBl6C,GAAG27B,MAEvFp0B,EAAK5B,OAAO3C,EAAO,GAEyB,UAA5C8F,KAAKzJ,OAAOsF,aAAaQ,iBACzBnC,EAAQqD,EAAmBW,IAAI,SAAUf,GAAK,MAAOA,GAAE01B,KAClDr0B,QAAQwB,KAAKoxC,kBAAkBl6C,GAAa,WAAI8I,KAAKoxC,kBAAkBl6C,GAAa,WAAE27B,GACrF7yB,KAAKoxC,kBAAkBl6C,GAAG27B,KAC3Bt7B,oBAAkBgG,EAAmBrD,KAEtC,IAAK,GADD0W,GAAWrT,EAAmBrD,GAAmB,aAC5CH,EAAI,EAAG6W,GAAY7W,EAAI6W,EAASxZ,OAAQ2C,IACzC6W,EAAS7W,GAAG84B,KAAgB7yB,KAAKoxC,kBAAkBl6C,GAAG27B,IACtDt1B,EAAmBrD,GAAmB,aAAE2C,OAAO9C,EAAG,EAO1E,KAAKxC,oBAAkByI,KAAKzJ,OAAoB,eAAI,CAChD,GAAIoI,GAAMqB,KAAKzJ,OAAoB,cAAE8R,QAAQ,KAC7CrI,MAAKzJ,OAAOg/B,YAAY52B,GACxBqB,KAAKzJ,OAAoB,cAAI,KAEjC,IAAKgB,oBAAkByI,KAAKqxC,qBACxB,IAAK,GAAIn6C,GAAI,EAAGA,EAAI8I,KAAKqxC,oBAAoBj6C,OAAQF,IACjD,IAAKK,oBAAkByI,KAAKqxC,oBAAoBn6C,GAAa,YAAI,CAC7DgD,EAAQqD,EAAmBW,IAAI,SAAUf,GAAK,MAAOA,GAAE01B,KAClDr0B,QAAQwB,KAAKqxC,oBAAoBn6C,GAAa,WAAE27B,GACrD,IAAIihB,GAA4D,IAA5C9zC,KAAKqxC,oBAAoBn6C,GAAa,MAAU8I,KAAKqxC,oBAAoBn6C,GAAa,MACtG8I,KAAKqxC,oBAAoBn6C,GAAa,MAAI,CACzCK,qBAAkBgG,EAAmBrD,KACtCqD,EAAmBrD,GAAmB,aAAE2C,OAAOi3C,EAAe,EAAG9zC,KAAKqxC,oBAAoBn6C,IAK1G8I,KAAKoxC,kBAAoBpxC,KAAKuxC,aAAevxC,KAAKsxC,kBAAoBtxC,KAAKzC,sBAC3EyC,KAAKuxC,aAAe53C,EAAYqG,KAAKzJ,OAAOiB,KAAKgG,yBACjDwC,KAAK8yC,WAAa,EAClB9yC,KAAKzC,mBAAqB5D,EAAYqG,KAAKzJ,OAAOiB,KAAKgG,yBACvDwC,KAAKqxC,uBACLrxC,KAAKzJ,OAAOiB,KAAK8H,aAAa+tB,WAElC6jB,EAAU30C,UAAUk1C,UAAY,SAAUvuC,GACtC,GAAsC,UAAlClD,KAAKzJ,OAAOsF,aAAaC,KAAkB,CAC3C,GAAI5E,OAAI,GACJmE,EAAenD,OAAOsE,eAAeC,KAAKyG,EAAM,kBAAoBA,EAAK6wC,eAAiB/zC,KAAKzJ,OAAOyF,kBAKtGyC,EAAQuB,KAAKzJ,OAAOiB,KAAKhB,qBAAsBC,eAC/CuJ,KAAKzJ,OAAOiB,KAAKhB,WAAWA,WAAWiF,KAAOuE,KAAKzJ,OAAOiB,KAAKhB,WAC/D+G,EAAqByC,KAAKzJ,OAAOiB,KAAKgG,wBACtCw2C,EAAeh0C,KAAKzJ,OAAOiB,KAAK+D,0BAA0B,GAE1D04C,EAAa54C,EAAyB,aAEtCH,MAAgB,GAChBD,MAAc,GAEdG,MAAe,EAKnB,IAHI64C,EAAW78C,OAAS,GAAiD,WAA5C4I,KAAKzJ,OAAOsF,aAAaQ,gBAClD43C,EAAW9O,UAEiC,WAA5CnlC,KAAKzJ,OAAOsF,aAAaQ,iBAAgCnE,OAAOsE,eAAeC,KAAKyG,EAAM,kBAAmB,CAE7G,GADAzE,EAAK5B,OAAO4B,EAAKrH,OAAS68C,EAAW78C,OAAQ68C,EAAW78C,QACpD4I,KAAKzJ,OAAOwF,WAA+B,oBAAKk4C,EAAW78C,SAAWG,oBAAkByI,KAAKzJ,OAAOwF,WAAwB,eAAOiE,KAAKzJ,OAAOwF,WAAoC,wBAAG,CACtLk4C,EAAW9O,SACX,KAAK,GAAI3L,GAAM,EAAGA,EAAMya,EAAW78C,OAAQoiC,IAAO,CAC9C,GAAIx7B,GAAUmS,SAASnQ,KAAKzJ,OAAOqf,kBAAkBG,uBAAuB,iBAAiByjB,GAAKjwB,aAAa,iBAAkB,GACjI9K,GAAK5B,OAAOmB,EAAS,EAAGi2C,EAAWza,KAG3C,GAAKx5B,KAAKzJ,OAAO2X,aAAezP,EAAKrH,SAAWmG,EAAmBnG,OAK9D,CACD,GAAIq/B,GAAe98B,EAAY8E,EAC/B,IAAIg4B,EAAar/B,OAAQ,CACrB,GAAIkgC,GAAab,EAAav4B,IAAI,SAAUf,GAAK,MAAOA,GAAE62C,KACrDx1C,QAAQjB,EAAmB,GAAGy2C,IAC/BE,EAAW5c,EAAat3B,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,QAC1DzvC,GAAqBk5B,EAAa55B,OAAOy6B,EAAY4c,QAVrD32C,GAAmBnG,OAAS68C,EAAW78C,QACvCmG,EAAmBV,OAAOU,EAAmBnG,OAAS68C,EAAW78C,OAAQ68C,EAAW78C,QAmBhG,IANsC,IAAlC4I,KAAKsxC,kBAAkBl6C,QACvB4I,KAAKsxC,kBAAkBj5C,KAAK2H,KAAKzJ,OAAO2G,SAASgG,EAAKhJ,QAEtD8F,KAAKzJ,OAAOwF,WAAoC,yBAChDk4C,EAAW9O,UAEVjuC,EAAI,EAAGA,EAAI+8C,EAAW78C,OAAQF,IAAK,CACpC,GAAIkD,GAAWgC,YAAW63C,EAAW/8C,GAWrC,UAVOkD,GAASzB,iBACTyB,GAASvB,eACTuB,GAASF,YACTE,GAASD,YACTC,GAASlB,sBACTkB,GAASjB,mBACTiB,GAASkE,eACX/G,oBAAkB6C,EAAS24C,sBACrB34C,GAAS24C,cAEhBkB,EAAW78C,OAAS,GAAK4I,KAAKzJ,OAAOwF,WAAoC,wBAAG,CAC5E,GAAIo4C,GAAcn0C,KAAKzJ,OAAOsF,aAAaQ,cAC3C2D,MAAKzJ,OAAOsF,aAAaQ,eAAiB2D,KAAKzJ,OAAOwF,WAAmC,uBACzFiE,KAAKzJ,OAAOwF,WAAmC,uBAAIo4C,EAuBvD,GArBAF,EAAW/8C,GAAGkD,SAAWA,EACzBgB,EAAe4E,KAAKsxC,kBAAkBp6C,GAClCK,oBAAkB6D,KAClBA,EAAe4E,KAAKsxC,kBAAkBp6C,EAAI,IAE1C8I,KAAKhF,kBACAzD,oBAAkB08C,EAAW/8C,GAAGyB,aACjCoE,EAAgBi3C,EAAcC,EAAW/8C,GAAGyB,WAAY,MAAOqH,KAAKzJ,OAAQyJ,KAAKhF,gBAAiBi5C,EAAW/8C,KAGhHK,oBAAkB6D,KACnBH,EAAcG,EAAalB,OAEiB,QAA5C8F,KAAKzJ,OAAOsF,aAAaQ,gBAAwE,WAA5C2D,KAAKzJ,OAAOsF,aAAaQ,gBAC1E9E,oBAAkB08C,EAAW/8C,GAAGyB,cAAuC,IAAxBqH,KAAK9E,gBACpDA,GAAiB,EACjBE,EAAe,MAGvBP,GAAaZ,MAAOg6C,EAAW/8C,GAAIoE,OAAQ,OAAS0E,KAAKzJ,OAAQyJ,KAAKhF,gBAAiBC,EAAaC,MAxEvF,GAwEkHE,GAC/HF,EAAgB,KACgC,UAA5C8E,KAAKzJ,OAAOsF,aAAaQ,iBAA+B9E,oBAAkB08C,EAAW/8C,GAAa,cACjGK,oBAAkByI,KAAKzJ,OAAOwF,WAAwB,cAAMiE,KAAKhF,iBAIlE,IAAK,GAHDo5C,GAAa72C,EAAmBW,IAAI,SAAUf,GAAK,MAAOA,GAAE62C,KAC3Dx1C,QAAQy1C,EAAW/8C,GAAa,WAAE88C,IACnCpjC,EAAWrT,EAAmB62C,GAAwB,aACjDr6C,EAAI,EAAGA,EAAI6W,EAASxZ,OAAQ2C,IAC7B6W,EAAS7W,GAAGi6C,KAAkBC,EAAW/8C,GAAG88C,IAC5Cz2C,EAAmB62C,GAAwB,aAAEv3C,OAAO9C,EAAG,GAKvE,GAAIsB,EAA2B,eAAEjE,OAC7B,IAAKF,EAAI,EAAGA,EAAImE,EAA2B,eAAEjE,OAAQF,IACjD2D,GAAaZ,MAAOoB,EAA2B,eAAEnE,GAAIoE,OAAQ,UAAY0E,KAAKzJ,OAAQyJ,KAAKhF,gBAAiBC,EAAaC,MAxFhH,GAwF2IE,EAG5J4E,MAAKzJ,OAAO0G,aACZ,KAAK,GAAI0pC,GAAM,EAAGA,EAAMloC,EAAKrH,OAAQuvC,IACjCloC,EAAKkoC,GAAU,MAAIA,EACnBvyB,WAAS,sBAAwB3V,EAAKkoC,GAAa,SAAI,SAAUA,EAAK3mC,KAAKzJ,QACtEkI,EAAKkoC,GAAU,OAChB3mC,KAAKzJ,OAAO0G,WAAW5E,KAAKoG,EAAKkoC,IAI7C3mC,KAAKsxC,kBAAoBtxC,KAAKoxC,kBAAoBpxC,KAAKuxC,aAAevxC,KAAKqxC,oBAAsBrxC,KAAKzC,sBAClGyC,KAAKzJ,OAAOwF,WAAoC,0BAChDiE,KAAKzJ,OAAOwF,WAAoC,yBAAI,IAG5Dm1C,EAAU30C,UAAUo2C,wBAA0B,SAAUz4C,GACpD,GAAIiL,GAAOnF,KAAKzJ,OAAOiB,KAAKk9B,aAyB5B,QAxBiD,UAA5C10B,KAAKzJ,OAAOsF,aAAaQ,gBAA0E,UAA5C2D,KAAKzJ,OAAOsF,aAAaQ,iBAC9E2D,KAAK9E,eAAiB,KACpB3D,oBAAkByI,KAAKuxC,aAAavxC,KAAK/E,eAAiB+E,KAAKuxC,aAAavxC,KAAK/E,aAAajC,WAC3FgH,KAAKzJ,OAAOyF,kBAAkBgE,KAAKoS,cAAchb,OAAS,GACvD4I,KAAKzJ,OAAOyF,kBAAkBgE,KAAK4c,gBAAgBxlB,QACtD8C,GAASjB,EAAoB+G,KAAKuxC,aAAavxC,KAAK/E,cAAc7D,OAClB,UAA5C4I,KAAKzJ,OAAOsF,aAAaQ,iBAEzBnC,GADsB8F,KAAKiyC,uBAK/B/3C,GAASjB,EAAoB+G,KAAKuxC,aAAavxC,KAAK/E,cAAc7D,QAGtE8C,GAASiL,EAAK/N,SACd8C,EAAQiL,EAAK/N,OAAS,GAE1B4I,KAAKizC,iBAAiBjzC,KAAKzJ,OAAOiB,KAAKgG,yBACnCwC,KAAKmxC,kBACLj3C,GAAS8F,KAAKmxC,iBAElBnxC,KAAKmxC,gBAAkB,GAEpBj3C,GAEXg3C,EAAU30C,UAAUq1C,qBAAuB,SAAUz0C,GACjDA,EAAE+F,KAAKmD,QAAS,CAChB,IAAIwsC,GAAU7yC,KAAKzJ,OAAOiB,KAAKwE,kBAC3BoW,IAEAla,QAAOC,KAAK06C,GAASz7C,SACrBgb,EAAeygC,EAAQzgC,aAE3B,KAAK,GAAIlb,GAAI,EAAGA,EAAIkb,EAAahb,OAAQF,IACrCiG,EAAEgI,KAAKtI,OAAOuV,EAAalb,GAAQ,MAAG,IAG9Cg6C,EAAU30C,UAAUs1C,cAAgB,SAAU3uC,GAGtClD,KAAKzJ,OAAOmkC,kBAAkBtjC,OAC9B8L,EAAU,MAAIlD,KAAKzJ,OAAOmkC,kBAAkB,GAAW,SAGvDx3B,EAAU,MAAIlD,KAAK8yC,YAGpB5B,KCvnBPmD,GAAsB,WAMtB,QAASA,GAAK99C,GACVyJ,KAAKoS,aAAe,eACpBpS,KAAK4c,eAAiB,iBACtB5c,KAAKs0C,iBAAmB,KACxBt0C,KAAKu0C,oBAAqB,EAC1Bv0C,KAAKw0C,yBAA0B,EAC/B5xC,OAAKC,OAAO4xC,QACZz0C,KAAKzJ,OAASA,EACdyJ,KAAKhF,iBAAmBzD,oBAAkBhB,EAAOoG,iBACjDqD,KAAK00C,uBAAyB,KAC9B10C,KAAK20C,sBACL30C,KAAK40C,gBAAkB,GAAI1D,IAAUlxC,KAAKzJ,QAC1CyJ,KAAKwH,mBAghCT,MAxgCA6sC,GAAK93C,UAAUwG,cAAgB,WAC3B,MAAO,QAMXsxC,EAAK93C,UAAUiL,iBAAmB,WAC9BxH,KAAKzJ,OAAOkR,G7BeI,a6BfkBzH,KAAK60C,WAAY70C,MACnDA,KAAKzJ,OAAOkR,G7BgBG,Y6BhBkBzH,KAAKurB,UAAWvrB,MACjDA,KAAKzJ,OAAOkR,G7BiBE,W6BjBkBzH,KAAK80C,SAAU90C,MAC/CA,KAAKzJ,OAAOkR,G7BkBW,oB6BlBkBzH,KAAK4oB,kBAAmB5oB,MACjEA,KAAKzJ,OAAOkR,G7BmBE,W6BnBkBzH,KAAK0rB,SAAU1rB,MAC/CA,KAAKzJ,OAAOkR,G7B0BK,c6B1BkBzH,KAAKwsB,YAAaxsB,MACrDA,KAAKzJ,OAAOiB,KAAKiQ,G7BqCD,c6BrCuBzH,KAAK+0C,WAAY/0C,MACxDA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,iBAAkBzH,KAAKg1C,YAAah1C,MACxDA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,gBAAiBzH,KAAKi1C,aAAcj1C,MACxDA,KAAKzJ,OAAOkR,G7BkBE,W6BlBkBzH,KAAKisB,SAAUjsB,MAC/CA,KAAKzJ,OAAOkR,GAAG,cAAezH,KAAKk1C,iBAAkBl1C,MACrDA,KAAKzJ,OAAOkR,GAAG,iBAAkBzH,KAAKk1C,iBAAkBl1C,MACxDA,KAAKzJ,OAAOiB,KAAKiQ,G7BmCF,a6BnCuBzH,KAAK4oB,kBAAmB5oB,MAC9DA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,WAAYzH,KAAKm1C,aAAcn1C,MACnDA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,cAAezH,KAAKo1C,eAAgBp1C,MACxDA,KAAKzJ,OAAOkR,GAAG,0BAA2BzH,KAAKq1C,wBAAyBr1C,MAExEA,KAAKzJ,OAAOiB,KAAKiQ,G7B0CI,Y6B1CuBzH,KAAKs1C,gBAAiBt1C,MAClEA,KAAKzJ,OAAOiB,KAAKiQ,G7B2CM,sB6B3CuBzH,KAAKu1C,kBAAmBv1C,MACtEA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,mBAAoBzH,KAAKw1C,eAAgBx1C,MAC7DA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,mBAAoBzH,KAAKy1C,eAAgBz1C,OAEjEq0C,EAAK93C,UAAU44C,aAAe,SAAUh4C,GACpC6C,KAAK01C,kBAAoBv4C,EAAEoE,QAE/B8yC,EAAK93C,UAAUk5C,eAAiB,SAAUE,GACtCA,EAAQt5C,eAAiB2D,KAAKzJ,OAAOsF,aAAaQ,eAClDs5C,EAAQ16C,YAAc+E,KAAK/E,YAC3B06C,EAAQC,cAAgB51C,KAAKs0C,kBAEjCD,EAAK93C,UAAU+4C,gBAAkB,SAAUpyC,GACvClD,KAAKzJ,OAAO+P,Q7BhEK,c6BgEuBpD,IAE5CmxC,EAAK93C,UAAUg5C,kBAAoB,SAAUryC,GACH,SAAlClD,KAAKzJ,OAAOsF,aAAaC,MACzBkE,KAAKzJ,OAAO+P,Q7BhEI,iB6BgE2BpD,IAOnDmxC,EAAK93C,UAAUuL,oBAAsB,WAC7B9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,I7B/BI,a6B+BmBhI,KAAK60C,YACxC70C,KAAKzJ,OAAOyR,I7B9BG,Y6B8BmBhI,KAAKurB,WACvCvrB,KAAKzJ,OAAOyR,I7B7BE,W6B6BmBhI,KAAK80C,UACtC90C,KAAKzJ,OAAOyR,I7B5BW,oB6B4BmBhI,KAAK4oB,mBAC/C5oB,KAAKzJ,OAAOyR,I7BnBK,c6BmBmBhI,KAAKwsB,aACzCxsB,KAAKzJ,OAAOiB,KAAKwQ,I7BRD,c6BQwBhI,KAAK+0C,YAC7C/0C,KAAKzJ,OAAOiB,KAAKwQ,IAAI,iBAAkBhI,KAAKg1C,aAC5Ch1C,KAAKzJ,OAAOiB,KAAKwQ,IAAI,gBAAiBhI,KAAKi1C,cAC3Cj1C,KAAKzJ,OAAOyR,I7B3BE,W6B2BmBhI,KAAKisB,UACtCjsB,KAAKzJ,OAAOyR,IAAI,cAAehI,KAAKk1C,kBACpCl1C,KAAKzJ,OAAOyR,IAAI,iBAAkBhI,KAAKk1C,kBACvCl1C,KAAKzJ,OAAOiB,KAAKwQ,IAAI,cAAehI,KAAKo1C,gBACzCp1C,KAAKzJ,OAAOiB,KAAKwQ,I7BXF,a6BWwBhI,KAAK4oB,mBAC5C5oB,KAAKzJ,OAAOyR,IAAI,0BAA2BhI,KAAKq1C,yBAChDr1C,KAAKzJ,OAAOiB,KAAKwQ,I7BDI,Y6BCwBhI,KAAKs1C,iBAClDt1C,KAAKzJ,OAAOiB,KAAKwQ,I7BAM,sB6BAwBhI,KAAKu1C,mBACpDv1C,KAAKzJ,OAAOiB,KAAKwQ,IAAI,WAAYhI,KAAKm1C,cACtCn1C,KAAKzJ,OAAOiB,KAAKwQ,IAAI,mBAAoBhI,KAAKw1C,gBAC9Cx1C,KAAKzJ,OAAOiB,KAAKwQ,IAAI,mBAAoBhI,KAAKy1C,kBASlDpB,EAAK93C,UAAU0K,QAAU,WACrBjH,KAAK8H,uBAOTusC,EAAK93C,UAAUs5C,oBAAsB,SAAU9gB,GAC3C/0B,KAAKzJ,OAAOiB,KAAKuE,WAAW85C,oBAAoB9gB,IAEpDsf,EAAK93C,UAAU24C,iBAAmB,SAAUhyC,GACxC,GAAI4yC,GAAY19C,YAAU,aAAc8K,GACpC4f,EAAY1qB,YAAU,OAAQ09C,GAC9BC,EAAU/1C,KAAKzJ,OACfG,EAAUq/C,EAAQv/C,WAAWE,OACjC,KAAKJ,EAAay/C,IAAYr/C,YAAmB6rB,uBAClB,SAA1BuzB,EAAUl2C,aAA+C,QAArBk2C,EAAUx6C,SACN,UAAxCy6C,EAAQl6C,aAAaQ,gBAAsE,UAAxC05C,EAAQl6C,aAAaQ,gBAC1B,UAAxC05C,EAAQl6C,aAAaQ,gBAC5B,GAAkB,gBAAdymB,EAA6B,CAC7B,GAAI/b,GAAWxP,oBAAkBu+C,EAAUn3C,OAASzG,OAAOC,KAAK29C,EAAUn3C,KAAKvH,OAAS4I,KAAK9E,cACzF46C,EAAUn3C,IAAIoI,SAAW,EACzBivC,EAAYz+C,oBAAkBwP,KAA2B,IAAdA,GACwC,EAAnFgvC,EAAQv4C,wBAAwBuJ,GAAUgvC,EAAQx6C,0BAA0B,GAChFw6C,GAAQv+C,KAAK2b,MAAMM,UAAU,gBAAiBuiC,OAE7C,IAAkB,mBAAdlzB,EAEL,IAAK,GADDmzB,GAAeF,EAAQv+C,KAAK2b,MAAMG,OAAOlc,OACpCF,EAAI,EAAGA,EAAI++C,EAAc/+C,IACW,kBAArC6+C,EAAQv+C,KAAK2b,MAAMG,OAAOpc,GAAGQ,KAC7Bq+C,EAAQv+C,KAAK2b,MAAMG,OAAOzW,OAAO3F,EAK7C8I,MAAKzJ,OAAOkhB,yBAAyC,mBAAdqL,GACvC9iB,KAAKk2C,kBAAkBJ,GAEW,UAAlC91C,KAAKzJ,OAAOsF,aAAaC,MAA8C,WAA1Bg6C,EAAUl2C,aACvDI,KAAKzJ,OAAO0Z,OAAO,uBAG3BokC,EAAK93C,UAAU25C,kBAAoB,SAAUhzC,GACzC,GAA0B,SAArBA,EAAKtD,aAA0C,QAAhBsD,EAAK5H,QAA0C,WAArB4H,EAAKtD,YAA0B,CACzF,GAAgD,QAA5CI,KAAKzJ,OAAOsF,aAAaQ,iBAAoD,IAAxB2D,KAAK9E,eACjC,SAArBgI,EAAKtD,aAA0C,QAAhBsD,EAAK5H,OAAmB,CAC3D,GAAI66C,GAAan2C,KAAKzJ,OAAOiB,KAAK+Z,gBAC9B6kC,EAAeD,EAAWt5C,OAAO,EAAG,GAAG,GACvCw5C,EAAoBr2C,KAAK/E,YACzBkd,EAAcnY,KAAKzJ,OAAOiH,uBACkB,WAA5CwC,KAAKzJ,OAAOsF,aAAaQ,gBAA0E,UAA5C2D,KAAKzJ,OAAOsF,aAAaQ,iBAChFg6C,GAAqBp9C,EAAoBkf,EAAYk+B,EAAoB,IAAIj/C,QAEjFi/C,EAAgE,UAA5Cr2C,KAAKzJ,OAAOsF,aAAaQ,eAA6Bg6C,EAAoB,EAAIA,EAClGF,EAAWt5C,OAAOw5C,EAAmB,EAAGD,EACxC,IAAIE,GAAYn+B,EAAYtb,OAAO,EAAG,GAAG,EACzCsb,GAAYtb,OAAOw5C,EAAmB,EAAGC,GACzCt2C,KAAKu2C,8BAA8BD,EAAWt2C,KAAK/E,aAEvD,GAAIs9B,GAAcv4B,KAAKzJ,OAAOiB,KAAKkhC,iBAC/B8d,EAAoBx2C,KAAKzJ,OAAOiB,KAAKi/C,uBACrCC,EAAU12C,KAAKzJ,OAAOkwB,uBAAuBkwB,WAC5CD,KACDE,gBAAc52C,KAAKzJ,OAAOiB,KAAMwI,KAAKzJ,OAAOiB,KAAK+Z,gBAAiBvR,KAAKzJ,OAAOiB,KAAKqH,UAAW,GAC9FmB,KAAK62C,YAAY72C,KAAKzJ,OAAOiB,KAAKhB,WAAYwJ,KAAKzJ,OAAOsI,UAAWmB,KAAKzJ,OAAOiH,2BAEhFk5C,GAAW12C,KAAKzJ,OAAO0I,mBAAqB,IAC7C23C,gBAAc52C,KAAKzJ,OAAOiB,KAAMg/C,EAAmBje,EAAa,GAChEv4B,KAAK62C,YAAY72C,KAAKzJ,OAAOiB,KAAKhB,WAAY+hC,EAAav4B,KAAKzJ,OAAOiH,4BAInF62C,EAAK93C,UAAUg6C,8BAAgC,SAAUD,EAAWQ,GAChE,GAAIpyC,GAAQ1E,KAGRmtC,EAAO73B,KAAKC,KAAKuhC,EAAc92C,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,UAC7Dh1B,EAAOm1B,EAAO,EAAIA,EAAO,EACzB4J,EAAYD,GAAgB9+B,EAAO,GAAKhY,KAAKzJ,OAAO4X,aAAa6+B,SACjEgK,EAA0Bh3C,KAAKzJ,OAAOiB,KAAKy/C,qBAAiC,uBAChFD,GAAwB,GAAGn6C,OAAO,EAAG,EACrC,IAAI4B,GAAOu4C,EAAwBh/B,EAC9BzgB,qBAAkByI,KAAK5E,gBACxBqD,EAAKrF,OAAO,SAAU+D,EAAGjD,GACjBiD,EAAEtE,WAAa6L,EAAMtJ,aAAavC,WAClCk+C,EAAY78C,MAGhB8F,KAAK5E,aAAalC,iBAAmB8G,KAAK5E,aAAajC,aAAa/B,QACxB,UAA5C4I,KAAKzJ,OAAOsF,aAAaQ,gBAA0E,UAA5C2D,KAAKzJ,OAAOsF,aAAaQ,kBAChF06C,GAAa99C,EAAoB+G,KAAK5E,cAAchE,SAGxD2/C,GAAa/2C,KAAKzJ,OAAO4X,aAAa6+B,WAEtCvuC,EAAOu4C,EADPh/B,GAAQ,GAER++B,EAAYA,EAAY/2C,KAAKzJ,OAAO4X,aAAa6+B,UAAY,EAAI+J,EAAY/2C,KAAKzJ,OAAO4X,aAAa6+B,SAAW,GAErH+J,EAAwD,UAA5C/2C,KAAKzJ,OAAOsF,aAAaQ,eAA6B06C,EAAY,EAAIA,EAClFt4C,EAAK5B,OAAOk6C,EAAW,EAAGT,GAC1Bt2C,KAAKzJ,OAAOiB,KAAKy/C,qBAA0C,yBAE/D5C,EAAK93C,UAAUqsB,kBAAoB,SAAU1lB,GACzC,GAAI3B,GAAS2B,EAAK3B,MAClB,KAAIhK,oBAAkBgK,EAAO8G,QAAQ,kBAG/BrI,KAAKzJ,OAAOiB,KAAKqE,4BAA8BmE,KAAKzJ,OAAOiB,KAAK42B,OAAtE,CAGA,GAAI1uB,GAASM,KAAKzJ,OAAOiB,KAAK66C,kBAAkB9wC,EAAO8G,QAAQ,gBAAgBkB,aAAa,iBAC5F,IAAsC,SAAlCvJ,KAAKzJ,OAAOsF,aAAaC,OAAoBkE,KAAKk3C,WAAax3C,IAAWA,EAAOyE,cACjFnE,KAAKzJ,OAAOsF,aAAaoE,cAAgBP,EAAOO,eAAkBsB,EAAOkE,UAAUC,SAAS,sBAC5FnE,EAAOkE,UAAUC,SAAS,uBAA0B1F,KAAKzJ,OAAOsF,aAAa0yB,oBAAqB,CAGlG,GAFAvuB,KAAKk3C,WAAY,EACjBl3C,KAAKzJ,OAAOiB,KAAKiJ,eAAgB0mB,iBAAkBjkB,EAAK6D,WAAY,GAChE/G,KAAKzJ,OAAO4H,qBAAsB,CAClC,GAAIoO,GAAKpE,eAAajF,EAAK3B,OAAQ,QACnCvB,MAAKs0C,iBAAmB/nC,EAAGhD,aAAa,iBACxCgD,EAAGlC,aAAa,gBAAiBkC,EAAGxF,SAAW,IAEnD/G,KAAKm3C,mBAAmB,aAEe,SAAlCn3C,KAAKzJ,OAAOsF,aAAaC,MAAqB4D,EAAOO,eAAgBP,EAAOyE,eACjFnE,KAAKk3C,WAAY,EACjBl3C,KAAKm3C,mBAAmB,YAGhC9C,EAAK93C,UAAU46C,mBAAqB,SAAUr7C,GAC1CkE,KAAKzJ,OAAOiB,KAAKiJ,eAAgB5E,cAAgBC,KAAMA,KAAU,GAC9C1D,YAAU,gBAAiB4H,KAAKzJ,OAAOiB,KAAKuE,YAClDmG,MAAMlC,KAAKzJ,OAAOiB,KAAKuE,YACpCiE,KAAKzJ,OAAOiB,KAAK42B,QAAS,GAE9BimB,EAAK93C,UAAUi5C,eAAiB,WACxBx1C,KAAKzJ,OAAO4H,sBAA0D,SAAlC6B,KAAKzJ,OAAOsF,aAAaC,OAC7DkE,KAAKk3C,WAAY,EACjBl3C,KAAKm3C,mBAAmB,YAGhC9C,EAAK93C,UAAUw4C,WAAa,SAAU7xC,GAC9BlD,KAAKk3C,YACLl3C,KAAKo3C,SAAWl0C,EAAK5H,QAEL,OAAhB4H,EAAK5H,QACL0E,KAAK4oB,kBAAkB1lB,GAEP,WAAhBA,EAAK5H,QACL0E,KAAKzJ,OAAO+5B,aAGpB+jB,EAAK93C,UAAUs3C,eAAiB,SAAU55C,SAE/B+F,MAAKzJ,OAAe,yBAAE0D,SAEtB+F,MAAKzJ,OAAS,mBAAE0D,IAE3Bo6C,EAAK93C,UAAU0vB,SAAW,SAAU/oB,GAChC,GAAIwB,GAAQ1E,KAERq3C,EAAOn0C,EAAY,OAoBvB,UAnBOA,GAAY,QACflD,KAAKzJ,OAAO4H,uBAAyB5G,oBAAkByI,KAAKs0C,mBAA+C,OAA1Bt0C,KAAKs0C,mBACtFpxC,EAAKvE,IAAI0L,aAAa,gBAAiBrK,KAAKs0C,kBAC5Ct0C,KAAKs0C,qBAAmBjjC,IAEN,UAAlBrR,KAAKo3C,UACLp3C,KAAKzJ,OAAO+P,Q7BtNF,W6BsN2BpD,EAAM,SAAUo0C,GAC5CA,EAAajxC,QAA6C,SAAnC3B,EAAMnO,OAAOsF,aAAaC,KAG7Cw7C,EAAajxC,QAA6C,SAAnC3B,EAAMnO,OAAOsF,aAAaC,OACtD4I,EAAMwyC,WAAY,EAClBxyC,EAAMyyC,mBAAmB,WAJzBzyC,EAAMytB,mBAAmB,QAMxB56B,oBAAkB8/C,IACnBA,EAAKpsB,QAAQqsB,KAIrBt3C,KAAK01C,oBAAsB11C,KAAK01C,kBAAkBjwC,UAAUC,SAAS,qBACrE1F,KAAK01C,kBAAkBjwC,UAAUC,SAAS,uBAAyB1F,KAAK01C,kBAAkBjwC,UAAUC,SAAS,kBAG7G,MAFAxC,GAAKmD,QAAS,OACdrG,KAAK01C,kBAAoB,KAGS,UAAlC11C,KAAKzJ,OAAOsF,aAAaC,OACH,QAAlBkE,KAAKo3C,UAAwC,aAAlBp3C,KAAKo3C,SAChCp3C,KAAKo3C,SAAW,KAEO,UAAlBp3C,KAAKo3C,WACVl0C,EAAKmD,QAAS,EACdrG,KAAKo3C,SAAW,KAChBhjC,WAAS,kBAAkB,EAAOpU,KAAKzJ,SAEtC2M,EAAKkvC,aAAanyC,eACnBiD,EAAKmD,QAAS,IAGlBrG,KAAKzJ,OAAO4H,uBACZ6B,KAAKzJ,OAAOiB,KAAKkgB,cAA8B,eAAI1X,KAAKzJ,OAAOiB,KAAKuE,WAAWA,WAAkB,QAMzGs4C,EAAK93C,UAAU41B,mBAAqB,SAAU4L,GAC1C,IAAKxmC,oBAAkByI,KAAKzJ,OAAOiB,KAAKmuB,eAAgB,CACpD,GAAI4xB,GAAYv3C,KAAKzJ,OAAOua,QAAQC,GAAK,eACzC/Q,MAAKzJ,OAAOiB,KAAKmuB,cAAc0M,aAAaklB,EAAY,MAAOA,EAAY,OAAQA,EAAY,UAAuB,SAAZxZ,GAC1G/9B,KAAKzJ,OAAOiB,KAAKmuB,cAAc0M,aAAaklB,EAAY,SAAUA,EAAY,UAAuB,SAAZxZ,KAGjGsW,EAAK93C,UAAUiwB,YAAc,WACzB,GAAsC,SAAlCxsB,KAAKzJ,OAAOsF,aAAaC,KAAiB,CAC1C,GAAI07C,GAAcn5C,WAAS,yBAA0B2B,KAAKzJ,OAAOiB,KAAKuE,YAClE07C,EAAWz3C,KAAKzJ,OAAOyb,iBAAiBwlC,EAAYzwC,SAAU/G,KAAKzJ,OAAO6I,gBAC9EY,MAAKzJ,OAAO+I,aAAaC,YACrBd,KAAM+4C,EAAYzuC,QAClBvJ,KAAMi4C,EACN/3C,OAAQM,KAAKzJ,OAAOiB,KAAKmI,aAAaK,KAAKzJ,OAAO6I,mBAEtDY,KAAKm3C,mBAAmB,UACxBn3C,KAAKk3C,WAAY,EAEiB,UAAlCl3C,KAAKzJ,OAAOsF,aAAaC,MACzBkE,KAAKzJ,OAAO0Z,OAAO,yBAG3BokC,EAAK93C,UAAU64C,eAAiB,SAAUlyC,GAClClM,EAAgBgJ,KAAKzJ,SAA6C,SAAlCyJ,KAAKzJ,OAAOsF,aAAaC,MAAmC,SAAhBoH,EAAK5H,SACjF0E,KAAK6xB,WAAW3uB,EAAMA,EAAK6D,UAC3B/G,KAAK03C,cAAcx0C,EAAMA,EAAKvE,IAAKuE,EAAK6D,YAGhDstC,EAAK93C,UAAUmvB,SAAW,SAAUxoB,GAChC,GAAIwB,GAAQ1E,IACZ,IAAsC,SAAlCA,KAAKzJ,OAAOsF,aAAaC,MAAmBkE,KAAKzJ,OAAOua,QAAQ1I,cAAc,QAAS,CACvFlF,EAAKmD,QAAS,CAEd+N,YAAS,UAAU,EAAOpU,KAAKzJ,OAAOiB,MACtC4c,WAAS,kBAAkB,EAAMpU,KAAKzJ,QACtC2M,EAAK6F,QAAQ7F,EAAK/H,YAAc+H,EAAKjJ,KACrC,IAAImnB,EAEAA,GADA7pB,oBAAkB2L,EAAK1D,MACfQ,KAAKzJ,OAAOiB,KAAKuE,WAAqB,WAAE47C,KAAK12B,cAAcyhB,WAG3Dx/B,EAAK1D,KAAKkjC,UAEtB,IAAIkV,GACAC,EAAgB73C,KAAKzJ,OAAOgF,yBAChC,IAAIhE,oBAAkB6pB,GAClBphB,KAAKzJ,OAAOiB,KAAKgG,wBAAwBpE,OAAO,SAAU+D,EAAGjG,GACzD,GAAIiG,EAAE06C,EAAc,MAAQ30C,EAAK6F,QAAQ8uC,EAAc,IAEnD,YADAD,EAAa1gD,SAKpB,CACD,GAAI++B,GAAUj2B,KAAKzJ,OAAOiZ,4BAA8B,GACpDxP,KAAKzJ,OAAOkZ,6BAA+B,CAGvCmoC,GAFJ3hB,GAC8C,IAA1Cj2B,KAAKzJ,OAAOsI,UAAUL,QAAQ4iB,GACjBphB,KAAKzJ,OAAOsI,UAAUL,QAAQ4iB,IAEe,IAArDphB,KAAKzJ,OAAOoiC,qBAAqBn6B,QAAQ4iB,GACjCphB,KAAKzJ,OAAOoiC,qBAAqBn6B,QAAQ4iB,GAGzCphB,KAAKzJ,OAAOmiC,iBAAiBl6B,QAAQ4iB,IAIE,IAA1CphB,KAAKzJ,OAAOsI,UAAUL,QAAQ4iB,IAAkBphB,KAAKzJ,OAAO0I,mBAAqB,EAC3Fe,KAAKzJ,OAAOiB,KAAKkhC,iBAAiBl6B,QAAQ4iB,GAASphB,KAAKzJ,OAAOsI,UAAUL,QAAQ4iB,GAG7F,GAAI4X,KAMJ,IALA58B,SAAO48B,EAAK91B,GACZ81B,EAAI3yB,QAAS,EACb2yB,EAAI71B,KAAO,OACXie,EAAQphB,KAAKzJ,OAAOiB,KAAKqH,UAAUuiB,EAAMra,UACzC/G,KAAKzJ,OAAO+P,Q7BvYC,c6BuY2B0yB,GACnCA,EAAI3yB,OAiCLrG,KAAKzJ,OAAOiB,KAAK42B,QAAS,MA7B1B,IAHKhN,EAAMra,WAAa/G,KAAKzJ,OAAOiH,wBAAwBpG,OAAS,GAAwB,QAAlB4I,KAAKo3C,WAC5Ep3C,KAAK83C,cAAe,GAEnBxhD,EAAa0J,KAAKzJ,SACjByJ,KAAKzJ,OAAOC,qBAAsBC,gBAAeuJ,KAAKzJ,OAAOC,WAAWE,kBAAmB6rB,sBAa5F,GAAIjsB,EAAa0J,KAAKzJ,SACtByJ,KAAKzJ,OAAOC,qBAAsBC,gBAAeuJ,KAAKzJ,OAAOC,WAAWE,kBAAmB6rB,qBAAoB,CAChH,GAAIpP,GAAQnT,KAAKzJ,OAAOiB,KAAK2b,KAEtBnT,MAAKzJ,OAAOiB,KAAKhB,WAAWuhD,OAAOF,EAAc,GAAI30C,EAAK6F,QAASoK,EAAM6kC,UAAW7kC,EAAOjQ,EAAK+0C,eAClGlkC,KAAK,SAAU5W,GACX5F,oBAAkB4F,KACnB+F,EAAK6F,QAAQ7F,EAAK/H,YAAcgC,EAAE+F,EAAK/H,aAE3CuJ,EAAMmtB,WAAW3uB,EAAM00C,GACvBlzC,EAAMgzC,cAAcx0C,EAAMke,EAAOw2B,UAtBrC,IAAI5gD,EAAgBgJ,KAAKzJ,QAAS,CAC9B,GACI2hD,IAAat4C,YAAa,OAAQnB,KAAMyE,EAAK6F,QAASzN,OAAQ,OAAQqD,IAAKyiB,EAC3Era,SAAU6wC,EAAY7uC,QAAS7F,EAAK6F,QAAS5N,WAAY+H,EAAK/H,WAC9Dg9C,kBAAmB,KAAMC,oBAAqB,KAClDp4C,MAAKzJ,OAAOiB,KAAK8e,gBAA4B,aAAE4hC,EAAUl4C,KAAKzJ,OAAOiB,KAAK2b,WAG1EnT,MAAK6xB,WAAW3uB,EAAM00C,GACtB53C,KAAK03C,cAAcx0C,EAAMke,EAAOw2B,GAqB5C53C,KAAKzJ,OAAO4H,uBACZ6B,KAAKzJ,OAAOiB,KAAKkgB,cAA2B,iBAGpD28B,EAAK93C,UAAUm7C,cAAgB,SAAUx0C,EAAMvE,EAAKoI,GAChD,GAAIsxC,EACAr4C,MAAKzJ,OAAOiB,KAAK8gD,iBACjBt4C,KAAKzJ,OAAOiB,KAAK8gD,gBAAgBjrB,QAAQnqB,EAAK6F,SAElD/I,KAAKzJ,OAAOiB,KAAKuE,WAAWw8C,gBAAgBv4C,KAAKzJ,OAAOiB,KAAK+4B,iBAAiBrtB,EAAK/H,cACnF6E,KAAKzJ,OAAOiB,KAAKuE,WAAWy8C,QAAQvxC,UACd,QAAlBjH,KAAKo3C,UAAwC,aAAlBp3C,KAAKo3C,WAChCp3C,KAAKm3C,mBAAmB,UACxBn3C,KAAKk3C,WAAY,GAErBl3C,KAAKmyB,mBAAmB,QACVnyB,KAAKzJ,OAAOiZ,4BAA8B,GACpDxP,KAAKzJ,OAAOkZ,6BAA+B,GAGvC4oC,EADAn1C,EAAK1D,KAAK6I,QAAQ,0BAA4BnF,EAAK1D,KAAK6I,QAAQ,0BACzDrI,KAAKzJ,OAAOiB,KAAKqH,UAAUkI,GAE7B7D,EAAK1D,KAAK6I,QAAQ,qBAAuBnF,EAAK1D,KAAK6I,QAAQ,qBACzDrI,KAAKzJ,OAAOiB,KAAKkhC,iBAAiB3xB,GAGlC/G,KAAKzJ,OAAOiB,KAAKmhC,qBAAqB5xB,GAEjD2D,eAAa2tC,IAAQ,cAAe,eACpC3tC,cAAY2tC,EAAKzyC,iBAAiB,eAAgB,oBAAqB,iBAElE5F,KAAKzJ,OAAO0I,mBAAqB,IAElCo5C,EADAn1C,EAAK1D,KAAK6I,QAAQ,oBAAsBnF,EAAK1D,KAAK6I,QAAQ,oBACnDrI,KAAKzJ,OAAOiB,KAAKqH,UAAUkI,GAG3B/G,KAAKzJ,OAAOiB,KAAKkhC,iBAAiB3xB,GAE7C2D,eAAa2tC,IAAQ,cAAe,eACpC3tC,cAAY2tC,EAAKzyC,iBAAiB,eAAgB,oBAAqB,iBAE3E8E,eAAa/L,IAAO,cAAe,eACnC+L,cAAY/L,EAAIiH,iBAAiB,eAAgB,oBAAqB,iBAC/B,IAAnC5F,KAAKzJ,OAAwB,iBAC7ByJ,KAAKzJ,OAAOiB,KAAK27C,YAAYsF,eAEjC59C,GAAaZ,MAAOiJ,EAAK6F,QAASzN,OAAQ,QAAU0E,KAAKzJ,OAAQyJ,KAAKhF,gBAAiBgF,KAAK/E,YAAa+E,KAAK9E,cAAegI,EAAK/H,YAC7HwD,EAAIoI,WAAa/G,KAAKzJ,OAAOiH,wBAAwBpG,OAAS,GAAwB,UAAlB4I,KAAKo3C,WAC1Ep3C,KAAKo3C,SAAW,KAEpB,IAAIsB,IACAv1C,KAAM,OAAQzD,OAAQM,KAAKzJ,OAAOg6B,iBAAiBrtB,EAAK/H,YAAasD,KAAMyE,EAAK6F,QAChF4vC,aAAcz1C,EAAK+0C,cAAet5C,IAAKA,EAAK4C,OAAQ2B,EAAK1D,KAEzDQ,MAAKzJ,OAAOugB,WAAW5Y,IAAI,SAAUivB,GAAM,OAA+B,IAAxBA,EAAGC,mBAA8Bh2B,QACnF4I,KAAKzJ,OAAOiB,KAAK61B,UAErBrtB,KAAKzJ,OAAO+P,Q7BjeQ,iB6BieuBoyC,IAE/CrE,EAAK93C,UAAUy4C,YAAc,YACpBh1C,KAAKzJ,OAAOiB,KAAK42B,QAAUpuB,KAAKk3C,WAA+B,QAAlBl3C,KAAKo3C,UAAwD,SAAlCp3C,KAAKzJ,OAAOsF,aAAaC,OAC7FkE,KAAKzJ,OAAOsF,aAAa6yB,iBAM1B1uB,KAAKmyB,mBAAmB,SALxBnyB,KAAKm3C,mBAAmB,UACxBn3C,KAAKk3C,WAAY,EACjBl3C,KAAKo3C,SAAW,QAO5B/C,EAAK93C,UAAUs1B,WAAa,SAAU3uB,EAAM6D,GACxC/G,KAAKzJ,OAAOiB,KAAKuE,WAAW81B,WAAW9qB,EAAU7D,EAAK/H,WAAY+H,EAAK6F,QAAQ7F,EAAK/H,aACpF6E,KAAKzJ,OAAOiB,KAAK+Z,gBAAgBxK,GAAUtI,KAAOyE,EAAK6F,SAE3DsrC,EAAK93C,UAAUs4C,WAAa,SAAU/5C,EAASK,GAC3CN,EAAWC,EAASkF,KAAKzJ,OAAQyJ,KAAKhF,gBAAiBgF,KAAK/E,YAAa+E,KAAK9E,cAAeC,EAAY6E,KAAK5E,cAC9G4E,KAAKzJ,OAAO0G,aAGZ,KAAK,GAFDwB,GAAOuB,KAAKzJ,OAAOiB,KAAKhB,qBAAsBC,eAC9CuJ,KAAKzJ,OAAOiB,KAAKhB,WAAWA,WAAWiF,KAAOuE,KAAKzJ,OAAOiB,KAAKhB,WAC1DU,EAAI,EAAGA,EAAIuH,EAAKrH,OAAQF,IAAK,CAClCuH,EAAKvH,GAAGgD,MAAQhD,CAChB,IAAIQ,GAAMsI,KAAKzJ,OAAOiB,KAAK+D,0BAA0B,EACjDT,GAAQb,MAAMvC,KAAS+G,EAAKvH,GAAGQ,IACR,QAAnBoD,EAAQQ,SACRmD,EAAKvH,GAAGiD,MAAQ6F,KAAK20C,mBAAmBx6C,MACxCsE,EAAKvH,GAAGkD,SAAW4F,KAAK20C,mBAAmBv6C,SAC3CqE,EAAKvH,GAAG2B,SAAWmH,KAAK20C,mBAAmB97C,SACtCtB,oBAAkByI,KAAK20C,mBAAmBh8C,cAC3C8F,EAAKvH,GAAGyB,WAAaqH,KAAK20C,mBAAmBh8C,WAC7C8F,EAAKvH,GAAGoH,eAAiB0B,KAAK20C,mBAAmBr2C,gBAErDG,EAAKvH,GAAGiC,aAAe6G,KAAK20C,mBAAmBx7C,cAGvDib,WAAS,sBAAwB3V,EAAKvH,GAAG2B,SAAW,SAAU3B,EAAG8I,KAAKzJ,OACtE,IAAIG,GAAUsJ,KAAKzJ,OAAOC,WAAWE,SAChCJ,EAAa0J,KAAKzJ,SAAWG,YAAmB6rB,uBACjDnO,WAAS,sBAAwB3V,EAAKvH,GAAG2B,SAAU4F,EAAKvH,GAAI8I,KAAKzJ,QAEhEkI,EAAKvH,GAAGiD,OACT6F,KAAKzJ,OAAO0G,WAAW5E,KAAKoG,EAAKvH,IAGpC8I,KAAKzJ,OAAOkhB,yBACU,QAAnB3c,EAAQQ,QAAmD,MAA/B0E,KAAK00C,yBACjC10C,KAAKzJ,OAAOkK,eAAgB5E,cAAgBQ,eAAgB2D,KAAK00C,0BAA4B,GAC7F10C,KAAK00C,uBAAyB,OAI1CL,EAAK93C,UAAUs6C,YAAc,SAAUp4C,EAAM0G,EAAMpN,GAC/C,IAAK,GAAIgC,GAAI,EAAGA,EAAIiG,KAAKzJ,OAAOm+B,cAAct9B,OAAQ2C,IAAK,CACvD,GAAI6+C,GAAQ7gD,EAAQgC,EACpB,KAAKxC,oBAAkBqhD,GAAQ,CACvB1+C,EAAQmE,WAAS,sBAAwBu6C,EAAM//C,SAAW,SAAUmH,KAAKzJ,OAE7E,IADAqiD,EAAM1+C,MAAQA,GACT3C,oBAAkBqhD,EAAMjgD,YAAa,CACtC,GAAI6tC,GAAcnoC,WAAS,sBAAwBu6C,EAAMjgD,WAAWE,SAAW,SAAUmH,KAAKzJ,OAC9FqiD,GAAMjgD,WAAWuB,MAAQssC,IAIrC,GAAI96B,IAAS,EACTmtC,EAAe74C,KAAKzJ,OAAO6I,eAC/B,IAAIY,KAAKzJ,OAAO0I,mBAAqB,EAEjC,IAAK,GADDQ,GAAQ0F,EAAK,GAAGS,iBAAiB,cAC5BkzC,EAAI,EAAGA,EAAIr5C,EAAMrI,OAAQ0hD,IAC9B,GAAIr5C,EAAMq5C,GAAGrzC,UAAUC,SAAS,yBAA0B,CACtDmzC,EAAeC,CACf,OAIZ,IAAK,GAAIx8C,GAAI,EAAGA,EAAI0D,KAAKzJ,OAAOsI,UAAUzH,OAAQkF,IAAK,CAC9C6I,EAAK7I,GAAGmJ,UAAUC,SAAS,gBAC5BgG,GAEJ,IAAIqtC,GAAQhhD,EAAQ2T,EACpB,KAAKnU,oBAAkBwhD,GAAQ,CAC3B,GAAI7+C,GAAQ6+C,EAAM7+C,MACdC,EAAQ4+C,EAAM5+C,MACdwE,EAAMwG,EAAK7I,EACV/E,qBAAkBwhD,EAAMpgD,cACzBuB,EAAQmE,WAAS,sBAAwB06C,EAAMpgD,WAAWE,SAAW,SAAUmH,KAAKzJ,QAExF,IAAI2b,GAAWvT,EAAIc,MAAMo5C,EACzB,KAAKthD,oBAAkB2a,GAAW,CAC9B,IAAS4mC,EAAI,EAAGA,EAAI5mC,EAASzM,UAAUrO,OAAQ0hD,IAAK,CAChD,GAAI7+C,GAAQiY,EAASzM,UAAUqzC,GAG3B7nC,EAAShX,EAAMwM,MAFN,mBAGTyS,EAAUjf,EAAMwM,MAFN,wBAGA,OAAVwK,GACAvG,eAAawH,GAAWjY,GAEb,MAAXif,GACAxO,eAAawH,GAAWjY,GAG3BkL,EAAK7I,GAAGmJ,UAAUC,SAAS,eAI5BgI,YAAUwE,GAAW,uBAAyBhY,EAAQ,QAAUC,GAHhEuT,YAAUwE,GAAW,iBAAmBhY,EAAQ,QAAUC,OAS9Ek6C,EAAK93C,UAAUu4C,SAAW,WACtB,GAAInjB,GACAz3B,EAAQ8F,KAAK/E,YACblD,EAAUiI,KAAKzJ,OAAOiB,KAAKgG,uBACO,WAAlCwC,KAAKzJ,OAAOsF,aAAaC,OACzB5B,EAAQ8F,KAAK40C,gBAAgB7C,iBAC7B/xC,KAAK9E,cAAgB8E,KAAK40C,gBAAgB5C,oBACtChyC,KAAKzJ,OAAOyF,kBAAkBgE,KAAKoS,cAAchb,OAAS,GACvD4I,KAAKzJ,OAAOyF,kBAAkBgE,KAAK4c,gBAAgBxlB,UACtDW,EAAUiI,KAAK40C,gBAAgB9C,mBAGvC,IAAI3sC,GAAOnF,KAAKzJ,OAAOiB,KAAKk9B,cACxBskB,EAAiB7zC,EAAK/N,QAAU+N,EAAK,GAAGoE,aAAa,iBAAmB,EACxE0vC,EAAgB9zC,EAAK/N,QAAU+N,EAAKA,EAAK/N,OAAS,GAAGmS,aAAa,iBAAmB,EACrF2vC,EAAcl5C,KAAK9E,eAAiB89C,GAAkBh5C,KAAK9E,eAAiB+9C,EAC5EE,EAAmBn5C,KAAKzJ,OAAO4H,sBAAwB6B,KAAK/E,aAAe,GAA+B,OAA1B+E,KAAKs0C,gBACzF,IAAsC,WAAlCt0C,KAAKzJ,OAAOsF,aAAaC,OACuB,UAA5CkE,KAAKzJ,OAAOsF,aAAaQ,eACzBs1B,EAAW,UAEuC,UAA5C3xB,KAAKzJ,OAAOsF,aAAaQ,gBAA0E,UAA5C2D,KAAKzJ,OAAOsF,aAAaQ,kBAClF2D,KAAK9E,eAAiB,GAAKi+C,IAAqBD,IACpDvnB,EAAW,SACNp6B,oBAAkBQ,EAAQmC,KAAWnC,EAAQmC,GAAOlB,WACf,UAAlCgH,KAAKzJ,OAAOsF,aAAaC,OAAqBkE,KAAKzJ,OAAOyF,kBAAkBgE,KAAKoS,cAAchb,OAAS,GACrG4I,KAAKzJ,OAAOyF,kBAAkBgE,KAAK4c,gBAAgBxlB,SACtD8C,GAASjB,EAAoBlB,EAAQmC,IAAQ9C,OACG,UAA5C4I,KAAKzJ,OAAOsF,aAAaQ,iBAEzBnC,GADsB8F,KAAK40C,gBAAgB3C,uBAK/C/3C,GAASjB,EAAoBlB,EAAQmC,IAAQ9C,UAIpD4I,KAAK9E,eAAiB,GAAKi+C,IAAqBD,IAC7Ch/C,GAAsD,UAA5C8F,KAAKzJ,OAAOsF,aAAaQ,gBACY,UAA5C2D,KAAKzJ,OAAOsF,aAAaQ,iBAA8B,CAC1DnC,GAASiL,EAAK/N,OAAS,IACvB8C,EAAQiL,EAAK/N,OAAS,EAE1B,IAAIuK,GAAI,OACJy0C,EAAep2C,KAAKzJ,OAAOiB,KAAKkgB,cAAc/V,GAAG,GACjDy3C,EAAkBxoB,SAASyoB,aAC/Bl0C,GAAKjL,EAAQ,GAAGy3B,GAAUxsB,EAAK,IAC/BiP,WAAS,aAAcla,EAAQ,EAAG8F,KAAK40C,gBACvC,IAAIlC,GAA6D,UAA5C1yC,KAAKzJ,OAAOsF,aAAaQ,eAA6BnC,EAAQA,EAAQ,CACrD,WAAlC8F,KAAKzJ,OAAOsF,aAAaC,OACzBkE,KAAKzJ,OAAOiB,KAAKkgB,cAAc/V,GAAG9E,OAAO,EAAG,GAC5CmD,KAAKzJ,OAAOiB,KAAKkgB,cAAc/V,GAAG9E,OAAO61C,EAAgB,EAAG0D,GAEhE,IAAIngB,GAAUj2B,KAAKzJ,OAAOiZ,4BAA8B,GACpDxP,KAAKzJ,OAAOkZ,6BAA+B,CAC/C,IAAIzP,KAAKzJ,OAAOyI,YAAcgB,KAAKzJ,OAAO0I,oBAAsBe,KAAKzJ,OAAOuY,eAAiBmnB,EAAQ,CACjG,GAAIsC,GAAcv4B,KAAKzJ,OAAOkW,qBAE1B6sC,EAAqBt5C,KAAKzJ,OAAOiB,KAAK+Z,gBAAgB,EAE1D,IADAgnB,EAAYr+B,EAAQ,GAAGy3B,GAAU4G,EAAY,IACzCtC,EAAQ,CACR,GAAIsjB,GAAkBv5C,KAAKzJ,OAAOskC,wBAClC0e,GAAgBr/C,EAAQ,GAAGy3B,GAAU4nB,EAAgB,IAEnB,UAAlCv5C,KAAKzJ,OAAOsF,aAAaC,OACzBkE,KAAKzJ,OAAOiB,KAAKkgB,cAAmB,WAAE7a,OAAO,EAAG,GAChDmD,KAAKzJ,OAAOiB,KAAKkgB,cAAmB,WAAE7a,OAAO61C,EAAgB,EAAG4G,IAEpEllC,WAAS,aAAcla,EAAQ,EAAG8F,KAAK40C,iBAE3C,GAAsC,QAAlC50C,KAAKzJ,OAAOsF,aAAaC,MAAoD,SAAlCkE,KAAKzJ,OAAOsF,aAAaC,KAAiB,CAErF,IAAK,GADD09C,GAASx5C,KAAKzJ,OAAOiB,KAAKoe,kBAAkBhQ,iBAAiB,gBACxD1O,EAAI,EAAGA,EAAIsiD,EAAOpiD,OAAQF,IAC/BsiD,EAAOtiD,GAAGotB,QAEdlQ,YAAS,gBAAkBpU,KAAKzJ,OAAOiB,KAAKuE,WAAWy8C,SAEvDW,IACAn5C,KAAKs0C,iBAAmB,QAEvBt0C,KAAKzJ,OAAO4H,sBAAwB6B,KAAKzJ,OAAO4H,uBAAyBjG,OAAOC,KAAK6H,KAAKzJ,OAAOiB,KAAKkgB,cAA4B,cAAGtgB,SACtIgiD,EAAgBK,QAEhBz5C,KAAKzJ,OAAO4H,uBAAyBjG,OAAOC,KAAK6H,KAAKzJ,OAAOiB,KAAKkgB,cAA4B,cAAGtgB,QACjG4I,KAAKzJ,OAAOiB,KAAKkgB,cAAkC,qBAI/D,GAAsC,UAAlC1X,KAAKzJ,OAAOsF,aAAaC,OAAqBvE,oBAAkByI,KAAK/E,eAAsC,IAAtB+E,KAAK/E,aAAsB+E,KAAyB,qBAAMA,KAAKw0C,wBAAyB,CAC7Kt6C,EAAQ8F,KAAK40C,gBAAgB7C,iBAC7B/xC,KAAK9E,cAAgB8E,KAAK40C,gBAAgB5C,kBAC1C,IAAIZ,GAAoBpxC,KAAKzJ,OAAOyF,kBAAgC,aAChE09C,MAAmB,EACvB,IAAItI,EAAkBh6C,OAClB,IAASF,EAAI,EAAGA,EAAIk6C,EAAkBh6C,OAAQF,IACtCK,oBAAkB65C,EAAkBl6C,GAAG2B,YACvC6gD,EAAmBtI,EAAkBl6C,GAIjD,IAAIgM,IACA5H,OAAQ,MACRmD,KAAMi7C,EACNx/C,MAAOA,EACPy/C,WAAY,EAEhB35C,MAAK45C,aAAa12C,GAClBlD,KAAK40C,gBAAmC,kBAAEv8C,KAAK2H,KAAK40C,gBAA8B,cAClF50C,KAAK40C,gBAAmC,kBAAEv8C,KAAK6K,EAAW,QAqBlEmxC,EAAK93C,UAAUgvB,UAAY,SAAUroB,GACjC,GAAyB,YAArBA,EAAKtD,aAA6BI,KAAKk3C,UAEvC,YADAh0C,EAAKmD,QAAS,EAGlB,IAAsC,SAAlCrG,KAAKzJ,OAAOsF,aAAaC,MAAwC,cAArBoH,EAAKtD,YAEjD,YADAsD,EAAKmD,QAAS,EAGlB,IAAIrG,KAAK01C,oBAAsB11C,KAAK01C,kBAAkBjwC,UAAUC,SAAS,qBACrE1F,KAAK01C,kBAAkBjwC,UAAUC,SAAS,uBAAyB1F,KAAK01C,kBAAkBjwC,UAAUC,SAAS,YAG7G,MAFAxC,GAAKmD,QAAS,OACdrG,KAAK01C,kBAAoB,KAG7B,IAAyB,WAArBxyC,EAAKtD,YAA0B,CAC/B,GAAIq4B,GAAS/0B,EAAKzE,IAClB,IAAIlH,oBAAkB2L,EAAKzE,KAAK,GAAG5F,UAU/B,IAAK,GATDghD,GAAgB75C,KAAKzJ,OAAOgF,0BAQ5By7B,EAASh3B,KACJ9I,EAAI,EAAGA,EAAI+gC,EAAO7gC,OAAQF,KARrB,SAAUA,GACpB8/B,EAAOzgC,OAAO2G,SAAS9D,OAAO,SAAU+D,GAChCA,EAAE08C,EAAc,MAAQ32C,EAAKzE,KAAKvH,GAAG2iD,EAAc,MACnD5hB,EAAO/gC,GAAKiG,MAMZjG,EAGhB,KAASA,EAAI,EAAGA,EAAI+gC,EAAO7gC,OAAQF,IAAK,CACpC8I,KAAK6zC,eAAe5b,EAAO/gC,GAAG2B,SAE9B,KAAK,GADD06C,GAASt6C,EAAoBg/B,EAAO/gC,IAC/BuK,EAAI,EAAGA,EAAI8xC,EAAOn8C,OAAQqK,IAC/BzB,KAAK6zC,eAAeN,EAAO9xC,GAAG5I,SAElCqK,GAAKzE,KAAOyE,EAAKzE,KAAKlF,OAAOg6C,IAGrC,GAAyB,QAArBrwC,EAAKtD,aAA0BI,KAAKu0C,qBAAuBv0C,KAAKzJ,OAAO4H,sBAAwB6B,KAAKzJ,OAAOkhB,yBAA2B,CAKtI,KAJ6C,IAAvCzX,KAAKzJ,OAAOiB,KAAK2vB,kBAA2BnnB,KAAKu0C,oBAChDrxC,EAAKhJ,QAAU8F,KAAKzJ,OAAOiB,KAAK2vB,mBAAmC,IAAfjkB,EAAKhJ,QAC5D8F,KAAK9E,cAAgB8E,KAAKzJ,OAAOiB,KAAK2vB,kBAEtCnnB,KAAKzJ,OAAO4H,qBAAsB,CAClC,GAAI27C,GAAW,yBAA2B95C,KAAK9E,cAAgB,KAC3DyD,MAAM,EACNqB,MAAK9E,eAAiB,GAAiD,QAA5C8E,KAAKzJ,OAAOsF,aAAaQ,gBACR,WAA5C2D,KAAKzJ,OAAOsF,aAAaQ,gBACzB2D,KAAKs0C,iBAAmBt0C,KAAK9E,cAAc+J,WAC3CtG,EAAMqB,KAAKzJ,OAAO48B,aAAa/qB,cAAc0xC,GAC7C95C,KAAK/E,YAAc0D,EAAMA,EAAIoI,SAAW,GAGpC/G,KAAKs0C,kBAA8C,OAA1Bt0C,KAAKs0C,kBAC9BwF,EAAW,yBAA2B95C,KAAKs0C,iBAAmB,KAC9D31C,EAAMqB,KAAKzJ,OAAO48B,aAAa/qB,cAAc0xC,GAC7C95C,KAAK/E,YAAc0D,EAAMA,EAAIoI,SAAW,GAGxC/G,KAAK/E,YAAc,MAKvB+E,MAAKu0C,qBAAuBv0C,KAAKzJ,OAAO4H,sBAAwB6B,KAAKzJ,OAAOkhB,yBACzD,IAAfvU,EAAKhJ,MACL8F,KAAK/E,YAAciI,EAAKhJ,MAGxB8F,KAAK/E,YAAc+E,KAAKzJ,OAAOiB,KAAK2vB,iBAIxCnnB,KAAK/E,YAAc+E,KAAKzJ,OAAOiB,KAAK2vB,kBAAoB,EAAInnB,KAAKzJ,OAAOiB,KAAK2vB,iBAAmB,CAGpGnnB,MAAKu0C,qBAAuBv0C,KAAKzJ,OAAO4H,sBAAwB6B,KAAKzJ,OAAOkhB,0BAC5EzX,KAAK5E,aAAe4E,KAAKzJ,OAAO2G,SAAS8C,KAAKzJ,OAAOiB,KAAK2vB,kBACtDnnB,KAAKzJ,OAAO4H,sBAAwB6B,KAAKw0C,0BACzCx0C,KAAK5E,aAAe4E,KAAKzJ,OAAOiH,wBAAwBwC,KAAK/E,eAIjE+E,KAAK5E,aAAe4E,KAAKzJ,OAAOuP,qBAAqB,GAGzD9F,KAAKu0C,oBAAqC,IAAfrxC,EAAKhJ,QAChC8F,KAAK5E,aAAe4E,KAAKzJ,OAAO2G,SAASgG,EAAKhJ,OAC9C8F,KAAK/E,YAAciI,EAAKhJ,OAEoB,UAA5C8F,KAAKzJ,OAAOsF,aAAaQ,gBAA8B9E,oBAAkByI,KAAK5E,gBAC1E7D,oBAAkByI,KAAKzJ,OAAOuP,qBAAqB,MACvD9F,KAAK5E,aAAe4E,KAAKzJ,OAAOuP,qBAAqB,IAEzD9F,KAAKu0C,oBAAqB,EAC1BrxC,EAAOlD,KAAK45C,aAAa12C,IAU7BmxC,EAAK93C,UAAU84C,wBAA0B,WACD,OAAhCr1C,KAAK00C,yBACL10C,KAAK00C,uBAAyB10C,KAAKzJ,OAAOsF,aAAaQ,iBAG/Dg4C,EAAK93C,UAAUq9C,aAAe,SAAU12C,GACpC,GAAIjJ,GAAQiJ,EAAKzE,IACjB,IAAoB,QAAhByE,EAAK5H,OAAkB,CACvB,GAAI5D,GAAMsI,KAAKzJ,OAAOiB,KAAK+D,0BAA0B,GACjDo2B,EAAW,IACf13B,GAAMG,SAAW7C,oBAAkB0C,EAAMG,UAAYgC,YAAW8G,EAAKzE,MAAQxE,EAAMG,QACnF,IAAI+d,OAAc,EAEdA,GADAnY,KAAKzJ,OAAO4H,sBAAuC,IAAf+E,EAAKhJ,MAC3B8F,KAAKzJ,OAAO2G,SAEa,UAAlC8C,KAAKzJ,OAAOsF,aAAaC,MAAoBkE,KAAyB,qBAAMzI,oBAAkByI,KAAK/E,aAC1F+E,KAAK40C,gBAA8B,aAGnC50C,KAAKzJ,OAAOiB,KAAKgG,wBAE/BwC,KAAKzJ,OAAO4H,sBAAuC,IAAf+E,EAAKhJ,QACzC8F,KAAK/E,YAAc+E,KAAKzJ,OAAO2G,SAASsB,QAAQwB,KAAK5E,cACrD4E,KAAK9E,cAAgB8E,KAAK/E,YAE9B,IAAIf,GAAQ8F,KAAK/E,WACjBhB,GAAMpB,SAAWwc,SAAOrV,KAAKzJ,OAAOua,QAAQC,GAAK,UACjDqD,WAAS,sBAAwBna,EAAMpB,SAAUoB,EAAO+F,KAAKzJ,OAC7D,IAAI4D,GAAQ,EACRyC,MAAY,GACZ0B,MAAiB,GACjB3F,MAAa,GACbgE,MAAkB,GAClBw8C,EAAmBn5C,KAAKzJ,OAAO4H,sBAAwB6B,KAAK/E,aAAe,GAA+B,OAA1B+E,KAAKs0C,iBACrFnvC,EAAOnF,KAAKzJ,OAAOsI,UACnBm6C,EAAiB7zC,EAAK/N,OAAS+gB,EAAY3Z,QAAQ2Z,EAAY,IAAM,EACrE8gC,EAAgB9zC,EAAK/N,QAAU+N,EAAKA,EAAK/N,OAAS,GAAGmS,aAAa,iBAAmB,EACrF2vC,KAAcl5C,KAAKzJ,OAAO4H,sBAAuC,IAAf+E,EAAKhJ,QACvD8F,KAAK9E,eAAiB89C,GAAkBh5C,KAAK9E,eAAiB+9C,CASlE,IARI9gC,EAAY/gB,SACZwF,EAAYub,EAAYnY,KAAK/E,aAAa+E,KAAKzJ,OAAOqG,WACtDD,EAAkBwb,EAAYnY,KAAK/E,aAAa+E,KAAKzJ,OAAOoG,iBACxDwb,EAAYnY,KAAK/E,aAAatC,aAC9B2F,EAAiB6Z,EAAYnY,KAAK/E,aAAatC,WAAWE,UAE9DF,EAAawf,EAAYnY,KAAK/E,aAAatC,YAEC,QAA5CqH,KAAKzJ,OAAOsF,aAAaQ,gBAA4B8b,EAAY/gB,OAAQ,CAEzE,GADA+C,EAAQge,EAAYnY,KAAK/E,aAAad,MACU,UAA5C6F,KAAKzJ,OAAOsF,aAAaQ,eACzBs1B,EAAW,SACXz3B,EAAQie,EAAYnY,KAAK/E,aAAaf,UAErC,IAAgD,UAA5C8F,KAAKzJ,OAAOsF,aAAaQ,eAA4B,CAC1Ds1B,EAAW,OACX,IAAIqhB,GAAmB/5C,EAAoBkf,EAAYnY,KAAK/E,cAAc7D,OACtEo7C,EAAmBr6B,EAAYnY,KAAK/E,aAAaf,KACrDA,GAAS84C,EAAmB,EAAMR,EAAmBQ,QAEpD,IAAgD,UAA5ChzC,KAAKzJ,OAAOsF,aAAaQ,eAA4B,CAC1Ds1B,EAAW,SACN3xB,KAAK9E,eAAiB,GAAKi+C,IAAqBD,IACjDj/C,EAAMtB,WAAayD,YAAW+b,EAAYnY,KAAK/E,cAC/ChB,EAAMqE,eAAiBrE,EAAMtB,WAAWE,eACjCoB,GAAMtB,WAAWQ,mBACjBc,GAAMtB,WAAWqH,KAAKzJ,OAAOuG,cAExC,IAAIi9C,GAAoB9gD,EAAoBkf,EAAYnY,KAAK/E,cAAc7D,OACvE4iD,EAAoB7hC,EAAYnY,KAAK/E,aAAaf,KAClD8F,MAAK9E,eAAiB,IACtBjB,EAAME,MAAQA,EAAQ,GAE1BD,EAAS6/C,EAAoB,EAAMC,EAAoBD,IACnD/5C,KAAKhF,kBACAgF,KAAKzJ,OAAOuiB,cAAyD,IAA1C9Y,KAAKzJ,OAAOwF,WAAWb,cAInDjB,EAAMG,SAAS4F,KAAKzJ,OAAOoG,iBAAmB1C,EAAM+F,KAAKzJ,OAAOoG,iBAAmBC,EAHnF3C,EAAMG,SAAS4F,KAAKzJ,OAAOoG,iBAAmB1C,EAAM+F,KAAKzJ,OAAOoG,iBAAmB,KAKlFpF,oBAAkB0C,EAAMtB,aACzBoE,EAAgBrF,EAAKuC,EAAMtB,WAAY,MAAOqH,KAAKzJ,OAAQyJ,KAAKhF,gBAAiBf,IAsB7F,GAlBgD,UAA5C+F,KAAKzJ,OAAOsF,aAAaQ,gBAA0E,UAA5C2D,KAAKzJ,OAAOsF,aAAaQ,kBAC3E2D,KAAK9E,eAAiB,GAAKi+C,IAAqBh/C,GAAS++C,IAC1Dj/C,EAAMqE,eAAiBA,EACvBrE,EAAMtB,WAAayD,YAAWzD,SACvBsB,GAAMtB,WAAWQ,mBACjBc,GAAMtB,WAAWqH,KAAKzJ,OAAOuG,eAExC7C,EAAME,MAAQA,EACV6F,KAAKhF,kBACLf,EAAMG,SAAS4F,KAAKzJ,OAAOoG,iBAAmB1C,EAAM+F,KAAKzJ,OAAOoG,iBAAmBA,EAC9EpF,oBAAkB0C,EAAMtB,aACzBoE,EAAgBrF,EAAKuC,EAAMtB,WAAY,MAAOqH,KAAKzJ,OAAQyJ,KAAKhF,gBAAiBf,KAI7E,MAAZ03B,IAAqB3xB,KAAK9E,eAAiB,GAAKi+C,IAAqBD,IACrEh2C,EAAKhJ,MAAqB,WAAby3B,EAAwBz3B,EAAQA,EAAQ,GAET,WAA5C8F,KAAKzJ,OAAOsF,aAAaQ,eAA6B,CACtD,GAAI7F,GAAcwJ,KAAKzJ,OAAOiB,KAAKhB,qBAAsBC,eACrDuJ,KAAKzJ,OAAOiB,KAAKhB,WAAWA,WAAWiF,KAAOuE,KAAKzJ,OAAOiB,KAAKhB,UACnE0M,GAAKhJ,MAAQ1D,EAAWY,QAG5BG,oBAAkB0C,EAAME,SACxBF,EAAME,MAAQA,GAElBF,EAAMf,iBAAkB,EACxBe,EAAMd,gBACNc,EAAMC,MAAQ,EAOlB,GALoB,QAAhBgJ,EAAK5H,SACL0E,KAAK20C,oBAAuBx6C,MAAOF,EAAME,MAAOxB,WAAYsB,EAAMtB,WAAYE,SAAUoB,EAAMpB,SAC1FuB,SAAUH,EAAMG,SAAUkE,eAAgB/G,oBAAkB0C,EAAMtB,gBAAc0Y,GAAYpX,EAAMtB,WAAWE,SAC7GM,aAAcc,EAAMd,eAEH,WAArB+J,EAAKtD,YAEL,IAAK,GADDq6C,GAAgB/2C,EAAKzE,KAChBvH,EAAI,EAAGA,EAAI+iD,EAAc7iD,OAAQF,IACtC,GAAI+iD,EAAc/iD,GAAGyB,WAAY,CACzBA,EAAaC,EAAcoH,KAAKzJ,OAAQ0jD,EAAc/iD,GAAGyB,WAAWE,SACxE,KAAKtB,oBAAkBoB,IAAeA,EAAWO,gBAAiB,CAC9D,GAAImtC,GAAa1tC,EAAWQ,aAAaqF,QAAQy7C,EAAc/iD,GAC/DyB,GAAWQ,aAAa0D,OAAOwpC,EAAY,IAK3D,MAAOnjC,IAOXmxC,EAAK93C,UAAUm1B,UAAY,SAAUjzB,EAAMvE,EAAOy3B,GAI9C,GAHI3xB,KAAKzJ,OAAOsF,aAAaQ,iBAAmB2D,KAAK00C,wBAA0D,OAAhC10C,KAAK00C,yBAChF10C,KAAK00C,uBAAyB10C,KAAKzJ,OAAOsF,aAAaQ,gBAEtD2D,KAAKhF,iBAAoBzD,oBAAkBkH,KAASvG,OAAOsE,eAAeC,KAAKgC,EAAMuB,KAAKzJ,OAAOuG,cAiB9F2B,GACIvE,GAAS,GACT8F,KAAK9E,cAAgBhB,EACrB8F,KAAK/E,YAAcf,IAGnB8F,KAAK9E,cAAgB8E,KAAKzJ,OAAO4wB,iBACjCnnB,KAAK/E,YAAc+E,KAAKzJ,OAAO4wB,kBAE/BwK,GACA3xB,KAAKzJ,OAAOkK,eAAgB5E,cAAgBQ,eAAgBs1B,KAAc,GAE9E3xB,KAAKzJ,OAAOiB,KAAKuE,WAAW21B,UAAUjzB,EAAMvE,IAG5C8F,KAAKzJ,OAAOiB,KAAKuE,WAAW21B,UAAUjzB,EAAMvE,OAhCiE,CACjH,GAAI+5C,MACAiG,EAAmBl6C,KAAKzJ,OAAOsF,aAAaC,KAC5Cq+C,EAAuBn6C,KAAKzJ,OAAOiB,KAAKqE,aAAaC,IACzDm4C,GAAW57C,KAAKoG,GAChBuB,KAAKzJ,OAAOkK,eAAgB5E,cAAgBC,KAAM,WAAa,GAC/DkE,KAAKzJ,OAAOiB,KAAKiJ,eAAgB5E,cAAgBC,KAAM,WAAa,GAC/DvE,oBAAkBo6B,IACnB3xB,KAAKzJ,OAAOkK,eAAgB5E,cAAgBQ,eAAgBs1B,KAAc,EAE9E,IAAIoiB,IAAmB3hC,aAAc6hC,EAAYt3B,kBAAoBC,kBACrE5c,MAAKzJ,OAAO0Z,O7Br5BD,a6Bq5B4B8jC,eAAgBA,EAAgB75C,MAAOA,IAC9E8F,KAAKzJ,OAAOkK,eAAgB5E,cAAgBC,KAAMo+C,KAAsB,GACxEl6C,KAAKzJ,OAAOiB,KAAKiJ,eAAgB5E,cAAgBC,KAAMq+C,KAA0B,GACjFn6C,KAAKzJ,OAAO82B,YA2BpBgnB,EAAK93C,UAAU69C,iBAAmB,WAC9B,MAAOp6C,MAAKzJ,OAAOiB,KAAKuE,WAAWq+C,oBAMvC/F,EAAK93C,UAAU89C,YAAc,WACzBr6C,KAAKzJ,OAAOiB,KAAKuE,WAAWs+C,eAEhChG,EAAK93C,UAAU04C,aAAe,SAAU93C,GAC/B5F,oBAAkB4F,EAAE+F,KAAKtD,cACY,WAAlCzC,EAAE+F,KAAKtD,YAAYqF,YAA6D,SAAlC9H,EAAE+F,KAAKtD,YAAYqF,aAC3B,UAAlCjF,KAAKzJ,OAAOsF,aAAaC,MAAsD,cAAlCqB,EAAE+F,KAAKtD,YAAYqF,cACxEjF,KAAK62C,YAAY72C,KAAKzJ,OAAOiB,KAAKhB,WAAYwJ,KAAKzJ,OAAOsI,UAAWmB,KAAKzJ,OAAOiH,0BAC7EwC,KAAKzJ,OAAOyI,YAAcgB,KAAKzJ,OAAO0I,oBAAsBe,KAAKzJ,OAAOuY,gBACpE9O,KAAKzJ,OAAOiB,KAAKhB,WAAWY,SAAW4I,KAAKzJ,OAAOkW,qBAAqBrV,QACxE4I,KAAK62C,YAAY72C,KAAKzJ,OAAOiB,KAAKhB,WAAYwJ,KAAKzJ,OAAOkW,qBAAsBzM,KAAKzJ,OAAOiH,2BAU5G62C,EAAK93C,UAAU21B,SAAW,SAAUnrB,EAAUiJ,GACJ,SAAlChQ,KAAKzJ,OAAOsF,aAAaC,MAAqD,UAAlCkE,KAAKzJ,OAAOsF,aAAaC,OAC/B,UAAlCkE,KAAKzJ,OAAOsF,aAAaC,OACzBkE,KAAKk3C,WAAY,EACjBl3C,KAAKm3C,mBAAmB,UAE5Bn3C,KAAKzJ,OAAOiB,KAAKuE,WAAWm2B,SAASnrB,EAAUiJ,KAGhDqkC,KCxiCPiG,GAA+B,WAC/B,QAASA,GAAc/jD,GACnBqM,OAAKC,OAAO03C,iBACZv6C,KAAKzJ,OAASA,EAoBlB,MAZA+jD,GAAc/9C,UAAUwG,cAAgB,WACpC,MAAO,iBAQXu3C,EAAc/9C,UAAU0K,QAAU,aAG3BqzC,KCpBPE,GAA2B,WAC3B,QAASA,GAAUjkD,GACfqM,OAAKC,OAAO43C,aACZz6C,KAAKzJ,OAASA,EACdyJ,KAAKwH,mBAyGT,MA9FAgzC,GAAUj+C,UAAUwG,cAAgB,WAChC,MAAO,aAEXy3C,EAAUj+C,UAAUiL,iBAAmB,WACnCxH,KAAKzJ,OAAOkR,GAAG,eAAgBzH,KAAK06C,aAAc16C,MAClDA,KAAKzJ,OAAOkR,GAAG,kBAAmBzH,KAAK26C,gBAAiB36C,MACxDA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,yBAA0BzH,KAAK46C,oBAAqB56C,MACxEA,KAAKzJ,OAAOkR,GAAG,iBAAkBzH,KAAK66C,eAAgB76C,MACtDA,KAAKzJ,OAAOkR,GAAG,oBAAqBzH,KAAK86C,kBAAmB96C,MAC5DA,KAAKzJ,OAAOkR,GAAG,iBAAkBzH,KAAK+6C,eAAgB/6C,OAM1Dw6C,EAAUj+C,UAAUuL,oBAAsB,WAClC9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IAAI,eAAgBhI,KAAK06C,cACrC16C,KAAKzJ,OAAOyR,IAAI,kBAAmBhI,KAAK26C,iBACxC36C,KAAKzJ,OAAOyR,IAAI,iBAAkBhI,KAAK66C,gBACvC76C,KAAKzJ,OAAOyR,IAAI,oBAAqBhI,KAAK86C,mBAC1C96C,KAAKzJ,OAAOyR,IAAI,iBAAkBhI,KAAK+6C,gBACvC/6C,KAAKzJ,OAAOiB,KAAKwQ,IAAI,yBAA0BhI,KAAK46C,uBAExDJ,EAAUj+C,UAAUq+C,oBAAsB,SAAU13C,GAEhDA,EAAY,SAAI,GAEpBs3C,EAAUj+C,UAAUm+C,aAAe,WAI/B,IAAK,GAHDM,GAAYh7C,KAAKzJ,OAAOsI,UAAUzF,OAAO,SAAU+D,GACnD,OAAQA,EAAEsI,UAAUC,SAAS,iBAExBxO,EAAI,EAAGA,EAAI8jD,EAAU5jD,OAAQF,IAAK,CACvC,GAAI+jD,GAAWD,EAAU9jD,GAAG6e,uBAAuB,uBAC/CmlC,EAAal7C,KAAKzJ,OAAOiB,KAAKwe,oBAAoBglC,EAAU9jD,GAAGqS,aAAa,aAC5E5Q,EAAaP,YAAU,aAAc4H,KAAKzJ,OAAOiB,KAAKgG,wBAAwBtG,KAC9EK,oBAAkBoB,KAAgBpB,oBAAkBoB,IACpDL,EAAgB0H,KAAKzJ,OAAQ2kD,EAAWz8C,KAAMuB,KAAKzJ,OAAOiB,KAAKgG,2BAC/DwC,KAAKzJ,OAAOiB,KAAK4e,gBAAgB9G,OAAO2rC,EAAS,MAI7DT,EAAUj+C,UAAUs+C,eAAiB,SAAU33C,GAC3C,GAAIi4C,GAAmBj4C,EAAKvE,IAAIoX,uBAAuB,sBAClDxe,qBAAkB4jD,EAAiB,KACpCn7C,KAAKzJ,OAAOiB,KAAK4e,gBAAgB9G,OAAO6rC,EAAiB,KAGjEX,EAAUj+C,UAAUu+C,kBAAoB,SAAU53C,GAC9C,IAAI5M,EAAa0J,KAAKzJ,QAGtB,IAAK,GAAIW,GAAI,EAAGA,EAAIgM,EAAKy0B,WAAWvgC,OAAQF,IACxCgM,EAAKy0B,WAAWzgC,GAAGsD,MAAMG,QAAUuI,EAAK5H,QAGhDk/C,EAAUj+C,UAAUo+C,gBAAkB,SAAUz3C,GAC5C,GAAIzE,GAAOyE,EAAKzE,KACZE,EAAMuE,EAAKk4C,cAAcn6B,cAAco6B,gBAEvCC,EAAc,kBADL/jD,oBAAkBkH,EAAK9F,YAAsC8F,EAAKvE,MAA7BuE,EAAK9F,WAAWuB,OACrB,QAAUuE,EAAKtE,MACxDohD,EAAY58C,EAAIyJ,cAAc,IAAMkzC,GAAa71C,UACjD+1C,KAAc71C,MAAMlJ,KAAK8+C,GAAWniD,OAAO,SAAUqiD,GAAa,MAAQA,KAAcH,IACxFI,EAAQF,EAAS,GAAGpkD,OAEpBukD,EAAc,eADDH,EAASv2C,WAAWU,MAAM,EAAG+1C,EAE9ChuC,aAAUxK,EAAKk4C,cAAcn6B,eAAgB06B,IAEjDnB,EAAUj+C,UAAUw+C,eAAiB,SAAU73C,GAC3C,GAAyB,cAArBA,EAAKtD,aAAoD,QAArBsD,EAAKtD,YAAuB,CAChE,GAAIg8C,GAAS14C,EAAKvE,IAAIiH,iBAAiB,eAAe,GAAG2D,aAAa,WAElEsyC,GADQ1rC,SAASyrC,EAAO,IAAM,GACX32C,UACvB/B,GAAKvE,IAAIiH,iBAAiB,eAAe,GAAGyE,aAAa,UAAWwxC,GAGxE,IAAK,GADDC,GAAe97C,KAAKzJ,OAAOiB,KAAKkgB,cAAc7Y,UACzC3H,EAAI,EAAGA,EAAI4kD,EAAa1kD,OAAQF,IACrC4kD,EAAa5kD,GAAGuI,MAAM,GAAGu1B,SAAU,CAErB58B,aAAU,cAAe4H,KAAKzJ,OAAOiB,MAErC,eAAE,IAAQ2N,KAAMnF,KAAKzJ,OAAOiB,KAAKkgB,cAAc7Y,aAQrE27C,EAAUj+C,UAAU0K,QAAU,WAC1BjH,KAAK8H,uBAEF0yC,KCtHP55C,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB3I,OAAO8I,iBAChBC,uBAA2B9E,QAAS,SAAU2E,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAI3D,KAAK2D,GAAOA,EAAEvE,eAAeY,KAAI0D,EAAE1D,GAAK2D,EAAE3D,MACpD0D,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASG,KAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEvE,UAAkB,OAANwE,EAAa7I,OAAOkJ,OAAOL,IAAMG,EAAG3E,UAAYwE,EAAExE,UAAW,GAAI2E,QAYnF66C,GAA4C,SAAU95C,GAEtD,QAAS85C,GAA2BxlD,EAAQylD,GACxC,GAAIt3C,GAAQzC,EAAOxF,KAAKuD,KAAMzJ,EAAQylD,IAAYh8C,IAalD,OAZA0E,GAAMu3C,kBAAmB,EACzBv3C,EAAMw3C,WAAa,EACnBx3C,EAAMy3C,SAAW,EACjBz3C,EAAM03C,aAAc,EAEpB13C,EAAM4yB,YAAc,EACpB5yB,EAAMwvC,UAAY,EAClBxvC,EAAM23C,aAAe,EACrB33C,EAAM43C,gBAAiB,EAEvB53C,EAAMwrB,qBAAsB,EAC5BxrB,EAAM8C,mBACC9C,EAqgBX,MAphBA9D,IAAUm7C,EAA4B95C,GAiBtC85C,EAA2Bx/C,UAAUggD,kBAAoB,WACrD,MAAO,IAAIzV,IAA6B9mC,KAAKzJ,SAEjDwlD,EAA2Bx/C,UAAUqC,cAAgB,SAAU1E,GAC3D,MAAO8F,MAAKzJ,OAAOm+B,cAAct7B,OAAO,SAAU+D,GAAK,MAAOgT,UAAShT,EAAEoM,aAAa,iBAAkB,MAAQrP,IAAU,IAE9H6hD,EAA2Bx/C,UAAUigD,4BAA8B,SAAUtiD,GACzE,MAAO8F,MAAKy8C,iBAAiBviD,GAAO,IAExC6hD,EAA2Bx/C,UAAUmgD,gCAAkC,SAAUxiD,GAC7E,MAAO8F,MAAKy8C,iBAAiBviD,GAAO,GAAO,GAAO,IAEtD6hD,EAA2Bx/C,UAAUkgD,iBAAmB,SAAUviD,EAAOyiD,EAAWC,EAAaC,GAC7F,GAAIC,GAAW3sC,SAASnQ,KAAKzJ,OAAOsI,UAAU,GAAG0K,ahCwG/B,iBgCxGoE,IAClFwzC,EAAgBJ,EAAY38C,KAAKzJ,OAAOkW,qBAAuBzM,KAAKzJ,OAAOm+B,aAC/EqoB,GAAgBF,EAAgB78C,KAAKzJ,OAAOskC,yBAA2BkiB,CACvE,IACI7e,IADa0e,EAAc58C,KAAKzJ,OAAOiH,wBAA0Bu/C,GACxC7iD,EAAQ4iD,EAUrC,OATI98C,MAAKzJ,OAAOyI,YAAcgB,KAAKzJ,OAAO4X,aAAa2J,YAAc,IAM7DomB,EALC0e,EAKa1iD,GAAS8F,KAAKzJ,OAAOyI,WAAagB,KAAKzJ,OAAOgb,gBAAgBrX,GAAOuE,KAAOy/B,EAJ5EhkC,GAAS8F,KAAKzJ,OAAOyI,WAAa+9C,EAAc7iD,GACxD6iD,EAAe7iD,EAAQ4iD,EAAY98C,KAAKzJ,OAAOyI,aAMtDk/B,GAEX6d,EAA2Bx/C,UAAUiL,iBAAmB,WACpDxH,KAAKzJ,OAAOkR,GhC2BW,sBgC3BkBzH,KAAKg9C,mBAAoBh9C,MAClEA,KAAKzJ,OAAOkR,GhCgCO,iBgChCkBzH,KAAKi9C,cAAej9C,OAE7D+7C,EAA2Bx/C,UAAUygD,mBAAqB,SAAU95C,GAC5DA,EAAKg6C,QACLl9C,KAAKk8C,WAAa,EAClBl8C,KAAKs3B,WAAa,EAClBt3B,KAAKk0C,SAAWl0C,KAAKzJ,OAAO4X,aAAa6+B,SAAW,GAE/C9pC,EAAK+4C,mBACVj8C,KAAKi8C,kBAAmB,IAGhCF,EAA2Bx/C,UAAU0gD,cAAgB,SAAU/5C,GAC3D,GAAIu/B,GAAUziC,KAAKzJ,OAAO48B,aAAa/qB,cAAc,aACrD,IAAIpI,KAAKo8C,aAAep8C,KAAKs3B,YAAc,GAAKt3B,KAAKk0C,UAAY,EAAG,CAChE,GAAIl0C,KAAKk0C,SAAWhxC,EAAKwI,MAAQ1L,KAAKzJ,OAAO4X,aAAa6+B,SAAU,CAChE,GAAImQ,MAAqB1a,EAAQpM,UAAYr2B,KAAKzJ,OAAO+/B,gBACrD8mB,EAAYD,EAAkBn9C,KAAKzJ,OAAOsI,UAAUzH,MACpDgmD,GAAYl6C,EAAKwI,QACjB0xC,EAAYD,GACPj6C,EAAKwI,MAAQyxC,IAEtBn9C,KAAKs3B,WAAa8lB,EAAYp9C,KAAKzJ,OAAOsI,UAAUzH,OACpD4I,KAAKk0C,SAAWkJ,OAEsC,QAAjDp9C,KAAKzJ,OAAO8mD,KAAKxhD,aAAaQ,iBAA2E,IAA/C2D,KAAKzJ,OAAO8mD,KAAKthD,WAAWb,gBAAuE,IAA/C8E,KAAKzJ,OAAO8mD,KAAKthD,WAAWb,iBAC/I8E,KAAKs3B,YAAc,EACnBt3B,KAAKk0C,UAAY,EAErBl0C,MAAKo8C,aAAc,EAEnBp8C,KAAKkwB,sBACLlwB,KAAKs3B,WAAa,EAClBt3B,KAAKk0C,SAAWl0C,KAAKzJ,OAAO4X,aAAa6+B,SAAW,GAExD9pC,EAAKo0B,WAAat3B,KAAKs3B,WACvBp0B,EAAKgxC,SAAWl0C,KAAKk0C,UAEzB6H,EAA2Bx/C,UAAU4zB,cAAgB,SAAU70B,GAC3D,GAAIoJ,GAAQ1E,IACNA,MAAKzJ,OAAOC,qBAAsBC,oBAAyD4a,KAA1CrR,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAClFtnC,KAAKzJ,OAAOC,WAAWA,WAAW8rB,SAAqD,KAA1CtiB,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAAgBtwC,EAAgBgJ,KAAKzJ,QAuBvH0L,EAAO1F,UAAU4zB,cAAc1zB,KAAKuD,KAAM,OAtB1CA,KAAKzJ,OAAO+E,GAAQ,aAAc0E,KAAKs9C,YAAat9C,MACpDA,KAAKzJ,OAAO+E,GAAQ,wBAAyB0E,KAAKu9C,mBAAoBv9C,MACtEA,KAAKyW,GAAK,WACN/R,EAAM84C,UAAUC,SAAS,SAAUC,GAAc,MAAOh5C,GAAMi5C,gBAAgBD,IAAgBh5C,EAAMk5C,kBAAmBl5C,EAAMnO,QAC7HmO,EAAMnO,OAAOyR,IAAI,gBAAiBtD,EAAM+R,KAE5CzW,KAAKzJ,OAAOiR,iBAAiB,YAAaxH,KAAK69C,eAAelkC,KAAK3Z,OACnEA,KAAKzJ,OAAOiR,iBAAiB,cAAexH,KAAK89C,iBAAiBnkC,KAAK3Z,OACvEA,KAAKzJ,OAAO+E,GAAQ,qBAAsB0E,KAAK+9C,mBAAoB/9C,MACnEA,KAAKzJ,OAAOkR,GAAG,gBAAiBzH,KAAKyW,GAAIzW,MACzCA,KAAKzJ,OAAOiR,iBhC1GI,iBgC0GoCxH,KAAKg+C,iBAAiBrkC,KAAK3Z,OAC/EA,KAAKzJ,OAAO+E,GAAQ,mCAAoC0E,KAAKurB,UAAWvrB,MACxEA,KAAKzJ,OAAO+E,GAAQ,kCAAmC0E,KAAK80C,SAAU90C,MACtEA,KAAKzJ,OAAO+E,GAAQ,8BAA+B0E,KAAKi+C,mBAAoBj+C,MAC5EA,KAAKzJ,OAAO+E,GAAQ,aAAc0E,KAAKk+C,iBAAkBl+C,MACzDA,KAAKzJ,OAAO+E,GAAQ,mBAAoB0E,KAAKknC,QAASlnC,MACtDA,KAAKzJ,OAAO+E,GAAQ,6BAA8B0E,KAAKm+C,WAAYn+C,MACnEA,KAAKzJ,OAAO+E,GAAQ,6BAA8B0E,KAAKo+C,yBAA0Bp+C,MACjFA,KAAKzJ,OAAO+E,GAAQ,iCAAkC0E,KAAKq+C,YAAar+C,MACxEA,KAAKzJ,OAAO+E,GAAQ,qBAAsB0E,KAAKs+C,UAAWt+C,QAMlE+7C,EAA2Bx/C,UAAU+hD,UAAY,SAAUnhD,GAEvD8E,EAAO1F,UAA0B,iBAAEE,KAAKuD,KAAM7C,IAElD4+C,EAA2Bx/C,UAAU+gD,YAAc,SAAUngD,GAEzD,GADA8E,EAAO1F,UAAU+gD,YAAY7gD,KAAKuD,KAAM7C,KAClC6C,KAAKzJ,OAAOC,qBAAsBC,oBAAyD4a,KAA1CrR,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAClFtnC,KAAKzJ,OAAOC,WAAWA,WAAW8rB,SAAqD,KAA1CtiB,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAAgBtwC,EAAgBgJ,KAAKzJ,SAAS,CAChI,IAAKgB,oBAAkB4F,EAAEuO,OAAQ,CAG7B,GAFA1L,KAAKy2B,aAAet5B,EAAEuO,MAElB1L,KAAKzJ,OAAOo3B,gBAAkBxwB,EAAEuO,MAAQxT,OAAOC,KAAK6H,KAAKzJ,OAAOC,YAAYY,OAAQ,CACpF,GAAIoT,GAAQxK,KAAKzJ,OAAOwY,2BACpB/O,KAAKu+C,gBAAgBv+C,KAAKzJ,OAAOY,QAAQC,OAAS,GAAK,KAAO,OAC9DguB,EAAUplB,KAAKzJ,OAAO+/B,eAAiBn5B,EAAEuO,MACxC1L,KAAKzJ,OAAO+/B,eAAiBt2B,KAAKzJ,OAAO4X,aAAa6+B,QAC3D3uC,YAAS,aAAc2B,MAAMw+C,iBAAiBp5B,EAAQ5a,GAErDxK,KAAKzJ,OAAOwY,4BAA+B/O,KAAKzJ,OAAOo3B,gBACxDtvB,WAAS,aAAc2B,MAAMw+C,iBAAiBx+C,KAAKzJ,OAAO+/B,eAAiBn5B,EAAEuO,MAAO,UAGtFnU,oBAAkB4F,EAAEyC,cAA6C,gBAA7BzC,EAAEyC,YAAYqF,YAAkCjF,KAAKkwB,uBAA6C,IAArBlwB,KAAKs3B,YAAyC,IAApBt3B,KAAKs3B,YAA8C,IAA1Bt3B,KAAoB,kBAC1LA,KAAKy+C,SAASpoB,UAAY,EAC1Br2B,KAAKkwB,qBAAsB,KAIvC6rB,EAA2Bx/C,UAAU6zB,YAAc,WAC/CnuB,EAAO1F,UAAU6zB,YAAY3zB,KAAKuD,MAC5BA,KAAKzJ,OAAOC,qBAAsBC,oBAAyD4a,KAA1CrR,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAClFtnC,KAAKzJ,OAAOC,WAAWA,WAAW8rB,SAAqD,KAA1CtiB,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAAgBtwC,EAAgBgJ,KAAKzJ,UACvH8H,WAAS,WAAY2B,MAAMD,QAAQ2+C,eAAgB,EACnD1+C,KAAKw9C,UAAY,GAAImB,IAAyBtgD,WAAS,WAAY2B,MAAM8Q,QAASzS,WAAS,WAAY2B,MAAMD,SAC7GC,KAAKy+C,SAAWz+C,KAAK4+C,WAAW10C,aAGxC6xC,EAA2Bx/C,UAAUsiD,cAAgB,SAAUC,EAAMC,EAAS1X,EAAM2X,GAChF,MAAKh/C,MAAKzJ,OAAOC,qBAAsBC,oBAAyD4a,KAA1CrR,KAAKzJ,OAAOC,WAAWA,WAAW8wC,MAChFtnC,KAAKzJ,OAAOC,WAAWA,WAAW8rB,SAAqD,KAA1CtiB,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAAetwC,EAAgBgJ,KAAKzJ,QACnHyJ,KAAKs8C,gBACLt8C,KAAKs8C,gBAAiB,EACft8C,KAAKq8C,eAGZr8C,KAAKq8C,aAAep6C,EAAO1F,UAAUsiD,cAAcpiD,KAAKuD,KAAM8+C,EAAMC,EAAS1X,EAAM2X,GAC5E/8C,EAAO1F,UAAUsiD,cAAcpiD,KAAKuD,KAAM8+C,EAAMC,EAAS1X,EAAM2X,IAInE/8C,EAAO1F,UAAUsiD,cAAcpiD,KAAKuD,KAAM8+C,EAAMC,EAAS1X,EAAM2X,IAG9EjD,EAA2Bx/C,UAAUshD,eAAiB,WAGlD,GAAI79C,KAAKzJ,OAAOsI,UAAUzH,SAAW4I,KAAkB,gBAAMzI,oBAAkByI,KAAKzJ,OAAOqI,cAAc,IAAK,CAC1G,GAAI6gC,GAASz/B,KAAKzJ,OAAOqI,cAAc,GAAGshC,wBAAwBH,IAC9Dkf,EAAUj/C,KAAKzJ,OAAOua,QAAQovB,wBAAwBH,GAEtD//B,MAAkB,cADlBy/B,EAAS,EACaz/B,KAAKzJ,OAAOqI,cAAc,GAAGshC,wBAAwBH,IAAMkf,EAG3Dj/C,KAAKyiC,QAAQvC,wBAAwBH,IACvD//B,KAAKzJ,OAAOqI,cAAc,GAAGshC,wBAAwB9a,OAGjEnjB,EAAO1F,UAAsB,UAAEE,KAAKuD,OAExC+7C,EAA2Bx/C,UAAUuhD,iBAAmB,SAAU56C,GAE9DjB,EAAO1F,UAAqB,YAAEE,KAAKuD,KAAMkD,IAE7C64C,EAA2Bx/C,UAAUwhD,mBAAqB,SAAU76C,GAChE,IAAIlD,KAAKzJ,OAAO63B,OAAhB,CAKI72B,oBAAkByI,KAAKk/C,SAAsB,iBAC7Cl/C,KAAKk/C,SAAsB,cAAIl/C,KAAKw9C,UAAuB,gBAE3DjmD,oBAAkByI,KAAKzJ,OAAwB,gBAAEsO,eAAe9I,aAAsC,IAAvBmH,EAAKhI,eACpF3D,oBAAkByI,KAAKzJ,OAAwB,gBAAEsO,eAAe9I,WAAwB,eACxFkG,EAAO1F,UAA0B,iBAAEE,KAAKuD,KAAMkD,KAGtD64C,EAA2Bx/C,UAAU8hD,YAAc,SAAU7T,GACzDA,EAAO/qC,MAAQO,KAAKm/C,iBAExBpD,EAA2Bx/C,UAAU4iD,cAAgB,WAEjD,IAAK,GADD1/C,MACKvI,EAAI,EAAGA,EAAI8I,KAAKzJ,OAAOY,QAAQC,OAAQF,IAC5CuI,EAAMpH,KAAK2H,KAAKo/C,aAAap/C,KAAKzJ,OAAOY,QAAQD,IAErD,OAAOuI,IAEXs8C,EAA2Bx/C,UAAU6iD,aAAe,SAAUh2C,EAAKi2C,EAAOC,EAAUC,EAASC,EAAQC,GACjG,GAAIn7C,IACA0wB,QAAW5rB,EAAI4rB,QACf0qB,YAAenoD,oBAAkB6R,EAAI4G,OAAS5G,EAAIiH,UAClDsvC,YAAepoD,oBAAkB6R,EAAIiH,UACrCuvC,MAASP,EACT3/C,OAAU0J,EACVk2C,SAAa/nD,oBAAkB+nD,GAAuB1jC,WAASikC,KAApBP,EAC3CC,QAAWA,EACXp7B,SAAY/a,EAAI+a,SAChB27B,aAAgB12C,EAAI22C,iBAAmB32C,EAAI22C,kBAC3CN,eAAkBr2C,EAAI22C,iBAAmB32C,EAAI22C,mBAAqB1hD,WAAS+K,EAAI4G,MAAOyvC,GAK1F,QAHIn7C,EAAIo7C,YAAkC,aAApBp7C,EAAI5E,OAAOyD,MAAuBmB,EAAI6f,YACxD7f,EAAIpK,MAAQslD,GAET,GAAIQ,QAAK17C,IAEpBy3C,EAA2Bx/C,UAAUgvB,UAAY,SAAUpuB,GACvD6C,KAAqB,eAAI7C,EAAEjD,KAC3B,IAAI4/C,GAAW,yBAA2B38C,EAAEjD,MAAQ,KAChDA,EAAQ8F,KAAKzJ,OAAO48B,aAAa/qB,cAAc0xC,GAAU/yC,SACzDgC,EAAU/I,KAAKzJ,OAAOiH,wBAAwBtD,EAClDiD,GAAEsB,KAAOsK,GAEbgzC,EAA2Bx/C,UAAUu4C,SAAW,SAAU5xC,GACtD,GAEIyyC,IAAYt5C,eAAgB2D,KAAKm0C,YAAal5C,YAAa+E,KAAK/E,YAAa26C,aAAc51C,KAAK41C,aACpG51C,MAAKzJ,OAAO0Z,OAAO,mBAAoB0lC,GACvC31C,KAAKm0C,YAAcwB,EAAQt5C,eAC3B2D,KAAK/E,YAAc06C,EAAQ16C,YAC3B+E,KAAK41C,aAAeD,EAAQC,YAC5B,IAAIzwC,GAAOnF,KAAKzJ,OAAOsI,UACnBm6C,EAAiB7zC,EAAK/N,QAAU+N,EAAK,GAAGoE,aAAa,iBAAmB,EACxE0vC,EAAgB9zC,EAAK/N,QAAU+N,EAAKA,EAAK/N,OAAS,GAAGmS,aAAa,iBAAmB,EACrF02C,EAAcjgD,KAAKzJ,OAAO4wB,kBAAoB6xB,GAAkBh5C,KAAKzJ,OAAO4wB,kBAAoB8xB,CACzE,SAArBj5C,KAAKm0C,aAA8C,WAArBn0C,KAAKm0C,cACrCn0C,KAAU,OAAI,GAEO,QAArBA,KAAKm0C,aAA8C,WAArBn0C,KAAKm0C,cAChCn0C,KAAK/E,cAAqC,IAAtB+E,KAAK/E,cAA0D,IAAlC+E,KAAKzJ,OAAO4wB,kBAA4B84B,IAC5Fh+C,EAAO1F,UAAmB,eAAEE,KAAKuD,KAAMkD,IAG/C64C,EAA2Bx/C,UAAU2jD,iBAAmB,WAEpDj+C,EAAO1F,UAAqB,YAAEE,KAAKuD,OAEvC+7C,EAA2Bx/C,UAAU2hD,iBAAmB,WAGpDl+C,KAAKzJ,OAAO0Z,OAAO,uBACO,QAArBjQ,KAAKm0C,aAA8C,WAArBn0C,KAAKm0C,cAA6Bn0C,KAAU,OAC3EiC,EAAO1F,UAAqB,YAAEE,KAAKuD,OAG3C+7C,EAA2Bx/C,UAAU0hD,mBAAqB,WACtD,GACIxb,GAAUziC,KAAKzJ,OAAO48B,aAAa/qB,cAAc,aACjDpI,MAAU,OAAKyiC,EAAQr6B,cAAc,iBACrCpI,KAAKo8C,aAAc,IAG3BL,EAA2Bx/C,UAAU4hD,WAAa,SAAUj7C,GAExDjB,EAAO1F,UAAoB,WAAEE,KAAKuD,KAAMkD,IAE5C64C,EAA2Bx/C,UAAU6hD,yBAA2B,SAAUl7C,GAEtEjB,EAAO1F,UAAgC,uBAAEE,KAAKuD,KAAMkD,IAExD64C,EAA2Bx/C,UAAU4jD,cAAgB,WACjD,GACI1d,GAAUziC,KAAKzJ,OAAO48B,aAAa/qB,cAAc,aACjDpI,MAAU,QAAMyiC,EAAQr6B,cAAc,iBACtCpI,KAAKzJ,OAAO63B,QAAS,EACrBpuB,KAAKzJ,OAAOwF,WAAW21B,UAAU,KAAM1xB,KAAKzJ,OAAO8mD,KAAKthD,WAAWb,iBAG3E6gD,EAA2Bx/C,UAAU2qC,QAAU,SAAUzoC,GAErDwD,EAAO1F,UAAwB,eAAEE,KAAKuD,KAAMvB,IAEhDs9C,EAA2Bx/C,UAAUyhD,iBAAmB,SAAU96C,GAC9D,GAAyB,QAArBA,EAAKtD,YAAuB,CAC5B,GAAI+1C,IAAYt5C,eAAgB2D,KAAKm0C,YAAal5C,YAAa+E,KAAK/E,YAAa26C,aAAc51C,KAAK41C,aACpG51C,MAAKzJ,OAAO0Z,OAAO,mBAAoB0lC,GACvC31C,KAAKm0C,YAAcwB,EAAQt5C,eAC3B2D,KAAK/E,YAAc06C,EAAQ16C,YAC3B+E,KAAK41C,aAAe51C,KAAKzJ,OAAO8mD,KAAKthD,WAAWb,cAGpD+G,EAAO1F,UAAwB,eAAEE,KAAKuD,KAAMkD,IAEhD64C,EAA2Bx/C,UAAUqhD,gBAAkB,WACnD,GAAIl5C,GAAQ1E,IACZ,OAAO,UAAU8Q,EAASoM,EAAStD,EAAWzc,EAAGijD,EAAS98C,GAEtD,IAAKoB,EAAMnO,OAA0B,oBAAG,CAEhCgQ,UAAQ85C,OAASD,GAAW98C,IAAUoB,EAAkB,cACxDA,EAAMnO,OAAOmgB,aAEjB,IAAI4pC,GAAyB,MAAjBpjC,EAAQqjC,KAChB/tB,EAAI9tB,EAAM65C,gBAAgB+B,EAAQ57C,EAAM87C,WAAWC,mBAAmB,GAAK,EAAI/7C,EAAMkT,SAAS8oC,cAAc,GAC1G,EACN,IAAIJ,EAAO,CACP,GAAIzhB,GAAM3mC,OAAOC,KAAKuM,EAAM87C,WAAWG,UAAUvpD,OAASsN,EAAMkT,SAAS8oC,cAActpD,OACnFwpD,EAAUl8C,EAAM87C,WAAWG,SAAS9hB,EAAM,EAC9CrM,GAAIA,EAAIouB,EAAUA,EAAUpuB,EAE3B9tB,EAAMnO,OAAOo3B,iBACdjpB,EAAMm8C,WAAWC,YAAYtuB,EAAG9tB,EAAMw3C,YAClCx3C,EAAMnO,OAAOwY,4BACbrK,EAAMq8C,OAAOF,WAAWC,YAAYtuB,EAAG,OAM3DupB,EAA2Bx/C,UAAUohD,gBAAkB,SAAUD,GAC7D19C,KAAsB,iBACtB,IAAIqnC,GAAOqW,EAAWsD,SAClBC,EAAYjhD,KAAKzJ,OAAO4X,aAAa6+B,SAAW13B,KAAKC,KAAKvV,KAAKzJ,OAAO4X,aAAa6+B,SAAW,GAC9FvK,EAAUziC,KAAKzJ,OAAO48B,aAAa/qB,cAAc,cACjD6qB,EAAeguB,EAAYjhD,KAAKzJ,OAAO+/B,eACvC4qB,EAAYxD,EAAWyD,OAAOphB,IAAM//B,KAAKk8C,WAAc,EACvDkF,EAAa9rC,KAAKC,KAAKmoC,EAAWyD,OAAOphB,IAAM//B,KAAKk8C,aAAejpB,EAEnEtc,EAAkB3W,KAAKzJ,OAAOogB,eAElC,IAAIuqC,GAAsC,UAAzBxD,EAAW9jC,WAAkD,SAAzB8jC,EAAW9jC,UAAuB,CACnF,GAAIynC,KAAYrhD,KAAKzJ,OAAO6uB,OAAOngB,WAAWzG,QAAQ,KAAO,EAAIwB,KAAKzJ,OAAO6uB,OACzEplB,KAAKzJ,OAAOua,QAAQovB,wBAAwB9a,QAC5ClrB,KAAYuoC,EAAQpM,UAAYr2B,KAAKzJ,OAAO+/B,gBAC1ChhB,KAAKC,KAAK8rC,EAAUrhD,KAAKzJ,OAAO+/B,gBAChCt2B,KAAKzJ,OAAO4X,aAAa6+B,QAO/B,IANA9yC,EAASA,EAAQ,EAAKA,EAAQ,EACzB3C,oBAAkByI,KAAqB,oBAAkC,IAA5BA,KAAqB,kBAAY9F,IAAU8F,KAAqB,mBAC9G9F,EAAQ8F,KAAqB,kBAEjCA,KAAKs3B,WAAap9B,EAClB8F,KAAKk0C,SAAWh6C,EAAQ8F,KAAKzJ,OAAO4X,aAAa6+B,SAC7ChtC,KAAKk0C,SAAWl0C,KAAKy2B,aAAc,CACnC,GAAI6qB,GAAUthD,KAAKy2B,aAAe,EAC9B8qB,EAAUvhD,KAAKk0C,SAAWoN,CAC9BthD,MAAKk0C,SAAWoN,EAChBthD,KAAKs3B,WAAct3B,KAAKs3B,WAAaiqB,EAAW,EAAI,EAAKvhD,KAAKs3B,WAAaiqB,EAE3E5qC,EAAgBvf,QAAWuf,EAAgB,GAAa,OAAK3W,KAAKzJ,OAAO4X,aAAa6+B,SAAW,GAC/Fr2B,EAAgB,GAAa,MAAI3W,KAAKs3B,WAAet3B,KAAKzJ,OAAO4X,aAAa6+B,SAAW,IAC3FhtC,KAAKs3B,WAAa3gB,EAAgB,GAAa,MAAK3W,KAAKzJ,OAAO4X,aAAa6+B,SAAW,EACxFhtC,KAAKk0C,SAAWl0C,KAAKs3B,WAAat3B,KAAKzJ,OAAO4X,aAAa6+B,SAG/D,IAAIwU,GAAQlsC,KAAKC,KAAKmoC,EAAWyD,OAAOphB,IAAM//B,KAAKzJ,OAAO+/B,eAC1DkrB,IAAgBxhD,KAAKzJ,OAAO4X,aAAa6+B,QACzC,IAAIyU,GAAa,CAOjB,IANKlqD,oBAAkByI,KAAKzJ,OAAOsI,UAAU2iD,KACxCjqD,oBAAkByI,KAAKzJ,OAAO48B,aAAavtB,iBAAiB,iBAAiB47C,MAG9EC,GAFWzhD,KAAKzJ,OAAO48B,aAAavtB,iBAAiB,iBAAiB47C,GACjEp5C,cAAc,MAAMmB,aAAa,UAGvB,IAAfk4C,EACIzhD,KAAKzJ,OAAO8I,oBACZW,KAAKk8C,WAAawB,EAAWyD,OAAOphB,IAAmC,EAA7B//B,KAAKzJ,OAAO+/B,eAGtDt2B,KAAKk8C,WAAawB,EAAWyD,OAAOphB,QAGvC,CACD,GAAI3a,GAASplB,KAAKzJ,OAAO+/B,cACzBt2B,MAAKk8C,WAAcwB,EAAWyD,OAAOphB,IAAOkhB,EAAY77B,EAAU,EAC9Ds4B,EAAWyD,OAAOphB,IAAOkhB,EAAY77B,EAAU,GAAK,OAG3D,IAAIg8B,GAAwC,UAAzB1D,EAAW9jC,WAAkD,SAAzB8jC,EAAW9jC,UAAuB,CAC1F,GAAIujC,MAAqB1a,EAAQpM,UAAYr2B,KAAKzJ,OAAO+/B,gBACrDorB,IAAe1hD,KAAqB,iBAAIA,KAAKzJ,OAAO4X,aAAa6+B,SAAYhtC,KAAKy2B,aACjFl/B,qBAAkByI,KAAqB,oBAAkC,IAA5BA,KAAqB,kBACnEm9C,IAAoBn9C,KAAqB,kBAAM0hD,IAC/CvE,EAAkBn9C,KAAqB,iBAE3C,IAAIo9C,GAAYD,EAAkBn9C,KAAKzJ,OAAO4X,aAAa6+B,QACvDoQ,GAAYp9C,KAAKy2B,eACjB2mB,EAAYD,GACPn9C,KAAKy2B,aAAe0mB,IAE7Bn9C,KAAKs3B,WAAcoqB,EAA8DvE,EAAhDC,EAAYp9C,KAAKzJ,OAAO4X,aAAa6+B,SACtEhtC,KAAKk0C,SAAWkJ,EACZzmC,EAAgBvf,QAAU4I,KAAKs3B,WAAa3gB,EAAgB,GAAa,OACvE3W,KAAKs3B,WAAa3gB,EAAgB,GAAa,MAAM3W,KAAKzJ,OAAO4X,aAAa6+B,SAAW,IAC3FhtC,KAAKs3B,WAAa3gB,EAAgB,GAAa,MAAK3W,KAAKzJ,OAAO4X,aAAa6+B,SAAW,GAExF0Q,EAAWyD,OAAOphB,IAAO//B,KAAKzJ,OAAO+/B,eAAiBt2B,KAAKy2B,aAC3Dz2B,KAAKk8C,WAAal8C,KAAK6+C,cAAcnB,EAAWyD,OAAOphB,IAAK0C,EAAQvC,wBAAwB9a,QAGxFplB,KAAKzJ,OAAO8I,oBACZW,KAAKk8C,WAAawB,EAAWyD,OAAOphB,IAAmC,EAA7B//B,KAAKzJ,OAAO+/B,eAGtDt2B,KAAKk8C,WAAawB,EAAWyD,OAAOphB,IAIhD,GAAMqhB,GAAe1D,EAAWyD,OAAOphB,IAAO//B,KAAKzJ,OAAO+/B,eAAiBt2B,KAAKy2B,iBAChC,UAAzBinB,EAAW9jC,WAAkD,SAAzB8jC,EAAW9jC,WAChE5Z,KAAKzJ,OAAOC,qBAAsBC,oBAAyD4a,KAA1CrR,KAAKzJ,OAAOC,WAAWA,WAAW8wC,MAC7EtnC,KAAKzJ,OAAOC,WAAWA,WAAW8rB,SAAqD,KAA1CtiB,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAAetwC,EAAgBgJ,KAAKzJ,QAAU,CACrI,GAAIorD,GAAW3hD,KAAK2X,YAActZ,WAAS,kBAAmB2B,MAAMkC,MAAMlC,MAAO09C,EAAW9jC,UAAWytB,EAAMqW,EAAWyD,QACxHnhD,MAAK4hD,aAAeD,EACpB3hD,KAAKzJ,OAAOsrD,uBAAuB7hD,KAAKzJ,OAAOwY,2BAA6B4yC,EAASjB,iBACrF,IAAI1oC,GAAO2pC,EAAS9pC,WAAa8pC,EAASG,SAAWH,EAAS5pC,SAASC,KAAO2pC,EAAS3pC,IACvFhY,MAAKzJ,OAAOkK,eAAgB0N,cAAgB2J,YAAaE,KAAU,GACnEhY,KAAKJ,YAAc,gBACU,UAAzB89C,EAAW9jC,WAAkD,SAAzB8jC,EAAW9jC,YAC/C+nC,EAAS1Q,MAA2B,0BAAnB0Q,EAAS1Q,MAAoC,gBAAkB0Q,EAAS1Q,OAE7FjxC,KAAKzJ,OAAO0Z,OAAO0xC,EAAS1Q,OAASrxC,YAAa,gBAAiBwnC,YAAaua,EAAU7F,aAAc4B,EAAW5B,iBAG3HC,EAA2Bx/C,UAAUwlD,cAAgB,SAAUxgD,EAAQygD,EAAU7kD,GAC7E,GAAIq+B,GAAWx7B,KAAKzJ,OAAOo3B,cAC3B,IAAK3tB,KAAKzJ,OAAOC,qBAAsBC,oBAAyD4a,KAA1CrR,KAAKzJ,OAAOC,WAAWA,WAAW8wC,MAChFtnC,KAAKzJ,OAAOC,WAAWA,WAAW8rB,SAAqD,KAA1CtiB,KAAKzJ,OAAOC,WAAWA,WAAW8wC,KAAetwC,EAAgBgJ,KAAKzJ,SAAWyJ,KAAKzJ,OAAOo3B,eAC1ItvB,WAAS,mBAAoBlB,KAC7B6C,KAAKs8C,gBAAiB,GAEtB9gB,GAAYjkC,oBAAkByI,KAAKJ,eAAwE,IAAxDvB,WAAS,eAAgB2B,MAAMxB,QAAQ,cAC1FH,WAAS,eAAgB2B,MAAM3H,KAAK,YACpC2H,KAAKJ,YAAc,YAEvBqC,EAAO1F,UAAUwlD,cAActlD,KAAKuD,KAAMuB,EAAQygD,EAAU7kD,IACA,IAAxDkB,WAAS,eAAgB2B,MAAMxB,QAAQ,cACvCH,WAAS,eAAgB2B,MAAMnD,OAAOwB,WAAS,eAAgB2B,MAAMxB,QAAQ,YAAa,GAC1FwB,KAAKJ,YAAmC,aAArBI,KAAKJ,gBAA6ByR,GAAYrR,KAAKJ,cAEtE47B,GAAcx7B,KAAKi8C,kBAAwC,IAApBj8C,KAAKk8C,WAK5Cl8C,KAAKi8C,kBAAmB,GAJxBj8C,KAAKk8C,WAAal8C,KAAKk8C,WAAa,EAAI,EAAIl8C,KAAKk8C,WACjD79C,WAAS,aAAc2B,MAAM8gD,YAAY,EAAG9gD,KAAKk8C,iBAMpD,CACD,GAAI7U,GAAOlqC,EAAEiqC,YAAY6a,cAAoD,MAApC9kD,EAAEiqC,YAAY6a,aAAa1B,MAChEliD,WAAS,cAAe2B,MAAMgY,MAAQ3Z,WAAS,cAAe2B,MAAMgY,OAAS7a,EAAEiqC,YAAYpvB,KAC3F3Z,WAAS,cAAe2B,MAAQ7C,EAAEiqC,YAClC8a,EAAU7a,EAAKqZ,cAAc,GAAM,EACnCyB,EAAUniD,KAAKu+C,gBAAgB2D,GAC/B13C,MAAQ,EACZ,IAAIxK,KAAKzJ,OAAOwY,2BAA4B,CACxC/O,KAAK+gD,OAAOF,WAAWC,YAAYqB,EAAS,EAC5C,IAAI3gC,GAAS6lB,EAAKqZ,aAClBl2C,GAAQxK,KAAKu+C,gBAAgB/8B,EAAOA,EAAOpqB,OAAS,IAAM4I,KAAKu+C,gBAAgB/8B,EAAO,GAAK,GAAK,GAChGxhB,KAAK+gD,OAAOF,WAAWuB,gBAAgB53C,GAE3CxK,KAAK6gD,WAAWuB,gBAAgB53C,EAAQjE,UAAQ85C,MAA8B,SAAtB95C,UAAQ8gC,KAAKgb,OACrE9gD,EAASvB,KAAKzJ,OAAOmT,cAAc,UAC5BsB,YAAYg3C,EAEnBhiD,MAAKsiD,WAAWl6C,cAAc,SAAgB,YAAE7G,GAC3CvB,KAAKi8C,kBAAwC,IAApBj8C,KAAKk8C,WAK/Bl8C,KAAKi8C,kBAAmB,GAJxBj8C,KAAKk8C,WAAal8C,KAAKk8C,WAAa,EAAI,EAAIl8C,KAAKk8C,WACjD79C,WAAS,aAAc2B,MAAM8gD,YAAYqB,EAASniD,KAAKk8C,aAK3D9nC,WAAS,WAAYpU,KAAK4hD,aAAe5hD,KAAK4hD,aAAeva,EAAMrnC,MAC7C,kBAAlB7C,EAAEyC,aAAuE,MAApCzC,EAAEiqC,YAAY6a,aAAa1B,MAChEvgD,KAAKzJ,OAAO0Z,OhC9XP,cgCmYThO,GAAO1F,UAAmB,UAAEE,KAAKuD,KAAM7C,EAEnC6C,MAAU,QAAMA,KAAKzJ,OAAO48B,aAAa/qB,cAAc,cAAcA,cAAc,gBACxD,QAArBpI,KAAKm0C,aAA8C,WAArBn0C,KAAKm0C,cACjCn0C,KAAK41C,cAAgB51C,KAAKs3B,WAC1Bt3B,KAAKmgD,gBAEAngD,KAAK/E,aAAe+E,KAAK/E,aAAe,IAC7C+E,KAAU,OAAI,EACdA,KAAKzJ,OAAO63B,QAAS,IAIjCpuB,KAAKkgD,mBACLj+C,EAAO1F,UAAoB,WAAEE,KAAKuD,MAClCiC,EAAO1F,UAAmC,0BAAEE,KAAKuD,QAGzD+7C,EAA2Bx/C,UAAUuL,oBAAsB,WACnD9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IAAI,aAAchI,KAAKs9C,aACnCt9C,KAAKzJ,OAAOyR,IAAI,gBAAiBhI,KAAKyW,IACtCzW,KAAKzJ,OAAOyR,IAAI,qBAAsBhI,KAAK+9C,oBAC3C/9C,KAAKzJ,OAAOyR,IAAI,YAAahI,KAAK69C,gBAClC79C,KAAKzJ,OAAOyR,IAAI,cAAehI,KAAK89C,kBACpC99C,KAAKzJ,OAAOyR,IhC9bW,sBgC8bmBhI,KAAKg9C,oBAC/Ch9C,KAAKzJ,OAAOyR,IhCzbO,iBgCybmBhI,KAAKi9C,eAC3Cj9C,KAAKzJ,OAAOyR,IAAI,mCAAoChI,KAAKurB,WACzDvrB,KAAKzJ,OAAOyR,IAAI,kCAAmChI,KAAK80C,UACxD90C,KAAKzJ,OAAOyR,IAAI,8BAA+BhI,KAAKi+C,oBACpDj+C,KAAKzJ,OAAOyR,IAAI,aAAchI,KAAKk+C,kBACnCl+C,KAAKzJ,OAAOyR,IAAI,mBAAoBhI,KAAKknC,SACzClnC,KAAKzJ,OAAOyR,IAAI,6BAA8BhI,KAAKm+C,YACnDn+C,KAAKzJ,OAAOyR,IAAI,6BAA8BhI,KAAKo+C,0BACnDp+C,KAAKzJ,OAAOyR,IAAI,iCAAkChI,KAAKq+C,aACvDr+C,KAAKzJ,OAAOyR,IAAI,qBAAsBhI,KAAKs+C,aAExCvC,GACTwG,0BAEE5D,GAA0C,SAAU18C,GAEpD,QAAS08C,KACL,GAAIj6C,GAAmB,OAAXzC,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,IAKhE,OAJA0E,GAAM89C,YAAa,EACnB99C,EAAM+9C,OAAS,EACf/9C,EAAMg+C,QAAU,EAChBh+C,EAAMi+C,MAAQ,EACPj+C,EAkFX,MAzFA9D,IAAU+9C,EAA0B18C,GASpC08C,EAAyBpiD,UAAUkhD,SAAW,SAAUmF,EAAUC,EAAiBC,GAI/E,GAFA7gD,EAAO1F,UAAuB,cAAI8B,WAAS,UAAW2B,MAAM2K,UAAUu1B,wBACtEzd,eAAa1Y,IAAI1L,WAAS,UAAW2B,MAAM2K,UAAW,SAAU3K,KAAK+iD,sBAAsBH,EAAUC,EAAiBC,GAAW9iD,MAC7H3B,WAAS,UAAW2B,MAAMgjD,iBAAkB,CAE5C/gD,EAAO1F,UAA8B,qBAAI8B,WAAS,UAAW2B,MAAMgjD,iBAAiB9iB,wBACpFzd,eAAa1Y,IAAI1L,WAAS,UAAW2B,MAAMgjD,iBAAkB,SAAUhjD,KAAK+iD,sBAAsBH,EAAUC,EAAiBC,GAAW9iD,QAGhJ2+C,EAAyBpiD,UAAUmrC,MAAQ,WACvC1nC,KAAK0iD,QAAU,MAEnB/D,EAAyBpiD,UAAUwmD,sBAAwB,SAAUH,EAAUC,EAAiBC,GAC5F,GAAIp+C,GAAQ1E,KAERD,EAAU,UAKVkjD,EAAcC,WAASN,EAAU,GAErC,OADA5iD,MAAKD,GAASojD,QAAUnjD,KAAKD,GAASqjD,SAAW,EAC1C,SAAUjmD,GACb,GAAI4iC,GAAMr7B,EAAM3E,GAASijD,iBAAmBt+C,EAAM3E,GAAS4K,UAAU0rB,UAAYl5B,EAAEoE,OAAO80B,UACtF2M,EAAOt+B,EAAM3E,GAASijD,iBAAmBt+C,EAAM3E,GAASsjD,UAAU1f,WAAaxmC,EAAEoE,OAAOoiC,WACxF/pB,EAAYlV,EAAM3E,GAASojD,QAAUpjB,EAAM,OAAS,IACxDnmB,GAAYlV,EAAM3E,GAASqjD,WAAapgB,EAAOppB,EAAYlV,EAAM3E,GAASqjD,SAAWpgB,EAAO,QAAU,OACtGt+B,EAAM3E,GAASojD,QAAUpjB,EACzBr7B,EAAM3E,GAASqjD,SAAWpgB,CAC1B,IAAI9lB,GAAUxY,EAAMu9C,aAAaroC,GAC7B0pC,EAAQ,CAcZ,IAbA5+C,EAAM+9C,OAAS1iB,EACM,MAAjBr7B,EAAMg+C,UACNY,EAAQ5+C,EAAM+9C,OAAS/9C,EAAMg+C,SAEjCh+C,EAAMg+C,QAAUh+C,EAAM+9C,OAClB/9C,EAAMi+C,OACNY,aAAa7+C,EAAMi+C,OAEvBj+C,EAAMi+C,MAAQa,WAAW9+C,EAAMgjC,MAAO,IACjC4b,EAAQ,KAAOA,GAAS,MAASnmD,GAAKA,EAAEsmD,iBACzCtmD,EAAEumD,aAAc,EAChBvmD,EAAEsmD,mBAE6C,IAA/C/+C,EAAM3E,GAAS4jD,KAAKnlD,QAAQ0e,EAAQqjC,MAAxC,CAGA,GAAIj9C,GAAQoB,EAAMpB,MAAMsW,EASxB,IARIsD,EAAQ0mC,SAA4B,MAAjB1mC,EAAQqjC,QACvB77C,EAAgB,YAAoB,UAAdkV,GAAuC,SAAdA,EAI/CipC,EAAgBn+C,EAAa,QAAGwY,EAAStD,GAAammB,IAAKA,EAAKiD,KAAMA,GAAQt+B,EAAe,UAAGpB,GAHhGu/C,EAAgBn+C,EAAgB,WAAGwY,EAAStD,GAAammB,IAAKA,EAAKiD,KAAMA,GAAQt+B,EAAe,UAAGpB,IAMvGA,EAAO,CACP,GAAImT,GAAKwsC,CACY,OAAjB/lC,EAAQqjC,KACR9pC,GAAKmD,UAAWA,EAAWonC,SAAU9jC,EAASikC,QAAUphB,IAAKA,EAAKiD,KAAMA,GACpE8Y,aAAclrB,SAASyoB,gBAGtByJ,EAAStsD,qBAAsBC,oBAAsD4a,KAAvCyxC,EAAStsD,WAAWA,WAAW8wC,MAC1Ewb,EAAStsD,WAAWA,WAAW8rB,SAAkD,KAAvCwgC,EAAStsD,WAAWA,WAAW8wC,KAAetwC,EAAgB8rD,GAC5GrsC,GAAKmD,UAAWA,EAAWonC,SAAU9jC,EAASikC,QAAUphB,IAAKA,EAAKiD,KAAMA,GACpE8Y,aAAclrB,SAASyoB,gBAG3BuJ,GACIhpC,UAAWA,EAAWonC,SAAU9jC,EAASikC,QAAUphB,IAAKA,EAAKiD,KAAMA,GACnE8Y,aAAclrB,SAASyoB,gBAKvC30C,EAAe,WAAI,KAGpBi6C,GACTkF,wBCzoBEjjD,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB3I,OAAO8I,iBAChBC,uBAA2B9E,QAAS,SAAU2E,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAI3D,KAAK2D,GAAOA,EAAEvE,eAAeY,KAAI0D,EAAE1D,GAAK2D,EAAE3D,MACpD0D,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASG,KAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEvE,UAAkB,OAANwE,EAAa7I,OAAOkJ,OAAOL,IAAMG,EAAG3E,UAAYwE,EAAExE,UAAW,GAAI2E,QAgBnF4iD,GAA+B,WAM/B,QAASA,GAAcvtD,GACnByJ,KAAK+jD,gBAAkB,EACvB/jD,KAAKgkD,cAAgB,EACrBhkD,KAAKzJ,OAASA,EACdqM,OAAKC,OAAOohD,IACZjkD,KAAKwH,mBA0IT,MAxIAs8C,GAAcvnD,UAAU2nD,iBAAmB,SAAUhhD,GACjDA,EAAKzE,KAAOuB,KAAKgnC,YAQrB8c,EAAcvnD,UAAUwG,cAAgB,WACpC,MAAO,iBAMX+gD,EAAcvnD,UAAUiL,iBAAmB,WACnCxH,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOkR,GjCdkB,2BiCckBzH,KAAKmkD,4BAA6BnkD,MAClFA,KAAKzJ,OAAOkR,GjCbO,gBiCakBzH,KAAKokD,kBAAmBpkD,MAC7DA,KAAKzJ,OAAOkR,GjCsCC,UiCtCkBzH,KAAKiH,QAASjH,QAMjD8jD,EAAcvnD,UAAUuL,oBAAsB,WACtC9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IjC1BkB,2BiC0BmBhI,KAAKmkD,6BACtDnkD,KAAKzJ,OAAOyR,IjCzBO,gBiCyBmBhI,KAAKokD,mBAC3CpkD,KAAKzJ,OAAOyR,IjC0BC,UiC1BmBhI,KAAKiH,WAEzC68C,EAAcvnD,UAAU4nD,4BAA8B,SAAUxlD,GAC5DqB,KAAKzJ,OAAOiB,KAAKyY,OjCqBM,uBiCrB6BgsC,kBAAkB,IACtEj8C,KAAKqkD,kBAAoB1lD,EAAIpG,OAC7BoG,EAAIpG,OAAOS,SAA0B,aAAf2F,EAAIrD,MAC1B,IAAI4wC,IACAj7B,OAAQjR,KAAKzJ,OAAO2G,SACpByB,IAAKA,EAAIA,IACTrD,OAAQqD,EAAIrD,OACZ/C,OAAQoG,EAAIpG,OACZmT,MAAO1L,KAAKzJ,OAAO2G,SAAS9F,SAE5B4I,KAAKzJ,OAAO4H,sBAA+D,SAAvC6B,KAAKzJ,OAAO6O,kBAAkBtJ,MAC3B,QAAvCkE,KAAKzJ,OAAO6O,kBAAkBtJ,OAAmBkE,KAAKzJ,OAAO6O,kBAAkBylB,mBAC/E7qB,KAAKzJ,OAAOiB,KAAK6pB,gBAErB,IAAIzhB,GAAcvB,WAAS,gBAAiB2B,KAAKzJ,QAAU,cAAgB,SAC3E8H,YAAS,oBAAqB2B,KAAKzJ,QAAQ+d,mBAAmB43B,GAAOtsC,YAAaA,KAEtFkkD,EAAcvnD,UAAU6nD,kBAAoB,SAAU3X,GAClD,GAAI/nC,GAAQ1E,KACRvG,EAAK,GAAIhD,eAAYg2C,EAAex7B,QACpCjY,EAAW,GAAIgJ,aAAU,WAAY,WAAY,MAAMsrC,GAAG,WAAY,eAAYj8B,IAClF7Y,EAAUiB,EAAGmb,cAAa,GAAIxB,UAAQI,MAAMxa,IAC5CguC,EAAaxuC,EAAQY,OAAO,SAAU+D,GACtC,MAAO7E,GAAgBoM,EAAMnO,OAAQ4G,EAAG3E,IAE5CwH,MAAKgnC,WAAaA,EAClBhnC,KAAKzJ,OAAOiB,KAAKyY,OjCDC,iBiCC6BxR,KAAMuoC,GACrD,IAAIsd,IAAWhtB,YAAa,EAAG4c,UAAW,EAAGxoC,MAAO+gC,EAAe/gC,MACnE1L,MAAKzJ,OAAOiB,KAAKyY,OjCDE,iBiCC2Bq0C,EAC9C,IAAIhtB,GAAagtB,EAAOhtB,WACpB4c,EAAWoQ,EAAOpQ,QAEtB,IADAzH,EAAe/gC,MAAQs7B,EAAW5vC,QACd,IAAhBkgC,IAAmC,IAAd4c,EAAiB,CACtC,GAAI/gC,GAAQ,GAAIC,SACZ+5B,EAAOntC,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,SAErCE,EAAOC,GADGntC,KAAKzJ,OAAOiB,KAAK2W,aAAa2J,YACf,EAC7B3E,GAAQA,EAAM+5B,KAAKA,GAAME,KAAKD,GAC9B1zC,EAAGjD,WAAWiF,KAAOurC,EACrByF,EAAex7B,OAASxX,EAAGmb,aAAazB,OAEvC,CACD,GAAIvT,GAAc6sC,EAAeh0B,WAAW7Y,WAe5C,KAdoB,cAAhBA,GAA+C,gBAAhBA,GAAiD,cAAhBA,GAC/C,YAAhBA,GAA6BI,KAAKzJ,OAAO8X,mBAAqB6lC,EAAWlN,EAAW5vC,UACrFkgC,EAAa,EACb4c,EAAWl0C,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,SAAW,EACpDhtC,KAAKzJ,OAAOiB,KAAK27B,aAAaiD,kBAAkBC,UAAY,EAC5Dr2B,KAAKzJ,OAAOiB,KAAKyY,OjC3BF,uBiC2BqCitC,QAAQ,MAI3D3lD,oBAAkByI,KAAKqkD,qBAAiE,kBAA1C5X,EAAeh0B,WAAW7Y,aAC9B,YAA1C6sC,EAAeh0B,WAAW7Y,aAA6B03B,IAAet3B,KAAK+jD,iBAC3EzsB,EAAat3B,KAAKzJ,OAAOsI,UAAUzH,QAAU88C,GAAY5c,EAAat3B,KAAKzJ,OAAOsI,UAAUzH,SAC7FkgC,EAAa,IAEZ//B,oBAAkByI,KAAKqkD,mBAAoB,CAC5C,GAAIE,GAAgBvkD,KAAKzJ,OAAOsI,UAC5B2lD,EAASxd,EAAWxoC,QAAQwB,KAAKqkD,kBACtBrd,GAAWrhC,MAAM6+C,EAAQA,EAASD,EAAcntD,QAClDA,OAASmtD,EAAcntD,QAAUotD,GAAU,GAAoB,IAAfltB,GAGzDA,EADAktB,GADAA,EAASxd,EAAW5vC,OAASmtD,EAAcntD,QACzB,EAAIotD,EAAS,EAE/BtQ,EAAWlN,EAAW5vC,QAEjBiH,WAAS,gBAAiB2B,KAAKzJ,UACpC+gC,EAAa,EACb4c,EAAWl0C,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,SAAW,EACpDhtC,KAAKzJ,OAAOiB,KAAKyY,OjCjDN,uBiCiDyCitC,QAAQ,MAI/Dl9C,KAAKzJ,OAAO8X,oBAAqBrO,KAAKzJ,OAAOwC,oBAAwBxB,oBAAkByI,KAAKqkD,qBACzF5X,EAAe/gC,MAAQ1L,KAAKzJ,OAAOsI,UAAU,GAAGqhC,wBAAwB9a,OACxEkS,EAAa,EAEPt3B,KAAKzJ,OAAoB,cAC/B+gC,GAAsC,IAAzBt3B,KAAK+jD,eAAwB,EAAI/jD,KAAK+jD,iBAG3D/jD,KAAKqkD,kBAAoB,KACzB/sB,EAAaA,EAAa,EAAI,EAAIA,EAClCmV,EAAex7B,OAAS+1B,EAAWrhC,MAAM2xB,EAAY4c,GACrDl0C,KAAK+jD,eAAiBzsB,EACtBt3B,KAAKgkD,aAAe9P,EAExBl0C,KAAKzJ,OAAO0Z,OAAO,eAAgBw8B,IAQvCqX,EAAcvnD,UAAU0K,QAAU,WAC9BjH,KAAK8H,uBAEFg8C,KAGPG,GAA6B,SAAUhiD,GAEvC,QAASgiD,GAAY1tD,EAAQylD,GACzB,GAAIt3C,GAAQzC,EAAOxF,KAAKuD,KAAMzJ,EAAQylD,IAAYh8C,IAGlD,OAFA3B,YAAS,SAAUqG,GAAOsD,IAAI,eAAgB3J,WAAS,sBAAuBqG,GAAQA,GACtFrG,WAAS,SAAUqG,GAAO+C,GAAG,eAAgB/C,EAAM+/C,qBAAsB//C,GAClEA,EAiCX,MAtCA9D,IAAUqjD,EAAahiD,GAOvBgiD,EAAY1nD,UAAUwG,cAAgB,WAClC,MAAO,qBAEXkhD,EAAY1nD,UAAUkoD,qBAAuB,WACzC,GAAIC,GAAarmD,WAAS,SAAU2B,KACpC3B,YAAS,SAAU2B,MAAMgD,KAAK,aAAc,kBAAmB,iBAC/D,IAAI2hD,GAAWtmD,WAAS,UAAW2B,MAAM4kD,WAAW,kBAC/CF,GAAW/2B,iBACR+2B,EAAW31C,4BACX1Q,WAAS,cAAesmD,GACnBziD,MAAMyiD,GAAWE,aAAWC,OAAQ,GAAIC,yBAAsB1mD,WAAS,SAAU2B,MAAO3B,WAAS,UAAW2B,SAErH3B,WAAS,cAAesmD,GACnBziD,MAAMyiD,GAAWE,aAAWG,QAAS,GAAIjJ,IAA2B19C,WAAS,SAAU2B,MAAO3B,WAAS,UAAW2B,UAG3HA,KAAKilD,kBAEThB,EAAY1nD,UAAU0oD,eAAiB,WACnC,GAAIP,GAAarmD,WAAS,SAAU2B,MAChC8mB,EAAY49B,EAAWpuB,cACtB/+B,qBAAkBmtD,EAAWt/B,SAA0C,gBAAvBs/B,YAAuE,IAApCA,EAAWt/B,OAAO5mB,QAAQ,OAC9GkmD,EAAW5zC,QAAQtW,MAAM4qB,OAASs/B,EAAWt/B,OAEjD,IAGIA,GAAqB,MAHXs/B,EAAWt/B,OAAOngB,WAAWzG,QAAQ,KAAO,EAAIkmD,EAAWt/B,OACrEs/B,EAAW5zC,QAAQovB,wBAAwB9a,QAClB0B,GAEzBqmB,EAAOuX,EAAWv2C,aAAa6+B,QACnC0X,GAAWjkD,eAAgB0N,cAAgB6+B,SAAUG,EAAO/nB,EAASA,EAAS+nB,KAAU,IAErF8W,GACTiB,iBC1NEtkD,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB3I,OAAO8I,iBAChBC,uBAA2B9E,QAAS,SAAU2E,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAI3D,KAAK2D,GAAOA,EAAEvE,eAAeY,KAAI0D,EAAE1D,GAAK2D,EAAE3D,MACpD0D,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASG,KAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEvE,UAAkB,OAANwE,EAAa7I,OAAOkJ,OAAOL,IAAMG,EAAG3E,UAAYwE,EAAExE,UAAW,GAAI2E,QAanFikD,GAA2C,SAAUljD,GAErD,QAASkjD,GAA0B5uD,EAAQylD,GACvC,GAAIt3C,GAAQzC,EAAOxF,KAAKuD,KAAMzJ,EAAQylD,IAAYh8C,IAElD,OADA0E,GAAM8C,mBACC9C,EA0DX,MA9DA9D,IAAUukD,EAA2BljD,GAUrCkjD,EAA0B5oD,UAAU6zB,YAAc,WAC9CpwB,KAAKolD,mBAAqB,GAAIC,2BAAwBrlD,KAAKzJ,QAC3DyJ,KAAKslD,gBAAkB,GAAIvJ,IAA2B/7C,KAAKzJ,OAAQyJ,KAAKulD,YACxEvlD,KAAKslD,gBAAgBvE,OAAS/gD,KAAKulD,WAAWX,WAAW,mBACpDY,YAAYX,aAAWC,QAAQW,mBACpCC,sBAAoBnpD,UAAU6zB,YAAY3zB,KAAKuD,MAC/CA,KAAKslD,gBAAgBK,SAAS3lD,KAAKzJ,OAAO48B,cAC1CnzB,KAAKqjD,UAAYrjD,KAAKzJ,OAAO48B,aAAa/qB,cAAc,sBACxD,IAAIw9C,GAAc5lD,KAAK6lD,oBACnBC,EAAY9lD,KAAKzJ,OAAO6uB,MAK5B,IAJAplB,KAAKslD,gBAAgBzE,WAAWpe,QAAUziC,KAAKslD,gBAAgB7iB,QAAUziC,KAAK4+C,WAAWx2C,cAAc,cACvGpI,KAAKslD,gBAAgBzE,WAAWpe,QAAQjoC,MAAMurD,UAAY,SAC1D/lD,KAAKslD,gBAAgBzE,WAAWmF,oBAAoBF,GACpD9lD,KAAKslD,gBAAgBzE,WAAWoF,0BAC5BjmD,KAAKzJ,OAAOwY,2BAA4B,CACxC/O,KAAKslD,gBAAgBzE,WAAWjzB,eAAiB5tB,KAAKslD,gBAAgB13B,eAChE5tB,KAAK4+C,WAAWx2C,cAAc,qBACpCpI,KAAKslD,gBAAgBzE,WAAWqF,qBAAqBJ,GACrD9lD,KAAKslD,gBAAgBzE,WAAWsF,0BAChC,IAAIC,GAAMR,EAAYx9C,cAAc,QACpCpI,MAAKslD,gBAAgBzE,WAAWwF,aAAeD,EAC/CpmD,KAAKslD,gBAAgBzE,WAAWyF,eAAet7C,YAAYo7C,GAC3DR,EAAY56C,YAAYhL,KAAKslD,gBAAgBzE,WAAWyF,gBACxDV,EAAY56C,YAAYhL,KAAKslD,gBAAgBzE,WAAW0F,oBAE5DvmD,KAAKslD,gBAAgBzE,WAAW2F,QAAQx7C,YAAYhL,KAAKymD,oBACzDzmD,KAAKslD,gBAAgBzE,WAAW2F,QAAQx7C,YAAY46C,GACpD5lD,KAAKslD,gBAAgBzE,WAAWzN,MAAQpzC,KAAKsiD,WAC7CoE,cAAY1mD,KAAKzJ,OAAQyJ,KAAKslD,gBAAiBtlD,KAAKqjD,UAAWrjD,KAAK6lD,sBASxEV,EAA0B5oD,UAAUwlD,cAAgB,SAAUxgD,EAAQygD,EAAU7kD,GAC5EkB,WAAS,WAAY2B,KAAKslD,iBAAiBvlD,QAAQ2+C,eAAgB,EACnE1+C,KAAKslD,gBAA2B,UAAI,GAAI3G,IAAyBtgD,WAAS,WAAY2B,KAAKslD,iBAAiBx0C,QAASzS,WAAS,WAAY2B,KAAKslD,iBAAiBvlD,QAAS1B,WAAS,WAAY2B,KAAKslD,iBAAiBqB,YACpN3mD,KAAKslD,gBAA0B,SAAItlD,KAAK4+C,WAAW10C,WACnDjI,EAAO1F,UAAUwlD,cAActlD,KAAKuD,KAAMuB,EAAQygD,EAAU7kD,IAQhEgoD,EAA0B5oD,UAAU4qC,aAAe,SAAU1oC,EAAMtB,GAC/D,MAAO8E,GAAO1F,UAAU4qC,aAAa1qC,KAAKuD,KAAMvB,EAAMtB,IAEnDgoD,GACTyB,yBAOEC,GAAiD,SAAU5kD,GAE3D,QAAS4kD,GAAgCtwD,EAAQylD,GAC7C,GAAIt3C,GAAQzC,EAAOxF,KAAKuD,KAAMzJ,EAAQylD,IAAYh8C,IAGlD,OAFA0E,GAAM6gD,WAAavJ,EACnBt3C,EAAMyrB,cAAc,MACbzrB,EAqCX,MA1CA9D,IAAUimD,EAAiC5kD,GAW3C4kD,EAAgCtqD,UAAU6zB,YAAc,WACpDpwB,KAAKslD,gBAAkB,GAAIvJ,IAA2B/7C,KAAKzJ,OAAQyJ,KAAKulD,YACxEvlD,KAAKslD,gBAAgBvE,OAAS/gD,KAAKulD,WAAWX,WAAW,mBACpDY,YAAYX,aAAWC,QAAQW,mBACpCzlD,KAAKolD,mBAAqB,GAAIC,2BAAwBrlD,KAAKzJ,QAC3DuwD,8BAA4BvqD,UAAU6zB,YAAY3zB,KAAKuD,MACvDA,KAAKslD,gBAAgBK,SAAS3lD,KAAKzJ,OAAO48B,cAC1CnzB,KAAKqjD,UAAYrjD,KAAKzJ,OAAO48B,aAAa/qB,cAAc,sBACxD,IAAI2+C,GAAkB/mD,KAAKgnD,wBACvBC,EAAUjnD,KAAKymD,mBACfb,EAAc5lD,KAAK6lD,mBACa,WAAhC7lD,KAAKzJ,OAAO2wD,kBACZD,EAAUF,GAEd/mD,KAAKslD,gBAAgBzE,WAAWpe,QAAUziC,KAAKslD,gBAAgB7iB,QAAUziC,KAAK4+C,WAAWx2C,cAAc,cACvGpI,KAAKslD,gBAAgBzE,WAAWpe,QAAQjoC,MAAMurD,UAAY,QAC1D,IAAID,GAAY9lD,KAAKzJ,OAAO6uB,MAC5BplB,MAAKslD,gBAAgBzE,WAAWmF,oBAAoBF,GACpD9lD,KAAKslD,gBAAgBzE,WAAWoF,0BAChChkD,EAAO1F,UAAmC,wBAAEE,KAAKuD,KAAMinD,EAASrB,GAChE3jD,EAAO1F,UAAoC,yBAAEE,KAAKuD,KAAMinD,EAASrB,GACjE3jD,EAAO1F,UAAwC,6BAAEE,KAAKuD,KAAMinD,EAASrB,EAAamB,GAClF/mD,KAAKslD,gBAAgBzE,WAAWzN,MAAQpzC,KAAKsiD,WAC7CoE,cAAY1mD,KAAKzJ,OAAQyJ,KAAKslD,gBAAiBtlD,KAAKqjD,UAAWrjD,KAAK6lD,sBAExEgB,EAAgCtqD,UAAUwlD,cAAgB,SAAUxgD,EAAQygD,EAAU7kD,GAClFkB,WAAS,WAAY2B,KAAKslD,iBAAiBvlD,QAAQ2+C,eAAgB,EACnE1+C,KAAKslD,gBAA2B,UAAI,GAAI3G,IAAyBtgD,WAAS,WAAY2B,KAAKslD,iBAAiBx0C,QAASzS,WAAS,WAAY2B,KAAKslD,iBAAiBvlD,QAAS1B,WAAS,WAAY2B,KAAKslD,iBAAiBqB,YACpN3mD,KAAKslD,gBAA0B,SAAItlD,KAAK4+C,WAAW10C,WACnDjI,EAAO1F,UAAUwlD,cAActlD,KAAKuD,KAAMuB,EAAQygD,EAAU7kD,IAEzD0pD,GACTM,+BAOEC,GAA8C,SAAUnlD,GAExD,QAASmlD,KACL,MAAkB,QAAXnlD,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAY/D,MAdAY,IAAUwmD,EAA8BnlD,GAQxCmlD,EAA6B7qD,UAAU6zB,YAAc,WACjDnuB,EAAO1F,UAAU6zB,YAAY3zB,KAAKuD,OAEtConD,EAA6B7qD,UAAU8qD,YAAc,WACjDplD,EAAO1F,UAAU8qD,YAAY5qD,KAAKuD,OAE/BonD,GACTE,4BCxJEC,GAAwB,WAMxB,QAASA,GAAOhxD,GACZqM,OAAKC,OAAO2kD,UACZxnD,KAAKzJ,OAASA,EACdyJ,KAAKwH,mBAqHT,MAnHA+/C,GAAOhrD,UAAUiL,iBAAmB,WAChCxH,KAAKzJ,OAAOkR,GAAG,oBAAqBzH,KAAK86C,kBAAmB96C,MAC5DA,KAAKzJ,OAAOkR,GAAG,eAAgBzH,KAAK06C,aAAc16C,MAClDA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,WAAYzH,KAAKynD,gBAAiBznD,MACtDA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,eAAgBzH,KAAK0nD,oBAAqB1nD,OAElEunD,EAAOhrD,UAAUuL,oBAAsB,WAC/B9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IAAI,oBAAqBhI,KAAK86C,mBAC1C96C,KAAKzJ,OAAOyR,IAAI,eAAgBhI,KAAK06C,cACrC16C,KAAKzJ,OAAOiB,KAAKwQ,IAAI,WAAYhI,KAAKynD,iBACtCznD,KAAKzJ,OAAOiB,KAAKwQ,IAAI,eAAgBhI,KAAK0nD,uBAE9CH,EAAOhrD,UAAUmrD,oBAAsB,WACnC,GAAI/C,GAAWtmD,WAAS,iBAAkB2B,KAAKzJ,OAAOiB,MAAMotD,WAAW,kBACnE5kD,MAAKzJ,OAAO0I,qBACRe,KAAKzJ,OAAOwY,2BACZ1Q,WAAS,cAAesmD,GACnBziD,MAAMyiD,GAAWE,aAAWC,OAAQ,GAAIsC,IAA6B/oD,WAAS,OAAQ2B,KAAKzJ,QAAS8H,WAAS,iBAAkB2B,KAAKzJ,OAAOiB,SAGhJ6G,WAAS,cAAesmD,GACnBziD,MAAMyiD,GAAWE,aAAWC,OAAQ,GAAI6C,gBAAatpD,WAAS,OAAQ2B,KAAKzJ,QAAS8H,WAAS,iBAAkB2B,KAAKzJ,OAAOiB,SAEhIwI,KAAKzJ,OAAO4H,qBACZE,WAAS,cAAesmD,GACnBziD,MAAMyiD,GAAWE,aAAWG,QAAS,GAAIG,IAA0B9mD,WAAS,OAAQ2B,KAAKzJ,QAAS8H,WAAS,iBAAkB2B,KAAKzJ,OAAOiB,SAG9I6G,WAAS,cAAesmD,GACnBziD,MAAMyiD,GAAWE,aAAWG,QAAS,GAAIU,uBAAoBrnD,WAAS,OAAQ2B,KAAKzJ,QAAS8H,WAAS,iBAAkB2B,KAAKzJ,OAAOiB,WAG5IwI,KAAKzJ,OAAOiZ,6BAA+BxP,KAAKzJ,OAAOkZ,gCACvDpR,WAAS,cAAesmD,GACnBziD,MAAMyiD,GAAWE,aAAWC,OAAQ,GAAI8C,8BAA2BvpD,WAAS,OAAQ2B,KAAKzJ,QAAS8H,WAAS,iBAAkB2B,KAAKzJ,OAAOiB,SAC1IwI,KAAKzJ,OAAO4H,qBACZE,WAAS,cAAesmD,GACnBziD,MAAMyiD,GAAWE,aAAWG,QAAS,GAAI6B,IAAgCxoD,WAAS,OAAQ2B,KAAKzJ,QAAS8H,WAAS,iBAAkB2B,KAAKzJ,OAAOiB,SAGpJ6G,WAAS,cAAesmD,GACnBziD,MAAMyiD,GAAWE,aAAWG,QAAS,GAAI8B,+BAA4BzoD,WAAS,OAAQ2B,KAAKzJ,QAAS8H,WAAS,iBAAkB2B,KAAKzJ,OAAOiB,WAI5J+vD,EAAOhrD,UAAUu+C,kBAAoB,SAAU53C,GAC3C,GAEIiC,GACA0iD,EAHAtvB,EAAcv4B,KAAKzJ,OAAOkW,qBAC1Bq7C,EAAa9nD,KAAKzJ,OAAOsI,UAGzBo3B,EAAUj2B,KAAKzJ,OAAOiZ,4BAA8B,GACpDxP,KAAKzJ,OAAOkZ,6BAA+B,CAC3CwmB,KACA4xB,EAAkB7nD,KAAKzJ,OAAOoiC,qBAAqBv/B,OAAO,SAAU+D,GAChE,MAAOA,GAAEiL,cAAc,kBAAoBlF,EAAK3K,OAAO2B,MAAQ,SAAWgJ,EAAK3K,OAAO4B,MAAQ,OASlGgL,EANCjC,EAAKy0B,WAAWvgC,OAMV8L,EAAKy0B,WALLY,EAAYn/B,OAAO,SAAU+D,GAChC,MAAOA,GAAEiL,cAAc,kBAAoBlF,EAAK3K,OAAO2B,MAAQ,SAAWgJ,EAAK3K,OAAO4B,MAAQ,KAMtG,KAAK,GAAIjD,GAAI,EAAGA,EAAIiO,EAAK/N,OAAQF,IAAK,CAClC,GAAI6wD,GAAQ/nD,KAAKzJ,OAAOiB,KAAKwe,oBAAoB7Q,EAAKjO,GAAGqS,aAAa,aAAa9K,IACnF0G,GAAKjO,GAAGsD,MAAMG,QAAUuI,EAAK5H,OACzB26B,IACA4xB,EAAgB3wD,GAAGsD,MAAMG,QAAUuI,EAAK5H,OAE5C,IAAI0sD,GAAgC,SAAhB9kD,EAAK5H,OAAoB,8CACvC,2CACN,IAAIwsD,EAAW3iD,EAAKjO,GAAG6P,UAAUqB,cAAc4/C,GAAgB,CAE3D,IAAK,GADD1uB,MACKE,EAAM,EAAGA,EAAMjB,EAAYnhC,OAAQoiC,IACpCjB,EAAYiB,GAAKpxB,cAAc,kBAAoB2/C,EAAM7tD,MAAQ,SAAW6tD,EAAM5tD,MAAQ,KAC1Fm/B,EAAKjhC,KAAKkgC,EAAYiB,GAG1BF,GAAKliC,QACL4I,KAAK86C,mBAAoBnjB,WAAY2B,EAAMh+B,OAAQ4H,EAAK5H,YAKxEisD,EAAOhrD,UAAUkrD,gBAAkB,SAAUtqD,GACrCgL,eAAahL,EAAEoE,OAAQ,cACvBvB,KAAKzJ,OAAOiB,KAAKqE,aAAa0yB,qBAAyD,SAAlCvuB,KAAKzJ,OAAOsF,aAAaC,OAAqBqB,EAAEoE,OAAkB,UAAEmE,SAAS,wBAA0BvI,EAAEoE,OAAkB,UAAEmE,SAAS,qBAC3L1F,KAAKzJ,OAAOiB,KAAKuE,WAAWk2B,UAAU9pB,eAAahL,EAAEoE,OAAQ,WAGrEgmD,EAAOhrD,UAAUm+C,aAAe,WACP16C,KAAKzJ,OAAOoJ,aAAavG,OAAO,SAAU+D,GAC3D,MAAOA,GAAE9F,eAEMD,QAAU4I,KAAKzJ,OAAO0xD,cAAgBjoD,KAAKzJ,OAAOuC,eACjE4U,YAAU1N,KAAKzJ,OAAOua,QAAQiF,uBAAuB,UAAU,IAAK,qBAG5EwxC,EAAOhrD,UAAU0K,QAAU,WACvBjH,KAAK8H,uBAQTy/C,EAAOhrD,UAAUwG,cAAgB,WAC7B,MAAO,UAEJwkD,KCjIPW,GAA+B,WAM/B,QAASA,GAAc3xD,GACnBqM,OAAKC,OAAOslD,iBACZnoD,KAAKzJ,OAASA,EA8BlB,MArBA2xD,GAAc3rD,UAAUg2B,kBAAoB,SAAU61B,EAAGC,GACrD,MAAOroD,MAAKzJ,OAAOiB,KAAKk7B,oBAAoBH,kBAAkB61B,EAAGC,IAQrEH,EAAc3rD,UAAU0K,QAAU,aASlCihD,EAAc3rD,UAAUwG,cAAgB,WACpC,MAAO,iBAEJmlD,KCjCPI,GAAgC,WAMhC,QAASA,GAAe/xD,GACpByJ,KAAKzJ,OAASA,EACdqM,OAAKC,OAAO0lD,kBACZvoD,KAAKwH,mBAwTT,MAhTA8gD,GAAe/rD,UAAUwG,cAAgB,WACrC,MAAO,kBAMXulD,EAAe/rD,UAAUiL,iBAAmB,WACxCxH,KAAKzJ,OAAOkR,GrCWO,gBqCXkBzH,KAAKwoD,mBAAoBxoD,MAC9DA,KAAKzJ,OAAOkR,GAAG,yBAA0BzH,KAAKyoD,qBAAsBzoD,MACpEA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,kBAAmBzH,KAAK0oD,sBAAuB1oD,MACnEA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,wBAAyBzH,KAAK2oD,oBAAqB3oD,MACvEA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,uBAAwBzH,KAAK4oD,WAAY5oD,MAC7DA,KAAKzJ,OAAOiB,KAAKiQ,GAAG,gBAAiBzH,KAAKi1C,aAAcj1C,MACxDA,KAAKzJ,OAAOkR,GrCGkB,2BqCHkBzH,KAAK6oD,6BAA8B7oD,OAMvFsoD,EAAe/rD,UAAUuL,oBAAsB,WACvC9H,KAAKzJ,OAAOwR,cAGhB/H,KAAKzJ,OAAOyR,IAAI,yBAA0BhI,KAAKyoD,sBAC/CzoD,KAAKzJ,OAAOiB,KAAKwQ,IAAI,kBAAmBhI,KAAK0oD,uBAC7C1oD,KAAKzJ,OAAOiB,KAAKwQ,IAAI,wBAAyBhI,KAAK2oD,qBACnD3oD,KAAKzJ,OAAOyR,IrCRO,gBqCQmBhI,KAAKwoD,oBAC3CxoD,KAAKzJ,OAAOiB,KAAKwQ,IAAI,uBAAwBhI,KAAK4oD,YAClD5oD,KAAKzJ,OAAOiB,KAAKwQ,IAAI,gBAAiBhI,KAAKi1C,cAC3Cj1C,KAAKzJ,OAAOyR,IrCbkB,2BqCamBhI,KAAK6oD,gCAU1DP,EAAe/rD,UAAUksD,qBAAuB,SAAUvlD,GAWtD,IAAK,GAVDizC,GAAan2C,KAAKzJ,OAAOiB,KAAK+Z,gBAG9B9M,EAAiBzE,KAAKzJ,OAAOiB,KAAKy/C,qBAA4B,eAC9D6R,EAAc,GAAIC,eAAYtkD,EAAgB,KAAMzE,KAAKzJ,OAAOiB,MAChE2N,EAAOnF,KAAKzJ,OAAOsI,UACnB8yB,EAAWzuB,EAAKhJ,QAAUiL,EAAK/N,OAAS,EAAI,QAAU,SACtD29B,EAAO/0B,KAAKzJ,OAAOiB,KAAKmI,aACxBqpD,EAAkBhpD,KAAKzJ,OAAOiB,KAAKy/C,qBAAiC,aAAE/zC,EAAKgE,UAAWhE,GACtF+lD,KACK/xD,EAAI,EAAGA,EAAI8xD,EAAgB5xD,OAAQF,IACxC+xD,EAAiB5wD,KAAKywD,EAAYtkC,OAAOwkC,EAAgB9xD,GAAI69B,GAEjEohB,GAAWt5C,OAAOqF,MAAMi0C,GAAajzC,EAAKhJ,MAAQ,EAAG,GAAGX,OAAOyvD,GAC/D,KAAS9xD,EAAI,EAAGA,EAAI+xD,EAAiB7xD,OAAQF,IACxB,UAAby6B,EACAxsB,EAAKjC,EAAKhJ,MAAQhD,GAAGy6B,GAAUs3B,EAAiB/xD,IAGhDiO,EAAKjC,EAAKhJ,MAAQhD,EAAI,GAAGy6B,GAAUs3B,EAAiB/xD,IAExDiO,EAAKtI,OAAOqG,EAAKhJ,MAAQ,EAAIhD,EAAG,EAAG+xD,EAAiB/xD,GAExD0/C,iBAAc52C,KAAKzJ,OAAOiB,KAAMwI,KAAKzJ,OAAOiB,KAAK+Z,gBAAiBvR,KAAKzJ,OAAOiB,KAAKqH,UAAW,IAOlGypD,EAAe/rD,UAAU04C,aAAe,WACpC,GAAIj1C,KAAKzJ,OAAOkwB,uBAAuBkwB,cAAgBp/C,oBAAkByI,KAAKzJ,OAAOwF,YAAa,CAE9FiE,KAAKzJ,OAAOwF,WAAsB,YAAEiE,KAAKzJ,OAAOiB,KAAKhB,WAAYwJ,KAAKzJ,OAAOsI,UAAWmB,KAAKzJ,OAAOiH,yBAChGwC,KAAKzJ,OAAO0I,oBACZe,KAAKzJ,OAAOwF,WAAsB,YAAEiE,KAAKzJ,OAAOiB,KAAKhB,WAAYwJ,KAAKzJ,OAAOkW,qBAAsBzM,KAAKzJ,OAAOiH,2BAI3H8qD,EAAe/rD,UAAUssD,6BAA+B,SAAUlqD,GAC9DA,EAAIpG,OAAOS,SAA0B,aAAf2F,EAAIrD,MAC1B,IAAI4wC,IACAj7B,OAAQjR,KAAKzJ,OAAO2G,SACpByB,IAAKA,EAAIA,IACTrD,OAAQqD,EAAIrD,OACZ/C,OAAQoG,EAAIpG,OACZmT,MAAO1L,KAAKzJ,OAAO2G,SAAS9F,QAE5BwI,EAAcvB,WAAS,gBAAiB2B,KAAKzJ,QAAU,cAAgB,SAC3E8H,YAAS,oBAAqB2B,KAAKzJ,QAAQ+d,mBAAmB43B,GAAOtsC,YAAaA,KAWtF0oD,EAAe/rD,UAAUisD,mBAAqB,SAAU/b,GACpD,GAAI/nC,GAAQ1E,KACRvG,EAAK,GAAIhD,eAAYg2C,EAAex7B,QACpCjY,EAAW,GAAIgJ,aAAU,WAAY,WAAY,MAAMsrC,GAAG,WAAY,eAAYj8B,IAClF63C,EAAkBzvD,EAAGmb,cAAa,GAAIxB,UAAQI,MAAMxa,IACpDguC,EAAakiB,EAAgB9vD,OAAO,SAAU+D,GAC9C,MAAO7E,GAAgBoM,EAAMnO,OAAQ4G,EAAG+rD,KAExCzwC,EAAapa,WAAS,aAAcouC,EAAeh0B,YACnD0wC,EAAU9qD,WAAS,UAAW2B,KAAKzJ,OAAOiB,KAAKy/C,qBAC/Cj3C,MAAKzJ,OAAOiB,KAAKy/C,qBAAsC,kBAAMj3C,KAAKzJ,OAAOuC,gBACzEkH,KAAKzJ,OAAOiB,KAAK2W,aAAa2J,YAAc,EAEhD,IACIhf,KADUqwD,EAAQjlC,KAAK,SAAUjqB,GAAS,MAAOA,KAAUwe,EAAW7Y,iBACrCI,KAAKzJ,OAAOuC,aAGjD,IAFAkH,KAAKgnC,WAAaA,EAClByF,EAAe/gC,MAAQs7B,EAAW5vC,OAC9BiH,WAAS,aAAcouC,EAAeh0B,YACtCg0B,EAAex7B,OAAS+1B,MAEvB,CACD,GAAI7zB,GAAQ,GAAIC,SACZsjC,EAAU12C,KAAKzJ,OAAOkwB,uBAAuBkwB,WAC7CD,IAAW12C,KAAKzJ,OAAOkwB,uBAAuB2iC,cAAgBppD,KAAKzJ,OAAOkwB,uBAAuB4iC,YACjGrpD,KAAKzJ,OAAOkwB,uBAAuB2iC,cAAgBppD,KAAKzJ,OAAOkwB,uBAAuB4iC,UAE1F,IAAIlc,GAAOr0C,EACPkH,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,SAAWhtC,KAAKzJ,OAAOkwB,uBAAuB2iC,cAC5EppD,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,SAC9B9vB,EAAUld,KAAKzJ,OAAOiB,KAAK2W,aAAa2J,WAC5C,IAAKvgB,oBAAkBkhB,GAsBnBtF,EAAQA,EAAM6E,KAAKkF,EAASiwB,OAtBI,CAChC,GAAIiQ,GAAY/+C,WAAS,YAAa2B,KAAKzJ,OAAOiB,KAAKy/C,sBACnDqS,EAAajrD,WAAS,aAAc2B,KAAKzJ,OAAOiB,KAAKy/C,qBACzD,IAAKP,GAAsC,WAA3Bj+B,EAAW7Y,YAKlB82C,GAAsC,WAA3Bj+B,EAAW7Y,aACC,SAA3B6Y,EAAW7Y,aAAgD,QAAtB6Y,EAAWnd,OAEjD6X,GADAA,EAAQA,EAAM+5B,KAAKoc,IACLlc,KAAKptC,KAAKzJ,OAAOkwB,uBAAuB2iC,cAAgBppD,KAAKzJ,OAAO4X,aAAa6+B,WAGlD,WAAxCP,EAAeh0B,WAAmB,QAA0D,aAAxCg0B,EAAeh0B,WAAmB,QAAmE,IAA9CzY,KAAKzJ,OAAOiB,KAAK2W,aAAa2J,cAC1IoF,EAAU,EACViwB,EAAOntC,KAAKzJ,OAAOiB,KAAK2W,aAAa6+B,SAAWhtC,KAAKzJ,OAAOiB,KAAK2W,aAAa2J,aAElF3E,EAAQA,EAAM6E,KAAKkF,EAASiwB,QAfqB,CACjD,GAAID,GAAOkQ,EAAY3kC,EAAWha,KAAKrH,OAAS,EAC5Cg2C,EAAO30B,EAAWha,KAAKrH,MAC3B+b,GAAQA,EAAM+5B,KAAKA,GAAME,KAAKA,IAkBtC3zC,EAAGjD,WAAWiF,KAAOurC,EAChB0P,GAAYn/C,oBAAkBkhB,IAA0C,SAA3BA,EAAW7Y,aAAgD,QAAtB6Y,EAAWnd,OAI9FmxC,EAAex7B,OAASxX,EAAGmb,aAAazB,GAHxCs5B,EAAex7B,QAAUwH,EAAWha,MAM5CuB,KAAKzJ,OAAO0Z,OAAO,eAAgBw8B,IAUvC6b,EAAe/rD,UAAUosD,oBAAsB,SAAUzlD,GACrD,GACI8zC,GAA0Bh3C,KAAKzJ,OAAOiB,KAAKy/C,qBAAiC,wBAC5E9+C,EAAOD,OAAOC,KAAK6+C,EACvB,IAA2B,WAAvB9zC,EAAK/F,EAAEyC,aAA4BsD,EAAK+N,OAAO7Z,OAAS,EACxD,IAAK,GAAIF,GAAI,EAAGA,EAAIgM,EAAK+N,OAAO7Z,OAAQF,IACpC8/C,EAAwB7+C,EAAKA,EAAKf,OAAS,IAAIiB,KAAK6K,EAAK+N,OAAO/Z,KAU5EoxD,EAAe/rD,UAAUmsD,sBAAwB,SAAUxlD,GACvD,GAAyB,WAArBA,EAAKtD,YAA0B,CAC/B,GAAIuF,GAAOnF,KAAKzJ,OAAOiB,KAAK+Z,gBACxBg4C,EAAUvpD,KAAKzJ,OAAOsI,UACtBJ,EAAOyE,EAAKzE,eAAgBtC,OAAQ+G,EAAKzE,MAAQyE,EAAKzE,MACtD+qD,EAAWxpD,KAAKzJ,OAAOiB,KAAK+D,0BAA0B,EAE1D,IADAyE,KAAKypD,WAAWF,EAASpkD,EAAM1G,EAAM+qD,GAAU,GAC3CxpD,KAAKzJ,OAAO0I,mBAAqB,EAAG,CACpC,GAAI20C,GAAQ5zC,KAAKzJ,OAAOiB,KAAKi/C,uBACzBiT,EAAW1pD,KAAKzJ,OAAOiB,KAAKkhC,gBAChC14B,MAAKypD,WAAWC,EAAU9V,EAAOn1C,EAAM+qD,MAcnDlB,EAAe/rD,UAAUktD,WAAa,SAAUF,EAASpkD,EAAM1G,EAAM+qD,EAAUhuB,GAgB3E,IAAK,GAfD92B,GAAQ1E,KAeH9I,EAAI,EAAGA,EAAIuH,EAAKrH,OAAQF,KAbnB,SAAUA,GACpBiO,EAAK/L,OAAO,SAAU+D,EAAGjD,GACrB,GAAIiD,EAAEsB,KAAK+qD,KAAc/qD,EAAKvH,GAAGsyD,GAAW,CACxC,GAAIhuB,EAAU,CACV,GAAIxjB,GAAO1C,KAAKC,MAAMrb,EAAQ,GAAKwK,EAAMnO,OAAOiB,KAAK2W,aAAa6+B,SAClEtoC,GAAMnO,OAAOiB,KAAKy/C,qBAAiD,6BAAEj/B,EAAM9d,GAE/EiL,EAAKtI,OAAO3C,EAAO,GACnBoqB,SAAOilC,EAAQrvD,IACfqvD,EAAQ1sD,OAAO3C,EAAO,OAKtBhD,IAMhBoxD,EAAe/rD,UAAUqsD,WAAa,SAAU9S,GAC5C,GAKI6T,GAJAlxC,EAAaq9B,EAAU5yC,KAAK/F,EAC5BwB,EAAMm3C,EAAUn3C,IAChB8F,EAAiBzE,KAAKzJ,OAAOiB,KAAKy/C,qBAA4B,eAC9D6R,EAAc,GAAIC,eAAYtkD,EAAgB,KAAMzE,KAAKzJ,OAAOiB,MAEhE2gB,EAAcnY,KAAKzJ,OAAOiH,wBAC1BosD,EAAc9T,EAAU6G,UAAY38C,KAAKzJ,OAAOiB,KAAKkhC,iBACnD14B,KAAKzJ,OAAOiB,KAAKk9B,aAEnBi1B,GADA7T,EAAU+G,cACF78C,KAAKzJ,OAAOua,QAAQ1I,cAAc,2BAA2BA,cAAc,SAG1EpI,KAAKzJ,OAAOiB,KAAKm2B,eAAmEmoB,EAAU6G,UACjG38C,KAAKzJ,OAAOiB,KAAKqyD,2BAA2BzhD,cAAc,SAC1DpI,KAAKzJ,OAAOiB,KAAKsyD,0BAA0B1hD,cAAc,SAFpBpI,KAAKzJ,OAAO48B,aAAa/qB,cAAc,SAIlFpI,KAAKzJ,OAAOyI,aACZ2qD,EAAQ7T,EAAUiU,cAAsE,QAAtD/pD,KAAKzJ,OAAOiB,KAAKy/C,qBAAqBr3C,cAChEk2C,EAAUiU,cAAsE,QAAtD/pD,KAAKzJ,OAAOiB,KAAKy/C,qBAAqBr3C,YACjEI,KAAKzJ,OAAOiB,KAAKm2B,eACdmoB,EAAU6G,UAAY38C,KAAKzJ,OAAOiB,KAAKwyD,0BAA0B5hD,cAAc,SAC3E0tC,EAAU+G,cAAgB78C,KAAKzJ,OAAOua,QAAQ1I,cAAc,0BAA0BA,cAAc,SAChGpI,KAAKzJ,OAAOiB,KAAKyyD,yBAAyB7hD,cAAc,SAHjCpI,KAAKzJ,OAAO+S,mBAAmBlB,cAAc,SAGDuhD,EAKzF,KAAK,GAHDh4B,GAEAmlB,EAAc92C,KAAKzJ,OAAOwF,WAAsB,YAC3C7E,EAAI,EAAGA,EAAIyH,EAAIvH,OAAQF,IAAK,CACjC,GAAIgzD,GAASpB,EAAYtkC,OAAO7lB,EAAIzH,GAAI8I,KAAKzJ,OAAOiB,KAAKmI,aAC1B,UAA3B8Y,EAAW7Y,aAAgD,QAAtB6Y,EAAWnd,QACW,IAAvD+C,WAAS,gBAAiB2B,KAAKzJ,OAAOwF,aAAkE,QAA5CiE,KAAKzJ,OAAOsF,aAAaQ,eACrC,UAA5C2D,KAAKzJ,OAAOsF,aAAaQ,gBAA0E,UAA5C2D,KAAKzJ,OAAOsF,aAAaQ,gBAChFs1B,EAAW,QACXmlB,GAAe79C,EAAoBkf,EAAY2+B,IAAc1/C,OACb,UAA5C4I,KAAKzJ,OAAOsF,aAAaQ,iBACzBy6C,GAAe,GAEnB8S,EAAY9S,GAAanlB,GAAUu4B,IAEc,UAA5ClqD,KAAKzJ,OAAOsF,aAAaQ,iBAC9Bs1B,EAAW,SACXi4B,EAAY5pD,KAAKzJ,OAAOwF,WAAsB,aAAG41B,GAAUu4B,IAGd,WAA5ClqD,KAAKzJ,OAAOsF,aAAaQ,eAC9BstD,EAAM3+C,YAAYk/C,GAGlBP,EAAM3/C,aAAakgD,EAAQP,EAAMvzB,mBAGL,WAA3B3d,EAAW7Y,aAChB+pD,EAAM3+C,YAAYk/C,GAG1BpU,EAAUzvC,QAAS,GAQvBiiD,EAAe/rD,UAAU0K,QAAU,WAC/BjH,KAAK8H,uBAEFwgD,WC3UX6B,IAAetnD,OAAOunD,GAAcC,GAAYC,GAAYC,GAAeC,GAAeC,GAAiBC,GAAcC,GAAkBC,GAAmBC,GAAiBC,GAAqBC,GAAmBC,GAAYC,EAAiBC,GAAqBC,GAAiBC,GAAaC,GAAcC,GAAqBC,EAAcC,yBtCEtU,sBAEQ,2BAEH,4BAEI,kCAEE,gCAEJ,gCAEI,mCAED,gCAEF,6BAED,+BAEG,iCAED,+BAED,mCAEK,sCAEF,+BAEL,wBAEF,uBAEC,wBAEA,yBAEC,4BAEE,0CAEY,2CAEX,gCAEA,mCAEE,qCAEC,gCAEN,2BAEC,wCAEY,uCAEb,yBAED,uBAED,+BAES,+BAET,uBAEC,uBAED,yBAEG,4BAEA,yBAEH,+BAES,qCAEH,mCAEC,8BAEN,yBAEC,2BAEA,0BAED,kCAES,yCAED,gCAEV,yBAEK,gCAEC,mCAEE,gCAEE,8CAEI,2CAEN,4BAER,+BAEW,+BAEX,yBAEK,yBAEL,wBAEG,2BAEA,2BAEA,wBAEH,4BAEO,iCAED,mCAEC,mCAED,kCAEA,iCAED,2BAEL,oBAEF,sBAEI,2BAEE,4BAED,6BAEE,+BAEA,+BAEA,+BAEA"}