@syncfusion/ej2-schedule 27.2.5 → 28.1.33

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 (143) hide show
  1. package/README.md +2 -2
  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 +425 -46
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +454 -48
  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/action-base.js +4 -3
  14. package/src/schedule/actions/drag.js +2 -2
  15. package/src/schedule/actions/keyboard.d.ts +16 -0
  16. package/src/schedule/actions/keyboard.js +254 -8
  17. package/src/schedule/actions/touch.js +7 -2
  18. package/src/schedule/base/constant.d.ts +4 -0
  19. package/src/schedule/base/constant.js +4 -0
  20. package/src/schedule/base/css-constant.d.ts +2 -0
  21. package/src/schedule/base/css-constant.js +2 -0
  22. package/src/schedule/base/interface.d.ts +14 -4
  23. package/src/schedule/base/schedule-model.d.ts +17 -1
  24. package/src/schedule/base/schedule.d.ts +67 -1
  25. package/src/schedule/base/schedule.js +131 -1
  26. package/src/schedule/base/type.d.ts +8 -0
  27. package/src/schedule/popups/event-tooltip.js +4 -0
  28. package/src/schedule/renderer/agenda.d.ts +2 -1
  29. package/src/schedule/renderer/agenda.js +1 -1
  30. package/src/schedule/renderer/header-renderer.js +4 -2
  31. package/src/schedule/renderer/month-agenda.d.ts +2 -1
  32. package/src/schedule/renderer/month-agenda.js +2 -2
  33. package/src/schedule/renderer/month.d.ts +4 -3
  34. package/src/schedule/renderer/month.js +16 -9
  35. package/src/schedule/renderer/view-base.d.ts +5 -4
  36. package/src/schedule/renderer/view-base.js +13 -10
  37. package/src/schedule/renderer/year.d.ts +3 -2
  38. package/src/schedule/renderer/year.js +10 -7
  39. package/styles/bds-lite.css +4400 -0
  40. package/styles/bds-lite.scss +18 -0
  41. package/styles/bds.css +5161 -0
  42. package/styles/bds.scss +20 -0
  43. package/styles/bootstrap-dark-lite.css +19 -6
  44. package/styles/bootstrap-dark.css +23 -10
  45. package/styles/bootstrap-lite.css +18 -5
  46. package/styles/bootstrap.css +22 -9
  47. package/styles/bootstrap4-lite.css +18 -5
  48. package/styles/bootstrap4.css +22 -9
  49. package/styles/bootstrap5-dark-lite.css +18 -5
  50. package/styles/bootstrap5-dark.css +23 -10
  51. package/styles/bootstrap5-lite.css +18 -5
  52. package/styles/bootstrap5.3-lite.css +18 -5
  53. package/styles/bootstrap5.3.css +23 -10
  54. package/styles/bootstrap5.css +23 -10
  55. package/styles/fabric-dark-lite.css +18 -5
  56. package/styles/fabric-dark.css +22 -9
  57. package/styles/fabric-lite.css +18 -5
  58. package/styles/fabric.css +22 -9
  59. package/styles/fluent-dark-lite.css +18 -5
  60. package/styles/fluent-dark.css +22 -9
  61. package/styles/fluent-lite.css +18 -5
  62. package/styles/fluent.css +22 -9
  63. package/styles/fluent2-lite.css +43 -6
  64. package/styles/fluent2.css +50 -13
  65. package/styles/highcontrast-light-lite.css +18 -5
  66. package/styles/highcontrast-light.css +22 -9
  67. package/styles/highcontrast-lite.css +19 -6
  68. package/styles/highcontrast.css +23 -10
  69. package/styles/material-dark-lite.css +18 -5
  70. package/styles/material-dark.css +22 -9
  71. package/styles/material-lite.css +18 -5
  72. package/styles/material.css +22 -9
  73. package/styles/material3-dark-lite.css +18 -5
  74. package/styles/material3-dark.css +23 -10
  75. package/styles/material3-lite.css +18 -5
  76. package/styles/material3.css +23 -10
  77. package/styles/recurrence-editor/_bigger.scss +2 -3
  78. package/styles/recurrence-editor/_fluent2-definition.scss +1 -1
  79. package/styles/recurrence-editor/_tailwind3-definition.scss +14 -0
  80. package/styles/recurrence-editor/bds.css +533 -0
  81. package/styles/recurrence-editor/bds.scss +9 -0
  82. package/styles/recurrence-editor/bootstrap-dark.css +2 -3
  83. package/styles/recurrence-editor/bootstrap.css +2 -3
  84. package/styles/recurrence-editor/bootstrap4.css +2 -3
  85. package/styles/recurrence-editor/bootstrap5-dark.css +2 -3
  86. package/styles/recurrence-editor/bootstrap5.3.css +2 -3
  87. package/styles/recurrence-editor/bootstrap5.css +2 -3
  88. package/styles/recurrence-editor/fabric-dark.css +2 -3
  89. package/styles/recurrence-editor/fabric.css +2 -3
  90. package/styles/recurrence-editor/fluent-dark.css +2 -3
  91. package/styles/recurrence-editor/fluent.css +2 -3
  92. package/styles/recurrence-editor/fluent2.css +3 -4
  93. package/styles/recurrence-editor/highcontrast-light.css +2 -3
  94. package/styles/recurrence-editor/highcontrast.css +3 -4
  95. package/styles/recurrence-editor/material-dark.css +2 -3
  96. package/styles/recurrence-editor/material.css +2 -3
  97. package/styles/recurrence-editor/material3-dark.css +2 -3
  98. package/styles/recurrence-editor/material3.css +2 -3
  99. package/styles/recurrence-editor/tailwind-dark.css +2 -3
  100. package/styles/recurrence-editor/tailwind.css +2 -3
  101. package/styles/recurrence-editor/tailwind3.css +500 -0
  102. package/styles/recurrence-editor/tailwind3.scss +9 -0
  103. package/styles/schedule/_bigger.scss +2 -1
  104. package/styles/schedule/_bootstrap5-definition.scss +1 -1
  105. package/styles/schedule/_bootstrap5.3-definition.scss +1 -1
  106. package/styles/schedule/_fluent2-definition.scss +3 -3
  107. package/styles/schedule/_layout.scss +43 -2
  108. package/styles/schedule/_material3-definition.scss +1 -1
  109. package/styles/schedule/_tailwind-definition.scss +1 -1
  110. package/styles/schedule/_tailwind3-definition.scss +276 -0
  111. package/styles/schedule/_theme.scss +0 -4
  112. package/styles/schedule/bds.css +4760 -0
  113. package/styles/schedule/bds.scss +17 -0
  114. package/styles/schedule/bootstrap-dark.css +21 -7
  115. package/styles/schedule/bootstrap.css +20 -6
  116. package/styles/schedule/bootstrap4.css +20 -6
  117. package/styles/schedule/bootstrap5-dark.css +21 -7
  118. package/styles/schedule/bootstrap5.3.css +21 -7
  119. package/styles/schedule/bootstrap5.css +21 -7
  120. package/styles/schedule/fabric-dark.css +20 -6
  121. package/styles/schedule/fabric.css +20 -6
  122. package/styles/schedule/fluent-dark.css +20 -6
  123. package/styles/schedule/fluent.css +20 -6
  124. package/styles/schedule/fluent2.css +47 -9
  125. package/styles/schedule/highcontrast-light.css +20 -6
  126. package/styles/schedule/highcontrast.css +21 -7
  127. package/styles/schedule/icons/_tailwind3.scss +220 -0
  128. package/styles/schedule/material-dark.css +20 -6
  129. package/styles/schedule/material.css +20 -6
  130. package/styles/schedule/material3-dark.css +21 -7
  131. package/styles/schedule/material3.css +21 -7
  132. package/styles/schedule/tailwind-dark.css +21 -7
  133. package/styles/schedule/tailwind.css +21 -7
  134. package/styles/schedule/tailwind3.css +4599 -0
  135. package/styles/schedule/tailwind3.scss +17 -0
  136. package/styles/tailwind-dark-lite.css +18 -5
  137. package/styles/tailwind-dark.css +23 -10
  138. package/styles/tailwind-lite.css +18 -5
  139. package/styles/tailwind.css +23 -10
  140. package/styles/tailwind3-lite.css +4239 -0
  141. package/styles/tailwind3-lite.scss +18 -0
  142. package/styles/tailwind3.css +5000 -0
  143. package/styles/tailwind3.scss +20 -0
