@syncfusion/ej2-lists 25.2.3 → 26.1.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +3 -2
- package/dist/ej2-lists.min.js +2 -2
- package/dist/ej2-lists.umd.min.js +2 -2
- package/dist/ej2-lists.umd.min.js.map +1 -1
- package/dist/es6/ej2-lists.es2015.js +255 -279
- package/dist/es6/ej2-lists.es2015.js.map +1 -1
- package/dist/es6/ej2-lists.es5.js +241 -265
- package/dist/es6/ej2-lists.es5.js.map +1 -1
- package/dist/global/ej2-lists.min.js +2 -2
- package/dist/global/ej2-lists.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +10 -10
- package/src/common/list-base.d.ts +61 -30
- package/src/common/list-base.js +167 -94
- package/src/list-view/list-view.d.ts +7 -9
- package/src/list-view/list-view.js +42 -75
- package/src/list-view/virtualization.d.ts +0 -1
- package/src/list-view/virtualization.js +10 -66
- package/src/sortable/sortable.d.ts +5 -0
- package/src/sortable/sortable.js +14 -7
- package/styles/bootstrap-dark.css +100 -122
- package/styles/bootstrap-dark.scss +8 -2
- package/styles/bootstrap.css +100 -122
- package/styles/bootstrap.scss +8 -2
- package/styles/bootstrap4.css +139 -161
- package/styles/bootstrap4.scss +8 -2
- package/styles/bootstrap5-dark.css +101 -125
- package/styles/bootstrap5-dark.scss +8 -2
- package/styles/bootstrap5.css +101 -125
- package/styles/bootstrap5.scss +8 -2
- package/styles/fabric-dark.css +100 -122
- package/styles/fabric-dark.scss +8 -2
- package/styles/fabric.css +100 -122
- package/styles/fabric.scss +8 -2
- package/styles/fluent-dark.css +143 -165
- package/styles/fluent-dark.scss +8 -2
- package/styles/fluent.css +143 -165
- package/styles/fluent.scss +8 -2
- package/styles/fluent2.css +1485 -0
- package/styles/fluent2.scss +8 -0
- package/styles/highcontrast-light.css +100 -122
- package/styles/highcontrast-light.scss +8 -2
- package/styles/highcontrast.css +100 -122
- package/styles/highcontrast.scss +8 -2
- package/styles/list-view/_bootstrap4-definition.scss +5 -0
- package/styles/list-view/_bootstrap5.3-definition.scss +132 -0
- package/styles/list-view/_fluent2-definition.scss +132 -0
- package/styles/list-view/_layout.scss +377 -393
- package/styles/list-view/_material3-definition.scss +0 -7
- package/styles/list-view/_theme.scss +84 -95
- package/styles/list-view/bootstrap-dark.css +97 -121
- package/styles/list-view/bootstrap.css +97 -121
- package/styles/list-view/bootstrap4.css +136 -160
- package/styles/list-view/bootstrap5-dark.css +98 -124
- package/styles/list-view/bootstrap5.css +98 -124
- package/styles/list-view/fabric-dark.css +97 -121
- package/styles/list-view/fabric.css +97 -121
- package/styles/list-view/fluent-dark.css +140 -164
- package/styles/list-view/fluent.css +140 -164
- package/styles/list-view/fluent2.css +1455 -0
- package/styles/list-view/fluent2.scss +5 -0
- package/styles/list-view/highcontrast-light.css +97 -121
- package/styles/list-view/highcontrast.css +97 -121
- package/styles/list-view/icons/_bootstrap5.3.scss +8 -0
- package/styles/list-view/icons/_fluent2.scss +10 -0
- package/styles/list-view/material-dark.css +97 -121
- package/styles/list-view/material.css +97 -121
- package/styles/list-view/material3-dark.css +112 -136
- package/styles/list-view/material3.css +112 -136
- package/styles/list-view/tailwind-dark.css +207 -235
- package/styles/list-view/tailwind.css +207 -235
- package/styles/material-dark.css +100 -122
- package/styles/material-dark.scss +8 -2
- package/styles/material.css +100 -122
- package/styles/material.scss +8 -2
- package/styles/material3-dark.css +115 -137
- package/styles/material3-dark.scss +8 -2
- package/styles/material3.css +115 -137
- package/styles/material3.scss +8 -2
- package/styles/sortable/_bootstrap5.3-definition.scss +1 -0
- package/styles/sortable/_fluent2-definition.scss +1 -0
- package/styles/sortable/bootstrap-dark.css +3 -1
- package/styles/sortable/bootstrap.css +3 -1
- package/styles/sortable/bootstrap4.css +3 -1
- package/styles/sortable/bootstrap5-dark.css +3 -1
- package/styles/sortable/bootstrap5.css +3 -1
- package/styles/sortable/fabric-dark.css +3 -1
- package/styles/sortable/fabric.css +3 -1
- package/styles/sortable/fluent-dark.css +3 -1
- package/styles/sortable/fluent.css +3 -1
- package/styles/sortable/fluent2.css +1063 -0
- package/styles/sortable/fluent2.scss +3 -0
- package/styles/sortable/highcontrast-light.css +3 -1
- package/styles/sortable/highcontrast.css +3 -1
- package/styles/sortable/material-dark.css +3 -1
- package/styles/sortable/material.css +3 -1
- package/styles/sortable/material3-dark.css +4 -2
- package/styles/sortable/material3.css +4 -2
- package/styles/sortable/tailwind-dark.css +3 -1
- package/styles/sortable/tailwind.css +3 -1
- package/styles/tailwind-dark.css +210 -236
- package/styles/tailwind-dark.scss +8 -2
- package/styles/tailwind.css +210 -236
- package/styles/tailwind.scss +8 -2
- package/CHANGELOG.md +0 -544
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-lists.min.js","sources":["../../src/common/list-base.js","../../src/sortable/sortable.js","../../src/list-view/list-view.js","../../src/list-view/virtualization.js","../../src/global.js"],"sourcesContent":["/* eslint-disable no-inner-declarations */\nimport { extend, merge, isNullOrUndefined, getValue, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n};\n/**\n * Base List Generator\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var ListBase;\n(function (ListBase) {\n /**\n *\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null,\n sortBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n enableHtmlSanitizer: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right',\n itemNavigable: false\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} createListFromJson - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, \n // eslint-disable-next-line\n options, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n }\n else {\n return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel, componentInstance);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - returns the list options that need to provide.\n */\n function createListFromArray(createElement, dataSource, \n // tslint:disable-next-line\n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} subChild - returns the list options that need to provide.\n */\n function createListItemFromArray(createElement, dataSource, \n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options, componentInstance);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} child - returns the list options that need to provide.\n */\n function createListItemFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = (componentInstance &&\n (componentInstance.getModuleName() === 'listview' || componentInstance.getModuleName() === 'multiselect'))\n ? curOpt.fields : extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n var checkboxElement = [];\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n var anchorElement;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n // eslint-disable-next-line no-prototype-builtins\n !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData[fields.id];\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n if (curOpt.itemNavigable && (fieldData[fields.url] || fieldData[fields.urlAttributes])) {\n checkboxElement.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n else {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n }\n if (isSingleLevel === true) {\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, \n // eslint-disable-next-line no-prototype-builtins\n (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (ariaAttributes.groupItemRole === 'presentation' || ariaAttributes.itemRole === 'presentation') {\n li.removeAttribute('aria-level');\n }\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n var tooltipText = fieldData[fields.tooltip];\n if (options && options.enableHtmlSanitizer) {\n tooltipText = SanitizeHtmlHelper.sanitize(tooltipText);\n }\n else {\n var tooltipTextElement = createElement('span', { innerHTML: tooltipText });\n tooltipText = tooltipTextElement.innerText;\n tooltipTextElement = null;\n }\n li.setAttribute('title', tooltipText);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n var htmlAttributes = fieldData[fields.htmlAttributes];\n // Check if 'class' attribute is present and not an empty string\n if ('class' in htmlAttributes && typeof htmlAttributes['class'] === 'string' && htmlAttributes['class'].trim() === '') {\n delete htmlAttributes['class'];\n }\n setAttribute(li, 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 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 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 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 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 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 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 var compiledString = compileTemplate(options.template);\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n }\n else {\n var element = createElement('span', {\n className: cssClass.text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n });\n if (options && options.enableHtmlSanitizer) {\n element.innerText = SanitizeHtmlHelper.sanitize(text);\n }\n else {\n element.innerHTML = text;\n }\n innerDiv.appendChild(element);\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n *\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in UL element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n *\n * @param {liElement} liElement - Specifies LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n *\n * @param {Object} dataSource - Specifies an JSON or String data.\n *\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[\"\" + field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[\"\" + dataField] = value;\n }\n }\n }\n return fieldData;\n}\nfunction compileTemplate(template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelector(template)) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base, Event, getUniqueID, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { closest, Draggable, remove, compareElementParent } from '@syncfusion/ej2-base';\nimport { addClass, isNullOrUndefined, getComponent, isBlazor, EventHandler } from '@syncfusion/ej2-base';\n/**\n * Sortable Module provides support to enable sortable functionality in Dom Elements.\n * ```html\n * <div id=\"sortable\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * <div>Item 4</div>\n * <div>Item 5</div>\n * </div>\n * ```\n * ```typescript\n * let ele: HTMLElement = document.getElementById('sortable');\n * let sortObj: Sortable = new Sortable(ele, {});\n * ```\n */\nvar Sortable = /** @class */ (function (_super) {\n __extends(Sortable, _super);\n function Sortable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.getHelper = function (e) {\n // eslint-disable-next-line prefer-const\n var target = _this.getSortableElement(e.sender.target);\n if (!_this.isValidTarget(target, _this)) {\n return false;\n }\n var element;\n if (_this.helper) {\n element = _this.helper({ sender: target, element: e.element });\n }\n else {\n element = target.cloneNode(true);\n element.style.width = target.offsetWidth + \"px\";\n element.style.height = target.offsetHeight + \"px\";\n }\n addClass([element], ['e-sortableclone']);\n document.body.appendChild(element);\n return element;\n };\n // eslint-disable-next-line\n _this.onDrag = function (e) {\n if (!e.target) {\n return;\n }\n _this.trigger('drag', { event: e.event, element: _this.element, target: e.target });\n var newInst = _this.getSortableInstance(e.target);\n var target = _this.getSortableElement(e.target, newInst);\n if ((_this.isValidTarget(target, newInst) || (e.target && typeof e.target.className === 'string' && e.target.className.indexOf('e-list-group-item') > -1)) && (_this.curTarget !== target ||\n !isNullOrUndefined(newInst.placeHolder)) && (newInst.placeHolderElement ? newInst.placeHolderElement !== e.target : true)) {\n if (e.target.classList.contains('e-list-group-item')) {\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 && typeof e.target.className === 'string' && 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 || (typeof e.target.className === 'string' && e.target.className.indexOf('e-list-nrt') > -1) || (typeof e.target.className === 'string' && e.target.className.indexOf('e-list-nr-template') > -1)\n || e.target.closest('.e-list-nr-template')) && !observedArgs.cancel) {\n _this.updateItemClass(dropInst);\n dropInst.element.appendChild(_this.target);\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope\n });\n }\n });\n }\n _this.target.classList.remove('e-grabbed');\n _this.target = null;\n _this.curTarget = null;\n remove(e.helper);\n getComponent(_this.element, 'draggable').intDestroy(e.event);\n };\n _this.bind();\n return _this;\n }\n Sortable_1 = Sortable;\n Sortable.prototype.bind = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('sortable');\n }\n if (!this.itemClass) {\n this.itemClass = 'e-sort-item';\n this.dataBind();\n }\n this.initializeDraggable();\n };\n Sortable.prototype.initializeDraggable = function () {\n new Draggable(this.element, {\n helper: this.getHelper,\n dragStart: this.onDragStart,\n drag: this.onDrag,\n dragStop: this.onDragStop,\n dragTarget: \".\" + this.itemClass,\n enableTapHold: true,\n tapHoldThreshold: 200,\n queryPositionInfo: this.queryPositionInfo,\n distance: 1\n });\n this.wireEvents();\n };\n Sortable.prototype.wireEvents = function () {\n var wrapper = this.element;\n EventHandler.add(wrapper, 'keydown', this.keyDownHandler, this);\n };\n Sortable.prototype.unwireEvents = function () {\n var wrapper = this.element;\n EventHandler.remove(wrapper, 'keydown', this.keyDownHandler);\n };\n Sortable.prototype.keyDownHandler = function (e) {\n if (e.keyCode === 27) {\n var dragStop = getComponent(this.element, 'draggable');\n if (dragStop) {\n dragStop.intDestroy(null);\n }\n var dragWrapper = document.getElementsByClassName('e-sortableclone')[0];\n if (dragWrapper) {\n dragWrapper.remove();\n }\n var dragPlaceholder = document.getElementsByClassName('e-sortable-placeholder')[0];\n if (dragPlaceholder) {\n dragPlaceholder.remove();\n }\n }\n };\n Sortable.prototype.getPlaceHolder = function (target, instance) {\n if (instance.placeHolder) {\n var placeHolderElement = instance.placeHolder({ element: instance.element, grabbedElement: this.target, target: target });\n placeHolderElement.classList.add('e-sortable-placeholder');\n return placeHolderElement;\n }\n return null;\n };\n Sortable.prototype.isValidTarget = function (target, instance) {\n return target && compareElementParent(target, instance.element) && target.classList.contains(instance.itemClass) &&\n !target.classList.contains('e-disabled');\n };\n Sortable.prototype.removePlaceHolder = function (instance) {\n remove(instance.placeHolderElement);\n instance.placeHolderElement = null;\n };\n Sortable.prototype.updateItemClass = function (instance) {\n if (this !== instance) {\n this.target.classList.remove(this.itemClass);\n this.target.classList.add(instance.itemClass);\n }\n };\n Sortable.prototype.getSortableInstance = function (element) {\n element = closest(element, \".e-\" + this.getModuleName());\n if (element) {\n var inst = getComponent(element, Sortable_1);\n return inst.scope && this.scope && inst.scope === this.scope ? inst : this;\n }\n else {\n return this;\n }\n };\n Sortable.prototype.refreshDisabled = function (oldIdx, newIdx, instance) {\n if (instance === this) {\n var element = void 0;\n var increased = oldIdx < newIdx;\n var disabledIdx = void 0;\n var start = increased ? oldIdx : newIdx;\n var end = increased ? newIdx : oldIdx;\n while (start <= end) {\n element = this.element.children[start];\n if (element.classList.contains('e-disabled')) {\n disabledIdx = this.getIndex(element);\n this.element.insertBefore(element, this.element.children[increased ? disabledIdx + 2 : disabledIdx - 1]);\n start = increased ? disabledIdx + 2 : disabledIdx + 1;\n }\n else {\n start++;\n }\n }\n }\n };\n Sortable.prototype.getIndex = function (target, instance, e) {\n if (instance === void 0) { instance = this; }\n var idx;\n var placeHolderPresent;\n [].slice.call(instance.element.children).forEach(function (element, index) {\n if (element.classList.contains('e-sortable-placeholder')) {\n placeHolderPresent = true;\n }\n if (element === target) {\n idx = index;\n if (!isNullOrUndefined(e)) {\n if (placeHolderPresent) {\n idx -= 1;\n }\n var offset = target.getBoundingClientRect();\n var clientY = offset.bottom - ((offset.bottom - offset.top) / 2);\n var cltY = e.changedTouches ? e.changedTouches[0].clientY : e.clientY;\n idx = cltY <= clientY ? idx : idx + 1;\n }\n return;\n }\n });\n return idx;\n };\n Sortable.prototype.getSortableElement = function (element, instance) {\n if (instance === void 0) { instance = this; }\n return closest(element, \".\" + instance.itemClass);\n };\n Sortable.prototype.queryPositionInfo = function (value) {\n value.left = pageXOffset ? parseFloat(value.left) - pageXOffset + \"px\" : value.left;\n value.top = pageYOffset ? parseFloat(value.top) - pageYOffset + \"px\" : value.top;\n return value;\n };\n Sortable.prototype.isPlaceHolderPresent = function (instance) {\n return instance.placeHolderElement && !!closest(instance.placeHolderElement, \"#\" + instance.element.id);\n };\n /**\n * It is used to sort array of elements from source element to destination element.\n *\n * @param destination - Defines the destination element to which the sortable elements needs to be appended.\n *\n * If it is null, then the Sortable library element will be considered as destination.\n * @param targetIndexes - Specifies the sortable elements indexes which needs to be sorted.\n * @param insertBefore - Specifies the index before which the sortable elements needs to be appended.\n * If it is null, elements will be appended as last child.\n * @function moveTo\n * @returns {void}\n */\n Sortable.prototype.moveTo = function (destination, targetIndexes, insertBefore) {\n moveTo(this.element, destination, targetIndexes, insertBefore);\n };\n /**\n * It is used to destroy the Sortable library.\n */\n Sortable.prototype.destroy = function () {\n this.unwireEvents();\n if (this.itemClass === 'e-sort-item') {\n this.itemClass = null;\n this.dataBind();\n }\n getComponent(this.element, Draggable).destroy();\n _super.prototype.destroy.call(this);\n };\n Sortable.prototype.getModuleName = function () {\n return 'sortable';\n };\n Sortable.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'itemClass':\n [].slice.call(this.element.children).forEach(function (element) {\n if (element.classList.contains(oldProp.itemClass)) {\n element.classList.remove(oldProp.itemClass);\n }\n if (newProp.itemClass) {\n element.classList.add(newProp.itemClass);\n }\n });\n break;\n }\n }\n };\n var Sortable_1;\n __decorate([\n Property(false)\n ], Sortable.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"itemClass\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"scope\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"helper\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"placeHolder\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDrop\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drop\", void 0);\n Sortable = Sortable_1 = __decorate([\n NotifyPropertyChanges\n ], Sortable);\n return Sortable;\n}(Base));\nexport { Sortable };\n/**\n * It is used to sort array of elements from source element to destination element.\n *\n * @private\n */\nexport function moveTo(from, to, targetIndexes, insertBefore) {\n var targetElements = [];\n if (!to) {\n to = from;\n }\n if (targetIndexes && targetIndexes.length) {\n targetIndexes.forEach(function (index) {\n targetElements.push(from.children[index]);\n });\n }\n else {\n targetElements = [].slice.call(from.children);\n }\n if (isNullOrUndefined(insertBefore)) {\n targetElements.forEach(function (target) {\n to.appendChild(target);\n });\n }\n else {\n var insertElement_1 = to.children[insertBefore];\n targetElements.forEach(function (target) {\n to.insertBefore(target, insertElement_1);\n });\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined, append, detach, extend } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch, animationMode } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n container: 'e-list-container',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n backButton: 'e-back-button',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist',\n virtualElementContainer: 'e-list-virtualcontainer'\n};\nvar LISTVIEW_TEMPLATE_PROPERTY = 'Template';\nvar LISTVIEW_GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar LISTVIEW_HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar swipeVelocity = 0.5;\n/**\n * Represents the field settings of the ListView.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n * <div id=\"listview\">\n * <ul>\n * <li>Favorite</li>\n * <li>Documents</li>\n * <li>Downloads</li>\n * </ul>\n * </div>\n * ```\n * ```typescript\n * var listviewObject = new ListView({});\n * listviewObject.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n *\n * @param options\n *\n * @param element\n */\n function ListView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousSelectedItems = [];\n _this.hiddenItems = [];\n _this.enabledItems = [];\n _this.disabledItems = [];\n return _this;\n }\n /**\n * @param newProp\n *\n * @param oldProp\n *\n * @private\n */\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n // eslint-disable-next-line\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false, 'header');\n }\n break;\n case 'query':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false, 'header');\n break;\n case 'enableVirtualization':\n if (!isNullOrUndefined(this.contentContainer)) {\n detach(this.contentContainer);\n }\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'template':\n if (!this.enableVirtualization) {\n this.refresh();\n }\n break;\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.clientHeight ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n // Support Component Functions\n ListView.prototype.header = function (text, showBack, prop) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText });\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n innerHeaderEle.innerText = this.headerTitle;\n }\n else {\n innerHeaderEle.innerHTML = this.headerTitle;\n }\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' ' + classNames.backButton,\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n // eslint-disable-next-line\n var compiledElement = compiledString({}, this, prop, this.LISTVIEW_HEADERTEMPLATE_ID, null, null, this.headerEle);\n if (compiledElement) {\n append(compiledElement, headerTemplateEle);\n }\n append([headerTemplateEle], this.headerEle);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n if (this.enableHtmlSanitizer) {\n text = SanitizeHtmlHelper.sanitize(text);\n }\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[\"\" + slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n // eslint-disable-next-line\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n if (this.template) {\n try {\n if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {\n this.setProperties({ template: document.querySelector(this.template).innerHTML.trim() }, true);\n }\n }\n catch (e) {\n compile(this.template);\n }\n }\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'presentation', wrapperRole: 'presentation'\n },\n // eslint-disable-next-line\n fields: (this.fields.properties),\n sortOrder: this.sortOrder,\n showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this),\n templateID: \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,\n groupTemplateID: \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,\n enableHtmlSanitizer: this.enableHtmlSanitizer\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = this.enablePersistence ? this.selectedId : [];\n this.LISTVIEW_TEMPLATE_ID = \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY;\n this.LISTVIEW_GROUPTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY;\n this.LISTVIEW_HEADERTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_HEADERTEMPLATE_PROPERTY;\n this.aniObj = new Animation(this.animateOptions);\n this.removeElement(this.curUL);\n this.removeElement(this.ulElement);\n this.removeElement(this.headerEle);\n this.removeElement(this.contentContainer);\n this.curUL = this.ulElement = this.liCollection = this.headerEle = this.contentContainer = undefined;\n };\n ListView.prototype.renderCheckbox = function (args) {\n var _this = this;\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && args.item.classList.contains(classNames.listItem)) {\n var checkboxElement = void 0;\n var fieldData_1;\n // eslint-disable-next-line prefer-const\n checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {\n var index = this.selectedId.findIndex(function (e) { return e === fieldData_1[_this.listBaseOption.fields.id].toString(); });\n if (index !== -1) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (fieldData_1[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n checkboxElement.setAttribute('aria-label', args.text);\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n if (this.checkBoxPosition === 'Left') {\n this.virtualCheckBox = args.item.firstElementChild.children[0];\n }\n else {\n this.virtualCheckBox = args.item.firstElementChild.lastElementChild;\n }\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * Checks the specific list item by passing the unchecked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n if (checked === true) {\n liElement.classList.add(classNames.selected);\n }\n else {\n liElement.classList.remove(classNames.selected);\n }\n if (checked === true) {\n checkboxIcon.classList.add(classNames.checked);\n }\n else {\n checkboxIcon.classList.remove(classNames.checked);\n }\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n this.updateSelectedId();\n }\n };\n /**\n * Uncheck the specific list item by passing the checked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.uncheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * Checks all the unchecked items in the ListView.\n */\n ListView.prototype.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * Uncheck all the checked items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n this.updateSelectedId();\n }\n };\n ListView.prototype.setCheckbox = function () {\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n args.item = element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.curData = this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n this.renderCheckbox(args);\n if (args.item.classList.contains(classNames.selected)) {\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n /**\n * Refresh the height of the list item only on enabling the virtualization property.\n */\n ListView.prototype.refreshItemHeight = function () {\n if (this.virtualizationModule) {\n this.virtualizationModule.refreshItemHeight();\n }\n };\n ListView.prototype.clickHandler = function (e) {\n if (Array.isArray(this.dataSource) && this.dataSource.length === 0) {\n return;\n }\n var target = e.target;\n this.targetElement = target;\n var classList = target.classList;\n var closestElement;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n li.classList.add(classNames.focused);\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n var checkIcon = li.querySelector('.' + classNames.checkboxIcon);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n if ((target.nodeName === 'INPUT') || (target.nodeName === 'TEXTAREA')) {\n target.classList.add('e-focused');\n this.targetElement = target;\n }\n }\n }\n else {\n this.setSelectLI(li, e);\n if ((target.nodeName === 'INPUT') || (target.nodeName === 'TEXTAREA')) {\n target.classList.add('e-focused');\n this.targetElement = target;\n }\n }\n closestElement = closest(e.target, 'li');\n if (!isNullOrUndefined(closestElement)) {\n if (closestElement.classList.contains('e-has-child') &&\n !e.target.parentElement.classList.contains('e-listview-checkbox')) {\n closestElement.classList.add(classNames.disable);\n }\n }\n }\n this.updateSelectedId();\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ListView.prototype.leaveHandler = function (e) {\n this.removeHover();\n };\n ListView.prototype.homeKeyHandler = function (e, end) {\n e.preventDefault();\n if (Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelectorAll('.' + classNames.listItem);\n var focusedElement = this.curUL.querySelector('.' + classNames.focused) ||\n this.curUL.querySelector('.' + classNames.selected);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n focusedElement.classList.remove(classNames.selected);\n }\n }\n var index = !end ? 0 : li.length - 1;\n if (li[index].classList.contains(classNames.hasChild) || this.showCheckBox) {\n li[index].classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(li[index], e);\n }\n if (li[index]) {\n this.element.setAttribute('aria-activedescendant', li[index].id.toString());\n }\n else {\n this.element.removeAttribute('aria-activedescendant');\n }\n }\n };\n ListView.prototype.onArrowKeyDown = function (e, prev) {\n var siblingLI;\n var li;\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n if (hasChild || this.showCheckBox) {\n li = this.curUL.querySelector('.' + classNames.focused) || this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n if (!isNullOrUndefined(siblingLI)) {\n if (li) {\n li.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n li.classList.remove(classNames.selected);\n }\n }\n if (siblingLI.classList.contains(classNames.hasChild) || this.showCheckBox) {\n siblingLI.classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(siblingLI, e);\n }\n }\n }\n else {\n li = this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n this.setSelectLI(siblingLI, e);\n }\n if (siblingLI) {\n this.element.setAttribute('aria-activedescendant', siblingLI.id.toString());\n }\n else {\n this.element.removeAttribute('aria-activedescendant');\n }\n return siblingLI;\n };\n ListView.prototype.arrowKeyHandler = function (e, prev) {\n var _this = this;\n e.preventDefault();\n if (Object.keys(this.dataSource).length && this.curUL) {\n var siblingLI = this.onArrowKeyDown(e, prev);\n var elementTop = this.element.getBoundingClientRect().top;\n var elementHeight = this.element.getBoundingClientRect().height;\n var firstItemBounds = this.curUL.querySelector('.' + classNames.listItem).getBoundingClientRect();\n var heightDiff = void 0;\n var groupItemBounds = void 0;\n if (this.fields.groupBy) {\n groupItemBounds = this.curUL.querySelector('.' + classNames.groupListItem).getBoundingClientRect();\n }\n if (siblingLI) {\n var siblingTop = siblingLI.getBoundingClientRect().top;\n var siblingHeight = siblingLI.getBoundingClientRect().height;\n if (!prev) {\n var height = this.isWindow ? window.innerHeight : elementHeight;\n heightDiff = this.isWindow ? (siblingTop + siblingHeight) :\n ((siblingTop - elementTop) + siblingHeight);\n if (heightDiff > height) {\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + (heightDiff - height));\n }\n else {\n this.element.scrollTop = this.element.scrollTop + (heightDiff - height);\n }\n }\n }\n else {\n heightDiff = this.isWindow ? siblingTop : (siblingTop - elementTop);\n if (heightDiff < 0) {\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop + heightDiff;\n }\n }\n }\n }\n else if (this.enableVirtualization && prev && this.virtualizationModule.uiFirstIndex) {\n this.onUIScrolled = function () {\n _this.onArrowKeyDown(e, prev);\n _this.onUIScrolled = undefined;\n };\n heightDiff = this.virtualizationModule.listItemHeight;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset - heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop - heightDiff;\n }\n }\n else if (prev) {\n if (this.showHeader && this.headerEle) {\n var topHeight = groupItemBounds ? groupItemBounds.top : firstItemBounds.top;\n var headerBounds = this.headerEle.getBoundingClientRect();\n heightDiff = headerBounds.top < 0 ? (headerBounds.height - topHeight) : 0;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset - heightDiff);\n }\n else {\n this.element.scrollTop = 0;\n }\n }\n else if (this.fields.groupBy) {\n heightDiff = this.isWindow ? (groupItemBounds.top < 0 ? groupItemBounds.top : 0) :\n (elementTop - firstItemBounds.top) + groupItemBounds.height;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop - heightDiff;\n }\n }\n }\n }\n };\n ListView.prototype.enterKeyHandler = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (hasChild && li) {\n li.classList.remove(classNames.focused);\n if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n e.preventDefault();\n var li = this.curUL.querySelector('.' + classNames.focused);\n var checkboxElement = void 0;\n var checkIcon = void 0;\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n checkboxElement = args.item.querySelector('.' + classNames.checkboxWrapper);\n this.checkInternally(args, checkboxElement);\n checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n }\n else {\n this.uncheckItem(li);\n }\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon ? checkIcon.classList.contains(classNames.checked) : false });\n this.trigger('select', eventArgs);\n this.updateSelectedId();\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 32:\n if (isNullOrUndefined(this.targetElement) || !(this.targetElement.classList.contains('e-focused'))) {\n this.spaceKeyHandler(e);\n }\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right' && e.velocity > swipeVelocity && e.originalEvent.type === 'touchend') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox && !isNullOrUndefined(this.selectedLI)) {\n this.selectedLI.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n if (!isNullOrUndefined(this.scroll)) {\n EventHandler.add(this.element, 'scroll', this.onListScroll, this);\n }\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'keydown', this.keyActionHandler);\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 EventHandler.remove(this.element, 'focusout', this.focusout);\n if (!isNullOrUndefined(this.scroll)) {\n EventHandler.remove(this.element, 'scroll', this.onListScroll);\n }\n this.touchModule.destroy();\n this.touchModule = null;\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n var textAreaFocus = li.querySelector('textarea') || li.querySelector('input');\n li.classList.add(classNames.focused);\n if (!isNullOrUndefined(e)) {\n if (e.target === textAreaFocus) {\n textAreaFocus.classList.add('e-focused');\n }\n }\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (!isNullOrUndefined(data)\n && typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li && li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem =\n {\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, {\n isInteracted: true,\n event: e,\n cancel: false,\n index: this.curUL && Array.prototype.indexOf.call(this.curUL.children, li)\n });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n // eslint-disable-next-line\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n // eslint-disable-next-line\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n var _this = this;\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.selectedLI = li;\n _this.renderSubList(li);\n }\n });\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n // eslint-disable-next-line\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = \n // eslint-disable-next-line\n getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n // eslint-disable-next-line\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n // eslint-disable-next-line\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n // eslint-disable-next-line\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[\"\" + column]) &&\n this.fields[\"\" + column] !==\n ListBase.defaultMappedFields[\"\" + column]\n && columns.indexOf(this.fields[\"\" + column]) === -1) {\n columns.push(this.fields[\"\" + column]);\n }\n }\n query.select(columns);\n // eslint-disable-next-line\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n // eslint-disable-next-line\n var fieldValue = (isNullOrUndefined(this.fields.sortBy)) ? this.fields.text : this.fields.sortBy;\n var query = ListBase.addSorting(this.sortOrder, fieldValue);\n if (dataSource && this.fields.groupBy) {\n if (this.sortOrder !== 'None') {\n this.curViewDS = ListBase.groupDataSource(ListBase.getDataSource(dataSource, query), this.listBaseOption.fields, this.sortOrder);\n }\n else {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.fields, this.sortOrder);\n }\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, query);\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.renderRemoteLists = function (e, listViewComponent) {\n if (this.isDestroyed) {\n return;\n }\n this.localData = e.result;\n listViewComponent.removeElement(listViewComponent.contentContainer);\n this.renderList();\n this.trigger('actionComplete', e);\n };\n ListView.prototype.triggerActionFailure = function (e) {\n if (this.isDestroyed) {\n return;\n }\n this.trigger('actionFailure', e);\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n // eslint-disable-next-line\n var listViewComponent = this;\n if (this.dataSource instanceof DataManager) {\n if (this.dataSource.ready) {\n this.dataSource.ready.then(function (e) {\n /* eslint-disable */\n _this.isOffline = _this.dataSource.dataSource.offline;\n if (_this.dataSource instanceof DataManager && _this.isOffline) {\n _this.renderRemoteLists(e, listViewComponent);\n }\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n else {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n _this.renderRemoteLists(e, listViewComponent);\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.removeElement(this.headerEle);\n this.removeElement(this.ulElement);\n this.removeElement(this.contentContainer);\n if (this.isReact) {\n this.clearTemplate();\n }\n if (Object.keys(window).indexOf('ejsInterop') === -1) {\n this.element.innerHTML = '';\n }\n this.headerEle = this.ulElement = this.liCollection = undefined;\n this.header();\n this.setLocalData();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.setAttributes = function (liElements) {\n for (var i = 0; i < liElements.length; i++) {\n var element = liElements[i];\n if (element.classList.contains('e-list-item')) {\n element.setAttribute('id', this.element.id + '_' + element.getAttribute('data-uid'));\n element.setAttribute('tabindex', '-1');\n }\n }\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.createElement, this.curViewDS, this.listBaseOption, null, this);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(this.liCollection);\n };\n ListView.prototype.exceptionEvent = function (e) {\n this.trigger('actionFailure', e);\n };\n ListView.prototype.UpdateCurrentUL = function () {\n this.ulElement = this.curUL = this.element.querySelector('.' + classNames.parentItem);\n if (this.curUL) {\n 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 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 this.header((fieldData[this.listBaseOption.fields.text]), true, 'header');\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization) {\n if (Object.keys(this.dataSource).length) {\n if ((this.template || this.groupTemplate) && !this.virtualizationModule.isNgTemplate()) {\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = this.createElement('div', { className: classNames.container });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * Initializes the ListView component rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n this.renderComplete();\n this.previousScrollTop = this.element.scrollTop;\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n if (this.isReact) {\n this.clearTemplate();\n }\n this.unWireEvents();\n var classAr = [classNames.root, classNames.disable, 'e-rtl',\n 'e-has-header', 'e-lib'].concat(this.cssClass.split(' ').filter(function (css) { return css; }));\n removeClass([this.element], classAr);\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n this.element.innerHTML = '';\n this.contentContainer = null;\n this.selectedItems = null;\n this.selectedLI = null;\n this.liElement = null;\n this.targetElement = null;\n this.currentLiElements = null;\n this.virtualCheckBox = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Switches back from the navigated sub list item.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.remove(classNames.disable);\n li.classList.add(classNames.focused);\n if (!(this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked))) {\n li.classList.remove(classNames.selected);\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false), 'header');\n };\n /**\n * Selects the list item from the ListView by passing the elements or field object.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (item) {\n if (this.enableVirtualization) {\n this.virtualizationModule.selectItem(item);\n }\n else if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(item));\n }\n else {\n if (isNullOrUndefined(item) === true) {\n this.removeSelect();\n }\n else {\n this.setSelectLI(this.getLiFromObjOrElement(item));\n }\n }\n };\n /**\n * This method allows for deselecting a list item within the ListView. The item to be deselected can be specified by passing the element or field object.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass an element Object or Fields as an Object with ID and Text fields.\n */\n ListView.prototype.unselectItem = function (item) {\n if (isNullOrUndefined(item)) {\n this.removeSelect();\n }\n else {\n var li = this.getLiFromObjOrElement(item);\n if (!isNullOrUndefined(li)) {\n this.removeSelect(li);\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 if (curLi[i].innerText.trim() === fieldData[this.fields.text]) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\n };\n /**\n * Selects multiple list items from the ListView.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of\n * elements or array of fields Object with ID and Text fields.\n */\n ListView.prototype.selectMultipleItems = function (item) {\n if (!isNullOrUndefined(item)) {\n for (var i = 0; i < item.length; i++) {\n if (!isNullOrUndefined(item[i])) {\n this.selectItem(item[i]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n ListView.prototype.updateSelectedId = function () {\n this.selectedId = [];\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n for (var i = 0; i < liCollection.length; i++) {\n var tempData = this.getItemData(liCollection[i]);\n if (!isNullOrUndefined(tempData) && tempData[this.listBaseOption.fields.id]) {\n this.selectedId.push(tempData[this.listBaseOption.fields.id]);\n }\n }\n };\n /**\n * Gets the details of the currently selected item from the list items.\n *\n */\n ListView.prototype.getSelectedItems = function () {\n 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 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 liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\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 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 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 resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * Adds the new list item(s) to the current ListView.\n * To add a new list item(s) in the ListView, we need to pass the `data` as an array of items that need\n * to be added and `fields` as the target item to which we need to add the given item(s) as its children.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {{Object}[]} data - JSON Array Data that need to add.\n *\n * @param {Fields} fields - Target item to add the given data as its children (can be null).\n *\n * @param {number} index - Indicates the index where the data to be added.\n */\n ListView.prototype.addItem = function (data, fields, index) {\n if (fields === void 0) { fields = undefined; }\n var dataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n this.addItemInternally(data, fields, dataSource, index);\n };\n ListView.prototype.addItemInternally = function (data, fields, dataSource, index) {\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields, dataSource, index);\n }\n else {\n var ds = this.findItemFromDS(dataSource, fields);\n var child = void 0;\n if (ds) {\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n }\n // check for whether target is nested level or top level in list\n if (ds instanceof Array) {\n for (var i = 0; i < data.length; i++) {\n dataSource = this.addItemAtIndex(index, dataSource, data[i]);\n this.setViewDataSource(dataSource);\n // since it is top level target, get the content container's first child\n // as it is always the top level UL\n var targetUL = this.contentContainer\n ? this.contentContainer.children[0]\n : null;\n // check for whether the list was previously empty or not, if it is\n // proceed to call initial render\n if (this.contentContainer && targetUL) {\n this.addItemIntoDom(data[i], targetUL, this.curViewDS);\n }\n else {\n this.reRender();\n }\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n // proceed as target item is in nested level, only if it is a valid target ds\n if (ds) {\n ds[this.fields.child] = child;\n this.addItemInNestedList(ds, data);\n }\n }\n }\n }\n };\n ListView.prototype.addItemAtIndex = function (index, newDataSource, itemData) {\n var isIndexValid = !(isNullOrUndefined(index)) && index >= 0 && index < newDataSource.length && isNullOrUndefined(this.listBaseOption.fields.groupBy);\n if (isIndexValid) {\n newDataSource.splice(index, 0, itemData);\n }\n else {\n newDataSource.push(itemData);\n }\n return newDataSource;\n };\n ListView.prototype.addItemInNestedList = function (targetItemData, itemQueue) {\n 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 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 dataSource = this.findItemFromDS(listDataSource, fields, true);\n if (dataSource) {\n var data_1;\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 var foundData = (dataSource.length - 1) <= 0\n ? this.findParent(this.localData, this.fields.id, 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 ListView.prototype.findParent = function (dataSource, id, callback, parent) {\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 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', name: 'Virtualization' });\n }\n return modules;\n };\n ListView.prototype.onListScroll = function (e) {\n var args = { originalEvent: e, scrollDirection: \"Bottom\", distanceY: this.element.scrollHeight - this.element.scrollTop };\n var currentScrollTop = this.element.scrollTop;\n if (currentScrollTop > this.previousScrollTop) {\n args.scrollDirection = \"Bottom\";\n args.distanceY = this.element.scrollHeight - this.element.clientHeight - this.element.scrollTop;\n this.trigger('scroll', args);\n }\n else if (this.previousScrollTop > currentScrollTop) {\n args.scrollDirection = \"Top\";\n args.distanceY = this.element.scrollTop;\n this.trigger('scroll', args);\n }\n this.previousScrollTop = currentScrollTop;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition', 'selectedId']);\n };\n __decorate([\n Property('')\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property(true)\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 __decorate([\n Event()\n ], ListView.prototype, \"scroll\", 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, compile, formatUnit, select } from '@syncfusion/ej2-base';\nimport { ListBase } from '../common/list-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nvar listElementCount = 1.5;\nvar windowElementCount = 3;\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.elementDifference = 0;\n this.listViewInstance = instance;\n }\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.isNgTemplate = function () {\n return !isNullOrUndefined(this.listViewInstance.templateRef) && typeof this.listViewInstance.templateRef !== 'string';\n };\n /**\n * Checks if the platform is a Vue and its template property is a function type.\n *\n * @returns {boolean} indicating the result of the check\n */\n Virtualization.prototype.isVueFunctionTemplate = function () {\n return this.listViewInstance.isVue && typeof this.listViewInstance.template === 'function';\n };\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.uiVirtualization = function () {\n this.wireScrollEvent(false);\n var curViewDS = this.listViewInstance.curViewDS;\n var firstDs = curViewDS.slice(0, 1);\n this.listViewInstance.ulElement = this.listViewInstance.curUL = ListBase.createList(\n // eslint-disable-next-line\n this.listViewInstance.createElement, firstDs, this.listViewInstance.listBaseOption, null, this.listViewInstance);\n this.listViewInstance.contentContainer = this.listViewInstance.createElement('div', { className: classNames.container });\n this.listViewInstance.element.appendChild(this.listViewInstance.contentContainer);\n this.listViewInstance.contentContainer.appendChild(this.listViewInstance.ulElement);\n this.listItemHeight = this.listViewInstance.ulElement.firstElementChild.getBoundingClientRect().height;\n this.expectedDomItemCount = this.ValidateItemCount(10000);\n this.domItemCount = this.ValidateItemCount(Object.keys(this.listViewInstance.curViewDS).length);\n this.uiFirstIndex = 0;\n this.uiLastIndex = this.domItemCount - 1;\n var otherDs = curViewDS.slice(1, this.domItemCount);\n var listItems = ListBase.createListItemFromJson(\n // eslint-disable-next-line\n this.listViewInstance.createElement, otherDs, this.listViewInstance.listBaseOption, null, null, this.listViewInstance);\n append(listItems, this.listViewInstance.ulElement);\n this.listViewInstance.liCollection = this.listViewInstance.curUL.querySelectorAll('li');\n this.topElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.topElement, this.listViewInstance.ulElement.firstElementChild);\n this.bottomElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.bottomElement, null);\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n this.listDiff = 0;\n this.uiIndicesInitialization();\n };\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n if (this.listViewInstance.isWindow) {\n this.onVirtualScroll = this.onVirtualUiScroll.bind(this);\n window.addEventListener('scroll', this.onVirtualScroll);\n }\n else {\n EventHandler.add(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll, this);\n }\n }\n else {\n if (this.listViewInstance.isWindow === true) {\n window.removeEventListener('scroll', this.onVirtualScroll);\n window.removeEventListener('scroll', this.updateUl);\n }\n else {\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll);\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.updateUlContainer);\n }\n }\n };\n Virtualization.prototype.updateUlContainer = function (e) {\n var listDiff;\n var virtualElementContainer = this.listViewInstance.ulElement.querySelector('.' + classNames.virtualElementContainer);\n if (isNullOrUndefined(this.listViewInstance.liElementHeight)) {\n this.listViewInstance.updateLiElementHeight();\n }\n if (this.listViewInstance.isWindow) {\n // eslint-disable-next-line\n listDiff = Math.round(e.target.documentElement.scrollTop / this.listViewInstance.liElementHeight) - 2;\n }\n else {\n // eslint-disable-next-line\n listDiff = Math.round(e.target.scrollTop / this.listViewInstance.liElementHeight) - 2;\n }\n if (((listDiff - 1) * this.listViewInstance.liElementHeight) < 0) {\n virtualElementContainer.style.top = '0px';\n }\n else {\n virtualElementContainer.style.top = (listDiff) * this.listViewInstance.liElementHeight + 'px';\n }\n };\n Virtualization.prototype.ValidateItemCount = function (dataSourceLength) {\n var height = parseFloat(formatUnit(this.listViewInstance.height));\n var itemCount;\n if (this.listViewInstance.isWindow) {\n itemCount = Math.round((window.innerHeight / this.listItemHeight) * windowElementCount);\n }\n else {\n if (typeof this.listViewInstance.height === 'string' && this.listViewInstance.height.indexOf('%') !== -1) {\n // eslint-disable-next-line max-len\n itemCount = Math.round((this.listViewInstance.element.getBoundingClientRect().height / this.listItemHeight) * listElementCount);\n }\n else {\n itemCount = Math.round((height / this.listItemHeight) * listElementCount);\n }\n }\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n Virtualization.prototype.uiIndicesInitialization = function () {\n this.uiIndices = { 'activeIndices': [], 'disabledItemIndices': [], 'hiddenItemIndices': [] };\n var data = this.listViewInstance.curViewDS;\n for (var i = 0; i < data.length; i++) {\n if (this.listViewInstance.showCheckBox && data[i][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(i);\n }\n // eslint-disable-next-line\n if (!isNullOrUndefined(data[i][this.listViewInstance.fields.enabled]) &&\n !data[i][this.listViewInstance.fields.enabled]) {\n // eslint-disable-next-line\n (this.uiIndices.disabledItemIndices.push(i));\n }\n }\n if (this.isNgTemplate()) {\n var items = this.listViewInstance.element.querySelectorAll('.' + classNames.listItem);\n for (var index = 0; index < items.length; index++) {\n items[index].context = this.listViewInstance.viewContainerRef.get(index).context;\n }\n }\n };\n Virtualization.prototype.refreshItemHeight = function () {\n if (this.listViewInstance.curViewDS.length) {\n var curViewDS = this.listViewInstance.curViewDS;\n this.listItemHeight = this.topElement.nextSibling.getBoundingClientRect().height;\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.bottomElementHeight = this.totalHeight;\n this.bottomElement.style.height = this.totalHeight + 'px';\n }\n };\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n return this.listViewInstance.isWindow ? (((pageYOffset - startingHeight) <= 0) ? 0 :\n (pageYOffset - startingHeight)) : ((this.listViewInstance.element.scrollTop - startingHeight) <= 0) ? 0 :\n (this.listViewInstance.element.scrollTop - startingHeight);\n };\n Virtualization.prototype.onVirtualUiScroll = function (e) {\n var _a;\n var startingHeight;\n var curViewDS = this.listViewInstance.curViewDS;\n this.listItemHeight = select('.e-list-item', this.listViewInstance.element).getBoundingClientRect().height;\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\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 curViewDS = this.listViewInstance.curViewDS[index];\n var iconCss = curViewDS[this.listViewInstance.fields.iconCss].toString();\n var target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' + 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 if (this.listViewInstance.checkBoxPosition === 'Left') {\n textContent.classList.add('e-checkbox-left');\n }\n else {\n textContent.classList.add('e-checkbox-right');\n }\n textContent.append(this.checkListWrapper.cloneNode(true));\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 if (Object.keys(resutJSON).length) {\n dataSource = resutJSON.data;\n if (curViewDS[resutJSON.index - 1] &&\n curViewDS[resutJSON.index - 1].isHeader &&\n (curViewDS[resutJSON.index - 1])\n .items.length === 1) {\n this.removeUiItem(resutJSON.index - 1);\n this.removeUiItem(resutJSON.index - 1);\n }\n else {\n this.removeUiItem(resutJSON.index);\n }\n }\n var listDataSource = this.listViewInstance.dataSource instanceof DataManager\n ? this.listViewInstance.localData : this.listViewInstance.dataSource;\n var index = listDataSource.indexOf(dataSource);\n if (index !== -1) {\n listDataSource.splice(index, 1);\n this.listViewInstance.setViewDataSource(listDataSource);\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n };\n // eslint-disable-next-line\n Virtualization.prototype.setCheckboxLI = function (li, e) {\n var index = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n if (li.classList.contains(classNames.selected)) {\n if (this.uiIndices.activeIndices.indexOf(index) === -1) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n else {\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n }\n };\n // eslint-disable-next-line\n Virtualization.prototype.setSelectLI = function (li, e) {\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n };\n Virtualization.prototype.checkedItem = function (checked) {\n if (checked) {\n this.uiIndices.activeIndices = [];\n this.activeIndex = undefined;\n var data = this.listViewInstance.curViewDS;\n for (var index = 0; index < data.length; index++) {\n if (!data[index].isHeader) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n }\n else {\n this.activeIndex = undefined;\n this.uiIndices.activeIndices = [];\n }\n };\n Virtualization.prototype.addUiItem = function (index) {\n // virtually new add list item based on the scollbar position\n // if the scroll bar is at the top, just pretend the new item has been added since no UI\n // change is required for the item that has been added at last but when scroll bar is at the bottom\n // just detach top and inject into bottom to mimic new item is added\n var curViewDs = this.listViewInstance.curViewDS;\n this.changeUiIndices(index, true);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex++;\n }\n if (this.listViewInstance.showCheckBox &&\n curViewDs[index][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(index);\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n }\n if (parseFloat(this.bottomElement.style.height)) {\n var liItem = this.listViewInstance.curUL.lastElementChild.previousSibling;\n var target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n if (target) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n this.updateUI(liItem, index, target);\n }\n }\n else {\n var liItem = this.listViewInstance.curUL.firstElementChild.nextSibling;\n var target = void 0;\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n }\n this.topElement.style.height = parseFloat(this.topElement.style.height) + this.listItemHeight + 'px';\n this.uiFirstIndex++;\n this.uiLastIndex++;\n if (target) {\n this.updateUI(liItem, index, target);\n if (this.listViewInstance.isWindow === true) {\n window.scrollTo(0, (pageYOffset + this.listItemHeight));\n }\n else {\n this.listViewInstance.element.scrollTop += this.listItemHeight;\n }\n }\n }\n this.totalHeight += this.listItemHeight;\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.removeUiItem = function (index) {\n this.totalHeight -= this.listItemHeight;\n var curViewDS = this.listViewInstance.curViewDS[index];\n var liItem = this.listViewInstance.getLiFromObjOrElement(curViewDS);\n this.listViewInstance.curViewDS.splice(index, 1);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex--;\n }\n if (liItem) {\n if (this.domItemCount > Object.keys(this.listViewInstance.curViewDS).length) {\n detach(liItem);\n this.domItemCount--;\n this.uiLastIndex--;\n this.totalHeight = 0;\n }\n else {\n if (liItem.classList.contains(classNames.disable)) {\n liItem.classList.remove(classNames.disable);\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(index), 1);\n }\n if (liItem.style.display === 'none') {\n liItem.style.display = '';\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(index), 1);\n }\n if (this.listViewInstance.showCheckBox && liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n var checklistElement = liItem.querySelector('.' + classNames.checkboxWrapper);\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n if (liItem.classList.contains(classNames.focused)) {\n liItem.classList.remove(classNames.focused);\n this.activeIndex = undefined;\n }\n }\n else if (liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else if (parseFloat(this.bottomElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else {\n this.topElement.style.height = parseFloat(this.topElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, (this.uiFirstIndex - 1), this.topElement.nextSibling);\n this.uiLastIndex--;\n this.uiFirstIndex--;\n }\n }\n }\n this.changeUiIndices(index, false);\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.changeUiIndices = function (index, increment) {\n var keys = Object.keys(this.uiIndices);\n for (var ind = 0; ind < keys.length; ind++) {\n this.uiIndices[keys[ind]] = this.uiIndices[keys[ind]].map(function (i) {\n if (i >= index) {\n return increment ? ++i : --i;\n }\n else {\n return i;\n }\n });\n }\n };\n Virtualization.prototype.addItem = function (data, fields, dataSource, index) {\n for (var i = 0; i < data.length; i++) {\n var currentItem = data[i];\n // push the given data to main data array\n dataSource = this.listViewInstance.addItemAtIndex(index, dataSource, currentItem);\n // recalculate all the group data or other datasource related things\n this.listViewInstance.setViewDataSource(dataSource);\n // render list items for first time due to no datasource present earlier\n if (!this.domItemCount) {\n // fresh rendering for first time\n if ((this.listViewInstance.template || this.listViewInstance.groupTemplate) && !this.isNgTemplate()) {\n this.listViewInstance.listBaseOption.template = null;\n this.listViewInstance.listBaseOption.groupTemplate = null;\n this.listViewInstance.listBaseOption.itemCreated = this.createUIItem.bind(this);\n }\n this.uiVirtualization();\n // when expected expected DOM count doesn't meet the condition we need to create and inject new item into DOM\n }\n else if (this.domItemCount < this.expectedDomItemCount) {\n var ds = this.listViewInstance.findItemFromDS(dataSource, fields);\n if (ds instanceof Array) {\n if (this.listViewInstance.ulElement) {\n var index_1 = this.listViewInstance.curViewDS.indexOf(currentItem);\n // inject new list item into DOM\n this.createAndInjectNewItem(currentItem, index_1);\n // check for group header item\n var curViewDS = this.listViewInstance.curViewDS[index_1 - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n // target group item index in datasource\n --index_1;\n // inject new group header into DOM for previously created list item\n this.createAndInjectNewItem(curViewDS, index_1);\n }\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n }\n }\n else {\n // eslint-disable-next-line\n var index_2 = this.listViewInstance.curViewDS.indexOf(currentItem);\n // virtually new add list item based on the scollbar position\n this.addUiItem(index_2);\n // check for group header item needs to be added\n var curViewDS = this.listViewInstance.curViewDS[index_2 - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n this.addUiItem(index_2 - 1);\n }\n }\n }\n };\n Virtualization.prototype.createAndInjectNewItem = function (itemData, index) {\n // generate li item for given datasource\n var target;\n var li = ListBase.createListItemFromJson(this.listViewInstance.createElement, \n // eslint-disable-next-line\n [itemData], this.listViewInstance.listBaseOption, null, null, this.listViewInstance);\n // check for target element whether to insert before last item or group item\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n // target group header's first child item to append its header\n target = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index + 2]);\n }\n if (this.listViewInstance.fields.groupBy\n && this.listViewInstance.curViewDS[index + 1]\n && 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 if (!args.item.classList.contains('e-list-group-item')) {\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\n if (this.listViewInstance.showCheckBox) {\n // eslint-disable-next-line\n this.listViewInstance.renderCheckbox(args);\n if ((!isNullOrUndefined(this.listViewInstance.virtualCheckBox)) &&\n (!isNullOrUndefined(this.listViewInstance.virtualCheckBox.outerHTML))) {\n var div_1 = document.createElement('div');\n var commonTemplate = '<div class=\"e-text-content\" role=\"presentation\"> ' +\n '<span class=\"e-list-text\"> ${' + this.listViewInstance.fields.text + '} </span></div>';\n var templateFunction = compile(this.listViewInstance.template || commonTemplate, this.listViewInstance);\n var nodes = templateFunction(this.templateData, this.listViewInstance);\n if (this.listViewInstance.template && this.listViewInstance.isReact) {\n this.listViewInstance.renderReactTemplates();\n }\n [].slice.call(nodes).forEach(function (ele) {\n div_1.appendChild(ele);\n });\n if (div_1.children && div_1.children[0]) {\n div_1.children[0].classList.add('e-checkbox');\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div_1.children[0].classList.add('e-checkbox-left');\n }\n else {\n div_1.children[0].classList.add('e-checkbox-right');\n }\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div_1.children[0].insertBefore(this.listViewInstance.virtualCheckBox, div_1.childNodes[0].children[0]);\n }\n else {\n div_1.children[0].appendChild(this.listViewInstance.virtualCheckBox);\n }\n while (args.item.lastChild) {\n args.item.removeChild(args.item.lastChild);\n }\n [].slice.call(div_1.children).forEach(function (ele) {\n args.item.appendChild(ele);\n });\n }\n }\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 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 /**\n * Handles the UI change in vue for the list view.\n *\n * @param {DataSource} newData - The new data source for the list view.\n * @param {ElementContext} listElement - The HTML element context for the list view.\n * @param {Virtualization} virtualThis - The virtualization context for the list view.\n * @returns {void}\n */\n Virtualization.prototype.onChange = function (newData, listElement, virtualThis) {\n var liItem = ListBase.createListItemFromJson(virtualThis.listViewInstance.createElement, \n // eslint-disable-next-line\n [newData], virtualThis.listViewInstance.listBaseOption, null, null, virtualThis.listViewInstance);\n if (virtualThis.listViewInstance.isReact) {\n virtualThis.listViewInstance.renderReactTemplates();\n }\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n [].slice.call(liItem[0].children).forEach(function (ele) {\n listElement.appendChild(ele);\n });\n };\n Virtualization.prototype.onNgChange = function (newData, listElement, virtualThis) {\n // compile given target element with template for new data\n var templateCompiler = compile(virtualThis.listViewInstance.template);\n var resultElement = templateCompiler(newData);\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n listElement.appendChild(resultElement[0]);\n };\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n Virtualization.prototype.destroy = function () {\n this.wireScrollEvent(true);\n this.topElement = null;\n this.bottomElement = null;\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import * as index from './index';\nindex.ListView.Inject(index.Virtualization);\nexport * from './index';\n"],"names":["getFieldValues","dataItem","fields","fieldData","isNullOrUndefined","isHeader","_i","_a","Object","keys","length","dataField","value","undefined","getValue","compileTemplate","template","document","querySelector","compile","innerHTML","trim","e","moveTo","from","to","targetIndexes","insertBefore","targetElements","forEach","index","push","children","slice","call","target","appendChild","insertElement_1","exports","li","ul","group","icon","text","check","checked","selected","expanded","textContent","hasChild","level","url","collapsible","disabled","image","iconWrapper","anchorWrap","navigable","ListBase","createList","createElement","dataSource","options","isSingleLevel","componentInstance","curOpt","extend","defaultListBaseOptions","ariaAttributes","defaultAriaAttributes","type","typeofData","typeof","createListFromArray","createListFromJson","generateUL","createListItemFromArray","subChild","cssClass","getModuleClass","moduleName","id","generateId","i","itemCreating","curData","generateSingleLevelLI","generateLI","itemCreated","item","createListItemFromJson","getModuleName","defaultMappedFields","checkboxElement","anchorElement","child","hasOwnProperty","curItem","innerEle","showCheckBox","itemNavigable","urlAttributes","className","attrs","showIcon","iconCss","itemClass","prepend","firstElementChild","classList","add","setAttribute","toString","groupItemRole","itemRole","removeAttribute","tooltip","tooltipText","enableHtmlSanitizer","SanitizeHtmlHelper","sanitize","tooltipTextElement","innerText","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","currentID","groupTemplateID","templateID","compiledElement","isStringTemplate","append","renderGroupTemplate","groupTemplate","headerItems","category","headerItems_1","header","headerData","Math","floor","random","substring","subDS","hasChildren","subLi","expandCollapse","expandIconPosition","expandIconClass","innerElements","grpLI","elementID","href","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","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","container","backIcon","backButton","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","virtualElementContainer","FieldSettings","_super","apply","Property","ChildProperty","ListView","_this","previousSelectedItems","hiddenItems","enabledItems","disabledItems","onPropertyChanged","newProp","oldProp","setHTMLAttribute","setCSSClass","setEnable","setSize","setEnableRTL","listBaseOption","properties","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","detach","refresh","setCheckbox","curViewDS","getSubDS","resetCurrentList","oldCSSClass","filter","css","removeClass","height","formatUnit","width","isWindow","clientHeight","enableElement","enable","enableRtl","isEnabled","showBack","prop","headerEle","showHeader","innerHeaderEle","setProperties","textEle","outerHTML","hedBackButton","headerTemplateEle","LISTVIEW_HEADERTEMPLATE_ID","isReact","renderReactTemplates","parentElement","switchView","fromView","toView","reverse","fPos_1","position","overflow_1","overflow","anim","duration","animation","effect","aniObj","animate","name","animationMode","timingFunction","easing","end","model","trigger","curUL","preRender","renderCheckbox","bind","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","enablePersistence","LISTVIEW_TEMPLATE_ID","LISTVIEW_GROUPTEMPLATE_ID","Animation","removeElement","args","fieldData_1","createCheckBox","frameElement_1","findIndex","checkInternally","checkBoxPosition","virtualCheckBox","lastElementChild","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","updateSelectedId","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","getItemData","selectedItems","refreshItemHeight","clickHandler","isArray","targetElement","closestElement","back","closest","parentNode","removeFocus","isValidLI","setCheckboxLI","eventArgs","selectEventData","removeHover","removeSelect","setSelectLI","removeChild","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","preventDefault","focusedElement","onArrowKeyDown","prev","arrowKeyHandler","elementTop","getBoundingClientRect","top","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","window","scroll","pageYOffset","scrollTop","innerHeight","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","enterKeyHandler","spaceKeyHandler","keyActionHandler","keyCode","swipeActionHandler","swipeDirection","velocity","originalEvent","focusout","selectedLI","wireEvents","EventHandler","touchModule","Touch","swipe","onListScroll","unWireEvents","destroy","focusedLI_1","hoverLI","selectedLI_1","ele","textAreaFocus","renderSubList","selectedItem","isInteracted","event","cancel","observedArgs","lastLi","levelKeys","localData","levelKeys_1","field","curDSJSON","findItemFromDS","curDS","getElementUID","parent","resultJSON","some","getQuery","columns","column","select","tableName","setViewDataSource","fieldValue","isInAnimation","renderRemoteLists","listViewComponent","isDestroyed","result","renderList","triggerActionFailure","setLocalData","ready","then","isOffline","offline","catch","executeQuery","clearTemplate","renderIntoDom","setAttributes","liElements","getAttribute","exceptionEvent","UpdateCurrentUL","lists","isNgTemplate","createUIItem","uiVirtualization","obj","Element","render","tabindex","rippleFn","rippleEffect","selector","renderComplete","previousScrollTop","classAr","concat","pID","pop","toUL","fromUL","selectItem","unselectItem","uid","selectMultipleItems","getParentId","parentId","getElementsByClassName","tempData","getSelectedItems","finalValue","isCompleted","liTextCollection","liDataCollection","dataParent","findItem","enableItem","setItemState","disableItem","isEnable","showItem","showHideItem","hideItem","isHide","addItem","addItemInternally","addItemAtIndex","targetUL","addItemIntoDom","addItemInNestedList","newDataSource","itemData","targetItemData","itemQueue","targetItemId","targetChildDS","isAlreadyRenderedUL","targetLi","targetDS","targetRefreshedElement","currentItem","addListItem","curItemDS","targetEle","nextElementSibling","removeItem","listDataSource","removeItemFromList","data_1","groupLi","validateNestedView","previousElementSibling","foundData","findParent","dsIndex","parentLi","li_1","liID","toLowerCase","removeMultipleItems","callback","requiredModules","modules","member","scrollDirection","distanceY","scrollHeight","currentScrollTop","getPersistData","addOnPersist","Complex","Event","NotifyPropertyChanges","Component","Virtualization","instance","elementDifference","listViewInstance","templateRef","isVueFunctionTemplate","isVue","wireScrollEvent","firstDs","expectedDomItemCount","ValidateItemCount","domItemCount","uiLastIndex","otherDs","listItems","topElement","bottomElement","totalHeight","topElementHeight","bottomElementHeight","listDiff","uiIndicesInitialization","removeEventListener","onVirtualScroll","updateUl","onVirtualUiScroll","updateUlContainer","addEventListener","liElementHeight","updateLiElementHeight","round","documentElement","dataSourceLength","itemCount","parseFloat","uiIndices","activeIndices","disabledItemIndices","hiddenItemIndices","context","viewContainerRef","get","nextSibling","getscrollerHeight","startingHeight","scrollPosition","onLongScroll","onNormalScroll","isScrollingDown","elements","updateUI","updateUiContent","curViewDs","dataset","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection","textCollection","curViewDS_1","indices","map","curViewDS_2","indexArray","dataSource_1","resutJSON","isSelected","removeUiItem","addUiItem","changeUiIndices","liItem","previousSibling","scrollTo","increment","ind","index_1","createAndInjectNewItem","index_2","templateData","div_1","commonTemplate","nodes","lastChild","onChange","onNgChange","newData","listElement","virtualThis","resultElement","Sortable","getHelper","getSortableElement","sender","isValidTarget","helper","offsetWidth","offsetHeight","body","onDrag","newInst","getSortableInstance","curTarget","placeHolder","placeHolderElement","scope","oldIdx","getIndex","getPlaceHolder","newIdx","isPlaceHolderPresent","childElementCount","refreshDisabled","idx","updateItemClass","droppedElement","previousIndex","currentIndex","removePlaceHolder","inst_1","onDragStart","cancelDrag","onDragStop","isBlazor","bindEvents","dragElement","prevIdx","curIdx","handled","dropInst","curIdx_1","curIdx_2","scopeName","beforeDropArgs","getComponent","intDestroy","Sortable_1","getUniqueID","dataBind","initializeDraggable","Draggable","dragStart","drag","dragStop","dragTarget","enableTapHold","tapHoldThreshold","queryPositionInfo","distance","wrapper","keyDownHandler","unwireEvents","dragWrapper","dragPlaceholder","grabbedElement","compareElementParent","inst","increased","disabledIdx","start","placeHolderPresent","offset","clientY","bottom","cltY","changedTouches","left","pageXOffset","destination","Base","index.ListView","Inject","index.Virtualization"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-lists.min.js","sources":["../../src/common/list-base.js","../../src/sortable/sortable.js","../../src/list-view/list-view.js","../../src/list-view/virtualization.js","../../src/global.js"],"sourcesContent":["/* eslint-disable no-inner-declarations */\nimport { extend, merge, isNullOrUndefined, getValue, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n};\n/**\n * Base List Generator\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var ListBase;\n(function (ListBase) {\n /**\n *\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null,\n sortBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n enableHtmlSanitizer: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right',\n itemNavigable: false\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} [options] - Specifies the list options that need to provide.\n *\n * @param {boolean} [isSingleLevel] - Specifies the list options that need to provide.\n *\n * @param {any} [componentInstance] - Specifies the list options that need to provide.\n *\n * @returns {createElement} createListFromJson - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, 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 {boolean} [isSingleLevel] - Specifies the list options that need to provide.\n *\n * @param {ListBaseOptions} [options] - 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, 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 {boolean} [isSingleLevel] - Specifies the list options that need to provide.\n *\n * @param {ListBaseOptions} [options] - 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, 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 {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 {HTMLElement[]} child - returns the list options that need to provide.\n */\n function createListItemFromJson(createElement, dataSource, 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 !Object.prototype.hasOwnProperty.call(typeofData(dataSource).item, 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 if (Object.prototype.hasOwnProperty.call(fieldData, 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 if (curOpt.showIcon && Object.prototype.hasOwnProperty.call(fieldData, fields.iconCss)\n && !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, (Object.prototype.hasOwnProperty.call(curItem, 'isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (ariaAttributes.groupItemRole === 'presentation' || ariaAttributes.itemRole === 'presentation') {\n li.removeAttribute('aria-level');\n }\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.tooltip)) {\n var tooltipText = fieldData[fields.tooltip];\n if (options && options.enableHtmlSanitizer) {\n tooltipText = SanitizeHtmlHelper.sanitize(tooltipText);\n }\n else {\n var tooltipTextElement = createElement('span', { innerHTML: tooltipText });\n tooltipText = tooltipTextElement.innerText;\n tooltipTextElement = null;\n }\n li.setAttribute('title', tooltipText);\n }\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n var htmlAttributes = fieldData[fields.htmlAttributes];\n // Check if 'class' attribute is present and not an empty string\n if ('class' in htmlAttributes && typeof htmlAttributes['class'] === 'string' && htmlAttributes['class'].trim() === '') {\n delete htmlAttributes['class'];\n }\n setAttribute(li, htmlAttributes);\n }\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n && !curOpt.template) {\n var attr = { src: fieldData[fields.imageUrl], alt: !isNullOrUndefined(fieldData.name) ? ('Displaying ' + fieldData.name + ' Image') : 'Displaying Image' };\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 if (curOpt.showIcon && Object.prototype.hasOwnProperty.call(fieldData, 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, 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} element - An element to find next or previous after this element.\n * @param {boolean} [isPrevious] - Specify when the need get previous element from array.\n * @returns {Element|undefined} The next or previous visible element, or undefined if the element array is empty.\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 * @returns {number} - The index of the item in the element array, or undefined if either parameter is false.\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='None'] - Specifies final result sort order. Defaults to 'None'.\n * @returns {Object[]} - The grouped data.\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 * @returns {Query} - The updated query object with sorting applied.\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 * @returns {Object[]} - An array of objects representing the retrieved data.\n */\n function getDataSource(dataSource, query) {\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 * @returns {Object[]} - An array of objects representing the JSON data.\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 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 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 /**\n * Determines the type of data in an array of objects, strings, or numbers.\n *\n * @param {Object[] | string[] | number[]} data - The array containing objects, strings, or numbers.\n * @returns {{typeof: (string | null), item: (Object | string | number)}} - An object containing the type of data and the corresponding item.\n */\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 /**\n * Sets attributes on an HTML element.\n *\n * @param {HTMLElement} element - The HTML element to set attributes on.\n * @param {Object.<string, string>} elementAttributes - An object containing attribute names and their corresponding values.\n * @returns {void}\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 /**\n * Retrieves all attributes of an HTML element.\n *\n * @param {HTMLElement} element - The HTML element to retrieve attributes from.\n * @returns {Object.<string, string>} - An object containing attribute names as keys and their corresponding values as values.\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 {createElementParams} createElement - Specifies an array of JSON data.\n * @param {string} template - that need to convert and generate li element.\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n * @param {FieldsMapping} [fields] - Specifies fields for mapping the dataSource.\n * @param {ListBaseOptions} [options] - Specifies ListBase option for fields.\n * @param {any} [componentInstance] - Specifies component instance.\n * @returns {HTMLElement} - The generated LI element.\n */\n function renderContentTemplate(createElement, template, dataSource, 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 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 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 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 | Function} groupTemplate - that need to convert and generate li element.\n *\n * @param {{Object}[]} groupDataSource - 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 * @param {ListBaseOptions} [options] - Optional ListBase options.\n *\n * @param {*} [componentInstance] - Optional component instance.\n *\n * @returns {Element[]} - An array of header elements with the rendered group template content.\n */\n function renderGroupTemplate(groupTemplate, \n // tslint:disable-next-line\n groupDataSource, fields, headerItems, options, componentInstance) {\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 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 /**\n * Generates a random hexadecimal ID string.\n *\n * @returns {string} - The generated ID string.\n */\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n /**\n * Processes the sub-child elements and creates corresponding elements based on the provided field data and options.\n *\n * @param {Function} createElement - Function for creating elements.\n * @param {Object} fieldData - Field data containing sub-child information.\n * @param {FieldsMapping} fields - Field mappings.\n * @param {Object[]} ds - The data source array containing sub-child elements.\n * @param {ListBaseOptions} options - ListBase options.\n * @param {HTMLElement} element - The parent HTML element to append sub-child elements to.\n * @param {number} level - The level of the sub-child elements.\n * @returns {void}\n */\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 var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n /**\n * Generates a single-level LI (list item) element based on the provided item and field data.\n *\n * @param {Function} createElement - Function for creating elements.\n * @param {string | Object | number} item - The item data.\n * @param {Object} fieldData - Field data mapped from the item.\n * @param {FieldsMapping} [fields] - Field mappings.\n * @param {string} [className] - Optional class name to add to the created LI element.\n * @param {HTMLElement[]} [innerElements] - Optional array of inner elements to append to the LI element.\n * @param {boolean} [grpLI] - Indicates if the LI element is a group item.\n * @param {string} [id] - The ID of the LI element.\n * @param {number} [index] - The index of the LI element.\n * @param {ListBaseOptions} [options] - Optional ListBase options.\n * @returns {HTMLElement} - The generated LI element.\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 if (dataSource && Object.prototype.hasOwnProperty.call(fieldData, 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 if (dataSource && Object.prototype.hasOwnProperty.call(fieldData, 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 /**\n * Returns a set of CSS class names based on the provided module name.\n *\n * @param {string} moduleName - The name of the module.\n * @returns {ClassList} - The CSS class names associated with the module.\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 /**\n * Creates an anchor tag (<a>) element based on the provided data source, fields, and text.\n *\n * @param {Function} createElement - Function for creating elements.\n * @param {object} dataSource - The data source containing URL-related fields.\n * @param {FieldsMapping} fields - Field mappings for the data source.\n * @param {string} text - The text content of the anchor tag.\n * @param {HTMLElement[]} innerElements - Optional array of inner elements to append to the anchor tag.\n * @param {boolean} isFullNavigation - Indicates whether the anchor tag should be for full navigation.\n * @returns {HTMLElement} The created anchor tag element.\n */\n function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n if (Object.prototype.hasOwnProperty.call(fieldData, 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 /**\n * Generates an LI element based on the provided item and field data.\n *\n * @param {Function} createElement - Function for creating elements.\n * @param {string | Object | number} item - The item data.\n * @param {Object} fieldData - Field data mapped from the item.\n * @param {FieldsMapping} fields - Field mappings.\n * @param {string} [className] - Optional class name to add to the created LI element.\n * @param {ListBaseOptions} [options] - Optional ListBase options.\n * @param {*} [componentInstance] - Optional component instance.\n * @returns {HTMLElement} - The generated LI element.\n */\n function generateLI(createElement, item, fieldData, 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 uID = (isNullOrUndefined(fieldData['_id'])) ? fieldData[fields.id] : fieldData['_id'];\n grpLI = (Object.prototype.hasOwnProperty.call(item, '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 var compiledString = compileTemplate(options.groupTemplate);\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\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 var compiledString = compileTemplate(options.template);\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n var compiledElement = compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n }\n else {\n var element = createElement('span', {\n className: cssClass.text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n });\n if (options && options.enableHtmlSanitizer) {\n element.innerText = SanitizeHtmlHelper.sanitize(text);\n }\n else {\n element.innerHTML = text;\n }\n innerDiv.appendChild(element);\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n *\n * @param {Function} createElement - Function for creating elements.\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 * @returns {HTMLElement} - The created UL element.\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 {Function} createElement - Function for creating elements.\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 * @returns {HTMLElement} - The modified LI element.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\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} dataItem - Specifies an JSON or String data.\n *\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n * @returns {Object|string|number} - The retrieved field values.\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}\n/**\n * Compiles a template string or function into a compiled function.\n *\n * @param {string | Function} template - The template string or function to compile.\n * @returns {Function | undefined} - The compiled function, or undefined if the input is false.\n */\nfunction compileTemplate(template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelector(template)) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base, Event, getUniqueID, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { closest, Draggable, remove, compareElementParent } from '@syncfusion/ej2-base';\nimport { addClass, isNullOrUndefined, getComponent, isBlazor, EventHandler } from '@syncfusion/ej2-base';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Sortable Module provides support to enable sortable functionality in Dom Elements.\n * ```html\n * <div id=\"sortable\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * <div>Item 4</div>\n * <div>Item 5</div>\n * </div>\n * ```\n * ```typescript\n * let ele: HTMLElement = document.getElementById('sortable');\n * let sortObj: Sortable = new Sortable(ele, {});\n * ```\n */\nvar Sortable = /** @class */ (function (_super) {\n __extends(Sortable, _super);\n function Sortable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.getHelper = function (e) {\n 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 _this.onDrag = function (e) {\n if (!e.target) {\n return;\n }\n _this.trigger('drag', { event: e.event, element: _this.element, target: e.target });\n var newInst = _this.getSortableInstance(e.target);\n var target = _this.getSortableElement(e.target, newInst);\n if ((_this.isValidTarget(target, newInst) || (e.target && typeof e.target.className === 'string' && e.target.className.indexOf('e-list-group-item') > -1)) && (_this.curTarget !== target ||\n !isNullOrUndefined(newInst.placeHolder)) && (newInst.placeHolderElement ? newInst.placeHolderElement !== e.target : true)) {\n if (e.target.classList.contains('e-list-group-item')) {\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 && typeof e.target.className === 'string' && 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 _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 _this.onDragStop = function (e) {\n var dropInst = _this.getSortableInstance(_this.curTarget);\n var curIdx;\n var prevIdx;\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 curIdx = dropInst.element.childElementCount;\n prevIdx = _this.getIndex(_this.target);\n if (dropInst.element.querySelector('.e-list-nrt')) {\n curIdx = curIdx - 1;\n }\n if (_this.curTarget === _this.target && e.target === _this.curTarget) {\n curIdx = prevIdx;\n }\n if (dropInst.element === e.target || (!isPlaceHolderPresent && _this.curTarget === _this.target)) {\n var beforeDropArgs = {\n previousIndex: prevIdx, currentIndex: 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 || (typeof e.target.className === 'string' && e.target.className.indexOf('e-list-nrt') > -1) || (typeof e.target.className === 'string' && e.target.className.indexOf('e-list-nr-template') > -1)\n || e.target.closest('.e-list-nr-template')) && !observedArgs.cancel) {\n _this.updateItemClass(dropInst);\n dropInst.element.appendChild(_this.target);\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope\n });\n }\n });\n }\n _this.target.classList.remove('e-grabbed');\n _this.target = null;\n _this.curTarget = null;\n remove(e.helper);\n getComponent(_this.element, 'draggable').intDestroy(e.event);\n };\n _this.bind();\n return _this;\n }\n Sortable_1 = Sortable;\n Sortable.prototype.bind = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('sortable');\n }\n if (!this.itemClass) {\n this.itemClass = 'e-sort-item';\n this.dataBind();\n }\n this.initializeDraggable();\n };\n Sortable.prototype.initializeDraggable = function () {\n new Draggable(this.element, {\n helper: this.getHelper,\n dragStart: this.onDragStart,\n drag: this.onDrag,\n dragStop: this.onDragStop,\n dragTarget: \".\" + this.itemClass,\n enableTapHold: true,\n tapHoldThreshold: 200,\n queryPositionInfo: this.queryPositionInfo,\n distance: 1\n });\n this.wireEvents();\n };\n Sortable.prototype.wireEvents = function () {\n var wrapper = this.element;\n EventHandler.add(wrapper, 'keydown', this.keyDownHandler, this);\n };\n Sortable.prototype.unwireEvents = function () {\n var wrapper = this.element;\n EventHandler.remove(wrapper, 'keydown', this.keyDownHandler);\n };\n Sortable.prototype.keyDownHandler = function (e) {\n if (e.keyCode === 27) {\n var dragStop = getComponent(this.element, 'draggable');\n if (dragStop) {\n dragStop.intDestroy(null);\n }\n var dragWrapper = document.getElementsByClassName('e-sortableclone')[0];\n if (dragWrapper) {\n dragWrapper.remove();\n }\n var dragPlaceholder = document.getElementsByClassName('e-sortable-placeholder')[0];\n if (dragPlaceholder) {\n dragPlaceholder.remove();\n }\n }\n };\n Sortable.prototype.getPlaceHolder = function (target, instance) {\n if (instance.placeHolder) {\n var placeHolderElement = instance.placeHolder({ element: instance.element, grabbedElement: this.target, target: target });\n placeHolderElement.classList.add('e-sortable-placeholder');\n return placeHolderElement;\n }\n return null;\n };\n Sortable.prototype.isValidTarget = function (target, instance) {\n return target && compareElementParent(target, instance.element) && target.classList.contains(instance.itemClass) &&\n !target.classList.contains('e-disabled');\n };\n Sortable.prototype.removePlaceHolder = function (instance) {\n remove(instance.placeHolderElement);\n instance.placeHolderElement = null;\n };\n Sortable.prototype.updateItemClass = function (instance) {\n if (this !== instance) {\n this.target.classList.remove(this.itemClass);\n this.target.classList.add(instance.itemClass);\n }\n };\n Sortable.prototype.getSortableInstance = function (element) {\n element = closest(element, \".e-\" + this.getModuleName());\n if (element) {\n var inst = getComponent(element, Sortable_1);\n return inst.scope && this.scope && inst.scope === this.scope ? inst : this;\n }\n else {\n return this;\n }\n };\n Sortable.prototype.refreshDisabled = function (oldIdx, newIdx, instance) {\n if (instance === this) {\n var element = void 0;\n var increased = oldIdx < newIdx;\n var disabledIdx = void 0;\n var start = increased ? oldIdx : newIdx;\n var end = increased ? newIdx : oldIdx;\n while (start <= end) {\n element = this.element.children[start];\n if (element.classList.contains('e-disabled')) {\n disabledIdx = this.getIndex(element);\n this.element.insertBefore(element, this.element.children[increased ? disabledIdx + 2 : disabledIdx - 1]);\n start = increased ? disabledIdx + 2 : disabledIdx + 1;\n }\n else {\n start++;\n }\n }\n }\n };\n Sortable.prototype.getIndex = function (target, instance, e) {\n if (instance === void 0) { instance = this; }\n var idx;\n var placeHolderPresent;\n [].slice.call(instance.element.children).forEach(function (element, index) {\n if (element.classList.contains('e-sortable-placeholder')) {\n placeHolderPresent = true;\n }\n if (element === target) {\n idx = index;\n if (!isNullOrUndefined(e)) {\n if (placeHolderPresent) {\n idx -= 1;\n }\n var offset = target.getBoundingClientRect();\n var clientY = offset.bottom - ((offset.bottom - offset.top) / 2);\n var cltY = e.changedTouches ? e.changedTouches[0].clientY : e.clientY;\n idx = cltY <= clientY ? idx : idx + 1;\n }\n return;\n }\n });\n return idx;\n };\n Sortable.prototype.getSortableElement = function (element, instance) {\n if (instance === void 0) { instance = this; }\n return closest(element, \".\" + instance.itemClass);\n };\n Sortable.prototype.queryPositionInfo = function (value) {\n value.left = pageXOffset ? parseFloat(value.left) - pageXOffset + \"px\" : value.left;\n value.top = pageYOffset ? parseFloat(value.top) - pageYOffset + \"px\" : value.top;\n return value;\n };\n Sortable.prototype.isPlaceHolderPresent = function (instance) {\n return instance.placeHolderElement && !!closest(instance.placeHolderElement, \"#\" + instance.element.id);\n };\n /**\n * It is used to sort array of elements from source element to destination element.\n *\n * @param destination - Defines the destination element to which the sortable elements needs to be appended.\n *\n * If it is null, then the Sortable library element will be considered as destination.\n * @param targetIndexes - Specifies the sortable elements indexes which needs to be sorted.\n * @param insertBefore - Specifies the index before which the sortable elements needs to be appended.\n * If it is null, elements will be appended as last child.\n * @function moveTo\n * @returns {void}\n */\n Sortable.prototype.moveTo = function (destination, targetIndexes, insertBefore) {\n moveTo(this.element, destination, targetIndexes, insertBefore);\n };\n /**\n * It is used to destroy the Sortable library.\n */\n Sortable.prototype.destroy = function () {\n this.unwireEvents();\n if (this.itemClass === 'e-sort-item') {\n this.itemClass = null;\n this.dataBind();\n }\n getComponent(this.element, Draggable).destroy();\n _super.prototype.destroy.call(this);\n };\n Sortable.prototype.getModuleName = function () {\n return 'sortable';\n };\n Sortable.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'itemClass':\n [].slice.call(this.element.children).forEach(function (element) {\n if (element.classList.contains(oldProp.itemClass)) {\n element.classList.remove(oldProp.itemClass);\n }\n if (newProp.itemClass) {\n element.classList.add(newProp.itemClass);\n }\n });\n break;\n }\n }\n };\n var Sortable_1;\n __decorate([\n Property(false)\n ], Sortable.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"itemClass\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"scope\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"helper\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"placeHolder\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDrop\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drop\", void 0);\n Sortable = Sortable_1 = __decorate([\n NotifyPropertyChanges\n ], Sortable);\n return Sortable;\n}(Base));\nexport { Sortable };\n/**\n * It is used to sort array of elements from source element to destination element.\n *\n * @param {HTMLElement} from - The source element from which to move elements.\n * @param {HTMLElement} [to=from] - The destination element to which to move elements. Defaults to the source element.\n * @param {number[]} [targetIndexes] - The indexes of elements to move. If not provided, all children of the source element will be moved.\n * @param {number} [insertBefore] - The index before which to insert the moved elements in the destination element. If not provided, elements will be appended to the end of the destination element.\n * @returns {void}\n * @private\n */\nexport function moveTo(from, to, targetIndexes, insertBefore) {\n var targetElements = [];\n if (!to) {\n to = from;\n }\n if (targetIndexes && targetIndexes.length) {\n targetIndexes.forEach(function (index) {\n targetElements.push(from.children[index]);\n });\n }\n else {\n targetElements = [].slice.call(from.children);\n }\n if (isNullOrUndefined(insertBefore)) {\n targetElements.forEach(function (target) {\n to.appendChild(target);\n });\n }\n else {\n var insertElement_1 = to.children[insertBefore];\n targetElements.forEach(function (target) {\n to.insertBefore(target, insertElement_1);\n });\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined, append, detach, extend } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch, animationMode } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n container: 'e-list-container',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n backButton: 'e-back-button',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist',\n virtualElementContainer: 'e-list-virtualcontainer'\n};\nvar LISTVIEW_TEMPLATE_PROPERTY = 'Template';\nvar LISTVIEW_GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar LISTVIEW_HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar swipeVelocity = 0.5;\n/**\n * Represents the field settings of the ListView.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n * <div id=\"listview\">\n * <ul>\n * <li>Favorite</li>\n * <li>Documents</li>\n * <li>Downloads</li>\n * </ul>\n * </div>\n * ```\n * ```typescript\n * var listviewObject = new ListView({});\n * listviewObject.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n *\n * @param options\n *\n * @param element\n */\n function ListView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousSelectedItems = [];\n _this.hiddenItems = [];\n _this.enabledItems = [];\n _this.disabledItems = [];\n return _this;\n }\n /**\n * @param newProp\n *\n * @param oldProp\n *\n * @private\n */\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n 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 (!isNullOrUndefined(this.htmlAttributes) && Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.clientHeight ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n // Support Component Functions\n ListView.prototype.header = function (text, showBack, prop) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText });\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n innerHeaderEle.innerText = this.headerTitle;\n }\n else {\n innerHeaderEle.innerHTML = this.headerTitle;\n }\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' ' + classNames.backButton,\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\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 if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n if (this.enableHtmlSanitizer) {\n text = SanitizeHtmlHelper.sanitize(text);\n }\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[\"\" + slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n end: function () {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n if (this.template) {\n try {\n if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {\n this.setProperties({ template: document.querySelector(this.template).innerHTML.trim() }, true);\n }\n }\n catch (e) {\n compile(this.template);\n }\n }\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'presentation', wrapperRole: 'presentation'\n },\n fields: (this.fields.properties),\n sortOrder: this.sortOrder,\n showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this),\n templateID: \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,\n groupTemplateID: \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,\n enableHtmlSanitizer: this.enableHtmlSanitizer\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = this.enablePersistence ? this.selectedId : [];\n this.LISTVIEW_TEMPLATE_ID = \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY;\n this.LISTVIEW_GROUPTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY;\n this.LISTVIEW_HEADERTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_HEADERTEMPLATE_PROPERTY;\n this.aniObj = new Animation(this.animateOptions);\n this.removeElement(this.curUL);\n this.removeElement(this.ulElement);\n this.removeElement(this.headerEle);\n this.removeElement(this.contentContainer);\n this.curUL = this.ulElement = this.liCollection = this.headerEle = this.contentContainer = undefined;\n };\n ListView.prototype.renderCheckbox = function (args) {\n var _this = this;\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && args.item.classList.contains(classNames.listItem)) {\n var fieldData_1;\n var checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {\n var index = this.selectedId.findIndex(function (e) { return e === fieldData_1[_this.listBaseOption.fields.id].toString(); });\n if (index !== -1) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (fieldData_1[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n checkboxElement.setAttribute('aria-label', args.text);\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n if (this.checkBoxPosition === 'Left') {\n this.virtualCheckBox = args.item.firstElementChild.children[0];\n }\n else {\n this.virtualCheckBox = args.item.firstElementChild.lastElementChild;\n }\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * Checks the specific list item by passing the unchecked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n if (checked === true) {\n liElement.classList.add(classNames.selected);\n }\n else {\n liElement.classList.remove(classNames.selected);\n }\n if (checked === true) {\n checkboxIcon.classList.add(classNames.checked);\n }\n else {\n checkboxIcon.classList.remove(classNames.checked);\n }\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n this.updateSelectedId();\n }\n };\n /**\n * Uncheck the specific list item by passing the checked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.uncheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * Checks all the unchecked items in the ListView.\n */\n ListView.prototype.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * Uncheck all the checked items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n this.updateSelectedId();\n }\n };\n ListView.prototype.setCheckbox = function () {\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n args.item = element;\n args.curData = this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n this.renderCheckbox(args);\n if (args.item.classList.contains(classNames.selected)) {\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n /**\n * Refresh the height of the list item only on enabling the virtualization property.\n */\n ListView.prototype.refreshItemHeight = function () {\n if (this.virtualizationModule) {\n this.virtualizationModule.refreshItemHeight();\n }\n };\n ListView.prototype.clickHandler = function (e) {\n if (Array.isArray(this.dataSource) && this.dataSource.length === 0) {\n return;\n }\n var target = e.target;\n this.targetElement = target;\n var classList = target.classList;\n var closestElement;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n li.classList.add(classNames.focused);\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n var checkIcon = li.querySelector('.' + classNames.checkboxIcon);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n if ((target.nodeName === 'INPUT') || (target.nodeName === 'TEXTAREA')) {\n target.classList.add('e-focused');\n this.targetElement = target;\n }\n }\n }\n else {\n this.setSelectLI(li, e);\n if ((target.nodeName === 'INPUT') || (target.nodeName === 'TEXTAREA')) {\n target.classList.add('e-focused');\n this.targetElement = target;\n }\n }\n closestElement = closest(e.target, 'li');\n if (!isNullOrUndefined(closestElement)) {\n if (closestElement.classList.contains('e-has-child') &&\n !e.target.parentElement.classList.contains('e-listview-checkbox')) {\n closestElement.classList.add(classNames.disable);\n }\n }\n }\n this.updateSelectedId();\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n ListView.prototype.leaveHandler = function () {\n this.removeHover();\n };\n ListView.prototype.homeKeyHandler = function (e, end) {\n e.preventDefault();\n if (Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelectorAll('.' + classNames.listItem);\n var focusedElement = this.curUL.querySelector('.' + classNames.focused) ||\n this.curUL.querySelector('.' + classNames.selected);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n focusedElement.classList.remove(classNames.selected);\n }\n }\n var index = !end ? 0 : li.length - 1;\n if (li[index].classList.contains(classNames.hasChild) || this.showCheckBox) {\n li[index].classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(li[index], e);\n }\n if (li[index]) {\n this.element.setAttribute('aria-activedescendant', li[index].id.toString());\n }\n else {\n this.element.removeAttribute('aria-activedescendant');\n }\n }\n };\n ListView.prototype.onArrowKeyDown = function (e, prev) {\n var siblingLI;\n var li;\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n if (hasChild || this.showCheckBox) {\n li = this.curUL.querySelector('.' + classNames.focused) || this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n if (!isNullOrUndefined(siblingLI)) {\n if (li) {\n li.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n li.classList.remove(classNames.selected);\n }\n }\n if (siblingLI.classList.contains(classNames.hasChild) || this.showCheckBox) {\n siblingLI.classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(siblingLI, e);\n }\n }\n }\n else {\n li = this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n this.setSelectLI(siblingLI, e);\n }\n if (siblingLI) {\n this.element.setAttribute('aria-activedescendant', siblingLI.id.toString());\n }\n else {\n this.element.removeAttribute('aria-activedescendant');\n }\n return siblingLI;\n };\n ListView.prototype.arrowKeyHandler = function (e, prev) {\n var _this = this;\n e.preventDefault();\n if (Object.keys(this.dataSource).length && this.curUL) {\n var siblingLI = this.onArrowKeyDown(e, prev);\n var elementTop = this.element.getBoundingClientRect().top;\n var elementHeight = this.element.getBoundingClientRect().height;\n var firstItemBounds = this.curUL.querySelector('.' + classNames.listItem).getBoundingClientRect();\n var heightDiff = void 0;\n var groupItemBounds = void 0;\n if (this.fields.groupBy) {\n groupItemBounds = this.curUL.querySelector('.' + classNames.groupListItem).getBoundingClientRect();\n }\n if (siblingLI) {\n var siblingTop = siblingLI.getBoundingClientRect().top;\n var siblingHeight = siblingLI.getBoundingClientRect().height;\n if (!prev) {\n var height = this.isWindow ? window.innerHeight : elementHeight;\n heightDiff = this.isWindow ? (siblingTop + siblingHeight) :\n ((siblingTop - elementTop) + siblingHeight);\n if (heightDiff > height) {\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + (heightDiff - height));\n }\n else {\n this.element.scrollTop = this.element.scrollTop + (heightDiff - height);\n }\n }\n }\n else {\n heightDiff = this.isWindow ? siblingTop : (siblingTop - elementTop);\n if (heightDiff < 0) {\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop + heightDiff;\n }\n }\n }\n }\n else if (this.enableVirtualization && prev && this.virtualizationModule.uiFirstIndex) {\n this.onUIScrolled = function () {\n _this.onArrowKeyDown(e, prev);\n _this.onUIScrolled = undefined;\n };\n heightDiff = this.virtualizationModule.listItemHeight;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset - heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop - heightDiff;\n }\n }\n else if (prev) {\n if (this.showHeader && this.headerEle) {\n var topHeight = groupItemBounds ? groupItemBounds.top : firstItemBounds.top;\n var headerBounds = this.headerEle.getBoundingClientRect();\n heightDiff = headerBounds.top < 0 ? (headerBounds.height - topHeight) : 0;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset - heightDiff);\n }\n else {\n this.element.scrollTop = 0;\n }\n }\n else if (this.fields.groupBy) {\n heightDiff = this.isWindow ? (groupItemBounds.top < 0 ? groupItemBounds.top : 0) :\n (elementTop - firstItemBounds.top) + groupItemBounds.height;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop - heightDiff;\n }\n }\n }\n }\n };\n ListView.prototype.enterKeyHandler = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (hasChild && li) {\n li.classList.remove(classNames.focused);\n if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n e.preventDefault();\n var li = this.curUL.querySelector('.' + classNames.focused);\n var checkboxElement = void 0;\n var checkIcon = void 0;\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n checkboxElement = args.item.querySelector('.' + classNames.checkboxWrapper);\n this.checkInternally(args, checkboxElement);\n checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n }\n else {\n this.uncheckItem(li);\n }\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon ? checkIcon.classList.contains(classNames.checked) : false });\n this.trigger('select', eventArgs);\n this.updateSelectedId();\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 32:\n if (isNullOrUndefined(this.targetElement) || !(this.targetElement.classList.contains('e-focused'))) {\n this.spaceKeyHandler(e);\n }\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right' && e.velocity > swipeVelocity && e.originalEvent.type === 'touchend') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox && !isNullOrUndefined(this.selectedLI)) {\n this.selectedLI.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n if (!isNullOrUndefined(this.scroll)) {\n EventHandler.add(this.element, 'scroll', this.onListScroll, this);\n }\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'keydown', this.keyActionHandler);\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 EventHandler.remove(this.element, 'focusout', this.focusout);\n if (!isNullOrUndefined(this.scroll)) {\n EventHandler.remove(this.element, 'scroll', this.onListScroll);\n }\n if (this.touchModule)\n this.touchModule.destroy();\n this.touchModule = null;\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n var textAreaFocus = li.querySelector('textarea') || li.querySelector('input');\n li.classList.add(classNames.focused);\n if (!isNullOrUndefined(e)) {\n if (e.target === textAreaFocus) {\n textAreaFocus.classList.add('e-focused');\n }\n }\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (!isNullOrUndefined(data)\n && typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li && li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem =\n {\n item: li, text: fieldData && fieldData[this.listBaseOption.fields.text],\n data: data\n };\n }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, {\n isInteracted: true,\n event: e,\n cancel: false,\n index: this.curUL && Array.prototype.indexOf.call(this.curUL.children, li)\n });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\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 text: fieldData && fieldData[this.listBaseOption.fields.text],\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n var _this = this;\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.selectedLI = li;\n _this.renderSubList(li);\n }\n });\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n 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 = 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 if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n }\n else if (Object.prototype.hasOwnProperty.call(fieldData, _this.fields.child) &&\n 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 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 if (Object.prototype.hasOwnProperty.call(this.fields.properties, '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 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 if (this.dataSource instanceof DataManager) {\n if (this.dataSource.ready) {\n this.dataSource.ready.then(function (e) {\n _this.isOffline = _this.dataSource.dataSource.offline;\n if (_this.dataSource instanceof DataManager && _this.isOffline) {\n _this.renderRemoteLists(e, _this);\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, _this);\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 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[parseInt(i.toString(), 10)];\n if (element.classList.contains('e-list-item')) {\n element.setAttribute('id', this.element.id + '_' + element.getAttribute('data-uid'));\n element.setAttribute('tabindex', '-1');\n }\n }\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.createElement, this.curViewDS, this.listBaseOption, null, this);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(this.liCollection);\n };\n ListView.prototype.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 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 this.header((fieldData[this.listBaseOption.fields.text]), true, 'header');\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization) {\n if (Object.keys(this.dataSource).length) {\n if ((this.template || this.groupTemplate) && !this.virtualizationModule.isNgTemplate()) {\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = this.createElement('div', { className: classNames.container });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * Initializes the ListView component rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n this.renderComplete();\n this.previousScrollTop = this.element.scrollTop;\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\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 ? this.cssClass.split(' ').filter(function (css) { return css; }) : []);\n removeClass([this.element], classAr);\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n this.element.innerHTML = '';\n this.contentContainer = null;\n this.selectedItems = null;\n this.selectedLI = null;\n this.liElement = null;\n this.targetElement = null;\n this.currentLiElements = null;\n this.virtualCheckBox = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Switches back from the navigated sub list item.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.remove(classNames.disable);\n li.classList.add(classNames.focused);\n if (!(this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked))) {\n li.classList.remove(classNames.selected);\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false), 'header');\n };\n /**\n * Selects the list item from the ListView by passing the elements or field object.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (item) {\n if (this.enableVirtualization) {\n this.virtualizationModule.selectItem(item);\n }\n else if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(item));\n }\n else {\n if (isNullOrUndefined(item) === true) {\n this.removeSelect();\n }\n else {\n this.setSelectLI(this.getLiFromObjOrElement(item));\n }\n }\n };\n /**\n * This method allows for deselecting a list item within the ListView. The item to be deselected can be specified by passing the element or field object.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass an element Object or Fields as an Object with ID and Text fields.\n */\n ListView.prototype.unselectItem = function (item) {\n if (isNullOrUndefined(item)) {\n this.removeSelect();\n }\n else {\n var li = this.getLiFromObjOrElement(item);\n if (!isNullOrUndefined(li)) {\n this.removeSelect(li);\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[parseInt(i.toString(), 10)].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[parseInt(i.toString(), 10)];\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 if (curLi[parseInt(i.toString(), 10)].innerText.trim() ===\n fieldData[this.fields.text]) {\n li = curLi[parseInt(i.toString(), 10)];\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[parseInt(i.toString(), 10)])) {\n this.selectItem(item[parseInt(i.toString(), 10)]);\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[parseInt(i.toString(), 10)]);\n }\n }\n return parentId;\n };\n ListView.prototype.updateSelectedId = function () {\n this.selectedId = [];\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n for (var i = 0; i < liCollection.length; i++) {\n var tempData = this.getItemData(liCollection[parseInt(i.toString(), 10)]);\n if (!isNullOrUndefined(tempData) && tempData[this.listBaseOption.fields.id]) {\n this.selectedId.push(tempData[this.listBaseOption.fields.id]);\n }\n }\n };\n /**\n * Gets the details of the currently selected item from the list items.\n *\n */\n ListView.prototype.getSelectedItems = function () {\n 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 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[parseInt(i.toString(), 10)].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[parseInt(i.toString(), 10)]);\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 liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\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 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 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 resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * Adds the new list item(s) to the current ListView.\n * To add a new list item(s) in the ListView, we need to pass the `data` as an array of items that need\n * to be added and `fields` as the target item to which we need to add the given item(s) as its children.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {{Object}[]} data - JSON Array Data that need to add.\n *\n * @param {Fields} fields - Target item to add the given data as its children (can be null).\n *\n * @param {number} index - Indicates the index where the data to be added.\n */\n ListView.prototype.addItem = function (data, fields, index) {\n if (fields === void 0) { fields = undefined; }\n var dataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n this.addItemInternally(data, fields, dataSource, index);\n };\n ListView.prototype.addItemInternally = function (data, fields, dataSource, index) {\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields, dataSource, index);\n }\n else {\n var ds = this.findItemFromDS(dataSource, fields);\n var child = void 0;\n if (ds) {\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n }\n // check for whether target is nested level or top level in list\n if (ds instanceof Array) {\n for (var i = 0; i < data.length; i++) {\n dataSource = this.addItemAtIndex(index, dataSource, data[parseInt(i.toString(), 10)]);\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[parseInt(i.toString(), 10)], targetUL, this.curViewDS);\n }\n else {\n this.reRender();\n }\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n // proceed as target item is in nested level, only if it is a valid target ds\n if (ds) {\n ds[this.fields.child] = child;\n this.addItemInNestedList(ds, data);\n }\n }\n }\n }\n };\n ListView.prototype.addItemAtIndex = function (index, newDataSource, itemData) {\n var isIndexValid = !(isNullOrUndefined(index)) && index >= 0 &&\n index < newDataSource.length && isNullOrUndefined(this.listBaseOption.fields.groupBy);\n if (isIndexValid) {\n newDataSource.splice(index, 0, itemData);\n }\n else {\n newDataSource.push(itemData);\n }\n return newDataSource;\n };\n ListView.prototype.addItemInNestedList = function (targetItemData, itemQueue) {\n 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 // 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 }\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[parseInt(i.toString(), 10)]);\n this.addItemIntoDom(itemQueue[parseInt(i.toString(), 10)], targetUL, targetDS);\n }\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 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 = this.findItemFromDS(listDataSource, fields, true);\n if (dataSource) {\n var 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 var foundData = (dataSource.length - 1) <= 0\n ? this.findParent(this.localData, this.fields.id, 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[parseInt(i.toString(), 10)]);\n }\n }\n };\n ListView.prototype.findParent = function (dataSource, id, callback, parent) {\n if (Object.prototype.hasOwnProperty.call(dataSource, 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)[parseInt(i.toString(), 10)]]\n && typeof dataSource[Object.keys(dataSource)[parseInt(i.toString(), 10)]] === 'object') {\n var result = this.findParent(dataSource[Object.keys(dataSource)[parseInt(i.toString(), 10)]], 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', name: 'Virtualization' });\n }\n return modules;\n };\n ListView.prototype.onListScroll = function (e) {\n var args = { originalEvent: e, scrollDirection: 'Bottom', distanceY: this.element.scrollHeight - this.element.scrollTop };\n var currentScrollTop = this.element.scrollTop;\n if (currentScrollTop > this.previousScrollTop) {\n args.scrollDirection = 'Bottom';\n args.distanceY = this.element.scrollHeight - this.element.clientHeight - this.element.scrollTop;\n this.trigger('scroll', args);\n }\n else if (this.previousScrollTop > currentScrollTop) {\n args.scrollDirection = 'Top';\n args.distanceY = this.element.scrollTop;\n this.trigger('scroll', args);\n }\n this.previousScrollTop = currentScrollTop;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition', 'selectedId']);\n };\n __decorate([\n Property('')\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property(true)\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 __decorate([\n Event()\n ], ListView.prototype, \"scroll\", 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, compile, formatUnit, select } from '@syncfusion/ej2-base';\nimport { ListBase } from '../common/list-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nvar listElementCount = 1.5;\nvar windowElementCount = 3;\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.elementDifference = 0;\n this.listViewInstance = instance;\n }\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.isNgTemplate = function () {\n return !isNullOrUndefined(this.listViewInstance.templateRef) && typeof this.listViewInstance.templateRef !== 'string';\n };\n /**\n * Checks if the platform is a Vue and its template property is a function type.\n *\n * @returns {boolean} indicating the result of the check\n */\n Virtualization.prototype.isVueFunctionTemplate = function () {\n return this.listViewInstance.isVue && typeof this.listViewInstance.template === 'function';\n };\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.uiVirtualization = function () {\n this.wireScrollEvent(false);\n var curViewDS = this.listViewInstance.curViewDS;\n var firstDs = curViewDS.slice(0, 1);\n this.listViewInstance.ulElement = this.listViewInstance.curUL = ListBase.createList(this.listViewInstance.createElement, firstDs, this.listViewInstance.listBaseOption, null, this.listViewInstance);\n this.listViewInstance.contentContainer = this.listViewInstance.createElement('div', { className: classNames.container });\n this.listViewInstance.element.appendChild(this.listViewInstance.contentContainer);\n this.listViewInstance.contentContainer.appendChild(this.listViewInstance.ulElement);\n this.listItemHeight = this.listViewInstance.ulElement.firstElementChild.getBoundingClientRect().height;\n this.expectedDomItemCount = this.ValidateItemCount(10000);\n this.domItemCount = this.ValidateItemCount(Object.keys(this.listViewInstance.curViewDS).length);\n this.uiFirstIndex = 0;\n this.uiLastIndex = this.domItemCount - 1;\n var otherDs = curViewDS.slice(1, this.domItemCount);\n var listItems = ListBase.createListItemFromJson(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 }\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 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 if (!isNullOrUndefined(data[parseInt(i.toString(), 10)][this.listViewInstance.fields.enabled]) &&\n !data[i][this.listViewInstance.fields.enabled]) {\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 () {\n var _a;\n var startingHeight;\n var curViewDS = this.listViewInstance.curViewDS;\n this.listItemHeight = select('.e-list-item', this.listViewInstance.element).getBoundingClientRect().height;\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\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 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 element.dataset.uid = (curViewDs[parseInt(index.toString(), 10)][this.listViewInstance.fields.id]) ?\n (curViewDs[parseInt(index.toString(), 10)][this.listViewInstance.fields.id]) : ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n (curViewDs[parseInt(index.toString(), 10)][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 curViewDS = this.listViewInstance.curViewDS[index];\n var iconCss = curViewDS[this.listViewInstance.fields.iconCss].toString();\n var target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' + 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 if (this.listViewInstance.checkBoxPosition === 'Left') {\n textContent.classList.add('e-checkbox-left');\n }\n else {\n textContent.classList.add('e-checkbox-right');\n }\n textContent.append(this.checkListWrapper.cloneNode(true));\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 fields[_this.listViewInstance.fields.id]\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 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 dataCollection.push(curViewDS_2[indexArray[parseInt(i.toString(), 10)]]);\n }\n var dataSource_1 = this.listViewInstance.dataSource instanceof DataManager\n ? curViewDS_2 : this.listViewInstance.dataSource;\n return {\n text: textCollection,\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 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 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 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 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 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 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 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 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 var resutJSON = this.findDSAndIndexFromId(curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n dataSource = resutJSON.data;\n if (curViewDS[resutJSON.index - 1] &&\n curViewDS[resutJSON.index - 1].isHeader &&\n (curViewDS[resutJSON.index - 1])\n .items.length === 1) {\n this.removeUiItem(resutJSON.index - 1);\n this.removeUiItem(resutJSON.index - 1);\n }\n else {\n this.removeUiItem(resutJSON.index);\n }\n }\n var listDataSource = this.listViewInstance.dataSource instanceof DataManager\n ? this.listViewInstance.localData : this.listViewInstance.dataSource;\n var index = listDataSource.indexOf(dataSource);\n if (index !== -1) {\n listDataSource.splice(index, 1);\n this.listViewInstance.setViewDataSource(listDataSource);\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n };\n // eslint-disable-next-line\n Virtualization.prototype.setCheckboxLI = function (li, e) {\n var index = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n if (li.classList.contains(classNames.selected)) {\n if (this.uiIndices.activeIndices.indexOf(index) === -1) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n else {\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n }\n };\n // eslint-disable-next-line\n Virtualization.prototype.setSelectLI = function (li, e) {\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n };\n Virtualization.prototype.checkedItem = function (checked) {\n if (checked) {\n this.uiIndices.activeIndices = [];\n this.activeIndex = undefined;\n var data = this.listViewInstance.curViewDS;\n for (var index = 0; index < data.length; index++) {\n if (!data[index].isHeader) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n }\n else {\n this.activeIndex = undefined;\n this.uiIndices.activeIndices = [];\n }\n };\n Virtualization.prototype.addUiItem = function (index) {\n // virtually new add list item based on the scollbar position\n // if the scroll bar is at the top, just pretend the new item has been added since no UI\n // change is required for the item that has been added at last but when scroll bar is at the bottom\n // just detach top and inject into bottom to mimic new item is added\n var curViewDs = this.listViewInstance.curViewDS;\n this.changeUiIndices(index, true);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex++;\n }\n if (this.listViewInstance.showCheckBox &&\n curViewDs[index][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(index);\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n }\n if (parseFloat(this.bottomElement.style.height)) {\n var liItem = this.listViewInstance.curUL.lastElementChild.previousSibling;\n var target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n if (target) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n this.updateUI(liItem, index, target);\n }\n }\n else {\n var liItem = this.listViewInstance.curUL.firstElementChild.nextSibling;\n var target = void 0;\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n }\n this.topElement.style.height = parseFloat(this.topElement.style.height) + this.listItemHeight + 'px';\n this.uiFirstIndex++;\n this.uiLastIndex++;\n if (target) {\n this.updateUI(liItem, index, target);\n if (this.listViewInstance.isWindow === true) {\n window.scrollTo(0, (pageYOffset + this.listItemHeight));\n }\n else {\n this.listViewInstance.element.scrollTop += this.listItemHeight;\n }\n }\n }\n this.totalHeight += this.listItemHeight;\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.removeUiItem = function (index) {\n this.totalHeight -= this.listItemHeight;\n var curViewDS = this.listViewInstance.curViewDS[index];\n var liItem = this.listViewInstance.getLiFromObjOrElement(curViewDS);\n this.listViewInstance.curViewDS.splice(index, 1);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex--;\n }\n if (liItem) {\n if (this.domItemCount > Object.keys(this.listViewInstance.curViewDS).length) {\n detach(liItem);\n this.domItemCount--;\n this.uiLastIndex--;\n this.totalHeight = 0;\n }\n else {\n if (liItem.classList.contains(classNames.disable)) {\n liItem.classList.remove(classNames.disable);\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(index), 1);\n }\n if (liItem.style.display === 'none') {\n liItem.style.display = '';\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(index), 1);\n }\n if (this.listViewInstance.showCheckBox && liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n var checklistElement = liItem.querySelector('.' + classNames.checkboxWrapper);\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n if (liItem.classList.contains(classNames.focused)) {\n liItem.classList.remove(classNames.focused);\n this.activeIndex = undefined;\n }\n }\n else if (liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else if (parseFloat(this.bottomElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else {\n this.topElement.style.height = parseFloat(this.topElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, (this.uiFirstIndex - 1), this.topElement.nextSibling);\n this.uiLastIndex--;\n this.uiFirstIndex--;\n }\n }\n }\n this.changeUiIndices(index, false);\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.changeUiIndices = function (index, increment) {\n var keys = Object.keys(this.uiIndices);\n for (var ind = 0; ind < keys.length; ind++) {\n this.uiIndices[keys[ind]] = this.uiIndices[keys[ind]].map(function (i) {\n if (i >= index) {\n return increment ? ++i : --i;\n }\n else {\n return i;\n }\n });\n }\n };\n Virtualization.prototype.addItem = function (data, fields, dataSource, index) {\n for (var i = 0; i < data.length; i++) {\n var currentItem = data[i];\n // push the given data to main data array\n dataSource = this.listViewInstance.addItemAtIndex(index, dataSource, currentItem);\n // recalculate all the group data or other datasource related things\n this.listViewInstance.setViewDataSource(dataSource);\n // render list items for first time due to no datasource present earlier\n if (!this.domItemCount) {\n // fresh rendering for first time\n if ((this.listViewInstance.template || this.listViewInstance.groupTemplate) && !this.isNgTemplate()) {\n this.listViewInstance.listBaseOption.template = null;\n this.listViewInstance.listBaseOption.groupTemplate = null;\n this.listViewInstance.listBaseOption.itemCreated = this.createUIItem.bind(this);\n }\n this.uiVirtualization();\n // when expected expected DOM count doesn't meet the condition we need to create and inject new item into DOM\n }\n else if (this.domItemCount < this.expectedDomItemCount) {\n var ds = this.listViewInstance.findItemFromDS(dataSource, fields);\n if (ds instanceof Array) {\n if (this.listViewInstance.ulElement) {\n var index_1 = this.listViewInstance.curViewDS.indexOf(currentItem);\n // inject new list item into DOM\n this.createAndInjectNewItem(currentItem, index_1);\n // check for group header item\n var curViewDS = this.listViewInstance.curViewDS[index_1 - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n // target group item index in datasource\n --index_1;\n // inject new group header into DOM for previously created list item\n this.createAndInjectNewItem(curViewDS, index_1);\n }\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n }\n }\n else {\n var index_2 = this.listViewInstance.curViewDS.indexOf(currentItem);\n // virtually new add list item based on the scollbar position\n this.addUiItem(index_2);\n // check for group header item needs to be added\n var curViewDS = this.listViewInstance.curViewDS[index_2 - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n this.addUiItem(index_2 - 1);\n }\n }\n }\n };\n Virtualization.prototype.createAndInjectNewItem = function (itemData, index) {\n // generate li item for given datasource\n var target;\n var li = ListBase.createListItemFromJson(this.listViewInstance.createElement, [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\n && this.listViewInstance.curViewDS[index + 1]\n && 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 if (!args.item.classList.contains('e-list-group-item')) {\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\n if (this.listViewInstance.showCheckBox) {\n this.listViewInstance.renderCheckbox(args);\n if ((!isNullOrUndefined(this.listViewInstance.virtualCheckBox)) &&\n (!isNullOrUndefined(this.listViewInstance.virtualCheckBox.outerHTML))) {\n var div_1 = document.createElement('div');\n var commonTemplate = '<div class=\"e-text-content\" role=\"presentation\"> ' +\n '<span class=\"e-list-text\"> ${' + this.listViewInstance.fields.text + '} </span></div>';\n var templateFunction = compile(this.listViewInstance.template || commonTemplate, this.listViewInstance);\n var nodes = templateFunction(this.templateData, this.listViewInstance);\n if (this.listViewInstance.template && this.listViewInstance.isReact) {\n this.listViewInstance.renderReactTemplates();\n }\n [].slice.call(nodes).forEach(function (ele) {\n div_1.appendChild(ele);\n });\n if (div_1.children && div_1.children[0]) {\n div_1.children[0].classList.add('e-checkbox');\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div_1.children[0].classList.add('e-checkbox-left');\n }\n else {\n div_1.children[0].classList.add('e-checkbox-right');\n }\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div_1.children[0].insertBefore(this.listViewInstance.virtualCheckBox, div_1.childNodes[0].children[0]);\n }\n else {\n div_1.children[0].appendChild(this.listViewInstance.virtualCheckBox);\n }\n while (args.item.lastChild) {\n args.item.removeChild(args.item.lastChild);\n }\n [].slice.call(div_1.children).forEach(function (ele) {\n args.item.appendChild(ele);\n });\n }\n }\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 var onChange = this.isNgTemplate() ? this.onNgChange : this.onChange;\n if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {\n var curViewDS = this.listViewInstance.curViewDS[index];\n element.dataset.uid = (curViewDS[this.listViewInstance.fields.id]) ?\n (curViewDS[this.listViewInstance.fields.id]) : ListBase.generateId();\n onChange(curViewDS, element, this);\n }\n else {\n this.updateUiContent(element, index);\n }\n this.changeElementAttributes(element, index);\n if (targetElement) {\n this.listViewInstance.ulElement.insertBefore(element, targetElement);\n }\n };\n /**\n * Handles the UI change in vue for the list view.\n *\n * @param {DataSource} newData - The new data source for the list view.\n * @param {ElementContext} listElement - The HTML element context for the list view.\n * @param {Virtualization} virtualThis - The virtualization context for the list view.\n * @returns {void}\n */\n Virtualization.prototype.onChange = function (newData, listElement, virtualThis) {\n var liItem = ListBase.createListItemFromJson(virtualThis.listViewInstance.createElement, [newData], virtualThis.listViewInstance.listBaseOption, null, null, virtualThis.listViewInstance);\n if (virtualThis.listViewInstance.isReact) {\n virtualThis.listViewInstance.renderReactTemplates();\n }\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n [].slice.call(liItem[0].children).forEach(function (ele) {\n listElement.appendChild(ele);\n });\n };\n Virtualization.prototype.onNgChange = function (newData, listElement, virtualThis) {\n // compile given target element with template for new data\n var templateCompiler = compile(virtualThis.listViewInstance.template);\n var resultElement = templateCompiler(newData);\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n listElement.appendChild(resultElement[0]);\n };\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n Virtualization.prototype.destroy = function () {\n this.wireScrollEvent(true);\n this.topElement = null;\n this.bottomElement = null;\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import * as index from './index';\nindex.ListView.Inject(index.Virtualization);\nexport * from './index';\n"],"names":["getFieldValues","dataItem","fields","fieldData","isNullOrUndefined","isHeader","_i","_a","Object","keys","length","dataField","value","undefined","getValue","compileTemplate","template","document","querySelector","compile","innerHTML","trim","e","moveTo","from","to","targetIndexes","insertBefore","targetElements","forEach","index","push","children","slice","call","target","appendChild","insertElement_1","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","prototype","hasOwnProperty","curItem","innerEle","showCheckBox","itemNavigable","urlAttributes","className","attrs","showIcon","iconCss","itemClass","prepend","firstElementChild","classList","add","setAttribute","toString","groupItemRole","itemRole","removeAttribute","tooltip","tooltipText","enableHtmlSanitizer","SanitizeHtmlHelper","sanitize","tooltipTextElement","innerText","htmlAttributes","enabled","isVisible","style","display","imageUrl","attr","src","alt","name","merge","imageAttributes","imageElemnt","insertAdjacentElement","iconElement","processSubChild","addClass","listClass","getSiblingLI","elementArray","element","isPrevious","siblingLI","liIndex","liCollections","Array","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","currentID","groupTemplateID","templateID","compiledElement","isStringTemplate","append","renderGroupTemplate","groupTemplate","headerItems","category","headerItems_1","header","headerData","Math","floor","random","substring","subDS","hasChildren","subLi","expandCollapse","expandIconPosition","expandIconClass","innerElements","grpLI","elementID","href","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","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","container","backIcon","backButton","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","virtualElementContainer","FieldSettings","_super","apply","Property","ChildProperty","ListView","_this","previousSelectedItems","hiddenItems","enabledItems","disabledItems","onPropertyChanged","newProp","oldProp","setHTMLAttribute","setCSSClass","setEnable","setSize","setEnableRTL","listBaseOption","properties","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","detach","refresh","setCheckbox","curViewDS","getSubDS","resetCurrentList","oldCSSClass","filter","css","removeClass","height","formatUnit","width","isWindow","clientHeight","enableElement","enable","enableRtl","isEnabled","showBack","prop","headerEle","showHeader","innerHeaderEle","setProperties","textEle","outerHTML","hedBackButton","headerTemplateEle","LISTVIEW_HEADERTEMPLATE_ID","isReact","renderReactTemplates","parentElement","switchView","fromView","toView","reverse","fPos_1","position","overflow_1","overflow","anim","duration","animation","effect","aniObj","animate","animationMode","timingFunction","easing","end","trigger","curUL","preRender","renderCheckbox","bind","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","enablePersistence","LISTVIEW_TEMPLATE_ID","LISTVIEW_GROUPTEMPLATE_ID","Animation","removeElement","args","fieldData_1","createCheckBox","frameElement_1","findIndex","checkInternally","checkBoxPosition","virtualCheckBox","lastElementChild","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","updateSelectedId","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","getItemData","selectedItems","refreshItemHeight","clickHandler","isArray","targetElement","closestElement","back","closest","parentNode","removeFocus","isValidLI","setCheckboxLI","eventArgs","selectEventData","removeHover","removeSelect","setSelectLI","removeChild","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","preventDefault","focusedElement","onArrowKeyDown","prev","arrowKeyHandler","elementTop","getBoundingClientRect","top","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","window","scroll","pageYOffset","scrollTop","innerHeight","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","enterKeyHandler","spaceKeyHandler","keyActionHandler","keyCode","swipeActionHandler","swipeDirection","velocity","originalEvent","focusout","selectedLI","wireEvents","EventHandler","touchModule","Touch","swipe","onListScroll","unWireEvents","destroy","focusedLI_1","hoverLI","selectedLI_1","ele","textAreaFocus","renderSubList","selectedItem","isInteracted","event","cancel","observedArgs","lastLi","levelKeys","localData","levelKeys_1","field","curDSJSON","findItemFromDS","curDS","getElementUID","parent","resultJSON","some","getQuery","columns","column","select","tableName","setViewDataSource","fieldValue","isInAnimation","renderRemoteLists","listViewComponent","isDestroyed","result","renderList","triggerActionFailure","setLocalData","ready","then","isOffline","offline","catch","executeQuery","clearTemplate","renderIntoDom","setAttributes","liElements","parseInt","getAttribute","lists","isNgTemplate","createUIItem","uiVirtualization","obj","Element","render","tabindex","rippleFn","rippleEffect","selector","renderComplete","previousScrollTop","classAr","concat","pID","pop","toUL","fromUL","selectItem","unselectItem","uid","selectMultipleItems","getParentId","parentId","getElementsByClassName","tempData","getSelectedItems","finalValue","isCompleted","liTextCollection","liDataCollection","dataParent","findItem","enableItem","setItemState","disableItem","isEnable","showItem","showHideItem","hideItem","isHide","addItem","addItemInternally","addItemAtIndex","targetUL","addItemIntoDom","addItemInNestedList","newDataSource","itemData","targetItemData","itemQueue","targetItemId","targetChildDS","isAlreadyRenderedUL","targetLi","targetDS","targetRefreshedElement","currentItem","addListItem","curItemDS","targetEle","nextElementSibling","removeItem","listDataSource","removeItemFromList","data_1","groupLi","validateNestedView","previousElementSibling","foundData","findParent","dsIndex","parentLi","li_1","liID","toLowerCase","removeMultipleItems","callback","requiredModules","modules","member","scrollDirection","distanceY","scrollHeight","currentScrollTop","getPersistData","addOnPersist","Complex","Event","NotifyPropertyChanges","Component","Virtualization","instance","elementDifference","listViewInstance","templateRef","isVueFunctionTemplate","isVue","wireScrollEvent","firstDs","expectedDomItemCount","ValidateItemCount","domItemCount","uiLastIndex","otherDs","listItems","topElement","bottomElement","totalHeight","topElementHeight","bottomElementHeight","listDiff","uiIndicesInitialization","removeEventListener","onVirtualScroll","updateUl","onVirtualUiScroll","addEventListener","dataSourceLength","itemCount","parseFloat","round","uiIndices","activeIndices","disabledItemIndices","hiddenItemIndices","context","viewContainerRef","get","nextSibling","getscrollerHeight","startingHeight","documentElement","scrollPosition","onLongScroll","onNormalScroll","isScrollingDown","elements","updateUI","updateUiContent","curViewDs","dataset","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection","textCollection","curViewDS_1","indices","map","curViewDS_2","indexArray","dataSource_1","resutJSON","isSelected","removeUiItem","addUiItem","changeUiIndices","liItem","previousSibling","scrollTo","increment","ind","index_1","createAndInjectNewItem","index_2","templateData","div_1","commonTemplate","nodes","lastChild","onChange","onNgChange","newData","listElement","virtualThis","resultElement","Sortable","getHelper","getSortableElement","sender","isValidTarget","helper","offsetWidth","offsetHeight","body","onDrag","newInst","getSortableInstance","curTarget","placeHolder","placeHolderElement","scope","oldIdx","getIndex","getPlaceHolder","newIdx","isPlaceHolderPresent","childElementCount","refreshDisabled","idx","updateItemClass","droppedElement","previousIndex","currentIndex","removePlaceHolder","inst_1","onDragStart","cancelDrag","onDragStop","isBlazor","bindEvents","dragElement","curIdx","prevIdx","handled","dropInst","curIdx_1","curIdx_2","scopeName","beforeDropArgs","getComponent","intDestroy","Sortable_1","getUniqueID","dataBind","initializeDraggable","Draggable","dragStart","drag","dragStop","dragTarget","enableTapHold","tapHoldThreshold","queryPositionInfo","distance","wrapper","keyDownHandler","unwireEvents","dragWrapper","dragPlaceholder","grabbedElement","compareElementParent","inst","increased","disabledIdx","start","placeHolderPresent","offset","clientY","bottom","cltY","changedTouches","left","pageXOffset","destination","Base","Inject","index.Virtualization"],"mappings":"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"}
|