@syncfusion/ej2-schedule 22.2.12 → 23.1.38

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 (111) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/ej2-schedule.min.js +3 -3
  3. package/dist/ej2-schedule.umd.min.js +3 -3
  4. package/dist/ej2-schedule.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-schedule.es2015.js +309 -67
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +311 -67
  8. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  9. package/dist/global/ej2-schedule.min.js +3 -3
  10. package/dist/global/ej2-schedule.min.js.map +1 -1
  11. package/dist/global/index.d.ts +2 -2
  12. package/package.json +16 -16
  13. package/src/schedule/actions/crud.d.ts +1 -1
  14. package/src/schedule/actions/crud.js +13 -5
  15. package/src/schedule/actions/data.js +29 -8
  16. package/src/schedule/actions/keyboard.js +1 -2
  17. package/src/schedule/actions/virtual-scroll.d.ts +1 -0
  18. package/src/schedule/actions/virtual-scroll.js +37 -2
  19. package/src/schedule/base/constant.d.ts +6 -0
  20. package/src/schedule/base/constant.js +6 -0
  21. package/src/schedule/base/interface.d.ts +15 -0
  22. package/src/schedule/base/resource.js +1 -0
  23. package/src/schedule/base/schedule-model.d.ts +48 -35
  24. package/src/schedule/base/schedule.d.ts +60 -35
  25. package/src/schedule/base/schedule.js +74 -6
  26. package/src/schedule/event-renderer/event-base.js +17 -11
  27. package/src/schedule/models/views-model.d.ts +10 -1
  28. package/src/schedule/models/views.d.ts +9 -1
  29. package/src/schedule/models/views.js +3 -0
  30. package/src/schedule/popups/event-tooltip.js +7 -3
  31. package/src/schedule/popups/event-window.d.ts +7 -0
  32. package/src/schedule/popups/event-window.js +123 -29
  33. package/src/schedule/popups/quick-popups.js +3 -0
  34. package/styles/bootstrap-dark.css +15 -0
  35. package/styles/bootstrap.css +15 -0
  36. package/styles/bootstrap4.css +15 -0
  37. package/styles/bootstrap5-dark.css +15 -0
  38. package/styles/bootstrap5.css +15 -0
  39. package/styles/fabric-dark.css +15 -0
  40. package/styles/fabric.css +15 -0
  41. package/styles/fluent-dark.css +15 -0
  42. package/styles/fluent.css +15 -0
  43. package/styles/highcontrast-light.css +15 -0
  44. package/styles/highcontrast.css +15 -0
  45. package/styles/material-dark.css +15 -1
  46. package/styles/material.css +15 -1
  47. package/styles/material3-dark.css +16 -2
  48. package/styles/material3-dark.scss +1 -1
  49. package/styles/material3.css +16 -2
  50. package/styles/material3.scss +1 -1
  51. package/styles/recurrence-editor/bootstrap-dark.scss +1 -1
  52. package/styles/recurrence-editor/bootstrap.scss +1 -1
  53. package/styles/recurrence-editor/bootstrap4.scss +1 -1
  54. package/styles/recurrence-editor/bootstrap5-dark.scss +1 -1
  55. package/styles/recurrence-editor/bootstrap5.scss +1 -1
  56. package/styles/recurrence-editor/fabric-dark.scss +1 -1
  57. package/styles/recurrence-editor/fabric.scss +1 -1
  58. package/styles/recurrence-editor/fluent-dark.scss +1 -1
  59. package/styles/recurrence-editor/fluent.scss +1 -1
  60. package/styles/recurrence-editor/highcontrast-light.scss +1 -1
  61. package/styles/recurrence-editor/highcontrast.scss +1 -1
  62. package/styles/recurrence-editor/material-dark.css +0 -1
  63. package/styles/recurrence-editor/material-dark.scss +1 -1
  64. package/styles/recurrence-editor/material.css +0 -1
  65. package/styles/recurrence-editor/material.scss +1 -1
  66. package/styles/recurrence-editor/material3-dark.css +0 -1
  67. package/styles/recurrence-editor/material3-dark.scss +1 -1
  68. package/styles/recurrence-editor/material3.css +0 -1
  69. package/styles/recurrence-editor/material3.scss +1 -1
  70. package/styles/recurrence-editor/tailwind-dark.css +0 -1
  71. package/styles/recurrence-editor/tailwind-dark.scss +1 -1
  72. package/styles/recurrence-editor/tailwind.css +0 -1
  73. package/styles/recurrence-editor/tailwind.scss +1 -1
  74. package/styles/schedule/_layout.scss +15 -0
  75. package/styles/schedule/_material3-definition.scss +1 -1
  76. package/styles/schedule/bootstrap-dark.css +15 -0
  77. package/styles/schedule/bootstrap-dark.scss +1 -1
  78. package/styles/schedule/bootstrap.css +15 -0
  79. package/styles/schedule/bootstrap.scss +1 -1
  80. package/styles/schedule/bootstrap4.css +15 -0
  81. package/styles/schedule/bootstrap4.scss +1 -1
  82. package/styles/schedule/bootstrap5-dark.css +15 -0
  83. package/styles/schedule/bootstrap5-dark.scss +1 -1
  84. package/styles/schedule/bootstrap5.css +15 -0
  85. package/styles/schedule/bootstrap5.scss +1 -1
  86. package/styles/schedule/fabric-dark.css +15 -0
  87. package/styles/schedule/fabric-dark.scss +1 -1
  88. package/styles/schedule/fabric.css +15 -0
  89. package/styles/schedule/fabric.scss +1 -1
  90. package/styles/schedule/fluent-dark.css +15 -0
  91. package/styles/schedule/fluent-dark.scss +1 -1
  92. package/styles/schedule/fluent.css +15 -0
  93. package/styles/schedule/fluent.scss +1 -1
  94. package/styles/schedule/highcontrast-light.css +15 -0
  95. package/styles/schedule/highcontrast-light.scss +1 -1
  96. package/styles/schedule/highcontrast.css +15 -0
  97. package/styles/schedule/highcontrast.scss +1 -1
  98. package/styles/schedule/material-dark.css +15 -1
  99. package/styles/schedule/material-dark.scss +1 -1
  100. package/styles/schedule/material.css +15 -1
  101. package/styles/schedule/material.scss +1 -1
  102. package/styles/schedule/material3-dark.css +16 -2
  103. package/styles/schedule/material3-dark.scss +1 -1
  104. package/styles/schedule/material3.css +16 -2
  105. package/styles/schedule/material3.scss +1 -1
  106. package/styles/schedule/tailwind-dark.css +15 -1
  107. package/styles/schedule/tailwind-dark.scss +1 -1
  108. package/styles/schedule/tailwind.css +15 -1
  109. package/styles/schedule/tailwind.scss +1 -1
  110. package/styles/tailwind-dark.css +15 -2
  111. package/styles/tailwind.css +15 -2