@@ -1,4 +1,4 @@
1
- import { Component, ModuleDeclaration, Property, Event, Animation, Collection, append } from '@syncfusion/ej2-base';import { EventHandler, EmitType, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';import { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, INotifyPropertyChanged, Complex } from '@syncfusion/ej2-base';import { getElement, removeClass, addClass, classList, remove, SanitizeHtmlHelper } from '@syncfusion/ej2-base';import { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';import { HeaderRenderer } from '../renderer/header-renderer';import { Scroll } from '../actions/scroll';import { ScheduleTouch } from '../actions/touch';import { KeyboardInteraction } from '../actions/keyboard';import { Data } from '../actions/data';import { View, CurrentAction, ReturnType, WeekRule } from '../base/type';import { EventBase } from '../event-renderer/event-base';import { InlineEdit } from '../event-renderer/inline-edit';import { QuickPopups } from '../popups/quick-popups';import { EventTooltip } from '../popups/event-tooltip';import { EventWindow } from '../popups/event-window';import { Render } from '../renderer/renderer';import { Day } from '../renderer/day';import { Week } from '../renderer/week';import { WorkWeek } from '../renderer/work-week';import { Month } from '../renderer/month';import { Year } from '../renderer/year';import { Agenda } from '../renderer/agenda';import { MonthAgenda } from '../renderer/month-agenda';import { TimelineViews } from '../renderer/timeline-view';import { TimelineMonth } from '../renderer/timeline-month';import { TimelineYear } from '../renderer/timeline-year';import { WorkHours } from '../models/work-hours';import { TimeScale } from '../models/time-scale';import { QuickInfoTemplates } from '../models/quick-info-templates';import { HeaderRows } from '../models/header-rows';import { Crud } from '../actions/crud';import { Resize } from '../actions/resize';import { DragAndDrop } from '../actions/drag';import { VirtualScroll } from '../actions/virtual-scroll';import { WorkCellInteraction } from '../actions/work-cells';import { WorkHoursModel, ViewsModel, EventSettingsModel, GroupModel, ResourcesModel, TimeScaleModel, ToolbarItemModel } from '../models/models';import { QuickInfoTemplatesModel, HeaderRowsModel } from '../models/models';import { EventSettings } from '../models/event-settings';import { Group } from '../models/group';import { Resources } from '../models/resources';import { ICalendarExport } from '../exports/calendar-export';import { ICalendarImport } from '../exports/calendar-import';import { ExcelExport } from '../exports/excel-export';import { Print } from '../exports/print';import { IRenderer, ActionEventArgs, NavigatingEventArgs, CellClickEventArgs, RenderCellEventArgs, ScrollCss, TimezoneFields } from '../base/interface';import { EventClickArgs, EventRenderedArgs, PopupOpenEventArgs, UIStateArgs, DragEventArgs, ResizeEventArgs } from '../base/interface';import { EventFieldsMapping, TdData, ResourceDetails, ResizeEdges, StateArgs, ExportOptions, SelectEventArgs } from '../base/interface';import { ViewsData, PopupCloseEventArgs, HoverEventArgs, MoreEventsClickArgs, ScrollEventArgs, CallbackFunction } from '../base/interface';import { CalendarUtil, Gregorian, Islamic, CalendarType } from '../../common/calendar-util';import { ResourceBase } from '../base/resource';import { Timezone, timezoneData } from '../timezone/timezone';import { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';import * as events from '../base/constant';import * as cls from '../base/css-constant';import * as util from '../base/util';import { ToolbarItem } from '../models/toolbar';
1
+ import { Component, ModuleDeclaration, Property, Event, Animation, Collection, append } from '@syncfusion/ej2-base';import { EventHandler, EmitType, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';import { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, INotifyPropertyChanged, Complex } from '@syncfusion/ej2-base';import { getElement, removeClass, addClass, classList, remove, SanitizeHtmlHelper } from '@syncfusion/ej2-base';import { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';import { HeaderRenderer } from '../renderer/header-renderer';import { Scroll } from '../actions/scroll';import { ScheduleTouch } from '../actions/touch';import { KeyboardInteraction } from '../actions/keyboard';import { Data } from '../actions/data';import { View, CurrentAction, ReturnType, WeekRule, NavigationDirection } from '../base/type';import { EventBase } from '../event-renderer/event-base';import { InlineEdit } from '../event-renderer/inline-edit';import { QuickPopups } from '../popups/quick-popups';import { EventTooltip } from '../popups/event-tooltip';import { EventWindow } from '../popups/event-window';import { Render } from '../renderer/renderer';import { Day } from '../renderer/day';import { Week } from '../renderer/week';import { WorkWeek } from '../renderer/work-week';import { Month } from '../renderer/month';import { Year } from '../renderer/year';import { Agenda } from '../renderer/agenda';import { MonthAgenda } from '../renderer/month-agenda';import { TimelineViews } from '../renderer/timeline-view';import { TimelineMonth } from '../renderer/timeline-month';import { TimelineYear } from '../renderer/timeline-year';import { WorkHours } from '../models/work-hours';import { TimeScale } from '../models/time-scale';import { QuickInfoTemplates } from '../models/quick-info-templates';import { HeaderRows } from '../models/header-rows';import { Crud } from '../actions/crud';import { Resize } from '../actions/resize';import { DragAndDrop } from '../actions/drag';import { VirtualScroll } from '../actions/virtual-scroll';import { WorkCellInteraction } from '../actions/work-cells';import { WorkHoursModel, ViewsModel, EventSettingsModel, GroupModel, ResourcesModel, TimeScaleModel, ToolbarItemModel } from '../models/models';import { QuickInfoTemplatesModel, HeaderRowsModel } from '../models/models';import { EventSettings } from '../models/event-settings';import { Group } from '../models/group';import { Resources } from '../models/resources';import { ICalendarExport } from '../exports/calendar-export';import { ICalendarImport } from '../exports/calendar-import';import { ExcelExport } from '../exports/excel-export';import { Print } from '../exports/print';import { IRenderer, ActionEventArgs, NavigatingEventArgs, CellClickEventArgs, RenderCellEventArgs, ScrollCss, TimezoneFields } from '../base/interface';import { EventClickArgs, EventRenderedArgs, PopupOpenEventArgs, UIStateArgs, DragEventArgs, ResizeEventArgs } from '../base/interface';import { EventFieldsMapping, TdData, ResourceDetails, ResizeEdges, StateArgs, ExportOptions, SelectEventArgs } from '../base/interface';import { ViewsData, PopupCloseEventArgs, HoverEventArgs, MoreEventsClickArgs, ScrollEventArgs, CallbackFunction } from '../base/interface';import { CalendarUtil, Gregorian, Islamic, CalendarType } from '../../common/calendar-util';import { ResourceBase } from '../base/resource';import { Timezone, timezoneData } from '../timezone/timezone';import { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';import * as events from '../base/constant';import * as cls from '../base/css-constant';import * as util from '../base/util';import { ToolbarItem } from '../models/toolbar';
2
2
  import {ComponentModel} from '@syncfusion/ej2-base';
3
3
 
4
4
  /**
@@ -657,6 +657,15 @@ export interface ScheduleModel extends ComponentModel{
657
657
  */
658
658
  cssClass?: string;
659
659
 
660
+ /**
661
+ * Enables clipboard functionality for appointments, allowing them to be copied using keyboard shortcuts and pasted onto the Scheduler.
662
+ * When set to `true`, users can use keyboard shortcuts to cut, copy appointments and paste them into different time slots or calendars.
663
+ *
664
+ * @default false
665
+ * @remarks The `allowKeyboardInteraction` property should be enabled to use the keyboard shortcuts.
666
+ */
667
+ allowClipboard?: boolean;
668
+
660
669
  /**
661
670
  * It enables the external drag and drop support for appointments on scheduler, to be able to move them out of the scheduler layout.
662
671
  * When the drag area is explicitly set with specific DOM element name, the appointments can be dragged anywhere within the specified drag area location.
@@ -858,4 +867,11 @@ export interface ScheduleModel extends ComponentModel{
858
867
  */
859
868
  dataBound?: EmitType<ReturnType>;
860
869
 
870
+ /**
871
+ * Triggers once when pasting an event on the scheduler.
872
+ *
873
+ * @event 'beforePaste'
874
+ */
875
+ beforePaste?: EmitType<ReturnType>;
876
+
861
877
  }
@@ -7,7 +7,7 @@ import { Scroll } from '../actions/scroll';
7
7
  import { ScheduleTouch } from '../actions/touch';
8
8
  import { KeyboardInteraction } from '../actions/keyboard';
9
9
  import { Data } from '../actions/data';
10
- import { View, CurrentAction, ReturnType, WeekRule } from '../base/type';
10
+ import { View, CurrentAction, ReturnType, WeekRule, NavigationDirection } from '../base/type';
11
11
  import { EventBase } from '../event-renderer/event-base';
12
12
  import { InlineEdit } from '../event-renderer/inline-edit';
13
13
  import { QuickPopups } from '../popups/quick-popups';
@@ -730,6 +730,14 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
730
730
  * @default null
731
731
  */
732
732
  cssClass: string;
733
+ /**
734
+ * Enables clipboard functionality for appointments, allowing them to be copied using keyboard shortcuts and pasted onto the Scheduler.
735
+ * When set to `true`, users can use keyboard shortcuts to cut, copy appointments and paste them into different time slots or calendars.
736
+ *
737
+ * @default false
738
+ * @remarks The `allowKeyboardInteraction` property should be enabled to use the keyboard shortcuts.
739
+ */
740
+ allowClipboard: boolean;
733
741
  /**
734
742
  * It enables the external drag and drop support for appointments on scheduler, to be able to move them out of the scheduler layout.
735
743
  * When the drag area is explicitly set with specific DOM element name, the appointments can be dragged anywhere within the specified drag area location.
@@ -903,6 +911,12 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
903
911
  * @event 'dataBound'
904
912
  */
905
913
  dataBound: EmitType<ReturnType>;
914
+ /**
915
+ * Triggers once when pasting an event on the scheduler.
916
+ *
917
+ * @event 'beforePaste'
918
+ */
919
+ beforePaste: EmitType<ReturnType>;
906
920
  /**
907
921
  * Constructor for creating the Schedule widget
908
922
  *
@@ -1332,6 +1346,7 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1332
1346
  */
1333
1347
  getStartEndTime(startEndTime: string): Date;
1334
1348
  private onDocumentClick;
1349
+ private onDocumentPaste;
1335
1350
  private onScheduleResize;
1336
1351
  /**
1337
1352
  * Method to process the templates
@@ -1748,6 +1763,28 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1748
1763
  * @returns {boolean} Returns true, if the slot that lies in the provided time range does not contain any other events.
1749
1764
  */
1750
1765
  isSlotAvailable(startTime: Date | Record<string, any>, endTime?: Date, groupIndex?: number): boolean;
1766
+ /**
1767
+ * Method to copy events from an HTMLElement or an array of HTMLElements.
1768
+ *
1769
+ * @param { HTMLElement[] } elements Accepts an array of HTMLElement
1770
+ * @returns {void} This method does not return a value.
1771
+ */
1772
+ copy(elements: HTMLElement[]): void;
1773
+ /**
1774
+ * Method to cut events from an HTMLElement or an array of HTMLElements.
1775
+ *
1776
+ * @param { HTMLElement[] } elements Accepts an array of HTMLElement
1777
+ * @returns {void} This method does not return a value.
1778
+ */
1779
+ cut(elements: HTMLElement[]): void;
1780
+ /**
1781
+ * Method to create a paste event with clipboard data
1782
+ *
1783
+ * @param { HTMLElement } targetElement Accepts HTMLElement
1784
+ * @returns {void}
1785
+ */
1786
+ paste(targetElement: HTMLElement): void;
1787
+ private processCutCopyActions;
1751
1788
  /**
1752
1789
  * To manually open the event editor on specific time or on certain events.
1753
1790
  *
@@ -1793,6 +1830,35 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1793
1830
  * @returns {void}
1794
1831
  */
1795
1832
  closeTooltip(): void;
1833
+ /**
1834
+ * Retrieves a formatted string representing the date range of the given date collection.
1835
+ *
1836
+ * @param {Date[]} dates - An array of Date objects representing the date range.
1837
+ * @returns {string} A formatted string describing the date range.
1838
+ * If the dates is empty, returns an empty string.
1839
+ * Otherwise, delegates to the active view to generate the appropriate date range text.
1840
+ *
1841
+ * @example
1842
+ * // Assuming dates contains dates from May 1, 2023 to May 7, 2023
1843
+ * const rangeText = schedule.getDateRangeText(schedule.getViewDates());
1844
+ * // rangeText might be "May 1 - 7, 2023" (actual format depends on the active view)
1845
+ *
1846
+ * @remarks
1847
+ * The actual format of the returned string depends on the implementation
1848
+ * of the getDateRangeText method in the active view.
1849
+ */
1850
+ getDateRangeText(dates: Date[]): string;
1851
+ /**
1852
+ * Retrieves an array of dates based on the specified date collection direction.
1853
+ *
1854
+ * @param {NavigationDirection} type - The direction for date collection. Options are:
1855
+ * - 'Previous': Returns the previous date range collection from the current rendered date.
1856
+ * - 'Next': Returns the next date range collection from the current rendered date.
1857
+ * - 'Current': Returns the current rendered date collection.
1858
+ *
1859
+ * @returns {Date[]} An array of Date objects representing the view dates.
1860
+ */
1861
+ getViewDates(type?: NavigationDirection): Date[];
1796
1862
  /**
1797
1863
  * Select the resource based on group index in mobile mode.
1798
1864
  *
@@ -880,6 +880,9 @@ var Schedule = /** @class */ (function (_super) {
880
880
  EventHandler.add(window, 'resize', this.onScheduleResize, this);
881
881
  EventHandler.add(window, 'orientationchange', this.onScheduleResize, this);
882
882
  EventHandler.add(document, Browser.touchStartEvent, this.onDocumentClick, this);
883
+ if (this.allowClipboard) {
884
+ EventHandler.add(document, 'paste', this.onDocumentPaste, this);
885
+ }
883
886
  };
884
887
  /**
885
888
  * Method to remove selected class
@@ -1255,6 +1258,9 @@ var Schedule = /** @class */ (function (_super) {
1255
1258
  Schedule.prototype.onDocumentClick = function (args) {
1256
1259
  this.notify(events.documentClick, { event: args });
1257
1260
  };
1261
+ Schedule.prototype.onDocumentPaste = function (args) {
1262
+ this.notify(events.documentPaste, { event: args });
1263
+ };
1258
1264
  Schedule.prototype.onScheduleResize = function () {
1259
1265
  if (isNullOrUndefined(this.activeView) || ((this.isAdaptive || util.isMobile()) && document.activeElement
1260
1266
  && (document.activeElement.classList.contains(cls.SUBJECT_CLASS) ||
@@ -1452,6 +1458,7 @@ var Schedule = /** @class */ (function (_super) {
1452
1458
  EventHandler.remove(window, 'resize', this.onScheduleResize);
1453
1459
  EventHandler.remove(window, 'orientationchange', this.onScheduleResize);
1454
1460
  EventHandler.remove(document, Browser.touchStartEvent, this.onDocumentClick);
1461
+ EventHandler.remove(document, 'paste', this.onDocumentPaste);
1455
1462
  };
1456
1463
  /**
1457
1464
  * Core method to return the component name.
@@ -1687,11 +1694,12 @@ var Schedule = /** @class */ (function (_super) {
1687
1694
  this.onEventSettingsPropertyChanged(newProp.eventSettings, oldProp.eventSettings, state);
1688
1695
  break;
1689
1696
  case 'allowKeyboardInteraction':
1697
+ case 'allowClipboard':
1690
1698
  if (this.keyboardInteractionModule) {
1691
1699
  this.keyboardInteractionModule.destroy();
1692
1700
  this.keyboardInteractionModule = null;
1693
1701
  }
1694
- if (newProp.allowKeyboardInteraction) {
1702
+ if (newProp.allowKeyboardInteraction || newProp.allowClipboard) {
1695
1703
  this.keyboardInteractionModule = new KeyboardInteraction(this);
1696
1704
  }
1697
1705
  break;
@@ -2618,6 +2626,76 @@ var Schedule = /** @class */ (function (_super) {
2618
2626
  }
2619
2627
  return (eventCollection.length > 0) ? false : true;
2620
2628
  };
2629
+ /**
2630
+ * Method to copy events from an HTMLElement or an array of HTMLElements.
2631
+ *
2632
+ * @param { HTMLElement[] } elements Accepts an array of HTMLElement
2633
+ * @returns {void} This method does not return a value.
2634
+ */
2635
+ Schedule.prototype.copy = function (elements) {
2636
+ this.processCutCopyActions(elements, false);
2637
+ };
2638
+ /**
2639
+ * Method to cut events from an HTMLElement or an array of HTMLElements.
2640
+ *
2641
+ * @param { HTMLElement[] } elements Accepts an array of HTMLElement
2642
+ * @returns {void} This method does not return a value.
2643
+ */
2644
+ Schedule.prototype.cut = function (elements) {
2645
+ this.processCutCopyActions(elements, true);
2646
+ };
2647
+ /**
2648
+ * Method to create a paste event with clipboard data
2649
+ *
2650
+ * @param { HTMLElement } targetElement Accepts HTMLElement
2651
+ * @returns {void}
2652
+ */
2653
+ Schedule.prototype.paste = function (targetElement) {
2654
+ var _this = this;
2655
+ if (!this.allowClipboard || !this.allowKeyboardInteraction) {
2656
+ return;
2657
+ }
2658
+ if (!targetElement.classList.contains('e-work-cells') && !targetElement.classList.contains('e-all-day-cells')) {
2659
+ return;
2660
+ }
2661
+ var clipboardData = new DataTransfer();
2662
+ if (!isNullOrUndefined(navigator.clipboard)) {
2663
+ navigator.clipboard.readText()
2664
+ .then(function (text) {
2665
+ clipboardData.setData('text/plain', text);
2666
+ var pasteEvent = new ClipboardEvent('paste', {
2667
+ bubbles: true,
2668
+ cancelable: true
2669
+ });
2670
+ Object.defineProperty(pasteEvent, 'clipboardData', {
2671
+ value: clipboardData
2672
+ });
2673
+ _this.keyboardInteractionModule.pasteHandler(pasteEvent, targetElement);
2674
+ })
2675
+ .catch(function (err) {
2676
+ throw err;
2677
+ });
2678
+ }
2679
+ };
2680
+ Schedule.prototype.processCutCopyActions = function (elements, isCut) {
2681
+ var _this = this;
2682
+ if (!elements || !this.allowClipboard || !this.allowKeyboardInteraction) {
2683
+ return;
2684
+ }
2685
+ var elementArray = elements;
2686
+ var eventDetailsArray = [];
2687
+ elementArray.forEach(function (element) {
2688
+ if (element.classList.contains(cls.APPOINTMENT_CLASS)) {
2689
+ var eventDetail = _this.getEventDetails(element);
2690
+ if (eventDetail) {
2691
+ eventDetailsArray.push(eventDetail);
2692
+ }
2693
+ }
2694
+ });
2695
+ if (eventDetailsArray.length > 0) {
2696
+ this.keyboardInteractionModule.processClipboardAction(isCut, eventDetailsArray);
2697
+ }
2698
+ };
2621
2699
  /**
2622
2700
  * To manually open the event editor on specific time or on certain events.
2623
2701
  *
@@ -2750,6 +2828,52 @@ var Schedule = /** @class */ (function (_super) {
2750
2828
  this.eventTooltip.close();
2751
2829
  }
2752
2830
  };
2831
+ /**
2832
+ * Retrieves a formatted string representing the date range of the given date collection.
2833
+ *
2834
+ * @param {Date[]} dates - An array of Date objects representing the date range.
2835
+ * @returns {string} A formatted string describing the date range.
2836
+ * If the dates is empty, returns an empty string.
2837
+ * Otherwise, delegates to the active view to generate the appropriate date range text.
2838
+ *
2839
+ * @example
2840
+ * // Assuming dates contains dates from May 1, 2023 to May 7, 2023
2841
+ * const rangeText = schedule.getDateRangeText(schedule.getViewDates());
2842
+ * // rangeText might be "May 1 - 7, 2023" (actual format depends on the active view)
2843
+ *
2844
+ * @remarks
2845
+ * The actual format of the returned string depends on the implementation
2846
+ * of the getDateRangeText method in the active view.
2847
+ */
2848
+ Schedule.prototype.getDateRangeText = function (dates) {
2849
+ if ((isNullOrUndefined(dates) && dates.length === 0) || !this.activeView) {
2850
+ return '';
2851
+ }
2852
+ return this.activeView.getDateRangeText(dates[0], dates);
2853
+ };
2854
+ /**
2855
+ * Retrieves an array of dates based on the specified date collection direction.
2856
+ *
2857
+ * @param {NavigationDirection} type - The direction for date collection. Options are:
2858
+ * - 'Previous': Returns the previous date range collection from the current rendered date.
2859
+ * - 'Next': Returns the next date range collection from the current rendered date.
2860
+ * - 'Current': Returns the current rendered date collection.
2861
+ *
2862
+ * @returns {Date[]} An array of Date objects representing the view dates.
2863
+ */
2864
+ Schedule.prototype.getViewDates = function (type) {
2865
+ if (type === void 0) { type = 'Current'; }
2866
+ if (!this.activeView) {
2867
+ return [];
2868
+ }
2869
+ switch (type) {
2870
+ case 'Previous':
2871
+ case 'Next':
2872
+ return this.activeView.getRenderDates(undefined, this.activeView.getNextPreviousDate(type));
2873
+ case 'Current':
2874
+ return this.getCurrentViewDates();
2875
+ }
2876
+ };
2753
2877
  /**
2754
2878
  * Select the resource based on group index in mobile mode.
2755
2879
  *
@@ -3054,6 +3178,9 @@ var Schedule = /** @class */ (function (_super) {
3054
3178
  __decorate([
3055
3179
  Property()
3056
3180
  ], Schedule.prototype, "cssClass", void 0);
3181
+ __decorate([
3182
+ Property(false)
3183
+ ], Schedule.prototype, "allowClipboard", void 0);
3057
3184
  __decorate([
3058
3185
  Property()
3059
3186
  ], Schedule.prototype, "eventDragArea", void 0);
@@ -3138,6 +3265,9 @@ var Schedule = /** @class */ (function (_super) {
3138
3265
  __decorate([
3139
3266
  Event()
3140
3267
  ], Schedule.prototype, "dataBound", void 0);
3268
+ __decorate([
3269
+ Event()
3270
+ ], Schedule.prototype, "beforePaste", void 0);
3141
3271
  Schedule = __decorate([
3142
3272
  NotifyPropertyChanges
3143
3273
  ], Schedule);
@@ -123,3 +123,11 @@ export declare type SpannedEventPlacement = 'AllDayRow' | 'TimeSlot';
123
123
  * ```
124
124
  */
125
125
  export declare type ToolbarName = 'Custom' | 'Previous' | 'Next' | 'Today' | 'Views' | 'DateRangeText' | 'NewEvent';
126
+ /**
127
+ * An enum that defines the possible directions for a date collection.
128
+ *
129
+ * - **Previous:** Denotes the previous date collection.
130
+ * - **Next:** Denotes the next date collection.
131
+ * - **Current:** Denotes the current date collection.
132
+ */
133
+ export declare type NavigationDirection = 'Previous' | 'Next' | 'Current';
@@ -36,6 +36,10 @@ var EventTooltip = /** @class */ (function () {
36
36
  return targets.join(',');
37
37
  };
38
38
  EventTooltip.prototype.onBeforeRender = function (args) {
39
+ if (this.parent.uiStateValues.isSwipeScroll) {
40
+ args.cancel = true;
41
+ return;
42
+ }
39
43
  if (!isNullOrUndefined(args.target.getAttribute('data-tooltip-id'))) {
40
44
  return;
41
45
  }
@@ -1,6 +1,7 @@
1
1
  import { IRenderer } from '../base/interface';
2
2
  import { AgendaBase } from '../event-renderer/agenda-base';
3
3
  import { Schedule } from '../base/schedule';
4
+ import { NavigationDirection } from '../base/type';
4
5
  /**
5
6
  * agenda view
6
7
  */
@@ -29,7 +30,7 @@ export declare class Agenda extends AgendaBase implements IRenderer {
29
30
  private appointmentFiltering;
30
31
  getStartDateFromEndDate(endDate: Date): Date;
31
32
  getEndDateFromStartDate(startDate: Date): Date;
32
- getNextPreviousDate(type: string): Date;
33
+ getNextPreviousDate(type: NavigationDirection): Date;
33
34
  startDate(): Date;
34
35
  endDate(): Date;
35
36
  getDateRangeText(date?: Date): string;
@@ -400,7 +400,7 @@ var Agenda = /** @class */ (function (_super) {
400
400
  return util.resetTime(util.addDays(filterDate, 1));
401
401
  };
402
402
  Agenda.prototype.getNextPreviousDate = function (type) {
403
- var noOfDays = (type === 'next') ? 1 : -1;
403
+ var noOfDays = (type === 'Next') ? 1 : -1;
404
404
  return util.addDays(this.parent.selectedDate, noOfDays);
405
405
  };
406
406
  Agenda.prototype.startDate = function () {
@@ -481,6 +481,8 @@ var HeaderRenderer = /** @class */ (function () {
481
481
  targetType: 'relative',
482
482
  relateTo: this.getPopUpRelativeElement(),
483
483
  position: { X: 'left', Y: 'bottom' },
484
+ collision: { X: 'fit' },
485
+ viewPortElement: this.element,
484
486
  enableRtl: this.parent.enableRtl
485
487
  });
486
488
  var calendarView = this.getCalendarView();
@@ -592,10 +594,10 @@ var HeaderRenderer = /** @class */ (function () {
592
594
  }
593
595
  break;
594
596
  case 'e-prev':
595
- this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), args.originalEvent);
597
+ this.parent.changeDate(this.parent.activeView.getNextPreviousDate('Previous'), args.originalEvent);
596
598
  break;
597
599
  case 'e-next':
598
- this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), args.originalEvent);
600
+ this.parent.changeDate(this.parent.activeView.getNextPreviousDate('Next'), args.originalEvent);
599
601
  break;
600
602
  case 'e-add':
601
603
  isSameTime = this.parent.activeCellsData.startTime.getTime() === this.parent.activeCellsData.endTime.getTime();
@@ -2,6 +2,7 @@ import { CellClickEventArgs, NotifyEventArgs, TdData } from '../base/interface';
2
2
  import { AgendaBase } from '../event-renderer/agenda-base';
3
3
  import { Schedule } from '../base/schedule';
4
4
  import { Month } from './month';
5
+ import { NavigationDirection } from '../base/type';
5
6
  /**
6
7
  * month agenda view
7
8
  */
@@ -22,7 +23,7 @@ export declare class MonthAgenda extends Month {
22
23
  private appointmentFiltering;
23
24
  private clearElements;
24
25
  private appendAppContainer;
25
- getNextPreviousDate(type: string): Date;
26
+ getNextPreviousDate(type: NavigationDirection): Date;
26
27
  private getAgendaBase;
27
28
  destroy(): void;
28
29
  }
@@ -160,9 +160,9 @@ var MonthAgenda = /** @class */ (function (_super) {
160
160
  };
161
161
  MonthAgenda.prototype.getNextPreviousDate = function (type) {
162
162
  var selectedDate = this.parent.selectedDate;
163
- var interval = (type === 'next') ? this.parent.activeViewOptions.interval : -this.parent.activeViewOptions.interval;
163
+ var interval = (type === 'Next') ? this.parent.activeViewOptions.interval : -this.parent.activeViewOptions.interval;
164
164
  var navigateDate = util.addMonths(this.parent.selectedDate, interval);
165
- var month = (type === 'next') ? 2 : 0;
165
+ var month = (type === 'Next') ? 2 : 0;
166
166
  var lastDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth() + month, 0).getDate();
167
167
  var date = (lastDate >= this.monthAgendaDate.getDate()) ? this.monthAgendaDate.getDate() : lastDate;
168
168
  this.monthAgendaDate = new Date(navigateDate.getFullYear(), navigateDate.getMonth(), date);
@@ -1,6 +1,7 @@
1
1
  import { IRenderer, TdData, NotifyEventArgs, CellClickEventArgs } from '../base/interface';
2
2
  import { Schedule } from '../base/schedule';
3
3
  import { ViewBase } from './view-base';
4
+ import { NavigationDirection } from '../base/type';
4
5
  /**
5
6
  * month view
6
7
  */
@@ -45,12 +46,12 @@ export declare class Month extends ViewBase implements IRenderer {
45
46
  getMonthStart(currentDate: Date): Date;
46
47
  getMonthEnd(currentDate: Date): Date;
47
48
  private isCustomRange;
48
- getRenderDates(workDays?: number[]): Date[];
49
- getNextPreviousDate(type: string): Date;
49
+ getRenderDates(workDays?: number[], selectedDate?: Date): Date[];
50
+ getNextPreviousDate(type: NavigationDirection): Date;
50
51
  getStartDate(): Date;
51
52
  getEndDate(): Date;
52
53
  getEndDateFromStartDate(start: Date): Date;
53
- getDateRangeText(): string;
54
+ getDateRangeText(startDate?: Date, dateCollection?: Date[]): string;
54
55
  getLabelText(view: string): string;
55
56
  private createWeekNumberElement;
56
57
  unWireEvents(): void;
@@ -593,9 +593,10 @@ var Month = /** @class */ (function (_super) {
593
593
  }
594
594
  return false;
595
595
  };
596
- Month.prototype.getRenderDates = function (workDays) {
596
+ Month.prototype.getRenderDates = function (workDays, selectedDate) {
597
+ if (selectedDate === void 0) { selectedDate = this.parent.selectedDate; }
597
598
  var renderDates = [];
598
- var currentDate = util.resetTime(this.parent.selectedDate);
599
+ var currentDate = util.resetTime(selectedDate);
599
600
  var start = this.getMonthStart(currentDate);
600
601
  var monthEnd = this.getMonthEnd(currentDate);
601
602
  do {
@@ -623,13 +624,13 @@ var Month = /** @class */ (function (_super) {
623
624
  Month.prototype.getNextPreviousDate = function (type) {
624
625
  if (this.isCustomMonth()) {
625
626
  var dates = this.parent.getCurrentViewDates();
626
- var date = util.getWeekFirstDate(type === 'next' ? dates[dates.length - 1]
627
+ var date = util.getWeekFirstDate(type === 'Next' ? dates[dates.length - 1]
627
628
  : dates[0], this.parent.activeViewOptions.firstDayOfWeek);
628
- return util.addDays(date, type === 'next' ? util.WEEK_LENGTH : -(this.parent.activeViewOptions.numberOfWeeks > 0 ?
629
+ return util.addDays(date, type === 'Next' ? util.WEEK_LENGTH : -(this.parent.activeViewOptions.numberOfWeeks > 0 ?
629
630
  this.parent.activeViewOptions.numberOfWeeks : util.DEFAULT_WEEKS) * util.WEEK_LENGTH);
630
631
  }
631
632
  else {
632
- return util.addMonths(this.parent.selectedDate, ((type === 'next' ? 1 : -1) * this.parent.activeViewOptions.interval));
633
+ return util.addMonths(this.parent.selectedDate, ((type === 'Next' ? 1 : -1) * this.parent.activeViewOptions.interval));
633
634
  }
634
635
  };
635
636
  Month.prototype.getStartDate = function () {
@@ -641,13 +642,18 @@ var Month = /** @class */ (function (_super) {
641
642
  Month.prototype.getEndDateFromStartDate = function (start) {
642
643
  return util.addDays(new Date(start.getTime()), 1);
643
644
  };
644
- Month.prototype.getDateRangeText = function () {
645
+ Month.prototype.getDateRangeText = function (startDate, dateCollection) {
646
+ if (startDate === void 0) { startDate = this.parent.selectedDate; }
647
+ if (dateCollection === void 0) { dateCollection = null; }
645
648
  if (this.parent.isAdaptive || isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {
646
- var startDate = this.parent.selectedDate;
649
+ var maxNumberOfDaysPerWeek = 7;
650
+ startDate = !isNullOrUndefined(dateCollection) && dateCollection.length > maxNumberOfDaysPerWeek - 1
651
+ ? dateCollection[maxNumberOfDaysPerWeek - 1] : startDate;
647
652
  var endDate = void 0;
648
653
  var updateCustomRange = false;
649
654
  if (this.isCustomMonth()) {
650
- var dates = this.parent.getCurrentViewDates();
655
+ var dates = !isNullOrUndefined(dateCollection) && dateCollection.length > 0 ? dateCollection :
656
+ this.parent.getCurrentViewDates();
651
657
  updateCustomRange = dates[0].getMonth() !== dates[dates.length - 1].getMonth() ||
652
658
  dates[0].getFullYear() !== dates[dates.length - 1].getFullYear();
653
659
  if (updateCustomRange) {
@@ -673,7 +679,8 @@ var Month = /** @class */ (function (_super) {
673
679
  var format = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';
674
680
  return util.capitalizeFirstWord(this.parent.globalize.formatDate(startDate, { format: format, calendar: this.parent.getCalendarMode() }), 'single');
675
681
  }
676
- return this.formatDateRange(this.parent.selectedDate);
682
+ return this.formatDateRange(!isNullOrUndefined(dateCollection) && dateCollection.length > 0 ? dateCollection[0] :
683
+ this.parent.selectedDate);
677
684
  };
678
685
  Month.prototype.getLabelText = function (view) {
679
686
  var viewStr = view.charAt(0).toLowerCase() + view.substring(1);
@@ -1,10 +1,11 @@
1
1
  import { Schedule } from '../base/schedule';
2
2
  import { TdData } from '../base/interface';
3
+ import { NavigationDirection } from '../base/type';
3
4
  /**
4
5
  * view base
5
6
  */
6
7
  export declare class ViewBase {
7
- previousNextAction: string;
8
+ previousNextAction: NavigationDirection;
8
9
  element: HTMLElement;
9
10
  parent: Schedule;
10
11
  renderDates: Date[];
@@ -53,11 +54,11 @@ export declare class ViewBase {
53
54
  isCurrentMonth(date: Date): boolean;
54
55
  isWorkDay(date: Date, workDays?: number[]): boolean;
55
56
  isWorkHour(date: Date, startHour: Date, endHour: Date, workDays: number[]): boolean;
56
- getRenderDates(workDays?: number[]): Date[];
57
- getNextPreviousDate(type: string): Date;
57
+ getRenderDates(workDays?: number[], date?: Date): Date[];
58
+ getNextPreviousDate(type: NavigationDirection): Date;
58
59
  formatViewLabel(view: string, startDate: Date, endDate: Date): string;
59
60
  getLabelText(view: string): string;
60
- getDateRangeText(): string;
61
+ getDateRangeText(date?: Date, dateCollection?: Date[]): string;
61
62
  formatDateRange(startDate: Date, endDate?: Date): string;
62
63
  getMobileDateElement(date: Date, className?: string): Element;
63
64
  setResourceHeaderContent(tdElement: Element, tdData: TdData, className?: string): void;
@@ -12,7 +12,7 @@ var ViewBase = /** @class */ (function () {
12
12
  * @param {Schedule} parent Accepts the schedule instance
13
13
  */
14
14
  function ViewBase(parent) {
15
- this.previousNextAction = 'next';
15
+ this.previousNextAction = 'Next';
16
16
  this.parent = parent;
17
17
  }
18
18
  ViewBase.prototype.isTimelineView = function () {
@@ -271,11 +271,12 @@ var ViewBase = /** @class */ (function () {
271
271
  return !(util.getDateInMs(date) < util.getDateInMs(startHour) || util.getDateInMs(date) >= util.getDateInMs(endHour) ||
272
272
  !this.isWorkDay(date, workDays));
273
273
  };
274
- ViewBase.prototype.getRenderDates = function (workDays) {
274
+ ViewBase.prototype.getRenderDates = function (workDays, date) {
275
+ if (date === void 0) { date = this.parent.selectedDate; }
275
276
  var renderDates = [];
276
277
  // Due to same code for vertical and time line, week & work week views, if condition has used
277
278
  if (this.parent.currentView === 'Week' || this.parent.currentView === 'TimelineWeek') {
278
- var selectedDate = util.resetTime(this.parent.selectedDate);
279
+ var selectedDate = util.resetTime(date);
279
280
  var start = util.getWeekFirstDate(selectedDate, this.parent.activeViewOptions.firstDayOfWeek);
280
281
  for (var i = 0, length_1 = util.WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_1; i++) {
281
282
  if (this.parent.activeViewOptions.showWeekend) {
@@ -290,7 +291,7 @@ var ViewBase = /** @class */ (function () {
290
291
  }
291
292
  }
292
293
  else if (this.parent.currentView === 'WorkWeek' || this.parent.currentView === 'TimelineWorkWeek') {
293
- var start = util.getWeekFirstDate(util.resetTime(this.parent.selectedDate), this.parent.activeViewOptions.firstDayOfWeek);
294
+ var start = util.getWeekFirstDate(util.resetTime(date), this.parent.activeViewOptions.firstDayOfWeek);
294
295
  for (var i = 0, length_2 = util.WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_2; i++) {
295
296
  if (this.isWorkDay(start, workDays)) {
296
297
  renderDates.push(start);
@@ -301,7 +302,7 @@ var ViewBase = /** @class */ (function () {
301
302
  else {
302
303
  var dayCount = this.parent.currentView === 'Agenda' ? this.parent.agendaDaysCount :
303
304
  this.parent.activeViewOptions.interval;
304
- var start = util.resetTime(this.parent.selectedDate);
305
+ var start = util.resetTime(date);
305
306
  do {
306
307
  if (this.parent.activeViewOptions.showWeekend) {
307
308
  renderDates.push(start);
@@ -327,11 +328,11 @@ var ViewBase = /** @class */ (function () {
327
328
  if (this.parent.currentView === 'Day' || this.parent.currentView === 'TimelineDay') {
328
329
  if (this.parent.activeViewOptions.showWeekend) {
329
330
  var daysCount = this.parent.activeViewOptions.interval;
330
- return util.addDays(this.parent.selectedDate, type === 'next' ? daysCount : -daysCount);
331
+ return util.addDays(this.parent.selectedDate, type === 'Next' ? daysCount : -daysCount);
331
332
  }
332
333
  else {
333
334
  var date = void 0;
334
- if (type === 'next') {
335
+ if (type === 'Next') {
335
336
  date = util.addDays(this.renderDates.slice(-1)[0], 1);
336
337
  while (!this.isWorkDay(date)) {
337
338
  date = util.addDays(date, 1);
@@ -352,7 +353,7 @@ var ViewBase = /** @class */ (function () {
352
353
  return date;
353
354
  }
354
355
  }
355
- var weekLength = type === 'next' ? util.WEEK_LENGTH : -util.WEEK_LENGTH;
356
+ var weekLength = type === 'Next' ? util.WEEK_LENGTH : -util.WEEK_LENGTH;
356
357
  return util.addDays(this.parent.selectedDate, weekLength * this.parent.activeViewOptions.interval);
357
358
  };
358
359
  ViewBase.prototype.formatViewLabel = function (view, startDate, endDate) {
@@ -379,12 +380,14 @@ var ViewBase = /** @class */ (function () {
379
380
  }
380
381
  }
381
382
  };
382
- ViewBase.prototype.getDateRangeText = function () {
383
+ ViewBase.prototype.getDateRangeText = function (date, dateCollection) {
384
+ if (date === void 0) { date = this.renderDates[0]; }
385
+ if (dateCollection === void 0) { dateCollection = this.renderDates; }
383
386
  if (this.parent.isAdaptive) {
384
387
  var formatDate = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';
385
388
  return util.capitalizeFirstWord(this.parent.globalize.formatDate(this.parent.selectedDate, { format: formatDate, calendar: this.parent.getCalendarMode() }), 'single');
386
389
  }
387
- return this.formatDateRange(this.renderDates[0], this.renderDates[this.renderDates.length - 1]);
390
+ return this.formatDateRange(date, dateCollection[dateCollection.length - 1]);
388
391
  };
389
392
  ViewBase.prototype.formatDateRange = function (startDate, endDate) {
390
393
  var globalize = this.parent.globalize;