@syncfusion/ej2-lists 20.4.48 → 21.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-lists.min.js","sources":["../../src/common/list-base.js","../../src/sortable/sortable.js","../../src/list-view/list-view.js","../../src/list-view/virtualization.js","../../src/global.js"],"sourcesContent":["/* eslint-disable no-inner-declarations */\nimport { extend, merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n};\n/**\n * Base List Generator\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var ListBase;\n(function (ListBase) {\n /**\n *\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null,\n sortBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n enableHtmlSanitizer: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right',\n itemNavigable: false\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} createListFromJson - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, \n // eslint-disable-next-line\n options, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n }\n else {\n return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel, componentInstance);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - returns the list options that need to provide.\n */\n function createListFromArray(createElement, dataSource, \n // tslint:disable-next-line\n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} subChild - returns the list options that need to provide.\n */\n function createListItemFromArray(createElement, dataSource, \n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options, componentInstance);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} child - returns the list options that need to provide.\n */\n function createListItemFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = (componentInstance &&\n (componentInstance.getModuleName() === 'listview' || componentInstance.getModuleName() === 'multiselect'))\n ? curOpt.fields : extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n var checkboxElement = [];\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n var anchorElement;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n // eslint-disable-next-line no-prototype-builtins\n !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData[fields.id];\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n if (curOpt.itemNavigable && (fieldData[fields.url] || fieldData[fields.urlAttributes])) {\n checkboxElement.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n else {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n }\n if (isSingleLevel === true) {\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, \n // eslint-disable-next-line no-prototype-builtins\n (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (ariaAttributes.groupItemRole == 'presentation') {\n li.removeAttribute('aria-level');\n }\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n && !curOpt.template) {\n var attr = { src: fieldData[fields.imageUrl] };\n merge(attr, fieldData[fields.imageAttributes]);\n var imageElemnt = createElement('img', { className: cssClass.image, attrs: attr });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', imageElemnt);\n }\n else {\n prepend([imageElemnt], li.firstElementChild);\n }\n }\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) &&\n !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n var iconElement = createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', iconElement);\n }\n else {\n prepend([iconElement], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (anchorElement) {\n addClass([li], [cssClass.navigable]);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n checkboxElement = [];\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - Specifies the list options that need to provide.\n */\n function createListFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel, componentInstance);\n return generateUL(createElement, li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n *\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n *\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n *\n * @param {{Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var cusQuery = new Query().group(curFields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[curFields.text] = ds[j].key;\n grpItem[hdr] = true;\n var newtext = curFields.text;\n if (newtext === 'id') {\n newtext = 'text';\n grpItem[newtext] = ds[j].key;\n }\n grpItem._id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n *\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // eslint-disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n *\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n // eslint-disable-next-line\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n // eslint-disable-next-line\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n var attributes_1 = getAllAttributes(li);\n if (attributes_1.id) {\n json[fields.id] = attributes_1.id;\n delete attributes_1.id;\n }\n else {\n json[fields.id] = generateId();\n }\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n *\n * @param {string} template - that need to convert and generate li element.\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function renderContentTemplate(createElement, template, dataSource, \n // eslint-disable-next-line\n fields, options, componentInstance) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n // eslint-disable-next-line\n var compiledString = compileTemplate(template);\n var liCollection = [];\n var value;\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], curFields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], curFields);\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n li.innerText = curItem;\n }\n else {\n li.innerText = fieldData[curFields.text];\n }\n }\n else {\n var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;\n if (isHeader) {\n if (componentInstance && componentInstance.getModuleName() != 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n *\n * @param {string} template - that need to convert and generate li element.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n *\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n // tslint:disable-next-line\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, \n // eslint-disable-next-line\n headerItems, options, componentInstance) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(groupTemplate);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var curOpt = extend({}, defaultListBaseOptions, options);\n var category = curFields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[category] = header.textContent;\n header.innerHTML = '';\n if (componentInstance && componentInstance.getModuleName() !== \"listview\") {\n // eslint-disable-next-line\n var compiledElement = compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, header);\n if (compiledElement) {\n append(compiledElement, header);\n }\n }\n else {\n append(compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), header);\n }\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n // Get SubList\n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(createElement, subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n // eslint-disable-next-line @typescript-eslint/ban-types\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length && !curOpt.itemNavigable) {\n append(innerElements, li);\n }\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable));\n }\n else {\n if (innerElements.length && curOpt.itemNavigable) {\n append(innerElements, li);\n }\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n // eslint-disable-next-line\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n };\n }\n function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n attr.href = fieldData[fields.url] ? fieldData[fields.url] :\n fieldData[fields.urlAttributes].href;\n }\n var anchorTag;\n if (!isFullNavigation) {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n }\n else {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url });\n var anchorWrapper = createElement('div', { className: cssClass.anchorWrap });\n if (innerElements && innerElements.length) {\n append(innerElements, anchorWrapper);\n }\n anchorWrapper.appendChild(document.createTextNode(text));\n append([anchorWrapper], anchorTag);\n }\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n // tslint:disable-next-line\n /* tslint:disable:align */\n function generateLI(createElement, item, fieldData, \n // eslint-disable-next-line\n fields, className, options, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = fieldData[fields.text] || '';\n // tslint:disable-next-line\n uID = (isNullOrUndefined(fieldData['_id'])) ? fieldData[fields.id] : fieldData['_id'];\n // eslint-disable-next-line no-prototype-builtins\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n if (options && options.enableHtmlSanitizer) {\n // eslint-disable-next-line no-self-assign\n text = text;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (!isNullOrUndefined(uID) === true) {\n li.setAttribute('data-uid', uID);\n }\n else {\n li.setAttribute('data-uid', generateId());\n }\n if (grpLI && options && options.groupTemplate) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(options.groupTemplate);\n if (componentInstance && componentInstance.getModuleName() !== \"listview\") {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), li);\n }\n }\n else if (!grpLI && options && options.template) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(options.template);\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n }\n else {\n var element = createElement('span', {\n className: cssClass.text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n });\n if (options && options.enableHtmlSanitizer) {\n element.innerText = text;\n }\n else {\n element.innerHTML = text;\n }\n innerDiv.appendChild(element);\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n *\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in UL element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n *\n * @param {liElement} liElement - Specifies LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n // eslint-disable-next-line @typescript-eslint/ban-types\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n *\n * @param {Object} dataSource - Specifies an JSON or String data.\n *\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[dataField] = value;\n }\n }\n }\n return fieldData;\n}\nfunction compileTemplate(template) {\n if (template) {\n try {\n if (document.querySelector(template)) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Base, Event, getUniqueID, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { closest, Draggable, remove, compareElementParent } from '@syncfusion/ej2-base';\nimport { addClass, isNullOrUndefined, getComponent, isBlazor } from '@syncfusion/ej2-base';\n/**\n * Sortable Module provides support to enable sortable functionality in Dom Elements.\n * ```html\n * <div id=\"sortable\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * <div>Item 4</div>\n * <div>Item 5</div>\n * </div>\n * ```\n * ```typescript\n * let ele: HTMLElement = document.getElementById('sortable');\n * let sortObj: Sortable = new Sortable(ele, {});\n * ```\n */\nvar Sortable = /** @class */ (function (_super) {\n __extends(Sortable, _super);\n /* es-lint enable */\n function Sortable(element, options) {\n var _this = _super.call(this, options, element) || this;\n // eslint-disable-next-line\n _this.getHelper = function (e) {\n // eslint-disable-next-line prefer-const\n var target = _this.getSortableElement(e.sender.target);\n if (!_this.isValidTarget(target, _this)) {\n return false;\n }\n var element;\n if (_this.helper) {\n element = _this.helper({ sender: target, element: e.element });\n }\n else {\n element = target.cloneNode(true);\n element.style.width = target.offsetWidth + \"px\";\n element.style.height = target.offsetHeight + \"px\";\n }\n addClass([element], ['e-sortableclone']);\n document.body.appendChild(element);\n return element;\n };\n // eslint-disable-next-line\n _this.onDrag = function (e) {\n if (!e.target)\n return;\n _this.trigger('drag', { event: e.event, element: _this.element, target: e.target });\n var newInst = _this.getSortableInstance(e.target);\n var target = _this.getSortableElement(e.target, newInst);\n if ((_this.isValidTarget(target, newInst) || e.target.className.indexOf('e-list-group-item') > -1) && (_this.curTarget !== target ||\n !isNullOrUndefined(newInst.placeHolder)) && (newInst.placeHolderElement ? newInst.placeHolderElement !== e.target :\n true)) {\n if (e.target.className.indexOf('e-list-group-item') > -1) {\n target = e.target;\n }\n _this.curTarget = target;\n if (_this.target === target) {\n return;\n }\n var oldIdx = _this.getIndex(newInst.placeHolderElement, newInst);\n var placeHolder = _this.getPlaceHolder(target, newInst);\n var newIdx = void 0;\n if (placeHolder) {\n oldIdx = isNullOrUndefined(oldIdx) ? _this.getIndex(_this.target) : oldIdx;\n newIdx = _this.getIndex(target, newInst, e.event);\n var isPlaceHolderPresent = _this.isPlaceHolderPresent(newInst);\n if (isPlaceHolderPresent && oldIdx === newIdx) {\n return;\n }\n if (isPlaceHolderPresent) {\n remove(newInst.placeHolderElement);\n }\n newInst.placeHolderElement = placeHolder;\n if (e.target.className.indexOf('e-list-group-item') > -1) {\n newInst.element.insertBefore(newInst.placeHolderElement, newInst.element.children[newIdx]);\n }\n else if (newInst.element !== _this.element && newIdx === newInst.element.childElementCount) {\n newInst.element.appendChild(newInst.placeHolderElement);\n }\n else {\n newInst.element.insertBefore(newInst.placeHolderElement, newInst.element.children[newIdx]);\n }\n _this.refreshDisabled(oldIdx, newIdx, newInst);\n }\n else {\n oldIdx = isNullOrUndefined(oldIdx) ? _this.getIndex(_this.target) :\n _this.getIndex(target, newInst) < oldIdx || !oldIdx ? oldIdx : oldIdx - 1;\n newIdx = _this.getIndex(target, newInst);\n var idx = newInst.element !== _this.element ? newIdx : oldIdx < newIdx ? newIdx + 1 : newIdx;\n _this.updateItemClass(newInst);\n newInst.element.insertBefore(_this.target, newInst.element.children[idx]);\n _this.refreshDisabled(oldIdx, newIdx, newInst);\n _this.curTarget = _this.target;\n _this.trigger('drop', {\n droppedElement: _this.target, element: newInst.element, previousIndex: oldIdx, currentIndex: newIdx,\n target: e.target, helper: document.getElementsByClassName('e-sortableclone')[0], event: e.event, scope: _this.scope\n });\n }\n }\n else if (_this.curTarget !== _this.target && _this.scope && _this.curTarget !== target && !isNullOrUndefined(newInst.placeHolder)) {\n remove(_this.getSortableInstance(_this.curTarget).placeHolderElement);\n _this.curTarget = _this.target;\n }\n newInst = _this.getSortableInstance(_this.curTarget);\n if (isNullOrUndefined(target) && e.target !== newInst.placeHolderElement) {\n if (_this.isPlaceHolderPresent(newInst)) {\n _this.removePlaceHolder(newInst);\n }\n }\n else {\n var placeHolders = [].slice.call(document.getElementsByClassName('e-sortable-placeholder'));\n var inst_1;\n placeHolders.forEach(function (placeHolder) {\n inst_1 = _this.getSortableInstance(placeHolder);\n if (inst_1.element && inst_1 !== newInst) {\n _this.removePlaceHolder(inst_1);\n }\n });\n }\n };\n // eslint-disable-next-line\n _this.onDragStart = function (e) {\n _this.target = _this.getSortableElement(e.target);\n var cancelDrag = false;\n _this.target.classList.add('e-grabbed');\n _this.curTarget = _this.target;\n e.helper = document.getElementsByClassName('e-sortableclone')[0];\n var args = { cancel: false, element: _this.element, target: _this.target };\n _this.trigger('beforeDragStart', args, function (observedArgs) {\n if (observedArgs.cancel) {\n cancelDrag = observedArgs.cancel;\n _this.onDragStop(e);\n }\n });\n if (cancelDrag) {\n return;\n }\n if (isBlazor) {\n _this.trigger('dragStart', {\n event: e.event, element: _this.element, target: _this.target,\n bindEvents: e.bindEvents, dragElement: e.dragElement\n });\n }\n else {\n _this.trigger('dragStart', { event: e.event, element: _this.element, target: _this.target });\n }\n };\n // eslint-disable-next-line\n _this.onDragStop = function (e) {\n var dropInst = _this.getSortableInstance(_this.curTarget);\n var prevIdx;\n var curIdx;\n var handled;\n prevIdx = _this.getIndex(_this.target);\n var isPlaceHolderPresent = _this.isPlaceHolderPresent(dropInst);\n if (isPlaceHolderPresent) {\n var curIdx_1 = _this.getIndex(dropInst.placeHolderElement, dropInst);\n var args = {\n previousIndex: prevIdx, currentIndex: curIdx_1, target: e.target, droppedElement: _this.target,\n helper: e.helper, cancel: false, handled: false\n };\n _this.trigger('beforeDrop', args, function (observedArgs) {\n if (!observedArgs.cancel) {\n handled = observedArgs.handled;\n _this.updateItemClass(dropInst);\n if (observedArgs.handled) {\n var ele = _this.target.cloneNode(true);\n _this.target.classList.remove('e-grabbed');\n _this.target = ele;\n }\n dropInst.element.insertBefore(_this.target, dropInst.placeHolderElement);\n var curIdx_2 = _this.getIndex(_this.target, dropInst);\n prevIdx = _this === dropInst && (prevIdx - curIdx_2) > 1 ? prevIdx - 1 : prevIdx;\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx_2,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope, handled: handled\n });\n }\n remove(dropInst.placeHolderElement);\n });\n }\n dropInst = _this.getSortableInstance(e.target);\n // eslint-disable-next-line prefer-const\n curIdx = dropInst.element.childElementCount;\n prevIdx = _this.getIndex(_this.target);\n if (dropInst.element === e.target || (!isPlaceHolderPresent && _this.curTarget === _this.target)) {\n var beforeDropArgs = {\n previousIndex: prevIdx, currentIndex: _this.curTarget === _this.target ? prevIdx : curIdx,\n target: e.target, droppedElement: _this.target, helper: e.helper, cancel: false\n };\n _this.trigger('beforeDrop', beforeDropArgs, function (observedArgs) {\n if (dropInst.element === e.target && !observedArgs.cancel) {\n _this.updateItemClass(dropInst);\n dropInst.element.appendChild(_this.target);\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope\n });\n }\n });\n }\n _this.target.classList.remove('e-grabbed');\n _this.target = null;\n _this.curTarget = null;\n remove(e.helper);\n getComponent(_this.element, Draggable).intDestroy(e.event);\n };\n _this.bind();\n return _this;\n }\n Sortable_1 = Sortable;\n Sortable.prototype.bind = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('sortable');\n }\n if (!this.itemClass) {\n this.itemClass = 'e-sort-item';\n this.dataBind();\n }\n this.initializeDraggable();\n };\n Sortable.prototype.initializeDraggable = function () {\n new Draggable(this.element, {\n helper: this.getHelper,\n dragStart: this.onDragStart,\n drag: this.onDrag,\n dragStop: this.onDragStop,\n dragTarget: \".\" + this.itemClass,\n enableTapHold: true,\n tapHoldThreshold: 200,\n queryPositionInfo: this.queryPositionInfo,\n distance: 5\n });\n };\n Sortable.prototype.getPlaceHolder = function (target, instance) {\n if (instance.placeHolder) {\n var placeHolderElement = instance.placeHolder({ element: instance.element, grabbedElement: this.target, target: target });\n placeHolderElement.classList.add('e-sortable-placeholder');\n return placeHolderElement;\n }\n return null;\n };\n Sortable.prototype.isValidTarget = function (target, instance) {\n return target && compareElementParent(target, instance.element) && target.classList.contains(instance.itemClass) &&\n !target.classList.contains('e-disabled');\n };\n Sortable.prototype.removePlaceHolder = function (instance) {\n remove(instance.placeHolderElement);\n instance.placeHolderElement = null;\n };\n Sortable.prototype.updateItemClass = function (instance) {\n if (this !== instance) {\n this.target.classList.remove(this.itemClass);\n this.target.classList.add(instance.itemClass);\n }\n };\n Sortable.prototype.getSortableInstance = function (element) {\n element = closest(element, \".e-\" + this.getModuleName());\n if (element) {\n var inst = getComponent(element, Sortable_1);\n return inst.scope && this.scope && inst.scope === this.scope ? inst : this;\n }\n else {\n return this;\n }\n };\n Sortable.prototype.refreshDisabled = function (oldIdx, newIdx, instance) {\n if (instance === this) {\n var element = void 0;\n var increased = oldIdx < newIdx;\n var disabledIdx = void 0;\n var start = increased ? oldIdx : newIdx;\n var end = increased ? newIdx : oldIdx;\n while (start <= end) {\n element = this.element.children[start];\n if (element.classList.contains('e-disabled')) {\n disabledIdx = this.getIndex(element);\n this.element.insertBefore(element, this.element.children[increased ? disabledIdx + 2 : disabledIdx - 1]);\n start = increased ? disabledIdx + 2 : disabledIdx + 1;\n }\n else {\n start++;\n }\n }\n }\n };\n Sortable.prototype.getIndex = function (target, instance, e) {\n if (instance === void 0) { instance = this; }\n var idx;\n var placeHolderPresent;\n [].slice.call(instance.element.children).forEach(function (element, index) {\n if (element.classList.contains('e-sortable-placeholder')) {\n placeHolderPresent = true;\n }\n if (element === target) {\n idx = index;\n if (!isNullOrUndefined(e)) {\n if (placeHolderPresent) {\n idx -= 1;\n }\n var offset = target.getBoundingClientRect();\n var clientY = offset.bottom - ((offset.bottom - offset.top) / 2);\n idx = e.clientY <= clientY ? idx : idx + 1;\n }\n return;\n }\n });\n return idx;\n };\n Sortable.prototype.getSortableElement = function (element, instance) {\n if (instance === void 0) { instance = this; }\n return closest(element, \".\" + instance.itemClass);\n };\n Sortable.prototype.queryPositionInfo = function (value) {\n value.left = pageXOffset ? parseFloat(value.left) - pageXOffset + \"px\" : value.left;\n value.top = pageYOffset ? parseFloat(value.top) - pageYOffset + \"px\" : value.top;\n return value;\n };\n Sortable.prototype.isPlaceHolderPresent = function (instance) {\n return instance.placeHolderElement && !!closest(instance.placeHolderElement, \"#\" + instance.element.id);\n };\n /**\n * It is used to sort array of elements from source element to destination element.\n *\n * @param destination - Defines the destination element to which the sortable elements needs to be appended.\n *\n * If it is null, then the Sortable library element will be considered as destination.\n * @param targetIndexes - Specifies the sortable elements indexes which needs to be sorted.\n * @param insertBefore - Specifies the index before which the sortable elements needs to be appended.\n * If it is null, elements will be appended as last child.\n * @function moveTo\n * @returns {void}\n */\n Sortable.prototype.moveTo = function (destination, targetIndexes, insertBefore) {\n moveTo(this.element, destination, targetIndexes, insertBefore);\n };\n /**\n * It is used to destroy the Sortable library.\n */\n Sortable.prototype.destroy = function () {\n if (this.itemClass === 'e-sort-item') {\n this.itemClass = null;\n this.dataBind();\n }\n getComponent(this.element, Draggable).destroy();\n _super.prototype.destroy.call(this);\n };\n Sortable.prototype.getModuleName = function () {\n return 'sortable';\n };\n Sortable.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'itemClass':\n [].slice.call(this.element.children).forEach(function (element) {\n if (element.classList.contains(oldProp.itemClass)) {\n element.classList.remove(oldProp.itemClass);\n }\n if (newProp.itemClass) {\n element.classList.add(newProp.itemClass);\n }\n });\n break;\n }\n }\n };\n var Sortable_1;\n __decorate([\n Property(false)\n ], Sortable.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"itemClass\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"scope\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"helper\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"placeHolder\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDrop\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drop\", void 0);\n Sortable = Sortable_1 = __decorate([\n NotifyPropertyChanges\n ], Sortable);\n return Sortable;\n}(Base));\nexport { Sortable };\n/**\n * It is used to sort array of elements from source element to destination element.\n *\n * @private\n */\nexport function moveTo(from, to, targetIndexes, insertBefore) {\n var targetElements = [];\n if (!to) {\n to = from;\n }\n if (targetIndexes && targetIndexes.length) {\n targetIndexes.forEach(function (index) {\n targetElements.push(from.children[index]);\n });\n }\n else {\n targetElements = [].slice.call(from.children);\n }\n if (isNullOrUndefined(insertBefore)) {\n targetElements.forEach(function (target) {\n to.appendChild(target);\n });\n }\n else {\n var insertElement_1 = to.children[insertBefore];\n targetElements.forEach(function (target) {\n to.insertBefore(target, insertElement_1);\n });\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined, append, detach, extend } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n content: 'e-content',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n backButton: 'e-back-button',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist',\n virtualElementContainer: 'e-list-virtualcontainer'\n};\nvar LISTVIEW_TEMPLATE_PROPERTY = 'Template';\nvar LISTVIEW_GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar LISTVIEW_HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar swipeVelocity = 0.5;\n/**\n * Represents the field settings of the ListView.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n * <div id=\"listview\">\n * <ul>\n * <li>Favorite</li>\n * <li>Documents</li>\n * <li>Downloads</li>\n * </ul>\n * </div>\n * ```\n * ```typescript\n * var listviewObject = new ListView({});\n * listviewObject.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n *\n * @param options\n *\n * @param element\n */\n function ListView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousSelectedItems = [];\n _this.hiddenItems = [];\n _this.enabledItems = [];\n _this.disabledItems = [];\n return _this;\n }\n /**\n * @param newProp\n *\n * @param oldProp\n *\n * @private\n */\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n // eslint-disable-next-line\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false, 'header');\n }\n break;\n case 'query':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false, 'header');\n break;\n case 'enableVirtualization':\n if (!isNullOrUndefined(this.contentContainer)) {\n detach(this.contentContainer);\n }\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'template':\n if (!this.enableVirtualization) {\n this.refresh();\n }\n break;\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.clientHeight ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n // Support Component Functions\n ListView.prototype.header = function (text, showBack, prop) {\n if (this.headerEle === undefined && this.showHeader) {\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText, innerHTML: this.headerTitle });\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' ' + classNames.backButton,\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n // eslint-disable-next-line\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n // eslint-disable-next-line\n var compiledElement = compiledString({}, this, prop, this.LISTVIEW_HEADERTEMPLATE_ID, null, null, this.headerEle);\n if (compiledElement) {\n append(compiledElement, headerTemplateEle);\n }\n append([headerTemplateEle], this.headerEle);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n if (this.enableHtmlSanitizer) {\n text = SanitizeHtmlHelper.sanitize(text);\n }\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: duration,\n timingFunction: this.animation.easing,\n // eslint-disable-next-line\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n if (this.template) {\n try {\n if (document.querySelectorAll(this.template).length) {\n this.setProperties({ template: document.querySelector(this.template).innerHTML.trim() }, true);\n }\n }\n catch (e) {\n compile(this.template);\n }\n }\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'group', itemText: '',\n groupItemRole: 'presentation', wrapperRole: 'presentation'\n },\n // eslint-disable-next-line\n fields: (this.fields.properties),\n sortOrder: this.sortOrder,\n showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this),\n templateID: \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,\n groupTemplateID: \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = this.enablePersistence ? this.selectedId : [];\n this.LISTVIEW_TEMPLATE_ID = \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY;\n this.LISTVIEW_GROUPTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY;\n this.LISTVIEW_HEADERTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_HEADERTEMPLATE_PROPERTY;\n this.aniObj = new Animation(this.animateOptions);\n this.removeElement(this.curUL);\n this.removeElement(this.ulElement);\n this.removeElement(this.headerEle);\n this.removeElement(this.contentContainer);\n this.curUL = this.ulElement = this.liCollection = this.headerEle = this.contentContainer = undefined;\n };\n ListView.prototype.renderCheckbox = function (args) {\n var _this = this;\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData_1;\n // eslint-disable-next-line prefer-const\n checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {\n var index = this.selectedId.findIndex(function (e) { return e == fieldData_1[_this.listBaseOption.fields.id].toString(); });\n if (index != -1) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (fieldData_1[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n checkboxElement.setAttribute('aria-label', 'checkbox');\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n if (this.checkBoxPosition === 'Left') {\n this.virtualCheckBox = args.item.firstElementChild.children[0];\n }\n else {\n this.virtualCheckBox = args.item.firstElementChild.lastElementChild;\n }\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * Checks the specific list item by passing the unchecked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n if (checked === true) {\n liElement.classList.add(classNames.selected);\n }\n else {\n liElement.classList.remove(classNames.selected);\n }\n if (checked === true) {\n checkboxIcon.classList.add(classNames.checked);\n }\n else {\n checkboxIcon.classList.remove(classNames.checked);\n }\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n this.updateSelectedId();\n }\n };\n /**\n * Uncheck the specific list item by passing the checked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.uncheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * Checks all the unchecked items in the ListView.\n */\n ListView.prototype.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * Uncheck all the checked items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n this.updateSelectedId();\n }\n };\n ListView.prototype.setCheckbox = function () {\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n args.item = element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.curData = this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n this.renderCheckbox(args);\n if (args.item.classList.contains(classNames.selected)) {\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n /**\n * Refresh the height of the list item only on enabling the virtualization property.\n */\n ListView.prototype.refreshItemHeight = function () {\n if (this.virtualizationModule) {\n this.virtualizationModule.refreshItemHeight();\n }\n };\n ListView.prototype.clickHandler = function (e) {\n 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) {\n this.selectedLI.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n this.touchModule.destroy();\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n var textAreaFocus = li.querySelector('textarea') || li.querySelector('input');\n li.classList.add(classNames.focused);\n if (!isNullOrUndefined(e)) {\n if (e.target === textAreaFocus) {\n textAreaFocus.classList.add('e-focused');\n }\n }\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (!isNullOrUndefined(data)\n && typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li && li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem =\n // eslint-disable-next-line\n {\n item: li, text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, { isInteracted: true, event: e, cancel: false, index: this.curUL && Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n // eslint-disable-next-line\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n // eslint-disable-next-line\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n var _this = this;\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.selectedLI = li;\n _this.renderSubList(li);\n }\n });\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n // eslint-disable-next-line\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = \n // eslint-disable-next-line\n getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n // eslint-disable-next-line\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n // eslint-disable-next-line\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n // eslint-disable-next-line\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[column]) &&\n this.fields[column] !==\n ListBase.defaultMappedFields[column]\n && columns.indexOf(this.fields[column]) === -1) {\n columns.push(this.fields[column]);\n }\n }\n query.select(columns);\n // eslint-disable-next-line\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n // eslint-disable-next-line\n var fieldValue = (isNullOrUndefined(this.fields.sortBy)) ? this.fields.text : this.fields.sortBy;\n var query = ListBase.addSorting(this.sortOrder, fieldValue);\n if (dataSource && this.fields.groupBy) {\n if (this.sortOrder !== 'None') {\n this.curViewDS = ListBase.groupDataSource(ListBase.getDataSource(dataSource, query), this.listBaseOption.fields, this.sortOrder);\n }\n else {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.fields, this.sortOrder);\n }\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, query);\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.renderRemoteLists = function (e, listViewComponent) {\n if (this.isDestroyed) {\n return;\n }\n this.localData = e.result;\n listViewComponent.removeElement(listViewComponent.contentContainer);\n this.renderList();\n this.trigger('actionComplete', e);\n };\n ListView.prototype.triggerActionFailure = function (e) {\n if (this.isDestroyed) {\n return;\n }\n this.trigger('actionFailure', e);\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n // eslint-disable-next-line\n var listViewComponent = this;\n if (this.dataSource instanceof DataManager) {\n if (this.dataSource.ready) {\n this.dataSource.ready.then(function (e) {\n /* eslint-disable */\n _this.isOffline = _this.dataSource.dataSource.offline;\n if (_this.dataSource instanceof DataManager && _this.isOffline) {\n _this.renderRemoteLists(e, listViewComponent);\n }\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n else {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n _this.renderRemoteLists(e, listViewComponent);\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.removeElement(this.headerEle);\n this.removeElement(this.ulElement);\n this.removeElement(this.contentContainer);\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n if (Object.keys(window).indexOf('ejsInterop') === -1) {\n this.element.innerHTML = '';\n }\n this.headerEle = this.ulElement = this.liCollection = undefined;\n this.header();\n this.setLocalData();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.setAttributes = function (liElements) {\n for (var i = 0; i < liElements.length; i++) {\n var element = liElements[i];\n if (element.classList.contains('e-list-item')) {\n element.setAttribute('id', this.element.id + '_' + element.getAttribute('data-uid'));\n element.setAttribute('tabindex', '-1');\n }\n }\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.createElement, this.curViewDS, this.listBaseOption, null, this);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(this.liCollection);\n };\n ListView.prototype.exceptionEvent = function (e) {\n this.trigger('actionFailure', e);\n };\n ListView.prototype.UpdateCurrentUL = function () {\n this.ulElement = this.curUL = this.element.querySelector('.' + classNames.parentItem);\n if (this.curUL) {\n // eslint-disable-next-line\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n };\n ListView.prototype.renderSubList = function (li) {\n this.liElement = li;\n var uID = li.getAttribute('data-uid');\n if (li.classList.contains(classNames.hasChild) && uID) {\n var ul = closest(li.parentNode, '.' + classNames.parentItem);\n var ele = this.element.querySelector('[pid=\\'' + uID + '\\']');\n this.curDSLevel.push(uID);\n this.setViewDataSource(this.getSubDS());\n if (!ele) {\n var data = this.curViewDS;\n ele = ListBase.createListFromJson(this.createElement, data, this.listBaseOption, this.curDSLevel.length, null, this);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n var lists = ele.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(lists);\n ele.setAttribute('pID', uID);\n ele.style.display = 'none';\n this.renderIntoDom(ele);\n }\n this.switchView(ul, ele);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.selectedItems) {\n var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);\n // eslint-disable-next-line\n this.header((fieldData[this.listBaseOption.fields.text]), true, 'header');\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization) {\n if (Object.keys(this.dataSource).length) {\n if ((this.template || this.groupTemplate) && !this.virtualizationModule.isNgTemplate()) {\n if (this.isReact) {\n if (typeof this.template == \"string\") {\n this.listBaseOption.template = null;\n }\n if (typeof this.groupTemplate == \"string\") {\n this.listBaseOption.groupTemplate = null;\n }\n }\n else {\n this.listBaseOption.template = null;\n this.listBaseOption.groupTemplate = null;\n }\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = this.createElement('div', { className: classNames.content });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n // eslint-disable-next-line\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * Initializes the ListView component rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { role: 'list', tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n this.renderComplete();\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n this.unWireEvents();\n var classAr = [classNames.root, classNames.disable, 'e-rtl',\n 'e-has-header', 'e-lib'].concat(this.cssClass.split(' ').filter(function (css) { return css; }));\n removeClass([this.element], classAr);\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Switches back from the navigated sub list item.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n // eslint-disable-next-line\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.remove(classNames.disable);\n li.classList.add(classNames.focused);\n if (!(this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked))) {\n li.classList.remove(classNames.selected);\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false), 'header');\n };\n /**\n * Selects the list item from the ListView by passing the elements or field object.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (item) {\n if (this.enableVirtualization) {\n this.virtualizationModule.selectItem(item);\n }\n else if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(item));\n }\n else {\n if (isNullOrUndefined(item) === true) {\n this.removeSelect();\n }\n else {\n this.setSelectLI(this.getLiFromObjOrElement(item));\n }\n }\n };\n ListView.prototype.getLiFromObjOrElement = function (obj) {\n var li;\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (!isNullOrUndefined(obj)) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n if (obj instanceof Element) {\n var uid = obj.getAttribute('data-uid').toString();\n for (var i = 0; i < this.liCollection.length; i++) {\n if (this.liCollection[i].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[i];\n break;\n }\n }\n }\n else {\n Array.prototype.some.call(this.curUL.querySelectorAll('.' + classNames.listItem), function (item) {\n if (item.innerText.trim() === obj.toString()) {\n li = item;\n return true;\n }\n else {\n return false;\n }\n });\n }\n }\n else {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n li = this.element.querySelector('[data-uid=\"'\n + fieldData[this.fields.id] + '\"]');\n if (!this.enableVirtualization && isNullOrUndefined(li)) {\n var curLi = this.element.querySelectorAll('.' + classNames.listItem);\n for (var i = 0; i < curLi.length; i++) {\n // eslint-disable-next-line\n if (curLi[i].innerText.trim() === fieldData[this.fields.text]) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\n };\n /**\n * Selects multiple list items from the ListView.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of\n * elements or array of fields Object with ID and Text fields.\n */\n ListView.prototype.selectMultipleItems = function (item) {\n if (!isNullOrUndefined(item)) {\n for (var i = 0; i < item.length; i++) {\n if (!isNullOrUndefined(item[i])) {\n this.selectItem(item[i]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n ListView.prototype.updateSelectedId = function () {\n this.selectedId = [];\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n for (var i = 0; i < liCollection.length; i++) {\n var tempData = this.getItemData(liCollection[i]);\n if (tempData[this.listBaseOption.fields.id]) {\n this.selectedId.push(tempData[this.listBaseOption.fields.id]);\n }\n }\n };\n /**\n * Gets the details of the currently selected item from the list items.\n *\n */\n ListView.prototype.getSelectedItems = function () {\n // eslint-disable-next-line\n var finalValue;\n var isCompleted = false;\n this.selectedId = [];\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (this.enableVirtualization && !isCompleted) {\n finalValue = this.virtualizationModule.getSelectedItems();\n isCompleted = true;\n }\n else if (this.showCheckBox && !isCompleted) {\n // eslint-disable-next-line\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[i]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n if (fieldData) {\n // eslint-disable-next-line\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n // eslint-disable-next-line\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n else {\n liTextCollection.push(undefined);\n this.selectedId.push(undefined);\n }\n }\n }\n if ((typeof dataSource[0] === 'string'\n || typeof dataSource[0] === 'number')\n && !isCompleted) {\n finalValue = { item: liCollection, data: dataSource, text: liTextCollection };\n isCompleted = true;\n }\n if (this.isNestedList && !isCompleted) {\n finalValue = { item: liCollection, data: dataParent, text: liTextCollection };\n isCompleted = true;\n }\n else if (!isCompleted) {\n finalValue = { item: liCollection, data: liDataCollection, text: liTextCollection };\n isCompleted = true;\n }\n }\n else if (!isCompleted) {\n var liElement = this.element.getElementsByClassName(classNames.selected)[0];\n var fieldData = getFieldValues(this.getItemData(liElement), this.listBaseOption.fields);\n if ((typeof dataSource[0] === 'string'\n || typeof dataSource[0] === 'number')\n && !isCompleted) {\n finalValue = (!isNullOrUndefined(liElement)) ? {\n item: liElement, data: dataSource,\n text: liElement.innerText.trim()\n } : undefined;\n isCompleted = true;\n }\n else if (!isCompleted) {\n if (isNullOrUndefined(fieldData) || isNullOrUndefined(liElement)) {\n finalValue = undefined;\n isCompleted = true;\n }\n else {\n // eslint-disable-next-line\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n finalValue = {\n text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement)\n };\n isCompleted = true;\n }\n }\n }\n return finalValue;\n };\n /**\n * Finds out an item details from the current list.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (item) {\n return this.getItemData(item);\n };\n /**\n * Enables the disabled list items by passing the Id and text fields.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.enableItem = function (item) {\n this.setItemState(item, true);\n if (this.enableVirtualization) {\n this.virtualizationModule.enableItem(item);\n }\n };\n /**\n * Disables the list items by passing the Id and text fields.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.disableItem = function (item) {\n this.setItemState(item, false);\n if (this.enableVirtualization) {\n this.virtualizationModule.disableItem(item);\n }\n };\n //A function that used to set state of the list item like enable, disable.\n ListView.prototype.setItemState = function (item, isEnable) {\n var resultJSON = this.getItemData(item);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (isEnable) {\n if (li) {\n li.classList.remove(classNames.disable);\n }\n delete resultJSON[this.fields.enabled];\n }\n else if (!isEnable) {\n if (li) {\n li.classList.add(classNames.disable);\n }\n // eslint-disable-next-line\n resultJSON[this.fields.enabled] = false;\n }\n }\n };\n /**\n * Shows the hide list item from the ListView.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.showItem = function (item) {\n this.showHideItem(item, false, '');\n if (this.enableVirtualization) {\n this.virtualizationModule.showItem(item);\n }\n };\n /**\n * Hides an list item from the ListView.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.hideItem = function (item) {\n this.showHideItem(item, true, 'none');\n if (this.enableVirtualization) {\n this.virtualizationModule.hideItem(item);\n }\n };\n ListView.prototype.showHideItem = function (obj, isHide, display) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (li) {\n li.style.display = display;\n }\n if (isHide) {\n // eslint-disable-next-line\n resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * Adds the new list item(s) to the current ListView.\n * To add a new list item(s) in the ListView, we need to pass the `data` as an array of items that need\n * to be added and `fields` as the target item to which we need to add the given item(s) as its children.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {{Object}[]} data - JSON Array Data that need to add.\n *\n * @param {Fields} fields - Target item to add the given data as its children (can be null).\n *\n */\n ListView.prototype.addItem = function (data, fields) {\n if (fields === void 0) { fields = undefined; }\n var dataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n this.addItemInternally(data, fields, dataSource);\n };\n ListView.prototype.addItemInternally = function (data, fields, dataSource) {\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields, dataSource);\n }\n else {\n var ds = this.findItemFromDS(dataSource, fields);\n var child = void 0;\n if (ds) {\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n }\n // check for whether target is nested level or top level in list\n if (ds instanceof Array) {\n for (var i = 0; i < data.length; i++) {\n dataSource.push(data[i]);\n this.setViewDataSource(dataSource);\n // since it is top level target, get the content container's first child\n // as it is always the top level UL\n var targetUL = this.contentContainer\n ? this.contentContainer.children[0]\n : null;\n // check for whether the list was previously empty or not, if it is\n // proceed to call initial render\n if (this.contentContainer && targetUL) {\n this.addItemIntoDom(data[i], targetUL, this.curViewDS);\n }\n else {\n this.reRender();\n }\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n // proceed as target item is in nested level, only if it is a valid target ds\n if (ds) {\n ds[this.fields.child] = child;\n this.addItemInNestedList(ds, data);\n }\n }\n }\n }\n };\n ListView.prototype.addItemInNestedList = function (targetItemData, itemQueue) {\n // eslint-disable-next-line\n var targetItemId = targetItemData[this.fields.id];\n var targetChildDS = targetItemData[this.fields.child];\n var isAlreadyRenderedUL = this.element.querySelector('[pid=\\'' + targetItemId + '\\']');\n var targetLi = this.element.querySelector('[data-uid=\\'' + targetItemId + '\\']');\n var targetUL = isAlreadyRenderedUL\n ? isAlreadyRenderedUL\n : targetLi\n ? closest(targetLi, 'ul')\n : null;\n var targetDS = isAlreadyRenderedUL ? targetChildDS : [targetItemData];\n var isTargetEmptyChild = targetLi ? !targetLi.classList.contains(classNames.hasChild) : false;\n var isRefreshTemplateNeeded = false;\n // if li element is already rendered, that element needs to be refreshed so that\n // it becomes child viewable due to new child items are added now\n if (isTargetEmptyChild) {\n var targetRefreshedElement = ListBase.createListItemFromJson(this.createElement, targetDS, this.listBaseOption, null, null, this);\n this.setAttributes(targetRefreshedElement);\n targetUL.insertBefore(targetRefreshedElement[0], targetLi);\n detach(targetLi);\n isRefreshTemplateNeeded = true;\n }\n // if it is already rendered element, we need to create and append new elements\n if (isAlreadyRenderedUL && itemQueue) {\n for (var i = 0; i < itemQueue.length; i++) {\n targetDS.push(itemQueue[i]);\n this.addItemIntoDom(itemQueue[i], targetUL, targetDS);\n }\n isRefreshTemplateNeeded = true;\n }\n };\n ListView.prototype.addItemIntoDom = function (currentItem, targetUL, curViewDS) {\n var index = curViewDS.indexOf(currentItem);\n this.addListItem(currentItem, index, targetUL, curViewDS);\n var curItemDS = curViewDS[index - 1];\n if (curItemDS && curItemDS.isHeader && curItemDS.items.length === 1) {\n this.addListItem(curItemDS, (index - 1), targetUL, curViewDS);\n }\n };\n ListView.prototype.addListItem = function (dataSource, index, ulElement, curViewDS) {\n var target = this.getLiFromObjOrElement(curViewDS[index + 1]) ||\n this.getLiFromObjOrElement(curViewDS[index + 2]) || null;\n var li = ListBase.createListItemFromJson(this.createElement, [dataSource], this.listBaseOption, null, null, this);\n this.setAttributes(li);\n // eslint-disable-next-line\n if (this.template && this.isReact) {\n this.renderReactTemplates();\n }\n if (this.fields.groupBy && curViewDS[index + 1] && curViewDS[index + 1].isHeader) {\n var targetEle = this.getLiFromObjOrElement(curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n ulElement.insertBefore(li[0], target);\n };\n /**\n * Removes the list item from the data source based on a passed\n * element like fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (item) {\n var listDataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n if (this.enableVirtualization) {\n this.virtualizationModule.removeItem(item);\n }\n else {\n this.removeItemFromList(item, listDataSource);\n }\n };\n ListView.prototype.removeItemFromList = function (obj, listDataSource) {\n var _this = this;\n var curViewDS = this.curViewDS;\n var fields = obj instanceof Element ? this.getElementUID(obj) : obj;\n var dataSource;\n // eslint-disable-next-line prefer-const\n dataSource = this.findItemFromDS(listDataSource, fields, true);\n if (dataSource) {\n var data_1;\n // eslint-disable-next-line prefer-const\n data_1 = this.findItemFromDS(dataSource, fields);\n var index = curViewDS.indexOf(data_1);\n var li = this.getLiFromObjOrElement(obj);\n var groupLi = void 0;\n this.validateNestedView(li);\n if (this.fields.groupBy && this.curViewDS[index - 1] &&\n curViewDS[index - 1].isHeader &&\n curViewDS[index - 1].items.length === 1) {\n if (li && li.previousElementSibling.classList.contains(classNames.groupListItem) &&\n (isNullOrUndefined(li.nextElementSibling) || (li.nextElementSibling &&\n li.nextElementSibling.classList.contains(classNames.groupListItem)))) {\n groupLi = li.previousElementSibling;\n }\n }\n if (li) {\n detach(li);\n }\n if (groupLi) {\n detach(groupLi);\n }\n // eslint-disable-next-line\n var foundData = (dataSource.length - 1) <= 0\n ? this.findParent(this.localData, this.fields.id, \n // eslint-disable-next-line\n function (value) { return value === data_1[_this.fields.id]; }, null) : null;\n var dsIndex = dataSource.indexOf(data_1);\n dataSource.splice(dsIndex, 1);\n this.setViewDataSource(listDataSource);\n if (foundData\n && foundData.parent\n && Array.isArray(foundData.parent[this.fields.child])\n && foundData.parent[this.fields.child].length <= 0) {\n var parentLi = this.getLiFromObjOrElement(foundData.parent);\n if (parentLi) {\n var li_1 = ListBase.createListItemFromJson(this.createElement, [foundData.parent], this.listBaseOption, null, null, this);\n this.setAttributes(li_1);\n parentLi.parentElement.insertBefore(li_1[0], parentLi);\n parentLi.parentElement.removeChild(parentLi);\n }\n }\n if (dataSource.length <= 0) {\n this.back();\n }\n this.liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n }\n };\n // validate before removing an element whether the current view is inside target element's child view\n ListView.prototype.validateNestedView = function (li) {\n var liID = li ? li.getAttribute('data-uid').toString().toLowerCase() : null;\n if (liID && this.curDSLevel && this.curDSLevel.length > 0) {\n while (this.curDSLevel.some(function (id) { return id.toString().toLowerCase() === liID; })) {\n this.back();\n }\n }\n };\n /**\n * Removes multiple items from the ListView by passing the array of elements or array of field objects.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.removeMultipleItems = function (item) {\n if (item.length) {\n for (var i = 0; i < item.length; i++) {\n this.removeItem(item[i]);\n }\n }\n };\n // eslint-disable-next-line\n ListView.prototype.findParent = function (dataSource, id, callback, parent) {\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource.hasOwnProperty(id) && callback(dataSource[id]) === true) {\n return extend({}, dataSource);\n }\n for (var i = 0; i < Object.keys(dataSource).length; i++) {\n if (dataSource[Object.keys(dataSource)[i]]\n && typeof dataSource[Object.keys(dataSource)[i]] === 'object') {\n // eslint-disable-next-line\n var result = this.findParent(dataSource[Object.keys(dataSource)[i]], id, callback, dataSource);\n if (result != null) {\n if (!result.parent) {\n result.parent = parent;\n }\n return result;\n }\n }\n }\n return null;\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\n };\n ListView.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualization' });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition', 'selectedId']);\n };\n __decorate([\n Property('')\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n ListView = __decorate([\n NotifyPropertyChanges\n ], ListView);\n return ListView;\n}(Component));\nexport { ListView };\n","import { classNames } from './list-view';\nimport { EventHandler, append, isNullOrUndefined, detach, removeClass, addClass, compile, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '../common/list-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nvar listElementCount = 1.5;\nvar windowElementCount = 3;\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.elementDifference = 0;\n this.listViewInstance = instance;\n }\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.isNgTemplate = function () {\n return !isNullOrUndefined(this.listViewInstance.templateRef) && typeof this.listViewInstance.templateRef !== 'string';\n };\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.uiVirtualization = function () {\n this.wireScrollEvent(false);\n var curViewDS = this.listViewInstance.curViewDS;\n var firstDs = curViewDS.slice(0, 1);\n this.listViewInstance.ulElement = this.listViewInstance.curUL = ListBase.createList(\n // eslint-disable-next-line\n this.listViewInstance.createElement, firstDs, this.listViewInstance.listBaseOption, null, this.listViewInstance);\n this.listViewInstance.contentContainer = this.listViewInstance.createElement('div', { className: classNames.content });\n this.listViewInstance.element.appendChild(this.listViewInstance.contentContainer);\n this.listViewInstance.contentContainer.appendChild(this.listViewInstance.ulElement);\n this.listItemHeight = this.listViewInstance.ulElement.firstElementChild.getBoundingClientRect().height;\n this.expectedDomItemCount = this.ValidateItemCount(10000);\n this.domItemCount = this.ValidateItemCount(Object.keys(this.listViewInstance.curViewDS).length);\n this.uiFirstIndex = 0;\n this.uiLastIndex = this.domItemCount - 1;\n var otherDs = curViewDS.slice(1, this.domItemCount);\n var listItems = ListBase.createListItemFromJson(\n // eslint-disable-next-line\n this.listViewInstance.createElement, otherDs, this.listViewInstance.listBaseOption, null, null, this.listViewInstance);\n append(listItems, this.listViewInstance.ulElement);\n this.listViewInstance.liCollection = this.listViewInstance.curUL.querySelectorAll('li');\n this.topElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.topElement, this.listViewInstance.ulElement.firstElementChild);\n this.bottomElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.bottomElement, null);\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n this.listDiff = 0;\n this.uiIndicesInitialization();\n };\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n if (this.listViewInstance.isWindow) {\n this.onVirtualScroll = this.onVirtualUiScroll.bind(this);\n window.addEventListener('scroll', this.onVirtualScroll);\n }\n else {\n EventHandler.add(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll, this);\n }\n }\n else {\n if (this.listViewInstance.isWindow === true) {\n window.removeEventListener('scroll', this.onVirtualScroll);\n window.removeEventListener('scroll', this.updateUl);\n }\n else {\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll);\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.updateUlContainer);\n }\n }\n };\n Virtualization.prototype.updateUlContainer = function (e) {\n var listDiff;\n var virtualElementContainer = this.listViewInstance.ulElement.querySelector('.' + classNames.virtualElementContainer);\n if (isNullOrUndefined(this.listViewInstance.liElementHeight)) {\n this.listViewInstance.updateLiElementHeight();\n }\n if (this.listViewInstance.isWindow) {\n // eslint-disable-next-line\n listDiff = Math.round(e.target.documentElement.scrollTop / this.listViewInstance.liElementHeight) - 2;\n }\n else {\n // eslint-disable-next-line\n listDiff = Math.round(e.target.scrollTop / this.listViewInstance.liElementHeight) - 2;\n }\n if (((listDiff - 1) * this.listViewInstance.liElementHeight) < 0) {\n virtualElementContainer.style.top = '0px';\n }\n else {\n virtualElementContainer.style.top = (listDiff) * this.listViewInstance.liElementHeight + 'px';\n }\n };\n Virtualization.prototype.ValidateItemCount = function (dataSourceLength) {\n var height = parseFloat(formatUnit(this.listViewInstance.height));\n var itemCount;\n if (this.listViewInstance.isWindow) {\n itemCount = Math.round((window.innerHeight / this.listItemHeight) * windowElementCount);\n }\n else {\n if (typeof this.listViewInstance.height === 'string' && this.listViewInstance.height.indexOf('%') !== -1) {\n // eslint-disable-next-line max-len\n itemCount = Math.round((this.listViewInstance.element.getBoundingClientRect().height / this.listItemHeight) * listElementCount);\n }\n else {\n itemCount = Math.round((height / this.listItemHeight) * listElementCount);\n }\n }\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n Virtualization.prototype.uiIndicesInitialization = function () {\n this.uiIndices = { 'activeIndices': [], 'disabledItemIndices': [], 'hiddenItemIndices': [] };\n var data = this.listViewInstance.curViewDS;\n for (var i = 0; i < data.length; i++) {\n if (this.listViewInstance.showCheckBox && data[i][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(i);\n }\n // eslint-disable-next-line\n if (!isNullOrUndefined(data[i][this.listViewInstance.fields.enabled]) &&\n !data[i][this.listViewInstance.fields.enabled]) {\n // eslint-disable-next-line\n (this.uiIndices.disabledItemIndices.push(i));\n }\n }\n if (this.isNgTemplate()) {\n var items = this.listViewInstance.element.querySelectorAll('.' + classNames.listItem);\n for (var index = 0; index < items.length; index++) {\n items[index].context = this.listViewInstance.viewContainerRef.get(index).context;\n }\n }\n };\n Virtualization.prototype.refreshItemHeight = function () {\n if (this.listViewInstance.curViewDS.length) {\n var curViewDS = this.listViewInstance.curViewDS;\n this.listItemHeight = this.topElement.nextSibling.getBoundingClientRect().height;\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.bottomElementHeight = this.totalHeight;\n this.bottomElement.style.height = this.totalHeight + 'px';\n }\n };\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n return this.listViewInstance.isWindow ? (((pageYOffset - startingHeight) <= 0) ? 0 :\n (pageYOffset - startingHeight)) : ((this.listViewInstance.element.scrollTop - startingHeight) <= 0) ? 0 :\n (this.listViewInstance.element.scrollTop - startingHeight);\n };\n Virtualization.prototype.onVirtualUiScroll = function (e) {\n var _a;\n var startingHeight;\n if (this.listViewInstance.isWindow) {\n startingHeight = this.listViewInstance.ulElement.getBoundingClientRect().top -\n document.documentElement.getBoundingClientRect().top;\n }\n else {\n startingHeight = this.listViewInstance.headerEle ? this.listViewInstance.headerEle.getBoundingClientRect().height : 0;\n }\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n if (scroll > this.scrollPosition) {\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, true);\n }\n else {\n this.onNormalScroll(listDiff, true);\n }\n }\n else {\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, false);\n }\n else {\n this.onNormalScroll(listDiff, false);\n }\n }\n }\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n if (typeof this.listViewInstance.onUIScrolled === 'function') {\n this.listViewInstance.onUIScrolled();\n }\n this.scrollPosition = scroll;\n };\n Virtualization.prototype.onLongScroll = function (listDiff, isScrollingDown) {\n var index = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n var elements = this.listViewInstance.ulElement.querySelectorAll('li');\n for (var i = 0; i < elements.length; i++) {\n this.updateUI(elements[i], index);\n index++;\n }\n this.uiLastIndex = isScrollingDown ? (this.uiLastIndex + listDiff) : (this.uiLastIndex - listDiff);\n this.uiFirstIndex = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n };\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n if (isScrollingDown) {\n for (var i = 0; i < listDiff; i++) {\n var index = ++this.uiLastIndex;\n this.updateUI(this.topElement.nextElementSibling, index, this.bottomElement);\n this.uiFirstIndex++;\n }\n }\n else {\n for (var i = 0; i < listDiff; i++) {\n var index = --this.uiFirstIndex;\n var target = this.topElement.nextSibling;\n this.updateUI(this.bottomElement.previousElementSibling, index, target);\n this.uiLastIndex--;\n }\n }\n };\n Virtualization.prototype.updateUiContent = function (element, index) {\n // eslint-disable-next-line\n var curViewDs = this.listViewInstance.curViewDS;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n element.dataset.uid = ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n this.listViewInstance.curViewDS[index].toString();\n }\n else {\n // eslint-disable-next-line\n element.dataset.uid = (curViewDs[index][this.listViewInstance.fields.id]) ?\n // eslint-disable-next-line\n (curViewDs[index][this.listViewInstance.fields.id]) : ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n // eslint-disable-next-line\n (curViewDs[index][this.listViewInstance.fields.text]);\n }\n if (this.listViewInstance.showIcon) {\n if (element.querySelector('.' + classNames.listIcon)) {\n detach(element.querySelector('.' + classNames.listIcon));\n }\n if (this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]) {\n var textContent = element.querySelector('.' + classNames.textContent);\n var target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' +\n this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]\n });\n textContent.insertBefore(target, element.querySelector('.' + classNames.listItemText));\n }\n }\n if (this.listViewInstance.showCheckBox && this.listViewInstance.fields.groupBy) {\n if (!this.checkListWrapper) {\n this.checkListWrapper = this.listViewInstance.curUL.querySelector('.' + classNames.checkboxWrapper).cloneNode(true);\n }\n var textContent = element.querySelector('.' + classNames.textContent);\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.remove(classNames.checklist);\n textContent.classList.remove(classNames.checkbox);\n detach(element.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n else {\n if (!element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.add(classNames.checklist);\n textContent.classList.add(classNames.checkbox);\n textContent.insertBefore(this.checkListWrapper.cloneNode(true), element.querySelector('.' + classNames.listItemText));\n }\n }\n }\n };\n Virtualization.prototype.changeElementAttributes = function (element, index) {\n element.classList.remove(classNames.disable);\n if (this.uiIndices.disabledItemIndices.length && this.uiIndices.disabledItemIndices.indexOf(index) !== -1) {\n element.classList.add(classNames.disable);\n }\n element.style.display = '';\n if (this.uiIndices.hiddenItemIndices.length && this.uiIndices.hiddenItemIndices.indexOf(index) !== -1) {\n element.style.display = 'none';\n }\n if (this.listViewInstance.showCheckBox) {\n var checklistElement = element.querySelector('.' + classNames.checkboxWrapper);\n element.classList.remove(classNames.selected);\n element.classList.remove(classNames.focused);\n if (checklistElement) {\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n }\n if (this.uiIndices.activeIndices.length && this.uiIndices.activeIndices.indexOf(index) !== -1 &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n checklistElement.firstElementChild.classList.add(classNames.checked);\n checklistElement.setAttribute('aria-checked', 'true');\n if (this.activeIndex === index) {\n element.classList.add(classNames.focused);\n }\n }\n }\n else {\n element.classList.remove(classNames.selected);\n element.removeAttribute('aria-selected');\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex === index &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n element.setAttribute('aria-selected', 'true');\n }\n }\n if (this.listViewInstance.fields.groupBy) {\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.classList.contains(classNames.listItem)) {\n element.classList.remove(classNames.listItem);\n element.setAttribute('role', 'group');\n element.classList.add(classNames.groupListItem);\n }\n }\n else {\n if (element.classList.contains(classNames.groupListItem)) {\n element.classList.remove(classNames.groupListItem);\n element.setAttribute('role', 'listitem');\n element.classList.add(classNames.listItem);\n }\n }\n }\n };\n Virtualization.prototype.findDSAndIndexFromId = function (ds, fields) {\n var _this = this;\n var resultJSON = {};\n fields = this.listViewInstance.getElementUID(fields);\n if (!isNullOrUndefined(fields)) {\n ds.some(function (data, index) {\n if ((fields[_this.listViewInstance.fields.id] &&\n // eslint-disable-next-line\n fields[_this.listViewInstance.fields.id]\n // eslint-disable-next-line\n === (data[_this.listViewInstance.fields.id] && data[_this.listViewInstance.fields.id]) || fields === data)) {\n resultJSON.index = index;\n resultJSON.data = data;\n return true;\n }\n else {\n return false;\n }\n });\n }\n return resultJSON;\n };\n Virtualization.prototype.getSelectedItems = function () {\n var _this = this;\n if (!isNullOrUndefined(this.activeIndex) || (this.listViewInstance.showCheckBox && this.uiIndices.activeIndices.length)) {\n var dataCollection = [];\n var textCollection = [];\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n var curViewDS_1 = this.listViewInstance.curViewDS;\n if (this.listViewInstance.showCheckBox) {\n var indices = this.uiIndices.activeIndices;\n for (var i = 0; i < indices.length; i++) {\n dataCollection.push(curViewDS_1[indices[i]]);\n }\n return {\n text: dataCollection,\n // eslint-disable-next-line\n data: dataCollection,\n index: this.uiIndices.activeIndices.map(function (index) {\n return _this.listViewInstance.dataSource.indexOf(curViewDS_1[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_1[this.activeIndex],\n data: curViewDS_1[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_1[this.activeIndex])\n };\n }\n }\n else {\n var curViewDS_2 = this.listViewInstance.curViewDS;\n var text = this.listViewInstance.fields.text;\n if (this.listViewInstance.showCheckBox) {\n var indexArray = this.uiIndices.activeIndices;\n for (var i = 0; i < indexArray.length; i++) {\n textCollection.push(curViewDS_2[indexArray[i]][text]);\n // eslint-disable-next-line\n dataCollection.push(curViewDS_2[indexArray[i]]);\n }\n // eslint-disable-next-line\n var dataSource_1 = this.listViewInstance.dataSource instanceof DataManager\n ? curViewDS_2 : this.listViewInstance.dataSource;\n return {\n text: textCollection,\n // eslint-disable-next-line\n data: dataCollection,\n index: this.uiIndices.activeIndices.map(function (index) {\n return dataSource_1.indexOf(curViewDS_2[index]);\n })\n };\n }\n else {\n // eslint-disable-next-line\n var dataSource = this.listViewInstance.dataSource instanceof DataManager\n ? curViewDS_2 : this.listViewInstance.dataSource;\n return {\n text: curViewDS_2[this.activeIndex][this.listViewInstance.fields.text],\n // eslint-disable-next-line\n data: curViewDS_2[this.activeIndex],\n index: dataSource.indexOf(curViewDS_2[this.activeIndex])\n };\n }\n }\n }\n else {\n return undefined;\n }\n };\n Virtualization.prototype.selectItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n var isSelected = this.activeIndex === resutJSON.index;\n var isChecked = void 0;\n this.activeIndex = resutJSON.index;\n if (this.listViewInstance.showCheckBox) {\n if (this.uiIndices.activeIndices.indexOf(resutJSON.index) === -1) {\n isChecked = true;\n this.uiIndices.activeIndices.push(resutJSON.index);\n }\n else {\n isChecked = false;\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(resutJSON.index), 1);\n }\n if (this.listViewInstance.curUL.querySelector('.' + classNames.focused)) {\n this.listViewInstance.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n }\n if (this.listViewInstance.getLiFromObjOrElement(obj)) {\n if (this.listViewInstance.showCheckBox) {\n this.listViewInstance.setCheckboxLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n else {\n this.listViewInstance.setSelectLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n }\n else {\n // eslint-disable-next-line\n var eventArgs = void 0;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n eventArgs = {\n text: this.listViewInstance.curViewDS[this.activeIndex],\n data: this.listViewInstance.curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n else {\n var curViewDS = this.listViewInstance.curViewDS;\n eventArgs = {\n text: curViewDS[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n if (this.listViewInstance.showCheckBox) {\n eventArgs.isChecked = isChecked;\n this.listViewInstance.trigger('select', eventArgs);\n }\n else if (!isSelected) {\n this.listViewInstance.removeSelect();\n this.listViewInstance.trigger('select', eventArgs);\n }\n }\n }\n else if (isNullOrUndefined(obj) && !this.listViewInstance.showCheckBox) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n };\n Virtualization.prototype.enableItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.disableItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.disabledItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.disabledItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.showItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.hideItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.hiddenItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.removeItem = function (obj) {\n var dataSource;\n var curViewDS = this.listViewInstance.curViewDS;\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(curViewDS, obj);\n // eslint-disable-next-line\n if (Object.keys(resutJSON).length) {\n dataSource = resutJSON.data;\n if (curViewDS[resutJSON.index - 1] &&\n curViewDS[resutJSON.index - 1].isHeader &&\n (curViewDS[resutJSON.index - 1])\n .items.length === 1) {\n this.removeUiItem(resutJSON.index - 1);\n this.removeUiItem(resutJSON.index - 1);\n }\n else {\n this.removeUiItem(resutJSON.index);\n }\n }\n var listDataSource = this.listViewInstance.dataSource instanceof DataManager\n ? this.listViewInstance.localData : this.listViewInstance.dataSource;\n var index = listDataSource.indexOf(dataSource);\n if (index !== -1) {\n listDataSource.splice(index, 1);\n this.listViewInstance.setViewDataSource(listDataSource);\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n };\n // eslint-disable-next-line\n Virtualization.prototype.setCheckboxLI = function (li, e) {\n var index = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n if (li.classList.contains(classNames.selected)) {\n if (this.uiIndices.activeIndices.indexOf(index) === -1) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n else {\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n }\n };\n // eslint-disable-next-line\n Virtualization.prototype.setSelectLI = function (li, e) {\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n };\n Virtualization.prototype.checkedItem = function (checked) {\n if (checked) {\n this.uiIndices.activeIndices = [];\n this.activeIndex = undefined;\n var data = this.listViewInstance.curViewDS;\n for (var index = 0; index < data.length; index++) {\n if (!data[index].isHeader) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n }\n else {\n this.activeIndex = undefined;\n this.uiIndices.activeIndices = [];\n }\n };\n Virtualization.prototype.addUiItem = function (index) {\n // virtually new add list item based on the scollbar position\n // if the scroll bar is at the top, just pretend the new item has been added since no UI\n // change is required for the item that has been added at last but when scroll bar is at the bottom\n // just detach top and inject into bottom to mimic new item is added\n var curViewDs = this.listViewInstance.curViewDS;\n this.changeUiIndices(index, true);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex++;\n }\n if (this.listViewInstance.showCheckBox &&\n curViewDs[index][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(index);\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n }\n if (parseFloat(this.bottomElement.style.height)) {\n var liItem = this.listViewInstance.curUL.lastElementChild.previousSibling;\n var target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n if (target) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n this.updateUI(liItem, index, target);\n }\n }\n else {\n var liItem = this.listViewInstance.curUL.firstElementChild.nextSibling;\n var target = void 0;\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n }\n this.topElement.style.height = parseFloat(this.topElement.style.height) + this.listItemHeight + 'px';\n this.uiFirstIndex++;\n this.uiLastIndex++;\n if (target) {\n this.updateUI(liItem, index, target);\n if (this.listViewInstance.isWindow === true) {\n window.scrollTo(0, (pageYOffset + this.listItemHeight));\n }\n else {\n this.listViewInstance.element.scrollTop += this.listItemHeight;\n }\n }\n }\n this.totalHeight += this.listItemHeight;\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.removeUiItem = function (index) {\n this.totalHeight -= this.listItemHeight;\n var curViewDS = this.listViewInstance.curViewDS[index];\n var liItem = this.listViewInstance.getLiFromObjOrElement(curViewDS);\n this.listViewInstance.curViewDS.splice(index, 1);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex--;\n }\n if (liItem) {\n if (this.domItemCount > Object.keys(this.listViewInstance.curViewDS).length) {\n detach(liItem);\n this.domItemCount--;\n this.uiLastIndex--;\n this.totalHeight = 0;\n }\n else {\n if (liItem.classList.contains(classNames.disable)) {\n liItem.classList.remove(classNames.disable);\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(index), 1);\n }\n if (liItem.style.display === 'none') {\n liItem.style.display = '';\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(index), 1);\n }\n if (this.listViewInstance.showCheckBox && liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n var checklistElement = liItem.querySelector('.' + classNames.checkboxWrapper);\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n if (liItem.classList.contains(classNames.focused)) {\n liItem.classList.remove(classNames.focused);\n this.activeIndex = undefined;\n }\n }\n else if (liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else if (parseFloat(this.bottomElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else {\n this.topElement.style.height = parseFloat(this.topElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, (this.uiFirstIndex - 1), this.topElement.nextSibling);\n this.uiLastIndex--;\n this.uiFirstIndex--;\n }\n }\n }\n this.changeUiIndices(index, false);\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.changeUiIndices = function (index, increment) {\n var keys = Object.keys(this.uiIndices);\n for (var ind = 0; ind < keys.length; ind++) {\n this.uiIndices[keys[ind]] = this.uiIndices[keys[ind]].map(function (i) {\n if (i >= index) {\n return increment ? ++i : --i;\n }\n else {\n return i;\n }\n });\n }\n };\n Virtualization.prototype.addItem = function (data, fields, dataSource) {\n for (var i = 0; i < data.length; i++) {\n var currentItem = data[i];\n // push the given data to main data array\n dataSource.push(currentItem);\n // recalculate all the group data or other datasource related things\n this.listViewInstance.setViewDataSource(dataSource);\n // render list items for first time due to no datasource present earlier\n if (!this.domItemCount) {\n // fresh rendering for first time\n if ((this.listViewInstance.template || this.listViewInstance.groupTemplate) && !this.isNgTemplate()) {\n this.listViewInstance.listBaseOption.template = null;\n this.listViewInstance.listBaseOption.groupTemplate = null;\n this.listViewInstance.listBaseOption.itemCreated = this.createUIItem.bind(this);\n }\n this.uiVirtualization();\n // when expected expected DOM count doesn't meet the condition we need to create and inject new item into DOM\n }\n else if (this.domItemCount < this.expectedDomItemCount) {\n var ds = this.listViewInstance.findItemFromDS(dataSource, fields);\n if (ds instanceof Array) {\n if (this.listViewInstance.ulElement) {\n var index = this.listViewInstance.curViewDS.indexOf(currentItem);\n // inject new list item into DOM\n this.createAndInjectNewItem(currentItem, index);\n // check for group header item\n var curViewDS = this.listViewInstance.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n // target group item index in datasource\n --index;\n // inject new group header into DOM for previously created list item\n this.createAndInjectNewItem(curViewDS, index);\n }\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n }\n }\n else {\n // eslint-disable-next-line\n var index = this.listViewInstance.curViewDS.indexOf(currentItem);\n // virtually new add list item based on the scollbar position\n this.addUiItem(index);\n // check for group header item needs to be added\n var curViewDS = this.listViewInstance.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n this.addUiItem(index - 1);\n }\n }\n }\n };\n Virtualization.prototype.createAndInjectNewItem = function (itemData, index) {\n // generate li item for given datasource\n var target;\n var li = ListBase.createListItemFromJson(this.listViewInstance.createElement, \n // eslint-disable-next-line\n [itemData], this.listViewInstance.listBaseOption, null, null, this.listViewInstance);\n // check for target element whether to insert before last item or group item\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n // target group header's first child item to append its header\n target = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index + 2]);\n }\n if (this.listViewInstance.fields.groupBy && this.listViewInstance.curViewDS[index + 1] && this.listViewInstance.curViewDS[index + 1].isHeader) {\n var targetEle = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n // insert before the target element\n this.listViewInstance.ulElement.insertBefore(li[0], target);\n // increment internal DOM count, last index count for new element\n this.domItemCount++;\n if (this.bottomElementHeight <= 0) {\n this.uiLastIndex++;\n }\n // recalculate the current item height, to avoid jumpy scroller\n this.refreshItemHeight();\n };\n Virtualization.prototype.createUIItem = function (args) {\n var virtualTemplate = this.listViewInstance.template;\n var template = this.listViewInstance.createElement('div');\n var commonTemplate = '<div class=\"e-text-content\" role=\"presentation\"> ' +\n '<span class=\"e-list-text\"> ${' + this.listViewInstance.fields.text + '} </span></div>';\n if (this.listViewInstance.isReact) {\n commonTemplate = null;\n }\n if (this.listViewInstance.showCheckBox) {\n // eslint-disable-next-line\n this.listViewInstance.renderCheckbox(args);\n if ((!isNullOrUndefined(this.listViewInstance.virtualCheckBox)) &&\n (!isNullOrUndefined(this.listViewInstance.virtualCheckBox.outerHTML))) {\n var div = document.createElement('div');\n div.innerHTML = this.listViewInstance.template || commonTemplate;\n if (div.children && div.children[0]) {\n div.children[0].classList.add('e-checkbox');\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div.children[0].classList.add('e-checkbox-left');\n }\n else {\n div.children[0].classList.add('e-checkbox-right');\n }\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div.children[0].insertBefore(this.listViewInstance.virtualCheckBox, div.childNodes[0].children[0]);\n }\n else {\n div.children[0].appendChild(this.listViewInstance.virtualCheckBox);\n }\n this.listViewInstance.template = div.innerHTML;\n }\n }\n template.innerHTML = this.listViewInstance.template;\n this.listViewInstance.template = virtualTemplate;\n }\n else {\n template.innerHTML = this.listViewInstance.template || commonTemplate;\n }\n // eslint-disable-next-line\n var templateElements = template.getElementsByTagName('*');\n var groupTemplate = this.listViewInstance.createElement('div');\n if (this.listViewInstance.fields.groupBy) {\n groupTemplate.innerHTML = this.listViewInstance.groupTemplate || commonTemplate;\n }\n // eslint-disable-next-line\n var groupTemplateElements = groupTemplate.getElementsByTagName('*');\n if (args.curData.isHeader) {\n this.headerData = args.curData;\n }\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\n if (!this.listViewInstance.isReact || (typeof this.listViewInstance.template == \"string\" && !args.item.classList.contains(\"e-list-group-item\")) ||\n (typeof this.listViewInstance.groupTemplate == \"string\" && args.item.classList.contains(\"e-list-group-item\"))) {\n args.item.innerHTML = '';\n }\n args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };\n for (var i = 0; i < templateElements.length; i++) {\n this.compileTemplate(templateElements[i], args.item, false);\n }\n for (var i = 0; i < groupTemplateElements.length; i++) {\n this.compileTemplate(groupTemplateElements[i], args.item, true);\n }\n args.item.context.template = args.curData.isHeader ? template.firstElementChild :\n groupTemplate.firstElementChild;\n args.item.context.type = args.curData.isHeader ? 'flatList' : 'groupList';\n var element = args.curData.isHeader ? groupTemplate : template;\n if (element.firstElementChild) {\n args.item.insertBefore(element.firstElementChild, null);\n }\n };\n Virtualization.prototype.compileTemplate = function (element, item, isHeader) {\n this.textProperty(element, item, isHeader);\n this.classProperty(element, item, isHeader);\n this.attributeProperty(element, item, isHeader);\n };\n Virtualization.prototype.onChange = function (newData, listElement) {\n listElement.context.data = newData;\n // eslint-disable-next-line max-len\n var groupTemplateNodes = listElement.context.nodes.groupTemplateNodes;\n // eslint-disable-next-line max-len\n var flatTemplateNodes = listElement.context.nodes.flatTemplateNodes;\n // eslint-disable-next-line\n if (!isNullOrUndefined(newData.isHeader) && newData.isHeader && listElement.context.type === 'groupList') {\n // eslint-disable-next-line\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'flatList';\n for (var i = 0; i < groupTemplateNodes.length; i++) {\n // eslint-disable-next-line\n groupTemplateNodes[i].onChange(newData);\n }\n }\n else if (!newData.isHeader && listElement.context.type === 'flatList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'groupList';\n for (var i = 0; i < flatTemplateNodes.length; i++) {\n // eslint-disable-next-line\n flatTemplateNodes[i].onChange(newData);\n }\n }\n else if (!newData.isHeader) {\n for (var i = 0; i < flatTemplateNodes.length; i++) {\n // eslint-disable-next-line\n flatTemplateNodes[i].onChange(newData);\n }\n }\n else {\n for (var i = 0; i < groupTemplateNodes.length; i++) {\n // eslint-disable-next-line\n groupTemplateNodes[i].onChange(newData);\n }\n }\n };\n // eslint-disable-next-line\n Virtualization.prototype.updateContextData = function (listElement, node, isHeader) {\n if (isHeader) {\n listElement.context.nodes.groupTemplateNodes.push(node);\n }\n else {\n listElement.context.nodes.flatTemplateNodes.push(node);\n }\n };\n Virtualization.prototype.classProperty = function (element, listElement, isHeader) {\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.className);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n if (resultantOutput && resultantOutput.length) {\n var _loop_1 = function (i) {\n var classNameMatch = resultantOutput[i];\n // eslint-disable-next-line\n var classFunction;\n if (classNameMatch[1].indexOf('?') !== -1 && classNameMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + classNameMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + 'data.' + classNameMatch[1]);\n }\n // eslint-disable-next-line\n var subNode = {};\n if (isHeader) {\n subNode.bindedvalue = classFunction(this_1.headerData);\n }\n else {\n subNode.bindedvalue = classFunction(this_1.templateData);\n }\n subNode.onChange = function (value) {\n if (subNode.bindedvalue) {\n removeClass([element], subNode.bindedvalue.split(' ').filter(function (css) { return css; }));\n }\n var newCss = classFunction(value);\n if (newCss) {\n addClass([element], (newCss).split(' ').filter(function (css) { return css; }));\n }\n subNode.bindedvalue = newCss;\n };\n var className = classNameMatch[0].split(' ');\n for (var i_1 = 0; i_1 < className.length; i_1++) {\n element.classList.remove(className[i_1]);\n }\n if (subNode.bindedvalue) {\n addClass([element], subNode.bindedvalue.split(' ').filter(function (css) { return css; }));\n }\n this_1.updateContextData(listElement, subNode, isHeader);\n };\n var this_1 = this;\n for (var i = 0; i < resultantOutput.length; i++) {\n _loop_1(i);\n }\n }\n };\n Virtualization.prototype.attributeProperty = function (element, listElement, isHeader) {\n var attributeNames = [];\n for (var i = 0; i < element.attributes.length; i++) {\n attributeNames.push(element.attributes[i].nodeName);\n }\n if (attributeNames.indexOf('class') !== -1) {\n attributeNames.splice(attributeNames.indexOf('class'), 1);\n }\n var _loop_2 = function (i) {\n var attributeName = attributeNames[i];\n var attrNameMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(attributeName) || [];\n var attrValueMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(element.getAttribute(attributeName))\n || [];\n // eslint-disable-next-line\n var attributeNameFunction;\n // eslint-disable-next-line\n var attributeValueFunction;\n if (attrNameMatch.length || attrValueMatch.length) {\n if (attrNameMatch[1]) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeNameFunction = new Function('data', 'return ' + 'data.' + attrNameMatch[1]);\n }\n if (attrValueMatch[1]) {\n if (attrValueMatch[1].indexOf('?') !== -1 && attrValueMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + attrValueMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + 'data.' + attrValueMatch[1]);\n }\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n var subNode_1 = {};\n if (isHeader) {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(this_2.headerData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(this_2.headerData)];\n }\n else {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(this_2.templateData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(this_2.templateData)];\n }\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ?\n attributeName : subNode_1.bindedvalue[0];\n subNode_1.onChange = function (value) {\n var bindedvalue = subNode_1.bindedvalue[1] === undefined ?\n element.getAttribute(subNode_1.attrName) : attributeValueFunction(value);\n element.removeAttribute(subNode_1.attrName);\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ? subNode_1.attrName : attributeNameFunction(value);\n element.setAttribute(subNode_1.attrName, bindedvalue);\n subNode_1.bindedvalue = [subNode_1.bindedvalue[0] === undefined ? undefined : attributeNameFunction(value),\n subNode_1.bindedvalue[1] === undefined ? undefined : attributeValueFunction(value)];\n };\n var attributeValue = subNode_1.bindedvalue[1] === undefined ? element.getAttribute(attributeName) :\n subNode_1.bindedvalue[1];\n element.removeAttribute(attributeName);\n element.setAttribute(subNode_1.attrName, attributeValue);\n this_2.updateContextData(listElement, subNode_1, isHeader);\n }\n };\n var this_2 = this;\n for (var i = 0; i < attributeNames.length; i++) {\n _loop_2(i);\n }\n };\n Virtualization.prototype.textProperty = function (element, listElement, isHeader) {\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.innerText);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n var isChildHasTextContent = Array.prototype.some.call(element.children, function (element) {\n if (new RegExp('\\\\${([^}]*)}', 'g').exec(element.innerText)) {\n return true;\n }\n else {\n return false;\n }\n });\n if (resultantOutput && resultantOutput.length && !isChildHasTextContent) {\n var _loop_3 = function (i) {\n var textPropertyMatch = resultantOutput[i];\n // eslint-disable-next-line\n var subNode = {};\n // eslint-disable-next-line\n var textFunction;\n if (textPropertyMatch[1].indexOf('?') !== -1 && textPropertyMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + textPropertyMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + 'data.' + textPropertyMatch[1]);\n }\n if (isHeader) {\n subNode.bindedvalue = textFunction(this_3.headerData);\n }\n else {\n subNode.bindedvalue = textFunction(this_3.templateData);\n }\n subNode.onChange = function (value) {\n element.innerText = element.innerText.replace(subNode.bindedvalue, textFunction(value));\n subNode.bindedvalue = textFunction(value);\n };\n element.innerText = element.innerText.replace(textPropertyMatch[0], subNode.bindedvalue);\n this_3.updateContextData(listElement, subNode, isHeader);\n };\n var this_3 = this;\n for (var i = 0; i < resultantOutput.length; i++) {\n _loop_3(i);\n }\n }\n };\n Virtualization.prototype.reRenderUiVirtualization = function () {\n this.wireScrollEvent(true);\n if (this.listViewInstance.contentContainer) {\n detach(this.listViewInstance.contentContainer);\n }\n this.listViewInstance.preRender();\n // resetting the dom count to 0, to avoid edge case of dataSource suddenly becoming zero\n // and then manually adding item using addItem API\n this.domItemCount = 0;\n this.listViewInstance.header();\n this.listViewInstance.setLocalData();\n };\n Virtualization.prototype.updateUI = function (element, index, targetElement) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var onChange = this.isNgTemplate() ? this.onNgChange : this.onChange;\n if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {\n var curViewDS = this.listViewInstance.curViewDS[index];\n // eslint-disable-next-line\n element.dataset.uid = (curViewDS[this.listViewInstance.fields.id]) ?\n // eslint-disable-next-line\n (curViewDS[this.listViewInstance.fields.id]) : ListBase.generateId();\n onChange(curViewDS, element, this);\n }\n else {\n this.updateUiContent(element, index);\n }\n this.changeElementAttributes(element, index);\n if (targetElement) {\n this.listViewInstance.ulElement.insertBefore(element, targetElement);\n }\n };\n Virtualization.prototype.onNgChange = function (newData, listElement, virtualThis) {\n // compile given target element with template for new data\n // eslint-disable-next-line\n var templateCompiler = compile(virtualThis.listViewInstance.template);\n var resultElement = templateCompiler(newData);\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n listElement.appendChild(resultElement[0]);\n };\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n Virtualization.prototype.destroy = function () {\n this.wireScrollEvent(true);\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import * as index from './index';\nindex.ListView.Inject(index.Virtualization);\nexport * from './index';\n"],"names":["getFieldValues","dataItem","fields","fieldData","isNullOrUndefined","isHeader","_i","_a","Object","keys","length","dataField","value","undefined","getValue","compileTemplate","template","document","querySelector","compile","innerHTML","trim","e","moveTo","from","to","targetIndexes","insertBefore","targetElements","forEach","index","push","children","slice","call","target","appendChild","insertElement_1","exports","li","ul","group","icon","text","check","checked","selected","expanded","textContent","hasChild","level","url","collapsible","disabled","image","iconWrapper","anchorWrap","navigable","ListBase","createList","createElement","dataSource","options","isSingleLevel","componentInstance","curOpt","extend","defaultListBaseOptions","ariaAttributes","defaultAriaAttributes","type","typeofData","typeof","createListFromArray","createListFromJson","generateUL","createListItemFromArray","subChild","cssClass","getModuleClass","moduleName","id","generateId","i","itemCreating","curData","generateSingleLevelLI","generateLI","itemCreated","item","createListItemFromJson","getModuleName","defaultMappedFields","checkboxElement","anchorElement","child","hasOwnProperty","curItem","innerEle","showCheckBox","itemNavigable","urlAttributes","className","attrs","showIcon","iconCss","itemClass","prepend","firstElementChild","classList","add","setAttribute","toString","groupItemRole","removeAttribute","tooltip","htmlAttributes","enabled","isVisible","style","display","imageUrl","attr","src","merge","imageAttributes","imageElemnt","insertAdjacentElement","iconElement","processSubChild","addClass","listClass","getSiblingLI","elementArray","element","isPrevious","siblingLI","liIndex","liCollections","Array","prototype","indexOf","contains","groupDataSource","sortOrder","curFields","cusQuery","Query","groupBy","ds","getDataSource","addSorting","j","itemObj","items","grpItem","key","newtext","_id","k","sortBy","query","queries","fn","splice","DataManager","executeLocal","createJsonFromElement","curEle","cloneNode","jsonAr","childs","querySelectorAll","remove","anchor","json","childNodes","i_1","Number","hasChildNodes","attributes_1","getAllAttributes","data","match","elementAttributes","class","split","attributes","nodeName","nodeValue","renderContentTemplate","ulElement","role","compiledString","liCollection","innerText","currentID","groupTemplateID","templateID","compiledElement","isStringTemplate","append","renderGroupTemplate","groupTemplate","headerItems","category","headerItems_1","header","headerData","Math","floor","random","substring","subDS","hasChildren","subLi","expandCollapse","expandIconPosition","expandIconClass","innerElements","grpLI","elementID","itemRole","href","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","enableHtmlSanitizer","innerDiv","wrapperRole","itemText","liElement","listRole","generateIcon","isChecked","headerTemplate","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","this","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","effectsConfig","None","SlideLeft","SlideDown","Zoom","Fade","effectsRTLConfig","classNames","root","hover","focused","parentItem","listItem","listIcon","listItemText","groupListItem","view","headerText","headerTemplateText","disable","content","backIcon","backButton","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","virtualElementContainer","FieldSettings","_super","apply","Property","ChildProperty","ListView","_this","previousSelectedItems","hiddenItems","enabledItems","disabledItems","onPropertyChanged","newProp","oldProp","setHTMLAttribute","setCSSClass","setEnable","setSize","setEnableRTL","listBaseOption","properties","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","detach","refresh","setCheckbox","curViewDS","getSubDS","resetCurrentList","oldCSSClass","filter","css","removeClass","height","formatUnit","width","isWindow","clientHeight","enableElement","enable","enableRtl","isEnabled","showBack","prop","headerEle","showHeader","setProperties","SanitizeHtmlHelper","sanitize","innerHeaderEle","textEle","outerHTML","hedBackButton","headerTemplateEle","LISTVIEW_HEADERTEMPLATE_ID","isReact","renderReactTemplates","parentElement","switchView","fromView","toView","reverse","fPos_1","position","overflow_1","overflow","anim","duration","animation","effect","aniObj","animate","name","timingFunction","easing","end","model","trigger","curUL","preRender","renderCheckbox","bind","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","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","targetElement","closestElement","back","closest","parentNode","removeFocus","setCheckboxLI","eventArgs","selectEventData","removeHover","removeSelect","setSelectLI","removeChild","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","preventDefault","focusedElement","onArrowKeyDown","prev","arrowKeyHandler","elementTop","getBoundingClientRect","top","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","window","scroll","pageYOffset","scrollTop","innerHeight","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","enterKeyHandler","spaceKeyHandler","keyActionHandler","keyCode","swipeActionHandler","swipeDirection","velocity","originalEvent","focusout","selectedLI","wireEvents","EventHandler","touchModule","Touch","swipe","unWireEvents","destroy","focusedLI_1","hoverLI","selectedLI_1","ele","textAreaFocus","renderSubList","selectedItem","isInteracted","event","cancel","observedArgs","lastLi","levelKeys","localData","levelKeys_1","field","curDSJSON","findItemFromDS","curDS","getElementUID","parent","resultJSON","some","getQuery","columns","column","select","tableName","setViewDataSource","fieldValue","isInAnimation","renderRemoteLists","listViewComponent","isDestroyed","result","renderList","triggerActionFailure","setLocalData","ready","then","isOffline","offline","catch","executeQuery","clearTemplate","renderIntoDom","setAttributes","liElements","getAttribute","exceptionEvent","UpdateCurrentUL","lists","isNgTemplate","createUIItem","uiVirtualization","obj","Element","render","tabindex","rippleFn","rippleEffect","selector","renderComplete","classAr","concat","pID","pop","toUL","fromUL","selectItem","uid","selectMultipleItems","getParentId","parentId","getElementsByClassName","tempData","getSelectedItems","finalValue","isCompleted","liTextCollection","liDataCollection","dataParent","findItem","enableItem","setItemState","disableItem","isEnable","showItem","showHideItem","hideItem","isHide","addItem","addItemInternally","targetUL","addItemIntoDom","addItemInNestedList","targetItemData","itemQueue","targetItemId","targetChildDS","isAlreadyRenderedUL","targetLi","targetDS","targetRefreshedElement","currentItem","addListItem","curItemDS","targetEle","nextElementSibling","removeItem","listDataSource","removeItemFromList","data_1","groupLi","validateNestedView","previousElementSibling","foundData","findParent","dsIndex","isArray","parentLi","li_1","liID","toLowerCase","removeMultipleItems","callback","requiredModules","modules","member","getPersistData","addOnPersist","Complex","Event","NotifyPropertyChanges","Component","Virtualization","instance","elementDifference","listViewInstance","templateRef","wireScrollEvent","firstDs","expectedDomItemCount","ValidateItemCount","domItemCount","uiLastIndex","otherDs","listItems","topElement","bottomElement","totalHeight","topElementHeight","bottomElementHeight","listDiff","uiIndicesInitialization","removeEventListener","onVirtualScroll","updateUl","onVirtualUiScroll","updateUlContainer","addEventListener","liElementHeight","updateLiElementHeight","round","documentElement","dataSourceLength","itemCount","parseFloat","uiIndices","activeIndices","disabledItemIndices","hiddenItemIndices","context","viewContainerRef","get","nextSibling","getscrollerHeight","startingHeight","scrollPosition","onLongScroll","onNormalScroll","isScrollingDown","elements","updateUI","updateUiContent","curViewDs","dataset","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection","textCollection","curViewDS_1","indices","map","curViewDS_2","indexArray","dataSource_1","resutJSON","isSelected","removeUiItem","addUiItem","changeUiIndices","liItem","previousSibling","scrollTo","increment","ind","createAndInjectNewItem","itemData","virtualTemplate","commonTemplate","div","templateElements","getElementsByTagName","groupTemplateElements","templateData","nodes","flatTemplateNodes","groupTemplateNodes","textProperty","classProperty","attributeProperty","onChange","newData","listElement","updateContextData","node","regexMatch","regex","RegExp","resultantOutput","exec","this_1","classFunction","classNameMatch","Function","replace","subNode","bindedvalue","newCss","attributeNames","this_2","attributeNameFunction","attributeValueFunction","attributeName","attrNameMatch","attrValueMatch","subNode_1","attrName","attributeValue","isChildHasTextContent","this_3","textFunction","textPropertyMatch","onNgChange","virtualThis","resultElement","lastChild","Sortable","getHelper","getSortableElement","sender","isValidTarget","helper","offsetWidth","offsetHeight","body","onDrag","newInst","getSortableInstance","curTarget","placeHolder","placeHolderElement","scope","oldIdx","getIndex","getPlaceHolder","newIdx","isPlaceHolderPresent","childElementCount","refreshDisabled","idx","updateItemClass","droppedElement","previousIndex","currentIndex","removePlaceHolder","inst_1","onDragStart","cancelDrag","onDragStop","isBlazor","bindEvents","dragElement","prevIdx","curIdx","handled","dropInst","curIdx_1","curIdx_2","scopeName","beforeDropArgs","getComponent","Draggable","intDestroy","Sortable_1","getUniqueID","dataBind","initializeDraggable","dragStart","drag","dragStop","dragTarget","enableTapHold","tapHoldThreshold","queryPositionInfo","distance","grabbedElement","compareElementParent","inst","increased","disabledIdx","start","placeHolderPresent","offset","clientY","bottom","left","pageXOffset","destination","Base","index.ListView","Inject","index.Virtualization"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-lists.min.js","sources":["../../src/common/list-base.js","../../src/sortable/sortable.js","../../src/list-view/list-view.js","../../src/list-view/virtualization.js","../../src/global.js"],"sourcesContent":["/* eslint-disable no-inner-declarations */\nimport { extend, merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n};\n/**\n * Base List Generator\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var ListBase;\n(function (ListBase) {\n /**\n *\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null,\n sortBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n enableHtmlSanitizer: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right',\n itemNavigable: false\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} createListFromJson - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, \n // eslint-disable-next-line\n options, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n }\n else {\n return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel, componentInstance);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - returns the list options that need to provide.\n */\n function createListFromArray(createElement, dataSource, \n // tslint:disable-next-line\n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} subChild - returns the list options that need to provide.\n */\n function createListItemFromArray(createElement, dataSource, \n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options, componentInstance);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} child - returns the list options that need to provide.\n */\n function createListItemFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = (componentInstance &&\n (componentInstance.getModuleName() === 'listview' || componentInstance.getModuleName() === 'multiselect'))\n ? curOpt.fields : extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n var checkboxElement = [];\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n var anchorElement;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n // eslint-disable-next-line no-prototype-builtins\n !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData[fields.id];\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n if (curOpt.itemNavigable && (fieldData[fields.url] || fieldData[fields.urlAttributes])) {\n checkboxElement.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n else {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n }\n if (isSingleLevel === true) {\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, \n // eslint-disable-next-line no-prototype-builtins\n (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (ariaAttributes.groupItemRole == 'presentation') {\n li.removeAttribute('aria-level');\n }\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n && !curOpt.template) {\n var attr = { src: fieldData[fields.imageUrl] };\n merge(attr, fieldData[fields.imageAttributes]);\n var imageElemnt = createElement('img', { className: cssClass.image, attrs: attr });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', imageElemnt);\n }\n else {\n prepend([imageElemnt], li.firstElementChild);\n }\n }\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) &&\n !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n var iconElement = createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', iconElement);\n }\n else {\n prepend([iconElement], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (anchorElement) {\n addClass([li], [cssClass.navigable]);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n checkboxElement = [];\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - Specifies the list options that need to provide.\n */\n function createListFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel, componentInstance);\n return generateUL(createElement, li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n *\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n *\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n *\n * @param {{Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var cusQuery = new Query().group(curFields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[curFields.text] = ds[j].key;\n grpItem[\"\" + hdr] = true;\n var newtext = curFields.text;\n if (newtext === 'id') {\n newtext = 'text';\n grpItem[\"\" + newtext] = ds[j].key;\n }\n grpItem._id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n *\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // eslint-disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n *\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n // eslint-disable-next-line\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n // eslint-disable-next-line\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n var attributes_1 = getAllAttributes(li);\n if (attributes_1.id) {\n json[fields.id] = attributes_1.id;\n delete attributes_1.id;\n }\n else {\n json[fields.id] = generateId();\n }\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n *\n * @param {string} template - that need to convert and generate li element.\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function renderContentTemplate(createElement, template, dataSource, \n // eslint-disable-next-line\n fields, options, componentInstance) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n // eslint-disable-next-line\n var compiledString = compileTemplate(template);\n var liCollection = [];\n var value;\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], curFields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], curFields);\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n li.innerText = curItem;\n }\n else {\n li.innerText = fieldData[curFields.text];\n }\n }\n else {\n var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;\n if (isHeader) {\n if (componentInstance && componentInstance.getModuleName() != 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n *\n * @param {string} template - that need to convert and generate li element.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n *\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n // tslint:disable-next-line\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, \n // eslint-disable-next-line\n headerItems, options, componentInstance) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(groupTemplate);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var curOpt = extend({}, defaultListBaseOptions, options);\n var category = curFields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[\"\" + category] = header.textContent;\n header.innerHTML = '';\n if (componentInstance && componentInstance.getModuleName() !== \"listview\") {\n // eslint-disable-next-line\n var compiledElement = compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, header);\n if (compiledElement) {\n append(compiledElement, header);\n }\n }\n else {\n append(compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), header);\n }\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n // Get SubList\n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(createElement, subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n // eslint-disable-next-line @typescript-eslint/ban-types\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length && !curOpt.itemNavigable) {\n append(innerElements, li);\n }\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable));\n }\n else {\n if (innerElements.length && curOpt.itemNavigable) {\n append(innerElements, li);\n }\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n // eslint-disable-next-line\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n };\n }\n function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n attr.href = fieldData[fields.url] ? fieldData[fields.url] :\n fieldData[fields.urlAttributes].href;\n }\n var anchorTag;\n if (!isFullNavigation) {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n }\n else {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url });\n var anchorWrapper = createElement('div', { className: cssClass.anchorWrap });\n if (innerElements && innerElements.length) {\n append(innerElements, anchorWrapper);\n }\n anchorWrapper.appendChild(document.createTextNode(text));\n append([anchorWrapper], anchorTag);\n }\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n // tslint:disable-next-line\n /* tslint:disable:align */\n function generateLI(createElement, item, fieldData, \n // eslint-disable-next-line\n fields, className, options, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = fieldData[fields.text] || '';\n // tslint:disable-next-line\n uID = (isNullOrUndefined(fieldData['_id'])) ? fieldData[fields.id] : fieldData['_id'];\n // eslint-disable-next-line no-prototype-builtins\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n if (options && options.enableHtmlSanitizer) {\n // eslint-disable-next-line no-self-assign\n text = text;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (!isNullOrUndefined(uID) === true) {\n li.setAttribute('data-uid', uID);\n }\n else {\n li.setAttribute('data-uid', generateId());\n }\n if (grpLI && options && options.groupTemplate) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(options.groupTemplate);\n if (componentInstance && componentInstance.getModuleName() !== \"listview\") {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), li);\n }\n }\n else if (!grpLI && options && options.template) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(options.template);\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n }\n else {\n var element = createElement('span', {\n className: cssClass.text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n });\n if (options && options.enableHtmlSanitizer) {\n element.innerText = text;\n }\n else {\n element.innerHTML = text;\n }\n innerDiv.appendChild(element);\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n *\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in UL element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n *\n * @param {liElement} liElement - Specifies LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n // eslint-disable-next-line @typescript-eslint/ban-types\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n *\n * @param {Object} dataSource - Specifies an JSON or String data.\n *\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[\"\" + field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[\"\" + dataField] = value;\n }\n }\n }\n return fieldData;\n}\nfunction compileTemplate(template) {\n if (template) {\n try {\n if (document.querySelector(template)) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base, Event, getUniqueID, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { closest, Draggable, remove, compareElementParent } from '@syncfusion/ej2-base';\nimport { addClass, isNullOrUndefined, getComponent, isBlazor } from '@syncfusion/ej2-base';\n/**\n * Sortable Module provides support to enable sortable functionality in Dom Elements.\n * ```html\n * <div id=\"sortable\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * <div>Item 4</div>\n * <div>Item 5</div>\n * </div>\n * ```\n * ```typescript\n * let ele: HTMLElement = document.getElementById('sortable');\n * let sortObj: Sortable = new Sortable(ele, {});\n * ```\n */\nvar Sortable = /** @class */ (function (_super) {\n __extends(Sortable, _super);\n 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 && !observedArgs.cancel) {\n _this.updateItemClass(dropInst);\n dropInst.element.appendChild(_this.target);\n _this.trigger('drop', {\n event: e.event, element: dropInst.element, previousIndex: prevIdx, currentIndex: curIdx,\n target: e.target, helper: e.helper, droppedElement: _this.target, scopeName: _this.scope\n });\n }\n });\n }\n _this.target.classList.remove('e-grabbed');\n _this.target = null;\n _this.curTarget = null;\n remove(e.helper);\n getComponent(_this.element, 'draggable').intDestroy(e.event);\n };\n _this.bind();\n return _this;\n }\n Sortable_1 = Sortable;\n Sortable.prototype.bind = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('sortable');\n }\n if (!this.itemClass) {\n this.itemClass = 'e-sort-item';\n this.dataBind();\n }\n this.initializeDraggable();\n };\n Sortable.prototype.initializeDraggable = function () {\n new Draggable(this.element, {\n helper: this.getHelper,\n dragStart: this.onDragStart,\n drag: this.onDrag,\n dragStop: this.onDragStop,\n dragTarget: \".\" + this.itemClass,\n enableTapHold: true,\n tapHoldThreshold: 200,\n queryPositionInfo: this.queryPositionInfo,\n distance: 5\n });\n };\n Sortable.prototype.getPlaceHolder = function (target, instance) {\n if (instance.placeHolder) {\n var placeHolderElement = instance.placeHolder({ element: instance.element, grabbedElement: this.target, target: target });\n placeHolderElement.classList.add('e-sortable-placeholder');\n return placeHolderElement;\n }\n return null;\n };\n Sortable.prototype.isValidTarget = function (target, instance) {\n return target && compareElementParent(target, instance.element) && target.classList.contains(instance.itemClass) &&\n !target.classList.contains('e-disabled');\n };\n Sortable.prototype.removePlaceHolder = function (instance) {\n remove(instance.placeHolderElement);\n instance.placeHolderElement = null;\n };\n Sortable.prototype.updateItemClass = function (instance) {\n if (this !== instance) {\n this.target.classList.remove(this.itemClass);\n this.target.classList.add(instance.itemClass);\n }\n };\n Sortable.prototype.getSortableInstance = function (element) {\n element = closest(element, \".e-\" + this.getModuleName());\n if (element) {\n var inst = getComponent(element, Sortable_1);\n return inst.scope && this.scope && inst.scope === this.scope ? inst : this;\n }\n else {\n return this;\n }\n };\n Sortable.prototype.refreshDisabled = function (oldIdx, newIdx, instance) {\n if (instance === this) {\n var element = void 0;\n var increased = oldIdx < newIdx;\n var disabledIdx = void 0;\n var start = increased ? oldIdx : newIdx;\n var end = increased ? newIdx : oldIdx;\n while (start <= end) {\n element = this.element.children[start];\n if (element.classList.contains('e-disabled')) {\n disabledIdx = this.getIndex(element);\n this.element.insertBefore(element, this.element.children[increased ? disabledIdx + 2 : disabledIdx - 1]);\n start = increased ? disabledIdx + 2 : disabledIdx + 1;\n }\n else {\n start++;\n }\n }\n }\n };\n Sortable.prototype.getIndex = function (target, instance, e) {\n if (instance === void 0) { instance = this; }\n var idx;\n var placeHolderPresent;\n [].slice.call(instance.element.children).forEach(function (element, index) {\n if (element.classList.contains('e-sortable-placeholder')) {\n placeHolderPresent = true;\n }\n if (element === target) {\n idx = index;\n if (!isNullOrUndefined(e)) {\n if (placeHolderPresent) {\n idx -= 1;\n }\n var offset = target.getBoundingClientRect();\n var clientY = offset.bottom - ((offset.bottom - offset.top) / 2);\n idx = e.clientY <= clientY ? idx : idx + 1;\n }\n return;\n }\n });\n return idx;\n };\n Sortable.prototype.getSortableElement = function (element, instance) {\n if (instance === void 0) { instance = this; }\n return closest(element, \".\" + instance.itemClass);\n };\n Sortable.prototype.queryPositionInfo = function (value) {\n value.left = pageXOffset ? parseFloat(value.left) - pageXOffset + \"px\" : value.left;\n value.top = pageYOffset ? parseFloat(value.top) - pageYOffset + \"px\" : value.top;\n return value;\n };\n Sortable.prototype.isPlaceHolderPresent = function (instance) {\n return instance.placeHolderElement && !!closest(instance.placeHolderElement, \"#\" + instance.element.id);\n };\n /**\n * It is used to sort array of elements from source element to destination element.\n *\n * @param destination - Defines the destination element to which the sortable elements needs to be appended.\n *\n * If it is null, then the Sortable library element will be considered as destination.\n * @param targetIndexes - Specifies the sortable elements indexes which needs to be sorted.\n * @param insertBefore - Specifies the index before which the sortable elements needs to be appended.\n * If it is null, elements will be appended as last child.\n * @function moveTo\n * @returns {void}\n */\n Sortable.prototype.moveTo = function (destination, targetIndexes, insertBefore) {\n moveTo(this.element, destination, targetIndexes, insertBefore);\n };\n /**\n * It is used to destroy the Sortable library.\n */\n Sortable.prototype.destroy = function () {\n if (this.itemClass === 'e-sort-item') {\n this.itemClass = null;\n this.dataBind();\n }\n getComponent(this.element, Draggable).destroy();\n _super.prototype.destroy.call(this);\n };\n Sortable.prototype.getModuleName = function () {\n return 'sortable';\n };\n Sortable.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'itemClass':\n [].slice.call(this.element.children).forEach(function (element) {\n if (element.classList.contains(oldProp.itemClass)) {\n element.classList.remove(oldProp.itemClass);\n }\n if (newProp.itemClass) {\n element.classList.add(newProp.itemClass);\n }\n });\n break;\n }\n }\n };\n var Sortable_1;\n __decorate([\n Property(false)\n ], Sortable.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"itemClass\", void 0);\n __decorate([\n Property(null)\n ], Sortable.prototype, \"scope\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"helper\", void 0);\n __decorate([\n Property()\n ], Sortable.prototype, \"placeHolder\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"beforeDrop\", void 0);\n __decorate([\n Event()\n ], Sortable.prototype, \"drop\", void 0);\n Sortable = Sortable_1 = __decorate([\n NotifyPropertyChanges\n ], Sortable);\n return Sortable;\n}(Base));\nexport { Sortable };\n/**\n * It is used to sort array of elements from source element to destination element.\n *\n * @private\n */\nexport function moveTo(from, to, targetIndexes, insertBefore) {\n var targetElements = [];\n if (!to) {\n to = from;\n }\n if (targetIndexes && targetIndexes.length) {\n targetIndexes.forEach(function (index) {\n targetElements.push(from.children[index]);\n });\n }\n else {\n targetElements = [].slice.call(from.children);\n }\n if (isNullOrUndefined(insertBefore)) {\n targetElements.forEach(function (target) {\n to.appendChild(target);\n });\n }\n else {\n var insertElement_1 = to.children[insertBefore];\n targetElements.forEach(function (target) {\n to.insertBefore(target, insertElement_1);\n });\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined, append, detach, extend } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n content: 'e-content',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n backButton: 'e-back-button',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist',\n virtualElementContainer: 'e-list-virtualcontainer'\n};\nvar LISTVIEW_TEMPLATE_PROPERTY = 'Template';\nvar LISTVIEW_GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar LISTVIEW_HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar swipeVelocity = 0.5;\n/**\n * Represents the field settings of the ListView.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n * <div id=\"listview\">\n * <ul>\n * <li>Favorite</li>\n * <li>Documents</li>\n * <li>Downloads</li>\n * </ul>\n * </div>\n * ```\n * ```typescript\n * var listviewObject = new ListView({});\n * listviewObject.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n *\n * @param options\n *\n * @param element\n */\n function ListView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousSelectedItems = [];\n _this.hiddenItems = [];\n _this.enabledItems = [];\n _this.disabledItems = [];\n return _this;\n }\n /**\n * @param newProp\n *\n * @param oldProp\n *\n * @private\n */\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n // eslint-disable-next-line\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false, 'header');\n }\n break;\n case 'query':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false, 'header');\n break;\n case 'enableVirtualization':\n if (!isNullOrUndefined(this.contentContainer)) {\n detach(this.contentContainer);\n }\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'template':\n if (!this.enableVirtualization) {\n this.refresh();\n }\n break;\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.clientHeight ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n // Support Component Functions\n ListView.prototype.header = function (text, showBack, prop) {\n if (this.headerEle === undefined && this.showHeader) {\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText, innerHTML: this.headerTitle });\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' ' + classNames.backButton,\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n // eslint-disable-next-line\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n // eslint-disable-next-line\n var compiledElement = compiledString({}, this, prop, this.LISTVIEW_HEADERTEMPLATE_ID, null, null, this.headerEle);\n if (compiledElement) {\n append(compiledElement, headerTemplateEle);\n }\n append([headerTemplateEle], this.headerEle);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n if (this.enableHtmlSanitizer) {\n text = SanitizeHtmlHelper.sanitize(text);\n }\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[\"\" + slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: duration,\n timingFunction: this.animation.easing,\n // eslint-disable-next-line\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n if (this.template) {\n try {\n if (document.querySelectorAll(this.template).length) {\n this.setProperties({ template: document.querySelector(this.template).innerHTML.trim() }, true);\n }\n }\n catch (e) {\n compile(this.template);\n }\n }\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'group', itemText: '',\n groupItemRole: 'presentation', wrapperRole: 'presentation'\n },\n // eslint-disable-next-line\n fields: (this.fields.properties),\n sortOrder: this.sortOrder,\n showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this),\n templateID: \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,\n groupTemplateID: \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = this.enablePersistence ? this.selectedId : [];\n this.LISTVIEW_TEMPLATE_ID = \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY;\n this.LISTVIEW_GROUPTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY;\n this.LISTVIEW_HEADERTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_HEADERTEMPLATE_PROPERTY;\n this.aniObj = new Animation(this.animateOptions);\n this.removeElement(this.curUL);\n this.removeElement(this.ulElement);\n this.removeElement(this.headerEle);\n this.removeElement(this.contentContainer);\n this.curUL = this.ulElement = this.liCollection = this.headerEle = this.contentContainer = undefined;\n };\n ListView.prototype.renderCheckbox = function (args) {\n var _this = this;\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData_1;\n // eslint-disable-next-line prefer-const\n checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {\n var index = this.selectedId.findIndex(function (e) { return e == fieldData_1[_this.listBaseOption.fields.id].toString(); });\n if (index != -1) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (fieldData_1[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n checkboxElement.setAttribute('aria-label', 'checkbox');\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n if (this.checkBoxPosition === 'Left') {\n this.virtualCheckBox = args.item.firstElementChild.children[0];\n }\n else {\n this.virtualCheckBox = args.item.firstElementChild.lastElementChild;\n }\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * Checks the specific list item by passing the unchecked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n if (checked === true) {\n liElement.classList.add(classNames.selected);\n }\n else {\n liElement.classList.remove(classNames.selected);\n }\n if (checked === true) {\n checkboxIcon.classList.add(classNames.checked);\n }\n else {\n checkboxIcon.classList.remove(classNames.checked);\n }\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n this.updateSelectedId();\n }\n };\n /**\n * Uncheck the specific list item by passing the checked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.uncheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * Checks all the unchecked items in the ListView.\n */\n ListView.prototype.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * Uncheck all the checked items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n this.updateSelectedId();\n }\n };\n ListView.prototype.setCheckbox = function () {\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n args.item = element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args.curData = this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n this.renderCheckbox(args);\n if (args.item.classList.contains(classNames.selected)) {\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n /**\n * Refresh the height of the list item only on enabling the virtualization property.\n */\n ListView.prototype.refreshItemHeight = function () {\n if (this.virtualizationModule) {\n this.virtualizationModule.refreshItemHeight();\n }\n };\n ListView.prototype.clickHandler = function (e) {\n 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) {\n this.selectedLI.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n this.touchModule.destroy();\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n var textAreaFocus = li.querySelector('textarea') || li.querySelector('input');\n li.classList.add(classNames.focused);\n if (!isNullOrUndefined(e)) {\n if (e.target === textAreaFocus) {\n textAreaFocus.classList.add('e-focused');\n }\n }\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (!isNullOrUndefined(data)\n && typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li && li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem =\n // eslint-disable-next-line\n {\n item: li, text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, { isInteracted: true, event: e, cancel: false, index: this.curUL && Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n // eslint-disable-next-line\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n // eslint-disable-next-line\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n // eslint-disable-next-line\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n var _this = this;\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.selectedLI = li;\n _this.renderSubList(li);\n }\n });\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n // eslint-disable-next-line\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = \n // eslint-disable-next-line\n getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n // eslint-disable-next-line\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n // eslint-disable-next-line\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n // eslint-disable-next-line\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[\"\" + column]) &&\n this.fields[\"\" + column] !==\n ListBase.defaultMappedFields[\"\" + column]\n && columns.indexOf(this.fields[\"\" + column]) === -1) {\n columns.push(this.fields[\"\" + column]);\n }\n }\n query.select(columns);\n // eslint-disable-next-line\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n // eslint-disable-next-line\n var fieldValue = (isNullOrUndefined(this.fields.sortBy)) ? this.fields.text : this.fields.sortBy;\n var query = ListBase.addSorting(this.sortOrder, fieldValue);\n if (dataSource && this.fields.groupBy) {\n if (this.sortOrder !== 'None') {\n this.curViewDS = ListBase.groupDataSource(ListBase.getDataSource(dataSource, query), this.listBaseOption.fields, this.sortOrder);\n }\n else {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.fields, this.sortOrder);\n }\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, query);\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.renderRemoteLists = function (e, listViewComponent) {\n if (this.isDestroyed) {\n return;\n }\n this.localData = e.result;\n listViewComponent.removeElement(listViewComponent.contentContainer);\n this.renderList();\n this.trigger('actionComplete', e);\n };\n ListView.prototype.triggerActionFailure = function (e) {\n if (this.isDestroyed) {\n return;\n }\n this.trigger('actionFailure', e);\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n // eslint-disable-next-line\n var listViewComponent = this;\n if (this.dataSource instanceof DataManager) {\n if (this.dataSource.ready) {\n this.dataSource.ready.then(function (e) {\n /* eslint-disable */\n _this.isOffline = _this.dataSource.dataSource.offline;\n if (_this.dataSource instanceof DataManager && _this.isOffline) {\n _this.renderRemoteLists(e, listViewComponent);\n }\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n else {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n _this.renderRemoteLists(e, listViewComponent);\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.removeElement(this.headerEle);\n this.removeElement(this.ulElement);\n this.removeElement(this.contentContainer);\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n if (Object.keys(window).indexOf('ejsInterop') === -1) {\n this.element.innerHTML = '';\n }\n this.headerEle = this.ulElement = this.liCollection = undefined;\n this.header();\n this.setLocalData();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.setAttributes = function (liElements) {\n for (var i = 0; i < liElements.length; i++) {\n var element = liElements[i];\n if (element.classList.contains('e-list-item')) {\n element.setAttribute('id', this.element.id + '_' + element.getAttribute('data-uid'));\n element.setAttribute('tabindex', '-1');\n }\n }\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.createElement, this.curViewDS, this.listBaseOption, null, this);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(this.liCollection);\n };\n ListView.prototype.exceptionEvent = function (e) {\n this.trigger('actionFailure', e);\n };\n ListView.prototype.UpdateCurrentUL = function () {\n this.ulElement = this.curUL = this.element.querySelector('.' + classNames.parentItem);\n if (this.curUL) {\n // eslint-disable-next-line\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n };\n ListView.prototype.renderSubList = function (li) {\n this.liElement = li;\n var uID = li.getAttribute('data-uid');\n if (li.classList.contains(classNames.hasChild) && uID) {\n var ul = closest(li.parentNode, '.' + classNames.parentItem);\n var ele = this.element.querySelector('[pid=\\'' + uID + '\\']');\n this.curDSLevel.push(uID);\n this.setViewDataSource(this.getSubDS());\n if (!ele) {\n var data = this.curViewDS;\n ele = ListBase.createListFromJson(this.createElement, data, this.listBaseOption, this.curDSLevel.length, null, this);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n var lists = ele.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(lists);\n ele.setAttribute('pID', uID);\n ele.style.display = 'none';\n this.renderIntoDom(ele);\n }\n this.switchView(ul, ele);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.selectedItems) {\n var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);\n // eslint-disable-next-line\n this.header((fieldData[this.listBaseOption.fields.text]), true, 'header');\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization) {\n if (Object.keys(this.dataSource).length) {\n if ((this.template || this.groupTemplate) && !this.virtualizationModule.isNgTemplate()) {\n if (this.isReact || this.isVue) {\n if (typeof this.template == \"string\") {\n this.listBaseOption.template = null;\n }\n if (typeof this.groupTemplate == \"string\") {\n this.listBaseOption.groupTemplate = null;\n }\n }\n else {\n this.listBaseOption.template = null;\n this.listBaseOption.groupTemplate = null;\n }\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = this.createElement('div', { className: classNames.content });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n // eslint-disable-next-line\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n // eslint-disable-next-line\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * Initializes the ListView component rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { role: 'list', tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n this.renderComplete();\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n this.unWireEvents();\n var classAr = [classNames.root, classNames.disable, 'e-rtl',\n 'e-has-header', 'e-lib'].concat(this.cssClass.split(' ').filter(function (css) { return css; }));\n removeClass([this.element], classAr);\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Switches back from the navigated sub list item.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n // eslint-disable-next-line\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.remove(classNames.disable);\n li.classList.add(classNames.focused);\n if (!(this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked))) {\n li.classList.remove(classNames.selected);\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false), 'header');\n };\n /**\n * Selects the list item from the ListView by passing the elements or field object.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (item) {\n if (this.enableVirtualization) {\n this.virtualizationModule.selectItem(item);\n }\n else if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(item));\n }\n else {\n if (isNullOrUndefined(item) === true) {\n this.removeSelect();\n }\n else {\n this.setSelectLI(this.getLiFromObjOrElement(item));\n }\n }\n };\n ListView.prototype.getLiFromObjOrElement = function (obj) {\n var li;\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (!isNullOrUndefined(obj)) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n if (obj instanceof Element) {\n var uid = obj.getAttribute('data-uid').toString();\n for (var i = 0; i < this.liCollection.length; i++) {\n if (this.liCollection[i].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[i];\n break;\n }\n }\n }\n else {\n Array.prototype.some.call(this.curUL.querySelectorAll('.' + classNames.listItem), function (item) {\n if (item.innerText.trim() === obj.toString()) {\n li = item;\n return true;\n }\n else {\n return false;\n }\n });\n }\n }\n else {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n li = this.element.querySelector('[data-uid=\"'\n + fieldData[this.fields.id] + '\"]');\n if (!this.enableVirtualization && isNullOrUndefined(li)) {\n var curLi = this.element.querySelectorAll('.' + classNames.listItem);\n for (var i = 0; i < curLi.length; i++) {\n // eslint-disable-next-line\n if (curLi[i].innerText.trim() === fieldData[this.fields.text]) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\n };\n /**\n * Selects multiple list items from the ListView.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of\n * elements or array of fields Object with ID and Text fields.\n */\n ListView.prototype.selectMultipleItems = function (item) {\n if (!isNullOrUndefined(item)) {\n for (var i = 0; i < item.length; i++) {\n if (!isNullOrUndefined(item[i])) {\n this.selectItem(item[i]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n ListView.prototype.updateSelectedId = function () {\n this.selectedId = [];\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n for (var i = 0; i < liCollection.length; i++) {\n var tempData = this.getItemData(liCollection[i]);\n if (tempData[this.listBaseOption.fields.id]) {\n this.selectedId.push(tempData[this.listBaseOption.fields.id]);\n }\n }\n };\n /**\n * Gets the details of the currently selected item from the list items.\n *\n */\n ListView.prototype.getSelectedItems = function () {\n // eslint-disable-next-line\n var finalValue;\n var isCompleted = false;\n this.selectedId = [];\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (this.enableVirtualization && !isCompleted) {\n finalValue = this.virtualizationModule.getSelectedItems();\n isCompleted = true;\n }\n else if (this.showCheckBox && !isCompleted) {\n // eslint-disable-next-line\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[i]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n if (fieldData) {\n // eslint-disable-next-line\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n // eslint-disable-next-line\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n else {\n liTextCollection.push(undefined);\n this.selectedId.push(undefined);\n }\n }\n }\n if ((typeof dataSource[0] === 'string'\n || typeof dataSource[0] === 'number')\n && !isCompleted) {\n finalValue = { item: liCollection, data: dataSource, text: liTextCollection };\n isCompleted = true;\n }\n if (this.isNestedList && !isCompleted) {\n finalValue = { item: liCollection, data: dataParent, text: liTextCollection };\n isCompleted = true;\n }\n else if (!isCompleted) {\n finalValue = { item: liCollection, data: liDataCollection, text: liTextCollection };\n isCompleted = true;\n }\n }\n else if (!isCompleted) {\n var liElement = this.element.getElementsByClassName(classNames.selected)[0];\n var fieldData = getFieldValues(this.getItemData(liElement), this.listBaseOption.fields);\n if ((typeof dataSource[0] === 'string'\n || typeof dataSource[0] === 'number')\n && !isCompleted) {\n finalValue = (!isNullOrUndefined(liElement)) ? {\n item: liElement, data: dataSource,\n text: liElement.innerText.trim()\n } : undefined;\n isCompleted = true;\n }\n else if (!isCompleted) {\n if (isNullOrUndefined(fieldData) || isNullOrUndefined(liElement)) {\n finalValue = undefined;\n isCompleted = true;\n }\n else {\n // eslint-disable-next-line\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n finalValue = {\n text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement)\n };\n isCompleted = true;\n }\n }\n }\n return finalValue;\n };\n /**\n * Finds out an item details from the current list.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (item) {\n return this.getItemData(item);\n };\n /**\n * Enables the disabled list items by passing the Id and text fields.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.enableItem = function (item) {\n this.setItemState(item, true);\n if (this.enableVirtualization) {\n this.virtualizationModule.enableItem(item);\n }\n };\n /**\n * Disables the list items by passing the Id and text fields.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.disableItem = function (item) {\n this.setItemState(item, false);\n if (this.enableVirtualization) {\n this.virtualizationModule.disableItem(item);\n }\n };\n //A function that used to set state of the list item like enable, disable.\n ListView.prototype.setItemState = function (item, isEnable) {\n var resultJSON = this.getItemData(item);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (isEnable) {\n if (li) {\n li.classList.remove(classNames.disable);\n }\n delete resultJSON[this.fields.enabled];\n }\n else if (!isEnable) {\n if (li) {\n li.classList.add(classNames.disable);\n }\n // eslint-disable-next-line\n resultJSON[this.fields.enabled] = false;\n }\n }\n };\n /**\n * Shows the hide list item from the ListView.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.showItem = function (item) {\n this.showHideItem(item, false, '');\n if (this.enableVirtualization) {\n this.virtualizationModule.showItem(item);\n }\n };\n /**\n * Hides an list item from the ListView.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.hideItem = function (item) {\n this.showHideItem(item, true, 'none');\n if (this.enableVirtualization) {\n this.virtualizationModule.hideItem(item);\n }\n };\n ListView.prototype.showHideItem = function (obj, isHide, display) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (li) {\n li.style.display = display;\n }\n if (isHide) {\n // eslint-disable-next-line\n resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * Adds the new list item(s) to the current ListView.\n * To add a new list item(s) in the ListView, we need to pass the `data` as an array of items that need\n * to be added and `fields` as the target item to which we need to add the given item(s) as its children.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {{Object}[]} data - JSON Array Data that need to add.\n *\n * @param {Fields} fields - Target item to add the given data as its children (can be null).\n *\n */\n ListView.prototype.addItem = function (data, fields) {\n if (fields === void 0) { fields = undefined; }\n var dataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n this.addItemInternally(data, fields, dataSource);\n };\n ListView.prototype.addItemInternally = function (data, fields, dataSource) {\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields, dataSource);\n }\n else {\n var ds = this.findItemFromDS(dataSource, fields);\n var child = void 0;\n if (ds) {\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n }\n // check for whether target is nested level or top level in list\n if (ds instanceof Array) {\n for (var i = 0; i < data.length; i++) {\n dataSource.push(data[i]);\n this.setViewDataSource(dataSource);\n // since it is top level target, get the content container's first child\n // as it is always the top level UL\n var targetUL = this.contentContainer\n ? this.contentContainer.children[0]\n : null;\n // check for whether the list was previously empty or not, if it is\n // proceed to call initial render\n if (this.contentContainer && targetUL) {\n this.addItemIntoDom(data[i], targetUL, this.curViewDS);\n }\n else {\n this.reRender();\n }\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n // proceed as target item is in nested level, only if it is a valid target ds\n if (ds) {\n ds[this.fields.child] = child;\n this.addItemInNestedList(ds, data);\n }\n }\n }\n }\n };\n ListView.prototype.addItemInNestedList = function (targetItemData, itemQueue) {\n // eslint-disable-next-line\n var targetItemId = targetItemData[this.fields.id];\n var targetChildDS = targetItemData[this.fields.child];\n var isAlreadyRenderedUL = this.element.querySelector('[pid=\\'' + targetItemId + '\\']');\n var targetLi = this.element.querySelector('[data-uid=\\'' + targetItemId + '\\']');\n var targetUL = isAlreadyRenderedUL\n ? isAlreadyRenderedUL\n : targetLi\n ? closest(targetLi, 'ul')\n : null;\n var targetDS = isAlreadyRenderedUL ? targetChildDS : [targetItemData];\n var isTargetEmptyChild = targetLi ? !targetLi.classList.contains(classNames.hasChild) : false;\n var isRefreshTemplateNeeded = false;\n // if li element is already rendered, that element needs to be refreshed so that\n // it becomes child viewable due to new child items are added now\n if (isTargetEmptyChild) {\n var targetRefreshedElement = ListBase.createListItemFromJson(this.createElement, targetDS, this.listBaseOption, null, null, this);\n this.setAttributes(targetRefreshedElement);\n targetUL.insertBefore(targetRefreshedElement[0], targetLi);\n detach(targetLi);\n isRefreshTemplateNeeded = true;\n }\n // if it is already rendered element, we need to create and append new elements\n if (isAlreadyRenderedUL && itemQueue) {\n for (var i = 0; i < itemQueue.length; i++) {\n targetDS.push(itemQueue[i]);\n this.addItemIntoDom(itemQueue[i], targetUL, targetDS);\n }\n isRefreshTemplateNeeded = true;\n }\n };\n ListView.prototype.addItemIntoDom = function (currentItem, targetUL, curViewDS) {\n var index = curViewDS.indexOf(currentItem);\n this.addListItem(currentItem, index, targetUL, curViewDS);\n var curItemDS = curViewDS[index - 1];\n if (curItemDS && curItemDS.isHeader && curItemDS.items.length === 1) {\n this.addListItem(curItemDS, (index - 1), targetUL, curViewDS);\n }\n };\n ListView.prototype.addListItem = function (dataSource, index, ulElement, curViewDS) {\n var target = this.getLiFromObjOrElement(curViewDS[index + 1]) ||\n this.getLiFromObjOrElement(curViewDS[index + 2]) || null;\n var li = ListBase.createListItemFromJson(this.createElement, [dataSource], this.listBaseOption, null, null, this);\n this.setAttributes(li);\n // eslint-disable-next-line\n if (this.template && this.isReact) {\n this.renderReactTemplates();\n }\n if (this.fields.groupBy && curViewDS[index + 1] && curViewDS[index + 1].isHeader) {\n var targetEle = this.getLiFromObjOrElement(curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n ulElement.insertBefore(li[0], target);\n };\n /**\n * Removes the list item from the data source based on a passed\n * element like fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (item) {\n var listDataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n if (this.enableVirtualization) {\n this.virtualizationModule.removeItem(item);\n }\n else {\n this.removeItemFromList(item, listDataSource);\n }\n };\n ListView.prototype.removeItemFromList = function (obj, listDataSource) {\n var _this = this;\n var curViewDS = this.curViewDS;\n var fields = obj instanceof Element ? this.getElementUID(obj) : obj;\n var dataSource;\n // eslint-disable-next-line prefer-const\n dataSource = this.findItemFromDS(listDataSource, fields, true);\n if (dataSource) {\n var data_1;\n // eslint-disable-next-line prefer-const\n data_1 = this.findItemFromDS(dataSource, fields);\n var index = curViewDS.indexOf(data_1);\n var li = this.getLiFromObjOrElement(obj);\n var groupLi = void 0;\n this.validateNestedView(li);\n if (this.fields.groupBy && this.curViewDS[index - 1] &&\n curViewDS[index - 1].isHeader &&\n curViewDS[index - 1].items.length === 1) {\n if (li && li.previousElementSibling.classList.contains(classNames.groupListItem) &&\n (isNullOrUndefined(li.nextElementSibling) || (li.nextElementSibling &&\n li.nextElementSibling.classList.contains(classNames.groupListItem)))) {\n groupLi = li.previousElementSibling;\n }\n }\n if (li) {\n detach(li);\n }\n if (groupLi) {\n detach(groupLi);\n }\n // eslint-disable-next-line\n var foundData = (dataSource.length - 1) <= 0\n ? this.findParent(this.localData, this.fields.id, \n // eslint-disable-next-line\n function (value) { return value === data_1[_this.fields.id]; }, null) : null;\n var dsIndex = dataSource.indexOf(data_1);\n dataSource.splice(dsIndex, 1);\n this.setViewDataSource(listDataSource);\n if (foundData\n && foundData.parent\n && Array.isArray(foundData.parent[this.fields.child])\n && foundData.parent[this.fields.child].length <= 0) {\n var parentLi = this.getLiFromObjOrElement(foundData.parent);\n if (parentLi) {\n var li_1 = ListBase.createListItemFromJson(this.createElement, [foundData.parent], this.listBaseOption, null, null, this);\n this.setAttributes(li_1);\n parentLi.parentElement.insertBefore(li_1[0], parentLi);\n parentLi.parentElement.removeChild(parentLi);\n }\n }\n if (dataSource.length <= 0) {\n this.back();\n }\n this.liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n }\n };\n // validate before removing an element whether the current view is inside target element's child view\n ListView.prototype.validateNestedView = function (li) {\n var liID = li ? li.getAttribute('data-uid').toString().toLowerCase() : null;\n if (liID && this.curDSLevel && this.curDSLevel.length > 0) {\n while (this.curDSLevel.some(function (id) { return id.toString().toLowerCase() === liID; })) {\n this.back();\n }\n }\n };\n /**\n * Removes multiple items from the ListView by passing the array of elements or array of field objects.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.removeMultipleItems = function (item) {\n if (item.length) {\n for (var i = 0; i < item.length; i++) {\n this.removeItem(item[i]);\n }\n }\n };\n // eslint-disable-next-line\n ListView.prototype.findParent = function (dataSource, id, callback, parent) {\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource.hasOwnProperty(id) && callback(dataSource[id]) === true) {\n return extend({}, dataSource);\n }\n for (var i = 0; i < Object.keys(dataSource).length; i++) {\n if (dataSource[Object.keys(dataSource)[i]]\n && typeof dataSource[Object.keys(dataSource)[i]] === 'object') {\n // eslint-disable-next-line\n var result = this.findParent(dataSource[Object.keys(dataSource)[i]], id, callback, dataSource);\n if (result != null) {\n if (!result.parent) {\n result.parent = parent;\n }\n return result;\n }\n }\n }\n return null;\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\n };\n ListView.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualization' });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition', 'selectedId']);\n };\n __decorate([\n Property('')\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n ListView = __decorate([\n NotifyPropertyChanges\n ], ListView);\n return ListView;\n}(Component));\nexport { ListView };\n","import { classNames } from './list-view';\nimport { EventHandler, append, isNullOrUndefined, detach, removeClass, addClass, compile, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '../common/list-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nvar listElementCount = 1.5;\nvar windowElementCount = 3;\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.elementDifference = 0;\n this.listViewInstance = instance;\n }\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.isNgTemplate = function () {\n return !isNullOrUndefined(this.listViewInstance.templateRef) && typeof this.listViewInstance.templateRef !== 'string';\n };\n /**\n * Checks if the platform is a Vue and its template property is a function type.\n *\n * @returns {boolean} indicating the result of the check\n */\n Virtualization.prototype.isVueFunctionTemplate = function () {\n return this.listViewInstance.isVue && typeof this.listViewInstance.template === 'function';\n };\n /**\n * For internal use only.\n *\n * @private\n */\n Virtualization.prototype.uiVirtualization = function () {\n this.wireScrollEvent(false);\n var curViewDS = this.listViewInstance.curViewDS;\n var firstDs = curViewDS.slice(0, 1);\n this.listViewInstance.ulElement = this.listViewInstance.curUL = ListBase.createList(\n // eslint-disable-next-line\n this.listViewInstance.createElement, firstDs, this.listViewInstance.listBaseOption, null, this.listViewInstance);\n this.listViewInstance.contentContainer = this.listViewInstance.createElement('div', { className: classNames.content });\n this.listViewInstance.element.appendChild(this.listViewInstance.contentContainer);\n this.listViewInstance.contentContainer.appendChild(this.listViewInstance.ulElement);\n this.listItemHeight = this.listViewInstance.ulElement.firstElementChild.getBoundingClientRect().height;\n this.expectedDomItemCount = this.ValidateItemCount(10000);\n this.domItemCount = this.ValidateItemCount(Object.keys(this.listViewInstance.curViewDS).length);\n this.uiFirstIndex = 0;\n this.uiLastIndex = this.domItemCount - 1;\n var otherDs = curViewDS.slice(1, this.domItemCount);\n var listItems = ListBase.createListItemFromJson(\n // eslint-disable-next-line\n this.listViewInstance.createElement, otherDs, this.listViewInstance.listBaseOption, null, null, this.listViewInstance);\n append(listItems, this.listViewInstance.ulElement);\n this.listViewInstance.liCollection = this.listViewInstance.curUL.querySelectorAll('li');\n this.topElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.topElement, this.listViewInstance.ulElement.firstElementChild);\n this.bottomElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.bottomElement, null);\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n this.listDiff = 0;\n this.uiIndicesInitialization();\n };\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n if (this.listViewInstance.isWindow) {\n this.onVirtualScroll = this.onVirtualUiScroll.bind(this);\n window.addEventListener('scroll', this.onVirtualScroll);\n }\n else {\n EventHandler.add(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll, this);\n }\n }\n else {\n if (this.listViewInstance.isWindow === true) {\n window.removeEventListener('scroll', this.onVirtualScroll);\n window.removeEventListener('scroll', this.updateUl);\n }\n else {\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll);\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.updateUlContainer);\n }\n }\n };\n Virtualization.prototype.updateUlContainer = function (e) {\n var listDiff;\n var virtualElementContainer = this.listViewInstance.ulElement.querySelector('.' + classNames.virtualElementContainer);\n if (isNullOrUndefined(this.listViewInstance.liElementHeight)) {\n this.listViewInstance.updateLiElementHeight();\n }\n if (this.listViewInstance.isWindow) {\n // eslint-disable-next-line\n listDiff = Math.round(e.target.documentElement.scrollTop / this.listViewInstance.liElementHeight) - 2;\n }\n else {\n // eslint-disable-next-line\n listDiff = Math.round(e.target.scrollTop / this.listViewInstance.liElementHeight) - 2;\n }\n if (((listDiff - 1) * this.listViewInstance.liElementHeight) < 0) {\n virtualElementContainer.style.top = '0px';\n }\n else {\n virtualElementContainer.style.top = (listDiff) * this.listViewInstance.liElementHeight + 'px';\n }\n };\n Virtualization.prototype.ValidateItemCount = function (dataSourceLength) {\n var height = parseFloat(formatUnit(this.listViewInstance.height));\n var itemCount;\n if (this.listViewInstance.isWindow) {\n itemCount = Math.round((window.innerHeight / this.listItemHeight) * windowElementCount);\n }\n else {\n if (typeof this.listViewInstance.height === 'string' && this.listViewInstance.height.indexOf('%') !== -1) {\n // eslint-disable-next-line max-len\n itemCount = Math.round((this.listViewInstance.element.getBoundingClientRect().height / this.listItemHeight) * listElementCount);\n }\n else {\n itemCount = Math.round((height / this.listItemHeight) * listElementCount);\n }\n }\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n Virtualization.prototype.uiIndicesInitialization = function () {\n this.uiIndices = { 'activeIndices': [], 'disabledItemIndices': [], 'hiddenItemIndices': [] };\n var data = this.listViewInstance.curViewDS;\n for (var i = 0; i < data.length; i++) {\n if (this.listViewInstance.showCheckBox && data[i][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(i);\n }\n // eslint-disable-next-line\n if (!isNullOrUndefined(data[i][this.listViewInstance.fields.enabled]) &&\n !data[i][this.listViewInstance.fields.enabled]) {\n // eslint-disable-next-line\n (this.uiIndices.disabledItemIndices.push(i));\n }\n }\n if (this.isNgTemplate()) {\n var items = this.listViewInstance.element.querySelectorAll('.' + classNames.listItem);\n for (var index = 0; index < items.length; index++) {\n items[index].context = this.listViewInstance.viewContainerRef.get(index).context;\n }\n }\n };\n Virtualization.prototype.refreshItemHeight = function () {\n if (this.listViewInstance.curViewDS.length) {\n var curViewDS = this.listViewInstance.curViewDS;\n this.listItemHeight = this.topElement.nextSibling.getBoundingClientRect().height;\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.bottomElementHeight = this.totalHeight;\n this.bottomElement.style.height = this.totalHeight + 'px';\n }\n };\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n return this.listViewInstance.isWindow ? (((pageYOffset - startingHeight) <= 0) ? 0 :\n (pageYOffset - startingHeight)) : ((this.listViewInstance.element.scrollTop - startingHeight) <= 0) ? 0 :\n (this.listViewInstance.element.scrollTop - startingHeight);\n };\n Virtualization.prototype.onVirtualUiScroll = function (e) {\n var _a;\n var startingHeight;\n if (this.listViewInstance.isWindow) {\n startingHeight = this.listViewInstance.ulElement.getBoundingClientRect().top -\n document.documentElement.getBoundingClientRect().top;\n }\n else {\n startingHeight = this.listViewInstance.headerEle ? this.listViewInstance.headerEle.getBoundingClientRect().height : 0;\n }\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n if (scroll > this.scrollPosition) {\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, true);\n }\n else {\n this.onNormalScroll(listDiff, true);\n }\n }\n else {\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, false);\n }\n else {\n this.onNormalScroll(listDiff, false);\n }\n }\n }\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n if (typeof this.listViewInstance.onUIScrolled === 'function') {\n this.listViewInstance.onUIScrolled();\n }\n this.scrollPosition = scroll;\n };\n Virtualization.prototype.onLongScroll = function (listDiff, isScrollingDown) {\n var index = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n var elements = this.listViewInstance.ulElement.querySelectorAll('li');\n for (var i = 0; i < elements.length; i++) {\n this.updateUI(elements[i], index);\n index++;\n }\n this.uiLastIndex = isScrollingDown ? (this.uiLastIndex + listDiff) : (this.uiLastIndex - listDiff);\n this.uiFirstIndex = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n };\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n if (isScrollingDown) {\n for (var i = 0; i < listDiff; i++) {\n var index = ++this.uiLastIndex;\n this.updateUI(this.topElement.nextElementSibling, index, this.bottomElement);\n this.uiFirstIndex++;\n }\n }\n else {\n for (var i = 0; i < listDiff; i++) {\n var index = --this.uiFirstIndex;\n var target = this.topElement.nextSibling;\n this.updateUI(this.bottomElement.previousElementSibling, index, target);\n this.uiLastIndex--;\n }\n }\n };\n Virtualization.prototype.updateUiContent = function (element, index) {\n // eslint-disable-next-line\n var curViewDs = this.listViewInstance.curViewDS;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n element.dataset.uid = ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n this.listViewInstance.curViewDS[index].toString();\n }\n else {\n // eslint-disable-next-line\n element.dataset.uid = (curViewDs[index][this.listViewInstance.fields.id]) ?\n // eslint-disable-next-line\n (curViewDs[index][this.listViewInstance.fields.id]) : ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n // eslint-disable-next-line\n (curViewDs[index][this.listViewInstance.fields.text]);\n }\n if (this.listViewInstance.showIcon) {\n if (element.querySelector('.' + classNames.listIcon)) {\n detach(element.querySelector('.' + classNames.listIcon));\n }\n if (this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]) {\n var textContent = element.querySelector('.' + classNames.textContent);\n var target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' +\n this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]\n });\n textContent.insertBefore(target, element.querySelector('.' + classNames.listItemText));\n }\n }\n if (this.listViewInstance.showCheckBox && this.listViewInstance.fields.groupBy) {\n if (!this.checkListWrapper) {\n this.checkListWrapper = this.listViewInstance.curUL.querySelector('.' + classNames.checkboxWrapper).cloneNode(true);\n }\n var textContent = element.querySelector('.' + classNames.textContent);\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.remove(classNames.checklist);\n textContent.classList.remove(classNames.checkbox);\n detach(element.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n else {\n if (!element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.add(classNames.checklist);\n textContent.classList.add(classNames.checkbox);\n textContent.insertBefore(this.checkListWrapper.cloneNode(true), element.querySelector('.' + classNames.listItemText));\n }\n }\n }\n };\n Virtualization.prototype.changeElementAttributes = function (element, index) {\n element.classList.remove(classNames.disable);\n if (this.uiIndices.disabledItemIndices.length && this.uiIndices.disabledItemIndices.indexOf(index) !== -1) {\n element.classList.add(classNames.disable);\n }\n element.style.display = '';\n if (this.uiIndices.hiddenItemIndices.length && this.uiIndices.hiddenItemIndices.indexOf(index) !== -1) {\n element.style.display = 'none';\n }\n if (this.listViewInstance.showCheckBox) {\n var checklistElement = element.querySelector('.' + classNames.checkboxWrapper);\n element.classList.remove(classNames.selected);\n element.classList.remove(classNames.focused);\n if (checklistElement) {\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n }\n if (this.uiIndices.activeIndices.length && this.uiIndices.activeIndices.indexOf(index) !== -1 &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n checklistElement.firstElementChild.classList.add(classNames.checked);\n checklistElement.setAttribute('aria-checked', 'true');\n if (this.activeIndex === index) {\n element.classList.add(classNames.focused);\n }\n }\n }\n else {\n element.classList.remove(classNames.selected);\n element.removeAttribute('aria-selected');\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex === index &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n element.setAttribute('aria-selected', 'true');\n }\n }\n if (this.listViewInstance.fields.groupBy) {\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.classList.contains(classNames.listItem)) {\n element.classList.remove(classNames.listItem);\n element.setAttribute('role', 'group');\n element.classList.add(classNames.groupListItem);\n }\n }\n else {\n if (element.classList.contains(classNames.groupListItem)) {\n element.classList.remove(classNames.groupListItem);\n element.setAttribute('role', 'listitem');\n element.classList.add(classNames.listItem);\n }\n }\n }\n };\n Virtualization.prototype.findDSAndIndexFromId = function (ds, fields) {\n var _this = this;\n var resultJSON = {};\n fields = this.listViewInstance.getElementUID(fields);\n if (!isNullOrUndefined(fields)) {\n ds.some(function (data, index) {\n if ((fields[_this.listViewInstance.fields.id] &&\n // eslint-disable-next-line\n fields[_this.listViewInstance.fields.id]\n // eslint-disable-next-line\n === (data[_this.listViewInstance.fields.id] && data[_this.listViewInstance.fields.id]) || fields === data)) {\n resultJSON.index = index;\n resultJSON.data = data;\n return true;\n }\n else {\n return false;\n }\n });\n }\n return resultJSON;\n };\n Virtualization.prototype.getSelectedItems = function () {\n var _this = this;\n if (!isNullOrUndefined(this.activeIndex) || (this.listViewInstance.showCheckBox && this.uiIndices.activeIndices.length)) {\n var dataCollection = [];\n var textCollection = [];\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n var curViewDS_1 = this.listViewInstance.curViewDS;\n if (this.listViewInstance.showCheckBox) {\n var indices = this.uiIndices.activeIndices;\n for (var i = 0; i < indices.length; i++) {\n dataCollection.push(curViewDS_1[indices[i]]);\n }\n return {\n text: dataCollection,\n // eslint-disable-next-line\n data: dataCollection,\n index: this.uiIndices.activeIndices.map(function (index) {\n return _this.listViewInstance.dataSource.indexOf(curViewDS_1[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_1[this.activeIndex],\n data: curViewDS_1[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_1[this.activeIndex])\n };\n }\n }\n else {\n var curViewDS_2 = this.listViewInstance.curViewDS;\n var text = this.listViewInstance.fields.text;\n if (this.listViewInstance.showCheckBox) {\n var indexArray = this.uiIndices.activeIndices;\n for (var i = 0; i < indexArray.length; i++) {\n textCollection.push(curViewDS_2[indexArray[i]][\"\" + text]);\n // eslint-disable-next-line\n dataCollection.push(curViewDS_2[indexArray[i]]);\n }\n // eslint-disable-next-line\n var dataSource_1 = this.listViewInstance.dataSource instanceof DataManager\n ? curViewDS_2 : this.listViewInstance.dataSource;\n return {\n text: textCollection,\n // eslint-disable-next-line\n data: dataCollection,\n index: this.uiIndices.activeIndices.map(function (index) {\n return dataSource_1.indexOf(curViewDS_2[index]);\n })\n };\n }\n else {\n // eslint-disable-next-line\n var dataSource = this.listViewInstance.dataSource instanceof DataManager\n ? curViewDS_2 : this.listViewInstance.dataSource;\n return {\n text: curViewDS_2[this.activeIndex][this.listViewInstance.fields.text],\n // eslint-disable-next-line\n data: curViewDS_2[this.activeIndex],\n index: dataSource.indexOf(curViewDS_2[this.activeIndex])\n };\n }\n }\n }\n else {\n return undefined;\n }\n };\n Virtualization.prototype.selectItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n var isSelected = this.activeIndex === resutJSON.index;\n var isChecked = void 0;\n this.activeIndex = resutJSON.index;\n if (this.listViewInstance.showCheckBox) {\n if (this.uiIndices.activeIndices.indexOf(resutJSON.index) === -1) {\n isChecked = true;\n this.uiIndices.activeIndices.push(resutJSON.index);\n }\n else {\n isChecked = false;\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(resutJSON.index), 1);\n }\n if (this.listViewInstance.curUL.querySelector('.' + classNames.focused)) {\n this.listViewInstance.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n }\n if (this.listViewInstance.getLiFromObjOrElement(obj)) {\n if (this.listViewInstance.showCheckBox) {\n this.listViewInstance.setCheckboxLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n else {\n this.listViewInstance.setSelectLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n }\n else {\n // eslint-disable-next-line\n var eventArgs = void 0;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n eventArgs = {\n text: this.listViewInstance.curViewDS[this.activeIndex],\n data: this.listViewInstance.curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n else {\n var curViewDS = this.listViewInstance.curViewDS;\n eventArgs = {\n text: curViewDS[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n if (this.listViewInstance.showCheckBox) {\n eventArgs.isChecked = isChecked;\n this.listViewInstance.trigger('select', eventArgs);\n }\n else if (!isSelected) {\n this.listViewInstance.removeSelect();\n this.listViewInstance.trigger('select', eventArgs);\n }\n }\n }\n else if (isNullOrUndefined(obj) && !this.listViewInstance.showCheckBox) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n };\n Virtualization.prototype.enableItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.disableItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.disabledItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.disabledItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.showItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.hideItem = function (obj) {\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.hiddenItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.removeItem = function (obj) {\n var dataSource;\n var curViewDS = this.listViewInstance.curViewDS;\n // eslint-disable-next-line\n var resutJSON = this.findDSAndIndexFromId(curViewDS, obj);\n // eslint-disable-next-line\n if (Object.keys(resutJSON).length) {\n dataSource = resutJSON.data;\n if (curViewDS[resutJSON.index - 1] &&\n curViewDS[resutJSON.index - 1].isHeader &&\n (curViewDS[resutJSON.index - 1])\n .items.length === 1) {\n this.removeUiItem(resutJSON.index - 1);\n this.removeUiItem(resutJSON.index - 1);\n }\n else {\n this.removeUiItem(resutJSON.index);\n }\n }\n var listDataSource = this.listViewInstance.dataSource instanceof DataManager\n ? this.listViewInstance.localData : this.listViewInstance.dataSource;\n var index = listDataSource.indexOf(dataSource);\n if (index !== -1) {\n listDataSource.splice(index, 1);\n this.listViewInstance.setViewDataSource(listDataSource);\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n };\n // eslint-disable-next-line\n Virtualization.prototype.setCheckboxLI = function (li, e) {\n var index = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n if (li.classList.contains(classNames.selected)) {\n if (this.uiIndices.activeIndices.indexOf(index) === -1) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n else {\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n }\n };\n // eslint-disable-next-line\n Virtualization.prototype.setSelectLI = function (li, e) {\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n };\n Virtualization.prototype.checkedItem = function (checked) {\n if (checked) {\n this.uiIndices.activeIndices = [];\n this.activeIndex = undefined;\n var data = this.listViewInstance.curViewDS;\n for (var index = 0; index < data.length; index++) {\n if (!data[index].isHeader) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n }\n else {\n this.activeIndex = undefined;\n this.uiIndices.activeIndices = [];\n }\n };\n Virtualization.prototype.addUiItem = function (index) {\n // virtually new add list item based on the scollbar position\n // if the scroll bar is at the top, just pretend the new item has been added since no UI\n // change is required for the item that has been added at last but when scroll bar is at the bottom\n // just detach top and inject into bottom to mimic new item is added\n var curViewDs = this.listViewInstance.curViewDS;\n this.changeUiIndices(index, true);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex++;\n }\n if (this.listViewInstance.showCheckBox &&\n curViewDs[index][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(index);\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n }\n if (parseFloat(this.bottomElement.style.height)) {\n var liItem = this.listViewInstance.curUL.lastElementChild.previousSibling;\n var target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n if (target) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n this.updateUI(liItem, index, target);\n }\n }\n else {\n var liItem = this.listViewInstance.curUL.firstElementChild.nextSibling;\n var target = void 0;\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n }\n this.topElement.style.height = parseFloat(this.topElement.style.height) + this.listItemHeight + 'px';\n this.uiFirstIndex++;\n this.uiLastIndex++;\n if (target) {\n this.updateUI(liItem, index, target);\n if (this.listViewInstance.isWindow === true) {\n window.scrollTo(0, (pageYOffset + this.listItemHeight));\n }\n else {\n this.listViewInstance.element.scrollTop += this.listItemHeight;\n }\n }\n }\n this.totalHeight += this.listItemHeight;\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.removeUiItem = function (index) {\n this.totalHeight -= this.listItemHeight;\n var curViewDS = this.listViewInstance.curViewDS[index];\n var liItem = this.listViewInstance.getLiFromObjOrElement(curViewDS);\n this.listViewInstance.curViewDS.splice(index, 1);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex--;\n }\n if (liItem) {\n if (this.domItemCount > Object.keys(this.listViewInstance.curViewDS).length) {\n detach(liItem);\n this.domItemCount--;\n this.uiLastIndex--;\n this.totalHeight = 0;\n }\n else {\n if (liItem.classList.contains(classNames.disable)) {\n liItem.classList.remove(classNames.disable);\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(index), 1);\n }\n if (liItem.style.display === 'none') {\n liItem.style.display = '';\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(index), 1);\n }\n if (this.listViewInstance.showCheckBox && liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n var checklistElement = liItem.querySelector('.' + classNames.checkboxWrapper);\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n if (liItem.classList.contains(classNames.focused)) {\n liItem.classList.remove(classNames.focused);\n this.activeIndex = undefined;\n }\n }\n else if (liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else if (parseFloat(this.bottomElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else {\n this.topElement.style.height = parseFloat(this.topElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, (this.uiFirstIndex - 1), this.topElement.nextSibling);\n this.uiLastIndex--;\n this.uiFirstIndex--;\n }\n }\n }\n this.changeUiIndices(index, false);\n this.listDiff = Math.round(parseFloat(this.topElement.style.height) / this.listItemHeight);\n };\n Virtualization.prototype.changeUiIndices = function (index, increment) {\n var keys = Object.keys(this.uiIndices);\n for (var ind = 0; ind < keys.length; ind++) {\n this.uiIndices[keys[ind]] = this.uiIndices[keys[ind]].map(function (i) {\n if (i >= index) {\n return increment ? ++i : --i;\n }\n else {\n return i;\n }\n });\n }\n };\n Virtualization.prototype.addItem = function (data, fields, dataSource) {\n for (var i = 0; i < data.length; i++) {\n var currentItem = data[i];\n // push the given data to main data array\n dataSource.push(currentItem);\n // recalculate all the group data or other datasource related things\n this.listViewInstance.setViewDataSource(dataSource);\n // render list items for first time due to no datasource present earlier\n if (!this.domItemCount) {\n // fresh rendering for first time\n if ((this.listViewInstance.template || this.listViewInstance.groupTemplate) && !this.isNgTemplate()) {\n this.listViewInstance.listBaseOption.template = null;\n this.listViewInstance.listBaseOption.groupTemplate = null;\n this.listViewInstance.listBaseOption.itemCreated = this.createUIItem.bind(this);\n }\n this.uiVirtualization();\n // when expected expected DOM count doesn't meet the condition we need to create and inject new item into DOM\n }\n else if (this.domItemCount < this.expectedDomItemCount) {\n var ds = this.listViewInstance.findItemFromDS(dataSource, fields);\n if (ds instanceof Array) {\n if (this.listViewInstance.ulElement) {\n var index = this.listViewInstance.curViewDS.indexOf(currentItem);\n // inject new list item into DOM\n this.createAndInjectNewItem(currentItem, index);\n // check for group header item\n var curViewDS = this.listViewInstance.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n // target group item index in datasource\n --index;\n // inject new group header into DOM for previously created list item\n this.createAndInjectNewItem(curViewDS, index);\n }\n }\n // recollect all the list item into collection\n this.listViewInstance.liCollection =\n this.listViewInstance.curUL.querySelectorAll('li');\n }\n }\n else {\n // eslint-disable-next-line\n var index = this.listViewInstance.curViewDS.indexOf(currentItem);\n // virtually new add list item based on the scollbar position\n this.addUiItem(index);\n // check for group header item needs to be added\n var curViewDS = this.listViewInstance.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n this.addUiItem(index - 1);\n }\n }\n }\n };\n Virtualization.prototype.createAndInjectNewItem = function (itemData, index) {\n // generate li item for given datasource\n var target;\n var li = ListBase.createListItemFromJson(this.listViewInstance.createElement, \n // eslint-disable-next-line\n [itemData], this.listViewInstance.listBaseOption, null, null, this.listViewInstance);\n // check for target element whether to insert before last item or group item\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n // target group header's first child item to append its header\n target = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index + 2]);\n }\n if (this.listViewInstance.fields.groupBy && this.listViewInstance.curViewDS[index + 1] && this.listViewInstance.curViewDS[index + 1].isHeader) {\n var targetEle = this.listViewInstance.getLiFromObjOrElement(this.listViewInstance.curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n // insert before the target element\n this.listViewInstance.ulElement.insertBefore(li[0], target);\n // increment internal DOM count, last index count for new element\n this.domItemCount++;\n if (this.bottomElementHeight <= 0) {\n this.uiLastIndex++;\n }\n // recalculate the current item height, to avoid jumpy scroller\n this.refreshItemHeight();\n };\n Virtualization.prototype.createUIItem = function (args) {\n var virtualTemplate = this.listViewInstance.template;\n var template = this.listViewInstance.createElement('div');\n var commonTemplate = '<div class=\"e-text-content\" role=\"presentation\"> ' +\n '<span class=\"e-list-text\"> ${' + this.listViewInstance.fields.text + '} </span></div>';\n if (this.listViewInstance.isReact) {\n commonTemplate = null;\n }\n if (this.listViewInstance.showCheckBox) {\n // eslint-disable-next-line\n this.listViewInstance.renderCheckbox(args);\n if ((!isNullOrUndefined(this.listViewInstance.virtualCheckBox)) &&\n (!isNullOrUndefined(this.listViewInstance.virtualCheckBox.outerHTML))) {\n var div = document.createElement('div');\n div.innerHTML = this.listViewInstance.template || commonTemplate;\n if (div.children && div.children[0]) {\n div.children[0].classList.add('e-checkbox');\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div.children[0].classList.add('e-checkbox-left');\n }\n else {\n div.children[0].classList.add('e-checkbox-right');\n }\n if (this.listViewInstance.checkBoxPosition === 'Left') {\n div.children[0].insertBefore(this.listViewInstance.virtualCheckBox, div.childNodes[0].children[0]);\n }\n else {\n div.children[0].appendChild(this.listViewInstance.virtualCheckBox);\n }\n this.listViewInstance.template = div.innerHTML;\n }\n }\n if (this.isVueFunctionTemplate())\n return;\n template.innerHTML = this.listViewInstance.template;\n this.listViewInstance.template = virtualTemplate;\n }\n else {\n if (this.isVueFunctionTemplate())\n return;\n template.innerHTML = this.listViewInstance.template || commonTemplate;\n }\n // eslint-disable-next-line\n var templateElements = template.getElementsByTagName('*');\n var groupTemplate = this.listViewInstance.createElement('div');\n if (this.listViewInstance.fields.groupBy) {\n groupTemplate.innerHTML = this.listViewInstance.groupTemplate || commonTemplate;\n }\n // eslint-disable-next-line\n var groupTemplateElements = groupTemplate.getElementsByTagName('*');\n if (args.curData.isHeader) {\n this.headerData = args.curData;\n }\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\n if (!this.listViewInstance.isReact || (typeof this.listViewInstance.template == \"string\" && !args.item.classList.contains(\"e-list-group-item\")) ||\n (typeof this.listViewInstance.groupTemplate == \"string\" && args.item.classList.contains(\"e-list-group-item\"))) {\n args.item.innerHTML = '';\n }\n args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };\n for (var i = 0; i < templateElements.length; i++) {\n this.compileTemplate(templateElements[i], args.item, false);\n }\n for (var i = 0; i < groupTemplateElements.length; i++) {\n this.compileTemplate(groupTemplateElements[i], args.item, true);\n }\n args.item.context.template = args.curData.isHeader ? template.firstElementChild :\n groupTemplate.firstElementChild;\n args.item.context.type = args.curData.isHeader ? 'flatList' : 'groupList';\n var element = args.curData.isHeader ? groupTemplate : template;\n if (element.firstElementChild) {\n args.item.insertBefore(element.firstElementChild, null);\n }\n };\n Virtualization.prototype.compileTemplate = function (element, item, isHeader) {\n this.textProperty(element, item, isHeader);\n this.classProperty(element, item, isHeader);\n this.attributeProperty(element, item, isHeader);\n };\n Virtualization.prototype.onChange = function (newData, listElement) {\n listElement.context.data = newData;\n // eslint-disable-next-line max-len\n var groupTemplateNodes = listElement.context.nodes.groupTemplateNodes;\n // eslint-disable-next-line max-len\n var flatTemplateNodes = listElement.context.nodes.flatTemplateNodes;\n // eslint-disable-next-line\n if (!isNullOrUndefined(newData.isHeader) && newData.isHeader && listElement.context.type === 'groupList') {\n // eslint-disable-next-line\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'flatList';\n for (var i = 0; i < groupTemplateNodes.length; i++) {\n // eslint-disable-next-line\n groupTemplateNodes[i].onChange(newData);\n }\n }\n else if (!newData.isHeader && listElement.context.type === 'flatList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'groupList';\n for (var i = 0; i < flatTemplateNodes.length; i++) {\n // eslint-disable-next-line\n flatTemplateNodes[i].onChange(newData);\n }\n }\n else if (!newData.isHeader) {\n for (var i = 0; i < flatTemplateNodes.length; i++) {\n // eslint-disable-next-line\n flatTemplateNodes[i].onChange(newData);\n }\n }\n else {\n for (var i = 0; i < groupTemplateNodes.length; i++) {\n // eslint-disable-next-line\n groupTemplateNodes[i].onChange(newData);\n }\n }\n };\n // eslint-disable-next-line\n Virtualization.prototype.updateContextData = function (listElement, node, isHeader) {\n if (isHeader) {\n listElement.context.nodes.groupTemplateNodes.push(node);\n }\n else {\n listElement.context.nodes.flatTemplateNodes.push(node);\n }\n };\n Virtualization.prototype.classProperty = function (element, listElement, isHeader) {\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.className);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n if (resultantOutput && resultantOutput.length) {\n var _loop_1 = function (i) {\n var classNameMatch = resultantOutput[i];\n // eslint-disable-next-line\n var classFunction;\n if (classNameMatch[1].indexOf('?') !== -1 && classNameMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + classNameMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + 'data.' + classNameMatch[1]);\n }\n // eslint-disable-next-line\n var subNode = {};\n if (isHeader) {\n subNode.bindedvalue = classFunction(this_1.headerData);\n }\n else {\n subNode.bindedvalue = classFunction(this_1.templateData);\n }\n subNode.onChange = function (value) {\n if (subNode.bindedvalue) {\n removeClass([element], subNode.bindedvalue.split(' ').filter(function (css) { return css; }));\n }\n var newCss = classFunction(value);\n if (newCss) {\n addClass([element], (newCss).split(' ').filter(function (css) { return css; }));\n }\n subNode.bindedvalue = newCss;\n };\n var className = classNameMatch[0].split(' ');\n for (var i_1 = 0; i_1 < className.length; i_1++) {\n element.classList.remove(className[i_1]);\n }\n if (subNode.bindedvalue) {\n addClass([element], subNode.bindedvalue.split(' ').filter(function (css) { return css; }));\n }\n this_1.updateContextData(listElement, subNode, isHeader);\n };\n var this_1 = this;\n for (var i = 0; i < resultantOutput.length; i++) {\n _loop_1(i);\n }\n }\n };\n Virtualization.prototype.attributeProperty = function (element, listElement, isHeader) {\n var attributeNames = [];\n for (var i = 0; i < element.attributes.length; i++) {\n attributeNames.push(element.attributes[i].nodeName);\n }\n if (attributeNames.indexOf('class') !== -1) {\n attributeNames.splice(attributeNames.indexOf('class'), 1);\n }\n var _loop_2 = function (i) {\n var attributeName = attributeNames[i];\n var attrNameMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(attributeName) || [];\n var attrValueMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(element.getAttribute(attributeName))\n || [];\n // eslint-disable-next-line\n var attributeNameFunction;\n // eslint-disable-next-line\n var attributeValueFunction;\n if (attrNameMatch.length || attrValueMatch.length) {\n if (attrNameMatch[1]) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeNameFunction = new Function('data', 'return ' + 'data.' + attrNameMatch[1]);\n }\n if (attrValueMatch[1]) {\n if (attrValueMatch[1].indexOf('?') !== -1 && attrValueMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + attrValueMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + 'data.' + attrValueMatch[1]);\n }\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n var subNode_1 = {};\n if (isHeader) {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(this_2.headerData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(this_2.headerData)];\n }\n else {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(this_2.templateData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(this_2.templateData)];\n }\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ?\n attributeName : subNode_1.bindedvalue[0];\n subNode_1.onChange = function (value) {\n var bindedvalue = subNode_1.bindedvalue[1] === undefined ?\n element.getAttribute(subNode_1.attrName) : attributeValueFunction(value);\n element.removeAttribute(subNode_1.attrName);\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ? subNode_1.attrName : attributeNameFunction(value);\n element.setAttribute(subNode_1.attrName, bindedvalue);\n subNode_1.bindedvalue = [subNode_1.bindedvalue[0] === undefined ? undefined : attributeNameFunction(value),\n subNode_1.bindedvalue[1] === undefined ? undefined : attributeValueFunction(value)];\n };\n var attributeValue = subNode_1.bindedvalue[1] === undefined ? element.getAttribute(attributeName) :\n subNode_1.bindedvalue[1];\n element.removeAttribute(attributeName);\n element.setAttribute(subNode_1.attrName, attributeValue);\n this_2.updateContextData(listElement, subNode_1, isHeader);\n }\n };\n var this_2 = this;\n for (var i = 0; i < attributeNames.length; i++) {\n _loop_2(i);\n }\n };\n Virtualization.prototype.textProperty = function (element, listElement, isHeader) {\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.innerText);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n var isChildHasTextContent = Array.prototype.some.call(element.children, function (element) {\n if (new RegExp('\\\\${([^}]*)}', 'g').exec(element.innerText)) {\n return true;\n }\n else {\n return false;\n }\n });\n if (resultantOutput && resultantOutput.length && !isChildHasTextContent) {\n var _loop_3 = function (i) {\n var textPropertyMatch = resultantOutput[i];\n // eslint-disable-next-line\n var subNode = {};\n // eslint-disable-next-line\n var textFunction;\n if (textPropertyMatch[1].indexOf('?') !== -1 && textPropertyMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + textPropertyMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + 'data.' + textPropertyMatch[1]);\n }\n if (isHeader) {\n subNode.bindedvalue = textFunction(this_3.headerData);\n }\n else {\n subNode.bindedvalue = textFunction(this_3.templateData);\n }\n subNode.onChange = function (value) {\n element.innerText = element.innerText.replace(subNode.bindedvalue, textFunction(value));\n subNode.bindedvalue = textFunction(value);\n };\n element.innerText = element.innerText.replace(textPropertyMatch[0], subNode.bindedvalue);\n this_3.updateContextData(listElement, subNode, isHeader);\n };\n var this_3 = this;\n for (var i = 0; i < resultantOutput.length; i++) {\n _loop_3(i);\n }\n }\n };\n Virtualization.prototype.reRenderUiVirtualization = function () {\n this.wireScrollEvent(true);\n if (this.listViewInstance.contentContainer) {\n detach(this.listViewInstance.contentContainer);\n }\n this.listViewInstance.preRender();\n // resetting the dom count to 0, to avoid edge case of dataSource suddenly becoming zero\n // and then manually adding item using addItem API\n this.domItemCount = 0;\n this.listViewInstance.header();\n this.listViewInstance.setLocalData();\n };\n Virtualization.prototype.updateUI = function (element, index, targetElement) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var onChange = this.isNgTemplate() ? this.onNgChange : (this.isVueFunctionTemplate()) ? this.onVueChange : this.onChange;\n if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {\n var curViewDS = this.listViewInstance.curViewDS[index];\n // eslint-disable-next-line\n element.dataset.uid = (curViewDS[this.listViewInstance.fields.id]) ?\n // eslint-disable-next-line\n (curViewDS[this.listViewInstance.fields.id]) : ListBase.generateId();\n onChange(curViewDS, element, this);\n }\n else {\n this.updateUiContent(element, index);\n }\n this.changeElementAttributes(element, index);\n if (targetElement) {\n this.listViewInstance.ulElement.insertBefore(element, targetElement);\n }\n };\n /**\n * Handles the UI change in vue for the list view.\n *\n * @param {DataSource} newData - The new data source for the list view.\n * @param {ElementContext} listElement - The HTML element context for the list view.\n * @param {Virtualization} virtualThis - The virtualization context for the list view.\n */\n Virtualization.prototype.onVueChange = function (newData, listElement, virtualThis) {\n var liItem = ListBase.createListItemFromJson(virtualThis.listViewInstance.createElement, \n // eslint-disable-next-line\n [newData], virtualThis.listViewInstance.listBaseOption, null, null, virtualThis.listViewInstance);\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n listElement.appendChild(liItem[0].firstChild);\n };\n Virtualization.prototype.onNgChange = function (newData, listElement, virtualThis) {\n // compile given target element with template for new data\n // eslint-disable-next-line\n var templateCompiler = compile(virtualThis.listViewInstance.template);\n var resultElement = templateCompiler(newData);\n while (listElement.lastChild) {\n listElement.removeChild(listElement.lastChild);\n }\n listElement.appendChild(resultElement[0]);\n };\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n Virtualization.prototype.destroy = function () {\n this.wireScrollEvent(true);\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import * as index from './index';\nindex.ListView.Inject(index.Virtualization);\nexport * from './index';\n"],"names":["getFieldValues","dataItem","fields","fieldData","isNullOrUndefined","isHeader","_i","_a","Object","keys","length","dataField","value","undefined","getValue","compileTemplate","template","document","querySelector","compile","innerHTML","trim","e","moveTo","from","to","targetIndexes","insertBefore","targetElements","forEach","index","push","children","slice","call","target","appendChild","insertElement_1","exports","li","ul","group","icon","text","check","checked","selected","expanded","textContent","hasChild","level","url","collapsible","disabled","image","iconWrapper","anchorWrap","navigable","ListBase","createList","createElement","dataSource","options","isSingleLevel","componentInstance","curOpt","extend","defaultListBaseOptions","ariaAttributes","defaultAriaAttributes","type","typeofData","typeof","createListFromArray","createListFromJson","generateUL","createListItemFromArray","subChild","cssClass","getModuleClass","moduleName","id","generateId","i","itemCreating","curData","generateSingleLevelLI","generateLI","itemCreated","item","createListItemFromJson","getModuleName","defaultMappedFields","checkboxElement","anchorElement","child","hasOwnProperty","curItem","innerEle","showCheckBox","itemNavigable","urlAttributes","className","attrs","showIcon","iconCss","itemClass","prepend","firstElementChild","classList","add","setAttribute","toString","groupItemRole","removeAttribute","tooltip","htmlAttributes","enabled","isVisible","style","display","imageUrl","attr","src","merge","imageAttributes","imageElemnt","insertAdjacentElement","iconElement","processSubChild","addClass","listClass","getSiblingLI","elementArray","element","isPrevious","siblingLI","liIndex","liCollections","Array","prototype","indexOf","contains","groupDataSource","sortOrder","curFields","cusQuery","Query","groupBy","ds","getDataSource","addSorting","j","itemObj","items","grpItem","key","newtext","_id","k","sortBy","query","queries","fn","splice","DataManager","executeLocal","createJsonFromElement","curEle","cloneNode","jsonAr","childs","querySelectorAll","remove","anchor","json","childNodes","i_1","Number","hasChildNodes","attributes_1","getAllAttributes","data","match","elementAttributes","class","split","attributes","nodeName","nodeValue","renderContentTemplate","ulElement","role","compiledString","liCollection","innerText","currentID","groupTemplateID","templateID","compiledElement","isStringTemplate","append","renderGroupTemplate","groupTemplate","headerItems","category","headerItems_1","header","headerData","Math","floor","random","substring","subDS","hasChildren","subLi","expandCollapse","expandIconPosition","expandIconClass","innerElements","grpLI","elementID","itemRole","href","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","enableHtmlSanitizer","innerDiv","wrapperRole","itemText","liElement","listRole","generateIcon","isChecked","headerTemplate","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","this","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","effectsConfig","None","SlideLeft","SlideDown","Zoom","Fade","effectsRTLConfig","classNames","root","hover","focused","parentItem","listItem","listIcon","listItemText","groupListItem","view","headerText","headerTemplateText","disable","content","backIcon","backButton","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","virtualElementContainer","FieldSettings","_super","apply","Property","ChildProperty","ListView","_this","previousSelectedItems","hiddenItems","enabledItems","disabledItems","onPropertyChanged","newProp","oldProp","setHTMLAttribute","setCSSClass","setEnable","setSize","setEnableRTL","listBaseOption","properties","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","detach","refresh","setCheckbox","curViewDS","getSubDS","resetCurrentList","oldCSSClass","filter","css","removeClass","height","formatUnit","width","isWindow","clientHeight","enableElement","enable","enableRtl","isEnabled","showBack","prop","headerEle","showHeader","setProperties","SanitizeHtmlHelper","sanitize","innerHeaderEle","textEle","outerHTML","hedBackButton","headerTemplateEle","LISTVIEW_HEADERTEMPLATE_ID","isReact","renderReactTemplates","parentElement","switchView","fromView","toView","reverse","fPos_1","position","overflow_1","overflow","anim","duration","animation","effect","aniObj","animate","name","timingFunction","easing","end","model","trigger","curUL","preRender","renderCheckbox","bind","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","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","targetElement","closestElement","back","closest","parentNode","removeFocus","setCheckboxLI","eventArgs","selectEventData","removeHover","removeSelect","setSelectLI","removeChild","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","preventDefault","focusedElement","onArrowKeyDown","prev","arrowKeyHandler","elementTop","getBoundingClientRect","top","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","window","scroll","pageYOffset","scrollTop","innerHeight","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","enterKeyHandler","spaceKeyHandler","keyActionHandler","keyCode","swipeActionHandler","swipeDirection","velocity","originalEvent","focusout","selectedLI","wireEvents","EventHandler","touchModule","Touch","swipe","unWireEvents","destroy","focusedLI_1","hoverLI","selectedLI_1","ele","textAreaFocus","renderSubList","selectedItem","isInteracted","event","cancel","observedArgs","lastLi","levelKeys","localData","levelKeys_1","field","curDSJSON","findItemFromDS","curDS","getElementUID","parent","resultJSON","some","getQuery","columns","column","select","tableName","setViewDataSource","fieldValue","isInAnimation","renderRemoteLists","listViewComponent","isDestroyed","result","renderList","triggerActionFailure","setLocalData","ready","then","isOffline","offline","catch","executeQuery","clearTemplate","renderIntoDom","setAttributes","liElements","getAttribute","exceptionEvent","UpdateCurrentUL","lists","isNgTemplate","isVue","createUIItem","uiVirtualization","obj","Element","render","tabindex","rippleFn","rippleEffect","selector","renderComplete","classAr","concat","pID","pop","toUL","fromUL","selectItem","uid","selectMultipleItems","getParentId","parentId","getElementsByClassName","tempData","getSelectedItems","finalValue","isCompleted","liTextCollection","liDataCollection","dataParent","findItem","enableItem","setItemState","disableItem","isEnable","showItem","showHideItem","hideItem","isHide","addItem","addItemInternally","targetUL","addItemIntoDom","addItemInNestedList","targetItemData","itemQueue","targetItemId","targetChildDS","isAlreadyRenderedUL","targetLi","targetDS","targetRefreshedElement","currentItem","addListItem","curItemDS","targetEle","nextElementSibling","removeItem","listDataSource","removeItemFromList","data_1","groupLi","validateNestedView","previousElementSibling","foundData","findParent","dsIndex","isArray","parentLi","li_1","liID","toLowerCase","removeMultipleItems","callback","requiredModules","modules","member","getPersistData","addOnPersist","Complex","Event","NotifyPropertyChanges","Component","Virtualization","instance","elementDifference","listViewInstance","templateRef","isVueFunctionTemplate","wireScrollEvent","firstDs","expectedDomItemCount","ValidateItemCount","domItemCount","uiLastIndex","otherDs","listItems","topElement","bottomElement","totalHeight","topElementHeight","bottomElementHeight","listDiff","uiIndicesInitialization","removeEventListener","onVirtualScroll","updateUl","onVirtualUiScroll","updateUlContainer","addEventListener","liElementHeight","updateLiElementHeight","round","documentElement","dataSourceLength","itemCount","parseFloat","uiIndices","activeIndices","disabledItemIndices","hiddenItemIndices","context","viewContainerRef","get","nextSibling","getscrollerHeight","startingHeight","scrollPosition","onLongScroll","onNormalScroll","isScrollingDown","elements","updateUI","updateUiContent","curViewDs","dataset","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection","textCollection","curViewDS_1","indices","map","curViewDS_2","indexArray","dataSource_1","resutJSON","isSelected","removeUiItem","addUiItem","changeUiIndices","liItem","previousSibling","scrollTo","increment","ind","createAndInjectNewItem","itemData","virtualTemplate","commonTemplate","div","templateElements","getElementsByTagName","groupTemplateElements","templateData","nodes","flatTemplateNodes","groupTemplateNodes","textProperty","classProperty","attributeProperty","onChange","newData","listElement","updateContextData","node","regexMatch","regex","RegExp","resultantOutput","exec","this_1","classFunction","classNameMatch","Function","replace","subNode","bindedvalue","newCss","attributeNames","this_2","attributeNameFunction","attributeValueFunction","attributeName","attrNameMatch","attrValueMatch","subNode_1","attrName","attributeValue","isChildHasTextContent","this_3","textFunction","textPropertyMatch","onNgChange","onVueChange","virtualThis","lastChild","firstChild","resultElement","Sortable","getHelper","getSortableElement","sender","isValidTarget","helper","offsetWidth","offsetHeight","body","onDrag","newInst","getSortableInstance","curTarget","placeHolder","placeHolderElement","scope","oldIdx","getIndex","getPlaceHolder","newIdx","isPlaceHolderPresent","childElementCount","refreshDisabled","idx","updateItemClass","droppedElement","previousIndex","currentIndex","removePlaceHolder","inst_1","onDragStart","cancelDrag","onDragStop","isBlazor","bindEvents","dragElement","prevIdx","curIdx","handled","dropInst","curIdx_1","curIdx_2","scopeName","beforeDropArgs","getComponent","intDestroy","Sortable_1","getUniqueID","dataBind","initializeDraggable","Draggable","dragStart","drag","dragStop","dragTarget","enableTapHold","tapHoldThreshold","queryPositionInfo","distance","grabbedElement","compareElementParent","inst","increased","disabledIdx","start","placeHolderPresent","offset","clientY","bottom","left","pageXOffset","destination","Base","index.ListView","Inject","index.Virtualization"],"mappings":"gEAm+BA,SAAgBA,GAAeC,EAAUC,GACrC,GAAIC,KACJ,IAAIC,oBAAkBH,IAAmC,oBAAkC,qBACnFG,oBAAkBH,EAASI,UAC/B,MAAOJ,EAGP,KAAK,GAAIK,GAAK,EAAGC,EAAKC,OAAOC,KAAKP,GAASI,EAAKC,EAAGG,OAAQJ,IAAM,CAC7D,GACIK,GAAYT,EAAO,GADXK,EAAGD,IAEXM,EAASR,oBAAkBO,IACJ,uBAA2CE,GAAhCC,WAASH,EAAWV,EACrDG,qBAAkBQ,KACnBT,EAAU,GAAKQ,GAAaC,GAIxC,MAAOT,GAEX,QAASY,GAAgBC,GACrB,GAAIA,EACA,IACI,MAAIC,UAASC,cAAcF,GAChBG,UAAQF,SAASC,cAAcF,GAAUI,UAAUC,QAGnDF,UAAQH,GAGvB,MAAOM,GACH,MAAOH,WAAQH,ICrlB3B,QAAgBO,GAAOC,EAAMC,EAAIC,EAAeC,GAC5C,GAAIC,KAYJ,IAXKH,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,GAAIE,GAAkBZ,EAAGO,SAASL,EAClCC,GAAeC,QAAQ,SAAUM,GAC7BV,EAAGE,aAAaQ,EAAQE,MDhcpCC,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,GAoEP,QAASC,GAAWC,EAAeC,EAEnCC,EAASC,EAAeC,GACpB,GAAIC,GAASC,YAAWC,EAAwBL,GAC5CM,EAAiBF,YAAWG,EAAuBJ,EAAOG,gBAC1DE,EAAOC,EAAWV,GAAYW,MAClC,OAAa,WAATF,GAA8B,WAATA,EACdG,EAAoBb,EAAeC,EAAYE,EAAeD,EAASE,GAGvEU,EAAmBd,EAAeC,EAAYC,EAASM,EAAelB,MAAOa,EAAeC,GAmB3G,QAASS,GAAoBb,EAAeC,EAG5CE,EAAeD,EAASE,GAEpB,MAAOW,GAAWf,EADHgB,EAAwBhB,EAAeC,EAAYE,EAAeD,EAASE,GAC/C,KAAMF,GAkBrD,QAASc,GAAwBhB,EAAeC,EAEhDE,EAAeD,EAASE,GACpB,GAAIa,MACAZ,EAASC,YAAWC,EAAwBL,EAChDgB,YAAWC,EAAed,EAAOe,WAEjC,KAAK,GADDC,GAAKC,IACAC,EAAI,EAAGA,EAAItB,EAAWnD,OAAQyE,IACnC,IAAI/E,oBAAkByD,EAAWsB,IAAjC,CAGA,GAAI5C,OAAK,EACT,IAAI0B,EAAOmB,cAA+C,kBAAxBnB,GAAOmB,aAA6B,CAC9DC,GACAxB,WAAYA,EACZwB,QAASxB,EAAWsB,GACpBxC,KAAMkB,EAAWsB,GACjBrB,QAASG,EAEbA,GAAOmB,aAAaC,GAQxB,GALI9C,EADAwB,EACKuB,EAAsB1B,EAAeC,EAAWsB,OAAItE,GAAW,KAAM,QAAU,KAAMoE,EAAIE,EAAGrB,GAG5FyB,EAAW3B,EAAeC,EAAWsB,OAAItE,GAAW,KAAM,KAAMiD,EAASE,GAE9EC,EAAOuB,aAA6C,kBAAvBvB,GAAOuB,YAA4B,CAChE,GAAIH,IACAxB,WAAYA,EACZwB,QAASxB,EAAWsB,GACpBxC,KAAMkB,EAAWsB,GACjBM,KAAMlD,EACNuB,QAASG,EAEbA,GAAOuB,YAAYH,GAEvBR,EAAS9C,KAAKQ,GAElB,MAAOsC,GAoBX,QAASa,GAAuB9B,EAAeC,EAE/CC,EAASZ,EAAOa,EAAeC,GAC3B,GAAIC,GAASC,YAAWC,EAAwBL,EAChDgB,YAAWC,EAAed,EAAOe,WACjC,IAIIC,GAJA/E,GAAU8D,GAC6B,aAAtCA,EAAkB2B,iBAAwE,gBAAtC3B,EAAkB2B,gBACrDzB,YAAWR,EAASkC,oBAAqB3B,EAAO/D,QAAhE+D,EAAO/D,OACTkE,EAAiBF,YAAWG,EAAuBJ,EAAOG,gBAE1DyB,IACA3C,KACAkB,EAAelB,MAAQA,EAE3B,IACIX,GACAuD,EAFAC,IAGAlC,IAAcA,EAAWnD,SAAWN,oBAAkBmE,EAAWV,GAAY4B,QAE5ElB,EAAWV,GAAY4B,KAAKO,eAAe9F,EAAO+E,MACnDA,EAAKC,IAET,KAAK,GAAIC,GAAI,EAAGA,EAAItB,EAAWnD,OAAQyE,IAAK,CACxC,GAAIhF,GAAYH,EAAe6D,EAAWsB,GAAIjF,EAC9C,KAAIE,oBAAkByD,EAAWsB,IAAjC,CAGA,GAAIlB,EAAOmB,cAA+C,kBAAxBnB,GAAOmB,aAA6B,CAC9DC,GACAxB,WAAYA,EACZwB,QAASxB,EAAWsB,GACpBxC,KAAMxC,EAAUD,EAAOyC,MACvBmB,QAASG,EACT/D,OAAQA,EAEZ+D,GAAOmB,aAAaC,GAExB,GAAIY,GAAUpC,EAAWsB,EACrBlB,GAAOmB,cAA+C,kBAAxBnB,GAAOmB,eACrCjF,EAAYH,EAAe6D,EAAWsB,GAAIjF,IAG1CC,EAAU6F,eAAe9F,EAAO+E,MAAQ7E,oBAAkBD,EAAUD,EAAO+E,OAC3EA,EAAK9E,EAAUD,EAAO+E,IAE1B,IAAIiB,KASJ,IARIjC,EAAOkC,eACHlC,EAAOmC,gBAAkBjG,EAAUD,EAAOiD,MAAQhD,EAAUD,EAAOmG,gBACnER,EAAgB9D,KAAK6B,EAAc,SAAW0C,UAAWxB,WAASlC,MAAO2D,OAASjC,KAAM,eAGxF4B,EAASnE,KAAK6B,EAAc,SAAW0C,UAAWxB,WAASlC,MAAO2D,OAASjC,KAAM,iBAGnE,IAAlBP,EAEIE,EAAOuC,UAAYrG,EAAU6F,eAAe9F,EAAOuG,WAAarG,oBAAkBD,EAAUD,EAAOuG,WACnGP,EAASnE,KAAK6B,EAAc,QAAU0C,UAAWxB,WAASpC,KAAO,IAAMvC,EAAUD,EAAOuG,YAM5FX,GAJAvD,EAAK+C,EAAsB1B,EAAeqC,EAAS9F,EAAWD,EAAQ+D,EAAOyC,UAAWR,KAEvFD,EAAQD,eAAe,cACpBC,EAAQ5F,UAA0B4E,EAAIE,EAAGrB,IAC1B5C,cAAc,IAAM4D,WAAStB,YAC5CS,EAAOmC,eAAiBP,EAAgBnF,QACxCiG,UAAQd,EAAiBtD,EAAGqE,uBAG/B,CAyBD,IAxBArE,EAAKgD,EAAW3B,EAAeqC,EAAS9F,EAAWD,EAAQ+D,EAAOyC,UAAW5C,EAASE,IACnF6C,UAAUC,IAAIhC,WAAS5B,MAAQ,IAAMkB,EAAelB,OACvDX,EAAGwE,aAAa,aAAc3C,EAAelB,MAAM8D,YACf,gBAAhC5C,EAAe6C,eACf1E,EAAG2E,gBAAgB,cAEvBpB,EAAgBvD,EAAGrB,cAAc,IAAM4D,WAAStB,YAE5CrD,EAAU6F,eAAe9F,EAAOiH,UAChC5E,EAAGwE,aAAa,QAAS5G,EAAUD,EAAOiH,UAG1ChH,EAAU6F,eAAe9F,EAAOkH,iBAAmBjH,EAAUD,EAAOkH,iBACpEL,EAAaxE,EAAIpC,EAAUD,EAAOkH,iBAGlCjH,EAAU6F,eAAe9F,EAAOmH,WAA0C,IAA9BlH,EAAUD,EAAOmH,UAC7D9E,EAAGsE,UAAUC,IAAIhC,WAASzB,UAG1BlD,EAAU6F,eAAe9F,EAAOoH,aAA8C,IAAhCnH,EAAUD,EAAOoH,aAC/D/E,EAAGgF,MAAMC,QAAU,QAGnBrH,EAAU6F,eAAe9F,EAAOuH,YAAcrH,oBAAkBD,EAAUD,EAAOuH,aAC7ExD,EAAOjD,SAAU,CACrB,GAAI0G,IAASC,IAAKxH,EAAUD,EAAOuH,UACnCG,SAAMF,EAAMvH,EAAUD,EAAO2H,iBAC7B,IAAIC,GAAclE,EAAc,OAAS0C,UAAWxB,WAASxB,MAAOiD,MAAOmB,GACvE5B,GACAA,EAAciC,sBAAsB,aAAcD,GAGlDnB,WAASmB,GAAcvF,EAAGqE,mBAIlC,GAAI3C,EAAOuC,UAAYrG,EAAU6F,eAAe9F,EAAOuG,WAClDrG,oBAAkBD,EAAUD,EAAOuG,YAAcxC,EAAOjD,SAAU,CACnE,GAAIgH,GAAcpE,EAAc,OAAS0C,UAAWxB,WAASpC,KAAO,IAAMvC,EAAUD,EAAOuG,UACvFX,GACAA,EAAciC,sBAAsB,aAAcC,GAGlDrB,WAASqB,GAAczF,EAAGqE,mBAG9BV,EAASxF,QACTiG,UAAQT,EAAU3D,EAAGqE,mBAErB3C,EAAOmC,eAAiBP,EAAgBnF,QACxCiG,UAAQd,EAAiBtD,EAAGqE,mBAEhCqB,EAAgBrE,EAAezD,EAAWD,EAAQ2D,EAAYI,EAAQ1B,EAAI6B,EAAelB,OAK7F,GAHI4C,GACAoC,YAAU3F,IAAMuC,WAASrB,YAEzBQ,EAAOuB,aAA6C,kBAAvBvB,GAAOuB,YAA4B,CAChE,GAAIH,IACAxB,WAAYA,EACZwB,QAASxB,EAAWsB,GACpBxC,KAAMxC,EAAUD,EAAOyC,MACvB8C,KAAMlD,EACNuB,QAASG,EACT/D,OAAQA,EAEZ+D,GAAOuB,YAAYH,GAEvBQ,KACAE,EAAMhE,KAAKQ,IAEf,MAAOwD,GAoBX,QAASrB,GAAmBd,EAAeC,EAE3CC,EAASZ,EAAOa,EAAeC,GAC3B,GAAIC,GAASC,YAAWC,EAAwBL,EAEhD,OAAOa,GAAWf,EADT8B,EAAuB9B,EAAeC,EAAYC,EAASZ,EAAOa,EAAeC,GACrDC,EAAOkE,UAAWrE,GAU3D,QAASsE,GAAaC,EAAcC,EAASC,GAEzC,GADAzD,WAAWC,EAAeZ,EAAuBa,YAC5CqD,GAAiBA,EAAa3H,OAAnC,CAGA,GAAI8H,GACAC,EACAC,EAAgBC,MAAMC,UAAU3G,MAAMC,KAAKmG,EAQ/C,KADAG,EAAYE,GALRD,EADAH,EACUO,EAAQP,EAASI,IAGD,IAAfH,EAAsBG,EAAchI,QAAU,KAET,IAAf6H,GAAuB,EAAI,IACzDC,KAAelB,YAAUkB,IAAcA,EAAU3B,UAAUiC,SAAShE,WAASzB,YAEhFmF,EAAYE,EADZD,IAAoC,IAAfF,GAAuB,EAAI,EAGpD,OAAOC,IASX,QAASK,GAAQpD,EAAM4C,GACnB,GAAKA,GAAiB5C,EAGjB,CAGD,MADgBkD,OAAMC,UAAU3G,MAAMC,KAAKmG,GACtBQ,QAAQpD,IAWrC,QAASsD,GAAgBlF,EAAY3D,EAAQ8I,OACvB,KAAdA,IAAwBA,EAAY,OACxC,IAAIC,GAAY/E,YAAWR,EAASkC,oBAAqB1F,GACrDgJ,GAAW,GAAIC,UAAQ1G,MAAMwG,EAAUG,SAGvCC,EAAKC,EAAczF,EADvBqF,EAAWK,EAAWP,EAAW,MAAOE,GAExCrF,KACA,KAAK,GAAI2F,GAAI,EAAGA,EAAIH,EAAG3I,OAAQ8I,IAAK,CAChC,GAAIC,GAAUJ,EAAGG,GAAGE,MAChBC,IAEJA,GAAQV,EAAUtG,MAAQ0G,EAAGG,GAAGI,IAChCD,EAAgB,UAAI,CACpB,IAAIE,GAAUZ,EAAUtG,IACR,QAAZkH,IAEAF,EAAQ,IADRE,EAAU,SACcR,EAAGG,GAAGI,KAElCD,EAAQG,IAAM,oBAAsBT,EAAGG,GAAGI,IACtCP,EAAGG,GAAGI,IAAI5C,WAAW3F,OAAS,aAClCsI,EAAQD,MAAQD,EAChB5F,EAAW9B,KAAK4H,EAChB,KAAK,GAAII,GAAI,EAAGA,EAAIN,EAAQ/I,OAAQqJ,IAChClG,EAAW9B,KAAK0H,EAAQM,IAGhC,MAAOlG,GAUX,QAAS0F,GAAWP,EAAWgB,EAAQC,GAEnC,OADc,KAAVA,IAAoBA,EAAQ,GAAId,UAClB,cAAdH,EACAiB,EAAMD,OAAOA,EAAQ,aAAa,OAEjC,IAAkB,eAAdhB,EACLiB,EAAMD,OAAOA,EAAQ,cAAc,OAGnC,KAAK,GAAI7E,GAAI,EAAGA,EAAI8E,EAAMC,QAAQxJ,OAAQyE,IACV,aAAxB8E,EAAMC,QAAQ/E,GAAGgF,IACjBF,EAAMC,QAAQE,OAAOjF,EAAG,EAIpC,OAAO8E,GAUX,QAASX,GAAczF,EAAYoG,GAE/B,MAAO,IAAII,eAAYxG,GAClByG,aAAaL,GAStB,QAASM,GAAsBjC,EAASxE,GACpC,GAAIG,GAASC,YAAWC,EAAwBL,GAC5C5D,EAASgE,YAAWR,EAASkC,oBAAqB3B,EAAO/D,QACzDsK,EAASlC,EAAQmC,WAAU,GAE3BC,IACJF,GAAO3D,UAAUC,IAAI,cACrB,IAAI6D,GAASH,EAAOI,iBAAiB,kBACrCJ,GAAO3D,UAAUgE,OAAO,cACxB,KAAK,GAAI1F,GAAI,EAAGA,EAAIwF,EAAOjK,OAAQyE,IAAK,CAQpC,IAAK,GAPD5C,GAAKoI,EAAOxF,GACZ2F,EAASvI,EAAGrB,cAAc,KAC1BsB,EAAKD,EAAGrB,cAAc,MAEtB6J,KACAC,EAAaF,EAASA,EAAOE,WAAazI,EAAGyI,WAC7CvK,EAAOD,OAAOC,KAAKuK,GACdC,EAAM,EAAGA,EAAMD,EAAWtK,OAAQuK,IACjCD,EAAWE,OAAOzK,EAAKwK,KAAQE,kBACjCJ,EAAK7K,EAAOyC,MAAQqI,EAAWE,OAAOzK,EAAKwK,KAAOjI,YAG1D,IAAIoI,GAAeC,EAAiB9I,EAChC6I,GAAanG,IACb8F,EAAK7K,EAAO+E,IAAMmG,EAAanG,SACxBmG,GAAanG,IAGpB8F,EAAK7K,EAAO+E,IAAMC,IAElB1E,OAAOC,KAAK2K,GAAc1K,SAC1BqK,EAAK7K,EAAOkH,gBAAkBgE,GAE9BN,IACAM,EAAeC,EAAiBP,GAC5BtK,OAAOC,KAAK2K,GAAc1K,SAC1BqK,EAAK7K,EAAOmG,eAAiB+E,IAGjC5I,IACAuI,EAAK7K,EAAO6F,OAASwE,EAAsB/H,EAAIsB,IAEnD4G,EAAO3I,KAAKgJ,GAEhB,MAAOL,GAGX,QAASnG,GAAW+G,GAEhB,IAAK,GADDC,IAAU/G,OAAQ,KAAMiB,KAAM,MACzBN,EAAI,EAAGA,EAAImG,EAAK5K,OAAQyE,IAC7B,IAAK/E,oBAAkBkL,EAAKnG,IACxB,MAAOoG,IAAU/G,aAAe8G,GAAKnG,GAAIM,KAAM6F,EAAKnG,GAG5D,OAAOoG,GAEX,QAASxE,GAAauB,EAASkD,GAC3B,GAAI9D,KACJE,SAAMF,EAAM8D,GACR9D,EAAK+D,QACLvD,YAAUI,GAAUZ,EAAK+D,MAAMC,MAAM,YAC9BhE,GAAK+D,OAEhBE,aAAWrD,EAASZ,GAExB,QAAS2D,GAAiB/C,GAGtB,IAAK,GAFDqD,MACAjE,EAAOY,EAAQqD,WACV7J,EAAQ,EAAGA,EAAQ4F,EAAKhH,OAAQoB,IACrC6J,EAAWjE,EAAK5F,GAAO8J,UAAYlE,EAAK5F,GAAO+J,SAEnD,OAAOF,GASX,QAASG,GAAsBlI,EAAe5C,EAAU6C,EAExD3D,EAAQ4D,EAASE,GACbc,WAAWC,EAAeZ,EAAuBa,WASjD,KAAK,GAFDpE,GANAmL,EAAYnI,EAAc,MAAQ0C,UAAWxB,WAAStC,GAAI+D,OAASyF,KAAM,kBACzE/H,EAASC,YAAWC,EAAwBL,GAC5CmF,EAAY/E,YAAWR,EAASkC,oBAAqB1F,GAErD+L,EAAiBlL,EAAgBC,GACjCkL,KAEAjH,EAAKC,IACAC,EAAI,EAAGA,EAAItB,EAAWnD,OAAQyE,IAAK,CACxC,GAAIhF,GAAYH,EAAe6D,EAAWsB,GAAI8D,GAC1ChD,EAAUpC,EAAWsB,GACrB9E,EAAW4F,EAAQ5F,QAOvB,IALIO,EADyB,gBAAlBiD,GAAWsB,IAA4C,gBAAlBtB,GAAWsB,GAC/Cc,EAGA9F,EAAU8I,EAAUrI,OAE5BqD,EAAOmB,cAA+C,kBAAxBnB,GAAOmB,aAA6B,CAC9DC,GACAxB,WAAYA,EACZwB,QAASY,EACTtD,KAAM/B,EACNkD,QAASG,EACT/D,OAAQ+I,EAEZhF,GAAOmB,aAAaC,GAEpBpB,EAAOmB,cAA+C,kBAAxBnB,GAAOmB,eACrCjF,EAAYH,EAAe6D,EAAWsB,GAAI8D,GAEtCrI,EADyB,gBAAlBiD,GAAWsB,IAA4C,gBAAlBtB,GAAWsB,GAC/Cc,EAGA9F,EAAU8I,EAAUrI,OAGpC,IAAI2B,GAAKqB,EAAc,MACnBqB,GAAIA,EAAK,IAAME,EACfmB,UAAWjG,EAAWyE,WAASrC,MAAQqC,WAASvC,GAAIgE,OAASyF,KAAM,iBAEvE,IAAI3L,EAC6B,gBAAlBwD,GAAWsB,IAA4C,gBAAlBtB,GAAWsB,GACvD5C,EAAG4J,UAAYlG,EAGf1D,EAAG4J,UAAYhM,EAAU8I,EAAUtG,UAGtC,CACD,GAAIyJ,GAAY/L,EAAW4D,EAAOoI,gBAAkBpI,EAAOqI,UAC3D,IAAIjM,EACI2D,GAA0D,YAArCA,EAAkB2B,iBAEnC4G,EAAkBN,EAAehG,EAASjC,EAAmB,iBAAkBoI,IAAanI,EAAOuI,iBAAkB,KAAMjK,KAE3HkK,SAAOF,EAAiBhK,GAI5BkK,SAAOR,EAAehG,EAASjC,EAAmB,iBAAkBoI,IAAanI,EAAOuI,kBAAmBjK,OAI/G,IAAIyB,GAA2D,aAAtCA,EAAkB2B,gBAAgC,CAEvE,GAAI4G,GAAkBN,EAAehG,EAASjC,EAAmB,WAAYoI,IAAanI,EAAOuI,iBAAkB,KAAMjK,EACrHgK,IACAE,SAAOF,EAAiBhK,OAI5BkK,UAAOR,EAAehG,EAASjC,EAAmB,WAAYoI,IAAanI,EAAOuI,kBAAmBjK,EAG7GA,GAAGwE,aAAa,aAAc3G,oBAAkBQ,GAAS,OAASA,GAClE2B,EAAGwE,aAAa,OAAQ,UAE5B,GAAI9C,EAAOuB,aAA6C,kBAAvBvB,GAAOuB,YAA4B,CAChE,GAAIH,IACAxB,WAAYA,EACZwB,QAASY,EACTtD,KAAM/B,EACN6E,KAAMlD,EACNuB,QAASG,EACT/D,OAAQ+I,EAEZhF,GAAOuB,YAAYH,GAEvB6G,EAAanK,KAAKQ,GAGtB,MADAkK,UAAOP,EAAcH,GACdA,EAeX,QAASW,GAAoBC,EAAe5D,EAAiB7I,EAE7D0M,EAAa9I,EAASE,GAMlB,IAAK,GAJDiI,GAAiBlL,EAAgB4L,GACjC1D,EAAY/E,YAAWR,EAASkC,oBAAqB1F,GACrD+D,EAASC,YAAWC,EAAwBL,GAC5C+I,EAAW5D,EAAUG,QAChB9I,EAAK,EAAGwM,EAAgBF,EAAatM,EAAKwM,EAAcpM,OAAQJ,IAAM,CAC3E,GAAIyM,GAASD,EAAcxM,GACvB0M,IAGJ,IAFAA,EAAW,GAAKH,GAAYE,EAAO/J,YACnC+J,EAAO3L,UAAY,GACf4C,GAA2D,aAAtCA,EAAkB2B,gBAAgC,CAEvE,GAAI4G,GAAkBN,EAAee,EAAYhJ,EAAmB,gBAAiBC,EAAOoI,kBAAmBpI,EAAOuI,iBAAkB,KAAMO,EAC1IR,IACAE,SAAOF,EAAiBQ,OAI5BN,UAAOR,EAAee,EAAYhJ,EAAmB,gBAAiBC,EAAOoI,kBAAmBpI,EAAOuI,kBAAmBO,GAGlI,MAAOH,GAGX,QAAS1H,KACL,MAAO+H,MAAKC,MAA4B,OAArB,EAAID,KAAKE,WACvBnG,SAAS,IACToG,UAAU,GAGnB,QAASnF,GAAgBrE,EAAezD,EAAWD,EAAQmJ,EAAIvF,EAASwE,EAASpF,GAE7E,GAAImK,GAAQlN,EAAUD,EAAO6F,WACzBuH,EAAcnN,EAAUD,EAAOoN,YAEnC,IAAID,EAAM3M,SACN4M,GAAc,EACdhF,EAAQzB,UAAUC,IAAIhC,WAAS7B,UAC3Ba,EAAQmE,iBAAiB,CACzB,GAAIsF,GAAQ7I,EAAmBd,EAAeyJ,EAAOvJ,IAAWZ,EAChEoF,GAAQlG,YAAYmL,GAItBzJ,EAAQ0J,gBAAkBF,IAAgBxJ,EAAQ9C,WACpDsH,EAAQ1B,kBAAkBC,UAAUC,IAAIhC,WAASvB,cAEE,SAA/BO,EAAQ2J,mBAAgC9G,UAAU8F,WACvD7I,EAAc,OAAS0C,UAAW,WAAaxC,EAAQ4J,mBAAqBpF,EAAQpH,cAAc,IAAM4D,WAAS9B,eAGxI,QAASsC,GAAsB1B,EAAe6B,EAAMtF,EAAWD,EAAQoG,EAAWqH,EAAeC,EAAO3I,EAAInD,EAAOgC,GAC/G,GAIID,GAJAI,EAASC,YAAWC,EAAwBL,GAC5CM,EAAiBF,YAAWG,EAAuBJ,EAAOG,gBAC1DzB,EAAO8C,EACP7E,EAAQ6E,CAEQ,iBAATA,IAAqC,gBAATA,IAAqC,iBAATA,KAC/D5B,EAAa4B,EACb9C,EAA0C,iBAA3BxC,GAAUD,EAAOyC,OAAyD,gBAA3BxC,GAAUD,EAAOyC,MAC3ExC,EAAUD,EAAOyC,MAASxC,EAAUD,EAAOyC,OAAS,GACxD/B,EAAQT,EAAUD,EAAOU,OAE7B,IAAIiN,EAMAA,GALCzN,oBAAkByD,IAAgBzD,oBAAkBD,EAAUD,EAAO+E,MAC1C,KAAzB9E,EAAUD,EAAO+E,IAIRA,EAAK,IAAMnD,EAHXmD,CAKhB,IAAI1C,GAAKqB,EAAc,MACnB0C,YAAsB,IAAVsH,EAAiB9I,WAASrC,MAAQqC,WAASvC,IAAM,KAAOnC,oBAAkBkG,GAAa,GAAKA,GACxGrB,GAAI4I,EAAWtH,MAAyC,KAAjCnC,EAAe6C,eAAoD,KAA5B7C,EAAe0J,UACvE9B,MAAiB,IAAV4B,EAAiBxJ,EAAe6C,cAAgB7C,EAAe0J,cA8BhF,OA3BIjK,IAAc1D,EAAU6F,eAAe9F,EAAOmH,UAAqD,UAAzClH,EAAUD,EAAOmH,SAASL,YACpFzE,EAAGsE,UAAUC,IAAIhC,WAASzB,UAE1BuK,EACArL,EAAG4J,UAAYxJ,GAGfJ,EAAGwE,aAAa,aAAc3G,oBAAkBQ,GAAS,OAASA,GAClE2B,EAAGwE,aAAa,OAAQ,UAEpBlD,GAAc1D,EAAU6F,eAAe9F,EAAOkH,iBAAmBjH,EAAUD,EAAOkH,iBAClFL,EAAaxE,EAAIpC,EAAUD,EAAOkH,iBAElCuG,EAAcjN,SAAWuD,EAAOmC,eAChCqG,SAAOkB,EAAepL,GAEtBsB,IAAe1D,EAAUD,EAAOiD,MAAShD,EAAUD,EAAOmG,gBAC1DlG,EAAUD,EAAOmG,eAAe0H,MAChCxL,EAAGH,YAAY4L,EAAUpK,EAAeC,EAAY3D,EAAQyC,EAAMgL,EAAe1J,EAAOmC,iBAGpFuH,EAAcjN,QAAUuD,EAAOmC,eAC/BqG,SAAOkB,EAAepL,GAE1BA,EAAGH,YAAYnB,SAASgN,eAAetL,MAGxCJ,EAEX,QAASwC,GAAeC,GAGpB,OACIzC,GAAI,KAAOyC,EAAa,QACxBxC,GAAI,KAAOwC,EAAa,eACxBvC,MAAO,KAAOuC,EAAa,cAC3BtC,KAAM,KAAOsC,EAAa,QAC1BrC,KAAM,KAAOqC,EAAa,QAC1BpC,MAAO,KAAOoC,EAAa,SAC3BnC,QAAS,YACTC,SAAU,aACVC,SAAU,aACVC,YAAa,iBACbC,SAAU,cACVC,MAAO,UACPC,IAAK,KAAO6B,EAAa,OACzB5B,YAAa,qBACbC,SAAU,aACVC,MAAO,KAAO0B,EAAa,OAC3BzB,YAAa,iBACbC,WAAY,gBACZC,UAAW,eAGnB,QAASuK,GAAUpK,EAAeC,EAAY3D,EAAQyC,EAAMgL,EAAeO,GACvE,GAAI/N,GAAYH,EAAe6D,EAAY3D,GACvCwH,GAASqG,KAAM5N,EAAUD,EAAOiD,KAEhChD,GAAU6F,eAAe9F,EAAOmG,gBAAkBlG,EAAUD,EAAOmG,iBACnEuB,QAAMF,EAAMvH,EAAUD,EAAOmG,gBAC7BqB,EAAKqG,KAAO5N,EAAUD,EAAOiD,KAAOhD,EAAUD,EAAOiD,KACjDhD,EAAUD,EAAOmG,eAAe0H,KAExC,IAAIC,EACJ,IAAKE,EAGA,CACDF,EAAYpK,EAAc,KAAO0C,UAAWxB,WAASnC,KAAO,IAAMmC,WAAS3B,KAC3E,IAAIgL,GAAgBvK,EAAc,OAAS0C,UAAWxB,WAAStB,YAC3DmK,IAAiBA,EAAcjN,QAC/B+L,SAAOkB,EAAeQ,GAE1BA,EAAc/L,YAAYnB,SAASgN,eAAetL,IAClD8J,UAAQ0B,GAAgBH,OATxBA,GAAYpK,EAAc,KAAO0C,UAAWxB,WAASnC,KAAO,IAAMmC,WAAS3B,IAAK/B,UAAWuB,GAY/F,OADAoE,GAAaiH,EAAWtG,GACjBsG,EAIX,QAASzI,GAAW3B,EAAe6B,EAAMtF,EAEzCD,EAAQoG,EAAWxC,EAASE,GACxB,GAGIoK,GACAR,EACA/J,EALAI,EAASC,YAAWC,EAAwBL,GAC5CM,EAAiBF,YAAWG,EAAuBJ,EAAOG,gBAC1DzB,EAAO8C,CAIS,iBAATA,IAAqC,gBAATA,KACnC5B,EAAa4B,EACb9C,EAAOxC,EAAUD,EAAOyC,OAAS,GAEjCyL,EAAOhO,oBAAkBD,EAAe,KAAMA,EAAUD,EAAO+E,IAAM9E,EAAe,IAEpFyN,KAASnI,EAAKO,eAAe,cAAeP,EAAKpF,WAGjDyD,GAAWA,EAAQuK,sBAEnB1L,EAAOA,EAEX,IAAIJ,GAAKqB,EAAc,MACnB0C,YAAsB,IAAVsH,EAAiB9I,WAASrC,MAAQqC,WAASvC,IAAM,KAAOnC,oBAAkBkG,GAAa,GAAKA,GACxGC,MAAyC,KAAjCnC,EAAe6C,eAAoD,KAA5B7C,EAAe0J,UACxD9B,MAAiB,IAAV4B,EAAiBxJ,EAAe6C,cAAgB7C,EAAe0J,cAQhF,KANgC,IAA3B1N,oBAAkBgO,GACnB7L,EAAGwE,aAAa,WAAYqH,GAG5B7L,EAAGwE,aAAa,WAAY7B,KAE5B0I,GAAS9J,GAAWA,EAAQ6I,cAAe,CAEvCV,EAAiBlL,EAAgB+C,EAAQ6I,cACzC3I,IAA2D,aAAtCA,EAAkB2B,iBAEnC4G,EAAkBN,EAAexG,EAAMzB,EAAmB,gBAAiBC,EAAOoI,kBAAmBpI,EAAOuI,iBAAkB,KAAMjK,KAEpIkK,SAAOF,EAAiBhK,GAI5BkK,SAAOR,EAAexG,EAAMzB,EAAmB,gBAAiBC,EAAOoI,kBAAmBpI,EAAOuI,kBAAmBjK,OAGvH,KAAKqL,GAAS9J,GAAWA,EAAQ9C,SAAU,CAE5C,GAAIiL,GAAiBlL,EAAgB+C,EAAQ9C,SAC7C,IAAIgD,GAA2D,aAAtCA,EAAkB2B,gBAAgC,CAEvE,GAAI4G,GAAkBN,EAAexG,EAAMzB,EAAmB,WAAYC,EAAOqI,aAAcrI,EAAOuI,iBAAkB,KAAMjK,EAC1HgK,IACAE,SAAOF,EAAiBhK,OAI5BkK,UAAOR,EAAexG,EAAMzB,EAAmB,WAAYC,EAAOqI,aAAcrI,EAAOuI,kBAAmBjK,OAG7G,CACD,GAAI+L,GAAW1K,EAAc,OACzB0C,UAAWxB,WAAS9B,YACpBuD,MAAuC,KAA/BnC,EAAemK,aAAuBvC,KAAM5H,EAAemK,iBAEvE,IAAI1K,IAAe1D,EAAUD,EAAOiD,MAAShD,EAAUD,EAAOmG,gBAC1DlG,EAAUD,EAAOmG,eAAe0H,MAChCO,EAASlM,YAAY4L,EAAUpK,EAAeC,EAAY3D,EAAQyC,EAAM,KAAMsB,EAAOmC,oBAEpF,CACD,GAAIkC,GAAU1E,EAAc,QACxB0C,UAAWxB,WAASnC,KACpB4D,MAAoC,KAA5BnC,EAAeoK,UAAoBxC,KAAM5H,EAAeoK,cAEhE1K,IAAWA,EAAQuK,oBACnB/F,EAAQ6D,UAAYxJ,EAGpB2F,EAAQlH,UAAYuB,EAExB2L,EAASlM,YAAYkG,GAEzB/F,EAAGH,YAAYkM,GAEnB,MAAO/L,GAWX,QAASoC,GAAWf,EAAe6K,EAAWnI,EAAWxC,GACrD,GAAIG,GAASC,YAAWC,EAAwBL,GAC5CM,EAAiBF,YAAWG,EAAuBJ,EAAOG,eAC9DU,YAAWC,EAAed,EAAOe,WACjC,IAAI+G,GAAYnI,EAAc,MAC1B0C,UAAWxB,WAAStC,GAAK,KAAOpC,oBAAkBkG,GAAa,GAAKA,GACpEC,MAAoC,KAA5BnC,EAAesK,UAAoB1C,KAAM5H,EAAesK,cAGpE,OADAjC,UAAOgC,EAAW1C,GACXA,EAYX,QAAS4C,GAAa/K,EAAe6K,EAAWnI,EAAWxC,GACvD,GAAIG,GAASC,YAAWC,EAAwBL,EAQhD,OAPAgB,YAAWC,EAAed,EAAOe,aAEiB,SAA9Bf,EAAOwJ,mBAAgC9G,UAAU8F,WACtD7I,EAAc,OACrB0C,UAAW,WAAarC,EAAOyJ,gBAAkB,KAC5CtN,oBAAkBkG,GAAa,GAAKA,MACxCmI,EAAUvN,cAAc,IAAM4D,WAAS9B,cACzCyL,EAp7BX/K,EAASkC,qBACLX,GAAI,KACJtC,KAAM,OACNQ,IAAK,MACLvC,MAAO,QACPgO,UAAW,YACXvH,QAAS,UACTtE,SAAU,WACVD,SAAU,WACV2D,QAAS,UACTV,MAAO,QACPuB,UAAW,YACXgG,YAAa,cACbnG,QAAS,UACTC,eAAgB,iBAChBf,cAAe,gBACfwB,gBAAiB,kBACjBJ,SAAU,WACV2B,QAAS,KACTY,OAAQ,KAEZ,IAAI3F,IACAnB,MAAO,EACPwL,SAAU,eACVZ,SAAU,eACV7G,cAAe,QACfuH,SAAU,YACVD,YAAa,gBAEbpK,GACAgC,cAAc,EACdK,UAAU,EACV6H,qBAAqB,EACrBb,gBAAgB,EAChBtN,OAAQwD,EAASkC,oBACjBxB,eAAgBC,EAChB8D,UAAW,GACXzB,UAAW,GACXuB,iBAAiB,EACjBe,UAAW,OACXhI,SAAU,KACV2L,cAAe,KACfkC,eAAgB,KAChBnB,gBAAiB,qBACjB1I,WAAY,OACZyI,mBAAoB,QACpBrH,eAAe,EA8BnB1C,GAASC,WAAaA,EAuBtBD,EAASe,oBAAsBA,EAyD/Bf,EAASkB,wBAA0BA,EAiKnClB,EAASgC,uBAAyBA,EAyBlChC,EAASgB,mBAAqBA,EA6B9BhB,EAAS0E,aAAeA,EAiBxB1E,EAASmF,QAAUA,EAqCnBnF,EAASqF,gBAAkBA,EAyB3BrF,EAAS6F,WAAaA,EAatB7F,EAAS4F,cAAgBA,EAqDzB5F,EAAS6G,sBAAwBA,EAoIjC7G,EAASoI,sBAAwBA,EAuCjCpI,EAASgJ,oBAAsBA,EAM/BhJ,EAASwB,WAAaA,EA4OtBxB,EAASiB,WAAaA,EAqBtBjB,EAASiL,aAAeA,GACzBjL,aAAaA,eE39BhB,IAAIoL,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBvO,OAAO0O,iBAChBC,uBAA2BxG,QAAS,SAAUqG,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEjJ,eAAeoJ,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASI,KAAOC,KAAKC,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEpG,UAAkB,OAANqG,EAAazO,OAAOgP,OAAOP,IAAMI,EAAGzG,UAAYqG,EAAErG,UAAW,GAAIyG,QAGnFI,EAA0C,SAAUC,EAAYvN,EAAQyH,EAAK+F,GAC7E,GAA2HX,GAAvHY,EAAIC,UAAUnP,OAAQoP,EAAIF,EAAI,EAAIzN,EAAkB,OAATwN,EAAgBA,EAAOnP,OAAOuP,yBAAyB5N,EAAQyH,GAAO+F,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAYvN,EAAQyH,EAAK+F,OACpH,KAAK,GAAIxK,GAAIuK,EAAWhP,OAAS,EAAGyE,GAAK,EAAGA,KAAS6J,EAAIU,EAAWvK,MAAI2K,GAAKF,EAAI,EAAIZ,EAAEc,GAAKF,EAAI,EAAIZ,EAAE7M,EAAQyH,EAAKkG,GAAKd,EAAE7M,EAAQyH,KAASkG,EAChJ,OAAOF,GAAI,GAAKE,GAAKtP,OAAO0P,eAAe/N,EAAQyH,EAAKkG,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,UACP9N,SAAU,WACV+N,QAAS,YACTC,WAAY,gBACZC,SAAU,cACVC,SAAU,cACVhO,YAAa,iBACbiO,aAAc,cACdC,cAAe,oBACfjO,SAAU,cACVkO,KAAM,SACNpE,OAAQ,gBACRqE,WAAY,eACZC,mBAAoB,wBACpB1O,KAAM,SACN2O,QAAS,aACTC,QAAS,YACT7O,KAAM,UACN8O,SAAU,cACVC,WAAY,gBACZC,gBAAiB,qBACjBC,SAAU,aACV9O,QAAS,UACT+O,UAAW,cACXC,aAAc,UACdC,cAAe,mBACfC,aAAc,kBACdC,iBAAkB,sBAClBC,cAAe,cACfC,wBAAyB,2BASzBC,EAA+B,SAAUC,GAEzC,QAASD,KACL,MAAkB,QAAXC,GAAmBA,EAAOC,MAAM/C,KAAMO,YAAcP,KAsC/D,MAxCAR,GAAUqD,EAAeC,GAIzB3C,GACI6C,WAAS,OACVH,EAAcvJ,UAAW,SAAM,IAClC6G,GACI6C,WAAS,SACVH,EAAcvJ,UAAW,WAAQ,IACpC6G,GACI6C,WAAS,cACVH,EAAcvJ,UAAW,gBAAa,IACzC6G,GACI6C,WAAS,cACVH,EAAcvJ,UAAW,gBAAa,IACzC6G,GACI6C,WAAS,YACVH,EAAcvJ,UAAW,cAAW,IACvC6G,GACI6C,WAAS,YACVH,EAAcvJ,UAAW,cAAW,IACvC6G,GACI6C,WAAS,UACVH,EAAcvJ,UAAW,YAAS,IACrC6G,GACI6C,WAAS,YACVH,EAAcvJ,UAAW,cAAW,IACvC6G,GACI6C,WAAS,YACVH,EAAcvJ,UAAW,cAAW,IACvC6G,GACI6C,WAAS,SACVH,EAAcvJ,UAAW,aAAU,IACtC6G,GACI6C,WAAS,mBACVH,EAAcvJ,UAAW,qBAAkB,IAC9C6G,GACI6C,WAAS,cACVH,EAAcvJ,UAAW,gBAAa,IAClCuJ,GACTI,iBAkBEC,EAA0B,SAAUJ,GASpC,QAASI,GAAS1O,EAASwE,GACvB,GAAImK,GAAQL,EAAOlQ,KAAKoN,KAAMxL,EAASwE,IAAYgH,IAKnD,OAJAmD,GAAMC,yBACND,EAAME,eACNF,EAAMG,gBACNH,EAAMI,iBACCJ,EA44DX,MA15DA3D,GAAU0D,EAAUJ,GAuBpBI,EAAS5J,UAAUkK,kBAAoB,SAAUC,EAASC,GACtD,IAAK,GAAI1S,GAAK,EAAGC,EAAKC,OAAOC,KAAKsS,GAAUzS,EAAKC,EAAGG,OAAQJ,IAExD,OADWC,EAAGD,IAEV,IAAK,iBACDgP,KAAK2D,kBACL,MACJ,KAAK,WACD3D,KAAK4D,YAAYF,EAAQlO,SACzB,MACJ,KAAK,SACDwK,KAAK6D,WACL,MACJ,KAAK,QACL,IAAK,SACD7D,KAAK8D,SACL,MACJ,KAAK,YACD9D,KAAK+D,cACL,MACJ,KAAK,SAED/D,KAAKgE,eAAepT,OAASoP,KAAKpP,OAAOqT,WACrCjE,KAAKkE,qBACLlE,KAAKmE,qBAAqBC,2BAG1BpE,KAAKqE,UAET,MACJ,KAAK,cACIrE,KAAKsE,WAAWlT,QACjB4O,KAAKvC,OAAOuC,KAAKuE,aAAa,EAAO,SAEzC,MACJ,KAAK,QACGvE,KAAKkE,qBACLlE,KAAKmE,qBAAqBC,2BAG1BpE,KAAKqE,UAET,MACJ,KAAK,aACDrE,KAAKvC,OAAOuC,KAAKuE,aAAa,EAAO,SACrC,MACJ,KAAK,uBACIzT,oBAAkBkP,KAAKwE,mBACxBC,SAAOzE,KAAKwE,kBAEhBxE,KAAK0E,SACL,MACJ,KAAK,eACL,IAAK,mBACG1E,KAAKkE,qBACLlE,KAAKmE,qBAAqBC,2BAG1BpE,KAAK2E,aAET,MACJ,KAAK,aACG3E,KAAKkE,qBACLlE,KAAKmE,qBAAqBC,2BAG1BpE,KAAKqE,UAET,MACJ,KAAK,YACL,IAAK,WACIrE,KAAKkE,sBACNlE,KAAK0E,SAET,MACJ,KAAK,WACG1E,KAAKkE,qBACLlE,KAAKmE,qBAAqBC,4BAG1BpE,KAAKgE,eAAe9M,SAAW8I,KAAK9I,SACpC8I,KAAK4E,UAAY5E,KAAK6E,WACtB7E,KAAK8E,sBASzB5B,EAAS5J,UAAUqK,iBAAmB,WAC9BzS,OAAOC,KAAK6O,KAAKlI,gBAAgB1G,QACjCiL,aAAW2D,KAAKhH,QAASgH,KAAKlI,iBAGtCoL,EAAS5J,UAAUsK,YAAc,SAAUmB,GACnC/E,KAAKxK,UACLoD,YAAUoH,KAAKhH,SAAUgH,KAAKxK,SAAS4G,MAAM,KAAK4I,OAAO,SAAUC,GAAO,MAAOA,MAEjFF,GACAG,eAAalF,KAAKhH,SAAU+L,EAAY3I,MAAM,KAAK4I,OAAO,SAAUC,GAAO,MAAOA,OAG1F/B,EAAS5J,UAAUwK,QAAU,WACzB9D,KAAKhH,QAAQf,MAAMkN,OAASC,aAAWpF,KAAKmF,QAC5CnF,KAAKhH,QAAQf,MAAMoN,MAAQD,aAAWpF,KAAKqF,OAC3CrF,KAAKsF,UAAWtF,KAAKhH,QAAQuM,cAEjCrC,EAAS5J,UAAUuK,UAAY,WAC3B7D,KAAKwF,cAAcxF,KAAKhH,QAASgH,KAAKyF,SAE1CvC,EAAS5J,UAAUyK,aAAe,WAC1B/D,KAAK0F,UACL1F,KAAKhH,QAAQzB,UAAUC,IAAI,SAG3BwI,KAAKhH,QAAQzB,UAAUgE,OAAO,UAGtC2H,EAAS5J,UAAUkM,cAAgB,SAAUxM,EAAS2M,GAC9CA,EACA3M,EAAQzB,UAAUgE,OAAO6F,EAAWY,SAGpChJ,EAAQzB,UAAUC,IAAI4J,EAAWY,UAIzCkB,EAAS5J,UAAUmE,OAAS,SAAUpK,EAAMuS,EAAUC,GAClD,OAAuBtU,KAAnByO,KAAK8F,WAA2B9F,KAAK+F,WAAY,CAC7C/F,KAAKjB,qBACLiB,KAAKgG,eAAgBzB,YAAa0B,qBAAmBC,SAASlG,KAAKuE,eAAgB,GAEvFvE,KAAK8F,UAAY9F,KAAK1L,cAAc,OAAS0C,UAAWoK,EAAW3D,QACnE,IAAI0I,GAAiBnG,KAAK1L,cAAc,QAAU0C,UAAWoK,EAAWU,WAAYhQ,UAAWkO,KAAKuE,cAChG6B,EAAUpG,KAAK1L,cAAc,OAAS0C,UAAWoK,EAAW/N,KAAMvB,UAAWqU,EAAeE,YAC5FC,EAAgBtG,KAAK1L,cAAc,OACnC0C,UAAWoK,EAAWhO,KAAO,IAAMgO,EAAWc,SAAW,IAAMd,EAAWe,WAC1ElL,OAASgB,MAAO,kBAIpB,IAFA+H,KAAK8F,UAAUhT,YAAYwT,GAC3BtG,KAAK8F,UAAUhT,YAAYsT,GACvBpG,KAAKT,eAAgB,CAErB,GAAI5C,GAAiB9K,UAAQmO,KAAKT,gBAC9BgH,EAAoBvG,KAAK1L,cAAc,OAAS0C,UAAWoK,EAAWW,qBAEtE9E,EAAkBN,KAAmBqD,KAAM6F,EAAM7F,KAAKwG,2BAA4B,KAAM,KAAMxG,KAAK8F,UACnG7I,IACAE,SAAOF,EAAiBsJ,GAE5BpJ,UAAQoJ,GAAoBvG,KAAK8F,WAE7B9F,KAAKyG,SACLzG,KAAK0G,uBAGT1G,KAAKT,gBAAkBS,KAAKuE,aAC5B6B,EAAQ7O,UAAUC,IAAI,UAE1BwI,KAAKhH,QAAQzB,UAAUC,IAAI,gBAC3BH,WAAS2I,KAAK8F,WAAY9F,KAAKhH,aAE9B,IAAIgH,KAAK8F,UACV,GAAI9F,KAAK+F,WAAY,CACjB/F,KAAK8F,UAAU7N,MAAMC,QAAU,EAC/B,IAAIkO,GAAUpG,KAAK8F,UAAUlU,cAAc,IAAMwP,EAAWU,YACxDwE,EAAgBtG,KAAK8F,UAAUlU,cAAc,IAAMwP,EAAWc,SAC9DlC,MAAKjB,sBACL1L,EAAO4S,qBAAmBC,SAAS7S,IAEvC+S,EAAQtU,UAAYuB,EAChB2M,KAAKT,gBAAkBqG,IACvBQ,EAAQO,cAAcpP,UAAUgE,OAAO,UACvCyE,KAAK8F,UAAUlU,cAAc,IAAMwP,EAAWW,oBAAoBxK,UAAUC,IAAI,kBAEhFwI,KAAKT,iBAAmBqG,IACxBQ,EAAQO,cAAcpP,UAAUC,IAAI,UACpCwI,KAAK8F,UAAUlU,cAAc,IAAMwP,EAAWW,oBAAoBxK,UAAUgE,OAAO,iBACnFyE,KAAK8F,UAAUlU,cAAc,IAAMwP,EAAWW,oBAAoBxK,UAAUC,IAAI,WAGhF8O,EAAcrO,MAAMC,SADP,IAAb0N,EAC8B,GAGA,WAIlC5F,MAAK8F,UAAU7N,MAAMC,QAAU,QAK3CgL,EAAS5J,UAAUsN,WAAa,SAAUC,EAAUC,EAAQC,GACxD,GAAI5D,GAAQnD,IACZ,IAAI6G,GAAYC,EAAQ,CACpB,GAAIE,GAASH,EAAS5O,MAAMgP,SACxBC,EAA8C,WAAhClH,KAAKhH,QAAQf,MAAMkP,SAAyBnH,KAAKhH,QAAQf,MAAMkP,SAAW,EAC5FN,GAAS5O,MAAMgP,SAAW,WAC1BJ,EAAStP,UAAUC,IAAI,SACvB,IAAI4P,OAAO,GACPC,EAAWrH,KAAKsH,UAAUD,QAC9B,IAAIrH,KAAKsH,UAAUC,OACfH,EAAQpH,KAAK0F,UAAYvE,EAAiBnB,KAAKsH,UAAUC,QAAU1G,EAAcb,KAAKsH,UAAUC,YAE/F,CAEDH,EAAOvG,EAA4B,UACnCkG,EAAU/G,KAAK0F,UACf2B,EAAW,EAEfrH,KAAKhH,QAAQf,MAAMkP,SAAW,SAC9BnH,KAAKwH,OAAOC,QAAQZ,GAChBa,MAAmB,IAAZX,EAAmBK,EAAK,GAAKA,EAAK,GACzCC,SAAUA,EACVM,eAAgB3H,KAAKsH,UAAUM,OAE/BC,IAAK,SAAUC,GACXjB,EAAS5O,MAAMC,QAAU,OACzBiL,EAAMnK,QAAQf,MAAMkP,SAAWD,EAC/BL,EAAS5O,MAAMgP,SAAWD,EAC1BH,EAAStP,UAAUgE,OAAO,aAGlCuL,EAAO7O,MAAMC,QAAU,GACvB8H,KAAKwH,OAAOC,QAAQX,GAChBY,MAAmB,IAAZX,EAAmBK,EAAK,GAAKA,EAAK,GACzCC,SAAUA,EACVM,eAAgB3H,KAAKsH,UAAUM,OAC/BC,IAAK,WACD1E,EAAM4E,QAAQ,qBAGtB/H,KAAKgI,MAAQlB,IAGrB5D,EAAS5J,UAAU2O,UAAY,WAC3B,GAAIjI,KAAKtO,SACL,IACQC,SAAS2J,iBAAiB0E,KAAKtO,UAAUN,QACzC4O,KAAKgG,eAAgBtU,SAAUC,SAASC,cAAcoO,KAAKtO,UAAUI,UAAUC,SAAU,GAGjG,MAAOC,GACHH,UAAQmO,KAAKtO,UAGrBsO,KAAKgE,gBACDtS,SAAUsO,KAAKtO,SACf6N,eAAgBS,KAAKT,eACrBlC,cAAe2C,KAAK3C,cAAea,gBAAgB,EAAMrF,UAAW,GACpE/D,gBACI0J,SAAU,WAAYY,SAAU,QAASF,SAAU,GACnDvH,cAAe,eAAgBsH,YAAa,gBAGhDrO,OAASoP,KAAKpP,OAAkB,WAChC8I,UAAWsG,KAAKtG,UAChBxC,SAAU8I,KAAK9I,SACfhB,YAAa8J,KAAKkI,eAAeC,KAAKnI,MACtChD,WAAiBgD,KAAKhH,QAAQrD,GAjWT,WAkWrBoH,gBAAsBiD,KAAKhH,QAAQrD,GAjWT,gBAkW1BoJ,oBAAqBiB,KAAKjB,qBAE9BiB,KAAKoI,kBAETlF,EAAS5J,UAAU8O,eAAiB,WAChCpI,KAAKsE,cACLtE,KAAKqI,kBACLrI,KAAK4E,aACL5E,KAAKsI,qBACLtI,KAAKuI,cAAe,EACpBvI,KAAKwI,gBACLxI,KAAKyI,WAAazI,KAAK0I,kBAAoB1I,KAAKyI,cAChDzI,KAAK2I,qBAA4B3I,KAAKhH,QAAQrD,GA/WrB,WAgXzBqK,KAAK4I,0BAAiC5I,KAAKhH,QAAQrD,GA/WrB,gBAgX9BqK,KAAKwG,2BAAkCxG,KAAKhH,QAAQrD,GA/WrB,iBAgX/BqK,KAAKwH,OAAS,GAAIqB,aAAU7I,KAAKqI,gBACjCrI,KAAK8I,cAAc9I,KAAKgI,OACxBhI,KAAK8I,cAAc9I,KAAKvD,WACxBuD,KAAK8I,cAAc9I,KAAK8F,WACxB9F,KAAK8I,cAAc9I,KAAKwE,kBACxBxE,KAAKgI,MAAQhI,KAAKvD,UAAYuD,KAAKpD,aAAeoD,KAAK8F,UAAY9F,KAAKwE,qBAAmBjT,IAE/F2R,EAAS5J,UAAU4O,eAAiB,SAAUa,GAC1C,GAAI5F,GAAQnD,IAIZ,IAHI+I,EAAK5S,KAAKoB,UAAUiC,SAAS4H,EAAWzN,YACxCqM,KAAKuI,cAAe,GAEpBvI,KAAKnJ,cAAgBmJ,KAAKgJ,UAAUD,EAAK5S,MAAO,CAChD,GACI8S,GADA1S,MAAkB,IAGtBA,EAAkB2S,iBAAelJ,KAAK1L,eAAe,GACjDf,SAAS,EAAOmS,UAAW1F,KAAK0F,UAChClQ,SAAU4L,EAAWsB,oBAETjL,aAAa,OAAQ,WACrC,IAAI0R,GAAiB5S,EAAgB3E,cAAc,IAAMwP,EAAWmB,aACpEwG,GAAK5S,KAAKoB,UAAUC,IAAI4J,EAAWuB,eACnCoG,EAAK5S,KAAKmB,kBAAkBC,UAAUC,IAAI4J,EAAWiB,UACnB,gBAAvBrC,MAAKzL,WAAW,IAAiD,gBAAvByL,MAAKzL,WAAW,IACjE0U,EAAcvY,EAAeqY,EAAKhT,QAASiK,KAAKgE,eAAepT,QAC3DoP,KAAK0I,oBAAsB5X,oBAAkBkP,KAAKyI,aAEpC,GADFzI,KAAKyI,WAAWW,UAAU,SAAUpX,GAAK,MAAOA,IAAKiX,EAAY9F,EAAMa,eAAepT,OAAO+E,IAAI+B,cAEzGsI,KAAKqJ,gBAAgBN,EAAMxS,GAG1B0S,EAAYjJ,KAAKgE,eAAepT,OAAO0O,YAC5CU,KAAKqJ,gBAAgBN,EAAMxS,IAGM,gBAAvByJ,MAAKzL,WAAW,IACA,gBAAvByL,MAAKzL,WAAW,KAA8D,IAA1CyL,KAAKwI,aAAajP,QAAQwP,EAAK1V,OAC1E2M,KAAKqJ,gBAAgBN,EAAMxS,GAE/BA,EAAgBkB,aAAa,eAAgB0R,EAAe5R,UAAUiC,SAAS4H,EAAW7N,SAAW,OAAS,SAC9GgD,EAAgBkB,aAAa,aAAc,YACb,SAA1BuI,KAAKsJ,kBACL/S,EAAgBgB,UAAUC,IAAI4J,EAAWqB,cACzCsG,EAAK5S,KAAKmB,kBAAkBC,UAAUC,IAAI4J,EAAWqB,cACrDsG,EAAK5S,KAAKmB,kBAAkBjF,aAAakE,EAAiBwS,EAAK5S,KAAKmB,kBAAkBoE,WAAW,MAGjGnF,EAAgBgB,UAAUC,IAAI4J,EAAWoB,eACzCuG,EAAK5S,KAAKmB,kBAAkBC,UAAUC,IAAI4J,EAAWoB,eACrDuG,EAAK5S,KAAKmB,kBAAkBxE,YAAYyD,IAE5CyJ,KAAKsI,kBAAkB7V,KAAKsW,EAAK5S,MACH,SAA1B6J,KAAKsJ,iBACLtJ,KAAKuJ,gBAAkBR,EAAK5S,KAAKmB,kBAAkB5E,SAAS,GAG5DsN,KAAKuJ,gBAAkBR,EAAK5S,KAAKmB,kBAAkBkS,mBAI/DtG,EAAS5J,UAAU+P,gBAAkB,SAAUN,EAAMxS,GACjDwS,EAAK5S,KAAKoB,UAAUC,IAAI4J,EAAW5N,UACnC+C,EAAgB3E,cAAc,IAAMwP,EAAWmB,cAAchL,UAAUC,IAAI4J,EAAW7N,SACtFgD,EAAgBkB,aAAa,eAAgB,SAOjDyL,EAAS5J,UAAUmQ,UAAY,SAAUtT,GACrC6J,KAAK0J,gBAAgBvT,GAAM,IAE/B+M,EAAS5J,UAAUoQ,gBAAkB,SAAUvT,EAAM5C,GACjD,GAAIyM,KAAKnJ,aAAc,CACnB,GAAIsI,GAAYhJ,CAIhB,IAHIA,YAAgBjF,SAAUiF,EAAK8J,cAAgB0J,gBAC/CxK,EAAYa,KAAK4J,sBAAsBzT,KAEtCrF,oBAAkBqO,GAAY,CAC/B,GAAIoD,GAAepD,EAAUvN,cAAc,IAAMwP,EAAWmB,eAC5C,IAAZhP,EACA4L,EAAU5H,UAAUC,IAAI4J,EAAW5N,UAGnC2L,EAAU5H,UAAUgE,OAAO6F,EAAW5N,WAE1B,IAAZD,EACAgP,EAAahL,UAAUC,IAAI4J,EAAW7N,SAGtCgP,EAAahL,UAAUgE,OAAO6F,EAAW7N,SAE7CgP,EAAaoE,cAAclP,aAAa,eAAgBlE,EAAU,OAAS,SAE/EyM,KAAK6J,oBAAoB1K,GACzBa,KAAK8J,qBAQb5G,EAAS5J,UAAUyQ,YAAc,SAAU5T,GACvC6J,KAAK0J,gBAAgBvT,GAAM,IAK/B+M,EAAS5J,UAAU0Q,cAAgB,WAC/BhK,KAAKiK,oBAAmB,IAK5B/G,EAAS5J,UAAU4Q,gBAAkB,WACjClK,KAAKiK,oBAAmB,IAE5B/G,EAAS5J,UAAU2Q,mBAAqB,SAAU1W,GAC9C,GAAIyM,KAAKnJ,aAAc,CACnB,IAAK,GAAIhB,GAAI,EAAGA,EAAImK,KAAKpD,aAAaxL,OAAQyE,IAAK,CAC/C,GAAIsU,GAAYnK,KAAKpD,aAAa/G,GAAGjE,cAAc,IAAMwP,EAAWmB,aAChE4H,KACI5W,EACK4W,EAAU5S,UAAUiC,SAAS4H,EAAW7N,UACzCyM,KAAKyJ,UAAUzJ,KAAKpD,aAAa/G,IAIjCsU,EAAU5S,UAAUiC,SAAS4H,EAAW7N,UACxCyM,KAAK+J,YAAY/J,KAAKpD,aAAa/G,KAK/CmK,KAAKkE,sBACLlE,KAAKmE,qBAAqBiG,YAAY7W,GAE1CyM,KAAK8J,qBAGb5G,EAAS5J,UAAUqL,YAAc,WAC7B,GAAI3E,KAAKnJ,aAML,IAAK,GALD+F,GAAevD,MAAMC,UAAU3G,MAAMC,KAAKoN,KAAKhH,QAAQsC,iBAAiB,IAAM8F,EAAWK,WACzFsH,GACA5S,SAAM5E,GAAWwE,YAASxE,GAAWgD,eAAYhD,GAAWX,WAAQW,GACpEiD,YAASjD,GAAW8B,KAAM,IAErBwC,EAAI,EAAGA,EAAI+G,EAAaxL,OAAQyE,IAAK,CAC1C,GAAImD,GAAU4D,EAAa/G,EAC3BkT,GAAK5S,KAAO6C,EAEZ+P,EAAKhT,QAAUiK,KAAKqK,YAAYrR,GAC5BA,EAAQpH,cAAc,IAAMwP,EAAWgB,kBACvCpC,KAAK8I,cAAc9P,EAAQpH,cAAc,IAAMwP,EAAWgB,kBAE9DpC,KAAKkI,eAAea,GAChBA,EAAK5S,KAAKoB,UAAUiC,SAAS4H,EAAW5N,WACxCwM,KAAKqJ,gBAAgBN,EAAMA,EAAK5S,KAAKvE,cAAc,IAAMwP,EAAWgB,sBAI3E,CAED,IAAK,GADDxF,GAAevD,MAAMC,UAAU3G,MAAMC,KAAKoN,KAAKhH,QAAQsC,iBAAiB,IAAM8F,EAAWuB,gBACpF9M,EAAI,EAAGA,EAAI+G,EAAaxL,OAAQyE,KACjCmD,EAAU4D,EAAa/G,IACnB0B,UAAUgE,OAAO6F,EAAW5N,UACpCwF,EAAQ1B,kBAAkBC,UAAUgE,OAAO6F,EAAWiB,UACtDrC,KAAK8I,cAAc9P,EAAQpH,cAAc,IAAMwP,EAAWgB,iBAE1DpC,MAAKsK,eACLtK,KAAKsK,cAAcnU,KAAKoB,UAAUC,IAAI4J,EAAW5N,YAO7D0P,EAAS5J,UAAUiR,kBAAoB,WAC/BvK,KAAKmE,sBACLnE,KAAKmE,qBAAqBoG,qBAGlCrH,EAAS5J,UAAUkR,aAAe,SAAUxY,GACxC,GAAIa,GAASb,EAAEa,MACfmN,MAAKyK,cAAgB5X,CACrB,IACI6X,GADAnT,EAAY1E,EAAO0E,SAEvB,IAAIA,EAAUiC,SAAS4H,EAAWc,WAAa3K,EAAUiC,SAAS4H,EAAWU,YACrE9B,KAAKnJ,cAAgBmJ,KAAKsE,WAAWtE,KAAKsE,WAAWlT,OAAS,IAC9D4O,KAAKkK,kBAETlK,KAAK2K,WAEJ,CACD,GAAI1X,GAAK2X,UAAQ/X,EAAOgY,WAAY,IAAMzJ,EAAWK,SAKrD,IAJW,OAAPxO,IACAA,EAAKJ,GAETmN,KAAK8K,cACD9K,KAAKyF,QAAUzF,KAAKnJ,cAAgBmJ,KAAKgJ,UAAU/V,GACnD,GAAIjB,EAAEa,OAAO0E,UAAUiC,SAAS4H,EAAWmB,cAAe,CAEtD,GADAtP,EAAGsE,UAAUC,IAAI4J,EAAWG,SACxBzQ,oBAAkBmC,EAAGrB,cAAc,IAAMwP,EAAW7N,UAAW,CAC/D,GAAIwV,IACAhT,YAASxE,GAAWgD,eAAYhD,GAAWX,WAAQW,GAAWiD,YAASjD,GACvE8B,SAAM9B,GAAW4E,KAAMlD,EAE3B+M,MAAKqJ,gBAAgBN,EAAMA,EAAK5S,KAAKvE,cAAc,IAAMwP,EAAWgB,sBAGpEpC,MAAK+J,YAAY9W,GACjBA,EAAGsE,UAAUC,IAAI4J,EAAWG,QAKhC,IAHIvB,KAAKkE,sBACLlE,KAAKmE,qBAAqB4G,cAAc9X,EAAIjB,GAE5CA,EAAG,CACH,GAAIgZ,GAAYhL,KAAKiL,gBAAgBhY,EAAIjB,GACrCmY,EAAYlX,EAAGrB,cAAc,IAAMwP,EAAWmB,aAClDjK,SAAM0S,GAAa1L,UAAW6K,EAAU5S,UAAUiC,SAAS4H,EAAW7N,WACtEyM,KAAK+H,QAAQ,SAAUiD,QAGtB/X,GAAGsE,UAAUiC,SAAS4H,EAAWzN,WACtCqM,KAAKkL,cACLlL,KAAKmL,eACLnL,KAAKmL,aAAalY,GAClB+M,KAAKoL,YAAYnY,EAAIjB,GACrBiB,EAAGsE,UAAUgE,OAAO6F,EAAW5N,YAG/BwM,KAAK+K,cAAc9X,EAAIjB,GACC,SAAnBa,EAAOyJ,UAA4C,YAAnBzJ,EAAOyJ,WACxCzJ,EAAO0E,UAAUC,IAAI,aACrBwI,KAAKyK,cAAgB5X,QAK7BmN,MAAKoL,YAAYnY,EAAIjB,GACG,SAAnBa,EAAOyJ,UAA4C,YAAnBzJ,EAAOyJ,WACxCzJ,EAAO0E,UAAUC,IAAI,aACrBwI,KAAKyK,cAAgB5X,EAG7B6X,GAAiBE,UAAQ5Y,EAAEa,OAAQ,MAC9B/B,oBAAkB4Z,IACfA,EAAenT,UAAUiC,SAAS,iBACjCxH,EAAEa,OAAO8T,cAAcpP,UAAUiC,SAAS,wBAC3CkR,EAAenT,UAAUC,IAAI4J,EAAWY,SAIpDhC,KAAK8J,oBAET5G,EAAS5J,UAAUwP,cAAgB,SAAU9P,GACzC,MAAOA,IAAWA,EAAQ6R,YAAc7R,EAAQ6R,WAAWQ,YAAYrS,IAE3EkK,EAAS5J,UAAUgS,aAAe,SAAUtZ,GACxC,GAAIuZ,GAAQX,UAAQ5Y,EAAEa,OAAOgY,WAAY,IAAMzJ,EAAWK,SAC1DzB,MAAKwL,WAAWD,IAGpBrI,EAAS5J,UAAUmS,aAAe,SAAUzZ,GACxCgO,KAAKkL,eAEThI,EAAS5J,UAAUoS,eAAiB,SAAU1Z,EAAG6V,GAE7C,GADA7V,EAAE2Z,iBACEza,OAAOC,KAAK6O,KAAKzL,YAAYnD,QAAU4O,KAAKgI,MAAO,CACnD,GAAI/U,GAAK+M,KAAKgI,MAAM1M,iBAAiB,IAAM8F,EAAWK,UAClDmK,EAAiB5L,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWG,UAC3DvB,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAW5N,SAC1CoY,KACAA,EAAerU,UAAUgE,OAAO6F,EAAWG,SACtCvB,KAAKnJ,cACN+U,EAAerU,UAAUgE,OAAO6F,EAAW5N,UAGnD,IAAIhB,GAASqV,EAAU5U,EAAG7B,OAAS,EAAhB,CACf6B,GAAGT,GAAO+E,UAAUiC,SAAS4H,EAAWzN,WAAaqM,KAAKnJ,aAC1D5D,EAAGT,GAAO+E,UAAUC,IAAI4J,EAAWG,SAGnCvB,KAAKoL,YAAYnY,EAAGT,GAAQR,GAE5BiB,EAAGT,GACHwN,KAAKhH,QAAQvB,aAAa,wBAAyBxE,EAAGT,GAAOmD,GAAG+B,YAGhEsI,KAAKhH,QAAQpB,gBAAgB,2BAIzCsL,EAAS5J,UAAUuS,eAAiB,SAAU7Z,EAAG8Z,GAC7C,GAAI5S,GACAjG,CA+BJ,QA9BgBnC,oBAAkBkP,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWzN,YAC5DqM,KAAKnJ,cACjB5D,EAAK+M,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWG,UAAYvB,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAW5N,UACrG0F,EAAY9E,WAAS0E,aAAakH,KAAKgI,MAAM1M,iBAAiB,IAAM8F,EAAWK,UAAWxO,EAAI6Y,GACzFhb,oBAAkBoI,KACfjG,IACAA,EAAGsE,UAAUgE,OAAO6F,EAAWG,SAC1BvB,KAAKnJ,cACN5D,EAAGsE,UAAUgE,OAAO6F,EAAW5N,WAGnC0F,EAAU3B,UAAUiC,SAAS4H,EAAWzN,WAAaqM,KAAKnJ,aAC1DqC,EAAU3B,UAAUC,IAAI4J,EAAWG,SAGnCvB,KAAKoL,YAAYlS,EAAWlH,MAKpCiB,EAAK+M,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAW5N,UAC/C0F,EAAY9E,WAAS0E,aAAakH,KAAKgI,MAAM1M,iBAAiB,IAAM8F,EAAWK,UAAWxO,EAAI6Y,GAC9F9L,KAAKoL,YAAYlS,EAAWlH,IAE5BkH,EACA8G,KAAKhH,QAAQvB,aAAa,wBAAyByB,EAAUvD,GAAG+B,YAGhEsI,KAAKhH,QAAQpB,gBAAgB,yBAE1BsB,GAEXgK,EAAS5J,UAAUyS,gBAAkB,SAAU/Z,EAAG8Z,GAC9C,GAAI3I,GAAQnD,IAEZ,IADAhO,EAAE2Z,iBACEza,OAAOC,KAAK6O,KAAKzL,YAAYnD,QAAU4O,KAAKgI,MAAO,CACnD,GAAI9O,GAAY8G,KAAK6L,eAAe7Z,EAAG8Z,GACnCE,EAAahM,KAAKhH,QAAQiT,wBAAwBC,IAClDC,EAAgBnM,KAAKhH,QAAQiT,wBAAwB9G,OACrDiH,EAAkBpM,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWK,UAAUwK,wBACtEI,MAAa,GACbC,MAAkB,EAItB,IAHItM,KAAKpP,OAAOkJ,UACZwS,EAAkBtM,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWQ,eAAeqK,yBAE3E/S,EAAW,CACX,GAAIqT,GAAarT,EAAU+S,wBAAwBC,IAC/CM,EAAgBtT,EAAU+S,wBAAwB9G,MACtD,IAAK2G,GAcDO,EAAarM,KAAKsF,SAAWiH,EAAcA,EAAaP,GACvC,KACS,IAAlBhM,KAAKsF,SACLmH,OAAOC,OAAO,EAAGC,YAAcN,GAG/BrM,KAAKhH,QAAQ4T,UAAY5M,KAAKhH,QAAQ4T,UAAYP,OApBnD,CACP,GAAIlH,GAASnF,KAAKsF,SAAWmH,OAAOI,YAAcV,GAClDE,EAAarM,KAAKsF,SAAYiH,EAAaC,EACrCD,EAAaP,EAAcQ,GAChBrH,KACS,IAAlBnF,KAAKsF,SACLmH,OAAOC,OAAO,EAAGC,aAAeN,EAAalH,IAG7CnF,KAAKhH,QAAQ4T,UAAY5M,KAAKhH,QAAQ4T,WAAaP,EAAalH,SAgB3E,IAAInF,KAAKkE,sBAAwB4H,GAAQ9L,KAAKmE,qBAAqB2I,aACpE9M,KAAK+M,aAAe,WAChB5J,EAAM0I,eAAe7Z,EAAG8Z,GACxB3I,EAAM4J,iBAAexb,IAEzB8a,EAAarM,KAAKmE,qBAAqB6I,gBACjB,IAAlBhN,KAAKsF,SACLmH,OAAOC,OAAO,EAAGC,YAAcN,GAG/BrM,KAAKhH,QAAQ4T,UAAY5M,KAAKhH,QAAQ4T,UAAYP,MAGrD,IAAIP,EACL,GAAI9L,KAAK+F,YAAc/F,KAAK8F,UAAW,CACnC,GAAImH,GAAYX,EAAkBA,EAAgBJ,IAAME,EAAgBF,IACpEgB,EAAelN,KAAK8F,UAAUmG,uBAClCI,GAAaa,EAAahB,IAAM,EAAKgB,EAAa/H,OAAS8H,EAAa,GAClD,IAAlBjN,KAAKsF,SACLmH,OAAOC,OAAO,EAAGC,YAAcN,GAG/BrM,KAAKhH,QAAQ4T,UAAY,MAGxB5M,MAAKpP,OAAOkJ,UACjBuS,EAAarM,KAAKsF,SAAYgH,EAAgBJ,IAAM,EAAII,EAAgBJ,IAAM,EACzEF,EAAaI,EAAgBF,IAAOI,EAAgBnH,QACnC,IAAlBnF,KAAKsF,SACLmH,OAAOC,OAAO,EAAGC,YAAcN,GAG/BrM,KAAKhH,QAAQ4T,UAAY5M,KAAKhH,QAAQ4T,UAAYP,KAMtEnJ,EAAS5J,UAAU6T,gBAAkB,SAAUnb,GAC3C,GAAId,OAAOC,KAAK6O,KAAKzL,YAAYnD,QAAU4O,KAAKgI,MAAO,CACnD,GAAIrU,IAAY7C,oBAAkBkP,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWzN,WACxEV,EAAK+M,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWG,QAC/C5N,IAAYV,IACZA,EAAGsE,UAAUgE,OAAO6F,EAAWG,SAC3BvB,KAAKnJ,eACLmJ,KAAKmL,eACLnL,KAAKmL,aAAalY,GAClB+M,KAAKkL,eAETlL,KAAKoL,YAAYnY,EAAIjB,MAIjCkR,EAAS5J,UAAU8T,gBAAkB,SAAUpb,GAE3C,GADAA,EAAE2Z,iBACE3L,KAAKyF,QAAUzF,KAAKnJ,cAAgB3F,OAAOC,KAAK6O,KAAKzL,YAAYnD,QAAU4O,KAAKgI,MAAO,CACvF,GAAI/U,GAAK+M,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWG,SAC/ChL,MAAkB,GAClB4T,MAAY,EAChB,KAAKrZ,oBAAkBmC,IAAOnC,oBAAkBmC,EAAGrB,cAAc,IAAMwP,EAAW7N,UAAW,CACzF,GAAIwV,IACAhT,YAASxE,GAAWgD,eAAYhD,GAAWX,WAAQW,GAAWiD,YAASjD,GACvE8B,SAAM9B,GAAW4E,KAAMlD,EAE3BsD,GAAkBwS,EAAK5S,KAAKvE,cAAc,IAAMwP,EAAWgB,iBAC3DpC,KAAKqJ,gBAAgBN,EAAMxS,GAC3B4T,EAAY5T,EAAgB3E,cAAc,IAAMwP,EAAWmB,aAAe,IAAMnB,EAAWhO,UAG3F4M,MAAK+J,YAAY9W,EAErB,IAAI+X,GAAYhL,KAAKiL,gBAAgBhY,EAAIjB,EACzCsG,SAAM0S,GAAa1L,YAAW6K,GAAYA,EAAU5S,UAAUiC,SAAS4H,EAAW7N,WAClFyM,KAAK+H,QAAQ,SAAUiD,GACvBhL,KAAK8J,qBAGb5G,EAAS5J,UAAU+T,iBAAmB,SAAUrb,GAC5C,OAAQA,EAAEsb,SACN,IAAK,IACDtN,KAAK0L,eAAe1Z,EACpB,MACJ,KAAK,IACDgO,KAAK0L,eAAe1Z,GAAG,EACvB,MACJ,KAAK,IACDgO,KAAK+L,gBAAgB/Z,EACrB,MACJ,KAAK,IACDgO,KAAK+L,gBAAgB/Z,GAAG,EACxB,MACJ,KAAK,IACDgO,KAAKmN,gBAAgBnb,EACrB,MACJ,KAAK,GACGgO,KAAKnJ,cAAgBmJ,KAAKsE,WAAWtE,KAAKsE,WAAWlT,OAAS,IAC9D4O,KAAKkK,kBAETlK,KAAK2K,MACL,MACJ,KAAK,KACG7Z,oBAAkBkP,KAAKyK,gBAAoBzK,KAAKyK,cAAclT,UAAUiC,SAAS,cACjFwG,KAAKoN,gBAAgBpb,KAKrCkR,EAAS5J,UAAUiU,mBAAqB,SAAUvb,GACrB,UAArBA,EAAEwb,gBAA8Bxb,EAAEyb,SA/0B1B,IA+0B+E,aAAzBzb,EAAE0b,cAAc1Y,OAC1EgL,KAAKnJ,cAAgBmJ,KAAKsE,WAAWtE,KAAKsE,WAAWlT,OAAS,IAC9D4O,KAAKkK,kBAETlK,KAAK2K,SAGbzH,EAAS5J,UAAUqU,SAAW,WAC1B,GAAIzc,OAAOC,KAAK6O,KAAKzL,YAAYnD,QAAU4O,KAAKgI,MAAO,CACnD,GAAI4D,GAAiB5L,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWG,QAC3DqK,KACAA,EAAerU,UAAUgE,OAAO6F,EAAWG,SACtCvB,KAAKnJ,cACNmJ,KAAK4N,WAAWrW,UAAUC,IAAI4J,EAAW5N,aAKzD0P,EAAS5J,UAAUuU,WAAa,WAC5BC,eAAatW,IAAIwI,KAAKhH,QAAS,UAAWgH,KAAKqN,iBAAkBrN,MACjE8N,eAAatW,IAAIwI,KAAKhH,QAAS,QAASgH,KAAKwK,aAAcxK,MAC3D8N,eAAatW,IAAIwI,KAAKhH,QAAS,YAAagH,KAAKsL,aAActL,MAC/D8N,eAAatW,IAAIwI,KAAKhH,QAAS,WAAYgH,KAAKyL,aAAczL,MAC9D8N,eAAatW,IAAIwI,KAAKhH,QAAS,WAAYgH,KAAK2N,SAAU3N,MAC1DA,KAAK+N,YAAc,GAAIC,SAAMhO,KAAKhH,SAAWiV,MAAOjO,KAAKuN,mBAAmBpF,KAAKnI,SAErFkD,EAAS5J,UAAU4U,aAAe,WAC9BJ,eAAavS,OAAOyE,KAAKhH,QAAS,QAASgH,KAAKwK,cAChDsD,eAAavS,OAAOyE,KAAKhH,QAAS,YAAagH,KAAKsL,cACpDwC,eAAavS,OAAOyE,KAAKhH,QAAS,WAAYgH,KAAKyL,cACnDqC,eAAavS,OAAOyE,KAAKhH,QAAS,YAAagH,KAAKsL,cACpDwC,eAAavS,OAAOyE,KAAKhH,QAAS,WAAYgH,KAAKyL,cACnDzL,KAAK+N,YAAYI,WAErBjL,EAAS5J,UAAUwR,YAAc,WAE7B,IAAK,GAAI9Z,GAAK,EAAGod,EADDpO,KAAKhH,QAAQsC,iBAAiB,IAAM8F,EAAWG,SACrBvQ,EAAKod,EAAYhd,OAAQJ,IACrDod,EAAYpd,GAClBuG,UAAUgE,OAAO6F,EAAWG,UAGxC2B,EAAS5J,UAAU4R,YAAc,WAC7B,GAAImD,GAAUrO,KAAKhH,QAAQpH,cAAc,IAAMwP,EAAWE,MACtD+M,IACAA,EAAQ9W,UAAUgE,OAAO6F,EAAWE,QAG5C4B,EAAS5J,UAAU6R,aAAe,SAAUlY,GACxC,GAAInC,oBAAkBmC,GAElB,IAAK,GAAIjC,GAAK,EAAGsd,EADAtO,KAAKhH,QAAQsC,iBAAiB,IAAM8F,EAAW5N,UACpBxC,EAAKsd,EAAald,OAAQJ,IAAM,CACxE,GAAIud,GAAMD,EAAatd,EACnBgP,MAAKnJ,cAAgB0X,EAAI3c,cAAc,IAAMwP,EAAW7N,UAIxDgb,EAAIhX,UAAUgE,OAAO6F,EAAW5N,cAKxCP,GAAGsE,UAAUgE,OAAO6F,EAAW5N,WAGvC0P,EAAS5J,UAAU0P,UAAY,SAAU/V,GACrC,MAAQA,IAAMA,EAAGsE,UAAUiC,SAAS4H,EAAWK,YACvCxO,EAAGsE,UAAUiC,SAAS4H,EAAWQ,iBACjC3O,EAAGsE,UAAUiC,SAAS4H,EAAWY,UAE7CkB,EAAS5J,UAAUyR,cAAgB,SAAU9X,EAAIjB,GAC7C,GAAIgO,KAAKgJ,UAAU/V,IAAO+M,KAAKyF,QAAUzF,KAAKnJ,aAAc,CACpDmJ,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWG,UAC1CvB,KAAKgI,MAAMpW,cAAc,IAAMwP,EAAWG,SAAShK,UAAUgE,OAAO6F,EAAWG,QAEnF,IAAIiN,GAAgBvb,EAAGrB,cAAc,aAAeqB,EAAGrB,cAAc,QACrEqB,GAAGsE,UAAUC,IAAI4J,EAAWG,SACvBzQ,oBAAkBkB,IACfA,EAAEa,SAAW2b,GACbA,EAAcjX,UAAUC,IAAI,YAGpC,IAAIjB,GAAkBtD,EAAGrB,cAAc,IAAMwP,EAAWgB,iBACpD+H,EAAY5T,EAAgB3E,cAAc,IAAMwP,EAAWmB,aAAe,IAAMnB,EAAWhO,KAC/F4M,MAAKkL,cACAf,EAAU5S,UAAUiC,SAAS4H,EAAW7N,UAKzC4W,EAAU5S,UAAUgE,OAAO6F,EAAW7N,SACtCN,EAAGsE,UAAUgE,OAAO6F,EAAW5N,YAL/B2W,EAAU5S,UAAUC,IAAI4J,EAAW7N,SACnCN,EAAGsE,UAAUC,IAAI4J,EAAW5N,WAMhC+C,EAAgBkB,aAAa,eAAgB0S,EAAU5S,UAAUiC,SAAS4H,EAAW7N,SACjF,OAAS,QACb,IAAIyX,GAAYhL,KAAKiL,gBAAgBhY,EAAIjB,EACzCsG,SAAM0S,GAAa1L,UAAW6K,EAAU5S,UAAUiC,SAAS4H,EAAW7N,WAClEyM,KAAKkE,sBACLlE,KAAKmE,qBAAqB4G,cAAc9X,EAAIjB,GAEhDgO,KAAK+H,QAAQ,SAAUiD,GACvBhL,KAAK6J,oBAAoB5W,GACzB+M,KAAKyO,cAAcxb,KAG3BiQ,EAAS5J,UAAU2R,gBAAkB,SAAUhY,EAAIjB,GAC/C,GAEI0c,GAFA1S,EAAOgE,KAAKqK,YAAYpX,GACxBpC,EAAYH,EAAesL,EAAMgE,KAAKgE,eAAepT,OAIrD8d,IAFC5d,oBAAkBkL,IACc,gBAAvBgE,MAAKzL,WAAW,IAAiD,gBAAvByL,MAAKzL,WAAW,IACnD4B,KAAMlD,EAAII,KAAMJ,GAAMA,EAAG4J,UAAU9K,OAAQiK,KAAMgE,KAAKzL,aAM/D4B,KAAMlD,EAAII,KAAMxC,GAAaA,EAAUmP,KAAKgE,eAAepT,OAAOyC,MAElE2I,KAAMA,EAGlB,IAAIgP,KAKJ,OAJA1S,SAAM0S,EAAW0D,GACb1c,GACAsG,QAAM0S,GAAa2D,cAAc,EAAMC,MAAO5c,EAAG6c,QAAQ,EAAOrc,MAAOwN,KAAKgI,OAAS3O,MAAMC,UAAUC,QAAQ3G,KAAKoN,KAAKgI,MAAMtV,SAAUO,KAEpI+X,GAEX9H,EAAS5J,UAAUuQ,oBAAsB,SAAU5W,GAC/C,GAAI+I,GAAOgE,KAAKqK,YAAYpX,GAExBpC,EAAYH,EAAesL,EAAMgE,KAAKgE,eAAepT,OACpDE,qBAAkBkL,IAAyC,gBAAvBgE,MAAKzL,WAAW,IACtB,gBAAvByL,MAAKzL,WAAW,GAQxByL,KAAKsK,eACDnU,KAAMlD,EAENI,KAAMxC,GAAaA,EAAUmP,KAAKgE,eAAepT,OAAOyC,MAExD2I,KAAMA,GAZVgE,KAAKsK,eACDnU,KAAMlD,EACNI,KAAMJ,GAAMA,EAAG4J,UAAU9K,OACzBiK,KAAMgE,KAAKzL,aAavB2O,EAAS5J,UAAU8R,YAAc,SAAUnY,EAAIjB,GAC3C,GAAImR,GAAQnD,IACZ,IAAIA,KAAKgJ,UAAU/V,KAAQA,EAAGsE,UAAUiC,SAAS4H,EAAW5N,WAAawM,KAAKyF,OAAQ,CAC7EzF,KAAKnJ,cACNmJ,KAAKmL,eAETlY,EAAGsE,UAAUC,IAAI4J,EAAW5N,UAC5BwM,KAAKkL,cACLlL,KAAK6J,oBAAoB5W,GACrB+M,KAAKkE,sBACLlE,KAAKmE,qBAAqBiH,YAAYnY,EAAIjB,EAE9C,IAAIgZ,GAAYhL,KAAKiL,gBAAgBhY,EAAIjB,EACzCgO,MAAK+H,QAAQ,SAAUiD,EAAW,SAAU8D,GACnCA,EAAaD,SACd1L,EAAMyK,WAAa3a,EACnBkQ,EAAMsL,cAAcxb,QAKpCiQ,EAAS5J,UAAUkS,WAAa,SAAUvY,GACtC,GAAI+M,KAAKgJ,UAAU/V,KAAQA,EAAGsE,UAAUiC,SAAS4H,EAAWE,QAAUtB,KAAKyF,OAAQ,CAC/E,GAAIsJ,GAAS/O,KAAKhH,QAAQsC,iBAAiB,IAAM8F,EAAWE,MACxDyN,IAAUA,EAAO3d,QACjB8T,cAAY6J,EAAQ3N,EAAWE,OAE9BrO,EAAGsE,UAAUiC,SAAS4H,EAAW5N,YAAawM,KAAKnJ,cACpD5D,EAAGsE,UAAUC,IAAI4J,EAAWE,SAKxC4B,EAAS5J,UAAUuL,SAAW,WAC1B,GAAImK,GAAYhP,KAAKsE,UACrB,IAAI0K,EAAU5d,OAAQ,CAElB,IAAK,GADD2I,GAAKiG,KAAKiP,UACLje,EAAK,EAAGke,EAAcF,EAAWhe,EAAKke,EAAY9d,OAAQJ,IAAM,CACrE,GAAIsJ,GAAM4U,EAAYle,GAClBme,IAEJA,GAAMnP,KAAKpP,OAAO+E,IAAM2E,EACxB0F,KAAKoP,UAAYpP,KAAKqP,eAAetV,EAAIoV,EACzC,IAAIte,GAAYH,EAAesP,KAAKoP,UAAWpP,KAAKgE,eAAepT,OACnEmJ,GAAKiG,KAAKoP,UAAYve,EAAUmP,KAAKpP,OAAO6F,OAASsD,EAEzD,MAAOA,GAEX,MAAOiG,MAAKiP,WAEhB/L,EAAS5J,UAAU+Q,YAAc,SAAUpX,GACvC,GAGIqc,GAHA/a,EAAayL,KAAKzL,qBAAsBwG,eACxCiF,KAAKiP,UAAYjP,KAAKzL,WACtB3D,EAASoP,KAAKuP,cAActc,EAQhC,OALIqc,GADAxe,oBAAkBkP,KAAKhH,QAAQpH,cAAc,IAAMwP,EAAWzN,YAAcqM,KAAKpP,OAAOkJ,QAChFkG,KAAK4E,UAGLrQ,EAELyL,KAAKqP,eAAeC,EAAO1e,IAEtCsS,EAAS5J,UAAU+V,eAAiB,SAAU9a,EAAY3D,EAAQ4e,GAC9D,GACIC,GADAtM,EAAQnD,IAmCZ,OAjCIzL,IAAcA,EAAWnD,QAAUR,EACnC2D,EAAWmb,KAAK,SAAU1T,GACtB,GAAInL,GAEJH,EAAesL,EAAMmH,EAAMa,eAAepT,OAE1C,KAAKA,EAAOuS,EAAMvS,OAAO+E,MAAO/E,EAAOuS,EAAMvS,OAAOyC,OAC9CzC,EAAOuS,EAAMvS,OAAO+E,OAAS7E,oBAAkBD,EAAUsS,EAAMvS,OAAO+E,MACpE9E,EAAUsS,EAAMvS,OAAO+E,IAAI+B,cAAgB9G,EAAOuS,EAAMvS,OAAO+E,IAAI+B,YACrE9G,EAAOuS,EAAMvS,OAAOyC,OAASxC,EAAUsS,EAAMvS,OAAOyC,QAAUzC,EAAOuS,EAAMvS,OAAOyC,MAGnF,GAAoB,gBAAT2I,KAAmD,IAA9BzH,EAAWgF,QAAQyC,GACpDyT,EAAcD,EAASjb,EAAayH,MAEnC,KAAKlL,oBAAkBF,EAAOuS,EAAMvS,OAAO+E,MAAQ7E,oBAAkBD,EAAUsS,EAAMvS,OAAO+E,KAAM,CACnG,GAAI1C,GAAKkQ,EAAMnK,QAAQpH,cAAc,cAC/BhB,EAAOuS,EAAMvS,OAAO+E,IAAM,KAE5B1C,IAAMA,EAAG4J,UAAU9K,SAAWlB,EAAUsS,EAAMvS,OAAOyC,QACrDoc,EAAazT,OAIZnL,GAAU6F,eAAeyM,EAAMvS,OAAO6F,QAAU5F,EAAUsS,EAAMvS,OAAO6F,OAAOrF,SACnFqe,EAAatM,EAAMkM,eAAexe,EAAUsS,EAAMvS,OAAO6F,OAAQ7F,EAAQ4e,QAfzEC,GAAcD,EAASjb,EAAayH,CAiBxC,SAASyT,IAIbA,EAAalb,EAEVkb,GAEXvM,EAAS5J,UAAUqW,SAAW,WAC1B,GAAIC,MACAjV,EAASqF,KAAKrF,MAAQqF,KAAKrF,MAAQ,GAAId,QAC3C,KAAKmG,KAAKrF,MAAO,CAEb,IAAK,GAAI3J,GAAK,EAAGC,EAAKC,OAAOC,KAAK6O,KAAKpP,OAAOqT,YAAajT,EAAKC,EAAGG,OAAQJ,IAAM,CAC7E,GAAI6e,GAAS5e,EAAGD,EACD,eAAX6e,GAA6B7P,KAAKpP,OAAO,GAAKif,IAC9C7P,KAAKpP,OAAO,GAAKif,KACbzb,WAASkC,oBAAoB,GAAKuZ,KACY,IAA/CD,EAAQrW,QAAQyG,KAAKpP,OAAO,GAAKif,KACpCD,EAAQnd,KAAKuN,KAAKpP,OAAO,GAAKif,IAGtClV,EAAMmV,OAAOF,GAET5P,KAAKpP,OAAOqT,WAAWvN,eAAe,cACtCiE,EAAMzI,KAAK8N,KAAKpP,OAAOmf,WAG/B,MAAOpV,IAEXuI,EAAS5J,UAAU0W,kBAAoB,SAAUzb,OAC1B,KAAfA,IAAyBA,EAAayL,KAAKiP,UAE/C,IAAIgB,GAAcnf,oBAAkBkP,KAAKpP,OAAO8J,QAAWsF,KAAKpP,OAAOyC,KAAO2M,KAAKpP,OAAO8J,OACtFC,EAAQvG,WAAS6F,WAAW+F,KAAKtG,UAAWuW,EAC5C1b,IAAcyL,KAAKpP,OAAOkJ,QACH,SAAnBkG,KAAKtG,UACLsG,KAAK4E,UAAYxQ,WAASqF,gBAAgBrF,WAAS4F,cAAczF,EAAYoG,GAAQqF,KAAKgE,eAAepT,OAAQoP,KAAKtG,WAGtHsG,KAAK4E,UAAYxQ,WAASqF,gBAAgBlF,EAAYyL,KAAKgE,eAAepT,OAAQoP,KAAKtG,WAGtFnF,GAAiC,SAAnByL,KAAKtG,UACxBsG,KAAK4E,UAAYxQ,WAAS4F,cAAczF,EAAYoG,GAGpDqF,KAAK4E,UAAYrQ,GAGzB2O,EAAS5J,UAAU4W,cAAgB,WAC/B,MAAOlQ,MAAKgI,MAAMzQ,UAAUiC,SAAS,eAEzC0J,EAAS5J,UAAU6W,kBAAoB,SAAUne,EAAGoe,GAC5CpQ,KAAKqQ,cAGTrQ,KAAKiP,UAAYjd,EAAEse,OACnBF,EAAkBtH,cAAcsH,EAAkB5L,kBAClDxE,KAAKuQ,aACLvQ,KAAK+H,QAAQ,iBAAkB/V,KAEnCkR,EAAS5J,UAAUkX,qBAAuB,SAAUxe,GAC5CgO,KAAKqQ,aAGTrQ,KAAK+H,QAAQ,gBAAiB/V,IAElCkR,EAAS5J,UAAUmX,aAAe,WAC9B,GAAItN,GAAQnD,IACZA,MAAK+H,QAAQ,cAEb,IAAIqI,GAAoBpQ,IACxB,IAAIA,KAAKzL,qBAAsBwG,eACvBiF,KAAKzL,WAAWmc,MAChB1Q,KAAKzL,WAAWmc,MAAMC,KAAK,SAAU3e,GAEjCmR,EAAMyN,UAAYzN,EAAM5O,WAAWA,WAAWsc,QAC1C1N,EAAM5O,qBAAsBwG,gBAAeoI,EAAMyN,WACjDzN,EAAMgN,kBAAkBne,EAAGoe,KAEhCU,MAAM,SAAU9e,GACfmR,EAAMqN,qBAAqBxe,KAI/BgO,KAAKzL,WAAWwc,aAAa/Q,KAAK2P,YAAYgB,KAAK,SAAU3e,GACzDmR,EAAMgN,kBAAkBne,EAAGoe,KAC5BU,MAAM,SAAU9e,GACfmR,EAAMqN,qBAAqBxe,SAIlC,IAAKgO,KAAKzL,YAAeyL,KAAKzL,WAAWnD,OAW1C4O,KAAKiP,UAAYjP,KAAKzL,WACtByL,KAAKuQ,aACLvQ,KAAK+H,QAAQ,kBAAoB/L,KAAMgE,KAAKiP,gBAbM,CAClD,GAAI/b,GAAK8M,KAAKhH,QAAQpH,cAAc,KAChCsB,KACAqI,SAAOrI,GACP8M,KAAKgG,eAAgBzR,WAAYH,WAAS6G,sBAAsB/H,KAAO,GACvE8M,KAAKiP,UAAYjP,KAAKzL,WACtByL,KAAKuQ,aACLvQ,KAAK+H,QAAQ,kBAAoB/L,KAAMgE,KAAKiP,eASxD/L,EAAS5J,UAAU+K,SAAW,WAC1BrE,KAAK8I,cAAc9I,KAAK8F,WACxB9F,KAAK8I,cAAc9I,KAAKvD,WACxBuD,KAAK8I,cAAc9I,KAAKwE,kBAEpBxE,KAAKyG,SACLzG,KAAKgR,iBAE0C,IAA/C9f,OAAOC,KAAKsb,QAAQlT,QAAQ,gBAC5ByG,KAAKhH,QAAQlH,UAAY,IAE7BkO,KAAK8F,UAAY9F,KAAKvD,UAAYuD,KAAKpD,iBAAerL,GACtDyO,KAAKvC,SACLuC,KAAKyQ,gBAETvN,EAAS5J,UAAUwL,iBAAmB,WAClC9E,KAAKgQ,kBAAkBhQ,KAAK4E,WAC5B5E,KAAKwE,iBAAiB1S,UAAY,GAClCkO,KAAK3L,aACL2L,KAAKiR,cAAcjR,KAAKgI,QAE5B9E,EAAS5J,UAAU4X,cAAgB,SAAUC,GACzC,IAAK,GAAItb,GAAI,EAAGA,EAAIsb,EAAW/f,OAAQyE,IAAK,CACxC,GAAImD,GAAUmY,EAAWtb,EACrBmD,GAAQzB,UAAUiC,SAAS,iBAC3BR,EAAQvB,aAAa,KAAMuI,KAAKhH,QAAQrD,GAAK,IAAMqD,EAAQoY,aAAa,aACxEpY,EAAQvB,aAAa,WAAY,SAI7CyL,EAAS5J,UAAUjF,WAAa,WAC5B2L,KAAKsI,qBACLtI,KAAKuI,cAAe,EACpBvI,KAAKvD,UAAYuD,KAAKgI,MAAQ5T,WAASC,WAAW2L,KAAK1L,cAAe0L,KAAK4E,UAAW5E,KAAKgE,eAAgB,KAAMhE,MACjHA,KAAKpD,aAAeoD,KAAKgI,MAAM1M,iBAAiB,IAAM8F,EAAWK,UACjEzB,KAAKkR,cAAclR,KAAKpD,eAE5BsG,EAAS5J,UAAU+X,eAAiB,SAAUrf,GAC1CgO,KAAK+H,QAAQ,gBAAiB/V,IAElCkR,EAAS5J,UAAUgY,gBAAkB,WACjCtR,KAAKvD,UAAYuD,KAAKgI,MAAQhI,KAAKhH,QAAQpH,cAAc,IAAMwP,EAAWI,YACtExB,KAAKgI,QAELhI,KAAKpD,aAAeoD,KAAKgI,MAAM1M,iBAAiB,IAAM8F,EAAWK,YAGzEyB,EAAS5J,UAAUmV,cAAgB,SAAUxb,GACzC+M,KAAKb,UAAYlM,CACjB,IAAI6L,GAAM7L,EAAGme,aAAa,WAC1B,IAAIne,EAAGsE,UAAUiC,SAAS4H,EAAWzN,WAAamL,EAAK,CACnD,GAAI5L,GAAK0X,UAAQ3X,EAAG4X,WAAY,IAAMzJ,EAAWI,YAC7C+M,EAAMvO,KAAKhH,QAAQpH,cAAc,SAAYkN,EAAM,KAGvD,IAFAkB,KAAKsE,WAAW7R,KAAKqM,GACrBkB,KAAKgQ,kBAAkBhQ,KAAK6E,aACvB0J,EAAK,CACN,GAAIvS,GAAOgE,KAAK4E,SAChB2J,GAAMna,WAASgB,mBAAmB4K,KAAK1L,cAAe0H,EAAMgE,KAAKgE,eAAgBhE,KAAKsE,WAAWlT,OAAQ,KAAM4O,MAE3GA,KAAKyG,SACLzG,KAAK0G,sBAET,IAAI6K,GAAQhD,EAAIjT,iBAAiB,IAAM8F,EAAWK,SAClDzB,MAAKkR,cAAcK,GACnBhD,EAAI9W,aAAa,MAAOqH,GACxByP,EAAItW,MAAMC,QAAU,OACpB8H,KAAKiR,cAAc1C,GAIvB,GAFAvO,KAAK4G,WAAW1T,EAAIqb,GACpBvO,KAAKpD,aAAeoD,KAAKgI,MAAM1M,iBAAiB,IAAM8F,EAAWK,UAC7DzB,KAAKsK,cAAe,CACpB,GAAIzZ,GAAYH,EAAesP,KAAKsK,cAActO,KAAMgE,KAAKgE,eAAepT,OAE5EoP,MAAKvC,OAAQ5M,EAAUmP,KAAKgE,eAAepT,OAAOyC,OAAQ,EAAM,UAEpE2M,KAAK4N,eAAarc,KAG1B2R,EAAS5J,UAAU2X,cAAgB,SAAU1C,GACzCvO,KAAKwE,iBAAiB1R,YAAYyb,IAEtCrL,EAAS5J,UAAUiX,WAAa,SAAUvU,GACtCgE,KAAKgQ,kBAAkBhU,GACnBgE,KAAKkE,sBACDhT,OAAOC,KAAK6O,KAAKzL,YAAYnD,UACxB4O,KAAKtO,WAAYsO,KAAK3C,eAAmB2C,KAAKmE,qBAAqBqN,iBAChExR,KAAKyG,SAAWzG,KAAKyR,OACO,gBAAjBzR,MAAKtO,WACZsO,KAAKgE,eAAetS,SAAW,MAEF,gBAAtBsO,MAAK3C,gBACZ2C,KAAKgE,eAAe3G,cAAgB,QAIxC2C,KAAKgE,eAAetS,SAAW,KAC/BsO,KAAKgE,eAAe3G,cAAgB,MAExC2C,KAAKgE,eAAe9N,YAAc8J,KAAKmE,qBAAqBuN,aAAavJ,KAAKnI,KAAKmE,wBAG3FnE,KAAKmE,qBAAqBwN,qBAG1B3R,KAAK3L,aACL2L,KAAKwE,iBAAmBxE,KAAK1L,cAAc,OAAS0C,UAAWoK,EAAWa,UAC1EjC,KAAKhH,QAAQlG,YAAYkN,KAAKwE,kBAC9BxE,KAAKiR,cAAcjR,KAAKvD,WAEpBuD,KAAKyG,SACLzG,KAAK0G,yBAIjBxD,EAAS5J,UAAUiW,cAAgB,SAAUqC,GACzC,GAAIhhB,KAQJ,OAPIghB,aAAeC,SAEfjhB,EAAOoP,KAAKpP,OAAO+E,IAAMic,EAAIR,aAAa,YAG1CxgB,EAASghB,EAENhhB,GAKXsS,EAAS5J,UAAUwY,OAAS,WACxB9R,KAAKhH,QAAQzB,UAAUC,IAAI4J,EAAWC,MACtChF,aAAW2D,KAAKhH,SAAW0D,KAAM,OAAQqV,SAAU,MACnD/R,KAAK4D,cACL5D,KAAK+D,eACL/D,KAAK6D,YACL7D,KAAK8D,UACL9D,KAAK6N,aACL7N,KAAKvC,SACLuC,KAAKyQ,eACLzQ,KAAK2D,mBACL3D,KAAKgS,SAAWC,eAAajS,KAAKhH,SAC9BkZ,SAAU,IAAM9Q,EAAWK,WAE/BzB,KAAKmS,kBAKTjP,EAAS5J,UAAU6U,QAAU,WAErBnO,KAAKyG,SACLzG,KAAKgR,gBAEThR,KAAKkO,cACL,IAAIkE,IAAWhR,EAAWC,KAAMD,EAAWY,QAAS,QAChD,eAAgB,SAASqQ,OAAOrS,KAAKxK,SAAS4G,MAAM,KAAK4I,OAAO,SAAUC,GAAO,MAAOA,KAC5FC,gBAAalF,KAAKhH,SAAUoZ,GAC5BpS,KAAKhH,QAAQpB,gBAAgB,QAC7BoI,KAAKhH,QAAQpB,gBAAgB,YAC7BoI,KAAKgI,MAAQhI,KAAKvD,UAAYuD,KAAKpD,aAAeoD,KAAK8F,cAAYvU,GACnEyO,KAAKhH,QAAQlH,UAAY,GACzBgR,EAAOxJ,UAAU6U,QAAQvb,KAAKoN,OAKlCkD,EAAS5J,UAAUqR,KAAO,WACtB,GAAI2H,GAAMtS,KAAKsE,WAAWtE,KAAKsE,WAAWlT,OAAS,EACnD,QAAYG,KAAR+gB,IAAqBtS,KAAKkQ,gBAA9B,CAGAlQ,KAAKsE,WAAWiO,MAChBvS,KAAKgQ,kBAAkBhQ,KAAK6E,WAC5B,IAAI2N,GAAOxS,KAAKhH,QAAQpH,cAAc,cAAiB0gB,EAAM,MACzDG,EAASzS,KAAKgI,KACbwK,GAMDA,EAAOA,EAAK7L,eALZ3G,KAAK3L,aACL2L,KAAKiR,cAAcjR,KAAKvD,WACxB+V,EAAOxS,KAAKgI,MAKhB,IAEI3U,GAFY3C,EAAesP,KAAKoP,UAAWpP,KAAKgE,eAAepT,QAE9CoP,KAAKpP,OAAOyC,KACjC2M,MAAK4G,WAAW6L,EAAQD,GAAM,GAC9BxS,KAAK8K,aACL,IAAI7X,GAAK+M,KAAKhH,QAAQpH,cAAc,cAAiB0gB,EAAM,KAC3Drf,GAAGsE,UAAUgE,OAAO6F,EAAWY,SAC/B/O,EAAGsE,UAAUC,IAAI4J,EAAWG,SACtBvB,KAAKnJ,cAAgB5D,EAAGrB,cAAc,IAAMwP,EAAWmB,cAAchL,UAAUiC,SAAS4H,EAAW7N,UACrGN,EAAGsE,UAAUgE,OAAO6F,EAAW5N,UAEnCwM,KAAKpD,aAAeoD,KAAKgI,MAAM1M,iBAAiB,IAAM8F,EAAWK,UAC7DzB,KAAKjB,qBACLiB,KAAKgG,eAAgBzB,YAAa0B,qBAAmBC,SAASlG,KAAKuE,eAAgB,GAEvFvE,KAAKvC,OAAQuC,KAAKsE,WAAWlT,OAASiC,EAAO2M,KAAKuE,cAAevE,KAAKsE,WAAWlT,OAAwB,YAO7G8R,EAAS5J,UAAUoZ,WAAa,SAAUvc,GAClC6J,KAAKkE,qBACLlE,KAAKmE,qBAAqBuO,WAAWvc,GAEhC6J,KAAKnJ,aACVmJ,KAAK+K,cAAc/K,KAAK4J,sBAAsBzT,KAGd,IAA5BrF,oBAAkBqF,GAClB6J,KAAKmL,eAGLnL,KAAKoL,YAAYpL,KAAK4J,sBAAsBzT,KAIxD+M,EAAS5J,UAAUsQ,sBAAwB,SAAUgI,GACjD,GAAI3e,GACAsB,EAAayL,KAAKzL,qBAAsBwG,eACxCiF,KAAKiP,UAAYjP,KAAKzL,UAC1B,KAAKzD,oBAAkB8gB,GACnB,GAA6B,gBAAlBrd,GAAW,IAA4C,gBAAlBA,GAAW,GACvD,GAAIqd,YAAeC,UAEf,IAAK,GADDc,GAAMf,EAAIR,aAAa,YAAY1Z,WAC9B7B,EAAI,EAAGA,EAAImK,KAAKpD,aAAaxL,OAAQyE,IAC1C,GAAImK,KAAKpD,aAAa/G,GAAGub,aAAa,YAAY1Z,aAAeib,EAAK,CAClE1f,EAAK+M,KAAKpD,aAAa/G,EACvB,YAKRwD,OAAMC,UAAUoW,KAAK9c,KAAKoN,KAAKgI,MAAM1M,iBAAiB,IAAM8F,EAAWK,UAAW,SAAUtL,GACxF,MAAIA,GAAK0G,UAAU9K,SAAW6f,EAAIla,aAC9BzE,EAAKkD,GACE,SAQlB,CACD,GAAIsZ,GAAazP,KAAKqK,YAAYuH,GAC9B/gB,EAAYH,EAAe+e,EAAYzP,KAAKgE,eAAepT,OAC/D,IAAI6e,IACAxc,EAAK+M,KAAKhH,QAAQpH,cAAc,cAC1Bf,EAAUmP,KAAKpP,OAAO+E,IAAM,OAC7BqK,KAAKkE,sBAAwBpT,oBAAkBmC,IAEhD,IAAK,GADDsY,GAAQvL,KAAKhH,QAAQsC,iBAAiB,IAAM8F,EAAWK,UAClD5L,EAAI,EAAGA,EAAI0V,EAAMna,OAAQyE,IAE1B0V,EAAM1V,GAAGgH,UAAU9K,SAAWlB,EAAUmP,KAAKpP,OAAOyC,QACpDJ,EAAKsY,EAAM1V,IAOnC,MAAO5C,IAQXiQ,EAAS5J,UAAUsZ,oBAAsB,SAAUzc,GAC/C,IAAKrF,oBAAkBqF,GACnB,IAAK,GAAIN,GAAI,EAAGA,EAAIM,EAAK/E,OAAQyE,IACxB/E,oBAAkBqF,EAAKN,KACxBmK,KAAK0S,WAAWvc,EAAKN,KAKrCqN,EAAS5J,UAAUuZ,YAAc,WAC7B,GAAIC,KACJ,IAAI9S,KAAKuI,aACL,IAAK,GAAI1S,GAAImK,KAAKsE,WAAWlT,OAAS,EAAGyE,GAAK,EAAGA,IAC7Cid,EAASrgB,KAAKuN,KAAKsE,WAAWzO,GAGtC,OAAOid,IAEX5P,EAAS5J,UAAUwQ,iBAAmB,WAClC9J,KAAKyI,aAEL,KAAK,GADD7L,GAAeoD,KAAKgI,MAAM+K,uBAAuB3R,EAAW5N,UACvDqC,EAAI,EAAGA,EAAI+G,EAAaxL,OAAQyE,IAAK,CAC1C,GAAImd,GAAWhT,KAAKqK,YAAYzN,EAAa/G,GACzCmd,GAAShT,KAAKgE,eAAepT,OAAO+E,KACpCqK,KAAKyI,WAAWhW,KAAKugB,EAAShT,KAAKgE,eAAepT,OAAO+E,OAQrEuN,EAAS5J,UAAU2Z,iBAAmB,WAElC,GAAIC,GACAC,GAAc,CAClBnT,MAAKyI,aACL,IAAIlU,GAAayL,KAAKzL,qBAAsBwG,eACxCiF,KAAKiP,UAAYjP,KAAKzL,UAC1B,IAAIyL,KAAKkE,uBAAyBiP,EAC9BD,EAAalT,KAAKmE,qBAAqB8O,mBACvCE,GAAc,MAEb,IAAInT,KAAKnJ,eAAiBsc,EAAa,CAExC,GAAIvW,GAAeoD,KAAKgI,MAAM+K,uBAAuB3R,EAAW5N,UAC5D4f,KACAC,IACJrT,MAAKyI,aAEL,KAAK,GADD6K,MACKzd,EAAI,EAAGA,EAAI+G,EAAaxL,OAAQyE,IACrC,GAA6B,gBAAlBtB,GAAW,IAA4C,gBAAlBA,GAAW,GACvD6e,EAAiB3gB,KAAKmK,EAAa/G,GAAGgH,UAAU9K,YAE/C,CACD,GAAIihB,GAAWhT,KAAKqK,YAAYzN,EAAa/G,IACzChF,EAAYH,EAAesiB,EAAUhT,KAAKgE,eAAepT,OACzDoP,MAAKuI,aACL+K,EAAW7gB,MAAOuJ,KAAMgX,EAAUF,SAAU9S,KAAK6S,gBAGjDQ,EAAiB5gB,KAAKugB,GAEtBniB,GAEAuiB,EAAiB3gB,KAAK5B,EAAUmP,KAAKgE,eAAepT,OAAOyC,OAE3D2M,KAAKyI,WAAWhW,KAAK5B,EAAUmP,KAAKgE,eAAepT,OAAO+E,OAG1Dyd,EAAiB3gB,SAAKlB,IACtByO,KAAKyI,WAAWhW,SAAKlB,KAIH,gBAAlBgD,GAAW,IACS,gBAAlBA,GAAW,IACjB4e,IACJD,GAAe/c,KAAMyG,EAAcZ,KAAMzH,EAAYlB,KAAM+f,GAC3DD,GAAc,GAEdnT,KAAKuI,eAAiB4K,GACtBD,GAAe/c,KAAMyG,EAAcZ,KAAMsX,EAAYjgB,KAAM+f,GAC3DD,GAAc,GAERA,IACND,GAAe/c,KAAMyG,EAAcZ,KAAMqX,EAAkBhgB,KAAM+f,GACjED,GAAc,OAGjB,KAAKA,EAAa,CACnB,GAAIhU,GAAYa,KAAKhH,QAAQ+Z,uBAAuB3R,EAAW5N,UAAU,GACrE3C,EAAYH,EAAesP,KAAKqK,YAAYlL,GAAYa,KAAKgE,eAAepT,OAClD,iBAAlB2D,GAAW,IACS,gBAAlBA,GAAW,IACjB4e,EAOEA,IACFriB,oBAAkBD,IAAcC,oBAAkBqO,IAClD+T,MAAa3hB,GACb4hB,GAAc,IAIdnT,KAAKyI,WAAWhW,KAAK5B,EAAUmP,KAAKgE,eAAepT,OAAO+E,KAC1Dud,GACI7f,KAAMxC,EAAUmP,KAAKgE,eAAepT,OAAOyC,MAAO8C,KAAMgJ,EACxDnD,KAAMgE,KAAKqK,YAAYlL,IAE3BgU,GAAc,KAlBlBD,EAAepiB,oBAAkBqO,OAG7B5N,IAFA4E,KAAMgJ,EAAWnD,KAAMzH,EACvBlB,KAAM8L,EAAUtC,UAAU9K,QAE9BohB,GAAc,GAkBtB,MAAOD,IAOXhQ,EAAS5J,UAAUia,SAAW,SAAUpd,GACpC,MAAO6J,MAAKqK,YAAYlU,IAO5B+M,EAAS5J,UAAUka,WAAa,SAAUrd,GACtC6J,KAAKyT,aAAatd,GAAM,GACpB6J,KAAKkE,sBACLlE,KAAKmE,qBAAqBqP,WAAWrd,IAQ7C+M,EAAS5J,UAAUoa,YAAc,SAAUvd,GACvC6J,KAAKyT,aAAatd,GAAM,GACpB6J,KAAKkE,sBACLlE,KAAKmE,qBAAqBuP,YAAYvd,IAI9C+M,EAAS5J,UAAUma,aAAe,SAAUtd,EAAMwd,GAC9C,GAAIlE,GAAazP,KAAKqK,YAAYlU,GAC9BtF,EAAYH,EAAe+e,EAAYzP,KAAKgE,eAAepT,OAC/D,IAAI6e,EAAY,CACZ,GAAIxc,GAAK+M,KAAKhH,QAAQpH,cAAc,cAAgBf,EAAUmP,KAAKpP,OAAO+E,IAAM,KAC5Ege,IACI1gB,GACAA,EAAGsE,UAAUgE,OAAO6F,EAAWY,eAE5ByN,GAAWzP,KAAKpP,OAAOmH,UAExB4b,IACF1gB,GACAA,EAAGsE,UAAUC,IAAI4J,EAAWY,SAGhCyN,EAAWzP,KAAKpP,OAAOmH,UAAW,KAS9CmL,EAAS5J,UAAUsa,SAAW,SAAUzd,GACpC6J,KAAK6T,aAAa1d,GAAM,EAAO,IAC3B6J,KAAKkE,sBACLlE,KAAKmE,qBAAqByP,SAASzd,IAQ3C+M,EAAS5J,UAAUwa,SAAW,SAAU3d,GACpC6J,KAAK6T,aAAa1d,GAAM,EAAM,QAC1B6J,KAAKkE,sBACLlE,KAAKmE,qBAAqB2P,SAAS3d,IAG3C+M,EAAS5J,UAAUua,aAAe,SAAUjC,EAAKmC,EAAQ7b,GACrD,GAAIuX,GAAazP,KAAKqK,YAAYuH,GAC9B/gB,EAAYH,EAAe+e,EAAYzP,KAAKgE,eAAepT,OAC/D,IAAI6e,EAAY,CACZ,GAAIxc,GAAK+M,KAAKhH,QAAQpH,cAAc,cAAgBf,EAAUmP,KAAKpP,OAAO+E,IAAM,KAC5E1C,KACAA,EAAGgF,MAAMC,QAAUA,GAEnB6b,EAEAtE,EAAWzP,KAAKpP,OAAOoH,YAAa,QAG7ByX,GAAWzP,KAAKpP,OAAOoH,aAe1CkL,EAAS5J,UAAU0a,QAAU,SAAUhY,EAAMpL,OAC1B,KAAXA,IAAqBA,MAASW,GAClC,IAAIgD,GAAayL,KAAKzL,qBAAsBwG,eACtCiF,KAAKiP,UAAYjP,KAAKzL,UAC5ByL,MAAKiU,kBAAkBjY,EAAMpL,EAAQ2D,IAEzC2O,EAAS5J,UAAU2a,kBAAoB,SAAUjY,EAAMpL,EAAQ2D,GAC3D,GAAIyH,YAAgB3C,OAChB,GAAI2G,KAAKkE,qBACLlE,KAAKmE,qBAAqB6P,QAAQhY,EAAMpL,EAAQ2D,OAE/C,CACD,GAAIwF,GAAKiG,KAAKqP,eAAe9a,EAAY3D,GACrC6F,MAAQ,EAUZ,IATIsD,KAEAtD,EADgB/F,EAAeqJ,EAAIiG,KAAKgE,eAAepT,QACrCoP,KAAKpP,OAAO6F,UAE1BA,MAEJA,EAAQA,EAAM4b,OAAOrW,IAGrBjC,YAAcV,OAAO,CACrB,IAAK,GAAIxD,GAAI,EAAGA,EAAImG,EAAK5K,OAAQyE,IAAK,CAClCtB,EAAW9B,KAAKuJ,EAAKnG,IACrBmK,KAAKgQ,kBAAkBzb,EAGvB,IAAI2f,GAAWlU,KAAKwE,iBACdxE,KAAKwE,iBAAiB9R,SAAS,GAC/B,IAGFsN,MAAKwE,kBAAoB0P,EACzBlU,KAAKmU,eAAenY,EAAKnG,GAAIqe,EAAUlU,KAAK4E,WAG5C5E,KAAKqE,WAGbrE,KAAKpD,aAAeoD,KAAKgI,MAAM1M,iBAAiB,IAAM8F,EAAWK,cAI7D1H,KACAA,EAAGiG,KAAKpP,OAAO6F,OAASA,EACxBuJ,KAAKoU,oBAAoBra,EAAIiC,MAMjDkH,EAAS5J,UAAU8a,oBAAsB,SAAUC,EAAgBC,GAE/D,GAAIC,GAAeF,EAAerU,KAAKpP,OAAO+E,IAC1C6e,EAAgBH,EAAerU,KAAKpP,OAAO6F,OAC3Cge,EAAsBzU,KAAKhH,QAAQpH,cAAc,SAAY2iB,EAAe,MAC5EG,EAAW1U,KAAKhH,QAAQpH,cAAc,cAAiB2iB,EAAe,MACtEL,EAAWO,IAETC,EACI9J,UAAQ8J,EAAU,MAClB,MACNC,EAAWF,EAAsBD,GAAiBH,EAEtD,MADyBK,IAAYA,EAASnd,UAAUiC,SAAS4H,EAAWzN,UAIpD,CACpB,GAAIihB,GAAyBxgB,WAASgC,uBAAuB4J,KAAK1L,cAAeqgB,EAAU3U,KAAKgE,eAAgB,KAAM,KAAMhE,KAC5HA,MAAKkR,cAAc0D,GACnBV,EAAS7hB,aAAauiB,EAAuB,GAAIF,GACjDjQ,SAAOiQ,GAIX,GAAID,GAAuBH,EACvB,IAAK,GAAIze,GAAI,EAAGA,EAAIye,EAAUljB,OAAQyE,IAClC8e,EAASliB,KAAK6hB,EAAUze,IACxBmK,KAAKmU,eAAeG,EAAUze,GAAIqe,EAAUS,IAKxDzR,EAAS5J,UAAU6a,eAAiB,SAAUU,EAAaX,EAAUtP,GACjE,GAAIpS,GAAQoS,EAAUrL,QAAQsb,EAC9B7U,MAAK8U,YAAYD,EAAariB,EAAO0hB,EAAUtP,EAC/C,IAAImQ,GAAYnQ,EAAUpS,EAAQ,EAC9BuiB,IAAaA,EAAUhkB,UAAuC,IAA3BgkB,EAAU3a,MAAMhJ,QACnD4O,KAAK8U,YAAYC,EAAYviB,EAAQ,EAAI0hB,EAAUtP,IAG3D1B,EAAS5J,UAAUwb,YAAc,SAAUvgB,EAAY/B,EAAOiK,EAAWmI,GACrE,GAAI/R,GAASmN,KAAK4J,sBAAsBhF,EAAUpS,EAAQ,KACtDwN,KAAK4J,sBAAsBhF,EAAUpS,EAAQ,KAAO,KACpDS,EAAKmB,WAASgC,uBAAuB4J,KAAK1L,eAAgBC,GAAayL,KAAKgE,eAAgB,KAAM,KAAMhE,KAM5G,IALAA,KAAKkR,cAAcje,GAEf+M,KAAKtO,UAAYsO,KAAKyG,SACtBzG,KAAK0G,uBAEL1G,KAAKpP,OAAOkJ,SAAW8K,EAAUpS,EAAQ,IAAMoS,EAAUpS,EAAQ,GAAGzB,SAAU,CAC9E,GAAIikB,GAAYhV,KAAK4J,sBAAsBhF,EAAUpS,EAAQ,GACzDwiB,KACAniB,EAASmiB,EAAUC,oBAG3BxY,EAAUpK,aAAaY,EAAG,GAAIJ,IAQlCqQ,EAAS5J,UAAU4b,WAAa,SAAU/e,GACtC,GAAIgf,GAAiBnV,KAAKzL,qBAAsBwG,eAC1CiF,KAAKiP,UAAYjP,KAAKzL,UACxByL,MAAKkE,qBACLlE,KAAKmE,qBAAqB+Q,WAAW/e,GAGrC6J,KAAKoV,mBAAmBjf,EAAMgf,IAGtCjS,EAAS5J,UAAU8b,mBAAqB,SAAUxD,EAAKuD,GACnD,GAGI5gB,GAHA4O,EAAQnD,KACR4E,EAAY5E,KAAK4E,UACjBhU,EAASghB,YAAeC,SAAU7R,KAAKuP,cAAcqC,GAAOA,CAIhE,IADArd,EAAayL,KAAKqP,eAAe8F,EAAgBvkB,GAAQ,GACzC,CACZ,GAAIykB,EAEJA,GAASrV,KAAKqP,eAAe9a,EAAY3D,EACzC,IAAI4B,GAAQoS,EAAUrL,QAAQ8b,GAC1BpiB,EAAK+M,KAAK4J,sBAAsBgI,GAChC0D,MAAU,EACdtV,MAAKuV,mBAAmBtiB,GACpB+M,KAAKpP,OAAOkJ,SAAWkG,KAAK4E,UAAUpS,EAAQ,IAC9CoS,EAAUpS,EAAQ,GAAGzB,UACiB,IAAtC6T,EAAUpS,EAAQ,GAAG4H,MAAMhJ,QACvB6B,GAAMA,EAAGuiB,uBAAuBje,UAAUiC,SAAS4H,EAAWQ,iBAC7D9Q,oBAAkBmC,EAAGgiB,qBAAwBhiB,EAAGgiB,oBAC7ChiB,EAAGgiB,mBAAmB1d,UAAUiC,SAAS4H,EAAWQ,kBACxD0T,EAAUriB,EAAGuiB,wBAGjBviB,GACAwR,SAAOxR,GAEPqiB,GACA7Q,SAAO6Q,EAGX,IAAIG,GAAalhB,EAAWnD,OAAS,GAAM,EACrC4O,KAAK0V,WAAW1V,KAAKiP,UAAWjP,KAAKpP,OAAO+E,GAE9C,SAAUrE,GAAS,MAAOA,KAAU+jB,EAAOlS,EAAMvS,OAAO+E,KAAQ,MAAQ,KACxEggB,EAAUphB,EAAWgF,QAAQ8b,EAGjC,IAFA9gB,EAAWuG,OAAO6a,EAAS,GAC3B3V,KAAKgQ,kBAAkBmF,GACnBM,GACGA,EAAUjG,QACVnW,MAAMuc,QAAQH,EAAUjG,OAAOxP,KAAKpP,OAAO6F,SAC3Cgf,EAAUjG,OAAOxP,KAAKpP,OAAO6F,OAAOrF,QAAU,EAAG,CACpD,GAAIykB,GAAW7V,KAAK4J,sBAAsB6L,EAAUjG,OACpD,IAAIqG,EAAU,CACV,GAAIC,GAAO1hB,WAASgC,uBAAuB4J,KAAK1L,eAAgBmhB,EAAUjG,QAASxP,KAAKgE,eAAgB,KAAM,KAAMhE,KACpHA,MAAKkR,cAAc4E,GACnBD,EAASlP,cAActU,aAAayjB,EAAK,GAAID,GAC7CA,EAASlP,cAAc0E,YAAYwK,IAGvCthB,EAAWnD,QAAU,GACrB4O,KAAK2K,OAET3K,KAAKpD,aAAevD,MAAMC,UAAU3G,MAAMC,KAAKoN,KAAKhH,QAAQsC,iBAAiB,IAAM8F,EAAWK,aAItGyB,EAAS5J,UAAUic,mBAAqB,SAAUtiB,GAC9C,GAAI8iB,GAAO9iB,EAAKA,EAAGme,aAAa,YAAY1Z,WAAWse,cAAgB,IACvE,IAAID,GAAQ/V,KAAKsE,YAActE,KAAKsE,WAAWlT,OAAS,EACpD,KAAO4O,KAAKsE,WAAWoL,KAAK,SAAU/Z,GAAM,MAAOA,GAAG+B,WAAWse,gBAAkBD,KAC/E/V,KAAK2K,QASjBzH,EAAS5J,UAAU2c,oBAAsB,SAAU9f,GAC/C,GAAIA,EAAK/E,OACL,IAAK,GAAIyE,GAAI,EAAGA,EAAIM,EAAK/E,OAAQyE,IAC7BmK,KAAKkV,WAAW/e,EAAKN,KAKjCqN,EAAS5J,UAAUoc,WAAa,SAAUnhB,EAAYoB,EAAIugB,EAAU1G,GAEhE,GAAIjb,EAAWmC,eAAef,KAAoC,IAA7BugB,EAAS3hB,EAAWoB,IACrD,MAAOf,aAAWL,EAEtB,KAAK,GAAIsB,GAAI,EAAGA,EAAI3E,OAAOC,KAAKoD,GAAYnD,OAAQyE,IAChD,GAAItB,EAAWrD,OAAOC,KAAKoD,GAAYsB,KACkB,gBAA3CtB,GAAWrD,OAAOC,KAAKoD,GAAYsB,IAAkB,CAE/D,GAAIya,GAAStQ,KAAK0V,WAAWnhB,EAAWrD,OAAOC,KAAKoD,GAAYsB,IAAKF,EAAIugB,EAAU3hB,EACnF,IAAc,MAAV+b,EAIA,MAHKA,GAAOd,SACRc,EAAOd,OAASA,GAEbc,EAInB,MAAO,OAGXpN,EAAS5J,UAAUjD,cAAgB,WAC/B,MAAO,YAEX6M,EAAS5J,UAAU6c,gBAAkB,WACjC,GAAIC,KAIJ,OAHIpW,MAAKkE,sBACLkS,EAAQ3jB,MAAOsW,MAAO/I,MAAOqW,OAAQ,mBAElCD,GAKXlT,EAAS5J,UAAUgd,eAAiB,WAChC,MAAOtW,MAAKuW,cAAc,WAAY,YAAa,iBAC/C,SAAU,SAAU,YAAa,cACjC,YAAa,WAAY,SAAU,QAAS,eAAgB,mBAAoB,gBAExFpW,GACI6C,WAAS,KACVE,EAAS5J,UAAW,eAAY,IACnC6G,GACI6C,YAAS,IACVE,EAAS5J,UAAW,2BAAwB,IAC/C6G,GACI6C,gBACDE,EAAS5J,UAAW,qBAAkB,IACzC6G,GACI6C,YAAS,IACVE,EAAS5J,UAAW,aAAU,IACjC6G,GACI6C,gBACDE,EAAS5J,UAAW,iBAAc,IACrC6G,GACI6C,cACDE,EAAS5J,UAAW,YAAS,IAChC6G,GACIqW,UAAQpiB,WAASkC,oBAAqBuM,IACvCK,EAAS5J,UAAW,aAAU,IACjC6G,GACI6C,YAAWuE,OAAQ,YAAaF,SAAU,IAAKO,OAAQ,UACxD1E,EAAS5J,UAAW,gBAAa,IACpC6G,GACI6C,WAAS,SACVE,EAAS5J,UAAW,gBAAa,IACpC6G,GACI6C,YAAS,IACVE,EAAS5J,UAAW,eAAY,IACnC6G,GACI6C,YAAS,IACVE,EAAS5J,UAAW,mBAAgB,IACvC6G,GACI6C,WAAS,SACVE,EAAS5J,UAAW,uBAAoB,IAC3C6G,GACI6C,WAAS,KACVE,EAAS5J,UAAW,kBAAe,IACtC6G,GACI6C,YAAS,IACVE,EAAS5J,UAAW,iBAAc,IACrC6G,GACI6C,YAAS,IACVE,EAAS5J,UAAW,0BAAuB,IAC9C6G,GACI6C,WAAS,KACVE,EAAS5J,UAAW,aAAU,IACjC6G,GACI6C,WAAS,KACVE,EAAS5J,UAAW,YAAS,IAChC6G,GACI6C,WAAS,OACVE,EAAS5J,UAAW,eAAY,IACnC6G,GACI6C,WAAS,OACVE,EAAS5J,UAAW,qBAAkB,IACzC6G,GACI6C,WAAS,OACVE,EAAS5J,UAAW,oBAAiB,IACxC6G,GACIsW,WACDvT,EAAS5J,UAAW,aAAU,IACjC6G,GACIsW,WACDvT,EAAS5J,UAAW,kBAAe,IACtC6G,GACIsW,WACDvT,EAAS5J,UAAW,qBAAkB,IACzC6G,GACIsW,WACDvT,EAAS5J,UAAW,oBAAiB,IACxC4J,EAAW/C,GACPuW,yBACDxT,IAELyT,aCtiEEC,EAAgC,WAChC,QAASA,GAAeC,GACpB7W,KAAK8W,kBAAoB,EACzB9W,KAAK+W,iBAAmBF,EA6nC5B,MAtnCAD,GAAetd,UAAUkY,aAAe,WACpC,OAAQ1gB,oBAAkBkP,KAAK+W,iBAAiBC,cAA6D,gBAAtChX,MAAK+W,iBAAiBC,aAOjGJ,EAAetd,UAAU2d,sBAAwB,WAC7C,MAAOjX,MAAK+W,iBAAiBtF,OAAmD,kBAAnCzR,MAAK+W,iBAAiBrlB,UAOvEklB,EAAetd,UAAUqY,iBAAmB,WACxC3R,KAAKkX,iBAAgB,EACrB,IAAItS,GAAY5E,KAAK+W,iBAAiBnS,UAClCuS,EAAUvS,EAAUjS,MAAM,EAAG,EACjCqN,MAAK+W,iBAAiBta,UAAYuD,KAAK+W,iBAAiB/O,MAAQ5T,WAASC,WAEzE2L,KAAK+W,iBAAiBziB,cAAe6iB,EAASnX,KAAK+W,iBAAiB/S,eAAgB,KAAMhE,KAAK+W,kBAC/F/W,KAAK+W,iBAAiBvS,iBAAmBxE,KAAK+W,iBAAiBziB,cAAc,OAAS0C,UAAWoK,EAAWa,UAC5GjC,KAAK+W,iBAAiB/d,QAAQlG,YAAYkN,KAAK+W,iBAAiBvS,kBAChExE,KAAK+W,iBAAiBvS,iBAAiB1R,YAAYkN,KAAK+W,iBAAiBta,WACzEuD,KAAKgN,eAAiBhN,KAAK+W,iBAAiBta,UAAUnF,kBAAkB2U,wBAAwB9G,OAChGnF,KAAKoX,qBAAuBpX,KAAKqX,kBAAkB,KACnDrX,KAAKsX,aAAetX,KAAKqX,kBAAkBnmB,OAAOC,KAAK6O,KAAK+W,iBAAiBnS,WAAWxT,QACxF4O,KAAK8M,aAAe,EACpB9M,KAAKuX,YAAcvX,KAAKsX,aAAe,CACvC,IAAIE,GAAU5S,EAAUjS,MAAM,EAAGqN,KAAKsX,cAClCG,EAAYrjB,WAASgC,uBAEzB4J,KAAK+W,iBAAiBziB,cAAekjB,EAASxX,KAAK+W,iBAAiB/S,eAAgB,KAAM,KAAMhE,KAAK+W,iBACrG5Z,UAAOsa,EAAWzX,KAAK+W,iBAAiBta,WACxCuD,KAAK+W,iBAAiBna,aAAeoD,KAAK+W,iBAAiB/O,MAAM1M,iBAAiB,MAClF0E,KAAK0X,WAAa1X,KAAK+W,iBAAiBziB,cAAc,OACtD0L,KAAK+W,iBAAiBta,UAAUpK,aAAa2N,KAAK0X,WAAY1X,KAAK+W,iBAAiBta,UAAUnF,mBAC9F0I,KAAK2X,cAAgB3X,KAAK+W,iBAAiBziB,cAAc,OACzD0L,KAAK+W,iBAAiBta,UAAUpK,aAAa2N,KAAK2X,cAAe,MACjE3X,KAAK4X,YAAe1mB,OAAOC,KAAKyT,GAAWxT,OAAS4O,KAAKgN,eAAmBhN,KAAKsX,aAAetX,KAAKgN,eACrGhN,KAAK0X,WAAWzf,MAAMkN,OAAS,MAC/BnF,KAAK2X,cAAc1f,MAAMkN,OAASnF,KAAK4X,YAAc,KACrD5X,KAAK6X,iBAAmB,EACxB7X,KAAK8X,oBAAsB9X,KAAK4X,YAChC5X,KAAK+X,SAAW,EAChB/X,KAAKgY,2BAETpB,EAAetd,UAAU4d,gBAAkB,SAAU/I,GAC5CA,GAUsC,IAAnCnO,KAAK+W,iBAAiBzR,UACtBmH,OAAOwL,oBAAoB,SAAUjY,KAAKkY,iBAC1CzL,OAAOwL,oBAAoB,SAAUjY,KAAKmY,YAG1CrK,eAAavS,OAAOyE,KAAK+W,iBAAiB/d,QAAS,SAAUgH,KAAKoY,mBAClEtK,eAAavS,OAAOyE,KAAK+W,iBAAiB/d,QAAS,SAAUgH,KAAKqY,oBAflErY,KAAK+W,iBAAiBzR,UACtBtF,KAAKkY,gBAAkBlY,KAAKoY,kBAAkBjQ,KAAKnI,MACnDyM,OAAO6L,iBAAiB,SAAUtY,KAAKkY,kBAGvCpK,eAAatW,IAAIwI,KAAK+W,iBAAiB/d,QAAS,SAAUgH,KAAKoY,kBAAmBpY,OAc9F4W,EAAetd,UAAU+e,kBAAoB,SAAUrmB,GACnD,GAAI+lB,GACAnV,EAA0B5C,KAAK+W,iBAAiBta,UAAU7K,cAAc,IAAMwP,EAAWwB,wBACzF9R,qBAAkBkP,KAAK+W,iBAAiBwB,kBACxCvY,KAAK+W,iBAAiByB,0BAItBT,EAFA/X,KAAK+W,iBAAiBzR,SAEX3H,KAAK8a,MAAMzmB,EAAEa,OAAO6lB,gBAAgB9L,UAAY5M,KAAK+W,iBAAiBwB,iBAAmB,EAIzF5a,KAAK8a,MAAMzmB,EAAEa,OAAO+Z,UAAY5M,KAAK+W,iBAAiBwB,iBAAmB,GAEvE,GAAKvY,KAAK+W,iBAAiBwB,gBAAmB,EAC3D3V,EAAwB3K,MAAMiU,IAAM,MAGpCtJ,EAAwB3K,MAAMiU,IAAM,EAAalM,KAAK+W,iBAAiBwB,gBAAkB,MAGjG3B,EAAetd,UAAU+d,kBAAoB,SAAUsB,GACnD,GACIC,GADAzT,EAAS0T,WAAWzT,aAAWpF,KAAK+W,iBAAiB5R,QAiBzD,QAdIyT,EADA5Y,KAAK+W,iBAAiBzR,SACV3H,KAAK8a,MAAOhM,OAAOI,YAAc7M,KAAKgN,eA1GrC,GA6G+B,gBAAjChN,MAAK+W,iBAAiB5R,SAAsE,IAA/CnF,KAAK+W,iBAAiB5R,OAAO5L,QAAQ,KAE7EoE,KAAK8a,MAAOzY,KAAK+W,iBAAiB/d,QAAQiT,wBAAwB9G,OAASnF,KAAKgN,eAhHrF,KAmHKrP,KAAK8a,MAAOtT,EAASnF,KAAKgN,eAnH/B,MAsHC2L,IACZC,EAAYD,GAETC,GAEXhC,EAAetd,UAAU0e,wBAA0B,WAC/ChY,KAAK8Y,WAAcC,iBAAqBC,uBAA2BC,qBAEnE,KAAK,GADDjd,GAAOgE,KAAK+W,iBAAiBnS,UACxB/O,EAAI,EAAGA,EAAImG,EAAK5K,OAAQyE,IACzBmK,KAAK+W,iBAAiBlgB,cAAgBmF,EAAKnG,GAAGmK,KAAK+W,iBAAiBnmB,OAAO0O,YAC3EU,KAAK8Y,UAAUC,cAActmB,KAAKoD,GAGjC/E,oBAAkBkL,EAAKnG,GAAGmK,KAAK+W,iBAAiBnmB,OAAOmH,WACvDiE,EAAKnG,GAAGmK,KAAK+W,iBAAiBnmB,OAAOmH,UAErCiI,KAAK8Y,UAAUE,oBAAoBvmB,KAAKoD,EAGjD,IAAImK,KAAKwR,eAEL,IAAK,GADDpX,GAAQ4F,KAAK+W,iBAAiB/d,QAAQsC,iBAAiB,IAAM8F,EAAWK,UACnEjP,EAAQ,EAAGA,EAAQ4H,EAAMhJ,OAAQoB,IACtC4H,EAAM5H,GAAO0mB,QAAUlZ,KAAK+W,iBAAiBoC,iBAAiBC,IAAI5mB,GAAO0mB,SAIrFtC,EAAetd,UAAUiR,kBAAoB,WACzC,GAAIvK,KAAK+W,iBAAiBnS,UAAUxT,OAAQ,CACxC,GAAIwT,GAAY5E,KAAK+W,iBAAiBnS,SACtC5E,MAAKgN,eAAiBhN,KAAK0X,WAAW2B,YAAYpN,wBAAwB9G,OAC1EnF,KAAK4X,YAAe1mB,OAAOC,KAAKyT,GAAWxT,OAAS4O,KAAKgN,eAAmBhN,KAAKsX,aAAetX,KAAKgN,eACrGhN,KAAK8X,oBAAsB9X,KAAK4X,YAChC5X,KAAK2X,cAAc1f,MAAMkN,OAASnF,KAAK4X,YAAc,OAG7DhB,EAAetd,UAAUggB,kBAAoB,SAAUC,GACnD,MAAOvZ,MAAK+W,iBAAiBzR,SAAcqH,YAAc4M,GAAmB,EAAK,EAC5E5M,YAAc4M,EAAqBvZ,KAAK+W,iBAAiB/d,QAAQ4T,UAAY2M,GAAmB,EAAK,EACrGvZ,KAAK+W,iBAAiB/d,QAAQ4T,UAAY2M,GAEnD3C,EAAetd,UAAU8e,kBAAoB,SAAUpmB,GACnD,GAAIf,GACAsoB,CAEAA,GADAvZ,KAAK+W,iBAAiBzR,SACLtF,KAAK+W,iBAAiBta,UAAUwP,wBAAwBC,IACrEva,SAAS+mB,gBAAgBzM,wBAAwBC,IAGpClM,KAAK+W,iBAAiBjR,UAAY9F,KAAK+W,iBAAiBjR,UAAUmG,wBAAwB9G,OAAS,EAExHnF,KAAKwZ,eAAiB1oB,oBAAkBkP,KAAKwZ,gBAAkB,EAAIxZ,KAAKwZ,cACxE,IAAI9M,GAAS1M,KAAKsZ,kBAAkBC,EAKpC,IAJAvZ,KAAK6X,iBAAmB7X,KAAKgN,eAAiBrP,KAAKC,MAAM8O,EAAS1M,KAAKgN,gBACvEhN,KAAK8X,oBAAsB9X,KAAK4X,YAAc5X,KAAK6X,iBACnD5mB,EAAKyb,GAAU1M,KAAK4X,aACf5X,KAAK6X,iBAAkB7X,KAAK8X,sBAAwB9X,KAAK4X,YAAa,GAAI5X,KAAK6X,iBAAmB5mB,EAAG,GAAI+O,KAAK8X,oBAAsB7mB,EAAG,GACxI+O,KAAK6X,mBAAqBgB,WAAW7Y,KAAK0X,WAAWzf,MAAMkN,QAG3D,GAFAnF,KAAK0X,WAAWzf,MAAMkN,OAASnF,KAAK6X,iBAAmB,KACvD7X,KAAK2X,cAAc1f,MAAMkN,OAASnF,KAAK8X,oBAAsB,KACzDpL,EAAS1M,KAAKwZ,gBACVzB,EAAWpa,KAAK8a,MAAQzY,KAAK6X,iBAAmB7X,KAAKgN,eAAkBhN,KAAK+X,WAChE/X,KAAKoX,qBAAuB,EACxCpX,KAAKyZ,aAAa1B,GAAU,GAG5B/X,KAAK0Z,eAAe3B,GAAU,OAGjC,CACD,GAAIA,GAAWpa,KAAK8a,MAAOzY,KAAK+X,SAAY/X,KAAK6X,iBAAmB7X,KAAKgN,eACrE+K,GAAY/X,KAAKoX,qBAAuB,EACxCpX,KAAKyZ,aAAa1B,GAAU,GAG5B/X,KAAK0Z,eAAe3B,GAAU,GAI1C/X,KAAK+X,SAAWpa,KAAK8a,MAAMzY,KAAK6X,iBAAmB7X,KAAKgN,gBACN,kBAAvChN,MAAK+W,iBAAiBhK,cAC7B/M,KAAK+W,iBAAiBhK,eAE1B/M,KAAKwZ,eAAiB9M,GAE1BkK,EAAetd,UAAUmgB,aAAe,SAAU1B,EAAU4B,GAGxD,IAAK,GAFDnnB,GAAQmnB,EAAmB3Z,KAAK8M,aAAeiL,EAAa/X,KAAK8M,aAAeiL,EAChF6B,EAAW5Z,KAAK+W,iBAAiBta,UAAUnB,iBAAiB,MACvDzF,EAAI,EAAGA,EAAI+jB,EAASxoB,OAAQyE,IACjCmK,KAAK6Z,SAASD,EAAS/jB,GAAIrD,GAC3BA,GAEJwN,MAAKuX,YAAcoC,EAAmB3Z,KAAKuX,YAAcQ,EAAa/X,KAAKuX,YAAcQ,EACzF/X,KAAK8M,aAAe6M,EAAmB3Z,KAAK8M,aAAeiL,EAAa/X,KAAK8M,aAAeiL,GAEhGnB,EAAetd,UAAUogB,eAAiB,SAAU3B,EAAU4B,GAC1D,GAAIA,EACA,IAAS9jB,EAAI,EAAGA,EAAIkiB,EAAUliB,IAAK,CAC3BrD,IAAUwN,KAAKuX,WACnBvX,MAAK6Z,SAAS7Z,KAAK0X,WAAWzC,mBAAoBziB,EAAOwN,KAAK2X,eAC9D3X,KAAK8M,mBAIT,KAAK,GAAIjX,GAAI,EAAGA,EAAIkiB,EAAUliB,IAAK,CAC/B,GAAIrD,KAAUwN,KAAK8M,aACfja,EAASmN,KAAK0X,WAAW2B,WAC7BrZ,MAAK6Z,SAAS7Z,KAAK2X,cAAcnC,uBAAwBhjB,EAAOK,GAChEmN,KAAKuX,gBAIjBX,EAAetd,UAAUwgB,gBAAkB,SAAU9gB,EAASxG,GAE1D,GAAIunB,GAAY/Z,KAAK+W,iBAAiBnS,SAgBtC,IAfmD,gBAAxC5E,MAAK+W,iBAAiBxiB,WAAW,IACO,gBAAxCyL,MAAK+W,iBAAiBxiB,WAAW,IACxCyE,EAAQghB,QAAQrH,IAAMve,WAASwB,aAC/BoD,EAAQ+Z,uBAAuB3R,EAAWO,cAAc,GAAG7P,UACvDkO,KAAK+W,iBAAiBnS,UAAUpS,GAAOkF,aAI3CsB,EAAQghB,QAAQrH,IAAOoH,EAAUvnB,GAAOwN,KAAK+W,iBAAiBnmB,OAAO+E,IAEhEokB,EAAUvnB,GAAOwN,KAAK+W,iBAAiBnmB,OAAO+E,IAAOvB,WAASwB,aACnEoD,EAAQ+Z,uBAAuB3R,EAAWO,cAAc,GAAG7P,UAEtDioB,EAAUvnB,GAAOwN,KAAK+W,iBAAiBnmB,OAAOyC,OAEnD2M,KAAK+W,iBAAiB7f,WAClB8B,EAAQpH,cAAc,IAAMwP,EAAWM,WACvC+C,SAAOzL,EAAQpH,cAAc,IAAMwP,EAAWM,WAE9C1B,KAAK+W,iBAAiBnS,UAAUpS,GAAOwN,KAAK+W,iBAAiBnmB,OAAOuG,UAAU,CAC9E,GAAIzD,GAAcsF,EAAQpH,cAAc,IAAMwP,EAAW1N,aACrDb,EAASmN,KAAK+W,iBAAiBziB,cAAc,OAC7C0C,UAAWoK,EAAWM,SAAW,IAC7B1B,KAAK+W,iBAAiBnS,UAAUpS,GAAOwN,KAAK+W,iBAAiBnmB,OAAOuG,UAE5EzD,GAAYrB,aAAaQ,EAAQmG,EAAQpH,cAAc,IAAMwP,EAAWO,eAGhF,GAAI3B,KAAK+W,iBAAiBlgB,cAAgBmJ,KAAK+W,iBAAiBnmB,OAAOkJ,QAAS,CACvEkG,KAAKia,mBACNja,KAAKia,iBAAmBja,KAAK+W,iBAAiB/O,MAAMpW,cAAc,IAAMwP,EAAWgB,iBAAiBjH,WAAU,GAE9GzH,GAAcsF,EAAQpH,cAAc,IAAMwP,EAAW1N,YACrDsM,MAAK+W,iBAAiBnS,UAAUpS,GAAOzB,SACnCiI,EAAQpH,cAAc,IAAMwP,EAAWgB,mBACvCpJ,EAAQzB,UAAUgE,OAAO6F,EAAWkB,WACpC5O,EAAY6D,UAAUgE,OAAO6F,EAAWiB,UACxCoC,SAAOzL,EAAQpH,cAAc,IAAMwP,EAAWgB,mBAI7CpJ,EAAQpH,cAAc,IAAMwP,EAAWgB,mBACxCpJ,EAAQzB,UAAUC,IAAI4J,EAAWkB,WACjC5O,EAAY6D,UAAUC,IAAI4J,EAAWiB,UACrC3O,EAAYrB,aAAa2N,KAAKia,iBAAiB9e,WAAU,GAAOnC,EAAQpH,cAAc,IAAMwP,EAAWO,kBAKvHiV,EAAetd,UAAU4gB,wBAA0B,SAAUlhB,EAASxG,GASlE,GARAwG,EAAQzB,UAAUgE,OAAO6F,EAAWY,SAChChC,KAAK8Y,UAAUE,oBAAoB5nB,SAAiE,IAAvD4O,KAAK8Y,UAAUE,oBAAoBzf,QAAQ/G,IACxFwG,EAAQzB,UAAUC,IAAI4J,EAAWY,SAErChJ,EAAQf,MAAMC,QAAU,GACpB8H,KAAK8Y,UAAUG,kBAAkB7nB,SAA+D,IAArD4O,KAAK8Y,UAAUG,kBAAkB1f,QAAQ/G,KACpFwG,EAAQf,MAAMC,QAAU,QAExB8H,KAAK+W,iBAAiBlgB,aAAc,CACpC,GAAIsjB,GAAmBnhB,EAAQpH,cAAc,IAAMwP,EAAWgB,gBAC9DpJ,GAAQzB,UAAUgE,OAAO6F,EAAW5N,UACpCwF,EAAQzB,UAAUgE,OAAO6F,EAAWG,SAChC4Y,IACAA,EAAiBviB,gBAAgB,gBACjCuiB,EAAiB7iB,kBAAkBC,UAAUgE,OAAO6F,EAAW7N,UAE/DyM,KAAK8Y,UAAUC,cAAc3nB,SAA2D,IAAjD4O,KAAK8Y,UAAUC,cAAcxf,QAAQ/G,KAC3EwN,KAAK+W,iBAAiB/O,MAAMpW,cAAcwP,EAAW5N,YACtDwF,EAAQzB,UAAUC,IAAI4J,EAAW5N,UACjC2mB,EAAiB7iB,kBAAkBC,UAAUC,IAAI4J,EAAW7N,SAC5D4mB,EAAiB1iB,aAAa,eAAgB,QAC1CuI,KAAKoa,cAAgB5nB,GACrBwG,EAAQzB,UAAUC,IAAI4J,EAAWG,cAKzCvI,GAAQzB,UAAUgE,OAAO6F,EAAW5N,UACpCwF,EAAQpB,gBAAgB,iBACnB9G,oBAAkBkP,KAAKoa,cAAgBpa,KAAKoa,cAAgB5nB,GAC5DwN,KAAK+W,iBAAiB/O,MAAMpW,cAAcwP,EAAW5N,YACtDwF,EAAQzB,UAAUC,IAAI4J,EAAW5N,UACjCwF,EAAQvB,aAAa,gBAAiB,QAG1CuI,MAAK+W,iBAAiBnmB,OAAOkJ,UACzBkG,KAAK+W,iBAAiBnS,UAAUpS,GAAOzB,SACnCiI,EAAQzB,UAAUiC,SAAS4H,EAAWK,YACtCzI,EAAQzB,UAAUgE,OAAO6F,EAAWK,UACpCzI,EAAQvB,aAAa,OAAQ,SAC7BuB,EAAQzB,UAAUC,IAAI4J,EAAWQ,gBAIjC5I,EAAQzB,UAAUiC,SAAS4H,EAAWQ,iBACtC5I,EAAQzB,UAAUgE,OAAO6F,EAAWQ,eACpC5I,EAAQvB,aAAa,OAAQ,YAC7BuB,EAAQzB,UAAUC,IAAI4J,EAAWK,aAKjDmV,EAAetd,UAAU+gB,qBAAuB,SAAUtgB,EAAInJ,GAC1D,GAAIuS,GAAQnD,KACRyP,IAkBJ,OAjBA7e,GAASoP,KAAK+W,iBAAiBxH,cAAc3e,GACxCE,oBAAkBF,IACnBmJ,EAAG2V,KAAK,SAAU1T,EAAMxJ,GACpB,SAAK5B,EAAOuS,EAAM4T,iBAAiBnmB,OAAO+E,KAEtC/E,EAAOuS,EAAM4T,iBAAiBnmB,OAAO+E,OAE5BqG,EAAKmH,EAAM4T,iBAAiBnmB,OAAO+E,KAAOqG,EAAKmH,EAAM4T,iBAAiBnmB,OAAO+E,MAAQ/E,IAAWoL,KACzGyT,EAAWjd,MAAQA,EACnBid,EAAWzT,KAAOA,GACX,KAOZyT,GAEXmH,EAAetd,UAAU2Z,iBAAmB,WACxC,GAAI9P,GAAQnD,IACZ,KAAKlP,oBAAkBkP,KAAKoa,cAAiBpa,KAAK+W,iBAAiBlgB,cAAgBmJ,KAAK8Y,UAAUC,cAAc3nB,OAAS,CACrH,GAAIkpB,MACAC,IACJ,IAAmD,gBAAxCva,MAAK+W,iBAAiBxiB,WAAW,IACO,gBAAxCyL,MAAK+W,iBAAiBxiB,WAAW,GAAiB,CACzD,GAAIimB,GAAcxa,KAAK+W,iBAAiBnS,SACxC,IAAI5E,KAAK+W,iBAAiBlgB,aAAc,CAEpC,IAAK,GADD4jB,GAAUza,KAAK8Y,UAAUC,cACpBljB,EAAI,EAAGA,EAAI4kB,EAAQrpB,OAAQyE,IAChCykB,EAAe7nB,KAAK+nB,EAAYC,EAAQ5kB,IAE5C,QACIxC,KAAMinB,EAENte,KAAMse,EACN9nB,MAAOwN,KAAK8Y,UAAUC,cAAc2B,IAAI,SAAUloB,GAC9C,MAAO2Q,GAAM4T,iBAAiBxiB,WAAWgF,QAAQihB,EAAYhoB,OAKrE,OACIa,KAAMmnB,EAAYxa,KAAKoa,aACvBpe,KAAMwe,EAAYxa,KAAKoa,aACvB5nB,MAAOwN,KAAK+W,iBAAiBxiB,WAAWgF,QAAQihB,EAAYxa,KAAKoa,eAKzE,GAAIO,GAAc3a,KAAK+W,iBAAiBnS,UACpCvR,EAAO2M,KAAK+W,iBAAiBnmB,OAAOyC,IACxC,IAAI2M,KAAK+W,iBAAiBlgB,aAAc,CAEpC,IAAK,GADD+jB,GAAa5a,KAAK8Y,UAAUC,cACvBljB,EAAI,EAAGA,EAAI+kB,EAAWxpB,OAAQyE,IACnC0kB,EAAe9nB,KAAKkoB,EAAYC,EAAW/kB,IAAI,GAAKxC,IAEpDinB,EAAe7nB,KAAKkoB,EAAYC,EAAW/kB,IAG/C,IAAIglB,GAAe7a,KAAK+W,iBAAiBxiB,qBAAsBwG,eACzD4f,EAAc3a,KAAK+W,iBAAiBxiB,UAC1C,QACIlB,KAAMknB,EAENve,KAAMse,EACN9nB,MAAOwN,KAAK8Y,UAAUC,cAAc2B,IAAI,SAAUloB,GAC9C,MAAOqoB,GAAathB,QAAQohB,EAAYnoB,OAMhD,GAAI+B,GAAayL,KAAK+W,iBAAiBxiB,qBAAsBwG,eACvD4f,EAAc3a,KAAK+W,iBAAiBxiB,UAC1C,QACIlB,KAAMsnB,EAAY3a,KAAKoa,aAAapa,KAAK+W,iBAAiBnmB,OAAOyC,MAEjE2I,KAAM2e,EAAY3a,KAAKoa,aACvB5nB,MAAO+B,EAAWgF,QAAQohB,EAAY3a,KAAKoa,iBAS/DxD,EAAetd,UAAUoZ,WAAa,SAAUd,GAE5C,GAAIkJ,GAAY9a,KAAKqa,qBAAqBra,KAAK+W,iBAAiBnS,UAAWgN,EAC3E,IAAI1gB,OAAOC,KAAK2pB,GAAW1pB,OAAQ,CAC/B,GAAI2pB,GAAa/a,KAAKoa,cAAgBU,EAAUtoB,MAC5C8M,MAAY,EAehB,IAdAU,KAAKoa,YAAcU,EAAUtoB,MACzBwN,KAAK+W,iBAAiBlgB,gBACyC,IAA3DmJ,KAAK8Y,UAAUC,cAAcxf,QAAQuhB,EAAUtoB,QAC/C8M,GAAY,EACZU,KAAK8Y,UAAUC,cAActmB,KAAKqoB,EAAUtoB,SAG5C8M,GAAY,EACZU,KAAK8Y,UAAUC,cAAcje,OAAOkF,KAAK8Y,UAAUC,cAAcxf,QAAQuhB,EAAUtoB,OAAQ,IAE3FwN,KAAK+W,iBAAiB/O,MAAMpW,cAAc,IAAMwP,EAAWG,UAC3DvB,KAAK+W,iBAAiB/O,MAAMpW,cAAc,IAAMwP,EAAWG,SAAShK,UAAUgE,OAAO6F,EAAWG,UAGpGvB,KAAK+W,iBAAiBnN,sBAAsBgI,GACxC5R,KAAK+W,iBAAiBlgB,aACtBmJ,KAAK+W,iBAAiBhM,cAAc/K,KAAK+W,iBAAiBnN,sBAAsBgI,IAGhF5R,KAAK+W,iBAAiB3L,YAAYpL,KAAK+W,iBAAiBnN,sBAAsBgI,QAGjF,CAED,GAAI5G,OAAY,EAChB,IAAmD,gBAAxChL,MAAK+W,iBAAiBxiB,WAAW,IACO,gBAAxCyL,MAAK+W,iBAAiBxiB,WAAW,GACxCyW,GACI3X,KAAM2M,KAAK+W,iBAAiBnS,UAAU5E,KAAKoa,aAC3Cpe,KAAMgE,KAAK+W,iBAAiBnS,UAAU5E,KAAKoa,aAC3C5nB,MAAOwN,KAAKoa,iBAGf,CACD,GAAIxV,GAAY5E,KAAK+W,iBAAiBnS,SACtCoG,IACI3X,KAAMuR,EAAU5E,KAAKoa,aAAapa,KAAK+W,iBAAiBnmB,OAAOyC,MAC/D2I,KAAM4I,EAAU5E,KAAKoa,aACrB5nB,MAAOwN,KAAKoa,aAGhBpa,KAAK+W,iBAAiBlgB,cACtBmU,EAAU1L,UAAYA,EACtBU,KAAK+W,iBAAiBhP,QAAQ,SAAUiD,IAElC+P,IACN/a,KAAK+W,iBAAiB5L,eACtBnL,KAAK+W,iBAAiBhP,QAAQ,SAAUiD,SAI3Cla,qBAAkB8gB,KAAS5R,KAAK+W,iBAAiBlgB,eACtDmJ,KAAK+W,iBAAiB5L,eACtBnL,KAAKoa,gBAAc7oB,KAG3BqlB,EAAetd,UAAUka,WAAa,SAAU5B,GAE5C,GAAIkJ,GAAY9a,KAAKqa,qBAAqBra,KAAK+W,iBAAiBnS,UAAWgN,EACvE1gB,QAAOC,KAAK2pB,GAAW1pB,QACvB4O,KAAK8Y,UAAUE,oBAAoBle,OAAOkF,KAAK8Y,UAAUE,oBAAoBzf,QAAQuhB,EAAUtoB,OAAQ,IAG/GokB,EAAetd,UAAUoa,YAAc,SAAU9B,GAE7C,GAAIkJ,GAAY9a,KAAKqa,qBAAqBra,KAAK+W,iBAAiBnS,UAAWgN,EACvE1gB,QAAOC,KAAK2pB,GAAW1pB,SAA2E,IAAjE4O,KAAK8Y,UAAUE,oBAAoBzf,QAAQuhB,EAAUtoB,QACtFwN,KAAK8Y,UAAUE,oBAAoBvmB,KAAKqoB,EAAUtoB,QAG1DokB,EAAetd,UAAUsa,SAAW,SAAUhC,GAE1C,GAAIkJ,GAAY9a,KAAKqa,qBAAqBra,KAAK+W,iBAAiBnS,UAAWgN,EACvE1gB,QAAOC,KAAK2pB,GAAW1pB,QACvB4O,KAAK8Y,UAAUG,kBAAkBne,OAAOkF,KAAK8Y,UAAUG,kBAAkB1f,QAAQuhB,EAAUtoB,OAAQ,IAG3GokB,EAAetd,UAAUwa,SAAW,SAAUlC,GAE1C,GAAIkJ,GAAY9a,KAAKqa,qBAAqBra,KAAK+W,iBAAiBnS,UAAWgN,EACvE1gB,QAAOC,KAAK2pB,GAAW1pB,SAAyE,IAA/D4O,KAAK8Y,UAAUG,kBAAkB1f,QAAQuhB,EAAUtoB,QACpFwN,KAAK8Y,UAAUG,kBAAkBxmB,KAAKqoB,EAAUtoB,QAGxDokB,EAAetd,UAAU4b,WAAa,SAAUtD,GAC5C,GAAIrd,GACAqQ,EAAY5E,KAAK+W,iBAAiBnS,UAElCkW,EAAY9a,KAAKqa,qBAAqBzV,EAAWgN,EAEjD1gB,QAAOC,KAAK2pB,GAAW1pB,SACvBmD,EAAaumB,EAAU9e,KACnB4I,EAAUkW,EAAUtoB,MAAQ,IAC5BoS,EAAUkW,EAAUtoB,MAAQ,GAAGzB,UAET,IADrB6T,EAAUkW,EAAUtoB,MAAQ,GACxB4H,MAAMhJ,QACX4O,KAAKgb,aAAaF,EAAUtoB,MAAQ,GACpCwN,KAAKgb,aAAaF,EAAUtoB,MAAQ,IAGpCwN,KAAKgb,aAAaF,EAAUtoB,OAGpC,IAAI2iB,GAAiBnV,KAAK+W,iBAAiBxiB,qBAAsBwG,eAC3DiF,KAAK+W,iBAAiB9H,UAAYjP,KAAK+W,iBAAiBxiB,WAC1D/B,EAAQ2iB,EAAe5b,QAAQhF,IACpB,IAAX/B,IACA2iB,EAAera,OAAOtI,EAAO,GAC7BwN,KAAK+W,iBAAiB/G,kBAAkBmF,IAG5CnV,KAAK+W,iBAAiBna,aAClBoD,KAAK+W,iBAAiB/O,MAAM1M,iBAAiB,OAGrDsb,EAAetd,UAAUyR,cAAgB,SAAU9X,EAAIjB,GACnD,GAAIQ,GAAQ6G,MAAMC,UAAUC,QAAQ3G,KAAKoN,KAAK+W,iBAAiB/O,MAAM1M,iBAAiB,MAAOrI,GAAM+M,KAAK8M,YACxG9M,MAAKoa,YAAc/gB,MAAMC,UAAUC,QAAQ3G,KAAKoN,KAAK+W,iBAAiB/O,MAAM1M,iBAAiB,MAAOrI,GAAM+M,KAAK8M,aAC3G7Z,EAAGsE,UAAUiC,SAAS4H,EAAW5N,WACoB,IAAjDwM,KAAK8Y,UAAUC,cAAcxf,QAAQ/G,IACrCwN,KAAK8Y,UAAUC,cAActmB,KAAKD,GAItCwN,KAAK8Y,UAAUC,cAAcje,OAAOkF,KAAK8Y,UAAUC,cAAcxf,QAAQ/G,GAAQ,IAIzFokB,EAAetd,UAAU8R,YAAc,SAAUnY,EAAIjB,GACjDgO,KAAKoa,YAAc/gB,MAAMC,UAAUC,QAAQ3G,KAAKoN,KAAK+W,iBAAiB/O,MAAM1M,iBAAiB,MAAOrI,GAAM+M,KAAK8M,cAEnH8J,EAAetd,UAAU8Q,YAAc,SAAU7W,GAC7C,GAAIA,EAAS,CACTyM,KAAK8Y,UAAUC,iBACf/Y,KAAKoa,gBAAc7oB,EAEnB,KAAK,GADDyK,GAAOgE,KAAK+W,iBAAiBnS,UACxBpS,EAAQ,EAAGA,EAAQwJ,EAAK5K,OAAQoB,IAChCwJ,EAAKxJ,GAAOzB,UACbiP,KAAK8Y,UAAUC,cAActmB,KAAKD,OAK1CwN,MAAKoa,gBAAc7oB,GACnByO,KAAK8Y,UAAUC,kBAGvBnC,EAAetd,UAAU2hB,UAAY,SAAUzoB,GAK3C,GAAIunB,GAAY/Z,KAAK+W,iBAAiBnS,SAYtC,IAXA5E,KAAKkb,gBAAgB1oB,GAAO,GACxBwN,KAAKoa,aAAepa,KAAKoa,aAAe5nB,GACxCwN,KAAKoa,cAELpa,KAAK+W,iBAAiBlgB,cACtBkjB,EAAUvnB,GAAOwN,KAAK+W,iBAAiBnmB,OAAO0O,YAC9CU,KAAK8Y,UAAUC,cAActmB,KAAKD,GAEjCqmB,WAAW7Y,KAAK2X,cAAc1f,MAAMkN,SAAY0T,WAAW7Y,KAAK0X,WAAWzf,MAAMkN,UAClFnF,KAAK2X,cAAc1f,MAAMkN,OAAS0T,WAAW7Y,KAAK2X,cAAc1f,MAAMkN,QAAUnF,KAAKgN,eAAiB,MAEtG6L,WAAW7Y,KAAK2X,cAAc1f,MAAMkN,QAAS,CACzCgW,EAASnb,KAAK+W,iBAAiB/O,MAAMwB,iBAAiB4R,iBACtDvoB,EAASmN,KAAK+W,iBAAiBnN,sBAAsBmQ,EAAUvnB,EAAQ,KACvEwN,KAAK+W,iBAAiBnN,sBAAsBmQ,EAAUvnB,EAAQ,OAE9DwN,KAAK2X,cAAc1f,MAAMkN,OAAS0T,WAAW7Y,KAAK2X,cAAc1f,MAAMkN,QAAUnF,KAAKgN,eAAiB,KACtGhN,KAAK6Z,SAASsB,EAAQ3oB,EAAOK,QAGhC,CACD,GAAIsoB,GAASnb,KAAK+W,iBAAiB/O,MAAM1Q,kBAAkB+hB,YACvDxmB,MAAS,EAETA,GADC3B,OAAOC,KAAK6O,KAAK+W,iBAAiBnS,WAAWxT,OAAS,IAAOoB,EACrDwN,KAAK+W,iBAAiB/O,MAAMwB,iBAG5BxJ,KAAK+W,iBAAiBnN,sBAAsBmQ,EAAUvnB,EAAQ,KACnEwN,KAAK+W,iBAAiBnN,sBAAsBmQ,EAAUvnB,EAAQ,IAEtEwN,KAAK0X,WAAWzf,MAAMkN,OAAS0T,WAAW7Y,KAAK0X,WAAWzf,MAAMkN,QAAUnF,KAAKgN,eAAiB,KAChGhN,KAAK8M,eACL9M,KAAKuX,cACD1kB,IACAmN,KAAK6Z,SAASsB,EAAQ3oB,EAAOK,IACU,IAAnCmN,KAAK+W,iBAAiBzR,SACtBmH,OAAO4O,SAAS,EAAI1O,YAAc3M,KAAKgN,gBAGvChN,KAAK+W,iBAAiB/d,QAAQ4T,WAAa5M,KAAKgN,gBAI5DhN,KAAK4X,aAAe5X,KAAKgN,eACzBhN,KAAK+X,SAAWpa,KAAK8a,MAAMI,WAAW7Y,KAAK0X,WAAWzf,MAAMkN,QAAUnF,KAAKgN,iBAE/E4J,EAAetd,UAAU0hB,aAAe,SAAUxoB,GAC9CwN,KAAK4X,aAAe5X,KAAKgN,cACzB,IAAIpI,GAAY5E,KAAK+W,iBAAiBnS,UAAUpS,GAC5C2oB,EAASnb,KAAK+W,iBAAiBnN,sBAAsBhF,EAKzD,IAJA5E,KAAK+W,iBAAiBnS,UAAU9J,OAAOtI,EAAO,GAC1CwN,KAAKoa,aAAepa,KAAKoa,aAAe5nB,GACxCwN,KAAKoa,cAELe,EACA,GAAInb,KAAKsX,aAAepmB,OAAOC,KAAK6O,KAAK+W,iBAAiBnS,WAAWxT,OACjEqT,SAAO0W,GACPnb,KAAKsX,eACLtX,KAAKuX,cACLvX,KAAK4X,YAAc,MAElB,CASD,GARIuD,EAAO5jB,UAAUiC,SAAS4H,EAAWY,WACrCmZ,EAAO5jB,UAAUgE,OAAO6F,EAAWY,SACnChC,KAAK8Y,UAAUE,oBAAoBle,OAAOkF,KAAK8Y,UAAUE,oBAAoBzf,QAAQ/G,GAAQ,IAEpE,SAAzB2oB,EAAOljB,MAAMC,UACbijB,EAAOljB,MAAMC,QAAU,GACvB8H,KAAK8Y,UAAUG,kBAAkBne,OAAOkF,KAAK8Y,UAAUG,kBAAkB1f,QAAQ/G,GAAQ,IAEzFwN,KAAK+W,iBAAiBlgB,cAAgBskB,EAAO5jB,UAAUiC,SAAS4H,EAAW5N,UAAW,CACtFwM,KAAK+W,iBAAiB5L,eACtBnL,KAAK8Y,UAAUC,cAAcje,OAAOkF,KAAK8Y,UAAUC,cAAcxf,QAAQ/G,GAAQ,EACjF,IAAI2nB,GAAmBgB,EAAOvpB,cAAc,IAAMwP,EAAWgB,gBAC7D+X,GAAiBviB,gBAAgB,gBACjCuiB,EAAiB7iB,kBAAkBC,UAAUgE,OAAO6F,EAAW7N,SAC3D4nB,EAAO5jB,UAAUiC,SAAS4H,EAAWG,WACrC4Z,EAAO5jB,UAAUgE,OAAO6F,EAAWG,SACnCvB,KAAKoa,gBAAc7oB,QAGlB4pB,GAAO5jB,UAAUiC,SAAS4H,EAAW5N,YAC1CwM,KAAK+W,iBAAiB5L,eACtBnL,KAAKoa,gBAAc7oB,GAElBsnB,YAAW7Y,KAAK2X,cAAc1f,MAAMkN,SAAY0T,WAAW7Y,KAAK0X,WAAWzf,MAAMkN,QAG7E0T,WAAW7Y,KAAK2X,cAAc1f,MAAMkN,SACzCnF,KAAK2X,cAAc1f,MAAMkN,OAAS0T,WAAW7Y,KAAK2X,cAAc1f,MAAMkN,QAAUnF,KAAKgN,eAAiB,KACtGhN,KAAK6Z,SAASsB,EAAQnb,KAAKuX,YAAavX,KAAK2X,iBAG7C3X,KAAK0X,WAAWzf,MAAMkN,OAAS0T,WAAW7Y,KAAK0X,WAAWzf,MAAMkN,QAAUnF,KAAKgN,eAAiB,KAChGhN,KAAK6Z,SAASsB,EAASnb,KAAK8M,aAAe,EAAI9M,KAAK0X,WAAW2B,aAC/DrZ,KAAKuX,cACLvX,KAAK8M,gBAVL9M,KAAK6Z,SAASsB,EAAQnb,KAAKuX,YAAavX,KAAK2X,eAczD3X,KAAKkb,gBAAgB1oB,GAAO,GAC5BwN,KAAK+X,SAAWpa,KAAK8a,MAAMI,WAAW7Y,KAAK0X,WAAWzf,MAAMkN,QAAUnF,KAAKgN,iBAE/E4J,EAAetd,UAAU4hB,gBAAkB,SAAU1oB,EAAO8oB,GAExD,IAAK,GADDnqB,GAAOD,OAAOC,KAAK6O,KAAK8Y,WACnByC,EAAM,EAAGA,EAAMpqB,EAAKC,OAAQmqB,IACjCvb,KAAK8Y,UAAU3nB,EAAKoqB,IAAQvb,KAAK8Y,UAAU3nB,EAAKoqB,IAAMb,IAAI,SAAU7kB,GAChE,MAAIA,IAAKrD,EACE8oB,IAAczlB,IAAMA,EAGpBA,KAKvB+gB,EAAetd,UAAU0a,QAAU,SAAUhY,EAAMpL,EAAQ2D,GACvD,IAAK,GAAIsB,GAAI,EAAGA,EAAImG,EAAK5K,OAAQyE,IAAK,CAClC,GAAIgf,GAAc7Y,EAAKnG,EAMvB,IAJAtB,EAAW9B,KAAKoiB,GAEhB7U,KAAK+W,iBAAiB/G,kBAAkBzb,GAEnCyL,KAAKsX,aAUL,GAAItX,KAAKsX,aAAetX,KAAKoX,sBAE9B,GADSpX,KAAK+W,iBAAiB1H,eAAe9a,EAAY3D,YACxCyI,OAAO,CACrB,GAAI2G,KAAK+W,iBAAiBta,UAAW,CAC7BjK,EAAQwN,KAAK+W,iBAAiBnS,UAAUrL,QAAQsb,EAEpD7U,MAAKwb,uBAAuB3G,EAAariB,IAErCoS,EAAY5E,KAAK+W,iBAAiBnS,UAAUpS,EAAQ,KACvCoS,EAAU7T,UAAuC,IAA3B6T,EAAUxK,MAAMhJ,WAEjDoB,EAEFwN,KAAKwb,uBAAuB5W,EAAWpS,IAI/CwN,KAAK+W,iBAAiBna,aAClBoD,KAAK+W,iBAAiB/O,MAAM1M,iBAAiB,WAGpD,CAED,GAAI9I,GAAQwN,KAAK+W,iBAAiBnS,UAAUrL,QAAQsb,EAEpD7U,MAAKib,UAAUzoB,EAEf,IAAIoS,GAAY5E,KAAK+W,iBAAiBnS,UAAUpS,EAAQ,EACpDoS,IAAaA,EAAU7T,UAAuC,IAA3B6T,EAAUxK,MAAMhJ,QACnD4O,KAAKib,UAAUzoB,EAAQ,QArCtBwN,KAAK+W,iBAAiBrlB,WAAYsO,KAAK+W,iBAAiB1Z,eAAmB2C,KAAKwR,iBACjFxR,KAAK+W,iBAAiB/S,eAAetS,SAAW,KAChDsO,KAAK+W,iBAAiB/S,eAAe3G,cAAgB,KACrD2C,KAAK+W,iBAAiB/S,eAAe9N,YAAc8J,KAAK0R,aAAavJ,KAAKnI,OAE9EA,KAAK2R,qBAqCjBiF,EAAetd,UAAUkiB,uBAAyB,SAAUC,EAAUjpB,GAElE,GAAIK,GACAI,EAAKmB,WAASgC,uBAAuB4J,KAAK+W,iBAAiBziB,eAE9DmnB,GAAWzb,KAAK+W,iBAAiB/S,eAAgB,KAAM,KAAMhE,KAAK+W,iBAUnE,IAPIlkB,EADC3B,OAAOC,KAAK6O,KAAK+W,iBAAiBnS,WAAWxT,OAAS,IAAOoB,EACrDwN,KAAK+W,iBAAiB/O,MAAMwB,iBAI5BxJ,KAAK+W,iBAAiBnN,sBAAsB5J,KAAK+W,iBAAiBnS,UAAUpS,EAAQ,KACzFwN,KAAK+W,iBAAiBnN,sBAAsB5J,KAAK+W,iBAAiBnS,UAAUpS,EAAQ,IAExFwN,KAAK+W,iBAAiBnmB,OAAOkJ,SAAWkG,KAAK+W,iBAAiBnS,UAAUpS,EAAQ,IAAMwN,KAAK+W,iBAAiBnS,UAAUpS,EAAQ,GAAGzB,SAAU,CAC3I,GAAIikB,GAAYhV,KAAK+W,iBAAiBnN,sBAAsB5J,KAAK+W,iBAAiBnS,UAAUpS,EAAQ,GAChGwiB,KACAniB,EAASmiB,EAAUC,oBAI3BjV,KAAK+W,iBAAiBta,UAAUpK,aAAaY,EAAG,GAAIJ,GAEpDmN,KAAKsX,eACDtX,KAAK8X,qBAAuB,GAC5B9X,KAAKuX,cAGTvX,KAAKuK,qBAETqM,EAAetd,UAAUoY,aAAe,SAAU3I,GAC9C,GAAI2S,GAAkB1b,KAAK+W,iBAAiBrlB,SACxCA,EAAWsO,KAAK+W,iBAAiBziB,cAAc,OAC/CqnB,EAAiB,iFACiB3b,KAAK+W,iBAAiBnmB,OAAOyC,KAAO,iBAI1E,IAHI2M,KAAK+W,iBAAiBtQ,UACtBkV,EAAiB,MAEjB3b,KAAK+W,iBAAiBlgB,aAAc,CAGpC,GADAmJ,KAAK+W,iBAAiB7O,eAAea,IAC/BjY,oBAAkBkP,KAAK+W,iBAAiBxN,mBACxCzY,oBAAkBkP,KAAK+W,iBAAiBxN,gBAAgBlD,WAAa,CACvE,GAAIuV,GAAMjqB,SAAS2C,cAAc,MACjCsnB,GAAI9pB,UAAYkO,KAAK+W,iBAAiBrlB,UAAYiqB,EAC9CC,EAAIlpB,UAAYkpB,EAAIlpB,SAAS,KAC7BkpB,EAAIlpB,SAAS,GAAG6E,UAAUC,IAAI,cACiB,SAA3CwI,KAAK+W,iBAAiBzN,iBACtBsS,EAAIlpB,SAAS,GAAG6E,UAAUC,IAAI,mBAG9BokB,EAAIlpB,SAAS,GAAG6E,UAAUC,IAAI,oBAEa,SAA3CwI,KAAK+W,iBAAiBzN,iBACtBsS,EAAIlpB,SAAS,GAAGL,aAAa2N,KAAK+W,iBAAiBxN,gBAAiBqS,EAAIlgB,WAAW,GAAGhJ,SAAS,IAG/FkpB,EAAIlpB,SAAS,GAAGI,YAAYkN,KAAK+W,iBAAiBxN,iBAEtDvJ,KAAK+W,iBAAiBrlB,SAAWkqB,EAAI9pB,WAG7C,GAAIkO,KAAKiX,wBACL,MACJvlB,GAASI,UAAYkO,KAAK+W,iBAAiBrlB,SAC3CsO,KAAK+W,iBAAiBrlB,SAAWgqB,MAEhC,CACD,GAAI1b,KAAKiX,wBACL,MACJvlB,GAASI,UAAYkO,KAAK+W,iBAAiBrlB,UAAYiqB,EAG3D,GAAIE,GAAmBnqB,EAASoqB,qBAAqB,KACjDze,EAAgB2C,KAAK+W,iBAAiBziB,cAAc,MACpD0L,MAAK+W,iBAAiBnmB,OAAOkJ,UAC7BuD,EAAcvL,UAAYkO,KAAK+W,iBAAiB1Z,eAAiBse,EAGrE,IAAII,GAAwB1e,EAAcye,qBAAqB,IAC3D/S,GAAKhT,QAAQhF,WACbiP,KAAKtC,WAAaqL,EAAKhT,SAE3BiK,KAAKgc,aAAejT,EAAKhT,QAAQhF,SAAWgY,EAAKhT,QAAQqE,MAAM,GAC3D2O,EAAKhT,UACJiK,KAAK+W,iBAAiBtQ,SAAqD,gBAAlCzG,MAAK+W,iBAAiBrlB,WAAyBqX,EAAK5S,KAAKoB,UAAUiC,SAAS,sBACvE,gBAAvCwG,MAAK+W,iBAAiB1Z,eAA6B0L,EAAK5S,KAAKoB,UAAUiC,SAAS,wBACxFuP,EAAK5S,KAAKrE,UAAY,IAE1BiX,EAAK5S,KAAK+iB,SAAYld,KAAM+M,EAAKhT,QAASkmB,OAASC,qBAAuBC,uBAC1E,KAAStmB,EAAI,EAAGA,EAAIgmB,EAAiBzqB,OAAQyE,IACzCmK,KAAKvO,gBAAgBoqB,EAAiBhmB,GAAIkT,EAAK5S,MAAM,EAEzD,KAAK,GAAIN,GAAI,EAAGA,EAAIkmB,EAAsB3qB,OAAQyE,IAC9CmK,KAAKvO,gBAAgBsqB,EAAsBlmB,GAAIkT,EAAK5S,MAAM,EAE9D4S,GAAK5S,KAAK+iB,QAAQxnB,SAAWqX,EAAKhT,QAAQhF,SAAWW,EAAS4F,kBAC1D+F,EAAc/F,kBAClByR,EAAK5S,KAAK+iB,QAAQlkB,KAAO+T,EAAKhT,QAAQhF,SAAW,WAAa,WAC9D,IAAIiI,GAAU+P,EAAKhT,QAAQhF,SAAWsM,EAAgB3L,CAClDsH,GAAQ1B,mBACRyR,EAAK5S,KAAK9D,aAAa2G,EAAQ1B,kBAAmB,OAG1Dsf,EAAetd,UAAU7H,gBAAkB,SAAUuH,EAAS7C,EAAMpF,GAChEiP,KAAKoc,aAAapjB,EAAS7C,EAAMpF,GACjCiP,KAAKqc,cAAcrjB,EAAS7C,EAAMpF,GAClCiP,KAAKsc,kBAAkBtjB,EAAS7C,EAAMpF,IAE1C6lB,EAAetd,UAAUijB,SAAW,SAAUC,EAASC,GACnDA,EAAYvD,QAAQld,KAAOwgB,CAE3B,IAAIL,GAAqBM,EAAYvD,QAAQ+C,MAAME,mBAE/CD,EAAoBO,EAAYvD,QAAQ+C,MAAMC,iBAElD,KAAKprB,oBAAkB0rB,EAAQzrB,WAAayrB,EAAQzrB,UAAyC,cAA7B0rB,EAAYvD,QAAQlkB,KAAsB,CAElGgE,EAAUyjB,EAAYnlB,iBAC1BmN,UAAOgY,EAAYnlB,mBACnBmlB,EAAYpqB,aAAaoqB,EAAYvD,QAAQxnB,SAAU,MACvD+qB,EAAYvD,QAAQxnB,SAAWsH,EAC/ByjB,EAAYvD,QAAQlkB,KAAO,UAC3B,KAASa,EAAI,EAAGA,EAAIsmB,EAAmB/qB,OAAQyE,IAE3CsmB,EAAmBtmB,GAAG0mB,SAASC,OAGlC,IAAKA,EAAQzrB,UAAyC,aAA7B0rB,EAAYvD,QAAQlkB,KAW7C,GAAKwnB,EAAQzrB,SAOd,IAAS8E,EAAI,EAAGA,EAAIsmB,EAAmB/qB,OAAQyE,IAE3CsmB,EAAmBtmB,GAAG0mB,SAASC,OARnC,KAAS3mB,EAAI,EAAGA,EAAIqmB,EAAkB9qB,OAAQyE,IAE1CqmB,EAAkBrmB,GAAG0mB,SAASC,OAdiC,CACnE,GAAIxjB,GAAUyjB,EAAYnlB,iBAC1BmN,UAAOgY,EAAYnlB,mBACnBmlB,EAAYpqB,aAAaoqB,EAAYvD,QAAQxnB,SAAU,MACvD+qB,EAAYvD,QAAQxnB,SAAWsH,EAC/ByjB,EAAYvD,QAAQlkB,KAAO,WAC3B,KAAK,GAAIa,GAAI,EAAGA,EAAIqmB,EAAkB9qB,OAAQyE,IAE1CqmB,EAAkBrmB,GAAG0mB,SAASC,KAiB1C5F,EAAetd,UAAUojB,kBAAoB,SAAUD,EAAaE,EAAM5rB,GAClEA,EACA0rB,EAAYvD,QAAQ+C,MAAME,mBAAmB1pB,KAAKkqB,GAGlDF,EAAYvD,QAAQ+C,MAAMC,kBAAkBzpB,KAAKkqB,IAGzD/F,EAAetd,UAAU+iB,cAAgB,SAAUrjB,EAASyjB,EAAa1rB,GAIrE,IAHA,GAEI6rB,GAFAC,EAAQ,GAAIC,QAAO,eAAgB,KACnCC,KAEkB,OAAfH,GAAqB,CACxB,GAAI3gB,GAAQ4gB,EAAMG,KAAKhkB,EAAQhC,UAC/B+lB,GAAgBtqB,KAAKwJ,GAEF,QADnB2gB,EAAa3gB,IAET8gB,EAAgBxK,MAGxB,GAAIwK,GAAmBA,EAAgB3rB,OAyCnC,IAAK,GADD6rB,GAASjd,KACJnK,EAAI,EAAGA,EAAIknB,EAAgB3rB,OAAQyE,KAxC9B,SAAUA,GACpB,GAEIqnB,GAFAC,EAAiBJ,EAAgBlnB,EAKjCqnB,IAFoC,IAApCC,EAAe,GAAG5jB,QAAQ,OAAmD,IAApC4jB,EAAe,GAAG5jB,QAAQ,KAEnD,GAAI6jB,UAAS,OAAQ,UAAYD,EAAe,GAAGE,QAAQ,MAAO,UAIlE,GAAID,UAAS,OAAQ,eAAsBD,EAAe,GAG9E,IAAIG,KAEAA,GAAQC,YAAcL,EADtBnsB,EACoCksB,EAAOvf,WAGPuf,EAAOjB,cAE/CsB,EAAQf,SAAW,SAAUjrB,GACrBgsB,EAAQC,aACRrY,eAAalM,GAAUskB,EAAQC,YAAYnhB,MAAM,KAAK4I,OAAO,SAAUC,GAAO,MAAOA,KAEzF,IAAIuY,GAASN,EAAc5rB,EACvBksB,IACA5kB,YAAUI,GAAU,EAASoD,MAAM,KAAK4I,OAAO,SAAUC,GAAO,MAAOA,MAE3EqY,EAAQC,YAAcC,EAG1B,KAAK,GADDxmB,GAAYmmB,EAAe,GAAG/gB,MAAM,KAC/BT,EAAM,EAAGA,EAAM3E,EAAU5F,OAAQuK,IACtC3C,EAAQzB,UAAUgE,OAAOvE,EAAU2E,GAEnC2hB,GAAQC,aACR3kB,YAAUI,GAAUskB,EAAQC,YAAYnhB,MAAM,KAAK4I,OAAO,SAAUC,GAAO,MAAOA,MAEtFgY,EAAOP,kBAAkBD,EAAaa,EAASvsB,IAIvC8E,IAIpB+gB,EAAetd,UAAUgjB,kBAAoB,SAAUtjB,EAASyjB,EAAa1rB,GAEzE,IAAK,GADD0sB,MACK5nB,EAAI,EAAGA,EAAImD,EAAQqD,WAAWjL,OAAQyE,IAC3C4nB,EAAehrB,KAAKuG,EAAQqD,WAAWxG,GAAGyG,WAEL,IAArCmhB,EAAelkB,QAAQ,UACvBkkB,EAAe3iB,OAAO2iB,EAAelkB,QAAQ,SAAU,EAuD3D,KAAK,GADDmkB,GAAS1d,KACJnK,EAAI,EAAGA,EAAI4nB,EAAersB,OAAQyE,KArD7B,SAAUA,GACpB,GAKI8nB,GAEAC,EAPAC,EAAgBJ,EAAe5nB,GAC/BioB,EAAgB,GAAIhB,QAAO,eAAgB,KAAKE,KAAKa,OACrDE,EAAiB,GAAIjB,QAAO,eAAgB,KAAKE,KAAKhkB,EAAQoY,aAAayM,OAM/E,IAAIC,EAAc1sB,QAAU2sB,EAAe3sB,OAAQ,CAC3C0sB,EAAc,KAEdH,EAAwB,GAAIP,UAAS,OAAQ,eAAsBU,EAAc,KAEjFC,EAAe,KAGXH,GAFoC,IAApCG,EAAe,GAAGxkB,QAAQ,OAAmD,IAApCwkB,EAAe,GAAGxkB,QAAQ,KAE1C,GAAI6jB,UAAS,OAAQ,UAAYW,EAAe,GAAGV,QAAQ,MAAO,UAIlE,GAAID,UAAS,OAAQ,eAAsBW,EAAe,IAI3F,IAAIC,KAEAA,GAAUT,YADVxsB,OAC8CQ,KAArBusB,EAAc,OAAmBvsB,GAAYosB,EAAsBD,EAAOhgB,gBACzEnM,KAAtBwsB,EAAe,OAAmBxsB,GAAYqsB,EAAuBF,EAAOhgB,kBAGlCnM,KAArBusB,EAAc,OAAmBvsB,GAAYosB,EAAsBD,EAAO1B,kBACzEzqB,KAAtBwsB,EAAe,OAAmBxsB,GAAYqsB,EAAuBF,EAAO1B,eAEpFgC,EAAUC,aAAwC1sB,KAA7BysB,EAAUT,YAAY,GACvCM,EAAgBG,EAAUT,YAAY,GAC1CS,EAAUzB,SAAW,SAAUjrB,GAC3B,GAAIisB,OAA2ChsB,KAA7BysB,EAAUT,YAAY,GACpCvkB,EAAQoY,aAAa4M,EAAUC,UAAYL,EAAuBtsB,EACtE0H,GAAQpB,gBAAgBomB,EAAUC,UAClCD,EAAUC,aAAwC1sB,KAA7BysB,EAAUT,YAAY,GAAmBS,EAAUC,SAAWN,EAAsBrsB,GACzG0H,EAAQvB,aAAaumB,EAAUC,SAAUV,GACzCS,EAAUT,iBAA4ChsB,KAA7BysB,EAAUT,YAAY,OAAmBhsB,GAAYosB,EAAsBrsB,OACnEC,KAA7BysB,EAAUT,YAAY,OAAmBhsB,GAAYqsB,EAAuBtsB,IAEpF,IAAI4sB,OAA8C3sB,KAA7BysB,EAAUT,YAAY,GAAmBvkB,EAAQoY,aAAayM,GAC/EG,EAAUT,YAAY,EAC1BvkB,GAAQpB,gBAAgBimB,GACxB7kB,EAAQvB,aAAaumB,EAAUC,SAAUC,GACzCR,EAAOhB,kBAAkBD,EAAauB,EAAWjtB,KAK7C8E,IAGhB+gB,EAAetd,UAAU8iB,aAAe,SAAUpjB,EAASyjB,EAAa1rB,GAIpE,IAHA,GAEI6rB,GAFAC,EAAQ,GAAIC,QAAO,eAAgB,KACnCC,KAEkB,OAAfH,GAAqB,CACxB,GAAI3gB,GAAQ4gB,EAAMG,KAAKhkB,EAAQ6D,UAC/BkgB,GAAgBtqB,KAAKwJ,GAEF,QADnB2gB,EAAa3gB,IAET8gB,EAAgBxK,MAGxB,GAAI4L,GAAwB9kB,MAAMC,UAAUoW,KAAK9c,KAAKoG,EAAQtG,SAAU,SAAUsG,GAC9E,QAAI,GAAI8jB,QAAO,eAAgB,KAAKE,KAAKhkB,EAAQ6D,YAOrD,IAAIkgB,GAAmBA,EAAgB3rB,SAAW+sB,EA6B9C,IAAK,GADDC,GAASpe,KACJnK,EAAI,EAAGA,EAAIknB,EAAgB3rB,OAAQyE,KA5B9B,SAAUA,GACpB,GAIIwoB,GAJAC,EAAoBvB,EAAgBlnB,GAEpCynB,IAKAe,IAFuC,IAAvCC,EAAkB,GAAG/kB,QAAQ,OAAsD,IAAvC+kB,EAAkB,GAAG/kB,QAAQ,KAE1D,GAAI6jB,UAAS,OAAQ,UAAYkB,EAAkB,GAAGjB,QAAQ,MAAO,UAIrE,GAAID,UAAS,OAAQ,eAAsBkB,EAAkB,IAG5EhB,EAAQC,YAAcc,EADtBttB,EACmCqtB,EAAO1gB,WAGP0gB,EAAOpC,cAE9CsB,EAAQf,SAAW,SAAUjrB,GACzB0H,EAAQ6D,UAAY7D,EAAQ6D,UAAUwgB,QAAQC,EAAQC,YAAac,EAAa/sB,IAChFgsB,EAAQC,YAAcc,EAAa/sB,IAEvC0H,EAAQ6D,UAAY7D,EAAQ6D,UAAUwgB,QAAQiB,EAAkB,GAAIhB,EAAQC,aAC5Ea,EAAO1B,kBAAkBD,EAAaa,EAASvsB,IAIvC8E,IAIpB+gB,EAAetd,UAAU8K,yBAA2B,WAChDpE,KAAKkX,iBAAgB,GACjBlX,KAAK+W,iBAAiBvS,kBACtBC,SAAOzE,KAAK+W,iBAAiBvS,kBAEjCxE,KAAK+W,iBAAiB9O,YAGtBjI,KAAKsX,aAAe,EACpBtX,KAAK+W,iBAAiBtZ,SACtBuC,KAAK+W,iBAAiBtG,gBAE1BmG,EAAetd,UAAUugB,SAAW,SAAU7gB,EAASxG,EAAOiY,GAE1D,GAAI8R,GAAWvc,KAAKwR,eAAiBxR,KAAKue,WAAcve,KAAKiX,wBAA2BjX,KAAKwe,YAAcxe,KAAKuc,QAChH,IAAIvc,KAAK+W,iBAAiBrlB,UAAYsO,KAAK+W,iBAAiB1Z,cAAe,CACvE,GAAIuH,GAAY5E,KAAK+W,iBAAiBnS,UAAUpS,EAEhDwG,GAAQghB,QAAQrH,IAAO/N,EAAU5E,KAAK+W,iBAAiBnmB,OAAO+E,IAEzDiP,EAAU5E,KAAK+W,iBAAiBnmB,OAAO+E,IAAOvB,WAASwB,aAC5D2mB,EAAS3X,EAAW5L,EAASgH,UAG7BA,MAAK8Z,gBAAgB9gB,EAASxG,EAElCwN,MAAKka,wBAAwBlhB,EAASxG,GAClCiY,GACAzK,KAAK+W,iBAAiBta,UAAUpK,aAAa2G,EAASyR,IAU9DmM,EAAetd,UAAUklB,YAAc,SAAUhC,EAASC,EAAagC,GAInE,IAHA,GAAItD,GAAS/mB,WAASgC,uBAAuBqoB,EAAY1H,iBAAiBziB,eAEzEkoB,GAAUiC,EAAY1H,iBAAiB/S,eAAgB,KAAM,KAAMya,EAAY1H,kBACzE0F,EAAYiC,WACfjC,EAAYpR,YAAYoR,EAAYiC,UAExCjC,GAAY3pB,YAAYqoB,EAAO,GAAGwD,aAEtC/H,EAAetd,UAAUilB,WAAa,SAAU/B,EAASC,EAAagC,GAKlE,IAFA,GACIG,GADmB/sB,UAAQ4sB,EAAY1H,iBAAiBrlB,UACvB8qB,GAC9BC,EAAYiC,WACfjC,EAAYpR,YAAYoR,EAAYiC,UAExCjC,GAAY3pB,YAAY8rB,EAAc,KAE1ChI,EAAetd,UAAUjD,cAAgB,WACrC,MAAO,kBAEXugB,EAAetd,UAAU6U,QAAU,WAC/BnO,KAAKkX,iBAAgB,IAElBN,KFtoCPpX,EAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBvO,OAAO0O,iBAChBC,uBAA2BxG,QAAS,SAAUqG,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEjJ,eAAeoJ,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASI,KAAOC,KAAKC,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEpG,UAAkB,OAANqG,EAAazO,OAAOgP,OAAOP,IAAMI,EAAGzG,UAAYqG,EAAErG,UAAW,GAAIyG,QAGnFI,EAA0C,SAAUC,EAAYvN,EAAQyH,EAAK+F,GAC7E,GAA2HX,GAAvHY,EAAIC,UAAUnP,OAAQoP,EAAIF,EAAI,EAAIzN,EAAkB,OAATwN,EAAgBA,EAAOnP,OAAOuP,yBAAyB5N,EAAQyH,GAAO+F,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAYvN,EAAQyH,EAAK+F,OACpH,KAAK,GAAIxK,GAAIuK,EAAWhP,OAAS,EAAGyE,GAAK,EAAGA,KAAS6J,EAAIU,EAAWvK,MAAI2K,GAAKF,EAAI,EAAIZ,EAAEc,GAAKF,EAAI,EAAIZ,EAAE7M,EAAQyH,EAAKkG,GAAKd,EAAE7M,EAAQyH,KAASkG,EAChJ,OAAOF,GAAI,GAAKE,GAAKtP,OAAO0P,eAAe/N,EAAQyH,EAAKkG,GAAIA,GAqB5Dqe,EAA0B,SAAU/b,GAEpC,QAAS+b,GAAS7lB,EAASxE,GACvB,GAAI2O,GAAQL,EAAOlQ,KAAKoN,KAAMxL,EAASwE,IAAYgH,IA0LnD,OAzLAmD,GAAM2b,UAAY,SAAU9sB,GAExB,GAAIa,GAASsQ,EAAM4b,mBAAmB/sB,EAAEgtB,OAAOnsB,OAC/C,KAAKsQ,EAAM8b,cAAcpsB,EAAQsQ,GAC7B,OAAO,CAEX,IAAInK,EAWJ,OAVImK,GAAM+b,OACNlmB,EAAUmK,EAAM+b,QAASF,OAAQnsB,EAAQmG,QAAShH,EAAEgH,YAGpDA,EAAUnG,EAAOsI,WAAU,IACnBlD,MAAMoN,MAAQxS,EAAOssB,YAAc,KAC3CnmB,EAAQf,MAAMkN,OAAStS,EAAOusB,aAAe,MAEjDxmB,YAAUI,IAAW,oBACrBrH,SAAS0tB,KAAKvsB,YAAYkG,GACnBA,GAGXmK,EAAMmc,OAAS,SAAUttB,GACrB,GAAKA,EAAEa,OAAP,CAGAsQ,EAAM4E,QAAQ,QAAU6G,MAAO5c,EAAE4c,MAAO5V,QAASmK,EAAMnK,QAASnG,OAAQb,EAAEa,QAC1E,IAAI0sB,GAAUpc,EAAMqc,oBAAoBxtB,EAAEa,QACtCA,EAASsQ,EAAM4b,mBAAmB/sB,EAAEa,OAAQ0sB,EAChD,MAAKpc,EAAM8b,cAAcpsB,EAAQ0sB,IAAYvtB,EAAEa,OAAOmE,UAAUuC,QAAQ,sBAAwB,IAAO4J,EAAMsc,YAAc5sB,GACtH/B,oBAAkByuB,EAAQG,cAAkBH,EAAQI,oBAAqBJ,EAAQI,qBAAuB3tB,EAAEa,OAgDtGsQ,EAAMsc,YAActc,EAAMtQ,QAAUsQ,EAAMyc,OAASzc,EAAMsc,YAAc5sB,IAAW/B,oBAAkByuB,EAAQG,eACjHnkB,SAAO4H,EAAMqc,oBAAoBrc,EAAMsc,WAAWE,oBAClDxc,EAAMsc,UAAYtc,EAAMtQ,YAlDmG,CAK3H,GAJIb,EAAEa,OAAOmE,UAAUuC,QAAQ,sBAAwB,IACnD1G,EAASb,EAAEa,QAEfsQ,EAAMsc,UAAY5sB,EACdsQ,EAAMtQ,SAAWA,EACjB,MAEJ,IAAIgtB,GAAS1c,EAAM2c,SAASP,EAAQI,mBAAoBJ,GACpDG,EAAcvc,EAAM4c,eAAeltB,EAAQ0sB,GAC3CS,MAAS,EACb,IAAIN,EAAa,CACbG,EAAS/uB,oBAAkB+uB,GAAU1c,EAAM2c,SAAS3c,EAAMtQ,QAAUgtB,EACpEG,EAAS7c,EAAM2c,SAASjtB,EAAQ0sB,EAASvtB,EAAE4c,MAC3C,IAAIqR,GAAuB9c,EAAM8c,qBAAqBV,EACtD,IAAIU,GAAwBJ,IAAWG,EACnC,MAEAC,IACA1kB,SAAOgkB,EAAQI,oBAEnBJ,EAAQI,mBAAqBD,EACzB1tB,EAAEa,OAAOmE,UAAUuC,QAAQ,sBAAwB,EACnDgmB,EAAQvmB,QAAQ3G,aAAaktB,EAAQI,mBAAoBJ,EAAQvmB,QAAQtG,SAASstB,IAE7ET,EAAQvmB,UAAYmK,EAAMnK,SAAWgnB,IAAWT,EAAQvmB,QAAQknB,kBACrEX,EAAQvmB,QAAQlG,YAAYysB,EAAQI,oBAGpCJ,EAAQvmB,QAAQ3G,aAAaktB,EAAQI,mBAAoBJ,EAAQvmB,QAAQtG,SAASstB,IAEtF7c,EAAMgd,gBAAgBN,EAAQG,EAAQT,OAErC,CACDM,EAAS/uB,oBAAkB+uB,GAAU1c,EAAM2c,SAAS3c,EAAMtQ,QACtDsQ,EAAM2c,SAASjtB,EAAQ0sB,GAAWM,IAAWA,EAASA,EAASA,EAAS,EAC5EG,EAAS7c,EAAM2c,SAASjtB,EAAQ0sB,EAChC,IAAIa,GAAMb,EAAQvmB,UAAYmK,EAAMnK,QAAUgnB,EAASH,EAASG,EAASA,EAAS,EAAIA,CACtF7c,GAAMkd,gBAAgBd,GACtBA,EAAQvmB,QAAQ3G,aAAa8Q,EAAMtQ,OAAQ0sB,EAAQvmB,QAAQtG,SAAS0tB,IACpEjd,EAAMgd,gBAAgBN,EAAQG,EAAQT,GACtCpc,EAAMsc,UAAYtc,EAAMtQ,OACxBsQ,EAAM4E,QAAQ,QACVuY,eAAgBnd,EAAMtQ,OAAQmG,QAASumB,EAAQvmB,QAASunB,cAAeV,EAAQW,aAAcR,EAC7FntB,OAAQb,EAAEa,OAAQqsB,OAAQvtB,SAASohB,uBAAuB,mBAAmB,GAAInE,MAAO5c,EAAE4c,MAAOgR,MAAOzc,EAAMyc,SAS1H,GADAL,EAAUpc,EAAMqc,oBAAoBrc,EAAMsc,WACtC3uB,oBAAkB+B,IAAWb,EAAEa,SAAW0sB,EAAQI,mBAC9Cxc,EAAM8c,qBAAqBV,IAC3Bpc,EAAMsd,kBAAkBlB,OAG3B,CACD,GACImB,MADkB/tB,MAAMC,KAAKjB,SAASohB,uBAAuB,2BAEpDxgB,QAAQ,SAAUmtB,IAC3BgB,EAASvd,EAAMqc,oBAAoBE,IACxB1mB,SAAW0nB,IAAWnB,GAC7Bpc,EAAMsd,kBAAkBC,QAMxCvd,EAAMwd,YAAc,SAAU3uB,GAC1BmR,EAAMtQ,OAASsQ,EAAM4b,mBAAmB/sB,EAAEa,OAC1C,IAAI+tB,IAAa,CACjBzd,GAAMtQ,OAAO0E,UAAUC,IAAI,aAC3B2L,EAAMsc,UAAYtc,EAAMtQ,OACxBb,EAAEktB,OAASvtB,SAASohB,uBAAuB,mBAAmB,EAC9D,IAAIhK,IAAS8F,QAAQ,EAAO7V,QAASmK,EAAMnK,QAASnG,OAAQsQ,EAAMtQ,OAClEsQ,GAAM4E,QAAQ,kBAAmBgB,EAAM,SAAU+F,GACzCA,EAAaD,SACb+R,EAAa9R,EAAaD,OAC1B1L,EAAM0d,WAAW7uB,MAGrB4uB,IAGAE,WACA3d,EAAM4E,QAAQ,aACV6G,MAAO5c,EAAE4c,MAAO5V,QAASmK,EAAMnK,QAASnG,OAAQsQ,EAAMtQ,OACtDkuB,WAAY/uB,EAAE+uB,WAAYC,YAAahvB,EAAEgvB,cAI7C7d,EAAM4E,QAAQ,aAAe6G,MAAO5c,EAAE4c,MAAO5V,QAASmK,EAAMnK,QAASnG,OAAQsQ,EAAMtQ,WAI3FsQ,EAAM0d,WAAa,SAAU7uB,GACzB,GACIivB,GACAC,EACAC,EAHAC,EAAWje,EAAMqc,oBAAoBrc,EAAMsc,UAI/CwB,GAAU9d,EAAM2c,SAAS3c,EAAMtQ,OAC/B,IAAIotB,GAAuB9c,EAAM8c,qBAAqBmB,EACtD,IAAInB,EAAsB,CACtB,GAAIoB,GAAWle,EAAM2c,SAASsB,EAASzB,mBAAoByB,GACvDrY,GACAwX,cAAeU,EAAST,aAAca,EAAUxuB,OAAQb,EAAEa,OAAQytB,eAAgBnd,EAAMtQ,OACxFqsB,OAAQltB,EAAEktB,OAAQrQ,QAAQ,EAAOsS,SAAS,EAE9Che,GAAM4E,QAAQ,aAAcgB,EAAM,SAAU+F,GACxC,IAAKA,EAAaD,OAAQ,CAGtB,GAFAsS,EAAUrS,EAAaqS,QACvBhe,EAAMkd,gBAAgBe,GAClBtS,EAAaqS,QAAS,CACtB,GAAI5S,GAAMpL,EAAMtQ,OAAOsI,WAAU,EACjCgI,GAAMtQ,OAAO0E,UAAUgE,OAAO,aAC9B4H,EAAMtQ,OAAS0b,EAEnB6S,EAASpoB,QAAQ3G,aAAa8Q,EAAMtQ,OAAQuuB,EAASzB,mBACrD,IAAI2B,GAAWne,EAAM2c,SAAS3c,EAAMtQ,OAAQuuB,EAC5CH,GAAU9d,IAAUie,GAAaH,EAAUK,EAAY,EAAIL,EAAU,EAAIA,EACzE9d,EAAM4E,QAAQ,QACV6G,MAAO5c,EAAE4c,MAAO5V,QAASooB,EAASpoB,QAASunB,cAAeU,EAAST,aAAcc,EACjFzuB,OAAQb,EAAEa,OAAQqsB,OAAQltB,EAAEktB,OAAQoB,eAAgBnd,EAAMtQ,OAAQ0uB,UAAWpe,EAAMyc,MAAOuB,QAASA,IAG3G5lB,SAAO6lB,EAASzB,sBAOxB,GAJAyB,EAAWje,EAAMqc,oBAAoBxtB,EAAEa,QAEvCquB,EAASE,EAASpoB,QAAQknB,kBAC1Be,EAAU9d,EAAM2c,SAAS3c,EAAMtQ,QAC3BuuB,EAASpoB,UAAYhH,EAAEa,SAAYotB,GAAwB9c,EAAMsc,YAActc,EAAMtQ,OAAS,CAC9F,GAAI2uB,IACAjB,cAAeU,EAAST,aAAcrd,EAAMsc,YAActc,EAAMtQ,OAASouB,EAAUC,EACnFruB,OAAQb,EAAEa,OAAQytB,eAAgBnd,EAAMtQ,OAAQqsB,OAAQltB,EAAEktB,OAAQrQ,QAAQ,EAE9E1L,GAAM4E,QAAQ,aAAcyZ,EAAgB,SAAU1S,GAC9CsS,EAASpoB,UAAYhH,EAAEa,QAAWic,EAAaD,SAC/C1L,EAAMkd,gBAAgBe,GACtBA,EAASpoB,QAAQlG,YAAYqQ,EAAMtQ,QACnCsQ,EAAM4E,QAAQ,QACV6G,MAAO5c,EAAE4c,MAAO5V,QAASooB,EAASpoB,QAASunB,cAAeU,EAAST,aAAcU,EACjFruB,OAAQb,EAAEa,OAAQqsB,OAAQltB,EAAEktB,OAAQoB,eAAgBnd,EAAMtQ,OAAQ0uB,UAAWpe,EAAMyc,WAKnGzc,EAAMtQ,OAAO0E,UAAUgE,OAAO,aAC9B4H,EAAMtQ,OAAS,KACfsQ,EAAMsc,UAAY,KAClBlkB,SAAOvJ,EAAEktB,QACTuC,eAAate,EAAMnK,QAAS,aAAa0oB,WAAW1vB,EAAE4c,QAE1DzL,EAAMgF,OACChF,EA5LX3D,EAAUqf,EAAU/b,GA8LpB6e,EAAa9C,EACbA,EAASvlB,UAAU6O,KAAO,WACjBnI,KAAKhH,QAAQrD,KACdqK,KAAKhH,QAAQrD,GAAKisB,cAAY,aAE7B5hB,KAAK5I,YACN4I,KAAK5I,UAAY,cACjB4I,KAAK6hB,YAET7hB,KAAK8hB,uBAETjD,EAASvlB,UAAUwoB,oBAAsB,WACrC,GAAIC,aAAU/hB,KAAKhH,SACfkmB,OAAQlf,KAAK8e,UACbkD,UAAWhiB,KAAK2gB,YAChBsB,KAAMjiB,KAAKsf,OACX4C,SAAUliB,KAAK6gB,WACfsB,WAAY,IAAMniB,KAAK5I,UACvBgrB,eAAe,EACfC,iBAAkB,IAClBC,kBAAmBtiB,KAAKsiB,kBACxBC,SAAU,KAGlB1D,EAASvlB,UAAUymB,eAAiB,SAAUltB,EAAQgkB,GAClD,GAAIA,EAAS6I,YAAa,CACtB,GAAIC,GAAqB9I,EAAS6I,aAAc1mB,QAAS6d,EAAS7d,QAASwpB,eAAgBxiB,KAAKnN,OAAQA,OAAQA,GAEhH,OADA8sB,GAAmBpoB,UAAUC,IAAI,0BAC1BmoB,EAEX,MAAO,OAEXd,EAASvlB,UAAU2lB,cAAgB,SAAUpsB,EAAQgkB,GACjD,MAAOhkB,IAAU4vB,uBAAqB5vB,EAAQgkB,EAAS7d,UAAYnG,EAAO0E,UAAUiC,SAASqd,EAASzf,aACjGvE,EAAO0E,UAAUiC,SAAS,eAEnCqlB,EAASvlB,UAAUmnB,kBAAoB,SAAU5J,GAC7Ctb,SAAOsb,EAAS8I,oBAChB9I,EAAS8I,mBAAqB,MAElCd,EAASvlB,UAAU+mB,gBAAkB,SAAUxJ,GACvC7W,OAAS6W,IACT7W,KAAKnN,OAAO0E,UAAUgE,OAAOyE,KAAK5I,WAClC4I,KAAKnN,OAAO0E,UAAUC,IAAIqf,EAASzf,aAG3CynB,EAASvlB,UAAUkmB,oBAAsB,SAAUxmB,GAE/C,GADAA,EAAU4R,UAAQ5R,EAAS,MAAQgH,KAAK3J,iBAC3B,CACT,GAAIqsB,GAAOjB,eAAazoB,EAAS2oB,EACjC,OAAOe,GAAK9C,OAAS5f,KAAK4f,OAAS8C,EAAK9C,QAAU5f,KAAK4f,MAAQ8C,EAAO1iB,KAGtE,MAAOA,OAGf6e,EAASvlB,UAAU6mB,gBAAkB,SAAUN,EAAQG,EAAQnJ,GAC3D,GAAIA,IAAa7W,KAMb,IALA,GAAIhH,OAAU,GACV2pB,EAAY9C,EAASG,EACrB4C,MAAc,GACdC,EAAQF,EAAY9C,EAASG,EAC7BnY,EAAM8a,EAAY3C,EAASH,EACxBgD,GAAShb,IACZ7O,EAAUgH,KAAKhH,QAAQtG,SAASmwB,IACpBtrB,UAAUiC,SAAS,eAC3BopB,EAAc5iB,KAAK8f,SAAS9mB,GAC5BgH,KAAKhH,QAAQ3G,aAAa2G,EAASgH,KAAKhH,QAAQtG,SAASiwB,EAAYC,EAAc,EAAIA,EAAc,IACrGC,EAAQF,EAAYC,EAAc,EAAIA,EAAc,GAGpDC,KAKhBhE,EAASvlB,UAAUwmB,SAAW,SAAUjtB,EAAQgkB,EAAU7kB,OACrC,KAAb6kB,IAAuBA,EAAW7W,KACtC,IAAIogB,GACA0C,CAkBJ,UAjBGnwB,MAAMC,KAAKikB,EAAS7d,QAAQtG,UAAUH,QAAQ,SAAUyG,EAASxG,GAIhE,GAHIwG,EAAQzB,UAAUiC,SAAS,4BAC3BspB,GAAqB,GAErB9pB,IAAYnG,OAEZ,IADAutB,EAAM5tB,GACD1B,oBAAkBkB,GAAI,CACnB8wB,IACA1C,GAAO,EAEX,IAAI2C,GAASlwB,EAAOoZ,wBAChB+W,EAAUD,EAAOE,QAAWF,EAAOE,OAASF,EAAO7W,KAAO,CAC9DkU,GAAMpuB,EAAEgxB,SAAWA,EAAU5C,EAAMA,EAAM,KAK9CA,GAEXvB,EAASvlB,UAAUylB,mBAAqB,SAAU/lB,EAAS6d,GAEvD,WADiB,KAAbA,IAAuBA,EAAW7W,MAC/B4K,UAAQ5R,EAAS,IAAM6d,EAASzf,YAE3CynB,EAASvlB,UAAUgpB,kBAAoB,SAAUhxB,GAG7C,MAFAA,GAAM4xB,KAAOC,YAActK,WAAWvnB,EAAM4xB,MAAQC,YAAc,KAAO7xB,EAAM4xB,KAC/E5xB,EAAM4a,IAAMS,YAAckM,WAAWvnB,EAAM4a,KAAOS,YAAc,KAAOrb,EAAM4a,IACtE5a,GAEXutB,EAASvlB,UAAU2mB,qBAAuB,SAAUpJ,GAChD,MAAOA,GAAS8I,sBAAwB/U,UAAQiM,EAAS8I,mBAAoB,IAAM9I,EAAS7d,QAAQrD,KAcxGkpB,EAASvlB,UAAUrH,OAAS,SAAUmxB,EAAahxB,EAAeC,GAC9DJ,EAAO+N,KAAKhH,QAASoqB,EAAahxB,EAAeC,IAKrDwsB,EAASvlB,UAAU6U,QAAU,WACF,gBAAnBnO,KAAK5I,YACL4I,KAAK5I,UAAY,KACjB4I,KAAK6hB,YAETJ,eAAazhB,KAAKhH,QAAS+oB,aAAW5T,UACtCrL,EAAOxJ,UAAU6U,QAAQvb,KAAKoN,OAElC6e,EAASvlB,UAAUjD,cAAgB,WAC/B,MAAO,YAEXwoB,EAASvlB,UAAUkK,kBAAoB,SAAUC,EAASC,GACtD,IAAK,GAAI1S,GAAK,EAAGC,EAAKC,OAAOC,KAAKsS,GAAUzS,EAAKC,EAAGG,OAAQJ,IAExD,OADWC,EAAGD,IAEV,IAAK,eACE2B,MAAMC,KAAKoN,KAAKhH,QAAQtG,UAAUH,QAAQ,SAAUyG,GAC/CA,EAAQzB,UAAUiC,SAASkK,EAAQtM,YACnC4B,EAAQzB,UAAUgE,OAAOmI,EAAQtM,WAEjCqM,EAAQrM,WACR4B,EAAQzB,UAAUC,IAAIiM,EAAQrM,cAOtD,IAAIuqB,EAkCJ,OAjCAxhB,IACI6C,YAAS,IACV6b,EAASvlB,UAAW,sBAAmB,IAC1C6G,GACI6C,WAAS,OACV6b,EAASvlB,UAAW,gBAAa,IACpC6G,GACI6C,WAAS,OACV6b,EAASvlB,UAAW,YAAS,IAChC6G,GACI6C,cACD6b,EAASvlB,UAAW,aAAU,IACjC6G,GACI6C,cACD6b,EAASvlB,UAAW,kBAAe,IACtC6G,GACIsW,WACDoI,EAASvlB,UAAW,WAAQ,IAC/B6G,GACIsW,WACDoI,EAASvlB,UAAW,sBAAmB,IAC1C6G,GACIsW,WACDoI,EAASvlB,UAAW,gBAAa,IACpC6G,GACIsW,WACDoI,EAASvlB,UAAW,iBAAc,IACrC6G,GACIsW,WACDoI,EAASvlB,UAAW,WAAQ,IAC/BulB,EAAW8C,EAAaxhB,GACpBuW,yBACDmI,IAELwE,cGpaFC,GAAeC,OAAOC"}