@syncfusion/ej2-lists 24.1.41 → 24.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-lists.umd.min.js","sources":["../src/common/list-base.js","../src/sortable/sortable.js","../src/list-view/list-view.js","../src/list-view/virtualization.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 = SanitizeHtmlHelper.sanitize(fieldData[fields.tooltip]);\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 (htmlAttributes.hasOwnProperty('class') && 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.className.indexOf('e-list-group-item') > -1) && (_this.curTarget !== target ||\n !isNullOrUndefined(newInst.placeHolder)) && (newInst.placeHolderElement ? newInst.placeHolderElement !== e.target : true)) {\n if (e.target.className.indexOf('e-list-group-item') > -1) {\n target = e.target;\n }\n _this.curTarget = target;\n if (_this.target === target) {\n return;\n }\n var oldIdx = _this.getIndex(newInst.placeHolderElement, newInst);\n var placeHolder = _this.getPlaceHolder(target, newInst);\n var newIdx = void 0;\n if (placeHolder) {\n oldIdx = isNullOrUndefined(oldIdx) ? _this.getIndex(_this.target) : oldIdx;\n newIdx = _this.getIndex(target, newInst, e.event);\n var isPlaceHolderPresent = _this.isPlaceHolderPresent(newInst);\n if (isPlaceHolderPresent && oldIdx === newIdx) {\n return;\n }\n if (isPlaceHolderPresent) {\n remove(newInst.placeHolderElement);\n }\n newInst.placeHolderElement = placeHolder;\n if (e.target.className.indexOf('e-list-group-item') > -1) {\n newInst.element.insertBefore(newInst.placeHolderElement, newInst.element.children[newIdx]);\n }\n else if (newInst.element !== _this.element && newIdx === newInst.element.childElementCount) {\n newInst.element.appendChild(newInst.placeHolderElement);\n }\n else {\n newInst.element.insertBefore(newInst.placeHolderElement, newInst.element.children[newIdx]);\n }\n _this.refreshDisabled(oldIdx, newIdx, newInst);\n }\n else {\n oldIdx = isNullOrUndefined(oldIdx) ? _this.getIndex(_this.target) :\n _this.getIndex(target, newInst) < oldIdx || !oldIdx ? oldIdx : oldIdx - 1;\n newIdx = _this.getIndex(target, newInst);\n var idx = newInst.element !== _this.element ? newIdx : oldIdx < newIdx ? newIdx + 1 : newIdx;\n _this.updateItemClass(newInst);\n newInst.element.insertBefore(_this.target, newInst.element.children[idx]);\n _this.refreshDisabled(oldIdx, newIdx, newInst);\n _this.curTarget = _this.target;\n _this.trigger('drop', {\n droppedElement: _this.target, element: newInst.element, previousIndex: oldIdx, currentIndex: newIdx,\n target: e.target, helper: document.getElementsByClassName('e-sortableclone')[0], event: e.event, scope: _this.scope\n });\n }\n }\n else if (_this.curTarget !== _this.target && _this.scope && _this.curTarget !== target && !isNullOrUndefined(newInst.placeHolder)) {\n remove(_this.getSortableInstance(_this.curTarget).placeHolderElement);\n _this.curTarget = _this.target;\n }\n newInst = _this.getSortableInstance(_this.curTarget);\n if (isNullOrUndefined(target) && e.target !== newInst.placeHolderElement) {\n if (_this.isPlaceHolderPresent(newInst)) {\n _this.removePlaceHolder(newInst);\n }\n }\n else {\n var placeHolders = [].slice.call(document.getElementsByClassName('e-sortable-placeholder'));\n var inst_1;\n placeHolders.forEach(function (placeHolder) {\n inst_1 = _this.getSortableInstance(placeHolder);\n if (inst_1.element && inst_1 !== newInst) {\n _this.removePlaceHolder(inst_1);\n }\n });\n }\n };\n // eslint-disable-next-line\n _this.onDragStart = function (e) {\n _this.target = _this.getSortableElement(e.target);\n var cancelDrag = false;\n _this.target.classList.add('e-grabbed');\n _this.curTarget = _this.target;\n e.helper = document.getElementsByClassName('e-sortableclone')[0];\n var args = { cancel: false, element: _this.element, target: _this.target };\n _this.trigger('beforeDragStart', args, function (observedArgs) {\n if (observedArgs.cancel) {\n cancelDrag = observedArgs.cancel;\n _this.onDragStop(e);\n }\n });\n if (cancelDrag) {\n return;\n }\n if (isBlazor) {\n _this.trigger('dragStart', {\n event: e.event, element: _this.element, target: _this.target,\n bindEvents: e.bindEvents, dragElement: e.dragElement\n });\n }\n else {\n _this.trigger('dragStart', { event: e.event, element: _this.element, target: _this.target });\n }\n };\n // eslint-disable-next-line\n _this.onDragStop = function (e) {\n var dropInst = _this.getSortableInstance(_this.curTarget);\n var prevIdx;\n var curIdx;\n var handled;\n prevIdx = _this.getIndex(_this.target);\n var isPlaceHolderPresent = _this.isPlaceHolderPresent(dropInst);\n if (isPlaceHolderPresent) {\n var curIdx_1 = _this.getIndex(dropInst.placeHolderElement, dropInst);\n var args = {\n previousIndex: prevIdx, currentIndex: curIdx_1, target: e.target, droppedElement: _this.target,\n helper: e.helper, cancel: false, handled: false\n };\n _this.trigger('beforeDrop', args, function (observedArgs) {\n if (!observedArgs.cancel) {\n handled = observedArgs.handled;\n _this.updateItemClass(dropInst);\n if (observedArgs.handled) {\n var ele = _this.target.cloneNode(true);\n _this.target.classList.remove('e-grabbed');\n _this.target = ele;\n }\n dropInst.element.insertBefore(_this.target, dropInst.placeHolderElement);\n var curIdx_2 = _this.getIndex(_this.target, dropInst);\n prevIdx = _this === dropInst && (prevIdx - curIdx_2) > 1 ? prevIdx - 1 : prevIdx;\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx_2,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope, handled: handled\n });\n }\n remove(dropInst.placeHolderElement);\n });\n }\n dropInst = _this.getSortableInstance(e.target);\n // eslint-disable-next-line prefer-const\n curIdx = dropInst.element.childElementCount;\n prevIdx = _this.getIndex(_this.target);\n if (dropInst.element === e.target || (!isPlaceHolderPresent && _this.curTarget === _this.target)) {\n var beforeDropArgs = {\n previousIndex: prevIdx, currentIndex: _this.curTarget === _this.target ? prevIdx : curIdx,\n target: e.target, droppedElement: _this.target, helper: e.helper, cancel: false\n };\n _this.trigger('beforeDrop', beforeDropArgs, function (observedArgs) {\n if ((dropInst.element === e.target || e.target.className.indexOf('e-list-nrt') > -1 || e.target.className.indexOf('e-list-nr-template') > -1\n || e.target.closest('.e-list-nr-template')) && !observedArgs.cancel) {\n _this.updateItemClass(dropInst);\n dropInst.element.appendChild(_this.target);\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope\n });\n }\n });\n }\n _this.target.classList.remove('e-grabbed');\n _this.target = null;\n _this.curTarget = null;\n remove(e.helper);\n getComponent(_this.element, 'draggable').intDestroy(e.event);\n };\n _this.bind();\n return _this;\n }\n Sortable_1 = Sortable;\n Sortable.prototype.bind = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('sortable');\n }\n if (!this.itemClass) {\n this.itemClass = 'e-sort-item';\n this.dataBind();\n }\n this.initializeDraggable();\n };\n Sortable.prototype.initializeDraggable = function () {\n new Draggable(this.element, {\n helper: this.getHelper,\n dragStart: this.onDragStart,\n drag: this.onDrag,\n dragStop: this.onDragStop,\n dragTarget: \".\" + this.itemClass,\n enableTapHold: true,\n tapHoldThreshold: 200,\n queryPositionInfo: this.queryPositionInfo,\n distance: 1\n });\n this.wireEvents();\n };\n Sortable.prototype.wireEvents = function () {\n var wrapper = this.element;\n EventHandler.add(wrapper, 'keydown', this.keyDownHandler, this);\n };\n Sortable.prototype.unwireEvents = function () {\n var wrapper = this.element;\n EventHandler.remove(wrapper, 'keydown', this.keyDownHandler);\n };\n Sortable.prototype.keyDownHandler = function (e) {\n if (e.keyCode === 27) {\n var dragStop = getComponent(this.element, 'draggable');\n if (dragStop) {\n dragStop.intDestroy(null);\n }\n var dragWrapper = document.getElementsByClassName('e-sortableclone')[0];\n if (dragWrapper) {\n dragWrapper.remove();\n }\n var dragPlaceholder = document.getElementsByClassName('e-sortable-placeholder')[0];\n if (dragPlaceholder) {\n dragPlaceholder.remove();\n }\n }\n };\n Sortable.prototype.getPlaceHolder = function (target, instance) {\n if (instance.placeHolder) {\n var placeHolderElement = instance.placeHolder({ element: instance.element, grabbedElement: this.target, target: target });\n placeHolderElement.classList.add('e-sortable-placeholder');\n return placeHolderElement;\n }\n return null;\n };\n Sortable.prototype.isValidTarget = function (target, instance) {\n return target && compareElementParent(target, instance.element) && target.classList.contains(instance.itemClass) &&\n !target.classList.contains('e-disabled');\n };\n Sortable.prototype.removePlaceHolder = function (instance) {\n remove(instance.placeHolderElement);\n instance.placeHolderElement = null;\n };\n Sortable.prototype.updateItemClass = function (instance) {\n if (this !== instance) {\n this.target.classList.remove(this.itemClass);\n this.target.classList.add(instance.itemClass);\n }\n };\n Sortable.prototype.getSortableInstance = function (element) {\n element = closest(element, \".e-\" + this.getModuleName());\n if (element) {\n var inst = getComponent(element, Sortable_1);\n return inst.scope && this.scope && inst.scope === this.scope ? inst : this;\n }\n else {\n return this;\n }\n };\n Sortable.prototype.refreshDisabled = function (oldIdx, newIdx, instance) {\n if (instance === this) {\n var element = void 0;\n var increased = oldIdx < newIdx;\n var disabledIdx = void 0;\n var start = increased ? oldIdx : newIdx;\n var end = increased ? newIdx : oldIdx;\n while (start <= end) {\n element = this.element.children[start];\n if (element.classList.contains('e-disabled')) {\n disabledIdx = this.getIndex(element);\n this.element.insertBefore(element, this.element.children[increased ? disabledIdx + 2 : disabledIdx - 1]);\n start = increased ? disabledIdx + 2 : disabledIdx + 1;\n }\n else {\n start++;\n }\n }\n }\n };\n Sortable.prototype.getIndex = function (target, instance, e) {\n if (instance === void 0) { instance = this; }\n var idx;\n var placeHolderPresent;\n [].slice.call(instance.element.children).forEach(function (element, index) {\n if (element.classList.contains('e-sortable-placeholder')) {\n placeHolderPresent = true;\n }\n if (element === target) {\n idx = index;\n if (!isNullOrUndefined(e)) {\n if (placeHolderPresent) {\n idx -= 1;\n }\n var offset = target.getBoundingClientRect();\n var clientY = offset.bottom - ((offset.bottom - offset.top) / 2);\n var cltY = e.changedTouches ? e.changedTouches[0].clientY : e.clientY;\n idx = cltY <= clientY ? idx : idx + 1;\n }\n return;\n }\n });\n return idx;\n };\n Sortable.prototype.getSortableElement = function (element, instance) {\n if (instance === void 0) { instance = this; }\n return closest(element, \".\" + instance.itemClass);\n };\n Sortable.prototype.queryPositionInfo = function (value) {\n value.left = pageXOffset ? parseFloat(value.left) - pageXOffset + \"px\" : value.left;\n value.top = pageYOffset ? parseFloat(value.top) - pageYOffset + \"px\" : value.top;\n return value;\n };\n Sortable.prototype.isPlaceHolderPresent = function (instance) {\n return instance.placeHolderElement && !!closest(instance.placeHolderElement, \"#\" + instance.element.id);\n };\n /**\n * It is used to sort array of elements from source element to destination element.\n *\n * @param destination - Defines the destination element to which the sortable elements needs to be appended.\n *\n * If it is null, then the Sortable library element will be considered as destination.\n * @param targetIndexes - Specifies the sortable elements indexes which needs to be sorted.\n * @param insertBefore - Specifies the index before which the sortable elements needs to be appended.\n * If it is null, elements will be appended as last child.\n * @function moveTo\n * @returns {void}\n */\n Sortable.prototype.moveTo = function (destination, targetIndexes, insertBefore) {\n moveTo(this.element, destination, targetIndexes, insertBefore);\n };\n /**\n * It is used to destroy the Sortable library.\n */\n Sortable.prototype.destroy = function () {\n this.unwireEvents();\n if (this.itemClass === 'e-sort-item') {\n this.itemClass = null;\n this.dataBind();\n }\n getComponent(this.element, Draggable).destroy();\n _super.prototype.destroy.call(this);\n };\n Sortable.prototype.getModuleName = function () {\n return 'sortable';\n };\n Sortable.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'itemClass':\n [].slice.call(this.element.children).forEach(function (element) {\n if (element.classList.contains(oldProp.itemClass)) {\n element.classList.remove(oldProp.itemClass);\n }\n if (newProp.itemClass) {\n element.classList.add(newProp.itemClass);\n }\n });\n break;\n }\n }\n };\n var Sortable_1;\n __decorate([\n Property(false)\n ], Sortable.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"itemClass\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"scope\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"helper\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"placeHolder\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDrop\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drop\", void 0);\n Sortable = Sortable_1 = __decorate([\n NotifyPropertyChanges\n ], Sortable);\n return Sortable;\n}(Base));\nexport { Sortable };\n/**\n * It is used to sort array of elements from source element to destination element.\n *\n * @private\n */\nexport function moveTo(from, to, targetIndexes, insertBefore) {\n var targetElements = [];\n if (!to) {\n to = from;\n }\n if (targetIndexes && targetIndexes.length) {\n targetIndexes.forEach(function (index) {\n targetElements.push(from.children[index]);\n });\n }\n else {\n targetElements = [].slice.call(from.children);\n }\n if (isNullOrUndefined(insertBefore)) {\n targetElements.forEach(function (target) {\n to.appendChild(target);\n });\n }\n else {\n var insertElement_1 = to.children[insertBefore];\n targetElements.forEach(function (target) {\n to.insertBefore(target, insertElement_1);\n });\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined, append, detach, extend } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch, animationMode } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n container: 'e-list-container',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n backButton: 'e-back-button',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist',\n virtualElementContainer: 'e-list-virtualcontainer'\n};\nvar LISTVIEW_TEMPLATE_PROPERTY = 'Template';\nvar LISTVIEW_GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar LISTVIEW_HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar swipeVelocity = 0.5;\n/**\n * Represents the field settings of the ListView.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n * <div id=\"listview\">\n * <ul>\n * <li>Favorite</li>\n * <li>Documents</li>\n * <li>Downloads</li>\n * </ul>\n * </div>\n * ```\n * ```typescript\n * var listviewObject = new ListView({});\n * listviewObject.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n *\n * @param options\n *\n * @param element\n */\n function ListView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousSelectedItems = [];\n _this.hiddenItems = [];\n _this.enabledItems = [];\n _this.disabledItems = [];\n return _this;\n }\n /**\n * @param newProp\n *\n * @param oldProp\n *\n * @private\n */\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n // eslint-disable-next-line\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false, 'header');\n }\n break;\n case 'query':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false, 'header');\n break;\n case 'enableVirtualization':\n if (!isNullOrUndefined(this.contentContainer)) {\n detach(this.contentContainer);\n }\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'template':\n if (!this.enableVirtualization) {\n this.refresh();\n }\n break;\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.clientHeight ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n // Support Component Functions\n ListView.prototype.header = function (text, showBack, prop) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText });\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n innerHeaderEle.innerText = this.headerTitle;\n }\n else {\n innerHeaderEle.innerHTML = this.headerTitle;\n }\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' ' + classNames.backButton,\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n // eslint-disable-next-line\n var compiledElement = compiledString({}, this, prop, this.LISTVIEW_HEADERTEMPLATE_ID, null, null, this.headerEle);\n if (compiledElement) {\n append(compiledElement, headerTemplateEle);\n }\n append([headerTemplateEle], this.headerEle);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n if (this.enableHtmlSanitizer) {\n text = SanitizeHtmlHelper.sanitize(text);\n }\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[\"\" + slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n // eslint-disable-next-line\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n if (this.template) {\n try {\n if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {\n this.setProperties({ template: document.querySelector(this.template).innerHTML.trim() }, true);\n }\n }\n catch (e) {\n compile(this.template);\n }\n }\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'presentation', wrapperRole: 'presentation'\n },\n // eslint-disable-next-line\n fields: (this.fields.properties),\n sortOrder: this.sortOrder,\n showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this),\n templateID: \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,\n groupTemplateID: \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,\n enableHtmlSanitizer: this.enableHtmlSanitizer\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = this.enablePersistence ? this.selectedId : [];\n this.LISTVIEW_TEMPLATE_ID = \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY;\n this.LISTVIEW_GROUPTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY;\n this.LISTVIEW_HEADERTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_HEADERTEMPLATE_PROPERTY;\n this.aniObj = new Animation(this.animateOptions);\n this.removeElement(this.curUL);\n this.removeElement(this.ulElement);\n this.removeElement(this.headerEle);\n this.removeElement(this.contentContainer);\n this.curUL = this.ulElement = this.liCollection = this.headerEle = this.contentContainer = undefined;\n };\n ListView.prototype.renderCheckbox = function (args) {\n var _this = this;\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData_1;\n // eslint-disable-next-line prefer-const\n checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {\n var index = this.selectedId.findIndex(function (e) { return e === fieldData_1[_this.listBaseOption.fields.id].toString(); });\n if (index !== -1) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (fieldData_1[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n checkboxElement.setAttribute('aria-label', 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 e.preventDefault();\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelector('.' + classNames.focused);\n var checkboxElement = void 0;\n var checkIcon = void 0;\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n checkboxElement = args.item.querySelector('.' + classNames.checkboxWrapper);\n this.checkInternally(args, checkboxElement);\n checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n }\n else {\n this.uncheckItem(li);\n }\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon ? checkIcon.classList.contains(classNames.checked) : false });\n this.trigger('select', eventArgs);\n this.updateSelectedId();\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 32:\n if (isNullOrUndefined(this.targetElement) || !(this.targetElement.classList.contains('e-focused'))) {\n this.spaceKeyHandler(e);\n }\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right' && e.velocity > swipeVelocity && e.originalEvent.type === 'touchend') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox && !isNullOrUndefined(this.selectedLI)) {\n this.selectedLI.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n 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, '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 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, { isInteracted: true, event: e, cancel: false, index: this.curUL && Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n // eslint-disable-next-line\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n // eslint-disable-next-line\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n var _this = this;\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.selectedLI = li;\n _this.renderSubList(li);\n }\n });\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n // eslint-disable-next-line\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = \n // eslint-disable-next-line\n getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n // eslint-disable-next-line\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n // eslint-disable-next-line\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n // eslint-disable-next-line\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[\"\" + column]) &&\n this.fields[\"\" + column] !==\n ListBase.defaultMappedFields[\"\" + column]\n && columns.indexOf(this.fields[\"\" + column]) === -1) {\n columns.push(this.fields[\"\" + column]);\n }\n }\n query.select(columns);\n // eslint-disable-next-line\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n // eslint-disable-next-line\n var fieldValue = (isNullOrUndefined(this.fields.sortBy)) ? this.fields.text : this.fields.sortBy;\n var query = ListBase.addSorting(this.sortOrder, fieldValue);\n if (dataSource && this.fields.groupBy) {\n if (this.sortOrder !== 'None') {\n this.curViewDS = ListBase.groupDataSource(ListBase.getDataSource(dataSource, query), this.listBaseOption.fields, this.sortOrder);\n }\n else {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.fields, this.sortOrder);\n }\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, query);\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.renderRemoteLists = function (e, listViewComponent) {\n if (this.isDestroyed) {\n return;\n }\n this.localData = e.result;\n listViewComponent.removeElement(listViewComponent.contentContainer);\n this.renderList();\n this.trigger('actionComplete', e);\n };\n ListView.prototype.triggerActionFailure = function (e) {\n if (this.isDestroyed) {\n return;\n }\n this.trigger('actionFailure', e);\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n // eslint-disable-next-line\n var listViewComponent = this;\n if (this.dataSource instanceof DataManager) {\n if (this.dataSource.ready) {\n this.dataSource.ready.then(function (e) {\n /* eslint-disable */\n _this.isOffline = _this.dataSource.dataSource.offline;\n if (_this.dataSource instanceof DataManager && _this.isOffline) {\n _this.renderRemoteLists(e, listViewComponent);\n }\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n else {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n _this.renderRemoteLists(e, listViewComponent);\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.removeElement(this.headerEle);\n this.removeElement(this.ulElement);\n this.removeElement(this.contentContainer);\n 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 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' });\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(false)\n ], ListView.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n __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 target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' +\n this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]\n });\n textContent.insertBefore(target, element.querySelector('.' + classNames.listItemText));\n }\n }\n if (this.listViewInstance.showCheckBox && this.listViewInstance.fields.groupBy) {\n if (!this.checkListWrapper) {\n this.checkListWrapper = this.listViewInstance.curUL.querySelector('.' + classNames.checkboxWrapper).cloneNode(true);\n }\n var textContent = element.querySelector('.' + classNames.textContent);\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.remove(classNames.checklist);\n textContent.classList.remove(classNames.checkbox);\n detach(element.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n else {\n if (!element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.add(classNames.checklist);\n textContent.classList.add(classNames.checkbox);\n 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 && this.listViewInstance.curViewDS[index + 1] && this.listViewInstance.curViewDS[index + 1].isHeader) {\n var targetEle = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n // insert before the target element\n this.listViewInstance.ulElement.insertBefore(li[0], target);\n // increment internal DOM count, last index count for new element\n this.domItemCount++;\n if (this.bottomElementHeight <= 0) {\n this.uiLastIndex++;\n }\n // recalculate the current item height, to avoid jumpy scroller\n this.refreshItemHeight();\n };\n Virtualization.prototype.createUIItem = function (args) {\n 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 */\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"],"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","createListFromArray","createElement","dataSource","isSingleLevel","options","componentInstance","generateUL","createListItemFromArray","subChild","curOpt","extend","defaultListBaseOptions","cssClass","getModuleClass","moduleName","id","generateId","i","itemCreating","curData","generateSingleLevelLI","generateLI","itemCreated","item","createListItemFromJson","getModuleName","defaultMappedFields","ariaAttributes","defaultAriaAttributes","checkboxElement","anchorElement","child","typeofData","hasOwnProperty","curItem","innerEle","showCheckBox","itemNavigable","urlAttributes","className","attrs","type","showIcon","iconCss","itemClass","prepend","firstElementChild","classList","add","setAttribute","toString","groupItemRole","itemRole","removeAttribute","tooltip","tooltipText","SanitizeHtmlHelper","sanitize","htmlAttributes","enabled","isVisible","style","display","imageUrl","attr","src","merge","imageAttributes","imageElemnt","insertAdjacentElement","iconElement","ds","element","subDS","hasChildren","processSubChild","subLi","createListFromJson","expandCollapse","expandElement","expandIconPosition","append","expandIconClass","addClass","listClass","indexOf","elementArray","Array","prototype","addSorting","sortOrder","sortBy","query","Query","queries","fn","splice","getDataSource","DataManager","executeLocal","createJsonFromElement","curEle","cloneNode","jsonAr","childs","querySelectorAll","remove","anchor","json","childNodes","i_1","Number","hasChildNodes","attributes_1","getAllAttributes","data","match","typeof","elementAttributes","class","split","attributes","nodeName","nodeValue","Math","floor","random","substring","innerElements","grpLI","elementID","role","innerText","href","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","enableHtmlSanitizer","groupTemplate","compiledString","compiledElement","groupTemplateID","isStringTemplate","templateID","innerDiv","wrapperRole","itemText","liElement","ulElement","listRole","isChecked","groupBy","headerTemplate","createList","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","contains","groupDataSource","curFields","cusQuery","j","itemObj","items","grpItem","key","newtext","_id","k","renderContentTemplate","liCollection","currentID","renderGroupTemplate","headerItems","category","headerItems_1","header","headerData","generateIcon","__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","LISTVIEW_GROUPTEMPLATE_PROPERTY","FieldSettings","_super","apply","Property","ChildProperty","ListView","_this","previousSelectedItems","hiddenItems","enabledItems","disabledItems","onPropertyChanged","newProp","oldProp","setHTMLAttribute","setCSSClass","setEnable","setSize","setEnableRTL","listBaseOption","properties","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","detach","refresh","setCheckbox","curViewDS","getSubDS","resetCurrentList","oldCSSClass","filter","css","removeClass","height","formatUnit","width","isWindow","clientHeight","enableElement","enable","enableRtl","isEnabled","showBack","prop","headerEle","showHeader","innerHeaderEle","setProperties","textEle","outerHTML","hedBackButton","headerTemplateEle","LISTVIEW_HEADERTEMPLATE_ID","isReact","renderReactTemplates","parentElement","switchView","fromView","toView","reverse","fPos_1","position","overflow_1","overflow","anim","duration","animation","effect","aniObj","animate","name","animationMode","timingFunction","easing","end","model","trigger","curUL","preRender","renderCheckbox","bind","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","enablePersistence","LISTVIEW_TEMPLATE_ID","LISTVIEW_GROUPTEMPLATE_ID","Animation","removeElement","args","isValidLI","fieldData_1","createCheckBox","frameElement_1","findIndex","checkInternally","checkBoxPosition","virtualCheckBox","lastElementChild","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","updateSelectedId","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","getItemData","selectedItems","refreshItemHeight","clickHandler","isArray","targetElement","closestElement","back","closest","parentNode","removeFocus","setCheckboxLI","eventArgs","selectEventData","removeHover","removeSelect","setSelectLI","removeChild","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","preventDefault","focusedElement","onArrowKeyDown","prev","arrowKeyHandler","elementTop","getBoundingClientRect","top","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","window","scroll","pageYOffset","scrollTop","innerHeight","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","enterKeyHandler","spaceKeyHandler","keyActionHandler","keyCode","swipeActionHandler","swipeDirection","velocity","originalEvent","focusout","selectedLI","wireEvents","EventHandler","touchModule","Touch","swipe","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","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","templateFunction","lastChild","onChange","onNgChange","newData","listElement","virtualThis","resultElement","templateCompiler","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"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-lists.umd.min.js","sources":["../src/common/list-base.js","../src/sortable/sortable.js","../src/list-view/list-view.js","../src/list-view/virtualization.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 (htmlAttributes.hasOwnProperty('class') && 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.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.className.indexOf('e-list-group-item') > -1) {\n newInst.element.insertBefore(newInst.placeHolderElement, newInst.element.children[newIdx]);\n }\n else if (newInst.element !== _this.element && newIdx === newInst.element.childElementCount) {\n newInst.element.appendChild(newInst.placeHolderElement);\n }\n else {\n newInst.element.insertBefore(newInst.placeHolderElement, newInst.element.children[newIdx]);\n }\n _this.refreshDisabled(oldIdx, newIdx, newInst);\n }\n else {\n oldIdx = isNullOrUndefined(oldIdx) ? _this.getIndex(_this.target) :\n _this.getIndex(target, newInst) < oldIdx || !oldIdx ? oldIdx : oldIdx - 1;\n newIdx = _this.getIndex(target, newInst);\n var idx = newInst.element !== _this.element ? newIdx : oldIdx < newIdx ? newIdx + 1 : newIdx;\n _this.updateItemClass(newInst);\n newInst.element.insertBefore(_this.target, newInst.element.children[idx]);\n _this.refreshDisabled(oldIdx, newIdx, newInst);\n _this.curTarget = _this.target;\n _this.trigger('drop', {\n droppedElement: _this.target, element: newInst.element, previousIndex: oldIdx, currentIndex: newIdx,\n target: e.target, helper: document.getElementsByClassName('e-sortableclone')[0], event: e.event, scope: _this.scope\n });\n }\n }\n else if (_this.curTarget !== _this.target && _this.scope && _this.curTarget !== target && !isNullOrUndefined(newInst.placeHolder)) {\n remove(_this.getSortableInstance(_this.curTarget).placeHolderElement);\n _this.curTarget = _this.target;\n }\n newInst = _this.getSortableInstance(_this.curTarget);\n if (isNullOrUndefined(target) && e.target !== newInst.placeHolderElement) {\n if (_this.isPlaceHolderPresent(newInst)) {\n _this.removePlaceHolder(newInst);\n }\n }\n else {\n var placeHolders = [].slice.call(document.getElementsByClassName('e-sortable-placeholder'));\n var inst_1;\n placeHolders.forEach(function (placeHolder) {\n inst_1 = _this.getSortableInstance(placeHolder);\n if (inst_1.element && inst_1 !== newInst) {\n _this.removePlaceHolder(inst_1);\n }\n });\n }\n };\n // eslint-disable-next-line\n _this.onDragStart = function (e) {\n _this.target = _this.getSortableElement(e.target);\n var cancelDrag = false;\n _this.target.classList.add('e-grabbed');\n _this.curTarget = _this.target;\n e.helper = document.getElementsByClassName('e-sortableclone')[0];\n var args = { cancel: false, element: _this.element, target: _this.target };\n _this.trigger('beforeDragStart', args, function (observedArgs) {\n if (observedArgs.cancel) {\n cancelDrag = observedArgs.cancel;\n _this.onDragStop(e);\n }\n });\n if (cancelDrag) {\n return;\n }\n if (isBlazor) {\n _this.trigger('dragStart', {\n event: e.event, element: _this.element, target: _this.target,\n bindEvents: e.bindEvents, dragElement: e.dragElement\n });\n }\n else {\n _this.trigger('dragStart', { event: e.event, element: _this.element, target: _this.target });\n }\n };\n // eslint-disable-next-line\n _this.onDragStop = function (e) {\n var dropInst = _this.getSortableInstance(_this.curTarget);\n var prevIdx;\n var curIdx;\n var handled;\n prevIdx = _this.getIndex(_this.target);\n var isPlaceHolderPresent = _this.isPlaceHolderPresent(dropInst);\n if (isPlaceHolderPresent) {\n var curIdx_1 = _this.getIndex(dropInst.placeHolderElement, dropInst);\n var args = {\n previousIndex: prevIdx, currentIndex: curIdx_1, target: e.target, droppedElement: _this.target,\n helper: e.helper, cancel: false, handled: false\n };\n _this.trigger('beforeDrop', args, function (observedArgs) {\n if (!observedArgs.cancel) {\n handled = observedArgs.handled;\n _this.updateItemClass(dropInst);\n if (observedArgs.handled) {\n var ele = _this.target.cloneNode(true);\n _this.target.classList.remove('e-grabbed');\n _this.target = ele;\n }\n dropInst.element.insertBefore(_this.target, dropInst.placeHolderElement);\n var curIdx_2 = _this.getIndex(_this.target, dropInst);\n prevIdx = _this === dropInst && (prevIdx - curIdx_2) > 1 ? prevIdx - 1 : prevIdx;\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx_2,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope, handled: handled\n });\n }\n remove(dropInst.placeHolderElement);\n });\n }\n dropInst = _this.getSortableInstance(e.target);\n // eslint-disable-next-line prefer-const\n curIdx = dropInst.element.childElementCount;\n prevIdx = _this.getIndex(_this.target);\n if (dropInst.element === e.target || (!isPlaceHolderPresent && _this.curTarget === _this.target)) {\n var beforeDropArgs = {\n previousIndex: prevIdx, currentIndex: _this.curTarget === _this.target ? prevIdx : curIdx,\n target: e.target, droppedElement: _this.target, helper: e.helper, cancel: false\n };\n _this.trigger('beforeDrop', beforeDropArgs, function (observedArgs) {\n if ((dropInst.element === e.target || e.target.className.indexOf('e-list-nrt') > -1 || e.target.className.indexOf('e-list-nr-template') > -1\n || e.target.closest('.e-list-nr-template')) && !observedArgs.cancel) {\n _this.updateItemClass(dropInst);\n dropInst.element.appendChild(_this.target);\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope\n });\n }\n });\n }\n _this.target.classList.remove('e-grabbed');\n _this.target = null;\n _this.curTarget = null;\n remove(e.helper);\n getComponent(_this.element, 'draggable').intDestroy(e.event);\n };\n _this.bind();\n return _this;\n }\n Sortable_1 = Sortable;\n Sortable.prototype.bind = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('sortable');\n }\n if (!this.itemClass) {\n this.itemClass = 'e-sort-item';\n this.dataBind();\n }\n this.initializeDraggable();\n };\n Sortable.prototype.initializeDraggable = function () {\n new Draggable(this.element, {\n helper: this.getHelper,\n dragStart: this.onDragStart,\n drag: this.onDrag,\n dragStop: this.onDragStop,\n dragTarget: \".\" + this.itemClass,\n enableTapHold: true,\n tapHoldThreshold: 200,\n queryPositionInfo: this.queryPositionInfo,\n distance: 1\n });\n this.wireEvents();\n };\n Sortable.prototype.wireEvents = function () {\n var wrapper = this.element;\n EventHandler.add(wrapper, 'keydown', this.keyDownHandler, this);\n };\n Sortable.prototype.unwireEvents = function () {\n var wrapper = this.element;\n EventHandler.remove(wrapper, 'keydown', this.keyDownHandler);\n };\n Sortable.prototype.keyDownHandler = function (e) {\n if (e.keyCode === 27) {\n var dragStop = getComponent(this.element, 'draggable');\n if (dragStop) {\n dragStop.intDestroy(null);\n }\n var dragWrapper = document.getElementsByClassName('e-sortableclone')[0];\n if (dragWrapper) {\n dragWrapper.remove();\n }\n var dragPlaceholder = document.getElementsByClassName('e-sortable-placeholder')[0];\n if (dragPlaceholder) {\n dragPlaceholder.remove();\n }\n }\n };\n Sortable.prototype.getPlaceHolder = function (target, instance) {\n if (instance.placeHolder) {\n var placeHolderElement = instance.placeHolder({ element: instance.element, grabbedElement: this.target, target: target });\n placeHolderElement.classList.add('e-sortable-placeholder');\n return placeHolderElement;\n }\n return null;\n };\n Sortable.prototype.isValidTarget = function (target, instance) {\n return target && compareElementParent(target, instance.element) && target.classList.contains(instance.itemClass) &&\n !target.classList.contains('e-disabled');\n };\n Sortable.prototype.removePlaceHolder = function (instance) {\n remove(instance.placeHolderElement);\n instance.placeHolderElement = null;\n };\n Sortable.prototype.updateItemClass = function (instance) {\n if (this !== instance) {\n this.target.classList.remove(this.itemClass);\n this.target.classList.add(instance.itemClass);\n }\n };\n Sortable.prototype.getSortableInstance = function (element) {\n element = closest(element, \".e-\" + this.getModuleName());\n if (element) {\n var inst = getComponent(element, Sortable_1);\n return inst.scope && this.scope && inst.scope === this.scope ? inst : this;\n }\n else {\n return this;\n }\n };\n Sortable.prototype.refreshDisabled = function (oldIdx, newIdx, instance) {\n if (instance === this) {\n var element = void 0;\n var increased = oldIdx < newIdx;\n var disabledIdx = void 0;\n var start = increased ? oldIdx : newIdx;\n var end = increased ? newIdx : oldIdx;\n while (start <= end) {\n element = this.element.children[start];\n if (element.classList.contains('e-disabled')) {\n disabledIdx = this.getIndex(element);\n this.element.insertBefore(element, this.element.children[increased ? disabledIdx + 2 : disabledIdx - 1]);\n start = increased ? disabledIdx + 2 : disabledIdx + 1;\n }\n else {\n start++;\n }\n }\n }\n };\n Sortable.prototype.getIndex = function (target, instance, e) {\n if (instance === void 0) { instance = this; }\n var idx;\n var placeHolderPresent;\n [].slice.call(instance.element.children).forEach(function (element, index) {\n if (element.classList.contains('e-sortable-placeholder')) {\n placeHolderPresent = true;\n }\n if (element === target) {\n idx = index;\n if (!isNullOrUndefined(e)) {\n if (placeHolderPresent) {\n idx -= 1;\n }\n var offset = target.getBoundingClientRect();\n var clientY = offset.bottom - ((offset.bottom - offset.top) / 2);\n var cltY = e.changedTouches ? e.changedTouches[0].clientY : e.clientY;\n idx = cltY <= clientY ? idx : idx + 1;\n }\n return;\n }\n });\n return idx;\n };\n Sortable.prototype.getSortableElement = function (element, instance) {\n if (instance === void 0) { instance = this; }\n return closest(element, \".\" + instance.itemClass);\n };\n Sortable.prototype.queryPositionInfo = function (value) {\n value.left = pageXOffset ? parseFloat(value.left) - pageXOffset + \"px\" : value.left;\n value.top = pageYOffset ? parseFloat(value.top) - pageYOffset + \"px\" : value.top;\n return value;\n };\n Sortable.prototype.isPlaceHolderPresent = function (instance) {\n return instance.placeHolderElement && !!closest(instance.placeHolderElement, \"#\" + instance.element.id);\n };\n /**\n * It is used to sort array of elements from source element to destination element.\n *\n * @param destination - Defines the destination element to which the sortable elements needs to be appended.\n *\n * If it is null, then the Sortable library element will be considered as destination.\n * @param targetIndexes - Specifies the sortable elements indexes which needs to be sorted.\n * @param insertBefore - Specifies the index before which the sortable elements needs to be appended.\n * If it is null, elements will be appended as last child.\n * @function moveTo\n * @returns {void}\n */\n Sortable.prototype.moveTo = function (destination, targetIndexes, insertBefore) {\n moveTo(this.element, destination, targetIndexes, insertBefore);\n };\n /**\n * It is used to destroy the Sortable library.\n */\n Sortable.prototype.destroy = function () {\n this.unwireEvents();\n if (this.itemClass === 'e-sort-item') {\n this.itemClass = null;\n this.dataBind();\n }\n getComponent(this.element, Draggable).destroy();\n _super.prototype.destroy.call(this);\n };\n Sortable.prototype.getModuleName = function () {\n return 'sortable';\n };\n Sortable.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'itemClass':\n [].slice.call(this.element.children).forEach(function (element) {\n if (element.classList.contains(oldProp.itemClass)) {\n element.classList.remove(oldProp.itemClass);\n }\n if (newProp.itemClass) {\n element.classList.add(newProp.itemClass);\n }\n });\n break;\n }\n }\n };\n var Sortable_1;\n __decorate([\n Property(false)\n ], Sortable.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"itemClass\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"scope\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"helper\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"placeHolder\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDrop\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drop\", void 0);\n Sortable = Sortable_1 = __decorate([\n NotifyPropertyChanges\n ], Sortable);\n return Sortable;\n}(Base));\nexport { Sortable };\n/**\n * It is used to sort array of elements from source element to destination element.\n *\n * @private\n */\nexport function moveTo(from, to, targetIndexes, insertBefore) {\n var targetElements = [];\n if (!to) {\n to = from;\n }\n if (targetIndexes && targetIndexes.length) {\n targetIndexes.forEach(function (index) {\n targetElements.push(from.children[index]);\n });\n }\n else {\n targetElements = [].slice.call(from.children);\n }\n if (isNullOrUndefined(insertBefore)) {\n targetElements.forEach(function (target) {\n to.appendChild(target);\n });\n }\n else {\n var insertElement_1 = to.children[insertBefore];\n targetElements.forEach(function (target) {\n to.insertBefore(target, insertElement_1);\n });\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined, append, detach, extend } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch, animationMode } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n container: 'e-list-container',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n backButton: 'e-back-button',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist',\n virtualElementContainer: 'e-list-virtualcontainer'\n};\nvar LISTVIEW_TEMPLATE_PROPERTY = 'Template';\nvar LISTVIEW_GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar LISTVIEW_HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar swipeVelocity = 0.5;\n/**\n * Represents the field settings of the ListView.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n * <div id=\"listview\">\n * <ul>\n * <li>Favorite</li>\n * <li>Documents</li>\n * <li>Downloads</li>\n * </ul>\n * </div>\n * ```\n * ```typescript\n * var listviewObject = new ListView({});\n * listviewObject.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n *\n * @param options\n *\n * @param element\n */\n function ListView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousSelectedItems = [];\n _this.hiddenItems = [];\n _this.enabledItems = [];\n _this.disabledItems = [];\n return _this;\n }\n /**\n * @param newProp\n *\n * @param oldProp\n *\n * @private\n */\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n // eslint-disable-next-line\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false, 'header');\n }\n break;\n case 'query':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false, 'header');\n break;\n case 'enableVirtualization':\n if (!isNullOrUndefined(this.contentContainer)) {\n detach(this.contentContainer);\n }\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'template':\n if (!this.enableVirtualization) {\n this.refresh();\n }\n break;\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.clientHeight ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n // Support Component Functions\n ListView.prototype.header = function (text, showBack, prop) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText });\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n innerHeaderEle.innerText = this.headerTitle;\n }\n else {\n innerHeaderEle.innerHTML = this.headerTitle;\n }\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' ' + classNames.backButton,\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n // eslint-disable-next-line\n var compiledElement = compiledString({}, this, prop, this.LISTVIEW_HEADERTEMPLATE_ID, null, null, this.headerEle);\n if (compiledElement) {\n append(compiledElement, headerTemplateEle);\n }\n append([headerTemplateEle], this.headerEle);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n if (this.enableHtmlSanitizer) {\n text = SanitizeHtmlHelper.sanitize(text);\n }\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[\"\" + slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n // eslint-disable-next-line\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n if (this.template) {\n try {\n if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {\n this.setProperties({ template: document.querySelector(this.template).innerHTML.trim() }, true);\n }\n }\n catch (e) {\n compile(this.template);\n }\n }\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'presentation', wrapperRole: 'presentation'\n },\n // eslint-disable-next-line\n fields: (this.fields.properties),\n sortOrder: this.sortOrder,\n showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this),\n templateID: \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,\n groupTemplateID: \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,\n enableHtmlSanitizer: this.enableHtmlSanitizer\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = this.enablePersistence ? this.selectedId : [];\n this.LISTVIEW_TEMPLATE_ID = \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY;\n this.LISTVIEW_GROUPTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY;\n this.LISTVIEW_HEADERTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_HEADERTEMPLATE_PROPERTY;\n this.aniObj = new Animation(this.animateOptions);\n this.removeElement(this.curUL);\n this.removeElement(this.ulElement);\n this.removeElement(this.headerEle);\n this.removeElement(this.contentContainer);\n this.curUL = this.ulElement = this.liCollection = this.headerEle = this.contentContainer = undefined;\n };\n ListView.prototype.renderCheckbox = function (args) {\n var _this = this;\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData_1;\n // eslint-disable-next-line prefer-const\n checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {\n var index = this.selectedId.findIndex(function (e) { return e === fieldData_1[_this.listBaseOption.fields.id].toString(); });\n if (index !== -1) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (fieldData_1[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n checkboxElement.setAttribute('aria-label', 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 e.preventDefault();\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelector('.' + classNames.focused);\n var checkboxElement = void 0;\n var checkIcon = void 0;\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n checkboxElement = args.item.querySelector('.' + classNames.checkboxWrapper);\n this.checkInternally(args, checkboxElement);\n checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n }\n else {\n this.uncheckItem(li);\n }\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon ? checkIcon.classList.contains(classNames.checked) : false });\n this.trigger('select', eventArgs);\n this.updateSelectedId();\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 32:\n if (isNullOrUndefined(this.targetElement) || !(this.targetElement.classList.contains('e-focused'))) {\n this.spaceKeyHandler(e);\n }\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right' && e.velocity > swipeVelocity && e.originalEvent.type === 'touchend') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox && !isNullOrUndefined(this.selectedLI)) {\n this.selectedLI.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n 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, '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 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, { isInteracted: true, event: e, cancel: false, index: this.curUL && Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n // eslint-disable-next-line\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n // eslint-disable-next-line\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n var _this = this;\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.selectedLI = li;\n _this.renderSubList(li);\n }\n });\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n // eslint-disable-next-line\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = \n // eslint-disable-next-line\n getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n // eslint-disable-next-line\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n // eslint-disable-next-line\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n // eslint-disable-next-line\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[\"\" + column]) &&\n this.fields[\"\" + column] !==\n ListBase.defaultMappedFields[\"\" + column]\n && columns.indexOf(this.fields[\"\" + column]) === -1) {\n columns.push(this.fields[\"\" + column]);\n }\n }\n query.select(columns);\n // eslint-disable-next-line\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n // eslint-disable-next-line\n var fieldValue = (isNullOrUndefined(this.fields.sortBy)) ? this.fields.text : this.fields.sortBy;\n var query = ListBase.addSorting(this.sortOrder, fieldValue);\n if (dataSource && this.fields.groupBy) {\n if (this.sortOrder !== 'None') {\n this.curViewDS = ListBase.groupDataSource(ListBase.getDataSource(dataSource, query), this.listBaseOption.fields, this.sortOrder);\n }\n else {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.fields, this.sortOrder);\n }\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, query);\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.renderRemoteLists = function (e, listViewComponent) {\n if (this.isDestroyed) {\n return;\n }\n this.localData = e.result;\n listViewComponent.removeElement(listViewComponent.contentContainer);\n this.renderList();\n this.trigger('actionComplete', e);\n };\n ListView.prototype.triggerActionFailure = function (e) {\n if (this.isDestroyed) {\n return;\n }\n this.trigger('actionFailure', e);\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n // eslint-disable-next-line\n var listViewComponent = this;\n if (this.dataSource instanceof DataManager) {\n if (this.dataSource.ready) {\n this.dataSource.ready.then(function (e) {\n /* eslint-disable */\n _this.isOffline = _this.dataSource.dataSource.offline;\n if (_this.dataSource instanceof DataManager && _this.isOffline) {\n _this.renderRemoteLists(e, listViewComponent);\n }\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n else {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n _this.renderRemoteLists(e, listViewComponent);\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.removeElement(this.headerEle);\n this.removeElement(this.ulElement);\n this.removeElement(this.contentContainer);\n 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 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' });\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(false)\n ], ListView.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n __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 target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' +\n this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]\n });\n textContent.insertBefore(target, element.querySelector('.' + classNames.listItemText));\n }\n }\n if (this.listViewInstance.showCheckBox && this.listViewInstance.fields.groupBy) {\n if (!this.checkListWrapper) {\n this.checkListWrapper = this.listViewInstance.curUL.querySelector('.' + classNames.checkboxWrapper).cloneNode(true);\n }\n var textContent = element.querySelector('.' + classNames.textContent);\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.remove(classNames.checklist);\n textContent.classList.remove(classNames.checkbox);\n detach(element.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n else {\n if (!element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.add(classNames.checklist);\n textContent.classList.add(classNames.checkbox);\n 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 && this.listViewInstance.curViewDS[index + 1] && this.listViewInstance.curViewDS[index + 1].isHeader) {\n var targetEle = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n // insert before the target element\n this.listViewInstance.ulElement.insertBefore(li[0], target);\n // increment internal DOM count, last index count for new element\n this.domItemCount++;\n if (this.bottomElementHeight <= 0) {\n this.uiLastIndex++;\n }\n // recalculate the current item height, to avoid jumpy scroller\n this.refreshItemHeight();\n };\n Virtualization.prototype.createUIItem = function (args) {\n 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 */\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"],"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","createListFromArray","createElement","dataSource","isSingleLevel","options","componentInstance","generateUL","createListItemFromArray","subChild","curOpt","extend","defaultListBaseOptions","cssClass","getModuleClass","moduleName","id","generateId","i","itemCreating","curData","generateSingleLevelLI","generateLI","itemCreated","item","createListItemFromJson","getModuleName","defaultMappedFields","ariaAttributes","defaultAriaAttributes","checkboxElement","anchorElement","child","typeofData","hasOwnProperty","curItem","innerEle","showCheckBox","itemNavigable","urlAttributes","className","attrs","type","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","ds","element","subDS","hasChildren","processSubChild","subLi","createListFromJson","expandCollapse","expandElement","expandIconPosition","append","expandIconClass","addClass","listClass","indexOf","elementArray","Array","prototype","addSorting","sortOrder","sortBy","query","Query","queries","fn","splice","getDataSource","DataManager","executeLocal","createJsonFromElement","curEle","cloneNode","jsonAr","childs","querySelectorAll","remove","anchor","json","childNodes","i_1","Number","hasChildNodes","attributes_1","getAllAttributes","data","match","typeof","elementAttributes","class","split","attributes","nodeName","nodeValue","Math","floor","random","substring","innerElements","grpLI","elementID","role","href","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","groupTemplate","compiledString","compiledElement","groupTemplateID","isStringTemplate","templateID","innerDiv","wrapperRole","itemText","liElement","ulElement","listRole","isChecked","groupBy","headerTemplate","createList","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","contains","groupDataSource","curFields","cusQuery","j","itemObj","items","grpItem","key","newtext","_id","k","renderContentTemplate","liCollection","currentID","renderGroupTemplate","headerItems","category","headerItems_1","header","headerData","generateIcon","__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","LISTVIEW_GROUPTEMPLATE_PROPERTY","FieldSettings","_super","apply","Property","ChildProperty","ListView","_this","previousSelectedItems","hiddenItems","enabledItems","disabledItems","onPropertyChanged","newProp","oldProp","setHTMLAttribute","setCSSClass","setEnable","setSize","setEnableRTL","listBaseOption","properties","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","detach","refresh","setCheckbox","curViewDS","getSubDS","resetCurrentList","oldCSSClass","filter","css","removeClass","height","formatUnit","width","isWindow","clientHeight","enableElement","enable","enableRtl","isEnabled","showBack","prop","headerEle","showHeader","innerHeaderEle","setProperties","textEle","outerHTML","hedBackButton","headerTemplateEle","LISTVIEW_HEADERTEMPLATE_ID","isReact","renderReactTemplates","parentElement","switchView","fromView","toView","reverse","fPos_1","position","overflow_1","overflow","anim","duration","animation","effect","aniObj","animate","name","animationMode","timingFunction","easing","end","model","trigger","curUL","preRender","renderCheckbox","bind","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","enablePersistence","LISTVIEW_TEMPLATE_ID","LISTVIEW_GROUPTEMPLATE_ID","Animation","removeElement","args","isValidLI","fieldData_1","createCheckBox","frameElement_1","findIndex","checkInternally","checkBoxPosition","virtualCheckBox","lastElementChild","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","updateSelectedId","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","getItemData","selectedItems","refreshItemHeight","clickHandler","isArray","targetElement","closestElement","back","closest","parentNode","removeFocus","setCheckboxLI","eventArgs","selectEventData","removeHover","removeSelect","setSelectLI","removeChild","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","preventDefault","focusedElement","onArrowKeyDown","prev","arrowKeyHandler","elementTop","getBoundingClientRect","top","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","window","scroll","pageYOffset","scrollTop","innerHeight","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","enterKeyHandler","spaceKeyHandler","keyActionHandler","keyCode","swipeActionHandler","swipeDirection","velocity","originalEvent","focusout","selectedLI","wireEvents","EventHandler","touchModule","Touch","swipe","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","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","templateFunction","lastChild","onChange","onNgChange","newData","listElement","virtualThis","resultElement","templateCompiler","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"],"mappings":"uYAy+BA,SAAgBA,EAAeC,EAAUC,GACrC,IAAIC,KACJ,GAAIC,oBAAkBH,IAAmC,oBAAkC,qBACnFG,oBAAkBH,EAASI,UAC/B,OAAOJ,EAGP,IAAK,IAAIK,EAAK,EAAGC,EAAKC,OAAOC,KAAKP,GAASI,EAAKC,EAAGG,OAAQJ,IAAM,CAC7D,IACIK,EAAYT,EAAO,GADXK,EAAGD,IAEXM,EAASR,oBAAkBO,IACJ,wBAA2CE,EAAhCC,WAASH,EAAWV,GACrDG,oBAAkBQ,KACnBT,EAAU,GAAKQ,GAAaC,GAIxC,OAAOT,EAEX,SAASY,EAAgBC,GACrB,GAAIA,EACA,IACI,MAAwB,mBAAbA,GAA2BC,SAASC,cAAcF,GAClDG,UAAQF,SAASC,cAAcF,GAAUI,UAAUC,QAGnDF,UAAQH,GAGvB,MAAOM,GACH,OAAOH,UAAQH,IC/jB3B,SAAgBO,EAAOC,EAAMC,EAAIC,EAAeC,GAC5C,IAAIC,KAYJ,GAXKH,IACDA,EAAKD,GAELE,GAAiBA,EAAchB,OAC/BgB,EAAcG,QAAQ,SAAUC,GAC5BF,EAAeG,KAAKP,EAAKQ,SAASF,MAItCF,KAAoBK,MAAMC,KAAKV,EAAKQ,UAEpC5B,oBAAkBuB,GAClBC,EAAeC,QAAQ,SAAUM,GAC7BV,EAAGW,YAAYD,SAGlB,CACD,IAAIE,EAAkBZ,EAAGO,SAASL,GAClCC,EAAeC,QAAQ,SAAUM,GAC7BV,EAAGE,aAAaQ,EAAQE,MD5dpCC,YAKIC,GAAI,cACJC,GAAI,qBACJC,MAAO,oBACPC,KAAM,cACNC,KAAM,cACNC,MAAO,eACPC,QAAS,YACTC,SAAU,aACVC,SAAU,aACVC,YAAa,iBACbC,SAAU,cACVC,MAAO,UACPC,IAAK,aACLC,YAAa,qBACbC,SAAU,aACVC,MAAO,aACPC,YAAa,iBACbC,WAAY,gBACZC,UAAW,eAOf,SAAWC,GAiGP,SAASC,EAAoBC,EAAeC,EAG5CC,EAAeC,EAASC,GAEpB,OAAOC,EAAWL,EADHM,EAAwBN,EAAeC,EAAYC,EAAeC,EAASC,GAC/C,KAAMD,GAkBrD,SAASG,EAAwBN,EAAeC,EAEhDC,EAAeC,EAASC,GACpB,IAAIG,KACAC,EAASC,YAAWC,EAAwBP,GAChDQ,WAAWC,EAAeJ,EAAOK,YAEjC,IAAK,IADDC,EAAKC,IACAC,EAAI,EAAGA,EAAIf,EAAWnD,OAAQkE,IACnC,IAAIxE,oBAAkByD,EAAWe,IAAjC,CAGA,IAAIrC,OAAK,EACT,GAAI6B,EAAOS,cAA+C,mBAAxBT,EAAOS,aAA6B,CAClE,IAAIC,GACAjB,WAAYA,EACZiB,QAASjB,EAAWe,GACpBjC,KAAMkB,EAAWe,GACjBb,QAASK,GAEbA,EAAOS,aAAaC,GAQxB,GALIvC,EADAuB,EACKiB,EAAsBnB,EAAeC,EAAWe,QAAI/D,EAAW,KAAM,QAAU,KAAM6D,EAAIE,EAAGb,GAG5FiB,EAAWpB,EAAeC,EAAWe,QAAI/D,EAAW,KAAM,KAAMkD,EAASC,GAE9EI,EAAOa,aAA6C,mBAAvBb,EAAOa,YAA4B,CAC5DH,GACAjB,WAAYA,EACZiB,QAASjB,EAAWe,GACpBjC,KAAMkB,EAAWe,GACjBM,KAAM3C,EACNwB,QAASK,GAEbA,EAAOa,YAAYH,GAEvBX,EAASpC,KAAKQ,GAElB,OAAO4B,EAoBX,SAASgB,EAAuBvB,EAAeC,EAE/CE,EAASb,EAAOY,EAAeE,GAC3B,IAAII,EAASC,YAAWC,EAAwBP,GAChDQ,WAAWC,EAAeJ,EAAOK,YACjC,IAIIC,EAJAxE,GAAU8D,GAC6B,aAAtCA,EAAkBoB,iBAAwE,gBAAtCpB,EAAkBoB,gBACrDf,YAAWX,EAAS2B,oBAAqBjB,EAAOlE,QAAhEkE,EAAOlE,OACToF,EAAiBjB,YAAWkB,EAAuBnB,EAAOkB,gBAE1DE,KACAtC,IACAoC,EAAepC,MAAQA,GAE3B,IACIX,EACAkD,EAFAC,KAGA7B,GAAcA,EAAWnD,SAAWN,oBAAkBuF,EAAW9B,GAAYqB,QAE5ES,EAAW9B,GAAYqB,KAAKU,eAAe1F,EAAOwE,MACnDA,EAAKC,KAET,IAAK,IAAIC,EAAI,EAAGA,EAAIf,EAAWnD,OAAQkE,IAAK,CACxC,IAAIzE,EAAYH,EAAe6D,EAAWe,GAAI1E,GAC9C,IAAIE,oBAAkByD,EAAWe,IAAjC,CAGA,GAAIR,EAAOS,cAA+C,mBAAxBT,EAAOS,aAA6B,CAClE,IAAIC,GACAjB,WAAYA,EACZiB,QAASjB,EAAWe,GACpBjC,KAAMxC,EAAUD,EAAOyC,MACvBoB,QAASK,EACTlE,OAAQA,GAEZkE,EAAOS,aAAaC,GAExB,IAAIe,EAAUhC,EAAWe,GACrBR,EAAOS,cAA+C,mBAAxBT,EAAOS,eACrC1E,EAAYH,EAAe6D,EAAWe,GAAI1E,IAG1CC,EAAUyF,eAAe1F,EAAOwE,MAAQtE,oBAAkBD,EAAUD,EAAOwE,OAC3EA,EAAKvE,EAAUD,EAAOwE,KAE1B,IAAIoB,KASJ,GARI1B,EAAO2B,eACH3B,EAAO4B,gBAAkB7F,EAAUD,EAAOiD,MAAQhD,EAAUD,EAAO+F,gBACnET,EAAgBzD,KAAK6B,EAAc,SAAWsC,UAAW3B,WAAS3B,MAAOuD,OAASC,KAAM,eAGxFN,EAAS/D,KAAK6B,EAAc,SAAWsC,UAAW3B,WAAS3B,MAAOuD,OAASC,KAAM,iBAGnE,IAAlBtC,EAEIM,EAAOiC,UAAYlG,EAAUyF,eAAe1F,EAAOoG,WAAalG,oBAAkBD,EAAUD,EAAOoG,WACnGR,EAAS/D,KAAK6B,EAAc,QAAUsC,UAAW3B,WAAS7B,KAAO,IAAMvC,EAAUD,EAAOoG,YAM5Fb,GAJAlD,EAAKwC,EAAsBnB,EAAeiC,EAAS1F,EAAWD,EAAQkE,EAAOmC,UAAWT,KAEvFD,EAAQD,eAAe,cACpBC,EAAQxF,UAA0BqE,EAAIE,EAAGb,IAC1B7C,cAAc,IAAMqD,WAASf,YAC5CY,EAAO4B,eAAiBR,EAAgB9E,QACxC8F,UAAQhB,EAAiBjD,EAAGkE,uBAG/B,CASD,IARAlE,EAAKyC,EAAWpB,EAAeiC,EAAS1F,EAAWD,EAAQkE,EAAOmC,UAAWxC,EAASC,IACnF0C,UAAUC,IAAIpC,WAASrB,MAAQ,IAAMoC,EAAepC,OACvDX,EAAGqE,aAAa,aAActB,EAAepC,MAAM2D,YACd,iBAAjCvB,EAAewB,eAAgE,iBAA5BxB,EAAeyB,UAClExE,EAAGyE,gBAAgB,cAEvBvB,EAAgBlD,EAAGrB,cAAc,IAAMqD,WAASf,YAE5CrD,EAAUyF,eAAe1F,EAAO+G,SAAU,CAC1C,IAAIC,EAAc/G,EAAUD,EAAO+G,SACnC,GAAIlD,GAAWA,EAAQoD,oBACnBD,EAAcE,qBAAmBC,SAASH,OAEzC,CACD,IAAII,EAAqB1D,EAAc,QAAUxC,UAAW8F,IAC5DA,EAAcI,EAAmBC,UACjCD,EAAqB,KAEzB/E,EAAGqE,aAAa,QAASM,GAG7B,GAAI/G,EAAUyF,eAAe1F,EAAOsH,iBAAmBrH,EAAUD,EAAOsH,gBAAiB,CACrF,IAAIA,EAAiBrH,EAAUD,EAAOsH,gBAElCA,EAAe5B,eAAe,UAA+C,iBAA5B4B,EAAsB,OAAqD,KAAnCA,EAAsB,MAAEnG,eAC1GmG,EAAsB,MAEjCZ,EAAarE,EAAIiF,GAWrB,GARIrH,EAAUyF,eAAe1F,EAAOuH,WAA0C,IAA9BtH,EAAUD,EAAOuH,UAC7DlF,EAAGmE,UAAUC,IAAIpC,WAASlB,UAG1BlD,EAAUyF,eAAe1F,EAAOwH,aAA8C,IAAhCvH,EAAUD,EAAOwH,aAC/DnF,EAAGoF,MAAMC,QAAU,QAGnBzH,EAAUyF,eAAe1F,EAAO2H,YAAczH,oBAAkBD,EAAUD,EAAO2H,aAC7EzD,EAAOpD,SAAU,CACrB,IAAI8G,GAASC,IAAK5H,EAAUD,EAAO2H,WACnCG,QAAMF,EAAM3H,EAAUD,EAAO+H,kBAC7B,IAAIC,EAActE,EAAc,OAASsC,UAAW3B,WAASjB,MAAO6C,MAAO2B,IACvErC,EACAA,EAAc0C,sBAAsB,aAAcD,GAGlD1B,WAAS0B,GAAc3F,EAAGkE,mBAIlC,GAAIrC,EAAOiC,UAAYlG,EAAUyF,eAAe1F,EAAOoG,WAClDlG,oBAAkBD,EAAUD,EAAOoG,YAAclC,EAAOpD,SAAU,CACnE,IAAIoH,EAAcxE,EAAc,OAASsC,UAAW3B,WAAS7B,KAAO,IAAMvC,EAAUD,EAAOoG,WACvFb,EACAA,EAAc0C,sBAAsB,aAAcC,GAGlD5B,WAAS4B,GAAc7F,EAAGkE,mBAG9BX,EAASpF,QACT8F,UAAQV,EAAUvD,EAAGkE,mBAErBrC,EAAO4B,eAAiBR,EAAgB9E,QACxC8F,UAAQhB,EAAiBjD,EAAGkE,mBA4Y5C,SAAyB7C,EAAezD,EAAWD,EAAQmI,EAAItE,EAASuE,EAASpF,GAE7E,IAAIqF,EAAQpI,EAAUD,EAAOwF,WACzB8C,EAAcrI,EAAUD,EAAOsI,aAEnC,GAAID,EAAM7H,SACN8H,GAAc,EACdF,EAAQ5B,UAAUC,IAAIpC,WAAStB,UAC3Bc,EAAQ0E,iBAAiB,CACzB,IAAIC,EAAQC,EAAmB/E,EAAe2E,EAAOxE,IAAWb,GAChEoF,EAAQlG,YAAYsG,GAI5B,GAAM3E,EAAQ6E,gBAAkBJ,IAAgBzE,EAAQ/C,SAAU,CAC9DsH,EAAQ7B,kBAAkBC,UAAUC,IAAIpC,WAAShB,aACjD,IAAIsF,EAA+C,SAA/B9E,EAAQ+E,mBAAgCtC,UAAUuC,SACtEF,GAAejF,EAAc,OAASsC,UAAW,WAAanC,EAAQiF,mBAAqBV,EAAQpH,cAAc,IAAMqD,WAASvB,eA3Z5HyF,CAAgB7E,EAAezD,EAAWD,EAAQ2D,EAAYO,EAAQ7B,EAAI+C,EAAepC,OAK7F,GAHIuC,GACAwD,YAAU1G,IAAMgC,WAASd,YAEzBW,EAAOa,aAA6C,mBAAvBb,EAAOa,YAA4B,CAC5DH,GACAjB,WAAYA,EACZiB,QAASjB,EAAWe,GACpBjC,KAAMxC,EAAUD,EAAOyC,MACvBuC,KAAM3C,EACNwB,QAASK,EACTlE,OAAQA,GAEZkE,EAAOa,YAAYH,GAEvBU,KACAE,EAAM3D,KAAKQ,IAEf,OAAOmD,EAoBX,SAASiD,EAAmB/E,EAAeC,EAE3CE,EAASb,EAAOY,EAAeE,GAC3B,IAAII,EAASC,YAAWC,EAAwBP,GAEhD,OAAOE,EAAWL,EADTuB,EAAuBvB,EAAeC,EAAYE,EAASb,EAAOY,EAAeE,GACrDI,EAAO8E,UAAWnF,GAsC3D,SAASoF,EAAQjE,EAAMkE,GACnB,GAAKA,GAAiBlE,EAGjB,CAGD,OADgBmE,MAAMC,UAAUrH,MAAMC,KAAKkH,GACtBD,QAAQjE,IAgDrC,SAASqE,EAAWC,EAAWC,EAAQC,GAEnC,QADc,IAAVA,IAAoBA,EAAQ,IAAIC,SAClB,cAAdH,EACAE,EAAMD,OAAOA,EAAQ,aAAa,QAEjC,GAAkB,eAAdD,EACLE,EAAMD,OAAOA,EAAQ,cAAc,QAGnC,IAAK,IAAI7E,EAAI,EAAGA,EAAI8E,EAAME,QAAQlJ,OAAQkE,IACV,aAAxB8E,EAAME,QAAQhF,GAAGiF,IACjBH,EAAME,QAAQE,OAAOlF,EAAG,GAIpC,OAAO8E,EAUX,SAASK,EAAclG,EAAY6F,GAE/B,OAAO,IAAIM,cAAYnG,GAClBoG,aAAaP,GAStB,SAASQ,EAAsB5B,EAASvE,GACpC,IAAIK,EAASC,YAAWC,EAAwBP,GAC5C7D,EAASmE,YAAWX,EAAS2B,oBAAqBjB,EAAOlE,QACzDiK,EAAS7B,EAAQ8B,WAAU,GAC3BC,KACJF,EAAOzD,UAAUC,IAAI,eACrB,IAAI2D,EAASH,EAAOI,iBAAiB,mBACrCJ,EAAOzD,UAAU8D,OAAO,eACxB,IAAK,IAAI5F,EAAI,EAAGA,EAAI0F,EAAO5J,OAAQkE,IAAK,CAOpC,IAAK,IANDrC,EAAK+H,EAAO1F,GACZ6F,EAASlI,EAAGrB,cAAc,KAC1BsB,EAAKD,EAAGrB,cAAc,MACtBwJ,KACAC,EAAaF,EAASA,EAAOE,WAAapI,EAAGoI,WAC7ClK,EAAOD,OAAOC,KAAKkK,GACdC,EAAM,EAAGA,EAAMD,EAAWjK,OAAQkK,IACjCD,EAAWE,OAAOpK,EAAKmK,KAAQE,kBACjCJ,EAAKxK,EAAOyC,MAAQgI,EAAWE,OAAOpK,EAAKmK,KAAO5H,aAG1D,IAAI+H,EAAeC,EAAiBzI,GAChCwI,EAAarG,IACbgG,EAAKxK,EAAOwE,IAAMqG,EAAarG,UACxBqG,EAAarG,IAGpBgG,EAAKxK,EAAOwE,IAAMC,IAElBnE,OAAOC,KAAKsK,GAAcrK,SAC1BgK,EAAKxK,EAAOsH,gBAAkBuD,GAE9BN,IACAM,EAAeC,EAAiBP,GAC5BjK,OAAOC,KAAKsK,GAAcrK,SAC1BgK,EAAKxK,EAAO+F,eAAiB8E,IAGjCvI,IACAkI,EAAKxK,EAAOwF,OAASwE,EAAsB1H,EAAIuB,IAEnDsG,EAAOtI,KAAK2I,GAEhB,OAAOL,EAGX,SAAS1E,EAAWsF,GAEhB,IAAK,IADDC,GAAUC,OAAQ,KAAMjG,KAAM,MACzBN,EAAI,EAAGA,EAAIqG,EAAKvK,OAAQkE,IAC7B,IAAKxE,oBAAkB6K,EAAKrG,IACxB,OAAOsG,GAAUC,cAAeF,EAAKrG,GAAIM,KAAM+F,EAAKrG,IAG5D,OAAOsG,EAEX,SAAStE,EAAa0B,EAAS8C,GAC3B,IAAItD,KACJE,QAAMF,EAAMsD,GACRtD,EAAKuD,QACLpC,YAAUX,GAAUR,EAAKuD,MAAMC,MAAM,aAC9BxD,EAAKuD,OAEhBE,aAAWjD,EAASR,GAExB,SAASkD,EAAiB1C,GAGtB,IAAK,IAFDiD,KACAzD,EAAOQ,EAAQiD,WACVzJ,EAAQ,EAAGA,EAAQgG,EAAKpH,OAAQoB,IACrCyJ,EAAWzD,EAAKhG,GAAO0J,UAAY1D,EAAKhG,GAAO2J,UAEnD,OAAOF,EAiJX,SAAS5G,IACL,OAAO+G,KAAKC,MAA4B,OAArB,EAAID,KAAKE,WACvB/E,SAAS,IACTgF,UAAU,GAuBnB,SAAS9G,EAAsBnB,EAAesB,EAAM/E,EAAWD,EAAQgG,EAAW4F,EAAeC,EAAOrH,EAAI5C,EAAOiC,GAC/G,IAIIF,EAJAO,EAASC,YAAWC,EAAwBP,GAC5CuB,EAAiBjB,YAAWkB,EAAuBnB,EAAOkB,gBAC1D3C,EAAOuC,EACPtE,EAAQsE,EAEQ,iBAATA,GAAqC,iBAATA,GAAqC,kBAATA,IAC/DrB,EAAaqB,EACbvC,EAA0C,kBAA3BxC,EAAUD,EAAOyC,OAAyD,iBAA3BxC,EAAUD,EAAOyC,MAC3ExC,EAAUD,EAAOyC,MAASxC,EAAUD,EAAOyC,OAAS,GACxD/B,EAAQT,EAAUD,EAAOU,QAE7B,IAAIoL,EAMAA,EALC5L,oBAAkByD,IAAgBzD,oBAAkBD,EAAUD,EAAOwE,MAC1C,KAAzBvE,EAAUD,EAAOwE,IAIRA,EAAK,IAAM5C,EAHX4C,EAKhB,IAAInC,EAAKqB,EAAc,MACnBsC,YAAsB,IAAV6F,EAAiBxH,WAAS9B,MAAQ8B,WAAShC,IAAM,KAAOnC,oBAAkB8F,GAAa,GAAKA,GACxGxB,GAAIsH,EAAW7F,MAAyC,KAAjCb,EAAewB,eAAoD,KAA5BxB,EAAeyB,UACvEkF,MAAiB,IAAVF,EAAiBzG,EAAewB,cAAgBxB,EAAeyB,eA8BhF,OA3BIlD,GAAc1D,EAAUyF,eAAe1F,EAAOuH,UAAqD,UAAzCtH,EAAUD,EAAOuH,SAASZ,YACpFtE,EAAGmE,UAAUC,IAAIpC,WAASlB,UAE1B0I,EACAxJ,EAAGgF,UAAY5E,GAGfJ,EAAGqE,aAAa,aAAcxG,oBAAkBQ,GAAS,OAASA,GAClE2B,EAAGqE,aAAa,OAAQ,UAEpB/C,GAAc1D,EAAUyF,eAAe1F,EAAOsH,iBAAmBrH,EAAUD,EAAOsH,iBAClFZ,EAAarE,EAAIpC,EAAUD,EAAOsH,iBAElCsE,EAAcpL,SAAW0D,EAAO4B,eAChC+C,SAAO+C,EAAevJ,GAEtBsB,IAAe1D,EAAUD,EAAOiD,MAAShD,EAAUD,EAAO+F,gBAC1D9F,EAAUD,EAAO+F,eAAeiG,MAChC3J,EAAGH,YAAY+J,EAAUvI,EAAeC,EAAY3D,EAAQyC,EAAMmJ,EAAe1H,EAAO4B,iBAGpF8F,EAAcpL,QAAU0D,EAAO4B,eAC/B+C,SAAO+C,EAAevJ,GAE1BA,EAAGH,YAAYnB,SAASmL,eAAezJ,MAGxCJ,EAEX,SAASiC,EAAeC,GAGpB,OACIlC,GAAI,KAAOkC,EAAa,QACxBjC,GAAI,KAAOiC,EAAa,eACxBhC,MAAO,KAAOgC,EAAa,cAC3B/B,KAAM,KAAO+B,EAAa,QAC1B9B,KAAM,KAAO8B,EAAa,QAC1B7B,MAAO,KAAO6B,EAAa,SAC3B5B,QAAS,YACTC,SAAU,aACVC,SAAU,aACVC,YAAa,iBACbC,SAAU,cACVC,MAAO,UACPC,IAAK,KAAOsB,EAAa,OACzBrB,YAAa,qBACbC,SAAU,aACVC,MAAO,KAAOmB,EAAa,OAC3BlB,YAAa,iBACbC,WAAY,gBACZC,UAAW,eAGnB,SAAS0I,EAAUvI,EAAeC,EAAY3D,EAAQyC,EAAMmJ,EAAeO,GACvE,IAAIlM,EAAYH,EAAe6D,EAAY3D,GACvC4H,GAASoE,KAAM/L,EAAUD,EAAOiD,MAEhChD,EAAUyF,eAAe1F,EAAO+F,gBAAkB9F,EAAUD,EAAO+F,iBACnE+B,QAAMF,EAAM3H,EAAUD,EAAO+F,gBAC7B6B,EAAKoE,KAAO/L,EAAUD,EAAOiD,KAAOhD,EAAUD,EAAOiD,KACjDhD,EAAUD,EAAO+F,eAAeiG,MAExC,IAAIC,EACJ,GAAKE,EAGA,CACDF,EAAYvI,EAAc,KAAOsC,UAAW3B,WAAS5B,KAAO,IAAM4B,WAASpB,MAC3E,IAAImJ,EAAgB1I,EAAc,OAASsC,UAAW3B,WAASf,aAC3DsI,GAAiBA,EAAcpL,QAC/BqI,SAAO+C,EAAeQ,GAE1BA,EAAclK,YAAYnB,SAASmL,eAAezJ,IAClDoG,UAAQuD,GAAgBH,QATxBA,EAAYvI,EAAc,KAAOsC,UAAW3B,WAAS5B,KAAO,IAAM4B,WAASpB,IAAK/B,UAAWuB,IAY/F,OADAiE,EAAauF,EAAWrE,GACjBqE,EAIX,SAASnH,EAAWpB,EAAesB,EAAM/E,EAEzCD,EAAQgG,EAAWnC,EAASC,GACxB,IAGIuI,EACAR,EACAlI,EALAO,EAASC,YAAWC,EAAwBP,GAC5CuB,EAAiBjB,YAAWkB,EAAuBnB,EAAOkB,gBAC1D3C,EAAOuC,EAIS,iBAATA,GAAqC,iBAATA,IACnCrB,EAAaqB,EACbvC,EAAOxC,EAAUD,EAAOyC,OAAS,GAEjC4J,EAAOnM,oBAAkBD,EAAe,KAAMA,EAAUD,EAAOwE,IAAMvE,EAAe,IAEpF4L,KAAS7G,EAAKU,eAAe,cAAeV,EAAK7E,WAGjD0D,GAAWA,EAAQoD,sBAEnBxE,EAAOA,GAEX,IAAIJ,EAAKqB,EAAc,MACnBsC,YAAsB,IAAV6F,EAAiBxH,WAAS9B,MAAQ8B,WAAShC,IAAM,KAAOnC,oBAAkB8F,GAAa,GAAKA,GACxGC,MAAyC,KAAjCb,EAAewB,eAAoD,KAA5BxB,EAAeyB,UACxDkF,MAAiB,IAAVF,EAAiBzG,EAAewB,cAAgBxB,EAAeyB,eAQhF,IANgC,IAA3B3G,oBAAkBmM,GACnBhK,EAAGqE,aAAa,WAAY2F,GAG5BhK,EAAGqE,aAAa,WAAYjC,KAE5BoH,GAAShI,GAAWA,EAAQyI,cAAe,CAC3C,IAAIC,EAAiB1L,EAAgBgD,EAAQyI,eAC7C,GAAIxI,GAA2D,aAAtCA,EAAkBoB,gBAAgC,EAEnEsH,EAAkBD,EAAevH,EAAMlB,EAAmB,gBAAiBI,EAAOuI,kBAAmBvI,EAAOwI,iBAAkB,KAAMrK,KAEpIwG,SAAO2D,EAAiBnK,QAI5BwG,SAAO0D,EAAevH,EAAMlB,EAAmB,gBAAiBI,EAAOuI,kBAAmBvI,EAAOwI,kBAAmBrK,QAGvH,IAAKwJ,GAAShI,GAAWA,EAAQ/C,SAAU,CACxCyL,EAAiB1L,EAAgBgD,EAAQ/C,UAC7C,GAAIgD,GAA2D,aAAtCA,EAAkBoB,gBAAgC,CAEvE,IAAIsH,GAAAA,EAAkBD,EAAevH,EAAMlB,EAAmB,WAAYI,EAAOyI,aAAczI,EAAOwI,iBAAkB,KAAMrK,KAE1HwG,SAAO2D,EAAiBnK,QAI5BwG,SAAO0D,EAAevH,EAAMlB,EAAmB,WAAYI,EAAOyI,aAAczI,EAAOwI,kBAAmBrK,OAG7G,CACD,IAAIuK,EAAWlJ,EAAc,OACzBsC,UAAW3B,WAASvB,YACpBmD,MAAuC,KAA/Bb,EAAeyH,aAAuBd,KAAM3G,EAAeyH,kBAEvE,GAAIlJ,IAAe1D,EAAUD,EAAOiD,MAAShD,EAAUD,EAAO+F,gBAC1D9F,EAAUD,EAAO+F,eAAeiG,MAChCY,EAAS1K,YAAY+J,EAAUvI,EAAeC,EAAY3D,EAAQyC,EAAM,KAAMyB,EAAO4B,oBAEpF,CACD,IAAIsC,EAAU1E,EAAc,QACxBsC,UAAW3B,WAAS5B,KACpBwD,MAAoC,KAA5Bb,EAAe0H,UAAoBf,KAAM3G,EAAe0H,eAEhEjJ,GAAWA,EAAQoD,oBACnBmB,EAAQf,UAAYH,qBAAmBC,SAAS1E,GAGhD2F,EAAQlH,UAAYuB,EAExBmK,EAAS1K,YAAYkG,GAEzB/F,EAAGH,YAAY0K,GAEnB,OAAOvK,EAWX,SAAS0B,EAAWL,EAAeqJ,EAAW/G,EAAWnC,GACrD,IAAIK,EAASC,YAAWC,EAAwBP,GAC5CuB,EAAiBjB,YAAWkB,EAAuBnB,EAAOkB,gBAC9Df,WAAWC,EAAeJ,EAAOK,YACjC,IAAIyI,EAAYtJ,EAAc,MAC1BsC,UAAW3B,WAAS/B,GAAK,KAAOpC,oBAAkB8F,GAAa,GAAKA,GACpEC,MAAoC,KAA5Bb,EAAe6H,UAAoBlB,KAAM3G,EAAe6H,eAGpE,OADApE,SAAOkE,EAAWC,GACXA,EAt6BXxJ,EAAS2B,qBACLX,GAAI,KACJ/B,KAAM,OACNQ,IAAK,MACLvC,MAAO,QACPwM,UAAW,YACX3F,QAAS,UACT1E,SAAU,WACVD,SAAU,WACVwD,QAAS,UACTZ,MAAO,QACPgC,UAAW,YACXc,YAAa,cACbvB,QAAS,UACTO,eAAgB,iBAChBvB,cAAe,gBACfgC,gBAAiB,kBACjBJ,SAAU,WACVwF,QAAS,KACT5D,OAAQ,MAEZ,IAAIlE,GACArC,MAAO,EACPiK,SAAU,eACVpG,SAAU,eACVD,cAAe,QACfkG,SAAU,YACVD,YAAa,gBAEbzI,GACAyB,cAAc,EACdM,UAAU,EACVc,qBAAqB,EACrByB,gBAAgB,EAChB1I,OAAQwD,EAAS2B,oBACjBC,eAAgBC,EAChB2D,UAAW,GACX3C,UAAW,GACXkC,iBAAiB,EACjBe,UAAW,OACXxI,SAAU,KACVwL,cAAe,KACfc,eAAgB,KAChBtE,gBAAiB,qBACjBvE,WAAY,OACZqE,mBAAoB,QACpB9C,eAAe,GA8BnBtC,EAAS6J,WAbT,SAAoB3J,EAAeC,EAEnCE,EAASD,EAAeE,GACpB,IAAII,EAASC,YAAWC,EAAwBP,GAC5CuB,EAAiBjB,YAAWkB,EAAuBnB,EAAOkB,gBAC1Dc,EAAOT,EAAW9B,GAAYsH,OAClC,MAAa,WAAT/E,GAA8B,WAATA,EACdzC,EAAoBC,EAAeC,EAAYC,EAAeC,EAASC,GAGvE2E,EAAmB/E,EAAeC,EAAYE,EAASuB,EAAepC,MAAOY,EAAeE,IA0B3GN,EAASC,oBAAsBA,EAyD/BD,EAASQ,wBAA0BA,EA+KnCR,EAASyB,uBAAyBA,EAyBlCzB,EAASiF,mBAAqBA,EA6B9BjF,EAAS8J,aArBT,SAAsBpE,EAAcd,EAASmF,GAEzC,GADAlJ,WAAWC,EAAeF,EAAuBG,YAC5C2E,GAAiBA,EAAa1I,OAAnC,CAGA,IAAIgN,EACAC,EACAC,EAAgBvE,MAAMC,UAAUrH,MAAMC,KAAKkH,GAQ/C,IADAsE,EAAYE,GALRD,EADArF,EACUa,EAAQb,EAASsF,IAGD,IAAfH,EAAsBG,EAAclN,QAAU,KAET,IAAf+M,GAAuB,EAAI,IACzDC,KAAehG,YAAUgG,IAAcA,EAAUhH,UAAUmH,SAAStJ,WAASlB,YAEhFqK,EAAYE,EADZD,IAAoC,IAAfF,GAAuB,EAAI,GAGpD,OAAOC,IAmBXhK,EAASyF,QAAUA,EAqCnBzF,EAASoK,gBA7BT,SAAyBjK,EAAY3D,EAAQsJ,QACvB,IAAdA,IAAwBA,EAAY,QACxC,IAAIuE,EAAY1J,YAAWX,EAAS2B,oBAAqBnF,GACrD8N,GAAW,IAAIrE,SAAQlH,MAAMsL,EAAUV,SAGvChF,EAAK0B,EAAclG,EADvBmK,EAAWzE,EAAWC,EAAW,MAAOwE,IAExCnK,KACA,IAAK,IAAIoK,EAAI,EAAGA,EAAI5F,EAAG3H,OAAQuN,IAAK,CAChC,IAAIC,EAAU7F,EAAG4F,GAAGE,MAChBC,KAEJA,EAAQL,EAAUpL,MAAQ0F,EAAG4F,GAAGI,IAChCD,EAAgB,UAAI,EACpB,IAAIE,EAAUP,EAAUpL,KACR,OAAZ2L,IAEAF,EADAE,EAAU,QACcjG,EAAG4F,GAAGI,KAElCD,EAAQG,IAAM,oBAAsBlG,EAAG4F,GAAGI,IACtChG,EAAG4F,GAAGI,IAAIxH,WAAWxF,OAAS,aAClC+M,EAAQD,MAAQD,EAChBrK,EAAW9B,KAAKqM,GAChB,IAAK,IAAII,EAAI,EAAGA,EAAIN,EAAQxN,OAAQ8N,IAChC3K,EAAW9B,KAAKmM,EAAQM,IAGhC,OAAO3K,GA2BXH,EAAS6F,WAAaA,EAatB7F,EAASqG,cAAgBA,EAmDzBrG,EAASwG,sBAAwBA,EAmIjCxG,EAAS+K,sBAjGT,SAA+B7K,EAAe5C,EAAU6C,EAExD3D,EAAQ6D,EAASC,GACbO,WAAWC,EAAeF,EAAuBG,YAQjD,IAAK,IAFD7D,EALAsM,EAAYtJ,EAAc,MAAQsC,UAAW3B,WAAS/B,GAAI2D,OAAS8F,KAAM,kBACzE7H,EAASC,YAAWC,EAAwBP,GAC5CgK,EAAY1J,YAAWX,EAAS2B,oBAAqBnF,GACrDuM,EAAiB1L,EAAgBC,GACjC0N,KAEAhK,EAAKC,IACAC,EAAI,EAAGA,EAAIf,EAAWnD,OAAQkE,IAAK,CACxC,IAAIzE,EAAYH,EAAe6D,EAAWe,GAAImJ,GAC1ClI,EAAUhC,EAAWe,GACrBvE,EAAWwF,EAAQxF,SAOvB,GALIO,EADyB,iBAAlBiD,EAAWe,IAA4C,iBAAlBf,EAAWe,GAC/CiB,EAGA1F,EAAU4N,EAAUnN,OAE5BwD,EAAOS,cAA+C,mBAAxBT,EAAOS,aAA6B,CAClE,IAAIC,GACAjB,WAAYA,EACZiB,QAASe,EACTlD,KAAM/B,EACNmD,QAASK,EACTlE,OAAQ6N,GAEZ3J,EAAOS,aAAaC,GAEpBV,EAAOS,cAA+C,mBAAxBT,EAAOS,eACrC1E,EAAYH,EAAe6D,EAAWe,GAAImJ,GAEtCnN,EADyB,iBAAlBiD,EAAWe,IAA4C,iBAAlBf,EAAWe,GAC/CiB,EAGA1F,EAAU4N,EAAUnN,QAGpC,IAAI2B,EAAKqB,EAAc,MACnBc,GAAIA,EAAK,IAAME,EACfsB,UAAW7F,EAAWkE,WAAS9B,MAAQ8B,WAAShC,GAAI4D,OAAS8F,KAAM,kBAEvE,GAAI5L,EAC6B,iBAAlBwD,EAAWe,IAA4C,iBAAlBf,EAAWe,GACvDrC,EAAGgF,UAAY1B,EAGftD,EAAGgF,UAAYpH,EAAU4N,EAAUpL,UAGtC,CACD,IAAIgM,EAAYtO,EAAW+D,EAAOuI,gBAAkBvI,EAAOyI,WAC3D,GAAIxM,EACI2D,GAA2D,aAAtCA,EAAkBoB,iBAEnCsH,EAAkBD,EAAe5G,EAAS7B,EAAmB,iBAAkB2K,IAAavK,EAAOwI,iBAAkB,KAAMrK,KAE3HwG,SAAO2D,EAAiBnK,GAI5BwG,SAAO0D,EAAe5G,EAAS7B,EAAmB,iBAAkB2K,IAAavK,EAAOwI,kBAAmBrK,QAI/G,GAAIyB,GAA2D,aAAtCA,EAAkBoB,gBAAgC,CAEvE,IAAIsH,GAAAA,EAAkBD,EAAe5G,EAAS7B,EAAmB,WAAY2K,IAAavK,EAAOwI,iBAAkB,KAAMrK,KAErHwG,SAAO2D,EAAiBnK,QAI5BwG,SAAO0D,EAAe5G,EAAS7B,EAAmB,WAAY2K,IAAavK,EAAOwI,kBAAmBrK,GAG7GA,EAAGqE,aAAa,aAAcxG,oBAAkBQ,GAAS,OAASA,GAClE2B,EAAGqE,aAAa,OAAQ,UAExBxC,EAAOa,aAA6C,mBAAvBb,EAAOa,cAChCH,GACAjB,WAAYA,EACZiB,QAASe,EACTlD,KAAM/B,EACNsE,KAAM3C,EACNwB,QAASK,EACTlE,OAAQ6N,GAEZ3J,EAAOa,YAAYH,IAEvB4J,EAAa3M,KAAKQ,GAGtB,OADAwG,SAAO2F,EAAcxB,GACdA,GAwCXxJ,EAASkL,oBAzBT,SAA6BpC,EAAesB,EAAiB5N,EAE7D2O,EAAa9K,EAASC,GAKlB,IAAK,IAJDyI,EAAiB1L,EAAgByL,GACjCuB,EAAY1J,YAAWX,EAAS2B,oBAAqBnF,GACrDkE,EAASC,YAAWC,EAAwBP,GAC5C+K,EAAWf,EAAUV,QAChB/M,EAAK,EAAGyO,EAAgBF,EAAavO,EAAKyO,EAAcrO,OAAQJ,IAAM,CAC3E,IAAI0O,EAASD,EAAczO,GACvB2O,KAGJ,GAFAA,EAAW,GAAKH,GAAYE,EAAOhM,YACnCgM,EAAO5N,UAAY,GACf4C,GAA2D,aAAtCA,EAAkBoB,gBAAgC,CAEvE,IAAIsH,EAAkBD,EAAewC,EAAYjL,EAAmB,gBAAiBI,EAAOuI,kBAAmBvI,EAAOwI,iBAAkB,KAAMoC,GAC1ItC,GACA3D,SAAO2D,EAAiBsC,QAI5BjG,SAAO0D,EAAewC,EAAYjL,EAAmB,gBAAiBI,EAAOuI,kBAAmBvI,EAAOwI,kBAAmBoC,GAGlI,OAAOH,GAQXnL,EAASiB,WAAaA,EAyOtBjB,EAASO,WAAaA,EAoBtBP,EAASwL,aAVT,SAAsBtL,EAAeqJ,EAAW/G,EAAWnC,GACvD,IAAIK,EAASC,YAAWC,EAAwBP,GAOhD,OANAQ,WAAWC,EAAeJ,EAAOK,aACiB,SAA9BL,EAAO0E,mBAAgCtC,UAAUuC,WACtDnF,EAAc,OACrBsC,UAAW,WAAa9B,EAAO4E,gBAAkB,KAC5C5I,oBAAkB8F,GAAa,GAAKA,MACxC+G,EAAU/L,cAAc,IAAMqD,WAASvB,cACzCiK,GA/7Bf,CAk8BGvJ,aAAaA,gBEj+BhB,IAAIyL,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5O,OAAO+O,iBAChBC,wBAA2BnG,OAAS,SAAUgG,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIG,KAAKH,EAAOA,EAAE1J,eAAe6J,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASI,IAAOC,KAAKC,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE/F,UAAkB,OAANgG,EAAa9O,OAAOqP,OAAOP,IAAMI,EAAGpG,UAAYgG,EAAEhG,UAAW,IAAIoG,IAV3C,GAaxCI,EAA0C,SAAUC,EAAY5N,EAAQkM,EAAK2B,GAC7E,IAA2HX,EAAvHY,EAAIC,UAAUxP,OAAQyP,EAAIF,EAAI,EAAI9N,EAAkB,OAAT6N,EAAgBA,EAAOxP,OAAO4P,yBAAyBjO,EAAQkM,GAAO2B,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY5N,EAAQkM,EAAK2B,QACpH,IAAK,IAAIpL,EAAImL,EAAWrP,OAAS,EAAGkE,GAAK,EAAGA,KAASyK,EAAIU,EAAWnL,MAAIuL,GAAKF,EAAI,EAAIZ,EAAEc,GAAKF,EAAI,EAAIZ,EAAElN,EAAQkM,EAAK8B,GAAKd,EAAElN,EAAQkM,KAAS8B,GAChJ,OAAOF,EAAI,GAAKE,GAAK3P,OAAO+P,eAAepO,EAAQkM,EAAK8B,GAAIA,GAY5DK,GACAC,QACAC,WAAc,gBAAiB,eAAgB,cAAe,gBAC9DC,WAAc,cAAe,iBAAkB,gBAAiB,cAChEC,MAAS,UAAW,cAAe,aAAc,UACjDC,MAAS,UAAW,UAAW,SAAU,WAEzCC,GACAL,QACAC,WAAc,eAAgB,gBAAiB,eAAgB,eAC/DC,WAAc,iBAAkB,cAAe,aAAc,iBAC7DC,MAAS,cAAe,UAAW,SAAU,cAC7CC,MAAS,UAAW,UAAW,SAAU,WAGlCE,GACPC,KAAM,aACNC,MAAO,UACPnO,SAAU,WACVoO,QAAS,YACTC,WAAY,gBACZC,SAAU,cACVC,SAAU,cACVrO,YAAa,iBACbsO,aAAc,cACdC,cAAe,oBACftO,SAAU,cACVuO,KAAM,SACNxC,OAAQ,gBACRyC,WAAY,eACZC,mBAAoB,wBACpB/O,KAAM,SACNgP,QAAS,aACTC,UAAW,mBACXlP,KAAM,UACNmP,SAAU,cACVC,WAAY,gBACZC,gBAAiB,qBACjBC,SAAU,aACVnP,QAAS,UACToP,UAAW,cACXC,aAAc,UACdC,cAAe,mBACfC,aAAc,kBACdC,iBAAkB,sBAClBC,cAAe,cACfC,wBAAyB,2BAGzBC,EAAkC,gBAMlCC,EAA+B,SAAUC,GAEzC,SAASD,IACL,OAAkB,OAAXC,GAAmBA,EAAOC,MAAMhD,KAAMO,YAAcP,KAsC/D,OAxCAR,EAAUsD,EAAeC,GAIzB5C,GACI8C,WAAS,OACVH,EAAcnJ,UAAW,UAAM,GAClCwG,GACI8C,WAAS,SACVH,EAAcnJ,UAAW,YAAQ,GACpCwG,GACI8C,WAAS,cACVH,EAAcnJ,UAAW,iBAAa,GACzCwG,GACI8C,WAAS,cACVH,EAAcnJ,UAAW,iBAAa,GACzCwG,GACI8C,WAAS,YACVH,EAAcnJ,UAAW,eAAW,GACvCwG,GACI8C,WAAS,YACVH,EAAcnJ,UAAW,eAAW,GACvCwG,GACI8C,WAAS,UACVH,EAAcnJ,UAAW,aAAS,GACrCwG,GACI8C,WAAS,YACVH,EAAcnJ,UAAW,eAAW,GACvCwG,GACI8C,WAAS,YACVH,EAAcnJ,UAAW,eAAW,GACvCwG,GACI8C,WAAS,SACVH,EAAcnJ,UAAW,cAAU,GACtCwG,GACI8C,WAAS,mBACVH,EAAcnJ,UAAW,sBAAkB,GAC9CwG,GACI8C,WAAS,cACVH,EAAcnJ,UAAW,iBAAa,GAClCmJ,GACTI,iBAkBEC,EAA0B,SAAUJ,GASpC,SAASI,EAAS/O,EAASuE,GACvB,IAAIyK,EAAQL,EAAOxQ,KAAKyN,KAAM5L,EAASuE,IAAYqH,KAKnD,OAJAoD,EAAMC,yBACND,EAAME,eACNF,EAAMG,gBACNH,EAAMI,iBACCJ,EAu5DX,OAr6DA5D,EAAU2D,EAAUJ,GAuBpBI,EAASxJ,UAAU8J,kBAAoB,SAAUC,EAASC,GACtD,IAAK,IAAIhT,EAAK,EAAGC,EAAKC,OAAOC,KAAK4S,GAAU/S,EAAKC,EAAGG,OAAQJ,IAAM,CAE9D,OADWC,EAAGD,IAEV,IAAK,iBACDqP,KAAK4D,mBACL,MACJ,IAAK,WACD5D,KAAK6D,YAAYF,EAAQ/O,UACzB,MACJ,IAAK,SACDoL,KAAK8D,YACL,MACJ,IAAK,QACL,IAAK,SACD9D,KAAK+D,UACL,MACJ,IAAK,YACD/D,KAAKgE,eACL,MACJ,IAAK,SAEDhE,KAAKiE,eAAe1T,OAASyP,KAAKzP,OAAO2T,WACrClE,KAAKmE,qBACLnE,KAAKoE,qBAAqBC,2BAG1BrE,KAAKsE,WAET,MACJ,IAAK,cACItE,KAAKuE,WAAWxT,QACjBiP,KAAKX,OAAOW,KAAKwE,aAAa,EAAO,UAEzC,MACJ,IAAK,QACGxE,KAAKmE,qBACLnE,KAAKoE,qBAAqBC,2BAG1BrE,KAAKsE,WAET,MACJ,IAAK,aACDtE,KAAKX,OAAOW,KAAKwE,aAAa,EAAO,UACrC,MACJ,IAAK,uBACI/T,oBAAkBuP,KAAKyE,mBACxBC,SAAO1E,KAAKyE,kBAEhBzE,KAAK2E,UACL,MACJ,IAAK,eACL,IAAK,mBACG3E,KAAKmE,qBACLnE,KAAKoE,qBAAqBC,2BAG1BrE,KAAK4E,cAET,MACJ,IAAK,aACG5E,KAAKmE,qBACLnE,KAAKoE,qBAAqBC,2BAG1BrE,KAAKsE,WAET,MACJ,IAAK,YACL,IAAK,WACItE,KAAKmE,sBACNnE,KAAK2E,UAET,MACJ,IAAK,WACG3E,KAAKmE,qBACLnE,KAAKoE,qBAAqBC,4BAG1BrE,KAAKiE,eAAevN,SAAWsJ,KAAKtJ,SACpCsJ,KAAK6E,UAAY7E,KAAK8E,WACtB9E,KAAK+E,uBASzB5B,EAASxJ,UAAUiK,iBAAmB,WAC9B/S,OAAOC,KAAKkP,KAAKnI,gBAAgB9G,QACjC6K,aAAWoE,KAAKrH,QAASqH,KAAKnI,iBAGtCsL,EAASxJ,UAAUkK,YAAc,SAAUmB,GACnChF,KAAKpL,UACL0E,YAAU0G,KAAKrH,SAAUqH,KAAKpL,SAAS+G,MAAM,KAAKsJ,OAAO,SAAUC,GAAO,OAAOA,KAEjFF,GACAG,eAAanF,KAAKrH,SAAUqM,EAAYrJ,MAAM,KAAKsJ,OAAO,SAAUC,GAAO,OAAOA,MAG1F/B,EAASxJ,UAAUoK,QAAU,WACzB/D,KAAKrH,QAAQX,MAAMoN,OAASC,aAAWrF,KAAKoF,QAC5CpF,KAAKrH,QAAQX,MAAMsN,MAAQD,aAAWrF,KAAKsF,OAC3CtF,KAAKuF,UAAWvF,KAAKrH,QAAQ6M,cAEjCrC,EAASxJ,UAAUmK,UAAY,WAC3B9D,KAAKyF,cAAczF,KAAKrH,QAASqH,KAAK0F,SAE1CvC,EAASxJ,UAAUqK,aAAe,WAC1BhE,KAAK2F,UACL3F,KAAKrH,QAAQ5B,UAAUC,IAAI,SAG3BgJ,KAAKrH,QAAQ5B,UAAU8D,OAAO,UAGtCsI,EAASxJ,UAAU8L,cAAgB,SAAU9M,EAASiN,GAC9CA,EACAjN,EAAQ5B,UAAU8D,OAAOuG,EAAWY,SAGpCrJ,EAAQ5B,UAAUC,IAAIoK,EAAWY,UAIzCmB,EAASxJ,UAAU0F,OAAS,SAAUrM,EAAM6S,EAAUC,GAClD,QAAuB5U,IAAnB8O,KAAK+F,WAA2B/F,KAAKgG,WAAY,CACjDhG,KAAK+F,UAAY/F,KAAK/L,cAAc,OAASsC,UAAW6K,EAAW/B,SACnE,IAAI4G,EAAiBjG,KAAK/L,cAAc,QAAUsC,UAAW6K,EAAWU,aACpE9B,KAAKxI,qBACLwI,KAAKkG,eAAgB1B,YAAa/M,qBAAmBC,SAASsI,KAAKwE,eAAgB,GACnFyB,EAAerO,UAAYoI,KAAKwE,aAGhCyB,EAAexU,UAAYuO,KAAKwE,YAEpC,IAAI2B,EAAUnG,KAAK/L,cAAc,OAASsC,UAAW6K,EAAWpO,KAAMvB,UAAWwU,EAAeG,YAC5FC,EAAgBrG,KAAK/L,cAAc,OACnCsC,UAAW6K,EAAWrO,KAAO,IAAMqO,EAAWc,SAAW,IAAMd,EAAWe,WAC1E3L,OAASwB,MAAO,mBAIpB,GAFAgI,KAAK+F,UAAUtT,YAAY4T,GAC3BrG,KAAK+F,UAAUtT,YAAY0T,GACvBnG,KAAKrC,eAAgB,CACrB,IAAIb,EAAiBtL,UAAQwO,KAAKrC,gBAC9B2I,EAAoBtG,KAAK/L,cAAc,OAASsC,UAAW6K,EAAWW,qBAEtEhF,EAAkBD,KAAmBkD,KAAM8F,EAAM9F,KAAKuG,2BAA4B,KAAM,KAAMvG,KAAK+F,WACnGhJ,GACA3D,SAAO2D,EAAiBuJ,GAE5BlN,UAAQkN,GAAoBtG,KAAK+F,WAE7B/F,KAAKwG,SACLxG,KAAKyG,uBAGTzG,KAAKrC,gBAAkBqC,KAAKwE,aAC5B2B,EAAQpP,UAAUC,IAAI,UAE1BgJ,KAAKrH,QAAQ5B,UAAUC,IAAI,gBAC3BH,WAASmJ,KAAK+F,WAAY/F,KAAKrH,cAE9B,GAAIqH,KAAK+F,UACV,GAAI/F,KAAKgG,WAAY,CACjBhG,KAAK+F,UAAU/N,MAAMC,QAAU,GAC3BkO,EAAUnG,KAAK+F,UAAUxU,cAAc,IAAM6P,EAAWU,YACxDuE,EAAgBrG,KAAK+F,UAAUxU,cAAc,IAAM6P,EAAWc,UAC9DlC,KAAKxI,sBACLxE,EAAOyE,qBAAmBC,SAAS1E,IAEvCmT,EAAQ1U,UAAYuB,EAChBgN,KAAKrC,gBAAkBkI,IACvBM,EAAQO,cAAc3P,UAAU8D,OAAO,UACvCmF,KAAK+F,UAAUxU,cAAc,IAAM6P,EAAWW,oBAAoBhL,UAAUC,IAAI,kBAEhFgJ,KAAKrC,iBAAmBkI,IACxBM,EAAQO,cAAc3P,UAAUC,IAAI,UACpCgJ,KAAK+F,UAAUxU,cAAc,IAAM6P,EAAWW,oBAAoBhL,UAAU8D,OAAO,iBACnFmF,KAAK+F,UAAUxU,cAAc,IAAM6P,EAAWW,oBAAoBhL,UAAUC,IAAI,WAGhFqP,EAAcrO,MAAMC,SADP,IAAb4N,EAC8B,GAGA,YAIlC7F,KAAK+F,UAAU/N,MAAMC,QAAU,QAK3CkL,EAASxJ,UAAUgN,WAAa,SAAUC,EAAUC,EAAQC,GACxD,IAAI1D,EAAQpD,KACZ,GAAI4G,GAAYC,EAAQ,CACpB,IAAIE,EAASH,EAAS5O,MAAMgP,SACxBC,EAA8C,WAAhCjH,KAAKrH,QAAQX,MAAMkP,SAAyBlH,KAAKrH,QAAQX,MAAMkP,SAAW,GAC5FN,EAAS5O,MAAMgP,SAAW,WAC1BJ,EAAS7P,UAAUC,IAAI,UACvB,IAAImQ,OAAO,EACPC,EAAWpH,KAAKqH,UAAUD,SAC9B,GAAIpH,KAAKqH,UAAUC,OACfH,EAAQnH,KAAK2F,UAAYxE,EAAiBnB,KAAKqH,UAAUC,QAAUzG,EAAcb,KAAKqH,UAAUC,YAE/F,CAEDH,EAAOtG,EAA4B,UACnCiG,EAAU9G,KAAK2F,UACfyB,EAAW,EAEfpH,KAAKrH,QAAQX,MAAMkP,SAAW,SAC9BlH,KAAKuH,OAAOC,QAAQZ,GAChBa,MAAmB,IAAZX,EAAmBK,EAAK,GAAKA,EAAK,GACzCC,SAAwB,IAAbA,GAAoC,WAAlBM,gBAA8B,IAAMN,EACjEO,eAAgB3H,KAAKqH,UAAUO,OAE/BC,IAAK,SAAUC,GACXlB,EAAS5O,MAAMC,QAAU,OACzBmL,EAAMzK,QAAQX,MAAMkP,SAAWD,EAC/BL,EAAS5O,MAAMgP,SAAWD,EAC1BH,EAAS7P,UAAU8D,OAAO,aAGlCgM,EAAO7O,MAAMC,QAAU,GACvB+H,KAAKuH,OAAOC,QAAQX,GAChBY,MAAmB,IAAZX,EAAmBK,EAAK,GAAKA,EAAK,GACzCC,SAAwB,IAAbA,GAAoC,WAAlBM,gBAA8B,IAAMN,EACjEO,eAAgB3H,KAAKqH,UAAUO,OAC/BC,IAAK,WACDzE,EAAM2E,QAAQ,qBAGtB/H,KAAKgI,MAAQnB,IAGrB1D,EAASxJ,UAAUsO,UAAY,WAC3B,GAAIjI,KAAK3O,SACL,IACiC,mBAAlB2O,KAAK3O,UAA2BC,SAASsJ,iBAAiBoF,KAAK3O,UAAUN,QAChFiP,KAAKkG,eAAgB7U,SAAUC,SAASC,cAAcyO,KAAK3O,UAAUI,UAAUC,SAAU,GAGjG,MAAOC,GACHH,UAAQwO,KAAK3O,UAGrB2O,KAAKiE,gBACD5S,SAAU2O,KAAK3O,SACfsM,eAAgBqC,KAAKrC,eACrBd,cAAemD,KAAKnD,cAAe5D,gBAAgB,EAAMM,UAAW,GACpE5D,gBACIyB,SAAU,WAAYoG,SAAU,OAAQH,SAAU,GAClDlG,cAAe,eAAgBiG,YAAa,gBAGhD7M,OAASyP,KAAKzP,OAAiB,WAC/BsJ,UAAWmG,KAAKnG,UAChBnD,SAAUsJ,KAAKtJ,SACfpB,YAAa0K,KAAKkI,eAAeC,KAAKnI,MACtC9C,WAAiB8C,KAAKrH,QAAQ5D,GApWT,WAqWrBiI,gBAAiB,GAAKgD,KAAKrH,QAAQ5D,GAAK8N,EACxCrL,oBAAqBwI,KAAKxI,qBAE9BwI,KAAKoI,kBAETjF,EAASxJ,UAAUyO,eAAiB,WAChCpI,KAAKuE,cACLvE,KAAKqI,kBACLrI,KAAK6E,aACL7E,KAAKsI,qBACLtI,KAAKuI,cAAe,EACpBvI,KAAKwI,gBACLxI,KAAKyI,WAAazI,KAAK0I,kBAAoB1I,KAAKyI,cAChDzI,KAAK2I,qBAA4B3I,KAAKrH,QAAQ5D,GAlXrB,WAmXzBiL,KAAK4I,0BAA4B,GAAK5I,KAAKrH,QAAQ5D,GAAK8N,EACxD7C,KAAKuG,2BAAkCvG,KAAKrH,QAAQ5D,GAlXrB,iBAmX/BiL,KAAKuH,OAAS,IAAIsB,YAAU7I,KAAKqI,gBACjCrI,KAAK8I,cAAc9I,KAAKgI,OACxBhI,KAAK8I,cAAc9I,KAAKzC,WACxByC,KAAK8I,cAAc9I,KAAK+F,WACxB/F,KAAK8I,cAAc9I,KAAKyE,kBACxBzE,KAAKgI,MAAQhI,KAAKzC,UAAYyC,KAAKjB,aAAeiB,KAAK+F,UAAY/F,KAAKyE,sBAAmBvT,GAE/FiS,EAASxJ,UAAUuO,eAAiB,SAAUa,GAC1C,IAAI3F,EAAQpD,KAIZ,GAHI+I,EAAKxT,KAAKwB,UAAUmH,SAASkD,EAAW9N,YACxC0M,KAAKuI,cAAe,GAEpBvI,KAAK5J,cAAgB4J,KAAKgJ,UAAUD,EAAKxT,MAAO,CAChD,IACI0T,EADApT,OAAkB,GAGtBA,EAAkBqT,iBAAelJ,KAAK/L,eAAe,GACjDf,SAAS,EAAOyS,UAAW3F,KAAK2F,UAChC/Q,SAAUwM,EAAWsB,oBAETzL,aAAa,OAAQ,YACrC,IAAIkS,EAAiBtT,EAAgBtE,cAAc,IAAM6P,EAAWmB,cAGpE,GAFAwG,EAAKxT,KAAKwB,UAAUC,IAAIoK,EAAWuB,eACnCoG,EAAKxT,KAAKuB,kBAAkBC,UAAUC,IAAIoK,EAAWiB,UACnB,iBAAvBrC,KAAK9L,WAAW,IAAiD,iBAAvB8L,KAAK9L,WAAW,GAEjE,GADA+U,EAAc5Y,EAAe0Y,EAAK5T,QAAS6K,KAAKiE,eAAe1T,QAC3DyP,KAAK0I,oBAAsBjY,oBAAkBuP,KAAKyI,YAAa,EAEhD,IADHzI,KAAKyI,WAAWW,UAAU,SAAUzX,GAAK,OAAOA,IAAMsX,EAAY7F,EAAMa,eAAe1T,OAAOwE,IAAImC,cAE1G8I,KAAKqJ,gBAAgBN,EAAMlT,QAG1BoT,EAAYjJ,KAAKiE,eAAe1T,OAAOkN,YAC5CuC,KAAKqJ,gBAAgBN,EAAMlT,OAGM,iBAAvBmK,KAAK9L,WAAW,IACA,iBAAvB8L,KAAK9L,WAAW,KAA8D,IAA1C8L,KAAKwI,aAAahP,QAAQuP,EAAK/V,OAC1EgN,KAAKqJ,gBAAgBN,EAAMlT,GAE/BA,EAAgBoB,aAAa,eAAgBkS,EAAepS,UAAUmH,SAASkD,EAAWlO,SAAW,OAAS,SAC9G2C,EAAgBoB,aAAa,aAAc8R,EAAK/V,MAClB,SAA1BgN,KAAKsJ,kBACLzT,EAAgBkB,UAAUC,IAAIoK,EAAWqB,cACzCsG,EAAKxT,KAAKuB,kBAAkBC,UAAUC,IAAIoK,EAAWqB,cACrDsG,EAAKxT,KAAKuB,kBAAkB9E,aAAa6D,EAAiBkT,EAAKxT,KAAKuB,kBAAkBkE,WAAW,MAGjGnF,EAAgBkB,UAAUC,IAAIoK,EAAWoB,eACzCuG,EAAKxT,KAAKuB,kBAAkBC,UAAUC,IAAIoK,EAAWoB,eACrDuG,EAAKxT,KAAKuB,kBAAkBrE,YAAYoD,IAE5CmK,KAAKsI,kBAAkBlW,KAAK2W,EAAKxT,MACH,SAA1ByK,KAAKsJ,iBACLtJ,KAAKuJ,gBAAkBR,EAAKxT,KAAKuB,kBAAkBzE,SAAS,GAG5D2N,KAAKuJ,gBAAkBR,EAAKxT,KAAKuB,kBAAkB0S,mBAI/DrG,EAASxJ,UAAU0P,gBAAkB,SAAUN,EAAMlT,GACjDkT,EAAKxT,KAAKwB,UAAUC,IAAIoK,EAAWjO,UACnC0C,EAAgBtE,cAAc,IAAM6P,EAAWmB,cAAcxL,UAAUC,IAAIoK,EAAWlO,SACtF2C,EAAgBoB,aAAa,eAAgB,SAOjDkM,EAASxJ,UAAU8P,UAAY,SAAUlU,GACrCyK,KAAK0J,gBAAgBnU,GAAM,IAE/B4N,EAASxJ,UAAU+P,gBAAkB,SAAUnU,EAAMrC,GACjD,GAAI8M,KAAK5J,aAAc,CACnB,IAAIkH,EAAY/H,EAIhB,GAHIA,aAAgB1E,QAAU0E,EAAK0K,cAAgB0J,gBAC/CrM,EAAY0C,KAAK4J,sBAAsBrU,KAEtC9E,oBAAkB6M,GAAY,CAC/B,IAAIiF,EAAejF,EAAU/L,cAAc,IAAM6P,EAAWmB,eAC5C,IAAZrP,EACAoK,EAAUvG,UAAUC,IAAIoK,EAAWjO,UAGnCmK,EAAUvG,UAAU8D,OAAOuG,EAAWjO,WAE1B,IAAZD,EACAqP,EAAaxL,UAAUC,IAAIoK,EAAWlO,SAGtCqP,EAAaxL,UAAU8D,OAAOuG,EAAWlO,SAE7CqP,EAAamE,cAAczP,aAAa,eAAgB/D,EAAU,OAAS,SAE/E8M,KAAK6J,oBAAoBvM,GACzB0C,KAAK8J,qBAQb3G,EAASxJ,UAAUoQ,YAAc,SAAUxU,GACvCyK,KAAK0J,gBAAgBnU,GAAM,IAK/B4N,EAASxJ,UAAUqQ,cAAgB,WAC/BhK,KAAKiK,oBAAmB,IAK5B9G,EAASxJ,UAAUuQ,gBAAkB,WACjClK,KAAKiK,oBAAmB,IAE5B9G,EAASxJ,UAAUsQ,mBAAqB,SAAU/W,GAC9C,GAAI8M,KAAK5J,aAAc,CACnB,IAAK,IAAInB,EAAI,EAAGA,EAAI+K,KAAKjB,aAAahO,OAAQkE,IAAK,CAC/C,IAAIkV,EAAYnK,KAAKjB,aAAa9J,GAAG1D,cAAc,IAAM6P,EAAWmB,cAChE4H,IACIjX,EACKiX,EAAUpT,UAAUmH,SAASkD,EAAWlO,UACzC8M,KAAKyJ,UAAUzJ,KAAKjB,aAAa9J,IAIjCkV,EAAUpT,UAAUmH,SAASkD,EAAWlO,UACxC8M,KAAK+J,YAAY/J,KAAKjB,aAAa9J,KAK/C+K,KAAKmE,sBACLnE,KAAKoE,qBAAqBgG,YAAYlX,GAE1C8M,KAAK8J,qBAGb3G,EAASxJ,UAAUiL,YAAc,WAC7B,GAAI5E,KAAK5J,aAML,IAAK,IALD2I,EAAerF,MAAMC,UAAUrH,MAAMC,KAAKyN,KAAKrH,QAAQiC,iBAAiB,IAAMwG,EAAWK,WACzFsH,GACAxT,UAAMrE,EAAWiE,aAASjE,EAAWgD,gBAAYhD,EAAWX,YAAQW,EACpEkD,aAASlD,EAAW8B,KAAM,IAErBiC,EAAI,EAAGA,EAAI8J,EAAahO,OAAQkE,IAAK,CAC1C,IAAI0D,EAAUoG,EAAa9J,GAC3B8T,EAAKxT,KAAOoD,EAEZoQ,EAAK5T,QAAU6K,KAAKqK,YAAY1R,GAC5BA,EAAQpH,cAAc,IAAM6P,EAAWgB,kBACvCpC,KAAK8I,cAAcnQ,EAAQpH,cAAc,IAAM6P,EAAWgB,kBAE9DpC,KAAKkI,eAAea,GAChBA,EAAKxT,KAAKwB,UAAUmH,SAASkD,EAAWjO,WACxC6M,KAAKqJ,gBAAgBN,EAAMA,EAAKxT,KAAKhE,cAAc,IAAM6P,EAAWgB,sBAI3E,CAED,IADIrD,EAAerF,MAAMC,UAAUrH,MAAMC,KAAKyN,KAAKrH,QAAQiC,iBAAiB,IAAMwG,EAAWuB,gBACpF1N,EAAI,EAAGA,EAAI8J,EAAahO,OAAQkE,IAAK,EACtC0D,EAAUoG,EAAa9J,IACnB8B,UAAU8D,OAAOuG,EAAWjO,UACpCwF,EAAQ7B,kBAAkBC,UAAU8D,OAAOuG,EAAWiB,UACtDrC,KAAK8I,cAAcnQ,EAAQpH,cAAc,IAAM6P,EAAWgB,kBAE1DpC,KAAKsK,eACLtK,KAAKsK,cAAc/U,KAAKwB,UAAUC,IAAIoK,EAAWjO,YAO7DgQ,EAASxJ,UAAU4Q,kBAAoB,WAC/BvK,KAAKoE,sBACLpE,KAAKoE,qBAAqBmG,qBAGlCpH,EAASxJ,UAAU6Q,aAAe,SAAU7Y,GACxC,IAAI+H,MAAM+Q,QAAQzK,KAAK9L,aAA0C,IAA3B8L,KAAK9L,WAAWnD,OAAtD,CAGA,IAAIyB,EAASb,EAAEa,OACfwN,KAAK0K,cAAgBlY,EACrB,IACImY,EADA5T,EAAYvE,EAAOuE,UAEvB,GAAIA,EAAUmH,SAASkD,EAAWc,WAAanL,EAAUmH,SAASkD,EAAWU,YACrE9B,KAAK5J,cAAgB4J,KAAKuE,WAAWvE,KAAKuE,WAAWxT,OAAS,IAC9DiP,KAAKkK,kBAETlK,KAAK4K,WAEJ,CACD,IAAIhY,EAAKiY,UAAQrY,EAAOsY,WAAY,IAAM1J,EAAWK,UAKrD,GAJW,OAAP7O,IACAA,EAAKJ,GAETwN,KAAK+K,cACD/K,KAAK0F,QAAU1F,KAAK5J,cAAgB4J,KAAKgJ,UAAUpW,GACnD,GAAIjB,EAAEa,OAAOuE,UAAUmH,SAASkD,EAAWmB,cAAe,CAEtD,GADA3P,EAAGmE,UAAUC,IAAIoK,EAAWG,SACxB9Q,oBAAkBmC,EAAGrB,cAAc,IAAM6P,EAAWlO,UAAW,CAC/D,IAAI6V,GACA5T,aAASjE,EAAWgD,gBAAYhD,EAAWX,YAAQW,EAAWkD,aAASlD,EACvE8B,UAAM9B,EAAWqE,KAAM3C,GAE3BoN,KAAKqJ,gBAAgBN,EAAMA,EAAKxT,KAAKhE,cAAc,IAAM6P,EAAWgB,uBAGpEpC,KAAK+J,YAAYnX,GACjBA,EAAGmE,UAAUC,IAAIoK,EAAWG,SAKhC,GAHIvB,KAAKmE,sBACLnE,KAAKoE,qBAAqB4G,cAAcpY,EAAIjB,GAE5CA,EAAG,CACH,IAAIsZ,EAAYjL,KAAKkL,gBAAgBtY,EAAIjB,GACrCwY,EAAYvX,EAAGrB,cAAc,IAAM6P,EAAWmB,cAClDlK,QAAM4S,GAAaxN,UAAW0M,EAAUpT,UAAUmH,SAASkD,EAAWlO,WACtE8M,KAAK+H,QAAQ,SAAUkD,SAGtBrY,EAAGmE,UAAUmH,SAASkD,EAAW9N,WACtC0M,KAAKmL,cACLnL,KAAKoL,eACLpL,KAAKoL,aAAaxY,GAClBoN,KAAKqL,YAAYzY,EAAIjB,GACrBiB,EAAGmE,UAAU8D,OAAOuG,EAAWjO,YAG/B6M,KAAKgL,cAAcpY,EAAIjB,GACE,UAApBa,EAAOqJ,UAA8C,aAApBrJ,EAAOqJ,WACzCrJ,EAAOuE,UAAUC,IAAI,aACrBgJ,KAAK0K,cAAgBlY,SAK7BwN,KAAKqL,YAAYzY,EAAIjB,GACI,UAApBa,EAAOqJ,UAA8C,aAApBrJ,EAAOqJ,WACzCrJ,EAAOuE,UAAUC,IAAI,aACrBgJ,KAAK0K,cAAgBlY,GAG7BmY,EAAiBE,UAAQlZ,EAAEa,OAAQ,MAC9B/B,oBAAkBka,IACfA,EAAe5T,UAAUmH,SAAS,iBACjCvM,EAAEa,OAAOkU,cAAc3P,UAAUmH,SAAS,wBAC3CyM,EAAe5T,UAAUC,IAAIoK,EAAWY,SAIpDhC,KAAK8J,qBAET3G,EAASxJ,UAAUmP,cAAgB,SAAUnQ,GACzC,OAAOA,GAAWA,EAAQmS,YAAcnS,EAAQmS,WAAWQ,YAAY3S,IAE3EwK,EAASxJ,UAAU4R,aAAe,SAAU5Z,GACxC,IAAI6Z,EAAQX,UAAQlZ,EAAEa,OAAOsY,WAAY,IAAM1J,EAAWK,UAC1DzB,KAAKyL,WAAWD,IAGpBrI,EAASxJ,UAAU+R,aAAe,SAAU/Z,GACxCqO,KAAKmL,eAEThI,EAASxJ,UAAUgS,eAAiB,SAAUha,EAAGkW,GAE7C,GADAlW,EAAEia,iBACE/a,OAAOC,KAAKkP,KAAK9L,YAAYnD,QAAUiP,KAAKgI,MAAO,CACnD,IAAIpV,EAAKoN,KAAKgI,MAAMpN,iBAAiB,IAAMwG,EAAWK,UAClDoK,EAAiB7L,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWG,UAC3DvB,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWjO,UAC1C0Y,IACAA,EAAe9U,UAAU8D,OAAOuG,EAAWG,SACtCvB,KAAK5J,cACNyV,EAAe9U,UAAU8D,OAAOuG,EAAWjO,WAGnD,IAAIhB,EAAS0V,EAAUjV,EAAG7B,OAAS,EAAhB,EACf6B,EAAGT,GAAO4E,UAAUmH,SAASkD,EAAW9N,WAAa0M,KAAK5J,aAC1DxD,EAAGT,GAAO4E,UAAUC,IAAIoK,EAAWG,SAGnCvB,KAAKqL,YAAYzY,EAAGT,GAAQR,GAE5BiB,EAAGT,GACH6N,KAAKrH,QAAQ1B,aAAa,wBAAyBrE,EAAGT,GAAO4C,GAAGmC,YAGhE8I,KAAKrH,QAAQtB,gBAAgB,2BAIzC8L,EAASxJ,UAAUmS,eAAiB,SAAUna,EAAGoa,GAC7C,IAAIhO,EACAnL,EA+BJ,OA9BgBnC,oBAAkBuP,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAW9N,YAC5D0M,KAAK5J,cACjBxD,EAAKoN,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWG,UAAYvB,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWjO,UACrG4K,EAAYhK,WAAS8J,aAAamC,KAAKgI,MAAMpN,iBAAiB,IAAMwG,EAAWK,UAAW7O,EAAImZ,GACzFtb,oBAAkBsN,KACfnL,IACAA,EAAGmE,UAAU8D,OAAOuG,EAAWG,SAC1BvB,KAAK5J,cACNxD,EAAGmE,UAAU8D,OAAOuG,EAAWjO,WAGnC4K,EAAUhH,UAAUmH,SAASkD,EAAW9N,WAAa0M,KAAK5J,aAC1D2H,EAAUhH,UAAUC,IAAIoK,EAAWG,SAGnCvB,KAAKqL,YAAYtN,EAAWpM,MAKpCiB,EAAKoN,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWjO,UAC/C4K,EAAYhK,WAAS8J,aAAamC,KAAKgI,MAAMpN,iBAAiB,IAAMwG,EAAWK,UAAW7O,EAAImZ,GAC9F/L,KAAKqL,YAAYtN,EAAWpM,IAE5BoM,EACAiC,KAAKrH,QAAQ1B,aAAa,wBAAyB8G,EAAUhJ,GAAGmC,YAGhE8I,KAAKrH,QAAQtB,gBAAgB,yBAE1B0G,GAEXoF,EAASxJ,UAAUqS,gBAAkB,SAAUra,EAAGoa,GAC9C,IAAI3I,EAAQpD,KAEZ,GADArO,EAAEia,iBACE/a,OAAOC,KAAKkP,KAAK9L,YAAYnD,QAAUiP,KAAKgI,MAAO,CACnD,IAAIjK,EAAYiC,KAAK8L,eAAena,EAAGoa,GACnCE,EAAajM,KAAKrH,QAAQuT,wBAAwBC,IAClDC,EAAgBpM,KAAKrH,QAAQuT,wBAAwB9G,OACrDiH,EAAkBrM,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWK,UAAUyK,wBACtEI,OAAa,EACbC,OAAkB,EAItB,GAHIvM,KAAKzP,OAAOmN,UACZ6O,EAAkBvM,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWQ,eAAesK,yBAE3EnO,EAAW,CACX,IAAIyO,EAAazO,EAAUmO,wBAAwBC,IAC/CM,EAAgB1O,EAAUmO,wBAAwB9G,OACtD,GAAK2G,GAcDO,EAAatM,KAAKuF,SAAWiH,EAAcA,EAAaP,GACvC,KACS,IAAlBjM,KAAKuF,SACLmH,OAAOC,OAAO,EAAGC,YAAcN,GAG/BtM,KAAKrH,QAAQkU,UAAY7M,KAAKrH,QAAQkU,UAAYP,OApBnD,CACP,IAAIlH,EAASpF,KAAKuF,SAAWmH,OAAOI,YAAcV,GAClDE,EAAatM,KAAKuF,SAAYiH,EAAaC,EACrCD,EAAaP,EAAcQ,GAChBrH,KACS,IAAlBpF,KAAKuF,SACLmH,OAAOC,OAAO,EAAGC,aAAeN,EAAalH,IAG7CpF,KAAKrH,QAAQkU,UAAY7M,KAAKrH,QAAQkU,WAAaP,EAAalH,UAgB3E,GAAIpF,KAAKmE,sBAAwB4H,GAAQ/L,KAAKoE,qBAAqB2I,aACpE/M,KAAKgN,aAAe,WAChB5J,EAAM0I,eAAena,EAAGoa,GACxB3I,EAAM4J,kBAAe9b,GAEzBob,EAAatM,KAAKoE,qBAAqB6I,gBACjB,IAAlBjN,KAAKuF,SACLmH,OAAOC,OAAO,EAAGC,YAAcN,GAG/BtM,KAAKrH,QAAQkU,UAAY7M,KAAKrH,QAAQkU,UAAYP,OAGrD,GAAIP,EACL,GAAI/L,KAAKgG,YAAchG,KAAK+F,UAAW,CACnC,IAAImH,EAAYX,EAAkBA,EAAgBJ,IAAME,EAAgBF,IACpEgB,EAAenN,KAAK+F,UAAUmG,wBAClCI,EAAaa,EAAahB,IAAM,EAAKgB,EAAa/H,OAAS8H,EAAa,GAClD,IAAlBlN,KAAKuF,SACLmH,OAAOC,OAAO,EAAGC,YAAcN,GAG/BtM,KAAKrH,QAAQkU,UAAY,OAGxB7M,KAAKzP,OAAOmN,UACjB4O,EAAatM,KAAKuF,SAAYgH,EAAgBJ,IAAM,EAAII,EAAgBJ,IAAM,EACzEF,EAAaI,EAAgBF,IAAOI,EAAgBnH,QACnC,IAAlBpF,KAAKuF,SACLmH,OAAOC,OAAO,EAAGC,YAAcN,GAG/BtM,KAAKrH,QAAQkU,UAAY7M,KAAKrH,QAAQkU,UAAYP,KAMtEnJ,EAASxJ,UAAUyT,gBAAkB,SAAUzb,GAC3C,GAAId,OAAOC,KAAKkP,KAAK9L,YAAYnD,QAAUiP,KAAKgI,MAAO,CACnD,IAAI1U,GAAY7C,oBAAkBuP,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAW9N,WACxEV,EAAKoN,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWG,SAC/CjO,GAAYV,IACZA,EAAGmE,UAAU8D,OAAOuG,EAAWG,SAC3BvB,KAAK5J,eACL4J,KAAKoL,eACLpL,KAAKoL,aAAaxY,GAClBoN,KAAKmL,eAETnL,KAAKqL,YAAYzY,EAAIjB,MAIjCwR,EAASxJ,UAAU0T,gBAAkB,SAAU1b,GAE3C,GADAA,EAAEia,iBACE5L,KAAK0F,QAAU1F,KAAK5J,cAAgBvF,OAAOC,KAAKkP,KAAK9L,YAAYnD,QAAUiP,KAAKgI,MAAO,CACvF,IAAIpV,EAAKoN,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWG,SAC/C1L,OAAkB,EAClBsU,OAAY,EAChB,IAAK1Z,oBAAkBmC,IAAOnC,oBAAkBmC,EAAGrB,cAAc,IAAM6P,EAAWlO,UAAW,CACzF,IAAI6V,GACA5T,aAASjE,EAAWgD,gBAAYhD,EAAWX,YAAQW,EAAWkD,aAASlD,EACvE8B,UAAM9B,EAAWqE,KAAM3C,GAE3BiD,EAAkBkT,EAAKxT,KAAKhE,cAAc,IAAM6P,EAAWgB,iBAC3DpC,KAAKqJ,gBAAgBN,EAAMlT,GAC3BsU,EAAYtU,EAAgBtE,cAAc,IAAM6P,EAAWmB,aAAe,IAAMnB,EAAWrO,WAG3FiN,KAAK+J,YAAYnX,GAErB,IAAIqY,EAAYjL,KAAKkL,gBAAgBtY,EAAIjB,GACzC0G,QAAM4S,GAAaxN,YAAW0M,GAAYA,EAAUpT,UAAUmH,SAASkD,EAAWlO,WAClF8M,KAAK+H,QAAQ,SAAUkD,GACvBjL,KAAK8J,qBAGb3G,EAASxJ,UAAU2T,iBAAmB,SAAU3b,GAC5C,OAAQA,EAAE4b,SACN,KAAK,GACDvN,KAAK2L,eAAeha,GACpB,MACJ,KAAK,GACDqO,KAAK2L,eAAeha,GAAG,GACvB,MACJ,KAAK,GACDqO,KAAKgM,gBAAgBra,GACrB,MACJ,KAAK,GACDqO,KAAKgM,gBAAgBra,GAAG,GACxB,MACJ,KAAK,GACDqO,KAAKoN,gBAAgBzb,GACrB,MACJ,KAAK,EACGqO,KAAK5J,cAAgB4J,KAAKuE,WAAWvE,KAAKuE,WAAWxT,OAAS,IAC9DiP,KAAKkK,kBAETlK,KAAK4K,OACL,MACJ,KAAK,IACGna,oBAAkBuP,KAAK0K,gBAAoB1K,KAAK0K,cAAc3T,UAAUmH,SAAS,cACjF8B,KAAKqN,gBAAgB1b,KAKrCwR,EAASxJ,UAAU6T,mBAAqB,SAAU7b,GACrB,UAArBA,EAAE8b,gBAA8B9b,EAAE+b,SAr1B1B,IAq1B+E,aAAzB/b,EAAEgc,cAAclX,OAC1EuJ,KAAK5J,cAAgB4J,KAAKuE,WAAWvE,KAAKuE,WAAWxT,OAAS,IAC9DiP,KAAKkK,kBAETlK,KAAK4K,SAGbzH,EAASxJ,UAAUiU,SAAW,WAC1B,GAAI/c,OAAOC,KAAKkP,KAAK9L,YAAYnD,QAAUiP,KAAKgI,MAAO,CACnD,IAAI6D,EAAiB7L,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWG,SAC3DsK,IACAA,EAAe9U,UAAU8D,OAAOuG,EAAWG,SACtCvB,KAAK5J,cAAiB3F,oBAAkBuP,KAAK6N,aAC9C7N,KAAK6N,WAAW9W,UAAUC,IAAIoK,EAAWjO,aAKzDgQ,EAASxJ,UAAUmU,WAAa,WAC5BC,eAAa/W,IAAIgJ,KAAKrH,QAAS,UAAWqH,KAAKsN,iBAAkBtN,MACjE+N,eAAa/W,IAAIgJ,KAAKrH,QAAS,QAASqH,KAAKwK,aAAcxK,MAC3D+N,eAAa/W,IAAIgJ,KAAKrH,QAAS,YAAaqH,KAAKuL,aAAcvL,MAC/D+N,eAAa/W,IAAIgJ,KAAKrH,QAAS,WAAYqH,KAAK0L,aAAc1L,MAC9D+N,eAAa/W,IAAIgJ,KAAKrH,QAAS,WAAYqH,KAAK4N,SAAU5N,MAC1DA,KAAKgO,YAAc,IAAIC,QAAMjO,KAAKrH,SAAWuV,MAAOlO,KAAKwN,mBAAmBrF,KAAKnI,QAC5EvP,oBAAkBuP,KAAK2M,SACxBoB,eAAa/W,IAAIgJ,KAAKrH,QAAS,SAAUqH,KAAKmO,aAAcnO,OAGpEmD,EAASxJ,UAAUyU,aAAe,WAC9BL,eAAalT,OAAOmF,KAAKrH,QAAS,QAASqH,KAAKwK,cAChDuD,eAAalT,OAAOmF,KAAKrH,QAAS,YAAaqH,KAAKuL,cACpDwC,eAAalT,OAAOmF,KAAKrH,QAAS,WAAYqH,KAAK0L,cACnDqC,eAAalT,OAAOmF,KAAKrH,QAAS,YAAaqH,KAAKuL,cACpDwC,eAAalT,OAAOmF,KAAKrH,QAAS,WAAYqH,KAAK0L,cAC9Cjb,oBAAkBuP,KAAK2M,SACxBoB,eAAalT,OAAOmF,KAAKrH,QAAS,SAAUqH,KAAKmO,cAErDnO,KAAKgO,YAAYK,UACjBrO,KAAKgO,YAAc,MAEvB7K,EAASxJ,UAAUoR,YAAc,WAE7B,IAAK,IAAIpa,EAAK,EAAG2d,EADDtO,KAAKrH,QAAQiC,iBAAiB,IAAMwG,EAAWG,SACrB5Q,EAAK2d,EAAYvd,OAAQJ,IAAM,CAC3D2d,EAAY3d,GAClBoG,UAAU8D,OAAOuG,EAAWG,WAGxC4B,EAASxJ,UAAUwR,YAAc,WAC7B,IAAIoD,EAAUvO,KAAKrH,QAAQpH,cAAc,IAAM6P,EAAWE,OACtDiN,GACAA,EAAQxX,UAAU8D,OAAOuG,EAAWE,QAG5C6B,EAASxJ,UAAUyR,aAAe,SAAUxY,GACxC,GAAInC,oBAAkBmC,GAElB,IAAK,IAAIjC,EAAK,EAAG6d,EADAxO,KAAKrH,QAAQiC,iBAAiB,IAAMwG,EAAWjO,UACpBxC,EAAK6d,EAAazd,OAAQJ,IAAM,CACxE,IAAI8d,EAAMD,EAAa7d,GACnBqP,KAAK5J,cAAgBqY,EAAIld,cAAc,IAAM6P,EAAWlO,UAIxDub,EAAI1X,UAAU8D,OAAOuG,EAAWjO,eAKxCP,EAAGmE,UAAU8D,OAAOuG,EAAWjO,WAGvCgQ,EAASxJ,UAAUqP,UAAY,SAAUpW,GACrC,OAAQA,GAAMA,EAAGmE,UAAUmH,SAASkD,EAAWK,YACvC7O,EAAGmE,UAAUmH,SAASkD,EAAWQ,iBACjChP,EAAGmE,UAAUmH,SAASkD,EAAWY,UAE7CmB,EAASxJ,UAAUqR,cAAgB,SAAUpY,EAAIjB,GAC7C,GAAIqO,KAAKgJ,UAAUpW,IAAOoN,KAAK0F,QAAU1F,KAAK5J,aAAc,CACpD4J,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWG,UAC1CvB,KAAKgI,MAAMzW,cAAc,IAAM6P,EAAWG,SAASxK,UAAU8D,OAAOuG,EAAWG,SAEnF,IAAImN,EAAgB9b,EAAGrB,cAAc,aAAeqB,EAAGrB,cAAc,SACrEqB,EAAGmE,UAAUC,IAAIoK,EAAWG,SACvB9Q,oBAAkBkB,IACfA,EAAEa,SAAWkc,GACbA,EAAc3X,UAAUC,IAAI,aAGpC,IAAInB,EAAkBjD,EAAGrB,cAAc,IAAM6P,EAAWgB,iBACpD+H,EAAYtU,EAAgBtE,cAAc,IAAM6P,EAAWmB,aAAe,IAAMnB,EAAWrO,MAC/FiN,KAAKmL,cACAhB,EAAUpT,UAAUmH,SAASkD,EAAWlO,UAKzCiX,EAAUpT,UAAU8D,OAAOuG,EAAWlO,SACtCN,EAAGmE,UAAU8D,OAAOuG,EAAWjO,YAL/BgX,EAAUpT,UAAUC,IAAIoK,EAAWlO,SACnCN,EAAGmE,UAAUC,IAAIoK,EAAWjO,WAMhC0C,EAAgBoB,aAAa,eAAgBkT,EAAUpT,UAAUmH,SAASkD,EAAWlO,SACjF,OAAS,SACb,IAAI+X,EAAYjL,KAAKkL,gBAAgBtY,EAAIjB,GACzC0G,QAAM4S,GAAaxN,UAAW0M,EAAUpT,UAAUmH,SAASkD,EAAWlO,WAClE8M,KAAKmE,sBACLnE,KAAKoE,qBAAqB4G,cAAcpY,EAAIjB,GAEhDqO,KAAK+H,QAAQ,SAAUkD,GACvBjL,KAAK6J,oBAAoBjX,GACzBoN,KAAK2O,cAAc/b,KAG3BuQ,EAASxJ,UAAUuR,gBAAkB,SAAUtY,EAAIjB,GAC/C,IAEIid,EAFAtT,EAAO0E,KAAKqK,YAAYzX,GACxBpC,EAAYH,EAAeiL,EAAM0E,KAAKiE,eAAe1T,QAIrDqe,GAFCne,oBAAkB6K,IACc,iBAAvB0E,KAAK9L,WAAW,IAAiD,iBAAvB8L,KAAK9L,WAAW,IACnDqB,KAAM3C,EAAII,KAAMJ,GAAMA,EAAGgF,UAAUlG,OAAQ4J,KAAM0E,KAAK9L,aAK/DqB,KAAM3C,EAAII,KAAMxC,GAAaA,EAAUwP,KAAKiE,eAAe1T,OAAOyC,MAElEsI,KAAMA,GAGlB,IAAI2P,KAKJ,OAJA5S,QAAM4S,EAAW2D,GACbjd,GACA0G,QAAM4S,GAAa4D,cAAc,EAAMC,MAAOnd,EAAGod,QAAQ,EAAO5c,MAAO6N,KAAKgI,OAAStO,MAAMC,UAAUH,QAAQjH,KAAKyN,KAAKgI,MAAM3V,SAAUO,KAEpIqY,GAEX9H,EAASxJ,UAAUkQ,oBAAsB,SAAUjX,GAC/C,IAAI0I,EAAO0E,KAAKqK,YAAYzX,GAExBpC,EAAYH,EAAeiL,EAAM0E,KAAKiE,eAAe1T,QACpDE,oBAAkB6K,IAAyC,iBAAvB0E,KAAK9L,WAAW,IACtB,iBAAvB8L,KAAK9L,WAAW,GAQxB8L,KAAKsK,eACD/U,KAAM3C,EAENI,KAAMxC,GAAaA,EAAUwP,KAAKiE,eAAe1T,OAAOyC,MAExDsI,KAAMA,GAZV0E,KAAKsK,eACD/U,KAAM3C,EACNI,KAAMJ,GAAMA,EAAGgF,UAAUlG,OACzB4J,KAAM0E,KAAK9L,aAavBiP,EAASxJ,UAAU0R,YAAc,SAAUzY,EAAIjB,GAC3C,IAAIyR,EAAQpD,KACZ,GAAIA,KAAKgJ,UAAUpW,KAAQA,EAAGmE,UAAUmH,SAASkD,EAAWjO,WAAa6M,KAAK0F,OAAQ,CAC7E1F,KAAK5J,cACN4J,KAAKoL,eAETxY,EAAGmE,UAAUC,IAAIoK,EAAWjO,UAC5B6M,KAAKmL,cACLnL,KAAK6J,oBAAoBjX,GACrBoN,KAAKmE,sBACLnE,KAAKoE,qBAAqBiH,YAAYzY,EAAIjB,GAE9C,IAAIsZ,EAAYjL,KAAKkL,gBAAgBtY,EAAIjB,GACzCqO,KAAK+H,QAAQ,SAAUkD,EAAW,SAAU+D,GACnCA,EAAaD,SACd3L,EAAMyK,WAAajb,EACnBwQ,EAAMuL,cAAc/b,QAKpCuQ,EAASxJ,UAAU8R,WAAa,SAAU7Y,GACtC,GAAIoN,KAAKgJ,UAAUpW,KAAQA,EAAGmE,UAAUmH,SAASkD,EAAWE,QAAUtB,KAAK0F,OAAQ,CAC/E,IAAIuJ,EAASjP,KAAKrH,QAAQiC,iBAAiB,IAAMwG,EAAWE,OACxD2N,GAAUA,EAAOle,QACjBoU,cAAY8J,EAAQ7N,EAAWE,OAE9B1O,EAAGmE,UAAUmH,SAASkD,EAAWjO,YAAa6M,KAAK5J,cACpDxD,EAAGmE,UAAUC,IAAIoK,EAAWE,SAKxC6B,EAASxJ,UAAUmL,SAAW,WAC1B,IAAIoK,EAAYlP,KAAKuE,WACrB,GAAI2K,EAAUne,OAAQ,CAElB,IAAK,IADD2H,EAAKsH,KAAKmP,UACLxe,EAAK,EAAGye,EAAcF,EAAWve,EAAKye,EAAYre,OAAQJ,IAAM,CACrE,IAAI+N,EAAM0Q,EAAYze,GAClB0e,KAEJA,EAAMrP,KAAKzP,OAAOwE,IAAM2J,EACxBsB,KAAKsP,UAAYtP,KAAKuP,eAAe7W,EAAI2W,GACzC,IAAI7e,EAAYH,EAAe2P,KAAKsP,UAAWtP,KAAKiE,eAAe1T,QACnEmI,EAAKsH,KAAKsP,UAAY9e,EAAUwP,KAAKzP,OAAOwF,OAAS2C,EAEzD,OAAOA,EAEX,OAAOsH,KAAKmP,WAEhBhM,EAASxJ,UAAU0Q,YAAc,SAAUzX,GACvC,IAGI4c,EAHAtb,EAAa8L,KAAK9L,sBAAsBmG,cACxC2F,KAAKmP,UAAYnP,KAAK9L,WACtB3D,EAASyP,KAAKyP,cAAc7c,GAQhC,OALI4c,EADA/e,oBAAkBuP,KAAKrH,QAAQpH,cAAc,IAAM6P,EAAW9N,YAAc0M,KAAKzP,OAAOmN,QAChFsC,KAAK6E,UAGL3Q,EAEL8L,KAAKuP,eAAeC,EAAOjf,IAEtC4S,EAASxJ,UAAU4V,eAAiB,SAAUrb,EAAY3D,EAAQmf,GAC9D,IACIC,EADAvM,EAAQpD,KAmCZ,OAjCI9L,GAAcA,EAAWnD,QAAUR,EACnC2D,EAAW0b,KAAK,SAAUtU,GACtB,IAAI9K,EAEJH,EAAeiL,EAAM8H,EAAMa,eAAe1T,QAE1C,IAAKA,EAAO6S,EAAM7S,OAAOwE,MAAOxE,EAAO6S,EAAM7S,OAAOyC,OAC9CzC,EAAO6S,EAAM7S,OAAOwE,OAAStE,oBAAkBD,EAAU4S,EAAM7S,OAAOwE,MACpEvE,EAAU4S,EAAM7S,OAAOwE,IAAImC,cAAgB3G,EAAO6S,EAAM7S,OAAOwE,IAAImC,YACrE3G,EAAO6S,EAAM7S,OAAOyC,OAASxC,EAAU4S,EAAM7S,OAAOyC,QAAUzC,EAAO6S,EAAM7S,OAAOyC,MAGnF,GAAoB,iBAATsI,IAAmD,IAA9BpH,EAAWsF,QAAQ8B,GACpDqU,EAAcD,EAASxb,EAAaoH,OAEnC,IAAK7K,oBAAkBF,EAAO6S,EAAM7S,OAAOwE,MAAQtE,oBAAkBD,EAAU4S,EAAM7S,OAAOwE,KAAM,CACnG,IAAInC,EAAKwQ,EAAMzK,QAAQpH,cAAc,cAC/BhB,EAAO6S,EAAM7S,OAAOwE,IAAM,MAE5BnC,GAAMA,EAAGgF,UAAUlG,SAAWlB,EAAU4S,EAAM7S,OAAOyC,QACrD2c,EAAarU,QAIZ9K,EAAUyF,eAAemN,EAAM7S,OAAOwF,QAAUvF,EAAU4S,EAAM7S,OAAOwF,OAAOhF,SACnF4e,EAAavM,EAAMmM,eAAe/e,EAAU4S,EAAM7S,OAAOwF,OAAQxF,EAAQmf,SAfzEC,EAAcD,EAASxb,EAAaoH,EAiBxC,QAASqU,IAIbA,EAAazb,EAEVyb,GAEXxM,EAASxJ,UAAUkW,SAAW,WAC1B,IAAIC,KACA/V,EAASiG,KAAKjG,MAAQiG,KAAKjG,MAAQ,IAAIC,QAC3C,IAAKgG,KAAKjG,MAAO,CAEb,IAAK,IAAIpJ,EAAK,EAAGC,EAAKC,OAAOC,KAAKkP,KAAKzP,OAAO2T,YAAavT,EAAKC,EAAGG,OAAQJ,IAAM,CAC7E,IAAIof,EAASnf,EAAGD,GACD,cAAXof,GAA6B/P,KAAKzP,OAAO,GAAKwf,IAC9C/P,KAAKzP,OAAO,GAAKwf,KACbhc,WAAS2B,oBAAoB,GAAKqa,KACY,IAA/CD,EAAQtW,QAAQwG,KAAKzP,OAAO,GAAKwf,KACpCD,EAAQ1d,KAAK4N,KAAKzP,OAAO,GAAKwf,IAGtChW,EAAMiW,OAAOF,GAET9P,KAAKzP,OAAO2T,WAAWjO,eAAe,cACtC8D,EAAMlI,KAAKmO,KAAKzP,OAAO0f,WAG/B,OAAOlW,GAEXoJ,EAASxJ,UAAUuW,kBAAoB,SAAUhc,QAC1B,IAAfA,IAAyBA,EAAa8L,KAAKmP,WAE/C,IAAIgB,EAAc1f,oBAAkBuP,KAAKzP,OAAOuJ,QAAWkG,KAAKzP,OAAOyC,KAAOgN,KAAKzP,OAAOuJ,OACtFC,EAAQhG,WAAS6F,WAAWoG,KAAKnG,UAAWsW,GAC5Cjc,GAAc8L,KAAKzP,OAAOmN,QACH,SAAnBsC,KAAKnG,UACLmG,KAAK6E,UAAY9Q,WAASoK,gBAAgBpK,WAASqG,cAAclG,EAAY6F,GAAQiG,KAAKiE,eAAe1T,OAAQyP,KAAKnG,WAGtHmG,KAAK6E,UAAY9Q,WAASoK,gBAAgBjK,EAAY8L,KAAKiE,eAAe1T,OAAQyP,KAAKnG,WAGtF3F,GAAiC,SAAnB8L,KAAKnG,UACxBmG,KAAK6E,UAAY9Q,WAASqG,cAAclG,EAAY6F,GAGpDiG,KAAK6E,UAAY3Q,GAGzBiP,EAASxJ,UAAUyW,cAAgB,WAC/B,OAAOpQ,KAAKgI,MAAMjR,UAAUmH,SAAS,eAEzCiF,EAASxJ,UAAU0W,kBAAoB,SAAU1e,EAAG2e,GAC5CtQ,KAAKuQ,cAGTvQ,KAAKmP,UAAYxd,EAAE6e,OACnBF,EAAkBxH,cAAcwH,EAAkB7L,kBAClDzE,KAAKyQ,aACLzQ,KAAK+H,QAAQ,iBAAkBpW,KAEnCwR,EAASxJ,UAAU+W,qBAAuB,SAAU/e,GAC5CqO,KAAKuQ,aAGTvQ,KAAK+H,QAAQ,gBAAiBpW,IAElCwR,EAASxJ,UAAUgX,aAAe,WAC9B,IAAIvN,EAAQpD,KACZA,KAAK+H,QAAQ,eAEb,IAAIuI,EAAoBtQ,KACxB,GAAIA,KAAK9L,sBAAsBmG,cACvB2F,KAAK9L,WAAW0c,MAChB5Q,KAAK9L,WAAW0c,MAAMC,KAAK,SAAUlf,GAEjCyR,EAAM0N,UAAY1N,EAAMlP,WAAWA,WAAW6c,QAC1C3N,EAAMlP,sBAAsBmG,eAAe+I,EAAM0N,WACjD1N,EAAMiN,kBAAkB1e,EAAG2e,KAEhCU,MAAM,SAAUrf,GACfyR,EAAMsN,qBAAqB/e,KAI/BqO,KAAK9L,WAAW+c,aAAajR,KAAK6P,YAAYgB,KAAK,SAAUlf,GACzDyR,EAAMiN,kBAAkB1e,EAAG2e,KAC5BU,MAAM,SAAUrf,GACfyR,EAAMsN,qBAAqB/e,UAIlC,GAAKqO,KAAK9L,YAAe8L,KAAK9L,WAAWnD,OAW1CiP,KAAKmP,UAAYnP,KAAK9L,WACtB8L,KAAKyQ,aACLzQ,KAAK+H,QAAQ,kBAAoBzM,KAAM0E,KAAKmP,gBAbM,CAClD,IAAItc,EAAKmN,KAAKrH,QAAQpH,cAAc,MAChCsB,IACAgI,SAAOhI,GACPmN,KAAKkG,eAAgBhS,WAAYH,WAASwG,sBAAsB1H,KAAO,GACvEmN,KAAKmP,UAAYnP,KAAK9L,WACtB8L,KAAKyQ,aACLzQ,KAAK+H,QAAQ,kBAAoBzM,KAAM0E,KAAKmP,eASxDhM,EAASxJ,UAAU2K,SAAW,WAC1BtE,KAAK8I,cAAc9I,KAAK+F,WACxB/F,KAAK8I,cAAc9I,KAAKzC,WACxByC,KAAK8I,cAAc9I,KAAKyE,kBACpBzE,KAAKwG,SACLxG,KAAKkR,iBAE0C,IAA/CrgB,OAAOC,KAAK4b,QAAQlT,QAAQ,gBAC5BwG,KAAKrH,QAAQlH,UAAY,IAE7BuO,KAAK+F,UAAY/F,KAAKzC,UAAYyC,KAAKjB,kBAAe7N,EACtD8O,KAAKX,SACLW,KAAK2Q,gBAETxN,EAASxJ,UAAUoL,iBAAmB,WAClC/E,KAAKkQ,kBAAkBlQ,KAAK6E,WAC5B7E,KAAKyE,iBAAiBhT,UAAY,GAClCuO,KAAKpC,aACLoC,KAAKmR,cAAcnR,KAAKgI,QAE5B7E,EAASxJ,UAAUyX,cAAgB,SAAUC,GACzC,IAAK,IAAIpc,EAAI,EAAGA,EAAIoc,EAAWtgB,OAAQkE,IAAK,CACxC,IAAI0D,EAAU0Y,EAAWpc,GACrB0D,EAAQ5B,UAAUmH,SAAS,iBAC3BvF,EAAQ1B,aAAa,KAAM+I,KAAKrH,QAAQ5D,GAAK,IAAM4D,EAAQ2Y,aAAa,aACxE3Y,EAAQ1B,aAAa,WAAY,SAI7CkM,EAASxJ,UAAUiE,WAAa,WAC5BoC,KAAKsI,qBACLtI,KAAKuI,cAAe,EACpBvI,KAAKzC,UAAYyC,KAAKgI,MAAQjU,WAAS6J,WAAWoC,KAAK/L,cAAe+L,KAAK6E,UAAW7E,KAAKiE,eAAgB,KAAMjE,MACjHA,KAAKjB,aAAeiB,KAAKgI,MAAMpN,iBAAiB,IAAMwG,EAAWK,UACjEzB,KAAKoR,cAAcpR,KAAKjB,eAE5BoE,EAASxJ,UAAU4X,eAAiB,SAAU5f,GAC1CqO,KAAK+H,QAAQ,gBAAiBpW,IAElCwR,EAASxJ,UAAU6X,gBAAkB,WACjCxR,KAAKzC,UAAYyC,KAAKgI,MAAQhI,KAAKrH,QAAQpH,cAAc,IAAM6P,EAAWI,YACtExB,KAAKgI,QACLhI,KAAKjB,aAAeiB,KAAKgI,MAAMpN,iBAAiB,IAAMwG,EAAWK,YAGzE0B,EAASxJ,UAAUgV,cAAgB,SAAU/b,GACzCoN,KAAK1C,UAAY1K,EACjB,IAAIgK,EAAMhK,EAAG0e,aAAa,YAC1B,GAAI1e,EAAGmE,UAAUmH,SAASkD,EAAW9N,WAAasJ,EAAK,CACnD,IAAI/J,EAAKgY,UAAQjY,EAAGkY,WAAY,IAAM1J,EAAWI,YAC7CiN,EAAMzO,KAAKrH,QAAQpH,cAAc,SAAYqL,EAAM,MAGvD,GAFAoD,KAAKuE,WAAWnS,KAAKwK,GACrBoD,KAAKkQ,kBAAkBlQ,KAAK8E,aACvB2J,EAAK,CACN,IAAInT,EAAO0E,KAAK6E,UAChB4J,EAAM1a,WAASiF,mBAAmBgH,KAAK/L,cAAeqH,EAAM0E,KAAKiE,eAAgBjE,KAAKuE,WAAWxT,OAAQ,KAAMiP,MAC3GA,KAAKwG,SACLxG,KAAKyG,uBAET,IAAIgL,EAAQhD,EAAI7T,iBAAiB,IAAMwG,EAAWK,UAClDzB,KAAKoR,cAAcK,GACnBhD,EAAIxX,aAAa,MAAO2F,GACxB6R,EAAIzW,MAAMC,QAAU,OACpB+H,KAAKmR,cAAc1C,GAIvB,GAFAzO,KAAK2G,WAAW9T,EAAI4b,GACpBzO,KAAKjB,aAAeiB,KAAKgI,MAAMpN,iBAAiB,IAAMwG,EAAWK,UAC7DzB,KAAKsK,cAAe,CACpB,IAAI9Z,EAAYH,EAAe2P,KAAKsK,cAAchP,KAAM0E,KAAKiE,eAAe1T,QAC5EyP,KAAKX,OAAQ7O,EAAUwP,KAAKiE,eAAe1T,OAAOyC,OAAQ,EAAM,UAEpEgN,KAAK6N,gBAAa3c,IAG1BiS,EAASxJ,UAAUwX,cAAgB,SAAU1C,GACzCzO,KAAKyE,iBAAiBhS,YAAYgc,IAEtCtL,EAASxJ,UAAU8W,WAAa,SAAUnV,GACtC0E,KAAKkQ,kBAAkB5U,GACnB0E,KAAKmE,sBACDtT,OAAOC,KAAKkP,KAAK9L,YAAYnD,UACxBiP,KAAK3O,WAAY2O,KAAKnD,eAAmBmD,KAAKoE,qBAAqBsN,iBACpE1R,KAAKiE,eAAe3O,YAAc0K,KAAKoE,qBAAqBuN,aAAaxJ,KAAKnI,KAAKoE,wBAG3FpE,KAAKoE,qBAAqBwN,qBAG1B5R,KAAKpC,aACLoC,KAAKyE,iBAAmBzE,KAAK/L,cAAc,OAASsC,UAAW6K,EAAWa,YAC1EjC,KAAKrH,QAAQlG,YAAYuN,KAAKyE,kBAC9BzE,KAAKmR,cAAcnR,KAAKzC,WACpByC,KAAKwG,SACLxG,KAAKyG,yBAIjBtD,EAASxJ,UAAU8V,cAAgB,SAAUoC,GACzC,IAAIthB,KAOJ,OANIshB,aAAeC,QACfvhB,EAAOyP,KAAKzP,OAAOwE,IAAM8c,EAAIP,aAAa,YAG1C/gB,EAASshB,EAENthB,GAKX4S,EAASxJ,UAAUoY,OAAS,WACxB/R,KAAKrH,QAAQ5B,UAAUC,IAAIoK,EAAWC,MACtCzF,aAAWoE,KAAKrH,SAAWqZ,SAAU,MACrChS,KAAK6D,cACL7D,KAAKgE,eACLhE,KAAK8D,YACL9D,KAAK+D,UACL/D,KAAK8N,aACL9N,KAAKX,SACLW,KAAK2Q,eACL3Q,KAAK4D,mBACL5D,KAAKiS,SAAWC,eAAalS,KAAKrH,SAC9BwZ,SAAU,IAAM/Q,EAAWK,WAE/BzB,KAAKoS,iBACLpS,KAAKqS,kBAAoBrS,KAAKrH,QAAQkU,WAK1C1J,EAASxJ,UAAU0U,QAAU,WACrBrO,KAAKwG,SACLxG,KAAKkR,gBAETlR,KAAKoO,eACL,IAAIkE,GAAWlR,EAAWC,KAAMD,EAAWY,QAAS,QAChD,eAAgB,SAASuQ,OAAOvS,KAAKpL,SAAS+G,MAAM,KAAKsJ,OAAO,SAAUC,GAAO,OAAOA,KAC5FC,eAAanF,KAAKrH,SAAU2Z,GAC5BtS,KAAKrH,QAAQtB,gBAAgB,QAC7B2I,KAAKrH,QAAQtB,gBAAgB,YAC7B2I,KAAKgI,MAAQhI,KAAKzC,UAAYyC,KAAKjB,aAAeiB,KAAK+F,eAAY7U,EACnE8O,KAAKrH,QAAQlH,UAAY,GACzBuO,KAAKyE,iBAAmB,KACxBzE,KAAKsK,cAAgB,KACrBtK,KAAK6N,WAAa,KAClB7N,KAAK1C,UAAY,KACjB0C,KAAK0K,cAAgB,KACrB1K,KAAKsI,kBAAoB,KACzBtI,KAAKuJ,gBAAkB,KACvBxG,EAAOpJ,UAAU0U,QAAQ9b,KAAKyN,OAKlCmD,EAASxJ,UAAUiR,KAAO,WACtB,IAAI4H,EAAMxS,KAAKuE,WAAWvE,KAAKuE,WAAWxT,OAAS,GACnD,QAAYG,IAARshB,IAAqBxS,KAAKoQ,gBAA9B,CAGApQ,KAAKuE,WAAWkO,MAChBzS,KAAKkQ,kBAAkBlQ,KAAK8E,YAC5B,IAAI4N,EAAO1S,KAAKrH,QAAQpH,cAAc,cAAiBihB,EAAM,MACzDG,EAAS3S,KAAKgI,MACb0K,EAMDA,EAAOA,EAAKhM,eALZ1G,KAAKpC,aACLoC,KAAKmR,cAAcnR,KAAKzC,WACxBmV,EAAO1S,KAAKgI,OAKhB,IACIhV,EADY3C,EAAe2P,KAAKsP,UAAWtP,KAAKiE,eAAe1T,QAC9CyP,KAAKzP,OAAOyC,MACjCgN,KAAK2G,WAAWgM,EAAQD,GAAM,GAC9B1S,KAAK+K,cACL,IAAInY,EAAKoN,KAAKrH,QAAQpH,cAAc,cAAiBihB,EAAM,MAC3D5f,EAAGmE,UAAU8D,OAAOuG,EAAWY,SAC/BpP,EAAGmE,UAAUC,IAAIoK,EAAWG,SACtBvB,KAAK5J,cAAgBxD,EAAGrB,cAAc,IAAM6P,EAAWmB,cAAcxL,UAAUmH,SAASkD,EAAWlO,UACrGN,EAAGmE,UAAU8D,OAAOuG,EAAWjO,UAEnC6M,KAAKjB,aAAeiB,KAAKgI,MAAMpN,iBAAiB,IAAMwG,EAAWK,UAC7DzB,KAAKxI,qBACLwI,KAAKkG,eAAgB1B,YAAa/M,qBAAmBC,SAASsI,KAAKwE,eAAgB,GAEvFxE,KAAKX,OAAQW,KAAKuE,WAAWxT,OAASiC,EAAOgN,KAAKwE,cAAexE,KAAKuE,WAAWxT,OAAwB,YAO7GoS,EAASxJ,UAAUiZ,WAAa,SAAUrd,GAClCyK,KAAKmE,qBACLnE,KAAKoE,qBAAqBwO,WAAWrd,GAEhCyK,KAAK5J,aACV4J,KAAKgL,cAAchL,KAAK4J,sBAAsBrU,KAGd,IAA5B9E,oBAAkB8E,GAClByK,KAAKoL,eAGLpL,KAAKqL,YAAYrL,KAAK4J,sBAAsBrU,KAIxD4N,EAASxJ,UAAUiQ,sBAAwB,SAAUiI,GACjD,IAAIjf,EACAsB,EAAa8L,KAAK9L,sBAAsBmG,cACxC2F,KAAKmP,UAAYnP,KAAK9L,WAC1B,IAAKzD,oBAAkBohB,GACnB,GAA6B,iBAAlB3d,EAAW,IAA4C,iBAAlBA,EAAW,GACvD,GAAI2d,aAAeC,SAEf,IAAK,IADDe,EAAMhB,EAAIP,aAAa,YAAYpa,WAC9BjC,EAAI,EAAGA,EAAI+K,KAAKjB,aAAahO,OAAQkE,IAC1C,GAAI+K,KAAKjB,aAAa9J,GAAGqc,aAAa,YAAYpa,aAAe2b,EAAK,CAClEjgB,EAAKoN,KAAKjB,aAAa9J,GACvB,YAKRyE,MAAMC,UAAUiW,KAAKrd,KAAKyN,KAAKgI,MAAMpN,iBAAiB,IAAMwG,EAAWK,UAAW,SAAUlM,GACxF,OAAIA,EAAKqC,UAAUlG,SAAWmgB,EAAI3a,aAC9BtE,EAAK2C,GACE,SAQlB,CACD,IAAIoa,EAAa3P,KAAKqK,YAAYwH,GAC9BrhB,EAAYH,EAAesf,EAAY3P,KAAKiE,eAAe1T,QAC/D,GAAIof,IACA/c,EAAKoN,KAAKrH,QAAQpH,cAAc,cAC1Bf,EAAUwP,KAAKzP,OAAOwE,IAAM,OAC7BiL,KAAKmE,sBAAwB1T,oBAAkBmC,IAE3C,CAAA,IADD4Y,EAAQxL,KAAKrH,QAAQiC,iBAAiB,IAAMwG,EAAWK,UAC3D,IAASxM,EAAI,EAAGA,EAAIuW,EAAMza,OAAQkE,IAC1BuW,EAAMvW,GAAG2C,UAAUlG,SAAWlB,EAAUwP,KAAKzP,OAAOyC,QACpDJ,EAAK4Y,EAAMvW,KAOnC,OAAOrC,GAQXuQ,EAASxJ,UAAUmZ,oBAAsB,SAAUvd,GAC/C,IAAK9E,oBAAkB8E,GACnB,IAAK,IAAIN,EAAI,EAAGA,EAAIM,EAAKxE,OAAQkE,IACxBxE,oBAAkB8E,EAAKN,KACxB+K,KAAK4S,WAAWrd,EAAKN,KAKrCkO,EAASxJ,UAAUoZ,YAAc,WAC7B,IAAIC,KACJ,GAAIhT,KAAKuI,aACL,IAAK,IAAItT,EAAI+K,KAAKuE,WAAWxT,OAAS,EAAGkE,GAAK,EAAGA,IAC7C+d,EAAS5gB,KAAK4N,KAAKuE,WAAWtP,IAGtC,OAAO+d,GAEX7P,EAASxJ,UAAUmQ,iBAAmB,WAClC9J,KAAKyI,cAEL,IAAK,IADD1J,EAAeiB,KAAKgI,MAAMiL,uBAAuB7R,EAAWjO,UACvD8B,EAAI,EAAGA,EAAI8J,EAAahO,OAAQkE,IAAK,CAC1C,IAAIie,EAAWlT,KAAKqK,YAAYtL,EAAa9J,KACxCxE,oBAAkByiB,IAAaA,EAASlT,KAAKiE,eAAe1T,OAAOwE,KACpEiL,KAAKyI,WAAWrW,KAAK8gB,EAASlT,KAAKiE,eAAe1T,OAAOwE,OAQrEoO,EAASxJ,UAAUwZ,iBAAmB,WAClC,IAAIC,EACAC,GAAc,EAClBrT,KAAKyI,cACL,IAAIvU,EAAa8L,KAAK9L,sBAAsBmG,cACxC2F,KAAKmP,UAAYnP,KAAK9L,WAC1B,GAAI8L,KAAKmE,uBAAyBkP,EAC9BD,EAAapT,KAAKoE,qBAAqB+O,mBACvCE,GAAc,OAEb,GAAIrT,KAAK5J,eAAiBid,EAAa,CACxC,IAAItU,EAAeiB,KAAKgI,MAAMiL,uBAAuB7R,EAAWjO,UAC5DmgB,KACAC,KACJvT,KAAKyI,cAEL,IAAK,IADD+K,KACKve,EAAI,EAAGA,EAAI8J,EAAahO,OAAQkE,IACrC,GAA6B,iBAAlBf,EAAW,IAA4C,iBAAlBA,EAAW,GACvDof,EAAiBlhB,KAAK2M,EAAa9J,GAAG2C,UAAUlG,YAE/C,CACD,IAAIwhB,EAAWlT,KAAKqK,YAAYtL,EAAa9J,IACzCzE,EAAYH,EAAe6iB,EAAUlT,KAAKiE,eAAe1T,QACzDyP,KAAKuI,aACLiL,EAAWphB,MAAOkJ,KAAM4X,EAAUF,SAAUhT,KAAK+S,gBAGjDQ,EAAiBnhB,KAAK8gB,GAEtB1iB,GACA8iB,EAAiBlhB,KAAK5B,EAAUwP,KAAKiE,eAAe1T,OAAOyC,OAC3DgN,KAAKyI,WAAWrW,KAAK5B,EAAUwP,KAAKiE,eAAe1T,OAAOwE,OAG1Due,EAAiBlhB,UAAKlB,GACtB8O,KAAKyI,WAAWrW,UAAKlB,IAIH,iBAAlBgD,EAAW,IACS,iBAAlBA,EAAW,IACjBmf,IACJD,GAAe7d,KAAMwJ,EAAczD,KAAMpH,EAAYlB,KAAMsgB,GAC3DD,GAAc,GAEdrT,KAAKuI,eAAiB8K,GACtBD,GAAe7d,KAAMwJ,EAAczD,KAAMkY,EAAYxgB,KAAMsgB,GAC3DD,GAAc,GAERA,IACND,GAAe7d,KAAMwJ,EAAczD,KAAMiY,EAAkBvgB,KAAMsgB,GACjED,GAAc,QAGjB,IAAKA,EAAa,CACnB,IAAI/V,EAAY0C,KAAKrH,QAAQsa,uBAAuB7R,EAAWjO,UAAU,GACrE3C,EAAYH,EAAe2P,KAAKqK,YAAY/M,GAAY0C,KAAKiE,eAAe1T,QAClD,iBAAlB2D,EAAW,IACS,iBAAlBA,EAAW,IACjBmf,EAOEA,IACF5iB,oBAAkBD,IAAcC,oBAAkB6M,IAClD8V,OAAaliB,EACbmiB,GAAc,IAGdrT,KAAKyI,WAAWrW,KAAK5B,EAAUwP,KAAKiE,eAAe1T,OAAOwE,KAC1Dqe,GACIpgB,KAAMxC,EAAUwP,KAAKiE,eAAe1T,OAAOyC,MAAOuC,KAAM+H,EACxDhC,KAAM0E,KAAKqK,YAAY/M,IAE3B+V,GAAc,KAjBlBD,EAAe3iB,oBAAkB6M,QAG7BpM,GAFAqE,KAAM+H,EAAWhC,KAAMpH,EACvBlB,KAAMsK,EAAU1F,UAAUlG,QAE9B2hB,GAAc,GAiBtB,OAAOD,GAOXjQ,EAASxJ,UAAU8Z,SAAW,SAAUle,GACpC,OAAOyK,KAAKqK,YAAY9U,IAO5B4N,EAASxJ,UAAU+Z,WAAa,SAAUne,GACtCyK,KAAK2T,aAAape,GAAM,GACpByK,KAAKmE,sBACLnE,KAAKoE,qBAAqBsP,WAAWne,IAQ7C4N,EAASxJ,UAAUia,YAAc,SAAUre,GACvCyK,KAAK2T,aAAape,GAAM,GACpByK,KAAKmE,sBACLnE,KAAKoE,qBAAqBwP,YAAYre,IAI9C4N,EAASxJ,UAAUga,aAAe,SAAUpe,EAAMse,GAC9C,IAAIlE,EAAa3P,KAAKqK,YAAY9U,GAC9B/E,EAAYH,EAAesf,EAAY3P,KAAKiE,eAAe1T,QAC/D,GAAIof,EAAY,CACZ,IAAI/c,EAAKoN,KAAKrH,QAAQpH,cAAc,cAAgBf,EAAUwP,KAAKzP,OAAOwE,IAAM,MAC5E8e,GACIjhB,GACAA,EAAGmE,UAAU8D,OAAOuG,EAAWY,gBAE5B2N,EAAW3P,KAAKzP,OAAOuH,UAExB+b,IACFjhB,GACAA,EAAGmE,UAAUC,IAAIoK,EAAWY,SAEhC2N,EAAW3P,KAAKzP,OAAOuH,UAAW,KAS9CqL,EAASxJ,UAAUma,SAAW,SAAUve,GACpCyK,KAAK+T,aAAaxe,GAAM,EAAO,IAC3ByK,KAAKmE,sBACLnE,KAAKoE,qBAAqB0P,SAASve,IAQ3C4N,EAASxJ,UAAUqa,SAAW,SAAUze,GACpCyK,KAAK+T,aAAaxe,GAAM,EAAM,QAC1ByK,KAAKmE,sBACLnE,KAAKoE,qBAAqB4P,SAASze,IAG3C4N,EAASxJ,UAAUoa,aAAe,SAAUlC,EAAKoC,EAAQhc,GACrD,IAAI0X,EAAa3P,KAAKqK,YAAYwH,GAC9BrhB,EAAYH,EAAesf,EAAY3P,KAAKiE,eAAe1T,QAC/D,GAAIof,EAAY,CACZ,IAAI/c,EAAKoN,KAAKrH,QAAQpH,cAAc,cAAgBf,EAAUwP,KAAKzP,OAAOwE,IAAM,MAC5EnC,IACAA,EAAGoF,MAAMC,QAAUA,GAEnBgc,EACAtE,EAAW3P,KAAKzP,OAAOwH,YAAa,SAG7B4X,EAAW3P,KAAKzP,OAAOwH,aAgB1CoL,EAASxJ,UAAUua,QAAU,SAAU5Y,EAAM/K,EAAQ4B,QAClC,IAAX5B,IAAqBA,OAASW,GAClC,IAAIgD,EAAa8L,KAAK9L,sBAAsBmG,cACtC2F,KAAKmP,UAAYnP,KAAK9L,WAC5B8L,KAAKmU,kBAAkB7Y,EAAM/K,EAAQ2D,EAAY/B,IAErDgR,EAASxJ,UAAUwa,kBAAoB,SAAU7Y,EAAM/K,EAAQ2D,EAAY/B,GACvE,GAAImJ,aAAgB5B,MAChB,GAAIsG,KAAKmE,qBACLnE,KAAKoE,qBAAqB8P,QAAQ5Y,EAAM/K,EAAQ2D,EAAY/B,OAE3D,CACD,IAAIuG,EAAKsH,KAAKuP,eAAerb,EAAY3D,GACrCwF,OAAQ,EACZ,GAAI2C,EAAI,EAEJ3C,EADgB1F,EAAeqI,EAAIsH,KAAKiE,eAAe1T,QACrCyP,KAAKzP,OAAOwF,UAE1BA,MAEJA,EAAQA,EAAMwc,OAAOjX,GAGzB,GAAI5C,aAAcgB,MAAO,CACrB,IAAK,IAAIzE,EAAI,EAAGA,EAAIqG,EAAKvK,OAAQkE,IAAK,CAClCf,EAAa8L,KAAKoU,eAAejiB,EAAO+B,EAAYoH,EAAKrG,IACzD+K,KAAKkQ,kBAAkBhc,GAGvB,IAAImgB,EAAWrU,KAAKyE,iBACdzE,KAAKyE,iBAAiBpS,SAAS,GAC/B,KAGF2N,KAAKyE,kBAAoB4P,EACzBrU,KAAKsU,eAAehZ,EAAKrG,GAAIof,EAAUrU,KAAK6E,WAG5C7E,KAAKsE,WAGbtE,KAAKjB,aAAeiB,KAAKgI,MAAMpN,iBAAiB,IAAMwG,EAAWK,eAI7D/I,IACAA,EAAGsH,KAAKzP,OAAOwF,OAASA,EACxBiK,KAAKuU,oBAAoB7b,EAAI4C,MAMjD6H,EAASxJ,UAAUya,eAAiB,SAAUjiB,EAAOqiB,EAAeC,GAQhE,OAPqBhkB,oBAAkB0B,IAAWA,GAAS,GAAKA,EAAQqiB,EAAczjB,QAAUN,oBAAkBuP,KAAKiE,eAAe1T,OAAOmN,SAEzI8W,EAAcra,OAAOhI,EAAO,EAAGsiB,GAG/BD,EAAcpiB,KAAKqiB,GAEhBD,GAEXrR,EAASxJ,UAAU4a,oBAAsB,SAAUG,EAAgBC,GAC/D,IAAIC,EAAeF,EAAe1U,KAAKzP,OAAOwE,IAC1C8f,EAAgBH,EAAe1U,KAAKzP,OAAOwF,OAC3C+e,EAAsB9U,KAAKrH,QAAQpH,cAAc,SAAYqjB,EAAe,MAC5EG,EAAW/U,KAAKrH,QAAQpH,cAAc,cAAiBqjB,EAAe,MACtEP,EAAWS,IAETC,EACIlK,UAAQkK,EAAU,MAClB,MACNC,EAAWF,EAAsBD,GAAiBH,GAEtD,KADyBK,IAAYA,EAAShe,UAAUmH,SAASkD,EAAW9N,UAIpD,CACpB,IAAI2hB,EAAyBlhB,WAASyB,uBAAuBwK,KAAK/L,cAAe+gB,EAAUhV,KAAKiE,eAAgB,KAAM,KAAMjE,MAC5HA,KAAKoR,cAAc6D,GACnBZ,EAASriB,aAAaijB,EAAuB,GAAIF,GACjDrQ,SAAOqQ,GAIX,GAAID,GAAuBH,EACvB,IAAK,IAAI1f,EAAI,EAAGA,EAAI0f,EAAU5jB,OAAQkE,IAClC+f,EAAS5iB,KAAKuiB,EAAU1f,IACxB+K,KAAKsU,eAAeK,EAAU1f,GAAIof,EAAUW,IAKxD7R,EAASxJ,UAAU2a,eAAiB,SAAUY,EAAab,EAAUxP,GACjE,IAAI1S,EAAQ0S,EAAUrL,QAAQ0b,GAC9BlV,KAAKmV,YAAYD,EAAa/iB,EAAOkiB,EAAUxP,GAC/C,IAAIuQ,EAAYvQ,EAAU1S,EAAQ,GAC9BijB,GAAaA,EAAU1kB,UAAuC,IAA3B0kB,EAAU5W,MAAMzN,QACnDiP,KAAKmV,YAAYC,EAAYjjB,EAAQ,EAAIkiB,EAAUxP,IAG3D1B,EAASxJ,UAAUwb,YAAc,SAAUjhB,EAAY/B,EAAOoL,EAAWsH,GACrE,IAAIrS,EAASwN,KAAK4J,sBAAsB/E,EAAU1S,EAAQ,KACtD6N,KAAK4J,sBAAsB/E,EAAU1S,EAAQ,KAAO,KACpDS,EAAKmB,WAASyB,uBAAuBwK,KAAK/L,eAAgBC,GAAa8L,KAAKiE,eAAgB,KAAM,KAAMjE,MAK5G,GAJAA,KAAKoR,cAAcxe,GACfoN,KAAK3O,UAAY2O,KAAKwG,SACtBxG,KAAKyG,uBAELzG,KAAKzP,OAAOmN,SAAWmH,EAAU1S,EAAQ,IAAM0S,EAAU1S,EAAQ,GAAGzB,SAAU,CAC9E,IAAI2kB,EAAYrV,KAAK4J,sBAAsB/E,EAAU1S,EAAQ,IACzDkjB,IACA7iB,EAAS6iB,EAAUC,oBAG3B/X,EAAUvL,aAAaY,EAAG,GAAIJ,IAQlC2Q,EAASxJ,UAAU4b,WAAa,SAAUhgB,GACtC,IAAIigB,EAAiBxV,KAAK9L,sBAAsBmG,cAC1C2F,KAAKmP,UAAYnP,KAAK9L,WACxB8L,KAAKmE,qBACLnE,KAAKoE,qBAAqBmR,WAAWhgB,GAGrCyK,KAAKyV,mBAAmBlgB,EAAMigB,IAGtCrS,EAASxJ,UAAU8b,mBAAqB,SAAU5D,EAAK2D,GACnD,IAGIthB,EAHAkP,EAAQpD,KACR6E,EAAY7E,KAAK6E,UACjBtU,EAASshB,aAAeC,QAAU9R,KAAKyP,cAAcoC,GAAOA,EAGhE,GADA3d,EAAa8L,KAAKuP,eAAeiG,EAAgBjlB,GAAQ,GACzC,CACZ,IAAImlB,EACJA,EAAS1V,KAAKuP,eAAerb,EAAY3D,GACzC,IAAI4B,EAAQ0S,EAAUrL,QAAQkc,GAC1B9iB,EAAKoN,KAAK4J,sBAAsBiI,GAChC8D,OAAU,EACd3V,KAAK4V,mBAAmBhjB,GACpBoN,KAAKzP,OAAOmN,SAAWsC,KAAK6E,UAAU1S,EAAQ,IAC9C0S,EAAU1S,EAAQ,GAAGzB,UACiB,IAAtCmU,EAAU1S,EAAQ,GAAGqM,MAAMzN,QACvB6B,GAAMA,EAAGijB,uBAAuB9e,UAAUmH,SAASkD,EAAWQ,iBAC7DnR,oBAAkBmC,EAAG0iB,qBAAwB1iB,EAAG0iB,oBAC7C1iB,EAAG0iB,mBAAmBve,UAAUmH,SAASkD,EAAWQ,kBACxD+T,EAAU/iB,EAAGijB,wBAGjBjjB,GACA8R,SAAO9R,GAEP+iB,GACAjR,SAAOiR,GAEX,IAAIG,EAAa5hB,EAAWnD,OAAS,GAAM,EACrCiP,KAAK+V,WAAW/V,KAAKmP,UAAWnP,KAAKzP,OAAOwE,GAAI,SAAU9D,GAAS,OAAOA,IAAUykB,EAAOtS,EAAM7S,OAAOwE,KAAQ,MAAQ,KAC1HihB,EAAU9hB,EAAWsF,QAAQkc,GAGjC,GAFAxhB,EAAWiG,OAAO6b,EAAS,GAC3BhW,KAAKkQ,kBAAkBsF,GACnBM,GACGA,EAAUpG,QACVhW,MAAM+Q,QAAQqL,EAAUpG,OAAO1P,KAAKzP,OAAOwF,SAC3C+f,EAAUpG,OAAO1P,KAAKzP,OAAOwF,OAAOhF,QAAU,EAAG,CACpD,IAAIklB,EAAWjW,KAAK4J,sBAAsBkM,EAAUpG,QACpD,GAAIuG,EAAU,CACV,IAAIC,EAAOniB,WAASyB,uBAAuBwK,KAAK/L,eAAgB6hB,EAAUpG,QAAS1P,KAAKiE,eAAgB,KAAM,KAAMjE,MACpHA,KAAKoR,cAAc8E,GACnBD,EAASvP,cAAc1U,aAAakkB,EAAK,GAAID,GAC7CA,EAASvP,cAAc4E,YAAY2K,IAGvC/hB,EAAWnD,QAAU,GACrBiP,KAAK4K,OAET5K,KAAKjB,aAAerF,MAAMC,UAAUrH,MAAMC,KAAKyN,KAAKrH,QAAQiC,iBAAiB,IAAMwG,EAAWK,aAItG0B,EAASxJ,UAAUic,mBAAqB,SAAUhjB,GAC9C,IAAIujB,EAAOvjB,EAAKA,EAAG0e,aAAa,YAAYpa,WAAWkf,cAAgB,KACvE,GAAID,GAAQnW,KAAKuE,YAAcvE,KAAKuE,WAAWxT,OAAS,EACpD,KAAOiP,KAAKuE,WAAWqL,KAAK,SAAU7a,GAAM,OAAOA,EAAGmC,WAAWkf,gBAAkBD,KAC/EnW,KAAK4K,QASjBzH,EAASxJ,UAAU0c,oBAAsB,SAAU9gB,GAC/C,GAAIA,EAAKxE,OACL,IAAK,IAAIkE,EAAI,EAAGA,EAAIM,EAAKxE,OAAQkE,IAC7B+K,KAAKuV,WAAWhgB,EAAKN,KAIjCkO,EAASxJ,UAAUoc,WAAa,SAAU7hB,EAAYa,EAAIuhB,EAAU5G,GAChE,GAAIxb,EAAW+B,eAAelB,KAAoC,IAA7BuhB,EAASpiB,EAAWa,IACrD,OAAOL,YAAWR,GAEtB,IAAK,IAAIe,EAAI,EAAGA,EAAIpE,OAAOC,KAAKoD,GAAYnD,OAAQkE,IAChD,GAAIf,EAAWrD,OAAOC,KAAKoD,GAAYe,KACkB,iBAA3Cf,EAAWrD,OAAOC,KAAKoD,GAAYe,IAAkB,CAC/D,IAAIub,EAASxQ,KAAK+V,WAAW7hB,EAAWrD,OAAOC,KAAKoD,GAAYe,IAAKF,EAAIuhB,EAAUpiB,GACnF,GAAc,MAAVsc,EAIA,OAHKA,EAAOd,SACRc,EAAOd,OAASA,GAEbc,EAInB,OAAO,MAGXrN,EAASxJ,UAAUlE,cAAgB,WAC/B,MAAO,YAEX0N,EAASxJ,UAAU4c,gBAAkB,WACjC,IAAIC,KAIJ,OAHIxW,KAAKmE,sBACLqS,EAAQpkB,MAAO2W,MAAO/I,MAAOyW,OAAQ,mBAElCD,GAEXrT,EAASxJ,UAAUwU,aAAe,SAAUxc,GACxC,IAAIoX,GAAS4E,cAAehc,EAAG+kB,gBAAiB,SAAUC,UAAW3W,KAAKrH,QAAQie,aAAe5W,KAAKrH,QAAQkU,WAC1GgK,EAAmB7W,KAAKrH,QAAQkU,UAChCgK,EAAmB7W,KAAKqS,mBACxBtJ,EAAK2N,gBAAkB,SACvB3N,EAAK4N,UAAY3W,KAAKrH,QAAQie,aAAe5W,KAAKrH,QAAQ6M,aAAexF,KAAKrH,QAAQkU,UACtF7M,KAAK+H,QAAQ,SAAUgB,IAElB/I,KAAKqS,kBAAoBwE,IAC9B9N,EAAK2N,gBAAkB,MACvB3N,EAAK4N,UAAY3W,KAAKrH,QAAQkU,UAC9B7M,KAAK+H,QAAQ,SAAUgB,IAE3B/I,KAAKqS,kBAAoBwE,GAK7B1T,EAASxJ,UAAUmd,eAAiB,WAChC,OAAO9W,KAAK+W,cAAc,WAAY,YAAa,iBAC/C,SAAU,SAAU,YAAa,cACjC,YAAa,WAAY,SAAU,QAAS,eAAgB,mBAAoB,gBAExF5W,GACI8C,WAAS,KACVE,EAASxJ,UAAW,gBAAY,GACnCwG,GACI8C,YAAS,IACVE,EAASxJ,UAAW,4BAAwB,GAC/CwG,GACI8C,gBACDE,EAASxJ,UAAW,sBAAkB,GACzCwG,GACI8C,YAAS,IACVE,EAASxJ,UAAW,cAAU,GACjCwG,GACI8C,gBACDE,EAASxJ,UAAW,kBAAc,GACrCwG,GACI8C,cACDE,EAASxJ,UAAW,aAAS,GAChCwG,GACI6W,UAAQjjB,WAAS2B,oBAAqBoN,IACvCK,EAASxJ,UAAW,cAAU,GACjCwG,GACI8C,YAAWqE,OAAQ,YAAaF,SAAU,IAAKQ,OAAQ,UACxDzE,EAASxJ,UAAW,iBAAa,GACpCwG,GACI8C,WAAS,SACVE,EAASxJ,UAAW,iBAAa,GACpCwG,GACI8C,YAAS,IACVE,EAASxJ,UAAW,gBAAY,GACnCwG,GACI8C,YAAS,IACVE,EAASxJ,UAAW,oBAAgB,GACvCwG,GACI8C,WAAS,SACVE,EAASxJ,UAAW,wBAAoB,GAC3CwG,GACI8C,WAAS,KACVE,EAASxJ,UAAW,mBAAe,GACtCwG,GACI8C,YAAS,IACVE,EAASxJ,UAAW,kBAAc,GACrCwG,GACI8C,YAAS,IACVE,EAASxJ,UAAW,2BAAuB,GAC9CwG,GACI8C,WAAS,KACVE,EAASxJ,UAAW,cAAU,GACjCwG,GACI8C,WAAS,KACVE,EAASxJ,UAAW,aAAS,GAChCwG,GACI8C,WAAS,OACVE,EAASxJ,UAAW,gBAAY,GACnCwG,GACI8C,WAAS,OACVE,EAASxJ,UAAW,sBAAkB,GACzCwG,GACI8C,WAAS,OACVE,EAASxJ,UAAW,qBAAiB,GACxCwG,GACI8W,WACD9T,EAASxJ,UAAW,cAAU,GACjCwG,GACI8W,WACD9T,EAASxJ,UAAW,mBAAe,GACtCwG,GACI8W,WACD9T,EAASxJ,UAAW,sBAAkB,GACzCwG,GACI8W,WACD9T,EAASxJ,UAAW,qBAAiB,GACxCwG,GACI8W,WACD9T,EAASxJ,UAAW,cAAU,GACjCwJ,EAAWhD,GACP+W,yBACD/T,IAELgU,aCjjEEC,EAAgC,WAChC,SAASA,EAAeC,GACpBrX,KAAKsX,kBAAoB,EACzBtX,KAAKuX,iBAAmBF,EAm4B5B,OA53BAD,EAAezd,UAAU+X,aAAe,WACpC,OAAQjhB,oBAAkBuP,KAAKuX,iBAAiBC,cAA6D,iBAAtCxX,KAAKuX,iBAAiBC,aAOjGJ,EAAezd,UAAU8d,sBAAwB,WAC7C,OAAOzX,KAAKuX,iBAAiBG,OAAmD,mBAAnC1X,KAAKuX,iBAAiBlmB,UAOvE+lB,EAAezd,UAAUiY,iBAAmB,WACxC5R,KAAK2X,iBAAgB,GACrB,IAAI9S,EAAY7E,KAAKuX,iBAAiB1S,UAClC+S,EAAU/S,EAAUvS,MAAM,EAAG,GACjC0N,KAAKuX,iBAAiBha,UAAYyC,KAAKuX,iBAAiBvP,MAAQjU,WAAS6J,WAEzEoC,KAAKuX,iBAAiBtjB,cAAe2jB,EAAS5X,KAAKuX,iBAAiBtT,eAAgB,KAAMjE,KAAKuX,kBAC/FvX,KAAKuX,iBAAiB9S,iBAAmBzE,KAAKuX,iBAAiBtjB,cAAc,OAASsC,UAAW6K,EAAWa,YAC5GjC,KAAKuX,iBAAiB5e,QAAQlG,YAAYuN,KAAKuX,iBAAiB9S,kBAChEzE,KAAKuX,iBAAiB9S,iBAAiBhS,YAAYuN,KAAKuX,iBAAiBha,WACzEyC,KAAKiN,eAAiBjN,KAAKuX,iBAAiBha,UAAUzG,kBAAkBoV,wBAAwB9G,OAChGpF,KAAK6X,qBAAuB7X,KAAK8X,kBAAkB,KACnD9X,KAAK+X,aAAe/X,KAAK8X,kBAAkBjnB,OAAOC,KAAKkP,KAAKuX,iBAAiB1S,WAAW9T,QACxFiP,KAAK+M,aAAe,EACpB/M,KAAKgY,YAAchY,KAAK+X,aAAe,EACvC,IAAIE,EAAUpT,EAAUvS,MAAM,EAAG0N,KAAK+X,cAClCG,EAAYnkB,WAASyB,uBAEzBwK,KAAKuX,iBAAiBtjB,cAAegkB,EAASjY,KAAKuX,iBAAiBtT,eAAgB,KAAM,KAAMjE,KAAKuX,kBACrGne,SAAO8e,EAAWlY,KAAKuX,iBAAiBha,WACxCyC,KAAKuX,iBAAiBxY,aAAeiB,KAAKuX,iBAAiBvP,MAAMpN,iBAAiB,MAClFoF,KAAKmY,WAAanY,KAAKuX,iBAAiBtjB,cAAc,OACtD+L,KAAKuX,iBAAiBha,UAAUvL,aAAagO,KAAKmY,WAAYnY,KAAKuX,iBAAiBha,UAAUzG,mBAC9FkJ,KAAKoY,cAAgBpY,KAAKuX,iBAAiBtjB,cAAc,OACzD+L,KAAKuX,iBAAiBha,UAAUvL,aAAagO,KAAKoY,cAAe,MACjEpY,KAAKqY,YAAexnB,OAAOC,KAAK+T,GAAW9T,OAASiP,KAAKiN,eAAmBjN,KAAK+X,aAAe/X,KAAKiN,eACrGjN,KAAKmY,WAAWngB,MAAMoN,OAAS,MAC/BpF,KAAKoY,cAAcpgB,MAAMoN,OAASpF,KAAKqY,YAAc,KACrDrY,KAAKsY,iBAAmB,EACxBtY,KAAKuY,oBAAsBvY,KAAKqY,YAChCrY,KAAKwY,SAAW,EAChBxY,KAAKyY,2BAETrB,EAAezd,UAAUge,gBAAkB,SAAUtJ,GAC5CA,GAUsC,IAAnCrO,KAAKuX,iBAAiBhS,UACtBmH,OAAOgM,oBAAoB,SAAU1Y,KAAK2Y,iBAC1CjM,OAAOgM,oBAAoB,SAAU1Y,KAAK4Y,YAG1C7K,eAAalT,OAAOmF,KAAKuX,iBAAiB5e,QAAS,SAAUqH,KAAK6Y,mBAClE9K,eAAalT,OAAOmF,KAAKuX,iBAAiB5e,QAAS,SAAUqH,KAAK8Y,oBAflE9Y,KAAKuX,iBAAiBhS,UACtBvF,KAAK2Y,gBAAkB3Y,KAAK6Y,kBAAkB1Q,KAAKnI,MACnD0M,OAAOqM,iBAAiB,SAAU/Y,KAAK2Y,kBAGvC5K,eAAa/W,IAAIgJ,KAAKuX,iBAAiB5e,QAAS,SAAUqH,KAAK6Y,kBAAmB7Y,OAc9FoX,EAAezd,UAAUmf,kBAAoB,SAAUnnB,GACnD,IAAI6mB,EACA5V,EAA0B5C,KAAKuX,iBAAiBha,UAAUhM,cAAc,IAAM6P,EAAWwB,yBACzFnS,oBAAkBuP,KAAKuX,iBAAiByB,kBACxChZ,KAAKuX,iBAAiB0B,0BAItBT,EAFAxY,KAAKuX,iBAAiBhS,SAEXxJ,KAAKmd,MAAMvnB,EAAEa,OAAO2mB,gBAAgBtM,UAAY7M,KAAKuX,iBAAiByB,iBAAmB,EAIzFjd,KAAKmd,MAAMvnB,EAAEa,OAAOqa,UAAY7M,KAAKuX,iBAAiByB,iBAAmB,GAEvE,GAAKhZ,KAAKuX,iBAAiByB,gBAAmB,EAC3DpW,EAAwB5K,MAAMmU,IAAM,MAGpCvJ,EAAwB5K,MAAMmU,IAAM,EAAanM,KAAKuX,iBAAiByB,gBAAkB,MAGjG5B,EAAezd,UAAUme,kBAAoB,SAAUsB,GACnD,IACIC,EADAjU,EAASkU,WAAWjU,aAAWrF,KAAKuX,iBAAiBnS,SAiBzD,OAdIiU,EADArZ,KAAKuX,iBAAiBhS,SACVxJ,KAAKmd,MAAOxM,OAAOI,YAAc9M,KAAKiN,eA1GrC,GA6G+B,iBAAjCjN,KAAKuX,iBAAiBnS,SAAsE,IAA/CpF,KAAKuX,iBAAiBnS,OAAO5L,QAAQ,KAE7EuC,KAAKmd,MAAOlZ,KAAKuX,iBAAiB5e,QAAQuT,wBAAwB9G,OAASpF,KAAKiN,eAhHrF,KAmHKlR,KAAKmd,MAAO9T,EAASpF,KAAKiN,eAnH/B,MAsHCmM,IACZC,EAAYD,GAETC,GAEXjC,EAAezd,UAAU8e,wBAA0B,WAC/CzY,KAAKuZ,WAAcC,iBAAqBC,uBAA2BC,sBAEnE,IAAK,IADDpe,EAAO0E,KAAKuX,iBAAiB1S,UACxB5P,EAAI,EAAGA,EAAIqG,EAAKvK,OAAQkE,IACzB+K,KAAKuX,iBAAiBnhB,cAAgBkF,EAAKrG,GAAG+K,KAAKuX,iBAAiBhnB,OAAOkN,YAC3EuC,KAAKuZ,UAAUC,cAAcpnB,KAAK6C,GAGjCxE,oBAAkB6K,EAAKrG,GAAG+K,KAAKuX,iBAAiBhnB,OAAOuH,WACvDwD,EAAKrG,GAAG+K,KAAKuX,iBAAiBhnB,OAAOuH,UAErCkI,KAAKuZ,UAAUE,oBAAoBrnB,KAAK6C,GAGjD,GAAI+K,KAAK0R,eAEL,IAAK,IADDlT,EAAQwB,KAAKuX,iBAAiB5e,QAAQiC,iBAAiB,IAAMwG,EAAWK,UACnEtP,EAAQ,EAAGA,EAAQqM,EAAMzN,OAAQoB,IACtCqM,EAAMrM,GAAOwnB,QAAU3Z,KAAKuX,iBAAiBqC,iBAAiBC,IAAI1nB,GAAOwnB,SAIrFvC,EAAezd,UAAU4Q,kBAAoB,WACzC,GAAIvK,KAAKuX,iBAAiB1S,UAAU9T,OAAQ,CACxC,IAAI8T,EAAY7E,KAAKuX,iBAAiB1S,UACtC7E,KAAKiN,eAAiBjN,KAAKmY,WAAW2B,YAAY5N,wBAAwB9G,OAC1EpF,KAAKqY,YAAexnB,OAAOC,KAAK+T,GAAW9T,OAASiP,KAAKiN,eAAmBjN,KAAK+X,aAAe/X,KAAKiN,eACrGjN,KAAKuY,oBAAsBvY,KAAKqY,YAChCrY,KAAKoY,cAAcpgB,MAAMoN,OAASpF,KAAKqY,YAAc,OAG7DjB,EAAezd,UAAUogB,kBAAoB,SAAUC,GACnD,OAAOha,KAAKuX,iBAAiBhS,SAAcqH,YAAcoN,GAAmB,EAAK,EAC5EpN,YAAcoN,EAAqBha,KAAKuX,iBAAiB5e,QAAQkU,UAAYmN,GAAmB,EAAK,EACrGha,KAAKuX,iBAAiB5e,QAAQkU,UAAYmN,GAEnD5C,EAAezd,UAAUkf,kBAAoB,SAAUlnB,GACnD,IAAIf,EACAopB,EACAnV,EAAY7E,KAAKuX,iBAAiB1S,UACtC7E,KAAKiN,eAAiB+C,SAAO,eAAgBhQ,KAAKuX,iBAAiB5e,SAASuT,wBAAwB9G,OACpGpF,KAAKqY,YAAexnB,OAAOC,KAAK+T,GAAW9T,OAASiP,KAAKiN,eAAmBjN,KAAK+X,aAAe/X,KAAKiN,eAEjG+M,EADAha,KAAKuX,iBAAiBhS,SACLvF,KAAKuX,iBAAiBha,UAAU2O,wBAAwBC,IACrE7a,SAAS6nB,gBAAgBjN,wBAAwBC,IAGpCnM,KAAKuX,iBAAiBxR,UAAY/F,KAAKuX,iBAAiBxR,UAAUmG,wBAAwB9G,OAAS,EAExHpF,KAAKia,eAAiBxpB,oBAAkBuP,KAAKia,gBAAkB,EAAIja,KAAKia,eACxE,IAAItN,EAAS3M,KAAK+Z,kBAAkBC,GAKpC,GAJAha,KAAKsY,iBAAmBtY,KAAKiN,eAAiBlR,KAAKC,MAAM2Q,EAAS3M,KAAKiN,gBACvEjN,KAAKuY,oBAAsBvY,KAAKqY,YAAcrY,KAAKsY,iBACnD1nB,EAAK+b,GAAU3M,KAAKqY,aACfrY,KAAKsY,iBAAkBtY,KAAKuY,sBAAwBvY,KAAKqY,YAAa,GAAIrY,KAAKsY,iBAAmB1nB,EAAG,GAAIoP,KAAKuY,oBAAsB3nB,EAAG,GACxIoP,KAAKsY,mBAAqBgB,WAAWtZ,KAAKmY,WAAWngB,MAAMoN,QAG3D,GAFApF,KAAKmY,WAAWngB,MAAMoN,OAASpF,KAAKsY,iBAAmB,KACvDtY,KAAKoY,cAAcpgB,MAAMoN,OAASpF,KAAKuY,oBAAsB,KACzD5L,EAAS3M,KAAKia,eAAgB,EAC1BzB,EAAWzc,KAAKmd,MAAQlZ,KAAKsY,iBAAmBtY,KAAKiN,eAAkBjN,KAAKwY,WAChExY,KAAK6X,qBAAuB,EACxC7X,KAAKka,aAAa1B,GAAU,GAG5BxY,KAAKma,eAAe3B,GAAU,OAGjC,CACD,IAAIA,GAAAA,EAAWzc,KAAKmd,MAAOlZ,KAAKwY,SAAYxY,KAAKsY,iBAAmBtY,KAAKiN,iBACzDjN,KAAK6X,qBAAuB,EACxC7X,KAAKka,aAAa1B,GAAU,GAG5BxY,KAAKma,eAAe3B,GAAU,GAI1CxY,KAAKwY,SAAWzc,KAAKmd,MAAMlZ,KAAKsY,iBAAmBtY,KAAKiN,gBACN,mBAAvCjN,KAAKuX,iBAAiBvK,cAC7BhN,KAAKuX,iBAAiBvK,eAE1BhN,KAAKia,eAAiBtN,GAE1ByK,EAAezd,UAAUugB,aAAe,SAAU1B,EAAU4B,GAGxD,IAAK,IAFDjoB,EAAQioB,EAAmBpa,KAAK+M,aAAeyL,EAAaxY,KAAK+M,aAAeyL,EAChF6B,EAAWra,KAAKuX,iBAAiBha,UAAU3C,iBAAiB,MACvD3F,EAAI,EAAGA,EAAIolB,EAAStpB,OAAQkE,IACjC+K,KAAKsa,SAASD,EAASplB,GAAI9C,GAC3BA,IAEJ6N,KAAKgY,YAAcoC,EAAmBpa,KAAKgY,YAAcQ,EAAaxY,KAAKgY,YAAcQ,EACzFxY,KAAK+M,aAAeqN,EAAmBpa,KAAK+M,aAAeyL,EAAaxY,KAAK+M,aAAeyL,GAEhGpB,EAAezd,UAAUwgB,eAAiB,SAAU3B,EAAU4B,GAC1D,GAAIA,EACA,IAAK,IAAInlB,EAAI,EAAGA,EAAIujB,EAAUvjB,IAAK,CAC/B,IAAI9C,IAAU6N,KAAKgY,YACnBhY,KAAKsa,SAASta,KAAKmY,WAAW7C,mBAAoBnjB,EAAO6N,KAAKoY,eAC9DpY,KAAK+M,oBAIT,IAAS9X,EAAI,EAAGA,EAAIujB,EAAUvjB,IAAK,CAC3B9C,IAAU6N,KAAK+M,aAAnB,IACIva,EAASwN,KAAKmY,WAAW2B,YAC7B9Z,KAAKsa,SAASta,KAAKoY,cAAcvC,uBAAwB1jB,EAAOK,GAChEwN,KAAKgY,gBAIjBZ,EAAezd,UAAU4gB,gBAAkB,SAAU5hB,EAASxG,GAE1D,IAAIqoB,EAAYxa,KAAKuX,iBAAiB1S,UAgBtC,GAfmD,iBAAxC7E,KAAKuX,iBAAiBrjB,WAAW,IACO,iBAAxC8L,KAAKuX,iBAAiBrjB,WAAW,IACxCyE,EAAQ8hB,QAAQ5H,IAAM9e,WAASiB,aAC/B2D,EAAQsa,uBAAuB7R,EAAWO,cAAc,GAAGlQ,UACvDuO,KAAKuX,iBAAiB1S,UAAU1S,GAAO+E,aAI3CyB,EAAQ8hB,QAAQ5H,IAAO2H,EAAUroB,GAAO6N,KAAKuX,iBAAiBhnB,OAAOwE,IAEhEylB,EAAUroB,GAAO6N,KAAKuX,iBAAiBhnB,OAAOwE,IAAOhB,WAASiB,aACnE2D,EAAQsa,uBAAuB7R,EAAWO,cAAc,GAAGlQ,UAEtD+oB,EAAUroB,GAAO6N,KAAKuX,iBAAiBhnB,OAAOyC,OAEnDgN,KAAKuX,iBAAiB7gB,WAClBiC,EAAQpH,cAAc,IAAM6P,EAAWM,WACvCgD,SAAO/L,EAAQpH,cAAc,IAAM6P,EAAWM,WAE9C1B,KAAKuX,iBAAiB1S,UAAU1S,GAAO6N,KAAKuX,iBAAiBhnB,OAAOoG,UAAU,CAC9E,IAAItD,EAAcsF,EAAQpH,cAAc,IAAM6P,EAAW/N,aACrDb,EAASwN,KAAKuX,iBAAiBtjB,cAAc,OAC7CsC,UAAW6K,EAAWM,SAAW,IAC7B1B,KAAKuX,iBAAiB1S,UAAU1S,GAAO6N,KAAKuX,iBAAiBhnB,OAAOoG,WAE5EtD,EAAYrB,aAAaQ,EAAQmG,EAAQpH,cAAc,IAAM6P,EAAWO,eAGhF,GAAI3B,KAAKuX,iBAAiBnhB,cAAgB4J,KAAKuX,iBAAiBhnB,OAAOmN,QAAS,CACvEsC,KAAK0a,mBACN1a,KAAK0a,iBAAmB1a,KAAKuX,iBAAiBvP,MAAMzW,cAAc,IAAM6P,EAAWgB,iBAAiB3H,WAAU,IAE9GpH,EAAcsF,EAAQpH,cAAc,IAAM6P,EAAW/N,aACrD2M,KAAKuX,iBAAiB1S,UAAU1S,GAAOzB,SACnCiI,EAAQpH,cAAc,IAAM6P,EAAWgB,mBACvCzJ,EAAQ5B,UAAU8D,OAAOuG,EAAWkB,WACpCjP,EAAY0D,UAAU8D,OAAOuG,EAAWiB,UACxCqC,SAAO/L,EAAQpH,cAAc,IAAM6P,EAAWgB,mBAI7CzJ,EAAQpH,cAAc,IAAM6P,EAAWgB,mBACxCzJ,EAAQ5B,UAAUC,IAAIoK,EAAWkB,WACjCjP,EAAY0D,UAAUC,IAAIoK,EAAWiB,UACU,SAA3CrC,KAAKuX,iBAAiBjO,iBACtBjW,EAAY0D,UAAUC,IAAI,mBAG1B3D,EAAY0D,UAAUC,IAAI,oBAE9B3D,EAAY+F,OAAO4G,KAAK0a,iBAAiBjgB,WAAU,OAKnE2c,EAAezd,UAAUghB,wBAA0B,SAAUhiB,EAASxG,GASlE,GARAwG,EAAQ5B,UAAU8D,OAAOuG,EAAWY,SAChChC,KAAKuZ,UAAUE,oBAAoB1oB,SAAiE,IAAvDiP,KAAKuZ,UAAUE,oBAAoBjgB,QAAQrH,IACxFwG,EAAQ5B,UAAUC,IAAIoK,EAAWY,SAErCrJ,EAAQX,MAAMC,QAAU,GACpB+H,KAAKuZ,UAAUG,kBAAkB3oB,SAA+D,IAArDiP,KAAKuZ,UAAUG,kBAAkBlgB,QAAQrH,KACpFwG,EAAQX,MAAMC,QAAU,QAExB+H,KAAKuX,iBAAiBnhB,aAAc,CACpC,IAAIwkB,EAAmBjiB,EAAQpH,cAAc,IAAM6P,EAAWgB,iBAC9DzJ,EAAQ5B,UAAU8D,OAAOuG,EAAWjO,UACpCwF,EAAQ5B,UAAU8D,OAAOuG,EAAWG,SAChCqZ,IACAA,EAAiBvjB,gBAAgB,gBACjCujB,EAAiB9jB,kBAAkBC,UAAU8D,OAAOuG,EAAWlO,UAE/D8M,KAAKuZ,UAAUC,cAAczoB,SAA2D,IAAjDiP,KAAKuZ,UAAUC,cAAchgB,QAAQrH,KAC3E6N,KAAKuX,iBAAiBvP,MAAMzW,cAAc6P,EAAWjO,YACtDwF,EAAQ5B,UAAUC,IAAIoK,EAAWjO,UACjCynB,EAAiB9jB,kBAAkBC,UAAUC,IAAIoK,EAAWlO,SAC5D0nB,EAAiB3jB,aAAa,eAAgB,QAC1C+I,KAAK6a,cAAgB1oB,GACrBwG,EAAQ5B,UAAUC,IAAIoK,EAAWG,eAKzC5I,EAAQ5B,UAAU8D,OAAOuG,EAAWjO,UACpCwF,EAAQtB,gBAAgB,iBACnB5G,oBAAkBuP,KAAK6a,cAAgB7a,KAAK6a,cAAgB1oB,GAC5D6N,KAAKuX,iBAAiBvP,MAAMzW,cAAc6P,EAAWjO,YACtDwF,EAAQ5B,UAAUC,IAAIoK,EAAWjO,UACjCwF,EAAQ1B,aAAa,gBAAiB,SAG1C+I,KAAKuX,iBAAiBhnB,OAAOmN,UACzBsC,KAAKuX,iBAAiB1S,UAAU1S,GAAOzB,SACnCiI,EAAQ5B,UAAUmH,SAASkD,EAAWK,YACtC9I,EAAQ5B,UAAU8D,OAAOuG,EAAWK,UACpC9I,EAAQ1B,aAAa,OAAQ,SAC7B0B,EAAQ5B,UAAUC,IAAIoK,EAAWQ,gBAIjCjJ,EAAQ5B,UAAUmH,SAASkD,EAAWQ,iBACtCjJ,EAAQ5B,UAAU8D,OAAOuG,EAAWQ,eACpCjJ,EAAQ1B,aAAa,OAAQ,YAC7B0B,EAAQ5B,UAAUC,IAAIoK,EAAWK,aAKjD2V,EAAezd,UAAUmhB,qBAAuB,SAAUpiB,EAAInI,GAC1D,IAAI6S,EAAQpD,KACR2P,KAkBJ,OAjBApf,EAASyP,KAAKuX,iBAAiB9H,cAAclf,GACxCE,oBAAkBF,IACnBmI,EAAGkX,KAAK,SAAUtU,EAAMnJ,GACpB,SAAK5B,EAAO6S,EAAMmU,iBAAiBhnB,OAAOwE,KAEtCxE,EAAO6S,EAAMmU,iBAAiBhnB,OAAOwE,OAE5BuG,EAAK8H,EAAMmU,iBAAiBhnB,OAAOwE,KAAOuG,EAAK8H,EAAMmU,iBAAiBhnB,OAAOwE,MAAQxE,IAAW+K,KACzGqU,EAAWxd,MAAQA,EACnBwd,EAAWrU,KAAOA,GACX,KAOZqU,GAEXyH,EAAezd,UAAUwZ,iBAAmB,WACxC,IAAI/P,EAAQpD,KACZ,IAAKvP,oBAAkBuP,KAAK6a,cAAiB7a,KAAKuX,iBAAiBnhB,cAAgB4J,KAAKuZ,UAAUC,cAAczoB,OAAS,CACrH,IAAIgqB,KACAC,KACJ,GAAmD,iBAAxChb,KAAKuX,iBAAiBrjB,WAAW,IACO,iBAAxC8L,KAAKuX,iBAAiBrjB,WAAW,GAAiB,CACzD,IAAI+mB,EAAcjb,KAAKuX,iBAAiB1S,UACxC,GAAI7E,KAAKuX,iBAAiBnhB,aAAc,CAEpC,IAAK,IADD8kB,EAAUlb,KAAKuZ,UAAUC,cACpBvkB,EAAI,EAAGA,EAAIimB,EAAQnqB,OAAQkE,IAChC8lB,EAAe3oB,KAAK6oB,EAAYC,EAAQjmB,KAE5C,OACIjC,KAAM+nB,EAENzf,KAAMyf,EACN5oB,MAAO6N,KAAKuZ,UAAUC,cAAc2B,IAAI,SAAUhpB,GAC9C,OAAOiR,EAAMmU,iBAAiBrjB,WAAWsF,QAAQyhB,EAAY9oB,OAKrE,OACIa,KAAMioB,EAAYjb,KAAK6a,aACvBvf,KAAM2f,EAAYjb,KAAK6a,aACvB1oB,MAAO6N,KAAKuX,iBAAiBrjB,WAAWsF,QAAQyhB,EAAYjb,KAAK6a,eAKzE,IAAIO,EAAcpb,KAAKuX,iBAAiB1S,UACpC7R,EAAOgN,KAAKuX,iBAAiBhnB,OAAOyC,KACxC,GAAIgN,KAAKuX,iBAAiBnhB,aAAc,CAE/B,IADDilB,EAAarb,KAAKuZ,UAAUC,cAChC,IAASvkB,EAAI,EAAGA,EAAIomB,EAAWtqB,OAAQkE,IACnC+lB,EAAe5oB,KAAKgpB,EAAYC,EAAWpmB,IAAI,GAAKjC,IAEpD+nB,EAAe3oB,KAAKgpB,EAAYC,EAAWpmB,KAG/C,IAAIqmB,EAAetb,KAAKuX,iBAAiBrjB,sBAAsBmG,cACzD+gB,EAAcpb,KAAKuX,iBAAiBrjB,WAC1C,OACIlB,KAAMgoB,EAEN1f,KAAMyf,EACN5oB,MAAO6N,KAAKuZ,UAAUC,cAAc2B,IAAI,SAAUhpB,GAC9C,OAAOmpB,EAAa9hB,QAAQ4hB,EAAYjpB,OAMhD,IAAI+B,EAAa8L,KAAKuX,iBAAiBrjB,sBAAsBmG,cACvD+gB,EAAcpb,KAAKuX,iBAAiBrjB,WAC1C,OACIlB,KAAMooB,EAAYpb,KAAK6a,aAAa7a,KAAKuX,iBAAiBhnB,OAAOyC,MAEjEsI,KAAM8f,EAAYpb,KAAK6a,aACvB1oB,MAAO+B,EAAWsF,QAAQ4hB,EAAYpb,KAAK6a,iBAS/DzD,EAAezd,UAAUiZ,WAAa,SAAUf,GAE5C,IAAI0J,EAAYvb,KAAK8a,qBAAqB9a,KAAKuX,iBAAiB1S,UAAWgN,GAC3E,GAAIhhB,OAAOC,KAAKyqB,GAAWxqB,OAAQ,CAC/B,IAAIyqB,EAAaxb,KAAK6a,cAAgBU,EAAUppB,MAC5CsL,OAAY,EAehB,GAdAuC,KAAK6a,YAAcU,EAAUppB,MACzB6N,KAAKuX,iBAAiBnhB,gBACyC,IAA3D4J,KAAKuZ,UAAUC,cAAchgB,QAAQ+hB,EAAUppB,QAC/CsL,GAAY,EACZuC,KAAKuZ,UAAUC,cAAcpnB,KAAKmpB,EAAUppB,SAG5CsL,GAAY,EACZuC,KAAKuZ,UAAUC,cAAcrf,OAAO6F,KAAKuZ,UAAUC,cAAchgB,QAAQ+hB,EAAUppB,OAAQ,IAE3F6N,KAAKuX,iBAAiBvP,MAAMzW,cAAc,IAAM6P,EAAWG,UAC3DvB,KAAKuX,iBAAiBvP,MAAMzW,cAAc,IAAM6P,EAAWG,SAASxK,UAAU8D,OAAOuG,EAAWG,UAGpGvB,KAAKuX,iBAAiB3N,sBAAsBiI,GACxC7R,KAAKuX,iBAAiBnhB,aACtB4J,KAAKuX,iBAAiBvM,cAAchL,KAAKuX,iBAAiB3N,sBAAsBiI,IAGhF7R,KAAKuX,iBAAiBlM,YAAYrL,KAAKuX,iBAAiB3N,sBAAsBiI,QAGjF,CAED,IAAI5G,OAAY,EAChB,GAAmD,iBAAxCjL,KAAKuX,iBAAiBrjB,WAAW,IACO,iBAAxC8L,KAAKuX,iBAAiBrjB,WAAW,GACxC+W,GACIjY,KAAMgN,KAAKuX,iBAAiB1S,UAAU7E,KAAK6a,aAC3Cvf,KAAM0E,KAAKuX,iBAAiB1S,UAAU7E,KAAK6a,aAC3C1oB,MAAO6N,KAAK6a,iBAGf,CACD,IAAIhW,EAAY7E,KAAKuX,iBAAiB1S,UACtCoG,GACIjY,KAAM6R,EAAU7E,KAAK6a,aAAa7a,KAAKuX,iBAAiBhnB,OAAOyC,MAC/DsI,KAAMuJ,EAAU7E,KAAK6a,aACrB1oB,MAAO6N,KAAK6a,aAGhB7a,KAAKuX,iBAAiBnhB,cACtB6U,EAAUxN,UAAYA,EACtBuC,KAAKuX,iBAAiBxP,QAAQ,SAAUkD,IAElCuQ,IACNxb,KAAKuX,iBAAiBnM,eACtBpL,KAAKuX,iBAAiBxP,QAAQ,SAAUkD,UAI3Cxa,oBAAkBohB,KAAS7R,KAAKuX,iBAAiBnhB,eACtD4J,KAAKuX,iBAAiBnM,eACtBpL,KAAK6a,iBAAc3pB,IAG3BkmB,EAAezd,UAAU+Z,WAAa,SAAU7B,GAE5C,IAAI0J,EAAYvb,KAAK8a,qBAAqB9a,KAAKuX,iBAAiB1S,UAAWgN,GACvEhhB,OAAOC,KAAKyqB,GAAWxqB,QACvBiP,KAAKuZ,UAAUE,oBAAoBtf,OAAO6F,KAAKuZ,UAAUE,oBAAoBjgB,QAAQ+hB,EAAUppB,OAAQ,IAG/GilB,EAAezd,UAAUia,YAAc,SAAU/B,GAE7C,IAAI0J,EAAYvb,KAAK8a,qBAAqB9a,KAAKuX,iBAAiB1S,UAAWgN,GACvEhhB,OAAOC,KAAKyqB,GAAWxqB,SAA2E,IAAjEiP,KAAKuZ,UAAUE,oBAAoBjgB,QAAQ+hB,EAAUppB,QACtF6N,KAAKuZ,UAAUE,oBAAoBrnB,KAAKmpB,EAAUppB,QAG1DilB,EAAezd,UAAUma,SAAW,SAAUjC,GAE1C,IAAI0J,EAAYvb,KAAK8a,qBAAqB9a,KAAKuX,iBAAiB1S,UAAWgN,GACvEhhB,OAAOC,KAAKyqB,GAAWxqB,QACvBiP,KAAKuZ,UAAUG,kBAAkBvf,OAAO6F,KAAKuZ,UAAUG,kBAAkBlgB,QAAQ+hB,EAAUppB,OAAQ,IAG3GilB,EAAezd,UAAUqa,SAAW,SAAUnC,GAE1C,IAAI0J,EAAYvb,KAAK8a,qBAAqB9a,KAAKuX,iBAAiB1S,UAAWgN,GACvEhhB,OAAOC,KAAKyqB,GAAWxqB,SAAyE,IAA/DiP,KAAKuZ,UAAUG,kBAAkBlgB,QAAQ+hB,EAAUppB,QACpF6N,KAAKuZ,UAAUG,kBAAkBtnB,KAAKmpB,EAAUppB,QAGxDilB,EAAezd,UAAU4b,WAAa,SAAU1D,GAC5C,IAAI3d,EACA2Q,EAAY7E,KAAKuX,iBAAiB1S,UAElC0W,EAAYvb,KAAK8a,qBAAqBjW,EAAWgN,GACjDhhB,OAAOC,KAAKyqB,GAAWxqB,SACvBmD,EAAaqnB,EAAUjgB,KACnBuJ,EAAU0W,EAAUppB,MAAQ,IAC5B0S,EAAU0W,EAAUppB,MAAQ,GAAGzB,UAET,IADrBmU,EAAU0W,EAAUppB,MAAQ,GACxBqM,MAAMzN,QACXiP,KAAKyb,aAAaF,EAAUppB,MAAQ,GACpC6N,KAAKyb,aAAaF,EAAUppB,MAAQ,IAGpC6N,KAAKyb,aAAaF,EAAUppB,QAGpC,IAAIqjB,EAAiBxV,KAAKuX,iBAAiBrjB,sBAAsBmG,cAC3D2F,KAAKuX,iBAAiBpI,UAAYnP,KAAKuX,iBAAiBrjB,WAC1D/B,EAAQqjB,EAAehc,QAAQtF,IACpB,IAAX/B,IACAqjB,EAAerb,OAAOhI,EAAO,GAC7B6N,KAAKuX,iBAAiBrH,kBAAkBsF,IAG5CxV,KAAKuX,iBAAiBxY,aAClBiB,KAAKuX,iBAAiBvP,MAAMpN,iBAAiB,OAGrDwc,EAAezd,UAAUqR,cAAgB,SAAUpY,EAAIjB,GACnD,IAAIQ,EAAQuH,MAAMC,UAAUH,QAAQjH,KAAKyN,KAAKuX,iBAAiBvP,MAAMpN,iBAAiB,MAAOhI,GAAMoN,KAAK+M,aACxG/M,KAAK6a,YAAcnhB,MAAMC,UAAUH,QAAQjH,KAAKyN,KAAKuX,iBAAiBvP,MAAMpN,iBAAiB,MAAOhI,GAAMoN,KAAK+M,aAC3Gna,EAAGmE,UAAUmH,SAASkD,EAAWjO,WACoB,IAAjD6M,KAAKuZ,UAAUC,cAAchgB,QAAQrH,IACrC6N,KAAKuZ,UAAUC,cAAcpnB,KAAKD,GAItC6N,KAAKuZ,UAAUC,cAAcrf,OAAO6F,KAAKuZ,UAAUC,cAAchgB,QAAQrH,GAAQ,IAIzFilB,EAAezd,UAAU0R,YAAc,SAAUzY,EAAIjB,GACjDqO,KAAK6a,YAAcnhB,MAAMC,UAAUH,QAAQjH,KAAKyN,KAAKuX,iBAAiBvP,MAAMpN,iBAAiB,MAAOhI,GAAMoN,KAAK+M,cAEnHqK,EAAezd,UAAUyQ,YAAc,SAAUlX,GAC7C,GAAIA,EAAS,CACT8M,KAAKuZ,UAAUC,iBACfxZ,KAAK6a,iBAAc3pB,EAEnB,IAAK,IADDoK,EAAO0E,KAAKuX,iBAAiB1S,UACxB1S,EAAQ,EAAGA,EAAQmJ,EAAKvK,OAAQoB,IAChCmJ,EAAKnJ,GAAOzB,UACbsP,KAAKuZ,UAAUC,cAAcpnB,KAAKD,QAK1C6N,KAAK6a,iBAAc3pB,EACnB8O,KAAKuZ,UAAUC,kBAGvBpC,EAAezd,UAAU+hB,UAAY,SAAUvpB,GAK3C,IAAIqoB,EAAYxa,KAAKuX,iBAAiB1S,UAYtC,GAXA7E,KAAK2b,gBAAgBxpB,GAAO,GACxB6N,KAAK6a,aAAe7a,KAAK6a,aAAe1oB,GACxC6N,KAAK6a,cAEL7a,KAAKuX,iBAAiBnhB,cACtBokB,EAAUroB,GAAO6N,KAAKuX,iBAAiBhnB,OAAOkN,YAC9CuC,KAAKuZ,UAAUC,cAAcpnB,KAAKD,GAEjCmnB,WAAWtZ,KAAKoY,cAAcpgB,MAAMoN,SAAYkU,WAAWtZ,KAAKmY,WAAWngB,MAAMoN,UAClFpF,KAAKoY,cAAcpgB,MAAMoN,OAASkU,WAAWtZ,KAAKoY,cAAcpgB,MAAMoN,QAAUpF,KAAKiN,eAAiB,MAEtGqM,WAAWtZ,KAAKoY,cAAcpgB,MAAMoN,QAAS,CAC7C,IAAIwW,EAAS5b,KAAKuX,iBAAiBvP,MAAMwB,iBAAiBqS,iBACtDrpB,EAASwN,KAAKuX,iBAAiB3N,sBAAsB4Q,EAAUroB,EAAQ,KACvE6N,KAAKuX,iBAAiB3N,sBAAsB4Q,EAAUroB,EAAQ,OAE9D6N,KAAKoY,cAAcpgB,MAAMoN,OAASkU,WAAWtZ,KAAKoY,cAAcpgB,MAAMoN,QAAUpF,KAAKiN,eAAiB,KACtGjN,KAAKsa,SAASsB,EAAQzpB,EAAOK,QAGhC,CACGopB,EAAS5b,KAAKuX,iBAAiBvP,MAAMlR,kBAAkBgjB,YAA3D,IACItnB,OAAS,EAETA,EADC3B,OAAOC,KAAKkP,KAAKuX,iBAAiB1S,WAAW9T,OAAS,IAAOoB,EACrD6N,KAAKuX,iBAAiBvP,MAAMwB,iBAG5BxJ,KAAKuX,iBAAiB3N,sBAAsB4Q,EAAUroB,EAAQ,KACnE6N,KAAKuX,iBAAiB3N,sBAAsB4Q,EAAUroB,EAAQ,IAEtE6N,KAAKmY,WAAWngB,MAAMoN,OAASkU,WAAWtZ,KAAKmY,WAAWngB,MAAMoN,QAAUpF,KAAKiN,eAAiB,KAChGjN,KAAK+M,eACL/M,KAAKgY,cACDxlB,IACAwN,KAAKsa,SAASsB,EAAQzpB,EAAOK,IACU,IAAnCwN,KAAKuX,iBAAiBhS,SACtBmH,OAAOoP,SAAS,EAAIlP,YAAc5M,KAAKiN,gBAGvCjN,KAAKuX,iBAAiB5e,QAAQkU,WAAa7M,KAAKiN,gBAI5DjN,KAAKqY,aAAerY,KAAKiN,eACzBjN,KAAKwY,SAAWzc,KAAKmd,MAAMI,WAAWtZ,KAAKmY,WAAWngB,MAAMoN,QAAUpF,KAAKiN,iBAE/EmK,EAAezd,UAAU8hB,aAAe,SAAUtpB,GAC9C6N,KAAKqY,aAAerY,KAAKiN,eACzB,IAAIpI,EAAY7E,KAAKuX,iBAAiB1S,UAAU1S,GAC5CypB,EAAS5b,KAAKuX,iBAAiB3N,sBAAsB/E,GAKzD,GAJA7E,KAAKuX,iBAAiB1S,UAAU1K,OAAOhI,EAAO,GAC1C6N,KAAK6a,aAAe7a,KAAK6a,aAAe1oB,GACxC6N,KAAK6a,cAELe,EACA,GAAI5b,KAAK+X,aAAelnB,OAAOC,KAAKkP,KAAKuX,iBAAiB1S,WAAW9T,OACjE2T,SAAOkX,GACP5b,KAAK+X,eACL/X,KAAKgY,cACLhY,KAAKqY,YAAc,MAElB,CASD,GARIuD,EAAO7kB,UAAUmH,SAASkD,EAAWY,WACrC4Z,EAAO7kB,UAAU8D,OAAOuG,EAAWY,SACnChC,KAAKuZ,UAAUE,oBAAoBtf,OAAO6F,KAAKuZ,UAAUE,oBAAoBjgB,QAAQrH,GAAQ,IAEpE,SAAzBypB,EAAO5jB,MAAMC,UACb2jB,EAAO5jB,MAAMC,QAAU,GACvB+H,KAAKuZ,UAAUG,kBAAkBvf,OAAO6F,KAAKuZ,UAAUG,kBAAkBlgB,QAAQrH,GAAQ,IAEzF6N,KAAKuX,iBAAiBnhB,cAAgBwlB,EAAO7kB,UAAUmH,SAASkD,EAAWjO,UAAW,CACtF6M,KAAKuX,iBAAiBnM,eACtBpL,KAAKuZ,UAAUC,cAAcrf,OAAO6F,KAAKuZ,UAAUC,cAAchgB,QAAQrH,GAAQ,GACjF,IAAIyoB,EAAmBgB,EAAOrqB,cAAc,IAAM6P,EAAWgB,iBAC7DwY,EAAiBvjB,gBAAgB,gBACjCujB,EAAiB9jB,kBAAkBC,UAAU8D,OAAOuG,EAAWlO,SAC3D0oB,EAAO7kB,UAAUmH,SAASkD,EAAWG,WACrCqa,EAAO7kB,UAAU8D,OAAOuG,EAAWG,SACnCvB,KAAK6a,iBAAc3pB,QAGlB0qB,EAAO7kB,UAAUmH,SAASkD,EAAWjO,YAC1C6M,KAAKuX,iBAAiBnM,eACtBpL,KAAK6a,iBAAc3pB,GAElBooB,WAAWtZ,KAAKoY,cAAcpgB,MAAMoN,SAAYkU,WAAWtZ,KAAKmY,WAAWngB,MAAMoN,QAG7EkU,WAAWtZ,KAAKoY,cAAcpgB,MAAMoN,SACzCpF,KAAKoY,cAAcpgB,MAAMoN,OAASkU,WAAWtZ,KAAKoY,cAAcpgB,MAAMoN,QAAUpF,KAAKiN,eAAiB,KACtGjN,KAAKsa,SAASsB,EAAQ5b,KAAKgY,YAAahY,KAAKoY,iBAG7CpY,KAAKmY,WAAWngB,MAAMoN,OAASkU,WAAWtZ,KAAKmY,WAAWngB,MAAMoN,QAAUpF,KAAKiN,eAAiB,KAChGjN,KAAKsa,SAASsB,EAAS5b,KAAK+M,aAAe,EAAI/M,KAAKmY,WAAW2B,aAC/D9Z,KAAKgY,cACLhY,KAAK+M,gBAVL/M,KAAKsa,SAASsB,EAAQ5b,KAAKgY,YAAahY,KAAKoY,eAczDpY,KAAK2b,gBAAgBxpB,GAAO,GAC5B6N,KAAKwY,SAAWzc,KAAKmd,MAAMI,WAAWtZ,KAAKmY,WAAWngB,MAAMoN,QAAUpF,KAAKiN,iBAE/EmK,EAAezd,UAAUgiB,gBAAkB,SAAUxpB,EAAO4pB,GAExD,IAAK,IADDjrB,EAAOD,OAAOC,KAAKkP,KAAKuZ,WACnByC,EAAM,EAAGA,EAAMlrB,EAAKC,OAAQirB,IACjChc,KAAKuZ,UAAUzoB,EAAKkrB,IAAQhc,KAAKuZ,UAAUzoB,EAAKkrB,IAAMb,IAAI,SAAUlmB,GAChE,OAAIA,GAAK9C,EACE4pB,IAAc9mB,IAAMA,EAGpBA,KAKvBmiB,EAAezd,UAAUua,QAAU,SAAU5Y,EAAM/K,EAAQ2D,EAAY/B,GACnE,IAAK,IAAI8C,EAAI,EAAGA,EAAIqG,EAAKvK,OAAQkE,IAAK,CAClC,IAAIigB,EAAc5Z,EAAKrG,GAMvB,GAJAf,EAAa8L,KAAKuX,iBAAiBnD,eAAejiB,EAAO+B,EAAYghB,GAErElV,KAAKuX,iBAAiBrH,kBAAkBhc,GAEnC8L,KAAK+X,aAUL,GAAI/X,KAAK+X,aAAe/X,KAAK6X,qBAAsB,CAEpD,GADS7X,KAAKuX,iBAAiBhI,eAAerb,EAAY3D,aACxCmJ,MAAO,CACrB,GAAIsG,KAAKuX,iBAAiBha,UAAW,CACjC,IAAI0e,EAAUjc,KAAKuX,iBAAiB1S,UAAUrL,QAAQ0b,GAEtDlV,KAAKkc,uBAAuBhH,EAAa+G,IAErCpX,EAAY7E,KAAKuX,iBAAiB1S,UAAUoX,EAAU,KACzCpX,EAAUnU,UAAuC,IAA3BmU,EAAUrG,MAAMzN,WAEjDkrB,EAEFjc,KAAKkc,uBAAuBrX,EAAWoX,IAI/Cjc,KAAKuX,iBAAiBxY,aAClBiB,KAAKuX,iBAAiBvP,MAAMpN,iBAAiB,WAGpD,CAED,IAAIuhB,EAAUnc,KAAKuX,iBAAiB1S,UAAUrL,QAAQ0b,GAEtDlV,KAAK0b,UAAUS,GAEf,IAAItX,GAAAA,EAAY7E,KAAKuX,iBAAiB1S,UAAUsX,EAAU,KACzCtX,EAAUnU,UAAuC,IAA3BmU,EAAUrG,MAAMzN,QACnDiP,KAAK0b,UAAUS,EAAU,QArCxBnc,KAAKuX,iBAAiBlmB,WAAY2O,KAAKuX,iBAAiB1a,eAAmBmD,KAAK0R,iBACjF1R,KAAKuX,iBAAiBtT,eAAe5S,SAAW,KAChD2O,KAAKuX,iBAAiBtT,eAAepH,cAAgB,KACrDmD,KAAKuX,iBAAiBtT,eAAe3O,YAAc0K,KAAK2R,aAAaxJ,KAAKnI,OAE9EA,KAAK4R,qBAqCjBwF,EAAezd,UAAUuiB,uBAAyB,SAAUzH,EAAUtiB,GAElE,IAAIK,EACAI,EAAKmB,WAASyB,uBAAuBwK,KAAKuX,iBAAiBtjB,eAE9DwgB,GAAWzU,KAAKuX,iBAAiBtT,eAAgB,KAAM,KAAMjE,KAAKuX,kBAUnE,GAPI/kB,EADC3B,OAAOC,KAAKkP,KAAKuX,iBAAiB1S,WAAW9T,OAAS,IAAOoB,EACrD6N,KAAKuX,iBAAiBvP,MAAMwB,iBAI5BxJ,KAAKuX,iBAAiB3N,sBAAsB5J,KAAKuX,iBAAiB1S,UAAU1S,EAAQ,KACzF6N,KAAKuX,iBAAiB3N,sBAAsB5J,KAAKuX,iBAAiB1S,UAAU1S,EAAQ,IAExF6N,KAAKuX,iBAAiBhnB,OAAOmN,SAAWsC,KAAKuX,iBAAiB1S,UAAU1S,EAAQ,IAAM6N,KAAKuX,iBAAiB1S,UAAU1S,EAAQ,GAAGzB,SAAU,CAC3I,IAAI2kB,EAAYrV,KAAKuX,iBAAiB3N,sBAAsB5J,KAAKuX,iBAAiB1S,UAAU1S,EAAQ,IAChGkjB,IACA7iB,EAAS6iB,EAAUC,oBAI3BtV,KAAKuX,iBAAiBha,UAAUvL,aAAaY,EAAG,GAAIJ,GAEpDwN,KAAK+X,eACD/X,KAAKuY,qBAAuB,GAC5BvY,KAAKgY,cAGThY,KAAKuK,qBAET6M,EAAezd,UAAUgY,aAAe,SAAU5I,GAC9C,IAAKA,EAAKxT,KAAKwB,UAAUmH,SAAS,uBAC9B8B,KAAKoc,aAAerT,EAAK5T,QAAQzE,SAAWqY,EAAK5T,QAAQqJ,MAAM,GAC3DuK,EAAK5T,QACL6K,KAAKuX,iBAAiBnhB,eAEtB4J,KAAKuX,iBAAiBrP,eAAea,IAC/BtY,oBAAkBuP,KAAKuX,iBAAiBhO,mBACxC9Y,oBAAkBuP,KAAKuX,iBAAiBhO,gBAAgBnD,aAAa,CACvE,IAAIiW,EAAQ/qB,SAAS2C,cAAc,OAC/BqoB,EAAiB,iFACiBtc,KAAKuX,iBAAiBhnB,OAAOyC,KAAO,kBAEtEupB,EADmB/qB,UAAQwO,KAAKuX,iBAAiBlmB,UAAYirB,EAAgBtc,KAAKuX,iBAC1EiF,CAAiBxc,KAAKoc,aAAcpc,KAAKuX,kBAOrD,GANIvX,KAAKuX,iBAAiBlmB,UAAY2O,KAAKuX,iBAAiB/Q,SACxDxG,KAAKuX,iBAAiB9Q,0BAEvBnU,MAAMC,KAAKgqB,GAAOrqB,QAAQ,SAAUuc,GACnC4N,EAAM5pB,YAAYgc,KAElB4N,EAAMhqB,UAAYgqB,EAAMhqB,SAAS,GAAI,CAcrC,IAbAgqB,EAAMhqB,SAAS,GAAG0E,UAAUC,IAAI,cACe,SAA3CgJ,KAAKuX,iBAAiBjO,iBACtB+S,EAAMhqB,SAAS,GAAG0E,UAAUC,IAAI,mBAGhCqlB,EAAMhqB,SAAS,GAAG0E,UAAUC,IAAI,oBAEW,SAA3CgJ,KAAKuX,iBAAiBjO,iBACtB+S,EAAMhqB,SAAS,GAAGL,aAAagO,KAAKuX,iBAAiBhO,gBAAiB8S,EAAMrhB,WAAW,GAAG3I,SAAS,IAGnGgqB,EAAMhqB,SAAS,GAAGI,YAAYuN,KAAKuX,iBAAiBhO,iBAEjDR,EAAKxT,KAAKknB,WACb1T,EAAKxT,KAAK+V,YAAYvC,EAAKxT,KAAKknB,cAEjCnqB,MAAMC,KAAK8pB,EAAMhqB,UAAUH,QAAQ,SAAUuc,GAC5C1F,EAAKxT,KAAK9C,YAAYgc,QAO9C2I,EAAezd,UAAU0K,yBAA2B,WAChDrE,KAAK2X,iBAAgB,GACjB3X,KAAKuX,iBAAiB9S,kBACtBC,SAAO1E,KAAKuX,iBAAiB9S,kBAEjCzE,KAAKuX,iBAAiBtP,YAGtBjI,KAAK+X,aAAe,EACpB/X,KAAKuX,iBAAiBlY,SACtBW,KAAKuX,iBAAiB5G,gBAE1ByG,EAAezd,UAAU2gB,SAAW,SAAU3hB,EAASxG,EAAOuY,GAC1D,IAAIgS,EAAW1c,KAAK0R,eAAiB1R,KAAK2c,WAAa3c,KAAK0c,SAC5D,GAAI1c,KAAKuX,iBAAiBlmB,UAAY2O,KAAKuX,iBAAiB1a,cAAe,CACvE,IAAIgI,EAAY7E,KAAKuX,iBAAiB1S,UAAU1S,GAEhDwG,EAAQ8hB,QAAQ5H,IAAOhO,EAAU7E,KAAKuX,iBAAiBhnB,OAAOwE,IAEzD8P,EAAU7E,KAAKuX,iBAAiBhnB,OAAOwE,IAAOhB,WAASiB,aAC5D0nB,EAAS7X,EAAWlM,EAASqH,WAG7BA,KAAKua,gBAAgB5hB,EAASxG,GAElC6N,KAAK2a,wBAAwBhiB,EAASxG,GAClCuY,GACA1K,KAAKuX,iBAAiBha,UAAUvL,aAAa2G,EAAS+R,IAU9D0M,EAAezd,UAAU+iB,SAAW,SAAUE,EAASC,EAAaC,GAChE,IAAIlB,EAAS7nB,WAASyB,uBAAuBsnB,EAAYvF,iBAAiBtjB,eAEzE2oB,GAAUE,EAAYvF,iBAAiBtT,eAAgB,KAAM,KAAM6Y,EAAYvF,kBAIhF,IAHIuF,EAAYvF,iBAAiB/Q,SAC7BsW,EAAYvF,iBAAiB9Q,uBAE1BoW,EAAYJ,WACfI,EAAYvR,YAAYuR,EAAYJ,cAErCnqB,MAAMC,KAAKqpB,EAAO,GAAGvpB,UAAUH,QAAQ,SAAUuc,GAChDoO,EAAYpqB,YAAYgc,MAGhC2I,EAAezd,UAAUgjB,WAAa,SAAUC,EAASC,EAAaC,GAIlE,IAFA,IACIC,EADmBvrB,UAAQsrB,EAAYvF,iBAAiBlmB,SACxC2rB,CAAiBJ,GAC9BC,EAAYJ,WACfI,EAAYvR,YAAYuR,EAAYJ,WAExCI,EAAYpqB,YAAYsqB,EAAc,KAE1C3F,EAAezd,UAAUlE,cAAgB,WACrC,MAAO,kBAEX2hB,EAAezd,UAAU0U,QAAU,WAC/BrO,KAAK2X,iBAAgB,GACrB3X,KAAKmY,WAAa,KAClBnY,KAAKoY,cAAgB,MAElBhB,KF54BP5X,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5O,OAAO+O,iBAChBC,wBAA2BnG,OAAS,SAAUgG,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIG,KAAKH,EAAOA,EAAE1J,eAAe6J,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASI,IAAOC,KAAKC,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAE/F,UAAkB,OAANgG,EAAa9O,OAAOqP,OAAOP,IAAMI,EAAGpG,UAAYgG,EAAEhG,UAAW,IAAIoG,IAV3C,GAaxCI,EAA0C,SAAUC,EAAY5N,EAAQkM,EAAK2B,GAC7E,IAA2HX,EAAvHY,EAAIC,UAAUxP,OAAQyP,EAAIF,EAAI,EAAI9N,EAAkB,OAAT6N,EAAgBA,EAAOxP,OAAO4P,yBAAyBjO,EAAQkM,GAAO2B,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY5N,EAAQkM,EAAK2B,QACpH,IAAK,IAAIpL,EAAImL,EAAWrP,OAAS,EAAGkE,GAAK,EAAGA,KAASyK,EAAIU,EAAWnL,MAAIuL,GAAKF,EAAI,EAAIZ,EAAEc,GAAKF,EAAI,EAAIZ,EAAElN,EAAQkM,EAAK8B,GAAKd,EAAElN,EAAQkM,KAAS8B,GAChJ,OAAOF,EAAI,GAAKE,GAAK3P,OAAO+P,eAAepO,EAAQkM,EAAK8B,GAAIA,GAqB5Dyc,EAA0B,SAAUla,GAEpC,SAASka,EAAStkB,EAASvE,GACvB,IAAIgP,EAAQL,EAAOxQ,KAAKyN,KAAM5L,EAASuE,IAAYqH,KA2LnD,OA1LAoD,EAAM8Z,UAAY,SAAUvrB,GAExB,IAAIa,EAAS4Q,EAAM+Z,mBAAmBxrB,EAAEyrB,OAAO5qB,QAC/C,IAAK4Q,EAAMia,cAAc7qB,EAAQ4Q,GAC7B,OAAO,EAEX,IAAIzK,EAWJ,OAVIyK,EAAMka,OACN3kB,EAAUyK,EAAMka,QAASF,OAAQ5qB,EAAQmG,QAAShH,EAAEgH,YAGpDA,EAAUnG,EAAOiI,WAAU,IACnBzC,MAAMsN,MAAQ9S,EAAO+qB,YAAc,KAC3C5kB,EAAQX,MAAMoN,OAAS5S,EAAOgrB,aAAe,MAEjDlkB,YAAUX,IAAW,oBACrBrH,SAASmsB,KAAKhrB,YAAYkG,GACnBA,GAGXyK,EAAMsa,OAAS,SAAU/rB,GACrB,GAAKA,EAAEa,OAAP,CAGA4Q,EAAM2E,QAAQ,QAAU+G,MAAOnd,EAAEmd,MAAOnW,QAASyK,EAAMzK,QAASnG,OAAQb,EAAEa,SAC1E,IAAImrB,EAAUva,EAAMwa,oBAAoBjsB,EAAEa,QACtCA,EAAS4Q,EAAM+Z,mBAAmBxrB,EAAEa,OAAQmrB,GAChD,KAAKva,EAAMia,cAAc7qB,EAAQmrB,IAAYhsB,EAAEa,OAAO+D,UAAUiD,QAAQ,sBAAwB,IAAO4J,EAAMya,YAAcrrB,GACtH/B,oBAAkBktB,EAAQG,cAAkBH,EAAQI,oBAAqBJ,EAAQI,qBAAuBpsB,EAAEa,OAgDtG4Q,EAAMya,YAAcza,EAAM5Q,QAAU4Q,EAAM4a,OAAS5a,EAAMya,YAAcrrB,IAAW/B,oBAAkBktB,EAAQG,eACjHjjB,SAAOuI,EAAMwa,oBAAoBxa,EAAMya,WAAWE,oBAClD3a,EAAMya,UAAYza,EAAM5Q,YAlDmG,CAK3H,GAJIb,EAAEa,OAAOuE,UAAUmH,SAAS,uBAC5B1L,EAASb,EAAEa,QAEf4Q,EAAMya,UAAYrrB,EACd4Q,EAAM5Q,SAAWA,EACjB,OAEJ,IAAIyrB,EAAS7a,EAAM8a,SAASP,EAAQI,mBAAoBJ,GACpDG,EAAc1a,EAAM+a,eAAe3rB,EAAQmrB,GAC3CS,OAAS,EACb,GAAIN,EAAa,CACbG,EAASxtB,oBAAkBwtB,GAAU7a,EAAM8a,SAAS9a,EAAM5Q,QAAUyrB,EACpEG,EAAShb,EAAM8a,SAAS1rB,EAAQmrB,EAAShsB,EAAEmd,OAC3C,IAAIuP,EAAuBjb,EAAMib,qBAAqBV,GACtD,GAAIU,GAAwBJ,IAAWG,EACnC,OAEAC,GACAxjB,SAAO8iB,EAAQI,oBAEnBJ,EAAQI,mBAAqBD,EACzBnsB,EAAEa,OAAO+D,UAAUiD,QAAQ,sBAAwB,EACnDmkB,EAAQhlB,QAAQ3G,aAAa2rB,EAAQI,mBAAoBJ,EAAQhlB,QAAQtG,SAAS+rB,IAE7ET,EAAQhlB,UAAYyK,EAAMzK,SAAWylB,IAAWT,EAAQhlB,QAAQ2lB,kBACrEX,EAAQhlB,QAAQlG,YAAYkrB,EAAQI,oBAGpCJ,EAAQhlB,QAAQ3G,aAAa2rB,EAAQI,mBAAoBJ,EAAQhlB,QAAQtG,SAAS+rB,IAEtFhb,EAAMmb,gBAAgBN,EAAQG,EAAQT,OAErC,CACDM,EAASxtB,oBAAkBwtB,GAAU7a,EAAM8a,SAAS9a,EAAM5Q,QACtD4Q,EAAM8a,SAAS1rB,EAAQmrB,GAAWM,IAAWA,EAASA,EAASA,EAAS,EAC5EG,EAAShb,EAAM8a,SAAS1rB,EAAQmrB,GAChC,IAAIa,EAAMb,EAAQhlB,UAAYyK,EAAMzK,QAAUylB,EAASH,EAASG,EAASA,EAAS,EAAIA,EACtFhb,EAAMqb,gBAAgBd,GACtBA,EAAQhlB,QAAQ3G,aAAaoR,EAAM5Q,OAAQmrB,EAAQhlB,QAAQtG,SAASmsB,IACpEpb,EAAMmb,gBAAgBN,EAAQG,EAAQT,GACtCva,EAAMya,UAAYza,EAAM5Q,OACxB4Q,EAAM2E,QAAQ,QACV2W,eAAgBtb,EAAM5Q,OAAQmG,QAASglB,EAAQhlB,QAASgmB,cAAeV,EAAQW,aAAcR,EAC7F5rB,OAAQb,EAAEa,OAAQ8qB,OAAQhsB,SAAS2hB,uBAAuB,mBAAmB,GAAInE,MAAOnd,EAAEmd,MAAOkP,MAAO5a,EAAM4a,SAS1H,GADAL,EAAUva,EAAMwa,oBAAoBxa,EAAMya,WACtCptB,oBAAkB+B,IAAWb,EAAEa,SAAWmrB,EAAQI,mBAC9C3a,EAAMib,qBAAqBV,IAC3Bva,EAAMyb,kBAAkBlB,OAG3B,CACD,IACImB,KADkBxsB,MAAMC,KAAKjB,SAAS2hB,uBAAuB,2BAEpD/gB,QAAQ,SAAU4rB,IAC3BgB,EAAS1b,EAAMwa,oBAAoBE,IACxBnlB,SAAWmmB,IAAWnB,GAC7Bva,EAAMyb,kBAAkBC,QAMxC1b,EAAM2b,YAAc,SAAUptB,GAC1ByR,EAAM5Q,OAAS4Q,EAAM+Z,mBAAmBxrB,EAAEa,QAC1C,IAAIwsB,GAAa,EACjB5b,EAAM5Q,OAAOuE,UAAUC,IAAI,aAC3BoM,EAAMya,UAAYza,EAAM5Q,OACxBb,EAAE2rB,OAAShsB,SAAS2hB,uBAAuB,mBAAmB,GAC9D,IAAIlK,GAASgG,QAAQ,EAAOpW,QAASyK,EAAMzK,QAASnG,OAAQ4Q,EAAM5Q,QAClE4Q,EAAM2E,QAAQ,kBAAmBgB,EAAM,SAAUiG,GACzCA,EAAaD,SACbiQ,EAAahQ,EAAaD,OAC1B3L,EAAM6b,WAAWttB,MAGrBqtB,IAGAE,WACA9b,EAAM2E,QAAQ,aACV+G,MAAOnd,EAAEmd,MAAOnW,QAASyK,EAAMzK,QAASnG,OAAQ4Q,EAAM5Q,OACtD2sB,WAAYxtB,EAAEwtB,WAAYC,YAAaztB,EAAEytB,cAI7Chc,EAAM2E,QAAQ,aAAe+G,MAAOnd,EAAEmd,MAAOnW,QAASyK,EAAMzK,QAASnG,OAAQ4Q,EAAM5Q,WAI3F4Q,EAAM6b,WAAa,SAAUttB,GACzB,IACI0tB,EACAC,EACAC,EAHAC,EAAWpc,EAAMwa,oBAAoBxa,EAAMya,WAI/CwB,EAAUjc,EAAM8a,SAAS9a,EAAM5Q,QAC/B,IAAI6rB,EAAuBjb,EAAMib,qBAAqBmB,GACtD,GAAInB,EAAsB,CACtB,IAAIoB,EAAWrc,EAAM8a,SAASsB,EAASzB,mBAAoByB,GACvDzW,GACA4V,cAAeU,EAAST,aAAca,EAAUjtB,OAAQb,EAAEa,OAAQksB,eAAgBtb,EAAM5Q,OACxF8qB,OAAQ3rB,EAAE2rB,OAAQvO,QAAQ,EAAOwQ,SAAS,GAE9Cnc,EAAM2E,QAAQ,aAAcgB,EAAM,SAAUiG,GACxC,IAAKA,EAAaD,OAAQ,CAGtB,GAFAwQ,EAAUvQ,EAAauQ,QACvBnc,EAAMqb,gBAAgBe,GAClBxQ,EAAauQ,QAAS,CACtB,IAAI9Q,EAAMrL,EAAM5Q,OAAOiI,WAAU,GACjC2I,EAAM5Q,OAAOuE,UAAU8D,OAAO,aAC9BuI,EAAM5Q,OAASic,EAEnB+Q,EAAS7mB,QAAQ3G,aAAaoR,EAAM5Q,OAAQgtB,EAASzB,oBACrD,IAAI2B,EAAWtc,EAAM8a,SAAS9a,EAAM5Q,OAAQgtB,GAC5CH,EAAUjc,IAAUoc,GAAaH,EAAUK,EAAY,EAAIL,EAAU,EAAIA,EACzEjc,EAAM2E,QAAQ,QACV+G,MAAOnd,EAAEmd,MAAOnW,QAAS6mB,EAAS7mB,QAASgmB,cAAeU,EAAST,aAAcc,EACjFltB,OAAQb,EAAEa,OAAQ8qB,OAAQ3rB,EAAE2rB,OAAQoB,eAAgBtb,EAAM5Q,OAAQmtB,UAAWvc,EAAM4a,MAAOuB,QAASA,IAG3G1kB,SAAO2kB,EAASzB,sBAOxB,GAJAyB,EAAWpc,EAAMwa,oBAAoBjsB,EAAEa,QAEvC8sB,EAASE,EAAS7mB,QAAQ2lB,kBAC1Be,EAAUjc,EAAM8a,SAAS9a,EAAM5Q,QAC3BgtB,EAAS7mB,UAAYhH,EAAEa,SAAY6rB,GAAwBjb,EAAMya,YAAcza,EAAM5Q,OAAS,CAC9F,IAAIotB,GACAjB,cAAeU,EAAST,aAAcxb,EAAMya,YAAcza,EAAM5Q,OAAS6sB,EAAUC,EACnF9sB,OAAQb,EAAEa,OAAQksB,eAAgBtb,EAAM5Q,OAAQ8qB,OAAQ3rB,EAAE2rB,OAAQvO,QAAQ,GAE9E3L,EAAM2E,QAAQ,aAAc6X,EAAgB,SAAU5Q,IAC7CwQ,EAAS7mB,UAAYhH,EAAEa,QAAUb,EAAEa,OAAO+D,UAAUiD,QAAQ,eAAiB,GAAK7H,EAAEa,OAAO+D,UAAUiD,QAAQ,uBAAyB,GACpI7H,EAAEa,OAAOqY,QAAQ,0BAA4BmE,EAAaD,SAC7D3L,EAAMqb,gBAAgBe,GACtBA,EAAS7mB,QAAQlG,YAAY2Q,EAAM5Q,QACnC4Q,EAAM2E,QAAQ,QACV+G,MAAOnd,EAAEmd,MAAOnW,QAAS6mB,EAAS7mB,QAASgmB,cAAeU,EAAST,aAAcU,EACjF9sB,OAAQb,EAAEa,OAAQ8qB,OAAQ3rB,EAAE2rB,OAAQoB,eAAgBtb,EAAM5Q,OAAQmtB,UAAWvc,EAAM4a,WAKnG5a,EAAM5Q,OAAOuE,UAAU8D,OAAO,aAC9BuI,EAAM5Q,OAAS,KACf4Q,EAAMya,UAAY,KAClBhjB,SAAOlJ,EAAE2rB,QACTuC,eAAazc,EAAMzK,QAAS,aAAamnB,WAAWnuB,EAAEmd,QAE1D1L,EAAM+E,OACC/E,EA7LX5D,EAAUyd,EAAUla,GA+LpBgd,EAAa9C,EACbA,EAAStjB,UAAUwO,KAAO,WACjBnI,KAAKrH,QAAQ5D,KACdiL,KAAKrH,QAAQ5D,GAAKirB,cAAY,aAE7BhgB,KAAKpJ,YACNoJ,KAAKpJ,UAAY,cACjBoJ,KAAKigB,YAETjgB,KAAKkgB,uBAETjD,EAAStjB,UAAUumB,oBAAsB,WACrC,IAAIC,YAAUngB,KAAKrH,SACf2kB,OAAQtd,KAAKkd,UACbkD,UAAWpgB,KAAK+e,YAChBsB,KAAMrgB,KAAK0d,OACX4C,SAAUtgB,KAAKif,WACfsB,WAAY,IAAMvgB,KAAKpJ,UACvB4pB,eAAe,EACfC,iBAAkB,IAClBC,kBAAmB1gB,KAAK0gB,kBACxBC,SAAU,IAEd3gB,KAAK8N,cAETmP,EAAStjB,UAAUmU,WAAa,WAC5B,IAAI8S,EAAU5gB,KAAKrH,QACnBoV,eAAa/W,IAAI4pB,EAAS,UAAW5gB,KAAK6gB,eAAgB7gB,OAE9Did,EAAStjB,UAAUmnB,aAAe,WAC9B,IAAIF,EAAU5gB,KAAKrH,QACnBoV,eAAalT,OAAO+lB,EAAS,UAAW5gB,KAAK6gB,iBAEjD5D,EAAStjB,UAAUknB,eAAiB,SAAUlvB,GAC1C,GAAkB,KAAdA,EAAE4b,QAAgB,CAClB,IAAI+S,EAAWT,eAAa7f,KAAKrH,QAAS,aACtC2nB,GACAA,EAASR,WAAW,MAExB,IAAIiB,EAAczvB,SAAS2hB,uBAAuB,mBAAmB,GACjE8N,GACAA,EAAYlmB,SAEhB,IAAImmB,EAAkB1vB,SAAS2hB,uBAAuB,0BAA0B,GAC5E+N,GACAA,EAAgBnmB,WAI5BoiB,EAAStjB,UAAUwkB,eAAiB,SAAU3rB,EAAQ6kB,GAClD,GAAIA,EAASyG,YAAa,CACtB,IAAIC,EAAqB1G,EAASyG,aAAcnlB,QAAS0e,EAAS1e,QAASsoB,eAAgBjhB,KAAKxN,OAAQA,OAAQA,IAEhH,OADAurB,EAAmBhnB,UAAUC,IAAI,0BAC1B+mB,EAEX,OAAO,MAEXd,EAAStjB,UAAU0jB,cAAgB,SAAU7qB,EAAQ6kB,GACjD,OAAO7kB,GAAU0uB,uBAAqB1uB,EAAQ6kB,EAAS1e,UAAYnG,EAAOuE,UAAUmH,SAASmZ,EAASzgB,aACjGpE,EAAOuE,UAAUmH,SAAS,eAEnC+e,EAAStjB,UAAUklB,kBAAoB,SAAUxH,GAC7Cxc,SAAOwc,EAAS0G,oBAChB1G,EAAS0G,mBAAqB,MAElCd,EAAStjB,UAAU8kB,gBAAkB,SAAUpH,GACvCrX,OAASqX,IACTrX,KAAKxN,OAAOuE,UAAU8D,OAAOmF,KAAKpJ,WAClCoJ,KAAKxN,OAAOuE,UAAUC,IAAIqgB,EAASzgB,aAG3CqmB,EAAStjB,UAAUikB,oBAAsB,SAAUjlB,GAE/C,GADAA,EAAUkS,UAAQlS,EAAS,MAAQqH,KAAKvK,iBAC3B,CACT,IAAI0rB,EAAOtB,eAAalnB,EAASonB,GACjC,OAAOoB,EAAKnD,OAAShe,KAAKge,OAASmD,EAAKnD,QAAUhe,KAAKge,MAAQmD,EAAOnhB,KAGtE,OAAOA,MAGfid,EAAStjB,UAAU4kB,gBAAkB,SAAUN,EAAQG,EAAQ/G,GAC3D,GAAIA,IAAarX,KAMb,IALA,IAAIrH,OAAU,EACVyoB,EAAYnD,EAASG,EACrBiD,OAAc,EACdC,EAAQF,EAAYnD,EAASG,EAC7BvW,EAAMuZ,EAAYhD,EAASH,EACxBqD,GAASzZ,IACZlP,EAAUqH,KAAKrH,QAAQtG,SAASivB,IACpBvqB,UAAUmH,SAAS,eAC3BmjB,EAAcrhB,KAAKke,SAASvlB,GAC5BqH,KAAKrH,QAAQ3G,aAAa2G,EAASqH,KAAKrH,QAAQtG,SAAS+uB,EAAYC,EAAc,EAAIA,EAAc,IACrGC,EAAQF,EAAYC,EAAc,EAAIA,EAAc,GAGpDC,KAKhBrE,EAAStjB,UAAUukB,SAAW,SAAU1rB,EAAQ6kB,EAAU1lB,QACrC,IAAb0lB,IAAuBA,EAAWrX,MACtC,IAAIwe,EACA+C,EAmBJ,SAlBGjvB,MAAMC,KAAK8kB,EAAS1e,QAAQtG,UAAUH,QAAQ,SAAUyG,EAASxG,GAIhE,GAHIwG,EAAQ5B,UAAUmH,SAAS,4BAC3BqjB,GAAqB,GAErB5oB,IAAYnG,QAEZ,GADAgsB,EAAMrsB,GACD1B,oBAAkBkB,GAAI,CACnB4vB,IACA/C,GAAO,GAEX,IAAIgD,EAAShvB,EAAO0Z,wBAChBuV,EAAUD,EAAOE,QAAWF,EAAOE,OAASF,EAAOrV,KAAO,EAC1DwV,EAAOhwB,EAAEiwB,eAAiBjwB,EAAEiwB,eAAe,GAAGH,QAAU9vB,EAAE8vB,QAC9DjD,EAAMmD,GAAQF,EAAUjD,EAAMA,EAAM,KAKzCA,GAEXvB,EAAStjB,UAAUwjB,mBAAqB,SAAUxkB,EAAS0e,GAEvD,YADiB,IAAbA,IAAuBA,EAAWrX,MAC/B6K,UAAQlS,EAAS,IAAM0e,EAASzgB,YAE3CqmB,EAAStjB,UAAU+mB,kBAAoB,SAAUzvB,GAG7C,OAFAA,EAAM4wB,KAAOC,YAAcxI,WAAWroB,EAAM4wB,MAAQC,YAAc,KAAO7wB,EAAM4wB,KAC/E5wB,EAAMkb,IAAMS,YAAc0M,WAAWroB,EAAMkb,KAAOS,YAAc,KAAO3b,EAAMkb,IACtElb,GAEXgsB,EAAStjB,UAAU0kB,qBAAuB,SAAUhH,GAChD,OAAOA,EAAS0G,sBAAwBlT,UAAQwM,EAAS0G,mBAAoB,IAAM1G,EAAS1e,QAAQ5D,KAcxGkoB,EAAStjB,UAAU/H,OAAS,SAAUmwB,EAAahwB,EAAeC,GAC9DJ,EAAOoO,KAAKrH,QAASopB,EAAahwB,EAAeC,IAKrDirB,EAAStjB,UAAU0U,QAAU,WACzBrO,KAAK8gB,eACkB,gBAAnB9gB,KAAKpJ,YACLoJ,KAAKpJ,UAAY,KACjBoJ,KAAKigB,YAETJ,eAAa7f,KAAKrH,QAASwnB,aAAW9R,UACtCtL,EAAOpJ,UAAU0U,QAAQ9b,KAAKyN,OAElCid,EAAStjB,UAAUlE,cAAgB,WAC/B,MAAO,YAEXwnB,EAAStjB,UAAU8J,kBAAoB,SAAUC,EAASC,GACtD,IAAK,IAAIhT,EAAK,EAAGC,EAAKC,OAAOC,KAAK4S,GAAU/S,EAAKC,EAAGG,OAAQJ,IAAM,CAE9D,OADWC,EAAGD,IAEV,IAAK,eACE2B,MAAMC,KAAKyN,KAAKrH,QAAQtG,UAAUH,QAAQ,SAAUyG,GAC/CA,EAAQ5B,UAAUmH,SAASyF,EAAQ/M,YACnC+B,EAAQ5B,UAAU8D,OAAO8I,EAAQ/M,WAEjC8M,EAAQ9M,WACR+B,EAAQ5B,UAAUC,IAAI0M,EAAQ9M,gBAOtD,IAAImpB,EAkCJ,OAjCA5f,GACI8C,YAAS,IACVga,EAAStjB,UAAW,uBAAmB,GAC1CwG,GACI8C,WAAS,OACVga,EAAStjB,UAAW,iBAAa,GACpCwG,GACI8C,WAAS,OACVga,EAAStjB,UAAW,aAAS,GAChCwG,GACI8C,cACDga,EAAStjB,UAAW,cAAU,GACjCwG,GACI8C,cACDga,EAAStjB,UAAW,mBAAe,GACtCwG,GACI8W,WACDgG,EAAStjB,UAAW,YAAQ,GAC/BwG,GACI8W,WACDgG,EAAStjB,UAAW,uBAAmB,GAC1CwG,GACI8W,WACDgG,EAAStjB,UAAW,iBAAa,GACpCwG,GACI8W,WACDgG,EAAStjB,UAAW,kBAAc,GACrCwG,GACI8W,WACDgG,EAAStjB,UAAW,YAAQ,GAC/BsjB,EAAW8C,EAAa5f,GACpB+W,yBACD+F,IAEL+E"}