@syncfusion/ej2-lists 20.3.50 → 20.3.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-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 } 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 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 = 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 (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};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Base, Event, getUniqueID, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { closest, Draggable, remove, compareElementParent } from '@syncfusion/ej2-base';\nimport { addClass, isNullOrUndefined, getComponent, isBlazor } 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 /* es-lint enable */\n function Sortable(element, options) {\n var _this = _super.call(this, options, element) || this;\n // eslint-disable-next-line\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 _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 :\n 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 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 && !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: 5\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 idx = e.clientY <= 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 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 } 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 content: 'e-content',\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 if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText, innerHTML: this.headerTitle });\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,\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,\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 (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: 'option', listRole: 'presentation', itemText: '',\n groupItemRole: 'option', 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 = [];\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 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 = void 0;\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 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (fieldData[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 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 args.item.setAttribute('aria-selected', 'true');\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 liElement.setAttribute('aria-selected', checked ? 'true' : 'false');\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 }\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 }\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 var target = e.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 }\n }\n else {\n this.setSelectLI(li, e);\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 };\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 if (this.selectedItems) {\n (this.selectedItems.item).setAttribute('aria-selected', 'false');\n }\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 }\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 var textAreaFocus = void 0;\n if (!isNullOrUndefined(this.curUL)) {\n textAreaFocus = this.curUL.querySelector('textarea') || this.curUL.querySelector('input');\n }\n if (isNullOrUndefined(textAreaFocus) || !(textAreaFocus.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 var activeElement = this.curUL.querySelector('[aria-selected = true]');\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (activeElement && !this.showCheckBox) {\n activeElement.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 };\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.setAttribute('aria-selected', 'false');\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\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 li.setAttribute('aria-selected', 'true');\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\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 li.setAttribute('aria-selected', 'true');\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('aria-selected', 'false');\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 if (this.isReact) {\n if (typeof this.template == \"string\") {\n this.listBaseOption.template = null;\n }\n if (typeof this.groupTemplate == \"string\") {\n this.listBaseOption.groupTemplate = null;\n }\n }\n else {\n this.listBaseOption.template = null;\n this.listBaseOption.groupTemplate = null;\n }\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.content });\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, { role: 'list', 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 _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.setAttribute('aria-selected', 'true');\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\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 /**\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']);\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 * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.uiVirtualization = function () {\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.content });\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 virtualTemplate = this.listViewInstance.template;\n var template = this.listViewInstance.createElement('div');\n var commonTemplate = '<div class=\"e-text-content\" role=\"presentation\"> ' +\n '<span class=\"e-list-text\"> ${' + this.listViewInstance.fields.text + '} </span></div>';\n if (this.listViewInstance.isReact) {\n 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 = document.createElement('div');\n div.innerHTML = this.listViewInstance.template || commonTemplate;\n if (div.children && div.children[0]) {\n div.children[0].classList.add('e-checkbox');\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div.children[0].classList.add('e-checkbox-left');\n }\n else {\n div.children[0].classList.add('e-checkbox-right');\n }\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div.children[0].insertBefore(this.listViewInstance.virtualCheckBox, div.childNodes[0].children[0]);\n }\n else {\n div.children[0].appendChild(this.listViewInstance.virtualCheckBox);\n }\n this.listViewInstance.template = div.innerHTML;\n }\n }\n template.innerHTML = this.listViewInstance.template;\n this.listViewInstance.template = virtualTemplate;\n }\n else {\n template.innerHTML = this.listViewInstance.template || commonTemplate;\n }\n // eslint-disable-next-line\n var templateElements = template.getElementsByTagName('*');\n var groupTemplate = this.listViewInstance.createElement('div');\n if (this.listViewInstance.fields.groupBy) {\n groupTemplate.innerHTML = this.listViewInstance.groupTemplate || commonTemplate;\n }\n // eslint-disable-next-line\n var groupTemplateElements = groupTemplate.getElementsByTagName('*');\n if (args.curData.isHeader) {\n this.headerData = args.curData;\n }\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\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\"))) {\n args.item.innerHTML = '';\n }\n args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };\n for (var i = 0; i < templateElements.length; i++) {\n this.compileTemplate(templateElements[i], args.item, false);\n }\n for (var i = 0; i < groupTemplateElements.length; i++) {\n this.compileTemplate(groupTemplateElements[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) {\n args.item.insertBefore(element.firstElementChild, null);\n }\n };\n Virtualization.prototype.compileTemplate = function (element, item, isHeader) {\n this.textProperty(element, item, isHeader);\n this.classProperty(element, item, isHeader);\n this.attributeProperty(element, item, 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.classProperty = function (element, listElement, isHeader) {\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.className);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n if (resultantOutput && resultantOutput.length) {\n var _loop_1 = function (i) {\n var classNameMatch = resultantOutput[i];\n // eslint-disable-next-line\n var classFunction;\n if (classNameMatch[1].indexOf('?') !== -1 && classNameMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + classNameMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + 'data.' + classNameMatch[1]);\n }\n // eslint-disable-next-line\n var subNode = {};\n if (isHeader) {\n subNode.bindedvalue = classFunction(this_1.headerData);\n }\n else {\n subNode.bindedvalue = classFunction(this_1.templateData);\n }\n subNode.onChange = function (value) {\n if (subNode.bindedvalue) {\n removeClass([element], subNode.bindedvalue.split(' ').filter(function (css) { return css; }));\n }\n var newCss = classFunction(value);\n if (newCss) {\n addClass([element], (newCss).split(' ').filter(function (css) { return css; }));\n }\n subNode.bindedvalue = newCss;\n };\n var className = classNameMatch[0].split(' ');\n for (var i_1 = 0; i_1 < className.length; i_1++) {\n element.classList.remove(className[i_1]);\n }\n if (subNode.bindedvalue) {\n addClass([element], subNode.bindedvalue.split(' ').filter(function (css) { return css; }));\n }\n this_1.updateContextData(listElement, subNode, isHeader);\n };\n var this_1 = this;\n for (var i = 0; i < resultantOutput.length; i++) {\n _loop_1(i);\n }\n }\n };\n Virtualization.prototype.attributeProperty = function (element, listElement, isHeader) {\n var attributeNames = [];\n for (var i = 0; i < element.attributes.length; i++) {\n attributeNames.push(element.attributes[i].nodeName);\n }\n if (attributeNames.indexOf('class') !== -1) {\n attributeNames.splice(attributeNames.indexOf('class'), 1);\n }\n var _loop_2 = function (i) {\n var attributeName = attributeNames[i];\n var attrNameMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(attributeName) || [];\n var attrValueMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(element.getAttribute(attributeName))\n || [];\n // eslint-disable-next-line\n var attributeNameFunction;\n // eslint-disable-next-line\n var attributeValueFunction;\n if (attrNameMatch.length || attrValueMatch.length) {\n if (attrNameMatch[1]) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeNameFunction = new Function('data', 'return ' + 'data.' + attrNameMatch[1]);\n }\n if (attrValueMatch[1]) {\n if (attrValueMatch[1].indexOf('?') !== -1 && attrValueMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + attrValueMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + 'data.' + attrValueMatch[1]);\n }\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n var subNode_1 = {};\n if (isHeader) {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(this_2.headerData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(this_2.headerData)];\n }\n else {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(this_2.templateData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(this_2.templateData)];\n }\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ?\n attributeName : subNode_1.bindedvalue[0];\n subNode_1.onChange = function (value) {\n var bindedvalue = subNode_1.bindedvalue[1] === undefined ?\n element.getAttribute(subNode_1.attrName) : attributeValueFunction(value);\n element.removeAttribute(subNode_1.attrName);\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ? subNode_1.attrName : attributeNameFunction(value);\n element.setAttribute(subNode_1.attrName, bindedvalue);\n subNode_1.bindedvalue = [subNode_1.bindedvalue[0] === undefined ? undefined : attributeNameFunction(value),\n subNode_1.bindedvalue[1] === undefined ? undefined : attributeValueFunction(value)];\n };\n var attributeValue = subNode_1.bindedvalue[1] === undefined ? element.getAttribute(attributeName) :\n subNode_1.bindedvalue[1];\n element.removeAttribute(attributeName);\n element.setAttribute(subNode_1.attrName, attributeValue);\n this_2.updateContextData(listElement, subNode_1, isHeader);\n }\n };\n var this_2 = this;\n for (var i = 0; i < attributeNames.length; i++) {\n _loop_2(i);\n }\n };\n Virtualization.prototype.textProperty = function (element, listElement, isHeader) {\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.innerText);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n var isChildHasTextContent = Array.prototype.some.call(element.children, function (element) {\n if (new RegExp('\\\\${([^}]*)}', 'g').exec(element.innerText)) {\n return true;\n }\n else {\n return false;\n }\n });\n if (resultantOutput && resultantOutput.length && !isChildHasTextContent) {\n var _loop_3 = function (i) {\n var textPropertyMatch = resultantOutput[i];\n // eslint-disable-next-line\n var subNode = {};\n // eslint-disable-next-line\n var textFunction;\n if (textPropertyMatch[1].indexOf('?') !== -1 && textPropertyMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + textPropertyMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + 'data.' + textPropertyMatch[1]);\n }\n if (isHeader) {\n subNode.bindedvalue = textFunction(this_3.headerData);\n }\n else {\n subNode.bindedvalue = textFunction(this_3.templateData);\n }\n subNode.onChange = function (value) {\n element.innerText = element.innerText.replace(subNode.bindedvalue, textFunction(value));\n subNode.bindedvalue = textFunction(value);\n };\n element.innerText = element.innerText.replace(textPropertyMatch[0], subNode.bindedvalue);\n this_3.updateContextData(listElement, subNode, isHeader);\n };\n var this_3 = this;\n for (var i = 0; i < resultantOutput.length; i++) {\n _loop_3(i);\n }\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.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 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 };\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","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","groupItemRole","itemRole","href","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","enableHtmlSanitizer","innerDiv","wrapperRole","itemText","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","content","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","setProperties","SanitizeHtmlHelper","sanitize","innerHeaderEle","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","timingFunction","easing","end","model","trigger","curUL","preRender","renderCheckbox","bind","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","LISTVIEW_TEMPLATE_ID","LISTVIEW_GROUPTEMPLATE_ID","Animation","removeElement","args","isValidLI","createCheckBox","frameElement_1","checkInternally","checkBoxPosition","virtualCheckBox","lastElementChild","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","getItemData","selectedItems","refreshItemHeight","clickHandler","closestElement","back","closest","parentNode","removeFocus","setCheckboxLI","eventArgs","selectEventData","removeHover","removeSelect","setSelectLI","removeChild","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","preventDefault","focusedElement","removeAttribute","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","textAreaFocus","swipeActionHandler","swipeDirection","velocity","originalEvent","focusout","activeElement","wireEvents","EventHandler","touchModule","Touch","swipe","unWireEvents","destroy","focusedLI_1","hoverLI","selectedLI_1","ele","renderSubList","selectedItem","isInteracted","event","cancel","observedArgs","selectedLI","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","getSelectedItems","finalValue","isCompleted","getElementsByClassName","liTextCollection","liDataCollection","dataParent","tempData","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","isArray","parentLi","li_1","liID","toLowerCase","removeMultipleItems","callback","requiredModules","modules","member","getPersistData","addOnPersist","Complex","Event","NotifyPropertyChanges","Component","Virtualization","instance","elementDifference","listViewInstance","templateRef","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","virtualTemplate","commonTemplate","div","templateElements","getElementsByTagName","groupTemplateElements","templateData","nodes","flatTemplateNodes","groupTemplateNodes","textProperty","classProperty","attributeProperty","onChange","newData","listElement","updateContextData","node","regexMatch","regex","RegExp","resultantOutput","exec","this_1","classFunction","classNameMatch","Function","replace","subNode","bindedvalue","newCss","attributeNames","this_2","attributeNameFunction","attributeValueFunction","attributeName","attrNameMatch","attrValueMatch","subNode_1","attrName","attributeValue","isChildHasTextContent","this_3","textFunction","textPropertyMatch","targetElement","onNgChange","virtualThis","resultElement","lastChild","Sortable","getHelper","getSortableElement","sender","isValidTarget","helper","offsetWidth","offsetHeight","body","onDrag","newInst","getSortableInstance","curTarget","placeHolder","placeHolderElement","oldIdx","getIndex","getPlaceHolder","newIdx","isPlaceHolderPresent","childElementCount","refreshDisabled","idx","updateItemClass","droppedElement","previousIndex","currentIndex","scope","removePlaceHolder","inst_1","onDragStart","cancelDrag","onDragStop","isBlazor","bindEvents","dragElement","prevIdx","curIdx","handled","dropInst","curIdx_1","curIdx_2","scopeName","beforeDropArgs","getComponent","Draggable","intDestroy","Sortable_1","getUniqueID","dataBind","initializeDraggable","dragStart","drag","dragStop","dragTarget","enableTapHold","tapHoldThreshold","queryPositionInfo","distance","grabbedElement","compareElementParent","inst","increased","disabledIdx","start","placeHolderPresent","offset","clientY","bottom","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 } 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 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 = 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 (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};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Base, Event, getUniqueID, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { closest, Draggable, remove, compareElementParent } from '@syncfusion/ej2-base';\nimport { addClass, isNullOrUndefined, getComponent, isBlazor } 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 /* es-lint enable */\n function Sortable(element, options) {\n var _this = _super.call(this, options, element) || this;\n // eslint-disable-next-line\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 _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 :\n 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 && !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: 5\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 idx = e.clientY <= 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 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 } 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 content: 'e-content',\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 if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText, innerHTML: this.headerTitle });\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,\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,\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 (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: 'option', listRole: 'presentation', itemText: '',\n groupItemRole: 'option', 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 = [];\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 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 = void 0;\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 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (fieldData[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 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 args.item.setAttribute('aria-selected', 'true');\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 liElement.setAttribute('aria-selected', checked ? 'true' : 'false');\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 }\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 }\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 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 };\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 if (this.selectedItems) {\n (this.selectedItems.item).setAttribute('aria-selected', 'false');\n }\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 }\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 var activeElement = this.curUL.querySelector('[aria-selected = true]');\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (activeElement && !this.showCheckBox) {\n activeElement.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 };\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.setAttribute('aria-selected', 'false');\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\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 li.setAttribute('aria-selected', 'true');\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\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 li.setAttribute('aria-selected', 'true');\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('aria-selected', 'false');\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 if (this.isReact) {\n if (typeof this.template == \"string\") {\n this.listBaseOption.template = null;\n }\n if (typeof this.groupTemplate == \"string\") {\n this.listBaseOption.groupTemplate = null;\n }\n }\n else {\n this.listBaseOption.template = null;\n this.listBaseOption.groupTemplate = null;\n }\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.content });\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, { role: 'list', 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 _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.setAttribute('aria-selected', 'true');\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\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 /**\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']);\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 * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.uiVirtualization = function () {\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.content });\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 virtualTemplate = this.listViewInstance.template;\n var template = this.listViewInstance.createElement('div');\n var commonTemplate = '<div class=\"e-text-content\" role=\"presentation\"> ' +\n '<span class=\"e-list-text\"> ${' + this.listViewInstance.fields.text + '} </span></div>';\n if (this.listViewInstance.isReact) {\n 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 = document.createElement('div');\n div.innerHTML = this.listViewInstance.template || commonTemplate;\n if (div.children && div.children[0]) {\n div.children[0].classList.add('e-checkbox');\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div.children[0].classList.add('e-checkbox-left');\n }\n else {\n div.children[0].classList.add('e-checkbox-right');\n }\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div.children[0].insertBefore(this.listViewInstance.virtualCheckBox, div.childNodes[0].children[0]);\n }\n else {\n div.children[0].appendChild(this.listViewInstance.virtualCheckBox);\n }\n this.listViewInstance.template = div.innerHTML;\n }\n }\n template.innerHTML = this.listViewInstance.template;\n this.listViewInstance.template = virtualTemplate;\n }\n else {\n template.innerHTML = this.listViewInstance.template || commonTemplate;\n }\n // eslint-disable-next-line\n var templateElements = template.getElementsByTagName('*');\n var groupTemplate = this.listViewInstance.createElement('div');\n if (this.listViewInstance.fields.groupBy) {\n groupTemplate.innerHTML = this.listViewInstance.groupTemplate || commonTemplate;\n }\n // eslint-disable-next-line\n var groupTemplateElements = groupTemplate.getElementsByTagName('*');\n if (args.curData.isHeader) {\n this.headerData = args.curData;\n }\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\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\"))) {\n args.item.innerHTML = '';\n }\n args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };\n for (var i = 0; i < templateElements.length; i++) {\n this.compileTemplate(templateElements[i], args.item, false);\n }\n for (var i = 0; i < groupTemplateElements.length; i++) {\n this.compileTemplate(groupTemplateElements[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) {\n args.item.insertBefore(element.firstElementChild, null);\n }\n };\n Virtualization.prototype.compileTemplate = function (element, item, isHeader) {\n this.textProperty(element, item, isHeader);\n this.classProperty(element, item, isHeader);\n this.attributeProperty(element, item, 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.classProperty = function (element, listElement, isHeader) {\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.className);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n if (resultantOutput && resultantOutput.length) {\n var _loop_1 = function (i) {\n var classNameMatch = resultantOutput[i];\n // eslint-disable-next-line\n var classFunction;\n if (classNameMatch[1].indexOf('?') !== -1 && classNameMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + classNameMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + 'data.' + classNameMatch[1]);\n }\n // eslint-disable-next-line\n var subNode = {};\n if (isHeader) {\n subNode.bindedvalue = classFunction(this_1.headerData);\n }\n else {\n subNode.bindedvalue = classFunction(this_1.templateData);\n }\n subNode.onChange = function (value) {\n if (subNode.bindedvalue) {\n removeClass([element], subNode.bindedvalue.split(' ').filter(function (css) { return css; }));\n }\n var newCss = classFunction(value);\n if (newCss) {\n addClass([element], (newCss).split(' ').filter(function (css) { return css; }));\n }\n subNode.bindedvalue = newCss;\n };\n var className = classNameMatch[0].split(' ');\n for (var i_1 = 0; i_1 < className.length; i_1++) {\n element.classList.remove(className[i_1]);\n }\n if (subNode.bindedvalue) {\n addClass([element], subNode.bindedvalue.split(' ').filter(function (css) { return css; }));\n }\n this_1.updateContextData(listElement, subNode, isHeader);\n };\n var this_1 = this;\n for (var i = 0; i < resultantOutput.length; i++) {\n _loop_1(i);\n }\n }\n };\n Virtualization.prototype.attributeProperty = function (element, listElement, isHeader) {\n var attributeNames = [];\n for (var i = 0; i < element.attributes.length; i++) {\n attributeNames.push(element.attributes[i].nodeName);\n }\n if (attributeNames.indexOf('class') !== -1) {\n attributeNames.splice(attributeNames.indexOf('class'), 1);\n }\n var _loop_2 = function (i) {\n var attributeName = attributeNames[i];\n var attrNameMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(attributeName) || [];\n var attrValueMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(element.getAttribute(attributeName))\n || [];\n // eslint-disable-next-line\n var attributeNameFunction;\n // eslint-disable-next-line\n var attributeValueFunction;\n if (attrNameMatch.length || attrValueMatch.length) {\n if (attrNameMatch[1]) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeNameFunction = new Function('data', 'return ' + 'data.' + attrNameMatch[1]);\n }\n if (attrValueMatch[1]) {\n if (attrValueMatch[1].indexOf('?') !== -1 && attrValueMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + attrValueMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + 'data.' + attrValueMatch[1]);\n }\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n var subNode_1 = {};\n if (isHeader) {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(this_2.headerData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(this_2.headerData)];\n }\n else {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(this_2.templateData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(this_2.templateData)];\n }\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ?\n attributeName : subNode_1.bindedvalue[0];\n subNode_1.onChange = function (value) {\n var bindedvalue = subNode_1.bindedvalue[1] === undefined ?\n element.getAttribute(subNode_1.attrName) : attributeValueFunction(value);\n element.removeAttribute(subNode_1.attrName);\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ? subNode_1.attrName : attributeNameFunction(value);\n element.setAttribute(subNode_1.attrName, bindedvalue);\n subNode_1.bindedvalue = [subNode_1.bindedvalue[0] === undefined ? undefined : attributeNameFunction(value),\n subNode_1.bindedvalue[1] === undefined ? undefined : attributeValueFunction(value)];\n };\n var attributeValue = subNode_1.bindedvalue[1] === undefined ? element.getAttribute(attributeName) :\n subNode_1.bindedvalue[1];\n element.removeAttribute(attributeName);\n element.setAttribute(subNode_1.attrName, attributeValue);\n this_2.updateContextData(listElement, subNode_1, isHeader);\n }\n };\n var this_2 = this;\n for (var i = 0; i < attributeNames.length; i++) {\n _loop_2(i);\n }\n };\n Virtualization.prototype.textProperty = function (element, listElement, isHeader) {\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.innerText);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n var isChildHasTextContent = Array.prototype.some.call(element.children, function (element) {\n if (new RegExp('\\\\${([^}]*)}', 'g').exec(element.innerText)) {\n return true;\n }\n else {\n return false;\n }\n });\n if (resultantOutput && resultantOutput.length && !isChildHasTextContent) {\n var _loop_3 = function (i) {\n var textPropertyMatch = resultantOutput[i];\n // eslint-disable-next-line\n var subNode = {};\n // eslint-disable-next-line\n var textFunction;\n if (textPropertyMatch[1].indexOf('?') !== -1 && textPropertyMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + textPropertyMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + 'data.' + textPropertyMatch[1]);\n }\n if (isHeader) {\n subNode.bindedvalue = textFunction(this_3.headerData);\n }\n else {\n subNode.bindedvalue = textFunction(this_3.templateData);\n }\n subNode.onChange = function (value) {\n element.innerText = element.innerText.replace(subNode.bindedvalue, textFunction(value));\n subNode.bindedvalue = textFunction(value);\n };\n element.innerText = element.innerText.replace(textPropertyMatch[0], subNode.bindedvalue);\n this_3.updateContextData(listElement, subNode, isHeader);\n };\n var this_3 = this;\n for (var i = 0; i < resultantOutput.length; i++) {\n _loop_3(i);\n }\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.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 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 };\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","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","groupItemRole","itemRole","href","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","enableHtmlSanitizer","innerDiv","wrapperRole","itemText","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","content","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","setProperties","SanitizeHtmlHelper","sanitize","innerHeaderEle","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","timingFunction","easing","end","model","trigger","curUL","preRender","renderCheckbox","bind","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","LISTVIEW_TEMPLATE_ID","LISTVIEW_GROUPTEMPLATE_ID","Animation","removeElement","args","isValidLI","createCheckBox","frameElement_1","checkInternally","checkBoxPosition","virtualCheckBox","lastElementChild","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","getItemData","selectedItems","refreshItemHeight","clickHandler","targetElement","closestElement","back","closest","parentNode","removeFocus","setCheckboxLI","eventArgs","selectEventData","removeHover","removeSelect","setSelectLI","removeChild","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","preventDefault","focusedElement","removeAttribute","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","activeElement","wireEvents","EventHandler","touchModule","Touch","swipe","unWireEvents","destroy","focusedLI_1","hoverLI","selectedLI_1","ele","textAreaFocus","renderSubList","selectedItem","isInteracted","event","cancel","observedArgs","selectedLI","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","getSelectedItems","finalValue","isCompleted","getElementsByClassName","liTextCollection","liDataCollection","dataParent","tempData","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","isArray","parentLi","li_1","liID","toLowerCase","removeMultipleItems","callback","requiredModules","modules","member","getPersistData","addOnPersist","Complex","Event","NotifyPropertyChanges","Component","Virtualization","instance","elementDifference","listViewInstance","templateRef","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","virtualTemplate","commonTemplate","div","templateElements","getElementsByTagName","groupTemplateElements","templateData","nodes","flatTemplateNodes","groupTemplateNodes","textProperty","classProperty","attributeProperty","onChange","newData","listElement","updateContextData","node","regexMatch","regex","RegExp","resultantOutput","exec","this_1","classFunction","classNameMatch","Function","replace","subNode","bindedvalue","newCss","attributeNames","this_2","attributeNameFunction","attributeValueFunction","attributeName","attrNameMatch","attrValueMatch","subNode_1","attrName","attributeValue","isChildHasTextContent","this_3","textFunction","textPropertyMatch","onNgChange","virtualThis","resultElement","lastChild","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","Draggable","intDestroy","Sortable_1","getUniqueID","dataBind","initializeDraggable","dragStart","drag","dragStop","dragTarget","enableTapHold","tapHoldThreshold","queryPositionInfo","distance","grabbedElement","compareElementParent","inst","increased","disabledIdx","start","placeHolderPresent","offset","clientY","bottom","left","pageXOffset","destination","Base","index.ListView","Inject","index.Virtualization"],"mappings":"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"}