@syncfusion/ej2-calendars 20.2.45 → 20.2.50

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 (64) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/ej2-calendars.umd.min.js +2 -2
  3. package/dist/ej2-calendars.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-calendars.es2015.js +81 -12
  5. package/dist/es6/ej2-calendars.es2015.js.map +1 -1
  6. package/dist/es6/ej2-calendars.es5.js +81 -12
  7. package/dist/es6/ej2-calendars.es5.js.map +1 -1
  8. package/dist/global/ej2-calendars.min.js +2 -2
  9. package/dist/global/ej2-calendars.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +10 -10
  12. package/src/calendar/calendar.d.ts +3 -2
  13. package/src/calendar/calendar.js +34 -8
  14. package/src/datepicker/datepicker.js +12 -1
  15. package/src/daterangepicker/daterangepicker.js +12 -1
  16. package/src/datetimepicker/datetimepicker.js +12 -1
  17. package/src/timepicker/timepicker.js +11 -1
  18. package/styles/bootstrap-dark.css +190 -0
  19. package/styles/bootstrap.css +190 -0
  20. package/styles/bootstrap4.css +190 -0
  21. package/styles/bootstrap5-dark.css +190 -0
  22. package/styles/bootstrap5.css +190 -0
  23. package/styles/datepicker/_layout.scss +123 -0
  24. package/styles/datepicker/bootstrap-dark.css +79 -0
  25. package/styles/datepicker/bootstrap.css +79 -0
  26. package/styles/datepicker/bootstrap4.css +79 -0
  27. package/styles/datepicker/bootstrap5-dark.css +79 -0
  28. package/styles/datepicker/bootstrap5.css +79 -0
  29. package/styles/datepicker/fabric-dark.css +79 -0
  30. package/styles/datepicker/fabric.css +79 -0
  31. package/styles/datepicker/fluent-dark.css +79 -0
  32. package/styles/datepicker/fluent.css +79 -0
  33. package/styles/datepicker/highcontrast-light.css +79 -0
  34. package/styles/datepicker/highcontrast.css +79 -0
  35. package/styles/datepicker/material-dark.css +79 -0
  36. package/styles/datepicker/material.css +79 -0
  37. package/styles/datepicker/tailwind-dark.css +79 -0
  38. package/styles/datepicker/tailwind.css +79 -0
  39. package/styles/daterangepicker/_layout.scss +151 -0
  40. package/styles/daterangepicker/bootstrap-dark.css +111 -0
  41. package/styles/daterangepicker/bootstrap.css +111 -0
  42. package/styles/daterangepicker/bootstrap4.css +111 -0
  43. package/styles/daterangepicker/bootstrap5-dark.css +111 -0
  44. package/styles/daterangepicker/bootstrap5.css +111 -0
  45. package/styles/daterangepicker/fabric-dark.css +111 -0
  46. package/styles/daterangepicker/fabric.css +111 -0
  47. package/styles/daterangepicker/fluent-dark.css +111 -0
  48. package/styles/daterangepicker/fluent.css +111 -0
  49. package/styles/daterangepicker/highcontrast-light.css +111 -0
  50. package/styles/daterangepicker/highcontrast.css +111 -0
  51. package/styles/daterangepicker/material-dark.css +111 -0
  52. package/styles/daterangepicker/material.css +111 -0
  53. package/styles/daterangepicker/tailwind-dark.css +111 -0
  54. package/styles/daterangepicker/tailwind.css +111 -0
  55. package/styles/fabric-dark.css +190 -0
  56. package/styles/fabric.css +190 -0
  57. package/styles/fluent-dark.css +190 -0
  58. package/styles/fluent.css +190 -0
  59. package/styles/highcontrast-light.css +190 -0
  60. package/styles/highcontrast.css +190 -0
  61. package/styles/material-dark.css +190 -0
  62. package/styles/material.css +190 -0
  63. package/styles/tailwind-dark.css +190 -0
  64. package/styles/tailwind.css +190 -0
@@ -69,6 +69,7 @@ let CalendarBase = class CalendarBase extends Component {
69
69
  this.isTodayClicked = false;
70
70
  this.preventChange = false;
71
71
  this.isAngular = false;
72
+ this.previousDates = false;
72
73
  }
