@syncfusion/ej2-calendars 20.3.59 → 20.4.40

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 (76) hide show
  1. package/.eslintrc.json +16 -1
  2. package/CHANGELOG.md +0 -26
  3. package/dist/ej2-calendars.min.js +2 -2
  4. package/dist/ej2-calendars.umd.min.js +2 -2
  5. package/dist/ej2-calendars.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-calendars.es2015.js +181 -75
  7. package/dist/es6/ej2-calendars.es2015.js.map +1 -1
  8. package/dist/es6/ej2-calendars.es5.js +180 -74
  9. package/dist/es6/ej2-calendars.es5.js.map +1 -1
  10. package/dist/global/ej2-calendars.min.js +2 -2
  11. package/dist/global/ej2-calendars.min.js.map +1 -1
  12. package/dist/global/index.d.ts +1 -1
  13. package/package.json +11 -11
  14. package/src/calendar/calendar.js +37 -19
  15. package/src/calendar/islamic.js +29 -7
  16. package/src/datepicker/datepicker.js +24 -14
  17. package/src/daterangepicker/daterangepicker.d.ts +0 -1
  18. package/src/daterangepicker/daterangepicker.js +43 -24
  19. package/src/datetimepicker/datetimepicker.js +10 -2
  20. package/src/maskbase/masked-date-time.js +24 -0
  21. package/src/timepicker/timepicker.js +13 -8
  22. package/styles/bootstrap-dark.css +7 -0
  23. package/styles/bootstrap.css +7 -0
  24. package/styles/bootstrap4.css +7 -0
  25. package/styles/bootstrap5-dark.css +8 -1
  26. package/styles/bootstrap5.css +7 -0
  27. package/styles/calendar/_fluent-definition.scss +1 -1
  28. package/styles/calendar/_material-definition.scss +3 -3
  29. package/styles/calendar/_theme.scss +1 -1
  30. package/styles/calendar/bootstrap5-dark.css +1 -1
  31. package/styles/calendar/fabric-dark.css +1 -1
  32. package/styles/calendar/fabric.css +1 -1
  33. package/styles/calendar/fluent-dark.css +3 -3
  34. package/styles/calendar/fluent.css +2 -2
  35. package/styles/calendar/material.css +3 -3
  36. package/styles/daterangepicker/_bootstrap-dark-definition.scss +1 -0
  37. package/styles/daterangepicker/_bootstrap-definition.scss +1 -0
  38. package/styles/daterangepicker/_bootstrap4-definition.scss +1 -0
  39. package/styles/daterangepicker/_bootstrap5-definition.scss +1 -0
  40. package/styles/daterangepicker/_fabric-dark-definition.scss +1 -0
  41. package/styles/daterangepicker/_fabric-definition.scss +1 -0
  42. package/styles/daterangepicker/_fluent-definition.scss +6 -0
  43. package/styles/daterangepicker/_fusionnew-definition.scss +1 -0
  44. package/styles/daterangepicker/_highcontrast-definition.scss +1 -0
  45. package/styles/daterangepicker/_highcontrast-light-definition.scss +1 -0
  46. package/styles/daterangepicker/_layout.scss +6 -0
  47. package/styles/daterangepicker/_material-dark-definition.scss +1 -0
  48. package/styles/daterangepicker/_material-definition.scss +1 -0
  49. package/styles/daterangepicker/_material3-definition.scss +1 -0
  50. package/styles/daterangepicker/_tailwind-definition.scss +1 -0
  51. package/styles/daterangepicker/_theme.scss +33 -0
  52. package/styles/daterangepicker/bootstrap-dark.css +7 -0
  53. package/styles/daterangepicker/bootstrap.css +7 -0
  54. package/styles/daterangepicker/bootstrap4.css +7 -0
  55. package/styles/daterangepicker/bootstrap5-dark.css +7 -0
  56. package/styles/daterangepicker/bootstrap5.css +7 -0
  57. package/styles/daterangepicker/fabric-dark.css +7 -0
  58. package/styles/daterangepicker/fabric.css +7 -0
  59. package/styles/daterangepicker/fluent-dark.css +30 -0
  60. package/styles/daterangepicker/fluent.css +30 -0
  61. package/styles/daterangepicker/highcontrast-light.css +7 -0
  62. package/styles/daterangepicker/highcontrast.css +7 -0
  63. package/styles/daterangepicker/material-dark.css +7 -0
  64. package/styles/daterangepicker/material.css +5 -0
  65. package/styles/daterangepicker/tailwind-dark.css +7 -0
  66. package/styles/daterangepicker/tailwind.css +7 -0
  67. package/styles/fabric-dark.css +8 -1
  68. package/styles/fabric.css +8 -1
  69. package/styles/fluent-dark.css +33 -3
  70. package/styles/fluent.css +32 -2
  71. package/styles/highcontrast-light.css +7 -0
  72. package/styles/highcontrast.css +7 -0
  73. package/styles/material-dark.css +7 -0
  74. package/styles/material.css +8 -3
  75. package/styles/tailwind-dark.css +7 -0
  76. package/styles/tailwind.css +7 -0
@@ -273,8 +273,10 @@ let CalendarBase = class CalendarBase extends Component {
273
273
  else {
274
274
  cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));
275
275
  }