@@ -38,7 +38,7 @@ import { Print } from '../exports/print';
38
38
  import { IRenderer, ActionEventArgs, NavigatingEventArgs, CellClickEventArgs, RenderCellEventArgs, ScrollCss, TimezoneFields } from '../base/interface';
39
39
  import { EventClickArgs, EventRenderedArgs, PopupOpenEventArgs, UIStateArgs, DragEventArgs, ResizeEventArgs } from '../base/interface';
40
40
  import { EventFieldsMapping, TdData, ResourceDetails, ResizeEdges, ExportOptions, SelectEventArgs } from '../base/interface';
41
- import { ViewsData, PopupCloseEventArgs, HoverEventArgs, MoreEventsClickArgs, CallbackFunction } from '../base/interface';
41
+ import { ViewsData, PopupCloseEventArgs, HoverEventArgs, MoreEventsClickArgs, ScrollEventArgs, CallbackFunction } from '../base/interface';
42
42
  import { CalendarUtil, CalendarType } from '../../common/calendar-util';
43
43
  import { ResourceBase } from '../base/resource';
44
44
  import { Timezone } from '../timezone/timezone';
@@ -93,6 +93,8 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
93
93
  private eventTooltipTemplateFn;
94
94
  private headerTooltipTemplateFn;
95
95
  private editorTemplateFn;