73
74
  /**
74
75
  * To Initialize the control rendering.
@@ -634,7 +635,7 @@ let CalendarBase = class CalendarBase extends Component {
634
635
  const numCells = this.weekNumber ? 8 : 7;
635
636
  let tdEles;
636
637
  if (this.calendarMode === 'Gregorian') {
637
- tdEles = this.renderDays(this.currentDate, value, null, null, isCustomDate);
638
+ tdEles = this.renderDays(this.currentDate, value, null, null, isCustomDate, e);
638
639
  }
639
640
  else {
640
641
  tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);
@@ -647,7 +648,7 @@ let CalendarBase = class CalendarBase extends Component {
647
648
  this.islamicModule.islamicRenderTemplate(tdEles, numCells, MONTH, e, value);
648
649
  }
649
650
  }
650
- renderDays(currentDate, value, multiSelection, values, isTodayDate) {
651
+ renderDays(currentDate, value, multiSelection, values, isTodayDate, e) {
651
652
  const tdEles = [];
652
653
  const cellsCount = 42;
653
654
  const todayDate = isTodayDate ? new Date(+currentDate) : this.getDate(new Date(), this.timezone);
@@ -738,6 +739,10 @@ let CalendarBase = class CalendarBase extends Component {
738
739
  // if (args.isDisabled && +this.value === +args.date) {
739
740
  // this.setProperties({ value: null }, true);
740
741
  // }
742
+ let currentTarget;
743
+ if (!isNullOrUndefined(e) && e.type == 'click') {
744
+ currentTarget = e.currentTarget;
745
+ }
741
746
  if (multiSelection && !isNullOrUndefined(values) && !disabledCls) {
742
747
  for (let tempValue = 0; tempValue < values.length; tempValue++) {
743
748
  const type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';
@@ -748,6 +753,22 @@ let CalendarBase = class CalendarBase extends Component {
748
753
  || (this.getDateVal(localDate, value))) {
749
754
  addClass([tdEle], SELECTED);
750
755
  }
756
+ if (!isNullOrUndefined(currentTarget) && currentTarget.innerText === tdEle.innerText && this.previousDates && currentTarget.classList.contains(SELECTED)) {
757
+ removeClass([tdEle], SELECTED);
758
+ this.previousDates = false;
759
+ const copyValues = this.copyValues(values);
760
+ for (let i = 0; i < copyValues.length; i++) {
761
+ const type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';
762
+ const formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };
763
+ const localDateString = this.globalize.formatDate(date, formatOptions);
764
+ const tempDateString = this.globalize.formatDate(copyValues[i], formatOptions);
765
+ if (localDateString === tempDateString) {
766
+ const index = copyValues.indexOf(copyValues[i]);
767
+ copyValues.splice(index, 1);
768
+ }
769
+ }
770
+ this.setProperties({ values: copyValues }, true);
771
+ }
751
772
  else {
752
773
  this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);
753
774
  }
@@ -2186,8 +2207,8 @@ let Calendar = class Calendar extends CalendarBase {
2186
2207
  renderMonths(e, value, isCustomDate) {
2187
2208
  super.renderMonths(e, this.value, isCustomDate);
2188
2209
  }
2189
- renderDays(currentDate, value, isMultiSelect, values, isCustomDate) {
2190
- const tempDays = super.renderDays(currentDate, this.value, this.isMultiSelection, this.values, isCustomDate);
2210
+ renderDays(currentDate, value, isMultiSelect, values, isCustomDate, e) {
2211
+ const tempDays = super.renderDays(currentDate, this.value, this.isMultiSelection, this.values, isCustomDate, e);
2191
2212
  if (this.isMultiSelection) {
2192
2213
  super.validateValues(this.isMultiSelection, this.values);
2193
2214
  }
@@ -2225,9 +2246,14 @@ let Calendar = class Calendar extends CalendarBase {
2225
2246
  if (eve.classList.contains(OTHERMONTH)) {
2226
2247
  if (this.isMultiSelection) {
2227
2248
  const copyValues = this.copyValues(this.values);
2228
- copyValues.push(this.getIdValue(e, null));
2229
- this.setProperties({ values: copyValues }, true);
2230
- this.setProperties({ value: this.values[this.values.length - 1] }, true);
2249
+ if (copyValues.toString().indexOf(this.getIdValue(e, null).toString()) === -1) {
2250
+ copyValues.push(this.getIdValue(e, null));
2251
+ this.setProperties({ values: copyValues }, true);
2252
+ this.setProperties({ value: this.values[this.values.length - 1] }, true);
2253
+ }
2254
+ else {
2255
+ this.previousDates = true;
2256
+ }
2231
2257
  }
2232
2258
  else {
2233
2259
  this.setProperties({ value: this.getIdValue(e, null) }, true);
@@ -2499,7 +2525,7 @@ let Calendar = class Calendar extends CalendarBase {
2499
2525
  if (!isNullOrUndefined(this.value)) {
2500
2526
  this.setProperties({ value: this.value }, true);
2501
2527
  }
2502
- if (!this.isMultiSelection && +this.value !== Number.NaN && (+this.value !== +this.previousDate || this.previousDate == null
2528
+ if (!this.isMultiSelection && +this.value !== Number.NaN && (!isNullOrUndefined(this.value) && !isNullOrUndefined(this.previousDate) && +new Date(this.value.toDateString()) !== +new Date(this.previousDate.toDateString()) || this.previousDate == null
2503
2529
  && !isNaN(+this.value))) {
2504
2530
  this.changeEvent(e);
2505
2531
  }
@@ -3117,6 +3143,10 @@ let DatePicker = class DatePicker extends Calendar {
3117
3143
  render() {
3118
3144
  this.initialize();
3119
3145
  this.bindEvents();
3146
+ Input.calculateWidth(this.inputElement, this.inputWrapper.container);
3147
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
3148
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');
3149
+ }
3120
3150
  this.renderComplete();
3121
3151
  this.setTimeZone(this.serverTimezoneOffset);
3122
3152
  }
@@ -3734,7 +3764,7 @@ let DatePicker = class DatePicker extends Calendar {
3734
3764
  this.isPopupClicked = false;
3735
3765
  }
3736
3766
  documentHandler(e) {
3737
- if ((!isNullOrUndefined(this.popupObj) && (this.inputWrapper.container.contains(e.target) ||
3767
+ if ((!isNullOrUndefined(this.popupObj) && (this.inputWrapper.container.contains(e.target) && e.type !== 'mousedown' ||
3738
3768
  (this.popupObj.element && this.popupObj.element.contains(e.target)))) && e.type !== 'touchstart') {
3739
3769
  e.preventDefault();
3740
3770
  }
@@ -4833,11 +4863,18 @@ let DatePicker = class DatePicker extends Calendar {
4833
4863
  break;
4834
4864
  case 'width':
4835
4865
  this.setWidth(newProp.width);
4866
+ Input.calculateWidth(this.inputElement, this.inputWrapper.container);
4867
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
4868
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');
4869
+ }
4836
4870
  break;
4837
4871
  case 'floatLabelType':
4838
4872
  this.floatLabelType = newProp.floatLabelType;
4839
4873
  Input.removeFloating(this.inputWrapper);
4840
4874
  Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);
4875
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
4876
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');
4877
+ }
4841
4878
  break;
4842
4879
  case 'enableMask':
4843
4880
  if (this.enableMask) {
@@ -5095,6 +5132,10 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
5095
5132
  if (this.element.hasAttribute('data-val')) {
5096
5133
  this.element.setAttribute('data-val', 'false');
5097
5134
  }
5135
+ Input.calculateWidth(this.inputElement, this.inputWrapper.container);
5136
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
5137
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');
5138
+ }
5098
5139
  this.renderComplete();
5099
5140
  }
5100
5141
  /**
@@ -8172,7 +8213,7 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
8172
8213
  }
8173
8214
  const target = e.target;
8174
8215
  if (!this.inputWrapper.container.contains(target) ||
8175
- (!isNullOrUndefined(this.popupObj) && !closest(target, '[id="' + this.popupWrapper.id + '"]'))) {
8216
+ (!isNullOrUndefined(this.popupObj) && !closest(target, '[id="' + this.popupWrapper.id + '"]') && e.type === 'mousedown')) {
8176
8217
  if (e.type !== 'touchstart' && ((e.type === 'mousedown') ||
8177
8218
  this.closeEventArgs && !this.closeEventArgs.cancel)) {
8178
8219
  e.preventDefault();
@@ -9008,6 +9049,10 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
9008
9049
  switch (prop) {
9009
9050
  case 'width':
9010
9051
  this.setEleWidth(this.width);
9052
+ Input.calculateWidth(this.inputElement, this.inputWrapper.container);
9053
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
9054
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');
9055
+ }
9011
9056
  break;
9012
9057
  case 'separator':
9013
9058
  this.previousEleValue = this.inputElement.value;
@@ -9199,6 +9244,9 @@ let DateRangePicker = class DateRangePicker extends CalendarBase {
9199
9244
  this.floatLabelType = newProp.floatLabelType;
9200
9245
  Input.removeFloating(this.inputWrapper);
9201
9246
  Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);
9247
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
9248
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');
9249
+ }
9202
9250
  break;
9203
9251
  case 'start':
9204
9252
  this.setProperties({ start: newProp.start }, true);
@@ -9513,6 +9561,9 @@ let TimePicker = class TimePicker extends Component {
9513
9561
  this.anchor = this.inputElement;
9514
9562
  this.inputElement.setAttribute('value', this.inputElement.value);
9515
9563
  this.inputEleValue = this.getDateObject(this.inputElement.value);
9564
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
9565
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');
9566
+ }
9516
9567
  this.renderComplete();
9517
9568
  }
9518
9569
  setTimeAllowEdit() {
@@ -11242,7 +11293,7 @@ let TimePicker = class TimePicker extends Component {
11242
11293
  }
11243
11294
  documentClickHandler(event) {
11244
11295
  const target = event.target;
11245
- if ((!isNullOrUndefined(this.popupObj) && (this.inputWrapper.container.contains(target) ||
11296
+ if ((!isNullOrUndefined(this.popupObj) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||
11246
11297
  (this.popupObj.element && this.popupObj.element.contains(target)))) && event.type !== 'touchstart') {
11247
11298
  event.preventDefault();
11248
11299
  }
@@ -11616,6 +11667,10 @@ let TimePicker = class TimePicker extends Component {
11616
11667
  case 'width':
11617
11668
  setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });
11618
11669
  this.containerStyle = this.inputWrapper.container.getBoundingClientRect();
11670
+ Input.calculateWidth(this.inputElement, this.inputWrapper.container);
11671
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
11672
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');
11673
+ }
11619
11674
  break;
11620
11675
  case 'format':
11621
11676
  this.setProperties({ format: newProp.format }, true);
@@ -11666,6 +11721,9 @@ let TimePicker = class TimePicker extends Component {
11666
11721
  this.floatLabelType = newProp.floatLabelType;
11667
11722
  Input.removeFloating(this.inputWrapper);
11668
11723
  Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);
11724
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
11725
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');
11726
+ }
11669
11727
  break;
11670
11728
  case 'strictMode':
11671
11729
  this.invalidValueString = null;
@@ -12012,6 +12070,10 @@ let DateTimePicker = class DateTimePicker extends DatePicker {
12012
12070
  this.inputElement.tabIndex = -1;
12013
12071
  }
12014
12072
  }
12073
+ Input.calculateWidth(this.inputElement, this.inputWrapper.container);
12074
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
12075
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');
12076
+ }
12015
12077
  this.renderComplete();
12016
12078
  }
12017
12079
  setValue() {
@@ -12363,7 +12425,7 @@ let DateTimePicker = class DateTimePicker extends DatePicker {
12363
12425
  }
12364
12426
  documentClickHandler(event) {
12365
12427
  const target = event.target;
12366
- if ((!isNullOrUndefined(this.popupObject) && (this.inputWrapper.container.contains(target) ||
12428
+ if ((!isNullOrUndefined(this.popupObject) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||
12367
12429
  (this.popupObject.element && this.popupObject.element.contains(target)))) && event.type !== 'touchstart') {
12368
12430
  event.preventDefault();
12369
12431
  }
@@ -13197,6 +13259,10 @@ let DateTimePicker = class DateTimePicker extends DatePicker {
13197
13259
  break;
13198
13260
  case 'width':
13199
13261
  this.setWidth(newProp.width);
13262
+ Input.calculateWidth(this.inputElement, this.inputWrapper.container);
13263
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
13264
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');
13265
+ }
13200
13266
  break;
13201
13267
  case 'readonly':
13202
13268
  Input.setReadonly(this.readonly, this.inputElement);
@@ -13205,6 +13271,9 @@ let DateTimePicker = class DateTimePicker extends DatePicker {
13205
13271
  this.floatLabelType = newProp.floatLabelType;
13206
13272
  Input.removeFloating(this.inputWrapper);
13207
13273
  Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);
13274
+ if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {
13275
+ this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');
13276
+ }
13208
13277
  break;
13209
13278
  case 'scrollTo':
13210
13279
  if (this.checkDateValue(new Date(this.checkValue(newProp.scrollTo)))) {