276
- for (const obj of Object.keys(cldrObj)) {
277
- culShortNames.push(getValue(obj, cldrObj));
276
+ if (!isNullOrUndefined(cldrObj)) {
277
+ for (const obj of Object.keys(cldrObj)) {
278
+ culShortNames.push(getValue(obj, cldrObj));
279
+ }
278
280
  }
279
281
  return culShortNames;
280
282
  }
@@ -308,9 +310,11 @@ let CalendarBase = class CalendarBase extends Component {
308
310
  }
309
311
  }
310
312
  // eslint-disable-next-line max-len
311
- const shortNames = this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek);
312
- for (let days = 0; days <= daysCount; days++) {
313
- html += '<th class="">' + this.toCapitalize(shortNames[days]) + '</th>';
313
+ const shortNames = this.getCultureValues().length > 0 && this.getCultureValues() ? this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek) : null;
314
+ if (!isNullOrUndefined(shortNames)) {
315
+ for (let days = 0; days <= daysCount; days++) {
316
+ html += '<th class="">' + this.toCapitalize(shortNames[days]) + '</th>';
317
+ }
314
318
  }
315
319
  html = '<tr>' + html + '</tr>';
316
320
  this.tableHeadElement.innerHTML = html;
@@ -492,7 +496,7 @@ let CalendarBase = class CalendarBase extends Component {
492
496
  e.preventDefault();
493
497
  break;
494
498
  case 'controlDown':
495
- if (!isNullOrUndefined(focusedDate) || !isNullOrUndefined(selectedDate) && !levelRestrict) {
499
+ if (!isNullOrUndefined(focusedDate) && !levelRestrict || !isNullOrUndefined(selectedDate) && !levelRestrict) {
496
500
  this.contentClick(null, --view, (focusedDate || selectedDate), value);
497
501
  }
498
502
  e.preventDefault();
@@ -1116,9 +1120,6 @@ let CalendarBase = class CalendarBase extends Component {
1116
1120
  case 0:
1117
1121
  detach(this.tableBodyElement);
1118
1122
  this.renderMonths(e, null, isCustomDate);
1119
- if (multiSelection && !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0])) {
1120
- this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);
1121
- }
1122
1123
  break;
1123
1124
  case 1:
1124
1125
  detach(this.tableBodyElement);
@@ -1423,7 +1424,9 @@ let CalendarBase = class CalendarBase extends Component {
1423
1424
  }
1424
1425
  }
1425
1426
  if (this.getModuleName() === 'calendar' && this.element) {
1426
- EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);
1427
+ if (!isNullOrUndefined(this.headerTitleElement)) {
1428
+ EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);
1429
+ }
1427
1430
  if (this.todayElement) {
1428
1431
  EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);
1429
1432
  }
@@ -1441,6 +1444,17 @@ let CalendarBase = class CalendarBase extends Component {
1441
1444
  if (this.element) {
1442
1445
  this.element.innerHTML = '';
1443
1446
  }
1447
+ this.todayElement = null;
1448
+ this.tableBodyElement = null;
1449
+ this.renderDayCellArgs = null;
1450
+ this.headerElement = null;
1451
+ this.nextIcon = null;
1452
+ this.table = null;
1453
+ this.tableHeadElement = null;
1454
+ this.previousIcon = null;
1455
+ this.headerTitleElement = null;
1456
+ this.footer = null;
1457
+ this.contentElement = null;
1444
1458
  super.destroy();
1445
1459
  }
1446
1460
  title(e) {
@@ -1745,10 +1759,12 @@ let CalendarBase = class CalendarBase extends Component {
1745
1759
  }
1746
1760
  previousIconHandler(disabled) {
1747
1761
  if (disabled) {
1748
- EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);
1749
- addClass([this.previousIcon], '' + DISABLED);
1750
- addClass([this.previousIcon], '' + OVERLAY);
1751
- this.previousIcon.setAttribute('aria-disabled', 'true');
1762
+ if (!isNullOrUndefined(this.previousIcon)) {
1763
+ EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);
1764
+ addClass([this.previousIcon], '' + DISABLED);
1765
+ addClass([this.previousIcon], '' + OVERLAY);
1766
+ this.previousIcon.setAttribute('aria-disabled', 'true');
1767
+ }
1752
1768
  }
1753
1769
  else {
1754
1770
  EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);
@@ -1771,10 +1787,12 @@ let CalendarBase = class CalendarBase extends Component {
1771
1787
  }
1772
1788
  nextIconHandler(disabled) {
1773
1789
  if (disabled) {
1774
- EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);
1775
- addClass([this.nextIcon], DISABLED);
1776
- addClass([this.nextIcon], OVERLAY);
1777
- this.nextIcon.setAttribute('aria-disabled', 'true');
1790
+ if (!isNullOrUndefined(this.previousIcon)) {
1791
+ EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);
1792
+ addClass([this.nextIcon], DISABLED);
1793
+ addClass([this.nextIcon], OVERLAY);
1794
+ this.nextIcon.setAttribute('aria-disabled', 'true');
1795
+ }
1778
1796
  }
1779
1797
  else {
1780
1798
  EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);
@@ -2731,8 +2749,11 @@ class Islamic {
2731
2749
  }
2732
2750
  break;
