@syncfusion/ej2-lists 23.1.43 → 24.1.41

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 +0 -8
  2. package/dist/ej2-lists.min.js +2 -2
  3. package/dist/ej2-lists.umd.min.js +2 -2
  4. package/dist/ej2-lists.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-lists.es2015.js +105 -244
  6. package/dist/es6/ej2-lists.es2015.js.map +1 -1
  7. package/dist/es6/ej2-lists.es5.js +101 -241
  8. package/dist/es6/ej2-lists.es5.js.map +1 -1
  9. package/dist/global/ej2-lists.min.js +2 -2
  10. package/dist/global/ej2-lists.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +10 -9
  13. package/src/common/list-base.js +12 -14
  14. package/src/list-view/list-view-model.d.ts +8 -1
  15. package/src/list-view/list-view.d.ts +34 -0
  16. package/src/list-view/list-view.js +32 -35
  17. package/src/list-view/virtualization.d.ts +1 -8
  18. package/src/list-view/virtualization.js +57 -192
  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
@@ -1,4 +1,4 @@
1
- import { Animation, Base, ChildProperty, Complex, Component, Draggable, Event, EventHandler, NotifyPropertyChanges, Property, SanitizeHtmlHelper, Touch, addClass, animationMode, append, attributes, closest, compareElementParent, compile, detach, extend, formatUnit, getComponent, getUniqueID, getValue, isBlazor, isNullOrUndefined, isVisible, merge, prepend, remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';
1
+ import { Animation, Base, ChildProperty, Complex, Component, Draggable, Event, EventHandler, NotifyPropertyChanges, Property, SanitizeHtmlHelper, Touch, addClass, animationMode, append, attributes, closest, compareElementParent, compile, detach, extend, formatUnit, getComponent, getUniqueID, getValue, isBlazor, isNullOrUndefined, isVisible, merge, prepend, remove, removeClass, rippleEffect, select } from '@syncfusion/ej2-base';
2
2
  import { DataManager, Query } from '@syncfusion/ej2-data';
3
3
  import { createCheckBox } from '@syncfusion/ej2-buttons';
4
4
 
@@ -280,17 +280,23 @@ 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
- li.setAttribute('title', fieldData[fields.tooltip]);
289
+ var tooltipText = SanitizeHtmlHelper.sanitize(fieldData[fields.tooltip]);
290
+ li.setAttribute('title', tooltipText);
290
291
  }
291
292
  // eslint-disable-next-line no-prototype-builtins
292
293
  if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {
293
- setAttribute(li, fieldData[fields.htmlAttributes]);
294
+ var htmlAttributes = fieldData[fields.htmlAttributes];
295
+ // Check if 'class' attribute is present and not an empty string
296
+ if (htmlAttributes.hasOwnProperty('class') && typeof htmlAttributes['class'] === 'string' && htmlAttributes['class'].trim() === '') {
297
+ delete htmlAttributes['class'];
298
+ }
299
+ setAttribute(li, htmlAttributes);
294
300
  }
295
301
  // eslint-disable-next-line no-prototype-builtins
296
302
  if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {
@@ -508,7 +514,6 @@ var ListBase;
508
514
  var curOpt = extend({}, defaultListBaseOptions, options);
509
515
  var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);
510
516
  var curEle = element.cloneNode(true);
511
- // eslint-disable-next-line
512
517
  var jsonAr = [];
513
518
  curEle.classList.add('json-parent');
514
519
  var childs = curEle.querySelectorAll('.json-parent>li');
@@ -517,7 +522,6 @@ var ListBase;
517
522
  var li = childs[i];
518
523
  var anchor = li.querySelector('a');
519
524
  var ul = li.querySelector('ul');
520
- // eslint-disable-next-line
521
525
  var json = {};
522
526
  var childNodes = anchor ? anchor.childNodes : li.childNodes;
523
527
  var keys = Object.keys(childNodes);
@@ -591,7 +595,6 @@ var ListBase;
591
595
  var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });
592
596
  var curOpt = extend({}, defaultListBaseOptions, options);
593
597
  var curFields = extend({}, ListBase.defaultMappedFields, fields);
594
- // eslint-disable-next-line
595
598
  var compiledString = compileTemplate(template);
596
599
  var liCollection = [];
597
600
  var value;