96
+ private editorHeaderTemplateFn;
97
+ private editorFooterTemplateFn;
96
98
  private quickInfoTemplatesHeaderFn;
97
99
  private quickInfoTemplatesContentFn;
98
100
  private quickInfoTemplatesFooterFn;
@@ -561,6 +563,28 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
561
563
  * @aspType string
562
564
  */
563
565
  editorTemplate: string | Function;
566
+ /**
567
+ * The template option to render the customized header of the editor window.
568
+ *
569
+ *
570
+ * @default null
571
+ * @angularType string | object
572
+ * @reactType string | function | JSX.Element
573
+ * @vueType string | function
574
+ * @aspType string
575
+ */
576
+ editorHeaderTemplate: string | Function;
577
+ /**
578
+ * The template option to render the customized footer of the editor window.
579
+ *
580
+ *
581
+ * @default null
582
+ * @angularType string | object
583
+ * @reactType string | function | JSX.Element
584
+ * @vueType string | function
585
+ * @aspType string
586
+ */
587
+ editorFooterTemplate: string | Function;
564
588
  /**
565
589
  * The template option to customize the quick window. The three sections of the quick popup whereas the header, content,
566
590
  * and footer can be easily customized with individual template option.
@@ -744,55 +768,47 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
744
768
  /**
745
769
  * Triggers on beginning of every scheduler action.
746
770
  *
747
- * {% codeBlock src='schedule/actionBegin/index.md' %}{% endcodeBlock %}
748
- *
749
771
  * @event 'actionBegin'
750
772
  */
751
773
  actionBegin: EmitType<ActionEventArgs>;
752
774
  /**
753
775
  * Triggers on successful completion of the scheduler actions.
754
776
  *
755
- * {% codeBlock src='schedule/actionComplete/index.md' %}{% endcodeBlock %}
756
- *
757
777
  * @event 'actionComplete'
758
778
  */
759
779
  actionComplete: EmitType<ActionEventArgs>;
760
780
  /**
761
781
  * Triggers when a scheduler action gets failed or interrupted and an error information will be returned.
762
782
  *
763
- * {% codeBlock src='schedule/actionFailure/index.md' %}{% endcodeBlock %}
764
- *
765
783
  * @event 'actionFailure'
766
784
  */
767
785
  actionFailure: EmitType<ActionEventArgs>;
768
786
  /**
769
787
  * Triggers before the date or view navigation takes place on scheduler.
770
788
  *
771
- * {% codeBlock src='schedule/navigating/index.md' %}{% endcodeBlock %}
772
- *
773
789
  * @event 'navigating'
774
790
  */
775
791
  navigating: EmitType<NavigatingEventArgs>;
776
792
  /**
777
793
  * Triggers before each element of the schedule rendering on the page.
778
794
  *
779
- * {% codeBlock src='schedule/renderCell/index.md' %}{% endcodeBlock %}
780
- *
781
795
  * @event 'renderCell'
782
796
  */
783
797
  renderCell: EmitType<RenderCellEventArgs>;
784
798
  /**
785
799
  * Triggers when the events are single clicked or on single tapping the events on the mobile devices.
786
800
  *
787
- * {% codeBlock src='schedule/eventClick/index.md' %}{% endcodeBlock %}
788
- *
789
801
  * @event 'eventClick'
790
802
  */
791
803
  eventClick: EmitType<EventClickArgs>;
792
804
  /**
793
- * Triggers before each of the event getting rendered on the scheduler user interface.
805
+ * Triggers when the events are double clicked or on double tapping the events on the desktop devices.
794
806
  *
795
- * {% codeBlock src='schedule/eventRendered/index.md' %}{% endcodeBlock %}
807
+ * @event 'eventDoubleClick'
808
+ */
809
+ eventDoubleClick: EmitType<EventClickArgs>;
810
+ /**
811
+ * Triggers before each of the event getting rendered on the scheduler user interface.
796
812
  *
797
813
  * @event 'eventRendered'
798
814
  */
