@syncfusion/ej2-lists 23.1.42 → 23.1.43
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.
- package/CHANGELOG.md +8 -0
- package/dist/ej2-lists.min.js +2 -2
- package/dist/ej2-lists.umd.min.js +2 -2
- package/dist/ej2-lists.umd.min.js.map +1 -1
- package/dist/es6/ej2-lists.es2015.js +18 -7
- package/dist/es6/ej2-lists.es2015.js.map +1 -1
- package/dist/es6/ej2-lists.es5.js +27 -16
- package/dist/es6/ej2-lists.es5.js.map +1 -1
- package/dist/global/ej2-lists.min.js +2 -2
- package/dist/global/ej2-lists.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +7 -7
- package/src/list-view/list-view.d.ts +3 -1
- package/src/list-view/list-view.js +16 -5
- package/src/list-view/virtualization.d.ts +1 -1
- package/src/list-view/virtualization.js +11 -11
- package/dist/ts/common/list-base.ts +0 -1286
- package/dist/ts/component.ts +0 -4
- package/dist/ts/list-view/list-view.ts +0 -2653
- package/dist/ts/list-view/virtualization.ts +0 -1187
- package/dist/ts/sortable/sortable.ts +0 -485
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-lists.min.js","sources":["../../src/common/list-base.js","../../src/sortable/sortable.js","../../src/list-view/list-view.js","../../src/list-view/virtualization.js","../../src/global.js"],"sourcesContent":["/* eslint-disable no-inner-declarations */\nimport { extend, merge, isNullOrUndefined, getValue, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n};\n/**\n * Base List Generator\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var ListBase;\n(function (ListBase) {\n /**\n *\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null,\n sortBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n enableHtmlSanitizer: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right',\n itemNavigable: false\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} createListFromJson - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, \n // eslint-disable-next-line\n options, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n }\n else {\n return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel, componentInstance);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - returns the list options that need to provide.\n */\n function createListFromArray(createElement, dataSource, \n // tslint:disable-next-line\n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} subChild - returns the list options that need to provide.\n */\n function createListItemFromArray(createElement, dataSource, \n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options, componentInstance);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} child - returns the list options that need to provide.\n */\n function createListItemFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = (componentInstance &&\n (componentInstance.getModuleName() === 'listview' || componentInstance.getModuleName() === 'multiselect'))\n ? curOpt.fields : extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n var checkboxElement = [];\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n var anchorElement;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n // eslint-disable-next-line no-prototype-builtins\n !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData[fields.id];\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n if (curOpt.itemNavigable && (fieldData[fields.url] || fieldData[fields.urlAttributes])) {\n checkboxElement.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n else {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n }\n if (isSingleLevel === true) {\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, \n // eslint-disable-next-line no-prototype-builtins\n (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (ariaAttributes.groupItemRole == 'presentation' || ariaAttributes.itemRole == 'presentation') {\n li.removeAttribute('aria-level');\n }\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n && !curOpt.template) {\n var attr = { src: fieldData[fields.imageUrl] };\n merge(attr, fieldData[fields.imageAttributes]);\n var imageElemnt = createElement('img', { className: cssClass.image, attrs: attr });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', imageElemnt);\n }\n else {\n prepend([imageElemnt], li.firstElementChild);\n }\n }\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) &&\n !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n var iconElement = createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', iconElement);\n }\n else {\n prepend([iconElement], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (anchorElement) {\n addClass([li], [cssClass.navigable]);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n checkboxElement = [];\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - Specifies the list options that need to provide.\n */\n function createListFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel, componentInstance);\n return generateUL(createElement, li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n *\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n *\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n *\n * @param {{Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var cusQuery = new Query().group(curFields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[curFields.text] = ds[j].key;\n grpItem[\"\" + hdr] = true;\n var newtext = curFields.text;\n if (newtext === 'id') {\n newtext = 'text';\n grpItem[\"\" + newtext] = ds[j].key;\n }\n grpItem._id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n *\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // eslint-disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n *\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n // eslint-disable-next-line\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n // eslint-disable-next-line\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n var attributes_1 = getAllAttributes(li);\n if (attributes_1.id) {\n json[fields.id] = attributes_1.id;\n delete attributes_1.id;\n }\n else {\n json[fields.id] = generateId();\n }\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n *\n * @param {string} template - that need to convert and generate li element.\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function renderContentTemplate(createElement, template, dataSource, \n // eslint-disable-next-line\n fields, options, componentInstance) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n // eslint-disable-next-line\n var compiledString = compileTemplate(template);\n var liCollection = [];\n var value;\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], curFields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], curFields);\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n li.innerText = curItem;\n }\n else {\n li.innerText = fieldData[curFields.text];\n }\n }\n else {\n var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;\n if (isHeader) {\n if (componentInstance && componentInstance.getModuleName() != 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n *\n * @param {string} template - that need to convert and generate li element.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n *\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n // tslint:disable-next-line\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, \n // eslint-disable-next-line\n headerItems, options, componentInstance) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(groupTemplate);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var curOpt = extend({}, defaultListBaseOptions, options);\n var category = curFields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[\"\" + category] = header.textContent;\n header.innerHTML = '';\n if (componentInstance && componentInstance.getModuleName() !== \"listview\") {\n // eslint-disable-next-line\n var compiledElement = compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, header);\n if (compiledElement) {\n append(compiledElement, header);\n }\n }\n else {\n append(compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), header);\n }\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n // Get SubList\n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(createElement, subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n // eslint-disable-next-line @typescript-eslint/ban-types\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length && !curOpt.itemNavigable) {\n append(innerElements, li);\n }\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable));\n }\n else {\n if (innerElements.length && curOpt.itemNavigable) {\n append(innerElements, li);\n }\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n // eslint-disable-next-line\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n };\n }\n function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n attr.href = fieldData[fields.url] ? fieldData[fields.url] :\n fieldData[fields.urlAttributes].href;\n }\n var anchorTag;\n if (!isFullNavigation) {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n }\n else {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url });\n var anchorWrapper = createElement('div', { className: cssClass.anchorWrap });\n if (innerElements && innerElements.length) {\n append(innerElements, anchorWrapper);\n }\n anchorWrapper.appendChild(document.createTextNode(text));\n append([anchorWrapper], anchorTag);\n }\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n // tslint:disable-next-line\n /* tslint:disable:align */\n function generateLI(createElement, item, fieldData, \n // eslint-disable-next-line\n fields, className, options, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = fieldData[fields.text] || '';\n // tslint:disable-next-line\n uID = (isNullOrUndefined(fieldData['_id'])) ? fieldData[fields.id] : fieldData['_id'];\n // eslint-disable-next-line no-prototype-builtins\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n if (options && options.enableHtmlSanitizer) {\n // eslint-disable-next-line no-self-assign\n text = text;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (!isNullOrUndefined(uID) === true) {\n li.setAttribute('data-uid', uID);\n }\n else {\n li.setAttribute('data-uid', generateId());\n }\n if (grpLI && options && options.groupTemplate) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(options.groupTemplate);\n if (componentInstance && componentInstance.getModuleName() !== \"listview\") {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), li);\n }\n }\n else if (!grpLI && options && options.template) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(options.template);\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n }\n else {\n var element = createElement('span', {\n className: cssClass.text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n });\n if (options && options.enableHtmlSanitizer) {\n element.innerText = SanitizeHtmlHelper.sanitize(text);\n }\n else {\n element.innerHTML = text;\n }\n innerDiv.appendChild(element);\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n *\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in UL element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n *\n * @param {liElement} liElement - Specifies LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n // eslint-disable-next-line @typescript-eslint/ban-types\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n *\n * @param {Object} dataSource - Specifies an JSON or String data.\n *\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[\"\" + field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[\"\" + dataField] = value;\n }\n }\n }\n return fieldData;\n}\nfunction compileTemplate(template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelector(template)) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\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})();\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 { Base, Event, getUniqueID, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { closest, Draggable, remove, compareElementParent } from '@syncfusion/ej2-base';\nimport { addClass, isNullOrUndefined, getComponent, isBlazor, EventHandler } from '@syncfusion/ej2-base';\n/**\n * Sortable Module provides support to enable sortable functionality in Dom Elements.\n * ```html\n * <div id=\"sortable\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * <div>Item 4</div>\n * <div>Item 5</div>\n * </div>\n * ```\n * ```typescript\n * let ele: HTMLElement = document.getElementById('sortable');\n * let sortObj: Sortable = new Sortable(ele, {});\n * ```\n */\nvar Sortable = /** @class */ (function (_super) {\n __extends(Sortable, _super);\n function Sortable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.getHelper = function (e) {\n // eslint-disable-next-line prefer-const\n var target = _this.getSortableElement(e.sender.target);\n if (!_this.isValidTarget(target, _this)) {\n return false;\n }\n var element;\n if (_this.helper) {\n element = _this.helper({ sender: target, element: e.element });\n }\n else {\n element = target.cloneNode(true);\n element.style.width = target.offsetWidth + \"px\";\n element.style.height = target.offsetHeight + \"px\";\n }\n addClass([element], ['e-sortableclone']);\n document.body.appendChild(element);\n return element;\n };\n // eslint-disable-next-line\n _this.onDrag = function (e) {\n if (!e.target) {\n return;\n }\n _this.trigger('drag', { event: e.event, element: _this.element, target: e.target });\n var newInst = _this.getSortableInstance(e.target);\n var target = _this.getSortableElement(e.target, newInst);\n if ((_this.isValidTarget(target, newInst) || e.target.className.indexOf('e-list-group-item') > -1) && (_this.curTarget !== target ||\n !isNullOrUndefined(newInst.placeHolder)) && (newInst.placeHolderElement ? newInst.placeHolderElement !== e.target : true)) {\n if (e.target.className.indexOf('e-list-group-item') > -1) {\n target = e.target;\n }\n _this.curTarget = target;\n if (_this.target === target) {\n return;\n }\n var oldIdx = _this.getIndex(newInst.placeHolderElement, newInst);\n var placeHolder = _this.getPlaceHolder(target, newInst);\n var newIdx = void 0;\n if (placeHolder) {\n oldIdx = isNullOrUndefined(oldIdx) ? _this.getIndex(_this.target) : oldIdx;\n newIdx = _this.getIndex(target, newInst, e.event);\n var isPlaceHolderPresent = _this.isPlaceHolderPresent(newInst);\n if (isPlaceHolderPresent && oldIdx === newIdx) {\n return;\n }\n if (isPlaceHolderPresent) {\n remove(newInst.placeHolderElement);\n }\n newInst.placeHolderElement = placeHolder;\n if (e.target.className.indexOf('e-list-group-item') > -1) {\n newInst.element.insertBefore(newInst.placeHolderElement, newInst.element.children[newIdx]);\n }\n else if (newInst.element !== _this.element && newIdx === newInst.element.childElementCount) {\n newInst.element.appendChild(newInst.placeHolderElement);\n }\n else {\n newInst.element.insertBefore(newInst.placeHolderElement, newInst.element.children[newIdx]);\n }\n _this.refreshDisabled(oldIdx, newIdx, newInst);\n }\n else {\n oldIdx = isNullOrUndefined(oldIdx) ? _this.getIndex(_this.target) :\n _this.getIndex(target, newInst) < oldIdx || !oldIdx ? oldIdx : oldIdx - 1;\n newIdx = _this.getIndex(target, newInst);\n var idx = newInst.element !== _this.element ? newIdx : oldIdx < newIdx ? newIdx + 1 : newIdx;\n _this.updateItemClass(newInst);\n newInst.element.insertBefore(_this.target, newInst.element.children[idx]);\n _this.refreshDisabled(oldIdx, newIdx, newInst);\n _this.curTarget = _this.target;\n _this.trigger('drop', {\n droppedElement: _this.target, element: newInst.element, previousIndex: oldIdx, currentIndex: newIdx,\n target: e.target, helper: document.getElementsByClassName('e-sortableclone')[0], event: e.event, scope: _this.scope\n });\n }\n }\n else if (_this.curTarget !== _this.target && _this.scope && _this.curTarget !== target && !isNullOrUndefined(newInst.placeHolder)) {\n remove(_this.getSortableInstance(_this.curTarget).placeHolderElement);\n _this.curTarget = _this.target;\n }\n newInst = _this.getSortableInstance(_this.curTarget);\n if (isNullOrUndefined(target) && e.target !== newInst.placeHolderElement) {\n if (_this.isPlaceHolderPresent(newInst)) {\n _this.removePlaceHolder(newInst);\n }\n }\n else {\n var placeHolders = [].slice.call(document.getElementsByClassName('e-sortable-placeholder'));\n var inst_1;\n placeHolders.forEach(function (placeHolder) {\n inst_1 = _this.getSortableInstance(placeHolder);\n if (inst_1.element && inst_1 !== newInst) {\n _this.removePlaceHolder(inst_1);\n }\n });\n }\n };\n // eslint-disable-next-line\n _this.onDragStart = function (e) {\n _this.target = _this.getSortableElement(e.target);\n var cancelDrag = false;\n _this.target.classList.add('e-grabbed');\n _this.curTarget = _this.target;\n e.helper = document.getElementsByClassName('e-sortableclone')[0];\n var args = { cancel: false, element: _this.element, target: _this.target };\n _this.trigger('beforeDragStart', args, function (observedArgs) {\n if (observedArgs.cancel) {\n cancelDrag = observedArgs.cancel;\n _this.onDragStop(e);\n }\n });\n if (cancelDrag) {\n return;\n }\n if (isBlazor) {\n _this.trigger('dragStart', {\n event: e.event, element: _this.element, target: _this.target,\n bindEvents: e.bindEvents, dragElement: e.dragElement\n });\n }\n else {\n _this.trigger('dragStart', { event: e.event, element: _this.element, target: _this.target });\n }\n };\n // eslint-disable-next-line\n _this.onDragStop = function (e) {\n var dropInst = _this.getSortableInstance(_this.curTarget);\n var prevIdx;\n var curIdx;\n var handled;\n prevIdx = _this.getIndex(_this.target);\n var isPlaceHolderPresent = _this.isPlaceHolderPresent(dropInst);\n if (isPlaceHolderPresent) {\n var curIdx_1 = _this.getIndex(dropInst.placeHolderElement, dropInst);\n var args = {\n previousIndex: prevIdx, currentIndex: curIdx_1, target: e.target, droppedElement: _this.target,\n helper: e.helper, cancel: false, handled: false\n };\n _this.trigger('beforeDrop', args, function (observedArgs) {\n if (!observedArgs.cancel) {\n handled = observedArgs.handled;\n _this.updateItemClass(dropInst);\n if (observedArgs.handled) {\n var ele = _this.target.cloneNode(true);\n _this.target.classList.remove('e-grabbed');\n _this.target = ele;\n }\n dropInst.element.insertBefore(_this.target, dropInst.placeHolderElement);\n var curIdx_2 = _this.getIndex(_this.target, dropInst);\n prevIdx = _this === dropInst && (prevIdx - curIdx_2) > 1 ? prevIdx - 1 : prevIdx;\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx_2,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope, handled: handled\n });\n }\n remove(dropInst.placeHolderElement);\n });\n }\n dropInst = _this.getSortableInstance(e.target);\n // eslint-disable-next-line prefer-const\n curIdx = dropInst.element.childElementCount;\n prevIdx = _this.getIndex(_this.target);\n if (dropInst.element === e.target || (!isPlaceHolderPresent && _this.curTarget === _this.target)) {\n var beforeDropArgs = {\n previousIndex: prevIdx, currentIndex: _this.curTarget === _this.target ? prevIdx : curIdx,\n target: e.target, droppedElement: _this.target, helper: e.helper, cancel: false\n };\n _this.trigger('beforeDrop', beforeDropArgs, function (observedArgs) {\n if ((dropInst.element === e.target || e.target.className.indexOf('e-list-nrt') > -1 || e.target.className.indexOf('e-list-nr-template') > -1\n || e.target.closest('.e-list-nr-template')) && !observedArgs.cancel) {\n _this.updateItemClass(dropInst);\n dropInst.element.appendChild(_this.target);\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope\n });\n }\n });\n }\n _this.target.classList.remove('e-grabbed');\n _this.target = null;\n _this.curTarget = null;\n remove(e.helper);\n getComponent(_this.element, 'draggable').intDestroy(e.event);\n };\n _this.bind();\n return _this;\n }\n Sortable_1 = Sortable;\n Sortable.prototype.bind = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('sortable');\n }\n if (!this.itemClass) {\n this.itemClass = 'e-sort-item';\n this.dataBind();\n }\n this.initializeDraggable();\n };\n Sortable.prototype.initializeDraggable = function () {\n new Draggable(this.element, {\n helper: this.getHelper,\n dragStart: this.onDragStart,\n drag: this.onDrag,\n dragStop: this.onDragStop,\n dragTarget: \".\" + this.itemClass,\n enableTapHold: true,\n tapHoldThreshold: 200,\n queryPositionInfo: this.queryPositionInfo,\n distance: 1\n });\n this.wireEvents();\n };\n Sortable.prototype.wireEvents = function () {\n var wrapper = this.element;\n EventHandler.add(wrapper, 'keydown', this.keyDownHandler, this);\n };\n Sortable.prototype.unwireEvents = function () {\n var wrapper = this.element;\n EventHandler.remove(wrapper, 'keydown', this.keyDownHandler);\n };\n Sortable.prototype.keyDownHandler = function (e) {\n if (e.keyCode === 27) {\n var dragStop = getComponent(this.element, 'draggable');\n if (dragStop) {\n dragStop.intDestroy(null);\n }\n var dragWrapper = document.getElementsByClassName('e-sortableclone')[0];\n if (dragWrapper) {\n dragWrapper.remove();\n }\n var dragPlaceholder = document.getElementsByClassName('e-sortable-placeholder')[0];\n if (dragPlaceholder) {\n dragPlaceholder.remove();\n }\n }\n };\n Sortable.prototype.getPlaceHolder = function (target, instance) {\n if (instance.placeHolder) {\n var placeHolderElement = instance.placeHolder({ element: instance.element, grabbedElement: this.target, target: target });\n placeHolderElement.classList.add('e-sortable-placeholder');\n return placeHolderElement;\n }\n return null;\n };\n Sortable.prototype.isValidTarget = function (target, instance) {\n return target && compareElementParent(target, instance.element) && target.classList.contains(instance.itemClass) &&\n !target.classList.contains('e-disabled');\n };\n Sortable.prototype.removePlaceHolder = function (instance) {\n remove(instance.placeHolderElement);\n instance.placeHolderElement = null;\n };\n Sortable.prototype.updateItemClass = function (instance) {\n if (this !== instance) {\n this.target.classList.remove(this.itemClass);\n this.target.classList.add(instance.itemClass);\n }\n };\n Sortable.prototype.getSortableInstance = function (element) {\n element = closest(element, \".e-\" + this.getModuleName());\n if (element) {\n var inst = getComponent(element, Sortable_1);\n return inst.scope && this.scope && inst.scope === this.scope ? inst : this;\n }\n else {\n return this;\n }\n };\n Sortable.prototype.refreshDisabled = function (oldIdx, newIdx, instance) {\n if (instance === this) {\n var element = void 0;\n var increased = oldIdx < newIdx;\n var disabledIdx = void 0;\n var start = increased ? oldIdx : newIdx;\n var end = increased ? newIdx : oldIdx;\n while (start <= end) {\n element = this.element.children[start];\n if (element.classList.contains('e-disabled')) {\n disabledIdx = this.getIndex(element);\n this.element.insertBefore(element, this.element.children[increased ? disabledIdx + 2 : disabledIdx - 1]);\n start = increased ? disabledIdx + 2 : disabledIdx + 1;\n }\n else {\n start++;\n }\n }\n }\n };\n Sortable.prototype.getIndex = function (target, instance, e) {\n if (instance === void 0) { instance = this; }\n var idx;\n var placeHolderPresent;\n [].slice.call(instance.element.children).forEach(function (element, index) {\n if (element.classList.contains('e-sortable-placeholder')) {\n placeHolderPresent = true;\n }\n if (element === target) {\n idx = index;\n if (!isNullOrUndefined(e)) {\n if (placeHolderPresent) {\n idx -= 1;\n }\n var offset = target.getBoundingClientRect();\n var clientY = offset.bottom - ((offset.bottom - offset.top) / 2);\n var cltY = e.changedTouches ? e.changedTouches[0].clientY : e.clientY;\n idx = cltY <= clientY ? idx : idx + 1;\n }\n return;\n }\n });\n return idx;\n };\n Sortable.prototype.getSortableElement = function (element, instance) {\n if (instance === void 0) { instance = this; }\n return closest(element, \".\" + instance.itemClass);\n };\n Sortable.prototype.queryPositionInfo = function (value) {\n value.left = pageXOffset ? parseFloat(value.left) - pageXOffset + \"px\" : value.left;\n value.top = pageYOffset ? parseFloat(value.top) - pageYOffset + \"px\" : value.top;\n return value;\n };\n Sortable.prototype.isPlaceHolderPresent = function (instance) {\n return instance.placeHolderElement && !!closest(instance.placeHolderElement, \"#\" + instance.element.id);\n };\n /**\n * It is used to sort array of elements from source element to destination element.\n *\n * @param destination - Defines the destination element to which the sortable elements needs to be appended.\n *\n * If it is null, then the Sortable library element will be considered as destination.\n * @param targetIndexes - Specifies the sortable elements indexes which needs to be sorted.\n * @param insertBefore - Specifies the index before which the sortable elements needs to be appended.\n * If it is null, elements will be appended as last child.\n * @function moveTo\n * @returns {void}\n */\n Sortable.prototype.moveTo = function (destination, targetIndexes, insertBefore) {\n moveTo(this.element, destination, targetIndexes, insertBefore);\n };\n /**\n * It is used to destroy the Sortable library.\n */\n Sortable.prototype.destroy = function () {\n this.unwireEvents();\n if (this.itemClass === 'e-sort-item') {\n this.itemClass = null;\n this.dataBind();\n }\n getComponent(this.element, Draggable).destroy();\n _super.prototype.destroy.call(this);\n };\n Sortable.prototype.getModuleName = function () {\n return 'sortable';\n };\n Sortable.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'itemClass':\n [].slice.call(this.element.children).forEach(function (element) {\n if (element.classList.contains(oldProp.itemClass)) {\n element.classList.remove(oldProp.itemClass);\n }\n if (newProp.itemClass) {\n element.classList.add(newProp.itemClass);\n }\n });\n break;\n }\n }\n };\n var Sortable_1;\n __decorate([\n Property(false)\n ], Sortable.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"itemClass\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"scope\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"helper\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"placeHolder\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDrop\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drop\", void 0);\n Sortable = Sortable_1 = __decorate([\n NotifyPropertyChanges\n ], Sortable);\n return Sortable;\n}(Base));\nexport { Sortable };\n/**\n * It is used to sort array of elements from source element to destination element.\n *\n * @private\n */\nexport function moveTo(from, to, targetIndexes, insertBefore) {\n var targetElements = [];\n if (!to) {\n to = from;\n }\n if (targetIndexes && targetIndexes.length) {\n targetIndexes.forEach(function (index) {\n targetElements.push(from.children[index]);\n });\n }\n else {\n targetElements = [].slice.call(from.children);\n }\n if (isNullOrUndefined(insertBefore)) {\n targetElements.forEach(function (target) {\n to.appendChild(target);\n });\n }\n else {\n var insertElement_1 = to.children[insertBefore];\n targetElements.forEach(function (target) {\n to.insertBefore(target, insertElement_1);\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})();\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 { merge, formatUnit, isNullOrUndefined, append, detach, extend } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch, animationMode } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n container: 'e-list-container',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n backButton: 'e-back-button',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist',\n virtualElementContainer: 'e-list-virtualcontainer'\n};\nvar LISTVIEW_TEMPLATE_PROPERTY = 'Template';\nvar LISTVIEW_GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar LISTVIEW_HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar swipeVelocity = 0.5;\n/**\n * Represents the field settings of the ListView.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n * <div id=\"listview\">\n * <ul>\n * <li>Favorite</li>\n * <li>Documents</li>\n * <li>Downloads</li>\n * </ul>\n * </div>\n * ```\n * ```typescript\n * var listviewObject = new ListView({});\n * listviewObject.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n *\n * @param options\n *\n * @param element\n */\n function ListView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousSelectedItems = [];\n _this.hiddenItems = [];\n _this.enabledItems = [];\n _this.disabledItems = [];\n return _this;\n }\n /**\n * @param newProp\n *\n * @param oldProp\n *\n * @private\n */\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n // eslint-disable-next-line\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false, 'header');\n }\n break;\n case 'query':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false, 'header');\n break;\n case 'enableVirtualization':\n if (!isNullOrUndefined(this.contentContainer)) {\n detach(this.contentContainer);\n }\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'template':\n if (!this.enableVirtualization) {\n this.refresh();\n }\n break;\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.clientHeight ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n // Support Component Functions\n ListView.prototype.header = function (text, showBack, prop) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText });\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n innerHeaderEle.innerText = this.headerTitle;\n }\n else {\n innerHeaderEle.innerHTML = this.headerTitle;\n }\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' ' + classNames.backButton,\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n // eslint-disable-next-line\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n // eslint-disable-next-line\n var compiledElement = compiledString({}, this, prop, this.LISTVIEW_HEADERTEMPLATE_ID, null, null, this.headerEle);\n if (compiledElement) {\n append(compiledElement, headerTemplateEle);\n }\n append([headerTemplateEle], this.headerEle);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n if (this.enableHtmlSanitizer) {\n text = SanitizeHtmlHelper.sanitize(text);\n }\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[\"\" + slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n // eslint-disable-next-line\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n if (this.template) {\n try {\n if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {\n this.setProperties({ template: document.querySelector(this.template).innerHTML.trim() }, true);\n }\n }\n catch (e) {\n compile(this.template);\n }\n }\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'presentation', wrapperRole: 'presentation'\n },\n // eslint-disable-next-line\n fields: (this.fields.properties),\n sortOrder: this.sortOrder,\n showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this),\n templateID: \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,\n groupTemplateID: \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = this.enablePersistence ? this.selectedId : [];\n this.LISTVIEW_TEMPLATE_ID = \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY;\n this.LISTVIEW_GROUPTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY;\n this.LISTVIEW_HEADERTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_HEADERTEMPLATE_PROPERTY;\n this.aniObj = new Animation(this.animateOptions);\n this.removeElement(this.curUL);\n this.removeElement(this.ulElement);\n this.removeElement(this.headerEle);\n this.removeElement(this.contentContainer);\n this.curUL = this.ulElement = this.liCollection = this.headerEle = this.contentContainer = undefined;\n };\n ListView.prototype.renderCheckbox = function (args) {\n var _this = this;\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData_1;\n // eslint-disable-next-line prefer-const\n checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {\n var index = this.selectedId.findIndex(function (e) { return e == fieldData_1[_this.listBaseOption.fields.id].toString(); });\n if (index != -1) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (fieldData_1[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n checkboxElement.setAttribute('aria-label', 'checkbox');\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n if (this.checkBoxPosition === 'Left') {\n this.virtualCheckBox = args.item.firstElementChild.children[0];\n }\n else {\n this.virtualCheckBox = args.item.firstElementChild.lastElementChild;\n }\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * Checks the specific list item by passing the unchecked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n if (checked === true) {\n liElement.classList.add(classNames.selected);\n }\n else {\n liElement.classList.remove(classNames.selected);\n }\n if (checked === true) {\n checkboxIcon.classList.add(classNames.checked);\n }\n else {\n checkboxIcon.classList.remove(classNames.checked);\n }\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n this.updateSelectedId();\n }\n };\n /**\n * Uncheck the specific list item by passing the checked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.uncheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * Checks all the unchecked items in the ListView.\n */\n ListView.prototype.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * Uncheck all the checked items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n this.updateSelectedId();\n }\n };\n ListView.prototype.setCheckbox = function () {\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n args.item = element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.curData = this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n this.renderCheckbox(args);\n if (args.item.classList.contains(classNames.selected)) {\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n /**\n * Refresh the height of the list item only on enabling the virtualization property.\n */\n ListView.prototype.refreshItemHeight = function () {\n if (this.virtualizationModule) {\n this.virtualizationModule.refreshItemHeight();\n }\n };\n ListView.prototype.clickHandler = function (e) {\n if (Array.isArray(this.dataSource) && this.dataSource.length === 0) {\n return;\n }\n var target = e.target;\n this.targetElement = target;\n var classList = target.classList;\n var closestElement;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n li.classList.add(classNames.focused);\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n var checkIcon = li.querySelector('.' + classNames.checkboxIcon);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n if ((target.nodeName == \"INPUT\") || (target.nodeName == \"TEXTAREA\")) {\n target.classList.add('e-focused');\n this.targetElement = target;\n }\n }\n }\n else {\n this.setSelectLI(li, e);\n if ((target.nodeName == \"INPUT\") || (target.nodeName == \"TEXTAREA\")) {\n target.classList.add('e-focused');\n this.targetElement = target;\n }\n }\n closestElement = closest(e.target, 'li');\n if (!isNullOrUndefined(closestElement)) {\n if (closestElement.classList.contains('e-has-child') &&\n !e.target.parentElement.classList.contains('e-listview-checkbox')) {\n closestElement.classList.add(classNames.disable);\n }\n }\n }\n this.updateSelectedId();\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ListView.prototype.leaveHandler = function (e) {\n this.removeHover();\n };\n ListView.prototype.homeKeyHandler = function (e, end) {\n e.preventDefault();\n if (Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelectorAll('.' + classNames.listItem);\n var focusedElement = this.curUL.querySelector('.' + classNames.focused) ||\n this.curUL.querySelector('.' + classNames.selected);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n focusedElement.classList.remove(classNames.selected);\n }\n }\n var index = !end ? 0 : li.length - 1;\n if (li[index].classList.contains(classNames.hasChild) || this.showCheckBox) {\n li[index].classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(li[index], e);\n }\n if (li[index]) {\n this.element.setAttribute('aria-activedescendant', li[index].id.toString());\n }\n else {\n this.element.removeAttribute('aria-activedescendant');\n }\n }\n };\n ListView.prototype.onArrowKeyDown = function (e, prev) {\n var siblingLI;\n var li;\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n if (hasChild || this.showCheckBox) {\n li = this.curUL.querySelector('.' + classNames.focused) || this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n if (!isNullOrUndefined(siblingLI)) {\n if (li) {\n li.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n li.classList.remove(classNames.selected);\n }\n }\n if (siblingLI.classList.contains(classNames.hasChild) || this.showCheckBox) {\n siblingLI.classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(siblingLI, e);\n }\n }\n }\n else {\n li = this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n this.setSelectLI(siblingLI, e);\n }\n if (siblingLI) {\n this.element.setAttribute('aria-activedescendant', siblingLI.id.toString());\n }\n else {\n this.element.removeAttribute('aria-activedescendant');\n }\n return siblingLI;\n };\n ListView.prototype.arrowKeyHandler = function (e, prev) {\n var _this = this;\n e.preventDefault();\n if (Object.keys(this.dataSource).length && this.curUL) {\n var siblingLI = this.onArrowKeyDown(e, prev);\n var elementTop = this.element.getBoundingClientRect().top;\n var elementHeight = this.element.getBoundingClientRect().height;\n var firstItemBounds = this.curUL.querySelector('.' + classNames.listItem).getBoundingClientRect();\n var heightDiff = void 0;\n var groupItemBounds = void 0;\n if (this.fields.groupBy) {\n groupItemBounds = this.curUL.querySelector('.' + classNames.groupListItem).getBoundingClientRect();\n }\n if (siblingLI) {\n var siblingTop = siblingLI.getBoundingClientRect().top;\n var siblingHeight = siblingLI.getBoundingClientRect().height;\n if (!prev) {\n var height = this.isWindow ? window.innerHeight : elementHeight;\n heightDiff = this.isWindow ? (siblingTop + siblingHeight) :\n ((siblingTop - elementTop) + siblingHeight);\n if (heightDiff > height) {\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + (heightDiff - height));\n }\n else {\n this.element.scrollTop = this.element.scrollTop + (heightDiff - height);\n }\n }\n }\n else {\n heightDiff = this.isWindow ? siblingTop : (siblingTop - elementTop);\n if (heightDiff < 0) {\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop + heightDiff;\n }\n }\n }\n }\n else if (this.enableVirtualization && prev && this.virtualizationModule.uiFirstIndex) {\n this.onUIScrolled = function () {\n _this.onArrowKeyDown(e, prev);\n _this.onUIScrolled = undefined;\n };\n heightDiff = this.virtualizationModule.listItemHeight;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset - heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop - heightDiff;\n }\n }\n else if (prev) {\n if (this.showHeader && this.headerEle) {\n var topHeight = groupItemBounds ? groupItemBounds.top : firstItemBounds.top;\n var headerBounds = this.headerEle.getBoundingClientRect();\n heightDiff = headerBounds.top < 0 ? (headerBounds.height - topHeight) : 0;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset - heightDiff);\n }\n else {\n this.element.scrollTop = 0;\n }\n }\n else if (this.fields.groupBy) {\n heightDiff = this.isWindow ? (groupItemBounds.top < 0 ? groupItemBounds.top : 0) :\n (elementTop - firstItemBounds.top) + groupItemBounds.height;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop - heightDiff;\n }\n }\n }\n }\n };\n ListView.prototype.enterKeyHandler = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (hasChild && li) {\n li.classList.remove(classNames.focused);\n if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n e.preventDefault();\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelector('.' + classNames.focused);\n var checkboxElement = void 0;\n var checkIcon = void 0;\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n checkboxElement = args.item.querySelector('.' + classNames.checkboxWrapper);\n this.checkInternally(args, checkboxElement);\n checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n }\n else {\n this.uncheckItem(li);\n }\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon ? checkIcon.classList.contains(classNames.checked) : false });\n this.trigger('select', eventArgs);\n this.updateSelectedId();\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 32:\n if (isNullOrUndefined(this.targetElement) || !(this.targetElement.classList.contains('e-focused'))) {\n this.spaceKeyHandler(e);\n }\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right' && e.velocity > swipeVelocity && e.originalEvent.type === 'touchend') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox && !isNullOrUndefined(this.selectedLI)) {\n this.selectedLI.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n var textAreaFocus = li.querySelector('textarea') || li.querySelector('input');\n li.classList.add(classNames.focused);\n if (!isNullOrUndefined(e)) {\n if (e.target === textAreaFocus) {\n textAreaFocus.classList.add('e-focused');\n }\n }\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (!isNullOrUndefined(data)\n && typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li && li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem =\n // eslint-disable-next-line\n {\n item: li, text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, { isInteracted: true, event: e, cancel: false, index: this.curUL && Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n // eslint-disable-next-line\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n // eslint-disable-next-line\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n var _this = this;\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.selectedLI = li;\n _this.renderSubList(li);\n }\n });\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n // eslint-disable-next-line\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = \n // eslint-disable-next-line\n getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n // eslint-disable-next-line\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n // eslint-disable-next-line\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n // eslint-disable-next-line\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[\"\" + column]) &&\n this.fields[\"\" + column] !==\n ListBase.defaultMappedFields[\"\" + column]\n && columns.indexOf(this.fields[\"\" + column]) === -1) {\n columns.push(this.fields[\"\" + column]);\n }\n }\n query.select(columns);\n // eslint-disable-next-line\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n // eslint-disable-next-line\n var fieldValue = (isNullOrUndefined(this.fields.sortBy)) ? this.fields.text : this.fields.sortBy;\n var query = ListBase.addSorting(this.sortOrder, fieldValue);\n if (dataSource && this.fields.groupBy) {\n if (this.sortOrder !== 'None') {\n this.curViewDS = ListBase.groupDataSource(ListBase.getDataSource(dataSource, query), this.listBaseOption.fields, this.sortOrder);\n }\n else {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.fields, this.sortOrder);\n }\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, query);\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.renderRemoteLists = function (e, listViewComponent) {\n if (this.isDestroyed) {\n return;\n }\n this.localData = e.result;\n listViewComponent.removeElement(listViewComponent.contentContainer);\n this.renderList();\n this.trigger('actionComplete', e);\n };\n ListView.prototype.triggerActionFailure = function (e) {\n if (this.isDestroyed) {\n return;\n }\n this.trigger('actionFailure', e);\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n // eslint-disable-next-line\n var listViewComponent = this;\n if (this.dataSource instanceof DataManager) {\n if (this.dataSource.ready) {\n this.dataSource.ready.then(function (e) {\n /* eslint-disable */\n _this.isOffline = _this.dataSource.dataSource.offline;\n if (_this.dataSource instanceof DataManager && _this.isOffline) {\n _this.renderRemoteLists(e, listViewComponent);\n }\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n else {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n _this.renderRemoteLists(e, listViewComponent);\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.removeElement(this.headerEle);\n this.removeElement(this.ulElement);\n this.removeElement(this.contentContainer);\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n if (Object.keys(window).indexOf('ejsInterop') === -1) {\n this.element.innerHTML = '';\n }\n this.headerEle = this.ulElement = this.liCollection = undefined;\n this.header();\n this.setLocalData();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.setAttributes = function (liElements) {\n for (var i = 0; i < liElements.length; i++) {\n var element = liElements[i];\n if (element.classList.contains('e-list-item')) {\n element.setAttribute('id', this.element.id + '_' + element.getAttribute('data-uid'));\n element.setAttribute('tabindex', '-1');\n }\n }\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.createElement, this.curViewDS, this.listBaseOption, null, this);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(this.liCollection);\n };\n ListView.prototype.exceptionEvent = function (e) {\n this.trigger('actionFailure', e);\n };\n ListView.prototype.UpdateCurrentUL = function () {\n this.ulElement = this.curUL = this.element.querySelector('.' + classNames.parentItem);\n if (this.curUL) {\n // eslint-disable-next-line\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n };\n ListView.prototype.renderSubList = function (li) {\n this.liElement = li;\n var uID = li.getAttribute('data-uid');\n if (li.classList.contains(classNames.hasChild) && uID) {\n var ul = closest(li.parentNode, '.' + classNames.parentItem);\n var ele = this.element.querySelector('[pid=\\'' + uID + '\\']');\n this.curDSLevel.push(uID);\n this.setViewDataSource(this.getSubDS());\n if (!ele) {\n var data = this.curViewDS;\n ele = ListBase.createListFromJson(this.createElement, data, this.listBaseOption, this.curDSLevel.length, null, this);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n var lists = ele.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(lists);\n ele.setAttribute('pID', uID);\n ele.style.display = 'none';\n this.renderIntoDom(ele);\n }\n this.switchView(ul, ele);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.selectedItems) {\n var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);\n // eslint-disable-next-line\n this.header((fieldData[this.listBaseOption.fields.text]), true, 'header');\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization) {\n if (Object.keys(this.dataSource).length) {\n if ((this.template || this.groupTemplate) && !this.virtualizationModule.isNgTemplate()) {\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = this.createElement('div', { className: classNames.container });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n // eslint-disable-next-line\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * Initializes the ListView component rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n this.renderComplete();\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n this.unWireEvents();\n var classAr = [classNames.root, classNames.disable, 'e-rtl',\n 'e-has-header', 'e-lib'].concat(this.cssClass.split(' ').filter(function (css) { return css; }));\n removeClass([this.element], classAr);\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n this.element.innerHTML = '';\n this.contentContainer = null;\n this.selectedItems = null;\n this.selectedLI = null;\n this.liElement = null;\n this.targetElement = null;\n this.currentLiElements = null;\n this.virtualCheckBox = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Switches back from the navigated sub list item.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n // eslint-disable-next-line\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.remove(classNames.disable);\n li.classList.add(classNames.focused);\n if (!(this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked))) {\n li.classList.remove(classNames.selected);\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false), 'header');\n };\n /**\n * Selects the list item from the ListView by passing the elements or field object.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (item) {\n if (this.enableVirtualization) {\n this.virtualizationModule.selectItem(item);\n }\n else if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(item));\n }\n else {\n if (isNullOrUndefined(item) === true) {\n this.removeSelect();\n }\n else {\n this.setSelectLI(this.getLiFromObjOrElement(item));\n }\n }\n };\n ListView.prototype.getLiFromObjOrElement = function (obj) {\n var li;\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (!isNullOrUndefined(obj)) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n if (obj instanceof Element) {\n var uid = obj.getAttribute('data-uid').toString();\n for (var i = 0; i < this.liCollection.length; i++) {\n if (this.liCollection[i].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[i];\n break;\n }\n }\n }\n else {\n Array.prototype.some.call(this.curUL.querySelectorAll('.' + classNames.listItem), function (item) {\n if (item.innerText.trim() === obj.toString()) {\n li = item;\n return true;\n }\n else {\n return false;\n }\n });\n }\n }\n else {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n li = this.element.querySelector('[data-uid=\"'\n + fieldData[this.fields.id] + '\"]');\n if (!this.enableVirtualization && isNullOrUndefined(li)) {\n var curLi = this.element.querySelectorAll('.' + classNames.listItem);\n for (var i = 0; i < curLi.length; i++) {\n // eslint-disable-next-line\n if (curLi[i].innerText.trim() === fieldData[this.fields.text]) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\n };\n /**\n * Selects multiple list items from the ListView.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of\n * elements or array of fields Object with ID and Text fields.\n */\n ListView.prototype.selectMultipleItems = function (item) {\n if (!isNullOrUndefined(item)) {\n for (var i = 0; i < item.length; i++) {\n if (!isNullOrUndefined(item[i])) {\n this.selectItem(item[i]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n ListView.prototype.updateSelectedId = function () {\n this.selectedId = [];\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n for (var i = 0; i < liCollection.length; i++) {\n var tempData = this.getItemData(liCollection[i]);\n if (!isNullOrUndefined(tempData) && tempData[this.listBaseOption.fields.id]) {\n this.selectedId.push(tempData[this.listBaseOption.fields.id]);\n }\n }\n };\n /**\n * Gets the details of the currently selected item from the list items.\n *\n */\n ListView.prototype.getSelectedItems = function () {\n // eslint-disable-next-line\n var finalValue;\n var isCompleted = false;\n this.selectedId = [];\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (this.enableVirtualization && !isCompleted) {\n finalValue = this.virtualizationModule.getSelectedItems();\n isCompleted = true;\n }\n else if (this.showCheckBox && !isCompleted) {\n // eslint-disable-next-line\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[i]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n if (fieldData) {\n // eslint-disable-next-line\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n // eslint-disable-next-line\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n else {\n liTextCollection.push(undefined);\n this.selectedId.push(undefined);\n }\n }\n }\n if ((typeof dataSource[0] === 'string'\n || typeof dataSource[0] === 'number')\n && !isCompleted) {\n finalValue = { item: liCollection, data: dataSource, text: liTextCollection };\n isCompleted = true;\n }\n if (this.isNestedList && !isCompleted) {\n finalValue = { item: liCollection, data: dataParent, text: liTextCollection };\n isCompleted = true;\n }\n else if (!isCompleted) {\n finalValue = { item: liCollection, data: liDataCollection, text: liTextCollection };\n isCompleted = true;\n }\n }\n else if (!isCompleted) {\n var liElement = this.element.getElementsByClassName(classNames.selected)[0];\n var fieldData = getFieldValues(this.getItemData(liElement), this.listBaseOption.fields);\n if ((typeof dataSource[0] === 'string'\n || typeof dataSource[0] === 'number')\n && !isCompleted) {\n finalValue = (!isNullOrUndefined(liElement)) ? {\n item: liElement, data: dataSource,\n text: liElement.innerText.trim()\n } : undefined;\n isCompleted = true;\n }\n else if (!isCompleted) {\n if (isNullOrUndefined(fieldData) || isNullOrUndefined(liElement)) {\n finalValue = undefined;\n isCompleted = true;\n }\n else {\n // eslint-disable-next-line\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n finalValue = {\n text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement)\n };\n isCompleted = true;\n }\n }\n }\n return finalValue;\n };\n /**\n * Finds out an item details from the current list.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (item) {\n return this.getItemData(item);\n };\n /**\n * Enables the disabled list items by passing the Id and text fields.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.enableItem = function (item) {\n this.setItemState(item, true);\n if (this.enableVirtualization) {\n this.virtualizationModule.enableItem(item);\n }\n };\n /**\n * Disables the list items by passing the Id and text fields.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.disableItem = function (item) {\n this.setItemState(item, false);\n if (this.enableVirtualization) {\n this.virtualizationModule.disableItem(item);\n }\n };\n //A function that used to set state of the list item like enable, disable.\n ListView.prototype.setItemState = function (item, isEnable) {\n var resultJSON = this.getItemData(item);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (isEnable) {\n if (li) {\n li.classList.remove(classNames.disable);\n }\n delete resultJSON[this.fields.enabled];\n }\n else if (!isEnable) {\n if (li) {\n li.classList.add(classNames.disable);\n }\n // eslint-disable-next-line\n resultJSON[this.fields.enabled] = false;\n }\n }\n };\n /**\n * Shows the hide list item from the ListView.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.showItem = function (item) {\n this.showHideItem(item, false, '');\n if (this.enableVirtualization) {\n this.virtualizationModule.showItem(item);\n }\n };\n /**\n * Hides an list item from the ListView.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.hideItem = function (item) {\n this.showHideItem(item, true, 'none');\n if (this.enableVirtualization) {\n this.virtualizationModule.hideItem(item);\n }\n };\n ListView.prototype.showHideItem = function (obj, isHide, display) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (li) {\n li.style.display = display;\n }\n if (isHide) {\n // eslint-disable-next-line\n resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * Adds the new list item(s) to the current ListView.\n * To add a new list item(s) in the ListView, we need to pass the `data` as an array of items that need\n * to be added and `fields` as the target item to which we need to add the given item(s) as its children.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {{Object}[]} data - JSON Array Data that need to add.\n *\n * @param {Fields} fields - Target item to add the given data as its children (can be null).\n *\n */\n ListView.prototype.addItem = function (data, fields) {\n if (fields === void 0) { fields = undefined; }\n var dataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n this.addItemInternally(data, fields, dataSource);\n };\n ListView.prototype.addItemInternally = function (data, fields, dataSource) {\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields, dataSource);\n }\n else {\n var ds = this.findItemFromDS(dataSource, fields);\n var child = void 0;\n if (ds) {\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n }\n // check for whether target is nested level or top level in list\n if (ds instanceof Array) {\n for (var i = 0; i < data.length; i++) {\n dataSource.push(data[i]);\n this.setViewDataSource(dataSource);\n // since it is top level target, get the content container's first child\n // as it is always the top level UL\n var targetUL = this.contentContainer\n ? this.contentContainer.children[0]\n : null;\n // check for whether the list was previously empty or not, if it is\n // proceed to call initial render\n if (this.contentContainer && targetUL) {\n this.addItemIntoDom(data[i], targetUL, this.curViewDS);\n }\n else {\n this.reRender();\n }\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n // proceed as target item is in nested level, only if it is a valid target ds\n if (ds) {\n ds[this.fields.child] = child;\n this.addItemInNestedList(ds, data);\n }\n }\n }\n }\n };\n ListView.prototype.addItemInNestedList = function (targetItemData, itemQueue) {\n // eslint-disable-next-line\n var targetItemId = targetItemData[this.fields.id];\n var targetChildDS = targetItemData[this.fields.child];\n var isAlreadyRenderedUL = this.element.querySelector('[pid=\\'' + targetItemId + '\\']');\n var targetLi = this.element.querySelector('[data-uid=\\'' + targetItemId + '\\']');\n var targetUL = isAlreadyRenderedUL\n ? isAlreadyRenderedUL\n : targetLi\n ? closest(targetLi, 'ul')\n : null;\n var targetDS = isAlreadyRenderedUL ? targetChildDS : [targetItemData];\n var isTargetEmptyChild = targetLi ? !targetLi.classList.contains(classNames.hasChild) : false;\n var isRefreshTemplateNeeded = false;\n // if li element is already rendered, that element needs to be refreshed so that\n // it becomes child viewable due to new child items are added now\n if (isTargetEmptyChild) {\n var targetRefreshedElement = ListBase.createListItemFromJson(this.createElement, targetDS, this.listBaseOption, null, null, this);\n this.setAttributes(targetRefreshedElement);\n targetUL.insertBefore(targetRefreshedElement[0], targetLi);\n detach(targetLi);\n isRefreshTemplateNeeded = true;\n }\n // if it is already rendered element, we need to create and append new elements\n if (isAlreadyRenderedUL && itemQueue) {\n for (var i = 0; i < itemQueue.length; i++) {\n targetDS.push(itemQueue[i]);\n this.addItemIntoDom(itemQueue[i], targetUL, targetDS);\n }\n isRefreshTemplateNeeded = true;\n }\n };\n ListView.prototype.addItemIntoDom = function (currentItem, targetUL, curViewDS) {\n var index = curViewDS.indexOf(currentItem);\n this.addListItem(currentItem, index, targetUL, curViewDS);\n var curItemDS = curViewDS[index - 1];\n if (curItemDS && curItemDS.isHeader && curItemDS.items.length === 1) {\n this.addListItem(curItemDS, (index - 1), targetUL, curViewDS);\n }\n };\n ListView.prototype.addListItem = function (dataSource, index, ulElement, curViewDS) {\n var target = this.getLiFromObjOrElement(curViewDS[index + 1]) ||\n this.getLiFromObjOrElement(curViewDS[index + 2]) || null;\n var li = ListBase.createListItemFromJson(this.createElement, [dataSource], this.listBaseOption, null, null, this);\n this.setAttributes(li);\n // eslint-disable-next-line\n if (this.template && this.isReact) {\n this.renderReactTemplates();\n }\n if (this.fields.groupBy && curViewDS[index + 1] && curViewDS[index + 1].isHeader) {\n var targetEle = this.getLiFromObjOrElement(curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n ulElement.insertBefore(li[0], target);\n };\n /**\n * Removes the list item from the data source based on a passed\n * element like fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (item) {\n var listDataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n if (this.enableVirtualization) {\n this.virtualizationModule.removeItem(item);\n }\n else {\n this.removeItemFromList(item, listDataSource);\n }\n };\n ListView.prototype.removeItemFromList = function (obj, listDataSource) {\n var _this = this;\n var curViewDS = this.curViewDS;\n var fields = obj instanceof Element ? this.getElementUID(obj) : obj;\n var dataSource;\n // eslint-disable-next-line prefer-const\n dataSource = this.findItemFromDS(listDataSource, fields, true);\n if (dataSource) {\n var data_1;\n // eslint-disable-next-line prefer-const\n data_1 = this.findItemFromDS(dataSource, fields);\n var index = curViewDS.indexOf(data_1);\n var li = this.getLiFromObjOrElement(obj);\n var groupLi = void 0;\n this.validateNestedView(li);\n if (this.fields.groupBy && this.curViewDS[index - 1] &&\n curViewDS[index - 1].isHeader &&\n curViewDS[index - 1].items.length === 1) {\n if (li && li.previousElementSibling.classList.contains(classNames.groupListItem) &&\n (isNullOrUndefined(li.nextElementSibling) || (li.nextElementSibling &&\n li.nextElementSibling.classList.contains(classNames.groupListItem)))) {\n groupLi = li.previousElementSibling;\n }\n }\n if (li) {\n detach(li);\n }\n if (groupLi) {\n detach(groupLi);\n }\n // eslint-disable-next-line\n var foundData = (dataSource.length - 1) <= 0\n ? this.findParent(this.localData, this.fields.id, \n // eslint-disable-next-line\n function (value) { return value === data_1[_this.fields.id]; }, null) : null;\n var dsIndex = dataSource.indexOf(data_1);\n dataSource.splice(dsIndex, 1);\n this.setViewDataSource(listDataSource);\n if (foundData\n && foundData.parent\n && Array.isArray(foundData.parent[this.fields.child])\n && foundData.parent[this.fields.child].length <= 0) {\n var parentLi = this.getLiFromObjOrElement(foundData.parent);\n if (parentLi) {\n var li_1 = ListBase.createListItemFromJson(this.createElement, [foundData.parent], this.listBaseOption, null, null, this);\n this.setAttributes(li_1);\n parentLi.parentElement.insertBefore(li_1[0], parentLi);\n parentLi.parentElement.removeChild(parentLi);\n }\n }\n if (dataSource.length <= 0) {\n this.back();\n }\n this.liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n }\n };\n // validate before removing an element whether the current view is inside target element's child view\n ListView.prototype.validateNestedView = function (li) {\n var liID = li ? li.getAttribute('data-uid').toString().toLowerCase() : null;\n if (liID && this.curDSLevel && this.curDSLevel.length > 0) {\n while (this.curDSLevel.some(function (id) { return id.toString().toLowerCase() === liID; })) {\n this.back();\n }\n }\n };\n /**\n * Removes multiple items from the ListView by passing the array of elements or array of field objects.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.removeMultipleItems = function (item) {\n if (item.length) {\n for (var i = 0; i < item.length; i++) {\n this.removeItem(item[i]);\n }\n }\n };\n // eslint-disable-next-line\n ListView.prototype.findParent = function (dataSource, id, callback, parent) {\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource.hasOwnProperty(id) && callback(dataSource[id]) === true) {\n return extend({}, dataSource);\n }\n for (var i = 0; i < Object.keys(dataSource).length; i++) {\n if (dataSource[Object.keys(dataSource)[i]]\n && typeof dataSource[Object.keys(dataSource)[i]] === 'object') {\n // eslint-disable-next-line\n var result = this.findParent(dataSource[Object.keys(dataSource)[i]], id, callback, dataSource);\n if (result != null) {\n if (!result.parent) {\n result.parent = parent;\n }\n return result;\n }\n }\n }\n return null;\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\n };\n ListView.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualization' });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition', 'selectedId']);\n };\n __decorate([\n Property('')\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n ListView = __decorate([\n NotifyPropertyChanges\n ], ListView);\n return ListView;\n}(Component));\nexport { ListView };\n","import { classNames } from './list-view';\nimport { EventHandler, append, isNullOrUndefined, detach, removeClass, addClass, compile, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '../common/list-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nvar listElementCount = 1.5;\nvar windowElementCount = 3;\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.elementDifference = 0;\n this.listViewInstance = instance;\n }\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.isNgTemplate = function () {\n return !isNullOrUndefined(this.listViewInstance.templateRef) && typeof this.listViewInstance.templateRef !== 'string';\n };\n /**\n * Checks if the platform is a Vue and its template property is a function type.\n *\n * @returns {boolean} indicating the result of the check\n */\n Virtualization.prototype.isVueFunctionTemplate = function () {\n return this.listViewInstance.isVue && typeof this.listViewInstance.template === 'function';\n };\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.uiVirtualization = function () {\n this.commonTemplate = '<div class=\"e-text-content\" role=\"presentation\"> ' +\n '<span class=\"e-list-text\"> ${' + this.listViewInstance.fields.text + '} </span></div>';\n this.templateFunction = compile(this.listViewInstance.template || this.commonTemplate, this.listViewInstance);\n this.groupTemplateFunction = compile(this.listViewInstance.groupTemplate || this.commonTemplate, this.listViewInstance);\n this.wireScrollEvent(false);\n var curViewDS = this.listViewInstance.curViewDS;\n var firstDs = curViewDS.slice(0, 1);\n this.listViewInstance.ulElement = this.listViewInstance.curUL = ListBase.createList(\n // eslint-disable-next-line\n this.listViewInstance.createElement, firstDs, this.listViewInstance.listBaseOption, null, this.listViewInstance);\n this.listViewInstance.contentContainer = this.listViewInstance.createElement('div', { className: classNames.container });\n this.listViewInstance.element.appendChild(this.listViewInstance.contentContainer);\n this.listViewInstance.contentContainer.appendChild(this.listViewInstance.ulElement);\n this.listItemHeight = this.listViewInstance.ulElement.firstElementChild.getBoundingClientRect().height;\n this.expectedDomItemCount = this.ValidateItemCount(10000);\n this.domItemCount = this.ValidateItemCount(Object.keys(this.listViewInstance.curViewDS).length);\n this.uiFirstIndex = 0;\n this.uiLastIndex = this.domItemCount - 1;\n var otherDs = curViewDS.slice(1, this.domItemCount);\n var listItems = ListBase.createListItemFromJson(\n // eslint-disable-next-line\n this.listViewInstance.createElement, otherDs, this.listViewInstance.listBaseOption, null, null, this.listViewInstance);\n append(listItems, this.listViewInstance.ulElement);\n this.listViewInstance.liCollection = this.listViewInstance.curUL.querySelectorAll('li');\n this.topElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.topElement, this.listViewInstance.ulElement.firstElementChild);\n this.bottomElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.bottomElement, null);\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n this.listDiff = 0;\n this.uiIndicesInitialization();\n };\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n if (this.listViewInstance.isWindow) {\n this.onVirtualScroll = this.onVirtualUiScroll.bind(this);\n window.addEventListener('scroll', this.onVirtualScroll);\n }\n else {\n EventHandler.add(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll, this);\n }\n }\n else {\n if (this.listViewInstance.isWindow === true) {\n window.removeEventListener('scroll', this.onVirtualScroll);\n window.removeEventListener('scroll', this.updateUl);\n }\n else {\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll);\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.updateUlContainer);\n }\n }\n };\n Virtualization.prototype.updateUlContainer = function (e) {\n var listDiff;\n var virtualElementContainer = this.listViewInstance.ulElement.querySelector('.' + classNames.virtualElementContainer);\n if (isNullOrUndefined(this.listViewInstance.liElementHeight)) {\n this.listViewInstance.updateLiElementHeight();\n }\n if (this.listViewInstance.isWindow) {\n // eslint-disable-next-line\n listDiff = Math.round(e.target.documentElement.scrollTop / this.listViewInstance.liElementHeight) - 2;\n }\n else {\n // eslint-disable-next-line\n listDiff = Math.round(e.target.scrollTop / this.listViewInstance.liElementHeight) - 2;\n }\n if (((listDiff - 1) * this.listViewInstance.liElementHeight) < 0) {\n virtualElementContainer.style.top = '0px';\n }\n else {\n virtualElementContainer.style.top = (listDiff) * this.listViewInstance.liElementHeight + 'px';\n }\n };\n Virtualization.prototype.ValidateItemCount = function (dataSourceLength) {\n var height = parseFloat(formatUnit(this.listViewInstance.height));\n var itemCount;\n if (this.listViewInstance.isWindow) {\n itemCount = Math.round((window.innerHeight / this.listItemHeight) * windowElementCount);\n }\n else {\n if (typeof this.listViewInstance.height === 'string' && this.listViewInstance.height.indexOf('%') !== -1) {\n // eslint-disable-next-line max-len\n itemCount = Math.round((this.listViewInstance.element.getBoundingClientRect().height / this.listItemHeight) * listElementCount);\n }\n else {\n itemCount = Math.round((height / this.listItemHeight) * listElementCount);\n }\n }\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n Virtualization.prototype.uiIndicesInitialization = function () {\n this.uiIndices = { 'activeIndices': [], 'disabledItemIndices': [], 'hiddenItemIndices': [] };\n var data = this.listViewInstance.curViewDS;\n for (var i = 0; i < data.length; i++) {\n if (this.listViewInstance.showCheckBox && data[i][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(i);\n }\n // eslint-disable-next-line\n if (!isNullOrUndefined(data[i][this.listViewInstance.fields.enabled]) &&\n !data[i][this.listViewInstance.fields.enabled]) {\n // eslint-disable-next-line\n (this.uiIndices.disabledItemIndices.push(i));\n }\n }\n if (this.isNgTemplate()) {\n var items = this.listViewInstance.element.querySelectorAll('.' + classNames.listItem);\n for (var index = 0; index < items.length; index++) {\n items[index].context = this.listViewInstance.viewContainerRef.get(index).context;\n }\n }\n };\n Virtualization.prototype.refreshItemHeight = function () {\n if (this.listViewInstance.curViewDS.length) {\n var curViewDS = this.listViewInstance.curViewDS;\n this.listItemHeight = this.topElement.nextSibling.getBoundingClientRect().height;\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.bottomElementHeight = this.totalHeight;\n this.bottomElement.style.height = this.totalHeight + 'px';\n }\n };\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n return this.listViewInstance.isWindow ? (((pageYOffset - startingHeight) <= 0) ? 0 :\n (pageYOffset - startingHeight)) : ((this.listViewInstance.element.scrollTop - startingHeight) <= 0) ? 0 :\n (this.listViewInstance.element.scrollTop - startingHeight);\n };\n Virtualization.prototype.onVirtualUiScroll = function (e) {\n var _a;\n var startingHeight;\n if (this.listViewInstance.isWindow) {\n startingHeight = this.listViewInstance.ulElement.getBoundingClientRect().top -\n document.documentElement.getBoundingClientRect().top;\n }\n else {\n startingHeight = this.listViewInstance.headerEle ? this.listViewInstance.headerEle.getBoundingClientRect().height : 0;\n }\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n if (scroll > this.scrollPosition) {\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, true);\n }\n else {\n this.onNormalScroll(listDiff, true);\n }\n }\n else {\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, false);\n }\n else {\n this.onNormalScroll(listDiff, false);\n }\n }\n }\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n if (typeof this.listViewInstance.onUIScrolled === 'function') {\n this.listViewInstance.onUIScrolled();\n }\n this.scrollPosition = scroll;\n };\n Virtualization.prototype.onLongScroll = function (listDiff, isScrollingDown) {\n var index = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n var elements = this.listViewInstance.ulElement.querySelectorAll('li');\n for (var i = 0; i < elements.length; i++) {\n this.updateUI(elements[i], index);\n index++;\n }\n this.uiLastIndex = isScrollingDown ? (this.uiLastIndex + listDiff) : (this.uiLastIndex - listDiff);\n this.uiFirstIndex = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n };\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n if (isScrollingDown) {\n for (var i = 0; i < listDiff; i++) {\n var index = ++this.uiLastIndex;\n this.updateUI(this.topElement.nextElementSibling, index, this.bottomElement);\n this.uiFirstIndex++;\n }\n }\n else {\n for (var i = 0; i < listDiff; i++) {\n var index = --this.uiFirstIndex;\n var target = this.topElement.nextSibling;\n this.updateUI(this.bottomElement.previousElementSibling, index, target);\n this.uiLastIndex--;\n }\n }\n };\n Virtualization.prototype.updateUiContent = function (element, index) {\n // eslint-disable-next-line\n var curViewDs = this.listViewInstance.curViewDS;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n element.dataset.uid = ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n this.listViewInstance.curViewDS[index].toString();\n }\n else {\n // eslint-disable-next-line\n element.dataset.uid = (curViewDs[index][this.listViewInstance.fields.id]) ?\n // eslint-disable-next-line\n (curViewDs[index][this.listViewInstance.fields.id]) : ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n // eslint-disable-next-line\n (curViewDs[index][this.listViewInstance.fields.text]);\n }\n if (this.listViewInstance.showIcon) {\n if (element.querySelector('.' + classNames.listIcon)) {\n detach(element.querySelector('.' + classNames.listIcon));\n }\n if (this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]) {\n var textContent = element.querySelector('.' + classNames.textContent);\n var target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' +\n this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]\n });\n textContent.insertBefore(target, element.querySelector('.' + classNames.listItemText));\n }\n }\n if (this.listViewInstance.showCheckBox && this.listViewInstance.fields.groupBy) {\n if (!this.checkListWrapper) {\n this.checkListWrapper = this.listViewInstance.curUL.querySelector('.' + classNames.checkboxWrapper).cloneNode(true);\n }\n var textContent = element.querySelector('.' + classNames.textContent);\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.remove(classNames.checklist);\n textContent.classList.remove(classNames.checkbox);\n detach(element.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n else {\n if (!element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.add(classNames.checklist);\n textContent.classList.add(classNames.checkbox);\n textContent.insertBefore(this.checkListWrapper.cloneNode(true), element.querySelector('.' + classNames.listItemText));\n }\n }\n }\n };\n Virtualization.prototype.changeElementAttributes = function (element, index) {\n element.classList.remove(classNames.disable);\n if (this.uiIndices.disabledItemIndices.length && this.uiIndices.disabledItemIndices.indexOf(index) !== -1) {\n element.classList.add(classNames.disable);\n }\n element.style.display = '';\n if (this.uiIndices.hiddenItemIndices.length && this.uiIndices.hiddenItemIndices.indexOf(index) !== -1) {\n element.style.display = 'none';\n }\n if (this.listViewInstance.showCheckBox) {\n var checklistElement = element.querySelector('.' + classNames.checkboxWrapper);\n element.classList.remove(classNames.selected);\n element.classList.remove(classNames.focused);\n if (checklistElement) {\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n }\n if (this.uiIndices.activeIndices.length && this.uiIndices.activeIndices.indexOf(index) !== -1 &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n checklistElement.firstElementChild.classList.add(classNames.checked);\n checklistElement.setAttribute('aria-checked', 'true');\n if (this.activeIndex === index) {\n element.classList.add(classNames.focused);\n }\n }\n }\n else {\n element.classList.remove(classNames.selected);\n element.removeAttribute('aria-selected');\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex === index &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n element.setAttribute('aria-selected', 'true');\n }\n }\n if (this.listViewInstance.fields.groupBy) {\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.classList.contains(classNames.listItem)) {\n element.classList.remove(classNames.listItem);\n element.setAttribute('role', 'group');\n element.classList.add(classNames.groupListItem);\n }\n }\n else {\n if (element.classList.contains(classNames.groupListItem)) {\n element.classList.remove(classNames.groupListItem);\n element.setAttribute('role', 'listitem');\n element.classList.add(classNames.listItem);\n }\n }\n }\n };\n Virtualization.prototype.findDSAndIndexFromId = function (ds, fields) {\n var _this = this;\n var resultJSON = {};\n fields = this.listViewInstance.getElementUID(fields);\n if (!isNullOrUndefined(fields)) {\n ds.some(function (data, index) {\n if ((fields[_this.listViewInstance.fields.id] &&\n // eslint-disable-next-line\n fields[_this.listViewInstance.fields.id]\n // eslint-disable-next-line\n === (data[_this.listViewInstance.fields.id] && data[_this.listViewInstance.fields.id]) || fields === data)) {\n resultJSON.index = index;\n resultJSON.data = data;\n return true;\n }\n else {\n return false;\n }\n });\n }\n return resultJSON;\n };\n Virtualization.prototype.getSelectedItems = function () {\n var _this = this;\n if (!isNullOrUndefined(this.activeIndex) || (this.listViewInstance.showCheckBox && this.uiIndices.activeIndices.length)) {\n var dataCollection = [];\n var textCollection = [];\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n var curViewDS_1 = this.listViewInstance.curViewDS;\n if (this.listViewInstance.showCheckBox) {\n var indices = this.uiIndices.activeIndices;\n for (var i = 0; i < indices.length; i++) {\n dataCollection.push(curViewDS_1[indices[i]]);\n }\n return {\n text: dataCollection,\n // eslint-disable-next-line\n data: dataCollection,\n index: this.uiIndices.activeIndices.map(function (index) {\n return _this.listViewInstance.dataSource.indexOf(curViewDS_1[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_1[this.activeIndex],\n data: curViewDS_1[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_1[this.activeIndex])\n };\n }\n }\n else {\n var curViewDS_2 = this.listViewInstance.curViewDS;\n var text = this.listViewInstance.fields.text;\n if (this.listViewInstance.showCheckBox) {\n var indexArray = this.uiIndices.activeIndices;\n for (var i = 0; i < indexArray.length; i++) {\n textCollection.push(curViewDS_2[indexArray[i]][\"\" + text]);\n // eslint-disable-next-line\n dataCollection.push(curViewDS_2[indexArray[i]]);\n }\n // eslint-disable-next-line\n var dataSource_1 = this.listViewInstance.dataSource instanceof DataManager\n ? curViewDS_2 : this.listViewInstance.dataSource;\n return {\n text: textCollection,\n // eslint-disable-next-line\n data: dataCollection,\n index: this.uiIndices.activeIndices.map(function (index) {\n return dataSource_1.indexOf(curViewDS_2[index]);\n })\n };\n }\n else {\n // eslint-disable-next-line\n var dataSource = this.listViewInstance.dataSource instanceof DataManager\n ? curViewDS_2 : this.listViewInstance.dataSource;\n return {\n text: curViewDS_2[this.activeIndex][this.listViewInstance.fields.text],\n // eslint-disable-next-line\n data: curViewDS_2[this.activeIndex],\n index: dataSource.indexOf(curViewDS_2[this.activeIndex])\n };\n }\n }\n }\n else {\n return undefined;\n }\n };\n Virtualization.prototype.selectItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n var isSelected = this.activeIndex === resutJSON.index;\n var isChecked = void 0;\n this.activeIndex = resutJSON.index;\n if (this.listViewInstance.showCheckBox) {\n if (this.uiIndices.activeIndices.indexOf(resutJSON.index) === -1) {\n isChecked = true;\n this.uiIndices.activeIndices.push(resutJSON.index);\n }\n else {\n isChecked = false;\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(resutJSON.index), 1);\n }\n if (this.listViewInstance.curUL.querySelector('.' + classNames.focused)) {\n this.listViewInstance.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n }\n if (this.listViewInstance.getLiFromObjOrElement(obj)) {\n if (this.listViewInstance.showCheckBox) {\n this.listViewInstance.setCheckboxLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n else {\n this.listViewInstance.setSelectLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n }\n else {\n // eslint-disable-next-line\n var eventArgs = void 0;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n eventArgs = {\n text: this.listViewInstance.curViewDS[this.activeIndex],\n data: this.listViewInstance.curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n else {\n var curViewDS = this.listViewInstance.curViewDS;\n eventArgs = {\n text: curViewDS[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n if (this.listViewInstance.showCheckBox) {\n eventArgs.isChecked = isChecked;\n this.listViewInstance.trigger('select', eventArgs);\n }\n else if (!isSelected) {\n this.listViewInstance.removeSelect();\n this.listViewInstance.trigger('select', eventArgs);\n }\n }\n }\n else if (isNullOrUndefined(obj) && !this.listViewInstance.showCheckBox) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n };\n Virtualization.prototype.enableItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.disableItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.disabledItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.disabledItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.showItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.hideItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.hiddenItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.removeItem = function (obj) {\n var dataSource;\n var curViewDS = this.listViewInstance.curViewDS;\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(curViewDS, obj);\n // eslint-disable-next-line\n if (Object.keys(resutJSON).length) {\n dataSource = resutJSON.data;\n if (curViewDS[resutJSON.index - 1] &&\n curViewDS[resutJSON.index - 1].isHeader &&\n (curViewDS[resutJSON.index - 1])\n .items.length === 1) {\n this.removeUiItem(resutJSON.index - 1);\n this.removeUiItem(resutJSON.index - 1);\n }\n else {\n this.removeUiItem(resutJSON.index);\n }\n }\n var listDataSource = this.listViewInstance.dataSource instanceof DataManager\n ? this.listViewInstance.localData : this.listViewInstance.dataSource;\n var index = listDataSource.indexOf(dataSource);\n if (index !== -1) {\n listDataSource.splice(index, 1);\n this.listViewInstance.setViewDataSource(listDataSource);\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n };\n // eslint-disable-next-line\n Virtualization.prototype.setCheckboxLI = function (li, e) {\n var index = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n if (li.classList.contains(classNames.selected)) {\n if (this.uiIndices.activeIndices.indexOf(index) === -1) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n else {\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n }\n };\n // eslint-disable-next-line\n Virtualization.prototype.setSelectLI = function (li, e) {\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n };\n Virtualization.prototype.checkedItem = function (checked) {\n if (checked) {\n this.uiIndices.activeIndices = [];\n this.activeIndex = undefined;\n var data = this.listViewInstance.curViewDS;\n for (var index = 0; index < data.length; index++) {\n if (!data[index].isHeader) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n }\n else {\n this.activeIndex = undefined;\n this.uiIndices.activeIndices = [];\n }\n };\n Virtualization.prototype.addUiItem = function (index) {\n // virtually new add list item based on the scollbar position\n // if the scroll bar is at the top, just pretend the new item has been added since no UI\n // change is required for the item that has been added at last but when scroll bar is at the bottom\n // just detach top and inject into bottom to mimic new item is added\n var curViewDs = this.listViewInstance.curViewDS;\n this.changeUiIndices(index, true);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex++;\n }\n if (this.listViewInstance.showCheckBox &&\n curViewDs[index][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(index);\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n }\n if (parseFloat(this.bottomElement.style.height)) {\n var liItem = this.listViewInstance.curUL.lastElementChild.previousSibling;\n var target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n if (target) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n this.updateUI(liItem, index, target);\n }\n }\n else {\n var liItem = this.listViewInstance.curUL.firstElementChild.nextSibling;\n var target = void 0;\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n }\n this.topElement.style.height = parseFloat(this.topElement.style.height) + this.listItemHeight + 'px';\n this.uiFirstIndex++;\n this.uiLastIndex++;\n if (target) {\n this.updateUI(liItem, index, target);\n if (this.listViewInstance.isWindow === true) {\n window.scrollTo(0, (pageYOffset + this.listItemHeight));\n }\n else {\n this.listViewInstance.element.scrollTop += this.listItemHeight;\n }\n }\n }\n this.totalHeight += this.listItemHeight;\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.removeUiItem = function (index) {\n this.totalHeight -= this.listItemHeight;\n var curViewDS = this.listViewInstance.curViewDS[index];\n var liItem = this.listViewInstance.getLiFromObjOrElement(curViewDS);\n this.listViewInstance.curViewDS.splice(index, 1);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex--;\n }\n if (liItem) {\n if (this.domItemCount > Object.keys(this.listViewInstance.curViewDS).length) {\n detach(liItem);\n this.domItemCount--;\n this.uiLastIndex--;\n this.totalHeight = 0;\n }\n else {\n if (liItem.classList.contains(classNames.disable)) {\n liItem.classList.remove(classNames.disable);\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(index), 1);\n }\n if (liItem.style.display === 'none') {\n liItem.style.display = '';\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(index), 1);\n }\n if (this.listViewInstance.showCheckBox && liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n var checklistElement = liItem.querySelector('.' + classNames.checkboxWrapper);\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n if (liItem.classList.contains(classNames.focused)) {\n liItem.classList.remove(classNames.focused);\n this.activeIndex = undefined;\n }\n }\n else if (liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else if (parseFloat(this.bottomElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else {\n this.topElement.style.height = parseFloat(this.topElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, (this.uiFirstIndex - 1), this.topElement.nextSibling);\n this.uiLastIndex--;\n this.uiFirstIndex--;\n }\n }\n }\n this.changeUiIndices(index, false);\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.changeUiIndices = function (index, increment) {\n var keys = Object.keys(this.uiIndices);\n for (var ind = 0; ind < keys.length; ind++) {\n this.uiIndices[keys[ind]] = this.uiIndices[keys[ind]].map(function (i) {\n if (i >= index) {\n return increment ? ++i : --i;\n }\n else {\n return i;\n }\n });\n }\n };\n Virtualization.prototype.addItem = function (data, fields, dataSource) {\n for (var i = 0; i < data.length; i++) {\n var currentItem = data[i];\n // push the given data to main data array\n dataSource.push(currentItem);\n // recalculate all the group data or other datasource related things\n this.listViewInstance.setViewDataSource(dataSource);\n // render list items for first time due to no datasource present earlier\n if (!this.domItemCount) {\n // fresh rendering for first time\n if ((this.listViewInstance.template || this.listViewInstance.groupTemplate) && !this.isNgTemplate()) {\n this.listViewInstance.listBaseOption.template = null;\n this.listViewInstance.listBaseOption.groupTemplate = null;\n this.listViewInstance.listBaseOption.itemCreated = this.createUIItem.bind(this);\n }\n this.uiVirtualization();\n // when expected expected DOM count doesn't meet the condition we need to create and inject new item into DOM\n }\n else if (this.domItemCount < this.expectedDomItemCount) {\n var ds = this.listViewInstance.findItemFromDS(dataSource, fields);\n if (ds instanceof Array) {\n if (this.listViewInstance.ulElement) {\n var index = this.listViewInstance.curViewDS.indexOf(currentItem);\n // inject new list item into DOM\n this.createAndInjectNewItem(currentItem, index);\n // check for group header item\n var curViewDS = this.listViewInstance.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n // target group item index in datasource\n --index;\n // inject new group header into DOM for previously created list item\n this.createAndInjectNewItem(curViewDS, index);\n }\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n }\n }\n else {\n // eslint-disable-next-line\n var index = this.listViewInstance.curViewDS.indexOf(currentItem);\n // virtually new add list item based on the scollbar position\n this.addUiItem(index);\n // check for group header item needs to be added\n var curViewDS = this.listViewInstance.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n this.addUiItem(index - 1);\n }\n }\n }\n };\n Virtualization.prototype.createAndInjectNewItem = function (itemData, index) {\n // generate li item for given datasource\n var target;\n var li = ListBase.createListItemFromJson(this.listViewInstance.createElement, \n // eslint-disable-next-line\n [itemData], this.listViewInstance.listBaseOption, null, null, this.listViewInstance);\n // check for target element whether to insert before last item or group item\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n // target group header's first child item to append its header\n target = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index + 2]);\n }\n if (this.listViewInstance.fields.groupBy && this.listViewInstance.curViewDS[index + 1] && this.listViewInstance.curViewDS[index + 1].isHeader) {\n var targetEle = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n // insert before the target element\n this.listViewInstance.ulElement.insertBefore(li[0], target);\n // increment internal DOM count, last index count for new element\n this.domItemCount++;\n if (this.bottomElementHeight <= 0) {\n this.uiLastIndex++;\n }\n // recalculate the current item height, to avoid jumpy scroller\n this.refreshItemHeight();\n };\n Virtualization.prototype.createUIItem = function (args) {\n var template = document.createElement('div');\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\n if (this.listViewInstance.isReact) {\n this.commonTemplate = null;\n }\n if (this.listViewInstance.showCheckBox) {\n // eslint-disable-next-line\n this.listViewInstance.renderCheckbox(args);\n if ((!isNullOrUndefined(this.listViewInstance.virtualCheckBox)) &&\n (!isNullOrUndefined(this.listViewInstance.virtualCheckBox.outerHTML))) {\n var div_1 = document.createElement('div');\n var nodes = this.templateFunction(this.templateData, this.listViewInstance);\n if (this.listViewInstance.template && this.listViewInstance.isReact) {\n this.listViewInstance.renderReactTemplates();\n }\n [].slice.call(nodes).forEach(function (ele) {\n div_1.appendChild(ele);\n });\n if (div_1.children && div_1.children[0]) {\n div_1.children[0].classList.add('e-checkbox');\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div_1.children[0].classList.add('e-checkbox-left');\n }\n else {\n div_1.children[0].classList.add('e-checkbox-right');\n }\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div_1.children[0].insertBefore(this.listViewInstance.virtualCheckBox, div_1.childNodes[0].children[0]);\n }\n else {\n div_1.children[0].appendChild(this.listViewInstance.virtualCheckBox);\n }\n template.innerHTML = div_1.innerHTML;\n }\n }\n else {\n var div_2 = document.createElement('div');\n var nodes = this.templateFunction(this.templateData, this.listViewInstance);\n if (this.listViewInstance.template && this.listViewInstance.isReact) {\n this.listViewInstance.renderReactTemplates();\n }\n [].slice.call(nodes).forEach(function (ele) {\n div_2.appendChild(ele);\n });\n template.innerHTML = div_2.innerHTML;\n }\n }\n else {\n var nodes = this.templateFunction(this.templateData, this.listViewInstance);\n if (this.listViewInstance.template && this.listViewInstance.isReact) {\n this.listViewInstance.renderReactTemplates();\n }\n [].slice.call(nodes).forEach(function (ele) {\n template.appendChild(ele);\n });\n }\n if (args.curData.isHeader) {\n this.headerData = args.curData;\n }\n var groupTemplate = this.listViewInstance.createElement('div');\n if (this.listViewInstance.fields.groupBy) {\n var nodes = this.groupTemplateFunction(this.headerData, this.listViewInstance);\n if (this.listViewInstance.template && this.listViewInstance.isReact) {\n this.listViewInstance.renderReactTemplates();\n }\n [].slice.call(nodes).forEach(function (ele) {\n groupTemplate.appendChild(ele);\n });\n }\n if ((!this.listViewInstance.isReact || (typeof this.listViewInstance.template == \"string\" && !args.item.classList.contains(\"e-list-group-item\")) ||\n (typeof this.listViewInstance.groupTemplate == \"string\" && args.item.classList.contains(\"e-list-group-item\"))) && !this.listViewInstance.isVue) {\n args.item.innerHTML = '';\n }\n args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };\n for (var i = 0; i < template.children.length; i++) {\n this.compileTemplate(template.children[i], args.item, false);\n }\n for (var i = 0; i < groupTemplate.children.length; i++) {\n this.compileTemplate(groupTemplate.children[i], args.item, true);\n }\n args.item.context.template = args.curData.isHeader ? template.firstElementChild :\n groupTemplate.firstElementChild;\n args.item.context.type = args.curData.isHeader ? 'flatList' : 'groupList';\n var element = args.curData.isHeader ? groupTemplate : template;\n if (element.firstElementChild && !this.listViewInstance.isReact && !this.listViewInstance.isVue) {\n args.item.insertBefore(element.firstElementChild, null);\n }\n };\n Virtualization.prototype.compileTemplate = function (element, item, isHeader) {\n var _this = this;\n var subNode = {};\n subNode.onChange = function (value) {\n var groupTemplateElements;\n var templateElements;\n if (_this.listViewInstance.isVue) {\n groupTemplateElements = _this.groupTemplateFunction(value);\n templateElements = _this.templateFunction(value);\n }\n else {\n groupTemplateElements = _this.groupTemplateFunction(value, _this.listViewInstance);\n templateElements = _this.templateFunction(value, _this.listViewInstance);\n }\n if (_this.listViewInstance.template && _this.listViewInstance.isReact) {\n _this.listViewInstance.renderReactTemplates();\n }\n var currentTemplate = templateElements;\n if (value.isHeader) {\n currentTemplate = groupTemplateElements;\n }\n [].slice.call(currentTemplate).forEach(function (currentElement) {\n var RemovableClass = element.classList.value.replace('e-checkbox', '');\n RemovableClass = RemovableClass.replace('e-checkbox-left', '');\n RemovableClass = RemovableClass.replace('e-checkbox-right', '');\n removeClass([element], RemovableClass.split(' ').filter(function (css) { return css; }));\n addClass([element], Array.from(currentElement.classList));\n for (var i = 0; i < element.attributes.length; i++) {\n if (element.attributes[i].name != 'class') {\n var newData = currentElement.getAttribute(element.attributes[i].name);\n element.setAttribute(element.attributes[i].name, newData);\n }\n }\n [].slice.call(element.children).forEach(function (ele) {\n if (!ele.classList.contains('e-listview-checkbox') && !(ele.classList.contains('e-checkbox-left') || ele.classList.contains('e-checkbox-right'))) {\n ele.remove();\n }\n });\n [].slice.call(currentElement.children).forEach(function (ele) {\n element.appendChild(ele);\n });\n });\n };\n this.updateContextData(item, subNode, isHeader);\n };\n Virtualization.prototype.onChange = function (newData, listElement) {\n listElement.context.data = newData;\n // eslint-disable-next-line max-len\n var groupTemplateNodes = listElement.context.nodes.groupTemplateNodes;\n // eslint-disable-next-line max-len\n var flatTemplateNodes = listElement.context.nodes.flatTemplateNodes;\n // eslint-disable-next-line\n if (!isNullOrUndefined(newData.isHeader) && newData.isHeader && listElement.context.type === 'groupList') {\n // eslint-disable-next-line\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'flatList';\n for (var i = 0; i < groupTemplateNodes.length; i++) {\n // eslint-disable-next-line\n groupTemplateNodes[i].onChange(newData);\n }\n }\n else if (!newData.isHeader && listElement.context.type === 'flatList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'groupList';\n for (var i = 0; i < flatTemplateNodes.length; i++) {\n // eslint-disable-next-line\n flatTemplateNodes[i].onChange(newData);\n }\n }\n else if (!newData.isHeader) {\n for (var i = 0; i < flatTemplateNodes.length; i++) {\n // eslint-disable-next-line\n flatTemplateNodes[i].onChange(newData);\n }\n }\n else {\n for (var i = 0; i < groupTemplateNodes.length; i++) {\n // eslint-disable-next-line\n groupTemplateNodes[i].onChange(newData);\n }\n }\n };\n // eslint-disable-next-line\n Virtualization.prototype.updateContextData = function (listElement, node, isHeader) {\n if (isHeader) {\n listElement.context.nodes.groupTemplateNodes.push(node);\n }\n else {\n listElement.context.nodes.flatTemplateNodes.push(node);\n }\n };\n Virtualization.prototype.reRenderUiVirtualization = function () {\n this.wireScrollEvent(true);\n if (this.listViewInstance.contentContainer) {\n detach(this.listViewInstance.contentContainer);\n }\n this.listViewInstance.preRender();\n // resetting the dom count to 0, to avoid edge case of dataSource suddenly becoming zero\n // and then manually adding item using addItem API\n this.domItemCount = 0;\n this.listViewInstance.header();\n this.listViewInstance.setLocalData();\n };\n Virtualization.prototype.updateUI = function (element, index, targetElement) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var onChange = this.isNgTemplate() ? this.onNgChange : (this.isVueFunctionTemplate()) ? this.onVueChange : this.onChange;\n if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {\n var curViewDS = this.listViewInstance.curViewDS[index];\n // eslint-disable-next-line\n element.dataset.uid = (curViewDS[this.listViewInstance.fields.id]) ?\n // eslint-disable-next-line\n (curViewDS[this.listViewInstance.fields.id]) : ListBase.generateId();\n onChange(curViewDS, element, this);\n }\n else {\n this.updateUiContent(element, index);\n }\n this.changeElementAttributes(element, index);\n if (targetElement) {\n this.listViewInstance.ulElement.insertBefore(element, targetElement);\n }\n };\n /**\n * Handles the UI change in vue for the list view.\n *\n * @param {DataSource} newData - The new data source for the list view.\n * @param {ElementContext} listElement - The HTML element context for the list view.\n * @param {Virtualization} virtualThis - The virtualization context for the list view.\n */\n Virtualization.prototype.onVueChange = function (newData, listElement, virtualThis) {\n var liItem = ListBase.createListItemFromJson(virtualThis.listViewInstance.createElement, \n // eslint-disable-next-line\n [newData], virtualThis.listViewInstance.listBaseOption, null, null, virtualThis.listViewInstance);\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n listElement.appendChild(liItem[0].firstChild);\n };\n Virtualization.prototype.onNgChange = function (newData, listElement, virtualThis) {\n // compile given target element with template for new data\n // eslint-disable-next-line\n var templateCompiler = compile(virtualThis.listViewInstance.template);\n var resultElement = templateCompiler(newData);\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n listElement.appendChild(resultElement[0]);\n };\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n Virtualization.prototype.destroy = function () {\n this.wireScrollEvent(true);\n this.topElement = null;\n this.bottomElement = null;\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import * as index from './index';\nindex.ListView.Inject(index.Virtualization);\nexport * from './index';\n"],"names":["getFieldValues","dataItem","fields","fieldData","isNullOrUndefined","isHeader","_i","_a","Object","keys","length","dataField","value","undefined","getValue","compileTemplate","template","document","querySelector","compile","innerHTML","trim","e","moveTo","from","to","targetIndexes","insertBefore","targetElements","forEach","index","push","children","slice","call","target","appendChild","insertElement_1","exports","li","ul","group","icon","text","check","checked","selected","expanded","textContent","hasChild","level","url","collapsible","disabled","image","iconWrapper","anchorWrap","navigable","ListBase","createList","createElement","dataSource","options","isSingleLevel","componentInstance","curOpt","extend","defaultListBaseOptions","ariaAttributes","defaultAriaAttributes","type","typeofData","typeof","createListFromArray","createListFromJson","generateUL","createListItemFromArray","subChild","cssClass","getModuleClass","moduleName","id","generateId","i","itemCreating","curData","generateSingleLevelLI","generateLI","itemCreated","item","createListItemFromJson","getModuleName","defaultMappedFields","checkboxElement","anchorElement","child","hasOwnProperty","curItem","innerEle","showCheckBox","itemNavigable","urlAttributes","className","attrs","showIcon","iconCss","itemClass","prepend","firstElementChild","classList","add","setAttribute","toString","groupItemRole","itemRole","removeAttribute","tooltip","htmlAttributes","enabled","isVisible","style","display","imageUrl","attr","src","merge","imageAttributes","imageElemnt","insertAdjacentElement","iconElement","processSubChild","addClass","listClass","getSiblingLI","elementArray","element","isPrevious","siblingLI","liIndex","liCollections","Array","prototype","indexOf","contains","groupDataSource","sortOrder","curFields","cusQuery","Query","groupBy","ds","getDataSource","addSorting","j","itemObj","items","grpItem","key","newtext","_id","k","sortBy","query","queries","fn","splice","DataManager","executeLocal","createJsonFromElement","curEle","cloneNode","jsonAr","childs","querySelectorAll","remove","anchor","json","childNodes","i_1","Number","hasChildNodes","attributes_1","getAllAttributes","data","match","elementAttributes","class","split","attributes","nodeName","nodeValue","renderContentTemplate","ulElement","role","compiledString","liCollection","innerText","currentID","groupTemplateID","templateID","compiledElement","isStringTemplate","append","renderGroupTemplate","groupTemplate","headerItems","category","headerItems_1","header","headerData","Math","floor","random","substring","subDS","hasChildren","subLi","expandCollapse","expandIconPosition","expandIconClass","innerElements","grpLI","elementID","href","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","enableHtmlSanitizer","innerDiv","wrapperRole","itemText","SanitizeHtmlHelper","sanitize","liElement","listRole","generateIcon","isChecked","headerTemplate","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","this","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","effectsConfig","None","SlideLeft","SlideDown","Zoom","Fade","effectsRTLConfig","classNames","root","hover","focused","parentItem","listItem","listIcon","listItemText","groupListItem","view","headerText","headerTemplateText","disable","container","backIcon","backButton","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","virtualElementContainer","FieldSettings","_super","apply","Property","ChildProperty","ListView","_this","previousSelectedItems","hiddenItems","enabledItems","disabledItems","onPropertyChanged","newProp","oldProp","setHTMLAttribute","setCSSClass","setEnable","setSize","setEnableRTL","listBaseOption","properties","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","detach","refresh","setCheckbox","curViewDS","getSubDS","resetCurrentList","oldCSSClass","filter","css","removeClass","height","formatUnit","width","isWindow","clientHeight","enableElement","enable","enableRtl","isEnabled","showBack","prop","headerEle","showHeader","innerHeaderEle","setProperties","textEle","outerHTML","hedBackButton","headerTemplateEle","LISTVIEW_HEADERTEMPLATE_ID","isReact","renderReactTemplates","parentElement","switchView","fromView","toView","reverse","fPos_1","position","overflow_1","overflow","anim","duration","animation","effect","aniObj","animate","name","animationMode","timingFunction","easing","end","model","trigger","curUL","preRender","renderCheckbox","bind","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","enablePersistence","LISTVIEW_TEMPLATE_ID","LISTVIEW_GROUPTEMPLATE_ID","Animation","removeElement","args","isValidLI","fieldData_1","createCheckBox","frameElement_1","findIndex","checkInternally","checkBoxPosition","virtualCheckBox","lastElementChild","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","updateSelectedId","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","getItemData","selectedItems","refreshItemHeight","clickHandler","isArray","targetElement","closestElement","back","closest","parentNode","removeFocus","setCheckboxLI","eventArgs","selectEventData","removeHover","removeSelect","setSelectLI","removeChild","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","preventDefault","focusedElement","onArrowKeyDown","prev","arrowKeyHandler","elementTop","getBoundingClientRect","top","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","window","scroll","pageYOffset","scrollTop","innerHeight","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","enterKeyHandler","spaceKeyHandler","keyActionHandler","keyCode","swipeActionHandler","swipeDirection","velocity","originalEvent","focusout","selectedLI","wireEvents","EventHandler","touchModule","Touch","swipe","unWireEvents","destroy","focusedLI_1","hoverLI","selectedLI_1","ele","textAreaFocus","renderSubList","selectedItem","isInteracted","event","cancel","observedArgs","lastLi","levelKeys","localData","levelKeys_1","field","curDSJSON","findItemFromDS","curDS","getElementUID","parent","resultJSON","some","getQuery","columns","column","select","tableName","setViewDataSource","fieldValue","isInAnimation","renderRemoteLists","listViewComponent","isDestroyed","result","renderList","triggerActionFailure","setLocalData","ready","then","isOffline","offline","catch","executeQuery","clearTemplate","renderIntoDom","setAttributes","liElements","getAttribute","exceptionEvent","UpdateCurrentUL","lists","isNgTemplate","createUIItem","uiVirtualization","obj","Element","render","tabindex","rippleFn","rippleEffect","selector","renderComplete","classAr","concat","pID","pop","toUL","fromUL","selectItem","uid","selectMultipleItems","getParentId","parentId","getElementsByClassName","tempData","getSelectedItems","finalValue","isCompleted","liTextCollection","liDataCollection","dataParent","findItem","enableItem","setItemState","disableItem","isEnable","showItem","showHideItem","hideItem","isHide","addItem","addItemInternally","targetUL","addItemIntoDom","addItemInNestedList","targetItemData","itemQueue","targetItemId","targetChildDS","isAlreadyRenderedUL","targetLi","targetDS","targetRefreshedElement","currentItem","addListItem","curItemDS","targetEle","nextElementSibling","removeItem","listDataSource","removeItemFromList","data_1","groupLi","validateNestedView","previousElementSibling","foundData","findParent","dsIndex","parentLi","li_1","liID","toLowerCase","removeMultipleItems","callback","requiredModules","modules","member","getPersistData","addOnPersist","Complex","Event","NotifyPropertyChanges","Component","Virtualization","instance","elementDifference","listViewInstance","templateRef","isVueFunctionTemplate","isVue","commonTemplate","templateFunction","groupTemplateFunction","wireScrollEvent","firstDs","expectedDomItemCount","ValidateItemCount","domItemCount","uiLastIndex","otherDs","listItems","topElement","bottomElement","totalHeight","topElementHeight","bottomElementHeight","listDiff","uiIndicesInitialization","removeEventListener","onVirtualScroll","updateUl","onVirtualUiScroll","updateUlContainer","addEventListener","liElementHeight","updateLiElementHeight","round","documentElement","dataSourceLength","itemCount","parseFloat","uiIndices","activeIndices","disabledItemIndices","hiddenItemIndices","context","viewContainerRef","get","nextSibling","getscrollerHeight","startingHeight","scrollPosition","onLongScroll","onNormalScroll","isScrollingDown","elements","updateUI","updateUiContent","curViewDs","dataset","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection","textCollection","curViewDS_1","indices","map","curViewDS_2","indexArray","dataSource_1","resutJSON","isSelected","removeUiItem","addUiItem","changeUiIndices","liItem","previousSibling","scrollTo","increment","ind","createAndInjectNewItem","itemData","templateData","div_2","nodes","div_1","flatTemplateNodes","groupTemplateNodes","subNode","onChange","groupTemplateElements","templateElements","currentTemplate","currentElement","RemovableClass","replace","newData","updateContextData","listElement","node","onNgChange","onVueChange","virtualThis","lastChild","firstChild","resultElement","Sortable","getHelper","getSortableElement","sender","isValidTarget","helper","offsetWidth","offsetHeight","body","onDrag","newInst","getSortableInstance","curTarget","placeHolder","placeHolderElement","scope","oldIdx","getIndex","getPlaceHolder","newIdx","isPlaceHolderPresent","childElementCount","refreshDisabled","idx","updateItemClass","droppedElement","previousIndex","currentIndex","removePlaceHolder","inst_1","onDragStart","cancelDrag","onDragStop","isBlazor","bindEvents","dragElement","prevIdx","curIdx","handled","dropInst","curIdx_1","curIdx_2","scopeName","beforeDropArgs","getComponent","intDestroy","Sortable_1","getUniqueID","dataBind","initializeDraggable","Draggable","dragStart","drag","dragStop","dragTarget","enableTapHold","tapHoldThreshold","queryPositionInfo","distance","wrapper","keyDownHandler","unwireEvents","dragWrapper","dragPlaceholder","grabbedElement","compareElementParent","inst","increased","disabledIdx","start","placeHolderPresent","offset","clientY","bottom","cltY","changedTouches","left","pageXOffset","destination","Base","index.ListView","Inject","index.Virtualization"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-lists.min.js","sources":["../../src/common/list-base.js","../../src/sortable/sortable.js","../../src/list-view/list-view.js","../../src/list-view/virtualization.js","../../src/global.js"],"sourcesContent":["/* eslint-disable no-inner-declarations */\nimport { extend, merge, isNullOrUndefined, getValue, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n};\n/**\n * Base List Generator\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var ListBase;\n(function (ListBase) {\n /**\n *\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null,\n sortBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n enableHtmlSanitizer: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right',\n itemNavigable: false\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} createListFromJson - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, \n // eslint-disable-next-line\n options, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n }\n else {\n return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel, componentInstance);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - returns the list options that need to provide.\n */\n function createListFromArray(createElement, dataSource, \n // tslint:disable-next-line\n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} subChild - returns the list options that need to provide.\n */\n function createListItemFromArray(createElement, dataSource, \n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options, componentInstance);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} child - returns the list options that need to provide.\n */\n function createListItemFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = (componentInstance &&\n (componentInstance.getModuleName() === 'listview' || componentInstance.getModuleName() === 'multiselect'))\n ? curOpt.fields : extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n var checkboxElement = [];\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n var anchorElement;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n // eslint-disable-next-line no-prototype-builtins\n !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData[fields.id];\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n if (curOpt.itemNavigable && (fieldData[fields.url] || fieldData[fields.urlAttributes])) {\n checkboxElement.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n else {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n }\n if (isSingleLevel === true) {\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, \n // eslint-disable-next-line no-prototype-builtins\n (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (ariaAttributes.groupItemRole == 'presentation' || ariaAttributes.itemRole == 'presentation') {\n li.removeAttribute('aria-level');\n }\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n && !curOpt.template) {\n var attr = { src: fieldData[fields.imageUrl] };\n merge(attr, fieldData[fields.imageAttributes]);\n var imageElemnt = createElement('img', { className: cssClass.image, attrs: attr });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', imageElemnt);\n }\n else {\n prepend([imageElemnt], li.firstElementChild);\n }\n }\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) &&\n !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n var iconElement = createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', iconElement);\n }\n else {\n prepend([iconElement], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (anchorElement) {\n addClass([li], [cssClass.navigable]);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n checkboxElement = [];\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - Specifies the list options that need to provide.\n */\n function createListFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel, componentInstance);\n return generateUL(createElement, li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n *\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n *\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n *\n * @param {{Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var cusQuery = new Query().group(curFields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[curFields.text] = ds[j].key;\n grpItem[\"\" + hdr] = true;\n var newtext = curFields.text;\n if (newtext === 'id') {\n newtext = 'text';\n grpItem[\"\" + newtext] = ds[j].key;\n }\n grpItem._id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n *\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // eslint-disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n *\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n // eslint-disable-next-line\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n // eslint-disable-next-line\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n var attributes_1 = getAllAttributes(li);\n if (attributes_1.id) {\n json[fields.id] = attributes_1.id;\n delete attributes_1.id;\n }\n else {\n json[fields.id] = generateId();\n }\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n *\n * @param {string} template - that need to convert and generate li element.\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function renderContentTemplate(createElement, template, dataSource, \n // eslint-disable-next-line\n fields, options, componentInstance) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n // eslint-disable-next-line\n var compiledString = compileTemplate(template);\n var liCollection = [];\n var value;\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], curFields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], curFields);\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n li.innerText = curItem;\n }\n else {\n li.innerText = fieldData[curFields.text];\n }\n }\n else {\n var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;\n if (isHeader) {\n if (componentInstance && componentInstance.getModuleName() != 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n *\n * @param {string} template - that need to convert and generate li element.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n *\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n // tslint:disable-next-line\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, \n // eslint-disable-next-line\n headerItems, options, componentInstance) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(groupTemplate);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var curOpt = extend({}, defaultListBaseOptions, options);\n var category = curFields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[\"\" + category] = header.textContent;\n header.innerHTML = '';\n if (componentInstance && componentInstance.getModuleName() !== \"listview\") {\n // eslint-disable-next-line\n var compiledElement = compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, header);\n if (compiledElement) {\n append(compiledElement, header);\n }\n }\n else {\n append(compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), header);\n }\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n // Get SubList\n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(createElement, subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n // eslint-disable-next-line @typescript-eslint/ban-types\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length && !curOpt.itemNavigable) {\n append(innerElements, li);\n }\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable));\n }\n else {\n if (innerElements.length && curOpt.itemNavigable) {\n append(innerElements, li);\n }\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n // eslint-disable-next-line\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n };\n }\n function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n attr.href = fieldData[fields.url] ? fieldData[fields.url] :\n fieldData[fields.urlAttributes].href;\n }\n var anchorTag;\n if (!isFullNavigation) {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n }\n else {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url });\n var anchorWrapper = createElement('div', { className: cssClass.anchorWrap });\n if (innerElements && innerElements.length) {\n append(innerElements, anchorWrapper);\n }\n anchorWrapper.appendChild(document.createTextNode(text));\n append([anchorWrapper], anchorTag);\n }\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n // tslint:disable-next-line\n /* tslint:disable:align */\n function generateLI(createElement, item, fieldData, \n // eslint-disable-next-line\n fields, className, options, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = fieldData[fields.text] || '';\n // tslint:disable-next-line\n uID = (isNullOrUndefined(fieldData['_id'])) ? fieldData[fields.id] : fieldData['_id'];\n // eslint-disable-next-line no-prototype-builtins\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n if (options && options.enableHtmlSanitizer) {\n // eslint-disable-next-line no-self-assign\n text = text;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (!isNullOrUndefined(uID) === true) {\n li.setAttribute('data-uid', uID);\n }\n else {\n li.setAttribute('data-uid', generateId());\n }\n if (grpLI && options && options.groupTemplate) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(options.groupTemplate);\n if (componentInstance && componentInstance.getModuleName() !== \"listview\") {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), li);\n }\n }\n else if (!grpLI && options && options.template) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(options.template);\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n }\n else {\n var element = createElement('span', {\n className: cssClass.text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n });\n if (options && options.enableHtmlSanitizer) {\n element.innerText = SanitizeHtmlHelper.sanitize(text);\n }\n else {\n element.innerHTML = text;\n }\n innerDiv.appendChild(element);\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n *\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in UL element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n *\n * @param {liElement} liElement - Specifies LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n // eslint-disable-next-line @typescript-eslint/ban-types\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n *\n * @param {Object} dataSource - Specifies an JSON or String data.\n *\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[\"\" + field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[\"\" + dataField] = value;\n }\n }\n }\n return fieldData;\n}\nfunction compileTemplate(template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelector(template)) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\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})();\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 { Base, Event, getUniqueID, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { closest, Draggable, remove, compareElementParent } from '@syncfusion/ej2-base';\nimport { addClass, isNullOrUndefined, getComponent, isBlazor, EventHandler } from '@syncfusion/ej2-base';\n/**\n * Sortable Module provides support to enable sortable functionality in Dom Elements.\n * ```html\n * <div id=\"sortable\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * <div>Item 4</div>\n * <div>Item 5</div>\n * </div>\n * ```\n * ```typescript\n * let ele: HTMLElement = document.getElementById('sortable');\n * let sortObj: Sortable = new Sortable(ele, {});\n * ```\n */\nvar Sortable = /** @class */ (function (_super) {\n __extends(Sortable, _super);\n function Sortable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.getHelper = function (e) {\n // eslint-disable-next-line prefer-const\n var target = _this.getSortableElement(e.sender.target);\n if (!_this.isValidTarget(target, _this)) {\n return false;\n }\n var element;\n if (_this.helper) {\n element = _this.helper({ sender: target, element: e.element });\n }\n else {\n element = target.cloneNode(true);\n element.style.width = target.offsetWidth + \"px\";\n element.style.height = target.offsetHeight + \"px\";\n }\n addClass([element], ['e-sortableclone']);\n document.body.appendChild(element);\n return element;\n };\n // eslint-disable-next-line\n _this.onDrag = function (e) {\n if (!e.target) {\n return;\n }\n _this.trigger('drag', { event: e.event, element: _this.element, target: e.target });\n var newInst = _this.getSortableInstance(e.target);\n var target = _this.getSortableElement(e.target, newInst);\n if ((_this.isValidTarget(target, newInst) || e.target.className.indexOf('e-list-group-item') > -1) && (_this.curTarget !== target ||\n !isNullOrUndefined(newInst.placeHolder)) && (newInst.placeHolderElement ? newInst.placeHolderElement !== e.target : true)) {\n if (e.target.className.indexOf('e-list-group-item') > -1) {\n target = e.target;\n }\n _this.curTarget = target;\n if (_this.target === target) {\n return;\n }\n var oldIdx = _this.getIndex(newInst.placeHolderElement, newInst);\n var placeHolder = _this.getPlaceHolder(target, newInst);\n var newIdx = void 0;\n if (placeHolder) {\n oldIdx = isNullOrUndefined(oldIdx) ? _this.getIndex(_this.target) : oldIdx;\n newIdx = _this.getIndex(target, newInst, e.event);\n var isPlaceHolderPresent = _this.isPlaceHolderPresent(newInst);\n if (isPlaceHolderPresent && oldIdx === newIdx) {\n return;\n }\n if (isPlaceHolderPresent) {\n remove(newInst.placeHolderElement);\n }\n newInst.placeHolderElement = placeHolder;\n if (e.target.className.indexOf('e-list-group-item') > -1) {\n newInst.element.insertBefore(newInst.placeHolderElement, newInst.element.children[newIdx]);\n }\n else if (newInst.element !== _this.element && newIdx === newInst.element.childElementCount) {\n newInst.element.appendChild(newInst.placeHolderElement);\n }\n else {\n newInst.element.insertBefore(newInst.placeHolderElement, newInst.element.children[newIdx]);\n }\n _this.refreshDisabled(oldIdx, newIdx, newInst);\n }\n else {\n oldIdx = isNullOrUndefined(oldIdx) ? _this.getIndex(_this.target) :\n _this.getIndex(target, newInst) < oldIdx || !oldIdx ? oldIdx : oldIdx - 1;\n newIdx = _this.getIndex(target, newInst);\n var idx = newInst.element !== _this.element ? newIdx : oldIdx < newIdx ? newIdx + 1 : newIdx;\n _this.updateItemClass(newInst);\n newInst.element.insertBefore(_this.target, newInst.element.children[idx]);\n _this.refreshDisabled(oldIdx, newIdx, newInst);\n _this.curTarget = _this.target;\n _this.trigger('drop', {\n droppedElement: _this.target, element: newInst.element, previousIndex: oldIdx, currentIndex: newIdx,\n target: e.target, helper: document.getElementsByClassName('e-sortableclone')[0], event: e.event, scope: _this.scope\n });\n }\n }\n else if (_this.curTarget !== _this.target && _this.scope && _this.curTarget !== target && !isNullOrUndefined(newInst.placeHolder)) {\n remove(_this.getSortableInstance(_this.curTarget).placeHolderElement);\n _this.curTarget = _this.target;\n }\n newInst = _this.getSortableInstance(_this.curTarget);\n if (isNullOrUndefined(target) && e.target !== newInst.placeHolderElement) {\n if (_this.isPlaceHolderPresent(newInst)) {\n _this.removePlaceHolder(newInst);\n }\n }\n else {\n var placeHolders = [].slice.call(document.getElementsByClassName('e-sortable-placeholder'));\n var inst_1;\n placeHolders.forEach(function (placeHolder) {\n inst_1 = _this.getSortableInstance(placeHolder);\n if (inst_1.element && inst_1 !== newInst) {\n _this.removePlaceHolder(inst_1);\n }\n });\n }\n };\n // eslint-disable-next-line\n _this.onDragStart = function (e) {\n _this.target = _this.getSortableElement(e.target);\n var cancelDrag = false;\n _this.target.classList.add('e-grabbed');\n _this.curTarget = _this.target;\n e.helper = document.getElementsByClassName('e-sortableclone')[0];\n var args = { cancel: false, element: _this.element, target: _this.target };\n _this.trigger('beforeDragStart', args, function (observedArgs) {\n if (observedArgs.cancel) {\n cancelDrag = observedArgs.cancel;\n _this.onDragStop(e);\n }\n });\n if (cancelDrag) {\n return;\n }\n if (isBlazor) {\n _this.trigger('dragStart', {\n event: e.event, element: _this.element, target: _this.target,\n bindEvents: e.bindEvents, dragElement: e.dragElement\n });\n }\n else {\n _this.trigger('dragStart', { event: e.event, element: _this.element, target: _this.target });\n }\n };\n // eslint-disable-next-line\n _this.onDragStop = function (e) {\n var dropInst = _this.getSortableInstance(_this.curTarget);\n var prevIdx;\n var curIdx;\n var handled;\n prevIdx = _this.getIndex(_this.target);\n var isPlaceHolderPresent = _this.isPlaceHolderPresent(dropInst);\n if (isPlaceHolderPresent) {\n var curIdx_1 = _this.getIndex(dropInst.placeHolderElement, dropInst);\n var args = {\n previousIndex: prevIdx, currentIndex: curIdx_1, target: e.target, droppedElement: _this.target,\n helper: e.helper, cancel: false, handled: false\n };\n _this.trigger('beforeDrop', args, function (observedArgs) {\n if (!observedArgs.cancel) {\n handled = observedArgs.handled;\n _this.updateItemClass(dropInst);\n if (observedArgs.handled) {\n var ele = _this.target.cloneNode(true);\n _this.target.classList.remove('e-grabbed');\n _this.target = ele;\n }\n dropInst.element.insertBefore(_this.target, dropInst.placeHolderElement);\n var curIdx_2 = _this.getIndex(_this.target, dropInst);\n prevIdx = _this === dropInst && (prevIdx - curIdx_2) > 1 ? prevIdx - 1 : prevIdx;\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx_2,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope, handled: handled\n });\n }\n remove(dropInst.placeHolderElement);\n });\n }\n dropInst = _this.getSortableInstance(e.target);\n // eslint-disable-next-line prefer-const\n curIdx = dropInst.element.childElementCount;\n prevIdx = _this.getIndex(_this.target);\n if (dropInst.element === e.target || (!isPlaceHolderPresent && _this.curTarget === _this.target)) {\n var beforeDropArgs = {\n previousIndex: prevIdx, currentIndex: _this.curTarget === _this.target ? prevIdx : curIdx,\n target: e.target, droppedElement: _this.target, helper: e.helper, cancel: false\n };\n _this.trigger('beforeDrop', beforeDropArgs, function (observedArgs) {\n if ((dropInst.element === e.target || e.target.className.indexOf('e-list-nrt') > -1 || e.target.className.indexOf('e-list-nr-template') > -1\n || e.target.closest('.e-list-nr-template')) && !observedArgs.cancel) {\n _this.updateItemClass(dropInst);\n dropInst.element.appendChild(_this.target);\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope\n });\n }\n });\n }\n _this.target.classList.remove('e-grabbed');\n _this.target = null;\n _this.curTarget = null;\n remove(e.helper);\n getComponent(_this.element, 'draggable').intDestroy(e.event);\n };\n _this.bind();\n return _this;\n }\n Sortable_1 = Sortable;\n Sortable.prototype.bind = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('sortable');\n }\n if (!this.itemClass) {\n this.itemClass = 'e-sort-item';\n this.dataBind();\n }\n this.initializeDraggable();\n };\n Sortable.prototype.initializeDraggable = function () {\n new Draggable(this.element, {\n helper: this.getHelper,\n dragStart: this.onDragStart,\n drag: this.onDrag,\n dragStop: this.onDragStop,\n dragTarget: \".\" + this.itemClass,\n enableTapHold: true,\n tapHoldThreshold: 200,\n queryPositionInfo: this.queryPositionInfo,\n distance: 1\n });\n this.wireEvents();\n };\n Sortable.prototype.wireEvents = function () {\n var wrapper = this.element;\n EventHandler.add(wrapper, 'keydown', this.keyDownHandler, this);\n };\n Sortable.prototype.unwireEvents = function () {\n var wrapper = this.element;\n EventHandler.remove(wrapper, 'keydown', this.keyDownHandler);\n };\n Sortable.prototype.keyDownHandler = function (e) {\n if (e.keyCode === 27) {\n var dragStop = getComponent(this.element, 'draggable');\n if (dragStop) {\n dragStop.intDestroy(null);\n }\n var dragWrapper = document.getElementsByClassName('e-sortableclone')[0];\n if (dragWrapper) {\n dragWrapper.remove();\n }\n var dragPlaceholder = document.getElementsByClassName('e-sortable-placeholder')[0];\n if (dragPlaceholder) {\n dragPlaceholder.remove();\n }\n }\n };\n Sortable.prototype.getPlaceHolder = function (target, instance) {\n if (instance.placeHolder) {\n var placeHolderElement = instance.placeHolder({ element: instance.element, grabbedElement: this.target, target: target });\n placeHolderElement.classList.add('e-sortable-placeholder');\n return placeHolderElement;\n }\n return null;\n };\n Sortable.prototype.isValidTarget = function (target, instance) {\n return target && compareElementParent(target, instance.element) && target.classList.contains(instance.itemClass) &&\n !target.classList.contains('e-disabled');\n };\n Sortable.prototype.removePlaceHolder = function (instance) {\n remove(instance.placeHolderElement);\n instance.placeHolderElement = null;\n };\n Sortable.prototype.updateItemClass = function (instance) {\n if (this !== instance) {\n this.target.classList.remove(this.itemClass);\n this.target.classList.add(instance.itemClass);\n }\n };\n Sortable.prototype.getSortableInstance = function (element) {\n element = closest(element, \".e-\" + this.getModuleName());\n if (element) {\n var inst = getComponent(element, Sortable_1);\n return inst.scope && this.scope && inst.scope === this.scope ? inst : this;\n }\n else {\n return this;\n }\n };\n Sortable.prototype.refreshDisabled = function (oldIdx, newIdx, instance) {\n if (instance === this) {\n var element = void 0;\n var increased = oldIdx < newIdx;\n var disabledIdx = void 0;\n var start = increased ? oldIdx : newIdx;\n var end = increased ? newIdx : oldIdx;\n while (start <= end) {\n element = this.element.children[start];\n if (element.classList.contains('e-disabled')) {\n disabledIdx = this.getIndex(element);\n this.element.insertBefore(element, this.element.children[increased ? disabledIdx + 2 : disabledIdx - 1]);\n start = increased ? disabledIdx + 2 : disabledIdx + 1;\n }\n else {\n start++;\n }\n }\n }\n };\n Sortable.prototype.getIndex = function (target, instance, e) {\n if (instance === void 0) { instance = this; }\n var idx;\n var placeHolderPresent;\n [].slice.call(instance.element.children).forEach(function (element, index) {\n if (element.classList.contains('e-sortable-placeholder')) {\n placeHolderPresent = true;\n }\n if (element === target) {\n idx = index;\n if (!isNullOrUndefined(e)) {\n if (placeHolderPresent) {\n idx -= 1;\n }\n var offset = target.getBoundingClientRect();\n var clientY = offset.bottom - ((offset.bottom - offset.top) / 2);\n var cltY = e.changedTouches ? e.changedTouches[0].clientY : e.clientY;\n idx = cltY <= clientY ? idx : idx + 1;\n }\n return;\n }\n });\n return idx;\n };\n Sortable.prototype.getSortableElement = function (element, instance) {\n if (instance === void 0) { instance = this; }\n return closest(element, \".\" + instance.itemClass);\n };\n Sortable.prototype.queryPositionInfo = function (value) {\n value.left = pageXOffset ? parseFloat(value.left) - pageXOffset + \"px\" : value.left;\n value.top = pageYOffset ? parseFloat(value.top) - pageYOffset + \"px\" : value.top;\n return value;\n };\n Sortable.prototype.isPlaceHolderPresent = function (instance) {\n return instance.placeHolderElement && !!closest(instance.placeHolderElement, \"#\" + instance.element.id);\n };\n /**\n * It is used to sort array of elements from source element to destination element.\n *\n * @param destination - Defines the destination element to which the sortable elements needs to be appended.\n *\n * If it is null, then the Sortable library element will be considered as destination.\n * @param targetIndexes - Specifies the sortable elements indexes which needs to be sorted.\n * @param insertBefore - Specifies the index before which the sortable elements needs to be appended.\n * If it is null, elements will be appended as last child.\n * @function moveTo\n * @returns {void}\n */\n Sortable.prototype.moveTo = function (destination, targetIndexes, insertBefore) {\n moveTo(this.element, destination, targetIndexes, insertBefore);\n };\n /**\n * It is used to destroy the Sortable library.\n */\n Sortable.prototype.destroy = function () {\n this.unwireEvents();\n if (this.itemClass === 'e-sort-item') {\n this.itemClass = null;\n this.dataBind();\n }\n getComponent(this.element, Draggable).destroy();\n _super.prototype.destroy.call(this);\n };\n Sortable.prototype.getModuleName = function () {\n return 'sortable';\n };\n Sortable.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'itemClass':\n [].slice.call(this.element.children).forEach(function (element) {\n if (element.classList.contains(oldProp.itemClass)) {\n element.classList.remove(oldProp.itemClass);\n }\n if (newProp.itemClass) {\n element.classList.add(newProp.itemClass);\n }\n });\n break;\n }\n }\n };\n var Sortable_1;\n __decorate([\n Property(false)\n ], Sortable.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"itemClass\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"scope\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"helper\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"placeHolder\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDrop\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drop\", void 0);\n Sortable = Sortable_1 = __decorate([\n NotifyPropertyChanges\n ], Sortable);\n return Sortable;\n}(Base));\nexport { Sortable };\n/**\n * It is used to sort array of elements from source element to destination element.\n *\n * @private\n */\nexport function moveTo(from, to, targetIndexes, insertBefore) {\n var targetElements = [];\n if (!to) {\n to = from;\n }\n if (targetIndexes && targetIndexes.length) {\n targetIndexes.forEach(function (index) {\n targetElements.push(from.children[index]);\n });\n }\n else {\n targetElements = [].slice.call(from.children);\n }\n if (isNullOrUndefined(insertBefore)) {\n targetElements.forEach(function (target) {\n to.appendChild(target);\n });\n }\n else {\n var insertElement_1 = to.children[insertBefore];\n targetElements.forEach(function (target) {\n to.insertBefore(target, insertElement_1);\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})();\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 { merge, formatUnit, isNullOrUndefined, append, detach, extend } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch, animationMode } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n container: 'e-list-container',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n backButton: 'e-back-button',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist',\n virtualElementContainer: 'e-list-virtualcontainer'\n};\nvar LISTVIEW_TEMPLATE_PROPERTY = 'Template';\nvar LISTVIEW_GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar LISTVIEW_HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar swipeVelocity = 0.5;\n/**\n * Represents the field settings of the ListView.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n * <div id=\"listview\">\n * <ul>\n * <li>Favorite</li>\n * <li>Documents</li>\n * <li>Downloads</li>\n * </ul>\n * </div>\n * ```\n * ```typescript\n * var listviewObject = new ListView({});\n * listviewObject.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n *\n * @param options\n *\n * @param element\n */\n function ListView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousSelectedItems = [];\n _this.hiddenItems = [];\n _this.enabledItems = [];\n _this.disabledItems = [];\n return _this;\n }\n /**\n * @param newProp\n *\n * @param oldProp\n *\n * @private\n */\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n // eslint-disable-next-line\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false, 'header');\n }\n break;\n case 'query':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false, 'header');\n break;\n case 'enableVirtualization':\n if (!isNullOrUndefined(this.contentContainer)) {\n detach(this.contentContainer);\n }\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'template':\n if (!this.enableVirtualization) {\n this.refresh();\n }\n break;\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.clientHeight ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n // Support Component Functions\n ListView.prototype.header = function (text, showBack, prop) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText });\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n innerHeaderEle.innerText = this.headerTitle;\n }\n else {\n innerHeaderEle.innerHTML = this.headerTitle;\n }\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' ' + classNames.backButton,\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n // eslint-disable-next-line\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n // eslint-disable-next-line\n var compiledElement = compiledString({}, this, prop, this.LISTVIEW_HEADERTEMPLATE_ID, null, null, this.headerEle);\n if (compiledElement) {\n append(compiledElement, headerTemplateEle);\n }\n append([headerTemplateEle], this.headerEle);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n if (this.enableHtmlSanitizer) {\n text = SanitizeHtmlHelper.sanitize(text);\n }\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[\"\" + slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n // eslint-disable-next-line\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n if (this.template) {\n try {\n if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {\n this.setProperties({ template: document.querySelector(this.template).innerHTML.trim() }, true);\n }\n }\n catch (e) {\n compile(this.template);\n }\n }\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'presentation', wrapperRole: 'presentation'\n },\n // eslint-disable-next-line\n fields: (this.fields.properties),\n sortOrder: this.sortOrder,\n showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this),\n templateID: \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,\n groupTemplateID: \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = this.enablePersistence ? this.selectedId : [];\n this.LISTVIEW_TEMPLATE_ID = \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY;\n this.LISTVIEW_GROUPTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY;\n this.LISTVIEW_HEADERTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_HEADERTEMPLATE_PROPERTY;\n this.aniObj = new Animation(this.animateOptions);\n this.removeElement(this.curUL);\n this.removeElement(this.ulElement);\n this.removeElement(this.headerEle);\n this.removeElement(this.contentContainer);\n this.curUL = this.ulElement = this.liCollection = this.headerEle = this.contentContainer = undefined;\n };\n ListView.prototype.renderCheckbox = function (args) {\n var _this = this;\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData_1;\n // eslint-disable-next-line prefer-const\n checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {\n var index = this.selectedId.findIndex(function (e) { return e == fieldData_1[_this.listBaseOption.fields.id].toString(); });\n if (index != -1) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (fieldData_1[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n checkboxElement.setAttribute('aria-label', 'checkbox');\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n if (this.checkBoxPosition === 'Left') {\n this.virtualCheckBox = args.item.firstElementChild.children[0];\n }\n else {\n this.virtualCheckBox = args.item.firstElementChild.lastElementChild;\n }\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * Checks the specific list item by passing the unchecked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n if (checked === true) {\n liElement.classList.add(classNames.selected);\n }\n else {\n liElement.classList.remove(classNames.selected);\n }\n if (checked === true) {\n checkboxIcon.classList.add(classNames.checked);\n }\n else {\n checkboxIcon.classList.remove(classNames.checked);\n }\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n this.updateSelectedId();\n }\n };\n /**\n * Uncheck the specific list item by passing the checked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.uncheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * Checks all the unchecked items in the ListView.\n */\n ListView.prototype.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * Uncheck all the checked items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n this.updateSelectedId();\n }\n };\n ListView.prototype.setCheckbox = function () {\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n args.item = element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.curData = this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n this.renderCheckbox(args);\n if (args.item.classList.contains(classNames.selected)) {\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n /**\n * Refresh the height of the list item only on enabling the virtualization property.\n */\n ListView.prototype.refreshItemHeight = function () {\n if (this.virtualizationModule) {\n this.virtualizationModule.refreshItemHeight();\n }\n };\n ListView.prototype.clickHandler = function (e) {\n if (Array.isArray(this.dataSource) && this.dataSource.length === 0) {\n return;\n }\n var target = e.target;\n this.targetElement = target;\n var classList = target.classList;\n var closestElement;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n li.classList.add(classNames.focused);\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n var checkIcon = li.querySelector('.' + classNames.checkboxIcon);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n if ((target.nodeName == \"INPUT\") || (target.nodeName == \"TEXTAREA\")) {\n target.classList.add('e-focused');\n this.targetElement = target;\n }\n }\n }\n else {\n this.setSelectLI(li, e);\n if ((target.nodeName == \"INPUT\") || (target.nodeName == \"TEXTAREA\")) {\n target.classList.add('e-focused');\n this.targetElement = target;\n }\n }\n closestElement = closest(e.target, 'li');\n if (!isNullOrUndefined(closestElement)) {\n if (closestElement.classList.contains('e-has-child') &&\n !e.target.parentElement.classList.contains('e-listview-checkbox')) {\n closestElement.classList.add(classNames.disable);\n }\n }\n }\n this.updateSelectedId();\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ListView.prototype.leaveHandler = function (e) {\n this.removeHover();\n };\n ListView.prototype.homeKeyHandler = function (e, end) {\n e.preventDefault();\n if (Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelectorAll('.' + classNames.listItem);\n var focusedElement = this.curUL.querySelector('.' + classNames.focused) ||\n this.curUL.querySelector('.' + classNames.selected);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n focusedElement.classList.remove(classNames.selected);\n }\n }\n var index = !end ? 0 : li.length - 1;\n if (li[index].classList.contains(classNames.hasChild) || this.showCheckBox) {\n li[index].classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(li[index], e);\n }\n if (li[index]) {\n this.element.setAttribute('aria-activedescendant', li[index].id.toString());\n }\n else {\n this.element.removeAttribute('aria-activedescendant');\n }\n }\n };\n ListView.prototype.onArrowKeyDown = function (e, prev) {\n var siblingLI;\n var li;\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n if (hasChild || this.showCheckBox) {\n li = this.curUL.querySelector('.' + classNames.focused) || this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n if (!isNullOrUndefined(siblingLI)) {\n if (li) {\n li.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n li.classList.remove(classNames.selected);\n }\n }\n if (siblingLI.classList.contains(classNames.hasChild) || this.showCheckBox) {\n siblingLI.classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(siblingLI, e);\n }\n }\n }\n else {\n li = this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n this.setSelectLI(siblingLI, e);\n }\n if (siblingLI) {\n this.element.setAttribute('aria-activedescendant', siblingLI.id.toString());\n }\n else {\n this.element.removeAttribute('aria-activedescendant');\n }\n return siblingLI;\n };\n ListView.prototype.arrowKeyHandler = function (e, prev) {\n var _this = this;\n e.preventDefault();\n if (Object.keys(this.dataSource).length && this.curUL) {\n var siblingLI = this.onArrowKeyDown(e, prev);\n var elementTop = this.element.getBoundingClientRect().top;\n var elementHeight = this.element.getBoundingClientRect().height;\n var firstItemBounds = this.curUL.querySelector('.' + classNames.listItem).getBoundingClientRect();\n var heightDiff = void 0;\n var groupItemBounds = void 0;\n if (this.fields.groupBy) {\n groupItemBounds = this.curUL.querySelector('.' + classNames.groupListItem).getBoundingClientRect();\n }\n if (siblingLI) {\n var siblingTop = siblingLI.getBoundingClientRect().top;\n var siblingHeight = siblingLI.getBoundingClientRect().height;\n if (!prev) {\n var height = this.isWindow ? window.innerHeight : elementHeight;\n heightDiff = this.isWindow ? (siblingTop + siblingHeight) :\n ((siblingTop - elementTop) + siblingHeight);\n if (heightDiff > height) {\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + (heightDiff - height));\n }\n else {\n this.element.scrollTop = this.element.scrollTop + (heightDiff - height);\n }\n }\n }\n else {\n heightDiff = this.isWindow ? siblingTop : (siblingTop - elementTop);\n if (heightDiff < 0) {\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop + heightDiff;\n }\n }\n }\n }\n else if (this.enableVirtualization && prev && this.virtualizationModule.uiFirstIndex) {\n this.onUIScrolled = function () {\n _this.onArrowKeyDown(e, prev);\n _this.onUIScrolled = undefined;\n };\n heightDiff = this.virtualizationModule.listItemHeight;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset - heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop - heightDiff;\n }\n }\n else if (prev) {\n if (this.showHeader && this.headerEle) {\n var topHeight = groupItemBounds ? groupItemBounds.top : firstItemBounds.top;\n var headerBounds = this.headerEle.getBoundingClientRect();\n heightDiff = headerBounds.top < 0 ? (headerBounds.height - topHeight) : 0;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset - heightDiff);\n }\n else {\n this.element.scrollTop = 0;\n }\n }\n else if (this.fields.groupBy) {\n heightDiff = this.isWindow ? (groupItemBounds.top < 0 ? groupItemBounds.top : 0) :\n (elementTop - firstItemBounds.top) + groupItemBounds.height;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop - heightDiff;\n }\n }\n }\n }\n };\n ListView.prototype.enterKeyHandler = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (hasChild && li) {\n li.classList.remove(classNames.focused);\n if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n e.preventDefault();\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelector('.' + classNames.focused);\n var checkboxElement = void 0;\n var checkIcon = void 0;\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n checkboxElement = args.item.querySelector('.' + classNames.checkboxWrapper);\n this.checkInternally(args, checkboxElement);\n checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n }\n else {\n this.uncheckItem(li);\n }\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon ? checkIcon.classList.contains(classNames.checked) : false });\n this.trigger('select', eventArgs);\n this.updateSelectedId();\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 32:\n if (isNullOrUndefined(this.targetElement) || !(this.targetElement.classList.contains('e-focused'))) {\n this.spaceKeyHandler(e);\n }\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right' && e.velocity > swipeVelocity && e.originalEvent.type === 'touchend') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox && !isNullOrUndefined(this.selectedLI)) {\n this.selectedLI.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n var textAreaFocus = li.querySelector('textarea') || li.querySelector('input');\n li.classList.add(classNames.focused);\n if (!isNullOrUndefined(e)) {\n if (e.target === textAreaFocus) {\n textAreaFocus.classList.add('e-focused');\n }\n }\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (!isNullOrUndefined(data)\n && typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li && li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem =\n // eslint-disable-next-line\n {\n item: li, text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, { isInteracted: true, event: e, cancel: false, index: this.curUL && Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n // eslint-disable-next-line\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n // eslint-disable-next-line\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n var _this = this;\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.selectedLI = li;\n _this.renderSubList(li);\n }\n });\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n // eslint-disable-next-line\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = \n // eslint-disable-next-line\n getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n // eslint-disable-next-line\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n // eslint-disable-next-line\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n // eslint-disable-next-line\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[\"\" + column]) &&\n this.fields[\"\" + column] !==\n ListBase.defaultMappedFields[\"\" + column]\n && columns.indexOf(this.fields[\"\" + column]) === -1) {\n columns.push(this.fields[\"\" + column]);\n }\n }\n query.select(columns);\n // eslint-disable-next-line\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n // eslint-disable-next-line\n var fieldValue = (isNullOrUndefined(this.fields.sortBy)) ? this.fields.text : this.fields.sortBy;\n var query = ListBase.addSorting(this.sortOrder, fieldValue);\n if (dataSource && this.fields.groupBy) {\n if (this.sortOrder !== 'None') {\n this.curViewDS = ListBase.groupDataSource(ListBase.getDataSource(dataSource, query), this.listBaseOption.fields, this.sortOrder);\n }\n else {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.fields, this.sortOrder);\n }\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, query);\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.renderRemoteLists = function (e, listViewComponent) {\n if (this.isDestroyed) {\n return;\n }\n this.localData = e.result;\n listViewComponent.removeElement(listViewComponent.contentContainer);\n this.renderList();\n this.trigger('actionComplete', e);\n };\n ListView.prototype.triggerActionFailure = function (e) {\n if (this.isDestroyed) {\n return;\n }\n this.trigger('actionFailure', e);\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n // eslint-disable-next-line\n var listViewComponent = this;\n if (this.dataSource instanceof DataManager) {\n if (this.dataSource.ready) {\n this.dataSource.ready.then(function (e) {\n /* eslint-disable */\n _this.isOffline = _this.dataSource.dataSource.offline;\n if (_this.dataSource instanceof DataManager && _this.isOffline) {\n _this.renderRemoteLists(e, listViewComponent);\n }\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n else {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n _this.renderRemoteLists(e, listViewComponent);\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.removeElement(this.headerEle);\n this.removeElement(this.ulElement);\n this.removeElement(this.contentContainer);\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n if (Object.keys(window).indexOf('ejsInterop') === -1) {\n this.element.innerHTML = '';\n }\n this.headerEle = this.ulElement = this.liCollection = undefined;\n this.header();\n this.setLocalData();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.setAttributes = function (liElements) {\n for (var i = 0; i < liElements.length; i++) {\n var element = liElements[i];\n if (element.classList.contains('e-list-item')) {\n element.setAttribute('id', this.element.id + '_' + element.getAttribute('data-uid'));\n element.setAttribute('tabindex', '-1');\n }\n }\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.createElement, this.curViewDS, this.listBaseOption, null, this);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(this.liCollection);\n };\n ListView.prototype.exceptionEvent = function (e) {\n this.trigger('actionFailure', e);\n };\n ListView.prototype.UpdateCurrentUL = function () {\n this.ulElement = this.curUL = this.element.querySelector('.' + classNames.parentItem);\n if (this.curUL) {\n // eslint-disable-next-line\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n };\n ListView.prototype.renderSubList = function (li) {\n this.liElement = li;\n var uID = li.getAttribute('data-uid');\n if (li.classList.contains(classNames.hasChild) && uID) {\n var ul = closest(li.parentNode, '.' + classNames.parentItem);\n var ele = this.element.querySelector('[pid=\\'' + uID + '\\']');\n this.curDSLevel.push(uID);\n this.setViewDataSource(this.getSubDS());\n if (!ele) {\n var data = this.curViewDS;\n ele = ListBase.createListFromJson(this.createElement, data, this.listBaseOption, this.curDSLevel.length, null, this);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n var lists = ele.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(lists);\n ele.setAttribute('pID', uID);\n ele.style.display = 'none';\n this.renderIntoDom(ele);\n }\n this.switchView(ul, ele);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.selectedItems) {\n var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);\n // eslint-disable-next-line\n this.header((fieldData[this.listBaseOption.fields.text]), true, 'header');\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization) {\n if (Object.keys(this.dataSource).length) {\n if ((this.template || this.groupTemplate) && !this.virtualizationModule.isNgTemplate()) {\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = this.createElement('div', { className: classNames.container });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n // eslint-disable-next-line\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * Initializes the ListView component rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n this.renderComplete();\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n this.unWireEvents();\n var classAr = [classNames.root, classNames.disable, 'e-rtl',\n 'e-has-header', 'e-lib'].concat(this.cssClass.split(' ').filter(function (css) { return css; }));\n removeClass([this.element], classAr);\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n this.element.innerHTML = '';\n this.contentContainer = null;\n this.selectedItems = null;\n this.selectedLI = null;\n this.liElement = null;\n this.targetElement = null;\n this.currentLiElements = null;\n this.virtualCheckBox = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Switches back from the navigated sub list item.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n // eslint-disable-next-line\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.remove(classNames.disable);\n li.classList.add(classNames.focused);\n if (!(this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked))) {\n li.classList.remove(classNames.selected);\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false), 'header');\n };\n /**\n * Selects the list item from the ListView by passing the elements or field object.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (item) {\n if (this.enableVirtualization) {\n this.virtualizationModule.selectItem(item);\n }\n else if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(item));\n }\n else {\n if (isNullOrUndefined(item) === true) {\n this.removeSelect();\n }\n else {\n this.setSelectLI(this.getLiFromObjOrElement(item));\n }\n }\n };\n ListView.prototype.getLiFromObjOrElement = function (obj) {\n var li;\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (!isNullOrUndefined(obj)) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n if (obj instanceof Element) {\n var uid = obj.getAttribute('data-uid').toString();\n for (var i = 0; i < this.liCollection.length; i++) {\n if (this.liCollection[i].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[i];\n break;\n }\n }\n }\n else {\n Array.prototype.some.call(this.curUL.querySelectorAll('.' + classNames.listItem), function (item) {\n if (item.innerText.trim() === obj.toString()) {\n li = item;\n return true;\n }\n else {\n return false;\n }\n });\n }\n }\n else {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n li = this.element.querySelector('[data-uid=\"'\n + fieldData[this.fields.id] + '\"]');\n if (!this.enableVirtualization && isNullOrUndefined(li)) {\n var curLi = this.element.querySelectorAll('.' + classNames.listItem);\n for (var i = 0; i < curLi.length; i++) {\n // eslint-disable-next-line\n if (curLi[i].innerText.trim() === fieldData[this.fields.text]) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\n };\n /**\n * Selects multiple list items from the ListView.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of\n * elements or array of fields Object with ID and Text fields.\n */\n ListView.prototype.selectMultipleItems = function (item) {\n if (!isNullOrUndefined(item)) {\n for (var i = 0; i < item.length; i++) {\n if (!isNullOrUndefined(item[i])) {\n this.selectItem(item[i]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n ListView.prototype.updateSelectedId = function () {\n this.selectedId = [];\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n for (var i = 0; i < liCollection.length; i++) {\n var tempData = this.getItemData(liCollection[i]);\n if (!isNullOrUndefined(tempData) && tempData[this.listBaseOption.fields.id]) {\n this.selectedId.push(tempData[this.listBaseOption.fields.id]);\n }\n }\n };\n /**\n * Gets the details of the currently selected item from the list items.\n *\n */\n ListView.prototype.getSelectedItems = function () {\n // eslint-disable-next-line\n var finalValue;\n var isCompleted = false;\n this.selectedId = [];\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (this.enableVirtualization && !isCompleted) {\n finalValue = this.virtualizationModule.getSelectedItems();\n isCompleted = true;\n }\n else if (this.showCheckBox && !isCompleted) {\n // eslint-disable-next-line\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[i]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n if (fieldData) {\n // eslint-disable-next-line\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n // eslint-disable-next-line\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n else {\n liTextCollection.push(undefined);\n this.selectedId.push(undefined);\n }\n }\n }\n if ((typeof dataSource[0] === 'string'\n || typeof dataSource[0] === 'number')\n && !isCompleted) {\n finalValue = { item: liCollection, data: dataSource, text: liTextCollection };\n isCompleted = true;\n }\n if (this.isNestedList && !isCompleted) {\n finalValue = { item: liCollection, data: dataParent, text: liTextCollection };\n isCompleted = true;\n }\n else if (!isCompleted) {\n finalValue = { item: liCollection, data: liDataCollection, text: liTextCollection };\n isCompleted = true;\n }\n }\n else if (!isCompleted) {\n var liElement = this.element.getElementsByClassName(classNames.selected)[0];\n var fieldData = getFieldValues(this.getItemData(liElement), this.listBaseOption.fields);\n if ((typeof dataSource[0] === 'string'\n || typeof dataSource[0] === 'number')\n && !isCompleted) {\n finalValue = (!isNullOrUndefined(liElement)) ? {\n item: liElement, data: dataSource,\n text: liElement.innerText.trim()\n } : undefined;\n isCompleted = true;\n }\n else if (!isCompleted) {\n if (isNullOrUndefined(fieldData) || isNullOrUndefined(liElement)) {\n finalValue = undefined;\n isCompleted = true;\n }\n else {\n // eslint-disable-next-line\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n finalValue = {\n text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement)\n };\n isCompleted = true;\n }\n }\n }\n return finalValue;\n };\n /**\n * Finds out an item details from the current list.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (item) {\n return this.getItemData(item);\n };\n /**\n * Enables the disabled list items by passing the Id and text fields.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.enableItem = function (item) {\n this.setItemState(item, true);\n if (this.enableVirtualization) {\n this.virtualizationModule.enableItem(item);\n }\n };\n /**\n * Disables the list items by passing the Id and text fields.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.disableItem = function (item) {\n this.setItemState(item, false);\n if (this.enableVirtualization) {\n this.virtualizationModule.disableItem(item);\n }\n };\n //A function that used to set state of the list item like enable, disable.\n ListView.prototype.setItemState = function (item, isEnable) {\n var resultJSON = this.getItemData(item);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (isEnable) {\n if (li) {\n li.classList.remove(classNames.disable);\n }\n delete resultJSON[this.fields.enabled];\n }\n else if (!isEnable) {\n if (li) {\n li.classList.add(classNames.disable);\n }\n // eslint-disable-next-line\n resultJSON[this.fields.enabled] = false;\n }\n }\n };\n /**\n * Shows the hide list item from the ListView.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.showItem = function (item) {\n this.showHideItem(item, false, '');\n if (this.enableVirtualization) {\n this.virtualizationModule.showItem(item);\n }\n };\n /**\n * Hides an list item from the ListView.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.hideItem = function (item) {\n this.showHideItem(item, true, 'none');\n if (this.enableVirtualization) {\n this.virtualizationModule.hideItem(item);\n }\n };\n ListView.prototype.showHideItem = function (obj, isHide, display) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (li) {\n li.style.display = display;\n }\n if (isHide) {\n // eslint-disable-next-line\n resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * Adds the new list item(s) to the current ListView.\n * To add a new list item(s) in the ListView, we need to pass the `data` as an array of items that need\n * to be added and `fields` as the target item to which we need to add the given item(s) as its children.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {{Object}[]} data - JSON Array Data that need to add.\n *\n * @param {Fields} fields - Target item to add the given data as its children (can be null).\n *\n * @param {number} index - Indicates the index where the data to be added.\n */\n ListView.prototype.addItem = function (data, fields, index) {\n if (fields === void 0) { fields = undefined; }\n var dataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n this.addItemInternally(data, fields, dataSource, index);\n };\n ListView.prototype.addItemInternally = function (data, fields, dataSource, index) {\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields, dataSource, index);\n }\n else {\n var ds = this.findItemFromDS(dataSource, fields);\n var child = void 0;\n if (ds) {\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n }\n // check for whether target is nested level or top level in list\n if (ds instanceof Array) {\n for (var i = 0; i < data.length; i++) {\n dataSource = this.addItemAtIndex(index, dataSource, data[i]);\n this.setViewDataSource(dataSource);\n // since it is top level target, get the content container's first child\n // as it is always the top level UL\n var targetUL = this.contentContainer\n ? this.contentContainer.children[0]\n : null;\n // check for whether the list was previously empty or not, if it is\n // proceed to call initial render\n if (this.contentContainer && targetUL) {\n this.addItemIntoDom(data[i], targetUL, this.curViewDS);\n }\n else {\n this.reRender();\n }\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n // proceed as target item is in nested level, only if it is a valid target ds\n if (ds) {\n ds[this.fields.child] = child;\n this.addItemInNestedList(ds, data);\n }\n }\n }\n }\n };\n ListView.prototype.addItemAtIndex = function (index, newDataSource, itemData) {\n var isIndexValid = !(isNullOrUndefined(index)) && index >= 0 && index < newDataSource.length && isNullOrUndefined(this.listBaseOption.fields.groupBy);\n if (isIndexValid) {\n newDataSource.splice(index, 0, itemData);\n }\n else {\n newDataSource.push(itemData);\n }\n return newDataSource;\n };\n ListView.prototype.addItemInNestedList = function (targetItemData, itemQueue) {\n // eslint-disable-next-line\n var targetItemId = targetItemData[this.fields.id];\n var targetChildDS = targetItemData[this.fields.child];\n var isAlreadyRenderedUL = this.element.querySelector('[pid=\\'' + targetItemId + '\\']');\n var targetLi = this.element.querySelector('[data-uid=\\'' + targetItemId + '\\']');\n var targetUL = isAlreadyRenderedUL\n ? isAlreadyRenderedUL\n : targetLi\n ? closest(targetLi, 'ul')\n : null;\n var targetDS = isAlreadyRenderedUL ? targetChildDS : [targetItemData];\n var isTargetEmptyChild = targetLi ? !targetLi.classList.contains(classNames.hasChild) : false;\n var isRefreshTemplateNeeded = false;\n // if li element is already rendered, that element needs to be refreshed so that\n // it becomes child viewable due to new child items are added now\n if (isTargetEmptyChild) {\n var targetRefreshedElement = ListBase.createListItemFromJson(this.createElement, targetDS, this.listBaseOption, null, null, this);\n this.setAttributes(targetRefreshedElement);\n targetUL.insertBefore(targetRefreshedElement[0], targetLi);\n detach(targetLi);\n isRefreshTemplateNeeded = true;\n }\n // if it is already rendered element, we need to create and append new elements\n if (isAlreadyRenderedUL && itemQueue) {\n for (var i = 0; i < itemQueue.length; i++) {\n targetDS.push(itemQueue[i]);\n this.addItemIntoDom(itemQueue[i], targetUL, targetDS);\n }\n isRefreshTemplateNeeded = true;\n }\n };\n ListView.prototype.addItemIntoDom = function (currentItem, targetUL, curViewDS) {\n var index = curViewDS.indexOf(currentItem);\n this.addListItem(currentItem, index, targetUL, curViewDS);\n var curItemDS = curViewDS[index - 1];\n if (curItemDS && curItemDS.isHeader && curItemDS.items.length === 1) {\n this.addListItem(curItemDS, (index - 1), targetUL, curViewDS);\n }\n };\n ListView.prototype.addListItem = function (dataSource, index, ulElement, curViewDS) {\n var target = this.getLiFromObjOrElement(curViewDS[index + 1]) ||\n this.getLiFromObjOrElement(curViewDS[index + 2]) || null;\n var li = ListBase.createListItemFromJson(this.createElement, [dataSource], this.listBaseOption, null, null, this);\n this.setAttributes(li);\n // eslint-disable-next-line\n if (this.template && this.isReact) {\n this.renderReactTemplates();\n }\n if (this.fields.groupBy && curViewDS[index + 1] && curViewDS[index + 1].isHeader) {\n var targetEle = this.getLiFromObjOrElement(curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n ulElement.insertBefore(li[0], target);\n };\n /**\n * Removes the list item from the data source based on a passed\n * element like fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (item) {\n var listDataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n if (this.enableVirtualization) {\n this.virtualizationModule.removeItem(item);\n }\n else {\n this.removeItemFromList(item, listDataSource);\n }\n };\n ListView.prototype.removeItemFromList = function (obj, listDataSource) {\n var _this = this;\n var curViewDS = this.curViewDS;\n var fields = obj instanceof Element ? this.getElementUID(obj) : obj;\n var dataSource;\n // eslint-disable-next-line prefer-const\n dataSource = this.findItemFromDS(listDataSource, fields, true);\n if (dataSource) {\n var data_1;\n // eslint-disable-next-line prefer-const\n data_1 = this.findItemFromDS(dataSource, fields);\n var index = curViewDS.indexOf(data_1);\n var li = this.getLiFromObjOrElement(obj);\n var groupLi = void 0;\n this.validateNestedView(li);\n if (this.fields.groupBy && this.curViewDS[index - 1] &&\n curViewDS[index - 1].isHeader &&\n curViewDS[index - 1].items.length === 1) {\n if (li && li.previousElementSibling.classList.contains(classNames.groupListItem) &&\n (isNullOrUndefined(li.nextElementSibling) || (li.nextElementSibling &&\n li.nextElementSibling.classList.contains(classNames.groupListItem)))) {\n groupLi = li.previousElementSibling;\n }\n }\n if (li) {\n detach(li);\n }\n if (groupLi) {\n detach(groupLi);\n }\n // eslint-disable-next-line\n var foundData = (dataSource.length - 1) <= 0\n ? this.findParent(this.localData, this.fields.id, \n // eslint-disable-next-line\n function (value) { return value === data_1[_this.fields.id]; }, null) : null;\n var dsIndex = dataSource.indexOf(data_1);\n dataSource.splice(dsIndex, 1);\n this.setViewDataSource(listDataSource);\n if (foundData\n && foundData.parent\n && Array.isArray(foundData.parent[this.fields.child])\n && foundData.parent[this.fields.child].length <= 0) {\n var parentLi = this.getLiFromObjOrElement(foundData.parent);\n if (parentLi) {\n var li_1 = ListBase.createListItemFromJson(this.createElement, [foundData.parent], this.listBaseOption, null, null, this);\n this.setAttributes(li_1);\n parentLi.parentElement.insertBefore(li_1[0], parentLi);\n parentLi.parentElement.removeChild(parentLi);\n }\n }\n if (dataSource.length <= 0) {\n this.back();\n }\n this.liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n }\n };\n // validate before removing an element whether the current view is inside target element's child view\n ListView.prototype.validateNestedView = function (li) {\n var liID = li ? li.getAttribute('data-uid').toString().toLowerCase() : null;\n if (liID && this.curDSLevel && this.curDSLevel.length > 0) {\n while (this.curDSLevel.some(function (id) { return id.toString().toLowerCase() === liID; })) {\n this.back();\n }\n }\n };\n /**\n * Removes multiple items from the ListView by passing the array of elements or array of field objects.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.removeMultipleItems = function (item) {\n if (item.length) {\n for (var i = 0; i < item.length; i++) {\n this.removeItem(item[i]);\n }\n }\n };\n // eslint-disable-next-line\n ListView.prototype.findParent = function (dataSource, id, callback, parent) {\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource.hasOwnProperty(id) && callback(dataSource[id]) === true) {\n return extend({}, dataSource);\n }\n for (var i = 0; i < Object.keys(dataSource).length; i++) {\n if (dataSource[Object.keys(dataSource)[i]]\n && typeof dataSource[Object.keys(dataSource)[i]] === 'object') {\n // eslint-disable-next-line\n var result = this.findParent(dataSource[Object.keys(dataSource)[i]], id, callback, dataSource);\n if (result != null) {\n if (!result.parent) {\n result.parent = parent;\n }\n return result;\n }\n }\n }\n return null;\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\n };\n ListView.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualization' });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition', 'selectedId']);\n };\n __decorate([\n Property('')\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n ListView = __decorate([\n NotifyPropertyChanges\n ], ListView);\n return ListView;\n}(Component));\nexport { ListView };\n","import { classNames } from './list-view';\nimport { EventHandler, append, isNullOrUndefined, detach, removeClass, addClass, compile, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '../common/list-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nvar listElementCount = 1.5;\nvar windowElementCount = 3;\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.elementDifference = 0;\n this.listViewInstance = instance;\n }\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.isNgTemplate = function () {\n return !isNullOrUndefined(this.listViewInstance.templateRef) && typeof this.listViewInstance.templateRef !== 'string';\n };\n /**\n * Checks if the platform is a Vue and its template property is a function type.\n *\n * @returns {boolean} indicating the result of the check\n */\n Virtualization.prototype.isVueFunctionTemplate = function () {\n return this.listViewInstance.isVue && typeof this.listViewInstance.template === 'function';\n };\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.uiVirtualization = function () {\n this.commonTemplate = '<div class=\"e-text-content\" role=\"presentation\"> ' +\n '<span class=\"e-list-text\"> ${' + this.listViewInstance.fields.text + '} </span></div>';\n this.templateFunction = compile(this.listViewInstance.template || this.commonTemplate, this.listViewInstance);\n this.groupTemplateFunction = compile(this.listViewInstance.groupTemplate || this.commonTemplate, this.listViewInstance);\n this.wireScrollEvent(false);\n var curViewDS = this.listViewInstance.curViewDS;\n var firstDs = curViewDS.slice(0, 1);\n this.listViewInstance.ulElement = this.listViewInstance.curUL = ListBase.createList(\n // eslint-disable-next-line\n this.listViewInstance.createElement, firstDs, this.listViewInstance.listBaseOption, null, this.listViewInstance);\n this.listViewInstance.contentContainer = this.listViewInstance.createElement('div', { className: classNames.container });\n this.listViewInstance.element.appendChild(this.listViewInstance.contentContainer);\n this.listViewInstance.contentContainer.appendChild(this.listViewInstance.ulElement);\n this.listItemHeight = this.listViewInstance.ulElement.firstElementChild.getBoundingClientRect().height;\n this.expectedDomItemCount = this.ValidateItemCount(10000);\n this.domItemCount = this.ValidateItemCount(Object.keys(this.listViewInstance.curViewDS).length);\n this.uiFirstIndex = 0;\n this.uiLastIndex = this.domItemCount - 1;\n var otherDs = curViewDS.slice(1, this.domItemCount);\n var listItems = ListBase.createListItemFromJson(\n // eslint-disable-next-line\n this.listViewInstance.createElement, otherDs, this.listViewInstance.listBaseOption, null, null, this.listViewInstance);\n append(listItems, this.listViewInstance.ulElement);\n this.listViewInstance.liCollection = this.listViewInstance.curUL.querySelectorAll('li');\n this.topElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.topElement, this.listViewInstance.ulElement.firstElementChild);\n this.bottomElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.bottomElement, null);\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n this.listDiff = 0;\n this.uiIndicesInitialization();\n };\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n if (this.listViewInstance.isWindow) {\n this.onVirtualScroll = this.onVirtualUiScroll.bind(this);\n window.addEventListener('scroll', this.onVirtualScroll);\n }\n else {\n EventHandler.add(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll, this);\n }\n }\n else {\n if (this.listViewInstance.isWindow === true) {\n window.removeEventListener('scroll', this.onVirtualScroll);\n window.removeEventListener('scroll', this.updateUl);\n }\n else {\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll);\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.updateUlContainer);\n }\n }\n };\n Virtualization.prototype.updateUlContainer = function (e) {\n var listDiff;\n var virtualElementContainer = this.listViewInstance.ulElement.querySelector('.' + classNames.virtualElementContainer);\n if (isNullOrUndefined(this.listViewInstance.liElementHeight)) {\n this.listViewInstance.updateLiElementHeight();\n }\n if (this.listViewInstance.isWindow) {\n // eslint-disable-next-line\n listDiff = Math.round(e.target.documentElement.scrollTop / this.listViewInstance.liElementHeight) - 2;\n }\n else {\n // eslint-disable-next-line\n listDiff = Math.round(e.target.scrollTop / this.listViewInstance.liElementHeight) - 2;\n }\n if (((listDiff - 1) * this.listViewInstance.liElementHeight) < 0) {\n virtualElementContainer.style.top = '0px';\n }\n else {\n virtualElementContainer.style.top = (listDiff) * this.listViewInstance.liElementHeight + 'px';\n }\n };\n Virtualization.prototype.ValidateItemCount = function (dataSourceLength) {\n var height = parseFloat(formatUnit(this.listViewInstance.height));\n var itemCount;\n if (this.listViewInstance.isWindow) {\n itemCount = Math.round((window.innerHeight / this.listItemHeight) * windowElementCount);\n }\n else {\n if (typeof this.listViewInstance.height === 'string' && this.listViewInstance.height.indexOf('%') !== -1) {\n // eslint-disable-next-line max-len\n itemCount = Math.round((this.listViewInstance.element.getBoundingClientRect().height / this.listItemHeight) * listElementCount);\n }\n else {\n itemCount = Math.round((height / this.listItemHeight) * listElementCount);\n }\n }\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n Virtualization.prototype.uiIndicesInitialization = function () {\n this.uiIndices = { 'activeIndices': [], 'disabledItemIndices': [], 'hiddenItemIndices': [] };\n var data = this.listViewInstance.curViewDS;\n for (var i = 0; i < data.length; i++) {\n if (this.listViewInstance.showCheckBox && data[i][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(i);\n }\n // eslint-disable-next-line\n if (!isNullOrUndefined(data[i][this.listViewInstance.fields.enabled]) &&\n !data[i][this.listViewInstance.fields.enabled]) {\n // eslint-disable-next-line\n (this.uiIndices.disabledItemIndices.push(i));\n }\n }\n if (this.isNgTemplate()) {\n var items = this.listViewInstance.element.querySelectorAll('.' + classNames.listItem);\n for (var index = 0; index < items.length; index++) {\n items[index].context = this.listViewInstance.viewContainerRef.get(index).context;\n }\n }\n };\n Virtualization.prototype.refreshItemHeight = function () {\n if (this.listViewInstance.curViewDS.length) {\n var curViewDS = this.listViewInstance.curViewDS;\n this.listItemHeight = this.topElement.nextSibling.getBoundingClientRect().height;\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.bottomElementHeight = this.totalHeight;\n this.bottomElement.style.height = this.totalHeight + 'px';\n }\n };\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n return this.listViewInstance.isWindow ? (((pageYOffset - startingHeight) <= 0) ? 0 :\n (pageYOffset - startingHeight)) : ((this.listViewInstance.element.scrollTop - startingHeight) <= 0) ? 0 :\n (this.listViewInstance.element.scrollTop - startingHeight);\n };\n Virtualization.prototype.onVirtualUiScroll = function (e) {\n var _a;\n var startingHeight;\n if (this.listViewInstance.isWindow) {\n startingHeight = this.listViewInstance.ulElement.getBoundingClientRect().top -\n document.documentElement.getBoundingClientRect().top;\n }\n else {\n startingHeight = this.listViewInstance.headerEle ? this.listViewInstance.headerEle.getBoundingClientRect().height : 0;\n }\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n if (scroll > this.scrollPosition) {\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, true);\n }\n else {\n this.onNormalScroll(listDiff, true);\n }\n }\n else {\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, false);\n }\n else {\n this.onNormalScroll(listDiff, false);\n }\n }\n }\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n if (typeof this.listViewInstance.onUIScrolled === 'function') {\n this.listViewInstance.onUIScrolled();\n }\n this.scrollPosition = scroll;\n };\n Virtualization.prototype.onLongScroll = function (listDiff, isScrollingDown) {\n var index = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n var elements = this.listViewInstance.ulElement.querySelectorAll('li');\n for (var i = 0; i < elements.length; i++) {\n this.updateUI(elements[i], index);\n index++;\n }\n this.uiLastIndex = isScrollingDown ? (this.uiLastIndex + listDiff) : (this.uiLastIndex - listDiff);\n this.uiFirstIndex = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n };\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n if (isScrollingDown) {\n for (var i = 0; i < listDiff; i++) {\n var index = ++this.uiLastIndex;\n this.updateUI(this.topElement.nextElementSibling, index, this.bottomElement);\n this.uiFirstIndex++;\n }\n }\n else {\n for (var i = 0; i < listDiff; i++) {\n var index = --this.uiFirstIndex;\n var target = this.topElement.nextSibling;\n this.updateUI(this.bottomElement.previousElementSibling, index, target);\n this.uiLastIndex--;\n }\n }\n };\n Virtualization.prototype.updateUiContent = function (element, index) {\n // eslint-disable-next-line\n var curViewDs = this.listViewInstance.curViewDS;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n element.dataset.uid = ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n this.listViewInstance.curViewDS[index].toString();\n }\n else {\n // eslint-disable-next-line\n element.dataset.uid = (curViewDs[index][this.listViewInstance.fields.id]) ?\n // eslint-disable-next-line\n (curViewDs[index][this.listViewInstance.fields.id]) : ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n // eslint-disable-next-line\n (curViewDs[index][this.listViewInstance.fields.text]);\n }\n if (this.listViewInstance.showIcon) {\n if (element.querySelector('.' + classNames.listIcon)) {\n detach(element.querySelector('.' + classNames.listIcon));\n }\n if (this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]) {\n var textContent = element.querySelector('.' + classNames.textContent);\n var target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' +\n this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]\n });\n textContent.insertBefore(target, element.querySelector('.' + classNames.listItemText));\n }\n }\n if (this.listViewInstance.showCheckBox && this.listViewInstance.fields.groupBy) {\n if (!this.checkListWrapper) {\n this.checkListWrapper = this.listViewInstance.curUL.querySelector('.' + classNames.checkboxWrapper).cloneNode(true);\n }\n var textContent = element.querySelector('.' + classNames.textContent);\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.remove(classNames.checklist);\n textContent.classList.remove(classNames.checkbox);\n detach(element.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n else {\n if (!element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.add(classNames.checklist);\n textContent.classList.add(classNames.checkbox);\n textContent.insertBefore(this.checkListWrapper.cloneNode(true), element.querySelector('.' + classNames.listItemText));\n }\n }\n }\n };\n Virtualization.prototype.changeElementAttributes = function (element, index) {\n element.classList.remove(classNames.disable);\n if (this.uiIndices.disabledItemIndices.length && this.uiIndices.disabledItemIndices.indexOf(index) !== -1) {\n element.classList.add(classNames.disable);\n }\n element.style.display = '';\n if (this.uiIndices.hiddenItemIndices.length && this.uiIndices.hiddenItemIndices.indexOf(index) !== -1) {\n element.style.display = 'none';\n }\n if (this.listViewInstance.showCheckBox) {\n var checklistElement = element.querySelector('.' + classNames.checkboxWrapper);\n element.classList.remove(classNames.selected);\n element.classList.remove(classNames.focused);\n if (checklistElement) {\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n }\n if (this.uiIndices.activeIndices.length && this.uiIndices.activeIndices.indexOf(index) !== -1 &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n checklistElement.firstElementChild.classList.add(classNames.checked);\n checklistElement.setAttribute('aria-checked', 'true');\n if (this.activeIndex === index) {\n element.classList.add(classNames.focused);\n }\n }\n }\n else {\n element.classList.remove(classNames.selected);\n element.removeAttribute('aria-selected');\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex === index &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n element.setAttribute('aria-selected', 'true');\n }\n }\n if (this.listViewInstance.fields.groupBy) {\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.classList.contains(classNames.listItem)) {\n element.classList.remove(classNames.listItem);\n element.setAttribute('role', 'group');\n element.classList.add(classNames.groupListItem);\n }\n }\n else {\n if (element.classList.contains(classNames.groupListItem)) {\n element.classList.remove(classNames.groupListItem);\n element.setAttribute('role', 'listitem');\n element.classList.add(classNames.listItem);\n }\n }\n }\n };\n Virtualization.prototype.findDSAndIndexFromId = function (ds, fields) {\n var _this = this;\n var resultJSON = {};\n fields = this.listViewInstance.getElementUID(fields);\n if (!isNullOrUndefined(fields)) {\n ds.some(function (data, index) {\n if ((fields[_this.listViewInstance.fields.id] &&\n // eslint-disable-next-line\n fields[_this.listViewInstance.fields.id]\n // eslint-disable-next-line\n === (data[_this.listViewInstance.fields.id] && data[_this.listViewInstance.fields.id]) || fields === data)) {\n resultJSON.index = index;\n resultJSON.data = data;\n return true;\n }\n else {\n return false;\n }\n });\n }\n return resultJSON;\n };\n Virtualization.prototype.getSelectedItems = function () {\n var _this = this;\n if (!isNullOrUndefined(this.activeIndex) || (this.listViewInstance.showCheckBox && this.uiIndices.activeIndices.length)) {\n var dataCollection = [];\n var textCollection = [];\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n var curViewDS_1 = this.listViewInstance.curViewDS;\n if (this.listViewInstance.showCheckBox) {\n var indices = this.uiIndices.activeIndices;\n for (var i = 0; i < indices.length; i++) {\n dataCollection.push(curViewDS_1[indices[i]]);\n }\n return {\n text: dataCollection,\n // eslint-disable-next-line\n data: dataCollection,\n index: this.uiIndices.activeIndices.map(function (index) {\n return _this.listViewInstance.dataSource.indexOf(curViewDS_1[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_1[this.activeIndex],\n data: curViewDS_1[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_1[this.activeIndex])\n };\n }\n }\n else {\n var curViewDS_2 = this.listViewInstance.curViewDS;\n var text = this.listViewInstance.fields.text;\n if (this.listViewInstance.showCheckBox) {\n var indexArray = this.uiIndices.activeIndices;\n for (var i = 0; i < indexArray.length; i++) {\n textCollection.push(curViewDS_2[indexArray[i]][\"\" + text]);\n // eslint-disable-next-line\n dataCollection.push(curViewDS_2[indexArray[i]]);\n }\n // eslint-disable-next-line\n var dataSource_1 = this.listViewInstance.dataSource instanceof DataManager\n ? curViewDS_2 : this.listViewInstance.dataSource;\n return {\n text: textCollection,\n // eslint-disable-next-line\n data: dataCollection,\n index: this.uiIndices.activeIndices.map(function (index) {\n return dataSource_1.indexOf(curViewDS_2[index]);\n })\n };\n }\n else {\n // eslint-disable-next-line\n var dataSource = this.listViewInstance.dataSource instanceof DataManager\n ? curViewDS_2 : this.listViewInstance.dataSource;\n return {\n text: curViewDS_2[this.activeIndex][this.listViewInstance.fields.text],\n // eslint-disable-next-line\n data: curViewDS_2[this.activeIndex],\n index: dataSource.indexOf(curViewDS_2[this.activeIndex])\n };\n }\n }\n }\n else {\n return undefined;\n }\n };\n Virtualization.prototype.selectItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n var isSelected = this.activeIndex === resutJSON.index;\n var isChecked = void 0;\n this.activeIndex = resutJSON.index;\n if (this.listViewInstance.showCheckBox) {\n if (this.uiIndices.activeIndices.indexOf(resutJSON.index) === -1) {\n isChecked = true;\n this.uiIndices.activeIndices.push(resutJSON.index);\n }\n else {\n isChecked = false;\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(resutJSON.index), 1);\n }\n if (this.listViewInstance.curUL.querySelector('.' + classNames.focused)) {\n this.listViewInstance.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n }\n if (this.listViewInstance.getLiFromObjOrElement(obj)) {\n if (this.listViewInstance.showCheckBox) {\n this.listViewInstance.setCheckboxLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n else {\n this.listViewInstance.setSelectLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n }\n else {\n // eslint-disable-next-line\n var eventArgs = void 0;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n eventArgs = {\n text: this.listViewInstance.curViewDS[this.activeIndex],\n data: this.listViewInstance.curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n else {\n var curViewDS = this.listViewInstance.curViewDS;\n eventArgs = {\n text: curViewDS[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n if (this.listViewInstance.showCheckBox) {\n eventArgs.isChecked = isChecked;\n this.listViewInstance.trigger('select', eventArgs);\n }\n else if (!isSelected) {\n this.listViewInstance.removeSelect();\n this.listViewInstance.trigger('select', eventArgs);\n }\n }\n }\n else if (isNullOrUndefined(obj) && !this.listViewInstance.showCheckBox) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n };\n Virtualization.prototype.enableItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.disableItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.disabledItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.disabledItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.showItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.hideItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.hiddenItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.removeItem = function (obj) {\n var dataSource;\n var curViewDS = this.listViewInstance.curViewDS;\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(curViewDS, obj);\n // eslint-disable-next-line\n if (Object.keys(resutJSON).length) {\n dataSource = resutJSON.data;\n if (curViewDS[resutJSON.index - 1] &&\n curViewDS[resutJSON.index - 1].isHeader &&\n (curViewDS[resutJSON.index - 1])\n .items.length === 1) {\n this.removeUiItem(resutJSON.index - 1);\n this.removeUiItem(resutJSON.index - 1);\n }\n else {\n this.removeUiItem(resutJSON.index);\n }\n }\n var listDataSource = this.listViewInstance.dataSource instanceof DataManager\n ? this.listViewInstance.localData : this.listViewInstance.dataSource;\n var index = listDataSource.indexOf(dataSource);\n if (index !== -1) {\n listDataSource.splice(index, 1);\n this.listViewInstance.setViewDataSource(listDataSource);\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n };\n // eslint-disable-next-line\n Virtualization.prototype.setCheckboxLI = function (li, e) {\n var index = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n if (li.classList.contains(classNames.selected)) {\n if (this.uiIndices.activeIndices.indexOf(index) === -1) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n else {\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n }\n };\n // eslint-disable-next-line\n Virtualization.prototype.setSelectLI = function (li, e) {\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n };\n Virtualization.prototype.checkedItem = function (checked) {\n if (checked) {\n this.uiIndices.activeIndices = [];\n this.activeIndex = undefined;\n var data = this.listViewInstance.curViewDS;\n for (var index = 0; index < data.length; index++) {\n if (!data[index].isHeader) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n }\n else {\n this.activeIndex = undefined;\n this.uiIndices.activeIndices = [];\n }\n };\n Virtualization.prototype.addUiItem = function (index) {\n // virtually new add list item based on the scollbar position\n // if the scroll bar is at the top, just pretend the new item has been added since no UI\n // change is required for the item that has been added at last but when scroll bar is at the bottom\n // just detach top and inject into bottom to mimic new item is added\n var curViewDs = this.listViewInstance.curViewDS;\n this.changeUiIndices(index, true);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex++;\n }\n if (this.listViewInstance.showCheckBox &&\n curViewDs[index][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(index);\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n }\n if (parseFloat(this.bottomElement.style.height)) {\n var liItem = this.listViewInstance.curUL.lastElementChild.previousSibling;\n var target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n if (target) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n this.updateUI(liItem, index, target);\n }\n }\n else {\n var liItem = this.listViewInstance.curUL.firstElementChild.nextSibling;\n var target = void 0;\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n }\n this.topElement.style.height = parseFloat(this.topElement.style.height) + this.listItemHeight + 'px';\n this.uiFirstIndex++;\n this.uiLastIndex++;\n if (target) {\n this.updateUI(liItem, index, target);\n if (this.listViewInstance.isWindow === true) {\n window.scrollTo(0, (pageYOffset + this.listItemHeight));\n }\n else {\n this.listViewInstance.element.scrollTop += this.listItemHeight;\n }\n }\n }\n this.totalHeight += this.listItemHeight;\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.removeUiItem = function (index) {\n this.totalHeight -= this.listItemHeight;\n var curViewDS = this.listViewInstance.curViewDS[index];\n var liItem = this.listViewInstance.getLiFromObjOrElement(curViewDS);\n this.listViewInstance.curViewDS.splice(index, 1);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex--;\n }\n if (liItem) {\n if (this.domItemCount > Object.keys(this.listViewInstance.curViewDS).length) {\n detach(liItem);\n this.domItemCount--;\n this.uiLastIndex--;\n this.totalHeight = 0;\n }\n else {\n if (liItem.classList.contains(classNames.disable)) {\n liItem.classList.remove(classNames.disable);\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(index), 1);\n }\n if (liItem.style.display === 'none') {\n liItem.style.display = '';\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(index), 1);\n }\n if (this.listViewInstance.showCheckBox && liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n var checklistElement = liItem.querySelector('.' + classNames.checkboxWrapper);\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n if (liItem.classList.contains(classNames.focused)) {\n liItem.classList.remove(classNames.focused);\n this.activeIndex = undefined;\n }\n }\n else if (liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else if (parseFloat(this.bottomElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else {\n this.topElement.style.height = parseFloat(this.topElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, (this.uiFirstIndex - 1), this.topElement.nextSibling);\n this.uiLastIndex--;\n this.uiFirstIndex--;\n }\n }\n }\n this.changeUiIndices(index, false);\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.changeUiIndices = function (index, increment) {\n var keys = Object.keys(this.uiIndices);\n for (var ind = 0; ind < keys.length; ind++) {\n this.uiIndices[keys[ind]] = this.uiIndices[keys[ind]].map(function (i) {\n if (i >= index) {\n return increment ? ++i : --i;\n }\n else {\n return i;\n }\n });\n }\n };\n Virtualization.prototype.addItem = function (data, fields, dataSource, index) {\n for (var i = 0; i < data.length; i++) {\n var currentItem = data[i];\n // push the given data to main data array\n dataSource = this.listViewInstance.addItemAtIndex(index, dataSource, currentItem);\n // recalculate all the group data or other datasource related things\n this.listViewInstance.setViewDataSource(dataSource);\n // render list items for first time due to no datasource present earlier\n if (!this.domItemCount) {\n // fresh rendering for first time\n if ((this.listViewInstance.template || this.listViewInstance.groupTemplate) && !this.isNgTemplate()) {\n this.listViewInstance.listBaseOption.template = null;\n this.listViewInstance.listBaseOption.groupTemplate = null;\n this.listViewInstance.listBaseOption.itemCreated = this.createUIItem.bind(this);\n }\n this.uiVirtualization();\n // when expected expected DOM count doesn't meet the condition we need to create and inject new item into DOM\n }\n else if (this.domItemCount < this.expectedDomItemCount) {\n var ds = this.listViewInstance.findItemFromDS(dataSource, fields);\n if (ds instanceof Array) {\n if (this.listViewInstance.ulElement) {\n var index_1 = this.listViewInstance.curViewDS.indexOf(currentItem);\n // inject new list item into DOM\n this.createAndInjectNewItem(currentItem, index_1);\n // check for group header item\n var curViewDS = this.listViewInstance.curViewDS[index_1 - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n // target group item index in datasource\n --index_1;\n // inject new group header into DOM for previously created list item\n this.createAndInjectNewItem(curViewDS, index_1);\n }\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n }\n }\n else {\n // eslint-disable-next-line\n var index_2 = this.listViewInstance.curViewDS.indexOf(currentItem);\n // virtually new add list item based on the scollbar position\n this.addUiItem(index_2);\n // check for group header item needs to be added\n var curViewDS = this.listViewInstance.curViewDS[index_2 - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n this.addUiItem(index_2 - 1);\n }\n }\n }\n };\n Virtualization.prototype.createAndInjectNewItem = function (itemData, index) {\n // generate li item for given datasource\n var target;\n var li = ListBase.createListItemFromJson(this.listViewInstance.createElement, \n // eslint-disable-next-line\n [itemData], this.listViewInstance.listBaseOption, null, null, this.listViewInstance);\n // check for target element whether to insert before last item or group item\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n // target group header's first child item to append its header\n target = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index + 2]);\n }\n if (this.listViewInstance.fields.groupBy && this.listViewInstance.curViewDS[index + 1] && this.listViewInstance.curViewDS[index + 1].isHeader) {\n var targetEle = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n // insert before the target element\n this.listViewInstance.ulElement.insertBefore(li[0], target);\n // increment internal DOM count, last index count for new element\n this.domItemCount++;\n if (this.bottomElementHeight <= 0) {\n this.uiLastIndex++;\n }\n // recalculate the current item height, to avoid jumpy scroller\n this.refreshItemHeight();\n };\n Virtualization.prototype.createUIItem = function (args) {\n var template = document.createElement('div');\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\n if (this.listViewInstance.isReact) {\n this.commonTemplate = null;\n }\n if (this.listViewInstance.showCheckBox) {\n // eslint-disable-next-line\n this.listViewInstance.renderCheckbox(args);\n if ((!isNullOrUndefined(this.listViewInstance.virtualCheckBox)) &&\n (!isNullOrUndefined(this.listViewInstance.virtualCheckBox.outerHTML))) {\n var div_1 = document.createElement('div');\n var nodes = this.templateFunction(this.templateData, this.listViewInstance);\n if (this.listViewInstance.template && this.listViewInstance.isReact) {\n this.listViewInstance.renderReactTemplates();\n }\n [].slice.call(nodes).forEach(function (ele) {\n div_1.appendChild(ele);\n });\n if (div_1.children && div_1.children[0]) {\n div_1.children[0].classList.add('e-checkbox');\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div_1.children[0].classList.add('e-checkbox-left');\n }\n else {\n div_1.children[0].classList.add('e-checkbox-right');\n }\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div_1.children[0].insertBefore(this.listViewInstance.virtualCheckBox, div_1.childNodes[0].children[0]);\n }\n else {\n div_1.children[0].appendChild(this.listViewInstance.virtualCheckBox);\n }\n template.innerHTML = div_1.innerHTML;\n }\n }\n else {\n var div_2 = document.createElement('div');\n var nodes = this.templateFunction(this.templateData, this.listViewInstance);\n if (this.listViewInstance.template && this.listViewInstance.isReact) {\n this.listViewInstance.renderReactTemplates();\n }\n [].slice.call(nodes).forEach(function (ele) {\n div_2.appendChild(ele);\n });\n template.innerHTML = div_2.innerHTML;\n }\n }\n else {\n var nodes = this.templateFunction(this.templateData, this.listViewInstance);\n if (this.listViewInstance.template && this.listViewInstance.isReact) {\n this.listViewInstance.renderReactTemplates();\n }\n [].slice.call(nodes).forEach(function (ele) {\n template.appendChild(ele);\n });\n }\n if (args.curData.isHeader) {\n this.headerData = args.curData;\n }\n var groupTemplate = this.listViewInstance.createElement('div');\n if (this.listViewInstance.fields.groupBy) {\n var nodes = this.groupTemplateFunction(this.headerData, this.listViewInstance);\n if (this.listViewInstance.template && this.listViewInstance.isReact) {\n this.listViewInstance.renderReactTemplates();\n }\n [].slice.call(nodes).forEach(function (ele) {\n groupTemplate.appendChild(ele);\n });\n }\n if ((!this.listViewInstance.isReact || (typeof this.listViewInstance.template == \"string\" && !args.item.classList.contains(\"e-list-group-item\")) ||\n (typeof this.listViewInstance.groupTemplate == \"string\" && args.item.classList.contains(\"e-list-group-item\"))) && !this.listViewInstance.isVue) {\n args.item.innerHTML = '';\n }\n args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };\n for (var i = 0; i < template.children.length; i++) {\n this.compileTemplate(template.children[i], args.item, false);\n }\n for (var i = 0; i < groupTemplate.children.length; i++) {\n this.compileTemplate(groupTemplate.children[i], args.item, true);\n }\n args.item.context.template = args.curData.isHeader ? template.firstElementChild :\n groupTemplate.firstElementChild;\n args.item.context.type = args.curData.isHeader ? 'flatList' : 'groupList';\n var element = args.curData.isHeader ? groupTemplate : template;\n if (element.firstElementChild && !this.listViewInstance.isReact && !this.listViewInstance.isVue) {\n args.item.insertBefore(element.firstElementChild, null);\n }\n };\n Virtualization.prototype.compileTemplate = function (element, item, isHeader) {\n var _this = this;\n var subNode = {};\n subNode.onChange = function (value) {\n var groupTemplateElements;\n var templateElements;\n if (_this.listViewInstance.isVue) {\n groupTemplateElements = _this.groupTemplateFunction(value);\n templateElements = _this.templateFunction(value);\n }\n else {\n groupTemplateElements = _this.groupTemplateFunction(value, _this.listViewInstance);\n templateElements = _this.templateFunction(value, _this.listViewInstance);\n }\n if (_this.listViewInstance.template && _this.listViewInstance.isReact) {\n _this.listViewInstance.renderReactTemplates();\n }\n var currentTemplate = templateElements;\n if (value.isHeader) {\n currentTemplate = groupTemplateElements;\n }\n [].slice.call(currentTemplate).forEach(function (currentElement) {\n var RemovableClass = element.classList.value.replace('e-checkbox', '');\n RemovableClass = RemovableClass.replace('e-checkbox-left', '');\n RemovableClass = RemovableClass.replace('e-checkbox-right', '');\n removeClass([element], RemovableClass.split(' ').filter(function (css) { return css; }));\n addClass([element], Array.from(currentElement.classList));\n for (var i = 0; i < element.attributes.length; i++) {\n if (element.attributes[i].name != 'class') {\n var newData = currentElement.getAttribute(element.attributes[i].name);\n element.setAttribute(element.attributes[i].name, newData);\n }\n }\n [].slice.call(element.children).forEach(function (ele) {\n if (!ele.classList.contains('e-listview-checkbox') && !(ele.classList.contains('e-checkbox-left') || ele.classList.contains('e-checkbox-right'))) {\n ele.remove();\n }\n });\n [].slice.call(currentElement.children).forEach(function (ele) {\n element.appendChild(ele);\n });\n });\n };\n this.updateContextData(item, subNode, isHeader);\n };\n Virtualization.prototype.onChange = function (newData, listElement) {\n listElement.context.data = newData;\n // eslint-disable-next-line max-len\n var groupTemplateNodes = listElement.context.nodes.groupTemplateNodes;\n // eslint-disable-next-line max-len\n var flatTemplateNodes = listElement.context.nodes.flatTemplateNodes;\n // eslint-disable-next-line\n if (!isNullOrUndefined(newData.isHeader) && newData.isHeader && listElement.context.type === 'groupList') {\n // eslint-disable-next-line\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'flatList';\n for (var i = 0; i < groupTemplateNodes.length; i++) {\n // eslint-disable-next-line\n groupTemplateNodes[i].onChange(newData);\n }\n }\n else if (!newData.isHeader && listElement.context.type === 'flatList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'groupList';\n for (var i = 0; i < flatTemplateNodes.length; i++) {\n // eslint-disable-next-line\n flatTemplateNodes[i].onChange(newData);\n }\n }\n else if (!newData.isHeader) {\n for (var i = 0; i < flatTemplateNodes.length; i++) {\n // eslint-disable-next-line\n flatTemplateNodes[i].onChange(newData);\n }\n }\n else {\n for (var i = 0; i < groupTemplateNodes.length; i++) {\n // eslint-disable-next-line\n groupTemplateNodes[i].onChange(newData);\n }\n }\n };\n // eslint-disable-next-line\n Virtualization.prototype.updateContextData = function (listElement, node, isHeader) {\n if (isHeader) {\n listElement.context.nodes.groupTemplateNodes.push(node);\n }\n else {\n listElement.context.nodes.flatTemplateNodes.push(node);\n }\n };\n Virtualization.prototype.reRenderUiVirtualization = function () {\n this.wireScrollEvent(true);\n if (this.listViewInstance.contentContainer) {\n detach(this.listViewInstance.contentContainer);\n }\n this.listViewInstance.preRender();\n // resetting the dom count to 0, to avoid edge case of dataSource suddenly becoming zero\n // and then manually adding item using addItem API\n this.domItemCount = 0;\n this.listViewInstance.header();\n this.listViewInstance.setLocalData();\n };\n Virtualization.prototype.updateUI = function (element, index, targetElement) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var onChange = this.isNgTemplate() ? this.onNgChange : (this.isVueFunctionTemplate()) ? this.onVueChange : this.onChange;\n if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {\n var curViewDS = this.listViewInstance.curViewDS[index];\n // eslint-disable-next-line\n element.dataset.uid = (curViewDS[this.listViewInstance.fields.id]) ?\n // eslint-disable-next-line\n (curViewDS[this.listViewInstance.fields.id]) : ListBase.generateId();\n onChange(curViewDS, element, this);\n }\n else {\n this.updateUiContent(element, index);\n }\n this.changeElementAttributes(element, index);\n if (targetElement) {\n this.listViewInstance.ulElement.insertBefore(element, targetElement);\n }\n };\n /**\n * Handles the UI change in vue for the list view.\n *\n * @param {DataSource} newData - The new data source for the list view.\n * @param {ElementContext} listElement - The HTML element context for the list view.\n * @param {Virtualization} virtualThis - The virtualization context for the list view.\n */\n Virtualization.prototype.onVueChange = function (newData, listElement, virtualThis) {\n var liItem = ListBase.createListItemFromJson(virtualThis.listViewInstance.createElement, \n // eslint-disable-next-line\n [newData], virtualThis.listViewInstance.listBaseOption, null, null, virtualThis.listViewInstance);\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n listElement.appendChild(liItem[0].firstChild);\n };\n Virtualization.prototype.onNgChange = function (newData, listElement, virtualThis) {\n // compile given target element with template for new data\n // eslint-disable-next-line\n var templateCompiler = compile(virtualThis.listViewInstance.template);\n var resultElement = templateCompiler(newData);\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n listElement.appendChild(resultElement[0]);\n };\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n Virtualization.prototype.destroy = function () {\n this.wireScrollEvent(true);\n this.topElement = null;\n this.bottomElement = null;\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import * as index from './index';\nindex.ListView.Inject(index.Virtualization);\nexport * from './index';\n"],"names":["getFieldValues","dataItem","fields","fieldData","isNullOrUndefined","isHeader","_i","_a","Object","keys","length","dataField","value","undefined","getValue","compileTemplate","template","document","querySelector","compile","innerHTML","trim","e","moveTo","from","to","targetIndexes","insertBefore","targetElements","forEach","index","push","children","slice","call","target","appendChild","insertElement_1","exports","li","ul","group","icon","text","check","checked","selected","expanded","textContent","hasChild","level","url","collapsible","disabled","image","iconWrapper","anchorWrap","navigable","ListBase","createList","createElement","dataSource","options","isSingleLevel","componentInstance","curOpt","extend","defaultListBaseOptions","ariaAttributes","defaultAriaAttributes","type","typeofData","typeof","createListFromArray","createListFromJson","generateUL","createListItemFromArray","subChild","cssClass","getModuleClass","moduleName","id","generateId","i","itemCreating","curData","generateSingleLevelLI","generateLI","itemCreated","item","createListItemFromJson","getModuleName","defaultMappedFields","checkboxElement","anchorElement","child","hasOwnProperty","curItem","innerEle","showCheckBox","itemNavigable","urlAttributes","className","attrs","showIcon","iconCss","itemClass","prepend","firstElementChild","classList","add","setAttribute","toString","groupItemRole","itemRole","removeAttribute","tooltip","htmlAttributes","enabled","isVisible","style","display","imageUrl","attr","src","merge","imageAttributes","imageElemnt","insertAdjacentElement","iconElement","processSubChild","addClass","listClass","getSiblingLI","elementArray","element","isPrevious","siblingLI","liIndex","liCollections","Array","prototype","indexOf","contains","groupDataSource","sortOrder","curFields","cusQuery","Query","groupBy","ds","getDataSource","addSorting","j","itemObj","items","grpItem","key","newtext","_id","k","sortBy","query","queries","fn","splice","DataManager","executeLocal","createJsonFromElement","curEle","cloneNode","jsonAr","childs","querySelectorAll","remove","anchor","json","childNodes","i_1","Number","hasChildNodes","attributes_1","getAllAttributes","data","match","elementAttributes","class","split","attributes","nodeName","nodeValue","renderContentTemplate","ulElement","role","compiledString","liCollection","innerText","currentID","groupTemplateID","templateID","compiledElement","isStringTemplate","append","renderGroupTemplate","groupTemplate","headerItems","category","headerItems_1","header","headerData","Math","floor","random","substring","subDS","hasChildren","subLi","expandCollapse","expandIconPosition","expandIconClass","innerElements","grpLI","elementID","href","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","enableHtmlSanitizer","innerDiv","wrapperRole","itemText","SanitizeHtmlHelper","sanitize","liElement","listRole","generateIcon","isChecked","headerTemplate","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","this","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","effectsConfig","None","SlideLeft","SlideDown","Zoom","Fade","effectsRTLConfig","classNames","root","hover","focused","parentItem","listItem","listIcon","listItemText","groupListItem","view","headerText","headerTemplateText","disable","container","backIcon","backButton","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","virtualElementContainer","FieldSettings","_super","apply","Property","ChildProperty","ListView","_this","previousSelectedItems","hiddenItems","enabledItems","disabledItems","onPropertyChanged","newProp","oldProp","setHTMLAttribute","setCSSClass","setEnable","setSize","setEnableRTL","listBaseOption","properties","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","detach","refresh","setCheckbox","curViewDS","getSubDS","resetCurrentList","oldCSSClass","filter","css","removeClass","height","formatUnit","width","isWindow","clientHeight","enableElement","enable","enableRtl","isEnabled","showBack","prop","headerEle","showHeader","innerHeaderEle","setProperties","textEle","outerHTML","hedBackButton","headerTemplateEle","LISTVIEW_HEADERTEMPLATE_ID","isReact","renderReactTemplates","parentElement","switchView","fromView","toView","reverse","fPos_1","position","overflow_1","overflow","anim","duration","animation","effect","aniObj","animate","name","animationMode","timingFunction","easing","end","model","trigger","curUL","preRender","renderCheckbox","bind","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","enablePersistence","LISTVIEW_TEMPLATE_ID","LISTVIEW_GROUPTEMPLATE_ID","Animation","removeElement","args","isValidLI","fieldData_1","createCheckBox","frameElement_1","findIndex","checkInternally","checkBoxPosition","virtualCheckBox","lastElementChild","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","updateSelectedId","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","getItemData","selectedItems","refreshItemHeight","clickHandler","isArray","targetElement","closestElement","back","closest","parentNode","removeFocus","setCheckboxLI","eventArgs","selectEventData","removeHover","removeSelect","setSelectLI","removeChild","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","preventDefault","focusedElement","onArrowKeyDown","prev","arrowKeyHandler","elementTop","getBoundingClientRect","top","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","window","scroll","pageYOffset","scrollTop","innerHeight","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","enterKeyHandler","spaceKeyHandler","keyActionHandler","keyCode","swipeActionHandler","swipeDirection","velocity","originalEvent","focusout","selectedLI","wireEvents","EventHandler","touchModule","Touch","swipe","unWireEvents","destroy","focusedLI_1","hoverLI","selectedLI_1","ele","textAreaFocus","renderSubList","selectedItem","isInteracted","event","cancel","observedArgs","lastLi","levelKeys","localData","levelKeys_1","field","curDSJSON","findItemFromDS","curDS","getElementUID","parent","resultJSON","some","getQuery","columns","column","select","tableName","setViewDataSource","fieldValue","isInAnimation","renderRemoteLists","listViewComponent","isDestroyed","result","renderList","triggerActionFailure","setLocalData","ready","then","isOffline","offline","catch","executeQuery","clearTemplate","renderIntoDom","setAttributes","liElements","getAttribute","exceptionEvent","UpdateCurrentUL","lists","isNgTemplate","createUIItem","uiVirtualization","obj","Element","render","tabindex","rippleFn","rippleEffect","selector","renderComplete","classAr","concat","pID","pop","toUL","fromUL","selectItem","uid","selectMultipleItems","getParentId","parentId","getElementsByClassName","tempData","getSelectedItems","finalValue","isCompleted","liTextCollection","liDataCollection","dataParent","findItem","enableItem","setItemState","disableItem","isEnable","showItem","showHideItem","hideItem","isHide","addItem","addItemInternally","addItemAtIndex","targetUL","addItemIntoDom","addItemInNestedList","newDataSource","itemData","targetItemData","itemQueue","targetItemId","targetChildDS","isAlreadyRenderedUL","targetLi","targetDS","targetRefreshedElement","currentItem","addListItem","curItemDS","targetEle","nextElementSibling","removeItem","listDataSource","removeItemFromList","data_1","groupLi","validateNestedView","previousElementSibling","foundData","findParent","dsIndex","parentLi","li_1","liID","toLowerCase","removeMultipleItems","callback","requiredModules","modules","member","getPersistData","addOnPersist","Complex","Event","NotifyPropertyChanges","Component","Virtualization","instance","elementDifference","listViewInstance","templateRef","isVueFunctionTemplate","isVue","commonTemplate","templateFunction","groupTemplateFunction","wireScrollEvent","firstDs","expectedDomItemCount","ValidateItemCount","domItemCount","uiLastIndex","otherDs","listItems","topElement","bottomElement","totalHeight","topElementHeight","bottomElementHeight","listDiff","uiIndicesInitialization","removeEventListener","onVirtualScroll","updateUl","onVirtualUiScroll","updateUlContainer","addEventListener","liElementHeight","updateLiElementHeight","round","documentElement","dataSourceLength","itemCount","parseFloat","uiIndices","activeIndices","disabledItemIndices","hiddenItemIndices","context","viewContainerRef","get","nextSibling","getscrollerHeight","startingHeight","scrollPosition","onLongScroll","onNormalScroll","isScrollingDown","elements","updateUI","updateUiContent","curViewDs","dataset","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection","textCollection","curViewDS_1","indices","map","curViewDS_2","indexArray","dataSource_1","resutJSON","isSelected","removeUiItem","addUiItem","changeUiIndices","liItem","previousSibling","scrollTo","increment","ind","index_1","createAndInjectNewItem","index_2","templateData","div_2","nodes","div_1","flatTemplateNodes","groupTemplateNodes","subNode","onChange","groupTemplateElements","templateElements","currentTemplate","currentElement","RemovableClass","replace","newData","updateContextData","listElement","node","onNgChange","onVueChange","virtualThis","lastChild","firstChild","resultElement","Sortable","getHelper","getSortableElement","sender","isValidTarget","helper","offsetWidth","offsetHeight","body","onDrag","newInst","getSortableInstance","curTarget","placeHolder","placeHolderElement","scope","oldIdx","getIndex","getPlaceHolder","newIdx","isPlaceHolderPresent","childElementCount","refreshDisabled","idx","updateItemClass","droppedElement","previousIndex","currentIndex","removePlaceHolder","inst_1","onDragStart","cancelDrag","onDragStop","isBlazor","bindEvents","dragElement","prevIdx","curIdx","handled","dropInst","curIdx_1","curIdx_2","scopeName","beforeDropArgs","getComponent","intDestroy","Sortable_1","getUniqueID","dataBind","initializeDraggable","Draggable","dragStart","drag","dragStop","dragTarget","enableTapHold","tapHoldThreshold","queryPositionInfo","distance","wrapper","keyDownHandler","unwireEvents","dragWrapper","dragPlaceholder","grabbedElement","compareElementParent","inst","increased","disabledIdx","start","placeHolderPresent","offset","clientY","bottom","cltY","changedTouches","left","pageXOffset","destination","Base","index.ListView","Inject","index.Virtualization"],"mappings":"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"}
|