2733
2751
  case 'Decade': {
2734
- const prevDecadeCompare = this.hijriCompareDecade(date, this.calendarInstance.min) < 1;
2752
+ let startIslamicYear = 1361;
2753
+ let gregorianValue = HijriParser.toGregorian(startIslamicYear, 1, 1);
2754
+ let prevDecadeCompare = this.hijriCompareDecade(date, this.calendarInstance.min) < 1;
2735
2755
  const nextDecadeCompare = this.hijriCompareDecade(date, this.calendarInstance.max) > -1;
2756
+ prevDecadeCompare = HijriParser.toGregorian(this.calendarInstance.headerTitleElement.textContent.split('-')[0].trim(), 1, 1).getFullYear() === gregorianValue.getFullYear() ? true : prevDecadeCompare;
2736
2757
  this.calendarInstance.previousIconHandler(prevDecadeCompare);
2737
2758
  this.calendarInstance.nextIconHandler(nextDecadeCompare);
2738
2759
  }
@@ -2753,7 +2774,9 @@ class Islamic {
2753
2774
  break;
2754
2775
  case 'Decade':
2755
2776
  this.calendarInstance.nextIconClicked = true;
2756
- islamicDate.year = islamicDate.year - this.calendarInstance.headerElement.textContent.split('-')[0].trim() === 1 ? islamicDate.year + 1 : islamicDate.year;
2777
+ if (islamicDate.year - this.calendarInstance.headerElement.textContent.split('-')[0].trim() === 1) {
2778
+ islamicDate.year = islamicDate.year - this.calendarInstance.headerElement.textContent.split('-')[0].trim() === 1 ? islamicDate.year + 1 : islamicDate.year;
2779
+ }
2757
2780
  this.calendarInstance.currentDate = this.toGregorian(islamicDate.year + 10, islamicDate.month, 1);
2758
2781
  this.calendarInstance.switchView(view);
2759
2782
  break;
@@ -2843,12 +2866,16 @@ class Islamic {
2843
2866
  let endFullYr = endYr.getFullYear();
2844
2867
  let startHdrYr = this.calendarInstance.globalize.formatDate(startYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });
2845
2868
  let endHdrYr = this.calendarInstance.globalize.formatDate(endYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });
2869
+ let splityear = this.calendarInstance.headerElement.textContent.split('-');
2870
+ if ((!isNullOrUndefined(e) && (splityear[0] !== startHdrYr) && e.action === 'home') || (!isNullOrUndefined(e) && e.type === 'keydown' && e.action === 'end')) {
2871
+ startHdrYr = this.calendarInstance.headerElement.textContent.split('-')[0].trim();
2872
+ endHdrYr = this.calendarInstance.headerElement.textContent.split('-')[1].trim();
2873
+ }
2846
2874
  if (this.calendarInstance.islamicPreviousHeader) {
2847
2875
  startHdrYr = this.calendarInstance.islamicPreviousHeader.split('-')[0].trim();
2848
2876
  endHdrYr = this.calendarInstance.islamicPreviousHeader.split('-')[1].trim();
2849
2877
  this.calendarInstance.islamicPreviousHeader = null;
2850
2878
  }
2851
- let splityear = this.calendarInstance.headerElement.textContent.split('-');
2852
2879
  if (this.calendarInstance.previousIconClicked) {
2853
2880
  for (var i = 0; i <= splityear.length; i++) {
2854
2881
  endHdrYr = endHdrYr - splityear[i] === 2 || splityear[i] - endHdrYr === 2 ? (parseInt(endHdrYr) + 1).toString() : endHdrYr - splityear[i] === 3 || splityear[i] - endHdrYr === 3 ? (parseInt(endHdrYr) + 2).toString() : endHdrYr - splityear[i] === 4 || splityear[i] - endHdrYr === 4 ? (parseInt(endHdrYr) + 3).toString() : endHdrYr - splityear[i] === 5 || splityear[i] - endHdrYr === 5 ? (parseInt(endHdrYr) + 4).toString() : endHdrYr;
@@ -2856,11 +2883,21 @@ class Islamic {
2856
2883
  endHdrYr = (parseInt(endHdrYr) - 1).toString();
2857
2884
  }
2858
2885
  }
2886
+ if (endHdrYr - splityear[i] === 8 || splityear[i] - endHdrYr === 8) {
2887
+ endHdrYr = (parseInt(endHdrYr) - 9).toString();
2888
+ startHdrYr = (parseInt(endHdrYr) - 9).toString();
2889
+ }
2890
+ if (endHdrYr - splityear[i] === 7 || splityear[i] - endHdrYr === 7) {
2891
+ endHdrYr = (parseInt(endHdrYr) - 8).toString();
2892
+ startHdrYr = (parseInt(endHdrYr) - 9).toString();
2893
+ }
2859
2894
  startHdrYr = endHdrYr - startHdrYr === 10
2860
2895
  ? (parseInt(startHdrYr) + 1).toString() : endHdrYr - startHdrYr === 11
2861
2896
  ? (parseInt(startHdrYr) + 2).toString() : endHdrYr - startHdrYr === 12
2862
2897
  ? (parseInt(startHdrYr) + 3).toString() : startHdrYr;
2863
- startHdrYr = endHdrYr - startHdrYr === 8 ? (parseInt(startHdrYr) - 1).toString() : startHdrYr;
2898
+ if (endHdrYr - startHdrYr === 8) {
2899
+ startHdrYr = (parseInt(startHdrYr) - 1).toString();
2900
+ }
2864
2901
  }