@@ -800,79 +816,73 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
800
816
  /**
801
817
  * Triggers before the data binds to the scheduler.
802
818
  *
803
- * {% codeBlock src='schedule/dataBinding/index.md' %}{% endcodeBlock %}
804
- *
805
819
  * @event 'dataBinding'
806
820
  */
807
821
  dataBinding: EmitType<ReturnType>;
808
822
  /**
809
823
  * Triggers before any of the scheduler popups opens on the page.
810
824
  *
811
- * {% codeBlock src='schedule/popupOpen/index.md' %}{% endcodeBlock %}
812
- *
813
825
  * @event 'popupOpen'
814
826
  */
815
827
  popupOpen: EmitType<PopupOpenEventArgs>;
816
828
  /**
817
829
  * Triggers before any of the scheduler popups close on the page.
818
830
  *
819
- * {% codeBlock src='schedule/popupClose/index.md' %}{% endcodeBlock %}
820
- *
821
831
  * @event 'popupClose'
822
832
  */
823
833
  popupClose: EmitType<PopupCloseEventArgs>;
824
834
  /**
825
835
  * Triggers when an appointment is started to drag.
826
836
  *
827
- * {% codeBlock src='schedule/dragStart/index.md' %}{% endcodeBlock %}
828
- *
829
837
  * @event 'dragStart'
830
838
  */
831
839
  dragStart: EmitType<DragEventArgs>;
832
840
  /**
833
841
  * Triggers when an appointment is being in a dragged state.
834
842
  *
835
- * {% codeBlock src='schedule/drag/index.md' %}{% endcodeBlock %}
836
- *
837
843
  * @event 'drag'
838
844
  */
839
845
  drag: EmitType<DragEventArgs>;
840
846
  /**
841
847
  * Triggers when the dragging of appointment is stopped.
842
848
  *
843
- * {% codeBlock src='schedule/dragStop/index.md' %}{% endcodeBlock %}
844
- *
845
849
  * @event 'dragStop'
846
850
  */
847
851
  dragStop: EmitType<DragEventArgs>;
848
852
  /**
849
853
  * Triggers when an appointment is started to resize.
850
854
  *
851
- * {% codeBlock src='schedule/resizeStart/index.md' %}{% endcodeBlock %}
852
- *
853
855
  * @event 'resizeStart'
854
856
  */
855
857
  resizeStart: EmitType<ResizeEventArgs>;
856
858
  /**
857
859
  * Triggers when an appointment is being in a resizing action.
858
860
  *
859
- * {% codeBlock src='schedule/resizing/index.md' %}{% endcodeBlock %}
860
- *
861
861
  * @event 'resizing'
862
862
  */
863
863
  resizing: EmitType<ResizeEventArgs>;
864
864
  /**
865
865
  * Triggers when the resizing of appointment is stopped.
866
866
  *
867
- * {% codeBlock src='schedule/resizeStop/index.md' %}{% endcodeBlock %}
868
- *
869
867
  * @event 'resizeStop'
870
868
  */
871
869
  resizeStop: EmitType<ResizeEventArgs>;
872
870
  /**
873
- * Triggers once the event data is bound to the scheduler.
871
+ * Triggers when the scroll action is started.
872
+ * This event triggers only when `allowVirtualScrolling` or `enableLazyLoading` properties are enabled along with resource grouping.
874
873
  *
875
- * {% codeBlock src='schedule/dataBound/index.md' %}{% endcodeBlock %}
874
+ * @event 'virtualScrollStart'
875
+ */
876
+ virtualScrollStart: EmitType<ScrollEventArgs>;
877
+ /**
878
+ * Triggers when the scroll action is stopped.
879
+ * This event triggers only when `allowVirtualScrolling` or `enableLazyLoading` properties are enabled along with resource grouping.
880
+ *
881
+ * @event 'virtualScrollStop'
882
+ */
883
+ virtualScrollStop: EmitType<ScrollEventArgs>;
884
+ /**
885
+ * Triggers once the event data is bound to the scheduler.
876
886
  *
877
887
  * @event 'dataBound'
878
888
  */
@@ -918,6 +928,7 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
918
928
  */
