@syncfusion/ej2-lists 23.2.4 → 24.1.46

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +1 -9
  2. package/README.md +1 -1
  3. package/dist/ej2-lists.min.js +2 -2
  4. package/dist/ej2-lists.umd.min.js +2 -2
  5. package/dist/ej2-lists.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-lists.es2015.js +57 -58
  7. package/dist/es6/ej2-lists.es2015.js.map +1 -1
  8. package/dist/es6/ej2-lists.es5.js +53 -54
  9. package/dist/es6/ej2-lists.es5.js.map +1 -1
  10. package/dist/global/ej2-lists.min.js +2 -2
  11. package/dist/global/ej2-lists.min.js.map +1 -1
  12. package/dist/global/index.d.ts +1 -1
  13. package/package.json +10 -9
  14. package/src/common/list-base.js +19 -14
  15. package/src/list-view/list-view-model.d.ts +8 -1
  16. package/src/list-view/list-view.d.ts +34 -0
  17. package/src/list-view/list-view.js +32 -35
  18. package/src/list-view/virtualization.js +2 -5
  19. package/styles/bootstrap4.css +2 -2
  20. package/styles/bootstrap5-dark.css +1 -1
  21. package/styles/bootstrap5.css +1 -1
  22. package/styles/list-view/_bootstrap4-definition.scss +2 -2
  23. package/styles/list-view/_bootstrap5-definition.scss +1 -1
  24. package/styles/list-view/_material-definition.scss +1 -1
  25. package/styles/list-view/_material3-definition.scss +1 -1
  26. package/styles/list-view/_tailwind-definition.scss +2 -2
  27. package/styles/list-view/bootstrap4.css +2 -2
  28. package/styles/list-view/bootstrap5-dark.css +1 -1
  29. package/styles/list-view/bootstrap5.css +1 -1
  30. package/styles/list-view/material.css +1 -1
  31. package/styles/list-view/material3-dark.css +1 -1
  32. package/styles/list-view/material3.css +1 -1
  33. package/styles/list-view/tailwind-dark.css +4 -4
  34. package/styles/list-view/tailwind.css +4 -4
  35. package/styles/material.css +1 -1
  36. package/styles/material3-dark.css +1 -1
  37. package/styles/material3.css +1 -1
  38. package/styles/tailwind-dark.css +4 -4
  39. package/styles/tailwind.css +4 -4
@@ -280,18 +280,31 @@ var ListBase;
280
280
  li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);
281
281
  li.classList.add(cssClass.level + '-' + ariaAttributes.level);
282
282
  li.setAttribute('aria-level', ariaAttributes.level.toString());
283
- if (ariaAttributes.groupItemRole == 'presentation' || ariaAttributes.itemRole == 'presentation') {
283
+ if (ariaAttributes.groupItemRole === 'presentation' || ariaAttributes.itemRole === 'presentation') {
284
284
  li.removeAttribute('aria-level');
285
285
  }
286
286
  anchorElement = li.querySelector('.' + cssClass.anchorWrap);
287
287
  // eslint-disable-next-line no-prototype-builtins
288
288
  if (fieldData.hasOwnProperty(fields.tooltip)) {
289
- var tooltipText = SanitizeHtmlHelper.sanitize(fieldData[fields.tooltip]);
289
+ var tooltipText = fieldData[fields.tooltip];
290
+ if (options && options.enableHtmlSanitizer) {
291
+ tooltipText = SanitizeHtmlHelper.sanitize(tooltipText);
292
+ }
293
+ else {
294
+ var tooltipTextElement = createElement('span', { innerHTML: tooltipText });
295
+ tooltipText = tooltipTextElement.innerText;
296
+ tooltipTextElement = null;
297
+ }
290
298
  li.setAttribute('title', tooltipText);
291
299
  }
292
300
  // eslint-disable-next-line no-prototype-builtins
293
301
  if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {
294
- setAttribute(li, fieldData[fields.htmlAttributes]);
302
+ var htmlAttributes = fieldData[fields.htmlAttributes];
303
+ // Check if 'class' attribute is present and not an empty string
304
+ if (htmlAttributes.hasOwnProperty('class') && typeof htmlAttributes['class'] === 'string' && htmlAttributes['class'].trim() === '') {
305
+ delete htmlAttributes['class'];
306
+ }
307
+ setAttribute(li, htmlAttributes);
295
308
  }
296
309
  // eslint-disable-next-line no-prototype-builtins
297
310
  if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {
@@ -509,7 +522,6 @@ var ListBase;
509
522
  var curOpt = extend({}, defaultListBaseOptions, options);
510
523
  var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);
511
524
  var curEle = element.cloneNode(true);
512
- // eslint-disable-next-line
513
525
  var jsonAr = [];
514
526
  curEle.classList.add('json-parent');
515
527
  var childs = curEle.querySelectorAll('.json-parent>li');
@@ -518,7 +530,6 @@ var ListBase;
518
530
  var li = childs[i];
519
531
  var anchor = li.querySelector('a');
520
532
  var ul = li.querySelector('ul');
521
- // eslint-disable-next-line
522
533
  var json = {};
523
534
  var childNodes = anchor ? anchor.childNodes : li.childNodes;
524
535
  var keys = Object.keys(childNodes);
@@ -592,7 +603,6 @@ var ListBase;
592
603
  var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });
593
604
  var curOpt = extend({}, defaultListBaseOptions, options);
594
605
  var curFields = extend({}, ListBase.defaultMappedFields, fields);
595
- // eslint-disable-next-line
596
606
  var compiledString = compileTemplate(template);
597
607
  var liCollection = [];
598
608
  var value;
@@ -641,7 +651,7 @@ var ListBase;
641
651
  else {
642
652
  var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;
643
653
  if (isHeader) {
644
- if (componentInstance && componentInstance.getModuleName() != 'listview') {
654
+ if (componentInstance && componentInstance.getModuleName() !== 'listview') {
645
655
  // eslint-disable-next-line
646
656
  var compiledElement = compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate, null, li);
647
657
  if (compiledElement) {
@@ -699,7 +709,6 @@ var ListBase;
699
709
  function renderGroupTemplate(groupTemplate, groupDataSource, fields,
700
710
  // eslint-disable-next-line
701
711
  headerItems, options, componentInstance) {
702
- // eslint-disable-next-line @typescript-eslint/ban-types
703
712
  var compiledString = compileTemplate(groupTemplate);
704
713
  var curFields = extend({}, ListBase.defaultMappedFields, fields);
705
714
  var curOpt = extend({}, defaultListBaseOptions, options);
@@ -709,7 +718,7 @@ var ListBase;
709
718
  var headerData = {};
710
719
  headerData["" + category] = header.textContent;
711
720
  header.innerHTML = '';
712
- if (componentInstance && componentInstance.getModuleName() !== "listview") {
721
+ if (componentInstance && componentInstance.getModuleName() !== 'listview') {
713
722
  // eslint-disable-next-line
714
723
  var compiledElement = compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, header);
715
724
  if (compiledElement) {
@@ -745,7 +754,6 @@ var ListBase;
745
754
  // Create expand and collapse node
746
755
  if (!!options.expandCollapse && hasChildren && !options.template) {
747
756
  element.firstElementChild.classList.add(cssClass.iconWrapper);
748
- // eslint-disable-next-line @typescript-eslint/ban-types
749
757
  var expandElement = options.expandIconPosition === 'Left' ? prepend : append;
750
758
  expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));
751
759
  }
@@ -891,9 +899,8 @@ var ListBase;
891
899
  li.setAttribute('data-uid', generateId());
892
900
  }
893
901
  if (grpLI && options && options.groupTemplate) {
894
- // eslint-disable-next-line @typescript-eslint/ban-types
895
902
  var compiledString = compileTemplate(options.groupTemplate);
896
- if (componentInstance && componentInstance.getModuleName() !== "listview") {
903
+ if (componentInstance && componentInstance.getModuleName() !== 'listview') {
897
904
  // eslint-disable-next-line
898
905
  var compiledElement = compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, li);
899
906
  if (compiledElement) {
@@ -905,7 +912,6 @@ var ListBase;
905
912
  }
906
913
  }
907
914
  else if (!grpLI && options && options.template) {
908
- // eslint-disable-next-line @typescript-eslint/ban-types
909
915
  var compiledString = compileTemplate(options.template);
910
916
  if (componentInstance && componentInstance.getModuleName() !== 'listview') {
911
917
  // eslint-disable-next-line
@@ -977,7 +983,6 @@ var ListBase;
977
983
  function generateIcon(createElement, liElement, className, options) {
978
984
  var curOpt = extend({}, defaultListBaseOptions, options);
979
985
  cssClass = getModuleClass(curOpt.moduleName);
980
- // eslint-disable-next-line @typescript-eslint/ban-types
981
986
  var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;
982
987
  expandElement([createElement('div', {
983
988
  className: 'e-icons ' + curOpt.expandIconClass + ' ' +
@@ -1336,7 +1341,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1336
1341
  this.headerEle.appendChild(hedBackButton);
1337
1342
  this.headerEle.appendChild(textEle);
1338
1343
  if (this.headerTemplate) {
1339
- // eslint-disable-next-line
1340
1344
  var compiledString = compile(this.headerTemplate);
1341
1345
  var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });
1342
1346
  // eslint-disable-next-line
@@ -1456,7 +1460,7 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1456
1460
  itemCreated: this.renderCheckbox.bind(this),
1457
1461
  templateID: "" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,
1458
1462
  groupTemplateID: "" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,
1459
- enableHtmlSanitizer: this.enableHtmlSanitizer,
1463
+ enableHtmlSanitizer: this.enableHtmlSanitizer
1460
1464
  };
1461
1465
  this.initialization();
1462
1466
  };
@@ -1498,8 +1502,8 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1498
1502
  if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {
1499
1503
  fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);
1500
1504
  if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {
1501
- var index = this.selectedId.findIndex(function (e) { return e == fieldData_1[_this.listBaseOption.fields.id].toString(); });
1502
- if (index != -1) {
1505
+ var index = this.selectedId.findIndex(function (e) { return e === fieldData_1[_this.listBaseOption.fields.id].toString(); });
1506
+ if (index !== -1) {
1503
1507
  this.checkInternally(args, checkboxElement);
1504
1508
  }
1505
1509
  }
@@ -1512,7 +1516,7 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1512
1516
  this.checkInternally(args, checkboxElement);
1513
1517
  }
1514
1518
  checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');
1515
- checkboxElement.setAttribute('aria-label', 'checkbox');
1519
+ checkboxElement.setAttribute('aria-label', args.text);
1516
1520
  if (this.checkBoxPosition === 'Left') {
1517
1521
  checkboxElement.classList.add(classNames.checkboxLeft);
1518
1522
  args.item.firstElementChild.classList.add(classNames.checkboxLeft);
@@ -1709,7 +1713,7 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1709
1713
  }
1710
1714
  else {
1711
1715
  this.setCheckboxLI(li, e);
1712
- if ((target.nodeName == "INPUT") || (target.nodeName == "TEXTAREA")) {
1716
+ if ((target.nodeName === 'INPUT') || (target.nodeName === 'TEXTAREA')) {
1713
1717
  target.classList.add('e-focused');
1714
1718
  this.targetElement = target;
1715
1719
  }
@@ -1717,7 +1721,7 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1717
1721
  }
1718
1722
  else {
1719
1723
  this.setSelectLI(li, e);
1720
- if ((target.nodeName == "INPUT") || (target.nodeName == "TEXTAREA")) {
1724
+ if ((target.nodeName === 'INPUT') || (target.nodeName === 'TEXTAREA')) {
1721
1725
  target.classList.add('e-focused');
1722
1726
  this.targetElement = target;
1723
1727
  }
@@ -1979,6 +1983,9 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1979
1983
  EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);
1980
1984
  EventHandler.add(this.element, 'focusout', this.focusout, this);
1981
1985
  this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });
1986
+ if (!isNullOrUndefined(this.scroll)) {
1987
+ EventHandler.add(this.element, 'scroll', this.onListScroll, this);
1988
+ }
1982
1989
  };
1983
1990
  ListView.prototype.unWireEvents = function () {
1984
1991
  EventHandler.remove(this.element, 'click', this.clickHandler);
@@ -1986,6 +1993,9 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1986
1993
  EventHandler.remove(this.element, 'mouseout', this.leaveHandler);
1987
1994
  EventHandler.remove(this.element, 'mouseover', this.hoverHandler);
1988
1995
  EventHandler.remove(this.element, 'mouseout', this.leaveHandler);
1996
+ if (!isNullOrUndefined(this.scroll)) {
1997
+ EventHandler.remove(this.element, 'scroll', this.onListScroll);
1998
+ }
1989
1999
  this.touchModule.destroy();
1990
2000
  this.touchModule = null;
1991
2001
  };
@@ -2069,7 +2079,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2069
2079
  }
2070
2080
  else {
2071
2081
  selectedItem =
2072
- // eslint-disable-next-line
2073
2082
  {
2074
2083
  item: li, text: fieldData && fieldData[this.listBaseOption.fields.text],
2075
2084
  // eslint-disable-next-line
@@ -2311,7 +2320,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2311
2320
  this.removeElement(this.headerEle);
2312
2321
  this.removeElement(this.ulElement);
2313
2322
  this.removeElement(this.contentContainer);
2314
- // eslint-disable-next-line
2315
2323
  if (this.isReact) {
2316
2324
  this.clearTemplate();
2317
2325
  }
@@ -2350,7 +2358,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2350
2358
  ListView.prototype.UpdateCurrentUL = function () {
2351
2359
  this.ulElement = this.curUL = this.element.querySelector('.' + classNames.parentItem);
2352
2360
  if (this.curUL) {
2353
- // eslint-disable-next-line
2354
2361
  this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);
2355
2362
  }
2356
2363
  };
@@ -2365,7 +2372,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2365
2372
  if (!ele) {
2366
2373
  var data = this.curViewDS;
2367
2374
  ele = ListBase.createListFromJson(this.createElement, data, this.listBaseOption, this.curDSLevel.length, null, this);
2368
- // eslint-disable-next-line
2369
2375
  if (this.isReact) {
2370
2376
  this.renderReactTemplates();
2371
2377
  }
@@ -2379,7 +2385,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2379
2385
  this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);
2380
2386
  if (this.selectedItems) {
2381
2387
  var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);
2382
- // eslint-disable-next-line
2383
2388
  this.header((fieldData[this.listBaseOption.fields.text]), true, 'header');
2384
2389
  }
2385
2390
  this.selectedLI = undefined;
@@ -2403,7 +2408,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2403
2408
  this.contentContainer = this.createElement('div', { className: classNames.container });
2404
2409
  this.element.appendChild(this.contentContainer);
2405
2410
  this.renderIntoDom(this.ulElement);
2406
- // eslint-disable-next-line
2407
2411
  if (this.isReact) {
2408
2412
  this.renderReactTemplates();
2409
2413
  }
@@ -2412,7 +2416,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2412
2416
  ListView.prototype.getElementUID = function (obj) {
2413
2417
  var fields = {};
2414
2418
  if (obj instanceof Element) {
2415
- // eslint-disable-next-line
2416
2419
  fields[this.fields.id] = obj.getAttribute('data-uid');
2417
2420
  }
2418
2421
  else {
@@ -2438,12 +2441,12 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2438
2441
  selector: '.' + classNames.listItem
2439
2442
  });
2440
2443
  this.renderComplete();
2444
+ this.previousScrollTop = this.element.scrollTop;
2441
2445
  };
2442
2446
  /**
2443
2447
  * It is used to destroy the ListView component.
2444
2448
  */
2445
2449
  ListView.prototype.destroy = function () {
2446
- // eslint-disable-next-line
2447
2450
  if (this.isReact) {
2448
2451
  this.clearTemplate();
2449
2452
  }
@@ -2485,7 +2488,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2485
2488
  toUL = toUL.parentElement;
2486
2489
  }
2487
2490
  var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);
2488
- // eslint-disable-next-line
2489
2491
  var text = fieldData[this.fields.text];
2490
2492
  this.switchView(fromUL, toUL, true);
2491
2493
  this.removeFocus();
@@ -2558,7 +2560,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2558
2560
  if (!this.enableVirtualization && isNullOrUndefined(li)) {
2559
2561
  var curLi = this.element.querySelectorAll('.' + classNames.listItem);
2560
2562
  for (var i = 0; i < curLi.length; i++) {
2561
- // eslint-disable-next-line
2562
2563
  if (curLi[i].innerText.trim() === fieldData[this.fields.text]) {
2563
2564
  li = curLi[i];
2564
2565
  }
@@ -2608,7 +2609,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2608
2609
  *
2609
2610
  */
2610
2611
  ListView.prototype.getSelectedItems = function () {
2611
- // eslint-disable-next-line
2612
2612
  var finalValue;
2613
2613
  var isCompleted = false;
2614
2614
  this.selectedId = [];
@@ -2619,7 +2619,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2619
2619
  isCompleted = true;
2620
2620
  }
2621
2621
  else if (this.showCheckBox && !isCompleted) {
2622
- // eslint-disable-next-line
2623
2622
  var liCollection = this.curUL.getElementsByClassName(classNames.selected);
2624
2623
  var liTextCollection = [];
2625
2624
  var liDataCollection = [];
@@ -2639,9 +2638,7 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2639
2638
  liDataCollection.push(tempData);
2640
2639
  }
2641
2640
  if (fieldData) {
2642
- // eslint-disable-next-line
2643
2641
  liTextCollection.push(fieldData[this.listBaseOption.fields.text]);
2644
- // eslint-disable-next-line
2645
2642
  this.selectedId.push(fieldData[this.listBaseOption.fields.id]);
2646
2643
  }
2647
2644
  else {
@@ -2683,7 +2680,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2683
2680
  isCompleted = true;
2684
2681
  }
2685
2682
  else {
2686
- // eslint-disable-next-line
2687
2683
  this.selectedId.push(fieldData[this.listBaseOption.fields.id]);
2688
2684
  finalValue = {
2689
2685
  text: fieldData[this.listBaseOption.fields.text], item: liElement,
@@ -2741,7 +2737,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2741
2737
  if (li) {
2742
2738
  li.classList.add(classNames.disable);
2743
2739
  }
2744
- // eslint-disable-next-line
2745
2740
  resultJSON[this.fields.enabled] = false;
2746
2741
  }
2747
2742
  }
@@ -2777,7 +2772,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2777
2772
  li.style.display = display;
2778
2773
  }
2779
2774
  if (isHide) {
2780
- // eslint-disable-next-line
2781
2775
  resultJSON[this.fields.isVisible] = false;
2782
2776
  }
2783
2777
  else {
@@ -2861,7 +2855,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2861
2855
  return newDataSource;
2862
2856
  };
2863
2857
  ListView.prototype.addItemInNestedList = function (targetItemData, itemQueue) {
2864
- // eslint-disable-next-line
2865
2858
  var targetItemId = targetItemData[this.fields.id];
2866
2859
  var targetChildDS = targetItemData[this.fields.child];
2867
2860
  var isAlreadyRenderedUL = this.element.querySelector('[pid=\'' + targetItemId + '\']');
@@ -2902,7 +2895,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2902
2895
  this.getLiFromObjOrElement(curViewDS[index + 2]) || null;
2903
2896
  var li = ListBase.createListItemFromJson(this.createElement, [dataSource], this.listBaseOption, null, null, this);
2904
2897
  this.setAttributes(li);
2905
- // eslint-disable-next-line
2906
2898
  if (this.template && this.isReact) {
2907
2899
  this.renderReactTemplates();
2908
2900
  }
@@ -2935,11 +2927,9 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2935
2927
  var curViewDS = this.curViewDS;
2936
2928
  var fields = obj instanceof Element ? this.getElementUID(obj) : obj;
2937
2929
  var dataSource;
2938
- // eslint-disable-next-line prefer-const
2939
2930
  dataSource = this.findItemFromDS(listDataSource, fields, true);
2940
2931
  if (dataSource) {
2941
2932
  var data_1;
2942
- // eslint-disable-next-line prefer-const
2943
2933
  data_1 = this.findItemFromDS(dataSource, fields);
2944
2934
  var index = curViewDS.indexOf(data_1);
2945
2935
  var li = this.getLiFromObjOrElement(obj);
@@ -2960,11 +2950,8 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2960
2950
  if (groupLi) {
2961
2951
  detach(groupLi);
2962
2952
  }
2963
- // eslint-disable-next-line
2964
2953
  var foundData = (dataSource.length - 1) <= 0
2965
- ? this.findParent(this.localData, this.fields.id,
2966
- // eslint-disable-next-line
2967
- function (value) { return value === data_1[_this.fields.id]; }, null) : null;
2954
+ ? this.findParent(this.localData, this.fields.id, function (value) { return value === data_1[_this.fields.id]; }, null) : null;
2968
2955
  var dsIndex = dataSource.indexOf(data_1);
2969
2956
  dataSource.splice(dsIndex, 1);
2970
2957
  this.setViewDataSource(listDataSource);
@@ -3007,16 +2994,13 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
3007
2994
  }
3008
2995
  }
3009
2996
  };
3010
- // eslint-disable-next-line
3011
2997
  ListView.prototype.findParent = function (dataSource, id, callback, parent) {
3012
- // eslint-disable-next-line no-prototype-builtins
3013
2998
  if (dataSource.hasOwnProperty(id) && callback(dataSource[id]) === true) {
3014
2999
  return extend({}, dataSource);
3015
3000
  }
3016
3001
  for (var i = 0; i < Object.keys(dataSource).length; i++) {
3017
3002
  if (dataSource[Object.keys(dataSource)[i]]
3018
3003
  && typeof dataSource[Object.keys(dataSource)[i]] === 'object') {
3019
- // eslint-disable-next-line
3020
3004
  var result = this.findParent(dataSource[Object.keys(dataSource)[i]], id, callback, dataSource);
3021
3005
  if (result != null) {
3022
3006
  if (!result.parent) {
@@ -3039,6 +3023,21 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
3039
3023
  }
3040
3024
  return modules;
3041
3025
  };
3026
+ ListView.prototype.onListScroll = function (e) {
3027
+ var args = { originalEvent: e, scrollDirection: "Bottom", distanceY: this.element.scrollHeight - this.element.scrollTop };
3028
+ var currentScrollTop = this.element.scrollTop;
3029
+ if (currentScrollTop > this.previousScrollTop) {
3030
+ args.scrollDirection = "Bottom";
3031
+ args.distanceY = this.element.scrollHeight - this.element.clientHeight - this.element.scrollTop;
3032
+ this.trigger('scroll', args);
3033
+ }
3034
+ else if (this.previousScrollTop > currentScrollTop) {
3035
+ args.scrollDirection = "Top";
3036
+ args.distanceY = this.element.scrollTop;
3037
+ this.trigger('scroll', args);
3038
+ }
3039
+ this.previousScrollTop = currentScrollTop;
3040
+ };
3042
3041
  /**
3043
3042
  * Get the properties to be maintained in the persisted state.
3044
3043
  */
@@ -3119,6 +3118,9 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
3119
3118
  __decorate([
3120
3119
  Event()
3121
3120
  ], ListView.prototype, "actionFailure", void 0);
3121
+ __decorate([
3122
+ Event()
3123
+ ], ListView.prototype, "scroll", void 0);
3122
3124
  ListView = __decorate([
3123
3125
  NotifyPropertyChanges
3124
3126
  ], ListView);
@@ -3287,7 +3289,7 @@ var Virtualization = /** @__PURE__ @class */ (function () {
3287
3289
  var _a;
3288
3290
  var startingHeight;
3289
3291
  var curViewDS = this.listViewInstance.curViewDS;
3290
- this.listItemHeight = select(".e-list-item", this.listViewInstance.element).getBoundingClientRect().height;
3292
+ this.listItemHeight = select('.e-list-item', this.listViewInstance.element).getBoundingClientRect().height;
3291
3293
  this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);
3292
3294
  if (this.listViewInstance.isWindow) {
3293
3295
  startingHeight = this.listViewInstance.ulElement.getBoundingClientRect().top -
@@ -3654,7 +3656,6 @@ var Virtualization = /** @__PURE__ @class */ (function () {
3654
3656
  var curViewDS = this.listViewInstance.curViewDS;
3655
3657
  // eslint-disable-next-line
3656
3658
  var resutJSON = this.findDSAndIndexFromId(curViewDS, obj);
3657
- // eslint-disable-next-line
3658
3659
  if (Object.keys(resutJSON).length) {
3659
3660
  dataSource = resutJSON.data;
3660
3661
  if (curViewDS[resutJSON.index - 1] &&
@@ -3918,7 +3919,7 @@ var Virtualization = /** @__PURE__ @class */ (function () {
3918
3919
  this.refreshItemHeight();
3919
3920
  };
3920
3921
  Virtualization.prototype.createUIItem = function (args) {
3921
- if (!args.item.classList.contains("e-list-group-item")) {
3922
+ if (!args.item.classList.contains('e-list-group-item')) {
3922
3923
  this.templateData = args.curData.isHeader ? args.curData.items[0] :
3923
3924
  args.curData;
3924
3925
  if (this.listViewInstance.showCheckBox) {
@@ -3975,7 +3976,6 @@ var Virtualization = /** @__PURE__ @class */ (function () {
3975
3976
  this.listViewInstance.setLocalData();
3976
3977
  };
3977
3978
  Virtualization.prototype.updateUI = function (element, index, targetElement) {
3978
- // eslint-disable-next-line @typescript-eslint/ban-types
3979
3979
  var onChange = this.isNgTemplate() ? this.onNgChange : this.onChange;
3980
3980
  if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {
3981
3981
  var curViewDS = this.listViewInstance.curViewDS[index];
@@ -4016,7 +4016,6 @@ var Virtualization = /** @__PURE__ @class */ (function () {
4016
4016
  };
4017
4017
  Virtualization.prototype.onNgChange = function (newData, listElement, virtualThis) {
4018
4018
  // compile given target element with template for new data
4019
- // eslint-disable-next-line
4020
4019
  var templateCompiler = compile(virtualThis.listViewInstance.template);
4021
4020
  var resultElement = templateCompiler(newData);
4022
4021
  while (listElement.lastChild) {