2865
2902
  if (this.calendarInstance.nextIconClicked) {
2866
2903
  for (var i = 0; i <= splityear.length; i++) {
@@ -2874,6 +2911,10 @@ class Islamic {
2874
2911
  startHdrYr = (parseInt(startHdrYr) + 2).toString();
2875
2912
  }
2876
2913
  }
2914
+ if (startHdrYr - this.calendarInstance.headerTitleElement.textContent.split('-')[1].trim() > 1) {
2915
+ startHdrYr = (parseInt(this.calendarInstance.headerTitleElement.textContent.split('-')[1].trim()) + 1).toString();
2916
+ endHdrYr = (parseInt(startHdrYr) + 9).toString();
2917
+ }
2877
2918
  endHdrYr = endHdrYr - startHdrYr === 10 ? (parseInt(endHdrYr) - 1).toString() : endHdrYr;
2878
2919
  endHdrYr = endHdrYr - startHdrYr === 7
2879
2920
  ? (parseInt(endHdrYr) + 2).toString() : endHdrYr - startHdrYr === 8
@@ -2909,10 +2950,6 @@ class Islamic {
2909
2950
  else if (year < new Date(this.islamicInValue(this.calendarInstance.min)).getFullYear()
2910
2951
  || year > new Date(this.islamicInValue(this.calendarInstance.max)).getFullYear()) {
2911
2952
  addClass([tdEle], DISABLED$1);
2912
- if (year < new Date(this.islamicInValue(this.calendarInstance.min)).getFullYear()
2913
- || year > new Date(this.islamicInValue(this.calendarInstance.max)).getFullYear()) {
2914
- addClass([tdEle], DISABLED$1);
2915
- }
2916
2953
  }
2917
2954
  else if (!isNullOrUndefined(value) &&
2918
2955
  (this.getIslamicDate(localDate)).year ===
@@ -2928,6 +2965,9 @@ class Islamic {
2928
2965
  EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);
2929
2966
  }
2930
2967
  tdEle.appendChild(dayLink);
2968
+ if ((!isNullOrUndefined(e) && e.action === 'home' && islamicDate.year.toString() === startHdrYr) || (!isNullOrUndefined(e) && e.action === 'end' && islamicDate.year.toString() === endHdrYr)) {
2969
+ addClass([tdEle], FOCUSEDDATE$1);
2970
+ }
2931
2971
  tdEles.push(tdEle);
2932
2972
  }
2933
2973
  }
@@ -3497,7 +3537,9 @@ let DatePicker = class DatePicker extends Calendar {
3497
3537
  }
3498
3538
  }
3499
3539
  unBindEvents() {
3500
- EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler);
3540
+ if (!isNullOrUndefined(this.inputWrapper)) {
3541
+ EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler);
3542
+ }
3501
3543
  EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);
3502
3544
  EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);
3503
3545
  EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);