@@ -640,7 +643,7 @@ var ListBase;
640
643
  else {
641
644
  var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;
642
645
  if (isHeader) {
643
- if (componentInstance && componentInstance.getModuleName() != 'listview') {
646
+ if (componentInstance && componentInstance.getModuleName() !== 'listview') {
644
647
  // eslint-disable-next-line
645
648
  var compiledElement = compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate, null, li);
646
649
  if (compiledElement) {
@@ -698,7 +701,6 @@ var ListBase;
698
701
  function renderGroupTemplate(groupTemplate, groupDataSource, fields,
699
702
  // eslint-disable-next-line
700
703
  headerItems, options, componentInstance) {
701
- // eslint-disable-next-line @typescript-eslint/ban-types
702
704
  var compiledString = compileTemplate(groupTemplate);
703
705
  var curFields = extend({}, ListBase.defaultMappedFields, fields);
704
706
  var curOpt = extend({}, defaultListBaseOptions, options);
@@ -708,7 +710,7 @@ var ListBase;
708
710
  var headerData = {};
709
711
  headerData["" + category] = header.textContent;
710
712
  header.innerHTML = '';
711
- if (componentInstance && componentInstance.getModuleName() !== "listview") {
713
+ if (componentInstance && componentInstance.getModuleName() !== 'listview') {
712
714
  // eslint-disable-next-line
713
715
  var compiledElement = compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, header);
714
716
  if (compiledElement) {
@@ -744,7 +746,6 @@ var ListBase;
744
746
  // Create expand and collapse node
745
747
  if (!!options.expandCollapse && hasChildren && !options.template) {
746
748
  element.firstElementChild.classList.add(cssClass.iconWrapper);
747
- // eslint-disable-next-line @typescript-eslint/ban-types
748
749
  var expandElement = options.expandIconPosition === 'Left' ? prepend : append;
749
750
  expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));
750
751
  }
@@ -890,9 +891,8 @@ var ListBase;
890
891
  li.setAttribute('data-uid', generateId());
891
892
  }
892
893
  if (grpLI && options && options.groupTemplate) {
893
- // eslint-disable-next-line @typescript-eslint/ban-types
894
894
  var compiledString = compileTemplate(options.groupTemplate);
895
- if (componentInstance && componentInstance.getModuleName() !== "listview") {
895
+ if (componentInstance && componentInstance.getModuleName() !== 'listview') {
896
896
  // eslint-disable-next-line
897
897
  var compiledElement = compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, li);
898
898
  if (compiledElement) {
@@ -904,7 +904,6 @@ var ListBase;
904
904
  }
905
905
  }
906
906
  else if (!grpLI && options && options.template) {
907
- // eslint-disable-next-line @typescript-eslint/ban-types
908
907
  var compiledString = compileTemplate(options.template);
909
908
  if (componentInstance && componentInstance.getModuleName() !== 'listview') {
910
909
  // eslint-disable-next-line
@@ -976,7 +975,6 @@ var ListBase;
976
975
  function generateIcon(createElement, liElement, className, options) {
977
976
  var curOpt = extend({}, defaultListBaseOptions, options);
978
977
  cssClass = getModuleClass(curOpt.moduleName);
979
- // eslint-disable-next-line @typescript-eslint/ban-types
980
978
  var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;
981
979
  expandElement([createElement('div', {
982
980
  className: 'e-icons ' + curOpt.expandIconClass + ' ' +
@@ -1335,7 +1333,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1335
1333
  this.headerEle.appendChild(hedBackButton);
1336
1334
  this.headerEle.appendChild(textEle);
1337
1335
  if (this.headerTemplate) {
1338
- // eslint-disable-next-line
1339
1336
  var compiledString = compile(this.headerTemplate);
1340
1337
  var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });
1341
1338
  // eslint-disable-next-line
@@ -1455,7 +1452,7 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1455
1452
  itemCreated: this.renderCheckbox.bind(this),
1456
1453
  templateID: "" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,
1457
1454
  groupTemplateID: "" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,
1458
- enableHtmlSanitizer: this.enableHtmlSanitizer,
1455
+ enableHtmlSanitizer: this.enableHtmlSanitizer
1459
1456
  };
1460
1457
  this.initialization();
1461
1458
  };
@@ -1497,8 +1494,8 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1497
1494
  if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {
1498
1495
  fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);
1499
1496
  if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {
1500
- var index = this.selectedId.findIndex(function (e) { return e == fieldData_1[_this.listBaseOption.fields.id].toString(); });
1501
- if (index != -1) {
1497
+ var index = this.selectedId.findIndex(function (e) { return e === fieldData_1[_this.listBaseOption.fields.id].toString(); });
1498
+ if (index !== -1) {
1502
1499
  this.checkInternally(args, checkboxElement);
1503
1500
  }
1504
1501
  }
@@ -1511,7 +1508,7 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1511
1508
  this.checkInternally(args, checkboxElement);
1512
1509
  }
1513
1510
  checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');
1514
- checkboxElement.setAttribute('aria-label', 'checkbox');
1511
+ checkboxElement.setAttribute('aria-label', args.text);
1515
1512
  if (this.checkBoxPosition === 'Left') {
1516
1513
  checkboxElement.classList.add(classNames.checkboxLeft);
1517
1514
  args.item.firstElementChild.classList.add(classNames.checkboxLeft);
@@ -1708,7 +1705,7 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1708
1705
  }
1709
1706
  else {
1710
1707
  this.setCheckboxLI(li, e);
1711
- if ((target.nodeName == "INPUT") || (target.nodeName == "TEXTAREA")) {
1708
+ if ((target.nodeName === 'INPUT') || (target.nodeName === 'TEXTAREA')) {
1712
1709
  target.classList.add('e-focused');
1713
1710
  this.targetElement = target;
1714
1711
  }
@@ -1716,7 +1713,7 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1716
1713
  }
1717
1714
  else {
1718
1715
  this.setSelectLI(li, e);
1719
- if ((target.nodeName == "INPUT") || (target.nodeName == "TEXTAREA")) {
1716
+ if ((target.nodeName === 'INPUT') || (target.nodeName === 'TEXTAREA')) {
1720
1717
  target.classList.add('e-focused');
1721
1718
  this.targetElement = target;
1722
1719
  }
@@ -1978,6 +1975,9 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1978
1975
  EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);
1979
1976
  EventHandler.add(this.element, 'focusout', this.focusout, this);
1980
1977
  this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });
1978
+ if (!isNullOrUndefined(this.scroll)) {
1979
+ EventHandler.add(this.element, 'scroll', this.onListScroll, this);
1980
+ }
1981
1981
  };
1982
1982
  ListView.prototype.unWireEvents = function () {
1983
1983
  EventHandler.remove(this.element, 'click', this.clickHandler);
@@ -1985,6 +1985,9 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
1985
1985
  EventHandler.remove(this.element, 'mouseout', this.leaveHandler);
1986
1986
  EventHandler.remove(this.element, 'mouseover', this.hoverHandler);
1987
1987
  EventHandler.remove(this.element, 'mouseout', this.leaveHandler);
1988
+ if (!isNullOrUndefined(this.scroll)) {
1989
+ EventHandler.remove(this.element, 'scroll', this.onListScroll);
1990
+ }
1988
1991
  this.touchModule.destroy();
1989
1992
  this.touchModule = null;
1990
1993
  };
@@ -2068,7 +2071,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2068
2071
  }
2069
2072
  else {
2070
2073
  selectedItem =
2071
- // eslint-disable-next-line
2072
2074
  {
2073
2075
  item: li, text: fieldData && fieldData[this.listBaseOption.fields.text],
2074
2076
  // eslint-disable-next-line
@@ -2310,7 +2312,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2310
2312
  this.removeElement(this.headerEle);
2311
2313
  this.removeElement(this.ulElement);
2312
2314
  this.removeElement(this.contentContainer);
2313
- // eslint-disable-next-line
2314
2315
  if (this.isReact) {
2315
2316
  this.clearTemplate();
2316
2317
  }
@@ -2349,7 +2350,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2349
2350
  ListView.prototype.UpdateCurrentUL = function () {
2350
2351
  this.ulElement = this.curUL = this.element.querySelector('.' + classNames.parentItem);
2351
2352
  if (this.curUL) {
2352
- // eslint-disable-next-line
2353
2353
  this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);
2354
2354
  }
2355
2355
  };
@@ -2364,7 +2364,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2364
2364
  if (!ele) {
2365
2365
  var data = this.curViewDS;
2366
2366
  ele = ListBase.createListFromJson(this.createElement, data, this.listBaseOption, this.curDSLevel.length, null, this);
2367
- // eslint-disable-next-line
2368
2367
  if (this.isReact) {
2369
2368
  this.renderReactTemplates();
2370
2369
  }
@@ -2378,7 +2377,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2378
2377
  this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);
2379
2378
  if (this.selectedItems) {
2380
2379
  var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);
2381
- // eslint-disable-next-line
2382
2380
  this.header((fieldData[this.listBaseOption.fields.text]), true, 'header');
2383
2381
  }
2384
2382
  this.selectedLI = undefined;
@@ -2402,7 +2400,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2402
2400
  this.contentContainer = this.createElement('div', { className: classNames.container });
2403
2401
  this.element.appendChild(this.contentContainer);
2404
2402
  this.renderIntoDom(this.ulElement);
2405
- // eslint-disable-next-line
2406
2403
  if (this.isReact) {
2407
2404
  this.renderReactTemplates();
2408
2405
  }
@@ -2411,7 +2408,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2411
2408
  ListView.prototype.getElementUID = function (obj) {
2412
2409
  var fields = {};
2413
2410
  if (obj instanceof Element) {
2414
- // eslint-disable-next-line
2415
2411
  fields[this.fields.id] = obj.getAttribute('data-uid');
2416
2412
  }
2417
2413
  else {
@@ -2437,12 +2433,12 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2437
2433
  selector: '.' + classNames.listItem
2438
2434
  });
2439
2435
  this.renderComplete();
2436
+ this.previousScrollTop = this.element.scrollTop;
2440
2437
  };
2441
2438
  /**
2442
2439
  * It is used to destroy the ListView component.
2443
2440
  */
2444
2441
  ListView.prototype.destroy = function () {
2445
- // eslint-disable-next-line
2446
2442
  if (this.isReact) {
2447
2443
  this.clearTemplate();
2448
2444
  }
@@ -2484,7 +2480,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2484
2480
  toUL = toUL.parentElement;
2485
2481
  }
2486
2482
  var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);
2487
- // eslint-disable-next-line
2488
2483
  var text = fieldData[this.fields.text];
2489
2484
  this.switchView(fromUL, toUL, true);
2490
2485
  this.removeFocus();
@@ -2557,7 +2552,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2557
2552
  if (!this.enableVirtualization && isNullOrUndefined(li)) {
2558
2553
  var curLi = this.element.querySelectorAll('.' + classNames.listItem);
2559
2554
  for (var i = 0; i < curLi.length; i++) {
2560
- // eslint-disable-next-line
2561
2555
  if (curLi[i].innerText.trim() === fieldData[this.fields.text]) {
2562
2556
  li = curLi[i];
2563
2557
  }
@@ -2607,7 +2601,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2607
2601
  *
2608
2602
  */
2609
2603
  ListView.prototype.getSelectedItems = function () {
2610
- // eslint-disable-next-line
2611
2604
  var finalValue;
2612
2605
  var isCompleted = false;
2613
2606
  this.selectedId = [];
@@ -2618,7 +2611,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2618
2611
  isCompleted = true;
2619
2612
  }
2620
2613
  else if (this.showCheckBox && !isCompleted) {
2621
- // eslint-disable-next-line
2622
2614
  var liCollection = this.curUL.getElementsByClassName(classNames.selected);
2623
2615
  var liTextCollection = [];
2624
2616
  var liDataCollection = [];
@@ -2638,9 +2630,7 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2638
2630
  liDataCollection.push(tempData);
2639
2631
  }
2640
2632
  if (fieldData) {
2641
- // eslint-disable-next-line
2642
2633
  liTextCollection.push(fieldData[this.listBaseOption.fields.text]);
2643
- // eslint-disable-next-line
2644
2634
  this.selectedId.push(fieldData[this.listBaseOption.fields.id]);
2645
2635
  }
2646
2636
  else {
@@ -2682,7 +2672,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2682
2672
  isCompleted = true;
2683
2673
  }
2684
2674
  else {
2685
- // eslint-disable-next-line
2686
2675
  this.selectedId.push(fieldData[this.listBaseOption.fields.id]);
2687
2676
  finalValue = {
2688
2677
  text: fieldData[this.listBaseOption.fields.text], item: liElement,
@@ -2740,7 +2729,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2740
2729
  if (li) {
2741
2730
  li.classList.add(classNames.disable);
2742
2731
  }
2743
- // eslint-disable-next-line
2744
2732
  resultJSON[this.fields.enabled] = false;
2745
2733
  }
2746
2734
  }
@@ -2776,7 +2764,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2776
2764
  li.style.display = display;
2777
2765
  }
2778
2766
  if (isHide) {
2779
- // eslint-disable-next-line
2780
2767
  resultJSON[this.fields.isVisible] = false;
2781
2768
  }
2782
2769
  else {
@@ -2860,7 +2847,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2860
2847
  return newDataSource;
2861
2848
  };
2862
2849
  ListView.prototype.addItemInNestedList = function (targetItemData, itemQueue) {
2863
- // eslint-disable-next-line
2864
2850
  var targetItemId = targetItemData[this.fields.id];
2865
2851
  var targetChildDS = targetItemData[this.fields.child];
2866
2852
  var isAlreadyRenderedUL = this.element.querySelector('[pid=\'' + targetItemId + '\']');
@@ -2901,7 +2887,6 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2901
2887
  this.getLiFromObjOrElement(curViewDS[index + 2]) || null;
2902
2888
  var li = ListBase.createListItemFromJson(this.createElement, [dataSource], this.listBaseOption, null, null, this);
2903
2889
  this.setAttributes(li);
2904
- // eslint-disable-next-line
2905
2890
  if (this.template && this.isReact) {
2906
2891
  this.renderReactTemplates();
2907
2892
  }
@@ -2934,11 +2919,9 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2934
2919
  var curViewDS = this.curViewDS;
2935
2920
  var fields = obj instanceof Element ? this.getElementUID(obj) : obj;
2936
2921
  var dataSource;
2937
- // eslint-disable-next-line prefer-const
2938
2922
  dataSource = this.findItemFromDS(listDataSource, fields, true);
2939
2923
  if (dataSource) {
2940
2924
  var data_1;
2941
- // eslint-disable-next-line prefer-const
2942
2925
  data_1 = this.findItemFromDS(dataSource, fields);
2943
2926
  var index = curViewDS.indexOf(data_1);
2944
2927
  var li = this.getLiFromObjOrElement(obj);
@@ -2959,11 +2942,8 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
2959
2942
  if (groupLi) {
2960
2943
  detach(groupLi);
2961
2944
  }
2962
- // eslint-disable-next-line
2963
2945
  var foundData = (dataSource.length - 1) <= 0
2964
- ? this.findParent(this.localData, this.fields.id,
2965
- // eslint-disable-next-line
2966
- function (value) { return value === data_1[_this.fields.id]; }, null) : null;
2946
+ ? this.findParent(this.localData, this.fields.id, function (value) { return value === data_1[_this.fields.id]; }, null) : null;
2967
2947
  var dsIndex = dataSource.indexOf(data_1);
2968
2948
  dataSource.splice(dsIndex, 1);
2969
2949
  this.setViewDataSource(listDataSource);
@@ -3006,16 +2986,13 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
3006
2986
  }
3007
2987
  }
3008
2988
  };
3009
- // eslint-disable-next-line
3010
2989
  ListView.prototype.findParent = function (dataSource, id, callback, parent) {
3011
- // eslint-disable-next-line no-prototype-builtins
3012
2990
  if (dataSource.hasOwnProperty(id) && callback(dataSource[id]) === true) {
3013
2991
  return extend({}, dataSource);
3014
2992
  }
3015
2993
  for (var i = 0; i < Object.keys(dataSource).length; i++) {
3016
2994
  if (dataSource[Object.keys(dataSource)[i]]
3017
2995
  && typeof dataSource[Object.keys(dataSource)[i]] === 'object') {
3018
- // eslint-disable-next-line
3019
2996
  var result = this.findParent(dataSource[Object.keys(dataSource)[i]], id, callback, dataSource);
3020
2997
  if (result != null) {
3021
2998
  if (!result.parent) {
@@ -3038,6 +3015,21 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
3038
3015
  }
3039
3016
  return modules;
3040
3017
  };
3018
+ ListView.prototype.onListScroll = function (e) {
3019
+ var args = { originalEvent: e, scrollDirection: "Bottom", distanceY: this.element.scrollHeight - this.element.scrollTop };
3020
+ var currentScrollTop = this.element.scrollTop;
3021
+ if (currentScrollTop > this.previousScrollTop) {
3022
+ args.scrollDirection = "Bottom";
3023
+ args.distanceY = this.element.scrollHeight - this.element.clientHeight - this.element.scrollTop;
3024
+ this.trigger('scroll', args);
3025
+ }
3026
+ else if (this.previousScrollTop > currentScrollTop) {
3027
+ args.scrollDirection = "Top";
3028
+ args.distanceY = this.element.scrollTop;
3029
+ this.trigger('scroll', args);
3030
+ }
3031
+ this.previousScrollTop = currentScrollTop;
3032
+ };
3041
3033
  /**
3042
3034
  * Get the properties to be maintained in the persisted state.
3043
3035
  */
@@ -3118,6 +3110,9 @@ var ListView = /** @__PURE__ @class */ (function (_super) {
3118
3110
  __decorate([
3119
3111
  Event()
3120
3112
  ], ListView.prototype, "actionFailure", void 0);
3113
+ __decorate([
3114
+ Event()
3115
+ ], ListView.prototype, "scroll", void 0);
3121
3116
  ListView = __decorate([
3122
3117
  NotifyPropertyChanges
3123
3118
  ], ListView);
@@ -3153,10 +3148,6 @@ var Virtualization = /** @__PURE__ @class */ (function () {
3153
3148
  * @private
3154
3149
  */
3155
3150
  Virtualization.prototype.uiVirtualization = function () {
3156
- this.commonTemplate = '<div class="e-text-content" role="presentation"> ' +
3157
- '<span class="e-list-text"> ${' + this.listViewInstance.fields.text + '} </span></div>';
3158
- this.templateFunction = compile(this.listViewInstance.template || this.commonTemplate, this.listViewInstance);
3159
- this.groupTemplateFunction = compile(this.listViewInstance.groupTemplate || this.commonTemplate, this.listViewInstance);
3160
3151
  this.wireScrollEvent(false);
3161
3152
  var curViewDS = this.listViewInstance.curViewDS;
3162
3153
  var firstDs = curViewDS.slice(0, 1);
@@ -3289,6 +3280,9 @@ var Virtualization = /** @__PURE__ @class */ (function () {
3289
3280
  Virtualization.prototype.onVirtualUiScroll = function (e) {
3290
3281
  var _a;
3291
3282
  var startingHeight;
3283
+ var curViewDS = this.listViewInstance.curViewDS;
3284
+ this.listItemHeight = select('.e-list-item', this.listViewInstance.element).getBoundingClientRect().height;
3285
+ this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);
3292
3286
  if (this.listViewInstance.isWindow) {
3293
3287
  startingHeight = this.listViewInstance.ulElement.getBoundingClientRect().top -
3294
3288
  document.documentElement.getBoundingClientRect().top;
@@ -3404,7 +3398,13 @@ var Virtualization = /** @__PURE__ @class */ (function () {
3404
3398
  if (!element.querySelector('.' + classNames.checkboxWrapper)) {
3405
3399
  element.classList.add(classNames.checklist);
3406
3400
  textContent.classList.add(classNames.checkbox);
3407
- textContent.insertBefore(this.checkListWrapper.cloneNode(true), element.querySelector('.' + classNames.listItemText));
3401
+ if (this.listViewInstance.checkBoxPosition === 'Left') {
3402
+ textContent.classList.add('e-checkbox-left');
3403
+ }
3404
+ else {
3405
+ textContent.classList.add('e-checkbox-right');
3406
+ }
3407
+ textContent.append(this.checkListWrapper.cloneNode(true));
3408
3408
  }
3409
3409
  }
3410
3410
  }
@@ -3648,7 +3648,6 @@ var Virtualization = /** @__PURE__ @class */ (function () {
3648
3648
  var curViewDS = this.listViewInstance.curViewDS;
3649
3649
  // eslint-disable-next-line
3650
3650
  var resutJSON = this.findDSAndIndexFromId(curViewDS, obj);
3651
- // eslint-disable-next-line
3652
3651
  if (Object.keys(resutJSON).length) {
3653
3652
  dataSource = resutJSON.data;
3654
3653
  if (curViewDS[resutJSON.index - 1] &&
@@ -3912,191 +3911,49 @@ var Virtualization = /** @__PURE__ @class */ (function () {
3912
3911
  this.refreshItemHeight();
3913
3912
  };
3914
3913
  Virtualization.prototype.createUIItem = function (args) {
3915
- var template = document.createElement('div');
3916
- this.templateData = args.curData.isHeader ? args.curData.items[0] :
3917
- args.curData;
3918
- if (this.listViewInstance.isReact) {
3919
- this.commonTemplate = null;
3920
- }
3921
- if (this.listViewInstance.showCheckBox) {
3922
- // eslint-disable-next-line
3923
- this.listViewInstance.renderCheckbox(args);
3924
- if ((!isNullOrUndefined(this.listViewInstance.virtualCheckBox)) &&
3925
- (!isNullOrUndefined(this.listViewInstance.virtualCheckBox.outerHTML))) {
3926
- var div_1 = document.createElement('div');
3927
- var nodes = this.templateFunction(this.templateData, this.listViewInstance);
3928
- if (this.listViewInstance.template && this.listViewInstance.isReact) {
3929
- this.listViewInstance.renderReactTemplates();
3930
- }
3931
- [].slice.call(nodes).forEach(function (ele) {
3932
- div_1.appendChild(ele);
3933
- });
3934
- if (div_1.children && div_1.children[0]) {
3935
- div_1.children[0].classList.add('e-checkbox');
3936
- if (this.listViewInstance.checkBoxPosition === 'Left') {
3937
- div_1.children[0].classList.add('e-checkbox-left');
3938
- }
3939
- else {
3940
- div_1.children[0].classList.add('e-checkbox-right');
3941
- }
3942
- if (this.listViewInstance.checkBoxPosition === 'Left') {
3943
- div_1.children[0].insertBefore(this.listViewInstance.virtualCheckBox, div_1.childNodes[0].children[0]);
3944
- }
3945
- else {
3946
- div_1.children[0].appendChild(this.listViewInstance.virtualCheckBox);
3914
+ if (!args.item.classList.contains('e-list-group-item')) {
3915
+ this.templateData = args.curData.isHeader ? args.curData.items[0] :
3916
+ args.curData;
3917
+ if (this.listViewInstance.showCheckBox) {
3918
+ // eslint-disable-next-line
3919
+ this.listViewInstance.renderCheckbox(args);
3920
+ if ((!isNullOrUndefined(this.listViewInstance.virtualCheckBox)) &&
3921
+ (!isNullOrUndefined(this.listViewInstance.virtualCheckBox.outerHTML))) {
3922
+ var div_1 = document.createElement('div');
3923
+ var commonTemplate = '<div class="e-text-content" role="presentation"> ' +
3924
+ '<span class="e-list-text"> ${' + this.listViewInstance.fields.text + '} </span></div>';
3925
+ var templateFunction = compile(this.listViewInstance.template || commonTemplate, this.listViewInstance);
3926
+ var nodes = templateFunction(this.templateData, this.listViewInstance);
3927
+ if (this.listViewInstance.template && this.listViewInstance.isReact) {
3928
+ this.listViewInstance.renderReactTemplates();
3947
3929
  }
3948
- template.innerHTML = div_1.innerHTML;
3949
- }
3950
- }
3951
- else {
3952
- var div_2 = document.createElement('div');
3953
- var nodes = this.templateFunction(this.templateData, this.listViewInstance);
3954
- if (this.listViewInstance.template && this.listViewInstance.isReact) {
3955
- this.listViewInstance.renderReactTemplates();
3956
- }
3957
- [].slice.call(nodes).forEach(function (ele) {
3958
- div_2.appendChild(ele);
3959
- });
3960
- template.innerHTML = div_2.innerHTML;
3961
- }
3962
- }
3963
- else {
3964
- var nodes = this.templateFunction(this.templateData, this.listViewInstance);
3965
- if (this.listViewInstance.template && this.listViewInstance.isReact) {
3966
- this.listViewInstance.renderReactTemplates();
3967
- }
3968
- [].slice.call(nodes).forEach(function (ele) {
3969
- template.appendChild(ele);
3970
- });
3971
- }
3972
- if (args.curData.isHeader) {
3973
- this.headerData = args.curData;
3974
- }
3975
- var groupTemplate = this.listViewInstance.createElement('div');
3976
- if (this.listViewInstance.fields.groupBy) {
3977
- var nodes = this.groupTemplateFunction(this.headerData, this.listViewInstance);
3978
- if (this.listViewInstance.template && this.listViewInstance.isReact) {
3979
- this.listViewInstance.renderReactTemplates();
3980
- }
3981
- [].slice.call(nodes).forEach(function (ele) {
3982
- groupTemplate.appendChild(ele);
3983
- });
3984
- }
3985
- if ((!this.listViewInstance.isReact || (typeof this.listViewInstance.template == "string" && !args.item.classList.contains("e-list-group-item")) ||
3986
- (typeof this.listViewInstance.groupTemplate == "string" && args.item.classList.contains("e-list-group-item"))) && !this.listViewInstance.isVue) {
3987
- args.item.innerHTML = '';
3988
- }
3989
- args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };
3990
- for (var i = 0; i < template.children.length; i++) {
3991
- this.compileTemplate(template.children[i], args.item, false);
3992
- }
3993
- for (var i = 0; i < groupTemplate.children.length; i++) {
3994
- this.compileTemplate(groupTemplate.children[i], args.item, true);
3995
- }
3996
- args.item.context.template = args.curData.isHeader ? template.firstElementChild :
3997
- groupTemplate.firstElementChild;
3998
- args.item.context.type = args.curData.isHeader ? 'flatList' : 'groupList';
3999
- var element = args.curData.isHeader ? groupTemplate : template;
4000
- if (element.firstElementChild && !this.listViewInstance.isReact && !this.listViewInstance.isVue) {
4001
- args.item.insertBefore(element.firstElementChild, null);
4002
- }
4003
- };
4004
- Virtualization.prototype.compileTemplate = function (element, item, isHeader) {
4005
- var _this = this;
4006
- var subNode = {};
4007
- subNode.onChange = function (value) {
4008
- var groupTemplateElements;
4009
- var templateElements;
4010
- if (_this.listViewInstance.isVue) {
4011
- groupTemplateElements = _this.groupTemplateFunction(value);
4012
- templateElements = _this.templateFunction(value);
4013
- }
4014
- else {
4015
- groupTemplateElements = _this.groupTemplateFunction(value, _this.listViewInstance);
4016
- templateElements = _this.templateFunction(value, _this.listViewInstance);
4017
- }
4018
- if (_this.listViewInstance.template && _this.listViewInstance.isReact) {
4019
- _this.listViewInstance.renderReactTemplates();
4020
- }
4021
- var currentTemplate = templateElements;
4022
- if (value.isHeader) {
4023
- currentTemplate = groupTemplateElements;
4024
- }
4025
- [].slice.call(currentTemplate).forEach(function (currentElement) {
4026
- var RemovableClass = element.classList.value.replace('e-checkbox', '');
4027
- RemovableClass = RemovableClass.replace('e-checkbox-left', '');
4028
- RemovableClass = RemovableClass.replace('e-checkbox-right', '');
4029
- removeClass([element], RemovableClass.split(' ').filter(function (css) { return css; }));
4030
- addClass([element], Array.from(currentElement.classList));
4031
- for (var i = 0; i < element.attributes.length; i++) {
4032
- if (element.attributes[i].name != 'class') {
4033
- var newData = currentElement.getAttribute(element.attributes[i].name);
4034
- element.setAttribute(element.attributes[i].name, newData);
3930
+ [].slice.call(nodes).forEach(function (ele) {
3931
+ div_1.appendChild(ele);
3932
+ });
3933
+ if (div_1.children && div_1.children[0]) {
3934
+ div_1.children[0].classList.add('e-checkbox');
3935
+ if (this.listViewInstance.checkBoxPosition === 'Left') {
3936
+ div_1.children[0].classList.add('e-checkbox-left');
3937
+ }
3938
+ else {
3939
+ div_1.children[0].classList.add('e-checkbox-right');
3940
+ }
3941
+ if (this.listViewInstance.checkBoxPosition === 'Left') {
3942
+ div_1.children[0].insertBefore(this.listViewInstance.virtualCheckBox, div_1.childNodes[0].children[0]);
3943
+ }
3944
+ else {
3945
+ div_1.children[0].appendChild(this.listViewInstance.virtualCheckBox);
3946
+ }
3947
+ while (args.item.lastChild) {
3948
+ args.item.removeChild(args.item.lastChild);
3949
+ }
3950
+ [].slice.call(div_1.children).forEach(function (ele) {
3951
+ args.item.appendChild(ele);
3952
+ });
4035
3953
  }
4036
3954
  }
4037
- [].slice.call(element.children).forEach(function (ele) {
4038
- if (!ele.classList.contains('e-listview-checkbox') && !(ele.classList.contains('e-checkbox-left') || ele.classList.contains('e-checkbox-right'))) {
4039
- ele.remove();
4040
- }
4041
- });
4042
- [].slice.call(currentElement.children).forEach(function (ele) {
4043
- element.appendChild(ele);
4044
- });
4045
- });
4046
- };
4047
- this.updateContextData(item, subNode, isHeader);
4048
- };
4049
- Virtualization.prototype.onChange = function (newData, listElement) {
4050
- listElement.context.data = newData;
4051
- // eslint-disable-next-line max-len
4052
- var groupTemplateNodes = listElement.context.nodes.groupTemplateNodes;
4053
- // eslint-disable-next-line max-len
4054
- var flatTemplateNodes = listElement.context.nodes.flatTemplateNodes;
4055
- // eslint-disable-next-line
4056
- if (!isNullOrUndefined(newData.isHeader) && newData.isHeader && listElement.context.type === 'groupList') {
4057
- // eslint-disable-next-line
4058
- var element = listElement.firstElementChild;
4059
- detach(listElement.firstElementChild);
4060
- listElement.insertBefore(listElement.context.template, null);
4061
- listElement.context.template = element;
4062
- listElement.context.type = 'flatList';
4063
- for (var i = 0; i < groupTemplateNodes.length; i++) {
4064
- // eslint-disable-next-line
4065
- groupTemplateNodes[i].onChange(newData);
4066
3955
  }
4067
3956
  }
4068
- else if (!newData.isHeader && listElement.context.type === 'flatList') {
4069
- var element = listElement.firstElementChild;
4070
- detach(listElement.firstElementChild);
4071
- listElement.insertBefore(listElement.context.template, null);
4072
- listElement.context.template = element;
4073
- listElement.context.type = 'groupList';
4074
- for (var i = 0; i < flatTemplateNodes.length; i++) {
4075
- // eslint-disable-next-line
4076
- flatTemplateNodes[i].onChange(newData);
4077
- }
4078
- }
4079
- else if (!newData.isHeader) {
4080
- for (var i = 0; i < flatTemplateNodes.length; i++) {
4081
- // eslint-disable-next-line
4082
- flatTemplateNodes[i].onChange(newData);
4083
- }
4084
- }
4085
- else {
4086
- for (var i = 0; i < groupTemplateNodes.length; i++) {
4087
- // eslint-disable-next-line
4088
- groupTemplateNodes[i].onChange(newData);
4089
- }
4090
- }
4091
- };
4092
- // eslint-disable-next-line
4093
- Virtualization.prototype.updateContextData = function (listElement, node, isHeader) {
4094
- if (isHeader) {
4095
- listElement.context.nodes.groupTemplateNodes.push(node);
4096
- }
4097
- else {
4098
- listElement.context.nodes.flatTemplateNodes.push(node);
4099
- }
4100
3957
  };
4101
3958
  Virtualization.prototype.reRenderUiVirtualization = function () {
4102
3959
  this.wireScrollEvent(true);
@@ -4111,8 +3968,7 @@ var Virtualization = /** @__PURE__ @class */ (function () {
4111
3968
  this.listViewInstance.setLocalData();
4112
3969
  };
4113
3970
  Virtualization.prototype.updateUI = function (element, index, targetElement) {
4114
- // eslint-disable-next-line @typescript-eslint/ban-types
4115
- var onChange = this.isNgTemplate() ? this.onNgChange : (this.isVueFunctionTemplate()) ? this.onVueChange : this.onChange;
3971
+ var onChange = this.isNgTemplate() ? this.onNgChange : this.onChange;
4116
3972
  if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {
4117
3973
  var curViewDS = this.listViewInstance.curViewDS[index];
4118
3974
  // eslint-disable-next-line
@@ -4136,18 +3992,22 @@ var Virtualization = /** @__PURE__ @class */ (function () {
4136
3992
  * @param {ElementContext} listElement - The HTML element context for the list view.
4137
3993
  * @param {Virtualization} virtualThis - The virtualization context for the list view.
4138
3994
  */
4139
- Virtualization.prototype.onVueChange = function (newData, listElement, virtualThis) {
3995
+ Virtualization.prototype.onChange = function (newData, listElement, virtualThis) {
4140
3996
  var liItem = ListBase.createListItemFromJson(virtualThis.listViewInstance.createElement,
4141
3997
  // eslint-disable-next-line
4142
3998
  [newData], virtualThis.listViewInstance.listBaseOption, null, null, virtualThis.listViewInstance);
3999
+ if (virtualThis.listViewInstance.isReact) {
4000
+ virtualThis.listViewInstance.renderReactTemplates();
4001
+ }
4143
4002
  while (listElement.lastChild) {
4144
4003
  listElement.removeChild(listElement.lastChild);
4145
4004
  }
4146
- listElement.appendChild(liItem[0].firstChild);
4005
+ [].slice.call(liItem[0].children).forEach(function (ele) {
4006
+ listElement.appendChild(ele);
4007
+ });
4147
4008
  };
4148
4009
  Virtualization.prototype.onNgChange = function (newData, listElement, virtualThis) {
4149
4010
  // compile given target element with template for new data
4150
- // eslint-disable-next-line
4151
4011
  var templateCompiler = compile(virtualThis.listViewInstance.template);
4152
4012
  var resultElement = templateCompiler(newData);
4153
4013
  while (listElement.lastChild) {