919
929
  sanitize(value: string, element: HTMLElement): void;
920
930
  private initializeResources;
931
+ private destroyEditorWindow;
921
932
  /**
922
933
  * Method to render the layout elements
923
934
  *
@@ -1207,6 +1218,20 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1207
1218
  * @private
1208
1219
  */
1209
1220
  getEditorTemplate(): CallbackFunction;
1221
+ /**
1222
+ * Method to process editor header template
1223
+ *
1224
+ * @returns {CallbackFunction} Returns the callback function
1225
+ * @private
1226
+ */
1227
+ getEditorHeaderTemplate(): CallbackFunction;
1228
+ /**
1229
+ * Method to process editor footer template
1230
+ *
1231
+ * @returns {CallbackFunction} Returns the callback function
1232
+ * @private
1233
+ */
1234
+ getEditorFooterTemplate(): CallbackFunction;
1210
1235
  /**
1211
1236
  * Method to process quick info header template
1212
1237
  *
@@ -187,6 +187,13 @@ var Schedule = /** @class */ (function (_super) {
187
187
  this.renderElements(isSetModel);
188
188
  }
189
189
  };
190
+ Schedule.prototype.destroyEditorWindow = function () {
191
+ if (this.eventWindow) {
192
+ this.eventWindow.destroy();
193
+ this.eventWindow = null;
194
+ }
195
+ this.eventWindow = new EventWindow(this);
196
+ };
190
197
  /**
191
198
  * Method to render the layout elements
192
199
  *
@@ -356,7 +363,8 @@ var Schedule = /** @class */ (function (_super) {
356
363
  headerRows: this.headerRows,
357
364
  orientation: 'Horizontal',
358
365
  numberOfWeeks: 0,
359
- displayDate: null
366
+ displayDate: null,
367
+ enableLazyLoading: false
360
368
  };
361
369
  var viewOptions = this.viewCollections[this.viewIndex];
362
370
  var viewsData = extend(scheduleOptions, viewOptions, undefined, true);
@@ -367,6 +375,11 @@ var Schedule = /** @class */ (function (_super) {
367
375
  viewsData.displayDate = viewsData.displayDate instanceof Date ? new Date(viewsData.displayDate.getTime()) :
368
376
  new Date(viewsData.displayDate);
369
377
  }
378
+ if (viewsData.enableLazyLoading && !isNullOrUndefined(viewsData.group.resources) && viewsData.group.resources.length > 0 &&
379
+ (['Agenda', 'MonthAgenda', 'Year', 'TimelineYear'].indexOf(viewsData.option) === -1 ||
380
+ (viewsData.option === 'TimelineYear' && viewsData.orientation === 'Vertical'))) {
381
+ viewsData.allowVirtualScrolling = true;
382
+ }
370
383
  return viewsData;
371
384
  };
372
385
  Schedule.prototype.initializeDataModule = function () {
@@ -428,6 +441,8 @@ var Schedule = /** @class */ (function (_super) {
428
441
  this.headerTooltipTemplateFn = this.templateParser(this.activeViewOptions.group.headerTooltipTemplate);
429
442
  this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);
430
443
  this.editorTemplateFn = this.templateParser(this.editorTemplate);
444
+ this.editorHeaderTemplateFn = this.templateParser(this.editorHeaderTemplate);
445
+ this.editorFooterTemplateFn = this.templateParser(this.editorFooterTemplate);
431
446
  this.quickInfoTemplatesHeaderFn = this.templateParser(this.quickInfoTemplates.header);
432
447
  this.quickInfoTemplatesContentFn = this.templateParser(this.quickInfoTemplates.content);
433
448
  this.quickInfoTemplatesFooterFn = this.templateParser(this.quickInfoTemplates.footer);
@@ -1069,6 +1084,24 @@ var Schedule = /** @class */ (function (_super) {
1069
1084
  Schedule.prototype.getEditorTemplate = function () {
1070
1085
  return this.editorTemplateFn;
1071
1086
  };
1087
+ /**
1088
+ * Method to process editor header template
1089
+ *
1090
+ * @returns {CallbackFunction} Returns the callback function
1091
+ * @private
1092
+ */
1093
+ Schedule.prototype.getEditorHeaderTemplate = function () {
1094
+ return this.editorHeaderTemplateFn;
1095
+ };
1096
+ /**
1097
+ * Method to process editor footer template
1098
+ *
1099
+ * @returns {CallbackFunction} Returns the callback function
1100
+ * @private
1101
+ */
1102
+ Schedule.prototype.getEditorFooterTemplate = function () {
1103
+ return this.editorFooterTemplateFn;
1104
+ };
1072
1105
  /**
1073
1106
  * Method to process quick info header template
1074
1107
  *
@@ -1586,6 +1619,22 @@ var Schedule = /** @class */ (function (_super) {
1586
1619
  this.eventWindow.setDialogContent();
1587
1620
  }
1588
1621
  break;
1622
+ case 'editorHeaderTemplate':
1623
+ if (!isNullOrUndefined(this.editorHeaderTemplate)) {
1624
+ this.editorHeaderTemplateFn = this.templateParser(this.editorHeaderTemplate);
1625
+ }
1626
+ if (this.eventWindow) {
1627
+ this.eventWindow.setDialogHeader();
1628
+ }
1629
+ break;
1630
+ case 'editorFooterTemplate':
1631
+ if (!isNullOrUndefined(this.editorFooterTemplate)) {
1632
+ this.editorFooterTemplateFn = this.templateParser(this.editorFooterTemplate);
1633
+ }
1634
+ if (this.eventWindow) {
1635
+ this.eventWindow.setDialogFooter();
1636
+ }
1637
+ break;
1589
1638
  case 'quickInfoTemplates':
1590
1639
  if (this.quickInfoTemplates.header) {
1591
1640
  this.quickInfoTemplatesHeaderFn = this.templateParser(this.quickInfoTemplates.header);
@@ -2356,13 +2405,17 @@ var Schedule = /** @class */ (function (_super) {
2356
2405
  this.quickInfoTemplatesFooterFn = this.templateParser(this.quickInfoTemplates.footer);
2357
2406
  break;
2358
2407
  case 'editorTemplate':
2359
- if (this.eventWindow) {
2360
- this.eventWindow.destroy();
2361
- this.eventWindow = null;
2362
- }
2363
- this.eventWindow = new EventWindow(this);
2408
+ this.destroyEditorWindow();
2364
2409
  this.editorTemplateFn = this.templateParser(this.editorTemplate);
2365
2410
  break;
2411
+ case 'editorHeaderTemplate':
2412
+ this.destroyEditorWindow();
2413
+ this.editorHeaderTemplateFn = this.templateParser(this.editorHeaderTemplate);
2414
+ break;
2415
+ case 'editorFooterTemplate':
2416
+ this.destroyEditorWindow();
2417
+ this.editorFooterTemplateFn = this.templateParser(this.editorFooterTemplate);
2418
+ break;
2366
2419
  case 'tooltipTemplate':
2367
2420
  case 'headerTooltipTemplate':
2368
2421
  if (this.eventTooltip) {
@@ -2844,6 +2897,12 @@ var Schedule = /** @class */ (function (_super) {
2844
2897
  __decorate([
2845
2898
  Property()
2846
2899
  ], Schedule.prototype, "editorTemplate", void 0);
2900
+ __decorate([
2901
+ Property()
2902
+ ], Schedule.prototype, "editorHeaderTemplate", void 0);
2903
+ __decorate([
2904
+ Property()
2905
+ ], Schedule.prototype, "editorFooterTemplate", void 0);
2847
2906
  __decorate([
2848
2907
  Complex({}, QuickInfoTemplates)
2849
2908
  ], Schedule.prototype, "quickInfoTemplates", void 0);
@@ -2925,6 +2984,9 @@ var Schedule = /** @class */ (function (_super) {
2925
2984
  __decorate([
2926
2985
  Event()
2927
2986
  ], Schedule.prototype, "eventClick", void 0);
2987
+ __decorate([
2988
+ Event()
2989
+ ], Schedule.prototype, "eventDoubleClick", void 0);
2928
2990
  __decorate([
2929
2991
  Event()
2930
2992
  ], Schedule.prototype, "eventRendered", void 0);
@@ -2955,6 +3017,12 @@ var Schedule = /** @class */ (function (_super) {
2955
3017
  __decorate([
2956
3018
  Event()
2957
3019
  ], Schedule.prototype, "resizeStop", void 0);
3020
+ __decorate([
3021
+ Event()
3022
+ ], Schedule.prototype, "virtualScrollStart", void 0);
3023
+ __decorate([
3024
+ Event()
3025
+ ], Schedule.prototype, "virtualScrollStop", void 0);
2958
3026
  __decorate([
2959
3027
  Event()
2960
3028
  ], Schedule.prototype, "dataBound", void 0);
@@ -797,12 +797,13 @@ var EventBase = /** @class */ (function () {
797
797
  });
798
798
  }
799
799
  };
800
- EventBase.prototype.eventDoubleClick = function (e) {
800
+ EventBase.prototype.eventDoubleClick = function (eventData) {
801
+ var _this = this;
801
802
  if (this.parent.quickPopup) {
802
803
  this.parent.quickPopup.quickPopupHide(true);
803
804
  }
804
- if (e.type === 'touchstart') {
805
- this.activeEventData(e, true);
805
+ if (eventData.type === 'touchstart') {
806
+ this.activeEventData(eventData, true);
806
807
  }
807
808
  this.removeSelectedAppointmentClass();
808
809
  this.parent.selectedElements = [];
@@ -810,14 +811,19 @@ var EventBase = /** @class */ (function () {
810
811
  this.parent.activeEventData.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS)) {
811
812
  return;
812
813
  }
813
- if (!isNullOrUndefined(this.parent.activeEventData.event) &&
814
- isNullOrUndefined(this.parent.activeEventData.event[this.parent.eventFields.recurrenceID])) {
815
- this.parent.eventWindow.openEditor(this.parent.activeEventData.event, 'Save');
816
- }
817
- else {
818
- this.parent.currentAction = 'EditOccurrence';
819
- this.parent.quickPopup.openRecurrenceAlert();
820
- }
814
+ var args = extend(this.parent.activeEventData, { cancel: false, originalEvent: eventData });
815
+ this.parent.trigger(event.eventDoubleClick, args, function (eventDoubleClickArgs) {
816
+ if (!eventDoubleClickArgs.cancel) {
817
+ if (!isNullOrUndefined(_this.parent.activeEventData.event) &&
818
+ isNullOrUndefined(_this.parent.activeEventData.event[_this.parent.eventFields.recurrenceID])) {
819
+ _this.parent.eventWindow.openEditor(_this.parent.activeEventData.event, 'Save');
820
+ }
821
+ else {
822
+ _this.parent.currentAction = 'EditOccurrence';
823
+ _this.parent.quickPopup.openRecurrenceAlert();
824
+ }
825
+ }
826
+ });
821
827
  };
822
828
  EventBase.prototype.getEventByGuid = function (guid) {
823
829
  return this.parent.eventsProcessed.filter(function (data) { return data.Guid === guid; })[0];
@@ -68,7 +68,7 @@ export interface ViewsModel {
68
68
  endHour?: string;
69
69
 
70
70
  /**
71
- * It is used to allow or disallow the virtual scrolling functionality on Agenda View. This is applicable only on Agenda view.
71
+ * It is used to allow or disallow the virtual scrolling functionality.
72
72
  *
73
73
  * @default false
74
74
  */
@@ -317,4 +317,13 @@ export interface ViewsModel {
317
317
  */
318
318
  displayDate?: Date;
319
319
 
320
+ /**
321
+ * Enables the lazy loading of events for scrolling actions only when the resources grouping property is enabled.
322
+ * Lazy loading allows the scheduler to fetch the appointments dynamically during scroll actions for the currently rendered resource collection.
323
+ * New event data is fetched on-demand as the user scrolls through the schedule content.
324
+ *
325
+ * @default false
326
+ */
327
+ enableLazyLoading?: boolean;
328
+
320
329
  }
@@ -62,7 +62,7 @@ export declare class Views extends ChildProperty<Views> {
62
62
  */
63
63
  endHour: string;
64
64
  /**
65
- * It is used to allow or disallow the virtual scrolling functionality on Agenda View. This is applicable only on Agenda view.
65
+ * It is used to allow or disallow the virtual scrolling functionality.
66
66
  *
67
67
  * @default false
68
68
  */
@@ -286,4 +286,12 @@ export declare class Views extends ChildProperty<Views> {
286
286
  * @default null
287
287
  */
288
288
  displayDate: Date;
289
+ /**
290
+ * Enables the lazy loading of events for scrolling actions only when the resources grouping property is enabled.
291
+ * Lazy loading allows the scheduler to fetch the appointments dynamically during scroll actions for the currently rendered resource collection.
292
+ * New event data is fetched on-demand as the user scrolls through the schedule content.
293
+ *
294
+ * @default false
295
+ */
296
+ enableLazyLoading: boolean;
289
297
  }
@@ -122,6 +122,9 @@ var Views = /** @class */ (function (_super) {
122
122
  __decorate([
123
123
  Property()
124
124
  ], Views.prototype, "displayDate", void 0);
125
+ __decorate([
126
+ Property(false)
127
+ ], Views.prototype, "enableLazyLoading", void 0);
125
128
  return Views;
126
129
  }(ChildProperty));
127
130
  export { Views };
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { isNullOrUndefined, append, createElement, addClass, initializeCSPTemplate } from '@syncfusion/ej2-base';
2
+ import { isNullOrUndefined, append, createElement, addClass, initializeCSPTemplate, removeClass } from '@syncfusion/ej2-base';
3
3
  import { Tooltip } from '@syncfusion/ej2-popups';
4
4
  import * as cls from '../base/css-constant';
5
5
  import * as util from '../base/util';
@@ -19,7 +19,7 @@ var EventTooltip = /** @class */ (function () {
19
19
  cssClass: this.parent.cssClass + ' ' + cls.EVENT_TOOLTIP_ROOT_CLASS,
20
20
  target: this.getTargets(),
21
21
  beforeRender: this.onBeforeRender.bind(this),
22
- afterClose: this.onTooltipClose.bind(this),
22
+ beforeClose: this.onTooltipClose.bind(this),
23
23
  enableRtl: this.parent.enableRtl,
24
24
  enableHtmlSanitizer: this.parent.enableHtmlSanitizer
25
25
  });
@@ -127,7 +127,11 @@ var EventTooltip = /** @class */ (function () {
127
127
  }
128
128
  this.parent.renderTemplates();
129
129
  };
130
- EventTooltip.prototype.onTooltipClose = function () {
130
+ EventTooltip.prototype.onTooltipClose = function (args) {
131
+ if (args.element) {
132
+ removeClass([args.element], cls.POPUP_OPEN);
133
+ addClass([args.element], cls.POPUP_CLOSE);
134
+ }
131
135
  this.parent.resetTemplates(['tooltipTemplate', 'headerTooltipTemplate']);
132
136
  };
133
137
  EventTooltip.prototype.setContent = function (content) {
@@ -29,11 +29,18 @@ export declare class EventWindow {
29
29
  private dialogEvent;
30
30
  constructor(parent: Schedule);
31
31
  private renderEventWindow;
32
+ private renderDialogButtons;
33
+ private addEventHandlers;
32
34
  refresh(): void;
33
35
  refreshRecurrenceEditor(): void;
34
36
  setRecurrenceEditor(recurrenceEditor: RecurrenceEditor): void;
35
37
  openEditor(data: Record<string, any>, type: CurrentAction, isEventData?: boolean, repeatType?: number): void;
36
38
  setDialogContent(): void;
39
+ setDialogHeader(): void;
40
+ setDialogFooter(): void;
41
+ private createAdaptiveHeaderElement;
42
+ private getDialogHeader;
43
+ private getDialogFooter;
37
44
  private preventEventSave;
38
45
  private onBeforeOpen;
39
46
  private onBeforeClose;