@@ -3628,10 +3670,10 @@ let DatePicker = class DatePicker extends Calendar {
3628
3670
  updateHtmlAttributeToWrapper() {
3629
3671
  if (!isNullOrUndefined(this.htmlAttributes)) {
3630
3672
  for (const key of Object.keys(this.htmlAttributes)) {
3631
- if (!isNullOrUndefined(this.htmlAttributes[key])) {
3673
+ if (!isNullOrUndefined(this.htmlAttributes[`${key}`])) {
3632
3674
  if (containerAttr.indexOf(key) > -1) {
3633
3675
  if (key === 'class') {
3634
- const updatedClassValues = (this.htmlAttributes[key].replace(/\s+/g, ' ')).trim();
3676
+ const updatedClassValues = (this.htmlAttributes[`${key}`].replace(/\s+/g, ' ')).trim();
3635
3677
  if (updatedClassValues !== '') {
3636
3678
  addClass([this.inputWrapper.container], updatedClassValues.split(' '));
3637
3679
  }
@@ -3640,19 +3682,19 @@ let DatePicker = class DatePicker extends Calendar {
3640
3682
  let setStyle = this.inputWrapper.container.getAttribute(key);
3641
3683
  if (!isNullOrUndefined(setStyle)) {
3642
3684
  if (setStyle.charAt(setStyle.length - 1) === ';') {
3643
- setStyle = setStyle + this.htmlAttributes[key];
3685
+ setStyle = setStyle + this.htmlAttributes[`${key}`];
3644
3686
  }
3645
3687
  else {
3646
- setStyle = setStyle + ';' + this.htmlAttributes[key];
3688
+ setStyle = setStyle + ';' + this.htmlAttributes[`${key}`];
3647
3689
  }
3648
3690
  }
3649
3691
  else {
3650
- setStyle = this.htmlAttributes[key];
3692
+ setStyle = this.htmlAttributes[`${key}`];
3651
3693
  }
3652
3694
  this.inputWrapper.container.setAttribute(key, setStyle);
3653
3695
  }
3654
3696
  else {
3655
- this.inputWrapper.container.setAttribute(key, this.htmlAttributes[key]);
3697
+ this.inputWrapper.container.setAttribute(key, this.htmlAttributes[`${key}`]);
3656
3698
  }
3657
3699
  }
3658
3700
  }
@@ -3663,7 +3705,7 @@ let DatePicker = class DatePicker extends Calendar {
3663
3705
  if (!isNullOrUndefined(this.htmlAttributes)) {
3664
3706
  for (const key of Object.keys(this.htmlAttributes)) {
3665
3707
  if (containerAttr.indexOf(key) < 0) {
3666
- this.inputElement.setAttribute(key, this.htmlAttributes[key]);
3708
+ this.inputElement.setAttribute(key, this.htmlAttributes[`${key}`]);
3667
3709
  }
3668
3710
  }
3669
3711
  }
@@ -3775,12 +3817,12 @@ let DatePicker = class DatePicker extends Calendar {
3775
3817
  this.isPopupClicked = false;
3776
3818
  }
3777
3819
  documentHandler(e) {
3778
- if ((!isNullOrUndefined(this.popupObj) && (this.inputWrapper.container.contains(e.target) && e.type !== 'mousedown' ||
3820
+ if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(e.target) && e.type !== 'mousedown' ||
3779
3821
  (this.popupObj.element && this.popupObj.element.contains(e.target)))) && e.type !== 'touchstart') {
3780
3822
  e.preventDefault();
3781
3823
  }
3782
3824
  const target = e.target;
3783
- if (!(closest(target, '.e-datepicker.e-popup-wrapper'))
3825
+ if (!(closest(target, '.e-datepicker.e-popup-wrapper')) && !isNullOrUndefined(this.inputWrapper)
3784
3826
  && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)
3785
3827
  && (!target.classList.contains('e-day'))) {
3786
3828
  this.hide(e);
@@ -4416,7 +4458,9 @@ let DatePicker = class DatePicker extends Calendar {
4416
4458
  destroy() {
4417
4459
  this.unBindEvents();
4418
4460
  super.destroy();
4419
- this.keyboardModules.destroy();
4461
+ if (!isNullOrUndefined(this.keyboardModules)) {
4462
+ this.keyboardModules.destroy();
4463
+ }
4420
4464
  if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {
4421
4465
  super.destroy();
4422
4466
  }
@@ -4446,15 +4490,21 @@ let DatePicker = class DatePicker extends Calendar {
4446
4490
  }
4447
4491
  if (this.ngTag === null) {
4448
4492
  if (this.inputElement) {
4449
- this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);
4493
+ if (!isNullOrUndefined(this.inputWrapper)) {
4494
+ this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);
4495
+ }
4450
4496
  removeClass([this.inputElement], [INPUTROOT]);
4451
4497
  }
4452
4498
  removeClass([this.element], [ROOT$1]);
4453
- detach(this.inputWrapper.container);
4499
+ if (!isNullOrUndefined(this.inputWrapper)) {
4500
+ detach(this.inputWrapper.container);
4501
+ }
4454
4502
  }
4455
4503
  if (this.formElement) {
4456
4504
  EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);
4457
4505
  }
4506
+ this.inputWrapper = null;
4507
+ this.keyboardModules = null;
4458
4508
  }
4459
4509
  ensureInputAttribute() {
4460
4510
  const prop = [];
@@ -4910,7 +4960,7 @@ let DatePicker = class DatePicker extends Calendar {
4910
4960
  }
4911
4961
  break;
4912
4962
  }
4913
- if (!this.isDynamicValueChanged && !this.isIconClicked) {
4963
+ if (!this.isDynamicValueChanged) {
4914
4964
  this.hide(null);
4915
4965
  }
4916
4966
  this.isDynamicValueChanged = false;
@@ -5129,7 +5179,6 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
5129
5179
  this.invalidValueString = null;
5130
5180
  this.isAngular = false;
5131
5181
  this.preventChange = false;
5132
- this.isPropChanged = false;
5133
5182
  this.dateRangeOptions = options;
5134
5183
  }
5135
5184
  /**
@@ -5361,8 +5410,8 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
5361
5410
  }
5362
5411
  for (const pro of Object.keys(attributes$$1)) {
5363
5412
  if (pro.indexOf('data') === 0) {
5364
- this.firstHiddenChild.setAttribute(pro, attributes$$1[pro]);
5365
- this.secondHiddenChild.setAttribute(pro, attributes$$1[pro]);
5413
+ this.firstHiddenChild.setAttribute(pro, attributes$$1[`${pro}`]);
5414
+ this.secondHiddenChild.setAttribute(pro, attributes$$1[`${pro}`]);
5366
5415
  }
5367
5416
  }
5368
5417
  }
@@ -5409,19 +5458,19 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
5409
5458
  for (const key of Object.keys(this.htmlAttributes)) {
5410
5459
  if (wrapperAttr.indexOf(key) > -1) {
5411
5460
  if (key === 'class') {
5412
- const updatedClassValue = (this.htmlAttributes[key].replace(/\s+/g, ' ')).trim();
5461
+ const updatedClassValue = (this.htmlAttributes[`${key}`].replace(/\s+/g, ' ')).trim();
5413
5462
  if (updatedClassValue !== '') {
5414
5463
  addClass([this.inputWrapper.container], updatedClassValue.split(' '));
5415
5464
  }
5416
5465
  }
5417
5466
  else if (key === 'style') {
5418
5467
  let dateRangeStyle = this.inputWrapper.container.getAttribute(key);
5419
- dateRangeStyle = !isNullOrUndefined(dateRangeStyle) ? (dateRangeStyle + this.htmlAttributes[key]) :
5420
- this.htmlAttributes[key];
5468
+ dateRangeStyle = !isNullOrUndefined(dateRangeStyle) ? (dateRangeStyle + this.htmlAttributes[`${key}`]) :
5469
+ this.htmlAttributes[`${key}`];
5421
5470
  this.inputWrapper.container.setAttribute(key, dateRangeStyle);
5422
5471
  }
5423
5472
  else {
5424
- this.inputWrapper.container.setAttribute(key, this.htmlAttributes[key]);
5473
+ this.inputWrapper.container.setAttribute(key, this.htmlAttributes[`${key}`]);
5425
5474
  }
5426
5475
  }
5427
5476
  }
@@ -5431,7 +5480,7 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
5431
5480
  if (!isNullOrUndefined(this.htmlAttributes)) {
5432
5481
  for (const key of Object.keys(this.htmlAttributes)) {
5433
5482
  if (wrapperAttr.indexOf(key) < 0) {
5434
- this.inputElement.setAttribute(key, this.htmlAttributes[key]);
5483
+ this.inputElement.setAttribute(key, this.htmlAttributes[`${key}`]);
5435
5484
  }
5436
5485
  }
5437
5486
  }
@@ -6064,7 +6113,7 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
6064
6113
  return ele;
6065
6114
  }
6066
6115
  navInCalendar(e, isLeftCalendar, leftLimit, rightLimit, ele) {
6067
- const view = this.getViewNumber(this.currentView());
6116
+ let view = this.getViewNumber(this.currentView());
6068
6117
  let date;
6069
6118
  const min = this.min;
6070
6119
  let max;
@@ -6154,10 +6203,8 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
6154
6203
  case 'tab':
6155
6204
  if (this.tabKeyValidation(ele, LEFTCALENDER)) {
6156
6205
  ele = this.keyCalendarUpdate(false, ele, false);
6157
- const focusedCell = ele.querySelector('.e-focused-date');
6158
- if (isNullOrUndefined(focusedCell)) {
6159
- this.currentDate = this.firstCellToFocus(this.rightCalendar);
6160
- }
6206
+ this.currentDate = this.firstCellToFocus(this.rightCalendar);
6207
+ view = this.getViewNumber(this.currentView());
6161
6208
  this.keyboardNavigate(0, view, e, max, min);
6162
6209
  this.keyNavigation(ele, e);
6163
6210
  }
@@ -6165,10 +6212,7 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
6165
6212
  case 'shiftTab':
6166
6213
  if (this.tabKeyValidation(ele, RIGHTCALENDER)) {
6167
6214
  ele = this.keyCalendarUpdate(true, ele, false);
6168
- const focusedCell = ele.querySelector('.e-focused-date');
6169
- if (isNullOrUndefined(focusedCell)) {
6170
- this.currentDate = this.firstCellToFocus(this.leftCalendar);
6171
- }
6215
+ this.currentDate = this.firstCellToFocus(this.leftCalendar);
6172
6216
  this.keyboardNavigate(0, view, e, max, min);
6173
6217
  this.keyNavigation(ele, e);
6174
6218
  }
@@ -6176,7 +6220,7 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
6176
6220
  }
6177
6221
  }
6178
6222
  firstCellToFocus(calendar) {
6179
- const focusAbleEle = calendar.children[1].firstElementChild.querySelector('td.e-cell:not(.e-week-number):not(.e-disabled):not(.e-other-month)');
6223
+ const focusAbleEle = this.getViewNumber(this.currentView()) === 2 ? calendar.children[1].firstElementChild.querySelector('td.e-cell:not(.e-week-number):not(.e-disabled):not(.e-other-year)') : calendar.children[1].firstElementChild.querySelector('td.e-cell:not(.e-week-number):not(.e-disabled):not(.e-other-month)');
6180
6224
  const focusEleID = focusAbleEle && focusAbleEle.id ? focusAbleEle.id.split('_')[0] : null;
6181
6225
  const currentFirstDay = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth(), 1);
6182
6226
  const focusDate = focusEleID ? new Date(+focusEleID) : currentFirstDay;
@@ -6403,7 +6447,11 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
6403
6447
  const leftHeader = this.leftCalendar.querySelector('.e-header');
6404
6448
  const isRightMonth = rightHeader ? rightHeader.classList.contains('e-month') : false;
6405
6449
  const isLeftMonth = leftHeader ? leftHeader.classList.contains('e-month') : false;
6406
- return isLeftCalendar && isLeftMonth && isRightMonth && !this.isMobile;
6450
+ const isRightYear = rightHeader ? rightHeader.classList.contains('e-year') : false;
6451
+ const isLeftYear = leftHeader ? leftHeader.classList.contains('e-year') : false;
6452
+ const isRightDecade = rightHeader ? rightHeader.classList.contains('e-decade') : false;
6453
+ const isLeftDecade = leftHeader ? leftHeader.classList.contains('e-decade') : false;
6454
+ return isLeftCalendar && (isLeftMonth || isLeftYear || isLeftDecade) && (isRightMonth || isRightYear || isRightDecade) && !this.isMobile;
6407
6455
  }
6408
6456
  keyNavigation(calendar, e) {
6409
6457
  this.bindCalendarCellEvents(calendar);
@@ -8764,6 +8812,30 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
8764
8812
  this.inputElement.setAttribute('name', this.element.getAttribute('data-name'));
8765
8813
  this.inputElement.removeAttribute('data-name');
8766
8814
  }
8815
+ this.closeEventArgs = null;
8816
+ this.leftCalendar = null;
8817
+ this.rightTitle = null;
8818
+ this.leftTitle = null;
8819
+ this.openEventArgs = null;
8820
+ this.leftCalNextIcon = null;
8821
+ this.rightCalendar = null;
8822
+ this.closeEventArgs = null;
8823
+ this.rightCalPrevIcon = null;
8824
+ this.leftCalPrevIcon = null;
8825
+ this.popupKeyboardModule = null;
8826
+ this.cancelButton = null;
8827
+ this.applyButton = null;
8828
+ this.calendarElement = null;
8829
+ this.leftKeyboardModule = null;
8830
+ this.rightCalNextIcon = null;
8831
+ this.leftCalNextIcon = null;
8832
+ this.btnKeyboardModule = null;
8833
+ this.rightKeyboardModule = null;
8834
+ this.leftKeyboardModule = null;
8835
+ this.presetKeyboardModule = null;
8836
+ this.liCollections = null;
8837
+ this.popupObj = null;
8838
+ this.popupWrapper = null;
8767
8839
  }
8768
8840
  ensureInputAttribute() {
8769
8841
  const attr = [];
@@ -9076,6 +9148,9 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
9076
9148
  const format = { format: this.formatString, type: 'date', skeleton: 'yMd' };
9077
9149
  for (const prop of Object.keys(newProp)) {
9078
9150
  const openPopup = ['maxDays', 'minDays', 'value'];
9151
+ if (openPopup.indexOf(prop) < 0) {
9152
+ this.hide(null);
9153
+ }
9079
9154
  switch (prop) {
9080
9155
  case 'width':
9081
9156
  this.setEleWidth(this.width);
@@ -9285,13 +9360,7 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
9285
9360
  this.setProperties({ depth: newProp.depth }, true);
9286
9361
  this.refreshChange();
9287
9362
  break;
9288
- default:
9289
- this.isPropChanged = true;
9290
9363
  }
9291
- if (openPopup.indexOf(prop) < 0 && !this.isPropChanged) {
9292
- this.hide(null);
9293
- }
9294
- this.isPropChanged = false;
9295
9364
  }
9296
9365
  }
9297
9366
  };
@@ -9886,6 +9955,11 @@ let TimePicker = class TimePicker extends Component {
9886
9955
  if (this.formElement) {
9887
9956
  EventHandler.remove(this.formElement, 'reset', this.formResetHandler);
9888
9957
  }
9958
+ this.rippleFn = null;
9959
+ this.openPopupEventArgs = null;
9960
+ this.selectedElement = null;
9961
+ this.listTag = null;
9962
+ this.liCollections = null;
9889
9963
  }
9890
9964
  ensureInputAttribute() {
9891
9965
  const propertyList = [];
@@ -9997,19 +10071,19 @@ let TimePicker = class TimePicker extends Component {
9997
10071
  for (const key of Object.keys(this.htmlAttributes)) {
9998
10072
  if (wrapperAttributes.indexOf(key) > -1) {
9999
10073
  if (key === 'class') {
10000
- const updatedClassesValue = (this.htmlAttributes[key].replace(/\s+/g, ' ')).trim();
10074
+ const updatedClassesValue = (this.htmlAttributes[`${key}`].replace(/\s+/g, ' ')).trim();
10001
10075
  if (updatedClassesValue !== '') {
10002
10076
  addClass([this.inputWrapper.container], updatedClassesValue.split(' '));
10003
10077
  }
10004
10078
  }
10005
10079
  else if (key === 'style') {
10006
10080
  let timeStyle = this.inputWrapper.container.getAttribute(key);
10007
- timeStyle = !isNullOrUndefined(timeStyle) ? (timeStyle + this.htmlAttributes[key]) :
10008
- this.htmlAttributes[key];
10081
+ timeStyle = !isNullOrUndefined(timeStyle) ? (timeStyle + this.htmlAttributes[`${key}`]) :
10082
+ this.htmlAttributes[`${key}`];
10009
10083
  this.inputWrapper.container.setAttribute(key, timeStyle);
10010
10084
  }
10011
10085
  else {
10012
- this.inputWrapper.container.setAttribute(key, this.htmlAttributes[key]);
10086
+ this.inputWrapper.container.setAttribute(key, this.htmlAttributes[`${key}`]);
10013
10087
  }
10014
10088
  }
10015
10089
  }
@@ -10019,7 +10093,7 @@ let TimePicker = class TimePicker extends Component {
10019
10093
  if (!isNullOrUndefined(this.htmlAttributes)) {
10020
10094
  for (const key of Object.keys(this.htmlAttributes)) {
10021
10095
  if (wrapperAttributes.indexOf(key) < 0) {
10022
- this.inputElement.setAttribute(key, this.htmlAttributes[key]);
10096
+ this.inputElement.setAttribute(key, this.htmlAttributes[`${key}`]);
10023
10097
  }
10024
10098
  }
10025
10099
  }
@@ -10732,7 +10806,7 @@ let TimePicker = class TimePicker extends Component {
10732
10806
  this.inputEvent.destroy();
10733
10807
  }
10734
10808
  EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);
10735
- if (this.showClearButton && !isNullOrUndefined(this.inputWrapper.clearButton)) {
10809
+ if (this.showClearButton && !isNullOrUndefined(this.inputWrapper) && !isNullOrUndefined(this.inputWrapper.clearButton)) {
10736
10810
  EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);
10737
10811
  }
10738
10812
  if (this.formElement) {
@@ -11094,7 +11168,7 @@ let TimePicker = class TimePicker extends Component {
11094
11168
  return elementIndex;
11095
11169
  }
11096
11170
  keyHandler(event) {
11097
- if (isNullOrUndefined(this.step) || this.step <= 0 || this.inputWrapper.buttons[0].classList.contains(DISABLED$3)) {
11171
+ if (isNullOrUndefined(this.step) || this.step <= 0 || !isNullOrUndefined(this.inputWrapper) && this.inputWrapper.buttons[0].classList.contains(DISABLED$3)) {
11098
11172
  return;
11099
11173
  }
11100
11174
  const count = this.timeCollections.length;
@@ -11341,7 +11415,7 @@ let TimePicker = class TimePicker extends Component {
11341
11415
  }
11342
11416
  documentClickHandler(event) {
11343
11417
  const target = event.target;
11344
- if ((!isNullOrUndefined(this.popupObj) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||
11418
+ if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||
11345
11419
  (this.popupObj.element && this.popupObj.element.contains(target)))) && event.type !== 'touchstart') {
11346
11420
  event.preventDefault();
11347
11421
  }
@@ -12061,6 +12135,14 @@ let DateTimePicker = class DateTimePicker extends DatePicker {
12061
12135
  this.keyboardHandler.destroy();
12062
12136
  }
12063
12137
  this.unBindInputEvents();
12138
+ this.liCollections = null;
12139
+ this.rippleFn = null;
12140
+ this.selectedElement = null;
12141
+ this.listTag = null;
12142
+ this.timeIcon = null;
12143
+ this.popupObject = null;
12144
+ this.preventArgs = null;
12145
+ this.keyboardModule = null;
12064
12146
  super.destroy();
12065
12147
  }
12066
12148
  /**
@@ -12480,7 +12562,7 @@ let DateTimePicker = class DateTimePicker extends DatePicker {
12480
12562
  event.preventDefault();
12481
12563
  }
12482
12564
  if (!(closest(target, '[id="' + (this.popupObject && this.popupObject.element.id + '"]'))) && target !== this.inputElement
12483
- && target !== this.timeIcon && target !== this.inputWrapper.container) {
12565
+ && target !== this.timeIcon && !isNullOrUndefined(this.inputWrapper) && target !== this.inputWrapper.container) {
12484
12566
  if (this.isTimePopupOpen()) {
12485
12567
  this.hide(event);
12486
12568
  this.focusOut();
@@ -13354,7 +13436,7 @@ let DateTimePicker = class DateTimePicker extends DatePicker {
13354
13436
  super.onPropertyChanged(newProp, oldProp);
13355
13437
  break;
13356
13438
  }
13357
- if (!this.isDynamicValueChanged && !this.isIconClicked) {
13439
+ if (!this.isDynamicValueChanged) {
13358
13440
  this.hide(null);
13359
13441
  }
13360
13442
  this.isDynamicValueChanged = false;
@@ -13664,6 +13746,10 @@ class MaskedDateTime {
13664
13746
  }
13665
13747
  if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWUP || args.e.key === ARROWDOWN)) {
13666
13748
  let start = this.parent.inputElement.selectionStart;
13749
+ let formatText = '';
13750
+ if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {
13751
+ formatText = this.hiddenMask[start];
13752
+ }
13667
13753
  this.dateAlteration(args.e.key === ARROWDOWN ? true : false);
13668
13754
  let inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());
13669
13755
  this.isHiddenMask = true;
@@ -13672,6 +13758,12 @@ class MaskedDateTime {
13672
13758
  this.previousHiddenMask = this.hiddenMask;
13673
13759
  this.previousValue = inputValue;
13674
13760
  this.parent.inputElement.value = inputValue;
13761
+ for (var i = 0; i < this.hiddenMask.length; i++) {
13762
+ if (formatText === this.hiddenMask[i]) {
13763
+ start = i;
13764
+ break;
13765
+ }
13766
+ }
13675
13767
  this.parent.inputElement.selectionStart = start;
13676
13768
  this.validCharacterCheck();
13677
13769
  }
@@ -14065,6 +14157,10 @@ class MaskedDateTime {
14065
14157
  maskInputHandler() {
14066
14158
  let start = this.parent.inputElement.selectionStart;
14067
14159
  let selectionChar = this.previousHiddenMask[start - 1];
14160
+ let formatText = '';
14161
+ if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {
14162
+ formatText = this.hiddenMask[start];
14163
+ }
14068
14164
  let inputValue;
14069
14165
  this.differenceCheck();
14070
14166
  inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());
@@ -14075,6 +14171,13 @@ class MaskedDateTime {
14075
14171
  this.previousHiddenMask = this.hiddenMask;
14076
14172
  this.previousValue = inputValue;
14077
14173
  this.parent.inputElement.value = inputValue;
14174
+ this.parent.inputElement.value = inputValue;
14175
+ for (var i = 0; i < this.hiddenMask.length; i++) {
14176
+ if (formatText === this.hiddenMask[i]) {
14177
+ start = i;
14178
+ break;
14179
+ }
14180
+ }
14078
14181
  this.parent.inputElement.selectionStart = start;
14079
14182
  this.validCharacterCheck();
14080
14183
  if ((this.isNavigate || this.isDeletion) && !this.isDeleteKey) {
@@ -14082,6 +14185,9 @@ class MaskedDateTime {
14082
14185
  this.isNavigate = this.isDeletion = false;
14083
14186
  this.navigateSelection(isbackward);
14084
14187
  }
14188
+ if (this.isDeleteKey) {
14189
+ this.isDeletion = false;
14190
+ }
14085
14191
  this.isDeleteKey = false;
14086
14192
  // this.setSelection(selectionChar);
14087
14193
  // this.navigateSelection(inputValue);