{"version":3,"sources":["webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/virtual-scroll.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/work-cells.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/data.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/crud.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/keyboard.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/touch.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/scroll.js"],"names":["VirtualScroll","parent","this","translateY","itemSize","bufferCount","renderedLength","averageRowHeight","startIndex","addEventListener","prototype","isDestroyed","on","virtualScrolling","removeEventListener","off","getRenderedCount","setItemSize","containerSize","isHorizontalScroll","element","clientWidth","clientHeight","Math","ceil","renderVirtualTrack","contentWrap","wrap","className","colCount","activeView","colLevels","length","style","width","height","resourceBase","expandedResources","appendChild","updateVirtualScrollHeight","virtual","querySelector","lastResourceIndex","groupIndex","lastRenderIndex","renderedResources","conTable","children","offsetHeight","updateVirtualTrackHeight","resourceCount","resWrap","conWrap","eventWrap","setTranslate","lastCollIndex","renderedResCount","renderEvents","setTabIndex","crudModule","refreshProcessedData","currentView","notify","hideSpinner","_this","quickPopup","quickPopupHide","morePopup","hide","horizontalScrolling","timeIndicator","firstTDIndex","parseInt","getAttribute","scrollHeight","rowAutoHeight","resCollection","upScroll","scrollTop","downScroll","showSpinner","selectedEle","getSelectedCells","focusedEle","updateContent","dragAndDropModule","actionObj","action","navigationWrapper","window","clearTimeout","timeValue","setTimeout","scrollWidth","abs","scrollLeft","leftScroll","rightScroll","slice","updateHorizontalContent","transform","index","prevSetCollection","getBufferCollection","lastResource","nextSetResIndex","lastIndex","nextSetCollection","getCollection","lastLevel","nextSetIndex","endIndex","getResCollection","enableRtl","activeViewOptions","group","byDate","toString","date","getTime","getByDateCollection","setRenderedDates","getByIdCollection","firstItem","lastItem","filter","data","setStartEndIndex","lastResourceLevel","colIndex","colSpan","document","activeElement","classList","contains","isResourceCell","focus","i","resourceRows","getContentRows","contentRows","eventRows","getEventRows","querySelectorAll","col","call","table","thead","colGroupEle_1","forEach","eventBase","createEventWrapper","timeScale","enable","updateFocusedWorkCell","ele","addSelectedClass","dateCol_1","map","x","renderDates","dateCol_2","getDay","renderDates_1","indexOf","resColWrap","resCells","getBoundingClientRect","top","setAttribute","focusResCell","destroy","WorkCellInteraction","add","onHover","cellMouseDown","e","isPreventAction","event","cellClick","queryStr","target","navigateEle","navigateView","getNavigateView","sameView","viewOptions","charAt","toLowerCase","readonly","isAdaptive","isWorkCell_1","shiftKey","which","keyboardInteractionModule","onMouseSelection","activeCellsData","getCellDetails","args","cancel","name","trigger","clickArgs","selectCell","allowInline","inlineArgs","type","getDateFromElement","isMinMaxDate","setProperties","selectedDate","changeView","eventWindow","openEditor","cellDblClick","Date","startTime","setHours","targetSelector","hoverTarget","hoverArgs","isTimelineView","remove","Data","dataSource","query","initDataManager","dataManager","generateQuery","startDate","endDate","clone","eventSettings","includeFiltersInQuery","dateQuery","getStartEndQuery","recurrenceQuery","eventFields","recurrenceRule","and","where","or","addParams","toISOString","fieldMapping","endTime","getData","executeQuery","Crud","crudObj","sourceEvent","targetEvent","isCrudAction","getQuery","start","end","dataModule","getTable","fromTable","refreshDataManager","then","dataManagerSuccess","catch","dataManagerFailure","resultData","result","eventsData","isBlock","blockData","isPrinting","error","isVirtualScrollAction","eventTemplate","templateNames","len","push","resetTemplates","processedData","eventsProcessed","concat","processData","refreshData","actionArgs","requestType","addedRecords","editParams","changedRecords","deletedRecords","display","resizeModule","isSpecificResourceEvents","crudData","Array","_loop_1","this_1","getGroupIndexFromEvent","tdData","_i","crudData_1","offline","offlineArgs","promise","onlineArgs","addEvent","eventData","allowAdding","isBlockEvent","isBlockRange","openValidationError","addEvents","addArgs","fields","_a","event_1","updateEventDateTime","eventData_1","processTimezone","saveChanges","id","event_2","insert","crudArgs","saveEvent","allowEditing","currentAction","updateEvents","processSave","processOccurrences","processFollowSeries","processEntireSeries","saveArgs","event_3","eventData_2","event_4","update","deleteEvent","allowDeleting","deleteEvents","eventObj","processDelete","deleteArgs","selectWorkCellByTime","occurrenceData","isDeletedRecords","eventData_3","event_5","occurrence","getParentEvent","occurrenceArgs","occurrenceEvents","_loop_2","a","count","childEvent","parentEvent","parentException","recurrenceException","editedData","exceptionDate","Guid","excludeDateCheck","recurrenceID","followingID","followData","eventData_4","event_6","updateFollowEvents","followArgs","fields_1","followEvents","_loop_3","followData_1","getEventCollections","isSpanned","processRecurrenceRule","isFollowingEvent","uiStateValues","isIgnoreOccurrence","rule","follow","seriesData","eventData_5","event_7","updateSeriesEvents","seriesArgs","fields_2","seriesEvents","_loop_4","eventCollections","deletedEvents","originalParent","deleteData","eventData_6","fields_3","_loop_5","isDelete","parentEvent_1","isEdited","obj","editedDate","editData","eventData_7","editArgs","record","exceptionString","parentEle","getEventMaxID","isParent","startTimezone","endTimezone","timezoneConvert","eventStartTime","exceptionDateList","exDate","followEvent","newRecurrenceRule","ruleException","dateCollection","firstDayOfWeek","untilDate","getHours","getMinutes","getSeconds","getUpdatedRecurrenceRule","splitRule","split","updatedRule","splitRule_1","ruleKey","ruleValue","replace","eventCollection","value","eventCollection_1","event_8","KeyboardInteraction","selectedCells","keyConfigs","downArrow","upArrow","rightArrow","leftArrow","shiftDownArrow","shiftUpArrow","shiftRightArrow","shiftLeftArrow","ctrlLeftArrow","ctrlRightArrow","altOne","altTwo","altThree","altFour","altFive","altSix","altSeven","altEight","altNine","enter","escape","delete","backspace","home","pageUp","pageDown","tab","shiftTab","ctrlShiftUpArrow","ctrlShiftDownArrow","ctrlShiftLeftArrow","ctrlShiftRightArrow","tabIndex","keyboardModule","keyAction","keyActionHandler","bind","eventName","processDown","processUp","processLeft","processRight","changeDate","getNextPreviousDate","headerModule","processViewNavigation","processEnter","focusFirstCell","processTab","processCtrlShiftNavigationArrows","processEscape","inlineModule","preventDefault","processFTwelve","getSelectedElements","click","onCellMouseDown","initialTarget","getClosestCell","removeSelectedClass","getContentTable","onMoveUp","allDayRow","getAllDayRow","appointments","selectionEdges","boundaryValidation","pageY","pageX","bottom","left","right","parent_1","yInBounds","xInBounds","offsetWidth","selectCells","cellData","convertToEventData","showQuickPopup","selectArgs","isPopupShow","quickInfoOnSelectionEnd","cellArgs","resourceIcon","inlineCrudActions","cellDetails","getCells","isInverseTable","tableEle","isTimelineYear","cells","maxRow","rows","maxColumn","inverseCells","j","cell","temp","sCells","focusCell","removeSelectedAppointmentClass","isVerticalYear","orientation","getWorkCellElements","isInverseTableSelect","isMultiple","targetCell","initialId_1","views_1","allowMultipleRow","removeInlineAppointmentElement","allowMultiRowSelection","isGroupYear","resources","parentElement","cellIndex","resourceSelectedCells","selectedCells_1","allowMultiCellSelection","allDayCells","getAllDayCells","resourceAllDayCells","allDayCells_1","selectAppointment","isReverse","getAppointmentElements","nextAppEle","targetIndex","addSelectedAppointments","selectAppointmentElementFromWorkCell","appointmentElements_1","getUniqueAppointmentElements","filteredElements_1","selectedDate_1","selectedSeriesEvents","eventObject","JSON","stringify","selectedElement","focusElements","getAppointmentElementsByGuid","startCell","endCell","guid","appointmentElements","self","getWorkCellFromAppointmentElement","selectedObject","getEventByGuid","key","views","view","viewCollections","option","undefined","cancelUpDownAction","isGroup","selectedElements","selectedEventElements","getSelectedAppointments","moreEventWrapper","quickPopupWrapper","getQuickPopupElement","tableRows","getTableRows","curRowIndex","getVerticalUpDownCell","getHorizontalUpDownCell","getStartDate","getYearUpDownCell","getEndDate","rowIndex","isUp","row","workCell","getFullYear","getMonth","hasRow","column","dateAttr","processLeftRight","closest","parentNode","sectionRowIndex","columnIndex","maxIndex","body","isCancelLeftRightAction","prevent","selectedAppointments","targetDate","isMonthEnd","calculateNextPrevDate","getTimelineYearTargetCell","changeTargetCell","getHorizontalLeftRightCell","curColIndex","maxColIndex","allDayRow_1","isMonthStart","otherMonthCell","tbody","item","allDayRow_2","isRight","getVerticalLeftRightCell","currentCell","initialId","currentDate","nextPrevDate","setDate","getDate","getFocusableElements","container","queryString","processTabOnPopup","popupElement","focusableElements","footerEle","offsetParent","firstEle","lastEle","popupWrapper","appSelector","appElements","focusAppointment","virtualScrollModule","round","setScrollPosition","isTimeline","resCellSelector","resourceCell","preventScroll","processTabOnResourceCells","activeEle","getSelectedEvents","activeEventData","deleteClick","eventEle","onClosePopup","hideHeaderPopup","tabElements","currentTabIndex","nextTabElement","resColWrap_1","offsetTop","getModuleName","ScheduleTouch","touchObj","scroll","scrollHandler","swipe","swipeHandler","tapHold","tapHoldHandler","swipeSettings","swipeThresholdDistance","onTransitionEnd","touchLeftDirection","touchRightDirection","allowSwiping","originalEvent","timeStampStart","now","scrollDirection","scrollDiv","isScrollTriggered","stopPropagation","nextPanel","renderPanel","getPanel","setDimensions","distanceX","getTranslateX","prevWidth","previousPanel","swipeDate","swipeDirection","maxDate","minDate","time","offsetDist","isDevice","swapPanels","transitionDuration","confirmSwipe","cancelSwipe","tapHoldEventPopup","clsName","nextPrevType","currentPanel","setCalendarDate","getRenderDates","renderLayout","direction","previousDate","navArgs","setPanel","translateX","offsetLeft","updateDateRange","renderTemplates","getComputedStyle","WebKitCSSMatrix","webkitTransform","m41","resetValues","Scroll","setWidth","setHeight","onPropertyChanged","cssProperties","getCssProperties","module"],"mappings":"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","file":"js/chunk-vendors~8b5c0ada.1e5f23a8.4.2.0.js","sourcesContent":["import { append, addClass, remove, isNullOrUndefined, setStyleAttribute, createElement, prepend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Virtual Scroll\n */\nvar VirtualScroll = /** @class */ (function () {\n function VirtualScroll(parent) {\n this.translateY = 0;\n this.itemSize = 60;\n this.bufferCount = 3;\n this.renderedLength = 0;\n this.averageRowHeight = 0;\n this.startIndex = 0;\n this.parent = parent;\n this.addEventListener();\n }\n VirtualScroll.prototype.addEventListener = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.virtualScroll, this.virtualScrolling, this);\n };\n VirtualScroll.prototype.removeEventListener = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.virtualScroll, this.virtualScrolling);\n };\n VirtualScroll.prototype.getRenderedCount = function () {\n this.setItemSize();\n var containerSize = this.isHorizontalScroll ? this.parent.element.clientWidth : this.parent.element.clientHeight;\n this.renderedLength = Math.ceil(containerSize / this.itemSize) + this.bufferCount;\n return this.renderedLength;\n };\n VirtualScroll.prototype.renderVirtualTrack = function (contentWrap) {\n var wrap = createElement('div', { className: cls.VIRTUAL_TRACK_CLASS });\n if (this.isHorizontalScroll) {\n var colCount = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1].length;\n wrap.style.width = (colCount * this.itemSize) + 'px';\n }\n else {\n wrap.style.height = (this.parent.resourceBase.expandedResources.length * this.itemSize) + 'px';\n }\n contentWrap.appendChild(wrap);\n };\n VirtualScroll.prototype.updateVirtualScrollHeight = function () {\n var virtual = this.parent.element.querySelector('.' + cls.VIRTUAL_TRACK_CLASS);\n var lastResourceIndex = this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].groupIndex;\n var lastRenderIndex = this.parent.resourceBase.renderedResources[this.parent.resourceBase.renderedResources.length - 1].groupIndex;\n if (lastRenderIndex !== lastResourceIndex) {\n var conTable = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n this.renderedLength = conTable.querySelector('tbody').children.length;\n virtual.style.height = (conTable.offsetHeight + (this.parent.resourceBase.expandedResources.length - (this.renderedLength)) *\n conTable.offsetHeight / this.renderedLength) + 'px';\n }\n else {\n virtual.style.height = '';\n }\n this.averageRowHeight = virtual.offsetHeight / this.parent.resourceBase.expandedResources.length;\n };\n VirtualScroll.prototype.updateVirtualTrackHeight = function (wrap) {\n var resourceCount = this.parent.resourceBase.renderedResources.length;\n if (resourceCount !== this.getRenderedCount()) {\n wrap.style.height = this.parent.element.querySelector('.e-content-wrap').clientHeight + 'px';\n var resWrap = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var eventWrap = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);\n this.translateY = 0;\n this.setTranslate(resWrap, conWrap, eventWrap);\n }\n else {\n var lastRenderIndex = this.parent.resourceBase.renderedResources[resourceCount - 1].groupIndex;\n var lastCollIndex = this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].groupIndex;\n var renderedResCount = resourceCount + (lastCollIndex - lastRenderIndex);\n renderedResCount = (renderedResCount > this.parent.resourceBase.expandedResources.length) ?\n this.parent.resourceBase.expandedResources.length : renderedResCount;\n wrap.style.height = (renderedResCount * this.itemSize) + 'px';\n }\n };\n VirtualScroll.prototype.setItemSize = function () {\n if (this.isHorizontalScroll) {\n this.itemSize = util.getElementWidthFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;\n }\n else {\n this.itemSize = util.getElementHeightFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;\n }\n };\n VirtualScroll.prototype.renderEvents = function () {\n this.setTabIndex();\n if (this.parent.crudModule) {\n this.parent.crudModule.refreshProcessedData(true);\n }\n if (this.parent.currentView !== 'Month') {\n this.parent.notify(events.contentReady, {});\n }\n this.parent.hideSpinner();\n };\n VirtualScroll.prototype.virtualScrolling = function () {\n var _this = this;\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide();\n this.parent.quickPopup.morePopup.hide();\n }\n var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (this.isHorizontalScroll) {\n this.horizontalScrolling(conWrap);\n }\n else {\n var resWrap = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n var eventWrap = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);\n var timeIndicator = this.parent.element.querySelector('.' + cls.CURRENT_TIMELINE_CLASS);\n var conTable = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n addClass([conWrap], 'e-transition');\n this.renderedLength = resWrap.querySelector('tbody').children.length;\n var firstTDIndex = parseInt(resWrap.querySelector('tbody td').getAttribute('data-group-index'), 10);\n var scrollHeight = this.parent.rowAutoHeight ?\n (conTable.offsetHeight - conWrap.offsetHeight) : this.bufferCount * this.itemSize;\n var resCollection = [];\n if ((conWrap.scrollTop) - this.translateY < 0) {\n resCollection = this.upScroll(conWrap, firstTDIndex);\n }\n else if (conWrap.scrollTop - this.translateY > scrollHeight) {\n resCollection = this.downScroll(conWrap, firstTDIndex);\n }\n if (!isNullOrUndefined(resCollection) && resCollection.length > 0) {\n this.parent.showSpinner();\n var selectedEle = this.parent.getSelectedCells();\n this.focusedEle = selectedEle[selectedEle.length - 1] || this.focusedEle;\n this.updateContent(resWrap, conWrap, eventWrap, resCollection);\n this.setTranslate(resWrap, conWrap, eventWrap, timeIndicator);\n if (this.parent.dragAndDropModule && this.parent.dragAndDropModule.actionObj.action === 'drag') {\n this.parent.dragAndDropModule.navigationWrapper();\n }\n window.clearTimeout(this.timeValue);\n this.timeValue = window.setTimeout(function () { _this.renderEvents(); }, 250);\n }\n }\n };\n VirtualScroll.prototype.horizontalScrolling = function (conWrap) {\n var _this = this;\n var resCollection = [];\n var scrollWidth = this.bufferCount * this.itemSize;\n if (Math.abs(conWrap.scrollLeft) - Math.abs(this.translateY) < 0) {\n resCollection = this.leftScroll(conWrap);\n }\n else if (Math.abs(conWrap.scrollLeft) - Math.abs(this.translateY) > scrollWidth) {\n resCollection = this.rightScroll(conWrap);\n }\n if (!isNullOrUndefined(resCollection) && resCollection.length > 0) {\n if (this.parent.resourceBase.expandedResources.length !== resCollection.length ||\n this.parent.resourceBase.expandedResources[0] !== resCollection[0] ||\n this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1] !==\n resCollection[resCollection.length - 1]) {\n this.parent.showSpinner();\n var colLevels = this.parent.activeView.colLevels.slice(0);\n this.updateHorizontalContent(conWrap, resCollection);\n setStyleAttribute(conWrap.querySelector('table'), { transform: \"translateX(\" + this.translateY + \"px)\" });\n this.parent.activeView.colLevels = colLevels;\n if (this.parent.dragAndDropModule && this.parent.dragAndDropModule.actionObj.action === 'drag') {\n this.parent.dragAndDropModule.navigationWrapper();\n }\n }\n window.clearTimeout(this.timeValue);\n this.timeValue = window.setTimeout(function () { _this.renderEvents(); }, 250);\n }\n };\n VirtualScroll.prototype.upScroll = function (conWrap, firstTDIndex) {\n var index = 0;\n index = (~~(conWrap.scrollTop / this.itemSize) + Math.ceil(conWrap.clientHeight / this.itemSize)) - this.renderedLength;\n if (this.parent.rowAutoHeight) {\n index = (index > firstTDIndex) ? firstTDIndex - this.bufferCount : index;\n }\n index = (index > 0) ? index : 0;\n var prevSetCollection = this.getBufferCollection(index, index + this.renderedLength);\n this.parent.resourceBase.renderedResources = prevSetCollection;\n if (firstTDIndex === 0) {\n this.translateY = conWrap.scrollTop;\n }\n else {\n var height = (this.parent.rowAutoHeight) ? this.averageRowHeight : this.itemSize;\n height = (height > 0) ? height : this.itemSize;\n this.translateY = (conWrap.scrollTop - (this.bufferCount * height) > 0) ?\n conWrap.scrollTop - (this.bufferCount * height) : 0;\n }\n return prevSetCollection;\n };\n VirtualScroll.prototype.downScroll = function (conWrap, firstTDIndex) {\n var lastResource = this.parent.resourceBase.\n renderedResources[this.parent.resourceBase.renderedResources.length - 1].groupIndex;\n var lastResourceIndex = this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].groupIndex;\n if (lastResource === lastResourceIndex) {\n return null;\n }\n var nextSetResIndex = 0;\n nextSetResIndex = ~~(conWrap.scrollTop / this.itemSize);\n if (this.parent.rowAutoHeight) {\n nextSetResIndex = ~~((conWrap.scrollTop - this.translateY) / this.averageRowHeight) + firstTDIndex;\n nextSetResIndex = (nextSetResIndex > firstTDIndex + this.bufferCount) ? nextSetResIndex : firstTDIndex + this.bufferCount;\n }\n var lastIndex = nextSetResIndex + this.renderedLength;\n lastIndex = (lastIndex > this.parent.resourceBase.expandedResources.length) ?\n nextSetResIndex + (this.parent.resourceBase.expandedResources.length - nextSetResIndex) : lastIndex;\n var nextSetCollection = this.getBufferCollection(lastIndex - this.renderedLength, lastIndex);\n this.translateY = conWrap.scrollTop;\n return nextSetCollection;\n };\n VirtualScroll.prototype.leftScroll = function (conWrap) {\n var index = 0;\n index = (~~(Math.abs(conWrap.scrollLeft) / this.itemSize) + Math.ceil(conWrap.clientWidth / this.itemSize)) - this.renderedLength;\n index = (index > 0) ? index : 0;\n return this.getCollection(index, index + this.renderedLength);\n };\n VirtualScroll.prototype.rightScroll = function (conWrap) {\n var lastLevel = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1];\n var nextSetIndex = 0;\n nextSetIndex = ~~(Math.abs(conWrap.scrollLeft) / this.itemSize);\n var lastIndex = nextSetIndex + this.renderedLength;\n lastIndex = (lastIndex > lastLevel.length - 1) ? lastLevel.length - 1 : lastIndex;\n return this.getCollection(lastIndex - this.renderedLength, lastIndex);\n };\n VirtualScroll.prototype.getCollection = function (startIndex, endIndex) {\n this.translateY = startIndex * this.itemSize;\n var lastLevel = this.getResCollection(startIndex, endIndex);\n if (this.parent.enableRtl) {\n this.translateY = -this.translateY;\n }\n return lastLevel;\n };\n VirtualScroll.prototype.getResCollection = function (startIndex, endIndex) {\n var lastLevel = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1];\n var resCollection = [];\n var index = { startIndex: 0, endIndex: 0 };\n if (this.parent.activeViewOptions.group.byDate) {\n if (lastLevel[parseInt(startIndex.toString(), 10)].date.getTime() ===\n this.parent.resourceBase.expandedResources[0].date.getTime() &&\n lastLevel[parseInt(endIndex.toString(), 10)].date.getTime() ===\n this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].date.getTime()) {\n return this.parent.resourceBase.expandedResources;\n }\n resCollection =\n this.getByDateCollection(lastLevel[parseInt(startIndex.toString(), 10)], lastLevel[parseInt(endIndex.toString(), 10)], index);\n this.setRenderedDates(resCollection);\n }\n else {\n if (lastLevel[parseInt(startIndex.toString(), 10)].groupIndex === this.parent.resourceBase.expandedResources[0].groupIndex &&\n lastLevel[parseInt(endIndex.toString(), 10)].groupIndex ===\n this.parent.resourceBase.expandedResources[this.parent.resourceBase.expandedResources.length - 1].groupIndex) {\n return this.parent.resourceBase.expandedResources;\n }\n resCollection =\n this.getByIdCollection(lastLevel[parseInt(startIndex.toString(), 10)], lastLevel[parseInt(endIndex.toString(), 10)], index);\n }\n if (this.parent.currentView !== 'Month') {\n this.startIndex = index.startIndex;\n resCollection = lastLevel.slice(index.startIndex, index.endIndex);\n }\n this.translateY = index.startIndex * this.itemSize;\n return resCollection;\n };\n VirtualScroll.prototype.getByDateCollection = function (firstItem, lastItem, index) {\n var resCollection = this.parent.activeView.colLevels[0].filter(function (data) {\n return firstItem.date.getTime() <= data.date.getTime() &&\n data.date.getTime() <= lastItem.date.getTime();\n });\n this.setStartEndIndex(this.parent.activeView.colLevels[0], resCollection[0], resCollection[resCollection.length - 1], index);\n return resCollection;\n };\n VirtualScroll.prototype.getByIdCollection = function (firstItem, lastItem, index) {\n var resCollection = this.parent.resourceBase.lastResourceLevel.filter(function (data) {\n return firstItem.groupIndex <= data.groupIndex && data.groupIndex <= lastItem.groupIndex;\n });\n this.parent.resourceBase.renderedResources = resCollection;\n this.setStartEndIndex(this.parent.resourceBase.lastResourceLevel, resCollection[0], resCollection[resCollection.length - 1], index);\n return resCollection;\n };\n VirtualScroll.prototype.setStartEndIndex = function (data, firstItem, lastItem, colIndex) {\n var index = 0;\n data.filter(function (data) {\n if (firstItem === data) {\n colIndex.startIndex = index;\n }\n else if (lastItem === data) {\n colIndex.endIndex = index + data.colSpan;\n }\n index += data.colSpan;\n });\n if (firstItem === lastItem) {\n colIndex.endIndex = colIndex.startIndex + lastItem.colSpan;\n }\n };\n VirtualScroll.prototype.updateContent = function (resWrap, conWrap, eventWrap, resCollection) {\n var renderedLength = resWrap.querySelector('tbody').children.length;\n if (document.activeElement && document.activeElement.classList.contains(cls.RESOURCE_CELLS_CLASS)) {\n this.isResourceCell = true;\n this.parent.element.focus();\n }\n for (var i = 0; i < renderedLength; i++) {\n remove(resWrap.querySelector('tbody tr'));\n remove(conWrap.querySelector('tbody tr'));\n remove(eventWrap.querySelector('div'));\n }\n this.parent.resourceBase.renderedResources = resCollection;\n var resourceRows = this.parent.resourceBase.getContentRows(resCollection, true);\n var contentRows = this.parent.activeView.getContentRows();\n var eventRows = this.parent.activeView.getEventRows(resCollection.length);\n append(resourceRows, resWrap.querySelector('tbody'));\n append(contentRows, conWrap.querySelector('tbody'));\n append(eventRows, eventWrap);\n };\n VirtualScroll.prototype.updateHorizontalContent = function (conWrap, resCollection) {\n this.parent.resourceBase.expandedResources = resCollection;\n var selectedEle = this.parent.getSelectedCells();\n this.focusedEle = selectedEle[selectedEle.length - 1] || this.focusedEle;\n var renderedLength = conWrap.querySelectorAll('tbody tr').length;\n for (var i = 0; i < renderedLength; i++) {\n remove(conWrap.querySelector('tbody tr'));\n }\n if (this.parent.currentView === 'Month') {\n if (this.parent.activeViewOptions.group.byDate) {\n this.parent.activeView.colLevels[0] = resCollection;\n }\n else {\n this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 2] = resCollection;\n }\n var contentRows = this.parent.activeView.getContentRows();\n append(contentRows, conWrap.querySelector('tbody'));\n }\n else {\n var col = [].slice.call(conWrap.querySelector('colgroup').children);\n for (var i = 0; i < col.length; i++) {\n remove(col[parseInt(i.toString(), 10)]);\n }\n this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1] = resCollection;\n var contentRows = this.parent.activeView.getContentRows();\n var table = conWrap.querySelector('table');\n var thead = conWrap.querySelector('thead');\n var colGroupEle_1 = conWrap.querySelector('colgroup');\n resCollection.forEach(function () {\n colGroupEle_1.appendChild(createElement('col'));\n });\n thead.appendChild(this.parent.eventBase.createEventWrapper('', this.startIndex > 0 ? this.startIndex : 0));\n if (this.parent.activeViewOptions.timeScale.enable) {\n thead.appendChild(this.parent.eventBase.createEventWrapper('timeIndicator'));\n }\n prepend([thead], table);\n append(contentRows, conWrap.querySelector('tbody'));\n }\n };\n VirtualScroll.prototype.getBufferCollection = function (startIndex, endIndex) {\n return this.parent.resourceBase.expandedResources.slice(startIndex, endIndex);\n };\n VirtualScroll.prototype.setTranslate = function (resWrap, conWrap, eventWrap, timeIndicator) {\n setStyleAttribute(resWrap.querySelector('table'), { transform: \"translateY(\" + this.translateY + \"px)\" });\n setStyleAttribute(conWrap.querySelector('table'), { transform: \"translateY(\" + this.translateY + \"px)\" });\n setStyleAttribute(eventWrap, { transform: \"translateY(\" + this.translateY + \"px)\" });\n if (!isNullOrUndefined(timeIndicator)) {\n setStyleAttribute(timeIndicator, { transform: \"translateY(\" + this.translateY + \"px)\" });\n }\n };\n VirtualScroll.prototype.updateFocusedWorkCell = function () {\n if (this.focusedEle) {\n var date = parseInt(this.focusedEle.getAttribute('data-date'), 10);\n var groupIndex = parseInt(this.focusedEle.getAttribute('data-group-index'), 10);\n var ele = this.parent.element.querySelector(\".\" + cls.WORK_CELLS_CLASS + \"[data-date=\\\"\" + date + \"\\\"][data-group-index=\\\"\" + groupIndex + \"\\\"]\");\n if (ele) {\n this.parent.addSelectedClass([ele], ele, true);\n }\n this.focusedEle = null;\n }\n };\n VirtualScroll.prototype.setRenderedDates = function (resCollection) {\n if (this.parent.currentView !== 'Month') {\n var dateCol_1 = resCollection.map(function (x) { return x.date; });\n this.parent.resourceBase.renderedResources.forEach(function (x) { return x.renderDates = dateCol_1; });\n }\n else {\n var dateCol_2 = resCollection.map(function (x) { return x.date.getDay(); });\n var renderDates_1 = this.parent.activeView.renderDates.filter(function (x) { return dateCol_2.indexOf(x.getDay()) >= 0; });\n this.parent.resourceBase.renderedResources.forEach(function (x) { return x.renderDates = renderDates_1; });\n }\n };\n VirtualScroll.prototype.setTabIndex = function () {\n var resColWrap = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n var resCells = [].slice.call(this.parent.element.querySelectorAll('.' + cls.RESOURCE_CELLS_CLASS));\n if (resCells && resColWrap) {\n resCells.forEach(function (element) {\n if (element.getBoundingClientRect().top >= resColWrap.getBoundingClientRect().top) {\n element.setAttribute('tabindex', '0');\n }\n });\n }\n var focusResCell = this.parent.element.querySelector(\".\" + cls.RESOURCE_CELLS_CLASS + \"[tabindex=\\\"\" + 0 + \"\\\"]\");\n if (this.isResourceCell && focusResCell) {\n focusResCell.focus();\n this.isResourceCell = false;\n }\n };\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n this.focusedEle = null;\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { extend, closest, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Work cell interactions\n */\nvar WorkCellInteraction = /** @class */ (function () {\n function WorkCellInteraction(parent) {\n this.parent = parent;\n EventHandler.add(this.parent.element, 'mouseover', this.onHover, this);\n }\n WorkCellInteraction.prototype.cellMouseDown = function (e) {\n if (this.isPreventAction(e)) {\n return;\n }\n this.parent.notify(event.cellMouseDown, { event: e });\n };\n WorkCellInteraction.prototype.cellClick = function (e) {\n var _this = this;\n if (this.isPreventAction(e)) {\n return;\n }\n var queryStr = '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' + cls.HEADER_CELLS_CLASS;\n var target = closest(e.target, queryStr);\n if (isNullOrUndefined(target)) {\n return;\n }\n if (!isNullOrUndefined(closest(e.target, '.' + cls.NEW_EVENT_CLASS))) {\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n return;\n }\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n var navigateView = this.parent.getNavigateView();\n var sameView = this.parent.currentView === navigateView;\n if (isNullOrUndefined(navigateEle) || sameView ||\n isNullOrUndefined(this.parent.viewOptions[navigateView.charAt(0).toLowerCase() + navigateView.slice(1)])) {\n if (this.parent.activeViewOptions.readonly && this.parent.currentView !== 'MonthAgenda') {\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide();\n }\n return;\n }\n if (this.parent.isAdaptive && (e.target.classList.contains(cls.MORE_INDICATOR_CLASS) ||\n closest(e.target, '.' + cls.MORE_INDICATOR_CLASS))) {\n return;\n }\n var isWorkCell_1 = target.classList.contains(cls.WORK_CELLS_CLASS) ||\n target.classList.contains(cls.ALLDAY_CELLS_CLASS);\n if (isWorkCell_1 && e.shiftKey && e.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.onMouseSelection(e);\n return;\n }\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellClick' });\n this.parent.trigger(event.cellClick, args, function (clickArgs) {\n if (!clickArgs.cancel) {\n if (isWorkCell_1) {\n _this.parent.selectCell(target);\n }\n if (_this.parent.allowInline) {\n var inlineArgs = {\n element: clickArgs.element,\n groupIndex: clickArgs.groupIndex, type: 'Cell'\n };\n _this.parent.notify(event.inlineClick, inlineArgs);\n }\n else {\n _this.parent.notify(event.cellClick, clickArgs);\n }\n }\n else {\n if (_this.parent.quickPopup) {\n _this.parent.quickPopup.quickPopupHide();\n }\n }\n });\n }\n else {\n var date = this.parent.getDateFromElement(target);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive && this.parent.isMinMaxDate(date)) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView(this.parent.getNavigateView(), e);\n }\n }\n };\n WorkCellInteraction.prototype.cellDblClick = function (e) {\n var _this = this;\n var queryStr = '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' + cls.HEADER_CELLS_CLASS;\n var target = closest(e.target, queryStr);\n if (this.parent.activeViewOptions.readonly || this.isPreventAction(e) || isNullOrUndefined(target)) {\n return;\n }\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellDoubleClick' });\n this.parent.trigger(event.cellDoubleClick, args, function (clickArgs) {\n var date = new Date(clickArgs.startTime.getTime());\n if (!_this.parent.isMinMaxDate(new Date(date.setHours(0, 0, 0, 0)))) {\n return;\n }\n if (!clickArgs.cancel) {\n _this.parent.eventWindow.openEditor(_this.parent.activeCellsData, 'Add');\n }\n });\n };\n WorkCellInteraction.prototype.onHover = function (e) {\n var targetSelector = '.' + cls.WORK_CELLS_CLASS + ',.' + cls.TIME_SLOT_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' +\n cls.HEADER_CELLS_CLASS + ',.' + cls.RESOURCE_CELLS_CLASS + ',.' + cls.APPOINTMENT_CLASS + ',.' + cls.WEEK_NUMBER_CLASS +\n ',.' + cls.MONTH_HEADER_CLASS;\n var hoverTarget = closest(e.target, targetSelector);\n if (hoverTarget) {\n var hoverArgs = { element: hoverTarget, event: e };\n this.parent.trigger(event.hover, hoverArgs);\n }\n };\n WorkCellInteraction.prototype.isPreventAction = function (e) {\n if (closest(e.target, '.' + cls.NAVIGATE_CLASS)) {\n return false;\n }\n if (closest(e.target, '.' + cls.APPOINTMENT_WRAPPER_CLASS) &&\n !closest(e.target, '.' + cls.MORE_INDICATOR_CLASS)) {\n return true;\n }\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS + ',.' + cls.RESOURCE_GROUP_CELLS_CLASS);\n if (!isNullOrUndefined(target)) {\n return true;\n }\n target = closest(e.target, '.' + cls.HEADER_CELLS_CLASS);\n if (this.parent.activeView.isTimelineView() && !isNullOrUndefined(target)) {\n return true;\n }\n return false;\n };\n WorkCellInteraction.prototype.destroy = function () {\n EventHandler.remove(this.parent.element, 'mouseover', this.onHover);\n };\n return WorkCellInteraction;\n}());\nexport { WorkCellInteraction };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and data source.\n *\n * @private\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n *\n * @param {Schedule} parent Accepts the schedule element instance\n * @param {Object | DataManager} dataSource Accepts the datasource as JSON objects or DataManager\n * @param {Query} query Accepts the query to process the data\n * @private\n */\n function Data(parent, dataSource, query) {\n this.parent = parent;\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n *\n * @param {Object | DataManager} dataSource Accepts the datasource as JSON objects or DataManager\n * @param {Query} query Accepts the query to process the data\n * @returns {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from schedule model\n *\n * @param {Date} startDate Accepts the start date\n * @param {Date} endDate Accepts the end date\n * @returns {void}\n * @private\n */\n Data.prototype.generateQuery = function (startDate, endDate) {\n var query = this.query.clone();\n if (this.parent && this.parent.eventSettings.includeFiltersInQuery && startDate && endDate) {\n var dateQuery = this.getStartEndQuery(startDate, endDate);\n var recurrenceQuery = new Predicate(this.parent.eventFields.recurrenceRule, 'notequal', null).and(new Predicate(this.parent.eventFields.recurrenceRule, 'notequal', ''));\n return query.where(dateQuery.or(recurrenceQuery));\n }\n if (startDate) {\n query.addParams('StartDate', startDate.toISOString());\n }\n if (endDate) {\n query.addParams('EndDate', endDate.toISOString());\n }\n return query;\n };\n /**\n * The function used to generate updated Query from schedule model\n *\n * @param {Date} startDate Accepts the start date\n * @param {Date} endDate Accepts the end date\n * @returns {void}\n * @private\n */\n Data.prototype.getStartEndQuery = function (startDate, endDate) {\n var fieldMapping = this.parent.eventFields;\n var dateQuery = new Predicate(fieldMapping.startTime, 'greaterthanorequal', startDate)\n .and(new Predicate(fieldMapping.endTime, 'greaterthanorequal', startDate))\n .and(new Predicate(fieldMapping.startTime, 'lessthan', endDate))\n .or(new Predicate(fieldMapping.startTime, 'lessthanorequal', startDate)\n .and(new Predicate(fieldMapping.endTime, 'greaterthan', startDate)));\n return dateQuery;\n };\n /**\n * The function used to get dataSource by executing given Query\n *\n * @param {Query} query - A Query that specifies to generate dataSource\n * @returns {void}\n * @private\n */\n Data.prototype.getData = function (query) {\n return this.dataManager.executeQuery(query);\n };\n /**\n * To destroy the crud module.\n *\n * @returns {void}\n * @private\n */\n Data.prototype.destroy = function () {\n this.dataManager = null;\n this.query = null;\n };\n return Data;\n}());\nexport { Data };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable max-len */\nimport { isNullOrUndefined, extend, removeClass } from '@syncfusion/ej2-base';\nimport { getRecurrenceStringFromDate, generate } from '../../recurrence-editor/date-generator';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\n/**\n * Schedule CRUD operations\n */\nvar Crud = /** @class */ (function () {\n function Crud(parent) {\n this.parent = parent;\n this.crudObj = { sourceEvent: null, targetEvent: null, isCrudAction: false };\n }\n Crud.prototype.getQuery = function () {\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n return this.parent.dataModule.generateQuery(start, end);\n };\n Crud.prototype.getTable = function () {\n if (this.parent.eventSettings.query) {\n var query = this.parent.eventSettings.query.clone();\n return query.fromTable;\n }\n return null;\n };\n Crud.prototype.refreshDataManager = function () {\n var _this = this;\n if (!this.parent.activeView) {\n return;\n }\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var dataManager = this.parent.dataModule.getData(this.parent.dataModule.generateQuery(start, end));\n dataManager.then(function (e) { return _this.dataManagerSuccess(e); }).catch(function (e) { return _this.dataManagerFailure(e); });\n };\n Crud.prototype.dataManagerSuccess = function (e) {\n var _this = this;\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.dataBinding, e, function (args) {\n var resultData = extend([], args.result, null, true);\n _this.parent.eventsData = resultData.filter(function (data) { return !data[_this.parent.eventFields.isBlock]; });\n _this.parent.blockData = resultData.filter(function (data) { return data[_this.parent.eventFields.isBlock]; });\n _this.refreshProcessedData();\n if (_this.parent.dragAndDropModule && _this.parent.dragAndDropModule.actionObj.action === 'drag') {\n _this.parent.dragAndDropModule.navigationWrapper();\n }\n _this.parent.trigger(events.dataBound, null, function () {\n _this.parent.hideSpinner();\n if (_this.parent.isPrinting) {\n _this.parent.notify(events.print, {});\n }\n });\n });\n };\n Crud.prototype.dataManagerFailure = function (e) {\n var _this = this;\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.actionFailure, { error: e }, function () { return _this.parent.hideSpinner(); });\n };\n Crud.prototype.refreshProcessedData = function (isVirtualScrollAction) {\n if (isVirtualScrollAction === void 0) { isVirtualScrollAction = false; }\n if (this.parent.dragAndDropModule) {\n this.parent.dragAndDropModule.actionObj.action = '';\n removeClass([this.parent.element], 'e-event-action');\n }\n if (this.parent.activeViewOptions && this.parent.activeViewOptions.eventTemplate) {\n var templateNames = ['eventTemplate'];\n if (this.crudObj.isCrudAction &&\n ['Agenda', 'MonthAgenda', 'Year', 'TimelineYear'].indexOf(this.parent.currentView) === -1) {\n templateNames = [];\n for (var i = 0, len = this.crudObj.sourceEvent.length; i < len; i++) {\n templateNames.push('eventTemplate_' + this.crudObj.sourceEvent[parseInt(i.toString(), 10)].groupIndex);\n if (this.crudObj.targetEvent[parseInt(i.toString(), 10)] && this.crudObj.sourceEvent[parseInt(i.toString(), 10)].groupIndex !==\n this.crudObj.targetEvent[parseInt(i.toString(), 10)].groupIndex) {\n templateNames.push('eventTemplate_' + this.crudObj.targetEvent[parseInt(i.toString(), 10)].groupIndex);\n }\n }\n }\n if (templateNames.length > 0) {\n this.parent.resetTemplates(templateNames);\n }\n }\n if (isVirtualScrollAction) {\n this.parent.notify(events.dataReady, { processedData: this.parent.eventsProcessed });\n return;\n }\n var eventsData = this.parent.eventsData || [];\n var blockData = this.parent.blockData || [];\n var data = eventsData.concat(blockData);\n this.parent.notify(events.dataReady, { processedData: this.parent.eventBase ? this.parent.eventBase.processData(data) : [] });\n };\n Crud.prototype.refreshData = function (args) {\n var _this = this;\n var actionArgs = {\n requestType: args.requestType, cancel: false, data: args.data,\n addedRecords: args.editParams.addedRecords, changedRecords: args.editParams.changedRecords,\n deletedRecords: args.editParams.deletedRecords\n };\n if (this.parent.dragAndDropModule && this.parent.dragAndDropModule.actionObj && this.parent.dragAndDropModule.actionObj.element) {\n this.parent.dragAndDropModule.actionObj.element.style.display = 'none';\n }\n if (this.parent.resizeModule && this.parent.resizeModule.actionObj && this.parent.resizeModule.actionObj.element) {\n this.parent.resizeModule.actionObj.element.style.display = 'none';\n }\n if (this.parent.isSpecificResourceEvents()) {\n if (args.requestType === 'eventCreated' || args.requestType === 'eventRemoved') {\n this.crudObj.isCrudAction = true;\n this.crudObj.sourceEvent = [];\n var crudData = args.data instanceof Array ? (args.data.length === 0 &&\n args.requestType === 'eventRemoved' ? args.editParams.deletedRecords : args.data) :\n ((typeof args.data === 'string' || typeof args.data === 'number') && args.requestType === 'eventRemoved') ?\n args.editParams.deletedRecords : [args.data];\n var _loop_1 = function (data) {\n this_1.crudObj.isCrudAction = !(args.requestType === 'eventRemoved' && !isNullOrUndefined(data.parent));\n var groupIndex = this_1.parent.eventBase.getGroupIndexFromEvent(data);\n if (groupIndex > -1 && this_1.parent.crudModule.crudObj.sourceEvent.filter(function (tdData) { return tdData.groupIndex === groupIndex; }).length === 0\n && this_1.crudObj.isCrudAction) {\n this_1.crudObj.sourceEvent.push(this_1.parent.resourceBase.lastResourceLevel[parseInt(groupIndex.toString(), 10)]);\n }\n };\n var this_1 = this;\n for (var _i = 0, crudData_1 = crudData; _i < crudData_1.length; _i++) {\n var data = crudData_1[_i];\n _loop_1(data);\n }\n this.crudObj.targetEvent = this.crudObj.sourceEvent;\n }\n }\n if (this.parent.dataModule.dataManager.dataSource.offline) {\n this.parent.trigger(events.actionComplete, actionArgs, function (offlineArgs) {\n if (!offlineArgs.cancel) {\n _this.refreshDataManager();\n }\n });\n }\n else {\n args.promise.then(function () {\n if (!_this.parent || _this.parent && _this.parent.isDestroyed) {\n return;\n }\n _this.parent.trigger(events.actionComplete, actionArgs, function (onlineArgs) {\n if (!onlineArgs.cancel) {\n _this.refreshDataManager();\n }\n });\n }).catch(function (e) {\n if (!_this.parent || _this.parent && _this.parent.isDestroyed) {\n return;\n }\n _this.parent.trigger(events.actionFailure, { error: e });\n });\n }\n };\n Crud.prototype.addEvent = function (eventData) {\n var _this = this;\n if (this.parent.eventSettings.allowAdding && !this.parent.activeViewOptions.readonly) {\n if (!this.isBlockEvent(eventData) && this.parent.eventBase.isBlockRange(eventData)) {\n this.parent.quickPopup.openValidationError('blockAlert', eventData);\n return;\n }\n var addEvents = (eventData instanceof Array) ? eventData : [eventData];\n if (addEvents.length === 0) {\n return;\n }\n var args = {\n requestType: 'eventCreate', cancel: false, data: addEvents,\n addedRecords: addEvents, changedRecords: [], deletedRecords: []\n };\n this.parent.trigger(events.actionBegin, args, function (addArgs) {\n if (!addArgs.cancel) {\n var fields = _this.parent.eventFields;\n var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var promise = void 0;\n if (addArgs.addedRecords instanceof Array) {\n for (var _i = 0, _a = addArgs.addedRecords; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n event_1 = _this.parent.eventBase.updateEventDateTime(event_1);\n var eventData_1 = extend({}, _this.parent.eventBase.processTimezone(event_1, true), null, true);\n editParams.addedRecords.push(eventData_1);\n }\n promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());\n }\n else {\n var event_2 = _this.parent.eventBase.processTimezone(addArgs.addedRecords, true);\n editParams.addedRecords.push(event_2);\n promise = _this.parent.dataModule.dataManager.insert(event_2, _this.getTable(), _this.getQuery());\n }\n var crudArgs = {\n requestType: 'eventCreated', cancel: false, data: addArgs.addedRecords, promise: promise, editParams: editParams\n };\n _this.refreshData(crudArgs);\n }\n });\n }\n };\n Crud.prototype.saveEvent = function (eventData, action) {\n var _this = this;\n if (this.parent.eventSettings.allowEditing && !this.parent.activeViewOptions.readonly) {\n if (this.parent.currentAction !== 'EditFollowingEvents' && !this.isBlockEvent(eventData)\n && this.parent.eventBase.isBlockRange(eventData)) {\n this.parent.quickPopup.openValidationError('blockAlert', eventData);\n this.parent.crudModule.crudObj.isCrudAction = false;\n return;\n }\n var updateEvents = (eventData instanceof Array) ? eventData : [eventData];\n if (updateEvents.length === 0) {\n return;\n }\n this.parent.currentAction = action;\n if (action) {\n switch (action) {\n case 'Save':\n this.processSave(eventData);\n break;\n case 'EditOccurrence':\n this.processOccurrences(eventData, action);\n break;\n case 'EditFollowingEvents':\n this.processFollowSeries(eventData, action);\n break;\n case 'EditSeries':\n this.processEntireSeries(eventData, action);\n break;\n }\n }\n else {\n var args = {\n requestType: 'eventChange', cancel: false, data: eventData,\n addedRecords: [], changedRecords: updateEvents, deletedRecords: []\n };\n this.parent.trigger(events.actionBegin, args, function (saveArgs) {\n if (!saveArgs.cancel) {\n var promise = void 0;\n var fields = _this.parent.eventFields;\n var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n if (saveArgs.changedRecords instanceof Array) {\n for (var _i = 0, _a = saveArgs.changedRecords; _i < _a.length; _i++) {\n var event_3 = _a[_i];\n event_3 = _this.parent.eventBase.updateEventDateTime(event_3);\n var eventData_2 = extend({}, _this.parent.eventBase.processTimezone(event_3, true), null, true);\n editParams.changedRecords.push(eventData_2);\n }\n promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());\n }\n else {\n var event_4 = _this.parent.eventBase.processTimezone(saveArgs.changedRecords, true);\n editParams.changedRecords.push(event_4);\n promise = _this.parent.dataModule.dataManager.update(fields.id, event_4, _this.getTable(), _this.getQuery());\n }\n var crudArgs = {\n requestType: 'eventChanged', cancel: false,\n data: saveArgs.changedRecords, promise: promise, editParams: editParams\n };\n _this.refreshData(crudArgs);\n }\n });\n }\n }\n };\n Crud.prototype.deleteEvent = function (eventData, action) {\n var _this = this;\n if (this.parent.eventSettings.allowDeleting && !this.parent.activeViewOptions.readonly) {\n this.parent.currentAction = action;\n var deleteEvents = [];\n if (typeof eventData === 'string' || typeof eventData === 'number') {\n deleteEvents = this.parent.eventsData.filter(function (eventObj) {\n return eventObj[_this.parent.eventFields.id] === eventData;\n });\n }\n else {\n deleteEvents = (eventData instanceof Array ? eventData : [eventData]);\n }\n if (deleteEvents.length === 0) {\n return;\n }\n if (action) {\n switch (action) {\n case 'Delete':\n this.processDelete(deleteEvents);\n break;\n case 'DeleteOccurrence':\n this.processOccurrences(deleteEvents, action);\n break;\n case 'DeleteFollowingEvents':\n this.processFollowSeries(deleteEvents, action);\n break;\n case 'DeleteSeries':\n this.processEntireSeries(deleteEvents, action);\n break;\n }\n }\n else {\n var args = {\n requestType: 'eventRemove', cancel: false, data: eventData,\n addedRecords: [], changedRecords: [], deletedRecords: deleteEvents\n };\n this.parent.trigger(events.actionBegin, args, function (deleteArgs) {\n if (!deleteArgs.cancel) {\n var promise = void 0;\n var fields = _this.parent.eventFields;\n var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n if (deleteArgs.deletedRecords.length > 1) {\n editParams.deletedRecords = editParams.deletedRecords.concat(deleteArgs.deletedRecords);\n promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());\n }\n else {\n editParams.deletedRecords.push(deleteArgs.deletedRecords[0]);\n promise = _this.parent.dataModule.dataManager.remove(fields.id, deleteArgs.deletedRecords[0], _this.getTable(), _this.getQuery());\n }\n _this.parent.eventBase.selectWorkCellByTime(deleteArgs.deletedRecords);\n var crudArgs = {\n requestType: 'eventRemoved', cancel: false,\n data: deleteArgs.deletedRecords, promise: promise, editParams: editParams\n };\n _this.refreshData(crudArgs);\n }\n });\n }\n }\n };\n Crud.prototype.processOccurrences = function (eventData, action) {\n var _this = this;\n var occurrenceData = [];\n var isDeletedRecords = false;\n if (eventData instanceof Array) {\n for (var _i = 0, eventData_3 = eventData; _i < eventData_3.length; _i++) {\n var event_5 = eventData_3[_i];\n occurrenceData.push({ occurrence: event_5, parent: this.getParentEvent(event_5) });\n }\n }\n else {\n occurrenceData = { occurrence: eventData, parent: this.getParentEvent(eventData) };\n }\n var updateEvents = (eventData instanceof Array) ? eventData : [eventData];\n var args = {\n requestType: action === 'EditOccurrence' ? 'eventChange' : 'eventRemove', cancel: false,\n addedRecords: [], changedRecords: updateEvents, deletedRecords: []\n };\n args.data = occurrenceData;\n this.parent.trigger(events.actionBegin, args, function (occurrenceArgs) {\n if (!occurrenceArgs.cancel) {\n var fields = _this.parent.eventFields;\n var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var occurrenceEvents = (occurrenceData instanceof Array ? occurrenceData : [occurrenceData]);\n var _loop_2 = function (a, count) {\n var childEvent = occurrenceArgs.changedRecords[parseInt(a.toString(), 10)];\n var parentEvent = occurrenceEvents[parseInt(a.toString(), 10)].parent;\n var parentException = parentEvent[fields.recurrenceException];\n var editedData = void 0;\n var exceptionDate = void 0;\n switch (action) {\n case 'EditOccurrence':\n editedData = _this.parent.eventsProcessed.filter(function (event) { return event.Guid === childEvent.Guid; })[0];\n exceptionDate = _this.excludeDateCheck(editedData[fields.startTime], parentException);\n if (exceptionDate !== parentEvent[fields.recurrenceException]) {\n parentEvent[fields.recurrenceException] = exceptionDate;\n childEvent[fields.recurrenceException] = getRecurrenceStringFromDate(editedData[fields.startTime]);\n childEvent[fields.recurrenceID] = parentEvent[fields.id];\n childEvent[fields.followingID] = null;\n editParams.changedRecords.push(_this.parent.eventBase.processTimezone(parentEvent, true));\n editParams.addedRecords.push(_this.parent.eventBase.processTimezone(childEvent, true));\n }\n else {\n editParams.changedRecords.push(_this.parent.eventBase.processTimezone(childEvent, true));\n }\n break;\n case 'DeleteOccurrence':\n if (!childEvent[fields.recurrenceException]) {\n parentEvent[fields.recurrenceException] =\n _this.excludeDateCheck(childEvent[fields.startTime], parentException);\n editParams.changedRecords.push(_this.parent.eventBase.processTimezone(parentEvent, true));\n }\n if (childEvent[fields.id] !== parentEvent[fields.id]) {\n editParams.deletedRecords.push(childEvent);\n isDeletedRecords = true;\n }\n break;\n }\n };\n for (var a = 0, count = occurrenceArgs.changedRecords.length; a < count; a++) {\n _loop_2(a, count);\n }\n var promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());\n _this.parent.eventBase.selectWorkCellByTime(occurrenceArgs.changedRecords);\n var crudArgs = {\n requestType: action === 'EditOccurrence' ? 'eventChanged' : 'eventRemoved',\n cancel: false, data: isDeletedRecords ? occurrenceArgs.deletedRecords : occurrenceArgs.changedRecords,\n promise: promise, editParams: editParams\n };\n _this.refreshData(crudArgs);\n }\n });\n };\n Crud.prototype.processFollowSeries = function (eventData, action) {\n var _this = this;\n var followData = [];\n if (eventData instanceof Array) {\n for (var _i = 0, eventData_4 = eventData; _i < eventData_4.length; _i++) {\n var event_6 = eventData_4[_i];\n followData.push({ occurrence: event_6, parent: this.getParentEvent(event_6) });\n }\n }\n else {\n followData = { occurrence: eventData, parent: this.getParentEvent(eventData) };\n }\n var updateFollowEvents = (eventData instanceof Array) ? eventData : [eventData];\n var args = {\n requestType: action === 'EditFollowingEvents' ? 'eventChange' : 'eventRemove', cancel: false,\n addedRecords: [], changedRecords: updateFollowEvents, deletedRecords: []\n };\n args.data = followData;\n this.parent.trigger(events.actionBegin, args, function (followArgs) {\n if (!followArgs.cancel) {\n var fields_1 = _this.parent.eventFields;\n var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var followEvents = followData instanceof Array ? followData : [followData];\n var _loop_3 = function (a, count) {\n var childEvent = followArgs.changedRecords[parseInt(a.toString(), 10)];\n var parentEvent = followEvents[parseInt(a.toString(), 10)].parent;\n var followData_1 = _this.parent.eventBase.getEventCollections(parentEvent, childEvent);\n var isSpanned = void 0;\n switch (action) {\n case 'EditFollowingEvents':\n _this.processRecurrenceRule(parentEvent, childEvent);\n isSpanned = !_this.parent.eventBase.isFollowingEvent(parentEvent, childEvent);\n childEvent[fields_1.followingID] = isSpanned ? null : parentEvent[fields_1.id];\n childEvent[fields_1.recurrenceID] = null;\n editParams.addedRecords.push(_this.parent.eventBase.processTimezone(childEvent, true));\n editParams.changedRecords.push(_this.parent.eventBase.processTimezone(parentEvent, true));\n if (!_this.parent.uiStateValues.isIgnoreOccurrence) {\n childEvent[fields_1.recurrenceException] = null;\n if (followData_1.occurrence.length > 0) {\n var rule = followData_1.occurrence.slice(-1)[0][fields_1.recurrenceRule];\n if (rule.indexOf('COUNT') === -1) {\n childEvent[fields_1.recurrenceRule] = rule;\n }\n }\n if (followData_1.follow.length > 0) {\n childEvent[fields_1.recurrenceRule] = followData_1.follow.slice(-1)[0][fields_1.recurrenceRule];\n editParams.deletedRecords = editParams.deletedRecords.concat(followData_1.follow);\n }\n if (isSpanned) {\n followData_1.occurrence = followData_1.occurrence.filter(function (eventObj) {\n return eventObj[fields_1.recurrenceID] === childEvent[fields_1.id];\n });\n }\n editParams.deletedRecords = editParams.deletedRecords.concat(followData_1.occurrence);\n }\n break;\n case 'DeleteFollowingEvents':\n _this.processRecurrenceRule(parentEvent, childEvent[fields_1.startTime]);\n editParams.changedRecords.push(_this.parent.eventBase.processTimezone(parentEvent, true));\n editParams.deletedRecords = editParams.deletedRecords.concat(followData_1.occurrence).concat(followData_1.follow);\n break;\n }\n };\n for (var a = 0, count = followArgs.changedRecords.length; a < count; a++) {\n _loop_3(a, count);\n }\n var promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields_1.id, _this.getTable(), _this.getQuery());\n _this.parent.eventBase.selectWorkCellByTime(followArgs.changedRecords);\n var crudArgs = {\n requestType: action === 'EditFollowingEvents' ? 'eventChanged' : 'eventRemoved',\n cancel: false, data: followArgs.changedRecords, promise: promise, editParams: editParams\n };\n _this.refreshData(crudArgs);\n }\n });\n };\n Crud.prototype.processEntireSeries = function (eventData, action) {\n var _this = this;\n var seriesData = [];\n var isDeletedRecords = false;\n if (eventData instanceof Array) {\n for (var _i = 0, eventData_5 = eventData; _i < eventData_5.length; _i++) {\n var event_7 = eventData_5[_i];\n seriesData.push(this.getParentEvent(event_7, true));\n }\n }\n else {\n seriesData = this.getParentEvent(eventData, true);\n }\n var updateSeriesEvents = (eventData instanceof Array) ? eventData : [eventData];\n var args = {\n requestType: action === 'EditSeries' ? 'eventChange' : 'eventRemove', cancel: false,\n addedRecords: [], changedRecords: updateSeriesEvents, deletedRecords: []\n };\n args.data = seriesData;\n this.parent.trigger(events.actionBegin, args, function (seriesArgs) {\n if (!seriesArgs.cancel) {\n var fields_2 = _this.parent.eventFields;\n var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var seriesEvents = seriesData instanceof Array ? seriesData : [seriesData];\n var _loop_4 = function (a, count) {\n var childEvent = seriesArgs.changedRecords[parseInt(a.toString(), 10)];\n var parentEvent = seriesEvents[parseInt(a.toString(), 10)];\n var eventCollections = _this.parent.eventBase.getEventCollections(parentEvent);\n var deletedEvents = eventCollections.follow.concat(eventCollections.occurrence);\n switch (action) {\n case 'EditSeries':\n childEvent[fields_2.id] = parentEvent[fields_2.id];\n childEvent[fields_2.recurrenceID] = null;\n childEvent[fields_2.followingID] = null;\n if (_this.parent.uiStateValues.isIgnoreOccurrence && childEvent[fields_2.recurrenceException]) {\n var originalParent = _this.parent.eventsData.filter(function (eventObj) {\n return eventObj[fields_2.id] === childEvent[fields_2.id];\n });\n if (originalParent.length > 0) {\n childEvent[fields_2.recurrenceRule] = originalParent[0][fields_2.recurrenceRule];\n }\n }\n else {\n childEvent[fields_2.recurrenceException] = null;\n editParams.deletedRecords = editParams.deletedRecords.concat(deletedEvents);\n }\n editParams.changedRecords.push(_this.parent.eventBase.processTimezone(childEvent, true));\n _this.parent.uiStateValues.isIgnoreOccurrence = false;\n break;\n case 'DeleteSeries':\n editParams.deletedRecords = editParams.deletedRecords.concat(deletedEvents.concat(parentEvent));\n isDeletedRecords = true;\n break;\n }\n };\n for (var a = 0, count = seriesArgs.changedRecords.length; a < count; a++) {\n _loop_4(a, count);\n }\n var promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields_2.id, _this.getTable(), _this.getQuery());\n _this.parent.eventBase.selectWorkCellByTime(seriesArgs.changedRecords);\n var crudArgs = {\n requestType: action === 'EditSeries' ? 'eventChanged' : 'eventRemoved',\n cancel: false, data: isDeletedRecords ? seriesArgs.deletedRecords : seriesArgs.changedRecords,\n promise: promise, editParams: editParams\n };\n _this.refreshData(crudArgs);\n }\n });\n };\n Crud.prototype.processDelete = function (eventData) {\n var _this = this;\n var deleteData = [];\n for (var _i = 0, eventData_6 = eventData; _i < eventData_6.length; _i++) {\n var eventObj = eventData_6[_i];\n if (eventObj[this.parent.eventFields.recurrenceRule]) {\n deleteData.push({ occurrence: eventObj, parent: this.getParentEvent(eventObj) });\n }\n else {\n deleteData.push(eventObj);\n }\n }\n var args = {\n requestType: 'eventRemove', cancel: false,\n addedRecords: [], changedRecords: [], deletedRecords: eventData\n };\n args.data = deleteData;\n this.parent.trigger(events.actionBegin, args, function (deleteArgs) {\n if (!deleteArgs.cancel) {\n var fields_3 = _this.parent.eventFields;\n var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var _loop_5 = function (a, count) {\n var isDelete = isNullOrUndefined(deleteArgs.deletedRecords[parseInt(a.toString(), 10)][_this.parent.eventFields.recurrenceRule]);\n if (!isDelete) {\n var parentEvent_1 = deleteData[parseInt(a.toString(), 10)].parent;\n var isEdited = editParams.changedRecords.filter(function (obj) {\n return obj[fields_3.id] === parentEvent_1[fields_3.id];\n });\n var editedDate = deleteArgs.deletedRecords[parseInt(a.toString(), 10)][fields_3.startTime];\n if (isEdited.length > 0) {\n var editedData = isEdited[0];\n editedData[fields_3.recurrenceException] =\n _this.excludeDateCheck(editedDate, editedData[fields_3.recurrenceException]);\n }\n else {\n parentEvent_1[fields_3.recurrenceException] =\n _this.excludeDateCheck(editedDate, parentEvent_1[fields_3.recurrenceException]);\n }\n if (isEdited.length === 0) {\n editParams.changedRecords.push(_this.parent.eventBase.processTimezone(parentEvent_1, true));\n }\n isDelete = deleteArgs.deletedRecords[parseInt(a.toString(), 10)][fields_3.id] !== parentEvent_1[fields_3.id];\n }\n if (isDelete) {\n editParams.deletedRecords.push(deleteArgs.deletedRecords[parseInt(a.toString(), 10)]);\n }\n };\n for (var a = 0, count = deleteArgs.deletedRecords.length; a < count; a++) {\n _loop_5(a, count);\n }\n var promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields_3.id, _this.getTable(), _this.getQuery());\n var crudArgs = {\n requestType: 'eventRemoved', cancel: false, data: deleteArgs.deletedRecords, promise: promise, editParams: editParams\n };\n _this.refreshData(crudArgs);\n }\n });\n };\n Crud.prototype.processSave = function (data) {\n var _this = this;\n var eventData = (data instanceof Array) ? data : [data];\n var editData = [];\n for (var _i = 0, eventData_7 = eventData; _i < eventData_7.length; _i++) {\n var eventObj = eventData_7[_i];\n if (eventObj[this.parent.eventFields.recurrenceRule]) {\n editData.push({ occurrence: eventObj, parent: this.getParentEvent(eventObj) });\n }\n else {\n editData.push(eventObj);\n }\n }\n var args = { requestType: 'eventChange', cancel: false, addedRecords: [], changedRecords: eventData, deletedRecords: [] };\n args.data = editData;\n this.parent.trigger(events.actionBegin, args, function (editArgs) {\n if (!editArgs.cancel) {\n var fields = _this.parent.eventFields;\n var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n for (var _i = 0, _a = editArgs.changedRecords; _i < _a.length; _i++) {\n var record = _a[_i];\n if (!isNullOrUndefined(record[fields.recurrenceRule]) && isNullOrUndefined(record[fields.recurrenceException])) {\n var exceptionString = getRecurrenceStringFromDate(record[fields.startTime]);\n var parentEle = _this.getParentEvent(record);\n parentEle[fields.recurrenceException] = isNullOrUndefined(parentEle[fields.recurrenceException]) ?\n exceptionString : parentEle[fields.recurrenceException].concat(',' + exceptionString);\n record[fields.id] = _this.parent.getEventMaxID();\n record[fields.recurrenceException] = exceptionString;\n editParams.addedRecords.push(_this.parent.eventBase.processTimezone(record, true));\n editParams.changedRecords.push(_this.parent.eventBase.processTimezone(parentEle, true));\n }\n else {\n editParams.changedRecords.push(_this.parent.eventBase.processTimezone(record, true));\n }\n }\n var promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());\n var crudArgs = { requestType: 'eventChanged', cancel: false, data: editArgs.changedRecords, promise: promise, editParams: editParams };\n _this.refreshData(crudArgs);\n }\n });\n };\n Crud.prototype.getParentEvent = function (event, isParent) {\n if (isParent === void 0) { isParent = false; }\n var parentEvent = this.parent.eventBase.getParentEvent(event, isParent) || event;\n if (parentEvent[this.parent.eventFields.startTimezone] || parentEvent[this.parent.eventFields.endTimezone]) {\n this.parent.eventBase.timezoneConvert(parentEvent);\n }\n return parentEvent;\n };\n Crud.prototype.excludeDateCheck = function (eventStartTime, exceptionDateList) {\n var exDate = getRecurrenceStringFromDate(eventStartTime);\n if (!isNullOrUndefined(exceptionDateList)) {\n if (exceptionDateList.indexOf(exDate) === -1) {\n exceptionDateList = !(isNullOrUndefined(exceptionDateList)) ? exceptionDateList + ',' + exDate : exDate;\n }\n }\n else {\n exceptionDateList = exDate;\n }\n return exceptionDateList;\n };\n Crud.prototype.processRecurrenceRule = function (parentEvent, followEvent) {\n var fields = this.parent.eventFields;\n var recurrenceRule = parentEvent[fields.recurrenceRule];\n var endDate;\n if (followEvent instanceof Date) {\n endDate = new Date(+followEvent);\n }\n else {\n endDate = new Date(+followEvent[fields.startTime]);\n var newRecurrenceRule = followEvent[fields.recurrenceRule];\n if (newRecurrenceRule) {\n var startDate = parentEvent[fields.startTime];\n var ruleException = (this.parent.currentAction === 'DeleteFollowingEvents') ? followEvent[fields.recurrenceException] : null;\n var dateCollection = generate(startDate, newRecurrenceRule, ruleException, this.parent.activeViewOptions.firstDayOfWeek);\n var untilDate = new Date(dateCollection.slice(-1)[0]);\n untilDate.setHours(endDate.getHours(), endDate.getMinutes(), endDate.getSeconds());\n endDate.setHours(startDate.getHours(), startDate.getMinutes(), startDate.getSeconds());\n followEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(newRecurrenceRule, new Date(+untilDate), false);\n }\n }\n parentEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(recurrenceRule, util.addDays(new Date(endDate.getTime()), -1), true);\n };\n Crud.prototype.getUpdatedRecurrenceRule = function (recurrenceRule, untilDate, isParent) {\n var splitRule = recurrenceRule.split(';');\n var updatedRule = '';\n for (var _i = 0, splitRule_1 = splitRule; _i < splitRule_1.length; _i++) {\n var rule = splitRule_1[_i];\n if (rule !== '') {\n var ruleKey = rule.split('=')[0];\n var ruleValue = rule.split('=')[1];\n if (ruleKey === 'COUNT' || ruleKey === 'UNTIL') {\n ruleValue = getRecurrenceStringFromDate(untilDate);\n rule = rule.replace(rule, 'UNTIL=' + ruleValue);\n }\n updatedRule += rule + ';';\n }\n }\n if (isParent && updatedRule.indexOf('UNTIL') === -1) {\n updatedRule += 'UNTIL=' + getRecurrenceStringFromDate(untilDate);\n }\n return updatedRule;\n };\n Crud.prototype.isBlockEvent = function (eventData) {\n var eventCollection = (eventData instanceof Array) ? eventData : [eventData];\n var value = false;\n for (var _i = 0, eventCollection_1 = eventCollection; _i < eventCollection_1.length; _i++) {\n var event_8 = eventCollection_1[_i];\n value = event_8[this.parent.eventFields.isBlock] || false;\n }\n return value;\n };\n /**\n * To destroy the crud module.\n *\n * @returns {void}\n * @private\n */\n Crud.prototype.destroy = function () {\n this.crudObj = null;\n this.parent = null;\n };\n return Crud;\n}());\nexport { Crud };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { KeyboardEvents, closest, EventHandler, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport { cellSelect } from '../base/constant';\n/**\n * Keyboard interaction\n */\nvar KeyboardInteraction = /** @class */ (function () {\n function KeyboardInteraction(parent) {\n this.selectedCells = [];\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDownArrow: 'shift+downarrow',\n shiftUpArrow: 'shift+uparrow',\n shiftRightArrow: 'shift+rightarrow',\n shiftLeftArrow: 'shift+leftarrow',\n ctrlLeftArrow: 'ctrl+leftarrow',\n ctrlRightArrow: 'ctrl+rightarrow',\n altOne: 'alt+1',\n altTwo: 'alt+2',\n altThree: 'alt+3',\n altFour: 'alt+4',\n altFive: 'alt+5',\n altSix: 'alt+6',\n altSeven: 'alt+7',\n altEight: 'alt+8',\n altNine: 'alt+9',\n enter: 'enter',\n escape: 'escape',\n delete: 'delete',\n backspace: 'backspace',\n home: 'home',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n tab: 'tab',\n shiftTab: 'shift+tab',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n ctrlShiftLeftArrow: 'ctrl+shift+leftarrow',\n ctrlShiftRightArrow: 'ctrl+shift+rightarrow'\n };\n this.parent = parent;\n this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;\n this.keyboardModule = new KeyboardEvents(this.parent.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.addEventListener();\n }\n KeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'downArrow':\n case 'shiftDownArrow':\n this.processDown(e, e.shiftKey);\n break;\n case 'upArrow':\n case 'shiftUpArrow':\n this.processUp(e, e.shiftKey);\n break;\n case 'leftArrow':\n case 'shiftLeftArrow':\n this.processLeft(e, e.shiftKey);\n break;\n case 'rightArrow':\n case 'shiftRightArrow':\n this.processRight(e, e.shiftKey);\n break;\n case 'ctrlLeftArrow':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-prev button').focus();\n }\n break;\n case 'ctrlRightArrow':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-next button').focus();\n }\n break;\n case 'altOne':\n case 'altTwo':\n case 'altThree':\n case 'altFour':\n case 'altFive':\n case 'altSix':\n case 'altSeven':\n case 'altEight':\n case 'altNine':\n this.processViewNavigation(e);\n break;\n case 'enter':\n this.processEnter(e);\n break;\n case 'home':\n this.focusFirstCell();\n break;\n case 'tab':\n case 'shiftTab':\n this.processTab(e, e.shiftKey);\n break;\n case 'delete':\n case 'backspace':\n this.processDelete(e);\n break;\n case 'ctrlShiftUpArrow':\n case 'ctrlShiftDownArrow':\n case 'ctrlShiftLeftArrow':\n case 'ctrlShiftRightArrow':\n this.processCtrlShiftNavigationArrows(e);\n break;\n case 'escape':\n this.processEscape(e);\n break;\n case 'fTwelve':\n if (this.parent.allowInline && this.parent.inlineModule) {\n e.preventDefault();\n this.processFTwelve(e);\n }\n break;\n }\n };\n KeyboardInteraction.prototype.processFTwelve = function (e) {\n var target = e.target;\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n this.parent.activeCellsData = this.getSelectedElements(target);\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e });\n var inlineArgs = {\n element: args.element,\n groupIndex: args.groupIndex, type: 'Cell'\n };\n this.parent.notify(event.inlineClick, inlineArgs);\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n target.click();\n return;\n }\n };\n KeyboardInteraction.prototype.addEventListener = function () {\n this.parent.on(event.cellMouseDown, this.onCellMouseDown, this);\n };\n KeyboardInteraction.prototype.removeEventListener = function () {\n this.parent.off(event.cellMouseDown, this.onCellMouseDown);\n };\n KeyboardInteraction.prototype.onCellMouseDown = function (e) {\n if (e.event.shiftKey) {\n return;\n }\n this.initialTarget = this.getClosestCell(e.event);\n if (this.parent.activeViewOptions.readonly || this.parent.currentView === 'MonthAgenda' || !this.initialTarget) {\n return;\n }\n if (e.event.target.classList.contains(cls.WORK_CELLS_CLASS) && e.event.which !== 3) {\n this.parent.removeSelectedClass();\n EventHandler.add(this.parent.getContentTable(), 'mousemove', this.onMouseSelection, this);\n EventHandler.add(this.parent.getContentTable(), 'mouseup', this.onMoveUp, this);\n }\n if (e.event.target.classList.contains(cls.ALLDAY_CELLS_CLASS) && e.event.which !== 3) {\n this.parent.removeSelectedClass();\n var allDayRow = this.parent.getAllDayRow();\n EventHandler.add(allDayRow, 'mousemove', this.onMouseSelection, this);\n EventHandler.add(allDayRow, 'mouseup', this.onMoveUp, this);\n }\n };\n KeyboardInteraction.prototype.onMouseSelection = function (e) {\n var appointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n addClass(appointments, 'e-allow-select');\n var selectionEdges = this.parent.boundaryValidation(e.pageY, e.pageX);\n if (selectionEdges.bottom || selectionEdges.top || selectionEdges.left || selectionEdges.right) {\n var parent_1 = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var yInBounds = parent_1.offsetHeight <= parent_1.scrollHeight && parent_1.scrollTop >= 0 &&\n parent_1.scrollTop + parent_1.offsetHeight <= parent_1.scrollHeight;\n var xInBounds = parent_1.offsetWidth <= parent_1.scrollWidth && parent_1.scrollLeft >= 0 &&\n parent_1.scrollLeft + parent_1.offsetWidth <= parent_1.scrollWidth;\n if (yInBounds && (selectionEdges.top || selectionEdges.bottom)) {\n parent_1.scrollTop += selectionEdges.top ? -e.target.offsetHeight : e.target.offsetHeight;\n }\n if (xInBounds && (selectionEdges.left || selectionEdges.right)) {\n parent_1.scrollLeft += selectionEdges.left ? -e.target.offsetWidth : e.target.offsetWidth;\n }\n }\n var target = this.getClosestCell(e);\n if (target) {\n this.selectCells(true, target);\n }\n };\n KeyboardInteraction.prototype.getClosestCell = function (e) {\n return closest(e.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS);\n };\n KeyboardInteraction.prototype.onMoveUp = function (e) {\n var _this = this;\n var appointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n removeClass(appointments, 'e-allow-select');\n if (e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.remove(this.parent.getContentTable(), 'mousemove', this.onMouseSelection);\n EventHandler.remove(this.parent.getContentTable(), 'mouseup', this.onMoveUp);\n }\n if (e.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n EventHandler.remove(allDayRow, 'mousemove', this.onMouseSelection);\n EventHandler.remove(allDayRow, 'mouseup', this.onMoveUp);\n }\n if (this.isPreventAction(e)) {\n return;\n }\n var queryStr = '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' + cls.HEADER_CELLS_CLASS;\n var target = closest(e.target, queryStr);\n if (this.parent.currentView === 'TimelineYear' && target.classList.contains(cls.OTHERMONTH_CLASS)) {\n return;\n }\n this.parent.activeCellsData = this.getSelectedElements(target);\n var cellData = {};\n if (this.parent.eventWindow) {\n this.parent.eventWindow.convertToEventData(this.parent.activeCellsData, cellData);\n }\n var selectedCells = this.parent.getSelectedCells();\n var args = {\n data: cellData, element: this.parent.activeCellsData.element, event: e,\n requestType: cellSelect, showQuickPopup: false\n };\n this.parent.trigger(event.select, args, function (selectArgs) {\n var isPopupShow = selectArgs.showQuickPopup || _this.parent.quickInfoOnSelectionEnd;\n if (isPopupShow && selectedCells.length > 1) {\n var cellArgs = extend(_this.parent.activeCellsData, { cancel: false, event: e, name: 'cellClick' });\n _this.parent.notify(event.cellClick, cellArgs);\n }\n });\n };\n KeyboardInteraction.prototype.processEnter = function (e) {\n if ((this.parent.activeViewOptions.readonly && !e.target.classList.contains(cls.APPOINTMENT_CLASS))\n || this.isPreventAction(e)) {\n return;\n }\n if (this.parent.currentView === 'TimelineYear' && e.target.classList.contains(cls.OTHERMONTH_CLASS)) {\n return;\n }\n var target = e.target;\n if (closest(target, '.' + cls.POPUP_WRAPPER_CLASS)) {\n if (target.classList.contains(cls.QUICK_POPUP_EVENT_DETAILS_CLASS) ||\n target.classList.contains(cls.EVENT_CREATE_CLASS) ||\n target.classList.contains(cls.EDIT_EVENT_CLASS) ||\n target.classList.contains(cls.DELETE_EVENT_CLASS) ||\n target.classList.contains(cls.CLOSE_CLASS)) {\n target.click();\n e.preventDefault();\n }\n else if (target.classList.contains(cls.SUBJECT_CLASS)) {\n this.parent.element.querySelector('.' + cls.EVENT_CREATE_CLASS).click();\n e.preventDefault();\n }\n return;\n }\n if (target.classList.contains(cls.RESOURCE_CELLS_CLASS) && target.classList.contains(cls.RESOURCE_PARENT_CLASS)) {\n var resourceIcon = target.querySelector('.' + cls.RESOURCE_TREE_ICON_CLASS);\n if (resourceIcon) {\n resourceIcon.click();\n }\n return;\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n this.parent.activeCellsData = this.getSelectedElements(target);\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e });\n if (this.parent.allowInline) {\n var inlineArgs = {\n element: args.element,\n groupIndex: args.groupIndex, type: 'Cell'\n };\n this.parent.notify(event.inlineClick, inlineArgs);\n }\n else {\n if (this.parent.currentView === 'Year') {\n target.click();\n }\n else {\n this.parent.notify(event.cellClick, args);\n }\n }\n return;\n }\n if (target.classList.contains(cls.INLINE_SUBJECT_CLASS) && this.parent.inlineModule) {\n this.parent.inlineModule.inlineCrudActions(target);\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS) || target.classList.contains(cls.MORE_EVENT_CLOSE_CLASS) ||\n target.classList.contains(cls.ALLDAY_APPOINTMENT_SECTION_CLASS) || target.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n target.click();\n return;\n }\n if (target.classList.contains(cls.MORE_EVENT_HEADER_DATE_CLASS)) {\n this.parent.setProperties({ selectedDate: this.parent.getDateFromElement(target) }, true);\n this.parent.changeView(this.parent.getNavigateView(), e);\n this.processEscape(e);\n return;\n }\n };\n KeyboardInteraction.prototype.getSelectedElements = function (target) {\n var cellDetails;\n if (this.selectedCells.length > 1 && target.classList.contains(cls.SELECTED_CELL_CLASS)) {\n var start = this.parent.getCellDetails(this.selectedCells[0]);\n var end = this.parent.getCellDetails(this.selectedCells.slice(-1)[0]);\n start.endTime = end.endTime;\n start.element = target;\n cellDetails = start;\n }\n else {\n cellDetails = this.parent.getCellDetails(target);\n }\n return cellDetails;\n };\n KeyboardInteraction.prototype.getCells = function (isInverseTable, start, end) {\n var tableEle = this.parent.getContentTable();\n var isTimelineYear = this.parent.currentView === 'TimelineYear';\n var query = isTimelineYear && !isInverseTable ? '.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')' : 'td';\n var cells = [].slice.call(tableEle.querySelectorAll(query));\n var maxRow = tableEle.rows.length;\n var maxColumn = tableEle.rows[0].cells.length;\n if (start && start.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n cells = [].slice.call(allDayRow.cells);\n maxRow = 1;\n maxColumn = allDayRow.cells.length;\n }\n var startIndex = cells.indexOf(start);\n var endIndex = cells.indexOf(end);\n var inverseCells = [];\n if (isInverseTable) {\n for (var i = 0; i < maxColumn; i++) {\n for (var j = 0; j < maxRow; j++) {\n var cell = cells[maxColumn * j + i];\n if (isTimelineYear && cell.classList.contains(cls.OTHERMONTH_CLASS)) {\n continue;\n }\n inverseCells.push(cell);\n }\n }\n startIndex = inverseCells.indexOf(start);\n endIndex = inverseCells.indexOf(end);\n }\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n var sCells = isInverseTable ? inverseCells : cells;\n return sCells.slice(startIndex, endIndex + 1);\n };\n KeyboardInteraction.prototype.focusFirstCell = function () {\n if (this.parent.currentView === 'Agenda') {\n var focusCell = this.parent.getContentTable().querySelector('.' + cls.AGENDA_CELLS_CLASS);\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus();\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (this.parent.activeView.isTimelineView() && this.parent.currentView !== 'TimelineYear') {\n var cell = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS +\n ' tr:not(.' + cls.HIDDEN_CLASS + ') .' + cls.WORK_CELLS_CLASS + ':not(.' + cls.RESOURCE_GROUP_CELLS_CLASS + ')');\n this.selectCells(false, cell);\n }\n else if (this.parent.currentView.indexOf('Year') > -1) {\n var query = '.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')' + ':not(.' + cls.RESOURCE_GROUP_CELLS_CLASS + ')';\n var isVerticalYear = this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.orientation === 'Vertical';\n query += isVerticalYear ? '[data-date=\"' + this.parent.activeView.startDate().getTime() + '\"]' : '';\n this.selectCells(false, this.parent.element.querySelector(query));\n }\n else {\n this.selectCells(false, this.parent.getWorkCellElements()[0]);\n }\n };\n KeyboardInteraction.prototype.isInverseTableSelect = function () {\n return this.parent.activeView.isInverseTableSelect;\n };\n /**\n * Internal method to select cells\n *\n * @param {boolean} isMultiple Accepts to select multiple cells or not\n * @param {HTMLTableCellElement} targetCell Accepts the target cells\n * @returns {void}\n * @private\n */\n KeyboardInteraction.prototype.selectCells = function (isMultiple, targetCell) {\n var _this = this;\n this.parent.removeSelectedClass();\n var target = (targetCell instanceof Array) ? targetCell.slice(-1)[0] : targetCell;\n if (isMultiple) {\n var initialId_1;\n var views_1 = ['Day', 'Week', 'WorkWeek', 'TimelineDay', 'TimelineWeek', 'TimelineWorkWeek', 'TimelineMonth', 'TimelineYear'];\n var args = { element: targetCell, requestType: 'mousemove', allowMultipleRow: true };\n this.parent.inlineModule.removeInlineAppointmentElement();\n this.parent.trigger(event.select, args, function (selectArgs) {\n var allowMultipleRow = (!selectArgs.allowMultipleRow) || (!_this.parent.allowMultiRowSelection);\n if (allowMultipleRow) {\n var isTimelineYear = _this.parent.currentView === 'TimelineYear';\n if (isTimelineYear && _this.parent.activeViewOptions.orientation === 'Horizontal' || _this.parent.currentView === 'Month') {\n var isGroupYear = isTimelineYear && _this.parent.activeViewOptions.group.resources.length > 0;\n target = isGroupYear ? _this.initialTarget :\n _this.initialTarget.parentElement.children[target.cellIndex];\n }\n else if (views_1.indexOf(_this.parent.currentView) > -1) {\n target = target.parentElement.children[_this.initialTarget.cellIndex];\n }\n }\n var selectedCells = _this.getCells(_this.isInverseTableSelect(), _this.initialTarget, target);\n if (_this.parent.activeViewOptions.group.resources.length > 0) {\n initialId_1 = _this.initialTarget.getAttribute('data-group-index');\n var resourceSelectedCells = [];\n for (var _i = 0, selectedCells_1 = selectedCells; _i < selectedCells_1.length; _i++) {\n var cell = selectedCells_1[_i];\n if (cell.getAttribute('data-group-index') === initialId_1) {\n resourceSelectedCells.push(cell);\n }\n }\n selectedCells = resourceSelectedCells;\n }\n if (!_this.parent.allowMultiCellSelection) {\n selectedCells = [_this.initialTarget];\n }\n _this.selectedCells = selectedCells;\n if (selectedCells.length > 2 && !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayCells = _this.getAllDayCells(selectedCells);\n if (_this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceAllDayCells = [];\n for (var _a = 0, allDayCells_1 = allDayCells; _a < allDayCells_1.length; _a++) {\n var cell = allDayCells_1[_a];\n if (cell.getAttribute('data-group-index') === initialId_1) {\n resourceAllDayCells.push(cell);\n }\n }\n allDayCells = resourceAllDayCells;\n }\n selectedCells = selectedCells.concat(allDayCells);\n }\n if ((target.getAttribute('data-group-index') !== initialId_1) && _this.parent.activeViewOptions.group.resources.length > 0) {\n target = _this.selectedCells[_this.selectedCells.length - 1];\n }\n _this.parent.addSelectedClass(selectedCells, target);\n });\n }\n else {\n var args = {\n element: target, requestType: cellSelect\n };\n // activeCellsData is not reset on schedule property changed(group properties)\n // const cellData: Record = {};\n // const cellDetails: CellClickEventArgs = this.parent.getCellDetails(target);\n // if (this.parent.eventWindow && cellDetails) {\n // if (this.parent.activeCellsData.element !== cellDetails.element) {\n // this.parent.activeCellsData = cellDetails;\n // }\n // this.parent.eventWindow.convertToEventData(this.parent.activeCellsData as unknown as Record, cellData);\n // args.data = cellData;\n // }\n this.parent.trigger(event.select, args, function () {\n _this.initialTarget = target;\n _this.selectedCells = [target];\n _this.parent.addSelectedClass([target], target);\n });\n }\n };\n KeyboardInteraction.prototype.selectAppointment = function (isReverse, target) {\n var appointments = this.getAppointmentElements();\n if (appointments.length < 0) {\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n var nextAppEle;\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n var targetIndex = appointments.indexOf(target);\n nextAppEle = appointments[(isReverse ? targetIndex - 1 : targetIndex + 1)];\n }\n else {\n nextAppEle = isReverse ? appointments[appointments.length - 1] : appointments[0];\n }\n if (nextAppEle) {\n this.parent.eventBase.addSelectedAppointments([nextAppEle], true);\n nextAppEle.focus();\n addClass([nextAppEle], cls.AGENDA_SELECTED_CELL);\n }\n };\n KeyboardInteraction.prototype.selectAppointmentElementFromWorkCell = function (isReverse, target) {\n var _this = this;\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.parent.removeSelectedClass();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var appointmentElements_1 = this.getUniqueAppointmentElements();\n var filteredElements_1 = [];\n var selectedDate_1 = this.parent.getDateFromElement(target).getTime();\n var selectedSeriesEvents = this.parent.eventsProcessed.filter(function (eventObject) {\n return (!isReverse ? (eventObject[_this.parent.eventFields.startTime].getTime() >= selectedDate_1) :\n (eventObject[_this.parent.eventFields.startTime].getTime() <= selectedDate_1));\n });\n selectedSeriesEvents.filter(function (event) {\n appointmentElements_1.filter(function (element) {\n if (JSON.stringify(event.Guid) === JSON.stringify(element.getAttribute('data-guid'))) {\n filteredElements_1.push(element);\n }\n });\n });\n if (filteredElements_1.length > 0) {\n var selectedElement = isReverse ? filteredElements_1[filteredElements_1.length - 1] : filteredElements_1[0];\n var focusElements = this.getAppointmentElementsByGuid(selectedElement.getAttribute('data-guid'));\n this.parent.eventBase.addSelectedAppointments(focusElements, true);\n (focusElements[focusElements.length - 1]).focus();\n }\n }\n };\n KeyboardInteraction.prototype.getAllDayCells = function (cells) {\n var allDayRow = this.parent.getAllDayRow();\n if (!allDayRow) {\n return [];\n }\n var startCell = cells[0];\n var endCell = cells[cells.length - 1];\n var start = this.parent.getCellDetails(startCell);\n var end = this.parent.getCellDetails(endCell);\n if (end.endTime.getTime() - start.startTime.getTime() >= util.MS_PER_DAY) {\n var allDayCells = [].slice.call(allDayRow.cells);\n return allDayCells.slice(startCell.cellIndex, endCell.cellIndex + 1);\n }\n return [];\n };\n KeyboardInteraction.prototype.getAppointmentElements = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n };\n KeyboardInteraction.prototype.getAppointmentElementsByGuid = function (guid) {\n return [].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]'));\n };\n KeyboardInteraction.prototype.getUniqueAppointmentElements = function () {\n var appointments = this.getAppointmentElements();\n var appointmentElements = [];\n appointments.map(function (value) { return value.getAttribute('data-guid'); }).filter(function (value, index, self) {\n if (self.indexOf(value) === index) {\n appointmentElements.push(appointments[parseInt(index.toString(), 10)]);\n }\n });\n return appointmentElements;\n };\n KeyboardInteraction.prototype.getWorkCellFromAppointmentElement = function (target) {\n var selectedObject = this.parent.eventBase.getEventByGuid(target.getAttribute('data-guid'));\n return this.parent.eventBase.selectWorkCellByTime([selectedObject]);\n };\n KeyboardInteraction.prototype.processViewNavigation = function (e) {\n var index = parseInt(e.key, 10) - 1;\n if (index < this.parent.views.length) {\n var view = this.parent.viewCollections[parseInt(index.toString(), 10)].option;\n this.parent.changeView(view, e, undefined, index);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-active-view button').focus();\n }\n }\n };\n KeyboardInteraction.prototype.cancelUpDownAction = function (isTimelineYear) {\n var isVerticalYear = isTimelineYear && this.parent.activeViewOptions.orientation === 'Vertical';\n var isGroup = this.parent.activeViewOptions.group.resources.length > 0;\n if (isVerticalYear && isGroup || isTimelineYear && this.initialTarget.classList.contains(cls.OTHERMONTH_CLASS)) {\n return true;\n }\n if (this.parent.activeView.isTimelineView() && !isTimelineYear || this.parent.currentView === 'MonthAgenda') {\n return true;\n }\n return false;\n };\n KeyboardInteraction.prototype.processUp = function (e, isMultiple) {\n var isTimelineYear = this.parent.currentView === 'TimelineYear';\n if (isMultiple && this.cancelUpDownAction(isTimelineYear)) {\n return;\n }\n var target = (e.target);\n var selectedElements = this.parent.getSelectedCells();\n var selectedEventElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n var quickPopupWrapper = this.getQuickPopupElement();\n if (selectedElements.length > 0 && !e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n target = selectedElements[selectedElements.length - 1];\n }\n if (selectedEventElements.length > 0 && !moreEventWrapper.classList.contains(cls.POPUP_OPEN) &&\n !quickPopupWrapper.classList.contains(cls.POPUP_OPEN) &&\n ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.parent.currentView) !== -1) {\n target = this.getWorkCellFromAppointmentElement(selectedEventElements[selectedEventElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n if (!target) {\n return;\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var tableRows = this.parent.getTableRows();\n var curRowIndex = tableRows.indexOf(target.parentElement);\n var targetCell = void 0;\n if (isTimelineYear && isMultiple && this.parent.activeViewOptions.group.resources.length === 0) {\n targetCell = this.isInverseTableSelect() ? this.getVerticalUpDownCell(tableRows, target, curRowIndex, true) :\n this.getHorizontalUpDownCell(tableRows, target, curRowIndex, true);\n }\n if ((curRowIndex > 0 || targetCell) && curRowIndex < tableRows.length) {\n targetCell = targetCell ? targetCell : (tableRows[curRowIndex - 1]).cells[target.cellIndex];\n if (this.parent.currentView === 'Year' && targetCell.classList.contains(cls.OTHERMONTH_CLASS)) {\n if (this.parent.activeView.getStartDate().getTime() < +targetCell.getAttribute('data-date')) {\n targetCell = this.getYearUpDownCell(tableRows, curRowIndex - 1, target.cellIndex, true);\n }\n else {\n return;\n }\n }\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(true, target);\n }\n };\n KeyboardInteraction.prototype.processDown = function (e, isMultiple) {\n var isTimelineYear = this.parent.currentView === 'TimelineYear';\n if (isMultiple && this.cancelUpDownAction(isTimelineYear)) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedCells();\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n var quickPopupWrapper = this.getQuickPopupElement();\n if (selectedCells.length > 0 && !e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n if (selectedElements.length > 0 && !moreEventWrapper.classList.contains(cls.POPUP_OPEN) &&\n !quickPopupWrapper.classList.contains(cls.POPUP_OPEN) &&\n ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.parent.currentView) !== -1) {\n target = this.getWorkCellFromAppointmentElement(selectedElements[selectedElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n var tableRows = this.parent.getTableRows();\n if (!target) {\n return;\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var curRowIndex = tableRows.indexOf(target.parentElement);\n var targetCell = void 0;\n if (isTimelineYear && isMultiple && this.parent.activeViewOptions.group.resources.length === 0) {\n targetCell = this.isInverseTableSelect() ? this.getVerticalUpDownCell(tableRows, target, curRowIndex, false)\n : this.getHorizontalUpDownCell(tableRows, target, curRowIndex, false);\n }\n if (curRowIndex >= 0 && ((curRowIndex < tableRows.length - 1) || targetCell)) {\n targetCell = targetCell ? targetCell : (tableRows[curRowIndex + 1]).cells[target.cellIndex];\n if (this.parent.currentView === 'Year' && targetCell.classList.contains(cls.OTHERMONTH_CLASS)) {\n if (this.parent.activeView.getEndDate().getTime() > +targetCell.getAttribute('data-date')) {\n targetCell = this.getYearUpDownCell(tableRows, curRowIndex + 1, target.cellIndex, false);\n }\n else {\n return;\n }\n }\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(false, target);\n }\n };\n KeyboardInteraction.prototype.getYearUpDownCell = function (tableRows, rowIndex, cellIndex, isUp) {\n while (tableRows[parseInt(rowIndex.toString(), 10)] &&\n tableRows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)].classList.contains(cls.OTHERMONTH_CLASS)) {\n rowIndex = rowIndex + (isUp ? -1 : 1);\n }\n return tableRows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)];\n };\n // eslint-disable-next-line max-len\n KeyboardInteraction.prototype.getHorizontalUpDownCell = function (tableRows, target, curRowIndex, isUp) {\n var row = tableRows[curRowIndex + (isUp ? -1 : 1)];\n var cell = row ? row.cells[target.cellIndex] : target;\n if (cell.classList.contains(cls.OTHERMONTH_CLASS)) {\n var workCell = row.querySelector('.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')');\n var date = new Date(+workCell.getAttribute('data-date'));\n var query = '[data-date=\"' + new Date(date.getFullYear(), date.getMonth() + 1, 0).getTime() + '\"]';\n cell = cell.cellIndex < workCell.cellIndex ? workCell : row.querySelector(query);\n }\n return cell;\n };\n // eslint-disable-next-line max-len\n KeyboardInteraction.prototype.getVerticalUpDownCell = function (tableRows, target, curRowIndex, isUp) {\n var hasRow = isUp && curRowIndex > 0 || !isUp && curRowIndex < tableRows.length - 1;\n var targetCell = hasRow ? tableRows[curRowIndex + (isUp ? -1 : 1)].cells[target.cellIndex] : undefined;\n if (!targetCell || targetCell.classList.contains(cls.OTHERMONTH_CLASS)) {\n var column = tableRows[parseInt(curRowIndex.toString(), 10)].cells[target.cellIndex - (isUp ? 1 : -1)];\n if (column) {\n var dateAttr = +target.getAttribute('data-date') - (isUp ? util.MS_PER_DAY : -util.MS_PER_DAY);\n return this.parent.getContentTable().querySelector('.' + cls.WORK_CELLS_CLASS + '[data-date=\"' + dateAttr + '\"]');\n }\n targetCell = target;\n }\n return targetCell;\n };\n KeyboardInteraction.prototype.processLeftRight = function (target) {\n var tableEle = (this.parent.currentView === 'Year' ? target.closest('tbody') : this.parent.getContentTable());\n var curRowIndex = target.parentNode.sectionRowIndex;\n var key = {\n element: tableEle,\n rowIndex: curRowIndex,\n columnIndex: target.cellIndex,\n maxIndex: tableEle.rows[parseInt(curRowIndex.toString(), 10)].cells.length\n };\n return key;\n };\n KeyboardInteraction.prototype.getQuickPopupElement = function () {\n return (this.parent.isAdaptive ? document.body : this.parent.element).querySelector('.' + cls.POPUP_WRAPPER_CLASS);\n };\n KeyboardInteraction.prototype.isCancelLeftRightAction = function (e, isMultiple, isTimelineYear) {\n var prevent = this.parent.currentView === 'MonthAgenda' || isTimelineYear && this.initialTarget.classList.contains(cls.OTHERMONTH_CLASS);\n if (this.parent.currentView === 'Agenda' || (isMultiple && prevent)) {\n return true;\n }\n if (this.isPreventAction(e) && isMultiple) {\n return true;\n }\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n var quickPopupWrapper = this.getQuickPopupElement();\n if (moreEventWrapper.classList.contains(cls.POPUP_OPEN) || quickPopupWrapper.classList.contains(cls.POPUP_OPEN)) {\n return true;\n }\n return false;\n };\n KeyboardInteraction.prototype.processRight = function (e, isMultiple) {\n var isTimelineYear = this.parent.currentView === 'TimelineYear';\n if (this.isCancelLeftRightAction(e, isMultiple, isTimelineYear)) {\n return;\n }\n var selectedCells = this.parent.getSelectedCells();\n var targetCell;\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\n var target = (e.target);\n if (selectedCells.length > 0 && !target.classList.contains(cls.WORK_CELLS_CLASS) &&\n !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n if (selectedAppointments.length > 0) {\n target = this.getWorkCellFromAppointmentElement(selectedAppointments[selectedAppointments.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (!target) {\n return;\n }\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS) &&\n (e.target).classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target);\n var targetDate = new Date(+target.getAttribute('data-date'));\n var isMonthEnd = this.parent.currentView === 'Year' && targetDate.getTime() === util.lastDateOfMonth(targetDate).getTime();\n if (key.columnIndex >= 0 && key.columnIndex < key.maxIndex - 1 && !isMonthEnd) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex].cells[target.cellIndex + 1], 'right');\n if (isTimelineYear && isMultiple && targetCell.classList.contains(cls.OTHERMONTH_CLASS)) {\n targetCell = this.getTimelineYearTargetCell(key, target, true);\n }\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (key.columnIndex === key.maxIndex - 1 || isMonthEnd) {\n if (!this.isInverseTableSelect() && key.rowIndex < key.element.rows.length - 1 && !isMonthEnd) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex + 1].cells[0], 'right');\n var changeTargetCell = isTimelineYear && isMultiple && targetCell.classList.contains(cls.OTHERMONTH_CLASS);\n targetCell = changeTargetCell ? this.getHorizontalLeftRightCell(key, target, true) : targetCell;\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (!isMultiple) {\n if (isMonthEnd && targetDate.getTime() !== this.parent.activeView.getEndDate().getTime()) {\n this.selectCells(isMultiple, this.parent.element.querySelector(':not(.' + cls.OTHERMONTH_CLASS + ')[data-date=\"' + (targetDate.getTime() + util.MS_PER_DAY) + '\"]'));\n return;\n }\n var rowIndex = this.isInverseTableSelect() ? key.rowIndex : 0;\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n var tableEle = this.parent.getContentTable();\n var cell = isMonthEnd ? tableEle.rows[parseInt(rowIndex.toString(), 10)].querySelector('.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')')\n : tableEle.rows[parseInt(rowIndex.toString(), 10)].cells[0];\n this.selectCells(false, cell);\n }\n }\n }\n else if (target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var curColIndex = target.cellIndex;\n var allDayRow = this.parent.getAllDayRow();\n var maxColIndex = allDayRow.cells.length;\n if (curColIndex >= 0 && curColIndex < maxColIndex - 1) {\n this.selectCells(isMultiple, allDayRow.cells[curColIndex + 1]);\n }\n else if (curColIndex === maxColIndex - 1 && !isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n var allDayRow_1 = this.parent.getAllDayRow();\n this.selectCells(false, allDayRow_1.cells[0]);\n }\n }\n };\n KeyboardInteraction.prototype.processLeft = function (e, isMultiple) {\n var isTimelineYear = this.parent.currentView === 'TimelineYear';\n if (this.isCancelLeftRightAction(e, isMultiple, isTimelineYear)) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedCells();\n var targetCell;\n if (selectedCells.length > 0 && !target.classList.contains(cls.WORK_CELLS_CLASS) &&\n !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n if (selectedElements.length > 0) {\n target = this.getWorkCellFromAppointmentElement(selectedElements[selectedElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (!target) {\n return;\n }\n }\n if ((e.target).classList.contains(cls.WORK_CELLS_CLASS) &&\n target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target);\n var targetDate = new Date(+target.getAttribute('data-date'));\n var isMonthStart = this.parent.currentView === 'Year' && targetDate.getTime() === util.firstDateOfMonth(targetDate).getTime();\n if (key.columnIndex > 0 && key.columnIndex < key.maxIndex && !isMonthStart) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex].cells[target.cellIndex - 1], 'left');\n if (isTimelineYear && isMultiple && targetCell.classList.contains(cls.OTHERMONTH_CLASS)) {\n targetCell = this.getTimelineYearTargetCell(key, target, false);\n }\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (key.columnIndex === 0 || isMonthStart) {\n if (!this.isInverseTableSelect() && key.rowIndex > 0) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex - 1].cells[key.maxIndex - 1], 'left');\n var otherMonthCell = isTimelineYear && isMultiple && targetCell.classList.contains(cls.OTHERMONTH_CLASS);\n targetCell = otherMonthCell ? this.getHorizontalLeftRightCell(key, target, false) : targetCell;\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (!isMultiple) {\n if (isMonthStart && targetDate.getTime() !== this.parent.activeView.getStartDate().getTime()) {\n this.selectCells(isMultiple, this.parent.element.querySelector('[data-date=\"' + (targetDate.getTime() - util.MS_PER_DAY) + '\"]'));\n return;\n }\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n var tableEle = this.parent.getContentTable();\n var rowIndex = this.isInverseTableSelect() ? key.rowIndex : tableEle.rows.length - 1;\n var cell = tableEle.rows[parseInt(rowIndex.toString(), 10)].cells[key.maxIndex - 1];\n if (isMonthStart) {\n var tbody = this.parent.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody');\n cell = tbody.item(tbody.length - 1).querySelector(':not(.' + cls.OTHERMONTH_CLASS + ')[data-date=\"' + this.parent.activeView.getEndDate().getTime() + '\"]');\n }\n this.selectCells(false, cell);\n }\n }\n }\n else if (target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var curColIndex = target.cellIndex;\n var allDayRow = this.parent.getAllDayRow();\n var maxColIndex = allDayRow.cells.length;\n if (curColIndex > 0 && curColIndex < maxColIndex) {\n this.selectCells(isMultiple, allDayRow.cells[curColIndex - 1]);\n }\n else if (curColIndex === 0 && !isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n var allDayRow_2 = this.parent.getAllDayRow();\n this.selectCells(false, allDayRow_2.cells[maxColIndex - 1]);\n }\n }\n };\n KeyboardInteraction.prototype.getTimelineYearTargetCell = function (key, target, isRight) {\n return this.isInverseTableSelect() ? this.getVerticalLeftRightCell(target, isRight) :\n this.getHorizontalLeftRightCell(key, target, isRight);\n };\n KeyboardInteraction.prototype.getHorizontalLeftRightCell = function (key, target, isRight) {\n var row = key.element.rows[target.parentNode.sectionRowIndex + (isRight ? 1 : -1)];\n if (row) {\n var query = isRight ? '.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')'\n : '[data-date=\"' + ((+target.getAttribute('data-date')) - util.MS_PER_DAY) + '\"]';\n return row.querySelector(query);\n }\n return target;\n };\n KeyboardInteraction.prototype.getVerticalLeftRightCell = function (target, isRight) {\n var date = new Date(+target.getAttribute('data-date'));\n var start = new Date(date.getFullYear(), date.getMonth() + (isRight ? 1 : -1), 1);\n var tableEle = this.parent.getContentTable();\n var targetCell = tableEle.querySelector('[data-date=\"' + start.getTime() + '\"]');\n if (targetCell.parentNode.sectionRowIndex > target.parentNode.sectionRowIndex) {\n return targetCell;\n }\n return tableEle.querySelector('[data-date=\"' + new Date(start.getFullYear(), start.getMonth() + 1, 0).getTime() + '\"]');\n };\n KeyboardInteraction.prototype.calculateNextPrevDate = function (currentCell, target, type) {\n var initialId = this.initialTarget.getAttribute('data-group-index');\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.currentView === 'Month') {\n if (currentCell && target && target.getAttribute('data-group-index') !== initialId) {\n var currentDate = this.parent.getDateFromElement(currentCell);\n var nextPrevDate = (type === 'right') ? new Date(currentDate.setDate(currentDate.getDate() + 1))\n : new Date(currentDate.setDate(currentDate.getDate() - 1));\n target = [].slice.call(this.parent.element.querySelectorAll('td[data-date=\"'\n + nextPrevDate.getTime().toString() + '\"]' + '[data-group-index=\"' + initialId + '\"]'))[0];\n }\n }\n return target;\n };\n KeyboardInteraction.prototype.getFocusableElements = function (container) {\n var queryString = 'a[href]:not([tabindex=\"-1\"]),input:not([disabled]):not([tabindex=\"-1\"]),' +\n 'textarea:not([disabled]):not([tabindex=\"-1\"]),button:not([disabled]):not([tabindex=\"-1\"]),' +\n 'select:not([disabled]):not([tabindex=\"-1\"]),[tabindex]:not([tabindex=\"-1\"]),[contentEditable=true]:not([tabindex=\"-1\"])';\n return [].slice.call(container.querySelectorAll(queryString));\n };\n KeyboardInteraction.prototype.processTabOnPopup = function (e, popupElement) {\n var _this = this;\n var focusableElements = this.getFocusableElements(popupElement);\n focusableElements = focusableElements.filter(function (element) {\n var footerEle = _this.parent.element.querySelector('.' + cls.POPUP_FOOTER_CLASS);\n if (footerEle && footerEle.offsetParent) {\n return !(element.classList.contains(cls.EDIT_CLASS) || element.classList.contains(cls.DELETE_CLASS));\n }\n else {\n return !(element.classList.contains(cls.EDIT_EVENT_CLASS) || element.classList.contains(cls.DELETE_EVENT_CLASS));\n }\n });\n var firstEle = focusableElements[0];\n var lastEle = focusableElements[focusableElements.length - 1];\n if (!isNullOrUndefined(lastEle) && document.activeElement === lastEle && !e.shiftKey) {\n e.preventDefault();\n firstEle.focus();\n }\n if (!isNullOrUndefined(firstEle) && document.activeElement === firstEle && e.shiftKey) {\n e.preventDefault();\n lastEle.focus();\n }\n };\n KeyboardInteraction.prototype.processTab = function (e, isReverse) {\n var target = e.target;\n if (target.classList.contains(cls.INLINE_SUBJECT_CLASS) && this.parent.inlineModule) {\n target = target.closest('.e-appointment');\n this.parent.inlineModule.inlineCrudActions(e.target);\n }\n if (this.parent.currentView === 'TimelineYear' && target.classList.contains(cls.OTHERMONTH_CLASS)) {\n if (target.classList.contains(cls.SELECTED_CELL_CLASS)) {\n this.parent.removeSelectedClass();\n }\n return;\n }\n var popupWrapper = closest(target, '.' + cls.POPUP_WRAPPER_CLASS + ',.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (popupWrapper && popupWrapper.classList.contains(cls.POPUP_OPEN)) {\n if (popupWrapper.classList.contains(cls.MORE_POPUP_WRAPPER_CLASS)) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n this.processTabOnPopup(e, popupWrapper);\n return;\n }\n if (target.classList.contains(cls.ROOT)) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n return;\n }\n if (target.classList.contains(cls.RESOURCE_CELLS_CLASS) && this.parent.activeView.isTimelineView()\n && this.parent.activeViewOptions.group.resources.length > 0) {\n var index = parseInt(target.getAttribute('data-group-index'), 10);\n var appSelector = \".\" + cls.APPOINTMENT_CLASS + \"[data-group-index=\\\"\" + (isReverse ? index - 1 : index) + \"\\\"]\";\n var appElements = [].slice.call(this.parent.element.querySelectorAll(appSelector));\n if (appElements.length > 0) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n var focusAppointment = isReverse ? appElements.slice(-1)[0] : appElements[0];\n this.parent.eventBase.addSelectedAppointments([focusAppointment], true);\n focusAppointment.focus();\n e.preventDefault();\n }\n else if (index + 1 === this.parent.resourceBase.lastResourceLevel.length) {\n this.parent.element.focus();\n e.preventDefault();\n }\n else if (this.parent.virtualScrollModule) {\n var virtual = this.parent.element.querySelector('.' + cls.VIRTUAL_TRACK_CLASS);\n var averageRowHeight = Math.round(virtual.offsetHeight / this.parent.resourceBase.expandedResources.length);\n this.parent.element.querySelector('.e-content-wrap').scrollTop = ((isReverse ? index - 1 : index + 1) * averageRowHeight);\n this.parent.virtualScrollModule.virtualScrolling();\n }\n else {\n this.setScrollPosition(index);\n }\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n var appElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n var isTimelineYear = this.parent.currentView === 'TimelineYear';\n var isTimeline = this.parent.activeView.isTimelineView() && !isTimelineYear;\n if ((isTimeline || isTimelineYear && this.parent.activeViewOptions.orientation === 'Vertical') && this.parent.activeViewOptions.group.resources.length > 0) {\n var index = parseInt(target.getAttribute('data-group-index'), 10);\n appElements = [].slice.call(this.parent.element.querySelectorAll(\".\" + cls.APPOINTMENT_CLASS + \"[data-group-index=\\\"\" + index + \"\\\"]\"));\n var resCellSelector = \".\" + cls.RESOURCE_CELLS_CLASS + \"[data-group-index=\\\"\" + (isReverse ? index : index + 1) + \"\\\"]\";\n var resourceCell = this.parent.element.querySelector(resCellSelector);\n if (resourceCell && (isReverse && target.getAttribute('data-guid') === appElements[0].getAttribute('data-guid') ||\n !isReverse && target.getAttribute('data-guid') === appElements.slice(-1)[0].getAttribute('data-guid'))) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (this.parent.virtualScrollModule) {\n resourceCell.focus({ preventScroll: true });\n }\n else {\n resourceCell.focus();\n }\n if (this.parent.activeView.isTimelineView() && this.parent.activeViewOptions.group.resources.length > 0 &&\n isNullOrUndefined(this.parent.virtualScrollModule)) {\n this.setScrollPosition(index);\n }\n e.preventDefault();\n return;\n }\n }\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\n if (selectedAppointments.length > 0) {\n target = selectedAppointments[selectedAppointments.length - 1];\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (!isReverse && target.getAttribute('data-guid') === appElements[appElements.length - 1].getAttribute('data-guid') ||\n isReverse && target.getAttribute('data-guid') === appElements[0].getAttribute('data-guid')) {\n return;\n }\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(isReverse, target);\n e.preventDefault();\n }\n return;\n }\n var selectedCells = this.parent.getSelectedCells();\n if (selectedCells.length > 0 && !target.classList.contains(cls.APPOINTMENT_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n this.selectAppointmentElementFromWorkCell(isReverse, target);\n e.preventDefault();\n return;\n }\n if (target && !target.classList.contains(cls.RESOURCE_CELLS_CLASS) && this.parent.activeView.isTimelineView()\n && this.parent.activeViewOptions.group.resources.length > 0) {\n this.processTabOnResourceCells(target, isReverse);\n }\n };\n KeyboardInteraction.prototype.processDelete = function (e) {\n var activeEle = document.activeElement;\n if (this.parent.currentView === 'MonthAgenda') {\n var selectedEle = this.parent.eventBase.getSelectedEvents().element;\n activeEle = ((selectedEle && isNullOrUndefined(selectedEle.length)) ? selectedEle : selectedEle[0]);\n }\n if (activeEle && activeEle.classList.contains(cls.APPOINTMENT_CLASS)) {\n addClass([activeEle], cls.APPOINTMENT_BORDER);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n if (this.parent.activeViewOptions.readonly || activeEle.classList.contains(cls.READ_ONLY) ||\n !this.parent.eventSettings.allowDeleting) {\n return;\n }\n this.parent.quickPopup.deleteClick(e);\n }\n };\n KeyboardInteraction.prototype.processCtrlShiftNavigationArrows = function (e) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && document.activeElement.classList.contains(cls.APPOINTMENT_CLASS)) {\n var groupIndex = parseInt(document.activeElement.getAttribute('data-group-index'), 10);\n var index = (e.action === 'ctrlShiftLeftArrow' || e.action === 'ctrlShiftUpArrow') ? groupIndex - 1 : groupIndex + 1;\n index = index < 0 ? 0 : index > this.parent.resourceBase.lastResourceLevel.length ?\n this.parent.resourceBase.lastResourceLevel.length : index;\n var eventEle = [];\n while (eventEle.length === 0 && index >= 0 && index <= this.parent.resourceBase.lastResourceLevel.length) {\n eventEle = [].slice.call(this.parent.element.querySelectorAll(\".\" + cls.APPOINTMENT_CLASS + \"[data-group-index=\\\"\" + index + \"\\\"]\"));\n index = (e.action === 'ctrlShiftLeftArrow' || e.action === 'ctrlShiftUpArrow') ? index - 1 : index + 1;\n }\n var nextAppEle = eventEle[0];\n if (nextAppEle) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.parent.eventBase.addSelectedAppointments([nextAppEle], true);\n nextAppEle.focus();\n }\n }\n else if (this.parent.activeViewOptions.group.resources.length > 0 &&\n !document.activeElement.classList.contains(cls.APPOINTMENT_CLASS)) {\n var index = this.parent.resourceBase.renderedResources[0].groupIndex;\n var appSelector = \".\" + cls.APPOINTMENT_CLASS + \"[data-group-index=\\\"\" + index + \"\\\"]\";\n var appElements = [].slice.call(this.parent.element.querySelectorAll(appSelector));\n if (appElements.length > 0) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n var focusAppointment = appElements[0];\n this.parent.eventBase.addSelectedAppointments([focusAppointment], true);\n focusAppointment.focus();\n e.preventDefault();\n }\n }\n };\n KeyboardInteraction.prototype.processEscape = function (event) {\n this.parent.quickPopup.onClosePopup(event);\n this.parent.quickPopup.morePopup.hide();\n if (this.parent.headerModule) {\n this.parent.headerModule.hideHeaderPopup();\n }\n if (this.parent.inlineModule) {\n this.parent.inlineModule.removeInlineAppointmentElement();\n }\n };\n KeyboardInteraction.prototype.isPreventAction = function (e) {\n var target = closest(e.target, '.' + cls.RESOURCE_GROUP_CELLS_CLASS);\n if (this.parent.activeView.isTimelineView() && !isNullOrUndefined(target)) {\n return true;\n }\n return false;\n };\n KeyboardInteraction.prototype.processTabOnResourceCells = function (target, isReverse) {\n var tabElements = [].slice.call(this.parent.element.querySelectorAll('[tabIndex=\"0\"]'));\n var currentTabIndex = tabElements.indexOf(target);\n var nextTabElement = !isReverse ? tabElements[currentTabIndex + 1] : tabElements[currentTabIndex - 1];\n if (nextTabElement && nextTabElement.classList.contains(cls.RESOURCE_CELLS_CLASS)) {\n var groupIndex = parseInt(nextTabElement.getAttribute('data-group-index'), 10);\n if (this.parent.virtualScrollModule) {\n var resColWrap_1 = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n var resCells = [].slice.call(this.parent.element.querySelectorAll('.' + cls.RESOURCE_CELLS_CLASS));\n resCells.forEach(function (element) {\n if (element.getBoundingClientRect().top < resColWrap_1.getBoundingClientRect().top) {\n element.setAttribute('tabindex', '-1');\n }\n });\n }\n else {\n this.setScrollPosition(groupIndex);\n }\n }\n };\n KeyboardInteraction.prototype.setScrollPosition = function (index) {\n var workCell = this.parent.element.querySelector(\".\" + cls.WORK_CELLS_CLASS + \"[data-group-index=\\\"\" + index + \"\\\"]\");\n if (workCell) {\n this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS).scrollTop = workCell.offsetTop;\n }\n };\n /**\n * Get module name.\n *\n * @returns {string} Returns the module name.\n */\n KeyboardInteraction.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * To destroy the keyboard module.\n *\n * @returns {void}\n * @private\n */\n KeyboardInteraction.prototype.destroy = function () {\n this.removeEventListener();\n this.selectedCells = [];\n this.keyboardModule.destroy();\n };\n return KeyboardInteraction;\n}());\nexport { KeyboardInteraction };\n","import { addClass, removeClass, Touch, remove, EventHandler, Browser } from '@syncfusion/ej2-base';\nimport { closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * `touch` module is used to handle touch interactions.\n */\nvar ScheduleTouch = /** @class */ (function () {\n function ScheduleTouch(parent) {\n this.parent = parent;\n this.element = this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS);\n this.touchObj = new Touch(this.element, {\n scroll: this.scrollHandler.bind(this),\n swipe: this.swipeHandler.bind(this),\n tapHold: this.tapHoldHandler.bind(this),\n swipeSettings: { swipeThresholdDistance: 1 }\n });\n EventHandler.add(this.element, 'transitionend', this.onTransitionEnd, this);\n this.touchLeftDirection = this.parent.enableRtl ? 'Right' : 'Left';\n this.touchRightDirection = this.parent.enableRtl ? 'Left' : 'Right';\n }\n ScheduleTouch.prototype.scrollHandler = function (e) {\n if (this.parent.currentView === 'Agenda' || this.parent.uiStateValues.action || !this.parent.allowSwiping ||\n (e.originalEvent && e.originalEvent.target &&\n (e.originalEvent.target.classList.contains(cls.APPOINTMENT_CLASS) ||\n closest(e.originalEvent.target, '.' + cls.APPOINTMENT_CLASS)) && !this.parent.isAdaptive)) {\n return;\n }\n if (!this.timeStampStart) {\n this.timeStampStart = Date.now();\n }\n if (this.element.classList.contains(cls.TRANSLATE_CLASS)) {\n this.onTransitionEnd();\n }\n if (e.scrollDirection === 'Left' || e.scrollDirection === 'Right') {\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var scrollDiv = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (scrollDiv && scrollDiv.scrollWidth > scrollDiv.clientWidth) {\n return;\n }\n else {\n this.isScrollTriggered = true;\n e.originalEvent.preventDefault();\n e.originalEvent.stopPropagation();\n }\n }\n if (e.scrollDirection === this.touchLeftDirection) {\n if (!this.nextPanel) {\n this.renderPanel(cls.NEXT_PANEL_CLASS, 'next');\n this.nextPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime()),\n renderDates: this.parent.activeView.renderDates,\n colLevels: this.parent.activeView.colLevels\n };\n this.setDimensions(this.nextPanel.element);\n }\n var x = this.parent.enableRtl ? e.distanceX : -e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n else if (e.scrollDirection === this.touchRightDirection) {\n var prevWidth = 0;\n if (!this.previousPanel) {\n this.renderPanel(cls.PREVIOUS_PANEL_CLASS, 'previous');\n this.previousPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime()),\n renderDates: this.parent.activeView.renderDates,\n colLevels: this.parent.activeView.colLevels\n };\n this.setDimensions(this.previousPanel.element);\n prevWidth = this.previousPanel.element.offsetWidth;\n }\n var x = this.parent.enableRtl ? prevWidth - e.distanceX : -prevWidth + e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n };\n ScheduleTouch.prototype.swipeHandler = function (e) {\n if (!this.isScrollTriggered || this.parent.uiStateValues.action || !this.parent.allowSwiping) {\n return;\n }\n this.isScrollTriggered = false;\n var swipeDate = e.swipeDirection === 'Left' ?\n this.parent.activeView.renderDates[0] : this.parent.activeView.renderDates.slice(-1)[0];\n if ((e.swipeDirection === 'Left' && swipeDate < this.parent.maxDate) ||\n (e.swipeDirection === 'Right' && swipeDate >= this.parent.minDate)) {\n var time = Date.now() - this.timeStampStart;\n var offsetDist = (e.distanceX * (Browser.isDevice ? 6 : 1.66));\n if (offsetDist > time || (e.distanceX > (this.parent.element.offsetWidth / 2))) {\n this.swapPanels(e.swipeDirection);\n if (offsetDist > time && (e.distanceX > (this.parent.element.offsetWidth / 2))) {\n this.element.style.transitionDuration = (((Browser.isDevice ? e.distanceX : offsetDist) / time) / 10) + 's';\n }\n this.confirmSwipe(e.swipeDirection);\n }\n else {\n this.cancelSwipe();\n }\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionComplete, args);\n }\n else {\n this.cancelSwipe();\n }\n this.timeStampStart = null;\n };\n ScheduleTouch.prototype.tapHoldHandler = function (e) {\n var target = closest(e.originalEvent.target, '.' + cls.APPOINTMENT_CLASS);\n if (!isNullOrUndefined(target) && this.parent.isAdaptive) {\n this.parent.quickPopup.tapHoldEventPopup(e.originalEvent);\n return;\n }\n };\n ScheduleTouch.prototype.renderPanel = function (clsName, nextPrevType) {\n if (!this.currentPanel) {\n this.currentPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime()),\n renderDates: this.parent.activeView.renderDates,\n colLevels: this.parent.activeView.colLevels\n };\n this.setDimensions(this.currentPanel.element);\n }\n else {\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n }\n this.parent.setProperties({ selectedDate: this.parent.activeView.getNextPreviousDate(nextPrevType) }, true);\n if (this.parent.headerModule) {\n this.parent.headerModule.setCalendarDate(this.parent.selectedDate);\n }\n this.parent.activeView.getRenderDates();\n this.parent.activeView.renderLayout(clsName);\n };\n ScheduleTouch.prototype.swapPanels = function (direction) {\n if (direction === this.touchLeftDirection) {\n var temp = this.nextPanel;\n this.nextPanel = this.currentPanel;\n this.currentPanel = temp;\n }\n else {\n var temp = this.previousPanel;\n this.previousPanel = this.currentPanel;\n this.currentPanel = temp;\n }\n };\n ScheduleTouch.prototype.confirmSwipe = function (swipeDirection) {\n var _this = this;\n var previousDate = swipeDirection === this.touchLeftDirection ?\n this.nextPanel.selectedDate : this.previousPanel.selectedDate;\n var args = {\n action: 'date', cancel: false, previousDate: previousDate, currentDate: this.currentPanel.selectedDate\n };\n this.parent.trigger(events.navigating, args, function (navArgs) {\n if (navArgs.cancel) {\n _this.swapPanels(swipeDirection);\n _this.cancelSwipe();\n }\n else {\n _this.parent.activeView.setPanel(_this.currentPanel.element);\n _this.parent.setProperties({ selectedDate: _this.currentPanel.selectedDate }, true);\n var translateX = void 0;\n if (_this.parent.enableRtl) {\n translateX = swipeDirection === _this.touchLeftDirection ?\n (_this.previousPanel ? _this.previousPanel.element.offsetLeft : _this.currentPanel.element.offsetWidth) : 0;\n }\n else {\n translateX = swipeDirection === _this.touchLeftDirection ? -_this.currentPanel.element.offsetLeft : 0;\n }\n _this.parent.activeView.renderDates = _this.currentPanel.renderDates;\n _this.parent.activeView.colLevels = _this.currentPanel.colLevels;\n addClass([_this.element], cls.TRANSLATE_CLASS);\n _this.element.style.transform = 'translatex(' + translateX + 'px)';\n if (_this.parent.headerModule) {\n _this.parent.headerModule.updateDateRange();\n }\n _this.parent.renderTemplates();\n _this.parent.crudModule.refreshDataManager();\n }\n });\n };\n ScheduleTouch.prototype.cancelSwipe = function () {\n this.parent.activeView.setPanel(this.currentPanel.element);\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n this.parent.activeView.renderDates = this.currentPanel.renderDates;\n this.parent.activeView.colLevels = this.currentPanel.colLevels;\n addClass([this.element], cls.TRANSLATE_CLASS);\n var prevWidth = this.previousPanel ? this.previousPanel.element.offsetWidth : 0;\n this.element.style.transform = 'translatex(' + (this.parent.enableRtl ? prevWidth : -this.currentPanel.element.offsetLeft) + 'px)';\n };\n ScheduleTouch.prototype.onTransitionEnd = function () {\n removeClass([this.element], cls.TRANSLATE_CLASS);\n this.element.style.transitionDuration = '';\n this.element.style.transform = '';\n if (this.previousPanel) {\n remove(this.previousPanel.element);\n this.previousPanel = null;\n removeClass([this.currentPanel.element], cls.PREVIOUS_PANEL_CLASS);\n addClass([this.currentPanel.element], cls.CURRENT_PANEL_CLASS);\n }\n if (this.nextPanel) {\n remove(this.nextPanel.element);\n this.nextPanel = null;\n removeClass([this.currentPanel.element], cls.NEXT_PANEL_CLASS);\n addClass([this.currentPanel.element], cls.CURRENT_PANEL_CLASS);\n }\n this.currentPanel = null;\n this.parent.activeView.getPanel().style.width = '';\n };\n ScheduleTouch.prototype.getTranslateX = function (element) {\n var style = window.getComputedStyle(element);\n return new WebKitCSSMatrix(style.webkitTransform).m41;\n };\n ScheduleTouch.prototype.setDimensions = function (element) {\n element.style.width = (this.parent.element.clientWidth) + 'px';\n };\n ScheduleTouch.prototype.resetValues = function () {\n this.currentPanel = null;\n this.previousPanel = null;\n this.nextPanel = null;\n this.timeStampStart = null;\n this.element.style.transform = '';\n this.element.style.transitionDuration = '';\n util.removeChildren(this.element);\n removeClass([this.element], cls.TRANSLATE_CLASS);\n };\n ScheduleTouch.prototype.destroy = function () {\n if (this.touchObj) {\n this.touchObj.destroy();\n this.touchObj = null;\n }\n EventHandler.remove(this.element, 'transitionend', this.onTransitionEnd);\n this.resetValues();\n };\n return ScheduleTouch;\n}());\nexport { ScheduleTouch };\n","import { formatUnit } from '@syncfusion/ej2-base';\nimport { contentReady, uiUpdate, scrollUiUpdate } from '../base/constant';\n/**\n * `Scroll` module\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the scrolling.\n *\n * @param {Schedule} parent Accepts the Schedule instance\n */\n function Scroll(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} Returns the module name.\n * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * Internal method to set the element width\n *\n * @returns {void}\n * @private\n */\n Scroll.prototype.setWidth = function () {\n this.parent.element.style.width = formatUnit(this.parent.width);\n };\n /**\n * Internal method to set the element height\n *\n * @returns {void}\n * @private\n */\n Scroll.prototype.setHeight = function () {\n this.parent.element.style.height = formatUnit(this.parent.height);\n };\n /**\n * Internal method to bind events\n *\n * @returns {void}\n * @private\n */\n Scroll.prototype.addEventListener = function () {\n this.parent.on(contentReady, this.setDimensions, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n };\n /**\n * Internal method to unbind events\n *\n * @returns {void}\n * @private\n */\n Scroll.prototype.removeEventListener = function () {\n this.parent.off(contentReady, this.setDimensions);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n };\n /**\n * Internal method to set the dimensions\n *\n * @returns {void}\n * @private\n */\n Scroll.prototype.setDimensions = function () {\n this.setWidth();\n this.setHeight();\n var data = { cssProperties: this.parent.getCssProperties(), module: this.getModuleName() };\n this.parent.notify(scrollUiUpdate, data);\n };\n /**\n * Internal method to set the dimensions dynamically\n *\n * @returns {void}\n * @private\n */\n Scroll.prototype.onPropertyChanged = function () {\n this.setDimensions();\n };\n /**\n * Destroy the scroll module\n *\n * @returns {void}\n * @private\n */\n Scroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Scroll;\n}());\nexport { Scroll };\n"],"sourceRoot":""}