{"version":3,"sources":["webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/timezone/timezone.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/base/css-constant.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/event-base.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/year.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/drag.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/base/util.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/recurrence-editor/date-generator.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/vertical-view.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/timeline-view.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/resize.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/worksheets.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/worksheet.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/cell-style.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/column.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/row.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/image.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/cell.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/utils.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/decompressor-huffman-tree.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/checksum-calculator.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/compression-reader.js","webpack:///./node_modules/@syncfusion/ej2-file-utils/src/encoding.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/compression-writer.js","webpack:///./node_modules/@syncfusion/ej2-file-utils/src/save.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/zip-archive.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/value-formatter.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/csv-helper.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/blob-helper.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/auto-filters.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/workbook.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/exports/excel-export.js","webpack:///../../../src/mixins/rippleable/index.ts","webpack:///./src/components/loading/Loading.vue?0e92","webpack:///./node_modules/@syncfusion/ej2-schedule/src/common/calendar-util.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/action-base.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/base/constant.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/agenda-base.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/header-renderer.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/scroll.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/touch.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/keyboard.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/data.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/inline-edit.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/popups/form-validator.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/popups/quick-popups.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/popups/event-tooltip.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/recurrence-editor/recurrence-editor.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/popups/event-window.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/virtual-scroll.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/renderer.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/models/work-hours.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/models/time-scale.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/models/quick-info-templates.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/models/header-rows.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/crud.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/actions/work-cells.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/models/field-options.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/models/fields.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/models/event-settings.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/models/group.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/models/resources.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/treeview/treeview.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/base/resource.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/base/schedule.js","webpack:///./node_modules/@syncfusion/ej2-vue-schedule/src/schedule/views.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-schedule/src/schedule/headerrows.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-schedule/src/schedule/schedule.component.js","webpack:///./node_modules/@syncfusion/ej2-vue-schedule/src/schedule/resources.directive.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/month-agenda.js","webpack:///../../../src/mixins/comparable/index.ts","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/month.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-month.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/month.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-view.js","webpack:///../../../src/components/VCheckbox/VCheckbox.ts","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/day.js","webpack:///./src/components/loading/Loading.vue","webpack:///src/components/loading/Loading.vue","webpack:///./src/components/loading/Loading.vue?bd33","webpack:///./src/components/loading/Loading.vue?0280","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/week.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/vertical-view.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/view-base.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-header-row.js","webpack:///./node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/agenda.js","webpack:///../../../src/mixins/selectable/index.ts"],"names":["Timezone","this","timezoneData","getTimezoneData","prototype","offset","date","timezone","localOffset","getTimezoneOffset","convertedDate","Date","toLocaleString","timeZone","isNaN","getTime","error","convert","fromOffset","toOffset","fromLocalOffset","toLocalOffset","add","remove","removeLocalOffset","getLocalTimezoneName","window","Intl","DateTimeFormat","resolvedOptions","Value","Text","ROOT","RTL","DEVICE_CLASS","MULTI_DRAG","ICON","ENABLE_CLASS","DISABLE_CLASS","TABLE_CONTAINER_CLASS","SCHEDULE_TABLE_CLASS","ALLDAY_CELLS_CLASS","HEADER_POPUP_CLASS","HEADER_CALENDAR_CLASS","ALLDAY_ROW_CLASS","CONTENT_TABLE_CLASS","WORK_CELLS_CLASS","WORK_HOURS_CLASS","POPUP_OPEN","DATE_HEADER_WRAP_CLASS","DATE_HEADER_CONTAINER_CLASS","HEADER_CELLS_CLASS","HEADER_WEEK_CELLS_CLASS","HEADER_MONTH_CELLS_CLASS","HEADER_YEAR_CELLS_CLASS","WORKDAY_CLASS","OTHERMONTH_CLASS","CURRENT_DAY_CLASS","CURRENTDATE_CLASS","CURRENT_PANEL_CLASS","PREVIOUS_PANEL_CLASS","NEXT_PANEL_CLASS","PREVIOUS_DATE_CLASS","NEXT_DATE_CLASS","TRANSLATE_CLASS","LEFT_INDENT_CLASS","LEFT_INDENT_WRAP_CLASS","EVENT_TABLE_CLASS","RESOURCE_LEFT_TD_CLASS","RESOURCE_GROUP_CELLS_CLASS","RESOURCE_TEXT_CLASS","RESOURCE_COLUMN_WRAP_CLASS","RESOURCE_COLUMN_TABLE_CLASS","RESOURCE_CHILD_CLASS","RESOURCE_PARENT_CLASS","RESOURCE_EXPAND_CLASS","RESOURCE_COLLAPSE_CLASS","RESOURCE_TREE_ICON_CLASS","RESOURCE_CELLS_CLASS","TIME_CELLS_WRAP_CLASS","TIME_CELLS_CLASS","TIME_SLOT_CLASS","ALTERNATE_CELLS_CLASS","CURRENT_TIME_CLASS","CURRENT_TIMELINE_CLASS","PREVIOUS_TIMELINE_CLASS","HIDE_CHILDS_CLASS","SCROLL_CONTAINER_CLASS","TIMELINE_WRAPPER_CLASS","APPOINTMENT_WRAPPER_CLASS","DAY_WRAPPER_CLASS","TOOLBAR_CONTAINER","RESOURCE_TOOLBAR_CONTAINER","HEADER_TOOLBAR","RESOURCE_HEADER_TOOLBAR","SELECTED_CELL_CLASS","WEEK_NUMBER_WRAPPER_CLASS","WEEK_NUMBER_CLASS","APPOINTMENT_WRAP_CLASS","WRAPPER_CONTAINER_CLASS","APPOINTMENT_CONTAINER_CLASS","APPOINTMENT_CLASS","BLOCK_APPOINTMENT_CLASS","BLOCK_INDICATOR_CLASS","APPOINTMENT_BORDER","APPOINTMENT_DETAILS","SUBJECT_WRAP","RESOURCE_NAME","APPOINTMENT_TIME","TABLE_WRAP_CLASS","OUTER_TABLE_CLASS","CONTENT_WRAP_CLASS","VIRTUAL_TRACK_CLASS","AGENDA_CELLS_CLASS","AGENDA_CURRENT_DAY_CLASS","AGENDA_SELECTED_CELL","MONTH_HEADER_CLASS","AGENDA_HEADER_CLASS","AGENDA_RESOURCE_CLASS","AGENDA_DATE_CLASS","NAVIGATE_CLASS","DATE_HEADER_CLASS","AGENDA_DAY_BORDER_CLASS","DATE_BORDER_CLASS","AGENDA_DAY_PADDING_CLASS","DATE_TIME_CLASS","DATE_TIME_WRAPPER_CLASS","AGENDA_EMPTY_EVENT_CLASS","AGENDA_NO_EVENT_CLASS","APPOINTMENT_INDICATOR_CLASS","EVENT_INDICATOR_CLASS","EVENT_ICON_UP_CLASS","EVENT_ICON_DOWN_CLASS","EVENT_ICON_LEFT_CLASS","EVENT_ICON_RIGHT_CLASS","EVENT_ACTION_CLASS","NEW_EVENT_CLASS","CLONE_ELEMENT_CLASS","MONTH_CLONE_ELEMENT_CLASS","CLONE_TIME_INDICATOR_CLASS","DRAG_CLONE_CLASS","EVENT_RESIZE_CLASS","RESIZE_CLONE_CLASS","LEFT_RESIZE_HANDLER","RIGHT_RESIZE_HANDLER","TOP_RESIZE_HANDLER","BOTTOM_RESIZE_HANDLER","EVENT_RECURRENCE_ICON_CLASS","EVENT_RECURRENCE_EDIT_ICON_CLASS","HEADER_ROW_CLASS","ALLDAY_APPOINTMENT_WRAPPER_CLASS","ALLDAY_APPOINTMENT_CLASS","EVENT_COUNT_CLASS","ROW_COUNT_WRAPPER_CLASS","ALLDAY_APPOINTMENT_SECTION_CLASS","APPOINTMENT_ROW_EXPAND_CLASS","APPOINTMENT_ROW_COLLAPSE_CLASS","MORE_INDICATOR_CLASS","CELL_POPUP_CLASS","EVENT_POPUP_CLASS","MULTIPLE_EVENT_POPUP_CLASS","POPUP_HEADER_CLASS","POPUP_HEADER_ICON_WRAPPER","POPUP_CONTENT_CLASS","POPUP_FOOTER_CLASS","DATE_TIME_DETAILS_CLASS","RECURRENCE_SUMMARY_CLASS","QUICK_POPUP_EVENT_DETAILS_CLASS","EVENT_CREATE_CLASS","EDIT_EVENT_CLASS","DELETE_EVENT_CLASS","TEXT_ELLIPSIS","MORE_POPUP_WRAPPER_CLASS","MORE_EVENT_POPUP_CLASS","MORE_EVENT_HEADER_CLASS","MORE_EVENT_DATE_HEADER_CLASS","MORE_EVENT_HEADER_DAY_CLASS","MORE_EVENT_HEADER_DATE_CLASS","MORE_EVENT_CLOSE_CLASS","MORE_EVENT_CONTENT_CLASS","MORE_EVENT_WRAPPER_CLASS","QUICK_DIALOG_CLASS","QUICK_DIALOG_OCCURRENCE_CLASS","QUICK_DIALOG_SERIES_CLASS","QUICK_DIALOG_FOLLOWING_EVENTS_CLASS","FOLLOWING_EVENTS_DIALOG","QUICK_DIALOG_DELETE_CLASS","QUICK_DIALOG_CANCEL_CLASS","QUICK_DIALOG_ALERT_OK","QUICK_DIALOG_ALERT_CANCEL","QUICK_DIALOG_ALERT_FOLLOWING","QUICK_DIALOG_ALERT_BTN_CLASS","EVENT_WINDOW_DIALOG_CLASS","FORM_CONTAINER_CLASS","FORM_CLASS","EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS","EVENT_WINDOW_ALL_DAY_CLASS","TIME_ZONE_CLASS","TIME_ZONE_ICON_CLASS","TIME_ZONE_DETAILS_CLASS","EVENT_WINDOW_REPEAT_DIV_CLASS","EVENT_WINDOW_REPEAT_CLASS","EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS","SUBJECT_CLASS","LOCATION_CLASS","LOCATION_ICON_CLASS","LOCATION_DETAILS_CLASS","EVENT_WINDOW_START_END_DIV_CLASS","EVENT_WINDOW_START_CLASS","EVENT_WINDOW_END_CLASS","EVENT_WINDOW_RESOURCES_DIV_CLASS","DESCRIPTION_CLASS","DESCRIPTION_ICON_CLASS","DESCRIPTION_DETAILS_CLASS","EVENT_WINDOW_TIME_ZONE_DIV_CLASS","EVENT_WINDOW_START_TZ_CLASS","EVENT_WINDOW_END_TZ_CLASS","EVENT_WINDOW_BACK_ICON_CLASS","EVENT_WINDOW_SAVE_ICON_CLASS","EVENT_WINDOW_CANCEL_BUTTON_CLASS","EVENT_WINDOW_SAVE_BUTTON_CLASS","EVENT_WINDOW_DIALOG_PARENT_CLASS","EVENT_WINDOW_TITLE_TEXT_CLASS","EVENT_WINDOW_ICON_DISABLE_CLASS","EDIT_CLASS","EDIT_ICON_CLASS","DELETE_CLASS","DELETE_ICON_CLASS","CLOSE_CLASS","CLOSE_ICON_CLASS","ERROR_VALIDATION_CLASS","EVENT_TOOLTIP_ROOT_CLASS","ALLDAY_ROW_ANIMATE_CLASS","TIMESCALE_DISABLE","DISABLE_DATE","HIDDEN_CLASS","DISABLE_DATES","POPUP_WRAPPER_CLASS","POPUP_TABLE_CLASS","RESOURCE_MENU","RESOURCE_MENU_ICON","RESOURCE_LEVEL_TITLE","RESOURCE_TREE","RESOURCE_TREE_POPUP_OVERLAY","RESOURCE_TREE_POPUP","RESOURCE_CLASS","RESOURCE_ICON_CLASS","RESOURCE_DETAILS_CLASS","DATE_TIME_ICON_CLASS","VIRTUAL_SCROLL_CLASS","ICON_DISABLE_CLASS","AUTO_HEIGHT","IGNORE_WHITESPACE","EVENT_TEMPLATE","READ_ONLY","MONTH_HEADER_WRAPPER","INLINE_SUBJECT_CLASS","INLINE_APPOINTMENT_CLASS","SCROLL_HIDDEN","ALLDAY_APPOINTMENT_SCROLL","ALLDAY_APPOINTMENT_AUTO","EventBase","parent","slots","isDoubleTapped","processData","events","timeZonePropChanged","oldTimezone","_this","start","activeView","startDate","end","endDate","fields","eventFields","processed","temp","generateID","resourceCollection","resourceBase","length","id","_loop_1","event_1","this_1","updateEventDateTime","processTimezoneChange","isPrinting","uiStateValues","isPreventTimezone","processTimezone","level","parseInt","toString","field","undefined","recurrenceRule","recurrenceID","crudModule","crudObj","isCrudAction","recurrenceEvent","generateOccurrence","_loop_2","occurrence","app","eventsProcessed","filter","data","startTime","Guid","generateGuid","push","_i","recurrenceEvent_1","concat","events_1","eventData","isBlock","filterEvents","blockData","_a","blockData_1","eventObj","isAllDay","isDifferentDate","endTime","blockProcessed","getProcessedEvents","eventCollection","eventsData","eventCollection_1","event_2","timezonePropertyChange","notify","processedData","timezoneConvert","startTimezone","endTimezone","startTz","endTz","tzModule","event","isReverse","filterBlockEvents","resourceData","eStart","eEnd","activeViewOptions","group","resources","getGroupIndexFromEvent","lastResourceLevel","blockEvents","blockEvents_1","eventObj_1","isDifferentTime","appointments","resourceTdData","predicate","dataModule","getStartEndQuery","json","executeLocal","where","filterEventsByResource","sortByTime","filterEventsByRange","filteredEvents","e","groupOrder","keys","Object","filteredCollection","every","key","Array","indexOf","appointmentsCollection","eventSettings","sortComparer","fieldMappings_1","sort","a","b","d1","d2","customSorting","sortByDateTime","fieldMapping_1","object1","object2","d3","d4","d5","d6","call","splits","split","sortFn","getSmallestMissingNumber","array","large","Math","max","apply","i","splitEventByDay","eventStartTime","eventEndTime","getHours","getMinutes","index","eventLength","count","isSpanned","setHours","getSeconds","splitEvent","dateRender","orgStart","orgEnd","ranges","cStart","slot","currentView","byDate","showWeekend","slotDates","slot_1","s","renderedDates","getRenderedDates","renderedDates_1","firstSlot","startIndex","endIndex","hasBreak","isLeft","isRight","cloneEventObject","dateInRange","availSlot","_b","availSlot_1","slot_2","getSelectedEventElements","target","removeSelectedAppointmentClass","selectedElements","isAlreadySelected","element","getAttribute","elementSelector","focusElements","slice","querySelectorAll","focusElements_1","addSelectedAppointments","getSelectedEvents","eventSelect","elementSelect","selectAppointments","isAlreadyAdded","getEventByGuid","selectedAppointments","getSelectedAppointments","cells","preventFocus","removeSelectedClass","focus","focusElement","isFocused","eventWindow","dialogObject","visible","activeEle","document","activeElement","selectedCell","getSelectedCells","contains","activeEventData","keyboardInteractionModule","activeCellsData","selectCells","selectWorkCellByTime","selectedObject","nearestTime","setMinutes","isAllDayAppointment","targetArea","getAllDayRow","getContentTable","queryString","querySelector","getCellDetails","levelIndex","resource","levelName","idField","name","parentField","getIndexFromResourceId","fieldMapping","isFullDay","spannedEventPlacement","addEventListener","on","appointmentBorderRemove","removeEventListener","off","wireAppointmentEvents","isPreventCrud","isReadOnly","isReadonly","eventClick","isAdaptive","readonly","eventTouchClick","eventDoubleClick","resizeModule","wireResizeEvent","dragAndDropModule","wireDragEvent","setTimeout","preventDefault","renderResizeHandler","spanEvent","allowResizing","resizeEdge","resizeHandler","className","appendChild","enableRtl","isTop","isBottom","classList","ctrlKey","metaKey","which","quickPopup","hide","target_1","selectArgs","requestType","trigger","args","cancel","originalEvent","selectEventArgs","eventClickArgs","quickPopupHide","allowInline","inlineArgs","type","openEditor","currentAction","openRecurrenceAlert","guid","getEventById","replace","c","r","random","v","getEventIDType","getEventMaxID","resourceId","eventId","idType","datas","appIds","map","maxId","reduce","isMultiple","eventObject","obj","viewDate","isMaxCount","eventRule","timeZoneDiff","duration","maxCount","exception","recurrenceException","newTimezone","firstDay","firstDayOfWeek","calendarMode","dates","generatedDates","occurrenceCollection","dates_1","clonedObject","getDSTAdjustedTime","setMilliseconds","followingID","occurDate","eventOffset","getDSTDiff","schOffset","startOffset","occurOffset","getParentEvent","isParent","parentEvent","getFollowingEvent","collection","getEventCollections","followObj","follow","parentObj","childObj","followingCollection","followingEvent","getOccurrenceEvent","collections","fields_1","fieldValue","parentApp","shift","isFollowingEvent","parentStart","childStart","isGuid","isFollowing","fieldKey","dataSource","getOccurrencesByID","parentObject","parentObject_1","event_3","getOccurrencesByRange","event_4","getDeletedOccurrences","recurrenceData","deletedOccurrences","exDateString_1","_loop_3","len","edited","this_2","exDate","childObject","time","applyResourceColor","alpha","alphaColor","color","substring","g","getResourceColor","style","createBlockAppointmentElement","record","resIndex","isResourceEventTemplate","templateElement","eventSubject","subject","default","appointmentWrapper","attrs","eventTemplate","appointmentSubject","sanitize","scheduleId","viewName","eventTemplateName","templateId","templateName","getAppointmentTemplate","setWrapperAttributes","cssClass","setAttribute","getReadonlyAttribute","isBlockRange","isBlockAlert","event_5","dataCol","dataCol_1","getFilterEventsList","query","getSeriesEvents","deleteFutureEditEvents","futureEvents","deleteFutureEvent","deleteFutureEditEventList","delId","followingId","startTimeQuery","and","getEditedOccurrences","delEditedEvents","deleteRecurrenceEventList","deleteFutureEditEventList_1","event_6","delEventQuery","or","filteredDates","firstDate","lastDate","minDate","maxDate","isValidEvent","schedule","isHourRange","startHour","endHour","isSameRange","allDayExpandScroll","dateHeader","indentHeight","headerRows","forEach","tdEle","children","ele","top","offsetHeight","height","expand","updateEventMinimumDuration","startEndHours","eventDuration","minimumEventDuration","tempEnd","tempStart","createEventWrapper","tr","levels","colLevels","col","appointmentWrap","groupIndex","innerWrapper","getPageCoordinates","eventArgs","changedTouches","renderSpannedIcon","iconElement","iconLeft","cloneNode","iconRight","iconTop","iconBottom","unWireEvents","appElements","appElements_1","clearEvents","destroy","__extends","extendStatics","d","setPrototypeOf","__proto__","p","hasOwnProperty","__","constructor","create","EVENT_GAP","_super","YearEvent","isResource","renderAppointments","setDragArea","eventWrappers","eventWrappers_1","wrapper","renderedEvents","yearViewEvents","removeCellHeight","isGroupAdaptive","timelineResourceEvents","timelineYearViewEvents","renderTemplates","months","getMonths","months_1","month","workCells","monthDate","selectedDate","getFullYear","monthStart","calendarUtil","getMonthStartDate","monthEnd","getMonthEndDate","util","isMinMaxDate","eventBase","workCell","cellWidth","getBoundingClientRect","width","cellHeader","eventTable","eventHeight","wrapperCollection","row","td","eventWrapper","getMonth","dayIndex","getDay","isSpannedCollection","orientation","leftValue","rightValue","wrapper_1","getDate","rowTd","cellHeight","dayStart","dayEnd","dayEvents","updateSpannedEvents","overlapIndex","getIndex","Index","availedHeight","moreIndicatorHeight","appArea","renderedAppCount","floor","moreIndicatorCount","isRendered","MoreIndicator","moreIndex","renderMoreIndicator","rowAutoHeight","renderEvent","updateCellHeight","appContainer","tr_1","appTop","offsetTop","overlap","removeAttribute","isLeftRightResize","contentTable","isVerticalScrollbarAvail","offsetWidth","clientWidth","allowVirtualScrolling","renderedResources","renderResourceEvent","removeProperty","conTable_1","tr_2","appWrapper","appWrap","cellIndex","left","offsetLeft","right_1","right","eventDatas","rowIndex","isSpannedEvent","value","state_1","wrap","createEventElement","moreIndicator","getMoreIndicatorElement","rowTr","moreIndicatorClick","localeObj","getConstant","getAnnouncementString","locationEle","location","subjectEle","innerHTML","startTimeEle","getTimeString","endTimeEle","appointmentDetails","eventStart","eventEnd","yearStart","firstMonthOfYear","yearEnd","monthsCount","updateSpannedEventDetails","originalStartTime","originalEndTime","ceil","viewStart","viewEnd","getOverlapEvents","dateStart","dateEnd","appointmentsList","appointments_1","appStart","appEnd","timeCondition","rows","rows_1","firstElementChild","MINUTES_PER_DAY","DragAndDrop","arguments","widthUptoCursorPoint","heightUptoCursorPoint","cursorPointIndex","isHeaderRows","isTimelineDayProcess","widthPerMinute","heightPerMinute","minDiff","isStepDragging","isMorePopupOpened","isAllDayDrag","isMultiSelect","multiData","updatedData","swagData","isAllDayTarget","targetTd","isCursorAhead","abort","clone","isDragScroll","enableTapHold","enableTailMode","cursorAt","dragArea","dragStart","bind","drag","dragStop","enableAutoScroll","helper","dragHelper","queryPositionInfo","dragPosition","dragElement","eventDragArea","setDragActionDefaultValues","actionObj","action","elements","allowMultiDrag","cloneElement","createCloneElement","timeScale","enable","isTimelineView","cursor","originalElement","cloneRight","slotInterval","interval","topValue","contentWrapRight","pageX","offsetParent","pointerEvents","top_1","scrollHeight","cloneBottom","slotCount","eventGuid","dragArgs","selectedData","getSelectedData","excludeSelectors","navigation","timeDelay","scroll","scrollBy","dragEventArgs","parentElement","dragObj","ej2_instances","intDestroy","removeCloneElementClasses","removeCloneElement","actionClass","viewElement","scrollArgs","scrollWidth","daysVariation","option","timelineEventModule","yearEvent","updateOriginalElement","monthEvent","verticalEvent","initializeValues","splitEvents","appEle","Y","pageY","X","abs","calculateMinutesDiff","getDateFromElement","currentDate","targetElement","currentTarget","updateScrollPosition","updateNavigatingPosition","updateDraggingDateTime","renderDates","getStartHour","getEndHour","clearInterval","navigationInterval","scrollInterval","isAllowDrop","cellTemplate","getChangedData","isSpecificResourceEvents","sourceEvent","currentGroupIndex","targetEvent","saveChangedData","currentDate_1","getCurrentTime","setInterval","crtDate","viewNavigation","morePopupEventDragging","getSlotDates","calculateTimelineTime","calculateVerticalDate","calculateVerticalTime","navigationWrapper","outWrapper","item","tarWrapper_1","wrapperClass","elementHeight","getAllDayEventHeight","outerWrapperCls","targetWrapper","navigationType","scrollEdges","bottom","scrollLeft","round","pageXOffset","changeDate","getNextPreviousDate","dragEnd","eventContainer","appendCloneElement","swapDragging","scrollTop","pageYOffset","diffInMinutes","trCollections","colIndex","getEventWrapper","setDate","index_1","virtualScrollModule","updateAllDayEvents","getUpdatedEvent","dynamicWrappers","dynamicWrappers_1","targetCellTime_1","startTimeDiff","index_2","updateMultipleData","getDayIndex","updateEventHeight","parentNode","updateTimePosition","startReferenceDate","endReferenceDate","timeDifference","endTimeDiff","differInDays","day","datesCount","getStartCount","indexGroup","dynamicIndex","getIndexOfDate","filterQuery","appHeight","getHeight","getTopValue","renderSpannedEvents","appWidth","timeDiff","allDayDifference","appointmentElement","createAppointmentElement","res","cell","allDayElement","allDayElement_1","tagName","timeString","updateMultipleVerticalDate","dynamicYearlyEventsRendering","dynamicEventsRendering","setMonth","rightOffset","trunc","getOffsetValue","getColumnIndex","cursorDrag","leftVal","cloneIndex","cursorIndex","getCursorCurrentIndex","widthDiff","getWidthDiff","minutes","calculateIntervalTime","eventSrt","targetDate","dataIndex","events_2","getStartTime","getEndTime","getEventWidth","getPosition","calculateResourceGroupingPosition","viewEle","pages","targetLeft","dateLength","currentIndex","trCollection","translateY","rowHeight","scrollY","cursorElement","getCursorElement","dropSelectors","dropSelectors_1","selector","getModuleName","WEEK_LENGTH","DEFAULT_WEEKS","MS_PER_DAY","MS_PER_MINUTE","getElementHeightFromClass","container","elementClass","el","visibility","position","getElementWidthFromClass","getTranslateY","getComputedStyle","WebKitCSSMatrix","webkitTransform","m42","getTranslateX","m41","getWeekFirstDate","date1","getWeekLastDate","weekFirst","weekLast","firstDateOfMonth","lastDateOfMonth","getWeekNumber","valueOf","dayOfYear","getWeekMiddleDate","setTime","tzOffsetBefore","tzOffsetDiff","resetTime","getDateInMs","dateOffset","timezoneOffset","getDateCount","addDays","noOfDays","addMonths","noOfMonths","min","getMaxDays","getStartEndHours","setSeconds","date2","getDaysCount","strTime","getDateFromString","match","pixelRatio","getScrollBarWidth","devicePixelRatio","screen","availWidth","documentElement","divNode","cssText","body","ratio","toFixed","removeChild","resetScrollbarWidth","zoomPixelRatio","findIndexInData","length_1","field_1","resData","join","includes","groupIDField","getOuterHeight","marginTop","marginBottom","removeChildren","elementChildren","elementChildren_1","elementChild","isDaylightSavingTime","jan","jul","getUniversalTime","year","hours","seconds","milliseconds","getMilliseconds","UTC","isMobile","navigator","userAgent","toLowerCase","isIPadDevice","capitalizeFirstWord","inputString","charAt","toLocaleUpperCase","generateSummary","rule","localeObject","locale","calendarType","cldrObj","cldrObj1","ruleObject","extractObjectFromRule","summary","EVERY","nameSpace1","nameSpace","freq","DAYS","WEEKS","ON","DAYINDEXOBJECT","MONTHS","getMonthSummary","YEARS","TIMES","until","tempDate","UNTIL","monthDay","pos","setPosition","WEEKPOS","generate","excludeDate","startDayOfWeek","maximumCount","MAXOCCURRENCE","cacheDate","getCalendarUtil","modifiedDate","tempExcludeDate","tz","content","parsedDate","getDateFromRecurrenceDateString","recExceptionCount","tempViewDate","maxOccurrence","setFirstDayOfWeek","DAYINDEX","dailyType","weeklyType","monthlyType","yearlyType","recDateString","substr","excludeDateHandler","zeroIndex","state","expectedCount","expectedDays","compareDates","validateRules","wkstIndex","weekState","weekCollection","wkst","startDateDiff","weekstartDate","weekendDate","compareTempDate","insertDataCollection","getStartDateForWeek","ruleType","validateMonthlyRuleType","monthlyDayTypeProcessforMonthFreq","monthlyDayTypeProcess","monthlyDateTypeProcessforMonthFreq","monthlyDateTypeProcess","typeValue","checkYearlyType","processWeekNo","processYearDay","startDay","firstWeekSpan","weekNo","stDate","getYearLastDate","weekNos","insertDateCollection","insertDatasIntoExistingCollection","dateCollection","yearDay","getLeapYearDaysCount","isLeapYear","getYearDaysCount","initializeRecRuleVariables","ruleData","monthCollection","mainDate","monthInit","currentMonthDate","isSameYear","checkMonth","setValidDate","processDateCollectionForByMonthDay","beginDate","setNextValidDate","setFullYear","isLastMonth","getMonthDaysCount","recRuleVariables","isByMonth","validateProperDate","monthData","addYears","getMonthCollection","isHavingNumber","HASNUMBER","test","j","expectedDaysArray","SPLITNUMBERANDSTRING","isSameMonth","filterDateCollectionByIndex","insertDateCollectionBasedonBySetPos","dayCycleData","processWeekDays","initialDate","week","insertDateCollectionBasedonIndex","processDateCollectionforByDayWithInteger","compareMonth","newstr","getDayString","getRecurrenceCollection","recurrenceCollectionObject","expectedDaysArrays","arrPosition","getDateCollectionforBySetPosNull","recurrenceCollections","dayData","chDate","weekCount","firstOfMonth","lastOfMonth","numberOfDaysInMonth","firstWeekDay","used","weekIndex","validRules","REMOVENUMBERINSTRING","checkDayIndex","sortedExpectedDays","expectedDaysNumberSplit","expectedDaysArr","rules","rulesList","splitData","Number","splice","dayCycle","checkDate","expectedDate","checkYear","expectedyearDay","getYearDay","startDateCollection","diff","rotate","days","expectedMonth","getExpectedDays","SU","MO","TU","WE","TH","FR","SA","getRecurrenceStringFromDate","getUTCFullYear","roundDateValues","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","VerticalView","viewClass","isInverseTableSelect","baseCssClass","appointment","scrollUiUpdate","renderEvents","onContentScroll","removeNewEventElement","scrollLeftPanel","scrollTopPanel","setPersistence","onAdaptiveMove","onAdaptiveScroll","isDestroyed","leftPanel","getLeftPanelElement","headerBarHeight","getHeaderBarHeight","timeCells","getScrollableElement","header","getDatesHeaderElement","scrollerHeight","setContentHeight","setColWidth","scrollBarWidth","cssProperties","rtlBorder","rtlPadding","isDateHeaderScroll","enableAllDayScroll","border","padding","isPreventScrollUpdate","isInitial","scrollToWorkHour","highlightCurrentTime","retainScrollPosition","leftPanelElement","getScrollXIndent","workHours","highlight","firstWorkHourCell","scrollToHour","hour","scrollDate","getStartEndTime","headerElement","conWrap","getTopFromDateTime","scrollToDate","generateColumnLevels","getDateSlots","workDays","columnLevels","generateResourceLevels","hideNonWorkingDays","setProperties","previousNextAction","getRenderDates","headerModule","setCalendarDate","updateDateRange","resourceLevel","resStartHour","startHourField","resEndHour","endHourField","dateSlots","workStartHour","workEndHour","dateCol","renderDates_1","isCurrentDate","colSpan","isWorkHourRange","showTimeIndicator","currentDateIndex","getCurrentTimeIndicatorIndex","changeCurrentTimePosition","currentTimeIndicatorTimer","clearCurrentTimeIndicatorTimer","updateCurrentTimeIndicatorTimer","expandedResources","_c","removeCurrentTimeIndicatorElements","timeIndicator","timeIndicator_1","indicator","firstRow","topInPx","timeCellsWrap","timeTrs","curTimeWrap","styles","currentDateIndex_1","currentTimeEle","lastElementChild","getWorkCellHeight","parseFloat","getTdContent","cntEle","dateHeaderTemplate","dateHeaderTemplateName","getDateHeaderTemplate","getTimelineDate","getDayName","childNodes","majorSlotTemplate","getMajorSlotTemplate","minorSlotTemplate","getMinorSlotTemplate","cellTemplateName","getCellTemplate","refreshHeader","renderHeader","renderLayout","setPanel","clsList","ignoreWhitespace","renderPanel","createTableLayout","renderContent","renderResourceMobileLayout","dateTd","renderDatesHeader","indentTd","renderLeftIndent","workTd","scrollContainer","renderTimeCells","renderContentArea","touchMoveEvent","resetColLevels","timesTd","renderVirtualTrack","nth","tbl","trEle","rowCount","ntr_1","data_1","showWeekNumber","getWeekNumberContent","template","title","createTd","renderHeaderIndentTemplate","ntr","appointmentExpandCollapse","lastLevel","createAllDayRow","createColGroup","table","tdData","ntd","wireCellEvents","thead","addAttributes","setResourceHeaderContent","wireMouseEvents","elementType","workCellAction","cellMouseDown","cellClick","cellDblClick","handler","first","last","getTimeSlotRows","setAriaAttributes","addAutoHeightClass","renderContentTable","tBody","getContentRows","renderContentTableHeader","createContentTd","clsName","getContentTdClass","cellDate","isWorkHour","isWorkDay","args_1","tooltipTemplate","getContentAreaElement","getEndDateFromStartDate","msMajorInterval","msInterval","msStartHour","msEndHour","dt","timeOffset","majorTickDivider","middle","getAdjustedDate","timeSlots","contentScrollableEle","scheduleTouchModule","resetValues","BLOCK_INDICATOR_WIDTH","BLOCK_INDICATOR_HEIGHT","TimelineEvent","cellTops","renderType","eventContainers","dayLength","slotsPerDay","appointments_2","trimStartTime","trimEndTime","getSortComparerIndex","appIndex","getOverlapSortComparerEvents","appLevel","appointmentsCollection_1","renderResourceEvents","removeHeightProperty","source","renderEventsHandler","eventDates","cellTd","getCellTd","overlapCount","diffInDays","isDayProcess","appLeft","appRight","getRowTop","maxHeight","renderApp","maxOrIndicator","inlineValue","inlineModule","createInlineAppointmentElement","conWidth","isWithoutScroll","clientHeight","renderEventElement","firstChild","getFirstChild","adjustAppointments","appPos","position_1","renderTimelineMoreIndicator","k","position_2","isAlreadyAvail","startDateTime","slotStartTime","slotEndTime","getFilterEvents","withIndicator","moreIndicatorElement","renderElement","resourceCell","monthHeader","currentPercentage","apps","updateBlockElements","blockElement","blockElement_1","blockIndicator","blockIndicator_1","getNextDay","getPreviousDay","actualEndTime","isSameDay","getSameDayEventsWidth","getSpannedEventsWidth","endWidth","startWidth","spannedWidth","endDay","getAppointmentLeft","slotTd","daySlot","gIndex","eventsList","getFilteredEvents","indicatorPos","wrapIndex","renderBlockIndicator","setMaxEventHeight","Resize","resizeElement","resizeElement_1","element_1","touchStartEvent","resizeStart","resizeHelper","allowGroupEdit","resizeTarget","resizeArgs","resizeEventArgs","resizeEdges","hRows","tdCollections","tdCollections_1","trRect","getOriginalElement","resizing","touchEndEvent","resizeStop","doc","clientLeft","clientTop","updateResizingDirection","resizeValidation","leftStyles","getLeftRightStyles","horizontalResizing","rightStyles","topStyles","getTopBottomStyles","_d","_e","verticalResizing","bottomStyles","_f","_g","monthResizing","elementFromPoint","resizeTime","isSameCell","yearEventsRendering","monthDiff","getMonthDiff","getEventCount","offsetValue","isDateHeader","headerName","isTimeViews","isTimelineMonth","isWithoutScale","isLastCell","pixelsPerMinute","tdCollections_2","cellOffsetWidth","resizeDate","spanMinutes","originalWidth","isNotHourSlot","isTimeScaleViews","resizeEnd","clnHeight","clnTop","pageWidth","targetWidth","cloneWidth","viewDimension","getContentAreaDimension","isTimeScale","leftOffset","Worksheets","Worksheet","isSummaryRowBelow","showGridLines","HyperLink","Grouping","FreezePane","MergeCell","MergeCells","mergeCell","inserted","mCell","isIntersecting","intersectingCell","x","y","Width","Height","ref","base","compare","CellStyle","numFmtId","backColor","fontName","fontSize","fontColor","italic","bold","underline","strikeThrough","wrapText","hAlign","vAlign","indent","rotation","numberFormat","borders","Borders","isGlobalStyle","Font","sz","u","strike","CellXfs","Alignment","CellStyleXfs","CellStyles","xfId","NumFmt","code","formatCode","Border","mLine","mColor","lineStyle","all","Column","Row","Rows","Image","Cell","Cells","Utils","bitReverse","reverseBits","bitConverterToInt32","bitConverterToInt16","bitConverterToUInt32","uint","Uint32Array","bitConverterToUInt16","Uint16Array","bitConverterUintToInt32","Int32Array","bitConverterInt32ToUint","bitConverterInt32ToInt16","Int16Array","byteToString","str","String","fromCharCode","byteIntToString","arrayCopy","sourceIndex","destination","destinationIndex","dataToCopy","Uint8Array","buffer","subarray","set","mergeArray","arrayOne","arrayTwo","mergedArray","encodedString","input","chr1","chr2","chr3","encode1","encode2","encode3","encode4","keyStr","resultIndex","totalLength","Error","output","huffCodeLengthOrders","DecompressorHuffmanTree","lengths","buildTree","init","m_LengthTree","m_DistanceTree","prepareData","blCount","nextCode","treeSize","bits","MAX_BITLEN","treeFromData","tree","pointer","increment","revcode","subTree","treeLen","m_Tree","unpackSymbol","lookahead","symbol","peekBits","skipBits","subtree","bitlen","availableBits","defineProperty","get","enumerable","configurable","ChecksumCalculator","ChecksumUpdate","checksum","checkSumUInt","s1","s2","DEF_CHECKSUM_BIT_OFFSET","steps","DEF_CHECKSUM_ITERATIONSCOUNT","DEF_CHECKSUM_BASE","ChecksumGenerate","result","CompressedStreamReader","stream","bNoWrap","defaultHuffmanDynamicTree","DEF_HEADER_METHOD_MASK","DEF_HEADER_INFO_MASK","DEF_HEADER_FLAGS_FCHECK","DEF_HEADER_FLAGS_FDICT","DEF_HEADER_FLAGS_FLEVEL","DEF_MAX_WINDOW_SIZE","DEF_HUFFMAN_REPEATE_MAX","DEF_HUFFMAN_END_BLOCK","DEF_HUFFMAN_LENGTH_MINIMUMCODE","DEF_HUFFMAN_LENGTH_MAXIMUMCODE","DEF_HUFFMAN_DISTANCE_MAXIMUMCODE","mCheckSum","tBuffer","mBufferedBits","mTempBuffer","mBlockBuffer","mbNoWrap","mWindowSize","mCurrentPosition","mDataLength","mbCanReadNextBlock","mbCanReadMoreData","mbCheckSumRead","DOMException","mInputStream","readZLibHeader","decodeBlockHeader","fillBuffer","bitMask","mBuffer","bytesRead","read","readInt16","pow","readBits","bFinalBlock","blockType","mbReadingUncompressed","skipToBoundary","readInt16Inverted","lengthComplement","mUncompressedDataLength","mCurrentLengthTree","mCurrentDistanceTree","lengthTree","distanceTree","trees","decodeDynamicHeader","bLastSymbol","iLengthsCount","iDistancesCount","iCodeLengthsCount","iResultingCodeLengthsCount","arrResultingCodeLengths","arrDecoderCodeLengths","iCurrentCode","treeInternalDecoder","bNeedBreak","miRepSymbol","DEF_HUFFMAN_DYNTREE_REPEAT_BITS","DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS","tempArray","readHuffman","free","dataRead","readdata","numDataRead","numReadMore","iRepeatLength","DEF_HUFFMAN_REPEAT_LENGTH_BASE","iRepeatExtraBits","DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION","extra","DEF_HUFFMAN_REPEAT_DISTANCE_BASE","iRepeatDistance","DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION","initialLength","inBlockPosition","oldDataLength","dataToRead","readPackedBytes","checksumUpdate","checkSum","readInt32","DEF_REVERSE_BITS","Stream","inputStream","byteLength","readByte","write","inputBuffer","toByteArray","Encoding","includeBom","emitBOM","encodingType","initBOM","getByteCount","chars","validateNullOrUndefined","byte","utf8Len","charCodeAt","getByteCountInternal","codePoint","bytes","isHighSurrogate","codeUnit","toCodepoint","highCodeUnit","lowCodeUnit","charIndex","charCount","byteCount","isUtf8","charCode","high","low","getBytes","RangeError","ArrayBuffer","getBytesOfUtf8Encoding","getBytesOfUnicodeEncoding","getBytesOfAnsiEncoding","getString","out","byteCal","getStringOfUtf8Encoding","byteUnicode","getStringofUnicodeEncoding","bufview","charcode","uint16","byteUni","byte16","message","ARR_LITERAL_CODES","ARR_LITERAL_LENGTHS","ARR_DISTANCE_CODES","ARR_DISTANCE_LENGTHS","CompressedStreamWriter","noWrap","pendingBuffer","pendingBufLength","pendingBufCache","pendingBufBitsInCache","bufferPosition","extraBits","currentHash","matchStart","matchLength","matchPrevAvail","blockStart","stringStart","lookAhead","totalBytesIn","inputOffset","inputEnd","windowSize","windowMask","hashSize","hashMask","hashShift","maxDist","isHuffmanTreeInitiated","initHuffmanTree","treeLiteral","CompressorHuffmanTree","treeDistances","treeCodeLengths","arrDistances","arrLiterals","dataWindow","hashHead","hashPrevious","writeZLibHeader","compressedString","encode","pendingBufferFlush","compressData","headerDate","pendingBufferWriteShortBytes","finish","success","fillWindow","canFlush","compressSlow","flush","lookAheadCompleted","slideWindow","prevMatch","prevLen","discardMatch","matchPreviousBest","matchPreviousAvailable","huffmanIsFull","insertString","findLongestMatch","huffmanTallyLit","huffmanTallyDist","huffmanFlushBlock","lastBlock","more","updateHash","m","hash","curMatch","chainLen","niceLen","scan","bestEnd","bestLength","limit","stringEnd","scanEnd1","scanEnd","literal","codeFrequencies","dist","lc","huffmanLengthCode","dc","huffmanDistanceCode","stored","storedOffset","storedLength","calculateBLFreq","blTreeCodes","codeLengths","opt_len","getEncodedLength","static_len","huffmanFlushStoredBlock","pendingBufferWriteBits","setStaticCodes","huffmanCompressBlock","huffmanReset","huffmanSendAllTrees","pendingBufferAlignToByte","pendingBufferWriteShort","pendingBufferWriteByteBlock","distance","buildCodes","treeLength","rank","writeTree","reset","literalLen","writeCodeToStream","pendingBufferFlushBits","isClose","close","writer","elementCount","minCodes","maxLength","codeMinCount","codeFrequency","lengthCount","codeCount","codeLength","codes","lengthTemp","bitsCount","blTree","minCount","curLen","nextLen","maxRepeatCount","minRepeatCount","currentRepeatCount","currentCodeLength","codesCount","arrTree","n","pPos","leafsCount","nodesCount","child","values","node","iIndex","constructHuffmanTree","buildLength","lastVal","path","second","minDepth","numNodes","numLeafs","overflow","calculateOptimalCodeLength","iIncreasableLength","recreateTree","nodePtr","childPtr","childIndex","bitLength","checksum_uint","checkSumBitOffset","checksumIterationCount","checksumBase","Save","save","fileName","extension","lastIndexOf","mimeType","getMimeType","Blob","isMicrosoftBrowser","msSaveBlob","downloadLink","createElementNS","saveInternal","hasDownloadAttribute","download","dataUrl_1","URL","createObjectURL","href","createEvent","initEvent","dispatchEvent","revokeObjectURL","url","isPopupBlocked","open","reader_1","FileReader","onloadend","readAsDataURL","CRC32TABLE","INT_SIZE","SHORT_SIZE","CentralDirectoryEndSignature","CentralDirSizeOffset","CentralHeaderSignature","BufferSize","ZipArchive","initCrc32Table","files","addItem","file","ZipArchiveItem","addDirectory","directoryName","getItem","base64String","zipByteArray","lCentralDirEndPosition","findValueFromEnd","iCentralDirSize","ReadInt32","lCentralDirPosition","readCentralDirectoryDataAndExtractItems","itemHelper","readCentralDirectoryData","readData","checkCrc","decompressData","unCompressedStream","zipArchive","Promise","resolve","reject","then","saveAsBlob","blob","skipFileSave","zipData","dirLength","compressedObject","getCompressedData","constructZippedObject","isDirectory","writeZippedContent","promise","onload","crc32Value","compressedData","compressedSize","uncompressedDataSize","compressionType","calculateCrc32Value","readAsArrayBuffer","crc32Table","compressor","nextIndex","subArray","zipParts","extFileAttr","writeHeader","localHeader","centralDir","writeCentralDirectory","zipHeader","getModifiedTime","getModifiedDate","localDirLen","cenDirLen","getArrayBuffer","writeFooter","externalFileAttribute","directoryHeader","centralLength","localLength","dirEnd","modTime","modiDate","lStreamSize","arrBuffer","lLastPos","lCurrentPosition","uiCurValue","bFound","ReadInt16","ReadUInt16","ZipArchiveItemHelper","headerSignature","crc32","options","compressionMethod","originalSize","iFileNameLength","iExtraFieldLenth","iCommentLength","externalAttributes","localHeaderOffset","m_strItemName","readLocalHeader","readCompressedData","decompressDataOld","decompressedData","reader","compressedStream","iReadBytes","iNameLength","iExtraLength","headerVal","dataStream","iBytesLeft","iBytesToRead","itemName","decompressedStream","ValueFormatter","cultureName","intl","getFormatFunction","format","isServerRendered","getDateFormat","getNumberFormat","toView","displayText","CsvHelper","separator","csvStr","formatter","globalStyles","Map","worksheets","parseWorksheet","parseRows","parseRow","parseCell","csv","parseCellValue","skeleton","has","val","dwlLink","BlobHelper","parts","append","part","getBlob","AutoFilters","Workbook","saveType","culture","currencyString","sharedStringCount","unitsProportions","hyperlinkStyle","currency","mSaveType","mArchive","sharedString","mFonts","mBorders","mStyles","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","drawingCount","imageCount","cellStyle","parserCellStyle","cellStylesIn","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","author","comments","category","company","manager","createdDate","tags","status","jsonSheet","sheet","mergeCells","mergedCellsStyle","mHyperLinks","columns","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","pageSetup","images","parserImages","autoFilters","parseFilters","hyperLinks","mergeOptions","fromJson","toJson","applyProperties","sourceJson","destJson","getCellName","column","getColumnName","strColumnName","iCurrentDigit","titleRowName","titleColName","printTitleName","fromRow","toRow","fromColumn","toColumn","freezePanes","leftCell","columnsLength","rowsLength","rowId","parserRow","insertMergedCellsStyle","rowToInsert","createCell","insertIndex","styleIndex","cellToInsert","refName","grouping","parseGrouping","parseCells","outlineLevel","isCollapsed","isHidden","cellsLength","spanMin","spanMax","cellId","jsonCell","rowSpan","hyperlink","hyperLink","getCellValueType","rId","formula","parseCellType","processMergeCells","spans","GetColors","colors","processColor","colorVal","toUpperCase","rgbColors","processCellValue","cellValue","processedVal","startindex","processString","subString","text","subSplit","subSplit_1","trim","applyGlobalStyle","cellType","defStyleIndex","parserBorder","leftBorder","rightBorder","topBorder","bottomBorder","processCellStyle","switchNumberFormat","numFmt","cellStyleXfs","cellXfs","changeNumberFormats","regex","RegExp","returnFormat","getNumberPattern","useGrouping","getDatePattern","processNumFormatId","compareResult","compareStyle","size","isNewFont","toCompareStyle","font","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","baseStyle","toOADate","value_1","sstvalue","imagesLength","image","parserImage","lastRow","lastColumn","horizontalFlip","verticalFlip","blobSaveType","blobData","proxyUrl","xlsxMatch","csvMatch","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","sheetName","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveSheetView","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","_h","_j","hLink","saveDrawings","saveSheetRelations","drawings","sheetDrawingString","imgId","pic","updatelastRowOffset","updatelastColumnOffSet","lastRowOffset","lastColOffset","imageData","convertBase64toImage","saveDrawingRelations","picture","iCurHeight","iCurRow","iCurOffset","iRowHeight","convertToPixels","iSpaceInCell","rowHiddenHeight","iCurWidth","iCurCol","iColWidth","ColumnWidthToPixels","colHiddenWidth","img","byteStr","atob","drawingRelation","pixels","dDigitWidth","fileWidth","relStr","paneString","sstStart","si","updateCellXfsStyleXfs","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","compareFontResult","fontId","fillId","borderId","applyAlignment","alignment","horizontal","vertical","numFmtStyle_1","fontStyle","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","saveAlignment","cellXf","alignString","appString","coreString","toISOString","topRelation","wbRelation","contentTypeString","sheetsOverride","drawingIndex","xmlString","archiveItem","startCell","endCell","updatedMergedCellStyles","sCell","eCell","dateToTicks","ticksPerDay","daysToMonth365","daysToMonth366","timeToTicks","minute","totalSeconds","ticks","daysTo1899","doubleDateOffset","oaDateMinAsTicks","millisPerDay","ExcelExport","initializeExcelExport","excelExportOptions","exportColumns","getExportColumns","exportName","exportType","isIncludeOccurrences","includeOccurrences","customData","processWorkbook","columnHeader","columnData","columnRule","styleRule","workSheet","book","exportOptions","fieldsInfo","Vue","extend","directives","ripple","props","Boolean","methods","genRipple","staticClass","center","$createElement","Gregorian","isMonthStart","dateObj","monthValue","maxDay","Islamic","hDate","getHijriDate","gDate","toGregorian","daysInMonth","getDaysInMonth","finalGDate","finalHDate","hijriDate","updateDateObj","currentHijri","tempHijri","hDate1","ActionBase","actionIndex","indexCol_1","cloneIndex_1","getResourceData","eventsCollection","eventsCollection_1","isSameResource","eveId","enableRecurrenceValidation","editOccurrenceValidation","saveEvent","intervalTime","trElement","enableAdaptiveUI","getResourceElements","contentElements","indexes","minIndex","maxIndex","groupElements","timeElement","isMorePopup","cloneWrapper","outerHTML","cloneClassLists","dynamicEle","dynamicEle_1","cloneEle","clientX","clientY","autoScroll","yIsScrollable","xIsScrollable","yInBounds","xInBounds","autoScrollValidation","boundaryValidation","scrollEventArgs","JSON","parse","stringify","isResize","backgroundColor","renderDynamicElement","isAppointment","innerText","renderedResource","isHorizontalScroll","spannedEvents","spannedEvents_1","cellDoubleClick","moreEventsClick","select","hover","actionBegin","actionComplete","actionFailure","navigating","renderCell","eventRendered","dataBinding","dataBound","popupOpen","popupClose","inlineClick","cellSelect","print","dataReady","eventsLoaded","contentReady","virtualScroll","uiUpdate","documentClick","AgendaBase","createAgendaContentElement","listData","aTd","listElement","noEvents","createList","createElement","moduleName","listClass","itemClass","listElements","li","templateEle","createAppointment","iconClass","eventLocation","appSubjectWrap","appSubjectText","appLocation","strDate","allDayStr","timeStr","milliSeconds","eventString","displayStr","appDateTime","processAgendaEvents","spanned","wireEventActions","eventElement","eventElement_1","getEventDetails","dateHeaderElement","dateHeaderElement_1","agendaModule","dayNavigationClick","calculateResourceTableElement","agendaDate","agendaLastDate","resColl","lastLevelInfo","tempLastLevelInfo","tempIndex","finalDate","agendaCollection","hideEmptyAgendaDays","resDataCollection","resDayCollection","tempObj","topResources","tempGroupedData","totalRowSpan","z","createResourceTableRow","totalCollection","renderEmptyContent","tContent","tempData","tContentCollection","parentCollection","w","rowSpanCollection","createDateHeaderElement","daysCount","insertBefore","dateTemplate","getMobileDateElement","eTr","createTableRowElement","eTd","dTd","HeaderRenderer","l10n","closeHeaderPopup","closestEle","closestPop","contentWrap","popupEle","popupObj","hideHeaderPopup","headerPopup","toolbarEle","renderToolbar","items","getItems","toolbarObj","overflowMode","clicked","toolbarClickHandler","enableHtmlSanitizer","appendTo","prevNavEle","nextNavEle","updateAddIcon","updateActiveView","updateItems","dataBind","getPopUpRelativeElement","setDayOfWeek","headerCalendar","setCalendarMinMaxDate","getCalendarView","setCalendarView","calendarView","depth","refresh","selEle","viewIndex","textEle","dateRangeTemplate","textContent","getStartDate","getEndDate","dateRangeTemplateName","getDateRangeTemplate","getDateRangeText","refreshOverflow","addEle","allowAdding","dateString","globalize","formatDate","calendar","getCalendarMode","align","prefixIcon","tooltipText","htmlAttributes","suffixIcon","showAlwaysInPopup","views","getItemObject","displayName","view","orientationClass","isItemInsidePopup","renderHeaderPopup","headerPopupEle","headerCalendarEle","actionOnScroll","targetType","relateTo","isDisplayDate","displayDate","hasSelectedDate","change","calendarChange","setCalendarTimezone","calendarDate","calculateViewIndex","isSameTime","currentTime","strClass","show","changeView","isSelectedDate","numberOfWeeks","currentTime_1","toolbarPopUp","selectedTime","getHeaderElement","updateHeaderItems","classType","dateRangeEle","previousNextIconHandler","getCurrentViewDates","isCustomMonth","enableItems","Scroll","setWidth","setHeight","setDimensions","onPropertyChanged","getCssProperties","module","ScheduleTouch","touchObj","scrollHandler","swipe","swipeHandler","tapHold","tapHoldHandler","swipeSettings","swipeThresholdDistance","onTransitionEnd","touchLeftDirection","touchRightDirection","allowSwiping","timeStampStart","now","scrollDirection","scrollDiv","isScrollTriggered","stopPropagation","nextPanel","getPanel","distanceX","transform","prevWidth","previousPanel","swipeDate","swipeDirection","offsetDist","isDevice","swapPanels","transitionDuration","confirmSwipe","cancelSwipe","tapHoldEventPopup","nextPrevType","currentPanel","direction","previousDate","navArgs","translateX","refreshDataManager","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","eventName","processDown","shiftKey","processUp","processLeft","processRight","processViewNavigation","processEnter","focusFirstCell","processTab","processDelete","processCtrlShiftNavigationArrows","processEscape","processFTwelve","getSelectedElements","click","onCellMouseDown","initialTarget","getClosestCell","onMouseSelection","onMoveUp","allDayRow","selectionEdges","parent_1","isPreventAction","queryStr","cellData","convertToEventData","showQuickPopup","isPopupShow","quickInfoOnSelectionEnd","cellArgs","resourceIcon","inlineCrudActions","getNavigateView","cellDetails","getCells","isInverseTable","tableEle","isTimelineYear","maxRow","maxColumn","inverseCells","sCells","focusCell","isVerticalYear","getWorkCellElements","targetCell","initialId_1","views_1","allowMultipleRow","removeInlineAppointmentElement","allowMultiRowSelection","isGroupYear","resourceSelectedCells","selectedCells_1","allowMultiCellSelection","allDayCells","getAllDayCells","resourceAllDayCells","allDayCells_1","addSelectedClass","selectAppointment","getAppointmentElements","nextAppEle","targetIndex","selectAppointmentElementFromWorkCell","appointmentElements_1","getUniqueAppointmentElements","filteredElements_1","selectedDate_1","selectedSeriesEvents","selectedElement","getAppointmentElementsByGuid","appointmentElements","self","getWorkCellFromAppointmentElement","viewCollections","cancelUpDownAction","isGroup","selectedEventElements","moreEventWrapper","quickPopupWrapper","getQuickPopupElement","tableRows","getTableRows","curRowIndex","getVerticalUpDownCell","getHorizontalUpDownCell","getYearUpDownCell","isUp","hasRow","dateAttr","processLeftRight","closest","sectionRowIndex","columnIndex","isCancelLeftRightAction","prevent","isMonthEnd","calculateNextPrevDate","getTimelineYearTargetCell","changeTargetCell","getHorizontalLeftRightCell","curColIndex","maxColIndex","allDayRow_1","otherMonthCell","tbody","allDayRow_2","getVerticalLeftRightCell","currentCell","initialId","nextPrevDate","getFocusableElements","processTabOnPopup","popupElement","focusableElements","footerEle","firstEle","lastEle","popupWrapper","appSelector","focusAppointment","virtual","averageRowHeight","virtualScrolling","setScrollPosition","isTimeline","resCellSelector","preventScroll","processTabOnResourceCells","selectedEle","allowDeleting","deleteClick","eventEle","onClosePopup","morePopup","tabElements","currentTabIndex","nextTabElement","resColWrap_1","resCells","Data","initDataManager","dataManager","generateQuery","includeFiltersInQuery","dateQuery","recurrenceQuery","addParams","getData","executeQuery","InlineEdit","inlineEdit","moreWrapper","cellEdit","eventEdit","saveObj","generateEventData","getEventDaysCount","isVertical","createVerticalViewInline","createMonthViewInline","createTimelineViewInline","inlineSubject","subEle","subjectWrap","prepend","setSelectionRange","allDayElements","allDayLevel","cellTop","renderAllDayEvents","renderNormalEvents","saveObject","monthCellSelector","monthModule","timelineView","inlineElement","setDefaultValueToObject","setResourceValues","addEvent","eventTarget","eventDetails","inlineData","inlineAppointmentElement","inlineDetails","inline","inlineAppointment","FieldValidator","renderFormValidator","form","formObj","customPlacement","inputElement","errorPlacement","validationComplete","focusout","focusOut","relatedTarget","ignoreError","elem","inputName","display","createTooltip","dlgContent","client","inputClient","div","arrow","destroyToolTip","elements_1","EVENT_FIELD","QuickPopups","isMultipleEventSelect","fieldValidator","render","renderQuickPopup","renderMorePopup","renderQuickDialog","role","quickPopupOpen","quickPopupClose","hideAnimation","showAnimation","collision","viewPortElement","zIndex","moreEventPopup","morePopupOpen","morePopupClose","closeButton","renderButton","closeClick","navigationClick","buttonModel","isPrimary","dialogButtonClick","editFollowingEvents","followingSeriesButton","quickDialog","animationSettings","effect","buttons","closeOnEscape","beforeClose","beforeQuickDialogClose","isModal","showCloseIcon","dialogElement","okButton","cancelButton","iconName","isDisabled","clickEvent","buttonObj","disabled","iconCss","quickDialogClass","followingEventButton","applyFormValidation","validation","editDeleteOnly","editFollowingEventsOnly","editDeleteSeries","showQuickDialog","openRecurrenceValidationAlert","dialogCancel","openDeleteAlert","openValidationError","popupType","eventProp","popupArgs","createMoreEventList","moreEventContentEle","moreEventWrapperEle","eventText","tempId","eventTitle","closeIcon","editAction","allowEditing","deleteAction","editIcon","editClick","deleteIcon","beforeQuickPopupOpen","isCellBlocked","showQuickInfo","targetEle","newEventClone","isSameTarget","subjectElement_1","destroyPopupButtons","quickCellPopup","getPopupHeader","getPopupContent","getPopupFooter","subjectElement","createInput","properties","placeholder","moreButton","detailsClick","saveButton","saveClick","isSameEventClick","editButton","isQuickTemplate","quickInfoTemplates","templateType","eventTooltip","updateTapHoldEventPopup","quickEventPopup","buttonClass","deleteButton","headerType","headerData","headerTemplate","headerArgs","headerTemp","getQuickInfoTemplatesHeader","getFormattedString","replaceAll","templateWrapper","subjectText","contentTemplate","contentArgs","contentTemp","getQuickInfoTemplatesContent","argsData","resourceText","getResourceText","details","getRecurrenceSummary","getTimezone","description","locationDetails","descriptionDetails","resourceDetails","footerType","footerData","footerTemplate","footer","footerArgs","footerTemp","getQuickInfoTemplatesFooter","resourceValue","resourceCollection_1","id_1","textField","resourceData_1","lastResource_1","isArray","resNames_1","lastResourceData_1","startDateDetails","endDateDetails","startTimeDetail","endTimeDetail","spanLength","moreEventClick","dateElement","moreEventElements","tdDate","dialogEvent","updateMoreEventContent","moreElement","selectCell","cancelBtn","deleteEvent","isIgnoreOccurrence","eventSave","titleContent","zoneDetails","recurrenceEditor","getRecurrenceEditorInstance","ruleSummary","getRuleSummary","skeletonString","getDataFromTarget","cellsData","popupCloseArgs","isEventPopup","innerHeight","isVirtualScroll","conTable","offsetX","offsetY","refreshPosition","collide","leftCollide","targetRect","previousOffset","popupRect","applyEventColor","colorField","colorEle","borderLeftColor","editElement","popupData","isCellPopup","formvalidator","validate","getObjectFromFormData","animation","navigateEle","classNames","popupWrap","childElementCount","tar","popupName","popup","buttonCollections","buttonCollections_1","button","instance","refreshQuickDialog","destroyQuickDialog","refreshQuickPopup","destroyQuickPopup","refreshMorePopup","destroyMorePopup","EventTooltip","tooltipObj","mouseTrail","showTipPointer","getTargets","beforeRender","onBeforeRender","afterClose","onTooltipClose","targets","headerTooltipTemplate","enableTooltip","resCollection","getColumnLevels","contentContainer","getHeaderTooltipTemplate","setContent","tooltipSubject","tooltipLocation","startMonthDate","startMonthYearDate","endMonthYearDate","tooltipDetails","tooltipTime","content_1","getEventTooltipTemplate","resetTemplates","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","HEADER","INPUTWARAPPER","INPUTWARAPPERSIDE","REPEATELEMENT","REPEATINTERVAL","INTERVALCLASS","DAYWRAPPER","WEEKWRAPPER","WEEKPOSITION","DAYPOSITION","YEAREXPANDERWRAPPER","YEAREXPANDERELEMENT","MONETHEXPANDERWRAPPER","MONETHEXPANDWRAPPER","MONTHEXPANDERELEMENT","MONTHEXPANDERCHECKBOXWRAPPER","FORMLEFT","FORMRIGHT","MONTHDAYWRAPPER","MONTHEXPANNDERELEM","MONTHPOS","MONTHWEEK","ENDON","MONTHEXPANDERLABEL","WEEKEXPANDERLABEL","ENDONLABEL","ENDONLEFT","MONTHDAYELEMENT","ENDONELEMENT","ENDONDATE","UNTILDATE","ENDONCOUNTWRAPPER","ENDONCOUNT","HIDEWRAPPER","RTLCLASS","PRIMARY","ACTIVE","RECURRENCETABLE","REPEATCONTENT","REPEATCONTENTWRAPPER","NONE","DAILY","WEEKLY","MONTHLY","YEARLY","NEVER","COUNT","TEXTFIELD","VALUEFIELD","LAST","REPEAT","REPEATEVERY","END","RADIOLABEL","RULEUNTIL","RULEBYDAY","RULEBYMONTHDAY","RULEBYMONTH","RULEINTERVAL","RULECOUNT","RULESETPOS","RULEFREQ","RULEDAILY","RULEWEEKLY","RULEMONTHLY","RULEYEARLY","RULESUNDAY","RULEMONDAY","RULETUESDAY","RULEWEDNESDAY","RULETHURSDAY","RULEFRIDAY","RULESATURDAY","KEYSUNDAY","KEYMONDAY","KEYTUESDAY","KEYWEDNESDAY","KEYTHURSDAY","KEYFRIDAY","KEYSATURDAY","EQUAL","SEMICOLON","COMMA","FIRST","SECOND","THIRD","FOURTH","contentType","none","daily","weekly","monthly","yearly","valueData","neverClassList","weekClassList","monthClassList","yearClassList","dailyClassList","noEndClassList","endOnCountClassList","endOnDateClassList","RecurrenceEditor","defaultLocale","never","third","fourth","repeat","repeatEvery","onDay","weeks","years","summaryTimes","summaryOn","summaryUntil","summaryRepeat","summaryDay","summaryWeek","summaryMonth","summaryYear","monthWeek","monthPosition","monthExpander","yearExpander","repeatInterval","renderStatus","dayButtons","monthButtons","startState","endOn","showFormElement","updateForm","freshOnEndForm","updateEndOnForm","selectMonthDay","updateUntilDate","onMonthDay","checked","preRender","applyCustomClass","initialize","renderComponent","repeatType","endTypes","selectedType","getRecurrenceRule","setRecurrenceRule","triggerChangeEvent","resetDayButton","daySelection","rotateArray","rtlClass","untilDateObj","weekday","monthWeekDays","monthWeekPos","getDayPosition","endType","hideElement","renderDropdowns","getRepeatData","floatLabelType","frequencies","resetFormValues","getEndData","popupWidth","getPopupWidth","renderDropDownList","dropDownData","onWeekDay","getMonthPosData","getDayData","getMonthData","setDefaultValue","formelement","formelement_1","recurreneElement","recurreneElement_1","renderDatePickers","dateFormat","getFormat","formatType","dayButtonRender","btns","btns_1","btn","isToggle","radioButtonRender","label","numericTextboxRender","recurrenceCount","setTemplate","positionCollection","textValue","monthpos","monthposValue","nameSpaceString","weekday_1","fullDay","getSelectedDaysData","getSelectedMonthData","getIntervalData","getEndOnCount","getYearMonthRuleData","updateWeekButton","updateMonthUI","updateUI","getUntilData","tempStr","destroyComponents","resetFields","updateRuleUntilDate","untilDate","newUntilDate","getRecurrenceDates","endon","detachInputs","inputElements","inputElements_1","removeClasses","getPersistData","addOnPersist","renderComplete","newProp","oldProp","prop","REPEAT_CONTAINER_CLASS","REPEAT_BUTTON_ICON_CLASS","REPEAT_BUTTON_CLASS","REPEAT_DIALOG_CLASS","HIDE_STYLE_CLASS","EventWindow","eventWindowTime","renderEventWindow","dialogModel","getEventWindowContent","minHeight","beforeOpen","onBeforeOpen","onBeforeClose","eventDelete","dialogClose","preventEventSave","refreshRecurrenceEditor","createRecurrenceEditor","setRecurrenceEditor","editorTemplate","isEventData","cellClickAction","renderFormElements","onCellDetailsUpdate","onEventDetailsUpdate","setDialogContent","allowKeyboardInteraction","isEnterKey","getSlotDuration","getInstance","deleteObj","callBackPromise","trimAllDay","refreshDateTimePicker","startObj","endObj","isInteracted","eventCrudData","processCrudActions","resetForm","onsubmit","getDefaultEventWindowContent","formElements","formElements_1","tempEle","getEditorTemplate","parentDiv","createDivElement","titleLocationDiv","renderTextBox","editorTitles","startEndDateTimeDiv","renderDateTimePicker","onTimeChange","allDayTimezoneDiv","renderCheckBox","timezoneParentDiv","renderDropDown","repeatParentDiv","repeatDiv","repeatEditContainer","loadRecurrenceEditor","resourceParentDiv","renderResourceDetails","submit","renderRecurrenceEditor","updateMinMaxDateToEditor","createInputElement","fieldName","changeEvent","dateTimeDiv","getFieldName","dateTimeInput","dateTimePicker","timeFormat","getFieldLabel","step","startEndElement","startEndElement_1","labelValue","resourceDiv","resourceInput","resourceTemplate","allowMultiple","listObj","onMultiselectResourceChange","itemTemplate","popupHeight","mode","dropDownList","onDropdownResourceChange","timezoneDiv","timezoneInput","allowFiltering","onTimezoneChange","timezoneDataSource","filterBarPlaceholder","noRecordsTemplate","filtering","updateData","byGroupID","resObject","createInstance","datasource","resourceModel","groupId","filterRes","filterDatasource","clear","resObj","itemData","resValue","startTimezoneObj","endTimezoneObj","checkBoxDiv","checkBoxInput","checkBox","onChange","repeatStatus","textBoxDiv","textBoxInput","labelText","targetSelector","onAllDayChange","timezoneChangeStyle","onRepeatChange","renderRepeatDialog","repeatDialogObject","repeatSaveDialog","repeatCancelDialog","repeatOpenDialog","repeatRule","repeatStartDate","updateRepeatLabel","closeRepeatDialog","repeatTempRule","showDetails","disableButton","RecurrenceRule","getValidationRule","subjectRule","locationRule","startTimeRule","endTimeRule","descriptionRule","getFormElements","keyNames","formElements_2","curElement","columnName","setValueToElement","setDefaultValueToElement","timezoneObj","attrName","isDropDowns","fieldSelector","classSelector","control","attrEle","allDayStatus","updateDateTime","timezoneValue","isDisable","saveIcon","untilObj","resetFormFields","localTimezoneName","found","some","formElement","formElement_1","currentElement","alert","dataCollection","getEventDataFromEditor","processEventValidation","Repeat","alertType","recurrenceValidation","isShowAlert","isResourceEventExpand","getEventIdFromForm","resourceSaveEvent","eveId_1","editedData","lastResourceData","formElement_2","getValueFromElement","alertMessage","recEditor","activeEvent","excludedEvents","seriesEvents","types","tempDiff","tempValue","getRecurrenceIndex","recColl","recIndex","currentData","editData","recurColl","excludedDatas","recurColl_1","nextStartTime","nextEndTime","currentStartTime","currentEndTime","lastEndTime","previousStartTime","previousEndTime","reverse","eventList","addValues","lastResource","resCol","groupId_1","l","eventList_1","dateValue","formElements_3","detachComponents","formElements_4","isIgnore","VirtualScroll","itemSize","bufferCount","renderedLength","getRenderedCount","setItemSize","containerSize","colCount","updateVirtualScrollHeight","lastResourceIndex","lastRenderIndex","updateVirtualTrackHeight","resourceCount","resWrap","eventWrap","setTranslate","lastCollIndex","renderedResCount","setTabIndex","refreshProcessedData","hideSpinner","horizontalScrolling","firstTDIndex","upScroll","downScroll","showSpinner","focusedEle","updateContent","clearTimeout","timeValue","leftScroll","rightScroll","updateHorizontalContent","prevSetCollection","getBufferCollection","nextSetResIndex","lastIndex","nextSetCollection","getCollection","nextSetIndex","getResCollection","getByDateCollection","setRenderedDates","getByIdCollection","firstItem","lastItem","setStartEndIndex","isResourceCell","resourceRows","contentRows","eventRows","getEventRows","colGroupEle_1","updateFocusedWorkCell","dateCol_1","dateCol_2","resColWrap","focusResCell","Render","isDataRefresh","initializeLayout","templates","dayModule","weekModule","workWeekModule","yearModule","monthAgendaModule","timelineViewsModule","timelineMonthModule","timelineYearModule","firstView","updateLabelText","enableCompactView","updateHeader","currentTimezoneDate","getLabelText","WorkHours","TimeScale","QuickInfoTemplates","HeaderRows","Crud","getQuery","getTable","fromTable","dataManagerSuccess","catch","dataManagerFailure","resultData","isVirtualScrollAction","templateNames","refreshData","actionArgs","addedRecords","editParams","changedRecords","deletedRecords","crudData","crudData_1","offline","offlineArgs","onlineArgs","isBlockEvent","addEvents","addArgs","eventData_1","saveChanges","insert","crudArgs","updateEvents","processSave","processOccurrences","processFollowSeries","processEntireSeries","saveArgs","eventData_2","update","deleteEvents","deleteArgs","occurrenceData","isDeletedRecords","eventData_3","occurrenceArgs","occurrenceEvents","childEvent","parentException","exceptionDate","excludeDateCheck","followData","eventData_4","updateFollowEvents","followArgs","followEvents","followData_1","processRecurrenceRule","seriesData","eventData_5","event_7","updateSeriesEvents","seriesArgs","fields_2","_loop_4","eventCollections","deletedEvents","originalParent","deleteData","eventData_6","fields_3","_loop_5","isDelete","parentEvent_1","isEdited","editedDate","eventData_7","editArgs","exceptionString","parentEle","exceptionDateList","followEvent","newRecurrenceRule","ruleException","getUpdatedRecurrenceRule","splitRule","updatedRule","splitRule_1","ruleKey","ruleValue","event_8","WorkCellInteraction","onHover","navigateView","sameView","viewOptions","isWorkCell_1","clickArgs","hoverTarget","hoverArgs","FieldOptions","Field","EventSettings","Group","Resources","CONTROL","COLLAPSIBLE","EXPANDABLE","LISTITEM","LISTTEXT","LISTWRAP","IELISTWRAP","PARENTITEM","HOVER","LOAD","PROCESS","TEXTWRAP","INPUT","INPUTGROUP","TREEINPUT","EDITING","INTERACTION","DRAGITEM","DROPPABLE","DRAGGING","SIBLING","DROPIN","DROPNEXT","DROPOUT","NODROP","FULLROWWRAP","FULLROW","SELECTED","EXPANDED","NODECOLLAPSED","DISABLE","DROPCOUNT","CHECK","INDETERMINATE","CHECKBOXWRAP","CHECKBOXFRAME","CHECKBOXRIPPLE","RIPPLE","RIPPLEELMENT","FOCUS","IMAGE","BIGGER","SMALL","CHILD","ITEM_ANIMATION_ACTIVE","DISABLED","PREVENTSELECT","treeAriaAttr","treeRole","itemRole","listRole","itemText","wrapperRole","FieldsSettings","ActionSettings","NodeAnimationSettings","easing","TreeView","isRefreshed","preventExpand","checkedElement","disableNode","validArr","validNodes","expandChildren","isFieldChange","changeDataSource","hasTemplate","isFirstRender","isNodeDropped","isRightClick","mouseDownStatus","TreeView_1","checkActionNodes","parentNodeCheck","dragStartAction","isAnimate","f2","moveDown","moveLeft","moveRight","moveUp","ctrlDown","ctrlUp","ctrlEnter","ctrlHome","ctrlEnd","ctrlA","shiftDown","shiftUp","shiftEnter","shiftHome","shiftEnd","csDown","csUp","csEnter","csHome","csEnd","space","shiftSpace","ctrlSpace","listBaseOption","expandCollapse","showIcon","expandIconClass","ariaAttributes","expandIconPosition","itemCreated","beforeNodeCreate","itemNavigable","fullRowNavigable","updateListProp","aniObj","treeList","isLoaded","isInitalExpand","setTouchClass","selectedNodes","checkedNodes","expandedNodes","keyEntity","initialRender","setDataBinding","setDisabledMode","setExpandOnType","setRipple","wireEditingEvents","setDragAndDrop","allowDragAndDrop","wireEvents","setCssClass","setEnableRtl","setFullRow","fullRowSelect","setTextWrap","nodeTemplateFn","templateComplier","nodeTemplate","rippleModel","ignore","rippleFn","iconModel","isCenterRipple","rippleIconFn","isEnabled","setMultiSelect","firstUl","isOffline","ready","pop","treeData","isNumberTypeId","getType","setRootData","renderItems","finalize","rootData","mapper","getActualProperties","from","tableName","addSorting","sortOrder","parentID","dataType","getDataType","groupedData","getGroupedData","rootItems","getChildNodes","isSorted","sortedData","getSortedData","ulElement","rootNodes","loadOnDemand","renderChildNodes","finalizeNode","parentCheckData","updateCheckedStateFromDS","autoCheck","showCheckBox","updateParentCheckState","isChecked","resultId","hasChildren","childData","childId","mapper_1","checkState","getCheckedNodeDetails","checkIndeterminateState","checkedId","checkedData","fieldId","childItems","updateChildCheckState","checkNodes","check","changeState","preElement","childCheckedElement","indeterminate","nodeId","nodeCheck","ariaChecked","checkedParent","checkedChild","subChildItems","checkboxEle","touchClass","icon","checkValue","curData","addCheck","frame","frameMouseHandler","createFullRow","allowMultiSelection","addActionClass","selected","expanded","focusIn","dataId","renderNodeTemplate","nodeData","selectable","rippleSpan","actionValue","ds","groupBy","cusQuery","getDataSource","grpItem","itemObj","list","iNodes","sNodes","selectNode","cNodes","disableExpandAttr","eNodes","updateList","updateCheckedProp","nodes","ensureIndeterminate","liElement","ensureParentCheckState","ensureChildCheckState","indeterminateNodes","checkBoxEle","getElementsByClassName","parentUL","currentParent","childElement","checkBoxes","parentCheck","childCheck","checkedState","currentLoadData","isNodeChecked","doCheckBoxAction","doCheck","updateFieldChecked","liEle","getElement","setValidCheckedNode","dynamicCheckState","updateField","validateCheckNode","checkbox","currLi","nodeDetails","getNodeData","updateIndeterminate","subChild","updateChildIndeterminate","indeterminateData","getTreeData","subId","childElementCheck","innerChild","isPrevent","isAdd","nodeCheckAction","getCheckEvent","observedArgs","ariaState","frameSpan","removeCheck","ensureStateChange","firstNode","updateIdAttr","allowTextWrap","updateWrap","renderReactTemplates","hasPid","doExpandAction","isIE","ulEle","liList","calculateWrap","nextElementSibling","eUids","expandGivenNodes","eNode","expandAction","afterFinalized","arr","proxy","expandCallback","eUid","callback","doSelectionAction","sUids","sNode","selectGivenNodes","clickHandler","isIos","preventContextMenu","rippleElement","rippleIcons","removeHover","setFocusElement","checkWrapper","checkElement","triggerClickEvent","collapseNode","toggleSelect","nodeCheckedEvent","isCheck","expandNode","loaded","start_1","end_1","proxy_1","ul_1","liEle_1","activeElement_1","animate","timingFunction","begin","HTMLElement","progress","animateHeight","expandedNode","ul","addExpand","expandArgs","getExpandEvent","colArgs","nodeCollapseAction","collapse","collapsedNode","removeExpand","toRemove","remaining","timeStamp","currentHeight","parentLi","expandChild","eicon","parents","mapper_2","getChildFields","loadChild","setSelectionForChildNodes","ensureCheckNode","disableTreeNodes","renderSubChild","getNodeObject","doDisableAction","getFields","nodeLevel","dataLevel","getChildMapper","parentId","isRoot","getChildGroup","findIndex","objlen","cIcons","curLi","multiSelect","isActive","unselectNode","getSelectEvent","nodeSelectAction","removeSelectAll","startNode","currNode","addSelect","nodeUnselectAction","removeSelect","focusedNode","getFocusedNode","selectedLI","selectedLI_1","expandOnType","expandOn","expandHandler","expandCollapseAction","nodeExpandAction","nodeName","liEles","getId","icon_1","inpEle","blur","oldText","checkNode","openNode","shiftKeySelect","navigateNode","navigateRootNode","createTextbox","navigateToFocus","focusNode","getScrollParent","parentPos","isVisible","isVisibleInViewport","scrollIntoView","txtWrap","innerWidth","isTowards","nextNode","getNextNode","getPrevNode","checkWrap","nodeCheckingAction","allCheckNode","parentIndex","getChildItems","childStateChange","childIsCheck","newCheck","validateCheck","hierChildId","childId_1","toBeOpened","focusNextNode","setFocus","isBackwards","rootNode","getRootNode","getEndNode","selectedItem","fNode","lastChild","previousSibling","nextSibling","prevNode","endNode","preNode","focusedElement","onMouseOver","currentLi","setHover","onMouseLeave","hoveredNode","fromDS","getText","pNode","pid","checkboxElement","nodeFields","tempArr","isStringTemplate","root","destroyTemplate","clearTemplate","reRenderNodes","oldClass","newClass","editingHandler","oldInpEle","updateOldText","innerEle","getEditEvent","inpWidth","style_1","isReact","innerHtml","inputObj","inputEle","wireInputEvents","editFields","inputFocusOut","newText","txtEle","crudOperation","appendNewText","isInput","updateText","triggerEvent","getNode","newData","getChildNodeObject","newList","toBind","initializeDrag","destroyDrag","virtualEle","dragTarget","tapHoldThreshold","sender","dragRoot","dragWrap","dragLi","isSameNode","nLen","cNode","dragData","listItem","getDragEvent","draggedNode","dragCancelAction","targetTouches","dragAction","removeVirtualEle","dropTarget","preventTargetExpand","dropRoot","dragParent","draggedParentNode","dropObj","over","drop","dropAction","dropWrap","dropLi","isDescendant","templateTarget","appendIndicator","renderVirtualEle","dropIndicator","virEle","dragInstance","liArray","draggable","i_1","droppedElement","i_2","appendNode","i_3","draggedElement","dropAsChildNode","dropAsSiblingNode","pre","dropUl","dragParentUl","dragParentLi","moveData","updateElement","updateAriaLevel","updateInstance","dropParentUl","expandParent","childLi","dropParentLi","removedData","updateChildField","refId","getDataPos","currPid","removeChildNodes","addChildData","dropIcon","generateIcon","generateUL","dragIcon","updateChildAriaLevel","sibEle","dragNode","dropData","draggedNodeData","newParent","dragLiParent","targetParent","indexValue","dropTar","parent_2","parent_3","hasAttribute","clonedNode","droppedNode","droppedNodeData","dropIndex","dropLevel","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeNode","removeData","updateSelectedNodes","updateExpandedNodes","dm","newId","currId","doGivenAction","toExpand","addGivenNodes","isRemote","dropEle","updateMapper","refNode","dropIcon1","createListItemFromJson","returnValue","navigateUrl","updated","nodeType","validID","checkValidId","doEnableAction","strNodes","filterNestedChild","updatePersistProp","removeField","sleNodes","slelen","enodes","nodelen","cnodes","names","getMapperProp","proxy_2","touchEditObj","tap","tapCount","wireClickEvent","proxy_3","touchClickObj","wireExpandOnEvent","proxy_4","touchExpandObj","mouseDownHandler","matched","secondTap","firstTap","setCheckedNodes","uncheckAll","setIndeterminate","checkAll","setChildCheckState","parent_4","updatePosition","isRefreshChild","childValue","updateChildPosition","currID","dynamicState","operation","newNode","crud","matchedArr","changes","nodesID","deleteSuccess","dmFailure","editSucess","addSuccess","updatePreviousText","getHierarchicalParentId","parentsID","collapseAll","onLoaded","addNodes","beginEdit","disableNodes","enableNodes","ensureVisible","parentsId","expandAll","behavior","getAllCheckedNodes","getDisabledNodes","disabledNodes","moveNodes","sourceNodes","refreshNode","updatedChildValue","newNodeData","parentData","newliEle","newTextEle","newIcon","fullEle","tooltip","attr","class","removeNodes","updateNode","ResourceBase","leftPixel","resourceDateTree","renderResourceHeaderIndent","resColTd","resColDiv","headerIndentTemplate","hideResourceRows","trCount","ClassName","expandedField","slicedCollection","Count","createResourceColumn","resDiv","generateTreeData","countCalculation","setExpandedResources","setRenderedResources","isExpanded","rIndex","resRows","tabindex","iconDiv","setMargin","onTreeIconClick","resourceHeaderTemplate","classCollection","marginRight","marginLeft","wholeCollection","totalCount","eventElements","eventElements_1","updateVirtualContent","refreshEvents","rowCollection","workCellCollection","headerRowCollection","clickedRes","clonedCollection","trElem","sIndex","virtualTrack","resTable","renderResourceHeader","resourceWrapper","renderResourceHeaderText","menuClick","renderResourceTree","popupOverlay","treeWrapper","resourceTree","treeViewObj","nodeClicked","resourceClick","created","resourceTreeCreated","treePopup","portals","isTimeLine","treeCollection","resTreeColl","treeHandler","treeLevel","levelId","treeArgs","resourceName","resourceChild","resourceTreeLevel","headerCollection","levelIcon","headerWrapper","headerCollection_1","treeNodes","selectResourceByIndex","triggerEvents","renderModule","bindResourcesData","isSetModel","promises","resourceObj","getResourceModel","refreshLayout","workDaysField","cssClassField","renderElements","setResourceCollection","requiredResources","colorIndex","requiredResources_1","resourceColorField","innerDates","resTreeGroup","lastColumnDates","prevResource","prevResourceData","prevOrder","resTree","resWorkDays","generateCustomHours","resCssClass","slotData","resourceLevelIndex","generateHeaderLevels","dateSlots_1","dateSlot","headerDates","headerLevels","currentLevelChilds","currentLevelChilds_1","currentLevelChild","nextLevelChilds","nextLevelChilds_1","nextLevelChild","lastLevelResource","dateHeaderLevels","datesColumn","dateIndex","this_3","currentDateLevels","resTd_1","filterDates","currentLevel","filteredResource","existedResource","filteredTd","headerDates_1","unshift","dateColSpan","firstRowTd","headerDates_2","resGroup","length_2","_k","_l","resTd","setValues","colorFieldIndex","filterData","getCssClass","getResourceRenderDates","resourceDates","removeDuplicateDates","dateColl","groupEditIndex","groupEditIndex_1","length_3","length_4","addResource","_loop_6","addObj","removeResource","_loop_7","removeObj","state_2","resourceExpand","resourceScroll","scrollElement","offsetTarget","treeViewTemplates","propName","resToolBarEle","Schedule","addClasses","cssClass_1","cls_1","validateDate","scrollModule","initializeDataModule","renderTableContainer","getActiveViewOptions","initializeResources","isAngular","isLayoutOnly","initializeView","destroyHeaderModule","showHeaderBar","isTouch","destroyPopups","initializePopups","getViewIndex","checkIndex","setViewOptions","isModuleLoad","selectedView","prevIndex","isOptions","isSelected","fieldViewName","cellHeaderTemplateName","cellHeaderTemplate","dayHeaderTemplateName","dayHeaderTemplate","monthHeaderTemplateName","monthHeaderTemplate","resourceHeaderTemplateName","headerIndentTemplateName","isYearView","scheduleOptions","internalTimeFormat","viewsData","setEditorTitles","initializeTemplates","cellHeaderTemplateFn","templateParser","dayHeaderTemplateFn","monthHeaderTemplateFn","cellTemplateFn","dateHeaderTemplateFn","dateRangeTemplateFn","majorSlotTemplateFn","minorSlotTemplateFn","appointmentTemplateFn","resourceHeaderTemplateFn","headerIndentTemplateFn","headerTooltipTemplateFn","eventTooltipTemplateFn","editorTemplateFn","quickInfoTemplatesHeaderFn","quickInfoTemplatesContentFn","quickInfoTemplatesFooterFn","getDayNames","culShortNames","setCldrTimeFormat","getDateTime","setCalendarMode","muteOnChange","previousView","navigationArgs","animateLayout","monthAgendaDate","requiredModules","modules","member","getDefaultLocale","workWeek","agenda","weekAgenda","workWeekAgenda","monthAgenda","today","emptyContainer","allDay","noTitle","deleteMultipleEvent","selectedItems","deleteSeries","edit","editSeries","editEvent","addTitle","moreDetails","editContent","deleteContent","deleteMultipleContent","newEvent","recurrence","wrongPattern","seriesChangeAlert","createError","sameDayAlert","occurenceAlert","editRecurrence","repeats","startEndError","invalidDateError","blockAlert","ok","yes","no","series","previous","next","timelineDay","timelineWeek","timelineWorkWeek","timelineMonth","timelineYear","editFollowingEvent","deleteTitle","editTitle","beginFrom","endAt","expandAllDaySection","collapseAllDaySection","searchTimezone","noRecords","onScheduleResize","onDocumentClick","isPreventScroll","cells_1","isAllDayCell","dateInMS","getTargetElement","getCellHeaderTemplate","getDayHeaderTemplate","getMonthHeaderTemplate","getResourceHeaderTemplate","getHeaderIndentTemplate","cssProps","eventClone","startEndTime","startEndDate","resetColWidth","constantText","recordSubject","startDateText","endDateText","announcementString","autoScrollDistance","viewBoundaries","weekNumber","weekRule","weekNumberDate","formatNumber","weekFirstDate","weekLastDate","weekMidDate","indentTemplate","isRefresh","isDate","isView","isLayout","isDataManager","setRtlClass","extendedPropertyChange","propertyChangeAction","allDayRowScrollUpdate","onEventSettingsPropertyChanged","onGroupSettingsPropertyChanged","setWorkHours","getWorkHourCells","resetWorkHours","workHourCells","viewStartHour","viewEndHour","tempStartIndex","tempEndIndex","tds","tdCol","firstTd","lastTd","endDateFromColSpan","getResourceCollections","setResourceCollections","resourceCol","changeCurrentView","getCurrentViewIndex","getResourcesByIndex","groupData","expandResource","collapseResource","scrollTo","scrollToResource","groupName","exportToICalendar","iCalendarExportModule","initializeCalendarExport","importICalendar","fileContent","iCalendarImportModule","initializeCalendarImport","generateEventOccurrences","exportToExcel","excelExportModule","printOptions","printModule","getEvents","getBlockEvents","eventID","getCurrentViewEvents","isRemoteRefresh","refreshTemplates","refreshResourceHeader","isSlotAvailable","closeEditor","openQuickInfoPopup","selectEvent","occurence","closeQuickInfoPopup","closeTooltip","modules_1","ViewsDirective","inject","custom","h","$slots","getTag","ViewsPlugin","install","component","ViewDirective","ViewPlugin","HeaderRowsDirective","HeaderRowsPlugin","HeaderRowDirective","HeaderRowPlugin","modelProps","testProp","watch","emitProbs","modelProps_1","props_1","ScheduleComponent","mixins","emits","model","provide","ej2Instance","propKeys","models","hasChildDirective","hasInjectedModules","tagMapper","tagNameMapper","isVue3","templateCollection","ej2Instances","_trigger","bindProperties","_setProperties","templateNames_1","tempName","elementCollection","elementCollection_1","__vue__","$destroy","referModels","vueInstance","$emit","successHandler","propKey","$props","isLazyUpdate","SchedulePlugin","ResourcesDirective","ResourcesPlugin","ResourceDirective","ResourcePlugin","MonthAgenda","dayNameFormat","renderAppointmentContainer","contentArea","wrapperContainer","appendAppContainer","setEventWrapperHeight","getDayNameFormat","updateSelectedCellClass","headerHeight","availHeight","contentAreaHeight","appContainerHeight","onDataReady","clearElements","agendaBase","getAgendaBase","appointmentFiltering","onEventRender","onCellClick","appointmentIndicators","appointmentIndicators_1","appointmentIndicator","navigateDate","valueComparator","Function","deepEqual","Month","monthDates","onScrollUIUpdate","scrollPosition","scrollToSelectedDate","headerCell","levels_1","isCurrentMonth","renderWeekNumberContent","monthAgendaWrapper","contentWrapper","contentWrapTable","createWeekNumberElement","createHeaderCell","elementId","getContentSlots","slotDatas","prepareSlots","renderDate","includeResource","colDates","out_j_1","colDate","resourcesTd","colDates_1","updateClassList","isOtherMonth","trows","renderDateHeaderElement","announcementText","getMonthStart","useDisplayDate","isCustomRange","getMonthEnd","numberOfDays","lastWeekOfMonth","updateCustomRange","isUpdateDateRange","monthNames","formatDateRange","TimelineMonth","scrollHeaderLabels","contentTr","contentTd","createEventTable","getRowCount","collapseRows","resLevel","hourSlots","renderGn","MonthEvent","monthHeaderHeight","enableMaxHeight","enableIndicator","removeEventWrapper","appElement","appElement_1","appointmentWrapper_1","enablePersistence","totalCells_1","weekNumberCells","blockList","totalCells","height_1","cellDetail","processBlockEvents","eventsList_1","sDate","updateIndicatorIcon","blockSpannedList","isSameDate","isBlockIcon","blockSpannedList_1","blockEvent","spannedEvents_2","renderBlockEvents","isIcon","cloneData","actualStartTime","actualStartHour","actualEndHour","sourceRes","resources_1","isCloneElement","newRecord","getEventData","appointmentStartTime","appointmentEndTime","innerElement","allDayString","appTime","appendEventIcons","enableAppRender","getMoreIndicatorText","dateTime","moreArgs","isPopupOpen","moreArgs_1","eventType","wrapperEle","TimelineViews","timelineAppointment","currDateTime","getWorkCellWidth","getLeftFromDateTime","generateTimeSlots","timeSlotData","tempTimeSlots","tempTimeSlots_1","headerWrap","diffInDates","getResourceTdData","resSHr","resEHr","Selectable","indeterminateIcon","offIcon","onIcon","inputIndeterminate","computed","classes","VInput","computedIcon","validationState","hasError","shouldValidate","hasSuccess","hasColor","computedColor","$nextTick","genCheckbox","checkboxAttrs","attrs$","VIcon","setTextColor","dense","dark","light","genInput","rippleState","genDefaultSlot","genLabel","Day","_vm","_self","innerStyles","_m","staticRenderFns","secondaryColor","Week","getViewStartDate","getViewEndDate","VerticalEvent","renderedAllDayEvents","overlapEvents","moreEvents","overlapList","allDayEvents","animationUiUpdate","wrapperElements","isDragging","wrapperElements_1","setAllDayRowHeight","rowExpandCollapse","appendEvent","getResourceList","dateCount","filterEvents_1","dayCount","spannedData","isWorkDayAvailable","blockTop","blockHeight","isRender","allDayRowTop","renderedDate","filterEvents_2","getOverlapIndex","filterEvents_3","resources_2","renderedIndex","firstColumn","currentResources","resourceIndex","appointmentTime","appointmentLocation","recurrenceIcon","createMoreIndicator","currentDay","countWrapper","innerCountWrap","countCell","moreCount","currentDates","isDateRange","isAlreadyRendered","allDayDifference_1","allDayIndex_1","widthAdjustment","appointmentElement_1","wIndex_1","eventWrapper_1","allDayRowHeight","addOrRemoveClass","adjustOverlapElements","iconHeight","tempWidth","getEventLeft","tempLeft","date_1","appointmentList_1","appointment_1","recordStart_1","recordEnd_1","filterList","record_1","length1","length2","eleGuid","moreEventCount","getEventHeight","ViewBase","prev","colGroupEle","headerTable","colWidth","applyLeft","headerCells","isRtl","tdLeft","hiddenLeft","headerCells_2","classNames_1","headerCells_1","resHeader","panel","agendaDaysCount","weekLength","viewStr","formattedStr","longDateFormat","toLocaleLowerCase","tdElement","quickTemplate","getColElements","colElements","contentBody","colWidth_1","resourceColumn","headerCellElements","headerCellColSpan","colElements_1","wireExpandCollapseIconEvents","treeIcons","treeIcons_1","scrollWrap","renderedCount","TimelineHeaderRow","groupByYear","groupByMonth","dates_2","groupByWeek","dates_3","jsDate","generateSlots","colspan","cls","dateParser","tdDatas","htmlCol","viewTemplate","lastLevelColspan","byYear","byMonth","byWeek","Agenda","agendaDates","virtualScrollTop","eventLoad","renderInitialContent","refreshEvent","refreshDate","emptyTBody","contentChild","emptyTBody_1","isObject","updateHeaderText","nTr","cTd","agendaScrolling","filterDate","totalHeight","topElement","getElementFromScrollerPosition","getPreviousNextDate","scrollToValue","filterElement","liDetails","liCollection","getStartDateFromEndDate","onAgendaScrollUiUpdate","Rippleable","Comparable","inputValue","falseValue","trueValue","multiple","lazyValue","isDark","appIsDark","internalValue","isDirty","assign","computedId","domProps","onBlur","onFocus","keydown","onKeydown","onClick","isInteractive"],"mappings":"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","file":"js/chunk-84245446.2d0274d6.js","sourcesContent":["/**\n * Time zone\n */\nvar Timezone = /** @class */ (function () {\n function Timezone() {\n this.timezoneData = [];\n this.timezoneData = this.getTimezoneData();\n }\n Timezone.prototype.offset = function (date, timezone) {\n var localOffset = date.getTimezoneOffset();\n try {\n var convertedDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n if (!isNaN(convertedDate.getTime())) {\n return ((date.getTime() - convertedDate.getTime()) / 60000) + localOffset;\n }\n return 0;\n }\n catch (error) {\n return 0;\n }\n };\n Timezone.prototype.convert = function (date, fromOffset, toOffset) {\n if (typeof fromOffset === 'string') {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset === 'string') {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n };\n Timezone.prototype.add = function (date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n };\n Timezone.prototype.remove = function (date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n };\n Timezone.prototype.removeLocalOffset = function (date) {\n return new Date(date.getTime() - (date.getTimezoneOffset() * 60000));\n };\n Timezone.prototype.getLocalTimezoneName = function () {\n return window.Intl ? Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC' : 'UTC';\n };\n Timezone.prototype.getTimezoneData = function () {\n return timezoneData;\n };\n return Timezone;\n}());\nexport { Timezone };\nexport var timezoneData = [\n { Value: 'Pacific/Niue', Text: '(UTC-11:00) Niue' },\n { Value: 'Pacific/Pago_Pago', Text: '(UTC-11:00) Pago Pago' },\n { Value: 'Pacific/Honolulu', Text: '(UTC-10:00) Hawaii Time' },\n { Value: 'Pacific/Rarotonga', Text: '(UTC-10:00) Rarotonga' },\n { Value: 'Pacific/Tahiti', Text: '(UTC-10:00) Tahiti' },\n { Value: 'Pacific/Marquesas', Text: '(UTC-09:30) Marquesas' },\n { Value: 'America/Anchorage', Text: '(UTC-09:00) Alaska Time' },\n { Value: 'Pacific/Gambier', Text: '(UTC-09:00) Gambier' },\n { Value: 'America/Los_Angeles', Text: '(UTC-08:00) Pacific Time' },\n { Value: 'America/Tijuana', Text: '(UTC-08:00) Pacific Time - Tijuana' },\n { Value: 'America/Vancouver', Text: '(UTC-08:00) Pacific Time - Vancouver' },\n { Value: 'America/Whitehorse', Text: '(UTC-08:00) Pacific Time - Whitehorse' },\n { Value: 'Pacific/Pitcairn', Text: '(UTC-08:00) Pitcairn' },\n { Value: 'America/Denver', Text: '(UTC-07:00) Mountain Time' },\n { Value: 'America/Phoenix', Text: '(UTC-07:00) Mountain Time - Arizona' },\n { Value: 'America/Mazatlan', Text: '(UTC-07:00) Mountain Time - Chihuahua, Mazatlan' },\n { Value: 'America/Dawson_Creek', Text: '(UTC-07:00) Mountain Time - Dawson Creek' },\n { Value: 'America/Edmonton', Text: '(UTC-07:00) Mountain Time - Edmonton' },\n { Value: 'America/Hermosillo', Text: '(UTC-07:00) Mountain Time - Hermosillo' },\n { Value: 'America/Yellowknife', Text: '(UTC-07:00) Mountain Time - Yellowknife' },\n { Value: 'America/Belize', Text: '(UTC-06:00) Belize' },\n { Value: 'America/Chicago', Text: '(UTC-06:00) Central Time' },\n { Value: 'America/Mexico_City', Text: '(UTC-06:00) Central Time - Mexico City' },\n { Value: 'America/Regina', Text: '(UTC-06:00) Central Time - Regina' },\n { Value: 'America/Tegucigalpa', Text: '(UTC-06:00) Central Time - Tegucigalpa' },\n { Value: 'America/Winnipeg', Text: '(UTC-06:00) Central Time - Winnipeg' },\n { Value: 'America/Costa_Rica', Text: '(UTC-06:00) Costa Rica' },\n { Value: 'America/El_Salvador', Text: '(UTC-06:00) El Salvador' },\n { Value: 'Pacific/Galapagos', Text: '(UTC-06:00) Galapagos' },\n { Value: 'America/Guatemala', Text: '(UTC-06:00) Guatemala' },\n { Value: 'America/Managua', Text: '(UTC-06:00) Managua' },\n { Value: 'America/Cancun', Text: '(UTC-05:00) America Cancun' },\n { Value: 'America/Bogota', Text: '(UTC-05:00) Bogota' },\n { Value: 'Pacific/Easter', Text: '(UTC-05:00) Easter Island' },\n { Value: 'America/New_York', Text: '(UTC-05:00) Eastern Time' },\n { Value: 'America/Iqaluit', Text: '(UTC-05:00) Eastern Time - Iqaluit' },\n { Value: 'America/Toronto', Text: '(UTC-05:00) Eastern Time - Toronto' },\n { Value: 'America/Guayaquil', Text: '(UTC-05:00) Guayaquil' },\n { Value: 'America/Havana', Text: '(UTC-05:00) Havana' },\n { Value: 'America/Jamaica', Text: '(UTC-05:00) Jamaica' },\n { Value: 'America/Lima', Text: '(UTC-05:00) Lima' },\n { Value: 'America/Nassau', Text: '(UTC-05:00) Nassau' },\n { Value: 'America/Panama', Text: '(UTC-05:00) Panama' },\n { Value: 'America/Port-au-Prince', Text: '(UTC-05:00) Port-au-Prince' },\n { Value: 'America/Rio_Branco', Text: '(UTC-05:00) Rio Branco' },\n { Value: 'America/Halifax', Text: '(UTC-04:00) Atlantic Time - Halifax' },\n { Value: 'America/Barbados', Text: '(UTC-04:00) Barbados' },\n { Value: 'Atlantic/Bermuda', Text: '(UTC-04:00) Bermuda' },\n { Value: 'America/Boa_Vista', Text: '(UTC-04:00) Boa Vista' },\n { Value: 'America/Caracas', Text: '(UTC-04:00) Caracas' },\n { Value: 'America/Curacao', Text: '(UTC-04:00) Curacao' },\n { Value: 'America/Grand_Turk', Text: '(UTC-04:00) Grand Turk' },\n { Value: 'America/Guyana', Text: '(UTC-04:00) Guyana' },\n { Value: 'America/La_Paz', Text: '(UTC-04:00) La Paz' },\n { Value: 'America/Manaus', Text: '(UTC-04:00) Manaus' },\n { Value: 'America/Martinique', Text: '(UTC-04:00) Martinique' },\n { Value: 'America/Port_of_Spain', Text: '(UTC-04:00) Port of Spain' },\n { Value: 'America/Porto_Velho', Text: '(UTC-04:00) Porto Velho' },\n { Value: 'America/Puerto_Rico', Text: '(UTC-04:00) Puerto Rico' },\n { Value: 'America/Santo_Domingo', Text: '(UTC-04:00) Santo Domingo' },\n { Value: 'America/Thule', Text: '(UTC-04:00) Thule' },\n { Value: 'America/St_Johns', Text: '(UTC-03:30) Newfoundland Time - St. Johns' },\n { Value: 'America/Araguaina', Text: '(UTC-03:00) Araguaina' },\n { Value: 'America/Asuncion', Text: '(UTC-03:00) Asuncion' },\n { Value: 'America/Belem', Text: '(UTC-03:00) Belem' },\n { Value: 'America/Argentina/Buenos_Aires', Text: '(UTC-03:00) Buenos Aires' },\n { Value: 'America/Campo_Grande', Text: '(UTC-03:00) Campo Grande' },\n { Value: 'America/Cayenne', Text: '(UTC-03:00) Cayenne' },\n { Value: 'America/Cuiaba', Text: '(UTC-03:00) Cuiaba' },\n { Value: 'America/Fortaleza', Text: '(UTC-03:00) Fortaleza' },\n { Value: 'America/Godthab', Text: '(UTC-03:00) Godthab' },\n { Value: 'America/Maceio', Text: '(UTC-03:00) Maceio' },\n { Value: 'America/Miquelon', Text: '(UTC-03:00) Miquelon' },\n { Value: 'America/Montevideo', Text: '(UTC-03:00) Montevideo' },\n { Value: 'Antarctica/Palmer', Text: '(UTC-03:00) Palmer' },\n { Value: 'America/Paramaribo', Text: '(UTC-03:00) Paramaribo' },\n { Value: 'America/Punta_Arenas', Text: '(UTC-03:00) Punta Arenas' },\n { Value: 'America/Recife', Text: '(UTC-03:00) Recife' },\n { Value: 'Antarctica/Rothera', Text: '(UTC-03:00) Rothera' },\n { Value: 'America/Bahia', Text: '(UTC-03:00) Salvador' },\n { Value: 'America/Santiago', Text: '(UTC-03:00) Santiago' },\n { Value: 'Atlantic/Stanley', Text: '(UTC-03:00) Stanley' },\n { Value: 'America/Noronha', Text: '(UTC-02:00) Noronha' },\n { Value: 'America/Sao_Paulo', Text: '(UTC-02:00) Sao Paulo' },\n { Value: 'Atlantic/South_Georgia', Text: '(UTC-02:00) South Georgia' },\n { Value: 'Atlantic/Azores', Text: '(UTC-01:00) Azores' },\n { Value: 'Atlantic/Cape_Verde', Text: '(UTC-01:00) Cape Verde' },\n { Value: 'America/Scoresbysund', Text: '(UTC-01:00) Scoresbysund' },\n { Value: 'Africa/Abidjan', Text: '(UTC+00:00) Abidjan' },\n { Value: 'Africa/Accra', Text: '(UTC+00:00) Accra' },\n { Value: 'Africa/Bissau', Text: '(UTC+00:00) Bissau' },\n { Value: 'Atlantic/Canary', Text: '(UTC+00:00) Canary Islands' },\n { Value: 'Africa/Casablanca', Text: '(UTC+00:00) Casablanca' },\n { Value: 'America/Danmarkshavn', Text: '(UTC+00:00) Danmarkshavn' },\n { Value: 'Europe/Dublin', Text: '(UTC+00:00) Dublin' },\n { Value: 'Africa/El_Aaiun', Text: '(UTC+00:00) El Aaiun' },\n { Value: 'Atlantic/Faroe', Text: '(UTC+00:00) Faeroe' },\n { Value: 'Etc/UTC', Text: '(UTC+00:00) UTC (no daylight saving)' },\n { Value: 'Europe/Lisbon', Text: '(UTC+00:00) Lisbon' },\n { Value: 'Europe/London', Text: '(UTC+00:00) London' },\n { Value: 'Africa/Monrovia', Text: '(UTC+00:00) Monrovia' },\n { Value: 'Atlantic/Reykjavik', Text: '(UTC+00:00) Reykjavik' },\n { Value: 'UTC', Text: 'UTC' },\n { Value: 'Africa/Algiers', Text: '(UTC+01:00) Algiers' },\n { Value: 'Europe/Amsterdam', Text: '(UTC+01:00) Amsterdam' },\n { Value: 'Europe/Andorra', Text: '(UTC+01:00) Andorra' },\n { Value: 'Europe/Berlin', Text: '(UTC+01:00) Berlin' },\n { Value: 'Europe/Brussels', Text: '(UTC+01:00) Brussels' },\n { Value: 'Europe/Budapest', Text: '(UTC+01:00) Budapest' },\n { Value: 'Europe/Belgrade', Text: '(UTC+01:00) Central European Time - Belgrade' },\n { Value: 'Europe/Prague', Text: '(UTC+01:00) Central European Time - Prague' },\n { Value: 'Africa/Ceuta', Text: '(UTC+01:00) Ceuta' },\n { Value: 'Europe/Copenhagen', Text: '(UTC+01:00) Copenhagen' },\n { Value: 'Europe/Gibraltar', Text: '(UTC+01:00) Gibraltar' },\n { Value: 'Africa/Lagos', Text: '(UTC+01:00) Lagos' },\n { Value: 'Europe/Luxembourg', Text: '(UTC+01:00) Luxembourg' },\n { Value: 'Europe/Madrid', Text: '(UTC+01:00) Madrid' },\n { Value: 'Europe/Malta', Text: '(UTC+01:00) Malta' },\n { Value: 'Europe/Monaco', Text: '(UTC+01:00) Monaco' },\n { Value: 'Africa/Ndjamena', Text: '(UTC+01:00) Ndjamena' },\n { Value: 'Europe/Oslo', Text: '(UTC+01:00) Oslo' },\n { Value: 'Europe/Paris', Text: '(UTC+01:00) Paris' },\n { Value: 'Europe/Rome', Text: '(UTC+01:00) Rome' },\n { Value: 'Europe/Stockholm', Text: '(UTC+01:00) Stockholm' },\n { Value: 'Europe/Tirane', Text: '(UTC+01:00) Tirane' },\n { Value: 'Africa/Tunis', Text: '(UTC+01:00) Tunis' },\n { Value: 'Europe/Vienna', Text: '(UTC+01:00) Vienna' },\n { Value: 'Europe/Warsaw', Text: '(UTC+01:00) Warsaw' },\n { Value: 'Europe/Zurich', Text: '(UTC+01:00) Zurich' },\n { Value: 'Asia/Amman', Text: '(UTC+02:00) Amman' },\n { Value: 'Europe/Athens', Text: '(UTC+02:00) Athens' },\n { Value: 'Asia/Beirut', Text: '(UTC+02:00) Beirut' },\n { Value: 'Europe/Bucharest', Text: '(UTC+02:00) Bucharest' },\n { Value: 'Africa/Cairo', Text: '(UTC+02:00) Cairo' },\n { Value: 'Europe/Chisinau', Text: '(UTC+02:00) Chisinau' },\n { Value: 'Asia/Damascus', Text: '(UTC+02:00) Damascus' },\n { Value: 'Asia/Gaza', Text: '(UTC+02:00) Gaza' },\n { Value: 'Europe/Helsinki', Text: '(UTC+02:00) Helsinki' },\n { Value: 'Asia/Jerusalem', Text: '(UTC+02:00) Jerusalem' },\n { Value: 'Africa/Johannesburg', Text: '(UTC+02:00) Johannesburg' },\n { Value: 'Africa/Khartoum', Text: '(UTC+02:00) Khartoum' },\n { Value: 'Europe/Kiev', Text: '(UTC+02:00) Kiev' },\n { Value: 'Africa/Maputo', Text: '(UTC+02:00) Maputo' },\n { Value: 'Europe/Kaliningrad', Text: '(UTC+02:00) Moscow-01 - Kaliningrad' },\n { Value: 'Asia/Nicosia', Text: '(UTC+02:00) Nicosia' },\n { Value: 'Europe/Riga', Text: '(UTC+02:00) Riga' },\n { Value: 'Europe/Sofia', Text: '(UTC+02:00) Sofia' },\n { Value: 'Europe/Tallinn', Text: '(UTC+02:00) Tallinn' },\n { Value: 'Africa/Tripoli', Text: '(UTC+02:00) Tripoli' },\n { Value: 'Europe/Vilnius', Text: '(UTC+02:00) Vilnius' },\n { Value: 'Africa/Windhoek', Text: '(UTC+02:00) Windhoek' },\n { Value: 'Asia/Baghdad', Text: '(UTC+03:00) Baghdad' },\n { Value: 'Europe/Istanbul', Text: '(UTC+03:00) Istanbul' },\n { Value: 'Europe/Minsk', Text: '(UTC+03:00) Minsk' },\n { Value: 'Europe/Moscow', Text: '(UTC+03:00) Moscow+00 - Moscow' },\n { Value: 'Africa/Nairobi', Text: '(UTC+03:00) Nairobi' },\n { Value: 'Asia/Qatar', Text: '(UTC+03:00) Qatar' },\n { Value: 'Asia/Riyadh', Text: '(UTC+03:00) Riyadh' },\n { Value: 'Antarctica/Syowa', Text: '(UTC+03:00) Syowa' },\n { Value: 'Asia/Tehran', Text: '(UTC+03:30) Tehran' },\n { Value: 'Asia/Baku', Text: '(UTC+04:00) Baku' },\n { Value: 'Asia/Dubai', Text: '(UTC+04:00) Dubai' },\n { Value: 'Indian/Mahe', Text: '(UTC+04:00) Mahe' },\n { Value: 'Indian/Mauritius', Text: '(UTC+04:00) Mauritius' },\n { Value: 'Europe/Samara', Text: '(UTC+04:00) Moscow+01 - Samara' },\n { Value: 'Indian/Reunion', Text: '(UTC+04:00) Reunion' },\n { Value: 'Asia/Tbilisi', Text: '(UTC+04:00) Tbilisi' },\n { Value: 'Asia/Yerevan', Text: '(UTC+04:00) Yerevan' },\n { Value: 'Asia/Kabul', Text: '(UTC+04:30) Kabul' },\n { Value: 'Asia/Aqtau', Text: '(UTC+05:00) Aqtau' },\n { Value: 'Asia/Aqtobe', Text: '(UTC+05:00) Aqtobe' },\n { Value: 'Asia/Ashgabat', Text: '(UTC+05:00) Ashgabat' },\n { Value: 'Asia/Dushanbe', Text: '(UTC+05:00) Dushanbe' },\n { Value: 'Asia/Karachi', Text: '(UTC+05:00) Karachi' },\n { Value: 'Indian/Kerguelen', Text: '(UTC+05:00) Kerguelen' },\n { Value: 'Indian/Maldives', Text: '(UTC+05:00) Maldives' },\n { Value: 'Antarctica/Mawson', Text: '(UTC+05:00) Mawson' },\n { Value: 'Asia/Yekaterinburg', Text: '(UTC+05:00) Moscow+02 - Yekaterinburg' },\n { Value: 'Asia/Tashkent', Text: '(UTC+05:00) Tashkent' },\n { Value: 'Asia/Colombo', Text: '(UTC+05:30) Colombo' },\n { Value: 'Asia/Kolkata', Text: '(UTC+05:30) India Standard Time' },\n { Value: 'Asia/Katmandu', Text: '(UTC+05:45) Katmandu' },\n { Value: 'Asia/Almaty', Text: '(UTC+06:00) Almaty' },\n { Value: 'Asia/Bishkek', Text: '(UTC+06:00) Bishkek' },\n { Value: 'Indian/Chagos', Text: '(UTC+06:00) Chagos' },\n { Value: 'Asia/Dhaka', Text: '(UTC+06:00) Dhaka' },\n { Value: 'Asia/Omsk', Text: '(UTC+06:00) Moscow+03 - Omsk' },\n { Value: 'Asia/Thimphu', Text: '(UTC+06:00) Thimphu' },\n { Value: 'Antarctica/Vostok', Text: '(UTC+06:00) Vostok' },\n { Value: 'Indian/Cocos', Text: '(UTC+06:30) Cocos' },\n { Value: 'Asia/Yangon', Text: '(UTC+06:30) Rangoon' },\n { Value: 'Asia/Bangkok', Text: '(UTC+07:00) Bangkok' },\n { Value: 'Indian/Christmas', Text: '(UTC+07:00) Christmas' },\n { Value: 'Antarctica/Davis', Text: '(UTC+07:00) Davis' },\n { Value: 'Asia/Saigon', Text: '(UTC+07:00) Hanoi' },\n { Value: 'Asia/Hovd', Text: '(UTC+07:00) Hovd' },\n { Value: 'Asia/Jakarta', Text: '(UTC+07:00) Jakarta' },\n { Value: 'Asia/Krasnoyarsk', Text: '(UTC+07:00) Moscow+04 - Krasnoyarsk' },\n { Value: 'Asia/Brunei', Text: '(UTC+08:00) Brunei' },\n { Value: 'Asia/Shanghai', Text: '(UTC+08:00) China Time - Beijing' },\n { Value: 'Asia/Choibalsan', Text: '(UTC+08:00) Choibalsan' },\n { Value: 'Asia/Hong_Kong', Text: '(UTC+08:00) Hong Kong' },\n { Value: 'Asia/Kuala_Lumpur', Text: '(UTC+08:00) Kuala Lumpur' },\n { Value: 'Asia/Macau', Text: '(UTC+08:00) Macau' },\n { Value: 'Asia/Makassar', Text: '(UTC+08:00) Makassar' },\n { Value: 'Asia/Manila', Text: '(UTC+08:00) Manila' },\n { Value: 'Asia/Irkutsk', Text: '(UTC+08:00) Moscow+05 - Irkutsk' },\n { Value: 'Asia/Singapore', Text: '(UTC+08:00) Singapore' },\n { Value: 'Asia/Taipei', Text: '(UTC+08:00) Taipei' },\n { Value: 'Asia/Ulaanbaatar', Text: '(UTC+08:00) Ulaanbaatar' },\n { Value: 'Australia/Perth', Text: '(UTC+08:00) Western Time - Perth' },\n { Value: 'Asia/Pyongyang', Text: '(UTC+08:30) Pyongyang' },\n { Value: 'Asia/Dili', Text: '(UTC+09:00) Dili' },\n { Value: 'Asia/Jayapura', Text: '(UTC+09:00) Jayapura' },\n { Value: 'Asia/Yakutsk', Text: '(UTC+09:00) Moscow+06 - Yakutsk' },\n { Value: 'Pacific/Palau', Text: '(UTC+09:00) Palau' },\n { Value: 'Asia/Seoul', Text: '(UTC+09:00) Seoul' },\n { Value: 'Asia/Tokyo', Text: '(UTC+09:00) Tokyo' },\n { Value: 'Australia/Darwin', Text: '(UTC+09:30) Central Time - Darwin' },\n { Value: 'Antarctica/DumontDUrville', Text: '(UTC+10:00) Dumont D\"Urville' },\n { Value: 'Australia/Brisbane', Text: '(UTC+10:00) Eastern Time - Brisbane' },\n { Value: 'Pacific/Guam', Text: '(UTC+10:00) Guam' },\n { Value: 'Asia/Vladivostok', Text: '(UTC+10:00) Moscow+07 - Vladivostok' },\n { Value: 'Pacific/Port_Moresby', Text: '(UTC+10:00) Port Moresby' },\n { Value: 'Pacific / Chuuk', Text: '(UTC+10:00) Truk' },\n { Value: 'Australia/Adelaide', Text: '(UTC+10:30) Central Time - Adelaide' },\n { Value: 'Antarctica/Casey', Text: '(UTC+11:00) Casey' },\n { Value: 'Australia/Hobart', Text: '(UTC+11:00) Eastern Time - Hobart' },\n { Value: 'Australia/Sydney', Text: '(UTC+11:00) Eastern Time - Melbourne, Sydney' },\n { Value: 'Pacific/Efate', Text: '(UTC+11:00) Efate' },\n { Value: 'Pacific/Guadalcanal', Text: '(UTC+11:00) Guadalcanal' },\n { Value: 'Pacific/Kosrae', Text: '(UTC+11:00) Kosrae' },\n { Value: 'Asia/Magadan', Text: '(UTC+11:00) Moscow+08 - Magadan' },\n { Value: 'Pacific / Norfolk', Text: '(UTC+11:00) Norfolk' },\n { Value: 'Pacific/Noumea', Text: '(UTC+11:00) Noumea' },\n { Value: 'Pacific/Pohnpei', Text: '(UTC+11:00) Ponape' },\n { Value: 'Pacific/Funafuti', Text: '(UTC+12:00) Funafuti' },\n { Value: 'Pacific/Kwajalein', Text: '(UTC+12:00) Kwajalein' },\n { Value: 'Pacific/Majuro', Text: '(UTC+12:00) Majuro' },\n { Value: 'Asia/Kamchatka', Text: '(UTC+12:00) Moscow+09 - Petropavlovsk - Kamchatskiy' },\n { Value: 'Pacific / Nauru', Text: '(UTC+12:00) Nauru' },\n { Value: 'Pacific/Tarawa', Text: '(UTC+12:00) Tarawa' },\n { Value: 'Pacific/Wake', Text: '(UTC+12:00) Wake' },\n { Value: 'Pacific/Wallis', Text: '(UTC+12:00) Wallis' },\n { Value: 'Pacific/Auckland', Text: '(UTC+13:00) Auckland' },\n { Value: 'Pacific/Enderbury', Text: '(UTC+13:00) Enderbury' },\n { Value: 'Pacific/Fakaofo', Text: '(UTC+13:00) Fakaofo' },\n { Value: 'Pacific/Fiji', Text: '(UTC+13:00) Fiji' },\n { Value: 'Pacific/Tongatapu', Text: '(UTC+13:00) Tongatapu' },\n { Value: 'Pacific/Apia', Text: '(UTC+14:00) Apia' },\n { Value: 'Pacific/Kiritimati', Text: '(UTC+14:00) Kiritimati' }\n];\n","/**\n * CSS Constants\n */\n/** @private */\nexport var ROOT = 'e-schedule';\n/** @private */\nexport var RTL = 'e-rtl';\n/** @private */\nexport var DEVICE_CLASS = 'e-device';\n/** @private */\nexport var MULTI_DRAG = 'e-multi-drag';\n/** @private */\nexport var ICON = 'e-icons';\n/** @private */\nexport var ENABLE_CLASS = 'e-enable';\n/** @private */\nexport var DISABLE_CLASS = 'e-disable';\n/** @private */\nexport var TABLE_CONTAINER_CLASS = 'e-table-container';\n/** @private */\nexport var SCHEDULE_TABLE_CLASS = 'e-schedule-table';\n/** @private */\nexport var ALLDAY_CELLS_CLASS = 'e-all-day-cells';\n/** @private */\nexport var HEADER_POPUP_CLASS = 'e-header-popup';\n/** @private */\nexport var HEADER_CALENDAR_CLASS = 'e-header-calendar';\n/** @private */\nexport var ALLDAY_ROW_CLASS = 'e-all-day-row';\n/** @private */\nexport var CONTENT_TABLE_CLASS = 'e-content-table';\n/** @private */\nexport var WORK_CELLS_CLASS = 'e-work-cells';\n/** @private */\nexport var WORK_HOURS_CLASS = 'e-work-hours';\n/** @private */\nexport var POPUP_OPEN = 'e-popup-open';\n/** @private */\nexport var POPUP_CLOSE = 'e-popup-close';\n/** @private */\nexport var DATE_HEADER_WRAP_CLASS = 'e-date-header-wrap';\n/** @private */\nexport var DATE_HEADER_CONTAINER_CLASS = 'e-date-header-container';\n/** @private */\nexport var HEADER_CELLS_CLASS = 'e-header-cells';\n/** @private */\nexport var HEADER_WEEK_CELLS_CLASS = 'e-header-week-cell';\n/** @private */\nexport var HEADER_MONTH_CELLS_CLASS = 'e-header-month-cell';\n/** @private */\nexport var HEADER_YEAR_CELLS_CLASS = 'e-header-year-cell';\n/** @private */\nexport var WORKDAY_CLASS = 'e-work-days';\n/** @private */\nexport var OTHERMONTH_CLASS = 'e-other-month';\n/** @private */\nexport var CURRENT_DAY_CLASS = 'e-current-day';\n/** @private */\nexport var CURRENTDATE_CLASS = 'e-current-date';\n/** @private */\nexport var CURRENT_PANEL_CLASS = 'e-current-panel';\n/** @private */\nexport var PREVIOUS_PANEL_CLASS = 'e-previous-panel';\n/** @private */\nexport var NEXT_PANEL_CLASS = 'e-next-panel';\n/** @private */\nexport var PREVIOUS_DATE_CLASS = 'e-prev';\n/** @private */\nexport var NEXT_DATE_CLASS = 'e-next';\n/** @private */\nexport var TRANSLATE_CLASS = 'e-translate';\n/** @private */\nexport var LEFT_INDENT_CLASS = 'e-left-indent';\n/** @private */\nexport var LEFT_INDENT_WRAP_CLASS = 'e-left-indent-wrap';\n/** @private */\nexport var EVENT_TABLE_CLASS = 'e-event-table';\n/** @private */\nexport var RESOURCE_LEFT_TD_CLASS = 'e-resource-left-td';\n/** @private */\nexport var RESOURCE_GROUP_CELLS_CLASS = 'e-resource-group-cells';\n/** @private */\nexport var RESOURCE_TEXT_CLASS = 'e-resource-text';\n/** @private */\nexport var RESOURCE_COLUMN_WRAP_CLASS = 'e-resource-column-wrap';\n/** @private */\nexport var RESOURCE_COLUMN_TABLE_CLASS = 'e-resource-column-table';\n/** @private */\nexport var RESOURCE_CHILD_CLASS = 'e-child-node';\n/** @private */\nexport var RESOURCE_PARENT_CLASS = 'e-parent-node';\n/** @private */\nexport var RESOURCE_EXPAND_CLASS = 'e-resource-expand';\n/** @private */\nexport var RESOURCE_COLLAPSE_CLASS = 'e-resource-collapse';\n/** @private */\nexport var RESOURCE_TREE_ICON_CLASS = 'e-resource-tree-icon';\n/** @private */\nexport var RESOURCE_CELLS_CLASS = 'e-resource-cells';\n/** @private */\nexport var TIME_CELLS_WRAP_CLASS = 'e-time-cells-wrap';\n/** @private */\nexport var TIME_CELLS_CLASS = 'e-time-cells';\n/** @private */\nexport var TIME_SLOT_CLASS = 'e-time-slots';\n/** @private */\nexport var ALTERNATE_CELLS_CLASS = 'e-alternate-cells';\n/** @private */\nexport var CURRENT_TIME_CLASS = 'e-current-time';\n/** @private */\nexport var CURRENT_TIMELINE_CLASS = 'e-current-timeline';\n/** @private */\nexport var PREVIOUS_TIMELINE_CLASS = 'e-previous-timeline';\n/** @private */\nexport var HIDE_CHILDS_CLASS = 'e-hide-childs';\n/** @private */\nexport var SCROLL_CONTAINER_CLASS = 'e-scroll-container';\n/** @private */\nexport var WRAPPER_CLASS = 'e-wrapper';\n/** @private */\nexport var TIMELINE_WRAPPER_CLASS = 'e-timeline-wrapper';\n/** @private */\nexport var APPOINTMENT_WRAPPER_CLASS = 'e-appointment-wrapper';\n/** @private */\nexport var DAY_WRAPPER_CLASS = 'e-day-wrapper';\n/** @private */\nexport var TOOLBAR_CONTAINER = 'e-schedule-toolbar-container';\n/** @private */\nexport var RESOURCE_TOOLBAR_CONTAINER = 'e-schedule-resource-toolbar-container';\n/** @private */\nexport var HEADER_TOOLBAR = 'e-schedule-toolbar';\n/** @private */\nexport var RESOURCE_HEADER_TOOLBAR = 'e-schedule-resource-toolbar';\n/** @private */\nexport var SELECTED_CELL_CLASS = 'e-selected-cell';\n/** @private */\nexport var WEEK_NUMBER_WRAPPER_CLASS = 'e-week-number-wrapper';\n/** @private */\nexport var WEEK_NUMBER_CLASS = 'e-week-number';\n/** @private */\nexport var APPOINTMENT_WRAP_CLASS = 'e-appointment-wrap';\n/** @private */\nexport var WRAPPER_CONTAINER_CLASS = 'e-wrapper-container';\n/** @private */\nexport var APPOINTMENT_CONTAINER_CLASS = 'e-appointment-container';\n/** @private */\nexport var APPOINTMENT_CLASS = 'e-appointment';\n/** @private */\nexport var BLOCK_APPOINTMENT_CLASS = 'e-block-appointment';\n/** @private */\nexport var BLOCK_INDICATOR_CLASS = 'e-block-indicator';\n/** @private */\nexport var APPOINTMENT_BORDER = 'e-appointment-border';\n/** @private */\nexport var APPOINTMENT_DETAILS = 'e-appointment-details';\n/** @private */\nexport var SUBJECT_WRAP = 'e-subject-wrap';\n/** @private */\nexport var RESOURCE_NAME = 'e-resource-name';\n/** @private */\nexport var APPOINTMENT_TIME = 'e-time';\n/** @private */\nexport var TABLE_WRAP_CLASS = 'e-table-wrap';\n/** @private */\nexport var OUTER_TABLE_CLASS = 'e-outer-table';\n/** @private */\nexport var CONTENT_WRAP_CLASS = 'e-content-wrap';\n/** @private */\nexport var VIRTUAL_TRACK_CLASS = 'e-virtual-track';\n/** @private */\nexport var AGENDA_CELLS_CLASS = 'e-agenda-cells';\n/** @private */\nexport var AGENDA_CURRENT_DAY_CLASS = 'e-current-day';\n/** @private */\nexport var AGENDA_SELECTED_CELL = 'e-active-appointment-agenda';\n/** @private */\nexport var MONTH_HEADER_CLASS = 'e-month-header';\n/** @private */\nexport var AGENDA_HEADER_CLASS = 'e-day-date-header';\n/** @private */\nexport var AGENDA_RESOURCE_CLASS = 'e-resource-column';\n/** @private */\nexport var AGENDA_DATE_CLASS = 'e-date-column';\n/** @private */\nexport var NAVIGATE_CLASS = 'e-navigate';\n/** @private */\nexport var DATE_HEADER_CLASS = 'e-date-header';\n/** @private */\nexport var AGENDA_DAY_BORDER_CLASS = 'e-day-border';\n/** @private */\nexport var DATE_BORDER_CLASS = 'e-date-border';\n/** @private */\nexport var AGENDA_DAY_PADDING_CLASS = 'e-day-padding';\n/** @private */\nexport var DATE_TIME_CLASS = 'e-date-time';\n/** @private */\nexport var DATE_TIME_WRAPPER_CLASS = 'e-date-time-wrapper';\n/** @private */\nexport var AGENDA_EMPTY_EVENT_CLASS = 'e-empty-event';\n/** @private */\nexport var AGENDA_NO_EVENT_CLASS = 'e-no-event';\n/** @private */\nexport var APPOINTMENT_INDICATOR_CLASS = 'e-appointment-indicator';\n/** @private */\nexport var EVENT_INDICATOR_CLASS = 'e-indicator';\n/** @private */\nexport var EVENT_ICON_UP_CLASS = 'e-up-icon';\n/** @private */\nexport var EVENT_ICON_DOWN_CLASS = 'e-down-icon';\n/** @private */\nexport var EVENT_ICON_LEFT_CLASS = 'e-left-icon';\n/** @private */\nexport var EVENT_ICON_RIGHT_CLASS = 'e-right-icon';\n/** @private */\nexport var EVENT_ACTION_CLASS = 'e-event-action';\n/** @private */\nexport var NEW_EVENT_CLASS = 'e-new-event';\n/** @private */\nexport var CLONE_ELEMENT_CLASS = 'e-schedule-event-clone';\n/** @private */\nexport var MONTH_CLONE_ELEMENT_CLASS = 'e-month-event';\n/** @private */\nexport var CLONE_TIME_INDICATOR_CLASS = 'e-clone-time-indicator';\n/** @private */\nexport var DRAG_CLONE_CLASS = 'e-drag-clone';\n/** @private */\nexport var EVENT_RESIZE_CLASS = 'e-event-resize';\n/** @private */\nexport var RESIZE_CLONE_CLASS = 'e-resize-clone';\n/** @private */\nexport var LEFT_RESIZE_HANDLER = 'e-left-handler';\n/** @private */\nexport var RIGHT_RESIZE_HANDLER = 'e-right-handler';\n/** @private */\nexport var TOP_RESIZE_HANDLER = 'e-top-handler';\n/** @private */\nexport var BOTTOM_RESIZE_HANDLER = 'e-bottom-handler';\n/** @private */\nexport var EVENT_RECURRENCE_ICON_CLASS = 'e-recurrence-icon';\n/** @private */\nexport var EVENT_RECURRENCE_EDIT_ICON_CLASS = 'e-recurrence-edit-icon';\n/** @private */\nexport var HEADER_ROW_CLASS = 'e-header-row';\n/** @private */\nexport var ALLDAY_APPOINTMENT_WRAPPER_CLASS = 'e-all-day-appointment-wrapper';\n/** @private */\nexport var ALLDAY_APPOINTMENT_CLASS = 'e-all-day-appointment';\n/** @private */\nexport var EVENT_COUNT_CLASS = 'e-appointment-hide';\n/** @private */\nexport var ROW_COUNT_WRAPPER_CLASS = 'e-row-count-wrapper';\n/** @private */\nexport var ALLDAY_APPOINTMENT_SECTION_CLASS = 'e-all-day-appointment-section';\n/** @private */\nexport var APPOINTMENT_ROW_EXPAND_CLASS = 'e-appointment-expand';\n/** @private */\nexport var APPOINTMENT_ROW_COLLAPSE_CLASS = 'e-appointment-collapse';\n/** @private */\nexport var MORE_INDICATOR_CLASS = 'e-more-indicator';\n/** @private */\nexport var CELL_POPUP_CLASS = 'e-cell-popup';\n/** @private */\nexport var EVENT_POPUP_CLASS = 'e-event-popup';\n/** @private */\nexport var MULTIPLE_EVENT_POPUP_CLASS = 'e-multiple-event-popup';\n/** @private */\nexport var POPUP_HEADER_CLASS = 'e-popup-header';\n/** @private */\nexport var POPUP_HEADER_ICON_WRAPPER = 'e-header-icon-wrapper';\n/** @private */\nexport var POPUP_CONTENT_CLASS = 'e-popup-content';\n/** @private */\nexport var POPUP_FOOTER_CLASS = 'e-popup-footer';\n/** @private */\nexport var DATE_TIME_DETAILS_CLASS = 'e-date-time-details';\n/** @private */\nexport var RECURRENCE_SUMMARY_CLASS = 'e-recurrence-summary';\n/** @private */\nexport var QUICK_POPUP_EVENT_DETAILS_CLASS = 'e-event-details';\n/** @private */\nexport var EVENT_CREATE_CLASS = 'e-event-create';\n/** @private */\nexport var EDIT_EVENT_CLASS = 'e-event-edit';\n/** @private */\nexport var DELETE_EVENT_CLASS = 'e-event-delete';\n/** @private */\nexport var TEXT_ELLIPSIS = 'e-text-ellipsis';\n/** @private */\nexport var MORE_POPUP_WRAPPER_CLASS = 'e-more-popup-wrapper';\n/** @private */\nexport var MORE_EVENT_POPUP_CLASS = 'e-more-event-popup';\n/** @private */\nexport var MORE_EVENT_HEADER_CLASS = 'e-more-event-header';\n/** @private */\nexport var MORE_EVENT_DATE_HEADER_CLASS = 'e-more-event-date-header';\n/** @private */\nexport var MORE_EVENT_HEADER_DAY_CLASS = 'e-header-day';\n/** @private */\nexport var MORE_EVENT_HEADER_DATE_CLASS = 'e-header-date';\n/** @private */\nexport var MORE_EVENT_CLOSE_CLASS = 'e-more-event-close';\n/** @private */\nexport var MORE_EVENT_CONTENT_CLASS = 'e-more-event-content';\n/** @private */\nexport var MORE_EVENT_WRAPPER_CLASS = 'e-more-appointment-wrapper';\n/** @private */\nexport var QUICK_DIALOG_CLASS = 'e-quick-dialog';\n/** @private */\nexport var QUICK_DIALOG_OCCURRENCE_CLASS = 'e-quick-dialog-occurrence-event';\n/** @private */\nexport var QUICK_DIALOG_SERIES_CLASS = 'e-quick-dialog-series-event';\n/** @private */\nexport var QUICK_DIALOG_FOLLOWING_EVENTS_CLASS = 'e-quick-dialog-following-events';\n/** @private */\nexport var FOLLOWING_EVENTS_DIALOG = 'e-following-events-dialog';\n/** @private */\nexport var QUICK_DIALOG_DELETE_CLASS = 'e-quick-dialog-delete';\n/** @private */\nexport var QUICK_DIALOG_CANCEL_CLASS = 'e-quick-dialog-cancel';\n/** @private */\nexport var QUICK_DIALOG_ALERT_OK = 'e-quick-alertok';\n/** @private */\nexport var QUICK_DIALOG_ALERT_CANCEL = 'e-quick-alertcancel';\n/** @private */\nexport var QUICK_DIALOG_ALERT_FOLLOWING = 'e-quick-alertfollowing';\n/** @private */\nexport var QUICK_DIALOG_ALERT_BTN_CLASS = 'e-quick-dialog-alert-btn';\n/** @private */\nexport var EVENT_WINDOW_DIALOG_CLASS = 'e-schedule-dialog';\n/** @private */\nexport var FORM_CONTAINER_CLASS = 'e-form-container';\n/** @private */\nexport var FORM_CLASS = 'e-schedule-form';\n/** @private */\nexport var EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS = 'e-all-day-time-zone-row';\n/** @private */\nexport var EVENT_WINDOW_ALL_DAY_CLASS = 'e-all-day';\n/** @private */\nexport var TIME_ZONE_CLASS = 'e-time-zone';\n/** @private */\nexport var TIME_ZONE_ICON_CLASS = 'e-time-zone-icon';\n/** @private */\nexport var TIME_ZONE_DETAILS_CLASS = 'e-time-zone-details';\n/** @private */\nexport var EVENT_WINDOW_REPEAT_DIV_CLASS = 'e-repeat-parent-row';\n/** @private */\nexport var EVENT_WINDOW_REPEAT_CLASS = 'e-repeat';\n/** @private */\nexport var EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS = 'e-title-location-row';\n/** @private */\nexport var SUBJECT_CLASS = 'e-subject';\n/** @private */\nexport var LOCATION_CLASS = 'e-location';\n/** @private */\nexport var LOCATION_ICON_CLASS = 'e-location-icon';\n/** @private */\nexport var LOCATION_DETAILS_CLASS = 'e-location-details';\n/** @private */\nexport var EVENT_WINDOW_START_END_DIV_CLASS = 'e-start-end-row';\n/** @private */\nexport var EVENT_WINDOW_START_CLASS = 'e-start';\n/** @private */\nexport var EVENT_WINDOW_END_CLASS = 'e-end';\n/** @private */\nexport var EVENT_WINDOW_RESOURCES_DIV_CLASS = 'e-resources-row';\n/** @private */\nexport var DESCRIPTION_CLASS = 'e-description';\n/** @private */\nexport var DESCRIPTION_ICON_CLASS = 'e-description-icon';\n/** @private */\nexport var DESCRIPTION_DETAILS_CLASS = 'e-description-details';\n/** @private */\nexport var EVENT_WINDOW_TIME_ZONE_DIV_CLASS = 'e-time-zone-row';\n/** @private */\nexport var EVENT_WINDOW_START_TZ_CLASS = 'e-start-time-zone';\n/** @private */\nexport var EVENT_WINDOW_END_TZ_CLASS = 'e-end-time-zone';\n/** @private */\nexport var EVENT_WINDOW_BACK_ICON_CLASS = 'e-back-icon';\n/** @private */\nexport var EVENT_WINDOW_SAVE_ICON_CLASS = 'e-save-icon';\n/** @private */\nexport var EVENT_WINDOW_CANCEL_BUTTON_CLASS = 'e-event-cancel';\n/** @private */\nexport var EVENT_WINDOW_SAVE_BUTTON_CLASS = 'e-event-save';\n/** @private */\nexport var EVENT_WINDOW_DIALOG_PARENT_CLASS = 'e-dialog-parent';\n/** @private */\nexport var EVENT_WINDOW_TITLE_TEXT_CLASS = 'e-title-text';\n/** @private */\nexport var EVENT_WINDOW_ICON_DISABLE_CLASS = 'e-icon-disable';\n/** @private */\nexport var EDIT_CLASS = 'e-edit';\n/** @private */\nexport var EDIT_ICON_CLASS = 'e-edit-icon';\n/** @private */\nexport var DELETE_CLASS = 'e-delete';\n/** @private */\nexport var DELETE_ICON_CLASS = 'e-delete-icon';\n/** @private */\nexport var CLOSE_CLASS = 'e-close';\n/** @private */\nexport var CLOSE_ICON_CLASS = 'e-close-icon';\n/** @private */\nexport var ERROR_VALIDATION_CLASS = 'e-schedule-error';\n/** @private */\nexport var EVENT_TOOLTIP_ROOT_CLASS = 'e-schedule-event-tooltip';\n/** @private */\nexport var ALLDAY_ROW_ANIMATE_CLASS = 'e-animate';\n/** @private */\nexport var TIMESCALE_DISABLE = 'e-timescale-disable';\n/** @private */\nexport var DISABLE_DATE = 'e-disable-date';\n/** @private */\nexport var HIDDEN_CLASS = 'e-hidden';\n/** @private */\nexport var DISABLE_DATES = 'e-disable-dates';\n/** @private */\nexport var POPUP_WRAPPER_CLASS = 'e-quick-popup-wrapper';\n/** @private */\nexport var POPUP_TABLE_CLASS = 'e-popup-table';\n/** @private */\nexport var RESOURCE_MENU = 'e-resource-menu';\n/** @private */\nexport var RESOURCE_MENU_ICON = 'e-icon-menu';\n/** @private */\nexport var RESOURCE_LEVEL_TITLE = 'e-resource-level-title';\n/** @private */\nexport var RESOURCE_TREE = 'e-resource-tree';\n/** @private */\nexport var RESOURCE_TREE_POPUP_OVERLAY = 'e-resource-tree-popup-overlay';\n/** @private */\nexport var RESOURCE_TREE_POPUP = 'e-resource-tree-popup';\n/** @private */\nexport var RESOURCE_CLASS = 'e-resource';\n/** @private */\nexport var RESOURCE_ICON_CLASS = 'e-resource-icon';\n/** @private */\nexport var RESOURCE_DETAILS_CLASS = 'e-resource-details';\n/** @private */\nexport var DATE_TIME_ICON_CLASS = 'e-date-time-icon';\n/** @private */\nexport var VIRTUAL_SCROLL_CLASS = 'e-virtual-scroll';\n/** @private */\nexport var ICON_DISABLE_CLASS = 'e-icon-disable';\n/** @private */\nexport var AUTO_HEIGHT = 'e-auto-height';\n/** @private */\nexport var IGNORE_WHITESPACE = 'e-ignore-whitespace';\n/** @private */\nexport var EVENT_TEMPLATE = 'e-template';\n/** @private */\nexport var READ_ONLY = 'e-read-only';\n/** @private */\nexport var MONTH_HEADER_WRAPPER = 'e-month-header-wrapper';\n/** @private */\nexport var INLINE_SUBJECT_CLASS = 'e-inline-subject';\n/** @private */\nexport var INLINE_APPOINTMENT_CLASS = 'e-inline-appointment';\n/** @hidden */\nexport var SCROLL_HIDDEN = 'e-scroll-hidden';\n/** @private */\nexport var ALLDAY_APPOINTMENT_SCROLL = 'e-all-day-scroll';\n/** @private */\nexport var ALLDAY_APPOINTMENT_AUTO = 'e-all-day-auto';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable max-len */\nimport { isNullOrUndefined, closest, extend, EventHandler } from '@syncfusion/ej2-base';\nimport { createElement, prepend, append, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { generate, getDateFromRecurrenceDateString } from '../../recurrence-editor/date-generator';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\n/**\n * EventBase for appointment rendering\n */\nvar EventBase = /** @class */ (function () {\n /**\n * Constructor for EventBase\n *\n * @param {Schedule} parent Accepts the schedule instance\n */\n function EventBase(parent) {\n this.slots = [];\n this.isDoubleTapped = false;\n this.parent = parent;\n }\n EventBase.prototype.processData = function (events, timeZonePropChanged, oldTimezone) {\n var _this = this;\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var fields = this.parent.eventFields;\n var processed = [];\n var temp = 1;\n var generateID = false;\n var resourceCollection = this.parent.resourceBase ? this.parent.resourceBase.resourceCollection : [];\n if (events.length > 0 && isNullOrUndefined(events[0][fields.id])) {\n generateID = true;\n }\n var _loop_1 = function (event_1) {\n if (generateID) {\n event_1[fields.id] = temp++;\n }\n event_1 = this_1.updateEventDateTime(event_1);\n if (timeZonePropChanged) {\n this_1.processTimezoneChange(event_1, oldTimezone);\n }\n else if (!this_1.parent.isPrinting && !this_1.parent.uiStateValues.isPreventTimezone) {\n event_1 = this_1.processTimezone(event_1);\n }\n for (var level = 0; level < resourceCollection.length; level++) {\n if (event_1[resourceCollection[parseInt(level.toString(), 10)].field] === null || event_1[resourceCollection[parseInt(level.toString(), 10)].field] === 0) {\n event_1[resourceCollection[parseInt(level.toString(), 10)].field] = undefined;\n }\n }\n if (!isNullOrUndefined(event_1[fields.recurrenceRule]) && event_1[fields.recurrenceRule] === '') {\n event_1[fields.recurrenceRule] = null;\n }\n if (!isNullOrUndefined(event_1[fields.recurrenceRule]) && isNullOrUndefined(event_1[fields.recurrenceID]) &&\n !(this_1.parent.crudModule && this_1.parent.crudModule.crudObj.isCrudAction)) {\n processed = processed.concat(this_1.generateOccurrence(event_1, null, true));\n }\n else {\n if (this_1.parent.crudModule && this_1.parent.crudModule.crudObj.isCrudAction) {\n if (!isNullOrUndefined(event_1[fields.recurrenceRule]) && isNullOrUndefined(event_1[fields.recurrenceID])) {\n var recurrenceEvent = this_1.generateOccurrence(event_1, null, true);\n var _loop_2 = function (occurrence) {\n var app = this_1.parent.eventsProcessed.filter(function (data) {\n return data[fields.startTime].getTime() - occurrence[fields.startTime].getTime() === 0 &&\n data[fields.id] === occurrence[fields.id];\n });\n occurrence.Guid = (app.length > 0) ? app[0].Guid : this_1.generateGuid();\n processed.push(occurrence);\n };\n for (var _i = 0, recurrenceEvent_1 = recurrenceEvent; _i < recurrenceEvent_1.length; _i++) {\n var occurrence = recurrenceEvent_1[_i];\n _loop_2(occurrence);\n }\n }\n else {\n var app = this_1.parent.eventsProcessed.filter(function (data) {\n return data[_this.parent.eventFields.id] === event_1[_this.parent.eventFields.id];\n });\n event_1.Guid = (app.length > 0) ? app[0].Guid : this_1.generateGuid();\n processed.push(event_1);\n }\n }\n else {\n event_1.Guid = this_1.generateGuid();\n processed.push(event_1);\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n _loop_1(event_1);\n }\n this.parent.eventsProcessed = [];\n var eventData = processed.filter(function (data) {\n return !data[_this.parent.eventFields.isBlock];\n });\n this.parent.eventsProcessed = this.filterEvents(start, end, eventData);\n var blockData = processed.filter(function (data) {\n return data[_this.parent.eventFields.isBlock];\n });\n for (var _a = 0, blockData_1 = blockData; _a < blockData_1.length; _a++) {\n var eventObj = blockData_1[_a];\n if (eventObj[fields.isAllDay]) {\n var isDifferentDate = util.resetTime(new Date(eventObj[fields.startTime].getTime())) <\n util.resetTime(new Date(eventObj[fields.endTime].getTime()));\n if (!isDifferentDate) {\n eventObj[fields.startTime] = util.resetTime(eventObj[fields.startTime]);\n eventObj[fields.endTime] = util.addDays(util.resetTime(eventObj[fields.endTime]), 1);\n }\n }\n }\n this.parent.blockProcessed = blockData;\n return eventData;\n };\n EventBase.prototype.updateEventDateTime = function (eventData) {\n if (typeof eventData[this.parent.eventFields.startTime] === 'string') {\n eventData[this.parent.eventFields.startTime] = util.getDateFromString(eventData[this.parent.eventFields.startTime]);\n }\n if (typeof eventData[this.parent.eventFields.endTime] === 'string') {\n eventData[this.parent.eventFields.endTime] = util.getDateFromString(eventData[this.parent.eventFields.endTime]);\n }\n return eventData;\n };\n EventBase.prototype.getProcessedEvents = function (eventCollection) {\n if (eventCollection === void 0) { eventCollection = this.parent.eventsData; }\n var processed = [];\n for (var _i = 0, eventCollection_1 = eventCollection; _i < eventCollection_1.length; _i++) {\n var event_2 = eventCollection_1[_i];\n if (!isNullOrUndefined(event_2[this.parent.eventFields.recurrenceRule]) &&\n isNullOrUndefined(event_2[this.parent.eventFields.recurrenceID])) {\n processed = processed.concat(this.generateOccurrence(event_2));\n }\n else {\n processed.push(event_2);\n }\n }\n return processed;\n };\n EventBase.prototype.timezonePropertyChange = function (oldTimezone) {\n var data = this.parent.eventsData.concat(this.parent.blockData);\n var processed = this.processData(data, true, oldTimezone);\n this.parent.notify(event.dataReady, { processedData: processed });\n };\n EventBase.prototype.timezoneConvert = function (eventData) {\n var fields = this.parent.eventFields;\n eventData[fields.startTimezone] = eventData[fields.startTimezone] || eventData[fields.endTimezone];\n eventData[fields.endTimezone] = eventData[fields.endTimezone] || eventData[fields.startTimezone];\n if (this.parent.timezone) {\n var startTz = eventData[fields.startTimezone];\n var endTz = eventData[fields.endTimezone];\n eventData[fields.startTime] = this.parent.tzModule.convert(eventData[fields.startTime], this.parent.timezone, startTz);\n eventData[fields.endTime] = this.parent.tzModule.convert(eventData[fields.endTime], this.parent.timezone, endTz);\n }\n };\n EventBase.prototype.processTimezoneChange = function (event, oldTimezone) {\n var fields = this.parent.eventFields;\n if (event[fields.isAllDay]) {\n return;\n }\n if (oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.parent.tzModule.convert(event[fields.startTime], oldTimezone, this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.convert(event[fields.endTime], oldTimezone, this.parent.timezone);\n }\n else if (!oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.parent.tzModule.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.add(event[fields.endTime], this.parent.timezone);\n }\n else if (oldTimezone && !this.parent.timezone) {\n event[fields.startTime] = this.parent.tzModule.remove(event[fields.startTime], oldTimezone);\n event[fields.endTime] = this.parent.tzModule.remove(event[fields.endTime], oldTimezone);\n }\n };\n EventBase.prototype.processTimezone = function (event, isReverse) {\n if (isReverse === void 0) { isReverse = false; }\n var fields = this.parent.eventFields;\n if (event[fields.startTimezone] || event[fields.endTimezone]) {\n var startTimezone = event[fields.startTimezone] || event[fields.endTimezone];\n var endTimezone = event[fields.endTimezone] || event[fields.startTimezone];\n if (isReverse) {\n if (this.parent.timezone) {\n event[fields.startTime] = this.parent.tzModule.convert(event[fields.startTime], startTimezone, this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.convert(event[fields.endTime], endTimezone, this.parent.timezone);\n event[fields.startTime] = this.parent.tzModule.remove(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.remove(event[fields.endTime], this.parent.timezone);\n }\n else {\n event[fields.startTime] = this.parent.tzModule.remove(event[fields.startTime], startTimezone);\n event[fields.endTime] = this.parent.tzModule.remove(event[fields.endTime], endTimezone);\n }\n }\n else {\n event[fields.startTime] = this.parent.tzModule.add(event[fields.startTime], startTimezone);\n event[fields.endTime] = this.parent.tzModule.add(event[fields.endTime], endTimezone);\n if (this.parent.timezone) {\n event[fields.startTime] = this.parent.tzModule.convert(event[fields.startTime], startTimezone, this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.convert(event[fields.endTime], endTimezone, this.parent.timezone);\n }\n }\n }\n else if (this.parent.timezone) {\n if (isReverse) {\n event[fields.startTime] = this.parent.tzModule.remove(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.remove(event[fields.endTime], this.parent.timezone);\n }\n else {\n event[fields.startTime] = this.parent.tzModule.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.parent.tzModule.add(event[fields.endTime], this.parent.timezone);\n }\n }\n return event;\n };\n EventBase.prototype.filterBlockEvents = function (eventObj) {\n var fields = this.parent.eventFields;\n var eStart = eventObj[fields.startTime];\n var eEnd = eventObj[fields.endTime];\n var resourceData;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var data = this.getGroupIndexFromEvent(eventObj);\n resourceData = this.parent.resourceBase.lastResourceLevel[parseInt(data.toString(), 10)];\n }\n var blockEvents = extend([], this.parent.blockProcessed, null, true);\n for (var _i = 0, blockEvents_1 = blockEvents; _i < blockEvents_1.length; _i++) {\n var eventObj_1 = blockEvents_1[_i];\n if (eventObj_1[fields.isAllDay]) {\n var isDifferentTime = eventObj_1[fields.endTime].getTime() >\n util.resetTime(new Date(eventObj_1[fields.endTime].getTime())).getTime();\n if (isDifferentTime) {\n eventObj_1[fields.startTime] = util.resetTime(eventObj_1[fields.startTime]);\n eventObj_1[fields.endTime] = util.addDays(util.resetTime(eventObj_1[fields.endTime]), 1);\n }\n }\n }\n return this.filterEvents(eStart, eEnd, blockEvents, resourceData);\n };\n EventBase.prototype.filterEvents = function (startDate, endDate, appointments, resourceTdData) {\n if (appointments === void 0) { appointments = this.parent.eventsProcessed; }\n var predicate = this.parent.dataModule.getStartEndQuery(startDate, endDate);\n var filter = new DataManager({ json: appointments }).executeLocal(new Query().where(predicate));\n if (resourceTdData) {\n filter = this.filterEventsByResource(resourceTdData, filter);\n }\n return this.sortByTime(filter);\n };\n EventBase.prototype.filterEventsByRange = function (eventCollection, startDate, endDate) {\n var _this = this;\n var filteredEvents = [];\n if (startDate && endDate) {\n filteredEvents = this.filterEvents(startDate, endDate, eventCollection);\n }\n else if (startDate && !endDate) {\n filteredEvents = eventCollection.filter(function (e) { return e[_this.parent.eventFields.startTime] >= startDate; });\n }\n else if (!startDate && endDate) {\n filteredEvents = eventCollection.filter(function (e) { return e[_this.parent.eventFields.endTime] <= endDate; });\n }\n else {\n filteredEvents = eventCollection;\n }\n return this.sortByTime(filteredEvents);\n };\n EventBase.prototype.filterEventsByResource = function (resourceTdData, appointments) {\n if (appointments === void 0) { appointments = this.parent.eventsProcessed; }\n var predicate = {};\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n for (var level = 0; level < resourceCollection.length; level++) {\n predicate[resourceCollection[parseInt(level.toString(), 10)].field] = resourceTdData.groupOrder[parseInt(level.toString(), 10)];\n }\n var keys = Object.keys(predicate);\n var filteredCollection = appointments.filter(function (eventObj) { return keys.every(function (key) {\n if (eventObj[\"\" + key] instanceof Array) {\n return eventObj[\"\" + key].indexOf(predicate[\"\" + key]) > -1;\n }\n else {\n return eventObj[\"\" + key] === predicate[\"\" + key];\n }\n }); });\n return filteredCollection;\n };\n EventBase.prototype.sortByTime = function (appointmentsCollection) {\n if (this.parent.eventSettings.sortComparer && (typeof (this.parent.eventSettings.sortComparer) === 'function' || typeof (this.parent.eventSettings.sortComparer) === 'string')) {\n appointmentsCollection = this.customSorting(appointmentsCollection);\n }\n else {\n var fieldMappings_1 = this.parent.eventFields;\n appointmentsCollection.sort(function (a, b) {\n var d1 = a[fieldMappings_1.startTime];\n var d2 = b[fieldMappings_1.startTime];\n return d1.getTime() - d2.getTime();\n });\n }\n return appointmentsCollection;\n };\n EventBase.prototype.sortByDateTime = function (appointments) {\n if (this.parent.eventSettings.sortComparer && (typeof (this.parent.eventSettings.sortComparer) === 'function' || typeof (this.parent.eventSettings.sortComparer) === 'string')) {\n appointments = this.customSorting(appointments);\n }\n else {\n var fieldMapping_1 = this.parent.eventFields;\n appointments.sort(function (object1, object2) {\n var d3 = object1[fieldMapping_1.startTime];\n var d4 = object2[fieldMapping_1.startTime];\n var d5 = object1[fieldMapping_1.endTime];\n var d6 = object2[fieldMapping_1.endTime];\n var d1 = d5.getTime() - d3.getTime();\n var d2 = d6.getTime() - d4.getTime();\n return (d3.getTime() - d4.getTime() || d2 - d1);\n });\n }\n return appointments;\n };\n EventBase.prototype.customSorting = function (appointments) {\n if (typeof (this.parent.eventSettings.sortComparer) === 'function') {\n return this.parent.eventSettings.sortComparer.call(this.parent, appointments);\n }\n else if (typeof (this.parent.eventSettings.sortComparer) === 'string') {\n var splits = this.parent.eventSettings.sortComparer.split('.');\n var sortFn = void 0;\n if (!isNullOrUndefined(window)) {\n sortFn = window[splits[splits.length - 1]];\n }\n if (sortFn) {\n return sortFn(appointments);\n }\n }\n return appointments;\n };\n EventBase.prototype.getSmallestMissingNumber = function (array) {\n var large = Math.max.apply(Math, array);\n for (var i = 0; i < large; i++) {\n if (array.indexOf(i) === -1) {\n return i;\n }\n }\n return large + 1;\n };\n EventBase.prototype.splitEventByDay = function (event) {\n var eventFields = this.parent.eventFields;\n var data = [];\n var eventStartTime = event[eventFields.startTime];\n var eventEndTime = event[eventFields.endTime];\n var isDifferentDate = util.resetTime(new Date(eventStartTime.getTime())) <\n util.resetTime(new Date(eventEndTime.getTime()));\n if (isDifferentDate) {\n var start = new Date(eventStartTime.getTime());\n var end = util.addDays(util.resetTime(new Date(eventStartTime.getTime())), 1);\n var endDate = (eventEndTime.getHours() === 0 && eventEndTime.getMinutes() === 0) ?\n eventEndTime : util.addDays(eventEndTime, 1);\n var index = 1;\n var eventLength = util.getDaysCount(eventStartTime.getTime(), endDate.getTime());\n while (end <= eventEndTime && start.getTime() !== end.getTime()) {\n var app = extend({}, event);\n app[eventFields.startTime] = start;\n app[eventFields.endTime] = end;\n app.data = { index: index, count: eventLength };\n app.Guid = this.generateGuid();\n app.isSpanned = true;\n data.push(app);\n start = end;\n if ((util.resetTime(new Date(start.getTime())).getTime() === util.resetTime(new Date(eventEndTime.getTime())).getTime())\n && !(end.getTime() === eventEndTime.getTime())) {\n end = new Date(start.getTime());\n end = new Date(end.setHours(eventEndTime.getHours(), eventEndTime.getMinutes(), eventEndTime.getSeconds()));\n }\n else {\n end = util.addDays(util.resetTime(new Date(start.getTime())), 1);\n }\n index++;\n }\n }\n else {\n data.push(event);\n }\n return data;\n };\n EventBase.prototype.splitEvent = function (event, dateRender) {\n var fields = this.parent.eventFields;\n var start = util.resetTime(event[fields.startTime]).getTime();\n var end = util.resetTime(event[fields.endTime]).getTime();\n if (util.getDateInMs(event[fields.endTime]) <= 0) {\n var temp = util.addDays(util.resetTime(event[fields.endTime]), -1).getTime();\n end = start > temp ? start : temp;\n }\n var orgStart = start;\n var orgEnd = end;\n var ranges = [];\n if (start !== end) {\n if (start < dateRender[0].getTime()) {\n start = dateRender[0].getTime();\n }\n if (end > dateRender[dateRender.length - 1].getTime()) {\n end = dateRender[dateRender.length - 1].getTime();\n }\n var cStart = start;\n for (var level = 0; level < this.slots.length; level++) {\n var slot = this.slots[parseInt(level.toString(), 10)];\n if (this.parent.currentView === 'WorkWeek' || this.parent.currentView === 'TimelineWorkWeek'\n || this.parent.activeViewOptions.group.byDate || this.parent.activeViewOptions.showWeekend) {\n var slotDates = [];\n for (var _i = 0, slot_1 = slot; _i < slot_1.length; _i++) {\n var s = slot_1[_i];\n slotDates.push(new Date(s));\n }\n var renderedDates = this.getRenderedDates(slotDates);\n if (!isNullOrUndefined(renderedDates) && renderedDates.length > 0) {\n slot = [];\n for (var _a = 0, renderedDates_1 = renderedDates; _a < renderedDates_1.length; _a++) {\n var date = renderedDates_1[_a];\n slot.push(date.getTime());\n }\n }\n }\n if (typeof (slot) === 'number') {\n var temp = slot;\n slot = [];\n slot.push(temp);\n }\n var firstSlot = slot[0];\n cStart = (cStart <= firstSlot && end >= firstSlot) ? firstSlot : cStart;\n if (cStart > end || firstSlot > end) {\n break;\n }\n if (!this.parent.activeViewOptions.group.byDate && this.parent.activeViewOptions.showWeekend &&\n this.parent.currentView !== 'WorkWeek' && this.parent.currentView !== 'TimelineWorkWeek') {\n var startIndex = slot.indexOf(cStart);\n if (startIndex !== -1) {\n var endIndex = slot.indexOf(end);\n var hasBreak = endIndex !== -1;\n endIndex = hasBreak ? endIndex : slot.length - 1;\n var count = ((endIndex - startIndex) + 1);\n var isLeft = (slot[parseInt(startIndex.toString(), 10)] !== orgStart);\n var isRight = (slot[parseInt(endIndex.toString(), 10)] !== orgEnd);\n ranges.push(this.cloneEventObject(event, slot[parseInt(startIndex.toString(), 10)], slot[parseInt(endIndex.toString(), 10)], count, isLeft, isRight));\n if (hasBreak) {\n break;\n }\n }\n }\n else {\n if (this.dateInRange(cStart, slot[0], slot[slot.length - 1])) {\n var availSlot = [];\n for (var i = 0; i < slot.length; i++) {\n if (this.dateInRange(slot[parseInt(i.toString(), 10)], orgStart, orgEnd)) {\n availSlot.push(slot[parseInt(i.toString(), 10)]);\n }\n }\n if (availSlot.length > 0) {\n if (!this.parent.activeViewOptions.group.byDate) {\n var isLeft = (availSlot[0] !== orgStart);\n var isRight = (availSlot[availSlot.length - 1] !== orgEnd);\n ranges.push(this.cloneEventObject(event, availSlot[0], availSlot[availSlot.length - 1], availSlot.length, isLeft, isRight));\n }\n else {\n for (var _b = 0, availSlot_1 = availSlot; _b < availSlot_1.length; _b++) {\n var slot_2 = availSlot_1[_b];\n ranges.push(this.cloneEventObject(event, slot_2, slot_2, 1, (slot_2 !== orgStart), (slot_2 !== orgEnd)));\n }\n }\n }\n }\n }\n }\n }\n else {\n ranges.push(this.cloneEventObject(event, start, end, 1, false, false));\n }\n return ranges;\n };\n EventBase.prototype.cloneEventObject = function (event, start, end, count, isLeft, isRight) {\n var fields = this.parent.eventFields;\n var e = extend({}, event, null, true);\n var data = { count: count, isLeft: isLeft, isRight: isRight };\n data[fields.startTime] = event[fields.startTime];\n data[fields.endTime] = event[fields.endTime];\n e.data = data;\n e[fields.startTime] = new Date(start);\n e[fields.endTime] = new Date(end);\n return e;\n };\n EventBase.prototype.dateInRange = function (date, start, end) {\n return start <= date && date <= end;\n };\n EventBase.prototype.getSelectedEventElements = function (target) {\n this.removeSelectedAppointmentClass();\n if (this.parent.selectedElements.length <= 0) {\n this.parent.selectedElements.push(target);\n }\n else {\n var isAlreadySelected = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') === target.getAttribute('data-guid');\n });\n if (isAlreadySelected.length <= 0) {\n var elementSelector = 'div[data-guid=\"' + target.getAttribute('data-guid') + '\"]';\n var focusElements = [].slice.call(this.parent.element.querySelectorAll(elementSelector));\n for (var _i = 0, focusElements_1 = focusElements; _i < focusElements_1.length; _i++) {\n var element = focusElements_1[_i];\n this.parent.selectedElements.push(element);\n }\n }\n else {\n var selectedElements = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') !== target.getAttribute('data-guid');\n });\n this.parent.selectedElements = selectedElements;\n }\n }\n if (target && this.parent.selectedElements.length > 0) {\n this.addSelectedAppointments(this.parent.selectedElements, false);\n }\n return this.parent.selectedElements;\n };\n EventBase.prototype.getSelectedEvents = function () {\n var _this = this;\n var eventSelect = [];\n var elementSelect = [];\n var selectAppointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n selectAppointments.filter(function (element) {\n var isAlreadyAdded = eventSelect.filter(function (event) {\n return event.Guid === element.getAttribute('data-guid');\n });\n if (isAlreadyAdded.length === 0) {\n eventSelect.push(_this.getEventByGuid(element.getAttribute('data-guid')));\n }\n elementSelect.push(element);\n });\n return {\n event: eventSelect.length > 1 ? eventSelect : eventSelect[0],\n element: elementSelect.length > 1 ? elementSelect : elementSelect[0]\n };\n };\n EventBase.prototype.removeSelectedAppointmentClass = function () {\n var selectedAppointments = this.getSelectedAppointments();\n removeClass(selectedAppointments, cls.APPOINTMENT_BORDER);\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n removeClass(selectedAppointments, cls.AGENDA_SELECTED_CELL);\n }\n };\n EventBase.prototype.addSelectedAppointments = function (cells, preventFocus) {\n if (this.parent.currentView !== 'MonthAgenda') {\n this.parent.removeSelectedClass();\n }\n addClass(cells, cls.APPOINTMENT_BORDER);\n if (cells.length > 0 && !preventFocus) {\n cells[cells.length - 1].focus();\n }\n };\n EventBase.prototype.getSelectedAppointments = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER + ',.' + cls.APPOINTMENT_CLASS + ':focus'));\n };\n EventBase.prototype.focusElement = function (isFocused) {\n if (this.parent.eventWindow.dialogObject && this.parent.eventWindow.dialogObject.visible) {\n return;\n }\n var activeEle = document.activeElement;\n var selectedCell = this.parent.getSelectedCells();\n if (selectedCell.length > 0 && ((activeEle && (this.parent.element.contains(activeEle) ||\n selectedCell.indexOf(activeEle) !== -1)) || isFocused)) {\n if (this.parent.keyboardInteractionModule) {\n var target = ((!isNullOrUndefined(this.parent.activeCellsData) &&\n this.parent.activeCellsData.element) || selectedCell[selectedCell.length - 1]);\n this.parent.keyboardInteractionModule.selectCells(target instanceof Array, target);\n }\n return;\n }\n var selectedAppointments = this.getSelectedAppointments();\n if (selectedAppointments.length > 0) {\n if (this.parent.activeEventData && this.parent.activeEventData.element && selectedAppointments.indexOf(this.parent.activeEventData.element) > -1) {\n this.parent.activeEventData.element.focus();\n return;\n }\n selectedAppointments[selectedAppointments.length - 1].focus();\n return;\n }\n };\n EventBase.prototype.selectWorkCellByTime = function (eventsData) {\n var target;\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n return target;\n }\n if (eventsData.length > 0) {\n var selectedObject = eventsData[eventsData.length - 1];\n var eventStartTime = selectedObject[this.parent.eventFields.startTime];\n var nearestTime = new Date(+eventStartTime).setMinutes(0, 0, 0);\n var isAllDay = this.isAllDayAppointment(selectedObject);\n if (this.parent.currentView === 'Month' || isAllDay) {\n nearestTime = new Date(+eventStartTime).setHours(0, 0, 0, 0);\n }\n var targetArea = void 0;\n if (isAllDay && ['Day', 'Week', 'WorkWeek'].indexOf(this.parent.currentView) !== -1) {\n targetArea = this.parent.getAllDayRow();\n }\n else {\n targetArea = this.parent.getContentTable();\n }\n var queryString = '[data-date=\"' + new Date(nearestTime).getTime() + '\"]';\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n queryString += '[data-group-index=\"' + this.getGroupIndexFromEvent(selectedObject) + '\"]';\n }\n target = targetArea.querySelector(queryString);\n if (target) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n if (this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n return target;\n }\n }\n return target;\n };\n EventBase.prototype.getGroupIndexFromEvent = function (eventData) {\n var levelIndex;\n var resource;\n var levelName;\n var idField;\n for (var i = this.parent.resourceBase.resourceCollection.length - 1; i >= 0; i--) {\n var resourceData = eventData[this.parent.resourceBase.resourceCollection[parseInt(i.toString(), 10)].field];\n if (!isNullOrUndefined(resourceData)) {\n resource = this.parent.resourceBase.resourceCollection[parseInt(i.toString(), 10)];\n levelIndex = i;\n levelName = resource.name;\n idField = resource.field;\n break;\n }\n }\n if (isNullOrUndefined(levelName) && isNullOrUndefined(levelIndex)) {\n levelName = this.parent.resourceCollection.slice(-1)[0].name;\n levelIndex = this.parent.resourceCollection.length - 1;\n idField = this.parent.resourceCollection.slice(-1)[0].field;\n resource = this.parent.resourceCollection.filter(function (e, index) {\n if (e.name === levelName) {\n levelIndex = index;\n return e;\n }\n return null;\n })[0];\n }\n var id = ((eventData[\"\" + idField] instanceof Array) ?\n eventData[\"\" + idField][0] : eventData[\"\" + idField]);\n if (levelIndex > 0) {\n var parentField = this.parent.resourceCollection[levelIndex - 1].field;\n return this.parent.resourceBase.getIndexFromResourceId(id, levelName, resource, eventData, parentField);\n }\n else {\n return this.parent.resourceBase.getIndexFromResourceId(id, levelName, resource);\n }\n };\n EventBase.prototype.isAllDayAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var isAllDay = event[fieldMapping.isAllDay];\n var isFullDay = ((util.getUniversalTime(event[fieldMapping.endTime]) - util.getUniversalTime(event[fieldMapping.startTime]))\n / util.MS_PER_DAY) >= 1;\n return (isAllDay || (this.parent.eventSettings.spannedEventPlacement !== 'TimeSlot' && isFullDay)) ? true : false;\n };\n EventBase.prototype.addEventListener = function () {\n this.parent.on(event.documentClick, this.appointmentBorderRemove, this);\n };\n EventBase.prototype.removeEventListener = function () {\n this.parent.off(event.documentClick, this.appointmentBorderRemove);\n };\n EventBase.prototype.appointmentBorderRemove = function (event) {\n var element = event.event.target;\n if (closest(element, '.' + cls.APPOINTMENT_CLASS)) {\n if (this.parent.currentView !== 'MonthAgenda') {\n this.parent.removeSelectedClass();\n }\n }\n else if (!closest(element, '.' + cls.POPUP_OPEN)) {\n this.removeSelectedAppointmentClass();\n this.parent.selectedElements = [];\n }\n };\n EventBase.prototype.wireAppointmentEvents = function (element, event, isPreventCrud) {\n if (isPreventCrud === void 0) { isPreventCrud = false; }\n var isReadOnly = (!isNullOrUndefined(event)) ? event[this.parent.eventFields.isReadonly] : false;\n EventHandler.add(element, 'click', this.eventClick, this);\n if (!this.parent.isAdaptive && !this.parent.activeViewOptions.readonly && !isReadOnly) {\n EventHandler.add(element, 'touchstart', this.eventTouchClick, this);\n EventHandler.add(element, 'dblclick', this.eventDoubleClick, this);\n }\n if (!this.parent.activeViewOptions.readonly && !isReadOnly && !isPreventCrud) {\n if (this.parent.resizeModule) {\n this.parent.resizeModule.wireResizeEvent(element);\n }\n if (this.parent.dragAndDropModule) {\n this.parent.dragAndDropModule.wireDragEvent(element);\n }\n }\n };\n EventBase.prototype.eventTouchClick = function (e) {\n var _this = this;\n setTimeout(function () { return _this.isDoubleTapped = false; }, 250);\n e.preventDefault();\n if (this.isDoubleTapped) {\n this.eventDoubleClick(e);\n }\n else if (!this.isDoubleTapped) {\n this.isDoubleTapped = true;\n this.eventClick(e);\n }\n };\n EventBase.prototype.renderResizeHandler = function (element, spanEvent, isReadOnly) {\n if (!this.parent.resizeModule || !this.parent.allowResizing || this.parent.activeViewOptions.readonly || isReadOnly) {\n return;\n }\n for (var _i = 0, _a = Object.keys(spanEvent); _i < _a.length; _i++) {\n var resizeEdge = _a[_i];\n var resizeHandler = createElement('div', { className: cls.EVENT_RESIZE_CLASS });\n switch (resizeEdge) {\n case 'isLeft':\n if (!spanEvent.isLeft) {\n resizeHandler.appendChild(createElement('div', { className: 'e-left-right-resize' }));\n addClass([resizeHandler], this.parent.enableRtl ? cls.RIGHT_RESIZE_HANDLER : cls.LEFT_RESIZE_HANDLER);\n prepend([resizeHandler], element);\n }\n break;\n case 'isRight':\n if (!spanEvent.isRight) {\n resizeHandler.appendChild(createElement('div', { className: 'e-left-right-resize' }));\n addClass([resizeHandler], this.parent.enableRtl ? cls.LEFT_RESIZE_HANDLER : cls.RIGHT_RESIZE_HANDLER);\n append([resizeHandler], element);\n }\n break;\n case 'isTop':\n if (!spanEvent.isTop) {\n resizeHandler.appendChild(createElement('div', { className: 'e-top-bottom-resize' }));\n addClass([resizeHandler], cls.TOP_RESIZE_HANDLER);\n prepend([resizeHandler], element);\n }\n break;\n case 'isBottom':\n if (!spanEvent.isBottom) {\n resizeHandler.appendChild(createElement('div', { className: 'e-top-bottom-resize' }));\n addClass([resizeHandler], cls.BOTTOM_RESIZE_HANDLER);\n append([resizeHandler], element);\n }\n break;\n }\n }\n };\n EventBase.prototype.eventClick = function (eventData) {\n var _this = this;\n var target = eventData.target;\n if (target.classList.contains(cls.DRAG_CLONE_CLASS) || target.classList.contains(cls.RESIZE_CLONE_CLASS) ||\n target.classList.contains(cls.INLINE_SUBJECT_CLASS)) {\n return;\n }\n if ((eventData.ctrlKey || eventData.metaKey) && eventData.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.quickPopup.quickPopup.hide();\n this.parent.selectedElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n var target_1 = closest(eventData.target, '.' + cls.APPOINTMENT_CLASS);\n this.getSelectedEventElements(target_1);\n this.activeEventData(eventData, false);\n var selectArgs = {\n data: this.parent.activeEventData.event,\n element: this.parent.activeEventData.element,\n event: eventData, requestType: 'eventSelect'\n };\n this.parent.trigger(event.select, selectArgs);\n var args = extend(this.parent.activeEventData, { cancel: false, originalEvent: eventData });\n this.parent.trigger(event.eventClick, args);\n }\n else {\n this.removeSelectedAppointmentClass();\n this.activeEventData(eventData, true);\n var selectEventArgs = {\n data: this.parent.activeEventData.event,\n element: this.parent.activeEventData.element,\n event: eventData, requestType: 'eventSelect'\n };\n this.parent.trigger(event.select, selectEventArgs);\n var args = extend(this.parent.activeEventData, { cancel: false, originalEvent: eventData });\n this.parent.trigger(event.eventClick, args, function (eventClickArgs) {\n if (eventClickArgs.cancel) {\n _this.removeSelectedAppointmentClass();\n _this.parent.selectedElements = [];\n if (_this.parent.quickPopup) {\n _this.parent.quickPopup.quickPopupHide();\n }\n }\n else {\n if (_this.parent.currentView === 'Agenda' || _this.parent.currentView === 'MonthAgenda') {\n addClass([_this.parent.activeEventData.element], cls.AGENDA_SELECTED_CELL);\n }\n if (_this.parent.allowInline) {\n var inlineArgs = {\n data: eventClickArgs.event,\n element: eventClickArgs.element,\n type: 'Event'\n };\n _this.parent.notify(event.inlineClick, inlineArgs);\n }\n else {\n _this.parent.notify(event.eventClick, eventClickArgs);\n }\n }\n });\n }\n };\n EventBase.prototype.eventDoubleClick = function (e) {\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide(true);\n }\n if (e.type === 'touchstart') {\n this.activeEventData(e, true);\n }\n this.removeSelectedAppointmentClass();\n this.parent.selectedElements = [];\n if (this.parent.activeEventData.element.classList.contains(cls.INLINE_APPOINTMENT_CLASS) ||\n this.parent.activeEventData.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS)) {\n return;\n }\n if (!isNullOrUndefined(this.parent.activeEventData.event) &&\n isNullOrUndefined(this.parent.activeEventData.event[this.parent.eventFields.recurrenceID])) {\n this.parent.eventWindow.openEditor(this.parent.activeEventData.event, 'Save');\n }\n else {\n this.parent.currentAction = 'EditOccurrence';\n this.parent.quickPopup.openRecurrenceAlert();\n }\n };\n EventBase.prototype.getEventByGuid = function (guid) {\n return this.parent.eventsProcessed.filter(function (data) { return data.Guid === guid; })[0];\n };\n EventBase.prototype.getEventById = function (id) {\n var _this = this;\n return this.parent.eventsData.filter(function (data) {\n return data[_this.parent.eventFields.id] === id;\n })[0];\n };\n EventBase.prototype.generateGuid = function () {\n return 'xyxxxxyx-xxxy-yxxx-xyxx-xxyxxxxyyxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = (c === 'x') ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n EventBase.prototype.getEventIDType = function () {\n if (this.parent.eventsData.length !== 0) {\n return typeof (this.parent.eventsData[0][this.parent.eventFields.id]);\n }\n if (this.parent.blockData.length !== 0) {\n return typeof (this.parent.blockData[0][this.parent.eventFields.id]);\n }\n return 'string';\n };\n EventBase.prototype.getEventMaxID = function (resourceId) {\n var _this = this;\n if (this.parent.eventsData.length < 1 && this.parent.blockData.length < 1) {\n return 1;\n }\n var eventId;\n var idType = this.getEventIDType();\n if (idType === 'string') {\n eventId = this.generateGuid();\n }\n if (idType === 'number') {\n var datas = this.parent.eventsData.concat(this.parent.blockData);\n var appIds = datas.map(function (event) { return event[_this.parent.eventFields.id]; });\n var maxId = appIds.reduce(function (a, b) { return Math.max(a, b); });\n maxId = isNullOrUndefined(resourceId) ? maxId : maxId + resourceId;\n eventId = maxId + 1;\n }\n return eventId;\n };\n EventBase.prototype.activeEventData = function (eventData, isMultiple) {\n var _this = this;\n var target = closest(eventData.target, '.' + cls.APPOINTMENT_CLASS);\n var guid = target.getAttribute('data-guid');\n if (isMultiple) {\n this.addSelectedAppointments([].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]')), true);\n target.focus();\n }\n var eventObject = this.getEventByGuid(guid);\n if (eventObject && eventObject.isSpanned) {\n eventObject = this.parent.eventsData.filter(function (obj) {\n return obj[_this.parent.eventFields.id] === eventObject[_this.parent.eventFields.id];\n })[0];\n }\n this.parent.activeEventData = { event: eventObject, element: target };\n };\n EventBase.prototype.generateOccurrence = function (event, viewDate, isMaxCount) {\n var startDate = event[this.parent.eventFields.startTime];\n var endDate = event[this.parent.eventFields.endTime];\n var eventRule = event[this.parent.eventFields.recurrenceRule];\n var timeZoneDiff = endDate.getTimezoneOffset() - startDate.getTimezoneOffset();\n var duration = (endDate.getTime() - startDate.getTime()) - (timeZoneDiff * 60000);\n viewDate = new Date((viewDate || this.parent.activeView.startDate()).getTime() - duration);\n var exception = event[this.parent.eventFields.recurrenceException];\n var maxCount;\n if (this.parent.currentView !== 'Agenda' && isMaxCount) {\n maxCount = util.getDateCount(viewDate, this.parent.activeView.endDate()) + 1;\n }\n var newTimezone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();\n var firstDay = this.parent.activeViewOptions.firstDayOfWeek;\n var calendarMode = this.parent.calendarMode;\n var dates = generate(startDate, eventRule, exception, firstDay, maxCount, viewDate, calendarMode, newTimezone);\n if (this.parent.currentView === 'Agenda' && eventRule.indexOf('COUNT') === -1 && eventRule.indexOf('UNTIL') === -1) {\n if (isNullOrUndefined(event.generatedDates)) {\n event.generatedDates = { start: new Date(dates[0]), end: new Date(dates[dates.length - 1]) };\n }\n else {\n if (dates[0] < event.generatedDates.start.getTime()) {\n event.generatedDates.start = new Date(dates[0]);\n }\n if (dates[dates.length - 1] > event.generatedDates.end.getTime()) {\n event.generatedDates.end = new Date(dates[dates.length - 1]);\n }\n }\n }\n var occurrenceCollection = [];\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var date = dates_1[_i];\n var clonedObject = extend({}, event, null, true);\n date = this.getDSTAdjustedTime(date, clonedObject);\n clonedObject[this.parent.eventFields.startTime] = new Date(date);\n clonedObject[this.parent.eventFields.endTime] = new Date(new Date(date).setMilliseconds(duration));\n clonedObject[this.parent.eventFields.recurrenceID] = clonedObject[this.parent.eventFields.id];\n delete clonedObject[this.parent.eventFields.recurrenceException];\n delete clonedObject[this.parent.eventFields.followingID];\n clonedObject.Guid = this.generateGuid();\n occurrenceCollection.push(clonedObject);\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getDSTAdjustedTime = function (date, event) {\n var occurDate = date;\n if (this.parent.timezone &&\n (event[this.parent.eventFields.startTimezone] || event[this.parent.eventFields.endTimezone])) {\n var eventOffset = this.getDSTDiff(event[this.parent.eventFields.startTime], new Date(date), event[this.parent.eventFields.startTimezone]);\n var schOffset = this.getDSTDiff(event[this.parent.eventFields.startTime], new Date(date), this.parent.timezone);\n occurDate = (new Date(date).getTime() - (eventOffset - schOffset) * 60000);\n }\n return occurDate;\n };\n EventBase.prototype.getDSTDiff = function (startDate, occurDate, timezone) {\n var startOffset = this.parent.tzModule.offset(new Date(startDate), timezone);\n var occurOffset = this.parent.tzModule.offset(new Date(occurDate), timezone);\n return startOffset - occurOffset;\n };\n EventBase.prototype.getParentEvent = function (eventObj, isParent) {\n if (isParent === void 0) { isParent = false; }\n var parentEvent;\n do {\n eventObj = this.getFollowingEvent(eventObj);\n if (eventObj) {\n parentEvent = extend({}, eventObj, null, true);\n }\n } while (eventObj && isParent);\n if (isParent && parentEvent) {\n var collection = this.getEventCollections(parentEvent);\n var followObj = collection.follow.slice(-1)[0];\n if (collection.occurrence.length > 0 && !parentEvent[this.parent.eventFields.recurrenceException]) {\n followObj = collection.occurrence.slice(-1)[0];\n }\n if (followObj) {\n parentEvent[this.parent.eventFields.recurrenceRule] = followObj[this.parent.eventFields.recurrenceRule];\n }\n }\n return parentEvent;\n };\n EventBase.prototype.getEventCollections = function (parentObj, childObj) {\n var followingCollection = [];\n var occurrenceCollection = [];\n var followingEvent = parentObj;\n do {\n followingEvent = this.getFollowingEvent(followingEvent, true);\n if (followingEvent) {\n followingCollection.push(followingEvent);\n }\n occurrenceCollection = occurrenceCollection.concat(this.getOccurrenceEvent(followingEvent || parentObj));\n } while (followingEvent);\n var collections = {};\n if (childObj) {\n var fields_1 = this.parent.eventFields;\n collections = {\n follow: followingCollection.filter(function (eventData) {\n return eventData[fields_1.startTime] >= childObj[fields_1.startTime];\n }),\n occurrence: occurrenceCollection.filter(function (eventData) {\n return eventData[fields_1.startTime] >= childObj[fields_1.startTime];\n })\n };\n }\n else {\n collections = { follow: followingCollection, occurrence: occurrenceCollection };\n }\n return collections;\n };\n EventBase.prototype.getFollowingEvent = function (parentObj, isReverse) {\n var fields = this.parent.eventFields;\n var fieldValue;\n if (isReverse) {\n fieldValue = parentObj[fields.id];\n }\n else {\n fieldValue = (parentObj[fields.recurrenceID] || parentObj[fields.followingID]);\n }\n var parentApp = this.parent.eventsData.filter(function (data) {\n return data[isReverse ? fields.followingID : fields.id] === fieldValue;\n });\n return parentApp.shift();\n };\n EventBase.prototype.isFollowingEvent = function (parentObj, childObj) {\n var parentStart = parentObj[this.parent.eventFields.startTime];\n var childStart = childObj[this.parent.eventFields.startTime];\n return parentStart.getHours() === childStart.getHours() && parentStart.getMinutes() === childStart.getMinutes() &&\n parentStart.getSeconds() === childStart.getSeconds();\n };\n EventBase.prototype.getOccurrenceEvent = function (eventObj, isGuid, isFollowing) {\n if (isGuid === void 0) { isGuid = false; }\n if (isFollowing === void 0) { isFollowing = false; }\n var idField = isGuid ? 'Guid' : (isFollowing) ? this.parent.eventFields.followingID : this.parent.eventFields.recurrenceID;\n var fieldKey = isGuid ? 'Guid' : this.parent.eventFields.id;\n var dataSource = isGuid ? this.parent.eventsProcessed : this.parent.eventsData;\n return dataSource.filter(function (data) { return data[\"\" + idField] === eventObj[\"\" + fieldKey]; });\n };\n EventBase.prototype.getOccurrencesByID = function (id) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n var parentObject = this.parent.eventsData.filter(function (obj) { return obj[fields.id] === id; });\n for (var _i = 0, parentObject_1 = parentObject; _i < parentObject_1.length; _i++) {\n var event_3 = parentObject_1[_i];\n if (!isNullOrUndefined(event_3[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_3));\n }\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getOccurrencesByRange = function (startTime, endTime) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {\n var event_4 = _a[_i];\n if (!isNullOrUndefined(event_4[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_4));\n }\n }\n var filter = occurrenceCollection.filter(function (obj) {\n return obj[fields.startTime] >= startTime && obj[fields.endTime] <= endTime && !isNullOrUndefined(obj[fields.recurrenceID]);\n });\n return filter;\n };\n EventBase.prototype.getDeletedOccurrences = function (recurrenceData) {\n var fields = this.parent.eventFields;\n var parentObject;\n var deletedOccurrences = [];\n if (typeof recurrenceData === 'string' || typeof recurrenceData === 'number') {\n parentObject = this.parent.eventsData.filter(function (obj) {\n return obj[fields.id] === recurrenceData;\n })[0];\n }\n else {\n parentObject = extend({}, recurrenceData, null, true);\n }\n if (parentObject[fields.recurrenceException]) {\n var exDateString_1 = parentObject[fields.recurrenceException].split(',');\n var _loop_3 = function (i, len) {\n var edited = this_2.parent.eventsData.filter(function (eventObj) {\n return eventObj[fields.recurrenceID] === parentObject[fields.id] && eventObj[fields.recurrenceException] === exDateString_1[parseInt(i.toString(), 10)];\n });\n if (edited.length === 0) {\n var exDate = getDateFromRecurrenceDateString(exDateString_1[parseInt(i.toString(), 10)]);\n var childObject = extend({}, recurrenceData, null, true);\n childObject[fields.recurrenceID] = parentObject[fields.id];\n delete childObject[fields.followingID];\n childObject[fields.recurrenceException] = exDateString_1[parseInt(i.toString(), 10)];\n var startDate = new Date(exDate.getTime());\n var time = parentObject[fields.endTime].getTime() - parentObject[fields.startTime].getTime();\n var endDate = new Date(startDate.getTime());\n endDate.setMilliseconds(time);\n childObject[fields.startTime] = new Date(startDate.getTime());\n childObject[fields.endTime] = new Date(endDate.getTime());\n deletedOccurrences.push(childObject);\n }\n };\n var this_2 = this;\n for (var i = 0, len = exDateString_1.length; i < len; i++) {\n _loop_3(i, len);\n }\n }\n return deletedOccurrences;\n };\n EventBase.prototype.applyResourceColor = function (element, data, type, index, alpha) {\n if (!this.parent.resourceBase) {\n return;\n }\n var alphaColor = function (color, alpha) {\n color = color.replace('#', '');\n var r = parseInt(color.substring(0, color.length / 3), 16);\n var g = parseInt(color.substring(color.length / 3, 2 * color.length / 3), 16);\n var b = parseInt(color.substring(2 * color.length / 3, 3 * color.length / 3), 16);\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + alpha + \")\";\n };\n // index refers groupOrder\n var color = this.parent.resourceBase.getResourceColor(data, index);\n if (color) {\n element.style[type] = !isNullOrUndefined(alpha) ? alphaColor(color, alpha) : color;\n }\n };\n EventBase.prototype.createBlockAppointmentElement = function (record, resIndex, isResourceEventTemplate) {\n var eventSubject = (record[this.parent.eventFields.subject] || this.parent.eventSettings.fields.subject.default);\n var appointmentWrapper = createElement('div', {\n className: cls.BLOCK_APPOINTMENT_CLASS,\n attrs: {\n 'data-id': 'Appointment_' + record[this.parent.eventFields.id],\n 'aria-disabled': 'true'\n }\n });\n var templateElement;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n var scheduleId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.eventTemplateName;\n var templateId = scheduleId + viewName + 'eventTemplate';\n var templateName = 'eventTemplate' + (isResourceEventTemplate &&\n this.parent.currentView.indexOf('Year') === -1 ? '_' + resIndex : '');\n templateElement = this.parent.getAppointmentTemplate()(record, this.parent, templateName, templateId, false);\n }\n else {\n var appointmentSubject = createElement('div', { className: cls.SUBJECT_CLASS });\n this.parent.sanitize(eventSubject, appointmentSubject);\n templateElement = [appointmentSubject];\n }\n append(templateElement, appointmentWrapper);\n this.setWrapperAttributes(appointmentWrapper, resIndex);\n return appointmentWrapper;\n };\n EventBase.prototype.setWrapperAttributes = function (appointmentWrapper, resIndex) {\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n appointmentWrapper.setAttribute('data-group-index', resIndex.toString());\n }\n };\n EventBase.prototype.getReadonlyAttribute = function (event) {\n return (event[this.parent.eventFields.isReadonly] || this.parent.readonly).toString();\n };\n EventBase.prototype.isBlockRange = function (eventData) {\n var eventCollection = (eventData instanceof Array) ? eventData : [eventData];\n var isBlockAlert = false;\n var fields = this.parent.eventFields;\n for (var _i = 0, _a = eventCollection; _i < _a.length; _i++) {\n var event_5 = _a[_i];\n var dataCol = [];\n if (!isNullOrUndefined(event_5[fields.recurrenceRule]) &&\n (isNullOrUndefined(event_5[fields.recurrenceID]) || event_5[fields.id] === event_5[fields.recurrenceID])) {\n dataCol = this.generateOccurrence(event_5);\n }\n else {\n dataCol.push(event_5);\n }\n for (var _b = 0, dataCol_1 = dataCol; _b < dataCol_1.length; _b++) {\n var data = dataCol_1[_b];\n var filterBlockEvents = this.filterBlockEvents(data);\n if (filterBlockEvents.length > 0) {\n isBlockAlert = true;\n break;\n }\n }\n }\n this.parent.uiStateValues.isBlock = isBlockAlert;\n return isBlockAlert;\n };\n EventBase.prototype.getFilterEventsList = function (dataSource, query) {\n return new DataManager(dataSource).executeLocal(new Query().where(query));\n };\n EventBase.prototype.getSeriesEvents = function (parentEvent, startTime) {\n var fields = this.parent.eventFields;\n startTime = isNullOrUndefined(startTime) ? parentEvent[fields.startTime] : startTime;\n var deleteFutureEditEvents;\n var futureEvents;\n var deleteFutureEditEventList = [];\n var delId = parentEvent[fields.id];\n var followingId = parentEvent[fields.followingID];\n var deleteFutureEvent;\n var startTimeQuery = this.parent.currentAction === 'EditSeries' ? 'greaterthan' : 'greaterthanorequal';\n do {\n deleteFutureEvent = ((new Predicate(fields.followingID, 'equal', delId))).\n and(new Predicate(fields.startTime, startTimeQuery, startTime));\n futureEvents = this.getFilterEventsList(this.parent.eventsData, deleteFutureEvent);\n deleteFutureEditEvents = futureEvents.slice(-1)[0];\n if (!isNullOrUndefined(deleteFutureEditEvents) && deleteFutureEditEvents[fields.id] !== followingId) {\n deleteFutureEditEventList.push(deleteFutureEditEvents);\n delId = deleteFutureEditEvents[fields.id];\n followingId = deleteFutureEditEvents[fields.followingID];\n }\n else {\n followingId = null;\n }\n } while (futureEvents.length === 1 && !isNullOrUndefined(deleteFutureEditEvents[fields.followingID]));\n return deleteFutureEditEventList;\n };\n EventBase.prototype.getEditedOccurrences = function (deleteFutureEditEventList, startTime) {\n var fields = this.parent.eventFields;\n var deleteRecurrenceEventList = [];\n var delEditedEvents;\n for (var _i = 0, deleteFutureEditEventList_1 = deleteFutureEditEventList; _i < deleteFutureEditEventList_1.length; _i++) {\n var event_6 = deleteFutureEditEventList_1[_i];\n var delEventQuery = new Predicate(fields.recurrenceID, 'equal', event_6[fields.id]).\n or(new Predicate(fields.recurrenceID, 'equal', event_6[fields.followingID]).\n and(new Predicate(fields.recurrenceID, 'notequal', undefined)).\n and(new Predicate(fields.recurrenceID, 'notequal', null)));\n if (this.parent.currentAction === 'EditFollowingEvents' || this.parent.currentAction === 'DeleteFollowingEvents') {\n delEventQuery = delEventQuery.and(new Predicate(fields.startTime, 'greaterthanorequal', startTime));\n }\n delEditedEvents = this.getFilterEventsList(this.parent.eventsData, delEventQuery);\n deleteRecurrenceEventList = deleteRecurrenceEventList.concat(delEditedEvents);\n }\n return deleteRecurrenceEventList;\n };\n EventBase.prototype.getRenderedDates = function (dateRender) {\n var firstDate = 0;\n var lastDate = dateRender.length;\n var filteredDates;\n if (dateRender[0] < this.parent.minDate && dateRender[dateRender.length - 1] > this.parent.maxDate) {\n for (var i = 0; i < dateRender.length; i++) {\n if (util.resetTime(dateRender[parseInt(i.toString(), 10)]).getTime() === util.resetTime(new Date(this.parent.minDate)).getTime()) {\n firstDate = i;\n }\n if (util.resetTime(dateRender[parseInt(i.toString(), 10)]).getTime() === util.resetTime(new Date(this.parent.maxDate)).getTime()) {\n lastDate = i;\n }\n }\n filteredDates = dateRender.filter(function (date) { return date >= dateRender[parseInt(firstDate.toString(), 10)] && date <= dateRender[parseInt(lastDate.toString(), 10)]; });\n }\n return filteredDates;\n };\n EventBase.prototype.isValidEvent = function (eventObj, start, end, schedule) {\n var isHourRange = end.getTime() > schedule.startHour.getTime() && start.getTime() < schedule.endHour.getTime();\n var isSameRange = schedule.startHour.getTime() <= start.getTime() &&\n eventObj[this.parent.eventFields.startTime].getTime() >= schedule.startHour.getTime() &&\n eventObj[this.parent.eventFields.endTime].getTime() < schedule.endHour.getTime() && start.getTime() === end.getTime();\n return isHourRange || isSameRange;\n };\n EventBase.prototype.allDayExpandScroll = function (dateHeader) {\n var indentHeight = 0;\n var headerRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.HEADER_ROW_CLASS));\n headerRows.forEach(function (element) {\n var tdEle = [].slice.call(element.children);\n tdEle.forEach(function (ele) { ele.style.top = indentHeight + 'px'; });\n indentHeight += element.offsetHeight;\n });\n indentHeight = dateHeader.offsetHeight - indentHeight;\n this.parent.element.querySelector('.' + cls.ALLDAY_CELLS_CLASS).style.height = (indentHeight / 12) + 'em';\n if (this.parent.uiStateValues.expand) {\n addClass([dateHeader], cls.ALLDAY_APPOINTMENT_SCROLL);\n }\n else {\n removeClass([dateHeader], cls.ALLDAY_APPOINTMENT_SCROLL);\n }\n };\n EventBase.prototype.updateEventMinimumDuration = function (startEndHours, startTime, endTime) {\n if (startTime.getTime() < endTime.getTime()) {\n var eventDuration = (util.getUniversalTime(endTime) - util.getUniversalTime(startTime)) / util.MS_PER_MINUTE;\n if (eventDuration < this.parent.eventSettings.minimumEventDuration) {\n var tempEnd = new Date(startTime);\n tempEnd.setMinutes(tempEnd.getMinutes() + this.parent.eventSettings.minimumEventDuration);\n endTime = tempEnd;\n if (endTime.getTime() > startEndHours.endHour.getTime()) {\n var tempStart = new Date(startEndHours.endHour.getTime());\n tempStart.setMinutes(tempStart.getMinutes() - this.parent.eventSettings.minimumEventDuration);\n startTime = tempStart;\n endTime = startEndHours.endHour;\n }\n }\n }\n return { startDate: startTime, endDate: endTime };\n };\n EventBase.prototype.createEventWrapper = function (type, index) {\n if (type === void 0) { type = ''; }\n if (index === void 0) { index = 0; }\n var tr = createElement('tr');\n var levels = this.parent.activeView.colLevels.slice(-1)[0];\n for (var i = 0, len = levels.length; i < len; i++) {\n var col = levels[parseInt(i.toString(), 10)];\n var appointmentWrap = createElement('td', {\n className: (type === 'allDay') ? cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : (type === 'timeIndicator') ?\n cls.TIMELINE_WRAPPER_CLASS : cls.DAY_WRAPPER_CLASS, attrs: { 'data-date': col.date.getTime().toString() }\n });\n if (!isNullOrUndefined(col.groupIndex)) {\n appointmentWrap.setAttribute('data-group-index', col.groupIndex.toString());\n }\n if (type === '') {\n var innerWrapper = createElement('div', {\n id: cls.APPOINTMENT_WRAPPER_CLASS + '-' + index.toString(),\n className: cls.APPOINTMENT_WRAPPER_CLASS\n });\n appointmentWrap.appendChild(innerWrapper);\n }\n tr.appendChild(appointmentWrap);\n index = index + 1;\n }\n return tr;\n };\n EventBase.prototype.getPageCoordinates = function (e) {\n if (isNullOrUndefined(e)) {\n return e;\n }\n var eventArgs = e.event;\n return eventArgs && eventArgs.changedTouches ? eventArgs.changedTouches[0] : e.changedTouches ? e.changedTouches[0] :\n eventArgs || e;\n };\n EventBase.prototype.renderSpannedIcon = function (element, spanEvent) {\n var iconElement = createElement('div', { className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON });\n if (spanEvent.isLeft) {\n var iconLeft = iconElement.cloneNode();\n addClass([iconLeft], cls.EVENT_ICON_LEFT_CLASS);\n prepend([iconLeft], element);\n }\n if (spanEvent.isRight) {\n var iconRight = iconElement.cloneNode();\n addClass([iconRight], cls.EVENT_ICON_RIGHT_CLASS);\n append([iconRight], element);\n }\n if (spanEvent.isTop) {\n var iconTop = iconElement.cloneNode();\n addClass([iconTop], cls.EVENT_ICON_UP_CLASS);\n prepend([iconTop], element);\n }\n if (spanEvent.isBottom) {\n var iconBottom = iconElement.cloneNode();\n addClass([iconBottom], cls.EVENT_ICON_DOWN_CLASS);\n append([iconBottom], element);\n }\n };\n EventBase.prototype.unWireEvents = function () {\n var appElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var _i = 0, appElements_1 = appElements; _i < appElements_1.length; _i++) {\n var element = appElements_1[_i];\n EventHandler.clearEvents(element);\n }\n };\n EventBase.prototype.destroy = function () {\n this.unWireEvents();\n this.parent = null;\n };\n return EventBase;\n}());\nexport { EventBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { addClass, append, createElement, extend, remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, EventHandler } from '@syncfusion/ej2-base';\nimport { TimelineEvent } from './timeline-view';\nimport * as util from '../base/util';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\nvar EVENT_GAP = 2;\n/**\n * Year view events render\n */\nvar YearEvent = /** @class */ (function (_super) {\n __extends(YearEvent, _super);\n function YearEvent(parent) {\n var _this = _super.call(this, parent, 'day') || this;\n _this.isResource = false;\n return _this;\n }\n YearEvent.prototype.renderAppointments = function () {\n if (this.parent.dragAndDropModule) {\n this.parent.dragAndDropModule.setDragArea();\n }\n this.fields = this.parent.eventFields;\n var elementSelector = (this.parent.currentView === 'Year') ? '.' + cls.APPOINTMENT_CLASS :\n '.' + cls.APPOINTMENT_WRAPPER_CLASS + ',.' + cls.MORE_INDICATOR_CLASS;\n var eventWrappers = [].slice.call(this.parent.element.querySelectorAll(elementSelector));\n for (var _i = 0, eventWrappers_1 = eventWrappers; _i < eventWrappers_1.length; _i++) {\n var wrapper = eventWrappers_1[_i];\n remove(wrapper);\n }\n this.renderedEvents = [];\n if (this.parent.currentView === 'Year') {\n this.yearViewEvents();\n }\n else {\n this.removeCellHeight();\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.isResource = true;\n this.timelineResourceEvents();\n }\n else {\n this.timelineYearViewEvents();\n }\n }\n this.parent.renderTemplates();\n this.parent.notify(events.contentReady, {});\n };\n YearEvent.prototype.yearViewEvents = function () {\n var months = this.getMonths();\n for (var _i = 0, months_1 = months; _i < months_1.length; _i++) {\n var month = months_1[_i];\n var queryString = \".e-month-calendar:nth-child(\" + (months.indexOf(month) + 1) + \") td.e-work-cells\";\n var workCells = [].slice.call(this.parent.element.querySelectorAll(queryString));\n var monthDate = new Date(this.parent.selectedDate.getFullYear(), month, 1);\n var monthStart = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));\n var monthEnd = this.parent.calendarUtil.getMonthEndDate(new Date(monthDate.getTime()));\n var startDate = util.getWeekFirstDate(monthStart, this.parent.firstDayOfWeek);\n var endDate = util.addDays(util.getWeekLastDate(monthEnd, this.parent.firstDayOfWeek), 1);\n for (var index = 0; startDate.getTime() < endDate.getTime(); index++) {\n var start = util.resetTime(new Date(startDate.getTime()));\n var end = util.addDays(new Date(start.getTime()), 1);\n startDate = util.addDays(new Date(startDate.getTime()), 1);\n if (!this.parent.isMinMaxDate(start)) {\n continue;\n }\n var filterEvents = this.parent.eventBase.filterEvents(start, end);\n if (filterEvents.length > 0) {\n var workCell = workCells[parseInt(index.toString(), 10)];\n if (workCell) {\n workCell.appendChild(createElement('div', { className: cls.APPOINTMENT_CLASS }));\n }\n }\n }\n }\n };\n YearEvent.prototype.timelineYearViewEvents = function () {\n var _this = this;\n var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')');\n this.cellWidth = workCell.getBoundingClientRect().width;\n this.cellHeader = util.getOuterHeight(workCell.querySelector('.' + cls.DATE_HEADER_CLASS));\n var eventTable = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);\n this.eventHeight = util.getElementHeightFromClass(eventTable, cls.APPOINTMENT_CLASS);\n var wrapperCollection = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));\n var months = this.getMonths();\n var groupIndex = (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.uiStateValues.isGroupAdaptive) ?\n this.parent.uiStateValues.groupIndex : undefined;\n for (var row = 0; row < months.length; row++) {\n var wrapper = wrapperCollection[parseInt(row.toString(), 10)];\n var td = row + 1;\n var eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(eventWrapper);\n var monthStart = new Date(this.parent.selectedDate.getFullYear(), months[parseInt(row.toString(), 10)], 1);\n var monthEnd = new Date(monthStart.getFullYear(), monthStart.getMonth() + 1, 0);\n var dayIndex = monthStart.getDay();\n var isSpannedCollection = [];\n if (this.parent.activeViewOptions.orientation === 'Horizontal') {\n this.renderedEvents = [];\n }\n while (monthStart.getTime() <= monthEnd.getTime()) {\n var leftValue = void 0;\n var rightValue = void 0;\n if (this.parent.activeViewOptions.orientation === 'Vertical') {\n var wrapper_1 = wrapperCollection[parseInt(dayIndex.toString(), 10)];\n td = dayIndex + 1;\n eventWrapper = wrapper_1.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!eventWrapper) {\n eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper_1.appendChild(eventWrapper);\n }\n if (this.parent.enableRtl) {\n rightValue = row * this.cellWidth;\n }\n else {\n leftValue = row * this.cellWidth;\n }\n }\n else {\n if (this.parent.enableRtl) {\n rightValue = ((dayIndex + monthStart.getDate()) - 1) * this.cellWidth;\n }\n else {\n leftValue = ((dayIndex + monthStart.getDate()) - 1) * this.cellWidth;\n }\n }\n var rowTd = this.parent.element.querySelector(\".e-content-wrap tr:nth-child(\" + td + \") td\");\n this.cellHeight = rowTd.offsetHeight;\n var dayStart = util.resetTime(new Date(monthStart.getTime()));\n var dayEnd = util.addDays(new Date(dayStart.getTime()), 1);\n var resource = void 0;\n if (this.parent.uiStateValues.isGroupAdaptive) {\n resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n }\n var dayEvents = this.parent.eventBase.filterEvents(dayStart, dayEnd, undefined, resource);\n dayEvents = this.parent.eventBase.sortByDateTime(dayEvents);\n var _loop_1 = function (index, count) {\n var eventData = extend({}, dayEvents[parseInt(index.toString(), 10)], null, true);\n this_1.updateSpannedEvents(eventData, dayStart, dayEnd);\n var overlapIndex = this_1.getIndex(dayStart);\n eventData.Index = overlapIndex;\n var availedHeight = this_1.cellHeader + (this_1.eventHeight * (overlapIndex + 1)) + EVENT_GAP +\n this_1.moreIndicatorHeight;\n var appArea = this_1.cellHeight - this_1.cellHeader - this_1.moreIndicatorHeight;\n var renderedAppCount = Math.floor(appArea / (this_1.eventHeight + EVENT_GAP));\n var moreIndicatorCount = (count - renderedAppCount) <= 0 ? 1 : (count - renderedAppCount);\n if (this_1.parent.activeViewOptions.orientation === 'Horizontal') {\n var isRendered = this_1.renderedEvents.filter(function (eventObj) {\n return eventObj.Guid === eventData.Guid;\n });\n var isSpanned = isSpannedCollection.filter(function (eventObj) {\n return eventObj.Guid === eventData.Guid;\n });\n if (isRendered.length > 0 && isRendered[0].MoreIndicator || isSpanned.length > 0 && isSpanned[0].MoreIndicator) {\n var moreIndex = this_1.parent.activeViewOptions.orientation === 'Horizontal' ? row : dayIndex;\n this_1.renderMoreIndicator(eventWrapper, moreIndicatorCount, dayStart, moreIndex, leftValue, rightValue, groupIndex);\n return \"continue\";\n }\n else if (isRendered.length > 0 || isSpanned.length > 0) {\n return \"continue\";\n }\n }\n if (this_1.parent.rowAutoHeight || this_1.cellHeight > availedHeight) {\n this_1.renderEvent(eventWrapper, eventData, row, leftValue, rightValue, monthStart, dayIndex);\n this_1.updateCellHeight(rowTd, availedHeight);\n isSpannedCollection.push(eventData);\n }\n else {\n var moreIndex = this_1.parent.activeViewOptions.orientation === 'Horizontal' ? row : dayIndex;\n this_1.renderMoreIndicator(eventWrapper, moreIndicatorCount, dayStart, moreIndex, leftValue, rightValue, groupIndex);\n if (this_1.parent.activeViewOptions.orientation === 'Horizontal') {\n eventData.MoreIndicator = true;\n this_1.renderedEvents.push(eventData);\n isSpannedCollection.push(eventData);\n }\n }\n };\n var this_1 = this;\n for (var index = 0, count = dayEvents.length; index < count; index++) {\n _loop_1(index, count);\n }\n monthStart = util.addDays(new Date(monthStart.getTime()), 1);\n if (this.parent.activeViewOptions.orientation === 'Vertical') {\n dayIndex++;\n this.renderedEvents = [];\n }\n }\n }\n if (this.parent.rowAutoHeight && this.parent.activeViewOptions.orientation === 'Vertical') {\n var appContainer = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));\n var tr_1 = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr'));\n appContainer.forEach(function (ele, index) {\n var app = [].slice.call(ele.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n var appTop = tr_1[parseInt(index.toString(), 10)].offsetTop + _this.cellHeader + EVENT_GAP;\n app.forEach(function (app) {\n var overlap = parseInt(app.getAttribute('data-index'), 10);\n app.style.top = appTop + (overlap * _this.eventHeight) + 'px';\n app.removeAttribute('data-index');\n });\n });\n }\n };\n YearEvent.prototype.updateSpannedEvents = function (eventObj, dayStart, dayEnd) {\n var isLeftRightResize = (this.isResource && this.parent.activeViewOptions.orientation === 'Vertical') ||\n (!this.isResource && this.parent.activeViewOptions.orientation === 'Horizontal');\n var data = { isLeft: true, isRight: true, isBottom: true, isTop: true };\n if (dayStart.getTime() <= eventObj[this.fields.startTime].getTime()) {\n if (isLeftRightResize) {\n data.isLeft = false;\n }\n else {\n data.isTop = false;\n }\n }\n if ((dayEnd.getTime() >= eventObj[this.fields.endTime].getTime()) || (isLeftRightResize && !this.isResource &&\n util.addDays(dayEnd, -1).getMonth() === eventObj[this.fields.endTime].getMonth()) ||\n (isLeftRightResize && this.isResource && (dayEnd.getTime() <= eventObj[this.fields.endTime].getTime()))) {\n if (isLeftRightResize) {\n data.isRight = false;\n }\n else {\n data.isBottom = false;\n }\n }\n eventObj.data = data;\n };\n YearEvent.prototype.timelineResourceEvents = function () {\n var _this = this;\n var contentTable = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var isVerticalScrollbarAvail = contentTable.offsetWidth > contentTable.clientWidth;\n var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);\n this.cellWidth = workCell.getBoundingClientRect().width;\n this.cellHeader = 0;\n var eventTable = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);\n this.eventHeight = util.getElementHeightFromClass(eventTable, cls.APPOINTMENT_CLASS);\n var wrapperCollection = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.activeViewOptions.allowVirtualScrolling ? this.parent.resourceBase.renderedResources :\n this.parent.resourceBase.lastResourceLevel;\n var months = this.getMonths();\n if (this.parent.activeViewOptions.orientation === 'Horizontal') {\n for (var month = 0; month < months.length; month++) {\n var monthStart = new Date(this.parent.selectedDate.getFullYear(), months[parseInt(month.toString(), 10)], 1);\n for (var i = 0, len = resources.length; i < len; i++) {\n this.renderedEvents = [];\n this.renderResourceEvent(wrapperCollection[parseInt(month.toString(), 10)], resources[parseInt(i.toString(), 10)], month, i, monthStart);\n }\n }\n }\n else {\n for (var i = 0, len = resources.length; i < len; i++) {\n this.renderedEvents = [];\n for (var month = 0; month < months.length; month++) {\n var monthStart = new Date(this.parent.selectedDate.getFullYear(), months[parseInt(month.toString(), 10)], 1);\n this.renderResourceEvent(wrapperCollection[parseInt(i.toString(), 10)], resources[parseInt(i.toString(), 10)], month, i, monthStart);\n }\n }\n }\n if (this.parent.rowAutoHeight && !isVerticalScrollbarAvail && contentTable.offsetWidth > contentTable.clientWidth) {\n var appointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n appointments.forEach(function (ele) {\n ele.style.removeProperty('left');\n ele.style.removeProperty('right');\n });\n var appContainer = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));\n var conTable_1 = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n var tr_2 = [].slice.call(conTable_1.querySelectorAll('tbody tr'));\n appContainer.forEach(function (ele, index) {\n var appWrapper = [].slice.call(ele.children);\n var row = tr_2[parseInt(index.toString(), 10)];\n appWrapper.forEach(function (appWrap, cellIndex) {\n var td = row.querySelector(\"td:nth-child(\" + (cellIndex + 1) + \")\");\n var app = [].slice.call(appWrap.children);\n var width = td.getBoundingClientRect().width;\n var left = td.offsetLeft;\n if (_this.parent.enableRtl) {\n var right_1 = conTable_1.offsetWidth - left - td.offsetWidth;\n app.forEach(function (app) {\n app.style.width = Math.floor(parseInt(app.style.width, 10) / width) * width + 'px';\n app.style.right = right_1 + 'px';\n });\n }\n else {\n app.forEach(function (app) {\n app.style.width = Math.floor(parseInt(app.style.width, 10) / width) * width + 'px';\n app.style.left = left + 'px';\n });\n }\n });\n });\n }\n };\n YearEvent.prototype.renderResourceEvent = function (wrapper, resource, month, index, monthStart) {\n var eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(eventWrapper);\n var monthEnd = util.addDays(util.lastDateOfMonth(new Date(monthStart.getTime())), 1);\n var eventDatas = this.parent.eventBase.filterEvents(monthStart, monthEnd, undefined, resource);\n var rowIndex = this.parent.activeViewOptions.orientation === 'Vertical' ? index : month;\n var td = this.parent.element.querySelector(\".e-content-wrap tr:nth-child(\" + (rowIndex + 1) + \") td\");\n this.cellHeight = td.offsetHeight;\n this.groupOrder = resource.groupOrder;\n var isSpannedCollection = [];\n var _loop_2 = function (a) {\n var data = eventDatas[parseInt(a.toString(), 10)];\n var overlapIndex = void 0;\n var eventData = extend({}, data, null, true);\n if (this_2.parent.activeViewOptions.group.resources.length > 0) {\n var eventObj = this_2.isSpannedEvent(eventData, monthStart);\n overlapIndex = this_2.getIndex(eventObj[this_2.fields.startTime]);\n eventData.Index = overlapIndex;\n }\n else {\n overlapIndex = this_2.getIndex(eventData[this_2.fields.startTime]);\n eventData.Index = overlapIndex;\n }\n var availedHeight = this_2.cellHeader + (this_2.eventHeight * (a + 1)) + EVENT_GAP + this_2.moreIndicatorHeight;\n var leftValue = (this_2.parent.activeViewOptions.orientation === 'Vertical') ?\n month * this_2.cellWidth : index * this_2.cellWidth;\n if (!this_2.parent.isMinMaxDate(eventData[this_2.fields.startTime])) {\n return { value: void 0 };\n }\n if (this_2.parent.activeViewOptions.orientation === 'Vertical' && this_2.parent.activeViewOptions.group.resources.length > 0) {\n var isRendered = this_2.renderedEvents.filter(function (eventObj) {\n return eventObj.Guid === eventData.Guid;\n });\n var isSpanned = isSpannedCollection.filter(function (eventObj) {\n return eventObj.Guid === eventData.Guid;\n });\n if (isRendered.length > 0 || isSpanned.length > 0) {\n return \"continue\";\n }\n }\n if (this_2.parent.rowAutoHeight || this_2.cellHeight > availedHeight) {\n this_2.renderEvent(eventWrapper, eventData, month, leftValue, leftValue, monthStart, index);\n this_2.updateCellHeight(td, availedHeight);\n isSpannedCollection.push(eventData);\n }\n else {\n var moreIndex = this_2.parent.activeViewOptions.orientation === 'Horizontal' ? month : index;\n this_2.renderMoreIndicator(eventWrapper, eventDatas.length - a, monthStart, moreIndex, leftValue, leftValue, index);\n if (this_2.parent.activeViewOptions.orientation === 'Horizontal') {\n for (var i = index; i < eventDatas.length; i++) {\n this_2.renderedEvents.push(extend({}, eventDatas[parseInt(i.toString(), 10)], { Index: overlapIndex + i }, true));\n }\n }\n return \"break\";\n }\n };\n var this_2 = this;\n for (var a = 0; a < eventDatas.length; a++) {\n var state_1 = _loop_2(a);\n if (typeof state_1 === \"object\")\n return state_1.value;\n if (state_1 === \"break\")\n break;\n }\n };\n // eslint-disable-next-line max-len\n YearEvent.prototype.renderEvent = function (wrapper, eventData, row, left, right, monthDate, rowIndex) {\n var _this = this;\n var eventObj = this.isSpannedEvent(eventData, monthDate);\n var wrap = this.createEventElement(eventObj);\n var width;\n var index;\n if (eventObj.isSpanned.count === 1) {\n var endTime = util.addDays(eventObj[this.fields.endTime], -1);\n eventObj[this.fields.endTime] = (endTime > eventObj[this.fields.startTime]) ? endTime : eventObj[this.fields.endTime];\n }\n if (eventObj[this.fields.startTime] > eventObj[this.fields.endTime]) {\n return;\n }\n if (this.parent.activeViewOptions.orientation === 'Horizontal') {\n index = row + 1;\n if (eventObj[this.fields.startTime].getTime() === eventObj[this.fields.endTime].getTime()) {\n eventObj.isSpanned.count = 1;\n }\n width = eventObj.isSpanned.count * this.cellWidth;\n }\n else {\n index = rowIndex + 1;\n width = this.isResource ? eventObj.isSpanned.count * this.cellWidth : this.cellWidth;\n }\n var rowTd = this.parent.element.querySelector(\".e-content-wrap tr:nth-child(\" + index + \") td\");\n var top = rowTd.offsetTop + this.cellHeader + (this.eventHeight * eventObj.Index) + EVENT_GAP;\n setStyleAttribute(wrap, {\n 'width': width + 'px', 'height': this.eventHeight + 'px', 'left': left + 'px', 'right': right + 'px', 'top': top + 'px'\n });\n if (!this.isResource && this.parent.rowAutoHeight && this.parent.activeViewOptions.orientation === 'Vertical') {\n wrap.setAttribute('data-index', eventObj.Index.toString());\n }\n var args = { data: eventObj, element: wrap, cancel: false, type: 'event' };\n this.parent.trigger(events.eventRendered, args, function (eventArgs) {\n if (!eventArgs.cancel) {\n wrapper.appendChild(wrap);\n _this.wireAppointmentEvents(wrap, eventObj);\n if (_this.parent.activeViewOptions.group.resources.length > 0) {\n _this.renderedEvents.push(extend({}, eventObj, null, true));\n }\n else if (_this.parent.activeViewOptions.orientation === 'Vertical') {\n _this.renderedEvents.push(extend({}, eventObj, null, true));\n }\n else if ((eventObj.isSpanned.isRight || eventObj.isSpanned.isLeft) && _this.parent.activeViewOptions.orientation === 'Horizontal'\n || !eventObj.isSpanned.isRight) {\n _this.renderedEvents.push(extend({}, eventObj, null, true));\n }\n }\n });\n };\n // eslint-disable-next-line max-len\n YearEvent.prototype.renderMoreIndicator = function (wrapper, count, startDate, row, left, right, index) {\n if (this.parent.activeViewOptions.group.resources.length === 0 && wrapper.querySelector('[data-start-date=\"' + startDate.getTime() + '\"]')) {\n return;\n }\n var endDate;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n endDate = util.addDays(util.lastDateOfMonth(new Date(startDate.getTime())), 1);\n }\n else {\n endDate = util.addDays(new Date(startDate.getTime()), 1);\n }\n var moreIndicator = this.getMoreIndicatorElement(count, startDate, endDate);\n var rowTr = this.parent.element.querySelector(\".e-content-wrap tr:nth-child(\" + (row + 1) + \")\");\n var top = rowTr.offsetTop + (this.cellHeight - this.moreIndicatorHeight);\n left = (Math.floor(left / this.cellWidth) * this.cellWidth);\n right = (Math.floor(right / this.cellWidth) * this.cellWidth);\n setStyleAttribute(moreIndicator, { 'width': this.cellWidth + 'px', 'left': left + 'px', 'right': right + 'px', 'top': top + 'px' });\n if (!isNullOrUndefined(index)) {\n moreIndicator.setAttribute('data-group-index', index.toString());\n }\n wrapper.appendChild(moreIndicator);\n EventHandler.add(moreIndicator, 'click', this.moreIndicatorClick, this);\n };\n YearEvent.prototype.createEventElement = function (record) {\n var eventSubject = (record[this.fields.subject] || this.parent.eventSettings.fields.subject.default\n || this.parent.localeObj.getConstant('addTitle'));\n var eventWrapper = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-id': 'Appointment_' + record[this.fields.id],\n 'data-guid': record.Guid,\n 'role': 'button', 'tabindex': '0',\n 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),\n 'aria-label': this.parent.getAnnouncementString(record)\n }\n });\n if (this.cssClass) {\n addClass([eventWrapper], this.cssClass);\n }\n if (record[this.fields.isReadonly]) {\n addClass([eventWrapper], cls.READ_ONLY);\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resIndex = this.getGroupIndexFromEvent(record);\n eventWrapper.setAttribute('data-group-index', resIndex.toString());\n }\n var templateElement = [];\n var eventObj = extend({}, record, null, true);\n if (this.parent.activeViewOptions.eventTemplate) {\n var templateId = this.parent.element.id + '_' + this.parent.activeViewOptions.eventTemplateName + 'eventTemplate';\n templateElement = this.parent.getAppointmentTemplate()(eventObj, this.parent, 'eventTemplate', templateId, false);\n }\n else {\n var locationEle = (record[this.fields.location] || this.parent.eventSettings.fields.location.default || '');\n var subjectEle = createElement('div', {\n className: cls.SUBJECT_CLASS,\n innerHTML: (eventSubject + (locationEle ? '; ' + locationEle : ''))\n });\n var startTimeEle = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventObj[this.fields.startTime])\n });\n var endTimeEle = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventObj[this.fields.endTime])\n });\n addClass([subjectEle], 'e-text-center');\n if (record[this.fields.isAllDay]) {\n templateElement = [subjectEle];\n }\n else if (!eventObj.isLeft && !eventObj.isRight) {\n templateElement = [startTimeEle, subjectEle, endTimeEle];\n }\n else {\n if (!eventObj.isLeft) {\n templateElement.push(startTimeEle);\n }\n templateElement.push(subjectEle);\n if (!eventObj.isRight) {\n templateElement.push(endTimeEle);\n }\n }\n }\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n append(templateElement, appointmentDetails);\n eventWrapper.appendChild(appointmentDetails);\n this.parent.eventBase.renderSpannedIcon(eventWrapper, record.isSpanned);\n this.renderResizeHandler(eventWrapper, record.data, record[this.fields.isReadonly]);\n this.applyResourceColor(eventWrapper, eventObj, 'backgroundColor', this.groupOrder);\n return eventWrapper;\n };\n YearEvent.prototype.isSpannedEvent = function (eventObj, monthDate) {\n var monthStart = new Date(monthDate.getFullYear(), monthDate.getMonth(), 1);\n var monthEnd = util.addDays(new Date(monthDate.getFullYear(), monthDate.getMonth() + 1, 0), 1);\n var eventData = extend({}, eventObj, null, true);\n var eventStart = eventData[this.fields.startTime];\n var eventEnd = eventData[this.fields.endTime];\n var isSpanned = { isLeft: false, isRight: false, count: 1 };\n var yearStart = new Date(this.parent.selectedDate.getFullYear(), this.parent.firstMonthOfYear, 1);\n var yearEnd = util.addMonths(yearStart, this.parent.monthsCount);\n if (this.isResource) {\n this.updateSpannedEvents(eventObj, monthStart, monthEnd);\n }\n if (this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length > 0) {\n this.updateSpannedEventDetails(eventStart, eventEnd, yearStart, yearEnd, eventData, isSpanned);\n var originalStartTime = eventData[this.fields.startTime];\n var originalEndTime = new Date(eventData[this.fields.endTime] - 1);\n isSpanned.count = (originalEndTime.getMonth() - originalStartTime.getMonth()) +\n (this.parent.monthsCount * (originalEndTime.getFullYear() - originalStartTime.getFullYear())) + 1;\n }\n else {\n this.updateSpannedEventDetails(eventStart, eventEnd, monthStart, monthEnd, eventData, isSpanned);\n if (this.parent.activeViewOptions.group.resources.length === 0 || this.parent.uiStateValues.isGroupAdaptive) {\n var end = util.resetTime(eventData[this.fields.endTime]).getTime();\n var start = util.resetTime(eventData[this.fields.startTime]).getTime();\n if (eventObj[this.fields.isAllDay] && end === eventObj[this.fields.endTime].getTime() || isSpanned.isRight) {\n end = util.addDays(new Date(end), -1).getTime();\n }\n isSpanned.count = Math.ceil((end - start) / util.MS_PER_DAY) + 1;\n }\n }\n eventData.isSpanned = isSpanned;\n if (util.resetTime(eventStart).getTime() < util.resetTime(this.parent.minDate).getTime()) {\n eventData[this.fields.startTime] = this.parent.minDate;\n }\n if (util.resetTime(eventEnd).getTime() > util.resetTime(this.parent.maxDate).getTime()) {\n eventData[this.fields.endTime] = this.parent.maxDate;\n }\n return eventData;\n };\n YearEvent.prototype.updateSpannedEventDetails = function (eventStart, eventEnd, viewStart, viewEnd, eventObj, isSpanned) {\n if (eventStart.getTime() < viewStart.getTime()) {\n eventObj[this.fields.startTime] = viewStart;\n isSpanned.isLeft = true;\n }\n if (eventEnd.getTime() > viewEnd.getTime()) {\n eventObj[this.fields.endTime] = viewEnd;\n isSpanned.isRight = true;\n }\n };\n YearEvent.prototype.getOverlapEvents = function (date, appointments) {\n var appointmentsList = [];\n var dateStart;\n var dateEnd;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var monthStart = this.parent.calendarUtil.getMonthStartDate(new Date(date.getTime()));\n var monthEnd = util.addDays(this.parent.calendarUtil.getMonthEndDate(new Date(date.getTime())), -1);\n dateStart = util.resetTime(new Date(monthStart.getTime())).getTime();\n dateEnd = util.resetTime(new Date(monthEnd.getTime())).getTime();\n }\n else {\n if (this.parent.rowAutoHeight) {\n dateStart = util.resetTime(new Date(date.getTime())).getTime();\n dateEnd = util.addDays(util.resetTime(new Date(date.getTime())), 1).getTime();\n }\n else {\n dateStart = dateEnd = util.resetTime(new Date(date.getTime())).getTime();\n }\n }\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n var appStart = new Date(app[this.fields.startTime].getTime());\n var appEnd = new Date(app[this.fields.endTime].getTime());\n var timeCondition = app[this.fields.isAllDay] ? util.resetTime(appEnd).getTime() > dateStart :\n util.resetTime(appEnd).getTime() >= dateStart;\n if (((util.resetTime(appStart).getTime() <= dateStart) && (timeCondition)) ||\n (util.resetTime(appStart).getTime() >= dateStart) && (util.resetTime(appEnd).getTime() <= dateEnd)) {\n appointmentsList.push(app);\n }\n }\n return appointmentsList;\n };\n YearEvent.prototype.getMonths = function () {\n var _this = this;\n // eslint-disable-next-line prefer-spread\n return Array.apply(null, { length: this.parent.monthsCount }).map(function (value, index) {\n return _this.parent.firstMonthOfYear + index;\n });\n };\n YearEvent.prototype.removeCellHeight = function () {\n var elementSelector = \".\" + cls.MONTH_HEADER_WRAPPER + \" tbody tr,.\" + cls.RESOURCE_COLUMN_TABLE_CLASS + \" tbody tr,.\" + cls.CONTENT_TABLE_CLASS + \" tbody tr\";\n var rows = [].slice.call(this.element.querySelectorAll(elementSelector));\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n row.firstElementChild.style.height = '';\n }\n };\n YearEvent.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.parent = null;\n };\n return YearEvent;\n}(TimelineEvent));\nexport { YearEvent };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createElement, closest, Draggable, extend, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, remove, removeClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { ActionBase } from '../actions/action-base';\nimport { MonthEvent } from '../event-renderer/month';\nimport { TimelineEvent } from '../event-renderer/timeline-view';\nimport { YearEvent } from '../event-renderer/year';\nimport { VerticalEvent } from '../event-renderer/vertical-view';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar MINUTES_PER_DAY = 1440;\n/**\n * Schedule events drag actions\n */\nvar DragAndDrop = /** @class */ (function (_super) {\n __extends(DragAndDrop, _super);\n function DragAndDrop() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.widthUptoCursorPoint = 0;\n _this.heightUptoCursorPoint = 0;\n _this.cursorPointIndex = 0;\n _this.isHeaderRows = false;\n _this.isTimelineDayProcess = false;\n _this.widthPerMinute = 0;\n _this.heightPerMinute = 0;\n _this.minDiff = 0;\n _this.isStepDragging = false;\n _this.isMorePopupOpened = false;\n _this.isAllDayDrag = false;\n _this.isMultiSelect = false;\n _this.multiData = [];\n _this.updatedData = [];\n _this.swagData = [];\n _this.startTime = 0;\n _this.isAllDayTarget = false;\n _this.targetTd = null;\n _this.isCursorAhead = false;\n return _this;\n }\n DragAndDrop.prototype.wireDragEvent = function (element) {\n new Draggable(element, {\n abort: '.' + cls.EVENT_RESIZE_CLASS,\n clone: true,\n isDragScroll: true,\n enableTapHold: this.parent.isAdaptive,\n enableTailMode: (this.parent.eventDragArea) ? true : false,\n cursorAt: (this.parent.eventDragArea) ? { left: -20, top: -20 } : { left: 0, top: 0 },\n dragArea: this.dragArea,\n dragStart: this.dragStart.bind(this),\n drag: this.drag.bind(this),\n dragStop: this.dragStop.bind(this),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this),\n queryPositionInfo: this.dragPosition.bind(this)\n });\n };\n DragAndDrop.prototype.setDragArea = function () {\n var dragElement = document.querySelector(this.parent.eventDragArea);\n this.dragArea = this.parent.eventDragArea && dragElement ? dragElement :\n this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n };\n DragAndDrop.prototype.dragHelper = function (e) {\n var _this = this;\n this.setDragActionDefaultValues();\n this.actionObj.element = e.element;\n this.actionObj.action = 'drag';\n var elements = [];\n if (!this.parent.allowMultiDrag || isNullOrUndefined(this.parent.selectedElements) || this.parent.selectedElements.length === 0 ||\n (this.parent.selectedElements.length > 0 && this.parent.selectedElements.indexOf(this.actionObj.element) === -1)) {\n elements = [e.element];\n }\n else {\n elements = this.parent.selectedElements;\n this.isMultiSelect = true;\n }\n elements.forEach(function (ele) {\n var cloneElement = _this.createCloneElement(ele);\n if (ele.getAttribute('data-guid') === _this.actionObj.element.getAttribute('data-guid')) {\n _this.actionObj.clone = cloneElement;\n if (!_this.parent.eventDragArea && _this.parent.currentView !== 'Month' &&\n _this.parent.activeViewOptions.timeScale.enable && !_this.parent.activeView.isTimelineView() &&\n !_this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n setStyleAttribute(_this.actionObj.clone, { cursor: 'move', left: '0%', right: '0%', width: '100%' });\n }\n _this.actionObj.clone.style.top = formatUnit(_this.actionObj.element.offsetTop);\n }\n _this.actionObj.cloneElement.push(cloneElement);\n _this.actionObj.originalElement.push(ele);\n });\n return this.actionObj.clone;\n };\n DragAndDrop.prototype.dragPosition = function (e) {\n if (this.parent.eventDragArea) {\n return { left: e.left, top: e.top };\n }\n var cellHeight = (this.actionObj.cellHeight / this.actionObj.slotInterval) * this.actionObj.interval;\n var leftValue = formatUnit(0);\n if (this.parent.currentView === 'Month') {\n leftValue = e.left;\n }\n var cloneRight;\n if (this.isStepDragging) {\n cloneRight = Math.ceil(this.actionObj.clone.getBoundingClientRect().right) + this.actionObj.interval;\n }\n else {\n cloneRight = this.actionObj.clone.getBoundingClientRect().right;\n }\n var dragArea = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var contentWrapRight = dragArea.getBoundingClientRect().right;\n if (this.parent.activeView.isTimelineView() && this.parent.currentView !== 'TimelineYear' && !this.parent.enableRtl &&\n this.actionObj.pageX > cloneRight && !this.isMorePopupOpened && !(this.actionObj.pageX > contentWrapRight)) {\n this.isCursorAhead = true;\n }\n if (this.parent.activeView.isTimelineView()) {\n leftValue = formatUnit(this.actionObj.clone.offsetLeft);\n }\n var topValue;\n if ((this.parent.activeView.isTimelineView() || !this.parent.timeScale.enable ||\n (!isNullOrUndefined(this.actionObj.clone.offsetParent) &&\n this.actionObj.clone.offsetParent.classList.contains(cls.MORE_EVENT_POPUP_CLASS)))) {\n topValue = formatUnit(this.actionObj.clone.offsetTop);\n }\n else if (this.parent.currentView === 'Month') {\n topValue = formatUnit(0);\n }\n else if (this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n topValue = formatUnit(this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).offsetTop);\n setStyleAttribute(this.actionObj.clone, {\n width: formatUnit(Math.ceil(this.actionObj.clone.offsetWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth),\n right: this.parent.enableRtl && formatUnit(0)\n });\n }\n else {\n if (this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) &&\n !this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n setStyleAttribute(this.actionObj.clone, {\n height: formatUnit(this.actionObj.cellHeight),\n width: formatUnit(this.actionObj.cellWidth - 1),\n pointerEvents: 'none'\n });\n }\n var top_1 = parseInt(e.top, 10);\n top_1 = top_1 < 0 ? 0 : top_1;\n topValue = formatUnit(Math.ceil(top_1 / cellHeight) * cellHeight);\n var scrollHeight = this.parent.element.querySelector('.e-content-wrap').scrollHeight;\n var cloneBottom = parseInt(topValue, 10) + this.actionObj.clone.offsetHeight;\n if (cloneBottom > scrollHeight) {\n topValue = (parseInt(topValue, 10) - (cloneBottom - scrollHeight)) + 'px';\n }\n }\n return { left: leftValue, top: topValue };\n };\n DragAndDrop.prototype.setDragActionDefaultValues = function () {\n this.actionObj.action = 'drag';\n this.actionObj.isAllDay = null;\n this.actionObj.slotInterval = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n this.actionObj.interval = this.actionObj.slotInterval;\n var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);\n this.actionObj.cellWidth = workCell.offsetWidth;\n this.actionObj.cellHeight = workCell.offsetHeight;\n };\n DragAndDrop.prototype.dragStart = function (e) {\n var _this = this;\n var eventGuid = this.actionObj.element.getAttribute('data-guid');\n this.actionObj.event = this.parent.eventBase.getEventByGuid(eventGuid);\n var eventObj = extend({}, this.actionObj.event, null, true);\n if (!isNullOrUndefined(eventObj)) {\n this.startTime = eventObj[this.parent.eventFields.startTime].getTime();\n }\n var dragArgs = {\n cancel: false,\n data: eventObj,\n selectedData: this.getSelectedData(),\n event: e,\n excludeSelectors: null,\n element: this.actionObj.element,\n interval: this.actionObj.interval,\n navigation: { enable: false, timeDelay: 2000 },\n scroll: { enable: true, scrollBy: 30, timeDelay: 100 }\n };\n this.parent.trigger(events.dragStart, dragArgs, function (dragEventArgs) {\n if (dragEventArgs.cancel || (!isNullOrUndefined(_this.actionObj.element) &&\n isNullOrUndefined(_this.actionObj.element.parentElement))) {\n var dragObj = _this.actionObj.element.ej2_instances[0];\n if (!isNullOrUndefined(dragObj)) {\n dragObj.intDestroy(e.event);\n }\n _this.actionObj.action = '';\n _this.removeCloneElementClasses();\n _this.removeCloneElement();\n return;\n }\n _this.actionClass('addClass');\n _this.parent.uiStateValues.action = true;\n _this.actionObj.start = eventObj[_this.parent.eventFields.startTime];\n _this.actionObj.end = eventObj[_this.parent.eventFields.endTime];\n _this.actionObj.groupIndex = parseInt(_this.actionObj.element.getAttribute('data-group-index') || '0', 10);\n _this.actionObj.interval = dragEventArgs.interval;\n _this.actionObj.navigation = dragEventArgs.navigation;\n _this.actionObj.scroll = dragEventArgs.scroll;\n _this.actionObj.excludeSelectors = dragEventArgs.excludeSelectors;\n var viewElement = _this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n _this.scrollArgs = { element: viewElement, width: viewElement.scrollWidth, height: viewElement.scrollHeight };\n _this.widthPerMinute = (_this.actionObj.cellWidth / _this.actionObj.slotInterval) * _this.actionObj.interval;\n _this.heightPerMinute = (_this.actionObj.cellHeight / _this.actionObj.slotInterval) * _this.actionObj.interval;\n _this.widthUptoCursorPoint = 0;\n _this.heightUptoCursorPoint = 0;\n _this.cursorPointIndex = -1;\n _this.isHeaderRows = false;\n _this.isTimelineDayProcess = false;\n _this.minDiff = 0;\n _this.isMorePopupOpened = false;\n _this.daysVariation = -1;\n _this.isAllDayTarget = _this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS);\n if ((_this.parent.activeView.isTimelineView() || !_this.parent.timeScale.enable) && _this.parent.currentView !== 'TimelineYear') {\n if (!isNullOrUndefined(_this.actionObj.clone.offsetParent) &&\n _this.actionObj.clone.offsetParent.classList.contains(cls.MORE_EVENT_POPUP_CLASS)) {\n _this.isMorePopupOpened = true;\n }\n _this.actionObj.pageX = e.event.pageX;\n var rows = _this.parent.activeViewOptions.headerRows;\n _this.isHeaderRows = rows.length > 0 && rows[rows.length - 1].option !== 'Hour' &&\n rows[rows.length - 1].option !== 'Date';\n _this.isTimelineDayProcess = !_this.parent.activeViewOptions.timeScale.enable || _this.isHeaderRows ||\n _this.parent.currentView === 'TimelineMonth' || (rows.length > 0 && rows[rows.length - 1].option === 'Date');\n _this.isStepDragging = !_this.isTimelineDayProcess && (_this.actionObj.slotInterval !== _this.actionObj.interval);\n if (_this.isTimelineDayProcess) {\n _this.timelineEventModule = new TimelineEvent(_this.parent, 'day');\n }\n else {\n _this.timelineEventModule = new TimelineEvent(_this.parent, 'hour');\n }\n }\n if (_this.parent.currentView === 'TimelineYear') {\n _this.yearEvent = new YearEvent(_this.parent);\n }\n if (_this.parent.currentView === 'Month') {\n _this.startTime = util.resetTime(new Date(_this.startTime)).getTime();\n _this.updateOriginalElement(_this.actionObj.clone);\n _this.monthEvent = new MonthEvent(_this.parent);\n }\n if (_this.parent.currentView === 'Day' || _this.parent.currentView === 'Week' || _this.parent.currentView === 'WorkWeek') {\n _this.verticalEvent = new VerticalEvent(_this.parent);\n _this.verticalEvent.initializeValues();\n var splitEvents = _this.splitEvent(_this.actionObj.event);\n splitEvents.forEach(function (event) {\n var query = \".e-day-wrapper[data-date=\\\"\" + util.resetTime(event[_this.parent.eventFields.startTime]).getTime() + \"\\\"]\";\n if (_this.parent.activeViewOptions.group.resources.length > 0) {\n query = query.concat('[data-group-index = \"' + _this.actionObj.groupIndex + '\"]');\n }\n var appWrap = _this.parent.element.querySelector(query);\n if (appWrap) {\n var appEle = appWrap.querySelector('[data-id=\"' + _this.actionObj.clone.getAttribute('data-id') + '\"]');\n if (appEle) {\n addClass([appEle], cls.EVENT_ACTION_CLASS);\n }\n }\n });\n }\n });\n };\n DragAndDrop.prototype.getSelectedData = function () {\n if (this.isMultiSelect && this.multiData.length === 0 && this.parent.selectedElements.length > 0) {\n for (var _i = 0, _a = this.parent.selectedElements; _i < _a.length; _i++) {\n var element = _a[_i];\n var eventGuid = element.getAttribute('data-guid');\n var data = this.parent.eventBase.getEventByGuid(eventGuid);\n this.multiData.push(extend({}, data, null, true));\n }\n }\n return this.multiData;\n };\n DragAndDrop.prototype.drag = function (e) {\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide(true);\n }\n if ((!isNullOrUndefined(e.target)) && e.target.classList.contains(cls.DISABLE_DATES)) {\n return;\n }\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventArgs = this.parent.eventBase.getPageCoordinates(e);\n this.actionObj.Y = this.actionObj.pageY = eventArgs.pageY;\n this.actionObj.X = this.actionObj.pageX = eventArgs.pageX;\n this.actionObj.target = e.target;\n this.widthUptoCursorPoint = (this.widthUptoCursorPoint === 0) ?\n Math.ceil((Math.abs(this.actionObj.clone.getBoundingClientRect().left - this.actionObj.X) / this.widthPerMinute)) *\n this.widthPerMinute : this.widthUptoCursorPoint;\n this.widthUptoCursorPoint = this.isMorePopupOpened ? this.actionObj.cellWidth : this.widthUptoCursorPoint;\n this.heightUptoCursorPoint = (this.heightUptoCursorPoint === 0) ?\n Math.ceil((Math.abs(this.actionObj.clone.getBoundingClientRect().top - this.actionObj.Y) / this.heightPerMinute)) *\n this.heightPerMinute : this.heightUptoCursorPoint;\n this.isAllDayDrag = (this.parent.activeViewOptions.timeScale.enable) ?\n this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) :\n this.actionObj.event[this.parent.eventFields.isAllDay];\n if (this.isStepDragging && this.minDiff === 0) {\n this.calculateMinutesDiff(eventObj);\n }\n if ((this.parent.currentView === 'Month' || this.isAllDayDrag) && this.daysVariation < 0) {\n var date = this.parent.getDateFromElement(this.actionObj.target);\n if (!isNullOrUndefined(date)) {\n var currentDate = util.resetTime(date);\n var startDate = util.resetTime(new Date(eventObj[this.parent.eventFields.startTime].getTime()));\n this.daysVariation = (currentDate.getTime() - startDate.getTime()) / util.MS_PER_DAY;\n }\n else {\n this.daysVariation = 0;\n }\n }\n else {\n this.daysVariation = 0;\n }\n if (this.parent.eventDragArea) {\n var targetElement = eventArgs.target;\n this.actionObj.clone.style.top = formatUnit(targetElement.offsetTop);\n this.actionObj.clone.style.left = formatUnit(targetElement.offsetLeft);\n var currentTarget = closest(targetElement, '.' + cls.ROOT);\n if (!currentTarget) {\n this.actionObj.clone.style.height = '';\n this.actionObj.clone.style.width = '';\n }\n else {\n if (!(this.parent.currentView === 'Week' || this.parent.currentView === 'WorkWeek' || this.parent.currentView === 'Day')) {\n this.actionObj.clone.style.width = formatUnit(this.actionObj.element.offsetWidth);\n }\n }\n }\n this.updateScrollPosition(e);\n this.updateNavigatingPosition(e);\n this.updateDraggingDateTime(e);\n var dragArgs = {\n data: eventObj, event: e, element: this.actionObj.element, startTime: this.actionObj.start,\n endTime: this.actionObj.end, selectedData: this.updatedData\n };\n if (this.parent.group.resources.length > 0) {\n dragArgs.groupIndex = this.actionObj.groupIndex;\n }\n this.parent.trigger(events.drag, dragArgs);\n };\n DragAndDrop.prototype.calculateMinutesDiff = function (eventObj) {\n if (this.parent.enableRtl) {\n this.minDiff =\n ((this.actionObj.clone.offsetWidth - this.widthUptoCursorPoint) / this.widthPerMinute) * this.actionObj.interval;\n }\n else {\n this.minDiff = (this.widthUptoCursorPoint / this.widthPerMinute) * this.actionObj.interval;\n }\n var startDate = eventObj[this.parent.eventFields.startTime];\n var startTime = this.parent.activeView.renderDates[0];\n var startEndHours = util.getStartEndHours(startTime, this.parent.activeView.getStartHour(), this.parent.activeView.getEndHour());\n if (startEndHours.startHour.getTime() > startDate.getTime()) {\n this.minDiff = this.minDiff + ((startEndHours.startHour.getTime() - startDate.getTime()) / util.MS_PER_MINUTE);\n }\n };\n DragAndDrop.prototype.dragStop = function (e) {\n var _this = this;\n this.isCursorAhead = false;\n this.removeCloneElementClasses();\n this.removeCloneElement();\n clearInterval(this.actionObj.navigationInterval);\n this.actionObj.navigationInterval = null;\n clearInterval(this.actionObj.scrollInterval);\n this.actionObj.scrollInterval = null;\n this.actionClass('removeClass');\n this.parent.uiStateValues.action = false;\n if (this.isAllowDrop(e)) {\n return;\n }\n var target = ((!e.target.classList.contains('e-work-cells') && this.parent.cellTemplate) ?\n closest(e.target, '.e-work-cells') : e.target);\n var dragArgs = {\n cancel: false, data: this.getChangedData(this.updatedData), selectedData: this.updatedData,\n event: e, element: this.actionObj.element, target: target\n };\n this.actionObj.action = null;\n this.parent.trigger(events.dragStop, dragArgs, function (dragEventArgs) {\n if (dragEventArgs.cancel) {\n return;\n }\n if (_this.parent.isSpecificResourceEvents()) {\n _this.parent.crudModule.crudObj.isCrudAction = true;\n _this.parent.crudModule.crudObj.sourceEvent =\n [_this.parent.resourceBase.lastResourceLevel[parseInt(dragArgs.element.getAttribute('data-group-index'), 10)]];\n var currentGroupIndex = parseInt(dragArgs.target.getAttribute('data-group-index'), 10) || _this.actionObj.groupIndex;\n _this.parent.crudModule.crudObj.targetEvent =\n [_this.parent.resourceBase.lastResourceLevel[parseInt(currentGroupIndex.toString(), 10)]];\n }\n _this.saveChangedData(dragEventArgs, _this.isMultiSelect);\n });\n this.updatedData = [];\n this.multiData = [];\n this.isMultiSelect = false;\n this.parent.selectedElements = [];\n };\n DragAndDrop.prototype.updateNavigatingPosition = function (e) {\n var _this = this;\n if (this.actionObj.navigation.enable) {\n var currentDate_1 = this.parent.getCurrentTime();\n if (isNullOrUndefined(this.actionObj.navigationInterval)) {\n this.actionObj.navigationInterval = window.setInterval(function () {\n if (currentDate_1) {\n var crtDate = _this.parent.getCurrentTime();\n var end = crtDate.getSeconds();\n var start = currentDate_1.getSeconds() + (_this.actionObj.navigation.timeDelay / 1000);\n start = (start >= 60) ? start - 60 : start;\n if (start === end) {\n currentDate_1 = _this.parent.getCurrentTime();\n _this.viewNavigation(e);\n _this.updateDraggingDateTime(e);\n }\n }\n }, this.actionObj.navigation.timeDelay);\n }\n }\n };\n DragAndDrop.prototype.updateDraggingDateTime = function (e) {\n if (!isNullOrUndefined(this.actionObj.clone.offsetParent) &&\n this.actionObj.clone.offsetParent.classList.contains(cls.MORE_EVENT_POPUP_CLASS)) {\n this.morePopupEventDragging(e);\n }\n else if (this.parent.activeView.isTimelineView() && this.parent.currentView !== 'TimelineYear') {\n this.timelineEventModule.dateRender = this.parent.activeView.renderDates;\n this.timelineEventModule.cellWidth = this.actionObj.cellWidth;\n this.timelineEventModule.getSlotDates();\n this.actionObj.cellWidth = this.isHeaderRows ? this.timelineEventModule.cellWidth :\n this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS).getBoundingClientRect().width;\n this.calculateTimelineTime(e);\n }\n else {\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'TimelineYear') {\n this.calculateVerticalDate(e);\n }\n else {\n this.calculateVerticalTime(e);\n }\n }\n };\n DragAndDrop.prototype.navigationWrapper = function () {\n if (!this.parent.activeView.isTimelineView()) {\n if (this.parent.currentView === 'Month' || !this.parent.timeScale.enable) {\n var outerWrapperCls = [].slice.call(this.parent.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n this.actionObj.index = (this.parent.activeView.renderDates.length < this.actionObj.index) ?\n this.parent.activeView.renderDates.length - 1 : this.actionObj.index;\n var targetWrapper = outerWrapperCls[this.actionObj.index].querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!targetWrapper) {\n targetWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n outerWrapperCls[this.actionObj.index].appendChild(targetWrapper);\n }\n targetWrapper.appendChild(this.actionObj.clone);\n }\n else {\n var wrapperClass = this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) ?\n '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : '.' + cls.APPOINTMENT_WRAPPER_CLASS;\n this.parent.element.querySelectorAll(wrapperClass)\n .item(this.actionObj.index).appendChild(this.actionObj.clone);\n if (wrapperClass === '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS) {\n var elementHeight = this.getAllDayEventHeight();\n var event_2 = [].slice.call(this.parent.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS + ':first-child'));\n if (event_2[0].offsetHeight < elementHeight) {\n for (var _i = 0, event_1 = event_2; _i < event_1.length; _i++) {\n var e = event_1[_i];\n e.style.height = ((elementHeight + 2) / 12) + 'em';\n }\n }\n this.actionObj.clone.style.height = formatUnit(elementHeight);\n }\n this.actionObj.height = parseInt(this.actionObj.clone.style.height, 10);\n }\n }\n else {\n var outWrapper = void 0;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n outWrapper = this.parent.element.querySelectorAll('.e-appointment-container:not(.e-hidden)').item(this.actionObj.index);\n }\n else {\n outWrapper = this.parent.element.querySelector('.' + cls.APPOINTMENT_CONTAINER_CLASS);\n }\n if (!isNullOrUndefined(outWrapper)) {\n var tarWrapper_1 = outWrapper.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!tarWrapper_1) {\n tarWrapper_1 = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n outWrapper.appendChild(tarWrapper_1);\n }\n this.actionObj.cloneElement.forEach(function (ele) {\n tarWrapper_1.appendChild(ele);\n });\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DragAndDrop.prototype.viewNavigation = function (e) {\n var navigationType;\n var dragArea = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (dragArea && ((!this.scrollEdges.top && !this.scrollEdges.bottom) ||\n closest(this.actionObj.clone, '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS))) {\n if ((dragArea.scrollLeft === 0) &&\n (Math.round(this.actionObj.X) <=\n Math.round(dragArea.getBoundingClientRect().left + this.actionObj.cellWidth + window.pageXOffset))) {\n navigationType = this.parent.enableRtl ? 'next' : 'previous';\n }\n else if ((Math.round(dragArea.scrollLeft) + dragArea.clientWidth === dragArea.scrollWidth) &&\n (Math.round(this.actionObj.X) >=\n Math.round(dragArea.getBoundingClientRect().right - this.actionObj.cellWidth + window.pageXOffset))) {\n navigationType = this.parent.enableRtl ? 'previous' : 'next';\n }\n if (navigationType) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate(navigationType));\n }\n }\n };\n DragAndDrop.prototype.morePopupEventDragging = function (e) {\n if (isNullOrUndefined(e.target) || (e.target && isNullOrUndefined(closest(e.target, 'td')))) {\n return;\n }\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n var td = closest(e.target, 'td');\n if (this.parent.currentView === 'TimelineYear' && (!td.classList.contains(cls.WORK_CELLS_CLASS) || td.classList.contains(cls.OTHERMONTH_CLASS))) {\n return;\n }\n var dragStart = this.parent.getDateFromElement(td);\n var dragEnd = new Date(dragStart.getTime());\n dragEnd.setMilliseconds(eventDuration);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);\n }\n this.actionObj.start = new Date(dragStart.getTime());\n this.actionObj.end = new Date(dragEnd.getTime());\n this.actionObj.clone.style.top = formatUnit(td.offsetParent.offsetTop);\n this.actionObj.clone.style.left = formatUnit(td.offsetLeft);\n this.actionObj.clone.style.width = formatUnit(td.offsetWidth);\n var eventContainer = td;\n var eventWrapper;\n if (this.parent.activeView.isTimelineView()) {\n var rowIndex = closest(td, 'tr').rowIndex;\n eventContainer = this.parent.element.querySelectorAll('.e-appointment-container').item(rowIndex);\n }\n eventWrapper = eventContainer.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!eventWrapper) {\n eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n eventContainer.appendChild(eventWrapper);\n }\n this.appendCloneElement(eventWrapper);\n };\n DragAndDrop.prototype.calculateVerticalTime = function (e) {\n var _this = this;\n if (isNullOrUndefined(this.actionObj.target) ||\n (this.actionObj.target && isNullOrUndefined(closest(this.actionObj.target, 'tr'))) ||\n (!(closest(this.actionObj.target, 'td').classList.contains(cls.WORK_CELLS_CLASS)) &&\n !(closest(this.actionObj.target, 'td').classList.contains(cls.ALLDAY_CELLS_CLASS)))) {\n return;\n }\n if (this.parent.activeViewOptions.timeScale.enable) {\n this.swapDragging(e);\n }\n var dragArea = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventStart = eventObj[this.parent.eventFields.startTime];\n var eventEnd = eventObj[this.parent.eventFields.endTime];\n var eventDuration = util.getUniversalTime(eventEnd) - util.getUniversalTime(eventStart);\n var offsetTop = Math.floor(parseInt(this.actionObj.clone.style.top, 10) / this.actionObj.cellHeight)\n * this.actionObj.cellHeight;\n offsetTop = offsetTop < 0 ? 0 : offsetTop;\n if (this.scrollEdges.top || this.scrollEdges.bottom) {\n offsetTop = this.scrollEdges.top ? dragArea.scrollTop - this.heightUptoCursorPoint +\n this.actionObj.cellHeight + window.pageYOffset :\n (dragArea.scrollTop + dragArea.offsetHeight - this.actionObj.clone.offsetHeight + window.pageYOffset) +\n (this.actionObj.clone.offsetHeight - this.heightUptoCursorPoint);\n offsetTop = Math.round(offsetTop / this.actionObj.cellHeight) * this.actionObj.cellHeight;\n if (dragArea.scrollTop > 0) {\n this.actionObj.clone.style.top = formatUnit(offsetTop);\n }\n }\n var rowIndex = (this.parent.activeViewOptions.timeScale.enable) ? (offsetTop / this.actionObj.cellHeight) : 0;\n var heightPerMinute = this.actionObj.cellHeight / this.actionObj.slotInterval;\n var diffInMinutes = parseInt(this.actionObj.clone.style.top, 10) - offsetTop;\n var tr;\n if (this.isAllDayDrag) {\n tr = this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n }\n else {\n var trCollections = [].slice.call(this.parent.getContentTable().querySelectorAll('tr'));\n tr = trCollections[parseInt(rowIndex.toString(), 10)];\n }\n var index;\n if (closest(this.actionObj.target, 'td').classList.contains(cls.WORK_CELLS_CLASS) ||\n closest(this.actionObj.target, 'td').classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n index = closest(this.actionObj.target, 'td').cellIndex;\n }\n var colIndex = isNullOrUndefined(index) ? closest(this.actionObj.clone, 'td').cellIndex : index;\n this.actionObj.index = colIndex;\n if (isNullOrUndefined(tr)) {\n return;\n }\n var td = tr.children[parseInt(colIndex.toString(), 10)];\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);\n }\n var dragStart;\n var dragEnd;\n if (this.parent.activeViewOptions.timeScale.enable && !this.isAllDayDrag) {\n this.appendCloneElement(this.getEventWrapper(colIndex));\n dragStart = this.parent.getDateFromElement(td);\n dragStart.setMinutes(dragStart.getMinutes() + (diffInMinutes / heightPerMinute));\n dragEnd = new Date(dragStart.getTime());\n if (this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n dragEnd.setMinutes(dragEnd.getMinutes() + this.actionObj.slotInterval);\n }\n else {\n dragEnd.setMilliseconds(eventDuration);\n }\n }\n else {\n dragStart = this.parent.getDateFromElement(td);\n dragStart.setDate(dragStart.getDate() - this.daysVariation);\n dragStart.setHours(eventStart.getHours(), eventStart.getMinutes(), eventStart.getSeconds());\n dragEnd = new Date(dragStart.getTime());\n dragEnd.setMilliseconds(eventDuration);\n if (!this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) &&\n this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n dragEnd = util.addDays(util.resetTime(dragEnd), 1);\n }\n var index_1 = this.parent.activeViewOptions.group.byDate || (this.parent.virtualScrollModule &&\n !this.parent.activeViewOptions.timeScale.enable) ? colIndex : undefined;\n this.updateAllDayEvents(dragStart, dragEnd, index_1);\n }\n this.actionObj.start = new Date(+dragStart);\n this.actionObj.end = new Date(+dragEnd);\n var event = this.getUpdatedEvent(this.actionObj.start, this.actionObj.end, this.actionObj.event);\n var dynamicWrappers = [].slice.call(this.parent.element.querySelectorAll('.e-dynamic-clone'));\n for (var _i = 0, dynamicWrappers_1 = dynamicWrappers; _i < dynamicWrappers_1.length; _i++) {\n var wrapper = dynamicWrappers_1[_i];\n remove(wrapper);\n }\n if (this.multiData.length > 0) {\n if (this.isAllDayTarget && this.isAllDayDrag && !isNullOrUndefined(this.actionObj.isAllDay) && !this.actionObj.isAllDay) {\n var targetCellTime_1 = parseInt((closest(this.actionObj.target, 'td')).getAttribute('data-date'), 10);\n this.multiData.forEach(function (data) {\n _this.swagData.push(extend({}, data, null, true));\n if (data[_this.parent.eventFields.isAllDay]) {\n data[_this.parent.eventFields.startTime] =\n new Date(data[_this.parent.eventFields.startTime].getTime() + (targetCellTime_1 - _this.startTime));\n var startTime = new Date(data[_this.parent.eventFields.startTime]);\n var endTime = new Date(startTime.setMinutes(startTime.getMinutes() + _this.actionObj.slotInterval));\n data[_this.parent.eventFields.endTime] = endTime;\n data[_this.parent.eventFields.isAllDay] = false;\n }\n });\n this.startTime = targetCellTime_1;\n }\n if (this.isAllDayTarget && this.isAllDayDrag &&\n !isNullOrUndefined(this.actionObj.isAllDay) && this.actionObj.isAllDay && this.swagData.length > 0) {\n this.multiData = this.swagData;\n this.swagData = [];\n var eventObj_1 = extend({}, this.actionObj.event, null, true);\n this.startTime = eventObj_1[this.parent.eventFields.startTime].getTime();\n }\n var startTimeDiff = event[this.parent.eventFields.startTime].getTime() - this.startTime;\n for (var index_2 = 0; index_2 < this.multiData.length; index_2++) {\n this.updatedData[parseInt(index_2.toString(), 10)] =\n this.updateMultipleData(this.multiData[parseInt(index_2.toString(), 10)], startTimeDiff);\n var dayIndex = this.getDayIndex(this.updatedData[parseInt(index_2.toString(), 10)]);\n if (dayIndex >= 0) {\n var wrapper = this.getEventWrapper(dayIndex, this.updatedData[parseInt(index_2.toString(), 10)][this.parent.eventFields.isAllDay]);\n this.appendCloneElement(wrapper, this.actionObj.cloneElement[parseInt(index_2.toString(), 10)]);\n this.updateEventHeight(this.updatedData[parseInt(index_2.toString(), 10)], index_2, dayIndex);\n }\n else {\n if (!isNullOrUndefined(this.actionObj.cloneElement[parseInt(index_2.toString(), 10)].parentNode)) {\n remove(this.actionObj.cloneElement[parseInt(index_2.toString(), 10)]);\n }\n }\n }\n }\n else {\n this.updateEventHeight(event);\n }\n this.updateTimePosition(this.actionObj.start, this.updatedData);\n };\n DragAndDrop.prototype.splitEvent = function (event) {\n var eventFields = this.parent.eventFields;\n var eventData = [];\n var startTime = event[eventFields.startTime];\n var endTime = event[eventFields.endTime];\n if (util.resetTime(new Date(startTime.getTime())) < util.resetTime(new Date(endTime.getTime()))) {\n var startReferenceDate = util.resetTime(new Date(startTime.getTime()));\n var endReferenceDate = new Date(startReferenceDate.getTime());\n for (var i = 0; startReferenceDate < new Date(endTime.getTime()); i++) {\n endReferenceDate = new Date(endReferenceDate.setDate(startReferenceDate.getDate() + 1));\n var eventObj = extend({}, event, null, true);\n eventObj[eventFields.startTime] = new Date(startReferenceDate);\n eventObj[eventFields.endTime] = new Date(endReferenceDate);\n startReferenceDate = new Date(startReferenceDate.setDate(startReferenceDate.getDate() + 1));\n eventData.push(eventObj);\n }\n var index = eventData.length - 1;\n eventData[0][eventFields.startTime] = startTime;\n eventData[parseInt(index.toString(), 10)][eventFields.endTime] = endTime;\n }\n else {\n eventData.push(event);\n }\n return eventData;\n };\n DragAndDrop.prototype.updateMultipleData = function (data, timeDifference) {\n var eventObj = extend({}, data, null, true);\n if (!isNullOrUndefined(this.actionObj.isAllDay) && this.parent.activeViewOptions.timeScale.enable &&\n ((this.isAllDayTarget && eventObj[this.parent.eventFields.isAllDay]) ||\n (!this.isAllDayTarget && !eventObj[this.parent.eventFields.isAllDay]))) {\n eventObj[this.parent.eventFields.isAllDay] = this.actionObj.isAllDay;\n }\n var endTimeDiff = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n if (eventObj[this.parent.eventFields.isAllDay]) {\n var differInDays = Math.ceil(timeDifference / (1000 * 3600 * 24));\n var day = Math.ceil(endTimeDiff / (1000 * 3600 * 24));\n var startTime = new Date(eventObj[this.parent.eventFields.startTime]);\n eventObj[this.parent.eventFields.startTime] = util.resetTime(new Date(startTime.setDate(startTime.getDate() + differInDays)));\n eventObj[this.parent.eventFields.endTime] = util.addDays(eventObj[this.parent.eventFields.startTime], day);\n }\n else {\n eventObj[this.parent.eventFields.startTime] =\n new Date(eventObj[this.parent.eventFields.startTime].getTime() + timeDifference);\n eventObj[this.parent.eventFields.endTime] =\n new Date(eventObj[this.parent.eventFields.startTime].getTime() + endTimeDiff);\n }\n return eventObj;\n };\n DragAndDrop.prototype.getDayIndex = function (event) {\n var eventObj = extend({}, event, null, true);\n var startDate = util.resetTime(eventObj[this.parent.eventFields.startTime]);\n if (this.parent.activeViewOptions.timeScale.enable && !eventObj[this.parent.eventFields.isAllDay]) {\n var startHour = this.parent.activeView.getStartHour();\n startDate.setMilliseconds(startHour.getTime() - util.resetTime(startHour).getTime());\n }\n var startTime = startDate.getTime();\n var query = '';\n var wrapper = cls.DAY_WRAPPER_CLASS;\n if (this.parent.activeViewOptions.timeScale.enable && (eventObj[this.parent.eventFields.isAllDay])) {\n wrapper = cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS;\n }\n else {\n wrapper = cls.WORK_CELLS_CLASS;\n }\n query = '.' + wrapper + '[data-date=\"' + startTime + '\"]';\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n query = query + '[data-group-index=\"' + this.actionObj.groupIndex + '\"]';\n }\n this.targetTd = this.parent.element.querySelector(query);\n if (isNullOrUndefined(this.targetTd)) {\n return -1;\n }\n return this.targetTd.cellIndex;\n };\n DragAndDrop.prototype.updateEventHeight = function (event, index, colIndex) {\n this.verticalEvent.initializeValues();\n var datesCount = this.verticalEvent.getStartCount();\n if (!this.parent.uiStateValues.isGroupAdaptive) {\n for (var i = 0; i < this.actionObj.groupIndex; i++) {\n if (this.verticalEvent.dateRender[parseInt(i.toString(), 10)]) {\n datesCount = datesCount + this.verticalEvent.dateRender[parseInt(i.toString(), 10)].length;\n }\n }\n }\n var indexGroup = this.parent.uiStateValues.isGroupAdaptive ? datesCount : this.actionObj.groupIndex;\n var target = (this.parent.activeViewOptions.group.byDate &&\n !isNullOrUndefined(this.parent.getDateFromElement(this.actionObj.target))) ? true : false;\n if (target || !this.parent.activeViewOptions.group.byDate) {\n var dynamicIndex = -1;\n var dayIndex = !this.parent.activeViewOptions.group.byDate ?\n isNullOrUndefined(index) ? this.actionObj.index - datesCount : colIndex - datesCount\n : this.parent.getIndexOfDate(this.verticalEvent.dateRender[parseInt(indexGroup.toString(), 10)], util.resetTime(\n // eslint-disable-next-line max-len\n this.parent.getDateFromElement(isNullOrUndefined(index) ? this.actionObj.target : this.targetTd)));\n var splitEvents = this.splitEvent(event);\n var events_1 = this.parent.eventBase.isAllDayAppointment(event) || splitEvents.length > 2 ||\n this.parent.eventSettings.spannedEventPlacement !== 'TimeSlot' ? [event] : splitEvents;\n for (var i = 0; i < events_1.length; i++) {\n if (i > 0) {\n var filterQuery = \".e-day-wrapper[data-date=\\\"\" + util.resetTime(events_1[parseInt(i.toString(), 10)][this.parent.eventFields.startTime]).getTime() + \"\\\"]\";\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n filterQuery = filterQuery.concat('[data-group-index = \"' + this.actionObj.groupIndex + '\"]');\n }\n var appWrap = this.parent.element.querySelector(filterQuery);\n if (appWrap) {\n dayIndex = dayIndex + 1;\n dynamicIndex = appWrap.cellIndex;\n }\n else {\n dayIndex = -1;\n }\n }\n if (dayIndex >= 0) {\n var record = this.verticalEvent.isSpannedEvent(events_1[parseInt(i.toString(), 10)], dayIndex, indexGroup);\n var eStart = record[this.verticalEvent.fields.startTime];\n var eEnd = record[this.verticalEvent.fields.endTime];\n var appHeight = this.parent.activeViewOptions.timeScale.enable ? this.verticalEvent.getHeight(eStart, eEnd) :\n this.actionObj.element.offsetHeight;\n var topValue = this.parent.activeViewOptions.timeScale.enable ?\n this.verticalEvent.getTopValue(eStart, dayIndex, indexGroup) : this.actionObj.element.offsetTop;\n if (isNullOrUndefined(index)) {\n if (i === 0) {\n this.actionObj.clone.style.top = formatUnit(topValue);\n this.actionObj.clone.style.height = formatUnit(appHeight);\n }\n else {\n this.renderSpannedEvents(record, dynamicIndex, topValue, appHeight);\n }\n }\n else {\n var appWidth = this.actionObj.cellWidth;\n if (event[this.parent.eventFields.isAllDay]) {\n topValue = this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).offsetTop;\n appHeight = this.getAllDayEventHeight();\n var timeDiff = event[this.parent.eventFields.endTime].getTime() -\n event[this.parent.eventFields.startTime].getTime();\n var allDayDifference = Math.ceil(timeDiff / (1000 * 3600 * 24));\n if (allDayDifference >= 0) {\n appWidth = (allDayDifference * this.actionObj.cellWidth);\n }\n }\n if (this.actionObj.cloneElement[parseInt(index.toString(), 10)]) {\n if (i === 0) {\n this.actionObj.cloneElement[parseInt(index.toString(), 10)].style.top = formatUnit(topValue);\n this.actionObj.cloneElement[parseInt(index.toString(), 10)].style.height = formatUnit(appHeight);\n this.actionObj.cloneElement[parseInt(index.toString(), 10)].style.width = formatUnit(appWidth);\n this.actionObj.cloneElement[parseInt(index.toString(), 10)].style.left = formatUnit(0);\n }\n else {\n this.renderSpannedEvents(record, dynamicIndex, topValue, appHeight);\n }\n }\n }\n }\n }\n }\n };\n DragAndDrop.prototype.renderSpannedEvents = function (record, index, top, height) {\n var startTime = record[this.parent.eventFields.startTime].getTime();\n var endTime = record[this.parent.eventFields.endTime].getTime();\n if (startTime !== endTime) {\n var appointmentElement = this.verticalEvent.\n createAppointmentElement(record, false, record.isSpanned, this.actionObj.groupIndex);\n addClass([appointmentElement], [cls.CLONE_ELEMENT_CLASS, 'e-dynamic-clone']);\n setStyleAttribute(appointmentElement, {\n 'width': '100%',\n 'height': height + 'px',\n 'top': top + 'px',\n 'border': '0px'\n });\n var appointmentWrap = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_CLASS));\n appointmentWrap[parseInt(index.toString(), 10)].appendChild(appointmentElement);\n }\n };\n DragAndDrop.prototype.getRenderedDates = function () {\n var _this = this;\n var _a, _b;\n var renderDates = this.parent.activeView.renderDates;\n (_a = this.parent.eventBase.slots).push.apply(_a, this.parent.activeView.renderDates.map(function (date) { return +date; }));\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.eventBase.slots = [];\n var resources = this.parent.resourceBase.lastResourceLevel.\n filter(function (res) { return res.groupIndex === _this.actionObj.groupIndex; });\n renderDates = resources[0].renderDates;\n (_b = this.parent.eventBase.slots).push.apply(_b, renderDates.map(function (date) { return +date; }));\n }\n return renderDates;\n };\n DragAndDrop.prototype.updateAllDayEvents = function (startDate, endDate, colIndex) {\n this.parent.eventBase.slots = [];\n var event = this.getUpdatedEvent(startDate, endDate, this.actionObj.event);\n var renderDates = this.getRenderedDates();\n var events = this.parent.eventBase.splitEvent(event, renderDates);\n var query = \".e-all-day-cells[data-date=\\\"\" + events[0][this.parent.eventFields.startTime].getTime() + \"\\\"]\";\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n query = query.concat('[data-group-index = \"' + this.actionObj.groupIndex + '\"]');\n }\n var cell = [].slice.call(this.parent.element.querySelectorAll(query));\n if (cell.length > 0 || !isNullOrUndefined(colIndex)) {\n var cellIndex = !isNullOrUndefined(colIndex) ? colIndex : cell[0].cellIndex;\n this.appendCloneElement(this.getEventWrapper(cellIndex));\n // eslint-disable-next-line max-len\n this.actionObj.clone.style.width = formatUnit(events[0].data.count * this.actionObj.cellWidth);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DragAndDrop.prototype.swapDragging = function (e) {\n var colIndex = closest(this.actionObj.target, 'td').cellIndex;\n if (closest(this.actionObj.target, '.' + cls.DATE_HEADER_WRAP_CLASS) &&\n !closest(this.actionObj.clone, '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS)) {\n addClass([this.actionObj.clone], cls.ALLDAY_APPOINTMENT_CLASS);\n this.appendCloneElement(this.getEventWrapper(colIndex));\n this.actionObj.isAllDay = true;\n var eventHeight = this.getAllDayEventHeight();\n var allDayElement = [].slice.call(this.parent.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS + ':first-child'));\n if (allDayElement[0].offsetHeight < eventHeight) {\n for (var _i = 0, allDayElement_1 = allDayElement; _i < allDayElement_1.length; _i++) {\n var element = allDayElement_1[_i];\n element.style.height = ((eventHeight + 2) / 12) + 'em';\n }\n }\n setStyleAttribute(this.actionObj.clone, {\n width: formatUnit(this.actionObj.cellWidth),\n height: formatUnit(eventHeight),\n top: formatUnit(this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).offsetTop)\n });\n }\n if (closest(this.actionObj.target, '.' + cls.WORK_CELLS_CLASS) &&\n !closest(this.actionObj.clone, '.' + cls.DAY_WRAPPER_CLASS)) {\n removeClass([this.actionObj.clone], cls.ALLDAY_APPOINTMENT_CLASS);\n this.appendCloneElement(this.getEventWrapper(colIndex));\n this.actionObj.isAllDay = false;\n // eslint-disable-next-line max-len\n var height = (this.actionObj.element.offsetHeight === 0) ? this.actionObj.height : this.actionObj.element.offsetHeight;\n setStyleAttribute(this.actionObj.clone, {\n left: formatUnit(0),\n height: formatUnit(height),\n width: formatUnit(this.actionObj.cellWidth)\n });\n }\n };\n DragAndDrop.prototype.calculateVerticalDate = function (e) {\n if (isNullOrUndefined(e.target) || (e.target && isNullOrUndefined(closest(e.target, 'tr'))) ||\n (e.target && e.target.tagName === 'DIV')) {\n return;\n }\n var eventObj = extend({}, this.actionObj.event, null, true);\n if (isNullOrUndefined(this.parent.eventDragArea)) {\n this.removeCloneElement();\n }\n var eventDuration = util.getUniversalTime(eventObj[this.parent.eventFields.endTime]) -\n util.getUniversalTime(eventObj[this.parent.eventFields.startTime]);\n var td = closest(this.actionObj.target, 'td');\n if (!isNullOrUndefined(td)) {\n var tr = td.parentElement;\n this.actionObj.index = (tr.rowIndex * tr.children.length) + td.cellIndex;\n var workCells = [].slice.call(this.parent.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n td = workCells[this.actionObj.index];\n var currentDate = this.parent.getDateFromElement(td);\n if (!isNullOrUndefined(currentDate)) {\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);\n }\n var timeString = new Date(currentDate.setDate(currentDate.getDate() - this.daysVariation));\n var dragStart = new Date(timeString.getTime());\n var startTimeDiff = util.getUniversalTime(eventObj[this.parent.eventFields.startTime]) -\n util.getUniversalTime(util.resetTime(new Date(+eventObj[this.parent.eventFields.startTime])));\n dragStart.setMilliseconds(startTimeDiff);\n var dragEnd = new Date(dragStart.getTime());\n dragEnd.setMilliseconds(eventDuration);\n this.actionObj.start = new Date(dragStart.getTime());\n this.actionObj.end = new Date(dragEnd.getTime());\n }\n }\n var event = this.getUpdatedEvent(this.actionObj.start, this.actionObj.end, this.actionObj.event);\n if (isNullOrUndefined(this.parent.eventDragArea)) {\n var eventWrappers = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CLONE_ELEMENT_CLASS));\n for (var _i = 0, eventWrappers_1 = eventWrappers; _i < eventWrappers_1.length; _i++) {\n var wrapper = eventWrappers_1[_i];\n remove(wrapper);\n }\n }\n if (this.multiData && this.multiData.length > 0) {\n var startTime = util.resetTime(new Date(event[this.parent.eventFields.startTime]));\n var startTimeDiff = startTime.getTime() - this.startTime;\n if (this.parent.currentView === 'TimelineYear' && this.parent.group.resources.length > 0) {\n startTimeDiff = (startTime.getFullYear() - new Date(this.startTime).getFullYear()) * 12;\n startTimeDiff -= new Date(this.startTime).getMonth();\n startTimeDiff += startTime.getMonth();\n }\n for (var index = 0; index < this.multiData.length; index++) {\n this.updatedData[parseInt(index.toString(), 10)] =\n this.updateMultipleVerticalDate(this.multiData[parseInt(index.toString(), 10)], startTimeDiff);\n if (this.parent.currentView === 'TimelineYear') {\n this.dynamicYearlyEventsRendering(this.updatedData[parseInt(index.toString(), 10)]);\n }\n else {\n this.dynamicEventsRendering(this.updatedData[parseInt(index.toString(), 10)]);\n }\n }\n }\n else {\n if (this.parent.currentView === 'TimelineYear') {\n this.dynamicYearlyEventsRendering(event);\n }\n else {\n this.dynamicEventsRendering(event);\n }\n }\n };\n DragAndDrop.prototype.updateMultipleVerticalDate = function (data, timeDifference) {\n var eventObj = extend({}, data, null, true);\n var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n var startDate = new Date(eventObj[this.parent.eventFields.startTime]);\n if (this.parent.currentView === 'TimelineYear' && this.parent.group.resources.length > 0) {\n eventObj[this.parent.eventFields.startTime] = new Date(startDate.setMonth(startDate.getMonth() + timeDifference));\n }\n else {\n var differInDays = Math.ceil(timeDifference / util.MS_PER_DAY);\n eventObj[this.parent.eventFields.startTime] = new Date(startDate.setDate(startDate.getDate() + differInDays));\n }\n eventObj[this.parent.eventFields.endTime] =\n new Date(eventObj[this.parent.eventFields.startTime].getTime() + eventDuration);\n return eventObj;\n };\n DragAndDrop.prototype.calculateTimelineTime = function (e) {\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventDuration = util.getUniversalTime(eventObj[this.parent.eventFields.endTime]) -\n util.getUniversalTime(eventObj[this.parent.eventFields.startTime]);\n var offsetLeft = this.parent.enableRtl ? Math.abs(this.actionObj.clone.offsetLeft) - this.actionObj.clone.offsetWidth :\n parseInt(this.actionObj.clone.style.left, 10);\n offsetLeft = Math.floor(offsetLeft / Math.trunc(this.actionObj.cellWidth)) * this.actionObj.cellWidth;\n var rightOffset;\n if (this.parent.enableRtl) {\n rightOffset = Math.abs(parseInt(this.actionObj.clone.style.right, 10));\n this.actionObj.clone.style.right = formatUnit(rightOffset);\n }\n offsetLeft = this.getOffsetValue(offsetLeft, rightOffset);\n var colIndex = this.getColumnIndex(offsetLeft);\n var dragArea = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var contentWrapRight = dragArea.getBoundingClientRect().right;\n var cursorDrag = this.parent.activeView.isTimelineView() && !this.parent.enableRtl &&\n this.actionObj.pageX > this.actionObj.clone.getBoundingClientRect().right &&\n !this.isMorePopupOpened && !(this.actionObj.pageX > contentWrapRight);\n var leftVal = (this.parent.eventDragArea) ? dragArea.scrollLeft - dragArea.offsetLeft : 0;\n if ((this.isCursorAhead || cursorDrag) && !this.isStepDragging) {\n this.isCursorAhead = true;\n }\n var cloneIndex = Math.floor((this.actionObj.pageX - this.actionObj.clone.getBoundingClientRect().left + leftVal) / this.actionObj.cellWidth);\n if (this.parent.enableRtl) {\n cloneIndex = Math.abs(Math.floor((this.actionObj.pageX - this.actionObj.clone.getBoundingClientRect().right) /\n this.actionObj.cellWidth)) - 1;\n }\n if (this.cursorPointIndex < 0) {\n this.cursorIndex(e, eventObj, offsetLeft, cloneIndex);\n }\n var tr = this.parent.getContentTable().querySelector('tr');\n var index = this.getCursorCurrentIndex(colIndex, cloneIndex, tr);\n index = index < 0 ? 0 : index;\n var eventStart = this.isHeaderRows ? new Date(this.timelineEventModule.dateRender[parseInt(index.toString(), 10)].getTime()) :\n this.parent.getDateFromElement(tr.children[parseInt(index.toString(), 10)]);\n if (this.isStepDragging) {\n var widthDiff = this.getWidthDiff(tr, index);\n if (widthDiff !== 0) {\n var timeDiff = Math.round(widthDiff / this.widthPerMinute);\n eventStart.setMinutes(eventStart.getMinutes() + (timeDiff * this.actionObj.interval));\n if (this.isCursorAhead || cursorDrag) {\n eventStart.setMilliseconds(-(eventDuration));\n }\n else {\n eventStart.setMinutes(eventStart.getMinutes() - this.minDiff);\n }\n }\n else {\n eventStart = this.actionObj.start;\n }\n }\n else {\n if (this.isCursorAhead || cursorDrag) {\n var minutes = this.isTimelineDayProcess ? MINUTES_PER_DAY : this.actionObj.slotInterval;\n eventStart.setMinutes(eventStart.getMinutes() + minutes);\n eventStart.setMilliseconds(-(eventDuration));\n if (eventStart.getTime() === util.resetTime(eventStart).getTime() && eventStart.getMinutes() === 0 && eventDuration === 0) {\n eventStart.setMinutes(-minutes);\n }\n }\n else {\n eventStart.setMinutes(eventStart.getMinutes() -\n (this.cursorPointIndex * (this.isTimelineDayProcess ? MINUTES_PER_DAY : this.actionObj.slotInterval)));\n }\n }\n eventStart = this.calculateIntervalTime(eventStart);\n if (this.isTimelineDayProcess) {\n var eventSrt = eventObj[this.parent.eventFields.startTime];\n eventStart.setHours(eventSrt.getHours(), eventSrt.getMinutes(), eventSrt.getSeconds());\n }\n if (this.parent.eventDragArea) {\n var targetDate = this.parent.getDateFromElement(e.target);\n if (!isNullOrUndefined(targetDate)) {\n if (!this.parent.activeViewOptions.timeScale.enable || (this.parent.currentView === 'TimelineMonth')) {\n var eventSrt = eventObj[this.parent.eventFields.startTime];\n eventStart = new Date(targetDate.setHours(eventSrt.getHours(), eventSrt.getMinutes(), eventSrt.getSeconds()));\n }\n else {\n eventStart = targetDate;\n }\n }\n }\n var eventEnd = new Date(eventStart.getTime());\n eventEnd.setMilliseconds(eventDuration);\n var eventsData = [this.getUpdatedEvent(eventStart, eventEnd, this.actionObj.event)];\n if (this.multiData.length > 0) {\n var startTimeDiff = eventsData[0][this.parent.eventFields.startTime].getTime() - this.startTime;\n for (var i = 0; i < this.multiData.length; i++) {\n this.updatedData[parseInt(i.toString(), 10)] =\n this.updateMultipleData(this.multiData[parseInt(i.toString(), 10)], startTimeDiff);\n }\n eventsData = this.updatedData;\n }\n for (var dataIndex = 0; dataIndex < eventsData.length; dataIndex++) {\n var cloneElement = this.multiData.length > 0 ? this.actionObj.cloneElement[parseInt(dataIndex.toString(), 10)] : this.actionObj.clone;\n if (isNullOrUndefined(this.parent.eventDragArea)) {\n var events_2 = this.timelineEventModule.splitEvent(eventsData[parseInt(dataIndex.toString(), 10)], this.timelineEventModule.dateRender);\n var eventData = events_2[0].data;\n var startTime = this.timelineEventModule.getStartTime(events_2[0], eventData);\n var endTime = this.timelineEventModule.getEndTime(events_2[0], eventData);\n // eslint-disable-next-line max-len\n var width = this.timelineEventModule.getEventWidth(startTime, endTime, eventObj[this.parent.eventFields.isAllDay], eventData.count);\n // eslint-disable-next-line max-len\n var day = this.parent.getIndexOfDate(this.timelineEventModule.dateRender, util.resetTime(new Date(startTime.getTime())));\n day = day < 0 ? 0 : day;\n var left = this.timelineEventModule.getPosition(startTime, endTime, eventObj[this.parent.eventFields.isAllDay], day);\n if (this.parent.enableRtl) {\n cloneElement.style.right = formatUnit(left);\n }\n else {\n cloneElement.style.left = formatUnit(left);\n }\n if (!this.isMorePopupOpened) {\n cloneElement.style.width = formatUnit(width);\n }\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.calculateResourceGroupingPosition(e, cloneElement);\n }\n this.actionObj.start = new Date(eventStart.getTime());\n this.actionObj.end = new Date(eventEnd.getTime());\n this.updateTimePosition(this.actionObj.start, this.updatedData);\n }\n };\n DragAndDrop.prototype.getOffsetValue = function (offsetLeft, rightOffset) {\n if (this.scrollEdges.left || this.scrollEdges.right) {\n var viewEle = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (this.parent.enableRtl) {\n rightOffset = viewEle.offsetWidth - viewEle.scrollLeft;\n if (this.scrollEdges.right) {\n rightOffset = (rightOffset - viewEle.offsetWidth + this.actionObj.clone.offsetWidth) -\n (this.actionObj.clone.offsetWidth - this.widthUptoCursorPoint);\n }\n else {\n rightOffset = rightOffset + this.widthUptoCursorPoint;\n if (rightOffset - this.widthUptoCursorPoint >= viewEle.scrollWidth) {\n this.actionObj.clone.style.width =\n formatUnit(this.actionObj.clone.offsetWidth - this.widthUptoCursorPoint + this.actionObj.cellWidth);\n rightOffset = (viewEle.scrollLeft - viewEle.scrollWidth);\n }\n }\n if (isNullOrUndefined(this.parent.eventDragArea)) {\n this.actionObj.clone.style.left = formatUnit(rightOffset);\n }\n }\n else {\n if (this.scrollEdges.left) {\n offsetLeft = viewEle.scrollLeft - this.widthUptoCursorPoint + this.actionObj.cellWidth;\n if (viewEle.scrollLeft + viewEle.offsetWidth >= viewEle.offsetWidth) {\n viewEle.scrollLeft = viewEle.scrollLeft - 1;\n }\n else if (this.actionObj.clone.offsetLeft === 0) {\n offsetLeft = viewEle.scrollLeft;\n }\n }\n else {\n offsetLeft = (viewEle.scrollLeft + viewEle.offsetWidth -\n this.actionObj.clone.offsetWidth) + (this.actionObj.clone.offsetWidth - this.widthUptoCursorPoint);\n }\n offsetLeft = offsetLeft < 0 ? 0 : offsetLeft;\n if (isNullOrUndefined(this.parent.eventDragArea)) {\n this.actionObj.clone.style.left = formatUnit(offsetLeft);\n }\n }\n }\n return offsetLeft;\n };\n DragAndDrop.prototype.getWidthDiff = function (tr, index) {\n var pages = this.scrollArgs.element.getBoundingClientRect();\n if (pages.left <= this.actionObj.pageX && pages.right >= this.actionObj.pageX) {\n var targetLeft = tr.children[parseInt(index.toString(), 10)].offsetLeft;\n var pageX = this.actionObj.pageX - pages.left;\n if (this.parent.enableRtl) {\n return (targetLeft + this.actionObj.cellWidth) - (this.scrollArgs.element.scrollLeft + pageX);\n }\n else {\n return (this.scrollArgs.element.scrollLeft + pageX) - targetLeft;\n }\n }\n return 0;\n };\n DragAndDrop.prototype.getColumnIndex = function (offsetLeft) {\n var index = Math.floor(offsetLeft / Math.trunc(this.actionObj.cellWidth));\n if (this.isHeaderRows) {\n return index;\n }\n return this.getIndex(index);\n };\n DragAndDrop.prototype.getCursorCurrentIndex = function (colIndex, cloneIndex, tr) {\n var index = colIndex + cloneIndex;\n if (this.isHeaderRows) {\n var dateLength = Math.floor(tr.offsetWidth / this.actionObj.cellWidth);\n return (index > dateLength - 1) ? dateLength - 1 : index;\n }\n return (index > tr.children.length - 1) ? tr.children.length - 1 : index;\n };\n DragAndDrop.prototype.cursorIndex = function (e, event, left, index) {\n var td = closest(e.target, '.e-work-cells');\n if (!isNullOrUndefined(td) && !this.isMorePopupOpened) {\n var targetDate = this.parent.getDateFromElement(td);\n if (this.isHeaderRows) {\n var currentIndex = Math.floor(left / this.actionObj.cellWidth);\n targetDate = new Date(this.timelineEventModule.dateRender[currentIndex + index].getTime());\n }\n var timeDiff = targetDate.getTime() - event[this.parent.eventFields.startTime].getTime();\n if (this.isTimelineDayProcess) {\n this.cursorPointIndex = Math.abs(Math.ceil(timeDiff / (util.MS_PER_DAY)));\n }\n else {\n var widthDiff = Math.floor((timeDiff / util.MS_PER_MINUTE) / (this.actionObj.slotInterval / this.actionObj.cellWidth));\n this.cursorPointIndex = Math.floor(widthDiff / this.actionObj.cellWidth);\n this.cursorPointIndex = this.cursorPointIndex < 0 ? 0 : this.cursorPointIndex;\n }\n }\n else {\n this.cursorPointIndex = 0;\n }\n };\n DragAndDrop.prototype.calculateResourceGroupingPosition = function (e, cloneElement) {\n var dragArea = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var trCollection = [].slice.call(this.parent.element.querySelectorAll('.e-content-wrap .e-content-table tr:not(.e-hidden)'));\n var translateY = util.getTranslateY(dragArea.querySelector('table'));\n translateY = (isNullOrUndefined(translateY)) ? 0 : translateY;\n var rowHeight = (this.parent.rowAutoHeight) ?\n ~~(dragArea.querySelector('table').offsetHeight / trCollection.length) : this.actionObj.cellHeight;\n var rowIndex = Math.floor(Math.floor((this.actionObj.Y +\n (dragArea.scrollTop - translateY - (window.scrollY || window.pageYOffset))) -\n dragArea.getBoundingClientRect().top) / rowHeight);\n rowIndex = (rowIndex < 0) ? 0 : (rowIndex > trCollection.length - 1) ? trCollection.length - 1 : rowIndex;\n this.actionObj.index = rowIndex;\n var eventContainer = this.parent.element.querySelectorAll('.e-appointment-container:not(.e-hidden)').item(rowIndex);\n var eventWrapper = eventContainer.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!eventWrapper) {\n eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n eventContainer.appendChild(eventWrapper);\n }\n this.appendCloneElement(eventWrapper, cloneElement);\n var td = closest(this.actionObj.target, 'td');\n this.actionObj.groupIndex = (td && !isNaN(parseInt(td.getAttribute('data-group-index'), 10)))\n ? parseInt(td.getAttribute('data-group-index'), 10) : this.actionObj.groupIndex;\n if (!isNullOrUndefined(this.parent.eventDragArea)) {\n return;\n }\n var top = trCollection[parseInt(rowIndex.toString(), 10)].getBoundingClientRect().height * rowIndex;\n if (this.parent.rowAutoHeight) {\n var cursorElement = this.getCursorElement(e);\n if (cursorElement) {\n top = cursorElement.classList.contains(cls.WORK_CELLS_CLASS) ? cursorElement.offsetTop :\n (cursorElement.offsetParent && cursorElement.offsetParent.classList.contains(cls.APPOINTMENT_CLASS)) ?\n cursorElement.offsetParent.offsetTop : top;\n }\n }\n cloneElement.style.top = formatUnit(top);\n };\n DragAndDrop.prototype.appendCloneElement = function (element, cloneElement) {\n if (cloneElement === void 0) { cloneElement = null; }\n cloneElement = isNullOrUndefined(cloneElement) ? this.actionObj.clone : cloneElement;\n var dragElement = document.querySelector(this.parent.eventDragArea);\n if (this.parent.eventDragArea && dragElement) {\n dragElement.appendChild(cloneElement);\n }\n else {\n element.appendChild(cloneElement);\n }\n };\n DragAndDrop.prototype.getEventWrapper = function (index, isAllDayDrag) {\n var eventWrapper;\n if (isNullOrUndefined(isAllDayDrag)) {\n isAllDayDrag = this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS);\n }\n if (this.parent.activeViewOptions.timeScale.enable) {\n var wrapperClass = isAllDayDrag ? '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : '.' + cls.APPOINTMENT_WRAPPER_CLASS;\n eventWrapper = this.parent.element.querySelectorAll(wrapperClass).item(index);\n }\n else {\n var targetWrapper = this.parent.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS).item(index);\n eventWrapper = targetWrapper.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!eventWrapper) {\n eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n targetWrapper.appendChild(eventWrapper);\n }\n }\n return eventWrapper;\n };\n DragAndDrop.prototype.getAllDayEventHeight = function () {\n var eventWrapper = createElement('div', { className: cls.APPOINTMENT_CLASS });\n this.parent.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS).appendChild(eventWrapper);\n var eventHeight = eventWrapper.offsetHeight;\n remove(eventWrapper);\n return eventHeight;\n };\n DragAndDrop.prototype.isAllowDrop = function (e) {\n if (!this.actionObj.excludeSelectors) {\n return false;\n }\n var dropSelectors = this.actionObj.excludeSelectors.split(',');\n var isAllowDrop = false;\n for (var _i = 0, dropSelectors_1 = dropSelectors; _i < dropSelectors_1.length; _i++) {\n var selector = dropSelectors_1[_i];\n if (e.target.classList.contains(selector)) {\n isAllowDrop = true;\n break;\n }\n }\n return isAllowDrop;\n };\n /**\n * Get module name.\n *\n * @returns {string} Returns the module name\n */\n DragAndDrop.prototype.getModuleName = function () {\n return 'dragAndDrop';\n };\n return DragAndDrop;\n}(ActionBase));\nexport { DragAndDrop };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createElement, remove, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Schedule common utilities\n */\nexport var WEEK_LENGTH = 7;\nexport var DEFAULT_WEEKS = 6;\nexport var MS_PER_DAY = 86400000;\nexport var MS_PER_MINUTE = 60000;\n/**\n * Method to get height from element\n *\n * @param {Element} container Accepts the DOM element\n * @param {string} elementClass Accepts the element class\n * @returns {number} Returns the height of the element\n */\nexport function getElementHeightFromClass(container, elementClass) {\n var height = 0;\n var el = createElement('div', { className: elementClass }).cloneNode();\n el.style.visibility = 'hidden';\n el.style.position = 'absolute';\n container.appendChild(el);\n height = el.getBoundingClientRect().height;\n remove(el);\n return height;\n}\n/**\n * Method to get width from element\n *\n * @param {Element} container Accepts the DOM element\n * @param {string} elementClass Accepts the element class\n * @returns {number} Returns the width of the element\n */\nexport function getElementWidthFromClass(container, elementClass) {\n var width = 0;\n var el = createElement('div', { className: elementClass }).cloneNode();\n el.style.visibility = 'hidden';\n el.style.position = 'absolute';\n container.appendChild(el);\n width = el.getBoundingClientRect().width;\n remove(el);\n return width;\n}\n/**\n * Method to get translateY value\n *\n * @param {HTMLElement | Element} element Accepts the DOM element\n * @returns {number} Returns the translateY value of given element\n */\nexport function getTranslateY(element) {\n var style = getComputedStyle(element);\n return window.WebKitCSSMatrix ?\n new WebKitCSSMatrix(style.webkitTransform).m42 : 0;\n}\n/**\n * Method to get translateX value\n *\n * @param {HTMLElement | Element} element Accepts the DOM element\n * @returns {number} Returns the translateX value of given element\n */\nexport function getTranslateX(element) {\n var style = getComputedStyle(element);\n return window.WebKitCSSMatrix ?\n new WebKitCSSMatrix(style.webkitTransform).m41 : 0;\n}\n/**\n * Method to get week first date\n *\n * @param {Date} date Accepts the date object\n * @param {number} firstDayOfWeek Accepts the first day of week number\n * @returns {Date} Returns the date object\n */\nexport function getWeekFirstDate(date, firstDayOfWeek) {\n var date1 = new Date(date.getTime());\n firstDayOfWeek = (firstDayOfWeek - date1.getDay() + 7 * (-1)) % 7;\n return new Date(date1.setDate(date1.getDate() + firstDayOfWeek));\n}\n/**\n * Method to get week last date\n *\n * @param {Date} date Accepts the date object\n * @param {number} firstDayOfWeek Accepts the first day of week number\n * @returns {Date} Returns the date object\n */\nexport function getWeekLastDate(date, firstDayOfWeek) {\n var weekFirst = getWeekFirstDate(date, firstDayOfWeek);\n var weekLast = new Date(weekFirst.getFullYear(), weekFirst.getMonth(), weekFirst.getDate() + 6);\n return new Date(weekLast.getTime());\n}\n/**\n * Method to get first date of month\n *\n * @param {Date} date Accepts the date object\n * @returns {Date} Returns the date object\n */\nexport function firstDateOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n/**\n * Method to get last date of month\n *\n * @param {Date} date Accepts the date object\n * @returns {Date} Returns the date object\n */\nexport function lastDateOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n/**\n * Method to get week number\n *\n * @param {Date} date Accepts the date object\n * @returns {number} Returns the week number\n */\nexport function getWeekNumber(date) {\n var date1 = new Date(date.getFullYear(), 0, 1).valueOf();\n var currentDate = new Date(date.getFullYear(), date.getMonth(), date.getDate()).valueOf();\n var dayOfYear = ((currentDate - date1 + MS_PER_DAY) / MS_PER_DAY);\n return Math.ceil(dayOfYear / 7);\n}\n/**\n * Method to get week middle date\n *\n * @param {Date} weekFirst Accepts the week first date object\n * @param {Date} weekLast Accepts the week last date object\n * @returns {Date} Returns the date object\n */\nexport function getWeekMiddleDate(weekFirst, weekLast) {\n return new Date(weekLast.valueOf() - ((weekLast.valueOf() - weekFirst.valueOf()) / 2));\n}\n/**\n * Method to set time to date object\n *\n * @param {Date} date Accepts the date object\n * @param {number} time Accepts the milliseconds\n * @returns {Date} Returns the date object\n */\nexport function setTime(date, time) {\n var tzOffsetBefore = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(d.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n return date;\n}\n/**\n * Method the reset hours in date object\n *\n * @param {Date} date Accepts the date object\n * @returns {Date} Returns the date object\n */\nexport function resetTime(date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n/**\n * Method to get milliseconds from date object\n *\n * @param {Date} date Accepts the date object\n * @returns {number} Returns the milliseconds from date object\n */\nexport function getDateInMs(date) {\n var localOffset = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0).getTimezoneOffset();\n var dateOffset = date.getTimezoneOffset();\n var timezoneOffset = dateOffset - localOffset;\n return ((date.getTime() - new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0).getTime())\n - (timezoneOffset * 60 * 1000));\n}\n/**\n * Method to get date count between two dates\n *\n * @param {Date} startDate Accepts the date object\n * @param {Date} endDate Accepts the date object\n * @returns {number} Returns the date count\n */\nexport function getDateCount(startDate, endDate) {\n return Math.ceil((endDate.getTime() - startDate.getTime()) / MS_PER_DAY);\n}\n/**\n * Method to add no of days in date object\n *\n * @param {Date} date Accepts the date object\n * @param {number} noOfDays Accepts the number of days count\n * @returns {Date} Returns the date object\n */\nexport function addDays(date, noOfDays) {\n date = new Date('' + date);\n return new Date(date.setDate(date.getDate() + noOfDays));\n}\n/**\n * Method to add no of months in date object\n *\n * @param {Date} date Accepts the date object\n * @param {number} noOfMonths Accepts the number of month count\n * @returns {Date} Returns the date object\n */\nexport function addMonths(date, noOfMonths) {\n date = new Date('' + date);\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + noOfMonths);\n date.setDate(Math.min(day, getMaxDays(date)));\n return date;\n}\n/**\n * Method to add no of years in date object\n *\n * @param {Date} date Accepts the date object\n * @param {number} noOfYears Accepts the number of month count\n * @returns {Date} Returns the date object\n */\nexport function addYears(date, noOfYears) {\n date = new Date('' + date);\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + noOfYears);\n date.setDate(Math.min(day, getMaxDays(date)));\n return date;\n}\n/**\n * Method to get start and end hours\n *\n * @param {Date} date Accepts the date object\n * @param {Date} startHour Accepts the start hour date object\n * @param {Date} endHour Accepts the end hour date object\n * @returns {Object} Returns the start and end hour date objects\n */\nexport function getStartEndHours(date, startHour, endHour) {\n var date1 = new Date(date.getTime());\n date1.setHours(startHour.getHours());\n date1.setMinutes(startHour.getMinutes());\n date1.setSeconds(startHour.getSeconds());\n var date2 = new Date(date.getTime());\n if (endHour.getHours() === 0) {\n date2 = addDays(date2, 1);\n }\n else {\n date2.setHours(endHour.getHours());\n date2.setMinutes(endHour.getMinutes());\n date2.setSeconds(endHour.getSeconds());\n }\n return { startHour: date1, endHour: date2 };\n}\n/**\n * Method to get month last date\n *\n * @param {Date} date Accepts the date object\n * @returns {number} Returns the month last date\n */\nexport function getMaxDays(date) {\n return lastDateOfMonth(date).getDate();\n}\n/**\n * Method to get days count between two dates\n *\n * @param {Date} startDate Accepts the date object\n * @param {Date} endDate Accepts the date object\n * @returns {number} Returns the days count\n */\nexport function getDaysCount(startDate, endDate) {\n var strTime = resetTime(new Date(startDate));\n var endTime = resetTime(new Date(endDate));\n return Math.round((endTime.getTime() - strTime.getTime()) / MS_PER_DAY);\n}\n/**\n * Method to get date object from date string\n *\n * @param {string} date Accepts the date string\n * @returns {Date} Returns the date object\n */\nexport function getDateFromString(date) {\n return date.indexOf('Date') !== -1 ? new Date(parseInt(date.match(/\\d+/g).toString(), 10)) :\n date.indexOf('T') !== -1 ? new Date(date) : new Date(date.replace(/-/g, '/'));\n}\n/** @private */\nvar scrollWidth = null;\n/** @private */\nvar pixelRatio = null;\n/**\n * Method to get scrollbar width\n *\n * @returns {number} Returns the scrollbar width\n * @private\n */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\n }\n if (pixelRatio === null) {\n pixelRatio = window.devicePixelRatio || window.screen.availWidth / document.documentElement.clientWidth;\n }\n var divNode = createElement('div');\n var value = 0;\n divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n document.body.appendChild(divNode);\n var ratio = (devicePixelRatio) ? (devicePixelRatio.toFixed(2) === '1.10' || devicePixelRatio <= 1) ?\n Math.ceil(devicePixelRatio % 1) : Math.floor(devicePixelRatio % 1) : 0;\n value = (divNode.offsetWidth - divNode.clientWidth - ratio) | 0;\n document.body.removeChild(divNode);\n return scrollWidth = value;\n}\n/**\n * Method to reset scrollbar width\n *\n * @private\n * @returns {void}\n */\nexport function resetScrollbarWidth() {\n var zoomPixelRatio = window.devicePixelRatio || window.screen.availWidth / document.documentElement.clientWidth;\n if (pixelRatio && pixelRatio !== zoomPixelRatio) {\n scrollWidth = null;\n pixelRatio = zoomPixelRatio;\n }\n}\n/**\n * Method to find the index from data collection\n *\n * @param {Object} data Accepts the data as object\n * @param {string} field Accepts the field name\n * @param {string} value Accepts the value name\n * @param {Object} event Accepts the data as object\n * @param {Object[]} resourceCollection Accepts the data collections\n * @returns {number} Returns the index number\n */\n// eslint-disable-next-line max-len\nexport function findIndexInData(data, field, value, event, resourceCollection) {\n for (var i = 0, length_1 = data.length; i < length_1; i++) {\n if (data[parseInt(i.toString(), 10)][\"\" + field] === value) {\n if (event) {\n var field_1 = resourceCollection.slice(-2)[0].field;\n var res = (event[\"\" + field_1] instanceof Array ? event[\"\" + field_1] : [event[\"\" + field_1]]);\n var resData = res.join(',');\n if (resData.includes(data[parseInt(i.toString(), 10)][resourceCollection.slice(-1)[0].groupIDField])) {\n return i;\n }\n }\n else {\n return i;\n }\n }\n }\n return -1;\n}\n/**\n * Method to get element outer height\n *\n * @param {HTMLElement} element Accepts the DOM element\n * @returns {number} Returns the outer height of the given element\n */\nexport function getOuterHeight(element) {\n var style = getComputedStyle(element);\n return element.offsetHeight + (parseInt(style.marginTop, 10) || 0) + (parseInt(style.marginBottom, 10) || 0);\n}\n/**\n * Method to remove child elements\n *\n * @param {HTMLElement | Element} element Accepts the DOM element\n * @returns {void}\n */\nexport function removeChildren(element) {\n var elementChildren = [].slice.call(element.children);\n for (var _i = 0, elementChildren_1 = elementChildren; _i < elementChildren_1.length; _i++) {\n var elementChild = elementChildren_1[_i];\n element.removeChild(elementChild);\n }\n}\n/**\n * Method to check DST is present or not in date object\n *\n * @param {Date} date Accepts the date object\n * @returns {boolean} Returns the boolean value for either DST is present or not\n */\nexport function isDaylightSavingTime(date) {\n var jan = new Date(date.getFullYear(), 0, 1);\n var jul = new Date(date.getFullYear(), 6, 1);\n return date.getTimezoneOffset() < Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());\n}\n/**\n * Method to get UTC time value from date\n *\n * @param {Date} date Accepts the date\n * @returns {number} Returns the UTC time value\n */\nexport function getUniversalTime(date) {\n var year = date.getFullYear();\n var month = date.getMonth();\n var day = date.getDate();\n var hours = date.getHours();\n var minutes = date.getMinutes();\n var seconds = date.getSeconds();\n var milliseconds = date.getMilliseconds();\n return Date.UTC(year, month, day, hours, minutes, seconds, milliseconds);\n}\n/**\n * Method to check the device\n *\n * @returns {boolean} Returns the boolean value for either device is present or not.\n */\nexport function isMobile() {\n return window.navigator.userAgent.toLowerCase().indexOf('mobi') > -1;\n}\n/**\n * Method to check the IPad device\n *\n * @returns {boolean} Returns the boolean value for either IPad device is present or not.\n */\nexport function isIPadDevice() {\n return window.navigator.userAgent.toLowerCase().indexOf('ipad') > -1;\n}\n/**\n * Method to capitalize the first word in string\n *\n * @param {string} inputString Accepts the string value\n * @param {string} type Accepts the string type\n * @returns {string} Returns the output string\n */\nexport function capitalizeFirstWord(inputString, type) {\n if (type === 'multiple') {\n inputString = inputString.split(' ').map(function (e) { return e.charAt(0).toLocaleUpperCase() + e.substring(1); }).join(' ');\n }\n else if (type === 'single') {\n if (inputString[0] >= '0' && inputString[0] <= '9') {\n var array = inputString.match(/[a-zA-Z]/);\n inputString = isNullOrUndefined(array) ? inputString :\n inputString.slice(0, array.index) + inputString[array.index].toLocaleUpperCase() + inputString.slice(array.index + 1);\n }\n inputString = inputString[0].toLocaleUpperCase() + inputString.slice(1);\n }\n return inputString;\n}\n","/* eslint-disable max-len */\nimport { isNullOrUndefined, getDefaultDateObject, getValue, cldrData } from '@syncfusion/ej2-base';\nimport { MS_PER_DAY, addDays, resetTime, capitalizeFirstWord } from '../schedule/base/util';\nimport { Islamic, Gregorian } from '../common/calendar-util';\nimport { Timezone } from '../schedule/timezone/timezone';\n/**\n * Date Generator from Recurrence Rule\n */\n/**\n * Generate Summary from Recurrence Rule\n *\n * @param {string} rule Accepts the Recurrence rule\n * @param {L10n} localeObject Accepts the locale object\n * @param {string} locale Accepts the locale name\n * @param {CalendarType} calendarType Accepts the calendar type\n * @returns {string} Returns the summary string from given recurrence rule\n */\nexport function generateSummary(rule, localeObject, locale, calendarType) {\n if (calendarType === void 0) { calendarType = 'Gregorian'; }\n var ruleObject = extractObjectFromRule(rule);\n var summary = localeObject.getConstant(EVERY) + ' ';\n var cldrObj;\n var cldrObj1;\n var calendarMode = calendarType.toLowerCase();\n if (locale === 'en' || locale === 'en-US') {\n var nameSpace1 = 'months.stand-alone.abbreviated';\n var nameSpace = 'days.stand-alone.abbreviated';\n cldrObj1 = (getValue(nameSpace1, getDefaultDateObject(calendarMode)));\n cldrObj = (getValue(nameSpace, getDefaultDateObject(calendarMode)));\n }\n else {\n var nameSpace1 = 'main.' + locale + '.dates.calendars.' + calendarMode + '.months.stand-alone.abbreviated';\n var nameSpace = 'main.' + locale + '.dates.calendars.' + calendarMode + '.days.stand-alone.abbreviated';\n cldrObj1 =\n (getValue(nameSpace1, cldrData));\n cldrObj =\n (getValue(nameSpace, cldrData));\n }\n if (ruleObject.interval > 1) {\n summary += ruleObject.interval + ' ';\n }\n switch (ruleObject.freq) {\n case 'DAILY':\n summary += localeObject.getConstant(DAYS);\n break;\n case 'WEEKLY':\n summary += localeObject.getConstant(WEEKS) + ' ' + localeObject.getConstant(ON) + ' ';\n ruleObject.day.forEach(function (day, index) {\n summary += capitalizeFirstWord(getValue(DAYINDEXOBJECT[\"\" + day], cldrObj), 'single');\n summary += (((ruleObject.day.length - 1) === index) ? '' : ', ');\n });\n break;\n case 'MONTHLY':\n summary += localeObject.getConstant(MONTHS) + ' ' + localeObject.getConstant(ON) + ' ';\n summary += getMonthSummary(ruleObject, cldrObj, localeObject);\n break;\n case 'YEARLY':\n summary += localeObject.getConstant(YEARS) + ' ' + localeObject.getConstant(ON) + ' ';\n summary += capitalizeFirstWord(getValue((ruleObject.month[0]).toString(), cldrObj1), 'single') + ' ';\n summary += getMonthSummary(ruleObject, cldrObj, localeObject);\n break;\n }\n if (ruleObject.count) {\n summary += ', ' + (ruleObject.count) + ' ' + localeObject.getConstant(TIMES);\n }\n else if (ruleObject.until) {\n var tempDate = ruleObject.until;\n summary += ', ' + localeObject.getConstant(UNTIL)\n + ' ' + tempDate.getDate()\n + ' ' + capitalizeFirstWord(getValue((tempDate.getMonth() + 1).toString(), cldrObj1), 'single')\n + ' ' + tempDate.getFullYear();\n }\n return summary;\n}\n/**\n * Generates Month summary\n *\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @param {string[]} cldrObj Accepts the collections of month name from calendar\n * @param {L10n} localeObj Accepts the locale object\n * @returns {string} Returns the month summary string from given recurrence rule object\n * @private\n */\nfunction getMonthSummary(ruleObject, cldrObj, localeObj) {\n var summary = '';\n if (ruleObject.monthDay.length) {\n summary += ruleObject.monthDay[0];\n }\n else if (ruleObject.day) {\n var pos = ruleObject.setPosition - 1;\n summary += localeObj.getConstant(WEEKPOS[pos > -1 ? pos : (WEEKPOS.length - 1)])\n + ' ' + capitalizeFirstWord(getValue(DAYINDEXOBJECT[ruleObject.day[0]], cldrObj), 'single');\n }\n return summary;\n}\n/**\n * Generates the date collections from the given recurrence rule\n *\n * @param {Date} startDate Accepts the rule start date\n * @param {string} rule Accepts the recurrence rule\n * @param {string} excludeDate Accepts the exception dates in string format\n * @param {number} startDayOfWeek Accepts the start day index of week\n * @param {number} maximumCount Accepts the maximum number count to generate date collections\n * @param {Date} viewDate Accepts the current date instead of start date\n * @param {CalendarType} calendarMode Accepts the calendar type\n * @param {string} newTimezone Accepts the timezone name\n * @returns {number[]} Returns the collection of dates\n */\nexport function generate(startDate, rule, excludeDate, startDayOfWeek, maximumCount, viewDate, calendarMode, newTimezone) {\n if (maximumCount === void 0) { maximumCount = MAXOCCURRENCE; }\n if (viewDate === void 0) { viewDate = null; }\n if (calendarMode === void 0) { calendarMode = 'Gregorian'; }\n if (newTimezone === void 0) { newTimezone = null; }\n var ruleObject = extractObjectFromRule(rule);\n var cacheDate;\n calendarUtil = getCalendarUtil(calendarMode);\n var data = [];\n var modifiedDate = new Date(startDate.getTime());\n tempExcludeDate = [];\n var tempDate = isNullOrUndefined(excludeDate) ? [] : excludeDate.split(',');\n var tz = new Timezone();\n tempDate.forEach(function (content) {\n var parsedDate = getDateFromRecurrenceDateString(content);\n if (newTimezone) {\n parsedDate = tz.add(new Date(parsedDate.getTime()), newTimezone);\n }\n tempExcludeDate.push(new Date(parsedDate.getTime()).setHours(0, 0, 0, 0));\n });\n ruleObject.recExceptionCount = !isNullOrUndefined(ruleObject.count) ? tempExcludeDate.length : 0;\n if (viewDate && viewDate > startDate && !ruleObject.count) {\n tempViewDate = new Date(new Date(viewDate.getTime()).setHours(0, 0, 0));\n }\n else {\n tempViewDate = null;\n }\n if (!ruleObject.until && tempViewDate) {\n cacheDate = new Date(tempViewDate.getTime());\n cacheDate.setDate(tempViewDate.getDate() + maximumCount * (ruleObject.interval));\n ruleObject.until = cacheDate;\n }\n if (ruleObject.until && startDate > ruleObject.until) {\n return data;\n }\n maxOccurrence = maximumCount;\n setFirstDayOfWeek(DAYINDEX[parseInt(startDayOfWeek.toString(), 10)]);\n if (ruleObject.until) {\n var end = resetTime(ruleObject.until);\n ruleObject.until = new Date(end.getFullYear(), end.getMonth(), end.getDate(), 23, 59, 59);\n }\n switch (ruleObject.freq) {\n case 'DAILY':\n dailyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'WEEKLY':\n weeklyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'MONTHLY':\n monthlyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'YEARLY':\n yearlyType(modifiedDate, ruleObject.until, data, ruleObject);\n }\n return data;\n}\n/**\n * Generate date object from given date string\n *\n * @param {string} recDateString Accepts the exception date as string\n * @returns {Date} Returns the date from exception date string\n */\nexport function getDateFromRecurrenceDateString(recDateString) {\n return new Date(recDateString.substr(0, 4) +\n '-' + recDateString.substr(4, 2) +\n '-' + recDateString.substr(6, 5) +\n ':' + recDateString.substr(11, 2) +\n ':' + recDateString.substr(13));\n}\n/**\n * Internal method to handle exclude date\n *\n * @param {number[]} data Accepts the exception date collections\n * @param {number} date Accepts the new exclude date\n * @returns {void}\n * @private\n */\nfunction excludeDateHandler(data, date) {\n var zeroIndex = new Date(date).setHours(0, 0, 0, 0);\n if (tempExcludeDate.indexOf(zeroIndex) === -1 && (!tempViewDate || zeroIndex >= tempViewDate.getTime())) {\n data.push(date);\n }\n}\n/**\n * Internal method for get date count\n *\n * @param {Date} startDate Accepts the date\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {number} Returns the number of date count\n * @private\n */\nfunction getDateCount(startDate, ruleObject) {\n var count = maxOccurrence;\n if (ruleObject.count) {\n count = ruleObject.count;\n }\n else if (ruleObject.until) {\n if (ruleObject.freq === 'DAILY' || ruleObject.freq === 'WEEKLY') {\n count = Math.floor((ruleObject.until.getTime() - startDate.getTime()) / MS_PER_DAY) + 1;\n }\n else if (ruleObject.freq === 'MONTHLY' || ruleObject.freq === 'YEARLY') {\n count = Math.floor(((ruleObject.until.getMonth() + 12 * ruleObject.until.getFullYear()) -\n (startDate.getMonth() + 12 * startDate.getFullYear())) / ruleObject.interval) +\n (ruleObject.day.length > 1 ? (Math.floor((ruleObject.until.getTime() - startDate.getTime()) / MS_PER_DAY) + 1) : 1);\n if (ruleObject.freq === 'YEARLY') {\n count = ruleObject.month.length > 1 ? (count * ruleObject.month.length) : count;\n }\n }\n }\n return count;\n}\n/**\n * Internal method for daily type recurrence rule\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction dailyType(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var interval = ruleObject.interval;\n var expectedCount = getDateCount(startDate, ruleObject);\n var state;\n var expectedDays = ruleObject.day;\n while (compareDates(tempDate, endDate)) {\n state = true;\n state = validateRules(tempDate, ruleObject);\n if (state && (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) > -1 || expectedDays.length === 0)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {\n break;\n }\n }\n tempDate.setDate(tempDate.getDate() + interval);\n if (tempDate.getHours() !== startDate.getHours()) {\n tempDate.setHours(startDate.getHours());\n }\n }\n}\n/**\n * Internal method for weekly type recurrence rule\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction weeklyType(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n if (!ruleObject.day.length) {\n ruleObject.day.push(DAYINDEX[startDate.getDay()]);\n }\n var interval = ruleObject.interval;\n var expectedDays = ruleObject.day;\n var expectedCount = getDateCount(startDate, ruleObject);\n var weekState = true;\n var wkstIndex;\n var weekCollection = [];\n if (expectedDays.length > 1) {\n if (isNullOrUndefined(ruleObject.wkst) || ruleObject.wkst === '') {\n ruleObject.wkst = dayIndex[0];\n }\n wkstIndex = DAYINDEX.indexOf(ruleObject.wkst);\n while (compareDates(tempDate, endDate)) {\n var startDateDiff = DAYINDEX.indexOf(DAYINDEX[tempDate.getDay()]) - wkstIndex;\n startDateDiff = startDateDiff === -1 ? 6 : startDateDiff;\n var weekstartDate = addDays(tempDate, -startDateDiff);\n var weekendDate = addDays(weekstartDate, 6);\n var compareTempDate = new Date(tempDate.getTime());\n weekendDate = resetTime(weekendDate);\n compareTempDate = resetTime(compareTempDate);\n while (weekendDate >= compareTempDate) {\n if (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) > -1) {\n weekCollection.push([tempDate.getTime()]);\n }\n if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {\n break;\n }\n tempDate.setDate(tempDate.getDate() + 1);\n if (tempDate.getHours() !== startDate.getHours()) {\n tempDate.setHours(startDate.getHours());\n }\n compareTempDate = new Date(tempDate.getTime());\n compareTempDate = resetTime(compareTempDate);\n }\n tempDate.setDate(tempDate.getDate() - 1);\n if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {\n break;\n }\n tempDate.setDate((tempDate.getDate()) + 1 + ((interval - 1) * 7));\n insertDataCollection(weekCollection, weekState, startDate, endDate, data, ruleObject);\n weekCollection = [];\n }\n }\n else {\n tempDate = getStartDateForWeek(startDate, ruleObject.day);\n while (compareDates(tempDate, endDate)) {\n weekState = validateRules(tempDate, ruleObject);\n if (weekState && (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) > -1)) {\n excludeDateHandler(data, tempDate.getTime());\n }\n if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {\n break;\n }\n tempDate.setDate(tempDate.getDate() + (interval * 7));\n }\n insertDataCollection(weekCollection, weekState, startDate, endDate, data, ruleObject);\n weekCollection = [];\n }\n}\n/**\n * Internal method for monthly type recurrence rule\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction monthlyType(startDate, endDate, data, ruleObject) {\n // Set monthday value if BYDAY, BYMONTH and Month day property is not set based on start date\n if (!ruleObject.month.length && !ruleObject.day.length && !ruleObject.monthDay.length) {\n ruleObject.monthDay.push(startDate.getDate());\n if (ruleObject.freq === 'YEARLY') {\n ruleObject.month.push(startDate.getMonth() + 1);\n }\n }\n else if (ruleObject.month.length > 0 && !ruleObject.day.length && !ruleObject.monthDay.length) {\n ruleObject.monthDay.push(startDate.getDate());\n }\n var ruleType = validateMonthlyRuleType(ruleObject);\n switch (ruleType) {\n case 'day':\n switch (ruleObject.freq) {\n case 'MONTHLY':\n monthlyDayTypeProcessforMonthFreq(startDate, endDate, data, ruleObject);\n break;\n case 'YEARLY':\n monthlyDayTypeProcess(startDate, endDate, data, ruleObject);\n break;\n }\n break;\n case 'both':\n case 'date':\n switch (ruleObject.freq) {\n case 'MONTHLY':\n monthlyDateTypeProcessforMonthFreq(startDate, endDate, data, ruleObject);\n break;\n case 'YEARLY':\n monthlyDateTypeProcess(startDate, endDate, data, ruleObject);\n break;\n }\n break;\n }\n}\n/**\n * Internal method for yearly type recurrence rule\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction yearlyType(startDate, endDate, data, ruleObject) {\n var typeValue = checkYearlyType(ruleObject);\n switch (typeValue) {\n case 'MONTH':\n monthlyType(startDate, endDate, data, ruleObject);\n break;\n case 'WEEKNO':\n processWeekNo(startDate, endDate, data, ruleObject);\n break;\n case 'YEARDAY':\n processYearDay(startDate, endDate, data, ruleObject);\n break;\n }\n}\n/**\n * Internal method for process week no\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction processWeekNo(startDate, endDate, data, ruleObject) {\n var stDate = calendarUtil.getYearLastDate(startDate, 0);\n var tempDate;\n var expectedCount = getDateCount(startDate, ruleObject);\n var state;\n var startDay;\n var firstWeekSpan;\n var weekNos = ruleObject.weekNo;\n var weekNo;\n var maxDate;\n var minDate;\n var weekCollection = [];\n var expectedDays = ruleObject.day;\n while (compareDates(stDate, endDate)) {\n startDay = dayIndex.indexOf(DAYINDEX[stDate.getDay()]);\n firstWeekSpan = (6 - startDay) + 1;\n for (var index = 0; index < weekNos.length; index++) {\n weekNo = weekNos[parseInt(index.toString(), 10)];\n weekNo = (weekNo > 0) ? weekNo : 53 + weekNo + 1;\n maxDate = (weekNo === 1) ? firstWeekSpan : firstWeekSpan + ((weekNo - 1) * 7);\n minDate = (weekNo === 1) ? firstWeekSpan - 7 : firstWeekSpan + ((weekNo - 2) * 7);\n while (minDate < maxDate) {\n tempDate = new Date(stDate.getTime() + (MS_PER_DAY * minDate));\n if (expectedDays.length === 0 || expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) > -1) {\n if (isNullOrUndefined(ruleObject.setPosition)) {\n insertDateCollection(state, startDate, endDate, data, ruleObject, tempDate.getTime());\n }\n else {\n weekCollection.push([tempDate.getTime()]);\n }\n }\n minDate++;\n }\n }\n if (!isNullOrUndefined(ruleObject.setPosition)) {\n insertDatasIntoExistingCollection(weekCollection, state, startDate, endDate, data, ruleObject);\n }\n if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {\n return;\n }\n stDate = calendarUtil.getYearLastDate(tempDate, ruleObject.interval);\n weekCollection = [];\n }\n}\n/**\n * Internal method for process year day\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction processYearDay(startDate, endDate, data, ruleObject) {\n var stDate = calendarUtil.getYearLastDate(startDate, 0);\n var tempDate;\n var expectedCount = getDateCount(startDate, ruleObject);\n var state;\n var dateCollection = [];\n var date;\n var expectedDays = ruleObject.day;\n while (compareDates(stDate, endDate)) {\n for (var index = 0; index < ruleObject.yearDay.length; index++) {\n date = ruleObject.yearDay[parseInt(index.toString(), 10)];\n tempDate = new Date(stDate.getTime());\n if ((date === calendarUtil.getLeapYearDaysCount() || date === -calendarUtil.getLeapYearDaysCount()) &&\n (!calendarUtil.isLeapYear(calendarUtil.getFullYear(tempDate), 1))) {\n tempDate.setDate(tempDate.getDate() + 1);\n continue;\n }\n tempDate.setDate(tempDate.getDate() + ((date < 0) ?\n calendarUtil.getYearDaysCount(tempDate, 1) + 1 + date : date));\n if (expectedDays.length === 0 || expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) > -1) {\n if (ruleObject.setPosition == null) {\n insertDateCollection(state, startDate, endDate, data, ruleObject, tempDate.getTime());\n }\n else {\n dateCollection.push([tempDate.getTime()]);\n }\n }\n }\n if (!isNullOrUndefined(ruleObject.setPosition)) {\n insertDatasIntoExistingCollection(dateCollection, state, startDate, endDate, data, ruleObject);\n }\n if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {\n return;\n }\n stDate = calendarUtil.getYearLastDate(tempDate, ruleObject.interval);\n dateCollection = [];\n }\n}\n/**\n * Internal method to check yearly type\n *\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {YearRuleType} Returns the Yearly rule type object\n * @private\n */\nfunction checkYearlyType(ruleObject) {\n if (ruleObject.yearDay.length) {\n return 'YEARDAY';\n }\n else if (ruleObject.weekNo.length) {\n return 'WEEKNO';\n }\n return 'MONTH';\n}\n/**\n * Internal method to initialize recurrence rule variables\n *\n * @param {Date} startDate Accepts the start date\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {RuleData} Return the rule data object\n * @private\n */\nfunction initializeRecRuleVariables(startDate, ruleObject) {\n var ruleData = {\n monthCollection: [],\n index: 0,\n tempDate: new Date(startDate.getTime()),\n mainDate: new Date(startDate.getTime()),\n expectedCount: getDateCount(startDate, ruleObject),\n monthInit: 0,\n dateCollection: []\n };\n if (ruleObject.month.length) {\n calendarUtil.setMonth(ruleData.tempDate, ruleObject.month[0], ruleData.tempDate.getDate());\n }\n return ruleData;\n}\n/**\n * Internal method for process monthly date type recurrence rule\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction monthlyDateTypeProcess(startDate, endDate, data, ruleObject) {\n if (ruleObject.month.length) {\n monthlyDateTypeProcessforMonthFreq(startDate, endDate, data, ruleObject);\n return;\n }\n var ruleData = initializeRecRuleVariables(startDate, ruleObject);\n var currentMonthDate;\n ruleData.tempDate = ruleData.mainDate = calendarUtil.getMonthStartDate(ruleData.tempDate);\n while (compareDates(ruleData.tempDate, endDate)) {\n currentMonthDate = new Date(ruleData.tempDate.getTime());\n while (calendarUtil.isSameYear(currentMonthDate, ruleData.tempDate) &&\n (ruleData.expectedCount && (data.length + ruleObject.recExceptionCount) <= ruleData.expectedCount)) {\n if (ruleObject.month.length === 0 || (ruleObject.month.length > 0\n && !calendarUtil.checkMonth(ruleData.tempDate, ruleObject.month))) {\n processDateCollectionForByMonthDay(ruleObject, ruleData, endDate, false);\n ruleData.beginDate = new Date(ruleData.tempDate.getTime());\n ruleData.monthInit = setNextValidDate(ruleData.tempDate, ruleObject, ruleData.monthInit, ruleData.beginDate);\n }\n else {\n calendarUtil.setValidDate(ruleData.tempDate, 1, 1);\n ruleData.tempDate = getStartDateForWeek(ruleData.tempDate, ruleObject.day);\n break;\n }\n }\n ruleData.tempDate.setFullYear(currentMonthDate.getFullYear(), currentMonthDate.getMonth(), currentMonthDate.getDate());\n insertDataCollection(ruleData.dateCollection, ruleData.state, startDate, endDate, data, ruleObject);\n if (calendarUtil.isLastMonth(ruleData.tempDate)) {\n calendarUtil.setValidDate(ruleData.tempDate, 1, 1);\n ruleData.tempDate = getStartDateForWeek(ruleData.tempDate, ruleObject.day);\n }\n if (ruleData.expectedCount && (data.length + ruleObject.recExceptionCount) >= ruleData.expectedCount) {\n return;\n }\n ruleData.tempDate.setFullYear(ruleData.tempDate.getFullYear() + ruleObject.interval - 1);\n ruleData.tempDate = getStartDateForWeek(ruleData.tempDate, ruleObject.day);\n ruleData.monthInit = setNextValidDate(ruleData.tempDate, ruleObject, ruleData.monthInit, ruleData.beginDate);\n ruleData.dateCollection = [];\n }\n}\n/**\n * Internal method for process monthly date type with month frequency from recurrence rule\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction monthlyDateTypeProcessforMonthFreq(startDate, endDate, data, ruleObject) {\n var ruleData = initializeRecRuleVariables(startDate, ruleObject);\n ruleData.tempDate = ruleData.mainDate = calendarUtil.getMonthStartDate(ruleData.tempDate);\n if (((ruleObject.freq === 'MONTHLY' && ruleObject.interval === 12) || (ruleObject.freq === 'YEARLY')) &&\n calendarUtil.getMonthDaysCount(startDate) < ruleObject.monthDay[0]) {\n return;\n }\n while (compareDates(ruleData.tempDate, endDate)) {\n ruleData.beginDate = new Date(ruleData.tempDate.getTime());\n processDateCollectionForByMonthDay(ruleObject, ruleData, endDate, true, startDate, data);\n if (!isNullOrUndefined(ruleObject.setPosition)) {\n insertDatasIntoExistingCollection(ruleData.dateCollection, ruleData.state, startDate, endDate, data, ruleObject);\n }\n if (ruleData.expectedCount && (data.length + ruleObject.recExceptionCount) >= ruleData.expectedCount) {\n return;\n }\n ruleData.monthInit = setNextValidDate(ruleData.tempDate, ruleObject, ruleData.monthInit, ruleData.beginDate);\n ruleData.dateCollection = [];\n }\n}\n/**\n * To process date collection for Monthly & Yearly based on BYMONTH Day property\n *\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @param {RuleData} recRuleVariables Accepts the rule data\n * @param {Date} endDate Accepts the end date\n * @param {boolean} isByMonth Accepts the boolean to validate either month or not\n * @param {Date} startDate Accepts the start date\n * @param {number[]} data Accepts the collection of dates\n * @returns {void}\n * @private\n */\nfunction processDateCollectionForByMonthDay(ruleObject, recRuleVariables, endDate, isByMonth, startDate, data) {\n for (var index = 0; index < ruleObject.monthDay.length; index++) {\n recRuleVariables.date = ruleObject.monthDay[parseInt(index.toString(), 10)];\n recRuleVariables.tempDate = calendarUtil.getMonthStartDate(recRuleVariables.tempDate);\n var maxDate = calendarUtil.getMonthDaysCount(recRuleVariables.tempDate);\n recRuleVariables.date = recRuleVariables.date > 0 ? recRuleVariables.date : (maxDate + recRuleVariables.date + 1);\n if (validateProperDate(recRuleVariables.tempDate, recRuleVariables.date, recRuleVariables.mainDate)\n && (recRuleVariables.date > 0)) {\n calendarUtil.setDate(recRuleVariables.tempDate, recRuleVariables.date);\n if (endDate && recRuleVariables.tempDate > endDate) {\n return;\n }\n if (ruleObject.day.length === 0 || ruleObject.day.indexOf(DAYINDEX[recRuleVariables.tempDate.getDay()]) > -1) {\n if (isByMonth && isNullOrUndefined(ruleObject.setPosition) && (recRuleVariables.expectedCount\n && (data.length + ruleObject.recExceptionCount) < recRuleVariables.expectedCount)) {\n insertDateCollection(recRuleVariables.state, startDate, endDate, data, ruleObject, recRuleVariables.tempDate.getTime());\n }\n else {\n recRuleVariables.dateCollection.push([recRuleVariables.tempDate.getTime()]);\n }\n }\n }\n }\n}\n/**\n * Internal method to set next valid date\n *\n * @param {Date} tempDate Accepts the date\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @param {number} monthInit Accepts the initial month\n * @param {Date} beginDate Accepts the initial date\n * @param {number} interval Accepts the interval duration\n * @returns {number} Returnx the next valid date\n * @private\n */\nfunction setNextValidDate(tempDate, ruleObject, monthInit, beginDate, interval) {\n if (beginDate === void 0) { beginDate = null; }\n var monthData = beginDate ? beginDate.getMonth() : 0;\n var startDate = calendarUtil.getMonthStartDate(tempDate);\n interval = isNullOrUndefined(interval) ? ruleObject.interval : interval;\n tempDate.setFullYear(startDate.getFullYear());\n tempDate.setMonth(startDate.getMonth());\n tempDate.setDate(startDate.getDate());\n if (ruleObject.month.length) {\n monthInit++;\n monthInit = monthInit % ruleObject.month.length;\n calendarUtil.setMonth(tempDate, ruleObject.month[parseInt(monthInit.toString(), 10)], 1);\n if (monthInit === 0) {\n calendarUtil.addYears(tempDate, interval, ruleObject.month[0]);\n }\n }\n else {\n if (beginDate && (beginDate.getFullYear() < tempDate.getFullYear())) {\n monthData = tempDate.getMonth() - 1;\n }\n calendarUtil.setValidDate(tempDate, interval, 1, monthData, beginDate);\n }\n return monthInit;\n}\n/**\n * To get month collection when BYDAY property having more than one value in list.\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction getMonthCollection(startDate, endDate, data, ruleObject) {\n var expectedDays = ruleObject.day;\n var tempDate = new Date(startDate.getTime());\n tempDate = calendarUtil.getMonthStartDate(tempDate);\n var monthCollection = [];\n var dateCollection = [];\n var dates = [];\n var index;\n var state;\n var expectedCount = getDateCount(startDate, ruleObject);\n var monthInit = 0;\n var beginDate;\n if (ruleObject.month.length) {\n calendarUtil.setMonth(tempDate, ruleObject.month[0], 1);\n }\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n while (compareDates(tempDate, endDate)\n && (expectedCount && (data.length + ruleObject.recExceptionCount) < expectedCount)) {\n var currentMonthDate = new Date(tempDate.getTime());\n var isHavingNumber = expectedDays.map(function (item) { return HASNUMBER.test(item); });\n if (isHavingNumber.indexOf(true) > -1) {\n for (var j = 0; j <= expectedDays.length - 1; j++) {\n var expectedDaysArray = expectedDays[parseInt(j.toString(), 10)].match(SPLITNUMBERANDSTRING);\n var position = parseInt(expectedDaysArray[0], 10);\n tempDate = new Date(tempDate.getTime());\n tempDate = calendarUtil.getMonthStartDate(tempDate);\n tempDate = getStartDateForWeek(tempDate, expectedDays);\n currentMonthDate.setFullYear(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate());\n while (calendarUtil.isSameYear(currentMonthDate, tempDate) && calendarUtil.isSameMonth(currentMonthDate, tempDate)) {\n if (expectedDaysArray[expectedDaysArray.length - 1] === DAYINDEX[currentMonthDate.getDay()]) {\n monthCollection.push([currentMonthDate.getTime()]);\n }\n currentMonthDate.setDate(currentMonthDate.getDate() + (1));\n }\n currentMonthDate.setDate(currentMonthDate.getDate() - (1));\n if (expectedDaysArray[0].indexOf('-') > -1) {\n index = monthCollection.length - (-1 * position);\n }\n else {\n index = position - 1;\n }\n index = isNaN(index) ? 0 : index;\n if (monthCollection.length > 0) {\n if (isNullOrUndefined(ruleObject.setPosition)) {\n insertDatasIntoExistingCollection(monthCollection, state, startDate, endDate, data, ruleObject, index);\n }\n else {\n dateCollection = [(filterDateCollectionByIndex(monthCollection, index, dates))];\n }\n }\n if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {\n return;\n }\n monthCollection = [];\n }\n if (!isNullOrUndefined(ruleObject.setPosition)) {\n insertDateCollectionBasedonBySetPos(dateCollection, state, startDate, endDate, data, ruleObject);\n dates = [];\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, beginDate);\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n monthCollection = [];\n }\n else {\n var weekCollection = [];\n var dayCycleData = processWeekDays(expectedDays);\n currentMonthDate.setFullYear(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate());\n var initialDate = new Date(tempDate.getTime());\n beginDate = new Date(tempDate.getTime());\n while (calendarUtil.isSameMonth(initialDate, tempDate)) {\n weekCollection.push(tempDate.getTime());\n if (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) > -1) {\n monthCollection.push(weekCollection);\n weekCollection = [];\n }\n tempDate.setDate(tempDate.getDate()\n + dayCycleData[DAYINDEX[tempDate.getDay()]]);\n }\n index = ((ruleObject.setPosition < 1) ? (monthCollection.length + ruleObject.setPosition) : ruleObject.setPosition - 1);\n if (isNullOrUndefined(ruleObject.setPosition)) {\n index = 0;\n var datas = [];\n for (var week = 0; week < monthCollection.length; week++) {\n for (var row = 0; row < monthCollection[parseInt(week.toString(), 10)].length; row++) {\n datas.push(monthCollection[parseInt(week.toString(), 10)][parseInt(row.toString(), 10)]);\n }\n }\n monthCollection = [datas];\n }\n if (monthCollection.length > 0) {\n insertDatasIntoExistingCollection(monthCollection, state, startDate, endDate, data, ruleObject, index);\n }\n if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {\n return;\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, beginDate);\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n monthCollection = [];\n }\n }\n}\n/**\n * To process monday day type for FREQ=MONTHLY\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction monthlyDayTypeProcessforMonthFreq(startDate, endDate, data, ruleObject) {\n var expectedDays = ruleObject.day;\n // When BYDAY property having more than 1 value.\n if (expectedDays.length > 1) {\n getMonthCollection(startDate, endDate, data, ruleObject);\n return;\n }\n var tempDate = new Date(startDate.getTime());\n var expectedCount = getDateCount(startDate, ruleObject);\n var monthCollection = [];\n var beginDate;\n var monthInit = 0;\n tempDate = calendarUtil.getMonthStartDate(tempDate);\n if (ruleObject.month.length) {\n calendarUtil.setMonth(tempDate, ruleObject.month[0], 1);\n }\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n while (compareDates(tempDate, endDate) && (expectedCount && (data.length + ruleObject.recExceptionCount) < expectedCount)) {\n beginDate = new Date(tempDate.getTime());\n var currentMonthDate = new Date(tempDate.getTime());\n while (calendarUtil.isSameMonth(tempDate, currentMonthDate)) {\n monthCollection.push([currentMonthDate.getTime()]);\n currentMonthDate.setDate(currentMonthDate.getDate() + (7));\n }\n // To filter date collection based on BYDAY Index, then BYSETPOS and to insert datas into existing collection\n insertDateCollectionBasedonIndex(monthCollection, startDate, endDate, data, ruleObject);\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, beginDate);\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n monthCollection = [];\n }\n}\n/**\n * To process monday day type for FREQ=YEARLY\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction monthlyDayTypeProcess(startDate, endDate, data, ruleObject) {\n var expectedDays = ruleObject.day;\n var isHavingNumber = expectedDays.map(function (item) { return HASNUMBER.test(item); });\n // If BYDAY property having more than 1 value in list\n if (expectedDays.length > 1 && isHavingNumber.indexOf(true) > -1) {\n processDateCollectionforByDayWithInteger(startDate, endDate, data, ruleObject);\n return;\n }\n else if (ruleObject.month.length && expectedDays.length === 1 && isHavingNumber.indexOf(true) > -1) {\n monthlyDayTypeProcessforMonthFreq(startDate, endDate, data, ruleObject);\n return;\n }\n var tempDate = new Date(startDate.getTime());\n var currentMonthDate;\n var expectedCount = getDateCount(startDate, ruleObject);\n var interval = ruleObject.interval;\n var monthCollection = [];\n if (ruleObject.month.length) {\n calendarUtil.setMonth(tempDate, ruleObject.month[0], tempDate.getDate());\n }\n // Set the date as start date of the yeear if yearly freq having ByDay property alone\n if (isNullOrUndefined(ruleObject.setPosition) && ruleObject.month.length === 0 && ruleObject.weekNo.length === 0) {\n tempDate.setFullYear(startDate.getFullYear(), 0, 1);\n }\n tempDate = calendarUtil.getMonthStartDate(tempDate);\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n while (compareDates(tempDate, endDate)) {\n currentMonthDate = new Date(tempDate.getTime());\n while (calendarUtil.isSameYear(currentMonthDate, tempDate) &&\n (expectedCount && (data.length + ruleObject.recExceptionCount) <= expectedCount)) {\n currentMonthDate = new Date(tempDate.getTime());\n while (calendarUtil.isSameYear(currentMonthDate, tempDate)) {\n if (ruleObject.month.length === 0 || (ruleObject.month.length > 0\n && !calendarUtil.checkMonth(tempDate, ruleObject.month))) {\n if (expectedDays.length > 1) {\n if (calendarUtil.compareMonth(currentMonthDate, tempDate)) {\n calendarUtil.setValidDate(tempDate, 1, 1);\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n break;\n }\n if (expectedDays.indexOf(DAYINDEX[currentMonthDate.getDay()]) > -1) {\n monthCollection.push([currentMonthDate.getTime()]);\n }\n currentMonthDate.setDate(currentMonthDate.getDate() + (1));\n }\n else {\n // If BYDAY property having 1 value in list\n if (currentMonthDate.getFullYear() > tempDate.getFullYear()) {\n calendarUtil.setValidDate(tempDate, 1, 1);\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n break;\n }\n var newstr = getDayString(expectedDays[0]);\n if (DAYINDEX[currentMonthDate.getDay()] === newstr\n && new Date(currentMonthDate.getFullYear(), currentMonthDate.getMonth(), 0)\n > new Date(startDate.getFullYear())) {\n monthCollection.push([currentMonthDate.getTime()]);\n }\n currentMonthDate.setDate(currentMonthDate.getDate() + (7));\n }\n }\n else {\n calendarUtil.setValidDate(tempDate, 1, 1);\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n break;\n }\n }\n }\n tempDate.setFullYear(currentMonthDate.getFullYear(), currentMonthDate.getMonth(), currentMonthDate.getDate());\n // To filter date collection based on BYDAY Index, then BYSETPOS and to insert datas into existing collection\n insertDateCollectionBasedonIndex(monthCollection, startDate, endDate, data, ruleObject);\n if (calendarUtil.isLastMonth(tempDate)) {\n calendarUtil.setValidDate(tempDate, 1, 1);\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n }\n tempDate.setFullYear(tempDate.getFullYear() + interval - 1);\n if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {\n return;\n }\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n monthCollection = [];\n }\n}\n/**\n * To process the recurrence rule when BYDAY property having values with integer\n *\n * @param {Date} startDate Accepts the strat date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of dates\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction processDateCollectionforByDayWithInteger(startDate, endDate, data, ruleObject) {\n var expectedDays = ruleObject.day;\n var expectedCount = getDateCount(startDate, ruleObject);\n var tempDate = new Date(startDate.getTime());\n var interval = ruleObject.interval;\n var monthCollection = [];\n var dateCollection = [];\n var index;\n var state;\n var monthInit = 0;\n var currentMonthDate;\n var currentDate;\n var beginDate;\n tempDate = calendarUtil.getMonthStartDate(tempDate);\n var datas = [];\n if (ruleObject.month.length) {\n calendarUtil.setMonth(tempDate, ruleObject.month[0], 1);\n }\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n while (compareDates(tempDate, endDate)) {\n currentMonthDate = new Date(tempDate.getTime());\n for (var i = 0; i <= ruleObject.month.length; i++) {\n for (var j = 0; j <= expectedDays.length - 1; j++) {\n tempDate = calendarUtil.getMonthStartDate(tempDate);\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n monthCollection = [];\n while (calendarUtil.isSameYear(currentMonthDate, tempDate) &&\n (expectedCount && (data.length + ruleObject.recExceptionCount) <= expectedCount)) {\n while (calendarUtil.isSameYear(currentMonthDate, tempDate)) {\n currentMonthDate = new Date(tempDate.getTime());\n if (ruleObject.month.length === 0 ||\n (ruleObject.month.length > 0 && ruleObject.month[parseInt(i.toString(), 10)] === calendarUtil.getMonth(currentMonthDate))) {\n var expectedDaysArray = expectedDays[parseInt(j.toString(), 10)].match(SPLITNUMBERANDSTRING);\n var position = parseInt(expectedDaysArray[0], 10);\n currentDate = new Date(tempDate.getTime());\n while (calendarUtil.isSameYear(currentDate, tempDate)\n && calendarUtil.isSameMonth(currentDate, tempDate)) {\n if (expectedDaysArray[expectedDaysArray.length - 1] === DAYINDEX[currentDate.getDay()]) {\n monthCollection.push([currentDate.getTime()]);\n }\n currentDate.setDate(currentDate.getDate() + (1));\n }\n currentDate.setDate(currentDate.getDate() - (1));\n if (expectedDaysArray[0].indexOf('-') > -1) {\n index = monthCollection.length - (-1 * position);\n }\n else {\n index = position - 1;\n }\n index = isNaN(index) ? 0 : index;\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, beginDate, 1);\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n }\n }\n tempDate = j === 0 && currentDate ? new Date(currentDate.getTime()) : new Date(currentMonthDate.getTime());\n if (monthCollection.length > 0) {\n if (isNullOrUndefined(ruleObject.setPosition)) {\n insertDatasIntoExistingCollection(monthCollection, state, startDate, endDate, data, ruleObject, index);\n }\n else {\n dateCollection = [(filterDateCollectionByIndex(monthCollection, index, datas))];\n }\n }\n if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {\n return;\n }\n }\n }\n if (!isNullOrUndefined(ruleObject.setPosition)) {\n insertDateCollectionBasedonBySetPos(dateCollection, state, startDate, endDate, data, ruleObject);\n datas = [];\n }\n if (calendarUtil.isLastMonth(tempDate)) {\n calendarUtil.setValidDate(tempDate, 1, 1);\n tempDate.setFullYear(tempDate.getFullYear() + interval - 1);\n }\n else {\n tempDate.setFullYear(tempDate.getFullYear() + interval);\n }\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n if (ruleObject.month.length) {\n calendarUtil.setMonth(tempDate, ruleObject.month[0], tempDate.getDate());\n }\n }\n}\n/**\n * To get recurrence collection if BYSETPOS is null\n *\n * @param {number[]} monthCollection Accepts the month collection dates\n * @param {string[]} expectedDays Accepts the exception dates\n * @returns {RuleData} Returns the rule data object\n * @private\n */\nfunction getRecurrenceCollection(monthCollection, expectedDays) {\n var index;\n var recurrenceCollectionObject = { monthCollection: [], index: 0 };\n if (expectedDays.length === 1) {\n // To split numeric value from BYDAY property value\n var expectedDaysArrays = expectedDays[0].match(SPLITNUMBERANDSTRING);\n var arrPosition = void 0;\n if (expectedDaysArrays.length > 1) {\n arrPosition = parseInt(expectedDaysArrays[0], 10);\n index = ((arrPosition < 1) ? (monthCollection.length + arrPosition) : arrPosition - 1);\n }\n else {\n index = 0;\n monthCollection = getDateCollectionforBySetPosNull(monthCollection);\n }\n }\n else {\n index = 0;\n monthCollection = getDateCollectionforBySetPosNull(monthCollection);\n }\n recurrenceCollectionObject.monthCollection = monthCollection;\n recurrenceCollectionObject.index = index;\n return recurrenceCollectionObject;\n}\n/**\n * Internal method to process the data collections\n *\n * @param {number[]} dateCollection Accepts the date collections\n * @param {boolean} state Accepts the state\n * @param {Date} startDate Accepts the start date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of numbers\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction insertDataCollection(dateCollection, state, startDate, endDate, data, ruleObject) {\n var index = ((ruleObject.setPosition < 1) ?\n (dateCollection.length + ruleObject.setPosition) : ruleObject.setPosition - 1);\n if (isNullOrUndefined(ruleObject.setPosition)) {\n index = 0;\n dateCollection = getDateCollectionforBySetPosNull(dateCollection);\n }\n if (dateCollection.length > 0) {\n insertDatasIntoExistingCollection(dateCollection, state, startDate, endDate, data, ruleObject, index);\n }\n}\n/**\n * To process month collection if BYSETPOS is null\n *\n * @param {number[]} monthCollection Accepts the month date collections\n * @returns {number[]} Returns the month date collections\n * @private\n */\nfunction getDateCollectionforBySetPosNull(monthCollection) {\n var datas = [];\n for (var week = 0; week < monthCollection.length; week++) {\n for (var row = 0; row < monthCollection[parseInt(week.toString(), 10)].length; row++) {\n datas.push(new Date(monthCollection[parseInt(week.toString(), 10)][parseInt(row.toString(), 10)]).getTime());\n }\n }\n monthCollection = datas.length > 0 ? [datas] : [];\n return monthCollection;\n}\n/**\n * To filter date collection based on BYDAY Index, then BYSETPOS and to insert datas into existing collection\n *\n * @param {number[]} monthCollection Accepts the month date collections\n * @param {Date} startDate Accepts the start date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the date collections\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction insertDateCollectionBasedonIndex(monthCollection, startDate, endDate, data, ruleObject) {\n var expectedDays = ruleObject.day;\n var state;\n var datas = [];\n var dateCollection = [];\n var recurrenceCollections = getRecurrenceCollection(monthCollection, expectedDays);\n monthCollection = recurrenceCollections.monthCollection;\n var index = recurrenceCollections.index;\n if (ruleObject.setPosition != null) {\n dateCollection = [(filterDateCollectionByIndex(monthCollection, index, datas))];\n insertDateCollectionBasedonBySetPos(dateCollection, state, startDate, endDate, data, ruleObject);\n }\n else {\n if (monthCollection.length > 0) {\n insertDatasIntoExistingCollection(monthCollection, state, startDate, endDate, data, ruleObject, index);\n }\n }\n datas = [];\n}\n/**\n * To filter date collection when BYDAY property having values with number\n *\n * @param {number[]} monthCollection Accepts the date collections\n * @param {number} index Accepts the index of date collections\n * @param {number[]} datas Accepts the collection of dates\n * @returns {number[]} Returns the collection of dates\n * @private\n */\nfunction filterDateCollectionByIndex(monthCollection, index, datas) {\n for (var week = 0; week < monthCollection[parseInt(index.toString(), 10)].length; week++) {\n datas.push(monthCollection[parseInt(index.toString(), 10)][parseInt(week.toString(), 10)]);\n }\n return datas;\n}\n/**\n * To insert processed date collection in final array element\n *\n * @param {boolean} state Accepts the state of the recurrence rule\n * @param {Date} startDate Accepts the start date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of date\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @param {number} dayData Accepts the date index\n * @returns {void}\n * @private\n */\nfunction insertDateCollection(state, startDate, endDate, data, ruleObject, dayData) {\n var expectedCount = getDateCount(startDate, ruleObject);\n var chDate = new Date(dayData);\n state = validateRules(chDate, ruleObject);\n if ((chDate >= startDate) && compareDates(chDate, endDate) && state\n && expectedCount && (data.length + ruleObject.recExceptionCount) < expectedCount) {\n excludeDateHandler(data, dayData);\n }\n}\n/**\n * Return the last week number of given month and year.\n *\n * @param {number} year Accepts the Year in number format\n * @param {number} startDayOfWeek Accepts the start date\n * @param {number[]} monthCollection Accepts the collection of dates\n * @param {number} week Accepts the week in number format\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {number} returns week number\n * @private\n */\nfunction weekCount(year, startDayOfWeek, monthCollection, week, ruleObject) {\n var firstDayOfWeek = startDayOfWeek || 0;\n var firstOfMonth = new Date(year, ruleObject.month[0] - 1, 1);\n var lastOfMonth = new Date(year, ruleObject.month[0], 0);\n var numberOfDaysInMonth = lastOfMonth.getDate();\n var firstWeekDay = (firstOfMonth.getDay() - firstDayOfWeek + 7) % 7;\n var used = firstWeekDay + numberOfDaysInMonth;\n var count = Math.ceil(used / 7) - 1;\n var dayData = monthCollection[parseInt(week.toString(), 10)][parseInt(count.toString(), 10)];\n var chDate = new Date(dayData);\n var state = validateRules(chDate, ruleObject);\n return (state) ? count : count - 1;\n}\n/**\n * To process date collection based on Byset position after process the collection based on BYDAY property value index: EX:BYDAY=1SUm-1SU\n *\n * @param {number[]} monthCollection Accepts the collection of dates\n * @param {boolean} state Accepts the state of the recurrence rule\n * @param {Date} startDate Accepts the start date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of date\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {void}\n * @private\n */\nfunction insertDateCollectionBasedonBySetPos(monthCollection, state, startDate, endDate, data, ruleObject) {\n if (monthCollection.length > 0) {\n for (var week = 0; week < monthCollection.length; week++) {\n monthCollection[parseInt(week.toString(), 10)].sort();\n var expectedDays = ruleObject.day;\n var isHavingNumber = expectedDays.map(function (item) { return HASNUMBER.test(item); });\n var weekIndex = (ruleObject.freq === 'YEARLY' && (ruleObject.validRules.indexOf('BYMONTH') > -1) &&\n !(isHavingNumber.indexOf(true) > -1)) ?\n weekCount(new Date(monthCollection[0][0]).getFullYear(), 0, monthCollection, week, ruleObject)\n : (monthCollection[parseInt(week.toString(), 10)].length + ruleObject.setPosition);\n var index = ((ruleObject.setPosition < 1) ? weekIndex : ruleObject.setPosition - 1);\n var dayData = monthCollection[parseInt(week.toString(), 10)][parseInt(index.toString(), 10)];\n insertDateCollection(state, startDate, endDate, data, ruleObject, dayData);\n }\n }\n}\n/**\n * To insert datas into existing collection which is processed from previous loop.\n *\n * @param {number[]} monthCollection Accepts the collection of dates\n * @param {boolean} state Accepts the state of the recurrence rule\n * @param {Date} startDate Accepts the start date\n * @param {Date} endDate Accepts the end date\n * @param {number[]} data Accepts the collection of date\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @param {number} index Accepts the index value\n * @returns {void}\n * @private\n */\nfunction insertDatasIntoExistingCollection(monthCollection, state, startDate, endDate, data, ruleObject, index) {\n if (monthCollection.length > 0) {\n index = !isNullOrUndefined(index) ? index :\n ((ruleObject.setPosition < 1)\n ? (monthCollection.length + ruleObject.setPosition) : ruleObject.setPosition - 1);\n monthCollection[parseInt(index.toString(), 10)].sort();\n for (var week = 0; week < monthCollection[parseInt(index.toString(), 10)].length; week++) {\n var dayData = monthCollection[parseInt(index.toString(), 10)][parseInt(week.toString(), 10)];\n insertDateCollection(state, startDate, endDate, data, ruleObject, dayData);\n }\n }\n}\n/**\n * Internal method to compare dates\n *\n * @param {Date} startDate Accepts the start date\n * @param {Date} endDate Accepts the end date\n * @returns {boolean} Returns the result of checking start and end dates\n * @private\n */\nfunction compareDates(startDate, endDate) {\n return endDate ? (startDate <= endDate) : true;\n}\n/**\n * Internal method to get day string\n *\n * @param {string} expectedDays Accepts the exception date string\n * @returns {string} Returns the valid string\n * @private\n */\nfunction getDayString(expectedDays) {\n // To get BYDAY value without numeric value\n var newstr = expectedDays.replace(REMOVENUMBERINSTRING, '');\n return newstr;\n}\n/**\n * Internal method to check day index\n *\n * @param {number} day Accepts the day index\n * @param {string[]} expectedDays Accepts the exception dates\n * @returns {boolean} Returns the index date\n * @private\n */\nfunction checkDayIndex(day, expectedDays) {\n var sortedExpectedDays = [];\n expectedDays.forEach(function (element) {\n var expectedDaysNumberSplit = element.match(SPLITNUMBERANDSTRING);\n if (expectedDaysNumberSplit.length === 2) {\n sortedExpectedDays.push(expectedDaysNumberSplit[1]);\n }\n else {\n sortedExpectedDays.push(expectedDaysNumberSplit[0]);\n }\n });\n return (sortedExpectedDays.indexOf(DAYINDEX[parseInt(day.toString(), 10)]) === -1);\n}\n/**\n * Internal method to get start date of week\n *\n * @param {Date} startDate Accepts the start date\n * @param {string[]} expectedDays Accepts the exception dates\n * @returns {Date} Return the week start date\n * @private\n */\nfunction getStartDateForWeek(startDate, expectedDays) {\n var tempDate = new Date(startDate.getTime());\n var newstr;\n if (expectedDays.length > 0) {\n var expectedDaysArr = [];\n for (var i = 0; i <= expectedDays.length - 1; i++) {\n newstr = getDayString(expectedDays[parseInt(i.toString(), 10)]);\n expectedDaysArr.push(newstr);\n }\n if (expectedDaysArr.indexOf(DAYINDEX[tempDate.getDay()]) === -1) {\n do {\n tempDate.setDate(tempDate.getDate() + 1);\n } while (expectedDaysArr.indexOf(DAYINDEX[tempDate.getDay()]) === -1);\n }\n }\n return tempDate;\n}\n/**\n * Method to generate recurrence rule object from given rule\n *\n * @param {string} rules Accepts the recurrence rule\n * @returns {RecRule} Returns the recurrence rule object\n */\nexport function extractObjectFromRule(rules) {\n var ruleObject = {\n freq: null,\n interval: 1,\n count: null,\n until: null,\n day: [],\n wkst: null,\n month: [],\n weekNo: [],\n monthDay: [],\n yearDay: [],\n setPosition: null,\n validRules: []\n };\n var rulesList = rules.split(';');\n var splitData = [];\n var temp;\n rulesList.forEach(function (data) {\n splitData = data.split('=');\n switch (splitData[0]) {\n case 'UNTIL':\n temp = splitData[1];\n ruleObject.until = getDateFromRecurrenceDateString(temp);\n break;\n case 'BYDAY':\n ruleObject.day = splitData[1].split(',');\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYMONTHDAY':\n ruleObject.monthDay = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYMONTH':\n ruleObject.month = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYYEARDAY':\n ruleObject.yearDay = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYWEEKNO':\n ruleObject.weekNo = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'INTERVAL':\n ruleObject.interval = parseInt(splitData[1], 10);\n break;\n case 'COUNT':\n ruleObject.count = parseInt(splitData[1], 10);\n break;\n case 'BYSETPOS':\n ruleObject.setPosition = parseInt(splitData[1], 10) > 4 ? -1 : parseInt(splitData[1], 10);\n break;\n case 'FREQ':\n ruleObject.freq = splitData[1];\n break;\n case 'WKST':\n ruleObject.wkst = splitData[1];\n break;\n }\n });\n if ((ruleObject.freq === 'MONTHLY') && (ruleObject.monthDay.length === 0)) {\n var index = ruleObject.validRules.indexOf('BYDAY');\n ruleObject.validRules.splice(index, 1);\n }\n return ruleObject;\n}\n/**\n * Internal method to validate proper date\n *\n * @param {Date} tempDate Accepts the date value\n * @param {number} data Accepts the data value\n * @param {Date} startDate Accepts the start date\n * @returns {boolean} Returns the result of date validate\n * @private\n */\nfunction validateProperDate(tempDate, data, startDate) {\n var maxDate = calendarUtil.getMonthDaysCount(tempDate);\n return (data <= maxDate) && (tempDate >= startDate);\n}\n/**\n * Internal method to process week days\n *\n * @param {string[]} expectedDays Accepts the expection dates\n * @returns {Object} Returns the weekdays object\n * @private\n */\nfunction processWeekDays(expectedDays) {\n var dayCycle = {};\n expectedDays.forEach(function (element, index) {\n if (index === expectedDays.length - 1) {\n var startIndex = dayIndex.indexOf(element);\n var temp = startIndex;\n while (temp % 7 !== dayIndex.indexOf(expectedDays[0])) {\n temp++;\n }\n dayCycle[\"\" + element] = temp - startIndex;\n }\n else {\n dayCycle[\"\" + element] = dayIndex.indexOf(expectedDays[(index + 1)]) - dayIndex.indexOf(element);\n }\n });\n return dayCycle;\n}\n/**\n * Internal method to check date\n *\n * @param {Date} tempDate Accepts the date value\n * @param {number[]} expectedDate Accepts the exception dates\n * @returns {boolean} Returns the boolean value\n * @private\n */\nfunction checkDate(tempDate, expectedDate) {\n var temp = expectedDate.slice(0);\n var data;\n var maxDate = calendarUtil.getMonthDaysCount(tempDate);\n data = temp.shift();\n while (data) {\n if (data < 0) {\n data = data + maxDate + 1;\n }\n if (data === tempDate.getDate()) {\n return false;\n }\n data = temp.shift();\n }\n return true;\n}\n/**\n * Internal method to check the year value\n *\n * @param {Date} tempDate Accepts the date value\n * @param {number[]} expectedyearDay Accepts the exception dates in year\n * @returns {boolean} Returns the boolean value\n * @private\n */\nfunction checkYear(tempDate, expectedyearDay) {\n var temp = expectedyearDay.slice(0);\n var data;\n var yearDay = getYearDay(tempDate);\n data = temp.shift();\n while (data) {\n if (data < 0) {\n data = data + calendarUtil.getYearDaysCount(tempDate, 0) + 1;\n }\n if (data === yearDay) {\n return false;\n }\n data = temp.shift();\n }\n return true;\n}\n/**\n * Internal method to get the year day\n *\n * @param {Date} currentDate Accepts the date value\n * @returns {number} Returns the boolean value\n * @private\n */\nfunction getYearDay(currentDate) {\n if (!startDateCollection[calendarUtil.getFullYear(currentDate)]) {\n startDateCollection[calendarUtil.getFullYear(currentDate)] = calendarUtil.getYearLastDate(currentDate, 0);\n }\n var tempDate = startDateCollection[calendarUtil.getFullYear(currentDate)];\n var diff = currentDate.getTime() - tempDate.getTime();\n return Math.ceil(diff / MS_PER_DAY);\n}\n/**\n * Internal method to validate monthly rule type\n *\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {MonthlyType} Returns the monthly type object\n * @private\n */\nfunction validateMonthlyRuleType(ruleObject) {\n if (ruleObject.monthDay.length && !ruleObject.day.length) {\n return 'date';\n }\n else if (!ruleObject.monthDay.length && ruleObject.day.length) {\n return 'day';\n }\n return 'both';\n}\n/**\n * Internal method to re-order the week days based on first day of week\n *\n * @param {string[]} days Accepts the week days value\n * @returns {void}\n * @private\n */\nfunction rotate(days) {\n var data = days.shift();\n days.push(data);\n}\n/**\n * Internal method to set first day of week\n *\n * @param {string} day Accepts the first day string\n * @returns {void}\n * @private\n */\nfunction setFirstDayOfWeek(day) {\n while (dayIndex[0] !== day) {\n rotate(dayIndex);\n }\n}\n/**\n * Internal method to validate recurrence rule\n *\n * @param {Date} tempDate Accepts the date value\n * @param {RecRule} ruleObject Accepts the recurrence rule object\n * @returns {boolean} Returns the boolean value\n * @private\n */\nfunction validateRules(tempDate, ruleObject) {\n var state = true;\n var expectedDays = ruleObject.day;\n var expectedMonth = ruleObject.month;\n var expectedDate = calendarUtil.getExpectedDays(tempDate, ruleObject.monthDay);\n var expectedyearDay = ruleObject.yearDay;\n ruleObject.validRules.forEach(function (rule) {\n switch (rule) {\n case 'BYDAY':\n if (checkDayIndex(tempDate.getDay(), expectedDays)) {\n state = false;\n }\n break;\n case 'BYMONTH':\n if (calendarUtil.checkMonth(tempDate, expectedMonth)) {\n state = false;\n }\n break;\n case 'BYMONTHDAY':\n if (checkDate(tempDate, expectedDate)) {\n state = false;\n }\n break;\n case 'BYYEARDAY':\n if (checkYear(tempDate, expectedyearDay)) {\n state = false;\n }\n break;\n }\n });\n return state;\n}\n/**\n * Internal method to get calendar util\n *\n * @param {CalendarType} calendarMode Accepts the calendar type object\n * @returns {CalendarUtil} Returns the calendar util object\n * @private\n */\nexport function getCalendarUtil(calendarMode) {\n if (calendarMode === 'Islamic') {\n return new Islamic();\n }\n return new Gregorian();\n}\nvar startDateCollection = {};\nvar tempExcludeDate;\nvar dayIndex = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nvar maxOccurrence;\nvar tempViewDate;\nvar calendarUtil;\nvar DAYINDEX = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nvar MAXOCCURRENCE = 43;\nvar WEEKPOS = ['first', 'second', 'third', 'fourth', 'last'];\nvar TIMES = 'summaryTimes';\nvar ON = 'summaryOn';\nvar EVERY = 'every';\nvar UNTIL = 'summaryUntil';\nvar DAYS = 'summaryDay';\nvar WEEKS = 'summaryWeek';\nvar MONTHS = 'summaryMonth';\nvar YEARS = 'summaryYear';\nvar DAYINDEXOBJECT = {\n SU: 'sun',\n MO: 'mon',\n TU: 'tue',\n WE: 'wed',\n TH: 'thu',\n FR: 'fri',\n SA: 'sat'\n};\n// To check string has number\nvar HASNUMBER = /\\d/;\n// To find the numbers in string\nvar REMOVENUMBERINSTRING = /[^A-Z]+/;\n// To split number and string\nvar SPLITNUMBERANDSTRING = /[a-z]+|[^a-z]+/gi;\n/**\n * Method to generate string from date\n *\n * @param {Date} date Accepts the date value\n * @returns {string} Returns the string value\n */\nexport function getRecurrenceStringFromDate(date) {\n return [date.getUTCFullYear(),\n roundDateValues(date.getUTCMonth() + 1),\n roundDateValues(date.getUTCDate()),\n 'T',\n roundDateValues(date.getUTCHours()),\n roundDateValues(date.getUTCMinutes()),\n roundDateValues(date.getUTCSeconds()),\n 'Z'].join('');\n}\n/**\n * Internal method to round the date values\n *\n * @param {string | number} date Accepts the date value in either string or number format\n * @returns {string} Returns the date value in string format\n * @private\n */\nfunction roundDateValues(date) {\n return ('0' + date).slice(-2);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, extend, EventHandler, formatUnit, Browser } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, append, prepend } from '@syncfusion/ej2-base';\nimport { ViewBase } from './view-base';\nimport { VerticalEvent } from '../event-renderer/vertical-view';\nimport { MonthEvent } from '../event-renderer/month';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * vertical view\n */\nvar VerticalView = /** @class */ (function (_super) {\n __extends(VerticalView, _super);\n function VerticalView(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-day-view';\n _this.isInverseTableSelect = true;\n _this.baseCssClass = 'e-vertical-view';\n _this.appointment = null;\n return _this;\n }\n VerticalView.prototype.getModuleName = function () {\n return 'verticalView';\n };\n VerticalView.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.scrollUiUpdate, this);\n this.parent.on(event.dataReady, this.renderEvents, this);\n };\n VerticalView.prototype.removeEventListener = function () {\n if (this.parent) {\n this.parent.off(event.scrollUiUpdate, this.scrollUiUpdate);\n this.parent.off(event.dataReady, this.renderEvents);\n }\n };\n VerticalView.prototype.renderEvents = function () {\n this.appointment = this.parent.activeViewOptions.timeScale.enable ?\n new VerticalEvent(this.parent) : new MonthEvent(this.parent);\n this.appointment.renderAppointments();\n this.parent.notify(event.eventsLoaded, {});\n };\n VerticalView.prototype.onContentScroll = function (e) {\n this.parent.removeNewEventElement();\n var target = e.target;\n this.parent.notify(event.virtualScroll, e);\n this.scrollLeftPanel(target);\n this.scrollTopPanel(target);\n if (!this.parent.isAdaptive) {\n this.parent.uiStateValues.top = target.scrollTop;\n }\n this.parent.uiStateValues.left = target.scrollLeft;\n if (!isNullOrUndefined(this.parent.quickPopup)) {\n this.parent.quickPopup.quickPopupHide();\n }\n this.setPersistence();\n };\n VerticalView.prototype.onAdaptiveMove = function (e) {\n if (this.parent.uiStateValues.action) {\n e.preventDefault();\n }\n };\n VerticalView.prototype.onAdaptiveScroll = function (e) {\n if (this.parent && !this.parent.isDestroyed) {\n this.parent.removeNewEventElement();\n this.parent.uiStateValues.top = e.target.scrollTop;\n }\n };\n VerticalView.prototype.scrollLeftPanel = function (target) {\n var leftPanel = this.getLeftPanelElement();\n if (!isNullOrUndefined(leftPanel)) {\n leftPanel.scrollTop = target.scrollTop;\n }\n };\n VerticalView.prototype.scrollUiUpdate = function (args) {\n if (!this.parent) {\n return;\n }\n var dateHeader = this.parent.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n var headerBarHeight = this.getHeaderBarHeight();\n var timeCells = this.getLeftPanelElement();\n var content = this.getScrollableElement();\n var header = this.getDatesHeaderElement();\n var scrollerHeight = this.parent.element.offsetHeight - headerBarHeight - header.offsetHeight;\n this.setContentHeight(content, timeCells, scrollerHeight);\n this.setColWidth(content);\n var scrollBarWidth = util.getScrollBarWidth();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n header.firstElementChild.style[args.cssProperties.rtlBorder] = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n header.style[args.cssProperties.rtlPadding] = '';\n var isDateHeaderScroll = this.parent.enableAllDayScroll ? !((content.offsetWidth - content.clientWidth) <=\n (dateHeader.offsetWidth - dateHeader.clientWidth) && dateHeader.classList.contains('e-all-day-scroll')) : true;\n if (content.offsetWidth - content.clientWidth > 0 && isDateHeaderScroll) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n header.firstElementChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n header.firstElementChild.style[args.cssProperties.border] = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n header.style[args.cssProperties.padding] = '';\n }\n if (!args.isPreventScrollUpdate) {\n if (this.parent.uiStateValues.isInitial) {\n if (this.parent.currentView.indexOf('Timeline') > -1) {\n content.scrollTop = this.parent.uiStateValues.top;\n }\n this.scrollToWorkHour();\n this.parent.uiStateValues.isInitial = false;\n }\n else {\n if (timeCells) {\n timeCells.scrollTop = this.parent.uiStateValues.top;\n }\n content.scrollTop = this.parent.uiStateValues.top;\n content.scrollLeft = this.parent.uiStateValues.left;\n }\n }\n if (this.parent.activeViewOptions.timeScale.enable) {\n this.highlightCurrentTime();\n }\n this.retainScrollPosition();\n };\n VerticalView.prototype.setContentHeight = function (element, leftPanelElement, height) {\n if (this.parent.isAdaptive && !this.isTimelineView()) {\n element.style.height = (this.parent.height === 'auto') ? 'auto' : formatUnit(height);\n }\n else {\n if (!isNullOrUndefined(leftPanelElement)) {\n leftPanelElement.style.height = (this.parent.height === 'auto') ? 'auto'\n : formatUnit(height - this.getScrollXIndent(element));\n }\n element.style.height = (this.parent.height === 'auto') ? 'auto' : formatUnit(height);\n }\n };\n VerticalView.prototype.scrollToWorkHour = function () {\n if (this.parent.workHours.highlight) {\n var firstWorkHourCell = this.element.querySelector('.' + cls.WORK_HOURS_CLASS);\n if (firstWorkHourCell) {\n this.getScrollableElement().scrollTop = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.top = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.left = 0;\n }\n }\n };\n VerticalView.prototype.scrollToHour = function (hour, scrollDate) {\n var date = this.parent.getStartEndTime(hour);\n if (!isNullOrUndefined(scrollDate)) {\n var headerElement = this.element.querySelector('.' + cls.HEADER_CELLS_CLASS + '[data-date=\"' + new Date(util.resetTime(scrollDate)).getTime() + '\"]');\n if (headerElement) {\n if (this.parent.enableRtl) {\n var conWrap = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n this.getScrollableElement().scrollLeft = -(conWrap.offsetWidth - headerElement.offsetLeft - headerElement.offsetWidth);\n }\n else {\n this.getScrollableElement().scrollLeft = headerElement.offsetLeft;\n }\n }\n }\n if (isNullOrUndefined(date)) {\n return;\n }\n this.getScrollableElement().scrollTop = this.getTopFromDateTime(date);\n };\n VerticalView.prototype.scrollToDate = function (scrollDate) {\n this.scrollToHour(null, scrollDate);\n };\n VerticalView.prototype.generateColumnLevels = function () {\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n var columnLevels = [];\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n columnLevels = this.parent.resourceBase.generateResourceLevels(level);\n if (this.parent.activeViewOptions.group.hideNonWorkingDays) {\n while (columnLevels[0].length === 0) {\n this.parent.setProperties({ selectedDate: this.parent.activeView.getNextPreviousDate(this.previousNextAction) }, true);\n this.parent.activeView.getRenderDates();\n if (this.parent.headerModule) {\n this.parent.headerModule.setCalendarDate(this.parent.selectedDate);\n this.parent.headerModule.updateDateRange();\n }\n level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n columnLevels = this.parent.resourceBase.generateResourceLevels(level);\n }\n }\n if (this.parent.uiStateValues.isGroupAdaptive && this.parent.resourceBase.lastResourceLevel.length > 0) {\n var resourceLevel = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n var resStartHour = resourceLevel.resourceData[resourceLevel.resource.startHourField];\n var resEndHour = resourceLevel.resourceData[resourceLevel.resource.endHourField];\n var dateSlots = this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays, resStartHour, resEndHour);\n columnLevels = [dateSlots];\n }\n }\n else {\n columnLevels.push(level);\n }\n this.colLevels = columnLevels;\n return columnLevels;\n };\n // eslint-disable-next-line max-len\n VerticalView.prototype.getDateSlots = function (renderDates, workDays, workStartHour, workEndHour) {\n if (workStartHour === void 0) { workStartHour = this.parent.workHours.start; }\n if (workEndHour === void 0) { workEndHour = this.parent.workHours.end; }\n var dateCol = [];\n var start = this.parent.getStartEndTime(workStartHour);\n var end = this.parent.getStartEndTime(workEndHour);\n for (var _i = 0, renderDates_1 = renderDates; _i < renderDates_1.length; _i++) {\n var col = renderDates_1[_i];\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentDate(col)) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateCol.push({\n date: col, type: 'dateHeader', className: classList, colSpan: 1,\n workDays: workDays, startHour: new Date(+start), endHour: new Date(+end)\n });\n }\n return dateCol;\n };\n VerticalView.prototype.isWorkHourRange = function (date) {\n return (this.getStartHour().getTime() <= date.getTime()) && (this.getEndHour().getTime() >= date.getTime());\n };\n VerticalView.prototype.highlightCurrentTime = function () {\n var _this = this;\n if (this.parent.activeViewOptions.headerRows.length > 0 &&\n this.parent.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour') {\n return;\n }\n var currentDate = this.parent.getCurrentTime();\n if (this.parent.showTimeIndicator && this.isWorkHourRange(currentDate)) {\n var currentDateIndex = this.getCurrentTimeIndicatorIndex();\n if (currentDateIndex.length > 0) {\n var workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n if (workCells.length > 0) {\n this.changeCurrentTimePosition();\n }\n if (isNullOrUndefined(this.currentTimeIndicatorTimer)) {\n var interval = util.MS_PER_MINUTE - ((currentDate.getSeconds() * 1000) + currentDate.getMilliseconds());\n if (interval <= (util.MS_PER_MINUTE - 1000)) {\n window.setTimeout(function () {\n if (!isNullOrUndefined(_this.currentTimeIndicatorTimer)) {\n _this.clearCurrentTimeIndicatorTimer();\n _this.changeCurrentTimePosition();\n _this.updateCurrentTimeIndicatorTimer();\n }\n }, interval);\n }\n this.updateCurrentTimeIndicatorTimer();\n }\n }\n else {\n this.clearCurrentTimeIndicatorTimer();\n }\n }\n else {\n this.clearCurrentTimeIndicatorTimer();\n }\n };\n VerticalView.prototype.getCurrentTimeIndicatorIndex = function () {\n var currentDateIndex = [];\n if (!isNullOrUndefined(this.parent.resourceBase) && (this.parent.activeViewOptions.group.resources.length > 0) &&\n !this.parent.uiStateValues.isGroupAdaptive) {\n var count = 0;\n var currentDate = util.resetTime(this.parent.getCurrentTime());\n if (this.parent.virtualScrollModule && this.parent.activeViewOptions.allowVirtualScrolling &&\n this.parent.activeViewOptions.group.byDate) {\n for (var _i = 0, _a = this.parent.resourceBase.expandedResources; _i < _a.length; _i++) {\n var resource = _a[_i];\n if (util.resetTime(resource.date).getTime() === currentDate.getTime()) {\n currentDateIndex.push(count);\n }\n count += 1;\n }\n }\n else {\n for (var _b = 0, _c = this.parent.resourceBase.renderedResources; _b < _c.length; _b++) {\n var resource = _c[_b];\n var index = this.parent.getIndexOfDate(resource.renderDates, currentDate);\n if (index >= 0) {\n var resIndex = this.parent.activeViewOptions.group.byDate ?\n (this.parent.resourceBase.lastResourceLevel.length * index) + count : count + index;\n currentDateIndex.push(resIndex);\n }\n count += this.parent.activeViewOptions.group.byDate ? 1 : resource.renderDates.length;\n }\n }\n }\n else {\n var renderDates = (this.parent.uiStateValues.isGroupAdaptive && this.parent.resourceBase.lastResourceLevel.length > 0)\n ? this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex].renderDates : this.renderDates;\n var index = this.parent.getIndexOfDate(renderDates, util.resetTime(this.parent.getCurrentTime()));\n if (index >= 0) {\n currentDateIndex.push(index);\n }\n }\n return currentDateIndex;\n };\n VerticalView.prototype.clearCurrentTimeIndicatorTimer = function () {\n if (!isNullOrUndefined(this.currentTimeIndicatorTimer)) {\n window.clearInterval(this.currentTimeIndicatorTimer);\n this.currentTimeIndicatorTimer = null;\n this.removeCurrentTimeIndicatorElements();\n }\n };\n VerticalView.prototype.updateCurrentTimeIndicatorTimer = function () {\n var _this = this;\n this.currentTimeIndicatorTimer = window.setInterval(function () { _this.changeCurrentTimePosition(); }, util.MS_PER_MINUTE);\n };\n VerticalView.prototype.removeCurrentTimeIndicatorElements = function () {\n var queryString = '.' + cls.PREVIOUS_TIMELINE_CLASS + ',.' + cls.CURRENT_TIMELINE_CLASS + ',.' + cls.CURRENT_TIME_CLASS;\n var timeIndicator = [].slice.call(this.element.querySelectorAll(queryString));\n for (var _i = 0, timeIndicator_1 = timeIndicator; _i < timeIndicator_1.length; _i++) {\n var indicator = timeIndicator_1[_i];\n remove(indicator);\n }\n };\n VerticalView.prototype.changeCurrentTimePosition = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.removeCurrentTimeIndicatorElements();\n var currentDateIndex = this.getCurrentTimeIndicatorIndex();\n var firstRow = this.parent.getContentTable().rows[0];\n var top = this.getTopFromDateTime(this.parent.getCurrentTime());\n var topInPx = formatUnit(top);\n var rowIndex = Math.floor(top / firstRow.cells[0].offsetHeight);\n var timeCellsWrap = this.getLeftPanelElement();\n var timeTrs = [].slice.call(timeCellsWrap.querySelectorAll('tr'));\n if (isNullOrUndefined(rowIndex) || isNaN(rowIndex) || rowIndex === timeTrs.length) {\n return;\n }\n var curTimeWrap = [].slice.call(this.element.querySelectorAll('.' + cls.TIMELINE_WRAPPER_CLASS));\n for (var i = 0, length_1 = currentDateIndex[0]; i < length_1; i++) {\n curTimeWrap[parseInt(i.toString(), 10)].appendChild(createElement('div', { className: cls.PREVIOUS_TIMELINE_CLASS, styles: 'top:' + topInPx }));\n }\n for (var _i = 0, currentDateIndex_1 = currentDateIndex; _i < currentDateIndex_1.length; _i++) {\n var day = currentDateIndex_1[_i];\n curTimeWrap[parseInt(day.toString(), 10)].appendChild(createElement('div', { className: cls.CURRENT_TIMELINE_CLASS, styles: 'top:' + topInPx }));\n }\n var currentTimeEle = createElement('div', {\n innerHTML: this.parent.getTimeString(this.parent.getCurrentTime()),\n className: cls.CURRENT_TIME_CLASS,\n styles: 'top:' + topInPx\n });\n if (rowIndex <= timeTrs.length) {\n removeClass(timeCellsWrap.querySelectorAll('.' + cls.HIDE_CHILDS_CLASS), cls.HIDE_CHILDS_CLASS);\n if (timeTrs[parseInt(rowIndex.toString(), 10)]) {\n addClass([timeTrs[parseInt(rowIndex.toString(), 10)].lastElementChild], cls.HIDE_CHILDS_CLASS);\n }\n prepend([currentTimeEle], timeCellsWrap);\n currentTimeEle.style.top = formatUnit(currentTimeEle.offsetTop - (currentTimeEle.offsetHeight / 2));\n }\n };\n VerticalView.prototype.getTopFromDateTime = function (date) {\n var startHour = this.getStartHour();\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (diffInMinutes * this.getWorkCellHeight() * this.parent.activeViewOptions.timeScale.slotCount) /\n this.parent.activeViewOptions.timeScale.interval;\n };\n VerticalView.prototype.getWorkCellHeight = function () {\n return parseFloat(this.element.querySelector('.' + cls.WORK_CELLS_CLASS).getBoundingClientRect().height.toFixed(2));\n };\n VerticalView.prototype.getTdContent = function (date, type, groupIndex) {\n var cntEle;\n var wrapper = createElement('div');\n var templateName = '';\n var templateId = this.parent.element.id + '_';\n switch (type) {\n case 'dateHeader':\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n templateName = 'dateHeaderTemplate';\n var args = { date: date, type: type };\n var viewName = this.parent.activeViewOptions.dateHeaderTemplateName;\n cntEle = [].slice.call(this.parent.getDateHeaderTemplate()(args, this.parent, templateName, templateId + viewName + templateName, false));\n }\n else {\n wrapper.innerHTML = this.parent.activeView.isTimelineView() ?\n \"\" + this.getTimelineDate(date) + \"\" :\n \"
\" + util.capitalizeFirstWord(this.getDayName(date), 'single') + \"
\" +\n (\"
\" + this.getDate(date) + \"
\");\n cntEle = [].slice.call(wrapper.childNodes);\n }\n break;\n case 'majorSlot':\n if (this.parent.activeViewOptions.timeScale.majorSlotTemplate) {\n templateName = 'majorSlotTemplate';\n var args = { date: date, type: type };\n cntEle = [].slice.call(this.parent.getMajorSlotTemplate()(args, this.parent, templateName, templateId + templateName, false));\n }\n else {\n wrapper.innerHTML = \"\" + this.getTime(date) + \"\";\n cntEle = [].slice.call(wrapper.childNodes);\n }\n break;\n case 'minorSlot':\n if (this.parent.activeViewOptions.timeScale.minorSlotTemplate) {\n templateName = 'minorSlotTemplate';\n var args = { date: date, type: type };\n cntEle = [].slice.call(this.parent.getMinorSlotTemplate()(args, this.parent, templateName, templateId + templateName, false));\n }\n else {\n cntEle = [].slice.call(wrapper.childNodes);\n }\n break;\n case 'alldayCells':\n if (this.parent.activeViewOptions.cellTemplate) {\n var viewName = this.parent.activeViewOptions.cellTemplateName;\n templateName = 'cellTemplate';\n var args = { date: date, type: type, groupIndex: groupIndex };\n cntEle = [].slice.call(this.parent.getCellTemplate()(args, this.parent, templateName, templateId + viewName + templateName, false));\n }\n break;\n }\n return cntEle;\n };\n VerticalView.prototype.refreshHeader = function () {\n remove(this.element.querySelector('tbody tr'));\n this.renderHeader();\n this.parent.notify(event.contentReady, {});\n };\n VerticalView.prototype.renderLayout = function (type) {\n this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));\n var clsList = [this.baseCssClass, this.viewClass];\n clsList.push(type);\n if (this.parent.activeViewOptions.group.byDate) {\n clsList.push('e-by-date');\n }\n if (!this.parent.activeViewOptions.timeScale.enable) {\n addClass([this.element], [cls.TIMESCALE_DISABLE, this.viewClass]);\n }\n if (this.parent.activeViewOptions.allowVirtualScrolling && !this.parent.uiStateValues.isGroupAdaptive) {\n clsList.push(cls.VIRTUAL_SCROLL_CLASS);\n }\n if (this.parent.rowAutoHeight && this.parent.eventSettings.ignoreWhitespace) {\n clsList.push(cls.IGNORE_WHITESPACE);\n }\n this.renderPanel(type);\n addClass([this.element], clsList);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.element.querySelector('table').setAttribute('role', 'presentation');\n this.colLevels = this.generateColumnLevels();\n this.renderHeader();\n this.renderContent();\n if (this.parent.uiStateValues.isGroupAdaptive && !this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n VerticalView.prototype.renderHeader = function () {\n var tr = createElement('tr');\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n if (this.parent.activeViewOptions.timeScale.enable) {\n var indentTd = createElement('td', { className: cls.LEFT_INDENT_CLASS });\n indentTd.appendChild(this.renderLeftIndent());\n tr.appendChild(indentTd);\n }\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n VerticalView.prototype.renderContent = function () {\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.renderedResources = extend([], this.parent.resourceBase.lastResourceLevel, null, true);\n }\n var tr = createElement('tr');\n var workTd = createElement('td');\n if (this.parent.isAdaptive) {\n workTd.setAttribute('colspan', (this.parent.activeViewOptions.timeScale.enable ? '2' : '1'));\n var scrollContainer = createElement('div', { className: cls.SCROLL_CONTAINER_CLASS });\n if (this.parent.activeViewOptions.timeScale.enable) {\n scrollContainer.appendChild(this.renderTimeCells());\n }\n scrollContainer.appendChild(this.renderContentArea());\n workTd.appendChild(scrollContainer);\n EventHandler.add(scrollContainer, 'scroll', this.onAdaptiveScroll, this);\n EventHandler.add(scrollContainer, Browser.touchMoveEvent, this.onAdaptiveMove, this);\n tr.appendChild(workTd);\n }\n else {\n var levels = this.colLevels.slice(0);\n if (this.parent.virtualScrollModule) {\n this.resetColLevels();\n }\n var wrap = this.renderContentArea();\n workTd.appendChild(wrap);\n if (this.parent.activeViewOptions.timeScale.enable) {\n var timesTd = createElement('td');\n timesTd.appendChild(this.renderTimeCells());\n tr.appendChild(timesTd);\n }\n tr.appendChild(workTd);\n if (this.parent.virtualScrollModule) {\n this.colLevels = levels;\n this.parent.virtualScrollModule.renderVirtualTrack(wrap);\n }\n }\n this.element.querySelector('tbody').appendChild(tr);\n };\n VerticalView.prototype.renderLeftIndent = function () {\n var wrap = createElement('div', { className: cls.LEFT_INDENT_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var rowCount = this.colLevels.length;\n var nth;\n for (var i = 0; i < rowCount; i++) {\n var ntr_1 = trEle.cloneNode();\n var data_1 = { className: [(this.colLevels[parseInt(i.toString(), 10)][0] && this.colLevels[parseInt(i.toString(), 10)][0].className[0])], type: 'emptyCells' };\n if (this.parent.activeViewOptions.showWeekNumber && data_1.className.indexOf(cls.HEADER_CELLS_CLASS) !== -1) {\n data_1.className.push(cls.WEEK_NUMBER_CLASS);\n var weekNo = this.parent.getWeekNumberContent(this.renderDates);\n data_1.template = [createElement('span', {\n innerHTML: '' + weekNo,\n attrs: { title: this.parent.localeObj.getConstant('week') + ' ' + weekNo }\n })];\n }\n nth = this.createTd(data_1);\n this.parent.renderHeaderIndentTemplate(data_1, nth);\n ntr_1.appendChild(nth);\n tbl.querySelector('tbody').appendChild(ntr_1);\n }\n var ntr = trEle.cloneNode();\n var appointmentExpandCollapse = createElement('div', {\n attrs: {\n 'tabindex': '0', 'role': 'list',\n title: this.parent.localeObj.getConstant('expandAllDaySection'), 'aria-disabled': 'false', 'aria-label': 'Expand section'\n },\n className: cls.ALLDAY_APPOINTMENT_SECTION_CLASS + ' ' + cls.APPOINTMENT_ROW_EXPAND_CLASS + ' ' +\n cls.ICON + ' ' + cls.DISABLE_CLASS\n });\n var data = { className: [cls.ALLDAY_CELLS_CLASS], type: 'emptyCells' };\n nth = this.createTd(data);\n nth.appendChild(appointmentExpandCollapse);\n this.parent.renderHeaderIndentTemplate(data, nth);\n ntr.appendChild(nth);\n tbl.querySelector('tbody').appendChild(ntr);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n container.appendChild(wrap);\n var tbl = this.createTableLayout();\n var trEle = createElement('tr', { className: cls.HEADER_ROW_CLASS });\n var rowCount = this.colLevels.length;\n var lastLevel = this.colLevels[rowCount - 1];\n for (var i = 0; i < rowCount; i++) {\n var ntr = trEle.cloneNode();\n var level = this.colLevels[parseInt(i.toString(), 10)];\n for (var j = 0; j < level.length; j++) {\n ntr.appendChild(this.createTd(level[parseInt(j.toString(), 10)]));\n }\n tbl.querySelector('tbody').appendChild(ntr);\n }\n this.createAllDayRow(tbl, lastLevel);\n this.createColGroup(tbl, lastLevel);\n wrap.appendChild(tbl);\n return container;\n };\n VerticalView.prototype.createAllDayRow = function (table, tdData) {\n var ntr = createElement('tr', { className: cls.ALLDAY_ROW_CLASS });\n for (var j = 0; j < tdData.length; j++) {\n var td = extend({}, tdData[parseInt(j.toString(), 10)]);\n td.className = [cls.ALLDAY_CELLS_CLASS];\n td.type = 'alldayCells';\n var ntd = this.createTd(td);\n ntd.setAttribute('data-date', td.date.getTime().toString());\n if (!isNullOrUndefined(td.groupIndex)) {\n ntd.setAttribute('data-group-index', '' + td.groupIndex);\n }\n else if (this.parent.uiStateValues.isGroupAdaptive) {\n ntd.setAttribute('data-group-index', '' + this.parent.uiStateValues.groupIndex);\n }\n this.wireCellEvents(ntd);\n ntr.appendChild(ntd);\n }\n table.querySelector('tbody').appendChild(ntr);\n var thead = createElement('thead');\n thead.appendChild(this.parent.eventBase.createEventWrapper('allDay'));\n prepend([thead], table);\n };\n VerticalView.prototype.createTd = function (td) {\n var tdEle = createElement('td');\n this.addAttributes(td, tdEle);\n if (td.date && td.type) {\n var ele = this.getTdContent(td.date, td.type, td.groupIndex);\n if (ele && ele.length) {\n append(ele, tdEle);\n }\n }\n if (!this.parent.isMinMaxDate(util.resetTime(new Date('' + td.date)))) {\n addClass([tdEle], cls.DISABLE_DATES);\n }\n if (td.type === 'resourceHeader') {\n this.setResourceHeaderContent(tdEle, td);\n }\n if (td.type === 'dateHeader' && td.className.indexOf(cls.HEADER_CELLS_CLASS) >= 0) {\n tdEle.setAttribute('data-date', td.date.getTime().toString());\n if (!isNullOrUndefined(td.groupIndex)) {\n tdEle.setAttribute('data-group-index', '' + td.groupIndex);\n }\n this.wireMouseEvents(tdEle);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n VerticalView.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.parent.workCellAction.cellMouseDown, this.parent.workCellAction);\n this.wireMouseEvents(element);\n };\n VerticalView.prototype.wireMouseEvents = function (element) {\n EventHandler.add(element, 'click', this.parent.workCellAction.cellClick, this.parent.workCellAction);\n if (!this.parent.isAdaptive) {\n EventHandler.add(element, 'dblclick', this.parent.workCellAction.cellDblClick, this.parent.workCellAction);\n }\n };\n VerticalView.prototype.renderTimeCells = function () {\n var _this = this;\n var wrap = createElement('div', { className: cls.TIME_CELLS_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var handler = function (r) {\n r.type = r.first ? 'majorSlot' : 'minorSlot';\n r.className = r.last ? [cls.TIME_CELLS_CLASS, cls.TIME_SLOT_CLASS] : [cls.TIME_SLOT_CLASS];\n var ntr = trEle.cloneNode();\n var data = { date: r.date, type: r.type, className: r.className };\n ntr.appendChild(_this.createTd(data));\n tbl.querySelector('tbody').appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderContentArea = function () {\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n this.setAriaAttributes(tbl);\n this.addAutoHeightClass(tbl);\n this.renderContentTable(tbl);\n this.createColGroup(tbl, this.colLevels.slice(-1)[0]);\n wrap.appendChild(tbl);\n this.wireCellEvents(tbl.querySelector('tbody'));\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n EventHandler.add(wrap, Browser.touchMoveEvent, this.onAdaptiveMove, this);\n return wrap;\n };\n VerticalView.prototype.renderContentTable = function (table) {\n var tBody = table.querySelector('tbody');\n append(this.getContentRows(), tBody);\n this.renderContentTableHeader(table);\n };\n VerticalView.prototype.getContentRows = function () {\n var _this = this;\n var rows = [];\n var tr = createElement('tr');\n var td = createElement('td', { attrs: { 'aria-selected': 'false' } });\n var handler = function (r) {\n var ntr = tr.cloneNode();\n for (var _i = 0, _a = _this.colLevels[_this.colLevels.length - 1]; _i < _a.length; _i++) {\n var tdData = _a[_i];\n var ntd = _this.createContentTd(tdData, r, td);\n ntr.appendChild(ntd);\n }\n rows.push(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n return rows;\n };\n VerticalView.prototype.createContentTd = function (tdData, r, td) {\n var ntd = td.cloneNode();\n if (tdData.colSpan) {\n ntd.setAttribute('colspan', tdData.colSpan.toString());\n }\n var clsName = this.getContentTdClass(r);\n var cellDate = util.resetTime(tdData.date);\n if (!this.parent.isMinMaxDate(cellDate)) {\n clsName.push(cls.DISABLE_DATES);\n }\n util.setTime(cellDate, util.getDateInMs(r.date));\n var type = 'workCells';\n if (tdData.className.indexOf(cls.RESOURCE_PARENT_CLASS) !== -1) {\n clsName.push(cls.RESOURCE_GROUP_CELLS_CLASS);\n type = 'resourceGroupCells';\n }\n if (this.parent.workHours.highlight && ((this.parent.activeViewOptions.timeScale.enable &&\n this.isWorkHour(cellDate, tdData.startHour, tdData.endHour, tdData.workDays)) ||\n (!this.parent.activeViewOptions.timeScale.enable && this.isWorkDay(cellDate, tdData.workDays)))) {\n clsName.push(cls.WORK_HOURS_CLASS);\n }\n addClass([ntd], clsName);\n if (this.parent.activeViewOptions.cellTemplate) {\n var args_1 = { date: cellDate, type: type, groupIndex: tdData.groupIndex };\n var scheduleId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.cellTemplateName;\n var templateId = scheduleId + viewName + 'cellTemplate';\n var tooltipTemplate = [].slice.call(this.parent.getCellTemplate()(args_1, this.parent, 'cellTemplate', templateId, false));\n append(tooltipTemplate, ntd);\n }\n ntd.setAttribute('data-date', cellDate.getTime().toString());\n if (!isNullOrUndefined(tdData.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) {\n var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n tdData.groupIndex;\n ntd.setAttribute('data-group-index', '' + groupIndex);\n }\n var args = { elementType: type, element: ntd, date: cellDate, groupIndex: tdData.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return ntd;\n };\n VerticalView.prototype.getContentTdClass = function (r) {\n return r.last ? [cls.WORK_CELLS_CLASS] : [cls.WORK_CELLS_CLASS, cls.ALTERNATE_CELLS_CLASS];\n };\n VerticalView.prototype.renderContentTableHeader = function (table) {\n var thead = createElement('thead');\n thead.appendChild(this.parent.eventBase.createEventWrapper());\n if (this.parent.activeViewOptions.timeScale.enable) {\n thead.appendChild(this.parent.eventBase.createEventWrapper('timeIndicator'));\n }\n prepend([thead], table);\n };\n VerticalView.prototype.getScrollableElement = function () {\n if (this.parent.isAdaptive && !this.isTimelineView()) {\n return this.element.querySelector('.' + cls.SCROLL_CONTAINER_CLASS);\n }\n else {\n return this.getContentAreaElement();\n }\n };\n VerticalView.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.TIME_CELLS_WRAP_CLASS);\n };\n VerticalView.prototype.getEndDateFromStartDate = function (start) {\n var msMajorInterval = this.parent.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.parent.activeViewOptions.timeScale.slotCount;\n var end = new Date(start.getTime());\n end.setMilliseconds(end.getMilliseconds() + msInterval);\n return end;\n };\n VerticalView.prototype.getTimeSlotRows = function (handler) {\n var rows = [];\n var startHour = this.getStartHour();\n var endHour = this.getEndHour();\n var msMajorInterval = this.parent.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.parent.activeViewOptions.timeScale.slotCount;\n var length = Math.round(util.MS_PER_DAY / msInterval);\n var msStartHour = startHour.getTime();\n var msEndHour = endHour.getTime();\n if (msStartHour !== msEndHour) {\n var duration = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n length = (Math.abs(msEndHour - msStartHour) / msInterval) - ((new Date(msEndHour).getTimezoneOffset()\n - new Date(msStartHour).getTimezoneOffset()) / duration);\n }\n if (!this.parent.activeViewOptions.timeScale.enable) {\n length = 1;\n }\n var start = this.parent.getStartEndTime(this.parent.workHours.start);\n var end = this.parent.getStartEndTime(this.parent.workHours.end);\n for (var i = 0; i < length; i++) {\n var dt = new Date(msStartHour + (msInterval * i));\n if (util.isDaylightSavingTime(dt) || new Date(msStartHour).getTimezoneOffset() !== dt.getTimezoneOffset()) {\n var timeOffset = new Date(msStartHour).getTimezoneOffset() - dt.getTimezoneOffset();\n dt = new Date(dt.getTime() - (1000 * 60 * timeOffset));\n }\n var majorTickDivider = i % (msMajorInterval / msInterval);\n var row = {\n date: new Date('' + dt),\n startHour: start,\n endHour: end,\n first: (majorTickDivider === 0),\n middle: (majorTickDivider < this.parent.activeViewOptions.timeScale.slotCount - 1),\n last: (majorTickDivider === this.parent.activeViewOptions.timeScale.slotCount - 1),\n type: ''\n };\n if (handler) {\n handler(row);\n }\n rows.push(row);\n }\n return rows;\n };\n VerticalView.prototype.getAdjustedDate = function (startTime) {\n if (!this.parent.activeViewOptions.timeScale.enable) {\n return new Date(startTime.setHours(0, 0, 0, 0));\n }\n else {\n var timeSlots = this.getTimeSlotRows();\n var startDate = new Date(new Date(timeSlots[0].date.getTime()).\n setHours(startTime.getHours(), startTime.getMinutes(), startTime.getMilliseconds()));\n for (var i = 0; i < timeSlots.length; i++) {\n if (timeSlots[parseInt(i.toString(), 10)].date.getTime() > startDate.getTime()) {\n startTime.setHours(timeSlots[i - 1].date.getHours(), timeSlots[i - 1].date.getMinutes(), timeSlots[i - 1].date.getMilliseconds());\n return new Date(startTime);\n }\n }\n }\n return null;\n };\n VerticalView.prototype.destroy = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.clearCurrentTimeIndicatorTimer();\n if (this.element) {\n if (this.appointment) {\n this.appointment.destroy();\n this.appointment = null;\n }\n var contentScrollableEle = this.getContentAreaElement();\n if (contentScrollableEle) {\n EventHandler.remove(contentScrollableEle, 'scroll', this.onContentScroll);\n EventHandler.remove(contentScrollableEle, Browser.touchMoveEvent, this.onAdaptiveMove);\n }\n if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\n if (this.parent.scheduleTouchModule) {\n this.parent.scheduleTouchModule.resetValues();\n }\n _super.prototype.destroy.call(this);\n }\n };\n return VerticalView;\n}(ViewBase));\nexport { VerticalView };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable max-len */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNullOrUndefined, setStyleAttribute, extend, EventHandler, createElement } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\nimport { MonthEvent } from './month';\nvar EVENT_GAP = 2;\nvar BLOCK_INDICATOR_WIDTH = 22;\nvar BLOCK_INDICATOR_HEIGHT = 18;\n/**\n * Timeline view events render\n */\nvar TimelineEvent = /** @class */ (function (_super) {\n __extends(TimelineEvent, _super);\n function TimelineEvent(parent, type) {\n var _this = _super.call(this, parent) || this;\n _this.startHour = _this.parent.activeView.getStartHour();\n _this.endHour = _this.parent.activeView.getEndHour();\n _this.slotCount = _this.parent.activeViewOptions.timeScale.slotCount;\n _this.interval = _this.parent.activeViewOptions.timeScale.interval;\n _this.day = 0;\n _this.rowIndex = 0;\n _this.cellTops = [];\n _this.renderType = type;\n _this.eventContainers = [].slice.call(_this.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));\n var tr = [].slice.call(_this.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr'));\n _this.dayLength = tr.length === 0 ? 0 : tr[0].children.length;\n _this.content = _this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n return _this;\n }\n TimelineEvent.prototype.getSlotDates = function () {\n this.slots = [];\n this.slots.push(this.parent.activeView.renderDates.map(function (date) { return +date; }));\n if (this.parent.activeViewOptions.headerRows.length > 0 &&\n this.parent.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour') {\n this.renderType = 'day';\n var workCell = this.content.querySelector('.' + cls.WORK_CELLS_CLASS);\n this.cellWidth = workCell.getBoundingClientRect().width / +(workCell.getAttribute('colspan') || 1);\n this.slotsPerDay = 1;\n }\n else {\n this.slotsPerDay = (this.dayLength / this.dateRender.length);\n }\n };\n TimelineEvent.prototype.getOverlapEvents = function (date, appointments) {\n var appointmentsList = [];\n if (this.renderType === 'day') {\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(new Date(date.getTime())).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(new Date(date.getTime())).getTime())) {\n appointmentsList.push(app);\n }\n }\n }\n else {\n for (var _a = 0, appointments_2 = appointments; _a < appointments_2.length; _a++) {\n var app = appointments_2[_a];\n var eventData = app.data;\n if (eventData.trimStartTime.getTime() <= date.getTime() &&\n eventData.trimEndTime.getTime() > date.getTime()) {\n appointmentsList.push(app);\n }\n }\n }\n return appointmentsList;\n };\n TimelineEvent.prototype.getSortComparerIndex = function (startDate, endDate) {\n var appIndex = -1;\n var appointments = this.renderedEvents;\n if (appointments.length > 0) {\n var appointmentsList = this.getOverlapSortComparerEvents(startDate, endDate, appointments);\n var appLevel = appointmentsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n TimelineEvent.prototype.getOverlapSortComparerEvents = function (startDate, endDate, appointmentsCollection) {\n var appointments = [];\n for (var _i = 0, appointmentsCollection_1 = appointmentsCollection; _i < appointmentsCollection_1.length; _i++) {\n var app = appointmentsCollection_1[_i];\n if (this.renderType === 'day') {\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(new Date(startDate.getTime())).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(new Date(startDate.getTime())).getTime())) {\n appointments.push(app);\n }\n }\n else {\n var eventData = app.data;\n if (((eventData.trimStartTime.getTime() <= startDate.getTime()) && (startDate.getTime() < eventData.trimEndTime.getTime())) ||\n ((startDate.getTime() <= eventData.trimStartTime.getTime()) && (eventData.trimStartTime.getTime() < endDate.getTime()))) {\n appointments.push(app);\n }\n }\n }\n return appointments;\n };\n TimelineEvent.prototype.renderResourceEvents = function () {\n this.removeHeightProperty(cls.RESOURCE_COLUMN_TABLE_CLASS);\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.renderedResources;\n if (this.parent.crudModule && this.parent.crudModule.crudObj.isCrudAction) {\n for (var i = 0, len = this.parent.crudModule.crudObj.sourceEvent.length; i < len; i++) {\n var source = this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)];\n this.rowIndex = source.groupIndex;\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays, source);\n if (this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)] && this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)].groupIndex !==\n this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)].groupIndex) {\n var target = this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)];\n this.rowIndex = target.groupIndex;\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays, target);\n }\n }\n this.parent.crudModule.crudObj.isCrudAction = false;\n }\n else {\n for (var i = 0; i < resources.length; i++) {\n this.rowIndex = i;\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays, resources[parseInt(i.toString(), 10)]);\n }\n }\n };\n TimelineEvent.prototype.renderEvents = function (event, resIndex, appointmentsList) {\n var startTime = event[this.fields.startTime];\n var endTime = event[this.fields.endTime];\n if ((startTime.getTime() < this.parent.minDate.getTime()) || (endTime.getTime() > this.parent.maxDate.getTime())) {\n return;\n }\n var eventData = event.data;\n startTime = this.getStartTime(event, eventData);\n endTime = this.getEndTime(event, eventData);\n var startEndHours = util.getStartEndHours(event[this.fields.startTime], this.startHour, this.endHour);\n var eventDates = this.updateEventMinimumDuration(startEndHours, startTime, endTime);\n startTime = eventDates.startDate;\n endTime = eventDates.endDate;\n this.day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime())));\n if (this.day < 0) {\n return;\n }\n var cellTd = this.getCellTd();\n var overlapCount = (isNullOrUndefined(this.parent.eventSettings.sortComparer)) ? this.getIndex(startTime) : this.getSortComparerIndex(startTime, endTime);\n event.Index = overlapCount;\n var appHeight = this.eventHeight;\n var diffInDays = eventData.count;\n var eventObj = extend({}, event, null, true);\n eventObj[this.fields.startTime] = eventData[this.fields.startTime];\n eventObj[this.fields.endTime] = eventData[this.fields.endTime];\n var currentDate = util.resetTime(new Date(this.dateRender[this.day].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var isValidEvent = true;\n if (this.isDayProcess() || eventObj[this.fields.isAllDay]) {\n isValidEvent = true;\n }\n else {\n isValidEvent = this.isValidEvent(eventObj, startTime, endTime, schedule);\n }\n if (startTime <= endTime && isValidEvent) {\n var appWidth = this.getEventWidth(startTime, endTime, event[this.fields.isAllDay], diffInDays);\n appWidth = this.renderType === 'day' ? appWidth - 2 : appWidth;\n var appLeft = 0;\n var appRight = 0;\n var position = this.getPosition(startTime, endTime, event[this.fields.isAllDay], this.day);\n appWidth = (appWidth <= 0) ? this.cellWidth : appWidth; // appWidth 0 when start and end time as same\n this.renderedEvents.push(extend({}, event, null, true));\n if (isNullOrUndefined(this.cellTops[parseInt(resIndex.toString(), 10)])) {\n this.cellTops[parseInt(resIndex.toString(), 10)] = this.getRowTop(resIndex);\n }\n var top_1 = this.cellTops[parseInt(resIndex.toString(), 10)];\n var appTop = (top_1 + (this.maxHeight ? 0 : EVENT_GAP)) + (overlapCount * (appHeight + EVENT_GAP));\n appLeft = (this.parent.enableRtl) ? 0 : position;\n appRight = (this.parent.enableRtl) ? position : 0;\n var height = ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight;\n var renderApp = this.maxOrIndicator ? overlapCount < 1 ? true : false : this.cellHeight > height;\n if (this.parent.rowAutoHeight || renderApp) {\n var appointmentElement = void 0;\n if (isNullOrUndefined(this.inlineValue)) {\n appointmentElement = this.createAppointmentElement(event, resIndex);\n }\n else {\n appointmentElement = this.parent.inlineModule.createInlineAppointmentElement();\n }\n this.applyResourceColor(appointmentElement, event, 'backgroundColor', this.groupOrder);\n setStyleAttribute(appointmentElement, {\n 'width': appWidth + 'px', 'left': appLeft + 'px', 'right': appRight + 'px', 'top': appTop + 'px'\n });\n this.wireAppointmentEvents(appointmentElement, event);\n if (this.parent.rowAutoHeight) {\n var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var conWidth = conWrap.getBoundingClientRect().width;\n var isWithoutScroll = conWrap.offsetHeight === conWrap.clientHeight &&\n conWrap.offsetWidth === conWrap.clientWidth;\n this.renderEventElement(event, appointmentElement, cellTd);\n var firstChild = this.getFirstChild(resIndex);\n this.updateCellHeight(firstChild, height);\n if (isWithoutScroll &&\n (conWrap.offsetWidth > conWrap.clientWidth || conWidth !== conWrap.getBoundingClientRect().width)) {\n this.adjustAppointments(conWidth);\n }\n }\n else {\n this.renderEventElement(event, appointmentElement, cellTd);\n }\n }\n else {\n for (var i = 0; i < diffInDays; i++) {\n var moreIndicator = cellTd.querySelector('.' + cls.MORE_INDICATOR_CLASS);\n var appPos = (this.parent.enableRtl) ? appRight : appLeft;\n appPos = (Math.floor(appPos / this.cellWidth) * this.cellWidth);\n var interval = this.interval / this.slotCount;\n var startDate = (this.parent.activeViewOptions.option === 'TimelineMonth' || this.renderType === 'day' || i !== 0) ?\n new Date(this.dateRender[this.day + i].getTime()) : new Date(startTime);\n var endDate = util.addDays(this.dateRender[this.day + i], 1);\n if (this.parent.activeViewOptions.option === 'TimelineMonth' || this.renderType === 'day') {\n var position_1 = this.getPosition(startDate, endDate, event[this.fields.isAllDay], (this.day + i));\n this.renderTimelineMoreIndicator(startTime, startDate, endDate, appHeight, interval, resIndex, appointmentsList, top_1, appLeft, appRight, cellTd, moreIndicator, appPos, position_1);\n }\n else {\n var slotCount = (util.getUniversalTime(endTime) - util.getUniversalTime(startTime)) / util.MS_PER_MINUTE *\n this.slotCount / this.interval;\n for (var k = 0; k < slotCount; k++) {\n startDate = (k === 0) ? new Date(startDate.getTime()) : new Date(startDate.getTime() + (60000 * interval));\n endDate = new Date(startDate.getTime() + (60000 * interval));\n if (endDate.getTime() > endTime.getTime()) {\n break;\n }\n var position_2 = this.getPosition(startDate, endDate, false, (this.day + i));\n if (appPos > position_2) {\n break;\n }\n appPos = position_2;\n this.renderTimelineMoreIndicator(startTime, startDate, endDate, appHeight, interval, resIndex, appointmentsList, top_1, appLeft, appRight, cellTd, moreIndicator, appPos, position_2);\n }\n }\n }\n }\n }\n this.parent.renderTemplates();\n };\n TimelineEvent.prototype.renderTimelineMoreIndicator = function (startTime, startDate, endDate, appHeight, interval, resIndex, appointmentsList, top, appLeft, appRight, cellTd, moreIndicator, appPos, position) {\n appLeft = (this.parent.enableRtl) ? appRight = position : position;\n appPos = (this.parent.enableRtl) ? appRight : appLeft;\n appPos = (Math.floor(appPos / this.cellWidth) * this.cellWidth);\n if ((cellTd && isNullOrUndefined(moreIndicator)) ||\n (!this.isAlreadyAvail(appPos, cellTd))) {\n var startDateTime = (this.parent.activeViewOptions.option === 'TimelineMonth' || this.renderType === 'day') ? new Date(+startTime) : startDate;\n var slotStartTime = (new Date(startDateTime.setMinutes(Math.floor(startDateTime.getMinutes() / interval) * interval)));\n var slotEndTime = new Date(slotStartTime.getTime() + (60000 * interval));\n var groupIndex = void 0;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !isNullOrUndefined(resIndex)) {\n groupIndex = resIndex.toString();\n }\n var filterEvents = this.getFilterEvents(startDate, endDate, slotStartTime, slotEndTime, groupIndex, appointmentsList);\n var appArea = this.cellHeight - this.moreIndicatorHeight;\n appHeight = this.withIndicator ? appArea - EVENT_GAP : appHeight;\n var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));\n var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);\n var moreIndicatorElement = void 0;\n if (this.renderType === 'day') {\n moreIndicatorElement = this.getMoreIndicatorElement(count, startDate, endDate);\n }\n else {\n moreIndicatorElement = this.getMoreIndicatorElement(count, slotStartTime, slotEndTime);\n }\n if (!isNullOrUndefined(groupIndex)) {\n moreIndicatorElement.setAttribute('data-group-index', groupIndex);\n }\n moreIndicatorElement.style.top = top + appArea + 'px';\n moreIndicatorElement.style.width = this.cellWidth + 'px';\n moreIndicatorElement.style.left = (Math.floor(appLeft / this.cellWidth) * this.cellWidth) + 'px';\n moreIndicatorElement.style.right = (Math.floor(appRight / this.cellWidth) * this.cellWidth) + 'px';\n this.renderElement(cellTd, moreIndicatorElement);\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n };\n TimelineEvent.prototype.updateCellHeight = function (cell, height) {\n var cellHeight = cell.style.height === '' ? this.cellHeight : parseInt(cell.style.height, 10);\n if (height > cellHeight) {\n setStyleAttribute(cell, { 'height': height + 'px' });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceCell = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_TABLE_CLASS + ' ' + 'tbody td[data-group-index=\"' +\n cell.getAttribute('data-group-index') + '\"]');\n if (resourceCell) {\n setStyleAttribute(resourceCell, { 'height': height + 'px' });\n }\n }\n var monthHeader = this.parent.element.querySelector('.e-month-header-wrapper table tr:nth-child(' +\n (cell.parentElement.rowIndex + 1) + ') td');\n if (monthHeader) {\n setStyleAttribute(monthHeader, { 'height': height + 'px' });\n }\n }\n };\n TimelineEvent.prototype.adjustAppointments = function (conWidth) {\n var _this = this;\n var tr = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr');\n this.cellWidth = this.workCells[0].getBoundingClientRect().width;\n var currentPercentage = (this.cellWidth * tr.children.length) / (conWidth / 100);\n var apps = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n apps.forEach(function (app) {\n if (_this.parent.enableRtl && app.style.right !== '0px') {\n app.style.right = ((parseFloat(app.style.right) / 100) * currentPercentage) + 'px';\n }\n else if (app.style.left !== '0px') {\n app.style.left = ((parseFloat(app.style.left) / 100) * currentPercentage) + 'px';\n }\n app.style.width = ((parseFloat(app.style.width) / 100) * currentPercentage) + 'px';\n });\n };\n TimelineEvent.prototype.getFirstChild = function (index) {\n var query = '.' + cls.CONTENT_TABLE_CLASS + ' tbody td';\n var groupIndex = '';\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n groupIndex = '[data-group-index=\"' + index.toString() + '\"]';\n }\n var td = this.parent.element.querySelector(query + groupIndex);\n return td;\n };\n TimelineEvent.prototype.updateBlockElements = function () {\n var blockElement = [].slice.call(this.element.querySelectorAll('.' + cls.BLOCK_APPOINTMENT_CLASS));\n for (var _i = 0, blockElement_1 = blockElement; _i < blockElement_1.length; _i++) {\n var element = blockElement_1[_i];\n var resIndex = parseInt(element.getAttribute('data-group-index'), 10);\n var firstChild = this.getFirstChild(resIndex);\n element.style.height = firstChild.offsetHeight + 'px';\n var width = Math.round(element.offsetWidth / firstChild.offsetWidth);\n element.style.width = (firstChild.offsetWidth * width) + 'px';\n }\n var blockIndicator = [].slice.call(this.element.querySelectorAll('.' + cls.BLOCK_INDICATOR_CLASS));\n for (var _a = 0, blockIndicator_1 = blockIndicator; _a < blockIndicator_1.length; _a++) {\n var element = blockIndicator_1[_a];\n var resIndex = parseInt(element.getAttribute('data-group-index'), 10);\n element.style.top = this.getRowTop(resIndex) +\n this.getFirstChild(resIndex).offsetHeight - BLOCK_INDICATOR_HEIGHT + 'px';\n }\n };\n TimelineEvent.prototype.getStartTime = function (event, eventData) {\n var startTime = event[this.fields.startTime];\n var schedule = util.getStartEndHours(startTime, this.startHour, this.endHour);\n if (this.isDayProcess()) {\n startTime = event[this.fields.startTime];\n }\n else {\n if (schedule.startHour.getTime() >= eventData[this.fields.startTime]) {\n startTime = schedule.startHour;\n }\n else if (schedule.endHour.getTime() <= eventData[this.fields.startTime]) {\n startTime = this.getNextDay(schedule.startHour, eventData);\n }\n else {\n startTime = eventData[this.fields.startTime];\n }\n }\n // To overcome the overflow\n eventData.trimStartTime = (event[this.fields.isAllDay]) ? schedule.startHour : eventData[this.fields.startTime];\n return startTime;\n };\n TimelineEvent.prototype.getNextDay = function (startTime, eventData) {\n var startDate;\n for (var i = 1; i <= this.dateRender.length; i++) {\n startDate = util.addDays(startTime, i);\n if (this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime()))) !== -1) {\n eventData.count = eventData.count - 1;\n return startDate;\n }\n }\n return startDate;\n };\n TimelineEvent.prototype.getEndTime = function (event, eventData) {\n var endTime = event[this.fields.endTime];\n var schedule = util.getStartEndHours(endTime, this.startHour, this.endHour);\n if (this.isDayProcess()) {\n endTime = eventData[this.fields.endTime];\n }\n else {\n endTime = eventData[this.fields.endTime];\n if (schedule.endHour.getTime() <= eventData[this.fields.endTime] || event[this.fields.isAllDay]) {\n endTime = schedule.endHour;\n }\n if (schedule.startHour.getTime() >= eventData[this.fields.endTime].getTime() && !event[this.fields.isAllDay]) {\n endTime = this.getPreviousDay(schedule.startHour, schedule.endHour, eventData);\n }\n }\n // To overcome the overflow\n eventData.trimEndTime = (event[this.fields.isAllDay]) ? schedule.endHour : eventData[this.fields.endTime];\n return endTime;\n };\n TimelineEvent.prototype.getPreviousDay = function (startTime, endTime, eventData) {\n for (var i = 1; i <= this.dateRender.length; i++) {\n var endDate = util.addDays(endTime, -i);\n if (this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime()))) !== -1) {\n endDate = util.resetTime(new Date(endDate.getTime()));\n endDate.setHours(endTime.getHours(), endTime.getMinutes(), endTime.getSeconds());\n var count = eventData.count;\n var actualEndTime = eventData[this.fields.endTime];\n eventData.count = actualEndTime.getHours() !== 0 || actualEndTime.getMinutes() !== 0 ? count - 1 : count;\n return endDate;\n }\n }\n return eventData[this.fields.endTime];\n };\n TimelineEvent.prototype.getEventWidth = function (startDate, endDate, isAllDay, count) {\n if (this.renderType === 'day' || isAllDay) {\n return (count * this.slotsPerDay) * this.cellWidth;\n }\n if (this.isSameDay(startDate, endDate)) {\n return this.getSameDayEventsWidth(startDate, endDate);\n }\n else {\n return this.getSpannedEventsWidth(startDate, endDate, count);\n }\n };\n TimelineEvent.prototype.getSameDayEventsWidth = function (startDate, endDate) {\n return ((util.getUniversalTime(endDate) - util.getUniversalTime(startDate)) /\n util.MS_PER_MINUTE * (this.cellWidth * this.slotCount) / this.interval);\n };\n TimelineEvent.prototype.getSpannedEventsWidth = function (startDate, endDate, diffInDays) {\n var width = (diffInDays * this.slotsPerDay) * this.cellWidth;\n var endWidth;\n var start = util.getStartEndHours(util.resetTime(new Date(startDate.getTime())), this.startHour, this.endHour);\n var startWidth = this.getSameDayEventsWidth(start.startHour, startDate);\n if (this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(endDate.getTime()))) === -1) {\n endWidth = 0;\n }\n else {\n var end = util.getStartEndHours(util.resetTime(new Date(endDate.getTime())), this.startHour, this.endHour);\n endWidth = this.getSameDayEventsWidth(endDate, end.endHour);\n endWidth = ((this.slotsPerDay * this.cellWidth) === endWidth) ? 0 : endWidth;\n }\n var spannedWidth = startWidth + endWidth;\n return (width > spannedWidth) ? width - spannedWidth : width - startWidth;\n };\n TimelineEvent.prototype.isSameDay = function (startTime, endTime) {\n var startDay = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime())));\n var endDay = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(endTime.getTime())));\n return (startDay === endDay);\n };\n TimelineEvent.prototype.getAppointmentLeft = function (schedule, startTime, day) {\n var slotTd = (this.isSameDay(startTime, schedule.startHour)) ?\n ((util.getUniversalTime(startTime) - util.getUniversalTime(schedule.startHour)) /\n (util.MS_PER_MINUTE * this.interval)) * this.slotCount : 0;\n if (day === 0) {\n return slotTd;\n }\n else {\n var daySlot = Math.round((((util.getUniversalTime(schedule.endHour) - util.getUniversalTime(schedule.startHour)) /\n util.MS_PER_MINUTE) / this.interval) * this.slotCount);\n return (daySlot * day) + slotTd;\n }\n };\n TimelineEvent.prototype.getPosition = function (startTime, endTime, isAllDay, day) {\n if (this.renderType === 'day' || isAllDay) {\n return (day * this.slotsPerDay) * this.cellWidth;\n }\n var currentDate = util.resetTime(new Date(this.dateRender[parseInt(day.toString(), 10)].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var cellIndex;\n if (schedule.endHour.getTime() <= endTime.getTime() && schedule.startHour.getTime() >= startTime.getTime()) {\n cellIndex = this.getAppointmentLeft(schedule, schedule.startHour, day);\n }\n else if (schedule.endHour.getTime() <= endTime.getTime()) {\n cellIndex = this.getAppointmentLeft(schedule, startTime, day);\n }\n else if (schedule.startHour.getTime() >= startTime.getTime()) {\n cellIndex = this.getAppointmentLeft(schedule, schedule.startHour, day);\n }\n else {\n cellIndex = this.getAppointmentLeft(schedule, startTime, day);\n }\n return cellIndex * this.cellWidth;\n };\n TimelineEvent.prototype.getFilterEvents = function (startDate, endDate, startTime, endTime, gIndex, eventsList) {\n if (this.renderType === 'day') {\n return this.getFilteredEvents(startDate, endDate, gIndex, eventsList);\n }\n else {\n return this.getFilteredEvents(startTime, endTime, gIndex, eventsList);\n }\n };\n TimelineEvent.prototype.isAlreadyAvail = function (appPos, cellTd) {\n var moreIndicator = [].slice.call(cellTd.querySelectorAll('.' + cls.MORE_INDICATOR_CLASS));\n for (var i = 0; i < moreIndicator.length; i++) {\n var indicatorPos = void 0;\n if (moreIndicator) {\n indicatorPos = (this.parent.enableRtl) ? moreIndicator[parseInt(i.toString(), 10)].style.right : moreIndicator[parseInt(i.toString(), 10)].style.left;\n }\n if (parseInt(indicatorPos, 10) === Math.floor(appPos)) {\n return true;\n }\n }\n return false;\n };\n TimelineEvent.prototype.getRowTop = function (resIndex) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n return this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS +\n ' ' + 'tbody td[data-group-index=\"' + resIndex.toString() + '\"]').offsetTop;\n }\n return 0;\n };\n TimelineEvent.prototype.getCellTd = function () {\n var wrapIndex = this.parent.uiStateValues.isGroupAdaptive ? 0 : this.rowIndex;\n return this.eventContainers[parseInt(wrapIndex.toString(), 10)];\n };\n TimelineEvent.prototype.renderBlockIndicator = function (cellTd, position, resIndex) {\n // No need to render block icon for Year, Month and Week header rows\n if (this.parent.headerRows.length > 0 &&\n (this.parent.headerRows[this.parent.headerRows.length - 1].option !== 'Hour' ||\n this.parent.headerRows[this.parent.headerRows.length - 1].option !== 'Date')) {\n return;\n }\n position = (Math.floor(position / this.cellWidth) * this.cellWidth) + this.cellWidth - BLOCK_INDICATOR_WIDTH;\n if (!this.isAlreadyAvail(position, cellTd)) {\n var blockIndicator = createElement('div', { className: 'e-icons ' + cls.BLOCK_INDICATOR_CLASS });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n blockIndicator.setAttribute('data-group-index', resIndex.toString());\n }\n if (this.parent.enableRtl) {\n blockIndicator.style.right = position + 'px';\n }\n else {\n blockIndicator.style.left = position + 'px';\n }\n blockIndicator.style.top = this.getRowTop(resIndex) + this.cellHeight - BLOCK_INDICATOR_HEIGHT + 'px';\n this.renderElement(cellTd, blockIndicator);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimelineEvent.prototype.setMaxEventHeight = function (event, cell) {\n setStyleAttribute(event, {\n 'height': (this.cellHeight - (this.maxHeight ? 0 : EVENT_GAP) - (this.maxHeight ? 0 : this.moreIndicatorHeight)) + 'px'\n });\n };\n TimelineEvent.prototype.isDayProcess = function () {\n if (this.parent.currentView === 'TimelineMonth' || !this.parent.activeViewOptions.timeScale.enable ||\n (this.parent.activeViewOptions.headerRows.length > 0 &&\n this.parent.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour')) {\n return true;\n }\n return false;\n };\n TimelineEvent.prototype.destroy = function () {\n this.renderType = null;\n this.eventContainers = null;\n this.dayLength = null;\n this.content = null;\n _super.prototype.destroy.call(this);\n this.parent = null;\n };\n return TimelineEvent;\n}(MonthEvent));\nexport { TimelineEvent };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { addClass, Browser, EventHandler, remove, closest, extend, formatUnit, setStyleAttribute, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ActionBase } from '../actions/action-base';\nimport { MonthEvent } from '../event-renderer/month';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Schedule events resize actions\n */\nvar Resize = /** @class */ (function (_super) {\n __extends(Resize, _super);\n function Resize() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Resize.prototype.wireResizeEvent = function (element) {\n var resizeElement = [].slice.call(element.querySelectorAll('.' + cls.EVENT_RESIZE_CLASS));\n for (var _i = 0, resizeElement_1 = resizeElement; _i < resizeElement_1.length; _i++) {\n var element_1 = resizeElement_1[_i];\n EventHandler.add(element_1, Browser.touchStartEvent, this.resizeStart, this);\n }\n };\n Resize.prototype.resizeHelper = function () {\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.activeViewOptions.group.allowGroupEdit) {\n for (var i = 0, len = this.actionObj.originalElement.length; i < len; i++) {\n var cloneElement = this.createCloneElement(this.actionObj.originalElement[parseInt(i.toString(), 10)]);\n this.actionObj.cloneElement[parseInt(i.toString(), 10)] = cloneElement;\n if (this.actionObj.element === this.actionObj.originalElement[parseInt(i.toString(), 10)]) {\n this.actionObj.clone = cloneElement;\n }\n }\n }\n else {\n if (this.actionObj.element) {\n this.actionObj.clone = this.createCloneElement(this.actionObj.element);\n }\n this.actionObj.cloneElement = [this.actionObj.clone];\n this.actionObj.originalElement = [this.actionObj.element];\n }\n };\n Resize.prototype.resizeStart = function (e) {\n var _this = this;\n this.actionObj.action = 'resize';\n this.actionObj.slotInterval = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n this.actionObj.interval = this.actionObj.slotInterval;\n var resizeTarget = closest(e.target, '.' + cls.EVENT_RESIZE_CLASS);\n this.actionObj.element = closest(resizeTarget, '.' + cls.APPOINTMENT_CLASS);\n this.actionObj.event = this.parent.eventBase.getEventByGuid(this.actionObj.element.getAttribute('data-guid'));\n var eventObj = extend({}, this.actionObj.event, null, true);\n var resizeArgs = {\n cancel: false,\n data: eventObj,\n element: this.actionObj.element,\n event: e,\n interval: this.actionObj.interval,\n scroll: { enable: true, scrollBy: 30, timeDelay: 100 }\n };\n this.parent.trigger(event.resizeStart, resizeArgs, function (resizeEventArgs) {\n if (resizeEventArgs.cancel) {\n return;\n }\n _this.actionClass('addClass');\n _this.parent.uiStateValues.action = true;\n _this.resizeEdges = {\n left: resizeTarget.classList.contains(cls.LEFT_RESIZE_HANDLER),\n right: resizeTarget.classList.contains(cls.RIGHT_RESIZE_HANDLER),\n top: resizeTarget.classList.contains(cls.TOP_RESIZE_HANDLER),\n bottom: resizeTarget.classList.contains(cls.BOTTOM_RESIZE_HANDLER)\n };\n _this.actionObj.groupIndex = _this.parent.uiStateValues.isGroupAdaptive ? _this.parent.uiStateValues.groupIndex : 0;\n var workCell = _this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS).getBoundingClientRect();\n _this.actionObj.cellWidth = workCell.width;\n _this.actionObj.cellHeight = workCell.height;\n var hRows = _this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });\n if (_this.parent.activeView.isTimelineView() && hRows.length > 0 && ['Date', 'Hour'].indexOf(hRows.slice(-1)[0]) < 0) {\n var tr = _this.parent.getContentTable().querySelector('tr');\n var noOfDays = 0;\n var tdCollections = [].slice.call(tr.children);\n for (var _i = 0, tdCollections_1 = tdCollections; _i < tdCollections_1.length; _i++) {\n var td = tdCollections_1[_i];\n noOfDays += parseInt(td.getAttribute('colspan'), 10);\n }\n var trRect = tr.getBoundingClientRect();\n _this.actionObj.cellWidth = trRect.width / noOfDays;\n _this.actionObj.cellHeight = trRect.height;\n }\n var pages = _this.parent.eventBase.getPageCoordinates(e);\n _this.actionObj.X = pages.pageX;\n _this.actionObj.Y = pages.pageY;\n _this.actionObj.groupIndex = parseInt(_this.actionObj.element.getAttribute('data-group-index') || '0', 10);\n _this.actionObj.interval = resizeEventArgs.interval;\n _this.actionObj.scroll = resizeEventArgs.scroll;\n _this.actionObj.start = new Date(eventObj[_this.parent.eventFields.startTime].getTime());\n _this.actionObj.end = new Date(eventObj[_this.parent.eventFields.endTime].getTime());\n _this.actionObj.originalElement = _this.getOriginalElement(_this.actionObj.element);\n if (_this.parent.currentView === 'Month') {\n _this.daysVariation = -1;\n _this.monthEvent = new MonthEvent(_this.parent);\n }\n var viewElement = _this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n _this.scrollArgs = { element: viewElement, width: viewElement.scrollWidth, height: viewElement.scrollHeight };\n EventHandler.add(document, Browser.touchMoveEvent, _this.resizing, _this);\n EventHandler.add(document, Browser.touchEndEvent, _this.resizeStop, _this);\n });\n };\n Resize.prototype.resizing = function (e) {\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide();\n }\n if (this.parent.element.querySelectorAll('.' + cls.RESIZE_CLONE_CLASS).length === 0) {\n this.resizeHelper();\n }\n if ((!isNullOrUndefined(e.target)) && e.target.classList.contains(cls.DISABLE_DATES)) {\n return;\n }\n var pages = this.parent.eventBase.getPageCoordinates(e);\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'TimelineYear') {\n var doc = document.documentElement;\n var left = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n var top_1 = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n this.actionObj.pageX = pages.pageX - left;\n this.actionObj.pageY = pages.pageY - top_1;\n }\n else {\n this.actionObj.pageX = pages.pageX;\n this.actionObj.pageY = pages.pageY;\n }\n this.updateScrollPosition(e);\n this.updateResizingDirection(e);\n var eventObj = extend({}, this.actionObj.event, null, true);\n var resizeArgs = {\n cancel: false,\n data: eventObj,\n element: this.actionObj.element,\n event: e,\n startTime: this.actionObj.start,\n endTime: this.actionObj.end\n };\n if (this.parent.group.resources.length > 0) {\n resizeArgs.groupIndex = this.actionObj.groupIndex;\n }\n this.parent.trigger(event.resizing, resizeArgs);\n };\n Resize.prototype.updateResizingDirection = function (e) {\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'TimelineYear') {\n this.monthResizing();\n return;\n }\n var resizeValidation = this.resizeValidation(e);\n if (this.resizeEdges.left) {\n if (resizeValidation) {\n var leftStyles = this.getLeftRightStyles(e, true);\n if (parseInt(leftStyles.width, 10) < 1) {\n return;\n }\n for (var _i = 0, _a = this.actionObj.cloneElement; _i < _a.length; _i++) {\n var cloneElement = _a[_i];\n setStyleAttribute(cloneElement, leftStyles);\n addClass([cloneElement], cls.LEFT_RESIZE_HANDLER);\n }\n }\n this.horizontalResizing(!this.parent.enableRtl);\n }\n if (this.resizeEdges.right) {\n if (resizeValidation) {\n var rightStyles = this.getLeftRightStyles(e, false);\n if (parseInt(rightStyles.width, 10) < 1) {\n return;\n }\n for (var _b = 0, _c = this.actionObj.cloneElement; _b < _c.length; _b++) {\n var cloneElement = _c[_b];\n setStyleAttribute(cloneElement, rightStyles);\n addClass([cloneElement], cls.RIGHT_RESIZE_HANDLER);\n }\n }\n this.horizontalResizing(this.parent.enableRtl);\n }\n if (this.resizeEdges.top) {\n if (resizeValidation) {\n var topStyles = this.getTopBottomStyles(e, true);\n if (parseInt(topStyles.height, 10) < 1) {\n return;\n }\n for (var _d = 0, _e = this.actionObj.cloneElement; _d < _e.length; _d++) {\n var cloneElement = _e[_d];\n setStyleAttribute(cloneElement, topStyles);\n addClass([cloneElement], cls.TOP_RESIZE_HANDLER);\n }\n }\n this.verticalResizing(true);\n }\n if (this.resizeEdges.bottom) {\n if (resizeValidation) {\n var bottomStyles = this.getTopBottomStyles(e, false);\n if (parseInt(bottomStyles.height, 10) < 1) {\n return;\n }\n for (var _f = 0, _g = this.actionObj.cloneElement; _f < _g.length; _f++) {\n var cloneElement = _g[_f];\n setStyleAttribute(cloneElement, bottomStyles);\n addClass([cloneElement], cls.BOTTOM_RESIZE_HANDLER);\n }\n }\n this.verticalResizing(false);\n }\n };\n Resize.prototype.monthResizing = function () {\n this.removeCloneElement();\n if (isNullOrUndefined(this.actionObj.pageX) || isNullOrUndefined(this.actionObj.pageY)) {\n return;\n }\n var td = document.elementFromPoint(this.actionObj.pageX, this.actionObj.pageY);\n if (isNullOrUndefined(td)) {\n return;\n }\n var resizeTime = this.parent.getDateFromElement(td);\n var isSameCell = this.parent.activeViewOptions.group.resources.length > 0 ?\n parseInt(td.getAttribute('data-group-index'), 10) === this.actionObj.groupIndex : true;\n var startTime = new Date(this.actionObj.event[this.parent.eventFields.startTime].getTime());\n var endTime = new Date(this.actionObj.event[this.parent.eventFields.endTime].getTime());\n if ((!this.parent.enableRtl && this.resizeEdges.left) || (this.parent.enableRtl && this.resizeEdges.right)\n || this.resizeEdges.top) {\n startTime = resizeTime;\n }\n else if ((!this.parent.enableRtl && this.resizeEdges.right) || (this.parent.enableRtl && this.resizeEdges.left)\n || this.resizeEdges.bottom) {\n endTime = util.addDays(resizeTime, 1);\n }\n if (isSameCell && startTime < endTime) {\n this.actionObj.start = startTime;\n this.actionObj.end = endTime;\n var event_1 = this.getUpdatedEvent(this.actionObj.start, this.actionObj.end, this.actionObj.event);\n if (this.parent.currentView === 'TimelineYear') {\n this.yearEventsRendering(event_1);\n }\n else {\n this.dynamicEventsRendering(event_1);\n }\n this.updateOriginalElement(this.actionObj.clone);\n }\n };\n Resize.prototype.yearEventsRendering = function (event) {\n var eventWrappers = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CLONE_ELEMENT_CLASS));\n for (var _i = 0, eventWrappers_1 = eventWrappers; _i < eventWrappers_1.length; _i++) {\n var wrapper = eventWrappers_1[_i];\n remove(wrapper);\n }\n var endDate = new Date(event[this.parent.eventFields.endTime]);\n var monthDiff = 0;\n if (this.parent.activeViewOptions.group.resources.length === 0) {\n monthDiff = this.getMonthDiff(event[this.parent.eventFields.startTime], util.addDays(endDate, -1));\n }\n for (var i = 0; i <= monthDiff; i++) {\n var eventObj = void 0;\n if (this.parent.activeViewOptions.group.resources.length === 0) {\n eventObj = this.getEventCount(event, this.actionObj.start.getMonth() + i);\n }\n else {\n eventObj = extend({}, event, null, true);\n endDate = this.resizeEdges.left || this.resizeEdges.right ? util.addDays(endDate, -1) : endDate;\n eventObj.count = this.getMonthDiff(event[this.parent.eventFields.startTime], endDate) + 1;\n }\n this.dynamicYearlyEventsRendering(eventObj, true);\n }\n };\n Resize.prototype.getMonthDiff = function (startDate, endDate) {\n var months;\n months = (endDate.getFullYear() - startDate.getFullYear()) * 12;\n months -= startDate.getMonth();\n months += endDate.getMonth();\n return months <= 0 ? 0 : months;\n };\n Resize.prototype.getEventCount = function (eventObj, month) {\n var eventData = extend({}, eventObj, null, true);\n var eventStart = eventData[this.parent.eventFields.startTime];\n var eventEnd = eventData[this.parent.eventFields.endTime];\n var monthStart = new Date(this.parent.selectedDate.getFullYear(), month, 1);\n var monthEnd = util.addDays(new Date(this.parent.selectedDate.getFullYear(), month + 1, 0), 1);\n var count = 1;\n if (eventStart.getTime() < monthStart.getTime()) {\n eventData[this.parent.eventFields.startTime] = monthStart;\n }\n if (eventEnd.getTime() > monthEnd.getTime()) {\n eventData[this.parent.eventFields.endTime] = monthEnd;\n }\n if (this.parent.activeViewOptions.group.resources.length === 0) {\n count = Math.ceil((eventData[this.parent.eventFields.endTime].getTime() -\n eventData[this.parent.eventFields.startTime].getTime()) / util.MS_PER_DAY);\n }\n eventData.count = count;\n return eventData;\n };\n Resize.prototype.resizeStop = function (e) {\n var _this = this;\n EventHandler.remove(document, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeStop);\n clearInterval(this.actionObj.scrollInterval);\n this.actionObj.scrollInterval = null;\n this.removeCloneElementClasses();\n this.removeCloneElement();\n this.actionClass('removeClass');\n this.parent.uiStateValues.action = false;\n var resizeArgs = { cancel: false, data: this.getChangedData(), element: this.actionObj.element, event: e };\n this.parent.trigger(event.resizeStop, resizeArgs, function (resizeEventArgs) {\n if (resizeEventArgs.cancel) {\n return;\n }\n if (_this.parent.isSpecificResourceEvents()) {\n _this.parent.crudModule.crudObj.sourceEvent =\n [_this.parent.resourceBase.lastResourceLevel[parseInt(resizeEventArgs.element.getAttribute('data-group-index'), 10)]];\n _this.parent.crudModule.crudObj.targetEvent = _this.parent.crudModule.crudObj.sourceEvent;\n _this.parent.crudModule.crudObj.isCrudAction = true;\n }\n _this.saveChangedData(resizeEventArgs);\n });\n };\n Resize.prototype.verticalResizing = function (isTop) {\n var offsetValue = this.actionObj.clone.offsetTop;\n if (!isTop) {\n offsetValue += this.actionObj.clone.offsetHeight;\n }\n var minutes = (offsetValue / this.actionObj.cellHeight) * this.actionObj.slotInterval;\n var element = this.actionObj.clone.offsetParent;\n if (isNullOrUndefined(element)) {\n return;\n }\n var resizeTime = util.resetTime(this.parent.getDateFromElement(element));\n resizeTime.setHours(this.parent.activeView.getStartHour().getHours());\n resizeTime.setMinutes(minutes + this.parent.activeView.getStartHour().getMinutes());\n if (isTop) {\n this.actionObj.start = this.calculateIntervalTime(resizeTime);\n }\n else {\n this.actionObj.end = this.calculateIntervalTime(resizeTime);\n }\n this.updateTimePosition(resizeTime);\n };\n Resize.prototype.horizontalResizing = function (isLeft) {\n var eventStart = new Date(this.actionObj.event[this.parent.eventFields.startTime].getTime());\n var eventEnd = new Date(this.actionObj.event[this.parent.eventFields.endTime].getTime());\n var resizeTime;\n var isDateHeader = false;\n var headerName = this.parent.currentView;\n var isTimeViews = ['TimelineDay', 'TimelineWeek', 'TimelineWorkWeek'].indexOf(this.parent.currentView) > -1;\n var isTimelineMonth = this.parent.currentView === 'TimelineMonth';\n var isWithoutScale = isTimelineMonth || isTimeViews && !this.parent.activeViewOptions.timeScale.enable;\n if (this.parent.activeView.isTimelineView()) {\n var tr = this.parent.getContentTable().querySelector('tr');\n if (this.parent.activeViewOptions.headerRows.length > 0) {\n var rows = this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });\n headerName = rows.slice(-1)[0];\n if (isTimelineMonth && headerName === 'Hour') {\n headerName = rows.slice(-2)[0] || 'Month';\n }\n }\n resizeTime = isLeft ? eventStart : eventEnd;\n var cellIndex = 0;\n var tdCollections = [].slice.call(tr.children);\n var isLastCell = false;\n var pixelsPerMinute = this.actionObj.cellWidth / (this.parent.activeViewOptions.timeScale.interval /\n this.parent.activeViewOptions.timeScale.slotCount);\n var offset = parseFloat(this.parent.enableRtl ? this.actionObj.clone.style.right :\n this.actionObj.clone.style.left);\n offset = Math.round(offset / pixelsPerMinute) * pixelsPerMinute;\n if (['Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1) {\n var noOfDays = 0;\n for (var _i = 0, tdCollections_2 = tdCollections; _i < tdCollections_2.length; _i++) {\n var td = tdCollections_2[_i];\n noOfDays += parseInt(td.getAttribute('colspan'), 10);\n }\n var offsetValue = this.parent.enableRtl ? parseInt(this.actionObj.clone.style.right, 10) :\n parseInt(this.actionObj.clone.style.left, 10);\n offsetValue = Math.round(offsetValue / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n if (!isLeft) {\n offsetValue += (this.actionObj.clone.getBoundingClientRect().width - this.actionObj.cellWidth);\n }\n cellIndex = Math.floor(offsetValue / Math.floor(tr.getBoundingClientRect().width / noOfDays));\n isDateHeader = isTimeViews && headerName === 'Date';\n cellIndex = isLeft ? cellIndex : isTimelineMonth ? cellIndex + 1 : cellIndex;\n isLastCell = cellIndex === tdCollections.length;\n cellIndex = (cellIndex < 0) ? 0 : (cellIndex >= noOfDays) ? noOfDays - 1 : cellIndex;\n }\n else {\n var cellWidth = this.actionObj.cellWidth;\n cellIndex = isLeft ? Math.floor(offset / this.actionObj.cellWidth) :\n Math.ceil((offset + (this.actionObj.clone.getBoundingClientRect().width - cellWidth)) / this.actionObj.cellWidth);\n if (this.parent.enableRtl) {\n var cellOffsetWidth = 0;\n if (headerName === 'TimelineMonth' || (!this.parent.activeViewOptions.timeScale.enable &&\n !isTimelineMonth)) {\n cellOffsetWidth = this.actionObj.cellWidth;\n }\n var offsetWidth = (Math.floor(offset / this.actionObj.cellWidth) *\n this.actionObj.cellWidth) + (isLeft ? 0 : this.actionObj.clone.getBoundingClientRect().width - cellOffsetWidth);\n cellIndex = Math.floor(offsetWidth / this.actionObj.cellWidth);\n }\n isLastCell = cellIndex === tdCollections.length;\n cellIndex = this.getIndex(cellIndex);\n }\n var resizeDate = void 0;\n if (['Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1) {\n resizeDate = new Date(this.parent.activeView.renderDates[parseInt(cellIndex.toString(), 10)].getTime());\n }\n else {\n resizeDate = this.parent.getDateFromElement(tr.children[parseInt(cellIndex.toString(), 10)]);\n }\n if (['TimelineMonth', 'Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1 ||\n !this.parent.activeViewOptions.timeScale.enable) {\n resizeTime = new Date(resizeDate.setHours(resizeTime.getHours(), resizeTime.getMinutes(), resizeTime.getSeconds()));\n }\n else {\n if (!isLeft) {\n offset += this.actionObj.clone.getBoundingClientRect().width;\n }\n var spanMinutes = Math.ceil((this.actionObj.slotInterval / this.actionObj.cellWidth) *\n (offset - Math.floor(offset / this.actionObj.cellWidth) * this.actionObj.cellWidth));\n spanMinutes = (isLastCell || (!isLeft && spanMinutes === 0)) ? this.actionObj.slotInterval : spanMinutes;\n resizeTime = new Date(resizeDate.getTime());\n resizeTime.setMinutes(resizeTime.getMinutes() + spanMinutes);\n this.updateTimePosition(resizeTime);\n }\n }\n else {\n var cloneIndex = closest(this.actionObj.clone, 'td').cellIndex;\n var originalWidth = Math.ceil((isLeft ? this.actionObj.element.getBoundingClientRect().width : 0) /\n this.actionObj.cellWidth) * this.actionObj.cellWidth;\n var noOfDays = Math.ceil((this.actionObj.clone.getBoundingClientRect().width - originalWidth) /\n this.actionObj.cellWidth);\n var tr = closest(this.actionObj.clone, 'tr');\n var dayIndex = isLeft ? cloneIndex - noOfDays : cloneIndex + noOfDays - 1;\n dayIndex = this.getIndex(dayIndex);\n resizeTime = this.parent.getDateFromElement(tr.children[parseInt(dayIndex.toString(), 10)]);\n if (isLeft) {\n resizeTime.setHours(eventStart.getHours(), eventStart.getMinutes(), eventStart.getSeconds());\n }\n else {\n resizeTime.setHours(eventEnd.getHours(), eventEnd.getMinutes(), eventEnd.getSeconds());\n }\n }\n var isNotHourSlot = ['TimelineMonth', 'Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1 ||\n !this.parent.activeViewOptions.timeScale.enable;\n if (isLeft) {\n if ((eventEnd.getTime() - resizeTime.getTime()) <= 0) {\n resizeTime = isWithoutScale ? util.resetTime(eventEnd) : eventStart;\n }\n this.actionObj.start = !isNotHourSlot ? this.calculateIntervalTime(resizeTime) : resizeTime;\n }\n else {\n var isTimeScaleViews = isTimeViews && this.parent.activeViewOptions.timeScale.enable;\n var resizeEnd = ((!isTimeScaleViews || isDateHeader || isTimeViews && ['Week', 'Month', 'Year'].indexOf(headerName) > -1)\n && resizeTime.getHours() === 0 && resizeTime.getMinutes() === 0) ? util.addDays(resizeTime, 1) : resizeTime;\n if (isWithoutScale && (resizeEnd.getTime() - eventStart.getTime()) <= 0) {\n resizeEnd = util.addDays(util.resetTime(eventStart), 1);\n }\n this.actionObj.end = !isNotHourSlot ? this.calculateIntervalTime(resizeEnd) : resizeEnd;\n }\n };\n Resize.prototype.getTopBottomStyles = function (e, isTop) {\n var viewElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var slotInterval = (this.actionObj.cellHeight / this.actionObj.slotInterval) * this.actionObj.interval;\n var clnHeight = isTop ? this.actionObj.element.offsetHeight + (this.actionObj.Y - this.actionObj.pageY) :\n this.actionObj.element.offsetHeight + (this.actionObj.pageY - this.actionObj.Y);\n var clnTop = isTop ? this.actionObj.element.offsetTop -\n (this.actionObj.Y - this.actionObj.pageY) : this.actionObj.clone.offsetTop;\n clnHeight = (clnTop < 0) ? this.actionObj.clone.offsetHeight :\n (this.actionObj.clone.offsetTop + this.actionObj.clone.offsetHeight) > this.scrollArgs.height ?\n this.actionObj.clone.offsetHeight : clnHeight;\n clnTop = (clnTop < 0) ? 0 : clnTop;\n clnTop = isTop ? Math.floor(clnTop / slotInterval) * slotInterval : clnTop;\n clnHeight = clnTop + clnHeight >= viewElement.scrollHeight ? viewElement.scrollHeight - clnTop :\n Math.ceil(clnHeight / slotInterval) * slotInterval;\n if (!isTop && this.actionObj.clone.offsetTop + clnHeight >= this.parent.getContentTable().offsetHeight) {\n clnHeight = this.parent.getContentTable().offsetHeight - this.actionObj.clone.offsetTop;\n }\n var styles = {\n height: formatUnit(clnHeight < this.actionObj.cellHeight ? Math.floor(clnHeight / slotInterval) * slotInterval : clnHeight),\n top: formatUnit((clnHeight < this.actionObj.cellHeight && isTop) ? Math.ceil(clnTop / slotInterval) * slotInterval : clnTop),\n left: '0px', right: '0px', width: '100%'\n };\n return styles;\n };\n Resize.prototype.getLeftRightStyles = function (e, isLeft) {\n var styles = {};\n var isTimelineView = this.parent.activeView.isTimelineView();\n var isTimeViews = ['TimelineDay', 'TimelineWeek', 'TimelineWorkWeek'].indexOf(this.parent.currentView) > -1 &&\n this.parent.activeViewOptions.timeScale.enable;\n var slotInterval = (this.actionObj.cellWidth / this.actionObj.slotInterval) * this.actionObj.interval;\n var pageWidth = isLeft ? (this.actionObj.X - this.actionObj.pageX) : (this.actionObj.pageX - this.actionObj.X);\n var targetWidth = isTimelineView ?\n (this.actionObj.element.getBoundingClientRect().width / this.actionObj.cellWidth) * this.actionObj.cellWidth :\n this.parent.currentView === 'Month' ? this.actionObj.element.getBoundingClientRect().width :\n Math.ceil(this.actionObj.element.getBoundingClientRect().width / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n var offsetWidth = targetWidth + (Math.ceil(pageWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth);\n var left = (this.parent.enableRtl) ? parseInt(this.actionObj.element.style.right, 10) : this.actionObj.clone.offsetLeft;\n if (isTimeViews) {\n offsetWidth = targetWidth + (Math.ceil(pageWidth / slotInterval) * slotInterval);\n offsetWidth = (Math.round((left + offsetWidth) / slotInterval) * slotInterval) - left;\n this.actionObj.event[this.parent.eventFields.isAllDay] = false;\n }\n var width = !isLeft && ((offsetWidth + this.actionObj.clone.offsetLeft > this.scrollArgs.width)) ?\n this.actionObj.clone.getBoundingClientRect().width : (offsetWidth < this.actionObj.cellWidth) ? offsetWidth : offsetWidth;\n if (this.parent.enableRtl) {\n var rightValue = isTimelineView ? parseInt(this.actionObj.element.style.right, 10) :\n -(offsetWidth - this.actionObj.cellWidth);\n rightValue = isTimelineView ? rightValue : isLeft ? 0 : rightValue > 0 ? 0 : rightValue;\n if (isTimelineView && !isLeft) {\n rightValue = Math.ceil((this.actionObj.element.offsetLeft + (this.actionObj.element.getBoundingClientRect().width +\n (this.actionObj.pageX - this.actionObj.X))) / slotInterval) * slotInterval;\n rightValue = rightValue < 0 ? Math.abs(rightValue) : -rightValue;\n }\n rightValue = rightValue >= this.scrollArgs.width ? this.scrollArgs.width - this.actionObj.cellWidth : rightValue;\n styles.right = formatUnit(rightValue);\n width = width + rightValue > this.scrollArgs.width ? this.actionObj.clone.getBoundingClientRect().width : width;\n }\n else {\n var offsetLeft = isLeft ? this.actionObj.element.offsetLeft - (this.actionObj.X - this.actionObj.pageX) :\n this.parent.enableRtl ? this.actionObj.element.offsetLeft : 0;\n if (isTimelineView) {\n offsetLeft = isLeft ? offsetLeft : parseInt(this.actionObj.clone.style.left, 10);\n if (this.parent.enableRtl) {\n offsetLeft = !isLeft ? (this.actionObj.pageX < this.actionObj.X - this.actionObj.clone.getBoundingClientRect().width)\n ? parseInt(this.actionObj.clone.style.right, 10) : offsetLeft : offsetLeft;\n }\n else {\n offsetLeft = isLeft ? (this.actionObj.pageX > this.actionObj.X + this.actionObj.clone.getBoundingClientRect().width &&\n this.actionObj.clone.getBoundingClientRect().width === this.actionObj.cellWidth) ?\n parseInt(this.actionObj.clone.style.left, 10) : offsetLeft : offsetLeft;\n }\n }\n var leftValue = offsetLeft;\n offsetLeft = isTimelineView ? isTimeViews ? isLeft ? Math.floor(offsetLeft / slotInterval) * slotInterval : offsetLeft :\n Math.floor(offsetLeft / this.actionObj.cellWidth) * this.actionObj.cellWidth :\n Math.ceil(Math.abs(offsetLeft) / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n if (offsetLeft < 0) {\n offsetLeft = 0;\n width = this.actionObj.clone.getBoundingClientRect().width;\n }\n var cloneWidth = Math.ceil(this.actionObj.clone.getBoundingClientRect().width / this.actionObj.cellWidth) *\n this.actionObj.cellWidth;\n if (isLeft) {\n styles.left = formatUnit(isTimelineView ? offsetLeft : isLeft ? leftValue < 0 ? -offsetLeft :\n (Math.ceil((targetWidth - cloneWidth) / this.actionObj.cellWidth) * this.actionObj.cellWidth) : offsetLeft);\n }\n }\n styles.width = formatUnit(width);\n return styles;\n };\n Resize.prototype.resizeValidation = function (e) {\n var pages = this.parent.eventBase.getPageCoordinates(e);\n var viewDimension = this.getContentAreaDimension();\n var isTimeScale = this.parent.activeView.isTimelineView() && this.parent.activeViewOptions.timeScale.enable;\n var cellWidth = this.actionObj.cellWidth;\n var resizeValidation = false;\n if (this.resizeEdges.left) {\n if (pages.pageX < viewDimension.leftOffset && pages.pageX >= viewDimension.left && isTimeScale) {\n cellWidth = 0;\n }\n resizeValidation = (pages.pageX - cellWidth) >= viewDimension.left;\n }\n if (this.resizeEdges.right) {\n if (pages.pageX > viewDimension.rightOffset && pages.pageX <= viewDimension.right && isTimeScale) {\n cellWidth = 0;\n }\n resizeValidation = (pages.pageX + cellWidth) <= viewDimension.right;\n }\n if (this.resizeEdges.top) {\n resizeValidation = this.actionObj.clone.offsetTop >= viewDimension.top;\n }\n if (this.resizeEdges.bottom) {\n resizeValidation = (this.actionObj.clone.offsetTop + this.actionObj.clone.offsetHeight) <= this.scrollArgs.height;\n }\n return resizeValidation;\n };\n /**\n * Get module name\n *\n * @returns {string} Returns the module name..\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n return Resize;\n}(ActionBase));\nexport { Resize };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheets class\n * @private\n */\nvar Worksheets = /** @class */ (function (_super) {\n __extends(Worksheets, _super);\n function Worksheets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Worksheets;\n}(Array));\nexport { Worksheets };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n this.showGridLines = true;\n this.enableRtl = false;\n }\n return Worksheet;\n}());\nexport { Worksheet };\n/**\n * Hyperlink class\n * @private\n */\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\n/**\n * Grouping class\n * @private\n */\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\n/**\n * FreezePane class\n * @private\n */\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\n/**\n * MergeCell\n * @private\n */\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n * @private\n */\nvar MergeCells = /** @class */ (function (_super) {\n __extends(MergeCells, _super);\n function MergeCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (mergeCell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var mCell = _a[_i];\n if (MergeCells.isIntersecting(mCell, mergeCell)) {\n var intersectingCell = new MergeCell();\n intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n _this[count] = intersectingCell;\n mergeCell = intersectingCell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(mergeCell);\n }\n return mergeCell;\n };\n return _this;\n }\n MergeCells.isIntersecting = function (base, compare) {\n return (base.x <= compare.x + compare.width)\n && (compare.x <= base.x + base.width)\n && (base.y <= compare.y + compare.height)\n && (compare.y <= base.y + base.height);\n };\n return MergeCells;\n}(Array));\nexport { MergeCells };\n","/**\n * CellStyle class\n * @private\n */\nvar CellStyle = /** @class */ (function () {\n function CellStyle() {\n this.numFmtId = 0;\n this.backColor = 'none';\n this.fontName = 'Calibri';\n this.fontSize = 10.5;\n this.fontColor = '#000000';\n this.italic = false;\n this.bold = false;\n this.underline = false;\n this.strikeThrough = false;\n this.wrapText = false;\n this.hAlign = 'general';\n this.vAlign = 'bottom';\n this.indent = 0;\n this.rotation = 0;\n this.numberFormat = 'GENERAL';\n this.type = 'datetime';\n this.borders = new Borders();\n this.isGlobalStyle = false;\n }\n return CellStyle;\n}());\nexport { CellStyle };\n/**\n * Font Class\n * @private\n */\nvar Font = /** @class */ (function () {\n function Font() {\n this.sz = 10.5;\n this.name = 'Calibri';\n this.u = false;\n this.b = false;\n this.i = false;\n this.color = 'FF000000';\n this.strike = false;\n }\n return Font;\n}());\nexport { Font };\n/**\n * CellXfs class\n * @private\n */\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\n/**\n * Alignment class\n * @private\n */\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\n/**\n * CellStyleXfs class\n * @private\n */\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\n/**\n * CellStyles class\n * @private\n */\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\n/**\n * NumFmt class\n * @private\n */\nvar NumFmt = /** @class */ (function () {\n function NumFmt(id, code) {\n this.numFmtId = id;\n this.formatCode = code;\n }\n return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n * @private\n */\nvar Border = /** @class */ (function () {\n function Border(mLine, mColor) {\n this.lineStyle = mLine;\n this.color = mColor;\n }\n return Border;\n}());\nexport { Border };\n/**\n * Borders class\n * @private\n */\nvar Borders = /** @class */ (function () {\n function Borders() {\n this.left = new Border('none', '#FFFFFF');\n this.right = new Border('none', '#FFFFFF');\n this.top = new Border('none', '#FFFFFF');\n this.bottom = new Border('none', '#FFFFFF');\n this.all = new Border('none', '#FFFFFF');\n }\n return Borders;\n}());\nexport { Borders };\n","/**\n * Column class\n * @private\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Row class\n * @private\n */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\n * @private\n */\nvar Rows = /** @class */ (function (_super) {\n __extends(Rows, _super);\n function Rows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (row) {\n _this.push(row);\n };\n return _this;\n }\n return Rows;\n}(Array));\nexport { Rows };\n","/**\n * Image class\n * @private\n */\nvar Image = /** @class */ (function () {\n function Image() {\n }\n return Image;\n}());\nexport { Image };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Cells class\n * @private\n */\nvar Cells = /** @class */ (function (_super) {\n __extends(Cells, _super);\n function Cells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (cell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.index === cell.index) {\n _this[count] = cell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(cell);\n }\n };\n return _this;\n }\n return Cells;\n}(Array));\nexport { Cells };\n","/* eslint-disable */\nvar Utils = /** @class */ (function () {\n function Utils() {\n }\n Utils.bitReverse = function (value) {\n return (Utils.reverseBits[value & 15] << 12\n | Utils.reverseBits[(value >> 4) & 15] << 8\n | Utils.reverseBits[(value >> 8) & 15] << 4\n | Utils.reverseBits[value >> 12]);\n };\n Utils.bitConverterToInt32 = function (value, index) {\n return value[index] | value[index + 1] << 8 | value[index + 2] << 16 | value[index + 3] << 24;\n };\n Utils.bitConverterToInt16 = function (value, index) {\n return value[index] | value[index + 1] << 8;\n };\n Utils.bitConverterToUInt32 = function (value) {\n var uint = new Uint32Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.bitConverterToUInt16 = function (value, index) {\n var uint = new Uint16Array(1);\n uint[0] = (value[index] | value[index + 1] << 8);\n return uint[0];\n };\n Utils.bitConverterUintToInt32 = function (value) {\n var uint = new Int32Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.bitConverterInt32ToUint = function (value) {\n var uint = new Uint32Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.bitConverterInt32ToInt16 = function (value) {\n var uint = new Int16Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.byteToString = function (value) {\n var str = '';\n for (var i = 0; i < value.length; i++) {\n str += String.fromCharCode(value[i]);\n }\n return str;\n };\n Utils.byteIntToString = function (value) {\n var str = '';\n for (var i = 0; i < value.length; i++) {\n str += String.fromCharCode(value[i]);\n }\n return str;\n };\n Utils.arrayCopy = function (source, sourceIndex, destination, destinationIndex, dataToCopy) {\n var temp = new Uint8Array(source.buffer, sourceIndex);\n var data = temp.subarray(0, dataToCopy);\n destination.set(data, destinationIndex);\n };\n Utils.mergeArray = function (arrayOne, arrayTwo) {\n var mergedArray = new Uint8Array(arrayOne.length + arrayTwo.length);\n mergedArray.set(arrayOne);\n mergedArray.set(arrayTwo, arrayOne.length);\n return mergedArray;\n };\n /**\n * @private\n */\n Utils.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var encode1;\n var encode2;\n var encode3;\n var encode4;\n var count = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (count < input.length) {\n encode1 = keyStr.indexOf(input.charAt(count++));\n encode2 = keyStr.indexOf(input.charAt(count++));\n encode3 = keyStr.indexOf(input.charAt(count++));\n encode4 = keyStr.indexOf(input.charAt(count++));\n chr1 = (encode1 << 2) | (encode2 >> 4);\n chr2 = ((encode2 & 15) << 4) | (encode3 >> 2);\n chr3 = ((encode3 & 3) << 6) | encode4;\n output[resultIndex++] = chr1;\n if (encode3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (encode4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n Utils.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n Utils.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n return Utils;\n}());\nexport { Utils };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { Utils } from './index';\nvar DecompressorHuffmanTree = /** @class */ (function () {\n function DecompressorHuffmanTree(lengths) {\n this.buildTree(lengths);\n }\n DecompressorHuffmanTree.init = function () {\n var lengths;\n var index;\n // Generate huffman tree for lengths.\n lengths = new Uint8Array(288);\n index = 0;\n while (index < 144) {\n lengths[index++] = 8;\n }\n while (index < 256) {\n lengths[index++] = 9;\n }\n while (index < 280) {\n lengths[index++] = 7;\n }\n while (index < 288) {\n lengths[index++] = 8;\n }\n DecompressorHuffmanTree.m_LengthTree = new DecompressorHuffmanTree(lengths);\n // Generate huffman tree for distances.\n lengths = new Uint8Array(32);\n index = 0;\n while (index < 32) {\n lengths[index++] = 5;\n }\n DecompressorHuffmanTree.m_DistanceTree = new DecompressorHuffmanTree(lengths);\n };\n /// \n /// Prepares data for generating huffman tree.\n /// \n /// Array of counts of each code length.\n /// Numerical values of the smallest code for each code length.\n /// Array of code lengths.\n /// Calculated tree size.\n /// Code.\n DecompressorHuffmanTree.prototype.prepareData = function (blCount, nextCode, lengths) {\n var code = 0;\n var treeSize = 512;\n // Count number of codes for each code length.\n for (var i = 0; i < lengths.length; i++) {\n var length_1 = lengths[i];\n if (length_1 > 0) {\n blCount[length_1]++;\n }\n }\n for (var bits = 1; bits <= DecompressorHuffmanTree.MAX_BITLEN; bits++) {\n nextCode[bits] = code;\n code += blCount[bits] << (16 - bits);\n if (bits >= 10) {\n var start = nextCode[bits] & 0x1ff80;\n var end = code & 0x1ff80;\n treeSize += (end - start) >> (16 - bits);\n }\n }\n /* if( code != 65536 )\n throw new ZipException( \"Code lengths don't add up properly.\" );*/\n return { 'code': code, 'treeSize': treeSize };\n };\n /// \n /// Generates huffman tree.\n /// \n /// Array of counts of each code length.\n /// Numerical values of the smallest code for each code length.\n /// Precalculated code.\n /// Array of code lengths.\n /// Calculated size of the tree.\n /// Generated tree.\n DecompressorHuffmanTree.prototype.treeFromData = function (blCount, nextCode, lengths, code, treeSize) {\n var tree = new Int16Array(treeSize);\n var pointer = 512;\n var increment = 1 << 7;\n for (var bits = DecompressorHuffmanTree.MAX_BITLEN; bits >= 10; bits--) {\n var end = code & 0x1ff80;\n code -= blCount[bits] << (16 - bits);\n var start = code & 0x1ff80;\n for (var i = start; i < end; i += increment) {\n tree[Utils.bitReverse(i)] = Utils.bitConverterInt32ToInt16((-pointer << 4) | bits);\n pointer += 1 << (bits - 9);\n }\n }\n for (var i = 0; i < lengths.length; i++) {\n var bits = lengths[i];\n if (bits == 0) {\n continue;\n }\n code = nextCode[bits];\n var revcode = Utils.bitReverse(code);\n if (bits <= 9) {\n do {\n tree[revcode] = Utils.bitConverterInt32ToInt16((i << 4) | bits);\n revcode += 1 << bits;\n } while (revcode < 512);\n }\n else {\n var subTree = tree[revcode & 511];\n var treeLen = 1 << (subTree & 15);\n subTree = -(subTree >> 4);\n do {\n tree[subTree | (revcode >> 9)] = Utils.bitConverterInt32ToInt16((i << 4) | bits);\n revcode += 1 << bits;\n } while (revcode < treeLen);\n }\n nextCode[bits] = code + (1 << (16 - bits));\n }\n return tree;\n };\n /// \n /// Builds huffman tree from array of code lengths.\n /// \n /// Array of code lengths.\n DecompressorHuffmanTree.prototype.buildTree = function (lengths) {\n // Count of codes for each code length.\n var blCount = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n // Numerical value of the smallest code for each code length.\n var nextCode = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n var prepareData = this.prepareData(blCount, nextCode, lengths);\n this.m_Tree = this.treeFromData(blCount, nextCode, lengths, prepareData.code, prepareData.treeSize);\n };\n /// \n /// Reads and decompresses one symbol.\n /// \n /// \n /// \n DecompressorHuffmanTree.prototype.unpackSymbol = function (input) {\n var lookahead;\n var symbol;\n if ((lookahead = input.peekBits(9)) >= 0) {\n if ((symbol = this.m_Tree[lookahead]) >= 0) {\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n var subtree = -(symbol >> 4);\n var bitlen = symbol & 15;\n if ((lookahead = input.peekBits(bitlen)) >= 0) {\n symbol = this.m_Tree[subtree | (lookahead >> 9)];\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n else {\n var bits = input.availableBits;\n lookahead = input.peekBits(bits);\n symbol = this.m_Tree[subtree | (lookahead >> 9)];\n if ((symbol & 15) <= bits) {\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n else {\n return -1;\n }\n }\n }\n else {\n var bits = input.availableBits;\n lookahead = input.peekBits(bits);\n symbol = this.m_Tree[lookahead];\n if (symbol >= 0 && (symbol & 15) <= bits) {\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n else {\n return -1;\n }\n }\n };\n Object.defineProperty(DecompressorHuffmanTree, \"lengthTree\", {\n /// \n /// GET huffman tree for encoding and decoding lengths.\n /// \n get: function () {\n return this.m_LengthTree;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DecompressorHuffmanTree, \"distanceTree\", {\n /// \n /// GET huffman tree for encoding and decoding distances.\n /// \n get: function () {\n return this.m_DistanceTree;\n },\n enumerable: true,\n configurable: true\n });\n /// \n /// Maximum count of bits.\n /// \n DecompressorHuffmanTree.MAX_BITLEN = 15;\n return DecompressorHuffmanTree;\n}());\nexport { DecompressorHuffmanTree };\n/* eslint-enable */ \n","/* eslint-disable */\n/// \n/// Checksum calculator, based on Adler32 algorithm.\n/// \nvar ChecksumCalculator = /** @class */ (function () {\n function ChecksumCalculator() {\n }\n /// \n /// Updates checksum by calculating checksum of the\n /// given buffer and adding it to current value.\n /// \n /// Current checksum.\n /// Data byte array.\n /// Offset in the buffer.\n /// Length of data to be used from the stream.\n ChecksumCalculator.ChecksumUpdate = function (checksum, buffer, offset, length) {\n var checkSumUInt = checksum;\n var s1 = checkSumUInt & 65535;\n var s2 = checkSumUInt >> this.DEF_CHECKSUM_BIT_OFFSET;\n while (length > 0) {\n var steps = Math.min(length, this.DEF_CHECKSUM_ITERATIONSCOUNT);\n length -= steps;\n while (--steps >= 0) {\n s1 = s1 + (buffer[offset++] & 255);\n s2 = s2 + s1;\n }\n s1 %= this.DEF_CHECKSUM_BASE;\n s2 %= this.DEF_CHECKSUM_BASE;\n }\n checkSumUInt = (s2 << this.DEF_CHECKSUM_BIT_OFFSET) | s1;\n checksum = checkSumUInt;\n };\n /// \n /// Generates checksum by calculating checksum of the\n /// given buffer.\n /// \n /// Data byte array.\n /// Offset in the buffer.\n /// Length of data to be used from the stream.\n ChecksumCalculator.ChecksumGenerate = function (buffer, offset, length) {\n var result = 1;\n ChecksumCalculator.ChecksumUpdate(result, buffer, offset, length);\n return result;\n };\n /// \n /// Bits offset, used in adler checksum calculation.\n /// \n ChecksumCalculator.DEF_CHECKSUM_BIT_OFFSET = 16;\n /// \n /// Lagrest prime, less than 65535\n /// \n ChecksumCalculator.DEF_CHECKSUM_BASE = 65521;\n /// \n /// Count of iteration used in calculated of the adler checksumm.\n /// \n ChecksumCalculator.DEF_CHECKSUM_ITERATIONSCOUNT = 3800;\n return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { DecompressorHuffmanTree } from './decompressor-huffman-tree';\nimport { Utils } from './utils';\nimport { ChecksumCalculator } from './checksum-calculator';\nvar CompressedStreamReader = /** @class */ (function () {\n function CompressedStreamReader(stream, bNoWrap) {\n /// \n /// Code lengths for the code length alphabet.\n /// \n this.defaultHuffmanDynamicTree = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n /// \n /// Mask for compression method to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_METHOD_MASK = 15 << 8;\n /// \n /// Mask for compression info to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_INFO_MASK = 240 << 8;\n /// \n /// Mask for check bits to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_FLAGS_FCHECK = 31;\n /// \n /// Mask for dictionary presence to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_FLAGS_FDICT = 32;\n /// \n /// Mask for compression level to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_FLAGS_FLEVEL = 192;\n /// \n /// Maximum size of the data window.\n /// \n this.DEF_MAX_WINDOW_SIZE = 65535;\n /// \n /// Maximum length of the repeatable block.\n /// \n this.DEF_HUFFMAN_REPEATE_MAX = 258;\n /// \n /// End of the block sign.\n /// \n this.DEF_HUFFMAN_END_BLOCK = 256;\n /// \n /// Minimal length code.\n /// \n this.DEF_HUFFMAN_LENGTH_MINIMUMCODE = 257;\n /// \n /// Maximal length code.\n /// \n this.DEF_HUFFMAN_LENGTH_MAXIMUMCODE = 285;\n /// \n /// Maximal distance code.\n /// \n this.DEF_HUFFMAN_DISTANCE_MAXIMUMCODE = 29;\n /// \n /// Currently calculated checksum,\n /// based on Adler32 algorithm.\n /// \n this.mCheckSum = 1;\n /// \n /// Currently read 4 bytes.\n /// \n this.tBuffer = 0;\n /// \n /// Count of bits that are in buffer.\n /// \n this.mBufferedBits = 0;\n /// \n /// Temporary buffer.\n /// \n this.mTempBuffer = new Uint8Array(4);\n /// \n /// 32k buffer for unpacked data.\n /// \n this.mBlockBuffer = new Uint8Array(this.DEF_MAX_WINDOW_SIZE);\n /// \n /// No wrap mode.\n /// \n this.mbNoWrap = false;\n /// \n /// Window size, can not be larger than 32k.\n /// \n this.mWindowSize = 0;\n /// \n /// Current position in output stream.\n /// Current in-block position can be extracted by applying Int16.MaxValue mask.\n /// \n this.mCurrentPosition = 0;\n /// \n /// Data length.\n /// Current in-block position can be extracted by applying Int16.MaxValue mask.\n /// \n this.mDataLength = 0;\n /// \n /// Specifies wheather next block can to be read.\n /// Reading can be denied because the header of the last block have been read.\n /// \n this.mbCanReadNextBlock = true;\n /// \n /// Specifies wheather user can read more data from stream.\n /// \n this.mbCanReadMoreData = true;\n /// \n /// Specifies wheather checksum has been read.\n /// \n this.mbCheckSumRead = false;\n if (stream == null) {\n throw new DOMException('stream');\n }\n if (stream.length === 0) {\n throw new DOMException('stream - string can not be empty');\n }\n DecompressorHuffmanTree.init();\n this.mInputStream = new Stream(stream);\n this.mbNoWrap = bNoWrap;\n if (!this.mbNoWrap) {\n this.readZLibHeader();\n }\n this.decodeBlockHeader();\n }\n Object.defineProperty(CompressedStreamReader.prototype, \"mBuffer\", {\n get: function () {\n return this.tBuffer;\n },\n set: function (value) {\n this.tBuffer = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Initializes compressor and writes ZLib header if needed.\n * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n */\n /// \n /// Reads specified count of bits without adjusting position.\n /// \n /// Count of bits to be read.\n /// Read value.\n CompressedStreamReader.prototype.peekBits = function (count) {\n if (count < 0) {\n throw new DOMException('count', 'Bits count can not be less than zero.');\n }\n if (count > 32) {\n throw new DOMException('count', 'Count of bits is too large.');\n }\n // If buffered data is not enough to give result,\n // fill buffer.\n if (this.mBufferedBits < count) {\n this.fillBuffer();\n }\n // If you want to read 4 bytes and there is partial data in\n // buffer, than you will fail.\n if (this.mBufferedBits < count) {\n return -1;\n }\n // Create bitmask for reading of count bits\n var bitMask = ~(4294967295 << count);\n var result = Utils.bitConverterUintToInt32(this.mBuffer & bitMask);\n //Debug.WriteLine( /*new string( ' ', 32 - mBufferedBits + (int)( ( 32 - mBufferedBits ) / 8 ) ) + BitsToString( (int)mBuffer, mBufferedBits ) + \" \" + BitsToString( result, count ) +*/ \" \" + result.ToString() );\n return result;\n };\n CompressedStreamReader.prototype.fillBuffer = function () {\n var length = 4 - (this.mBufferedBits >> 3) -\n (((this.mBufferedBits & 7) !== 0) ? 1 : 0);\n if (length === 0) {\n return;\n }\n //TODO: fix this\n var bytesRead = this.mInputStream.read(this.mTempBuffer, 0, length);\n for (var i = 0; i < bytesRead; i++) {\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer |\n (Utils.bitConverterInt32ToUint(this.mTempBuffer[i] << this.mBufferedBits)));\n this.mBufferedBits += 8;\n }\n //TODO: fix this\n };\n /// \n /// Skips specified count of bits.\n /// \n /// Count of bits to be skipped.\n CompressedStreamReader.prototype.skipBits = function (count) {\n if (count < 0) {\n throw new DOMException('count', 'Bits count can not be less than zero.');\n }\n if (count === 0) {\n return;\n }\n if (count >= this.mBufferedBits) {\n count -= this.mBufferedBits;\n this.mBufferedBits = 0;\n this.mBuffer = 0;\n // if something left, skip it.\n if (count > 0) {\n // Skip entire bytes.\n this.mInputStream.position += (count >> 3); //TODO: fix this\n count &= 7;\n // Skip bits.\n if (count > 0) {\n this.fillBuffer();\n this.mBufferedBits -= count;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n }\n }\n }\n else {\n this.mBufferedBits -= count;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n }\n };\n Object.defineProperty(CompressedStreamReader.prototype, \"availableBits\", {\n get: function () {\n return this.mBufferedBits;\n },\n enumerable: true,\n configurable: true\n });\n /// \n /// Reads ZLib header with compression method and flags.\n /// \n CompressedStreamReader.prototype.readZLibHeader = function () {\n // first 8 bits - compression Method and flags\n // 8 other - flags\n var header = this.readInt16();\n //Debug.WriteLine( BitsToString( header ) );\n if (header === -1) {\n throw new DOMException('Header of the stream can not be read.');\n }\n if (header % 31 !== 0) {\n throw new DOMException('Header checksum illegal');\n }\n if ((header & this.DEF_HEADER_METHOD_MASK) !== (8 << 8)) {\n throw new DOMException('Unsupported compression method.');\n }\n this.mWindowSize = Math.pow(2, ((header & this.DEF_HEADER_INFO_MASK) >> 12) + 8);\n if (this.mWindowSize > 65535) {\n throw new DOMException('Unsupported window size for deflate compression method.');\n }\n if ((header & this.DEF_HEADER_FLAGS_FDICT) >> 5 === 1) {\n // Get dictionary.\n throw new DOMException('Custom dictionary is not supported at the moment.');\n }\n };\n /// \n /// TODO: place correct comment here\n /// \n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readInt16 = function () {\n var result = (this.readBits(8) << 8);\n result |= this.readBits(8);\n return result;\n };\n /// \n /// Reads specified count of bits from stream.\n /// \n /// Count of bits to be read.\n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readBits = function (count) {\n var result = this.peekBits(count);\n if (result === -1) {\n return -1;\n }\n this.mBufferedBits -= count;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n return result;\n };\n /// \n /// Reads and decodes block of data.\n /// \n /// True if buffer was empty and new data was read, otherwise - False.\n CompressedStreamReader.prototype.decodeBlockHeader = function () {\n if (!this.mbCanReadNextBlock) {\n return false;\n }\n var bFinalBlock = this.readBits(1);\n if (bFinalBlock === -1) {\n return false;\n }\n var blockType = this.readBits(2);\n if (blockType === -1) {\n return false;\n }\n this.mbCanReadNextBlock = (bFinalBlock === 0);\n // ChecksumReset();\n switch (blockType) {\n case 0:\n // Uncompressed data\n this.mbReadingUncompressed = true;\n this.skipToBoundary();\n var length_1 = this.readInt16Inverted();\n var lengthComplement = this.readInt16Inverted();\n if (length_1 !== (lengthComplement ^ 0xffff)) {\n throw new DOMException('Wrong block length.');\n }\n if (length_1 > 65535) {\n throw new DOMException('Uncompressed block length can not be more than 65535.');\n }\n this.mUncompressedDataLength = length_1;\n this.mCurrentLengthTree = null;\n this.mCurrentDistanceTree = null;\n break;\n case 1:\n // Compressed data with fixed huffman codes.\n this.mbReadingUncompressed = false;\n this.mUncompressedDataLength = -1;\n this.mCurrentLengthTree = DecompressorHuffmanTree.lengthTree;\n this.mCurrentDistanceTree = DecompressorHuffmanTree.distanceTree;\n break;\n case 2:\n // Compressed data with dynamic huffman codes.\n this.mbReadingUncompressed = false;\n this.mUncompressedDataLength = -1;\n var trees = this.decodeDynamicHeader(this.mCurrentLengthTree, this.mCurrentDistanceTree);\n this.mCurrentLengthTree = trees.lengthTree;\n this.mCurrentDistanceTree = trees.distanceTree;\n break;\n default:\n throw new DOMException('Wrong block type.');\n }\n return true;\n };\n /// \n /// Discards left-most partially used byte.\n /// \n CompressedStreamReader.prototype.skipToBoundary = function () {\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> (this.mBufferedBits & 7));\n this.mBufferedBits &= ~7;\n };\n /// \n /// TODO: place correct comment here\n /// \n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readInt16Inverted = function () {\n var result = (this.readBits(8));\n result |= this.readBits(8) << 8;\n return result;\n };\n /// \n /// Reades dynamic huffman codes from block header.\n /// \n /// Literals/Lengths tree.\n /// Distances tree.\n CompressedStreamReader.prototype.decodeDynamicHeader = function (lengthTree, distanceTree) {\n var bLastSymbol = 0;\n var iLengthsCount = this.readBits(5);\n var iDistancesCount = this.readBits(5);\n var iCodeLengthsCount = this.readBits(4);\n if (iLengthsCount < 0 || iDistancesCount < 0 || iCodeLengthsCount < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n iLengthsCount += 257;\n iDistancesCount += 1;\n var iResultingCodeLengthsCount = iLengthsCount + iDistancesCount;\n var arrResultingCodeLengths = new Uint8Array(iResultingCodeLengthsCount);\n var arrDecoderCodeLengths = new Uint8Array(19);\n iCodeLengthsCount += 4;\n var iCurrentCode = 0;\n while (iCurrentCode < iCodeLengthsCount) {\n var len = this.readBits(3);\n if (len < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n arrDecoderCodeLengths[this.defaultHuffmanDynamicTree[iCurrentCode++]] = len;\n }\n var treeInternalDecoder = new DecompressorHuffmanTree(arrDecoderCodeLengths);\n iCurrentCode = 0;\n for (;;) {\n var symbol = void 0;\n var bNeedBreak = false;\n symbol = treeInternalDecoder.unpackSymbol(this);\n while ((symbol & ~15) === 0) {\n arrResultingCodeLengths[iCurrentCode++] = bLastSymbol = symbol;\n if (iCurrentCode === iResultingCodeLengthsCount) {\n bNeedBreak = true;\n break;\n }\n symbol = treeInternalDecoder.unpackSymbol(this);\n }\n if (bNeedBreak) {\n break;\n }\n if (symbol < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n if (symbol >= 17) {\n bLastSymbol = 0;\n }\n else if (iCurrentCode === 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n var miRepSymbol = symbol - 16;\n var bits = CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_BITS[miRepSymbol];\n var count = this.readBits(bits);\n if (count < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n count += CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS[miRepSymbol];\n if (iCurrentCode + count > iResultingCodeLengthsCount) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n while (count-- > 0) {\n arrResultingCodeLengths[iCurrentCode++] = bLastSymbol;\n }\n if (iCurrentCode === iResultingCodeLengthsCount) {\n break;\n }\n }\n var tempArray = new Uint8Array(iLengthsCount);\n tempArray.set(arrResultingCodeLengths.subarray(0, iLengthsCount), 0);\n //sourceArray, sourceIndex, destinationArray, destinationIndex, length\n //Array.copy( arrResultingCodeLengths, 0, tempArray, 0, iLengthsCount );\n lengthTree = new DecompressorHuffmanTree(tempArray);\n tempArray = arrResultingCodeLengths.slice(iLengthsCount, iLengthsCount + iDistancesCount);\n //Array.copy( arrResultingCodeLengths, iLengthsCount, tempArray, 0, iDistancesCount );\n distanceTree = new DecompressorHuffmanTree(tempArray);\n return { 'lengthTree': lengthTree, 'distanceTree': distanceTree };\n };\n /// \n /// Decodes huffman codes.\n /// \n /// True if some data was read.\n CompressedStreamReader.prototype.readHuffman = function () {\n var free = this.DEF_MAX_WINDOW_SIZE - (this.mDataLength - this.mCurrentPosition);\n var dataRead = false;\n //long maxdistance = DEF_MAX_WINDOW_SIZE >> 1;\n var readdata = {};\n // DEF_HUFFMAN_REPEATE_MAX - longest repeatable block, we should always reserve space for it because\n // if we should not, we will have buffer overrun.\n while (free >= this.DEF_HUFFMAN_REPEATE_MAX) {\n var symbol = void 0;\n symbol = this.mCurrentLengthTree.unpackSymbol(this);\n // Only codes 0..255 are valid independent symbols.\n while (((symbol) & ~0xff) === 0) {\n readdata[(this.mDataLength + 1) % this.DEF_MAX_WINDOW_SIZE] = symbol;\n this.mBlockBuffer[this.mDataLength++ % this.DEF_MAX_WINDOW_SIZE] = symbol;\n dataRead = true;\n if (--free < this.DEF_HUFFMAN_REPEATE_MAX) {\n return true;\n }\n //if( (mDataLength - mCurrentPosition ) < maxdistance ) return true;\n symbol = this.mCurrentLengthTree.unpackSymbol(this);\n }\n if (symbol < this.DEF_HUFFMAN_LENGTH_MINIMUMCODE) {\n if (symbol < this.DEF_HUFFMAN_END_BLOCK) {\n throw new DOMException('Illegal code.');\n }\n var numDataRead = dataRead ? 1 : 0;\n this.mbCanReadMoreData = this.decodeBlockHeader();\n var numReadMore = (this.mbCanReadMoreData) ? 1 : 0;\n return (numDataRead | numReadMore) ? true : false;\n }\n if (symbol > this.DEF_HUFFMAN_LENGTH_MAXIMUMCODE) {\n throw new DOMException('Illegal repeat code length.');\n }\n var iRepeatLength = CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_BASE[symbol -\n this.DEF_HUFFMAN_LENGTH_MINIMUMCODE];\n var iRepeatExtraBits = CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION[symbol -\n this.DEF_HUFFMAN_LENGTH_MINIMUMCODE];\n if (iRepeatExtraBits > 0) {\n var extra = this.readBits(iRepeatExtraBits);\n if (extra < 0) {\n throw new DOMException('Wrong data.');\n }\n iRepeatLength += extra;\n }\n // Unpack repeat distance.\n symbol = this.mCurrentDistanceTree.unpackSymbol(this);\n if (symbol < 0 || symbol > CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE.length) {\n throw new DOMException('Wrong distance code.');\n }\n var iRepeatDistance = CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE[symbol];\n iRepeatExtraBits = CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION[symbol];\n if (iRepeatExtraBits > 0) {\n var extra = this.readBits(iRepeatExtraBits);\n if (extra < 0) {\n throw new DOMException('Wrong data.');\n }\n iRepeatDistance += extra;\n }\n // Copy data in slow repeat mode\n for (var i = 0; i < iRepeatLength; i++) {\n this.mBlockBuffer[this.mDataLength % this.DEF_MAX_WINDOW_SIZE] =\n this.mBlockBuffer[(this.mDataLength - iRepeatDistance) % this.DEF_MAX_WINDOW_SIZE];\n this.mDataLength++;\n free--;\n }\n dataRead = true;\n }\n return dataRead;\n };\n /// \n /// Reads data to buffer.\n /// \n /// Output buffer for data.\n /// Offset in output data.\n /// Length of the data to be read.\n /// Count of bytes actually read.\n CompressedStreamReader.prototype.read = function (buffer, offset, length) {\n if (buffer == null) {\n throw new DOMException('buffer');\n }\n if (offset < 0 || offset > buffer.length - 1) {\n throw new DOMException('offset', 'Offset does not belong to specified buffer.');\n }\n if (length < 0 || length > buffer.length - offset) {\n throw new DOMException('length', 'Length is illegal.');\n }\n var initialLength = length;\n while (length > 0) {\n // Read from internal buffer.\n if (this.mCurrentPosition < this.mDataLength) {\n // Position in buffer array.\n var inBlockPosition = (this.mCurrentPosition % this.DEF_MAX_WINDOW_SIZE);\n // We can not read more than we have in buffer at once,\n // and we not read more than till the array end.\n var dataToCopy = Math.min(this.DEF_MAX_WINDOW_SIZE - inBlockPosition, (this.mDataLength - this.mCurrentPosition));\n // Reading not more, than the rest of the buffer.\n dataToCopy = Math.min(dataToCopy, length);\n //sourceArray, sourceIndex, destinationArray, destinationIndex, length\n // Copy data.\n //Array.Copy( mBlockBuffer, inBlockPosition, buffer, offset, dataToCopy );\n //buffer.set(this.mBlockBuffer.slice(inBlockPosition, dataToCopy), offset);\n Utils.arrayCopy(this.mBlockBuffer, inBlockPosition, buffer, offset, dataToCopy);\n // Correct position, length,\n this.mCurrentPosition += dataToCopy;\n offset += dataToCopy;\n length -= dataToCopy;\n }\n else {\n if (!this.mbCanReadMoreData) {\n break;\n }\n var oldDataLength = this.mDataLength;\n if (!this.mbReadingUncompressed) {\n if (!this.readHuffman()) {\n break;\n }\n }\n else {\n if (this.mUncompressedDataLength === 0) {\n // If there is no more data in stream, just exit.\n this.mbCanReadMoreData = this.decodeBlockHeader();\n if (!(this.mbCanReadMoreData)) {\n break;\n }\n }\n else {\n // Position of the data end in block buffer.\n var inBlockPosition = (this.mDataLength % this.DEF_MAX_WINDOW_SIZE);\n var dataToRead = Math.min(this.mUncompressedDataLength, this.DEF_MAX_WINDOW_SIZE - inBlockPosition);\n var dataRead = this.readPackedBytes(this.mBlockBuffer, inBlockPosition, dataToRead);\n if (dataToRead !== dataRead) {\n throw new DOMException('Not enough data in stream.');\n }\n this.mUncompressedDataLength -= dataRead;\n this.mDataLength += dataRead;\n }\n }\n if (oldDataLength < this.mDataLength) {\n var start = (oldDataLength % this.DEF_MAX_WINDOW_SIZE);\n var end = (this.mDataLength % this.DEF_MAX_WINDOW_SIZE);\n if (start < end) {\n this.checksumUpdate(this.mBlockBuffer, start, end - start);\n }\n else {\n this.checksumUpdate(this.mBlockBuffer, start, this.DEF_MAX_WINDOW_SIZE - start);\n if (end > 0) {\n this.checksumUpdate(this.mBlockBuffer, 0, end);\n }\n }\n }\n }\n }\n if (!this.mbCanReadMoreData && !this.mbCheckSumRead && !this.mbNoWrap) {\n this.skipToBoundary();\n var checkSum = this.readInt32();\n //Debug.Assert( checkSum == mCheckSum, \"\" );\n if (checkSum !== this.mCheckSum) {\n throw new DOMException('Checksum check failed.');\n }\n this.mbCheckSumRead = true;\n }\n return initialLength - length;\n };\n /// \n /// Reads array of bytes.\n /// \n /// Output buffer.\n /// Offset in output buffer.\n /// Length of the data to be read.\n /// Count of bytes actually read to the buffer.\n CompressedStreamReader.prototype.readPackedBytes = function (buffer, offset, length) {\n if (buffer == null) {\n throw new DOMException('buffer');\n }\n if (offset < 0 || offset > buffer.length - 1) {\n throw new DOMException('offset\", \"Offset can not be less than zero or greater than buffer length - 1.');\n }\n if (length < 0) {\n throw new DOMException('length\", \"Length can not be less than zero.');\n }\n if (length > buffer.length - offset) {\n throw new DOMException('length\", \"Length is too large.');\n }\n if ((this.mBufferedBits & 7) !== 0) {\n throw new DOMException('Reading of unalligned data is not supported.');\n }\n if (length === 0) {\n return 0;\n }\n var result = 0;\n while (this.mBufferedBits > 0 && length > 0) {\n buffer[offset++] = (this.mBuffer);\n this.mBufferedBits -= 8;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> 8);\n length--;\n result++;\n }\n if (length > 0) {\n //TODO: Fix this.\n result += this.mInputStream.read(buffer, offset, length);\n }\n return result;\n };\n /// \n /// TODO: place correct comment here\n /// \n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readInt32 = function () {\n var result = this.readBits(8) << 24;\n result |= this.readBits(8) << 16;\n result |= this.readBits(8) << 8;\n result |= this.readBits(8);\n return result;\n };\n /// \n /// Updates checksum by calculating checksum of the\n /// given buffer and adding it to current value.\n /// \n /// Data byte array.\n /// Offset in the buffer.\n /// Length of data to be used from the stream.\n CompressedStreamReader.prototype.checksumUpdate = function (buffer, offset, length) {\n ChecksumCalculator.ChecksumUpdate(this.mCheckSum, buffer, offset, length);\n };\n CompressedStreamReader.DEF_REVERSE_BITS = new Uint8Array([0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]);\n /// \n /// Minimum count of repetions.\n /// \n CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS = [3, 3, 11];\n /// \n /// Bits, that responds for different repetion modes.\n /// \n CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_BITS = [2, 3, 7];\n /// \n /// Length bases.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_BASE = [\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258\n ];\n /// \n /// Length extended bits count.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION = [\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0\n ];\n /// \n /// Distance bases.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE = [\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577\n ];\n /// \n /// Distance extanded bits count.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION = [\n 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,\n 12, 12, 13, 13\n ];\n return CompressedStreamReader;\n}());\nexport { CompressedStreamReader };\nvar Stream = /** @class */ (function () {\n function Stream(input) {\n this.position = 0;\n this.inputStream = new Uint8Array(input.buffer);\n }\n Object.defineProperty(Stream.prototype, \"length\", {\n get: function () {\n return this.inputStream.buffer.byteLength;\n },\n enumerable: true,\n configurable: true\n });\n Stream.prototype.read = function (buffer, start, length) {\n var temp = new Uint8Array(this.inputStream.buffer, this.position + start);\n var data = temp.subarray(0, length);\n buffer.set(data, 0);\n this.position += data.byteLength;\n return data.byteLength;\n };\n Stream.prototype.readByte = function () {\n return this.inputStream[this.position++];\n };\n Stream.prototype.write = function (inputBuffer, offset, count) {\n Utils.arrayCopy(inputBuffer, 0, this.inputStream, this.position + offset, count);\n // this.inputStream = new Uint8Array(this.inputStream.buffer, this.position + offset);\n // this.inputStream.set(inputBuffer, offset);\n this.position += count;\n };\n Stream.prototype.toByteArray = function () {\n return new Uint8Array(this.inputStream.buffer);\n };\n return Stream;\n}());\nexport { Stream };\n/* eslint-enable */ \n","/**\n * Encoding class: Contains the details about encoding type, whether to write a Unicode byte order mark (BOM).\n * ```typescript\n * let encoding : Encoding = new Encoding();\n * encoding.type = 'Utf8';\n * encoding.getBytes('Encoding', 0, 5);\n * ```\n */\nvar Encoding = /** @class */ (function () {\n /**\n * Initializes a new instance of the Encoding class. A parameter specifies whether to write a Unicode byte order mark\n * @param {boolean} includeBom?-true to specify that a Unicode byte order mark is written; otherwise, false.\n */\n function Encoding(includeBom) {\n this.emitBOM = true;\n this.encodingType = 'Ansi';\n this.initBOM(includeBom);\n }\n Object.defineProperty(Encoding.prototype, \"includeBom\", {\n /**\n * Gets a value indicating whether to write a Unicode byte order mark\n * @returns boolean- true to specify that a Unicode byte order mark is written; otherwise, false\n */\n get: function () {\n return this.emitBOM;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Encoding.prototype, \"type\", {\n /**\n * Gets the encoding type.\n * @returns EncodingType\n */\n get: function () {\n return this.encodingType;\n },\n /**\n * Sets the encoding type.\n * @param {EncodingType} value\n */\n set: function (value) {\n this.encodingType = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Initialize the includeBom to emit BOM or Not\n * @param {boolean} includeBom\n */\n Encoding.prototype.initBOM = function (includeBom) {\n if (includeBom === undefined || includeBom === null) {\n this.emitBOM = true;\n }\n else {\n this.emitBOM = includeBom;\n }\n };\n /**\n * Calculates the number of bytes produced by encoding the characters in the specified string\n * @param {string} chars - The string containing the set of characters to encode\n * @returns {number} - The number of bytes produced by encoding the specified characters\n */\n Encoding.prototype.getByteCount = function (chars) {\n var byteCount = 0;\n validateNullOrUndefined(chars, 'string');\n if (chars === '') {\n var byte = this.utf8Len(chars.charCodeAt(0));\n return byte;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n return this.getByteCountInternal(chars, 0, chars.length);\n };\n /**\n * Return the Byte of character\n * @param {number} codePoint\n * @returns {number}\n */\n Encoding.prototype.utf8Len = function (codePoint) {\n var bytes = codePoint <= 0x7F ? 1 :\n codePoint <= 0x7FF ? 2 :\n codePoint <= 0xFFFF ? 3 :\n codePoint <= 0x1FFFFF ? 4 : 0;\n return bytes;\n };\n /**\n * for 4 byte character return surrogate pair true, otherwise false\n * @param {number} codeUnit\n * @returns {boolean}\n */\n Encoding.prototype.isHighSurrogate = function (codeUnit) {\n return codeUnit >= 0xD800 && codeUnit <= 0xDBFF;\n };\n /**\n * for 4byte character generate the surrogate pair\n * @param {number} highCodeUnit\n * @param {number} lowCodeUnit\n */\n Encoding.prototype.toCodepoint = function (highCodeUnit, lowCodeUnit) {\n highCodeUnit = (0x3FF & highCodeUnit) << 10;\n var u = highCodeUnit | (0x3FF & lowCodeUnit);\n return u + 0x10000;\n };\n /**\n * private method to get the byte count for specific charindex and count\n * @param {string} chars\n * @param {number} charIndex\n * @param {number} charCount\n */\n Encoding.prototype.getByteCountInternal = function (chars, charIndex, charCount) {\n var byteCount = 0;\n if (this.encodingType === 'Utf8' || this.encodingType === 'Unicode') {\n var isUtf8 = this.encodingType === 'Utf8';\n for (var i = 0; i < charCount; i++) {\n var charCode = chars.charCodeAt(isUtf8 ? charIndex : charIndex++);\n if (this.isHighSurrogate(charCode)) {\n if (isUtf8) {\n var high = charCode;\n var low = chars.charCodeAt(++charIndex);\n byteCount += this.utf8Len(this.toCodepoint(high, low));\n }\n else {\n byteCount += 4;\n ++i;\n }\n }\n else {\n if (isUtf8) {\n byteCount += this.utf8Len(charCode);\n }\n else {\n byteCount += 2;\n }\n }\n if (isUtf8) {\n charIndex++;\n }\n }\n return byteCount;\n }\n else {\n byteCount = charCount;\n return byteCount;\n }\n };\n /**\n * Encodes a set of characters from the specified string into the ArrayBuffer.\n * @param {string} s- The string containing the set of characters to encode\n * @param {number} charIndex-The index of the first character to encode.\n * @param {number} charCount- The number of characters to encode.\n * @returns {ArrayBuffer} - The ArrayBuffer that contains the resulting sequence of bytes.\n */\n Encoding.prototype.getBytes = function (s, charIndex, charCount) {\n validateNullOrUndefined(s, 'string');\n validateNullOrUndefined(charIndex, 'charIndex');\n validateNullOrUndefined(charCount, 'charCount');\n if (charIndex < 0 || charCount < 0) {\n throw new RangeError('Argument Out Of Range Exception: charIndex or charCount is less than zero');\n }\n if (s.length - charIndex < charCount) {\n throw new RangeError('Argument Out Of Range Exception: charIndex and charCount do not denote a valid range in string');\n }\n var bytes;\n if (s === '') {\n bytes = new ArrayBuffer(0);\n return bytes;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var byteCount = this.getByteCountInternal(s, charIndex, charCount);\n switch (this.type) {\n case 'Utf8':\n bytes = this.getBytesOfUtf8Encoding(byteCount, s, charIndex, charCount);\n return bytes;\n case 'Unicode':\n bytes = this.getBytesOfUnicodeEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n default:\n bytes = this.getBytesOfAnsiEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n }\n };\n /**\n * Decodes a sequence of bytes from the specified ArrayBuffer into the string.\n * @param {ArrayBuffer} bytes- The ArrayBuffer containing the sequence of bytes to decode.\n * @param {number} index- The index of the first byte to decode.\n * @param {number} count- The number of bytes to decode.\n * @returns {string} - The string that contains the resulting set of characters.\n */\n Encoding.prototype.getString = function (bytes, index, count) {\n validateNullOrUndefined(bytes, 'bytes');\n validateNullOrUndefined(index, 'index');\n validateNullOrUndefined(count, 'count');\n if (index < 0 || count < 0) {\n throw new RangeError('Argument Out Of Range Exception: index or count is less than zero');\n }\n if (bytes.byteLength - index < count) {\n throw new RangeError('Argument Out Of Range Exception: index and count do not denote a valid range in bytes');\n }\n if (bytes.byteLength === 0 || count === 0) {\n return '';\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var out = '';\n var byteCal = new Uint8Array(bytes);\n switch (this.type) {\n case 'Utf8':\n var s = this.getStringOfUtf8Encoding(byteCal, index, count);\n return s;\n case 'Unicode':\n var byteUnicode = new Uint16Array(bytes);\n out = this.getStringofUnicodeEncoding(byteUnicode, index, count);\n return out;\n default:\n var j = index;\n for (var i = 0; i < count; i++) {\n var c = byteCal[j];\n out += String.fromCharCode(c); // 1 byte(ASCII) character \n j++;\n }\n return out;\n }\n };\n Encoding.prototype.getBytesOfAnsiEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var bufview = new Uint8Array(bytes);\n var k = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(charIndex++);\n if (charcode < 0x800) {\n bufview[k] = charcode;\n }\n else {\n bufview[k] = 63; //replacement character '?'\n }\n k++;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUtf8Encoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint = new Uint8Array(bytes);\n var index = charIndex;\n var j = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(index);\n if (charcode <= 0x7F) { // 1 byte character 2^7\n uint[j] = charcode;\n }\n else if (charcode < 0x800) { // 2 byte character 2^11\n uint[j] = 0xc0 | (charcode >> 6);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else if ((charcode < 0xd800 || charcode >= 0xe000)) { // 3 byte character 2^16 \n uint[j] = 0xe0 | (charcode >> 12);\n uint[++j] = 0x80 | ((charcode >> 6) & 0x3f);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else {\n uint[j] = 0xef;\n uint[++j] = 0xbf;\n uint[++j] = 0xbd; // U+FFFE \"replacement character\"\n }\n ++j;\n ++index;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUnicodeEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint16 = new Uint16Array(bytes);\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(i);\n uint16[i] = charcode;\n }\n return bytes;\n };\n Encoding.prototype.getStringOfUtf8Encoding = function (byteCal, index, count) {\n var j = 0;\n var i = index;\n var s = '';\n for (j; j < count; j++) {\n var c = byteCal[i++];\n while (i > byteCal.length) {\n return s;\n }\n if (c > 127) {\n if (c > 191 && c < 224 && i < count) {\n c = (c & 31) << 6 | byteCal[i] & 63;\n }\n else if (c > 223 && c < 240 && i < byteCal.byteLength) {\n c = (c & 15) << 12 | (byteCal[i] & 63) << 6 | byteCal[++i] & 63;\n }\n else if (c > 239 && c < 248 && i < byteCal.byteLength) {\n c = (c & 7) << 18 | (byteCal[i] & 63) << 12 | (byteCal[++i] & 63) << 6 | byteCal[++i] & 63;\n }\n ++i;\n }\n s += String.fromCharCode(c); // 1 byte(ASCII) character \n }\n return s;\n };\n Encoding.prototype.getStringofUnicodeEncoding = function (byteUni, index, count) {\n if (count > byteUni.length) {\n throw new RangeError('ArgumentOutOfRange_Count');\n }\n var byte16 = new Uint16Array(count);\n var out = '';\n for (var i = 0; i < count && i < byteUni.length; i++) {\n byte16[i] = byteUni[index++];\n }\n out = String.fromCharCode.apply(null, byte16);\n return out;\n };\n /**\n * To clear the encoding instance\n * @return {void}\n */\n Encoding.prototype.destroy = function () {\n this.emitBOM = undefined;\n this.encodingType = undefined;\n };\n return Encoding;\n}());\nexport { Encoding };\n/**\n * To check the object is null or undefined and throw error if it is null or undefined\n * @param {Object} value - object to check is null or undefined\n * @return {boolean}\n * @throws {ArgumentException} - if the value is null or undefined\n * @private\n */\nexport function validateNullOrUndefined(value, message) {\n if (value === null || value === undefined) {\n throw new Error('ArgumentException: ' + message + ' cannot be null or undefined');\n }\n}\n","/* eslint-disable */\nimport { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * array literal codes\n */\nvar ARR_LITERAL_CODES = new Int16Array(286);\nvar ARR_LITERAL_LENGTHS = new Uint8Array(286);\nvar ARR_DISTANCE_CODES = new Int16Array(30);\nvar ARR_DISTANCE_LENGTHS = new Uint8Array(30);\n/**\n * represent compression stream writer\n * ```typescript\n * let compressedWriter = new CompressedStreamWriter();\n * let text: string = 'Hello world!!!';\n * compressedWriter.write(text, 0, text.length);\n * compressedWriter.close();\n * ```\n */\nvar CompressedStreamWriter = /** @class */ (function () {\n /**\n * Initializes compressor and writes ZLib header if needed.\n * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n */\n function CompressedStreamWriter(noWrap) {\n this.pendingBuffer = new Uint8Array(1 << 16);\n this.pendingBufLength = 0;\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.currentHash = 0;\n this.matchStart = 0;\n this.matchLength = 0;\n this.matchPrevAvail = false;\n this.blockStart = 0;\n this.stringStart = 0;\n this.lookAhead = 0;\n this.totalBytesIn = 0;\n this.inputOffset = 0;\n this.inputEnd = 0;\n this.windowSize = 1 << 15;\n this.windowMask = this.windowSize - 1;\n this.hashSize = 1 << 15;\n this.hashMask = this.hashSize - 1;\n this.hashShift = Math.floor((15 + 3 - 1) / 3);\n this.maxDist = this.windowSize - 262;\n this.checkSum = 1;\n this.noWrap = false;\n if (!CompressedStreamWriter.isHuffmanTreeInitiated) {\n CompressedStreamWriter.initHuffmanTree();\n CompressedStreamWriter.isHuffmanTreeInitiated = true;\n }\n this.treeLiteral = new CompressorHuffmanTree(this, 286, 257, 15);\n this.treeDistances = new CompressorHuffmanTree(this, 30, 1, 15);\n this.treeCodeLengths = new CompressorHuffmanTree(this, 19, 4, 7);\n this.arrDistances = new Uint16Array((1 << 14));\n this.arrLiterals = new Uint8Array((1 << 14));\n this.stream = [];\n this.dataWindow = new Uint8Array(2 * this.windowSize);\n this.hashHead = new Int16Array(this.hashSize);\n this.hashPrevious = new Int16Array(this.windowSize);\n this.blockStart = this.stringStart = 1;\n this.noWrap = noWrap;\n if (!noWrap) {\n this.writeZLibHeader();\n }\n }\n Object.defineProperty(CompressedStreamWriter.prototype, \"compressedData\", {\n /**\n * get compressed data\n */\n get: function () {\n return this.stream;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressedStreamWriter.prototype, \"getCompressedString\", {\n get: function () {\n var compressedString = '';\n if (this.stream !== undefined) {\n for (var i = 0; i < this.stream.length; i++) {\n compressedString += String.fromCharCode.apply(null, this.stream[i]);\n }\n }\n return compressedString;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Compresses data and writes it to the stream.\n * @param {Uint8Array} data - data to compress\n * @param {number} offset - offset in data\n * @param {number} length - length of the data\n * @returns {void}\n */\n CompressedStreamWriter.prototype.write = function (data, offset, length) {\n if (data === undefined || data === null) {\n throw new Error('ArgumentException: data cannot null or undefined');\n }\n var end = offset + length;\n if (0 > offset || offset > end || end > data.length) {\n throw new Error('ArgumentOutOfRangeException: Offset or length is incorrect');\n }\n if (typeof data === 'string') {\n var encode = new Encoding(false);\n encode.type = 'Utf8';\n data = new Uint8Array(encode.getBytes(data, 0, data.length));\n end = offset + data.length;\n }\n this.inputBuffer = data;\n this.inputOffset = offset;\n this.inputEnd = end;\n if (!this.noWrap) {\n this.checkSum = ChecksumCalculator.checksumUpdate(this.checkSum, this.inputBuffer, this.inputOffset, end);\n }\n while (!(this.inputEnd === this.inputOffset) || !(this.pendingBufLength === 0)) {\n this.pendingBufferFlush();\n this.compressData(false);\n }\n };\n /**\n * write ZLib header to the compressed data\n * @return {void}\n */\n CompressedStreamWriter.prototype.writeZLibHeader = function () {\n /* Initialize header.*/\n var headerDate = (8 + (7 << 4)) << 8;\n /* Save compression level.*/\n headerDate |= ((5 >> 2) & 3) << 6;\n /* Align header.*/\n headerDate += 31 - (headerDate % 31);\n /* Write header to stream.*/\n this.pendingBufferWriteShortBytes(headerDate);\n };\n /**\n * Write Most Significant Bytes in to stream\n * @param {number} s - check sum value\n */\n CompressedStreamWriter.prototype.pendingBufferWriteShortBytes = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s >> 8;\n this.pendingBuffer[this.pendingBufLength++] = s;\n };\n CompressedStreamWriter.prototype.compressData = function (finish) {\n var success;\n do {\n this.fillWindow();\n var canFlush = (finish && this.inputEnd === this.inputOffset);\n success = this.compressSlow(canFlush, finish);\n } while (this.pendingBufLength === 0 && success);\n return success;\n };\n CompressedStreamWriter.prototype.compressSlow = function (flush, finish) {\n if (this.lookAhead < 262 && !flush) {\n return false;\n }\n while (this.lookAhead >= 262 || flush) {\n if (this.lookAhead === 0) {\n return this.lookAheadCompleted(finish);\n }\n if (this.stringStart >= 2 * this.windowSize - 262) {\n this.slideWindow();\n }\n var prevMatch = this.matchStart;\n var prevLen = this.matchLength;\n if (this.lookAhead >= 3) {\n this.discardMatch();\n }\n if (prevLen >= 3 && this.matchLength <= prevLen) {\n prevLen = this.matchPreviousBest(prevMatch, prevLen);\n }\n else {\n this.matchPreviousAvailable();\n }\n if (this.bufferPosition >= (1 << 14)) {\n return this.huffmanIsFull(finish);\n }\n }\n return true;\n };\n CompressedStreamWriter.prototype.discardMatch = function () {\n var hashHead = this.insertString();\n if (hashHead !== 0 && this.stringStart - hashHead <= this.maxDist && this.findLongestMatch(hashHead)) {\n if (this.matchLength <= 5 && (this.matchLength === 3 && this.stringStart - this.matchStart > 4096)) {\n this.matchLength = 3 - 1;\n }\n }\n };\n CompressedStreamWriter.prototype.matchPreviousAvailable = function () {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = true;\n this.stringStart++;\n this.lookAhead--;\n };\n CompressedStreamWriter.prototype.matchPreviousBest = function (prevMatch, prevLen) {\n this.huffmanTallyDist(this.stringStart - 1 - prevMatch, prevLen);\n prevLen -= 2;\n do {\n this.stringStart++;\n this.lookAhead--;\n if (this.lookAhead >= 3) {\n this.insertString();\n }\n } while (--prevLen > 0);\n this.stringStart++;\n this.lookAhead--;\n this.matchPrevAvail = false;\n this.matchLength = 3 - 1;\n return prevLen;\n };\n CompressedStreamWriter.prototype.lookAheadCompleted = function (finish) {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = false;\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, this.stringStart - this.blockStart, finish);\n this.blockStart = this.stringStart;\n return false;\n };\n CompressedStreamWriter.prototype.huffmanIsFull = function (finish) {\n var len = this.stringStart - this.blockStart;\n if (this.matchPrevAvail) {\n len--;\n }\n var lastBlock = (finish && this.lookAhead === 0 && !this.matchPrevAvail);\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, len, lastBlock);\n this.blockStart += len;\n return !lastBlock;\n };\n CompressedStreamWriter.prototype.fillWindow = function () {\n if (this.stringStart >= this.windowSize + this.maxDist) {\n this.slideWindow();\n }\n while (this.lookAhead < 262 && this.inputOffset < this.inputEnd) {\n var more = 2 * this.windowSize - this.lookAhead - this.stringStart;\n if (more > this.inputEnd - this.inputOffset) {\n more = this.inputEnd - this.inputOffset;\n }\n this.dataWindow.set(this.inputBuffer.subarray(this.inputOffset, this.inputOffset + more), this.stringStart + this.lookAhead);\n this.inputOffset += more;\n this.totalBytesIn += more;\n this.lookAhead += more;\n }\n if (this.lookAhead >= 3) {\n this.updateHash();\n }\n };\n CompressedStreamWriter.prototype.slideWindow = function () {\n this.dataWindow.set(this.dataWindow.subarray(this.windowSize, this.windowSize + this.windowSize), 0);\n this.matchStart -= this.windowSize;\n this.stringStart -= this.windowSize;\n this.blockStart -= this.windowSize;\n for (var i = 0; i < this.hashSize; ++i) {\n var m = this.hashHead[i] & 0xffff;\n this.hashHead[i] = (((m >= this.windowSize) ? (m - this.windowSize) : 0));\n }\n for (var i = 0; i < this.windowSize; i++) {\n var m = this.hashPrevious[i] & 0xffff;\n this.hashPrevious[i] = ((m >= this.windowSize) ? (m - this.windowSize) : 0);\n }\n };\n CompressedStreamWriter.prototype.insertString = function () {\n var match;\n var hash = ((this.currentHash << this.hashShift) ^ this.dataWindow[this.stringStart + (3 - 1)]) & this.hashMask;\n this.hashPrevious[this.stringStart & this.windowMask] = match = this.hashHead[hash];\n this.hashHead[hash] = this.stringStart;\n this.currentHash = hash;\n return match & 0xffff;\n };\n CompressedStreamWriter.prototype.findLongestMatch = function (curMatch) {\n var chainLen = 4096;\n var niceLen = 258;\n var scan = this.stringStart;\n var match;\n var bestEnd = this.stringStart + this.matchLength;\n var bestLength = Math.max(this.matchLength, 3 - 1);\n var limit = Math.max(this.stringStart - this.maxDist, 0);\n var stringEnd = this.stringStart + 258 - 1;\n var scanEnd1 = this.dataWindow[bestEnd - 1];\n var scanEnd = this.dataWindow[bestEnd];\n var data = this.dataWindow;\n if (bestLength >= 32) {\n chainLen >>= 2;\n }\n if (niceLen > this.lookAhead) {\n niceLen = this.lookAhead;\n }\n do {\n if (data[curMatch + bestLength] !== scanEnd ||\n data[curMatch + bestLength - 1] !== scanEnd1 ||\n data[curMatch] !== data[scan] ||\n data[curMatch + 1] !== data[scan + 1]) {\n continue;\n }\n match = curMatch + 2;\n scan += 2;\n /* tslint:disable */\n while (data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] && scan < stringEnd) {\n /* tslint:disable */\n }\n if (scan > bestEnd) {\n this.matchStart = curMatch;\n bestEnd = scan;\n bestLength = scan - this.stringStart;\n if (bestLength >= niceLen) {\n break;\n }\n scanEnd1 = data[bestEnd - 1];\n scanEnd = data[bestEnd];\n }\n scan = this.stringStart;\n } while ((curMatch = (this.hashPrevious[curMatch & this.windowMask] & 0xffff)) > limit && --chainLen !== 0);\n this.matchLength = Math.min(bestLength, this.lookAhead);\n return this.matchLength >= 3;\n };\n CompressedStreamWriter.prototype.updateHash = function () {\n this.currentHash = (this.dataWindow[this.stringStart] << this.hashShift) ^ this.dataWindow[this.stringStart + 1];\n };\n CompressedStreamWriter.prototype.huffmanTallyLit = function (literal) {\n this.arrDistances[this.bufferPosition] = 0;\n this.arrLiterals[this.bufferPosition++] = literal;\n this.treeLiteral.codeFrequencies[literal]++;\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanTallyDist = function (dist, len) {\n this.arrDistances[this.bufferPosition] = dist;\n this.arrLiterals[this.bufferPosition++] = (len - 3);\n var lc = this.huffmanLengthCode(len - 3);\n this.treeLiteral.codeFrequencies[lc]++;\n if (lc >= 265 && lc < 285) {\n this.extraBits += Math.floor((lc - 261) / 4);\n }\n var dc = this.huffmanDistanceCode(dist - 1);\n this.treeDistances.codeFrequencies[dc]++;\n if (dc >= 4) {\n this.extraBits += Math.floor((dc / 2 - 1));\n }\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanFlushBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.treeLiteral.codeFrequencies[256]++;\n this.treeLiteral.buildTree();\n this.treeDistances.buildTree();\n this.treeLiteral.calculateBLFreq(this.treeCodeLengths);\n this.treeDistances.calculateBLFreq(this.treeCodeLengths);\n this.treeCodeLengths.buildTree();\n var blTreeCodes = 4;\n for (var i = 18; i > blTreeCodes; i--) {\n if (this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[i]] > 0) {\n blTreeCodes = i + 1;\n }\n }\n var opt_len = 14 + blTreeCodes * 3 + this.treeCodeLengths.getEncodedLength() +\n this.treeLiteral.getEncodedLength() + this.treeDistances.getEncodedLength() + this.extraBits;\n var static_len = this.extraBits;\n for (var i = 0; i < 286; i++) {\n static_len += this.treeLiteral.codeFrequencies[i] * ARR_LITERAL_LENGTHS[i];\n }\n for (var i = 0; i < 30; i++) {\n static_len += this.treeDistances.codeFrequencies[i] * ARR_DISTANCE_LENGTHS[i];\n }\n if (opt_len >= static_len) {\n // Force static trees.\n opt_len = static_len;\n }\n if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) {\n this.huffmanFlushStoredBlock(stored, storedOffset, storedLength, lastBlock);\n }\n else if (opt_len == static_len) {\n // Encode with static tree.\n this.pendingBufferWriteBits((1 << 1) + (lastBlock ? 1 : 0), 3);\n this.treeLiteral.setStaticCodes(ARR_LITERAL_CODES, ARR_LITERAL_LENGTHS);\n this.treeDistances.setStaticCodes(ARR_DISTANCE_CODES, ARR_DISTANCE_LENGTHS);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n else {\n this.pendingBufferWriteBits((2 << 1) + (lastBlock ? 1 : 0), 3);\n this.huffmanSendAllTrees(blTreeCodes);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n };\n CompressedStreamWriter.prototype.huffmanFlushStoredBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.pendingBufferWriteBits((0 << 1) + (lastBlock ? 1 : 0), 3);\n this.pendingBufferAlignToByte();\n this.pendingBufferWriteShort(storedLength);\n this.pendingBufferWriteShort(~storedLength);\n this.pendingBufferWriteByteBlock(stored, storedOffset, storedLength);\n this.huffmanReset();\n };\n CompressedStreamWriter.prototype.huffmanLengthCode = function (len) {\n if (len === 255) {\n return 285;\n }\n var code = 257;\n while (len >= 8) {\n code += 4;\n len >>= 1;\n }\n return code + len;\n };\n CompressedStreamWriter.prototype.huffmanDistanceCode = function (distance) {\n var code = 0;\n while (distance >= 4) {\n code += 2;\n distance >>= 1;\n }\n return code + distance;\n };\n CompressedStreamWriter.prototype.huffmanSendAllTrees = function (blTreeCodes) {\n this.treeCodeLengths.buildCodes();\n this.treeLiteral.buildCodes();\n this.treeDistances.buildCodes();\n this.pendingBufferWriteBits(this.treeLiteral.treeLength - 257, 5);\n this.pendingBufferWriteBits(this.treeDistances.treeLength - 1, 5);\n this.pendingBufferWriteBits(blTreeCodes - 4, 4);\n for (var rank = 0; rank < blTreeCodes; rank++) {\n this.pendingBufferWriteBits(this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[rank]], 3);\n }\n this.treeLiteral.writeTree(this.treeCodeLengths);\n this.treeDistances.writeTree(this.treeCodeLengths);\n };\n CompressedStreamWriter.prototype.huffmanReset = function () {\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.treeLiteral.reset();\n this.treeDistances.reset();\n this.treeCodeLengths.reset();\n };\n CompressedStreamWriter.prototype.huffmanCompressBlock = function () {\n for (var i = 0; i < this.bufferPosition; i++) {\n var literalLen = this.arrLiterals[i] & 255;\n var dist = this.arrDistances[i];\n if (dist-- !== 0) {\n var lc = this.huffmanLengthCode(literalLen);\n this.treeLiteral.writeCodeToStream(lc);\n var bits = Math.floor((lc - 261) / 4);\n if (bits > 0 && bits <= 5) {\n this.pendingBufferWriteBits(literalLen & ((1 << bits) - 1), bits);\n }\n var dc = this.huffmanDistanceCode(dist);\n this.treeDistances.writeCodeToStream(dc);\n bits = Math.floor(dc / 2 - 1);\n if (bits > 0) {\n this.pendingBufferWriteBits(dist & ((1 << bits) - 1), bits);\n }\n }\n else {\n this.treeLiteral.writeCodeToStream(literalLen);\n }\n }\n this.treeLiteral.writeCodeToStream(256);\n };\n /**\n * write bits in to internal buffer\n * @param {number} b - source of bits\n * @param {number} count - count of bits to write\n */\n CompressedStreamWriter.prototype.pendingBufferWriteBits = function (b, count) {\n var uint = new Uint32Array(1);\n uint[0] = this.pendingBufCache | (b << this.pendingBufBitsInCache);\n this.pendingBufCache = uint[0];\n this.pendingBufBitsInCache += count;\n this.pendingBufferFlushBits();\n };\n CompressedStreamWriter.prototype.pendingBufferFlush = function (isClose) {\n this.pendingBufferFlushBits();\n if (this.pendingBufLength > 0) {\n var array = new Uint8Array(this.pendingBufLength);\n array.set(this.pendingBuffer.subarray(0, this.pendingBufLength), 0);\n this.stream.push(array);\n }\n this.pendingBufLength = 0;\n };\n CompressedStreamWriter.prototype.pendingBufferFlushBits = function () {\n var result = 0;\n while (this.pendingBufBitsInCache >= 8 && this.pendingBufLength < (1 << 16)) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n this.pendingBufCache >>= 8;\n this.pendingBufBitsInCache -= 8;\n result++;\n }\n return result;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteByteBlock = function (data, offset, length) {\n var array = data.subarray(offset, offset + length);\n this.pendingBuffer.set(array, this.pendingBufLength);\n this.pendingBufLength += length;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteShort = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s;\n this.pendingBuffer[this.pendingBufLength++] = (s >> 8);\n };\n CompressedStreamWriter.prototype.pendingBufferAlignToByte = function () {\n if (this.pendingBufBitsInCache > 0) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n }\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n };\n /**\n * Huffman Tree literal calculation\n * @private\n */\n CompressedStreamWriter.initHuffmanTree = function () {\n var i = 0;\n while (i < 144) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x030 + i) << 8);\n ARR_LITERAL_LENGTHS[i++] = 8;\n }\n while (i < 256) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x190 - 144 + i) << 7);\n ARR_LITERAL_LENGTHS[i++] = 9;\n }\n while (i < 280) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x000 - 256 + i) << 9);\n ARR_LITERAL_LENGTHS[i++] = 7;\n }\n while (i < 286) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x0c0 - 280 + i) << 8);\n ARR_LITERAL_LENGTHS[i++] = 8;\n }\n for (i = 0; i < 30; i++) {\n ARR_DISTANCE_CODES[i] = CompressorHuffmanTree.bitReverse(i << 11);\n ARR_DISTANCE_LENGTHS[i] = 5;\n }\n };\n /**\n * close the stream and write all pending buffer in to stream\n * @returns {void}\n */\n CompressedStreamWriter.prototype.close = function () {\n do {\n this.pendingBufferFlush(true);\n if (!this.compressData(true)) {\n this.pendingBufferFlush(true);\n this.pendingBufferAlignToByte();\n if (!this.noWrap) {\n this.pendingBufferWriteShortBytes(this.checkSum >> 16);\n this.pendingBufferWriteShortBytes(this.checkSum & 0xffff);\n }\n this.pendingBufferFlush(true);\n }\n } while (!(this.inputEnd === this.inputOffset) ||\n !(this.pendingBufLength === 0));\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n CompressedStreamWriter.prototype.destroy = function () {\n this.stream = [];\n this.stream = undefined;\n this.pendingBuffer = undefined;\n this.treeLiteral = undefined;\n this.treeDistances = undefined;\n this.treeCodeLengths = undefined;\n this.arrLiterals = undefined;\n this.arrDistances = undefined;\n this.hashHead = undefined;\n this.hashPrevious = undefined;\n this.dataWindow = undefined;\n this.inputBuffer = undefined;\n this.pendingBufLength = undefined;\n this.pendingBufCache = undefined;\n this.pendingBufBitsInCache = undefined;\n this.bufferPosition = undefined;\n this.extraBits = undefined;\n this.currentHash = undefined;\n this.matchStart = undefined;\n this.matchLength = undefined;\n this.matchPrevAvail = undefined;\n this.blockStart = undefined;\n this.stringStart = undefined;\n this.lookAhead = undefined;\n this.totalBytesIn = undefined;\n this.inputOffset = undefined;\n this.inputEnd = undefined;\n this.windowSize = undefined;\n this.windowMask = undefined;\n this.hashSize = undefined;\n this.hashMask = undefined;\n this.hashShift = undefined;\n this.maxDist = undefined;\n this.checkSum = undefined;\n this.noWrap = undefined;\n };\n CompressedStreamWriter.isHuffmanTreeInitiated = false;\n return CompressedStreamWriter;\n}());\nexport { CompressedStreamWriter };\n/**\n * represent the Huffman Tree\n */\nvar CompressorHuffmanTree = /** @class */ (function () {\n /**\n * Create new Huffman Tree\n * @param {CompressedStreamWriter} writer instance\n * @param {number} elementCount - element count\n * @param {number} minCodes - minimum count\n * @param {number} maxLength - maximum count\n */\n function CompressorHuffmanTree(writer, elementCount, minCodes, maxLength) {\n this.writer = writer;\n this.codeMinCount = minCodes;\n this.maxLength = maxLength;\n this.codeFrequency = new Uint16Array(elementCount);\n this.lengthCount = new Int32Array(maxLength);\n }\n Object.defineProperty(CompressorHuffmanTree.prototype, \"treeLength\", {\n get: function () {\n return this.codeCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeLengths\", {\n get: function () {\n return this.codeLength;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeFrequencies\", {\n get: function () {\n return this.codeFrequency;\n },\n enumerable: true,\n configurable: true\n });\n CompressorHuffmanTree.prototype.setStaticCodes = function (codes, lengths) {\n var temp = new Int16Array(codes.length);\n temp.set(codes, 0);\n this.codes = temp;\n var lengthTemp = new Uint8Array(lengths.length);\n lengthTemp.set(lengths, 0);\n this.codeLength = lengthTemp;\n };\n /**\n * reset all code data in tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.reset = function () {\n for (var i = 0; i < this.codeFrequency.length; i++) {\n this.codeFrequency[i] = 0;\n }\n this.codes = undefined;\n this.codeLength = undefined;\n };\n /**\n * write code to the compressor output stream\n * @param {number} code - code to be written\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeCodeToStream = function (code) {\n this.writer.pendingBufferWriteBits(this.codes[code] & 0xffff, this.codeLength[code]);\n };\n /**\n * calculate code from their frequencies\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildCodes = function () {\n var nextCode = new Int32Array(this.maxLength);\n this.codes = new Int16Array(this.codeCount);\n var code = 0;\n for (var bitsCount = 0; bitsCount < this.maxLength; bitsCount++) {\n nextCode[bitsCount] = code;\n code += this.lengthCount[bitsCount] << (15 - bitsCount);\n }\n for (var i = 0; i < this.codeCount; i++) {\n var bits = this.codeLength[i];\n if (bits > 0) {\n this.codes[i] = CompressorHuffmanTree.bitReverse(nextCode[bits - 1]);\n nextCode[bits - 1] += 1 << (16 - bits);\n }\n }\n };\n CompressorHuffmanTree.bitReverse = function (value) {\n return (CompressorHuffmanTree.reverseBits[value & 15] << 12\n | CompressorHuffmanTree.reverseBits[(value >> 4) & 15] << 8\n | CompressorHuffmanTree.reverseBits[(value >> 8) & 15] << 4\n | CompressorHuffmanTree.reverseBits[value >> 12]);\n };\n /**\n * calculate length of compressed data\n * @returns {number}\n */\n CompressorHuffmanTree.prototype.getEncodedLength = function () {\n var len = 0;\n for (var i = 0; i < this.codeFrequency.length; i++) {\n len += this.codeFrequency[i] * this.codeLength[i];\n }\n return len;\n };\n /**\n * calculate code frequencies\n * @param {CompressorHuffmanTree} blTree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.calculateBLFreq = function (blTree) {\n var maxCount;\n var minCount;\n var count;\n var curLen = -1;\n var i = 0;\n while (i < this.codeCount) {\n count = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxCount = 138;\n minCount = 3;\n }\n else {\n maxCount = 6;\n minCount = 3;\n if (curLen !== nextLen) {\n blTree.codeFrequency[nextLen]++;\n count = 0;\n }\n }\n curLen = nextLen;\n i++;\n while (i < this.codeCount && curLen === this.codeLength[i]) {\n i++;\n if (++count >= maxCount) {\n break;\n }\n }\n if (count < minCount) {\n blTree.codeFrequency[curLen] += count;\n }\n else if (curLen !== 0) {\n blTree.codeFrequency[16]++;\n }\n else if (count <= 10) {\n blTree.codeFrequency[17]++;\n }\n else {\n blTree.codeFrequency[18]++;\n }\n }\n };\n /**\n * @param {CompressorHuffmanTree} blTree - write tree to output stream\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeTree = function (blTree) {\n var maxRepeatCount;\n var minRepeatCount;\n var currentRepeatCount;\n var currentCodeLength = -1;\n var i = 0;\n while (i < this.codeCount) {\n currentRepeatCount = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxRepeatCount = 138;\n minRepeatCount = 3;\n }\n else {\n maxRepeatCount = 6;\n minRepeatCount = 3;\n if (currentCodeLength !== nextLen) {\n blTree.writeCodeToStream(nextLen);\n currentRepeatCount = 0;\n }\n }\n currentCodeLength = nextLen;\n i++;\n while (i < this.codeCount && currentCodeLength === this.codeLength[i]) {\n i++;\n if (++currentRepeatCount >= maxRepeatCount) {\n break;\n }\n }\n if (currentRepeatCount < minRepeatCount) {\n while (currentRepeatCount-- > 0) {\n blTree.writeCodeToStream(currentCodeLength);\n }\n }\n else if (currentCodeLength !== 0) {\n blTree.writeCodeToStream(16);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 2);\n }\n else if (currentRepeatCount <= 10) {\n blTree.writeCodeToStream(17);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 3);\n }\n else {\n blTree.writeCodeToStream(18);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 11, 7);\n }\n }\n };\n /**\n * Build huffman tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildTree = function () {\n var codesCount = this.codeFrequency.length;\n var arrTree = new Int32Array(codesCount);\n var treeLength = 0;\n var maxCount = 0;\n for (var n = 0; n < codesCount; n++) {\n var freq = this.codeFrequency[n];\n if (freq !== 0) {\n var pos = treeLength++;\n var pPos = 0;\n while (pos > 0 && this.codeFrequency[arrTree[pPos = Math.floor((pos - 1) / 2)]] > freq) {\n arrTree[pos] = arrTree[pPos];\n pos = pPos;\n }\n arrTree[pos] = n;\n maxCount = n;\n }\n }\n while (treeLength < 2) {\n arrTree[treeLength++] =\n (maxCount < 2) ? ++maxCount : 0;\n }\n this.codeCount = Math.max(maxCount + 1, this.codeMinCount);\n var leafsCount = treeLength;\n var nodesCount = leafsCount;\n var child = new Int32Array(4 * treeLength - 2);\n var values = new Int32Array(2 * treeLength - 1);\n for (var i = 0; i < treeLength; i++) {\n var node = arrTree[i];\n var iIndex = 2 * i;\n child[iIndex] = node;\n child[iIndex + 1] = -1;\n values[i] = (this.codeFrequency[node] << 8);\n arrTree[i] = i;\n }\n this.constructHuffmanTree(arrTree, treeLength, values, nodesCount, child);\n this.buildLength(child);\n };\n CompressorHuffmanTree.prototype.constructHuffmanTree = function (arrTree, treeLength, values, nodesCount, child) {\n do {\n var first = arrTree[0];\n var last = arrTree[--treeLength];\n var lastVal = values[last];\n var pPos = 0;\n var path = 1;\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n }\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n var second = arrTree[0];\n last = nodesCount++;\n child[2 * last] = first;\n child[2 * last + 1] = second;\n var minDepth = Math.min(values[first] & 0xff, values[second] & 0xff);\n values[last] = lastVal = values[first] + values[second] - minDepth + 1;\n pPos = 0;\n path = 1;\n /* tslint:disable */\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n } /* tslint:disable */\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n } while (treeLength > 1);\n };\n CompressorHuffmanTree.prototype.buildLength = function (child) {\n this.codeLength = new Uint8Array(this.codeFrequency.length);\n var numNodes = Math.floor(child.length / 2);\n var numLeafs = Math.floor((numNodes + 1) / 2);\n var overflow = 0;\n for (var i = 0; i < this.maxLength; i++) {\n this.lengthCount[i] = 0;\n }\n overflow = this.calculateOptimalCodeLength(child, overflow, numNodes);\n if (overflow === 0) {\n return;\n }\n var iIncreasableLength = this.maxLength - 1;\n do {\n while (this.lengthCount[--iIncreasableLength] === 0) {\n /* tslint:disable */\n }\n do {\n this.lengthCount[iIncreasableLength]--;\n this.lengthCount[++iIncreasableLength]++;\n overflow -= (1 << (this.maxLength - 1 - iIncreasableLength));\n } while (overflow > 0 && iIncreasableLength < this.maxLength - 1);\n } while (overflow > 0);\n this.recreateTree(child, overflow, numLeafs);\n };\n CompressorHuffmanTree.prototype.recreateTree = function (child, overflow, numLeafs) {\n this.lengthCount[this.maxLength - 1] += overflow;\n this.lengthCount[this.maxLength - 2] -= overflow;\n var nodePtr = 2 * numLeafs;\n for (var bits = this.maxLength; bits !== 0; bits--) {\n var n = this.lengthCount[bits - 1];\n while (n > 0) {\n var childPtr = 2 * child[nodePtr++];\n if (child[childPtr + 1] === -1) {\n this.codeLength[child[childPtr]] = bits;\n n--;\n }\n }\n }\n };\n CompressorHuffmanTree.prototype.calculateOptimalCodeLength = function (child, overflow, numNodes) {\n var lengths = new Int32Array(numNodes);\n lengths[numNodes - 1] = 0;\n for (var i = numNodes - 1; i >= 0; i--) {\n var childIndex = 2 * i + 1;\n if (child[childIndex] !== -1) {\n var bitLength = lengths[i] + 1;\n if (bitLength > this.maxLength) {\n bitLength = this.maxLength;\n overflow++;\n }\n lengths[child[childIndex - 1]] = lengths[child[childIndex]] = bitLength;\n }\n else {\n var bitLength = lengths[i];\n this.lengthCount[bitLength - 1]++;\n this.codeLength[child[childIndex - 1]] = lengths[i];\n }\n }\n return overflow;\n };\n CompressorHuffmanTree.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n CompressorHuffmanTree.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n return CompressorHuffmanTree;\n}());\nexport { CompressorHuffmanTree };\n/**\n * Checksum calculator, based on Adler32 algorithm.\n */\nvar ChecksumCalculator = /** @class */ (function () {\n function ChecksumCalculator() {\n }\n /**\n * Updates checksum by calculating checksum of the\n * given buffer and adding it to current value.\n * @param {number} checksum - current checksum.\n * @param {Uint8Array} buffer - data byte array.\n * @param {number} offset - offset in the buffer.\n * @param {number} length - length of data to be used from the stream.\n * @returns {number}\n */\n ChecksumCalculator.checksumUpdate = function (checksum, buffer, offset, length) {\n var uint = new Uint32Array(1);\n uint[0] = checksum;\n var checksum_uint = uint[0];\n var s1 = uint[0] = checksum_uint & 65535;\n var s2 = uint[0] = checksum_uint >> ChecksumCalculator.checkSumBitOffset;\n while (length > 0) {\n var steps = Math.min(length, ChecksumCalculator.checksumIterationCount);\n length -= steps;\n while (--steps >= 0) {\n s1 = s1 + (uint[0] = (buffer[offset++] & 255));\n s2 = s2 + s1;\n }\n s1 %= ChecksumCalculator.checksumBase;\n s2 %= ChecksumCalculator.checksumBase;\n }\n checksum_uint = (s2 << ChecksumCalculator.checkSumBitOffset) | s1;\n return checksum_uint;\n };\n ChecksumCalculator.checkSumBitOffset = 16;\n ChecksumCalculator.checksumBase = 65521;\n ChecksumCalculator.checksumIterationCount = 3800;\n return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/* eslint-enable */ \n","/**\n * Save class provide method to save file\n * ```typescript\n * let blob : Blob = new Blob([''], { type: 'text/plain' });\n * Save.save('fileName.txt',blob);\n */\nvar Save = /** @class */ (function () {\n /**\n * Initialize new instance of {save}\n */\n function Save() {\n // tslint:disable\n }\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n * @param {boolean} isMicrosoftBrowser- specify whether microsoft browser or not\n * @returns {void}\n */\n Save.save = function (fileName, buffer) {\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('ArgumentException: fileName cannot be undefined, null or empty');\n }\n var extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length);\n var mimeType = this.getMimeType(extension);\n if (mimeType !== '') {\n buffer = new Blob([buffer], { type: mimeType });\n }\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(buffer, fileName);\n }\n else {\n var downloadLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n this.saveInternal(fileName, extension, buffer, downloadLink, 'download' in downloadLink);\n }\n };\n Save.saveInternal = function (fileName, extension, buffer, downloadLink, hasDownloadAttribute) {\n if (hasDownloadAttribute) {\n downloadLink.download = fileName;\n var dataUrl_1 = window.URL.createObjectURL(buffer);\n downloadLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n downloadLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n dataUrl_1 = undefined;\n });\n }\n else {\n if (extension !== 'docx' && extension !== 'xlsx') {\n var url = window.URL.createObjectURL(buffer);\n var isPopupBlocked = window.open(url, '_blank');\n if (!isPopupBlocked) {\n window.location.href = url;\n }\n }\n else {\n var reader_1 = new FileReader();\n reader_1.onloadend = function () {\n var isPopupBlocked = window.open(reader_1.result, '_blank');\n if (!isPopupBlocked) {\n window.location.href = reader_1.result;\n }\n };\n reader_1.readAsDataURL(buffer);\n }\n }\n };\n /**\n *\n * @param {string} extension - get mime type of the specified extension\n * @private\n */\n Save.getMimeType = function (extension) {\n var mimeType = '';\n switch (extension) {\n case 'html':\n mimeType = 'text/html';\n break;\n case 'pdf':\n mimeType = 'application/pdf';\n break;\n case 'docx':\n mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n break;\n case 'xlsx':\n mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n break;\n case 'txt':\n mimeType = 'text/plain';\n break;\n }\n return mimeType;\n };\n return Save;\n}());\nexport { Save };\n","/* eslint-disable */\nimport { CompressedStreamWriter, Stream, CompressedStreamReader } from './index';\nimport { Save } from '@syncfusion/ej2-file-utils';\nimport { Utils } from './utils';\nvar CRC32TABLE = [];\n/// \n/// Size of the int value in bytes.\n/// \nvar INT_SIZE = 4;\n/// \n/// Size of the short value in bytes.\n/// \nvar SHORT_SIZE = 2;\n/// \n/// End of central directory signature.\n/// \nvar CentralDirectoryEndSignature = 0x06054b50;\n/// \n/// Offset to the size field in the End of central directory record.\n/// \nvar CentralDirSizeOffset = 12;\n/// \n/// Central header signature.\n/// \nvar CentralHeaderSignature = 0x02014b50;\n/// \n/// Buffer size.\n/// \nvar BufferSize = 4096;\n/**\n * class provide compression library\n * ```typescript\n * let archive = new ZipArchive();\n * archive.compressionLevel = 'Normal';\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * archive.addItem(archiveItem);\n * archive.save(fileName.zip);\n * ```\n */\nvar ZipArchive = /** @class */ (function () {\n /**\n * constructor for creating ZipArchive instance\n */\n function ZipArchive() {\n if (CRC32TABLE.length === 0) {\n ZipArchive.initCrc32Table();\n }\n this.files = [];\n this.level = 'Normal';\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(ZipArchive.prototype, \"items\", {\n get: function () {\n return this.files;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchive.prototype, \"compressionLevel\", {\n /**\n * gets compression level\n */\n get: function () {\n return this.level;\n },\n /**\n * sets compression level\n */\n set: function (level) {\n this.level = level;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchive.prototype, \"length\", {\n /**\n * gets items count\n */\n get: function () {\n if (this.files === undefined) {\n return 0;\n }\n return this.files.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * add new item to archive\n * @param {ZipArchiveItem} item - item to be added\n * @returns {void}\n */\n ZipArchive.prototype.addItem = function (item) {\n if (item === null || item === undefined) {\n throw new Error('ArgumentException: item cannot be null or undefined');\n }\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n if (file.name === item.name) {\n throw new Error('item with same name already exist');\n }\n }\n }\n this.files.push(item);\n };\n /**\n * add new directory to archive\n * @param directoryName directoryName to be created\n * @returns {void}\n */\n ZipArchive.prototype.addDirectory = function (directoryName) {\n if (directoryName === null || directoryName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (directoryName.length === 0) {\n throw new Error('ArgumentException: string cannot be empty');\n }\n if (directoryName.slice(-1) !== '/') {\n directoryName += '/';\n }\n if (this.files.indexOf(directoryName) !== -1) {\n throw new Error('item with same name already exist');\n }\n this.files.push(directoryName);\n };\n /**\n * gets item at specified index\n * @param {number} index - item index\n * @returns {ZipArchiveItem}\n */\n ZipArchive.prototype.getItem = function (index) {\n if (index >= 0 && index < this.files.length) {\n return this.files[index];\n }\n return undefined;\n };\n /**\n * determines whether an element is in the collection\n * @param {string | ZipArchiveItem} item - item to search\n * @returns {boolean}\n */\n ZipArchive.prototype.contains = function (item) {\n return this.files.indexOf(item) !== -1 ? true : false;\n };\n ZipArchive.prototype.open = function (base64String) {\n //return promise = new Promise((resolve: Function, reject: Function) => {\n var zipArchive = this;\n var zipByteArray = Utils.encodedString(base64String);\n if (zipByteArray.length == 0)\n throw new DOMException(\"stream\");\n var stream = new Stream(zipByteArray);\n //let lCentralDirEndPosition = this.findValueFromEnd( arrBuffer, Constants.CentralDirectoryEndSignature, 65557 );\n var lCentralDirEndPosition = ZipArchive.findValueFromEnd(stream, CentralDirectoryEndSignature, 65557);\n if (lCentralDirEndPosition < 0)\n throw new DOMException(\"Can't locate end of central directory record. Possible wrong file format or archive is corrupt.\");\n // Step2. Locate central directory and iterate through all items\n stream.position = lCentralDirEndPosition + CentralDirSizeOffset;\n var iCentralDirSize = ZipArchive.ReadInt32(stream);\n var lCentralDirPosition = lCentralDirEndPosition - iCentralDirSize;\n // verify that this is really central directory\n stream.position = lCentralDirPosition;\n this.readCentralDirectoryDataAndExtractItems(stream);\n //});\n // let zipArchive: ZipArchive = this;\n //let promise: Promise;\n // return promise = new Promise((resolve: Function, reject: Function) => {\n // let reader: FileReader = new FileReader();\n // reader.onload = (e: Event) => {\n // let data: Uint8Array = new Uint8Array((e.target as any).result);\n // let zipReader: ZipReader = new ZipReader(data);\n // zipReader.readEntries().then((entries: ZipEntry[]) => {\n // for (let i: number = 0; i < entries.length; i++) {\n // let entry: ZipEntry = entries[i];\n // let item: ZipArchiveItem = new ZipArchiveItem(zipArchive, entry.fileName);\n // item.data = entry.data;\n // item.compressionMethod = entry.compressionMethod;\n // item.crc = entry.crc;\n // item.lastModified = entry.lastModified;\n // item.lastModifiedDate = entry.lastModifiedDate;\n // item.size = entry.size;\n // item.uncompressedSize = entry.uncompressedSize;\n // zipArchive.addItem(item);\n // }\n // resolve(zipArchive);\n // });\n // };\n // reader.readAsArrayBuffer(fileName);\n // });\n };\n /// \n /// Read central directory record from the stream.\n /// \n /// Stream to read from.\n ZipArchive.prototype.readCentralDirectoryDataAndExtractItems = function (stream) {\n if (stream == null)\n throw new DOMException(\"stream\");\n var itemHelper;\n while (ZipArchive.ReadInt32(stream) == CentralHeaderSignature) {\n itemHelper = new ZipArchiveItemHelper();\n itemHelper.readCentralDirectoryData(stream);\n itemHelper;\n // let item: ZipArchiveItem = new ZipArchiveItem(this);\n // item.ReadCentralDirectoryData(stream);\n // m_arrItems.Add(item);\n }\n itemHelper.readData(stream, itemHelper.checkCrc);\n itemHelper.decompressData();\n this.files.push(new ZipArchiveItem(itemHelper.unCompressedStream.buffer, itemHelper.name));\n };\n /**\n * save archive with specified file name\n * @param {string} fileName save archive with specified file name\n * @returns {Promise}\n */\n ZipArchive.prototype.save = function (fileName) {\n if (fileName === null || fileName === undefined || fileName.length === 0) {\n throw new Error('ArgumentException: fileName cannot be null or undefined');\n }\n if (this.files.length === 0) {\n throw new Error('InvalidOperation');\n }\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal(fileName, false).then(function () {\n resolve(zipArchive);\n });\n });\n };\n /**\n * Save archive as blob\n * @return {Promise}\n */\n ZipArchive.prototype.saveAsBlob = function () {\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal('', true).then(function (blob) {\n resolve(blob);\n });\n });\n };\n ZipArchive.prototype.saveInternal = function (fileName, skipFileSave) {\n var _this = this;\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n var zipData = [];\n var dirLength = 0;\n for (var i = 0; i < zipArchive.files.length; i++) {\n var compressedObject = _this.getCompressedData(_this.files[i]);\n compressedObject.then(function (data) {\n dirLength = zipArchive.constructZippedObject(zipData, data, dirLength, data.isDirectory);\n if (zipData.length === zipArchive.files.length) {\n var blob = zipArchive.writeZippedContent(fileName, zipData, dirLength, skipFileSave);\n resolve(blob);\n }\n });\n }\n });\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchive.prototype.destroy = function () {\n if (this.files !== undefined && this.files.length > 0) {\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n file.destroy();\n }\n file = undefined;\n }\n this.files = [];\n }\n this.files = undefined;\n this.level = undefined;\n };\n ZipArchive.prototype.getCompressedData = function (item) {\n var zipArchive = this;\n var promise = new Promise(function (resolve, reject) {\n if (item instanceof ZipArchiveItem) {\n var reader_1 = new FileReader();\n reader_1.onload = function () {\n var input = new Uint8Array(reader_1.result);\n var data = {\n fileName: item.name, crc32Value: 0, compressedData: [],\n compressedSize: undefined, uncompressedDataSize: input.length, compressionType: undefined,\n isDirectory: false\n };\n if (zipArchive.level === 'Normal') {\n zipArchive.compressData(input, data, CRC32TABLE);\n var length_1 = 0;\n for (var i = 0; i < data.compressedData.length; i++) {\n length_1 += data.compressedData[i].length;\n }\n data.compressedSize = length_1;\n data.compressionType = '\\x08\\x00'; //Deflated = 8\n }\n else {\n data.compressedSize = input.length;\n data.crc32Value = zipArchive.calculateCrc32Value(0, input, CRC32TABLE);\n data.compressionType = '\\x00\\x00'; // Stored = 0\n data.compressedData.push(input);\n }\n resolve(data);\n };\n reader_1.readAsArrayBuffer(item.data);\n }\n else {\n var data = {\n fileName: item, crc32Value: 0, compressedData: '', compressedSize: 0, uncompressedDataSize: 0,\n compressionType: '\\x00\\x00', isDirectory: true\n };\n resolve(data);\n }\n });\n return promise;\n };\n ZipArchive.prototype.compressData = function (input, data, crc32Table) {\n var compressor = new CompressedStreamWriter(true);\n var currentIndex = 0;\n var nextIndex = 0;\n do {\n if (currentIndex >= input.length) {\n compressor.close();\n break;\n }\n nextIndex = Math.min(input.length, currentIndex + 16384);\n var subArray = input.subarray(currentIndex, nextIndex);\n data.crc32Value = this.calculateCrc32Value(data.crc32Value, subArray, crc32Table);\n compressor.write(subArray, 0, nextIndex - currentIndex);\n currentIndex = nextIndex;\n } while (currentIndex <= input.length);\n data.compressedData = compressor.compressedData;\n compressor.destroy();\n };\n ZipArchive.prototype.constructZippedObject = function (zipParts, data, dirLength, isDirectory) {\n var extFileAttr = 0;\n var date = new Date();\n if (isDirectory) {\n extFileAttr = extFileAttr | 0x00010; // directory flag\n }\n extFileAttr = extFileAttr | (0 & 0x3F);\n var header = this.writeHeader(data, date);\n var localHeader = 'PK\\x03\\x04' + header + data.fileName;\n var centralDir = this.writeCentralDirectory(data, header, dirLength, extFileAttr);\n zipParts.push({ localHeader: localHeader, centralDir: centralDir, compressedData: data });\n return dirLength + localHeader.length + data.compressedSize;\n };\n ZipArchive.prototype.writeHeader = function (data, date) {\n var zipHeader = '';\n zipHeader += '\\x0A\\x00' + '\\x00\\x00'; // version needed to extract & general purpose bit flag\n zipHeader += data.compressionType; // compression method Deflate=8,Stored=0\n zipHeader += this.getBytes(this.getModifiedTime(date), 2); // last modified Time\n zipHeader += this.getBytes(this.getModifiedDate(date), 2); // last modified date\n zipHeader += this.getBytes(data.crc32Value, 4); // crc-32 value\n zipHeader += this.getBytes(data.compressedSize, 4); // compressed file size\n zipHeader += this.getBytes(data.uncompressedDataSize, 4); // uncompressed file size\n zipHeader += this.getBytes(data.fileName.length, 2); // file name length\n zipHeader += this.getBytes(0, 2); // extra field length\n return zipHeader;\n };\n ZipArchive.prototype.writeZippedContent = function (fileName, zipData, localDirLen, skipFileSave) {\n var cenDirLen = 0;\n var buffer = [];\n for (var i = 0; i < zipData.length; i++) {\n var item = zipData[i];\n cenDirLen += item.centralDir.length;\n buffer.push(this.getArrayBuffer(item.localHeader));\n while (item.compressedData.compressedData.length) {\n buffer.push(item.compressedData.compressedData.shift().buffer);\n }\n }\n for (var i = 0; i < zipData.length; i++) {\n buffer.push(this.getArrayBuffer(zipData[i].centralDir));\n }\n buffer.push(this.getArrayBuffer(this.writeFooter(zipData, cenDirLen, localDirLen)));\n var blob = new Blob(buffer, { type: 'application/zip' });\n if (!skipFileSave) {\n Save.save(fileName, blob);\n }\n return blob;\n };\n ZipArchive.prototype.writeCentralDirectory = function (data, localHeader, offset, externalFileAttribute) {\n var directoryHeader = 'PK\\x01\\x02' +\n this.getBytes(0x0014, 2) + localHeader + // inherit from file header\n this.getBytes(0, 2) + // comment length\n '\\x00\\x00' + '\\x00\\x00' + // internal file attributes \n this.getBytes(externalFileAttribute, 4) + // external file attributes\n this.getBytes(offset, 4) + // local fileHeader relative offset\n data.fileName;\n return directoryHeader;\n };\n ZipArchive.prototype.writeFooter = function (zipData, centralLength, localLength) {\n var dirEnd = 'PK\\x05\\x06' + '\\x00\\x00' + '\\x00\\x00' +\n this.getBytes(zipData.length, 2) + this.getBytes(zipData.length, 2) +\n this.getBytes(centralLength, 4) + this.getBytes(localLength, 4) +\n this.getBytes(0, 2);\n return dirEnd;\n };\n ZipArchive.prototype.getArrayBuffer = function (input) {\n var a = new Uint8Array(input.length);\n for (var j = 0; j < input.length; ++j) {\n a[j] = input.charCodeAt(j) & 0xFF;\n }\n return a.buffer;\n };\n ZipArchive.prototype.getBytes = function (value, offset) {\n var bytes = '';\n for (var i = 0; i < offset; i++) {\n bytes += String.fromCharCode(value & 0xff);\n value = value >>> 8;\n }\n return bytes;\n };\n ZipArchive.prototype.getModifiedTime = function (date) {\n var modTime = date.getHours();\n modTime = modTime << 6;\n modTime = modTime | date.getMinutes();\n modTime = modTime << 5;\n return modTime = modTime | date.getSeconds() / 2;\n };\n ZipArchive.prototype.getModifiedDate = function (date) {\n var modiDate = date.getFullYear() - 1980;\n modiDate = modiDate << 4;\n modiDate = modiDate | (date.getMonth() + 1);\n modiDate = modiDate << 5;\n return modiDate = modiDate | date.getDate();\n };\n ZipArchive.prototype.calculateCrc32Value = function (crc32Value, input, crc32Table) {\n crc32Value ^= -1;\n for (var i = 0; i < input.length; i++) {\n crc32Value = (crc32Value >>> 8) ^ crc32Table[(crc32Value ^ input[i]) & 0xFF];\n }\n return (crc32Value ^ (-1));\n };\n /**\n * construct cyclic redundancy code table\n * @private\n */\n ZipArchive.initCrc32Table = function () {\n var i;\n for (var j = 0; j < 256; j++) {\n i = j;\n for (var k = 0; k < 8; k++) {\n i = ((i & 1) ? (0xEDB88320 ^ (i >>> 1)) : (i >>> 1));\n }\n CRC32TABLE[j] = i;\n }\n };\n ZipArchive.findValueFromEnd = function (stream, value, maxCount) {\n if (stream == null)\n throw new DOMException(\"stream\");\n // if( !stream.CanSeek || !stream.CanRead )\n // throw new ArgumentOutOfRangeException( \"We need to have seekable and readable stream.\" );\n // read last 4 bytes and compare with required value\n var lStreamSize = stream.inputStream.buffer.byteLength;\n if (lStreamSize < 4)\n return -1;\n var arrBuffer = new Uint8Array(4);\n var lLastPos = Math.max(0, lStreamSize - maxCount);\n var lCurrentPosition = lStreamSize - 1 - INT_SIZE;\n stream.position = lCurrentPosition;\n stream.read(arrBuffer, 0, INT_SIZE);\n var uiCurValue = arrBuffer[0];\n var bFound = (uiCurValue == value);\n if (!bFound) {\n while (lCurrentPosition > lLastPos) {\n // remove unnecessary byte and replace it with new value.\n uiCurValue <<= 8;\n lCurrentPosition--;\n stream.position = lCurrentPosition;\n uiCurValue += stream.readByte();\n if (uiCurValue == value) {\n bFound = true;\n break;\n }\n }\n }\n return bFound ? lCurrentPosition : -1;\n };\n /// \n /// Extracts Int32 value from the stream.\n /// \n /// Stream to read data from.\n /// Extracted value.\n ZipArchive.ReadInt32 = function (stream) {\n var buffer = new Uint8Array(INT_SIZE);\n if (stream.read(buffer, 0, INT_SIZE) != INT_SIZE) {\n throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n }\n return Utils.bitConverterToInt32(buffer, 0);\n };\n /// \n /// Extracts Int16 value from the stream.\n /// \n /// Stream to read data from.\n /// Extracted value.\n ZipArchive.ReadInt16 = function (stream) {\n var buffer = new Uint8Array(SHORT_SIZE);\n if (stream.read(buffer, 0, SHORT_SIZE) != SHORT_SIZE) {\n throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n }\n return Utils.bitConverterToInt16(buffer, 0);\n };\n /// \n /// Extracts unsigned Int16 value from the stream.\n /// \n /// Stream to read data from.\n /// Extracted value.\n ZipArchive.ReadUInt16 = function (stream) {\n {\n var buffer = new Uint8Array(SHORT_SIZE);\n if (stream.read(buffer, 0, SHORT_SIZE) != SHORT_SIZE) {\n throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n }\n return Utils.bitConverterToInt16(buffer, 0);\n }\n };\n return ZipArchive;\n}());\nexport { ZipArchive };\nvar ZipArchiveItemHelper = /** @class */ (function () {\n function ZipArchiveItemHelper() {\n /// \n /// Zip header signature.\n /// \n this.headerSignature = 0x04034b50;\n /// \n /// Indicates whether we should check Crc value when reading item's data. Check\n /// is performed when user gets access to decompressed data for the first time.\n /// \n this.checkCrc = true;\n /// \n /// Crc.\n /// \n this.crc32 = 0;\n }\n /// \n /// Read data from the stream based on the central directory.\n /// \n /// Stream to read data from, stream.Position must point at just after correct file header.\n ZipArchiveItemHelper.prototype.readCentralDirectoryData = function (stream) {\n // on the current moment we ignore \"version made by\" and \"version needed to extract\" fields.\n stream.position += 4;\n this.options = ZipArchive.ReadInt16(stream);\n this.compressionMethod = ZipArchive.ReadInt16(stream);\n this.checkCrc = (this.compressionMethod != 99); //COmpression.Defalte != SecurityConstants.AES\n //m_bCompressed = true;\n // on the current moment we ignore \"last mod file time\" and \"last mod file date\" fields.\n var lastModified = ZipArchive.ReadInt32(stream);\n //LastModified = ConvertToDateTime(lastModified);\n this.crc32 = Utils.bitConverterToUInt32(ZipArchive.ReadInt32(stream));\n this.compressedSize = ZipArchive.ReadInt32(stream);\n this.originalSize = ZipArchive.ReadInt32(stream);\n var iFileNameLength = ZipArchive.ReadInt16(stream);\n var iExtraFieldLenth = ZipArchive.ReadInt16(stream);\n var iCommentLength = ZipArchive.ReadInt16(stream);\n // on the current moment we ignore and \"disk number start\" (2 bytes),\n // \"internal file attributes\" (2 bytes).\n stream.position += 4;\n this.externalAttributes = ZipArchive.ReadInt32(stream);\n this.localHeaderOffset = ZipArchive.ReadInt32(stream);\n var arrBuffer = new Uint8Array(iFileNameLength);\n stream.read(arrBuffer, 0, iFileNameLength);\n var m_strItemName = Utils.byteToString(arrBuffer);\n m_strItemName = m_strItemName.replace(\"\\\\\", \"/\");\n this.name = m_strItemName;\n stream.position += iExtraFieldLenth + iCommentLength;\n if (this.options != 0)\n this.options = 0;\n };\n /// \n /// Reads zipped data from the stream.\n /// \n /// Stream to read data from.\n /// Indicates whether we should check crc value after data decompression.\n ZipArchiveItemHelper.prototype.readData = function (stream, checkCrc) {\n if (stream.length == 0)\n throw new DOMException(\"stream\");\n stream.position = this.localHeaderOffset;\n this.checkCrc = checkCrc;\n this.readLocalHeader(stream);\n this.readCompressedData(stream);\n };\n ZipArchiveItemHelper.prototype.decompressData = function () {\n if (this.compressionMethod == 8) {\n if (this.originalSize > 0) {\n this.decompressDataOld();\n }\n }\n };\n ZipArchiveItemHelper.prototype.decompressDataOld = function () {\n var reader = new CompressedStreamReader(this.compressedStream, true);\n var decompressedData;\n if (this.originalSize > 0)\n decompressedData = new Stream(new Uint8Array(this.originalSize));\n var arrBuffer = new Uint8Array(BufferSize);\n var iReadBytes;\n var past = new Uint8Array(0);\n while ((iReadBytes = reader.read(arrBuffer, 0, BufferSize)) > 0) {\n // past = new Uint8Array(decompressedData.length);\n // let currentBlock: Uint8Array = arrBuffer.subarray(0, iReadBytes);\n decompressedData.write(arrBuffer.subarray(0, iReadBytes), 0, iReadBytes);\n }\n this.unCompressedStream = decompressedData.toByteArray();\n // this.originalSize = decompressedData.Length;\n // m_bControlStream = true;\n // m_streamData = decompressedData;\n // decompressedData.SetLength( m_lOriginalSize );\n // decompressedData.Capacity = ( int )m_lOriginalSize;\n if (this.checkCrc) {\n //TODO: fix this\n //CheckCrc(decompressedData.ToArray());\n }\n //m_streamData.Position = 0;\n };\n /// \n /// Extracts local header from the stream.\n /// \n /// Stream to read data from.\n ZipArchiveItemHelper.prototype.readLocalHeader = function (stream) {\n if (stream.length == 0)\n throw new DOMException(\"stream\");\n if (ZipArchive.ReadInt32(stream) != this.headerSignature)\n throw new DOMException(\"Can't find local header signature - wrong file format or file is corrupt.\");\n // TODO: it is good to verify data read from the central directory record,\n // but on the current moment we simply skip it.\n stream.position += 22;\n var iNameLength = ZipArchive.ReadInt16(stream);\n var iExtraLength = ZipArchive.ReadUInt16(stream);\n if (this.compressionMethod == 99) //SecurityConstants.AES\n {\n // stream.Position += iNameLength + 8;\n // m_archive.EncryptionAlgorithm = (EncryptionAlgorithm)stream.ReadByte();\n // m_actualCompression = new byte[2];\n // stream.Read(m_actualCompression, 0, 2);\n }\n else if (iExtraLength > 2) {\n stream.position += iNameLength;\n var headerVal = ZipArchive.ReadInt16(stream);\n if (headerVal == 0x0017) //PKZipEncryptionHeader\n throw new DOMException(\"UnSupported\");\n else\n stream.position += iExtraLength - 2;\n }\n else\n stream.position += iNameLength + iExtraLength;\n };\n /// \n /// Extracts compressed data from the stream.\n /// \n /// Stream to read data from.\n ZipArchiveItemHelper.prototype.readCompressedData = function (stream) {\n var dataStream;\n if (this.compressedSize > 0) {\n var iBytesLeft = this.compressedSize;\n dataStream = new Stream(new Uint8Array(iBytesLeft));\n var arrBuffer = new Uint8Array(BufferSize);\n while (iBytesLeft > 0) {\n var iBytesToRead = Math.min(iBytesLeft, BufferSize);\n if (stream.read(arrBuffer, 0, iBytesToRead) != iBytesToRead)\n throw new DOMException(\"End of file reached - wrong file format or file is corrupt.\");\n dataStream.write(arrBuffer.subarray(0, iBytesToRead), 0, iBytesToRead);\n iBytesLeft -= iBytesToRead;\n }\n // if(m_archive.Password != null)\n // {\n // byte[] dataBuffer = new byte[dataStream.Length];\n // dataBuffer = dataStream.ToArray();\n // dataStream=new MemoryStream( Decrypt(dataBuffer));\n // }\n this.compressedStream = new Uint8Array(dataStream.inputStream);\n // m_bControlStream = true;\n }\n else if (this.compressedSize < 0) //If compression size is negative, then read until the next header signature reached.\n {\n // MemoryStream dataStream = new MemoryStream();\n // int bt = 0;\n // bool proceed=true;\n // while (proceed)\n // {\n // if ((bt = stream.ReadByte()) == Constants.HeaderSignatureStartByteValue)\n // {\n // stream.Position -= 1;\n // int headerSignature = ZipArchive.ReadInt32(stream);\n // if (headerSignature==Constants.CentralHeaderSignature || headerSignature==Constants.CentralHeaderSignature)\n // {\n // proceed = false;\n // }\n // stream.Position -= 3;\n // }\n // if (proceed)\n // dataStream.WriteByte((byte)bt);\n // }\n // m_streamData = dataStream;\n // m_lCompressedSize = m_streamData.Length;\n // m_bControlStream = true;\n }\n else if (this.compressedSize == 0) {\n // m_streamData = new MemoryStream();\n }\n };\n return ZipArchiveItemHelper;\n}());\nexport { ZipArchiveItemHelper };\n/**\n * Class represent unique ZipArchive item\n * ```typescript\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * ```\n */\nvar ZipArchiveItem = /** @class */ (function () {\n /**\n * constructor for creating {ZipArchiveItem} instance\n * @param {Blob|ArrayBuffer} data file data\n * @param {itemName} itemName absolute file path\n */\n function ZipArchiveItem(data, itemName) {\n if (data === null || data === undefined) {\n throw new Error('ArgumentException: data cannot be null or undefined');\n }\n if (itemName === null || itemName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (itemName.length === 0) {\n throw new Error('string cannot be empty');\n }\n this.data = data;\n this.name = itemName;\n }\n Object.defineProperty(ZipArchiveItem.prototype, \"dataStream\", {\n get: function () {\n return this.decompressedStream;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchiveItem.prototype, \"name\", {\n /**\n * Get the name of archive item\n * @returns string\n */\n get: function () {\n return this.fileName;\n },\n /**\n * Set the name of archive item\n * @param {string} value\n */\n set: function (value) {\n this.fileName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchiveItem.prototype.destroy = function () {\n this.fileName = undefined;\n this.data = undefined;\n };\n return ZipArchiveItem;\n}());\nexport { ZipArchiveItem };\n/* eslint-enable */ \n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n// import { IValueFormatter } from '../base/interface';\n/**\n * ValueFormatter class to globalize the value.\n * @private\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n // if (!isNullOrUndefined(cultureName)) {\n // this.intl.culture = cultureName;\n // }\n }\n ValueFormatter.prototype.getFormatFunction = function (format, isServerRendered) {\n if (format.type) {\n if (isServerRendered) {\n format.isServerRendered = true;\n }\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n // if ((format).type) {\n // return this.intl.getDateParser(format);\n // } else {\n // return this.intl.getNumberParser(format);\n // }\n // }\n // public fromView(value: string, format: Function, type?: string): string | number | Date {\n // if (type === 'date' || type === 'datetime' || type === 'number') {\n // return format(value);\n // } else {\n // return value;\n // }\n // }\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n // public setCulture(cultureName: string): void {\n // if (!isNullOrUndefined(cultureName)) {\n // setCulture(cultureName);\n // }\n // }\n /* tslint:disable:no-any */\n ValueFormatter.prototype.displayText = function (value, format, isServerRendered) {\n return this.toView(value, this.getFormatFunction(format, isServerRendered));\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\n/**\n * CsvHelper class\n * @private\n */\nvar CsvHelper = /** @class */ (function () {\n /* tslint:disable:no-any */\n function CsvHelper(json, separator) {\n this.csvStr = '';\n if (separator === null || separator === undefined) {\n this.separator = ',';\n }\n else {\n this.separator = separator;\n }\n this.formatter = new ValueFormatter();\n this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n if (json.isServerRendered !== null && json.isServerRendered !== undefined) {\n this.isServerRendered = json.isServerRendered;\n }\n if (json.styles !== null && json.styles !== undefined) {\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parseWorksheet(json.worksheets[0]);\n }\n //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n }\n CsvHelper.prototype.parseWorksheet = function (json) {\n //Rows\n if (json.rows !== null && json.rows !== undefined) {\n this.parseRows(json.rows);\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRows = function (rows) {\n var count = 1;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n //Row index\n if (row.index !== null && row.index !== undefined) {\n while (count < row.index) {\n this.csvStr += '\\r\\n';\n count++;\n }\n this.parseRow(row);\n }\n else {\n throw Error('Row index is missing.');\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRow = function (row) {\n if (row.cells !== null && row.cells !== undefined) {\n var count = 1;\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n //cell index\n if (cell.index !== null && cell.index !== undefined) {\n while (count < cell.index) {\n this.csvStr += this.separator;\n count++;\n }\n this.parseCell(cell);\n }\n else {\n throw Error('Cell index is missing.');\n }\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseCell = function (cell) {\n var csv = this.csvStr;\n if (cell.value !== undefined) {\n if (cell.value instanceof Date) {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n try {\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }, this.isServerRendered));\n }\n catch (error) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', format: cell.style.numberFormat }, this.isServerRendered));\n }\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n try {\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n catch (error) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', format: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n }\n else {\n csv += cell.value;\n }\n }\n else if (typeof (cell.value) === 'boolean') {\n csv += cell.value ? 'TRUE' : 'FALSE';\n }\n else if (typeof (cell.value) === 'number') {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }, this.isServerRendered));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n else {\n csv += cell.value;\n }\n }\n else {\n csv += this.parseCellValue(cell.value);\n }\n }\n this.csvStr = csv;\n };\n CsvHelper.prototype.parseCellValue = function (value) {\n var val = '';\n var length = value.length;\n for (var start = 0; start < length; start++) {\n if (value[start] === '\\\"') {\n val += value[start].replace('\\\"', '\\\"\\\"');\n }\n else {\n val += value[start];\n }\n }\n value = val;\n if (value.indexOf(this.separator) !== -1 || value.indexOf('\\n') !== -1 || value.indexOf('\\\"') !== -1) {\n return value = '\\\"' + value + '\\\"';\n }\n else {\n return value;\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n */\n CsvHelper.prototype.save = function (fileName) {\n this.buffer = new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(this.buffer, fileName);\n }\n else {\n var dataUrl_1 = window.URL.createObjectURL(this.buffer);\n var dwlLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n dwlLink.download = fileName;\n dwlLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n dwlLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n });\n }\n };\n CsvHelper.prototype.saveAsBlob = function () {\n return new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n };\n return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\n * @private\n */\nvar BlobHelper = /** @class */ (function () {\n function BlobHelper() {\n /* tslint:disable:no-any */\n this.parts = [];\n }\n /* tslint:disable:no-any */\n BlobHelper.prototype.append = function (part) {\n this.parts.push(part);\n this.blob = undefined; // Invalidate the blob\n };\n BlobHelper.prototype.getBlob = function () {\n return new Blob(this.parts, { type: 'text/plain' });\n };\n return BlobHelper;\n}());\nexport { BlobHelper };\n","/**\n * AutoFilters class\n * @private\n */\nvar AutoFilters = /** @class */ (function () {\n function AutoFilters() {\n }\n return AutoFilters;\n}());\nexport { AutoFilters };\n","import { Worksheets } from './worksheets';\nimport { Worksheet, FreezePane, MergeCell, MergeCells, HyperLink, Grouping } from './worksheet';\nimport { CellStyle, Font, Borders, CellXfs, Alignment, NumFmt, CellStyleXfs, CellStyles } from './cell-style';\nimport { Column } from './column';\nimport { Row, Rows } from './row';\nimport { Image } from './image';\nimport { Cell, Cells } from './cell';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { CsvHelper } from './csv-helper';\nimport { Internationalization, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BlobHelper } from './blob-helper';\nimport { AutoFilters } from './auto-filters';\n/**\n * Workbook class\n */\nvar Workbook = /** @class */ (function () {\n /* tslint:disable:no-any */\n function Workbook(json, saveType, culture, currencyString, separator) {\n this.sharedStringCount = 0;\n this.unitsProportions = [\n 96 / 75.0,\n 96 / 300.0,\n 96,\n 96 / 25.4,\n 96 / 2.54,\n 1,\n 96 / 72.0,\n 96 / 72.0 / 12700,\n ];\n /* tslint:disable:no-any */\n this.hyperlinkStyle = { fontColor: '#0000FF', underline: true };\n if (culture !== undefined) {\n this.culture = culture;\n }\n else {\n this.culture = 'en-US';\n }\n if (currencyString !== undefined) {\n this.currency = currencyString;\n }\n else {\n this.currency = 'USD';\n }\n this.intl = new Internationalization(this.culture);\n this.mSaveType = saveType;\n if (saveType === 'xlsx') {\n this.mArchive = new ZipArchive();\n this.sharedString = [];\n this.mFonts = [];\n this.mBorders = [];\n this.mStyles = [];\n this.printTitles = new Map();\n this.cellStyles = new Map();\n this.mNumFmt = new Map();\n this.mFills = new Map();\n this.mStyles.push(new CellStyle());\n this.mFonts.push(new Font());\n /* tslint:disable */\n this.cellStyles.set('Normal', new CellStyles());\n /* tslint:enable */\n this.mCellXfs = [];\n this.mCellStyleXfs = [];\n this.drawingCount = 0;\n this.imageCount = 0;\n if (json.styles !== null && json.styles !== undefined) {\n /* tslint:disable-next-line:no-any */\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined) {\n if (!this.cellStyles.has(json.styles[i].name)) {\n var cellStyle = new CellStyle();\n cellStyle.isGlobalStyle = true;\n this.parserCellStyle(json.styles[i], cellStyle, 'none');\n var cellStylesIn = new CellStyles();\n cellStylesIn.name = cellStyle.name;\n cellStylesIn.xfId = (cellStyle.index - 1);\n this.cellStyles.set(cellStylesIn.name, cellStylesIn);\n /* tslint:disable-next-line:no-any */\n var tFormat = {};\n if (json.styles[i].numberFormat !== undefined) {\n tFormat.format = json.styles[i].numberFormat;\n }\n if (json.styles[i].type !== undefined) {\n tFormat.type = json.styles[i].type;\n }\n else {\n tFormat.type = 'datetime';\n }\n if (tFormat.format !== undefined) {\n this.globalStyles.set(json.styles[i].name, tFormat);\n }\n }\n else {\n throw Error('Style name ' + json.styles[i].name + ' is already existed');\n }\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parserWorksheets(json.worksheets);\n }\n else {\n throw Error('Worksheet is expected.');\n }\n // Parses the BuiltInProperties data to DOM. \n if (json.builtInProperties !== null && json.builtInProperties !== undefined) {\n this.builtInProperties = new BuiltInProperties();\n this.parserBuiltInProperties(json.builtInProperties, this.builtInProperties);\n }\n }\n else {\n this.csvHelper = new CsvHelper(json, separator);\n }\n }\n /* tslint:disable:no-any */\n Workbook.prototype.parserBuiltInProperties = function (jsonBuiltInProperties, builtInProperties) {\n //Author\n if (jsonBuiltInProperties.author !== null && jsonBuiltInProperties.author !== undefined) {\n builtInProperties.author = jsonBuiltInProperties.author;\n }\n //Comments\n if (jsonBuiltInProperties.comments !== null && jsonBuiltInProperties.comments !== undefined) {\n builtInProperties.comments = jsonBuiltInProperties.comments;\n }\n //Category\n if (jsonBuiltInProperties.category !== null && jsonBuiltInProperties.category !== undefined) {\n builtInProperties.category = jsonBuiltInProperties.category;\n }\n //Company\n if (jsonBuiltInProperties.company !== null && jsonBuiltInProperties.company !== undefined) {\n builtInProperties.company = jsonBuiltInProperties.company;\n }\n //Manager\n if (jsonBuiltInProperties.manager !== null && jsonBuiltInProperties.manager !== undefined) {\n builtInProperties.manager = jsonBuiltInProperties.manager;\n }\n //Subject\n if (jsonBuiltInProperties.subject !== null && jsonBuiltInProperties.subject !== undefined) {\n builtInProperties.subject = jsonBuiltInProperties.subject;\n }\n //Title\n if (jsonBuiltInProperties.title !== null && jsonBuiltInProperties.title !== undefined) {\n builtInProperties.title = jsonBuiltInProperties.title;\n }\n //Creation date\n if (jsonBuiltInProperties.createdDate !== null && jsonBuiltInProperties.createdDate !== undefined) {\n builtInProperties.createdDate = jsonBuiltInProperties.createdDate;\n }\n //Modified date\n if (jsonBuiltInProperties.modifiedDate !== null && jsonBuiltInProperties.modifiedDate !== undefined) {\n builtInProperties.modifiedDate = jsonBuiltInProperties.modifiedDate;\n }\n //Tags\n if (jsonBuiltInProperties.tags !== null && jsonBuiltInProperties.tags !== undefined) {\n builtInProperties.tags = jsonBuiltInProperties.tags;\n }\n //Status\n if (jsonBuiltInProperties.status !== null && jsonBuiltInProperties.status !== undefined) {\n builtInProperties.status = jsonBuiltInProperties.status;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserWorksheets = function (json) {\n this.worksheets = new Worksheets();\n var length = json.length;\n for (var i = 0; i < length; i++) {\n var jsonSheet = json[i];\n var sheet = new Worksheet();\n this.mergeCells = new MergeCells();\n this.mergedCellsStyle = new Map();\n this.mHyperLinks = [];\n //Name\n if (jsonSheet.name !== null && jsonSheet.name !== undefined) {\n sheet.name = jsonSheet.name;\n }\n else {\n sheet.name = 'Sheet' + (i + 1).toString();\n }\n if (jsonSheet.enableRtl !== null && jsonSheet.enableRtl !== undefined) {\n sheet.enableRtl = jsonSheet.enableRtl;\n }\n sheet.index = (i + 1);\n //Columns\n if (jsonSheet.columns !== null && jsonSheet.columns !== undefined) {\n this.parserColumns(jsonSheet.columns, sheet);\n }\n //Rows\n if (jsonSheet.rows !== null && jsonSheet.rows !== undefined) {\n this.parserRows(jsonSheet.rows, sheet);\n }\n //showGridLines\n if (jsonSheet.showGridLines !== null && jsonSheet.showGridLines !== undefined) {\n sheet.showGridLines = jsonSheet.showGridLines;\n }\n //FreezePanes\n if (jsonSheet.freeze !== null && jsonSheet.freeze !== undefined) {\n this.parserFreezePanes(jsonSheet.freeze, sheet);\n }\n //Print Title\n if (jsonSheet.printTitle !== null && jsonSheet.printTitle !== undefined) {\n this.parserPrintTitle(jsonSheet.printTitle, sheet);\n }\n if (jsonSheet.pageSetup !== undefined) {\n if (jsonSheet.pageSetup.isSummaryRowBelow !== undefined) {\n sheet.isSummaryRowBelow = jsonSheet.pageSetup.isSummaryRowBelow;\n }\n }\n if (jsonSheet.images !== undefined) {\n this.parserImages(jsonSheet.images, sheet);\n }\n if (jsonSheet.autoFilters !== null && jsonSheet.autoFilters !== undefined) {\n this.parseFilters(jsonSheet.autoFilters, sheet);\n }\n sheet.index = (i + 1);\n sheet.mergeCells = this.mergeCells;\n sheet.hyperLinks = this.mHyperLinks;\n this.worksheets.push(sheet);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.mergeOptions = function (fromJson, toJson) {\n /* tslint:disable:no-any */\n var result = {};\n this.applyProperties(fromJson, result);\n this.applyProperties(toJson, result);\n return result;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.applyProperties = function (sourceJson, destJson) {\n var keys = Object.keys(sourceJson);\n for (var index = 0; index < keys.length; index++) {\n if (keys[index] !== 'name') {\n destJson[keys[index]] = sourceJson[keys[index]];\n }\n }\n };\n Workbook.prototype.getCellName = function (row, column) {\n return this.getColumnName(column) + row.toString();\n };\n Workbook.prototype.getColumnName = function (col) {\n col--;\n var strColumnName = '';\n do {\n var iCurrentDigit = col % 26;\n col = col / 26 - 1;\n strColumnName = String.fromCharCode(65 + iCurrentDigit) + strColumnName;\n } while (col >= 0);\n return strColumnName;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserPrintTitle = function (json, sheet) {\n var printTitleName = '';\n var titleRowName;\n if (json.fromRow !== null && json.fromRow !== undefined) {\n var fromRow = json.fromRow;\n var toRow = void 0;\n if (json.toRow !== null && json.toRow !== undefined) {\n toRow = json.toRow;\n }\n else {\n toRow = json.fromRow;\n }\n titleRowName = '$' + fromRow + ':$' + toRow;\n }\n var titleColName;\n if (json.fromColumn !== null && json.fromColumn !== undefined) {\n var fromColumn = json.fromColumn;\n var toColumn = void 0;\n if (json.toColumn !== null && json.toColumn !== undefined) {\n toColumn = json.toColumn;\n }\n else {\n toColumn = json.fromColumn;\n }\n titleColName = '$' + this.getColumnName(fromColumn) + ':$' + this.getColumnName(toColumn);\n }\n if (titleRowName !== undefined) {\n printTitleName += (sheet.name + '!' + titleRowName);\n }\n if (titleColName !== undefined && titleRowName !== undefined) {\n printTitleName += ',' + (sheet.name + '!' + titleColName);\n }\n else if (titleColName !== undefined) {\n printTitleName += (sheet.name + '!' + titleColName);\n }\n if (printTitleName !== '') {\n this.printTitles.set(sheet.index - 1, printTitleName);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserFreezePanes = function (json, sheet) {\n sheet.freezePanes = new FreezePane();\n if (json.row !== null && json.row !== undefined) {\n sheet.freezePanes.row = json.row;\n }\n else {\n sheet.freezePanes.row = 0;\n }\n if (json.column !== null && json.column !== undefined) {\n sheet.freezePanes.column = json.column;\n }\n else {\n sheet.freezePanes.column = 0;\n }\n sheet.freezePanes.leftCell = this.getCellName(sheet.freezePanes.row + 1, sheet.freezePanes.column + 1);\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserColumns = function (json, sheet) {\n var columnsLength = json.length;\n sheet.columns = [];\n for (var column = 0; column < columnsLength; column++) {\n var col = new Column();\n if (json[column].index !== null && json[column].index !== undefined) {\n col.index = json[column].index;\n }\n else {\n throw Error('Column index is missing.');\n }\n if (json[column].width !== null && json[column].width !== undefined) {\n col.width = json[column].width;\n }\n sheet.columns.push(col);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRows = function (json, sheet) {\n var rowsLength = json.length;\n sheet.rows = new Rows();\n var rowId = 0;\n for (var r = 0; r < rowsLength; r++) {\n var row = this.parserRow(json[r], rowId);\n rowId = row.index;\n sheet.rows.add(row);\n }\n this.insertMergedCellsStyle(sheet);\n };\n Workbook.prototype.insertMergedCellsStyle = function (sheet) {\n var _this = this;\n if (this.mergeCells.length > 0) {\n this.mergedCellsStyle.forEach(function (value, key) {\n var row = sheet.rows.filter(function (item) {\n return item.index === value.y;\n })[0];\n if (!isNullOrUndefined(row)) {\n var cell = row.cells.filter(function (item) {\n return item.index === value.x;\n })[0];\n if (!isNullOrUndefined(cell)) {\n cell.styleIndex = value.styleIndex;\n }\n else {\n var cells = row.cells.filter(function (item) {\n return item.index <= value.x;\n });\n var insertIndex = 0;\n if (cells.length > 0) {\n insertIndex = row.cells.indexOf(cells[cells.length - 1]) + 1;\n }\n row.cells.splice(insertIndex, 0, _this.createCell(value, key));\n }\n }\n else {\n var rows = sheet.rows.filter(function (item) {\n return item.index <= value.y;\n });\n var rowToInsert = new Row();\n rowToInsert.index = value.y;\n rowToInsert.cells = new Cells();\n rowToInsert.cells.add(_this.createCell(value, key));\n var insertIndex = 0;\n if (rows.length > 0) {\n insertIndex = sheet.rows.indexOf(rows[rows.length - 1]) + 1;\n }\n sheet.rows.splice(insertIndex, 0, rowToInsert);\n }\n });\n }\n };\n Workbook.prototype.createCell = function (value, key) {\n var cellToInsert = new Cell();\n cellToInsert.refName = key;\n cellToInsert.index = value.x;\n cellToInsert.cellStyle = new CellStyle();\n cellToInsert.styleIndex = value.styleIndex;\n return cellToInsert;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRow = function (json, rowIndex) {\n var row = new Row();\n //Row Height\n if (json.height !== null && json.height !== undefined) {\n row.height = json.height;\n }\n //Row index\n if (json.index !== null && json.index !== undefined) {\n row.index = json.index;\n }\n else {\n throw Error('Row index is missing.');\n }\n if (json.grouping !== null && json.grouping !== undefined) {\n this.parseGrouping(json.grouping, row);\n }\n this.parseCells(json.cells, row);\n return row;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseGrouping = function (json, row) {\n row.grouping = new Grouping();\n if (json.outlineLevel !== undefined) {\n row.grouping.outlineLevel = json.outlineLevel;\n }\n if (json.isCollapsed !== undefined) {\n row.grouping.isCollapsed = json.isCollapsed;\n }\n if (json.isHidden !== undefined) {\n row.grouping.isHidden = json.isHidden;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseCells = function (json, row) {\n row.cells = new Cells();\n var cellsLength = json !== undefined ? json.length : 0;\n var spanMin = 1;\n var spanMax = 1;\n var curCellIndex = 0;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable:no-any */\n var jsonCell = json[cellId];\n var cell = new Cell();\n //cell index\n if (jsonCell.index !== null && jsonCell.index !== undefined) {\n cell.index = jsonCell.index;\n }\n else {\n throw Error('Cell index is missing.');\n }\n if (cell.index < spanMin) {\n spanMin = cell.index;\n }\n else if (cell.index > spanMax) {\n spanMax = cell.index;\n }\n //Update the Cell name\n cell.refName = this.getCellName(row.index, cell.index);\n //Row span\n if (jsonCell.rowSpan !== null && jsonCell.rowSpan !== undefined) {\n cell.rowSpan = jsonCell.rowSpan - 1;\n }\n else {\n cell.rowSpan = 0;\n }\n //Column span\n if (jsonCell.colSpan !== null && jsonCell.colSpan !== undefined) {\n cell.colSpan = jsonCell.colSpan - 1;\n }\n else {\n cell.colSpan = 0;\n }\n //Hyperlink\n if (jsonCell.hyperlink !== null && jsonCell.hyperlink !== undefined) {\n var hyperLink = new HyperLink();\n if (jsonCell.hyperlink.target !== undefined) {\n hyperLink.target = jsonCell.hyperlink.target;\n if (jsonCell.hyperlink.displayText !== undefined) {\n cell.value = jsonCell.hyperlink.displayText;\n }\n else {\n cell.value = jsonCell.hyperlink.target;\n }\n cell.type = this.getCellValueType(cell.value);\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n cell.cellStyle = new CellStyle();\n /* tslint:disable-next-line:max-line-length */\n this.parserCellStyle((jsonCell.style !== undefined ? this.mergeOptions(jsonCell.style, this.hyperlinkStyle) : this.hyperlinkStyle), cell.cellStyle, 'string');\n cell.styleIndex = cell.cellStyle.index;\n }\n }\n // formulas\n if (jsonCell.formula !== null && jsonCell.formula !== undefined) {\n cell.formula = jsonCell.formula;\n cell.type = 'formula';\n }\n //Cell value\n if (jsonCell.value !== null && jsonCell.value !== undefined) {\n if (cell.formula !== undefined) {\n cell.value = 0;\n }\n else {\n cell.value = jsonCell.value;\n cell.type = this.getCellValueType(cell.value);\n }\n }\n if (jsonCell.style !== null && jsonCell.style !== undefined && cell.styleIndex === undefined) {\n cell.cellStyle = new CellStyle();\n if (cell.value instanceof Date) {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type, 14);\n }\n else {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type);\n }\n cell.styleIndex = cell.cellStyle.index;\n }\n else if (cell.value instanceof Date) {\n cell.cellStyle = new CellStyle();\n this.parserCellStyle({}, cell.cellStyle, cell.type, 14);\n cell.styleIndex = cell.cellStyle.index;\n }\n this.parseCellType(cell);\n this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\n row.cells.add(cell);\n curCellIndex = (cell.index + 1);\n }\n row.spans = (spanMin) + ':' + (spanMax);\n };\n Workbook.prototype.GetColors = function () {\n var colors;\n colors = new Map();\n /* tslint:disable */\n colors.set('WHITE', 'FFFFFFFF');\n /* tslint:disable */\n colors.set('SILVER', 'FFC0C0C0');\n /* tslint:disable */\n colors.set('GRAY', 'FF808080');\n /* tslint:disable */\n colors.set('BLACK', 'FF000000');\n /* tslint:disable */\n colors.set('RED', 'FFFF0000');\n /* tslint:disable */\n colors.set('MAROON', 'FF800000');\n /* tslint:disable */\n colors.set('YELLOW', 'FFFFFF00');\n /* tslint:disable */\n colors.set('OLIVE', 'FF808000');\n /* tslint:disable */\n colors.set('LIME', 'FF00FF00');\n /* tslint:disable */\n colors.set('GREEN', 'FF008000');\n /* tslint:disable */\n colors.set('AQUA', 'FF00FFFF');\n /* tslint:disable */\n colors.set('TEAL', 'FF008080');\n /* tslint:disable */\n colors.set('BLUE', 'FF0000FF');\n /* tslint:disable */\n colors.set('NAVY', 'FF000080');\n /* tslint:disable */\n colors.set('FUCHSIA', 'FFFF00FF');\n /* tslint:disable */\n colors.set('PURPLE', 'FF800080');\n return colors;\n };\n Workbook.prototype.processColor = function (colorVal) {\n if (colorVal.indexOf('#') === 0) {\n return colorVal.replace('#', 'FF');\n }\n colorVal = colorVal.toUpperCase();\n this.rgbColors = this.GetColors();\n if (this.rgbColors.has(colorVal)) {\n colorVal = this.rgbColors.get(colorVal);\n }\n else {\n colorVal = 'FF000000';\n }\n return colorVal;\n };\n Workbook.prototype.processCellValue = function (value, cell) {\n var cellValue = value;\n if (value.indexOf(\"\") !== -1 ||\n value.indexOf(\"\") !== -1 || value.indexOf(\"\") !== -1) {\n var processedVal = '';\n var startindex = value.indexOf('<', 0);\n var endIndex = value.indexOf('>', startindex + 1);\n if (startindex >= 0 && endIndex >= 0) {\n if (startindex !== 0) {\n processedVal += '' + this.processString(value.substring(0, startindex)) + '';\n }\n while (startindex >= 0 && endIndex >= 0) {\n endIndex = value.indexOf('>', startindex + 1);\n if (endIndex >= 0) {\n var subString = value.substring(startindex + 1, endIndex);\n startindex = value.indexOf('<', endIndex + 1);\n if (startindex < 0) {\n startindex = cellValue.length;\n }\n var text = cellValue.substring(endIndex + 1, startindex);\n if (text.length !== 0) {\n var subSplit = subString.split(' ');\n if (subSplit.length > 0) {\n processedVal += '';\n }\n if (subSplit.length > 1) {\n for (var _i = 0, subSplit_1 = subSplit; _i < subSplit_1.length; _i++) {\n var element = subSplit_1[_i];\n var start = element.trim().substring(0, 5);\n switch (start) {\n case 'size=':\n processedVal += '';\n break;\n case 'face=':\n processedVal += '';\n break;\n case 'color':\n processedVal += '';\n break;\n case 'href=':\n var hyperLink = new HyperLink();\n hyperLink.target = element.substring(6, element.length - 1).trim();\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n processedVal += '';\n break;\n }\n }\n }\n else if (subSplit.length === 1) {\n var style = subSplit[0].trim();\n switch (style) {\n case 'b':\n processedVal += '';\n break;\n case 'i':\n processedVal += '';\n break;\n case 'u':\n processedVal += '';\n break;\n }\n }\n processedVal += '' + this.processString(text) + '';\n }\n }\n }\n if (processedVal === '') {\n return cellValue;\n }\n return processedVal;\n }\n else {\n return cellValue;\n }\n }\n else {\n return cellValue;\n }\n };\n Workbook.prototype.applyGlobalStyle = function (json, cellStyle) {\n var index = 0;\n if (this.cellStyles.has(json.name)) {\n cellStyle.index = this.mStyles.filter(function (a) { return (a.name === json.name); })[0].index;\n cellStyle.name = json.name;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserCellStyle = function (json, cellStyle, cellType, defStyleIndex) {\n //name\n if (json.name !== null && json.name !== undefined) {\n if (cellStyle.isGlobalStyle) {\n cellStyle.name = json.name;\n }\n else {\n this.applyGlobalStyle(json, cellStyle);\n return;\n }\n }\n //background color\n if (json.backColor !== null && json.backColor !== undefined) {\n cellStyle.backColor = json.backColor;\n }\n //borders\n //leftBorder\n cellStyle.borders = new Borders();\n //AllBorder\n if (json.borders !== null && json.borders !== undefined) {\n this.parserBorder(json.borders, cellStyle.borders.all);\n }\n //leftborder\n if (json.leftBorder !== null && json.leftBorder !== undefined) {\n this.parserBorder(json.leftBorder, cellStyle.borders.left);\n }\n //rightBorder\n if (json.rightBorder !== null && json.rightBorder !== undefined) {\n this.parserBorder(json.rightBorder, cellStyle.borders.right);\n }\n //topBorder\n if (json.topBorder !== null && json.topBorder !== undefined) {\n this.parserBorder(json.topBorder, cellStyle.borders.top);\n }\n //bottomBorder\n if (json.bottomBorder !== null && json.bottomBorder !== undefined) {\n this.parserBorder(json.bottomBorder, cellStyle.borders.bottom);\n }\n //fontName\n if (json.fontName !== null && json.fontName !== undefined) {\n cellStyle.fontName = json.fontName;\n }\n //fontSize\n if (json.fontSize !== null && json.fontSize !== undefined) {\n cellStyle.fontSize = json.fontSize;\n }\n //fontColor\n if (json.fontColor !== null && json.fontColor !== undefined) {\n cellStyle.fontColor = json.fontColor;\n }\n //italic\n if (json.italic !== null && json.italic !== undefined) {\n cellStyle.italic = json.italic;\n }\n //bold\n if (json.bold !== null && json.bold !== undefined) {\n cellStyle.bold = json.bold;\n }\n //hAlign\n if (json.hAlign !== null && json.hAlign !== undefined) {\n cellStyle.hAlign = json.hAlign.toLowerCase();\n }\n //indent\n if (json.indent !== null && json.indent !== undefined) {\n cellStyle.indent = json.indent;\n if (!(cellStyle.hAlign === 'left' || cellStyle.hAlign === 'right')) {\n cellStyle.hAlign = 'left';\n }\n }\n if (json.rotation !== null && json.rotation !== undefined) {\n cellStyle.rotation = json.rotation;\n }\n //vAlign\n if (json.vAlign !== null && json.vAlign !== undefined) {\n cellStyle.vAlign = json.vAlign.toLowerCase();\n }\n //underline\n if (json.underline !== null && json.underline !== undefined) {\n cellStyle.underline = json.underline;\n }\n //strikeThrough\n if (json.strikeThrough !== null && json.strikeThrough !== undefined) {\n cellStyle.strikeThrough = json.strikeThrough;\n }\n //wrapText\n if (json.wrapText !== null && json.wrapText !== undefined) {\n cellStyle.wrapText = json.wrapText;\n }\n //numberFormat\n if (json.numberFormat !== null && json.numberFormat !== undefined) {\n if (json.type !== null && json.type !== undefined) {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, json.type);\n }\n else {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, cellType);\n }\n }\n else if (defStyleIndex !== undefined) {\n cellStyle.numFmtId = 14;\n cellStyle.numberFormat = 'GENERAL';\n }\n else {\n cellStyle.numberFormat = 'GENERAL';\n }\n cellStyle.index = this.processCellStyle(cellStyle);\n };\n Workbook.prototype.switchNumberFormat = function (numberFormat, type) {\n var format = this.getNumberFormat(numberFormat, type);\n if (format !== numberFormat) {\n var numFmt = this.mNumFmt.get(numberFormat);\n if (numFmt !== undefined) {\n numFmt.formatCode = format;\n if (this.mNumFmt.has(format)) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXfs = _a[_i];\n if (cellStyleXfs.numFmtId === numFmt.numFmtId) {\n cellStyleXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n for (var _b = 0, _c = this.mCellXfs; _b < _c.length; _b++) {\n var cellXfs = _c[_b];\n if (cellXfs.numFmtId === numFmt.numFmtId) {\n cellXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n }\n }\n }\n };\n Workbook.prototype.changeNumberFormats = function (value) {\n if (typeof value == \"string\") {\n var regex = new RegExp(this.currency, 'g');\n value = value.replace(regex, '[$' + this.currency + ']');\n }\n else if (typeof value == \"object\") {\n for (var i = 0; i < value.length; i++) {\n value[i] = value[i].replace(this.currency, '[$' + this.currency + ']');\n }\n }\n return value;\n };\n Workbook.prototype.getNumberFormat = function (numberFormat, type) {\n var returnFormat;\n switch (type) {\n case 'number':\n try {\n returnFormat = this.intl.getNumberPattern({ format: numberFormat, currency: this.currency, useGrouping: true }, true);\n if (this.currency.length > 1) {\n returnFormat = this.changeNumberFormats(returnFormat);\n }\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'datetime':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n case 'date':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n case 'time':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n default:\n returnFormat = numberFormat;\n break;\n }\n return returnFormat;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserBorder = function (json, border) {\n if (json.color !== null && json.color !== undefined) {\n border.color = json.color;\n }\n else {\n border.color = '#000000';\n }\n if (json.lineStyle !== null && json.lineStyle !== undefined) {\n border.lineStyle = json.lineStyle;\n }\n else {\n border.lineStyle = 'thin';\n }\n };\n Workbook.prototype.processCellStyle = function (style) {\n if (style.isGlobalStyle) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n var compareResult = this.compareStyle(style);\n if (!compareResult.result) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n //Return the index of the already existing style.\n return compareResult.index;\n }\n }\n };\n Workbook.prototype.processNumFormatId = function (style) {\n if (style.numberFormat !== 'GENERAL' && !this.mNumFmt.has(style.numberFormat)) {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n }\n };\n Workbook.prototype.isNewFont = function (toCompareStyle) {\n var result = false;\n var index = 0;\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n index++;\n var fontColor = undefined;\n if (toCompareStyle.fontColor !== undefined) {\n fontColor = ('FF' + toCompareStyle.fontColor.replace('#', ''));\n }\n result = font.color === fontColor &&\n font.b === toCompareStyle.bold &&\n font.i === toCompareStyle.italic &&\n font.u === toCompareStyle.underline &&\n font.strike === toCompareStyle.strikeThrough &&\n font.name === toCompareStyle.fontName &&\n font.sz === toCompareStyle.fontSize;\n if (result) {\n break;\n }\n }\n index = index - 1;\n return { index: index, result: result };\n };\n Workbook.prototype.isNewBorder = function (toCompareStyle) {\n var bStyle = new CellStyle();\n if (this.isAllBorder(toCompareStyle.borders)) {\n return (bStyle.borders.all.color === toCompareStyle.borders.all.color &&\n bStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle);\n }\n else {\n return (bStyle.borders.left.color === toCompareStyle.borders.left.color &&\n bStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n bStyle.borders.right.color === toCompareStyle.borders.right.color &&\n bStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n bStyle.borders.top.color === toCompareStyle.borders.top.color &&\n bStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n bStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n bStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n }\n };\n Workbook.prototype.isAllBorder = function (toCompareBorder) {\n var allBorderStyle = new CellStyle();\n return allBorderStyle.borders.all.color !== toCompareBorder.all.color &&\n allBorderStyle.borders.all.lineStyle !== toCompareBorder.all.lineStyle;\n };\n Workbook.prototype.compareStyle = function (toCompareStyle) {\n var result = true;\n var index = 0;\n var globalStyleIndex = 0;\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.isGlobalStyle ? false : (baseStyle.backColor === toCompareStyle.backColor &&\n baseStyle.bold === toCompareStyle.bold &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.numberFormat === toCompareStyle.numberFormat &&\n baseStyle.type === toCompareStyle.type &&\n baseStyle.fontColor === toCompareStyle.fontColor &&\n baseStyle.fontName === toCompareStyle.fontName &&\n baseStyle.fontSize === toCompareStyle.fontSize &&\n baseStyle.hAlign === toCompareStyle.hAlign &&\n baseStyle.italic === toCompareStyle.italic &&\n baseStyle.underline === toCompareStyle.underline &&\n baseStyle.strikeThrough === toCompareStyle.strikeThrough &&\n baseStyle.vAlign === toCompareStyle.vAlign &&\n baseStyle.indent === toCompareStyle.indent &&\n baseStyle.rotation === toCompareStyle.rotation &&\n baseStyle.wrapText === toCompareStyle.wrapText &&\n (baseStyle.borders.all.color === toCompareStyle.borders.all.color &&\n baseStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle) &&\n (baseStyle.borders.left.color === toCompareStyle.borders.left.color &&\n baseStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n baseStyle.borders.right.color === toCompareStyle.borders.right.color &&\n baseStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n baseStyle.borders.top.color === toCompareStyle.borders.top.color &&\n baseStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n baseStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n baseStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle));\n if (result) {\n index = baseStyle.index;\n break;\n }\n }\n return { index: index, result: result };\n };\n Workbook.prototype.contains = function (array, item) {\n var index = array.indexOf(item);\n return index > -1 && index < array.length;\n };\n Workbook.prototype.getCellValueType = function (value) {\n if (value instanceof Date) {\n return 'datetime';\n }\n else if (typeof (value) === 'boolean') {\n return 'boolean';\n }\n else if (typeof (value) === 'number') {\n return 'number';\n }\n else {\n return 'string';\n }\n };\n Workbook.prototype.parseCellType = function (cell) {\n var type = cell.type;\n var saveType;\n var value = cell.value;\n switch (type) {\n case 'datetime':\n value = this.toOADate(value);\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n var value_1 = this.globalStyles.get(cell.cellStyle.name);\n this.switchNumberFormat(value_1.format, value_1.type);\n }\n }\n saveType = 'n';\n break;\n //TODO: Update the number format index and style\n case 'boolean':\n value = value ? 1 : 0;\n saveType = 'b';\n break;\n case 'number':\n saveType = 'n';\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n this.switchNumberFormat(this.globalStyles.get(cell.cellStyle.name).format, 'number');\n }\n }\n break;\n case 'string':\n this.sharedStringCount++;\n saveType = 's';\n var sstvalue = this.processCellValue(value, cell);\n if (!this.contains(this.sharedString, sstvalue)) {\n this.sharedString.push(sstvalue);\n }\n value = this.sharedString.indexOf(sstvalue);\n break;\n default:\n break;\n }\n cell.saveType = saveType;\n cell.value = value;\n };\n Workbook.prototype.parserImages = function (json, sheet) {\n var imagesLength = json.length;\n sheet.images = [];\n var imageId = 0;\n for (var p = 0; p < imagesLength; p++) {\n var image = this.parserImage(json[p]);\n sheet.images.push(image);\n }\n };\n Workbook.prototype.parseFilters = function (json, sheet) {\n sheet.autoFilters = new AutoFilters();\n if (json.row !== null && json.row !== undefined)\n sheet.autoFilters.row = json.row;\n else\n throw new Error('Argument Null Exception: row null or empty');\n if (json.lastRow !== null && json.lastRow !== undefined)\n sheet.autoFilters.lastRow = json.lastRow;\n else\n throw new Error('Argument Null Exception: lastRow cannot be null or empty');\n if (json.column !== null && json.column !== undefined)\n sheet.autoFilters.column = json.column;\n else\n throw new Error('Argument Null Exception: column cannot be null or empty');\n if (json.lastColumn !== null && json.row !== undefined)\n sheet.autoFilters.lastColumn = json.lastColumn;\n else\n throw new Error('Argument Null Exception: lastColumn cannot be null or empty');\n };\n Workbook.prototype.parserImage = function (json) {\n var image = new Image();\n if (json.image !== null && json.image !== undefined) {\n image.image = json.image;\n }\n if (json.row !== null && json.row !== undefined) {\n image.row = json.row;\n }\n if (json.column !== null && json.column !== undefined) {\n image.column = json.column;\n }\n if (json.lastRow !== null && json.lastRow !== undefined) {\n image.lastRow = json.lastRow;\n }\n if (json.lastColumn !== null && json.lastColumn !== undefined) {\n image.lastColumn = json.lastColumn;\n }\n if (json.width !== null && json.width !== undefined) {\n image.width = json.width;\n }\n if (json.height !== null && json.height !== undefined) {\n image.height = json.height;\n }\n if (json.horizontalFlip !== null && json.horizontalFlip !== undefined) {\n image.horizontalFlip = json.horizontalFlip;\n }\n if (json.verticalFlip !== null && json.verticalFlip !== undefined) {\n image.verticalFlip = json.verticalFlip;\n }\n if (json.rotation !== null && json.rotation !== undefined) {\n image.rotation = json.rotation;\n }\n return image;\n };\n Workbook.prototype.saveAsBlob = function (blobSaveType) {\n var _this = this;\n switch (blobSaveType) {\n case 'text/csv':\n return new Promise(function (resolve, reject) {\n var obj = {};\n obj.blobData = _this.csvHelper.saveAsBlob();\n resolve(obj);\n });\n default:\n return new Promise(function (resolve, reject) {\n _this.saveInternal();\n _this.mArchive.saveAsBlob().then(function (blob) {\n var obj = {};\n obj.blobData = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n resolve(obj);\n });\n });\n }\n };\n Workbook.prototype.save = function (fileName, proxyUrl) {\n var _this = this;\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('Argument Null Exception: fileName cannot be null or empty');\n }\n var xlsxMatch = fileName.match('.xlsx$');\n var csvMatch = fileName.match('.csv$');\n if (xlsxMatch !== null && xlsxMatch[0] === ('.' + this.mSaveType)) {\n this.saveInternal();\n this.mArchive.save(fileName).then(function () {\n _this.mArchive.destroy();\n });\n }\n else if (csvMatch !== null && csvMatch[0] === ('.' + this.mSaveType)) {\n this.csvHelper.save(fileName);\n }\n else {\n throw Error('Save type and file extension is different.');\n }\n };\n Workbook.prototype.saveInternal = function () {\n this.saveWorkbook();\n this.saveWorksheets();\n this.saveSharedString();\n this.saveStyles();\n this.saveApp(this.builtInProperties);\n this.saveCore(this.builtInProperties);\n this.saveContentType();\n this.saveTopLevelRelation();\n this.saveWorkbookRelation();\n };\n Workbook.prototype.saveWorkbook = function () {\n /* tslint:disable-next-line:max-line-length */\n var workbookTemp = '';\n var sheets = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n var sheetName = this.worksheets[i].name;\n sheetName = sheetName.replace(\"&\", \"&\");\n sheetName = sheetName.replace(\"<\", \"<\");\n sheetName = sheetName.replace(\">\", \">\");\n sheetName = sheetName.replace(\"\\\"\", \""\");\n sheets += '';\n }\n sheets += '';\n workbookTemp += sheets;\n if (this.printTitles.size > 0) {\n var printTitle_1 = '';\n this.printTitles.forEach(function (value, key) {\n printTitle_1 += '' + value + '';\n });\n printTitle_1 += '';\n workbookTemp += printTitle_1;\n }\n this.addToArchive(workbookTemp + '', 'xl/workbook.xml');\n };\n Workbook.prototype.saveWorksheets = function () {\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n this.saveWorksheet(this.worksheets[i], i);\n }\n };\n Workbook.prototype.saveWorksheet = function (sheet, index) {\n var sheetBlob = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetString = '';\n if (!sheet.isSummaryRowBelow) {\n sheetString += ('' + '' + '' + '');\n }\n else {\n sheetString += ('');\n }\n sheetString += this.saveSheetView(sheet);\n if (sheet.columns !== undefined) {\n var colString = '';\n for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n if (column.width !== undefined) {\n colString += '';\n }\n else {\n colString += '';\n }\n }\n sheetString += (colString + '');\n }\n sheetString += ('');\n sheetBlob.append(sheetString);\n sheetString = '';\n if (sheet.rows !== undefined) {\n for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n var row = _c[_b];\n var rowString = '');\n for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n var cell = _e[_d];\n if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n rowString += ('');\n if (cell.formula !== undefined) {\n rowString += ('' + cell.formula + '');\n }\n if (cell.value !== undefined) {\n rowString += ('' + cell.value + '');\n }\n else {\n rowString += ('');\n }\n }\n }\n rowString += ('');\n sheetBlob.append(rowString);\n }\n }\n sheetString += ('');\n /* tslint:disable-next-line:max-line-length */\n if (sheet.autoFilters !== null && sheet.autoFilters !== undefined)\n sheetString += ('');\n if (sheet.mergeCells.length > 0) {\n sheetString += ('');\n for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n var mCell = _g[_f];\n sheetString += ('');\n }\n sheetString += ('');\n }\n if (sheet.hyperLinks.length > 0) {\n sheetString += ('');\n for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n var hLink = _j[_h];\n sheetString += ('');\n }\n sheetString += ('');\n }\n /* tslint:disable-next-line:max-line-length */\n sheetString += ('');\n if (sheet.images != undefined && sheet.images.length > 0) {\n this.drawingCount++;\n this.saveDrawings(sheet, sheet.index);\n sheetString += '';\n }\n this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n sheetBlob.append(sheetString + '');\n this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n };\n Workbook.prototype.saveDrawings = function (sheet, index) {\n var drawings = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetDrawingString = '';\n if (sheet.images !== undefined) {\n var imgId = 0;\n for (var _i = 0, _a = sheet.images; _i < _a.length; _i++) {\n var pic = _a[_i];\n if (pic.height !== undefined && pic.width !== undefined) {\n this.updatelastRowOffset(sheet, pic);\n this.updatelastColumnOffSet(sheet, pic);\n pic.lastRow -= 1;\n pic.lastColumn -= 1;\n }\n else if (pic.lastRow !== undefined && pic.lastColumn !== undefined) {\n pic.lastRowOffset = 0;\n pic.lastColOffset = 0;\n }\n imgId++;\n sheetDrawingString += '';\n sheetDrawingString += '';\n //col\n sheetDrawingString += pic.column - 1;\n sheetDrawingString += '';\n //colOff\n sheetDrawingString += 0;\n sheetDrawingString += '';\n //row\n sheetDrawingString += pic.row - 1;\n sheetDrawingString += '';\n //rowOff\n sheetDrawingString += 0;\n sheetDrawingString += '';\n sheetDrawingString += '';\n //col\n sheetDrawingString += pic.lastColumn;\n sheetDrawingString += '';\n //colOff\n sheetDrawingString += pic.lastColOffset;\n sheetDrawingString += '';\n //row\n sheetDrawingString += pic.lastRow;\n sheetDrawingString += '';\n //rowOff\n sheetDrawingString += pic.lastRowOffset;\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += ' ';\n sheetDrawingString += ' ';\n sheetDrawingString += '';\n /* tslint:disable-next-line:max-line-length */\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '= -3600) {\n sheetDrawingString += ' rot=\"' + (pic.rotation * 60000) + '\"';\n }\n if (pic.verticalFlip != undefined && pic.verticalFlip != false) {\n sheetDrawingString += ' flipV=\"1\"';\n }\n if (pic.horizontalFlip != undefined && pic.horizontalFlip != false) {\n sheetDrawingString += ' flipH=\"1\"';\n }\n sheetDrawingString += '/>';\n sheetDrawingString += '';\n sheetDrawingString += '';\n var imageFile = new BlobHelper();\n var imageData = this.convertBase64toImage(pic.image);\n this.imageCount += 1;\n this.addToArchive(imageData, 'xl/media/image' + this.imageCount + '.png');\n }\n drawings.append(sheetDrawingString);\n drawings.append('');\n this.saveDrawingRelations(sheet);\n this.addToArchive(drawings.getBlob(), 'xl/drawings/drawing' + this.drawingCount + '.xml');\n }\n };\n Workbook.prototype.updatelastRowOffset = function (sheet, picture) {\n var iCurHeight = picture.height;\n var iCurRow = picture.row;\n var iCurOffset = 0;\n while (iCurHeight >= 0) {\n var iRowHeight = 0;\n if (sheet.rows !== undefined && sheet.rows[iCurRow - 1] !== undefined)\n iRowHeight = this.convertToPixels(sheet.rows[iCurRow - 1].height === undefined ? 15 : sheet.rows[iCurRow - 1].height);\n else\n iRowHeight = this.convertToPixels(15);\n var iSpaceInCell = iRowHeight - (iCurOffset * iRowHeight / 256);\n if (iSpaceInCell > iCurHeight) {\n picture.lastRow = iCurRow;\n picture.lastRowOffset = iCurOffset + (iCurHeight * 256 / iRowHeight);\n var rowHiddenHeight = 0;\n if (sheet.rows !== undefined && sheet.rows[iCurRow - 1] !== undefined)\n rowHiddenHeight = this.convertToPixels(sheet.rows[iCurRow - 1].height === undefined ? 15 : sheet.rows[iCurRow - 1].height);\n else\n rowHiddenHeight = this.convertToPixels(15);\n picture.lastRowOffset = (rowHiddenHeight * picture.lastRowOffset) / 256;\n picture.lastRowOffset = Math.round(picture.lastRowOffset / this.unitsProportions[7]);\n break;\n }\n else {\n iCurHeight -= iSpaceInCell;\n iCurRow++;\n iCurOffset = 0;\n }\n }\n };\n Workbook.prototype.updatelastColumnOffSet = function (sheet, picture) {\n var iCurWidth = picture.width;\n var iCurCol = picture.column;\n var iCurOffset = 0;\n while (iCurWidth >= 0) {\n var iColWidth = 0;\n if (sheet.columns !== undefined && sheet.columns[iCurCol - 1] !== undefined)\n iColWidth = this.ColumnWidthToPixels(sheet.columns[iCurCol - 1].width === undefined ? 8.43 : sheet.columns[iCurCol - 1].width);\n else\n iColWidth = this.ColumnWidthToPixels(8.43);\n var iSpaceInCell = iColWidth - (iCurOffset * iColWidth / 1024);\n if (iSpaceInCell > iCurWidth) {\n picture.lastColumn = iCurCol;\n picture.lastColOffset = iCurOffset + (iCurWidth * 1024 / iColWidth);\n var colHiddenWidth = 0;\n if (sheet.columns !== undefined && sheet.columns[iCurCol - 1] !== undefined)\n colHiddenWidth = this.ColumnWidthToPixels(sheet.columns[iCurCol - 1].width === undefined ? 8.43 : sheet.columns[iCurCol - 1].width);\n else\n colHiddenWidth = this.ColumnWidthToPixels(8.43);\n picture.lastColOffset = (colHiddenWidth * picture.lastColOffset) / 1024;\n picture.lastColOffset = Math.round(picture.lastColOffset / this.unitsProportions[7]);\n break;\n }\n else {\n iCurWidth -= iSpaceInCell;\n iCurCol++;\n iCurOffset = 0;\n }\n }\n };\n Workbook.prototype.convertToPixels = function (value) {\n return value * this.unitsProportions[6];\n };\n Workbook.prototype.convertBase64toImage = function (img) {\n var byteStr = window.atob(img);\n var buffer = new ArrayBuffer(byteStr.length);\n var data = new Uint8Array(buffer);\n for (var i = 0; i < byteStr.length; i++) {\n data[i] = byteStr.charCodeAt(i);\n }\n var blob = new Blob([data], { type: 'image/png' });\n return blob;\n };\n Workbook.prototype.saveDrawingRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var drawingRelation = '';\n var length = sheet.images.length;\n var id = this.imageCount - sheet.images.length;\n for (var i = 1; i <= length; i++) {\n id++;\n /* tslint:disable-next-line:max-line-length */\n drawingRelation += '';\n }\n this.addToArchive((drawingRelation + ''), 'xl/drawings/_rels/drawing' + this.drawingCount + '.xml.rels');\n };\n Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n var dDigitWidth = 7;\n var val = (pixels > dDigitWidth + 5) ?\n this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n pixels / (dDigitWidth + 5);\n return (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n };\n Workbook.prototype.ColumnWidthToPixels = function (val) {\n var dDigitWidth = 7;\n var fileWidth = (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n return this.trunc(((256 * fileWidth + this.trunc(128 / dDigitWidth)) / 256) * dDigitWidth);\n };\n Workbook.prototype.trunc = function (x) {\n var n = x - x % 1;\n return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n };\n Workbook.prototype.pixelsToRowHeight = function (pixels) {\n return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n };\n Workbook.prototype.saveSheetRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var relStr = '';\n for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n var hLink = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n if (sheet.images != undefined && sheet.images.length > 0) {\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n relStr += '';\n return relStr;\n };\n Workbook.prototype.saveSheetView = function (sheet) {\n var paneString = ' 0) {\n /* tslint:disable-next-line:max-line-length */\n var sstStart = '';\n var si = '';\n for (var i = 0; i < length; i++) {\n if (this.sharedString[i].indexOf('') !== 0) {\n si += '';\n si += this.processString(this.sharedString[i]);\n si += '';\n }\n else {\n si += '';\n si += this.sharedString[i];\n si += '';\n }\n }\n si += '';\n this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n }\n };\n Workbook.prototype.processString = function (value) {\n if (typeof value == \"string\") {\n if (value.indexOf('&') !== -1) {\n value = value.replace(/&/g, '&');\n }\n if (value.indexOf('<') !== -1) {\n value = value.replace(/') !== -1) {\n value = value.replace(/>/g, '>');\n }\n if (value.indexOf('\\v') !== -1) {\n value = value.replace(/\\v/g, '_x000B_');\n }\n }\n else if (typeof value == \"object\") {\n for (var i = 0; i < value.length; i++) {\n if (value[i].indexOf('&') !== -1) {\n value[i] = value[i].replace(/&/g, '&');\n }\n if (value[i].indexOf('<') !== -1) {\n value[i] = value[i].replace(/') !== -1) {\n value[i] = value[i].replace(/>/g, '>');\n }\n if (value[i].indexOf('\\v') !== -1) {\n value[i] = value[i].replace(/\\v/g, '_x000B_');\n }\n }\n }\n return value;\n };\n Workbook.prototype.saveStyles = function () {\n this.updateCellXfsStyleXfs();\n /* tslint:disable-next-line:max-line-length */\n var styleTemp = '';\n styleTemp += this.saveNumberFormats();\n styleTemp += this.saveFonts();\n styleTemp += this.saveFills();\n styleTemp += this.saveBorders();\n styleTemp += this.saveCellStyleXfs();\n styleTemp += this.saveCellXfs();\n styleTemp += this.saveCellStyles();\n this.addToArchive(styleTemp + '', 'xl/styles.xml');\n };\n Workbook.prototype.updateCellXfsStyleXfs = function () {\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var style = _a[_i];\n var cellXfs = undefined;\n if (style.isGlobalStyle) {\n cellXfs = new CellStyleXfs();\n cellXfs.xfId = (style.index - 1);\n }\n else {\n cellXfs = new CellXfs();\n cellXfs.xfId = 0;\n }\n //Add font\n var compareFontResult = this.isNewFont(style);\n if (!compareFontResult.result) {\n var font = new Font();\n font.b = style.bold;\n font.i = style.italic;\n font.name = style.fontName;\n font.sz = style.fontSize;\n font.u = style.underline;\n font.strike = style.strikeThrough;\n font.color = ('FF' + style.fontColor.replace('#', ''));\n this.mFonts.push(font);\n cellXfs.fontId = this.mFonts.length - 1;\n }\n else {\n cellXfs.fontId = compareFontResult.index;\n }\n //Add fill\n if (style.backColor !== 'none') {\n var backColor = 'FF' + style.backColor.replace('#', '');\n if (this.mFills.has(backColor)) {\n var fillId = this.mFills.get(backColor);\n cellXfs.fillId = fillId;\n }\n else {\n var fillId = this.mFills.size + 2;\n this.mFills.set(backColor, fillId);\n cellXfs.fillId = (fillId);\n }\n }\n else {\n cellXfs.fillId = 0;\n }\n //Add border \n if (!this.isNewBorder(style)) {\n this.mBorders.push(style.borders);\n cellXfs.borderId = this.mBorders.length;\n }\n else {\n cellXfs.borderId = 0;\n }\n //Add Number Format \n if (style.numberFormat !== 'GENERAL') {\n if (this.mNumFmt.has(style.numberFormat)) {\n var numFmt = this.mNumFmt.get(style.numberFormat);\n cellXfs.numFmtId = numFmt.numFmtId;\n }\n else {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n cellXfs.numFmtId = id;\n }\n }\n else {\n if (style.numberFormat === 'GENERAL' && style.numFmtId === 14) {\n cellXfs.numFmtId = 14;\n }\n else {\n cellXfs.numFmtId = 0;\n }\n }\n //Add alignment \n if (!style.isGlobalStyle) {\n cellXfs.applyAlignment = 1;\n }\n cellXfs.alignment = new Alignment();\n cellXfs.alignment.indent = style.indent;\n cellXfs.alignment.horizontal = style.hAlign;\n cellXfs.alignment.vertical = style.vAlign;\n cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n cellXfs.alignment.rotation = style.rotation;\n if (style.isGlobalStyle) {\n this.mCellStyleXfs.push(cellXfs);\n this.mCellXfs.push(cellXfs);\n }\n else {\n //Add cellxfs\n this.mCellXfs.push(cellXfs);\n }\n }\n };\n Workbook.prototype.saveNumberFormats = function () {\n if (this.mNumFmt.size >= 1) {\n var numFmtStyle_1 = '';\n this.mNumFmt.forEach(function (value, key) {\n numFmtStyle_1 += '';\n });\n return (numFmtStyle_1 += '');\n }\n else {\n return '';\n }\n };\n Workbook.prototype.saveFonts = function () {\n /* tslint:disable-next-line:max-line-length */\n var fontStyle = '';\n if (this.mFonts.length >= 1) {\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n fontStyle += '';\n if (font.b) {\n fontStyle += '';\n }\n if (font.i) {\n fontStyle += '';\n }\n if (font.u) {\n fontStyle += '';\n }\n if (font.strike) {\n fontStyle += '';\n }\n fontStyle += '';\n fontStyle += '';\n fontStyle += '';\n }\n }\n return fontStyle + '';\n };\n Workbook.prototype.saveFills = function () {\n /* tslint:disable-next-line:max-line-length */\n var fillsStyle = '';\n if (this.mFills.size >= 1) {\n this.mFills.forEach(function (value, key) {\n /* tslint:disable-next-line:max-line-length */\n fillsStyle += '';\n });\n }\n return fillsStyle + '';\n };\n Workbook.prototype.saveBorders = function () {\n /* tslint:disable-next-line:max-line-length */\n var bordersStyle = '';\n if (this.mBorders.length >= 1) {\n for (var _i = 0, _a = this.mBorders; _i < _a.length; _i++) {\n var borders = _a[_i];\n if (this.isAllBorder(borders)) {\n var color = borders.all.color.replace('#', '');\n var lineStyle = borders.all.lineStyle;\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n }\n }\n return bordersStyle + '';\n };\n Workbook.prototype.saveCellStyles = function () {\n var _this = this;\n var cellStyleString = '';\n this.cellStyles.forEach(function (value, key) {\n cellStyleString += '';\n if (this.mCellStyleXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n else {\n cellXfsStyle += ' />';\n }\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveCellXfs = function () {\n /* tslint:disable-next-line:max-line-length */\n var cellXfsStyle = '';\n if (this.mCellXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var cellXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveAlignment = function (cellXf) {\n var alignString = '';\n return alignString;\n };\n Workbook.prototype.saveApp = function (builtInProperties) {\n /* tslint:disable-next-line:max-line-length */\n var appString = 'Essential XlsIO';\n if (builtInProperties !== undefined) {\n if (builtInProperties.manager !== undefined) {\n appString += '' + builtInProperties.manager + '';\n }\n if (builtInProperties.company !== undefined) {\n appString += '' + builtInProperties.company + '';\n }\n }\n this.addToArchive((appString + ''), 'docProps/app.xml');\n };\n Workbook.prototype.saveCore = function (builtInProperties) {\n var createdDate = new Date();\n /* tslint:disable-next-line:max-line-length */\n var coreString = '';\n if (this.builtInProperties !== undefined) {\n if (builtInProperties.author !== undefined) {\n coreString += '' + builtInProperties.author + '';\n }\n if (builtInProperties.subject !== undefined) {\n coreString += '' + builtInProperties.subject + '';\n }\n if (builtInProperties.category !== undefined) {\n coreString += '' + builtInProperties.category + '';\n }\n if (builtInProperties.comments !== undefined) {\n coreString += '' + builtInProperties.comments + '';\n }\n if (builtInProperties.title !== undefined) {\n coreString += '' + builtInProperties.title + '';\n }\n if (builtInProperties.tags !== undefined) {\n coreString += '' + builtInProperties.tags + '';\n }\n if (builtInProperties.status !== undefined) {\n coreString += '' + builtInProperties.status + '';\n }\n if (builtInProperties.createdDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.createdDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n if (builtInProperties.modifiedDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.modifiedDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n coreString += '' + createdDate.toISOString() + '';\n }\n /* tslint:disable-next-line:max-line-length */\n coreString += '';\n this.addToArchive(coreString, 'docProps/core.xml');\n };\n Workbook.prototype.saveTopLevelRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var topRelation = '';\n this.addToArchive(topRelation, '_rels/.rels');\n };\n Workbook.prototype.saveWorkbookRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var wbRelation = '';\n var length = this.worksheets.length;\n var count = 0;\n for (var i = 0; i < length; i++, count++) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n this.addToArchive((wbRelation + ''), 'xl/_rels/workbook.xml.rels');\n };\n Workbook.prototype.saveContentType = function () {\n /* tslint:disable-next-line:max-line-length */\n var contentTypeString = '';\n var sheetsOverride = '';\n var length = this.worksheets.length;\n var drawingIndex = 0;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n if (this.worksheets[i].images != undefined && this.worksheets[i].images.length > 0) {\n drawingIndex++;\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n }\n }\n if (this.imageCount > 0)\n sheetsOverride += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n contentTypeString += '';\n }\n this.addToArchive((contentTypeString + sheetsOverride + ''), '[Content_Types].xml');\n };\n Workbook.prototype.addToArchive = function (xmlString, itemName) {\n if (typeof (xmlString) === 'string') {\n var blob = new Blob([xmlString], { type: 'text/plain' });\n var archiveItem = new ZipArchiveItem(blob, itemName);\n this.mArchive.addItem(archiveItem);\n }\n else {\n var archiveItem = new ZipArchiveItem(xmlString, itemName);\n this.mArchive.addItem(archiveItem);\n }\n };\n Workbook.prototype.processMergeCells = function (cell, rowIndex, mergeCells) {\n if (cell.rowSpan !== 0 || cell.colSpan !== 0) {\n var mCell = new MergeCell();\n mCell.x = cell.index;\n mCell.width = cell.colSpan;\n mCell.y = rowIndex;\n mCell.height = cell.rowSpan;\n var startCell = this.getCellName(mCell.y, mCell.x);\n var endCell = this.getCellName(rowIndex + mCell.height, cell.index + mCell.width);\n mCell.ref = startCell + ':' + endCell;\n var mergedCell = mergeCells.add(mCell);\n var start = { x: mCell.x, y: mCell.y };\n var end = {\n x: (cell.index + mCell.width), y: (rowIndex + mCell.height)\n };\n this.updatedMergedCellStyles(start, end, cell);\n }\n return mergeCells;\n };\n Workbook.prototype.updatedMergedCellStyles = function (sCell, eCell, cell) {\n for (var x = sCell.x; x <= eCell.x; x++) {\n for (var y = sCell.y; y <= eCell.y; y++) {\n this.mergedCellsStyle.set(this.getCellName(y, x), { x: x, y: y, styleIndex: cell.styleIndex });\n }\n }\n };\n /**\n * Returns the tick count corresponding to the given year, month, and day.\n * @param year number value of year\n * @param month number value of month\n * @param day number value of day\n */\n Workbook.prototype.dateToTicks = function (year, month, day) {\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysToMonth365 = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n var daysToMonth366 = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];\n if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {\n var days = this.isLeapYear(year) ? daysToMonth366 : daysToMonth365;\n var y = year - 1;\n var n = y * 365 + ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0) + days[month - 1] + day - 1;\n return n * ticksPerDay;\n }\n throw new Error('Not a valid date');\n };\n /**\n * Return the tick count corresponding to the given hour, minute, second.\n * @param hour number value of hour\n * @param minute number value if minute\n * @param second number value of second\n */\n Workbook.prototype.timeToTicks = function (hour, minute, second) {\n if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60) {\n var totalSeconds = hour * 3600 + minute * 60 + second;\n return totalSeconds * 10000 * 1000;\n }\n throw new Error('Not valid time');\n };\n /**\n * Checks if given year is a leap year.\n * @param year Year value.\n */\n Workbook.prototype.isLeapYear = function (year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n };\n /**\n * Converts `DateTime` to the equivalent OLE Automation date.\n */\n Workbook.prototype.toOADate = function (date) {\n var ticks = 0;\n /* tslint:disable-next-line:max-line-length */\n ticks = this.dateToTicks(date.getFullYear(), (date.getMonth() + 1), date.getDate()) + this.timeToTicks(date.getHours(), date.getMinutes(), date.getSeconds());\n if (ticks === 0) {\n return 0.0;\n }\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysTo1899 = (((365 * 4 + 1) * 25 - 1) * 4 + 1) * 4 + ((365 * 4 + 1) * 25 - 1) * 3 - 367;\n var doubleDateOffset = daysTo1899 * ticksPerDay;\n var oaDateMinAsTicks = (((365 * 4 + 1) * 25 - 1) - 365) * ticksPerDay;\n if (ticks < oaDateMinAsTicks) {\n throw new Error('Arg_OleAutDateInvalid');\n }\n var millisPerDay = 1000 * 60 * 60 * 24;\n return ((ticks - doubleDateOffset) / 10000) / millisPerDay;\n };\n return Workbook;\n}());\nexport { Workbook };\n/**\n * BuiltInProperties Class\n * @private\n */\nvar BuiltInProperties = /** @class */ (function () {\n function BuiltInProperties() {\n }\n return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Workbook } from '@syncfusion/ej2-excel-export';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Excel Export Module\n */\nvar ExcelExport = /** @class */ (function () {\n function ExcelExport(parent) {\n this.parent = parent;\n }\n ExcelExport.prototype.initializeExcelExport = function (excelExportOptions) {\n if (excelExportOptions === void 0) { excelExportOptions = {}; }\n var exportColumns = this.getExportColumns(excelExportOptions);\n var exportName = excelExportOptions.fileName || 'Schedule';\n var exportType = excelExportOptions.exportType || 'xlsx';\n var isIncludeOccurrences = excelExportOptions.includeOccurrences || false;\n var separator;\n if (!isNullOrUndefined(excelExportOptions.separator) && excelExportOptions.separator !== ',') {\n separator = excelExportOptions.separator;\n }\n var eventCollection;\n if (excelExportOptions.customData) {\n eventCollection = !isIncludeOccurrences ? excelExportOptions.customData :\n this.parent.eventBase.getProcessedEvents(excelExportOptions.customData);\n }\n else {\n eventCollection = !isIncludeOccurrences ? this.parent.eventsData : this.parent.eventsProcessed;\n }\n this.processWorkbook(exportColumns, exportName, exportType, eventCollection, separator);\n };\n ExcelExport.prototype.processWorkbook = function (fields, name, type, eventCollection, separator) {\n var _this = this;\n var columns = [];\n var rows = [];\n var columnHeader = [];\n fields.forEach(function (field, i) { columns.push({ index: i + 1, width: (field.name === 'Id' ? 50 : 150) }); });\n var style = { fontSize: 12, borders: { color: '#E0E0E0' }, bold: true };\n fields.forEach(function (field, i) { columnHeader.push({ index: i + 1, value: field.text, style: style }); });\n rows.push({ index: 1, cells: columnHeader });\n eventCollection.forEach(function (event, i) {\n var columnData = [];\n fields.forEach(function (field, n) {\n var columnRule = { index: n + 1, value: event[field.name] || '' };\n if (field.name === _this.parent.eventFields.startTime || field.name === _this.parent.eventFields.endTime) {\n var styleRule = { fontSize: 12, numberFormat: 'm/d/yyyy h:mm AM/PM' };\n columnRule = extend({}, columnRule, { style: styleRule }, true);\n }\n columnData.push(columnRule);\n });\n rows.push({ index: i + 2, cells: columnData });\n });\n var workSheet = [{ columns: columns, rows: rows }];\n var book = new Workbook({ worksheets: workSheet }, type, this.parent.locale, undefined, separator);\n book.save(name + '.' + type);\n };\n ExcelExport.prototype.getExportColumns = function (exportOptions) {\n var _this = this;\n var exportColumns = exportOptions.fieldsInfo || [];\n if (exportColumns.length === 0) {\n var fields = exportOptions.fields || Object.keys(this.parent.eventFields).map(function (field) {\n return _this.parent.eventFields[\"\" + field];\n });\n fields.forEach(function (field) { exportColumns.push({ name: field, text: field }); });\n }\n return exportColumns;\n };\n ExcelExport.prototype.getModuleName = function () {\n return 'excelExport';\n };\n ExcelExport.prototype.destroy = function () {\n this.parent = null;\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","// Directives\nimport ripple from '../../directives/ripple'\n\n// Types\nimport Vue, { VNode, VNodeData, VNodeDirective } from 'vue'\n\nexport default Vue.extend({\n name: 'rippleable',\n\n directives: { ripple },\n\n props: {\n ripple: {\n type: [Boolean, Object],\n default: true,\n },\n },\n\n methods: {\n genRipple (data: VNodeData = {}): VNode | null {\n if (!this.ripple) return null\n\n data.staticClass = 'v-input--selection-controls__ripple'\n\n data.directives = data.directives || []\n data.directives.push({\n name: 'ripple',\n value: { center: true },\n } as VNodeDirective)\n\n return this.$createElement('div', data)\n },\n },\n})\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=style&index=0&id=1fa53aeb&prod&lang=scss&scoped=true\"","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HijriParser, isNullOrUndefined } from '@syncfusion/ej2-base';\n/** @private */\nvar Gregorian = /** @class */ (function () {\n function Gregorian() {\n }\n Gregorian.prototype.firstDateOfMonth = function (date) {\n return new Date(date.getFullYear(), date.getMonth());\n };\n Gregorian.prototype.lastDateOfMonth = function (dt) {\n return new Date(dt.getFullYear(), dt.getMonth() + 1, 0);\n };\n Gregorian.prototype.isMonthStart = function (date) {\n return (date.getDate() === 1);\n };\n Gregorian.prototype.getLeapYearDaysCount = function () {\n return 366;\n };\n Gregorian.prototype.getYearDaysCount = function (date, interval) {\n return ((date.getFullYear() + interval) % 4 === 0) ? 366 : 365;\n };\n Gregorian.prototype.getDate = function (date) {\n return date.getDate();\n };\n Gregorian.prototype.getMonth = function (date) {\n return (date.getMonth() + 1);\n };\n Gregorian.prototype.getFullYear = function (date) {\n return date.getFullYear();\n };\n Gregorian.prototype.getYearLastDate = function (date, interval) {\n return new Date(date.getFullYear() + interval, 0, 0);\n };\n Gregorian.prototype.getMonthDaysCount = function (date) {\n return this.lastDateOfMonth(date).getDate();\n };\n Gregorian.prototype.getMonthStartDate = function (date) {\n return new Date(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes());\n };\n Gregorian.prototype.getMonthEndDate = function (date) {\n date.setDate(1);\n return new Date(date.setMonth(date.getMonth() + 1));\n };\n Gregorian.prototype.getExpectedDays = function (date, days) {\n return days;\n };\n Gregorian.prototype.setDate = function (dateObj, date) {\n dateObj.setDate(date);\n };\n Gregorian.prototype.setValidDate = function (date, interval, startDate, monthValue, beginDate) {\n if (!isNullOrUndefined(beginDate)) {\n date.setMonth((beginDate ? monthValue : date.getMonth()) + interval);\n }\n else {\n date.setMonth(date.getMonth() + interval, startDate);\n }\n };\n Gregorian.prototype.setMonth = function (date, interval, startDate) {\n date.setDate(1);\n date.setFullYear(date.getFullYear());\n date.setMonth(interval - 1);\n var maxDay = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n date.setDate(Math.min(startDate, maxDay));\n };\n Gregorian.prototype.addYears = function (date, interval) {\n date.setFullYear(date.getFullYear() + interval);\n };\n Gregorian.prototype.isSameMonth = function (date1, date2) {\n return (date1.getMonth() === date2.getMonth());\n };\n Gregorian.prototype.checkMonth = function (date, months) {\n return (months.indexOf(date.getMonth() + 1) === -1);\n };\n Gregorian.prototype.compareMonth = function (date1, date2) {\n return (date1.getMonth() > date2.getMonth());\n };\n Gregorian.prototype.isSameYear = function (date1, date2) {\n return (date1.getFullYear() === date2.getFullYear());\n };\n Gregorian.prototype.isLastMonth = function (date) {\n return (date.getMonth() === 11);\n };\n Gregorian.prototype.isLeapYear = function (year, interval) {\n return ((year + interval) % 4 === 0);\n };\n return Gregorian;\n}());\nexport { Gregorian };\n/** @private */\nvar Islamic = /** @class */ (function () {\n function Islamic() {\n }\n Islamic.prototype.firstDateOfMonth = function (date) {\n var hDate = this.getHijriDate(date);\n var gDate = HijriParser.toGregorian(hDate.year, hDate.month, 1);\n return gDate;\n };\n Islamic.prototype.lastDateOfMonth = function (date) {\n var hDate = this.getHijriDate(date);\n var daysInMonth = this.getDaysInMonth(hDate.month, hDate.year);\n var gDate = HijriParser.toGregorian(hDate.year, hDate.month, daysInMonth);\n var finalGDate = new Date(gDate.getTime());\n finalGDate = new Date(finalGDate.setDate(finalGDate.getDate() + 1));\n var finalHDate = this.getHijriDate(finalGDate);\n if (hDate.month === finalHDate.month) {\n return finalGDate;\n }\n finalHDate = this.getHijriDate(gDate);\n if (hDate.month === finalHDate.month) {\n return gDate;\n }\n return new Date(gDate.setDate(gDate.getDate() - 1));\n };\n Islamic.prototype.isMonthStart = function (date) {\n var hijriDate = this.getHijriDate(date);\n return (hijriDate.date === 1);\n };\n Islamic.prototype.getLeapYearDaysCount = function () {\n return 355;\n };\n Islamic.prototype.getYearDaysCount = function (date, interval) {\n var hDate = this.getHijriDate(date);\n return this.isLeapYear(hDate.year, interval) ? 355 : 354;\n };\n Islamic.prototype.getDate = function (date) {\n var hijriDate = this.getHijriDate(date);\n return hijriDate.date;\n };\n Islamic.prototype.getMonth = function (date) {\n var hDate = this.getHijriDate(date);\n return hDate.month;\n };\n Islamic.prototype.getFullYear = function (date) {\n var hDate = this.getHijriDate(date);\n return hDate.year;\n };\n Islamic.prototype.getYearLastDate = function (date, interval) {\n var hDate = this.getHijriDate(date);\n var gDate = HijriParser.toGregorian(hDate.year + interval, 1, 0);\n return gDate;\n };\n Islamic.prototype.getMonthDaysCount = function (date) {\n var maxDate = this.lastDateOfMonth(date);\n var hijriDate = this.getHijriDate(maxDate);\n return hijriDate.date;\n };\n Islamic.prototype.getMonthStartDate = function (date) {\n var firstDate = this.firstDateOfMonth(date);\n return new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate(), date.getHours(), date.getMinutes());\n };\n Islamic.prototype.getMonthEndDate = function (date) {\n var lastDate = this.lastDateOfMonth(date);\n lastDate.setDate(lastDate.getDate() + 1);\n return new Date(lastDate.setMonth(lastDate.getMonth()));\n };\n Islamic.prototype.getExpectedDays = function (date, days) {\n var hDate = this.getHijriDate(date);\n var day = [];\n for (var i = 0; i < days.length; i++) {\n var gDate = HijriParser.toGregorian(hDate.year, hDate.month, days[parseInt(i.toString(), 10)]);\n day.push(gDate.getDate());\n }\n return day;\n };\n Islamic.prototype.setDate = function (dateObj, date) {\n var hDate = this.getHijriDate(dateObj);\n var gDate = HijriParser.toGregorian(hDate.year, hDate.month, date);\n this.updateDateObj(dateObj, gDate);\n };\n Islamic.prototype.setValidDate = function (date, interval, startDate, monthValue, beginDate) {\n var firstDate = (!isNullOrUndefined(beginDate)) ? this.firstDateOfMonth(beginDate) : date;\n var hDate = this.getHijriDate(firstDate);\n var gDate = HijriParser.toGregorian(hDate.year, hDate.month + interval, startDate);\n this.updateDateObj(date, gDate);\n };\n Islamic.prototype.setMonth = function (date, interval, startDate) {\n var hDate = this.getHijriDate(date);\n var gDate = HijriParser.toGregorian(hDate.year, interval, startDate);\n this.updateDateObj(date, gDate);\n };\n Islamic.prototype.addYears = function (date, interval, monthValue) {\n var hDate = this.getHijriDate(date);\n var gDate = HijriParser.toGregorian(hDate.year + interval, monthValue, 1);\n this.updateDateObj(date, gDate);\n };\n Islamic.prototype.isSameMonth = function (date1, date2) {\n var currentHijri = this.getHijriDate(date1);\n var tempHijri = this.getHijriDate(date2);\n return (currentHijri.month === tempHijri.month);\n };\n Islamic.prototype.checkMonth = function (date, months) {\n var hDate = this.getHijriDate(date);\n return (months.indexOf(hDate.month) === -1);\n };\n Islamic.prototype.compareMonth = function (date1, date2) {\n var hDate = this.getHijriDate(date1);\n var hDate1 = this.getHijriDate(date2);\n return (hDate.month > hDate1.month);\n };\n Islamic.prototype.isSameYear = function (date1, date2) {\n var hDate = this.getHijriDate(date1);\n var hDate1 = this.getHijriDate(date2);\n return (hDate.year === hDate1.year);\n };\n Islamic.prototype.isLastMonth = function (date) {\n var hDate = this.getHijriDate(date);\n return (hDate.month === 12);\n };\n Islamic.prototype.updateDateObj = function (date, gDate) {\n date.setFullYear(gDate.getFullYear(), gDate.getMonth(), gDate.getDate());\n };\n Islamic.prototype.isLeapYear = function (year, interval) {\n return (14 + 11 * (year + interval)) % 30 < 11;\n };\n Islamic.prototype.getDaysInMonth = function (month, year) {\n var length = 0;\n length = 29 + ((month + 1) % 2);\n if (month === 11 && this.isLeapYear(year, 0)) {\n length++;\n }\n return length;\n };\n Islamic.prototype.getHijriDate = function (date) {\n return HijriParser.getHijriDate(date);\n };\n return Islamic;\n}());\nexport { Islamic };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { addClass, createElement, extend, isNullOrUndefined, closest, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { formatUnit, remove, removeClass } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Base class for the common drag and resize related actions\n */\nvar ActionBase = /** @class */ (function () {\n function ActionBase(parent) {\n this.daysVariation = 0;\n this.parent = parent;\n this.actionObj = {\n X: 0, Y: 0, groupIndex: 0, cellWidth: 0, cellHeight: 0, slotInterval: 0, interval: 0, actionIndex: 0,\n cloneElement: [], originalElement: [], action: null, isAllDay: null, excludeSelectors: null,\n index: 0, navigationInterval: null, scrollInterval: null\n };\n this.scrollArgs = { element: null, width: 0, height: 0 };\n this.resizeEdges = { left: false, right: false, top: false, bottom: false };\n this.scrollEdges = { left: false, right: false, top: false, bottom: false };\n }\n ActionBase.prototype.getChangedData = function (multiData) {\n var _this = this;\n var eventObj = extend({}, this.actionObj.event, null, true);\n eventObj[this.parent.eventFields.startTime] = this.actionObj.start;\n eventObj[this.parent.eventFields.endTime] = this.actionObj.end;\n if (!isNullOrUndefined(this.actionObj.isAllDay)) {\n eventObj[this.parent.eventFields.isAllDay] = this.actionObj.isAllDay;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var originalElement = this.getOriginalElement(this.actionObj.element);\n if (originalElement) {\n var indexCol_1 = originalElement.map(function (element) { return parseInt(element.getAttribute('data-group-index'), 10); });\n if (indexCol_1.indexOf(this.actionObj.groupIndex) === -1 || (!isNullOrUndefined(multiData) && multiData.length > 0)) {\n var cloneIndex_1 = parseInt(this.actionObj.clone.getAttribute('data-group-index'), 10);\n indexCol_1 = indexCol_1.filter(function (index) { return index !== cloneIndex_1; });\n indexCol_1.push(this.actionObj.groupIndex);\n if (multiData && multiData.length > 0) {\n multiData.forEach(function (data) {\n _this.parent.resourceBase.getResourceData(data, _this.actionObj.groupIndex, indexCol_1);\n });\n }\n else {\n this.parent.resourceBase.getResourceData(eventObj, this.actionObj.groupIndex, indexCol_1);\n }\n }\n }\n }\n return eventObj;\n };\n ActionBase.prototype.saveChangedData = function (eventArgs, isMultiSelect) {\n if (isMultiSelect === void 0) { isMultiSelect = false; }\n this.parent.activeEventData.event = this.actionObj.event;\n this.parent.currentAction = 'Save';\n var currentAction;\n var eventsCollection = [eventArgs.data];\n if (isMultiSelect) {\n eventsCollection = eventArgs.selectedData;\n }\n for (var _i = 0, eventsCollection_1 = eventsCollection; _i < eventsCollection_1.length; _i++) {\n var eventObj = eventsCollection_1[_i];\n var isSameResource = (this.parent.activeViewOptions.group.resources.length > 0) ?\n parseInt(this.actionObj.element.getAttribute('data-group-index'), 10) === this.actionObj.groupIndex : true;\n if (+eventObj[this.parent.eventFields.startTime] === +this.actionObj.event[this.parent.eventFields.startTime] &&\n +eventObj[this.parent.eventFields.endTime] === +this.actionObj.event[this.parent.eventFields.endTime] && isSameResource) {\n this.parent.crudModule.crudObj.isCrudAction = false;\n return;\n }\n if (eventObj[this.parent.eventFields.recurrenceRule]) {\n var eveId = (eventObj[this.parent.eventFields.recurrenceID] || eventObj[this.parent.eventFields.id]);\n if (eventObj[this.parent.eventFields.id] === eventObj[this.parent.eventFields.recurrenceID]) {\n eventObj[this.parent.eventFields.id] = this.parent.eventBase.getEventMaxID();\n currentAction = 'EditOccurrence';\n }\n if (this.parent.enableRecurrenceValidation\n && this.parent.eventWindow.editOccurrenceValidation(eveId, eventObj, this.actionObj.event)) {\n return;\n }\n }\n else {\n currentAction = null;\n }\n if (eventObj[this.parent.eventFields.startTimezone] || eventObj[this.parent.eventFields.endTimezone]) {\n this.parent.eventBase.timezoneConvert(eventObj);\n }\n this.parent.crudModule.saveEvent(eventObj, currentAction);\n }\n };\n ActionBase.prototype.calculateIntervalTime = function (date) {\n var intervalTime = new Date(+date);\n intervalTime.setMinutes(Math.floor(intervalTime.getMinutes() / this.actionObj.interval) * this.actionObj.interval);\n return intervalTime;\n };\n ActionBase.prototype.getContentAreaDimension = function () {\n var viewElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var trElement = [].slice.call(viewElement.querySelector('tr').children);\n if (!this.parent.activeView.isTimelineView() && this.parent.activeViewOptions.group.resources.length > 0 &&\n !this.parent.isAdaptive && !this.parent.enableAdaptiveUI && !this.parent.virtualScrollModule) {\n trElement = this.getResourceElements(trElement);\n }\n var leftOffset = trElement[0].getBoundingClientRect();\n var rightOffset = trElement.slice(-1)[0].getBoundingClientRect();\n var viewDimension = {\n bottom: viewElement.scrollHeight - 5,\n left: this.parent.enableRtl ? rightOffset.left : leftOffset.left,\n right: this.parent.enableRtl ? leftOffset.right : rightOffset.right,\n top: 0,\n leftOffset: this.parent.enableRtl ? rightOffset.right : leftOffset.right,\n rightOffset: this.parent.enableRtl ? leftOffset.left : rightOffset.left\n };\n return viewDimension;\n };\n ActionBase.prototype.getIndex = function (index) {\n var contentElements = [].slice.call(this.parent.getContentTable().querySelector('tr').children);\n var indexes = { minIndex: 0, maxIndex: contentElements.length - 1 };\n if (this.actionObj.action === 'resize' && this.parent.activeViewOptions.group.resources.length > 0 &&\n !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeView.isTimelineView()) {\n var groupElements = this.getResourceElements(contentElements);\n indexes.minIndex = groupElements[0].cellIndex;\n indexes.maxIndex = groupElements.slice(-1)[0].cellIndex;\n }\n if (index < indexes.minIndex) {\n index = indexes.minIndex;\n }\n if (index > indexes.maxIndex) {\n index = indexes.maxIndex;\n }\n return index;\n };\n ActionBase.prototype.updateTimePosition = function (date, multiData) {\n var index = 0;\n for (var _i = 0, _a = this.actionObj.cloneElement; _i < _a.length; _i++) {\n var cloneElement = _a[_i];\n var timeElement = cloneElement.querySelector('.' + cls.APPOINTMENT_TIME);\n if (timeElement) {\n var startTime = this.actionObj.start;\n var endTime = this.actionObj.end;\n if (multiData && multiData.length > 0) {\n startTime = multiData[parseInt(index.toString(), 10)][this.parent.eventFields.startTime];\n endTime = multiData[parseInt(index.toString(), 10)][this.parent.eventFields.endTime];\n }\n timeElement.innerHTML = this.parent.getTimeString(startTime) + ' - ' +\n this.parent.getTimeString(endTime);\n }\n index++;\n }\n if (!this.parent.activeViewOptions.timeScale.enable || !this.parent.isAdaptive || this.parent.currentView === 'Month' ||\n this.parent.currentView === 'TimelineMonth') {\n return;\n }\n var timeIndicator = this.parent.element.querySelector('.' + cls.CLONE_TIME_INDICATOR_CLASS);\n if (!timeIndicator) {\n timeIndicator = createElement('div', { className: cls.CLONE_TIME_INDICATOR_CLASS });\n var wrapperClass = this.parent.activeView.isTimelineView() ? cls.DATE_HEADER_WRAP_CLASS : cls.TIME_CELLS_WRAP_CLASS;\n this.parent.element.querySelector('.' + wrapperClass).appendChild(timeIndicator);\n }\n timeIndicator.innerHTML = this.parent.getTimeString(date);\n var offsetValue = 0;\n if (this.parent.activeView.isTimelineView()) {\n if (this.parent.enableRtl) {\n var rightValue = parseInt(this.actionObj.clone.style.right, 10);\n offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.left ?\n rightValue + this.actionObj.clone.offsetWidth : rightValue;\n timeIndicator.style.right = formatUnit(offsetValue);\n }\n else {\n var leftValue = parseInt(this.actionObj.clone.style.left, 10);\n offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.left ?\n leftValue : leftValue + this.actionObj.clone.offsetWidth;\n timeIndicator.style.left = formatUnit(offsetValue);\n }\n }\n else {\n offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.top ? this.actionObj.clone.offsetTop :\n this.actionObj.clone.offsetTop + this.actionObj.clone.offsetHeight;\n timeIndicator.style.top = formatUnit(offsetValue);\n }\n };\n ActionBase.prototype.getResourceElements = function (table) {\n var _this = this;\n return table.filter(function (element) {\n return parseInt(element.getAttribute('data-group-index'), 10) === _this.actionObj.groupIndex;\n });\n };\n ActionBase.prototype.getOriginalElement = function (element) {\n var originalElement;\n var guid = element.getAttribute('data-guid');\n var isMorePopup = element.offsetParent && element.offsetParent.classList.contains(cls.MORE_EVENT_POPUP_CLASS);\n if (isMorePopup || this.parent.activeView.isTimelineView() || (this.actionObj.action !== 'resize' && this.parent.virtualScrollModule)) {\n originalElement = [].slice.call(this.parent.element.querySelectorAll('[data-guid=\"' + guid + '\"]'));\n }\n else {\n var tr = closest(element, 'tr');\n if (tr) {\n originalElement = [].slice.call(tr.querySelectorAll('[data-guid=\"' + guid + '\"]'));\n }\n }\n return originalElement;\n };\n ActionBase.prototype.createCloneElement = function (element) {\n var cloneWrapper = createElement('div', { innerHTML: element.outerHTML });\n var cloneElement = cloneWrapper.children[0];\n var cloneClassLists = [cls.CLONE_ELEMENT_CLASS];\n cloneClassLists.push((this.actionObj.action === 'drag') ? cls.DRAG_CLONE_CLASS : cls.RESIZE_CLONE_CLASS);\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'TimelineMonth') {\n cloneClassLists.push(cls.MONTH_CLONE_ELEMENT_CLASS);\n }\n addClass([cloneElement], cloneClassLists);\n addClass([element], cls.EVENT_ACTION_CLASS);\n if (!isNullOrUndefined(element.parentElement)) {\n element.parentElement.appendChild(cloneElement);\n }\n cloneElement.style.width = formatUnit(cloneElement.offsetWidth - 2);\n var dragElement = document.querySelector(this.parent.eventDragArea);\n if (this.parent.eventDragArea && this.actionObj.action === 'drag' && dragElement) {\n dragElement.appendChild(cloneElement);\n }\n setStyleAttribute(cloneElement, { border: '0px' });\n return cloneElement;\n };\n ActionBase.prototype.removeCloneElementClasses = function () {\n var elements = this.actionObj.originalElement;\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'TimelineYear' ||\n this.parent.currentView === 'Day' || this.parent.currentView === 'Week' || this.parent.currentView === 'WorkWeek') {\n elements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.EVENT_ACTION_CLASS));\n }\n removeClass(elements, cls.EVENT_ACTION_CLASS);\n };\n ActionBase.prototype.removeCloneElement = function () {\n this.actionObj.originalElement = [];\n var dynamicEle = [].slice.call(this.parent.element.querySelectorAll('.e-dynamic-clone'));\n for (var _i = 0, dynamicEle_1 = dynamicEle; _i < dynamicEle_1.length; _i++) {\n var cloneEle = dynamicEle_1[_i];\n remove(cloneEle);\n }\n for (var _a = 0, _b = this.actionObj.cloneElement; _a < _b.length; _a++) {\n var cloneElement = _b[_a];\n if (!isNullOrUndefined(cloneElement.parentNode)) {\n remove(cloneElement);\n }\n }\n this.actionObj.cloneElement = [];\n var timeIndicator = this.parent.element.querySelector('.' + cls.CLONE_TIME_INDICATOR_CLASS);\n if (timeIndicator) {\n remove(timeIndicator);\n }\n };\n ActionBase.prototype.getCursorElement = function (e) {\n var pages = this.parent.eventBase.getPageCoordinates(e);\n return document.elementFromPoint(pages.clientX, pages.clientY);\n };\n ActionBase.prototype.autoScroll = function () {\n var parent = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n var xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n var yInBounds = yIsScrollable && parent.scrollTop >= 0 && parent.scrollTop + parent.offsetHeight <= parent.scrollHeight;\n var xInBounds = xIsScrollable && parent.scrollLeft >= 0 && parent.scrollLeft + parent.offsetWidth <= parent.scrollWidth;\n if (this.actionObj.action === 'resize' && this.scrollEdges.right && (parent.scrollLeft + parent.offsetWidth) > parent.scrollWidth) {\n var tdCollections = ([].slice.call(this.parent.getContentTable().querySelector('tr').children)).length - 1;\n var cellIndex = Math.ceil((this.actionObj.clone.offsetLeft + (this.actionObj.clone.offsetWidth)) /\n this.actionObj.cellWidth);\n xInBounds = cellIndex === tdCollections;\n }\n if (yInBounds && (this.scrollEdges.top || this.scrollEdges.bottom)) {\n parent.scrollTop += this.scrollEdges.top ? -this.actionObj.scroll.scrollBy : this.actionObj.scroll.scrollBy;\n if (this.actionObj.action === 'resize') {\n if (parent.scrollHeight !== parent.offsetHeight + parent.scrollTop && parent.scrollTop > 0) {\n this.actionObj.Y += this.scrollEdges.top ? this.actionObj.scroll.scrollBy : -this.actionObj.scroll.scrollBy;\n }\n }\n }\n if (xInBounds && (this.scrollEdges.left || this.scrollEdges.right)) {\n parent.scrollLeft += this.scrollEdges.left ? -this.actionObj.scroll.scrollBy : this.actionObj.scroll.scrollBy;\n if (this.actionObj.action === 'resize') {\n if (parent.scrollWidth !== parent.offsetWidth + parent.scrollLeft && parent.scrollLeft > 0) {\n this.actionObj.X += this.scrollEdges.left ? this.actionObj.scroll.scrollBy : -this.actionObj.scroll.scrollBy;\n }\n }\n }\n };\n ActionBase.prototype.autoScrollValidation = function () {\n if (!this.actionObj.scroll.enable) {\n return false;\n }\n var res = this.parent.boundaryValidation(this.actionObj.pageY, this.actionObj.pageX);\n this.scrollEdges = res;\n return res.bottom || res.top || res.left || res.right;\n };\n ActionBase.prototype.actionClass = function (type) {\n if (type === 'addClass') {\n addClass([this.parent.element], cls.EVENT_ACTION_CLASS);\n }\n else {\n removeClass([this.parent.element], cls.EVENT_ACTION_CLASS);\n }\n };\n ActionBase.prototype.updateScrollPosition = function (e) {\n var _this = this;\n this.scrollEventArgs = e;\n if (this.actionObj.scroll.enable && isNullOrUndefined(this.actionObj.scrollInterval)) {\n this.actionObj.scrollInterval = window.setInterval(function () {\n if (_this.autoScrollValidation() && !_this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n if (_this.parent.activeView.isTimelineView() && _this.parent.activeViewOptions.group.resources.length > 0\n && _this.actionObj.groupIndex < 0) {\n return;\n }\n _this.autoScroll();\n if (_this.actionObj.action === 'drag') {\n _this.parent.dragAndDropModule.updateDraggingDateTime(_this.scrollEventArgs);\n }\n else {\n _this.parent.resizeModule.updateResizingDirection(_this.scrollEventArgs);\n }\n }\n }, this.actionObj.scroll.timeDelay);\n }\n };\n ActionBase.prototype.updateOriginalElement = function (cloneElement) {\n var query = '[data-id=\"' + cloneElement.getAttribute('data-id') + '\"]';\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n query = query.concat('[data-group-index = \"' + cloneElement.getAttribute('data-group-index') + '\"]');\n }\n var elements = [].slice.call(this.parent.element.querySelectorAll(query));\n addClass(elements, cls.EVENT_ACTION_CLASS);\n var eventWrappers = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CLONE_ELEMENT_CLASS));\n removeClass(eventWrappers, cls.EVENT_ACTION_CLASS);\n };\n ActionBase.prototype.getUpdatedEvent = function (startTime, endTime, eventObj) {\n var event = JSON.parse(JSON.stringify(eventObj));\n event[this.parent.eventFields.startTime] = startTime;\n event[this.parent.eventFields.endTime] = endTime;\n return event;\n };\n ActionBase.prototype.dynamicYearlyEventsRendering = function (event, isResize) {\n if (isResize === void 0) { isResize = false; }\n if (!isNullOrUndefined(this.parent.eventDragArea)) {\n return;\n }\n var appWidth = this.actionObj.cellWidth - 7;\n if (isResize && (this.resizeEdges.left || this.resizeEdges.right)) {\n appWidth = this.actionObj.cellWidth * event.count;\n }\n if (!isResize && (this.parent.activeViewOptions.orientation === 'Horizontal' && this.parent.activeViewOptions.group.resources.length === 0)) {\n var eventObj = this.yearEvent.isSpannedEvent(event, event[this.parent.eventFields.startTime]);\n if (eventObj[this.parent.eventFields.startTime].getTime() ===\n eventObj[this.parent.eventFields.endTime].getTime()) {\n eventObj.isSpanned.count = 1;\n }\n appWidth = eventObj.isSpanned.count * this.actionObj.cellWidth;\n }\n if (!isResize && this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length !== 0) {\n var eventObj = this.yearEvent.isSpannedEvent(event, event[this.parent.eventFields.startTime]);\n appWidth = eventObj.isSpanned.count * this.actionObj.cellWidth;\n }\n var appointmentElement = this.createAppointmentElement(this.actionObj.groupIndex, event[this.parent.eventFields.subject]);\n appointmentElement.setAttribute('drag', 'true');\n addClass([appointmentElement], cls.CLONE_ELEMENT_CLASS);\n setStyleAttribute(appointmentElement, {\n 'width': appWidth + 'px', 'border': '0px', 'pointer-events': 'none',\n 'position': 'absolute', 'overflow': 'hidden', 'padding': '3px'\n });\n if (this.actionObj.clone.style.backgroundColor !== '') {\n setStyleAttribute(appointmentElement, { 'backgroundColor': this.actionObj.clone.style.backgroundColor });\n }\n var date = util.resetTime(event[this.parent.eventFields.startTime]).getTime();\n var query = '.' + cls.WORK_CELLS_CLASS + '[data-date=\"' + date + '\"]';\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n query = '.' + cls.WORK_CELLS_CLASS + '[data-date=\"' + date + '\"][data-group-index=\"' + this.actionObj.groupIndex + '\"]';\n }\n var cellTd = this.parent.element.querySelector(query);\n if (isNullOrUndefined(cellTd)) {\n return;\n }\n if (isResize) {\n var dateHeader = cellTd.querySelector('.' + cls.DATE_HEADER_CLASS);\n var appHeight = this.actionObj.cellHeight * event.count -\n (dateHeader ? dateHeader.offsetHeight : 0) - 7;\n if (this.resizeEdges.right || this.resizeEdges.left) {\n appHeight = parseInt(this.actionObj.clone.style.height, 10);\n }\n setStyleAttribute(appointmentElement, { 'height': appHeight + 'px' });\n }\n this.renderDynamicElement(cellTd, appointmentElement, true);\n this.actionObj.cloneElement.push(appointmentElement);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ActionBase.prototype.renderDynamicElement = function (cellTd, element, isAppointment) {\n if (isAppointment === void 0) { isAppointment = false; }\n if (cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(element);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(element);\n cellTd.appendChild(wrapper);\n }\n };\n ActionBase.prototype.createAppointmentElement = function (resIndex, innerText) {\n var appointmentWrapper = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n innerHTML: innerText\n });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n appointmentWrapper.setAttribute('data-group-index', resIndex.toString());\n }\n return appointmentWrapper;\n };\n ActionBase.prototype.dynamicEventsRendering = function (event) {\n var _this = this;\n if (!isNullOrUndefined(this.parent.eventDragArea)) {\n return;\n }\n var dateRender = this.parent.activeView.renderDates;\n var workCells = [].slice.call(this.parent.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n var workDays = this.parent.activeViewOptions.workDays;\n var groupOrder;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var renderedResource = this.parent.virtualScrollModule && this.parent.virtualScrollModule.isHorizontalScroll ?\n this.parent.resourceBase.renderedResources : this.parent.resourceBase.lastResourceLevel;\n var resources = renderedResource.\n filter(function (res) { return res.groupIndex === _this.actionObj.groupIndex; });\n dateRender = resources[0].renderDates;\n var elementSelector = \".\" + cls.WORK_CELLS_CLASS + \"[data-group-index=\\\"\" + this.actionObj.groupIndex + \"\\\"]\";\n workCells = [].slice.call(this.parent.element.querySelectorAll(elementSelector));\n workDays = resources[0].workDays;\n groupOrder = resources[0].groupOrder;\n }\n this.monthEvent.dateRender = dateRender;\n this.monthEvent.getSlotDates(workDays);\n if (this.resizeEdges.left || this.resizeEdges.right) {\n var eventWrappers = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CLONE_ELEMENT_CLASS));\n for (var _i = 0, eventWrappers_1 = eventWrappers; _i < eventWrappers_1.length; _i++) {\n var wrapper = eventWrappers_1[_i];\n remove(wrapper);\n }\n }\n var spannedEvents = this.monthEvent.splitEvent(event, dateRender);\n for (var _a = 0, spannedEvents_1 = spannedEvents; _a < spannedEvents_1.length; _a++) {\n var event_1 = spannedEvents_1[_a];\n var day = this.parent.getIndexOfDate(dateRender, util.resetTime(event_1[this.monthEvent.fields.startTime]));\n var diffInDays = event_1.data.count;\n var appWidth = (diffInDays * this.actionObj.cellWidth) - 7;\n var appointmentElement = this.monthEvent.createAppointmentElement(event_1, this.actionObj.groupIndex, true);\n appointmentElement.setAttribute('drag', 'true');\n addClass([appointmentElement], cls.CLONE_ELEMENT_CLASS);\n this.monthEvent.applyResourceColor(appointmentElement, event_1, 'backgroundColor', groupOrder);\n setStyleAttribute(appointmentElement, { 'width': appWidth + 'px', 'border': '0px', 'pointer-events': 'none' });\n var cellTd = workCells[parseInt(day.toString(), 10)];\n if (cellTd) {\n this.monthEvent.renderElement(cellTd, appointmentElement, true);\n this.actionObj.cloneElement.push(appointmentElement);\n }\n }\n };\n ActionBase.prototype.destroy = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.actionObj = {};\n this.scrollArgs = {};\n this.resizeEdges = { left: false, right: false, top: false, bottom: false };\n this.scrollEdges = { left: false, right: false, top: false, bottom: false };\n };\n return ActionBase;\n}());\nexport { ActionBase };\n","/**\n * Constants\n */\n/** @private */\nexport var cellClick = 'cellClick';\n/** @private */\nexport var cellDoubleClick = 'cellDoubleClick';\n/** @private */\nexport var moreEventsClick = 'moreEventsClick';\n/** @private */\nexport var select = 'select';\n/** @private */\nexport var hover = 'hover';\n/** @private */\nexport var actionBegin = 'actionBegin';\n/** @private */\nexport var actionComplete = 'actionComplete';\n/** @private */\nexport var actionFailure = 'actionFailure';\n/** @private */\nexport var navigating = 'navigating';\n/** @private */\nexport var renderCell = 'renderCell';\n/** @private */\nexport var eventClick = 'eventClick';\n/** @private */\nexport var eventRendered = 'eventRendered';\n/** @private */\nexport var dataBinding = 'dataBinding';\n/** @private */\nexport var dataBound = 'dataBound';\n/** @private */\nexport var popupOpen = 'popupOpen';\n/** @private */\nexport var popupClose = 'popupClose';\n/** @private */\nexport var dragStart = 'dragStart';\n/** @private */\nexport var drag = 'drag';\n/** @private */\nexport var dragStop = 'dragStop';\n/** @private */\nexport var resizeStart = 'resizeStart';\n/** @private */\nexport var resizing = 'resizing';\n/** @private */\nexport var resizeStop = 'resizeStop';\n/** @private */\nexport var inlineClick = 'inlineClick';\n/** @private */\nexport var cellSelect = 'cellSelect';\n/**\n * Specifies schedule internal events\n */\n/** @private */\nexport var initialLoad = 'initial-load';\n/** @private */\nexport var initialEnd = 'initial-end';\n/** @private */\nexport var print = 'print';\n/** @private */\nexport var dataReady = 'data-ready';\n/** @private */\nexport var eventsLoaded = 'events-loaded';\n/** @private */\nexport var contentReady = 'content-ready';\n/** @private */\nexport var scroll = 'scroll';\n/** @private */\nexport var virtualScroll = 'virtual-scroll';\n/** @private */\nexport var scrollUiUpdate = 'scroll-ui-update';\n/** @private */\nexport var uiUpdate = 'ui-update';\n/** @private */\nexport var documentClick = 'document-click';\n/** @private */\nexport var cellMouseDown = 'cell-mouse-down';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNullOrUndefined, addClass, createElement, append, EventHandler, extend, remove } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { ViewBase } from '../renderer/view-base';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\nvar AgendaBase = /** @class */ (function (_super) {\n __extends(AgendaBase, _super);\n function AgendaBase(parent) {\n return _super.call(this, parent) || this;\n }\n // eslint-disable-next-line max-len\n AgendaBase.prototype.createAgendaContentElement = function (type, listData, aTd, groupOrder, groupIndex) {\n var _this = this;\n var listElement;\n var fieldMapping = this.parent.eventFields;\n if (type === 'noEvents') {\n var noEvents = [{ 'subject': this.parent.localeObj.getConstant('noEvents') }];\n listElement = ListBase.createList(this.parent.createElement, noEvents, {\n moduleName: 'agenda',\n listClass: this.parent.activeView.viewClass,\n itemClass: this.parent.activeView.viewClass,\n template: \"
\" + this.parent.localeObj.getConstant('noEvents') + \"
\"\n });\n if (listElement.querySelector('.e-agenda-item').children.length === 0) {\n listElement.firstElementChild.appendChild(createElement('div', { className: cls.AGENDA_NO_EVENT_CLASS, innerHTML: this.parent.localeObj.getConstant('noEvents') }));\n }\n }\n else {\n listElement = ListBase.createList(this.parent.createElement, listData, {\n moduleName: 'agenda',\n listClass: this.parent.activeView.viewClass,\n itemClass: this.parent.activeView.viewClass\n });\n var listElements = [].slice.call(listElement.children);\n listElements.forEach(function (element, li) {\n var appWrapper = createElement('div', {\n className: cls.APPOINTMENT_CLASS, attrs: {\n 'data-id': 'Appointment_' + listData[parseInt(li.toString(), 10)][\"\" + _this.parent.eventFields.id],\n 'data-guid': listData[parseInt(li.toString(), 10)].Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-disabled': _this.parent.eventBase.getReadonlyAttribute(listData[parseInt(li.toString(), 10)]),\n 'aria-label': _this.parent.getAnnouncementString(listData[parseInt(li.toString(), 10)])\n }\n });\n if (!isNullOrUndefined(groupIndex)) {\n appWrapper.setAttribute('data-group-index', groupIndex.toString());\n }\n _this.parent.eventBase.applyResourceColor(appWrapper, listData[parseInt(li.toString(), 10)], 'borderColor', groupOrder);\n var templateEle;\n if (!isNullOrUndefined(_this.parent.activeViewOptions.eventTemplate)) {\n addClass([appWrapper], cls.EVENT_TEMPLATE);\n var scheduleId = _this.parent.element.id + '_';\n var viewName = _this.parent.activeViewOptions.eventTemplateName;\n var templateId = scheduleId + viewName + 'eventTemplate';\n templateEle = _this.parent.getAppointmentTemplate()(listData[parseInt(li.toString(), 10)], _this.parent, 'eventTemplate', templateId, false);\n if (!isNullOrUndefined(listData[parseInt(li.toString(), 10)][fieldMapping.recurrenceRule])) {\n var iconClass = (listData[parseInt(li.toString(), 10)][fieldMapping.id] ===\n listData[parseInt(li.toString(), 10)][fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appWrapper.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n }\n else {\n templateEle = _this.createAppointment(listData[parseInt(li.toString(), 10)]);\n }\n append([].slice.call(templateEle), appWrapper);\n util.removeChildren(element);\n element.appendChild(appWrapper);\n var args = {\n data: extend({}, listData[parseInt(li.toString(), 10)], null, true),\n element: element, cancel: false\n };\n _this.parent.trigger(event.eventRendered, args, function (eventArgs) {\n if (eventArgs.cancel) {\n remove(element);\n }\n });\n });\n }\n aTd.appendChild(listElement);\n if ((this.parent.currentView === 'MonthAgenda' && this.parent.activeViewOptions.group.resources.length > 0)\n || this.parent.currentView === 'Agenda') {\n addClass([aTd], cls.AGENDA_DAY_BORDER_CLASS);\n }\n this.parent.renderTemplates();\n return aTd;\n };\n AgendaBase.prototype.createAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var eventSubject = (event[fieldMapping.subject] || this.parent.eventSettings.fields.subject.default\n || this.parent.localeObj.getConstant('addTitle'));\n var eventLocation = (event[fieldMapping.location] || this.parent.eventSettings.fields.location.default);\n var appSubjectWrap = createElement('div', { className: cls.SUBJECT_WRAP });\n if (!isNullOrUndefined(eventLocation) && eventLocation !== '') {\n eventSubject += ',';\n }\n var appSubjectText = createElement('div', { className: cls.SUBJECT_CLASS });\n this.parent.sanitize(eventSubject, appSubjectText);\n appSubjectWrap.appendChild(appSubjectText);\n if (!isNullOrUndefined(eventLocation) && eventLocation !== '') {\n var appLocation = createElement('div', { className: cls.LOCATION_CLASS });\n this.parent.sanitize(eventLocation, appLocation);\n appSubjectWrap.appendChild(appLocation);\n }\n if (!isNullOrUndefined(event[fieldMapping.recurrenceRule])) {\n var iconClass = (event[fieldMapping.id] === event[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appSubjectWrap.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n var strDate = event[fieldMapping.startTime];\n var endDate = event[fieldMapping.endTime];\n var isAllDay = event[fieldMapping.isAllDay];\n var allDayStr = this.parent.localeObj.getConstant('allDay');\n var timeStr = this.parent.getTimeString(strDate) + ' - ' + this.parent.getTimeString(endDate);\n if (!isNullOrUndefined(event.data)) {\n var milliSeconds = (endDate.getTimezoneOffset() !== strDate.getTimezoneOffset()) ?\n (endDate.getTime() - strDate.getTime() + 3600000) : (endDate.getTime() - strDate.getTime());\n var eventString = (milliSeconds / util.MS_PER_DAY) >= 1 ? allDayStr : timeStr;\n allDayStr = eventString + ' (' + this.parent.localeObj.getConstant('day') + ' '\n + event.data.index + '/' + event.data.count + ')';\n }\n var displayStr = (!isNullOrUndefined(event.data) || isAllDay) ? allDayStr : timeStr;\n var appDateTime = createElement('div', { className: cls.DATE_TIME_CLASS, innerHTML: displayStr });\n return [appSubjectWrap, appDateTime];\n };\n AgendaBase.prototype.processAgendaEvents = function (events) {\n var eventsProcessed = [];\n if (isNullOrUndefined(events)) {\n return eventsProcessed;\n }\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n var spanned = this.parent.eventBase.splitEventByDay(event_1);\n eventsProcessed = eventsProcessed.concat(spanned.length > 1 ? spanned : event_1);\n }\n return eventsProcessed;\n };\n AgendaBase.prototype.wireEventActions = function () {\n var eventElement = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var _i = 0, eventElement_1 = eventElement; _i < eventElement_1.length; _i++) {\n var element = eventElement_1[_i];\n this.parent.eventBase.wireAppointmentEvents(element, this.parent.getEventDetails(element), true);\n }\n var dateHeaderElement = [].slice.call(this.parent.element.querySelectorAll('.e-m-date'));\n for (var _a = 0, dateHeaderElement_1 = dateHeaderElement; _a < dateHeaderElement_1.length; _a++) {\n var element = dateHeaderElement_1[_a];\n EventHandler.add(element, 'click', this.parent.agendaModule.dayNavigationClick, this);\n }\n };\n AgendaBase.prototype.calculateResourceTableElement = function (tBody, noOfDays, agendaDate) {\n if (isNullOrUndefined(this.parent.resourceBase.lastResourceLevel)) {\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n this.parent.resourceBase.generateResourceLevels(level);\n }\n var agendaLastDate = util.addDays(new Date(agendaDate.getTime()), noOfDays);\n var days = (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') ? noOfDays : 1;\n var resColl = this.parent.resourceBase.resourceCollection;\n var resData = this.parent.resourceBase.lastResourceLevel;\n var initialDate = agendaDate;\n for (var i = 0; i < days; i++) {\n var lastLevelInfo = [];\n var tempLastLevelInfo = [];\n var tempIndex = 0;\n var eventObj = void 0;\n var dateObj = void 0;\n var firstDate = util.addDays(initialDate, i);\n var finalDate = (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda')\n ? util.addDays(firstDate, 1) : agendaLastDate;\n var agendaCollection = this.parent.eventBase.filterEvents(firstDate, finalDate);\n if (agendaCollection.length > 0 || !this.parent.hideEmptyAgendaDays || this.parent.currentView === 'MonthAgenda') {\n for (var res = 0; res < resData.length; res++) {\n noOfDays = (!this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') ? noOfDays : 1;\n var data = [];\n agendaDate = firstDate;\n // eslint-disable-next-line max-len\n var resDataCollection = this.parent.eventBase.filterEvents(agendaDate, agendaLastDate, agendaCollection, resData[parseInt(res.toString(), 10)]);\n if (resDataCollection.length > 0 || !this.parent.hideEmptyAgendaDays || this.parent.currentView === 'MonthAgenda') {\n for (var r = 0; r < noOfDays; r++) {\n // eslint-disable-next-line max-len\n var resDayCollection = this.parent.eventBase.filterEvents(agendaDate, util.addDays(agendaDate, 1), resDataCollection, undefined);\n if (resDayCollection.length > 0 || !this.parent.hideEmptyAgendaDays ||\n this.parent.currentView === 'MonthAgenda') {\n data.push(resDayCollection[0]);\n eventObj = {\n rowSpan: 1, type: 'eventColumn', resource: resColl[resColl.length - 1],\n groupIndex: resData[parseInt(res.toString(), 10)].groupIndex,\n groupOrder: resData[parseInt(res.toString(), 10)].groupOrder,\n resourceData: resData[parseInt(res.toString(), 10)].resourceData,\n eventData: resDayCollection, date: agendaDate\n };\n dateObj = {\n rowSpan: 1, type: 'dateColumn', resource: resColl[parseInt((resColl.length - 1).toString(), 10)],\n groupOrder: resData[parseInt(res.toString(), 10)].groupOrder,\n resourceData: resData[parseInt(res.toString(), 10)].resourceData,\n date: agendaDate\n };\n if (!lastLevelInfo[parseInt(tempIndex.toString(), 10)]) {\n lastLevelInfo[parseInt(tempIndex.toString(), 10)] = [];\n }\n lastLevelInfo[parseInt(tempIndex.toString(), 10)].push(eventObj);\n lastLevelInfo[parseInt(tempIndex.toString(), 10)].push(dateObj);\n tempIndex++;\n }\n agendaDate = util.addDays(agendaDate, 1);\n if (agendaDate.getTime() >= agendaLastDate.getTime() || this.parent.activeViewOptions.group.byDate\n || this.parent.currentView === 'MonthAgenda') {\n lastLevelInfo[lastLevelInfo.length - 1][1].cssClass = cls.AGENDA_DAY_BORDER_CLASS;\n var tempObj = {\n rowSpan: data.length, type: 'resourceColumn', resource: resColl[parseInt((resColl.length - 1).toString(), 10)],\n groupOrder: resData[parseInt(res.toString(), 10)].groupOrder.slice(0, -1),\n resourceData: resData[parseInt(res.toString(), 10)].resourceData,\n groupIndex: (lastLevelInfo.length - data.length), className: [cls.RESOURCE_NAME],\n date: agendaDate\n };\n lastLevelInfo[parseInt((lastLevelInfo.length - data.length).toString(), 10)].push(tempObj);\n tempLastLevelInfo.push(extend({}, tempObj, null, true));\n break;\n }\n }\n }\n }\n var topResources = resColl.slice(0, -1);\n var tempGroupedData = [];\n var totalRowSpan = 0;\n for (var y = 0; y < topResources.length; y++) {\n var data = topResources[topResources.length - (y + 1)].dataSource;\n for (var x = 0; x < data.length; x++) {\n var z = 0;\n for (var u = 0; u < tempLastLevelInfo.length; u++) {\n // eslint-disable-next-line max-len\n if (tempLastLevelInfo[parseInt(u.toString(), 10)].groupOrder[topResources.length - (y + 1)] === data[parseInt(x.toString(), 10)][topResources[topResources.length - (y + 1)].idField]) {\n totalRowSpan = totalRowSpan + tempLastLevelInfo[parseInt(u.toString(), 10)].rowSpan;\n tempGroupedData.push(extend({}, tempLastLevelInfo[parseInt(u.toString(), 10)], null, true));\n }\n if (++z === tempLastLevelInfo.length && tempGroupedData.length > 0) {\n tempGroupedData[0].rowSpan = totalRowSpan;\n tempGroupedData[0].type = 'parentColumnLevel_' + (y + 1);\n tempGroupedData[0].resource = topResources[topResources.length - (y + 1)];\n tempGroupedData[0].resourceData = data[parseInt(x.toString(), 10)];\n tempGroupedData[0].date = agendaDate;\n lastLevelInfo[tempGroupedData[0].groupIndex].push(tempGroupedData[0]);\n tempGroupedData = [];\n totalRowSpan = 0;\n }\n }\n }\n }\n this.createResourceTableRow(lastLevelInfo, tBody);\n }\n }\n var totalCollection = this.parent.eventBase.filterEvents(initialDate, agendaLastDate);\n if (totalCollection.length === 0 && !this.parent.activeViewOptions.allowVirtualScrolling && this.parent.hideEmptyAgendaDays) {\n this.renderEmptyContent(tBody, initialDate);\n }\n };\n AgendaBase.prototype.createResourceTableRow = function (tContent, tBody) {\n var tr = createElement('tr');\n var ntr;\n var td = createElement('td', { attrs: { 'aria-selected': 'false' } });\n var tempData;\n var rowSpan = 0;\n var level;\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n var tContentCollection = [];\n var parentCollection = this.parent.resourceBase.resourceCollection.slice(0, -1);\n for (var w = 0; w < tContent.length; w++) {\n tContentCollection = tContentCollection.concat(tContent[parseInt(w.toString(), 10)]);\n }\n level = (parentCollection.length > 0) ? 'parentColumnLevel_' + parentCollection.length : 'resourceColumn';\n var rowSpanCollection = tContentCollection.filter(function (data) { return data.type === level; });\n for (var x = 0; x < rowSpanCollection.length; x++) {\n rowSpan = rowSpan + rowSpanCollection[parseInt(x.toString(), 10)].rowSpan;\n }\n }\n for (var row = 0; row < tContent.length; row++) {\n ntr = tr.cloneNode();\n for (var col = tContent[parseInt(row.toString(), 10)].length - 1; col >= 0; col--) {\n var data = tContent[parseInt(row.toString(), 10)][parseInt(col.toString(), 10)];\n var ntd = td.cloneNode();\n if (data.type === 'dateColumn') {\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n tempData = tContent[parseInt(row.toString(), 10)][parseInt(col.toString(), 10)];\n continue;\n }\n ntd.setAttribute('data-date', data.date.getTime().toString());\n ntd.appendChild(this.createDateHeaderElement(data.date));\n var className = [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DATE_CLASS];\n if (data.cssClass) {\n className.push(data.cssClass);\n }\n addClass([ntd], className);\n if (this.isCurrentDate(new Date(data.date.getTime()))) {\n addClass(ntd.childNodes, cls.AGENDA_CURRENT_DAY_CLASS);\n }\n ntr.appendChild(ntd);\n }\n else if (data.type === 'eventColumn') {\n var elementType = (data.eventData.length === 0) ? 'noEvents' : 'data';\n ntd = this.createAgendaContentElement(elementType, data.eventData, ntd, data.groupOrder, data.groupIndex);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n addClass([ntd], [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DAY_PADDING_CLASS]);\n }\n ntr.appendChild(ntd);\n }\n else {\n ntd.setAttribute('rowspan', data.rowSpan.toString());\n addClass([ntd], cls.AGENDA_RESOURCE_CLASS);\n this.setResourceHeaderContent(ntd, data, data.className[0]);\n ntr.appendChild(ntd);\n }\n }\n if (this.parent.activeViewOptions.group.byDate && row === 0 && this.parent.currentView !== 'MonthAgenda') {\n var ntd = td.cloneNode();\n ntd.setAttribute('data-date', tempData.date.getTime().toString());\n ntd.setAttribute('rowspan', rowSpan.toString());\n ntd.appendChild(this.createDateHeaderElement(tempData.date));\n addClass([ntd], [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DATE_CLASS, cls.DATE_BORDER_CLASS]);\n var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), tempData.date.getTime());\n ntr.setAttribute('data-row-index', daysCount.toString());\n if (this.parent.element.querySelector(\".e-agenda-view tr[data-row-index=\\\"\" + daysCount + \"\\\"]\")) {\n break;\n }\n ntr.insertBefore(ntd, ntr.childNodes[0]);\n }\n tBody.appendChild(ntr);\n }\n };\n AgendaBase.prototype.createDateHeaderElement = function (date) {\n var dateHeader;\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n dateHeader = createElement('div', { className: cls.AGENDA_HEADER_CLASS });\n var args = { date: date, type: 'dateHeader' };\n var scheduleId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.dateHeaderTemplateName;\n var templateId = scheduleId + viewName + 'dateHeaderTemplate';\n var dateTemplate = [].slice.call(this.parent.getDateHeaderTemplate()(args, this.parent, 'dateHeaderTemplate', templateId, false));\n append(dateTemplate, dateHeader);\n }\n else {\n dateHeader = this.getMobileDateElement(date, cls.AGENDA_HEADER_CLASS);\n }\n return dateHeader;\n };\n AgendaBase.prototype.renderEmptyContent = function (tBody, agendaDate) {\n var eTr = this.createTableRowElement(agendaDate, 'noEvents');\n var eTd = eTr.children[0];\n var noEvents = createElement('div', {\n className: cls.AGENDA_EMPTY_EVENT_CLASS,\n innerHTML: this.parent.localeObj.getConstant('noEvents')\n });\n eTd.appendChild(noEvents);\n tBody.appendChild(eTr);\n };\n AgendaBase.prototype.createTableRowElement = function (date, type) {\n var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), date.getTime());\n var tr = createElement('tr', { attrs: { 'data-row-index': daysCount.toString() } });\n var td = createElement('td', {\n attrs: {\n 'class': (type === 'monthHeader') ? cls.MONTH_HEADER_CLASS : cls.AGENDA_CELLS_CLASS,\n 'aria-selected': 'false',\n 'data-column-index': daysCount.toString(),\n 'data-date': date.getTime().toString()\n }\n });\n var dTd = td.cloneNode();\n var aTd = td.cloneNode();\n tr.appendChild(dTd);\n if (type !== 'noEvents') {\n tr.appendChild(aTd);\n }\n return tr;\n };\n AgendaBase.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n return AgendaBase;\n}(ViewBase));\nexport { AgendaBase };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNullOrUndefined, createElement, remove, closest, addClass, removeClass, extend, append } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { Calendar } from '@syncfusion/ej2-calendars';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Header module\n */\nvar HeaderRenderer = /** @class */ (function () {\n function HeaderRenderer(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.renderHeader();\n this.addEventListener();\n }\n HeaderRenderer.prototype.addEventListener = function () {\n this.parent.on(events.documentClick, this.closeHeaderPopup, this);\n };\n HeaderRenderer.prototype.removeEventListener = function () {\n this.parent.off(events.documentClick, this.closeHeaderPopup);\n };\n HeaderRenderer.prototype.closeHeaderPopup = function (e) {\n var closestEle = closest(e.event.target, '.e-date-range,.e-header-popup,.e-day,.e-selected');\n var closestPop = closest(e.event.target, '.e-hor-nav,.e-toolbar-pop');\n var contentWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (this.parent.isAdaptive) {\n if (!isNullOrUndefined(closestPop) && (closestPop.classList.contains('e-toolbar-pop') ||\n closestPop.classList.contains('e-hor-nav')) && !(closestPop.classList.contains('e-hor-nav') &&\n this.element.querySelector('.e-toolbar-pop').classList.contains(cls.POPUP_OPEN))) {\n addClass([contentWrap], cls.SCROLL_HIDDEN);\n }\n else {\n removeClass([contentWrap], cls.SCROLL_HIDDEN);\n var popupEle = this.element.querySelector('.e-toolbar-pop');\n if (!isNullOrUndefined(popupEle)) {\n var popupObj = popupEle.ej2_instances[0];\n if (popupObj && !(!isNullOrUndefined(closestPop) && closestPop.classList.contains('e-hor-nav') &&\n popupEle.classList.contains(cls.POPUP_OPEN))) {\n popupObj.hide();\n }\n }\n }\n }\n if (!isNullOrUndefined(closestEle)) {\n return;\n }\n this.hideHeaderPopup();\n };\n HeaderRenderer.prototype.hideHeaderPopup = function () {\n if (this.headerPopup) {\n this.headerPopup.hide();\n }\n };\n HeaderRenderer.prototype.renderHeader = function () {\n this.element = createElement('div', { className: cls.TOOLBAR_CONTAINER });\n var toolbarEle = createElement('div', { className: cls.HEADER_TOOLBAR });\n this.element.appendChild(toolbarEle);\n this.parent.element.insertBefore(this.element, this.parent.element.firstElementChild);\n this.renderToolbar();\n };\n HeaderRenderer.prototype.renderToolbar = function () {\n var _this = this;\n var items = this.getItems();\n this.parent.trigger(events.actionBegin, { requestType: 'toolbarItemRendering', items: items }, function (args) {\n _this.toolbarObj = new Toolbar({\n items: args.items,\n overflowMode: 'Popup',\n clicked: _this.toolbarClickHandler.bind(_this),\n enableRtl: _this.parent.enableRtl,\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n locale: _this.parent.locale\n });\n _this.toolbarObj.appendTo(_this.parent.element.querySelector('.' + cls.HEADER_TOOLBAR));\n var prevNavEle = _this.toolbarObj.element.querySelector('.e-prev');\n if (prevNavEle) {\n prevNavEle.firstElementChild.setAttribute('title', _this.l10n.getConstant('previous'));\n }\n var nextNavEle = _this.toolbarObj.element.querySelector('.e-next');\n if (nextNavEle) {\n nextNavEle.firstElementChild.setAttribute('title', _this.l10n.getConstant('next'));\n }\n _this.updateAddIcon();\n _this.updateActiveView();\n _this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: _this.toolbarObj.items });\n });\n };\n HeaderRenderer.prototype.updateItems = function () {\n var _this = this;\n if (this.toolbarObj) {\n var items = this.getItems();\n this.parent.trigger(events.actionBegin, { requestType: 'toolbarItemRendering', items: items }, function (args) {\n _this.toolbarObj.items = args.items;\n _this.toolbarObj.dataBind();\n _this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: _this.toolbarObj.items });\n });\n }\n };\n HeaderRenderer.prototype.getPopUpRelativeElement = function () {\n if (this.parent.isAdaptive) {\n return this.toolbarObj.element;\n }\n return this.element.querySelector('.e-date-range');\n };\n HeaderRenderer.prototype.setDayOfWeek = function (index) {\n if (this.headerCalendar) {\n this.headerCalendar.firstDayOfWeek = index;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.setCalendarDate = function (date) {\n if (this.headerCalendar) {\n this.headerCalendar.value = date;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.setCalendarMinMaxDate = function () {\n if (this.headerCalendar) {\n this.headerCalendar.min = this.parent.minDate;\n this.headerCalendar.max = this.parent.maxDate;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.getCalendarView = function () {\n if (['Month', 'MonthAgenda', 'TimelineMonth'].indexOf(this.parent.currentView) > -1) {\n return 'Year';\n }\n else if (['Year', 'TimelineYear'].indexOf(this.parent.currentView) > -1) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n HeaderRenderer.prototype.setCalendarView = function () {\n if (this.headerCalendar) {\n var calendarView = this.getCalendarView();\n this.headerCalendar.depth = calendarView;\n this.headerCalendar.start = calendarView;\n this.headerCalendar.refresh();\n }\n };\n HeaderRenderer.prototype.updateActiveView = function () {\n var selEle = [].slice.call(this.toolbarObj.element.querySelectorAll('.e-views'));\n removeClass(selEle, ['e-active-view']);\n if (selEle.length > 0 && selEle[this.parent.viewIndex]) {\n addClass([selEle[this.parent.viewIndex]], ['e-active-view']);\n }\n };\n HeaderRenderer.prototype.updateDateRange = function (date) {\n var selEle = this.toolbarObj.element.querySelector('.e-date-range');\n if (!selEle) {\n return;\n }\n var textEle = selEle.querySelector('.e-tbar-btn-text');\n if (this.parent.activeViewOptions.dateRangeTemplate) {\n textEle.textContent = '';\n var args = {\n startDate: this.parent.activeView.getStartDate(),\n endDate: this.parent.activeView.getEndDate(), currentView: this.parent.currentView\n };\n var viewName = this.parent.activeViewOptions.dateRangeTemplateName;\n var templateId = this.parent.element.id + '_' + viewName + 'dateRangeTemplate';\n var dateTemplate = [].slice.call(this.parent.getDateRangeTemplate()(args, this.parent, 'dateRangeTemplate', templateId, false));\n append(dateTemplate, textEle);\n }\n else {\n var text = this.parent.activeView.getDateRangeText(date);\n selEle.firstElementChild.setAttribute('aria-label', text);\n textEle.textContent = text;\n }\n this.refresh();\n };\n HeaderRenderer.prototype.refresh = function () {\n if (this.toolbarObj) {\n this.toolbarObj.refreshOverflow();\n }\n };\n HeaderRenderer.prototype.updateAddIcon = function () {\n var addEle = this.toolbarObj.element.querySelector('.e-add');\n if (addEle) {\n if (!this.parent.eventSettings.allowAdding) {\n addClass([addEle], cls.HIDDEN_CLASS);\n }\n else {\n removeClass([addEle], cls.HIDDEN_CLASS);\n }\n }\n };\n HeaderRenderer.prototype.getDateRangeText = function () {\n var dateString = this.parent.globalize.formatDate(this.parent.selectedDate, {\n format: 'MMMM y', calendar: this.parent.getCalendarMode()\n });\n return util.capitalizeFirstWord(dateString, 'single');\n };\n HeaderRenderer.prototype.getItems = function () {\n var items = [];\n items.push({\n align: 'Left', prefixIcon: 'e-icon-prev', tooltipText: 'Previous', overflow: 'Show',\n cssClass: 'e-prev', htmlAttributes: { 'role': 'navigation' }\n });\n items.push({\n align: 'Left', prefixIcon: 'e-icon-next', tooltipText: 'Next', overflow: 'Show',\n cssClass: 'e-next', htmlAttributes: { 'role': 'navigation' }\n });\n items.push({\n align: 'Left', text: this.getDateRangeText(), suffixIcon: 'e-icon-down-arrow', cssClass: 'e-date-range',\n overflow: 'Show',\n htmlAttributes: { 'aria-atomic': 'true', 'aria-live': 'assertive', 'role': 'navigation' }\n });\n if (this.parent.isAdaptive || this.parent.enableAdaptiveUI) {\n items.push({\n align: 'Right', showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-add',\n text: this.l10n.getConstant('newEvent'), cssClass: 'e-add', overflow: 'Show'\n });\n items.push({\n align: 'Right', showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-today',\n text: this.l10n.getConstant('today'), cssClass: 'e-today', overflow: 'Show'\n });\n }\n else {\n items.push({\n align: 'Right', showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-day',\n text: this.l10n.getConstant('today'), cssClass: 'e-today', overflow: 'Show'\n });\n if (this.parent.views.length > 1) {\n items.push({ align: 'Right', type: 'Separator', cssClass: 'e-schedule-seperator' });\n }\n }\n if (this.parent.views.length > 1) {\n for (var _i = 0, _a = this.parent.views; _i < _a.length; _i++) {\n var item = _a[_i];\n items.push(this.getItemObject(item));\n }\n }\n return items;\n };\n HeaderRenderer.prototype.getItemObject = function (item) {\n var viewName;\n var displayName;\n if (typeof (item) === 'string') {\n viewName = item.toLowerCase();\n displayName = null;\n }\n else {\n viewName = item.option.toLowerCase();\n displayName = item.displayName;\n }\n var view;\n var orientationClass;\n var isItemInsidePopup = this.parent.isAdaptive || this.parent.enableAdaptiveUI;\n switch (viewName) {\n case 'day':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-day',\n text: displayName || this.l10n.getConstant('day'), cssClass: 'e-views e-day'\n };\n break;\n case 'week':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-week',\n text: displayName || this.l10n.getConstant('week'), cssClass: 'e-views e-week'\n };\n break;\n case 'workweek':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-workweek',\n text: displayName || this.l10n.getConstant('workWeek'), cssClass: 'e-views e-work-week'\n };\n break;\n case 'month':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-month',\n text: displayName || this.l10n.getConstant('month'), cssClass: 'e-views e-month'\n };\n break;\n case 'year':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-year',\n text: displayName || this.l10n.getConstant('year'), cssClass: 'e-views e-year'\n };\n break;\n case 'agenda':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-agenda',\n text: displayName || this.l10n.getConstant('agenda'), cssClass: 'e-views e-agenda'\n };\n break;\n case 'monthagenda':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-month-agenda',\n text: displayName || this.l10n.getConstant('monthAgenda'), cssClass: 'e-views e-month-agenda'\n };\n break;\n case 'timelineday':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-timeline-day',\n text: displayName || this.l10n.getConstant('timelineDay'), cssClass: 'e-views e-timeline-day'\n };\n break;\n case 'timelineweek':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-timeline-week',\n text: displayName || this.l10n.getConstant('timelineWeek'), cssClass: 'e-views e-timeline-week'\n };\n break;\n case 'timelineworkweek':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-timeline-workweek',\n text: displayName || this.l10n.getConstant('timelineWorkWeek'), cssClass: 'e-views e-timeline-work-week'\n };\n break;\n case 'timelinemonth':\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-timeline-month',\n text: displayName || this.l10n.getConstant('timelineMonth'), cssClass: 'e-views e-timeline-month'\n };\n break;\n case 'timelineyear':\n orientationClass = (item.orientation === 'Vertical') ? 'vertical' : 'horizontal';\n view = {\n align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-timeline-year-' + orientationClass,\n text: displayName || this.l10n.getConstant('timelineYear'), cssClass: 'e-views e-timeline-year'\n };\n break;\n }\n return view;\n };\n HeaderRenderer.prototype.renderHeaderPopup = function () {\n var headerPopupEle = createElement('div', { className: cls.HEADER_POPUP_CLASS });\n var headerCalendarEle = createElement('div', { className: cls.HEADER_CALENDAR_CLASS });\n headerPopupEle.appendChild(headerCalendarEle);\n this.element.appendChild(headerPopupEle);\n this.headerPopup = new Popup(headerPopupEle, {\n actionOnScroll: 'hide',\n targetType: 'relative',\n relateTo: this.getPopUpRelativeElement(),\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl\n });\n var calendarView = this.getCalendarView();\n var isDisplayDate = this.parent.currentView === 'Month' &&\n !isNullOrUndefined(this.parent.activeViewOptions.displayDate) && !this.hasSelectedDate();\n this.headerCalendar = new Calendar({\n value: isDisplayDate ? this.parent.activeViewOptions.displayDate : this.parent.selectedDate,\n min: this.parent.minDate,\n max: this.parent.maxDate,\n firstDayOfWeek: this.parent.activeViewOptions.firstDayOfWeek,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n depth: calendarView,\n start: calendarView,\n calendarMode: this.parent.calendarMode,\n change: this.calendarChange.bind(this)\n });\n this.setCalendarTimezone();\n this.headerCalendar.appendTo(headerCalendarEle);\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.calendarChange = function (args) {\n if (args.value.getTime() !== this.parent.selectedDate.getTime()) {\n var calendarDate = util.resetTime(new Date(args.value));\n this.parent.changeDate(calendarDate);\n }\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.setCalendarTimezone = function () {\n if (this.headerCalendar) {\n this.headerCalendar.timezone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();\n }\n };\n HeaderRenderer.prototype.calculateViewIndex = function (args) {\n var target = closest(args.originalEvent.target, '.e-views');\n var views = [].slice.call(this.element.querySelectorAll('.e-views'));\n return views.indexOf(target);\n };\n HeaderRenderer.prototype.toolbarClickHandler = function (args) {\n if (!args.item) {\n return;\n }\n var strClass = args.item.cssClass.replace('e-views ', '');\n var data;\n var isSameTime;\n var currentTime;\n switch (strClass) {\n case 'e-date-range':\n if (!this.headerPopup) {\n this.renderHeaderPopup();\n }\n if (this.headerPopup.element.classList.contains(cls.POPUP_OPEN)) {\n this.headerPopup.hide();\n }\n else {\n this.headerPopup.show();\n }\n break;\n case 'e-day':\n this.parent.changeView('Day', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-week':\n this.parent.changeView('Week', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-work-week':\n this.parent.changeView('WorkWeek', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-month':\n this.parent.changeView('Month', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-year':\n this.parent.changeView('Year', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-agenda':\n this.parent.changeView('Agenda', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-month-agenda':\n this.parent.changeView('MonthAgenda', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-day':\n this.parent.changeView('TimelineDay', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-week':\n this.parent.changeView('TimelineWeek', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-work-week':\n this.parent.changeView('TimelineWorkWeek', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-month':\n this.parent.changeView('TimelineMonth', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-year':\n this.parent.changeView('TimelineYear', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-today':\n currentTime = util.resetTime(this.parent.getCurrentTime());\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda' || !this.parent.isSelectedDate(currentTime) ||\n this.parent.currentView === 'Month' && this.parent.activeViewOptions.displayDate && !this.hasSelectedDate() &&\n util.resetTime(this.parent.activeViewOptions.displayDate) !== currentTime || this.parent.currentView === 'Month' &&\n this.parent.activeViewOptions.numberOfWeeks > 0 && !this.hasSelectedDate()\n && util.resetTime(util.firstDateOfMonth(this.parent.selectedDate)) !== currentTime) {\n this.parent.changeDate(currentTime, args.originalEvent);\n }\n break;\n case 'e-prev':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), args.originalEvent);\n break;\n case 'e-next':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), args.originalEvent);\n break;\n case 'e-add':\n isSameTime = this.parent.activeCellsData.startTime.getTime() === this.parent.activeCellsData.endTime.getTime();\n if (this.parent.activeCellsData && !isSameTime) {\n data = this.parent.activeCellsData;\n }\n else {\n var interval = this.parent.activeViewOptions.timeScale.interval;\n var slotCount = this.parent.activeViewOptions.timeScale.slotCount;\n var msInterval = (interval * util.MS_PER_MINUTE) / slotCount;\n var startTime = new Date(this.parent.selectedDate.getTime());\n var currentTime_1 = this.parent.getCurrentTime();\n startTime.setHours(currentTime_1.getHours(), (Math.round(startTime.getMinutes() / msInterval) * msInterval), 0);\n var endTime = new Date(new Date(startTime.getTime()).setMilliseconds(startTime.getMilliseconds() + msInterval));\n data = { startTime: startTime, endTime: endTime, isAllDay: false };\n }\n this.parent.eventWindow.openEditor(extend(data, { cancel: false, event: args.originalEvent }), 'Add');\n break;\n }\n if (isNullOrUndefined(this.toolbarObj)) {\n return;\n }\n var toolbarPopUp = this.toolbarObj.element.querySelector('.e-toolbar-pop');\n if (toolbarPopUp && args.item.type !== 'Input') {\n toolbarPopUp.ej2_instances[0].hide({ name: 'SlideUp', duration: 100 });\n }\n };\n HeaderRenderer.prototype.hasSelectedDate = function () {\n var selectedTime = util.resetTime(this.parent.selectedDate).getTime();\n return selectedTime >= this.parent.activeView.getStartDate().getTime() &&\n selectedTime <= this.parent.activeView.getEndDate().getTime();\n };\n HeaderRenderer.prototype.getHeaderElement = function () {\n return this.toolbarObj.element;\n };\n HeaderRenderer.prototype.updateHeaderItems = function (classType) {\n var prevNavEle = this.toolbarObj.element.querySelector('.e-prev');\n var nextNavEle = this.toolbarObj.element.querySelector('.e-next');\n var dateRangeEle = this.toolbarObj.element.querySelector('.e-date-range');\n if (prevNavEle) {\n if (classType === 'add') {\n addClass([prevNavEle], cls.HIDDEN_CLASS);\n }\n else {\n removeClass([prevNavEle], cls.HIDDEN_CLASS);\n }\n }\n if (nextNavEle) {\n if (classType === 'add') {\n addClass([nextNavEle], cls.HIDDEN_CLASS);\n }\n else {\n removeClass([nextNavEle], cls.HIDDEN_CLASS);\n }\n }\n if (dateRangeEle) {\n if (classType === 'add') {\n addClass([dateRangeEle], cls.TEXT_ELLIPSIS);\n }\n else {\n removeClass([dateRangeEle], cls.TEXT_ELLIPSIS);\n }\n }\n };\n HeaderRenderer.prototype.previousNextIconHandler = function () {\n var dates = (this.parent.currentView === 'Agenda' ?\n [this.parent.getCurrentViewDates()[0]] : this.parent.getCurrentViewDates());\n var prevNavEle = this.toolbarObj.element.querySelector('.' + cls.PREVIOUS_DATE_CLASS);\n var nextNavEle = this.toolbarObj.element.querySelector('.' + cls.NEXT_DATE_CLASS);\n var firstDate = new Date(dates[0].getTime());\n var lastDate = new Date(dates[dates.length - 1].getTime());\n if (this.parent.currentView === 'WorkWeek' || this.parent.currentView === 'TimelineWorkWeek') {\n firstDate = util.getWeekFirstDate(util.resetTime(this.parent.selectedDate), this.parent.firstDayOfWeek);\n lastDate = util.addDays(firstDate, 7 * this.parent.activeViewOptions.interval);\n }\n else if (this.parent.currentView === 'Month') {\n var isCustomMonth = !isNullOrUndefined(this.parent.activeViewOptions.displayDate) ||\n this.parent.activeViewOptions.numberOfWeeks > 0;\n firstDate = isCustomMonth ? this.parent.activeView.getStartDate() : util.firstDateOfMonth(this.parent.selectedDate);\n lastDate = isCustomMonth ? this.parent.activeView.getEndDate() :\n util.lastDateOfMonth(util.addMonths(firstDate, this.parent.activeViewOptions.interval - 1));\n }\n if (!isNullOrUndefined(prevNavEle)) {\n this.toolbarObj.enableItems(prevNavEle, firstDate > util.resetTime(this.parent.minDate));\n }\n if (!isNullOrUndefined(nextNavEle)) {\n this.toolbarObj.enableItems(nextNavEle, lastDate < util.resetTime(this.parent.maxDate));\n }\n this.setCalendarMinMaxDate();\n };\n HeaderRenderer.prototype.getModuleName = function () {\n return 'headerbar';\n };\n HeaderRenderer.prototype.destroy = function () {\n if (this.headerPopup && !this.headerPopup.isDestroyed) {\n this.headerPopup.destroy();\n this.headerPopup = null;\n }\n if (this.headerCalendar && !this.headerCalendar.isDestroyed) {\n this.headerCalendar.destroy();\n this.headerCalendar = null;\n }\n if (this.toolbarObj && !this.toolbarObj.isDestroyed) {\n this.toolbarObj.destroy();\n this.removeEventListener();\n remove(this.element);\n this.toolbarObj = null;\n }\n this.element = null;\n this.parent = null;\n this.l10n = null;\n };\n return HeaderRenderer;\n}());\nexport { HeaderRenderer };\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","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","/* 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 var selectedCells = this.parent.getSelectedCells();\n if (this.parent.activeViewOptions.group.resources.length > 0 && selectedCells.length > 0 &&\n selectedCells[0].getAttribute('data-group-index') !== target.getAttribute('data-group-index')) {\n target = selectedCells[selectedCells.length - 1];\n }\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 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 e.preventDefault();\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 e.preventDefault();\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","/* 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 */\nimport { addClass, createElement, closest, remove, removeClass, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { VerticalEvent } from '../event-renderer/vertical-view';\nimport { MonthEvent } from '../event-renderer/month';\nimport { TimelineEvent } from '../event-renderer/timeline-view';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\n/**\n * Inline Edit interactions\n */\nvar InlineEdit = /** @class */ (function () {\n function InlineEdit(parent) {\n this.parent = parent;\n this.parent.on(events.inlineClick, this.inlineEdit, this);\n }\n InlineEdit.prototype.inlineEdit = function (args) {\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide();\n }\n if (args.type === 'Cell') {\n var moreWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (moreWrapper && moreWrapper.classList.contains(cls.POPUP_OPEN)) {\n this.parent.quickPopup.morePopup.hide();\n }\n this.removeInlineAppointmentElement();\n this.cellEdit(args);\n }\n else {\n if (this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS) !==\n args.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS)) {\n this.removeInlineAppointmentElement();\n }\n this.eventEdit(args);\n }\n };\n InlineEdit.prototype.cellEdit = function (args) {\n var saveObj = this.generateEventData();\n var cellIndex = args.element.cellIndex;\n var count = this.getEventDaysCount(saveObj);\n if (count > 1) {\n count = Math.round(count);\n count--;\n cellIndex = cellIndex - count;\n }\n var start = util.resetTime(new Date('' + saveObj[this.parent.eventFields.startTime])).getTime();\n var end = util.resetTime(new Date('' + saveObj[this.parent.eventFields.endTime])).getTime();\n var resIndex = args.groupIndex || 0;\n var isVertical = this.parent.currentView === 'Day' || this.parent.currentView === 'Week' || this.parent.currentView === 'WorkWeek';\n if (this.parent.activeViewOptions.timeScale.enable && isVertical) {\n var dayIndex = saveObj[this.parent.eventFields.startTime].getDay();\n this.createVerticalViewInline(saveObj, dayIndex, resIndex, cellIndex);\n }\n else if (this.parent.currentView === 'Month' || (!this.parent.activeViewOptions.timeScale.enable && isVertical)) {\n this.createMonthViewInline(saveObj, resIndex, start, end);\n }\n else {\n this.createTimelineViewInline(saveObj, start, end, resIndex);\n }\n var inlineSubject = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n if (inlineSubject) {\n inlineSubject.focus();\n }\n };\n InlineEdit.prototype.eventEdit = function (args) {\n var inlineSubject = args.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n var subject;\n if (inlineSubject) {\n subject = inlineSubject.value;\n }\n else {\n var subEle = args.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (!isNullOrUndefined(subEle)) {\n addClass([subEle], cls.DISABLE_CLASS);\n subject = subEle.innerText;\n }\n else {\n subject = args.data[this.parent.eventFields.subject];\n }\n inlineSubject = createElement('input', { className: cls.INLINE_SUBJECT_CLASS, attrs: { value: subject } });\n if (closest(args.element, '.' + cls.MORE_POPUP_WRAPPER_CLASS)) {\n args.element.insertBefore(inlineSubject, subEle);\n }\n else if (['Agenda', 'MonthAgenda'].indexOf(this.parent.currentView) > -1) {\n var subjectWrap = args.element.querySelector('.' + cls.SUBJECT_WRAP);\n if (isNullOrUndefined(subjectWrap)) {\n subjectWrap = createElement('div', { className: cls.SUBJECT_WRAP });\n args.element.prepend(subjectWrap);\n }\n subjectWrap.insertBefore(inlineSubject, subjectWrap.firstChild);\n }\n else {\n args.element.querySelector('.e-appointment-details').prepend(inlineSubject);\n }\n inlineSubject.focus();\n }\n inlineSubject.setSelectionRange(subject.length, subject.length);\n };\n InlineEdit.prototype.createVerticalViewInline = function (saveObj, dayIndex, resIndex, daysCount) {\n var _a;\n var count = this.getEventDaysCount(saveObj);\n var verticalEvent = new VerticalEvent(this.parent);\n verticalEvent.initializeValues();\n var index = verticalEvent.dateRender[parseInt(resIndex.toString(), 10)].map(function (date) { return date.getDay(); }).indexOf(dayIndex);\n if (count >= 1) {\n verticalEvent.allDayElement = [].slice.call(this.parent.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS));\n (_a = verticalEvent.slots).push.apply(_a, this.parent.activeView.renderDates.map(function (date) { return +date; }));\n var allDayElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.ALLDAY_APPOINTMENT_CLASS));\n var allDayLevel = 0;\n if (allDayElements.length > 0) {\n allDayLevel = Math.floor(this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).getBoundingClientRect().height /\n allDayElements[0].offsetHeight) - 1;\n }\n verticalEvent.allDayLevel = allDayLevel;\n var appHeight = util.getElementHeightFromClass(this.parent.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS), cls.APPOINTMENT_CLASS);\n var cellTop = verticalEvent.allDayElement.length > 0 ? verticalEvent.allDayElement[0].offsetTop : 0;\n verticalEvent.renderAllDayEvents(saveObj, index, resIndex, daysCount, this.parent.allowInline, cellTop, appHeight);\n }\n else {\n verticalEvent.renderNormalEvents(saveObj, index, resIndex, daysCount, this.parent.allowInline);\n }\n };\n InlineEdit.prototype.createMonthViewInline = function (saveObj, index, start, end) {\n var count = this.getEventDaysCount(saveObj);\n var saveObject = this.parent.eventBase.cloneEventObject(saveObj, start, end, count, false, false);\n var monthEvent = new MonthEvent(this.parent);\n monthEvent.dateRender = this.parent.activeView.renderDates;\n monthEvent.inlineValue = this.parent.allowInline;\n var renderDates = this.parent.activeView.renderDates;\n var workDays = this.parent.activeViewOptions.workDays;\n var monthCellSelector = '.' + cls.WORK_CELLS_CLASS;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n monthCellSelector += '[data-group-index=\"' + index + '\"]';\n var resourceData = this.parent.resourceBase.lastResourceLevel[parseInt(index.toString(), 10)];\n renderDates = resourceData.renderDates;\n workDays = resourceData.workDays;\n }\n monthEvent.dateRender = renderDates;\n monthEvent.workCells = [].slice.call(this.parent.element.querySelectorAll(monthCellSelector));\n monthEvent.cellWidth = monthEvent.workCells[0].offsetWidth;\n monthEvent.cellHeight = monthEvent.workCells[0].offsetHeight;\n monthEvent.eventHeight =\n util.getElementHeightFromClass(this.parent.monthModule.element || monthEvent.element, cls.APPOINTMENT_CLASS);\n monthEvent.getSlotDates(workDays);\n var filteredDates = monthEvent.getRenderedDates(renderDates);\n var spannedEvents = monthEvent.splitEvent(saveObject, filteredDates || renderDates);\n for (var _i = 0, spannedEvents_1 = spannedEvents; _i < spannedEvents_1.length; _i++) {\n var eventData = spannedEvents_1[_i];\n monthEvent.renderEvents(eventData, index);\n }\n var inlineSubject = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n inlineSubject.focus();\n };\n InlineEdit.prototype.createTimelineViewInline = function (saveObj, start, end, resIndex) {\n var count = this.getEventDaysCount(saveObj);\n var saveObject = this.parent.eventBase.cloneEventObject(saveObj, start, end, count, false, false);\n var timelineView = new TimelineEvent(this.parent, this.parent.activeViewOptions.timeScale.enable ? 'hour' : 'day');\n timelineView.dateRender = this.parent.activeView.renderDates;\n timelineView.eventContainers = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));\n var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);\n timelineView.inlineValue = this.parent.allowInline;\n timelineView.cellWidth = workCell.offsetWidth;\n timelineView.cellHeight = workCell.offsetHeight;\n var dayLength = this.parent.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr').length === 0 ?\n 0 : this.parent.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr')[0].children.length;\n timelineView.slotsPerDay = dayLength / timelineView.dateRender.length;\n timelineView.eventHeight = util.getElementHeightFromClass(timelineView.element, cls.APPOINTMENT_CLASS);\n timelineView.renderEvents(saveObject, resIndex);\n };\n InlineEdit.prototype.getEventDaysCount = function (saveObj) {\n var startDate = saveObj[this.parent.eventFields.startTime];\n var endDate = saveObj[this.parent.eventFields.endTime];\n var daysCount = Math.abs(endDate.getTime() - startDate.getTime()) / util.MS_PER_DAY;\n return daysCount;\n };\n InlineEdit.prototype.generateEventData = function (target) {\n var inlineElement = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n var subject = inlineElement ? inlineElement.value : target ? target.innerHTML : '';\n var saveObj = {};\n saveObj[this.parent.eventFields.id] = this.parent.eventBase.getEventMaxID();\n saveObj[this.parent.eventFields.subject] = subject;\n saveObj[this.parent.eventFields.startTime] = this.parent.activeCellsData.startTime;\n saveObj[this.parent.eventFields.endTime] = this.parent.activeCellsData.endTime;\n saveObj[this.parent.eventFields.isAllDay] = this.parent.activeCellsData.isAllDay;\n this.parent.eventWindow.setDefaultValueToObject(saveObj);\n if (this.parent.resourceBase) {\n this.parent.resourceBase.setResourceValues(saveObj, this.parent.activeCellsData.groupIndex);\n }\n return saveObj;\n };\n InlineEdit.prototype.documentClick = function () {\n var target = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n if (target && target.value !== '') {\n this.inlineCrudActions(target);\n }\n else {\n this.removeInlineAppointmentElement();\n }\n };\n InlineEdit.prototype.inlineCrudActions = function (target) {\n if (closest(target, '.' + cls.INLINE_APPOINTMENT_CLASS)) {\n var saveObj = this.generateEventData(target);\n this.parent.addEvent(saveObj);\n }\n else {\n var eventTarget = closest(target, '.' + cls.APPOINTMENT_CLASS);\n var eventDetails = this.parent.getEventDetails(eventTarget);\n eventDetails[this.parent.eventFields.subject] = target.value;\n var currentAction = void 0;\n if (eventDetails[this.parent.eventFields.id] === eventDetails[this.parent.eventFields.recurrenceID]) {\n currentAction = 'EditOccurrence';\n eventDetails[this.parent.eventFields.id] = this.parent.eventBase.getEventMaxID();\n }\n this.parent.saveEvent(eventDetails, currentAction);\n }\n this.removeInlineAppointmentElement();\n };\n InlineEdit.prototype.createInlineAppointmentElement = function (inlineData) {\n var inlineAppointmentElement = createElement('div', {\n className: cls.APPOINTMENT_CLASS + ' ' + cls.INLINE_APPOINTMENT_CLASS\n });\n var inlineDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n inlineAppointmentElement.appendChild(inlineDetails);\n var inline = createElement('input', { className: cls.INLINE_SUBJECT_CLASS });\n inlineDetails.appendChild(inline);\n if (inlineData) {\n this.parent.eventBase.applyResourceColor(inlineAppointmentElement, inlineData, 'backgroundColor');\n }\n return inlineAppointmentElement;\n };\n InlineEdit.prototype.removeInlineAppointmentElement = function () {\n var inlineAppointment = [].slice.call(this.parent.element.querySelectorAll('.' + cls.INLINE_APPOINTMENT_CLASS));\n if (inlineAppointment.length > 0) {\n inlineAppointment.forEach(function (node) { return remove(node); });\n }\n var inlineSubject = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n if (inlineSubject) {\n var appointmentSubject = closest(inlineSubject, '.' + cls.APPOINTMENT_CLASS);\n var subject = appointmentSubject.querySelector('.' + cls.SUBJECT_CLASS);\n if (!isNullOrUndefined(subject)) {\n removeClass([subject], cls.DISABLE_CLASS);\n }\n remove(inlineSubject);\n }\n };\n InlineEdit.prototype.destroy = function () {\n this.parent.off(events.inlineClick, this.inlineEdit);\n };\n return InlineEdit;\n}());\nexport { InlineEdit };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createElement, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport * as cls from '../base/css-constant';\n/**\n * Appointment window field validation\n */\nvar FieldValidator = /** @class */ (function () {\n function FieldValidator() {\n }\n FieldValidator.prototype.renderFormValidator = function (form, rules, element, locale) {\n var _this = this;\n this.element = element;\n this.formObj = new FormValidator(form, {\n locale: locale,\n customPlacement: function (inputElement, error) {\n _this.errorPlacement(inputElement, error);\n },\n rules: rules,\n validationComplete: function (args) {\n _this.validationComplete(args);\n },\n focusout: function (args) {\n _this.focusOut(args);\n }\n });\n };\n FieldValidator.prototype.focusOut = function (args) {\n var target = args.relatedTarget;\n if (target && (target.classList.contains('e-dlg-closeicon-btn') || target.classList.contains('e-close')\n || target.classList.contains(cls.ALLDAY_CELLS_CLASS) || target.classList.contains(cls.HEADER_CELLS_CLASS)\n || target.classList.contains(cls.QUICK_POPUP_EVENT_DETAILS_CLASS) || target.classList.contains(cls.WORK_CELLS_CLASS)\n || target.classList.contains(cls.EVENT_WINDOW_CANCEL_BUTTON_CLASS))) {\n this.ignoreError = true;\n }\n else {\n this.ignoreError = false;\n }\n };\n FieldValidator.prototype.validationComplete = function (args) {\n var elem = this.element.querySelector('#' + args.inputName + '_Error');\n if (elem) {\n elem.style.display = (args.status === 'failure') ? '' : 'none';\n }\n };\n FieldValidator.prototype.errorPlacement = function (inputElement, error) {\n var id = error.getAttribute('for');\n var elem = this.element.querySelector('#' + id + '_Error');\n if (!elem && !this.ignoreError) {\n this.createTooltip(inputElement, error, id, '');\n }\n if (!isNullOrUndefined(elem)) {\n elem.querySelector('.e-error').innerHTML = error.innerHTML;\n }\n };\n FieldValidator.prototype.createTooltip = function (element, error, name, display) {\n var dlgContent;\n var client;\n var inputClient = element.getBoundingClientRect();\n if (this.element.classList.contains(cls.POPUP_WRAPPER_CLASS)) {\n dlgContent = this.element;\n client = this.element.getBoundingClientRect();\n }\n else {\n dlgContent = this.element.querySelector('.e-schedule-dialog .e-dlg-content');\n client = dlgContent.getBoundingClientRect();\n }\n var div = createElement('div', {\n className: 'e-tooltip-wrap e-popup ' + cls.ERROR_VALIDATION_CLASS,\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n (inputClient.bottom - client.top + dlgContent.scrollTop + 9) + 'px;left:' +\n (inputClient.left - client.left + dlgContent.scrollLeft + inputClient.width / 2) + 'px;'\n });\n var content = createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow = createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n div.appendChild(content);\n div.appendChild(arrow);\n dlgContent.appendChild(div);\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n };\n FieldValidator.prototype.destroyToolTip = function () {\n if (this.element) {\n var elements = [].slice.call(this.element.querySelectorAll('.' + cls.ERROR_VALIDATION_CLASS));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n }\n if (this.formObj && this.formObj.element) {\n this.formObj.reset();\n }\n };\n FieldValidator.prototype.destroy = function () {\n if (this.formObj && this.formObj.element && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n this.formObj = null;\n this.element = null;\n };\n return FieldValidator;\n}());\nexport { FieldValidator };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { closest, EventHandler, isNullOrUndefined, formatUnit, append } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, createElement, remove, extend } from '@syncfusion/ej2-base';\nimport { Dialog, Popup, isCollide } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { FieldValidator } from './form-validator';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\nvar EVENT_FIELD = 'e-field';\n/**\n * Quick Popups interactions\n */\nvar QuickPopups = /** @class */ (function () {\n function QuickPopups(parent) {\n this.isMultipleEventSelect = false;\n this.isCrudAction = false;\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.fieldValidator = new FieldValidator();\n this.render();\n this.addEventListener();\n }\n QuickPopups.prototype.render = function () {\n this.renderQuickPopup();\n this.renderMorePopup();\n this.renderQuickDialog();\n };\n QuickPopups.prototype.renderQuickPopup = function () {\n var quickPopupWrapper = createElement('div', { className: cls.POPUP_WRAPPER_CLASS + ' e-popup-close', attrs: { role: 'dialog' } });\n if (this.parent.isAdaptive) {\n document.body.appendChild(quickPopupWrapper);\n addClass([quickPopupWrapper], cls.DEVICE_CLASS);\n }\n else {\n this.parent.element.appendChild(quickPopupWrapper);\n }\n this.quickPopup = new Popup(quickPopupWrapper, {\n targetType: (this.parent.isAdaptive ? 'container' : 'relative'),\n enableRtl: this.parent.enableRtl,\n open: this.quickPopupOpen.bind(this),\n close: this.quickPopupClose.bind(this),\n hideAnimation: (this.parent.isAdaptive ? { name: 'ZoomOut' } : { name: 'FadeOut', duration: 150 }),\n showAnimation: (this.parent.isAdaptive ? { name: 'ZoomIn' } : { name: 'FadeIn', duration: 150 }),\n collision: (this.parent.isAdaptive ? { X: 'fit', Y: 'fit' } :\n (this.parent.enableRtl ? { X: 'flip', Y: 'fit' } : { X: 'none', Y: 'fit' })),\n position: (this.parent.isAdaptive || this.parent.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }),\n viewPortElement: (this.parent.isAdaptive ? document.body : this.parent.element),\n zIndex: (this.parent.isAdaptive ? 1004 : 3)\n });\n };\n QuickPopups.prototype.renderMorePopup = function () {\n var moreEventPopup = \"
\" +\n (\"
\") +\n (\"
\") +\n (\"
\");\n var moreEventWrapper = createElement('div', {\n className: cls.MORE_POPUP_WRAPPER_CLASS + ' e-popup-close',\n innerHTML: moreEventPopup\n });\n if (this.parent.isAdaptive) {\n document.body.appendChild(moreEventWrapper);\n addClass([moreEventWrapper], cls.DEVICE_CLASS);\n }\n else {\n this.parent.element.appendChild(moreEventWrapper);\n }\n this.morePopup = new Popup(moreEventWrapper, {\n targetType: (this.parent.isAdaptive ? 'container' : 'relative'),\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'ZoomOut', duration: 300 },\n showAnimation: { name: 'ZoomIn', duration: 300 },\n open: this.morePopupOpen.bind(this),\n close: this.morePopupClose.bind(this),\n collision: (this.parent.isAdaptive ? { X: 'fit', Y: 'fit' } :\n (this.parent.enableRtl ? { X: 'flip', Y: 'fit' } : { X: 'flip', Y: 'flip' })),\n viewPortElement: (this.parent.isAdaptive ? document.body : this.parent.element),\n zIndex: (this.parent.isAdaptive ? 1002 : 2)\n });\n var closeButton = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS);\n this.renderButton('e-round', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeButton, this.closeClick);\n EventHandler.add(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS), 'click', this.navigationClick, this);\n };\n QuickPopups.prototype.renderQuickDialog = function () {\n var buttonModel = [\n { buttonModel: { cssClass: 'e-quick-alertok e-flat', isPrimary: true }, click: this.dialogButtonClick.bind(this) },\n { buttonModel: { cssClass: 'e-quick-alertcancel e-flat', isPrimary: false }, click: this.dialogButtonClick.bind(this) },\n {\n buttonModel: { cssClass: 'e-quick-dialog-cancel e-disable e-flat', isPrimary: false },\n click: this.dialogButtonClick.bind(this)\n }\n ];\n if (this.parent.eventSettings.editFollowingEvents) {\n var followingSeriesButton = {\n buttonModel: { cssClass: 'e-quick-alertfollowing e-flat', isPrimary: false }, click: this.dialogButtonClick.bind(this)\n };\n buttonModel.splice(1, 0, followingSeriesButton);\n }\n this.quickDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n buttons: buttonModel,\n cssClass: cls.QUICK_DIALOG_CLASS,\n closeOnEscape: true,\n enableRtl: this.parent.enableRtl,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeClose: this.beforeQuickDialogClose.bind(this),\n isModal: true,\n position: { X: 'center', Y: 'center' },\n showCloseIcon: true,\n target: document.body,\n visible: false,\n width: 'auto'\n });\n var dialogElement = createElement('div', { id: this.parent.element.id + 'QuickDialog' });\n this.parent.element.appendChild(dialogElement);\n this.quickDialog.appendTo(dialogElement);\n var okButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_OK);\n if (okButton) {\n okButton.setAttribute('aria-label', this.l10n.getConstant('occurrence'));\n okButton.setAttribute('aria-label', okButton.innerHTML);\n }\n var cancelButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_CANCEL);\n if (cancelButton) {\n cancelButton.setAttribute('aria-label', this.l10n.getConstant('series'));\n cancelButton.setAttribute('aria-label', cancelButton.innerHTML);\n }\n if (this.quickDialog.element.querySelector('.e-dlg-closeicon-btn')) {\n this.quickDialog.element.querySelector('.e-dlg-closeicon-btn').setAttribute('title', this.l10n.getConstant('close'));\n }\n };\n // eslint-disable-next-line max-len\n QuickPopups.prototype.renderButton = function (className, iconName, isDisabled, element, clickEvent) {\n var buttonObj = new Button({\n cssClass: className,\n disabled: isDisabled,\n enableRtl: this.parent.enableRtl,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n iconCss: iconName\n });\n buttonObj.appendTo(element);\n EventHandler.add(element, 'click', clickEvent, this);\n removeClass([element], cls.ICON);\n };\n QuickPopups.prototype.quickDialogClass = function (action) {\n var classList = [\n cls.QUICK_DIALOG_OCCURRENCE_CLASS, cls.QUICK_DIALOG_SERIES_CLASS, cls.QUICK_DIALOG_DELETE_CLASS,\n cls.QUICK_DIALOG_CANCEL_CLASS, cls.QUICK_DIALOG_ALERT_BTN_CLASS, cls.DISABLE_CLASS\n ];\n var okButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_OK);\n var cancelButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_CANCEL);\n var followingEventButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_FOLLOWING);\n removeClass([okButton, cancelButton], classList);\n addClass([this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_CANCEL_CLASS)], cls.DISABLE_CLASS);\n if (this.parent.eventSettings.editFollowingEvents) {\n addClass([followingEventButton], cls.DISABLE_CLASS);\n removeClass([this.quickDialog.element], cls.FOLLOWING_EVENTS_DIALOG);\n }\n switch (action) {\n case 'Recurrence':\n addClass([okButton], cls.QUICK_DIALOG_OCCURRENCE_CLASS);\n addClass([cancelButton], cls.QUICK_DIALOG_SERIES_CLASS);\n if (this.parent.eventSettings.editFollowingEvents) {\n removeClass([followingEventButton], cls.DISABLE_CLASS);\n addClass([this.quickDialog.element], cls.FOLLOWING_EVENTS_DIALOG);\n addClass([followingEventButton], cls.QUICK_DIALOG_FOLLOWING_EVENTS_CLASS);\n }\n break;\n case 'Delete':\n addClass([okButton], cls.QUICK_DIALOG_DELETE_CLASS);\n addClass([cancelButton], cls.QUICK_DIALOG_CANCEL_CLASS);\n break;\n case 'Alert':\n addClass([okButton], [cls.QUICK_DIALOG_ALERT_OK, cls.QUICK_DIALOG_ALERT_BTN_CLASS]);\n addClass([cancelButton], [cls.QUICK_DIALOG_ALERT_CANCEL, cls.DISABLE_CLASS]);\n break;\n }\n };\n QuickPopups.prototype.applyFormValidation = function () {\n var form = this.quickPopup.element.querySelector('.' + cls.FORM_CLASS);\n var rules = {};\n rules[this.parent.eventSettings.fields.subject.name] = this.parent.eventSettings.fields.subject.validation;\n this.fieldValidator.renderFormValidator(form, rules, this.quickPopup.element, this.parent.locale);\n };\n QuickPopups.prototype.openRecurrenceAlert = function () {\n var editDeleteOnly = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_OK);\n if (editDeleteOnly) {\n editDeleteOnly.innerHTML = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteEvent' : 'editEvent');\n editDeleteOnly.setAttribute('aria-label', editDeleteOnly.innerHTML);\n }\n var editFollowingEventsOnly = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_FOLLOWING);\n if (editFollowingEventsOnly) {\n editFollowingEventsOnly.innerHTML = this.l10n.getConstant('editFollowingEvent');\n editFollowingEventsOnly.setAttribute('aria-label', editFollowingEventsOnly.innerHTML);\n }\n var editDeleteSeries = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_CANCEL);\n if (editDeleteSeries) {\n editDeleteSeries.innerHTML = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteSeries' : 'editSeries');\n editDeleteSeries.setAttribute('aria-label', editDeleteSeries.innerHTML);\n }\n this.quickDialog.content = this.l10n.getConstant('editContent');\n this.quickDialog.header = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteTitle' : 'editTitle');\n this.quickDialogClass('Recurrence');\n this.showQuickDialog('RecurrenceAlert');\n };\n QuickPopups.prototype.openRecurrenceValidationAlert = function (type) {\n this.quickDialogClass('Alert');\n var okButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_OK);\n okButton.innerHTML = this.l10n.getConstant('ok');\n okButton.setAttribute('aria-label', okButton.innerHTML);\n var cancelButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_CANCEL);\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n cancelButton.setAttribute('aria-label', cancelButton.innerHTML);\n this.quickDialog.header = this.l10n.getConstant('alert');\n var dialogCancel;\n switch (type) {\n case 'wrongPattern':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('wrongPattern');\n break;\n case 'createError':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('createError');\n break;\n case 'sameDayAlert':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('sameDayAlert');\n break;\n case 'seriesChangeAlert':\n dialogCancel = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_CANCEL_CLASS);\n removeClass([cancelButton, dialogCancel], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('seriesChangeAlert');\n okButton.innerHTML = this.l10n.getConstant('yes');\n cancelButton.innerHTML = this.l10n.getConstant('no');\n dialogCancel.innerHTML = this.l10n.getConstant('cancel');\n break;\n case 'occurrenceAlert':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('occurenceAlert');\n break;\n }\n if ((!this.parent.enableRecurrenceValidation && type === 'wrongPattern') || this.parent.enableRecurrenceValidation) {\n this.showQuickDialog('RecurrenceValidationAlert');\n }\n };\n QuickPopups.prototype.openDeleteAlert = function () {\n if (this.parent.activeViewOptions.readonly) {\n return;\n }\n var okButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_OK);\n if (okButton) {\n okButton.innerHTML = this.l10n.getConstant('delete');\n okButton.setAttribute('aria-label', okButton.innerHTML);\n }\n var cancelButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_CANCEL);\n if (cancelButton) {\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n cancelButton.setAttribute('aria-label', cancelButton.innerHTML);\n }\n this.quickDialog.content = (this.parent.activeEventData.event.length > 1) ?\n this.l10n.getConstant('deleteMultipleContent') : this.l10n.getConstant('deleteContent');\n this.quickDialog.header = (this.parent.activeEventData.event.length > 1) ?\n this.l10n.getConstant('deleteMultipleEvent') : this.l10n.getConstant('deleteEvent');\n this.quickDialogClass('Delete');\n this.showQuickDialog('DeleteAlert');\n };\n QuickPopups.prototype.openValidationError = function (type, eventData) {\n this.quickDialog.header = this.l10n.getConstant('alert');\n this.quickDialog.content = this.l10n.getConstant(type);\n var okButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_OK);\n if (okButton) {\n okButton.innerHTML = this.l10n.getConstant('ok');\n okButton.setAttribute('aria-label', okButton.innerHTML);\n }\n var cancelButton = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_CANCEL);\n if (cancelButton) {\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n okButton.setAttribute('aria-label', cancelButton.innerHTML);\n }\n this.quickDialogClass('Alert');\n this.showQuickDialog('ValidationAlert', eventData);\n };\n QuickPopups.prototype.showQuickDialog = function (popupType, eventData) {\n var _this = this;\n this.quickDialog.dataBind();\n var eventProp = {\n type: popupType, cancel: false, element: this.quickDialog.element,\n data: extend({}, (eventData || this.parent.activeEventData.event), null, true)\n };\n this.parent.trigger(event.popupOpen, eventProp, function (popupArgs) {\n if (!popupArgs.cancel) {\n _this.quickDialog.show();\n }\n });\n };\n QuickPopups.prototype.createMoreEventList = function (eventCollection, groupOrder, groupIndex) {\n var _this = this;\n var fields = this.parent.eventFields;\n var moreEventContentEle = createElement('div', { className: cls.MORE_EVENT_CONTENT_CLASS });\n var moreEventWrapperEle = createElement('div', { className: cls.MORE_EVENT_WRAPPER_CLASS });\n if (eventCollection.length === 0) {\n moreEventWrapperEle = createElement('div', {\n className: cls.MORE_EVENT_CONTENT_CLASS,\n innerHTML: this.l10n.getConstant('emptyContainer')\n });\n }\n else {\n var _loop_1 = function (eventData) {\n var eventText = (eventData[fields.subject] || this_1.parent.eventSettings.fields.subject.default\n || this_1.parent.localeObj.getConstant('addTitle'));\n var appointmentElement = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-id': '' + eventData[fields.id],\n 'data-guid': eventData.Guid, 'role': 'button', 'tabindex': '0',\n 'aria-disabled': this_1.parent.eventBase.getReadonlyAttribute(eventData),\n 'aria-label': this_1.parent.getAnnouncementString(eventData)\n }\n });\n var templateElement = void 0;\n if (!isNullOrUndefined(this_1.parent.activeViewOptions.eventTemplate)) {\n var tempId = this_1.parent.element.id + '_' + this_1.parent.activeViewOptions.eventTemplateName + 'eventTemplate';\n templateElement = this_1.parent.getAppointmentTemplate()(eventData, this_1.parent, 'eventTemplate', tempId, false);\n append(templateElement, appointmentElement);\n }\n else {\n appointmentElement.appendChild(createElement('div', { className: cls.SUBJECT_CLASS }));\n this_1.parent.sanitize(eventText, appointmentElement.firstElementChild);\n }\n if (!isNullOrUndefined(groupIndex)) {\n appointmentElement.setAttribute('data-group-index', groupIndex);\n }\n if (!isNullOrUndefined(eventData[fields.recurrenceRule])) {\n var iconClass = (eventData[fields.id] === eventData[fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentElement.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n var args = {\n data: extend({}, eventData, null, true),\n element: appointmentElement, cancel: false\n };\n this_1.parent.trigger(event.eventRendered, args, function (eventArgs) {\n if (!eventArgs.cancel) {\n moreEventWrapperEle.appendChild(appointmentElement);\n var isPreventCrud = _this.parent.isAdaptive || _this.parent.currentView === 'Year';\n _this.parent.eventBase.wireAppointmentEvents(appointmentElement, eventData, isPreventCrud);\n _this.parent.eventBase.applyResourceColor(appointmentElement, eventData, 'backgroundColor', groupOrder);\n }\n });\n };\n var this_1 = this;\n for (var _i = 0, eventCollection_1 = eventCollection; _i < eventCollection_1.length; _i++) {\n var eventData = eventCollection_1[_i];\n _loop_1(eventData);\n }\n }\n moreEventContentEle.appendChild(moreEventWrapperEle);\n return moreEventContentEle;\n };\n QuickPopups.prototype.tapHoldEventPopup = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n this.isMultipleEventSelect = false;\n this.parent.selectedElements = [];\n this.isMultipleEventSelect = true;\n this.parent.eventBase.getSelectedEventElements(target);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n var guid = target.getAttribute('data-guid');\n var eventObj = this.parent.eventBase.getEventByGuid(guid);\n if (isNullOrUndefined(eventObj)) {\n return;\n }\n var eventTitle = (eventObj[this.parent.eventFields.subject] || this.l10n.getConstant('noTitle'));\n var eventTemplate = \"
\" +\n (\"\") +\n (\"
\" + eventTitle + \"
\") +\n (\"\") +\n (\"
\");\n this.quickPopup.element.innerHTML = eventTemplate;\n var closeIcon = this.quickPopup.element.querySelector('.' + cls.CLOSE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.closeClick);\n var readonly = this.parent.activeViewOptions.readonly || eventObj[this.parent.eventFields.isReadonly];\n var editAction = !this.parent.eventSettings.allowEditing || readonly;\n var deleteAction = !this.parent.eventSettings.allowDeleting || readonly;\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n if (editIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.EDIT_ICON_CLASS, editAction, editIcon, this.editClick);\n }\n var deleteIcon = this.quickPopup.element.querySelector('.' + cls.DELETE_CLASS);\n if (deleteIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.DELETE_ICON_CLASS, deleteAction, deleteIcon, this.deleteClick);\n }\n this.beforeQuickPopupOpen(target, this.parent.eventBase.getPageCoordinates(e));\n };\n QuickPopups.prototype.isCellBlocked = function (args) {\n var tempObj = {};\n tempObj[this.parent.eventFields.startTime] = this.parent.activeCellsData.startTime;\n tempObj[this.parent.eventFields.endTime] = this.parent.activeCellsData.endTime;\n tempObj[this.parent.eventFields.isAllDay] = this.parent.activeCellsData.isAllDay;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var targetCell = args.element instanceof Array ? args.element[0] : args.element;\n var groupIndex = parseInt(targetCell.getAttribute('data-group-index'), 10);\n this.parent.resourceBase.setResourceValues(tempObj, isNaN(groupIndex) ? null : groupIndex);\n }\n return this.parent.eventBase.isBlockRange(tempObj);\n };\n QuickPopups.prototype.cellClick = function (args) {\n var date = new Date(args.startTime.getTime());\n if (!this.parent.showQuickInfo || !this.parent.eventSettings.allowAdding ||\n this.parent.currentView === 'MonthAgenda' || this.isCellBlocked(args) ||\n !this.parent.isMinMaxDate(new Date(date.setHours(0, 0, 0, 0)))) {\n this.quickPopupHide();\n return;\n }\n var targetEle = !isNullOrUndefined(args.event) ? args.event.target : args.element;\n if (this.parent.isAdaptive) {\n this.quickPopupHide();\n var newEventClone = this.parent.element.querySelector('.' + cls.NEW_EVENT_CLASS);\n if (isNullOrUndefined(newEventClone)) {\n newEventClone = createElement('div', {\n className: cls.NEW_EVENT_CLASS,\n innerHTML: \"
+ \" + this.l10n.getConstant('newEvent') + \"
\"\n });\n }\n var targetCell = closest(targetEle, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS);\n if (targetCell) {\n targetCell.appendChild(newEventClone);\n }\n return;\n }\n var target = closest(targetEle, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' +\n cls.HEADER_CELLS_CLASS);\n if (isNullOrUndefined(target) || targetEle.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n return;\n }\n var isSameTarget = this.quickPopup.relateTo === target;\n if (isSameTarget && this.quickPopup.element.classList.contains(cls.POPUP_OPEN)) {\n var subjectElement_1 = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectElement_1) {\n subjectElement_1.focus();\n }\n return;\n }\n else if (this.quickPopup.element) {\n this.destroyPopupButtons('quickPopup');\n }\n var temp = {};\n temp[this.parent.eventFields.startTime] = this.parent.activeCellsData.startTime;\n temp[this.parent.eventFields.endTime] = this.parent.activeCellsData.endTime;\n temp[this.parent.eventFields.isAllDay] = this.parent.activeCellsData.isAllDay;\n var quickCellPopup = createElement('div', { className: cls.CELL_POPUP_CLASS });\n quickCellPopup.appendChild(this.getPopupHeader('Cell', temp));\n quickCellPopup.appendChild(this.getPopupContent('Cell', args, temp));\n quickCellPopup.appendChild(this.getPopupFooter('Cell', temp));\n this.quickPopup.element.setAttribute('aria-label', this.l10n.getConstant('newEvent'));\n var subjectElement = quickCellPopup.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectElement) {\n Input.createInput({ element: subjectElement, properties: { placeholder: this.l10n.getConstant('addTitle') } });\n }\n if (!isNullOrUndefined(this.parent.eventSettings.fields.subject.default)) {\n subjectElement.value = this.parent.eventSettings.fields.subject.default;\n }\n var closeIcon = quickCellPopup.querySelector('.' + cls.CLOSE_CLASS);\n if (closeIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.popupClose);\n }\n var moreButton = quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS);\n if (moreButton) {\n this.renderButton('e-flat', '', false, moreButton, this.detailsClick);\n }\n var saveButton = quickCellPopup.querySelector('.' + cls.EVENT_CREATE_CLASS);\n if (saveButton) {\n this.renderButton('e-flat e-primary', '', this.parent.activeViewOptions.readonly, saveButton, this.saveClick);\n }\n if (this.morePopup) {\n this.morePopup.hide();\n }\n this.quickPopup.content = quickCellPopup;\n this.quickPopup.relateTo = target;\n this.quickPopup.dataBind();\n this.beforeQuickPopupOpen(target, this.parent.eventBase.getPageCoordinates(args.event));\n };\n QuickPopups.prototype.isSameEventClick = function (events) {\n var isSameTarget = this.quickPopup.relateTo === closest(events.element, '.' + cls.APPOINTMENT_CLASS);\n if (isSameTarget && this.quickPopup.element.classList.contains(cls.POPUP_OPEN)) {\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n if (editIcon) {\n editIcon.focus();\n }\n if (!this.parent.isAdaptive) {\n var editButton = this.quickPopup.element.querySelector('.' + cls.EDIT_EVENT_CLASS);\n if (editButton) {\n editButton.focus();\n }\n }\n return true;\n }\n return false;\n };\n QuickPopups.prototype.isQuickTemplate = function (type) {\n return this.parent.quickInfoTemplates.templateType === 'Both' || this.parent.quickInfoTemplates.templateType === type;\n };\n QuickPopups.prototype.eventClick = function (events) {\n if (this.parent.eventTooltip) {\n this.parent.eventTooltip.close();\n }\n if (!this.parent.showQuickInfo) {\n return;\n }\n if (this.parent.isAdaptive && this.isMultipleEventSelect) {\n this.updateTapHoldEventPopup(closest(events.element, '.' + cls.APPOINTMENT_CLASS));\n }\n else {\n var isSameTarget = this.isSameEventClick(events);\n this.parent.selectedElements = [];\n if (isSameTarget) {\n return;\n }\n else if (this.quickPopup.element) {\n this.destroyPopupButtons('quickPopup');\n }\n var eventData = events.event;\n var quickEventPopup = createElement('div', { className: cls.EVENT_POPUP_CLASS });\n quickEventPopup.appendChild(this.getPopupHeader('Event', eventData));\n quickEventPopup.appendChild(this.getPopupContent('Event', events, eventData));\n quickEventPopup.appendChild(this.getPopupFooter('Event', eventData));\n this.quickPopup.element.setAttribute('aria-label', this.l10n.getConstant('editEvent'));\n var readonly = this.parent.activeViewOptions.readonly || eventData[this.parent.eventFields.isReadonly];\n var editAction = !this.parent.eventSettings.allowEditing || readonly;\n var deleteAction = !this.parent.eventSettings.allowDeleting || readonly;\n var editIcon = quickEventPopup.querySelector('.' + cls.EDIT_CLASS);\n var buttonClass = 'e-flat e-round e-small';\n if (editIcon) {\n this.renderButton(buttonClass, cls.ICON + ' ' + cls.EDIT_ICON_CLASS, editAction, editIcon, this.editClick);\n }\n var deleteIcon = quickEventPopup.querySelector('.' + cls.DELETE_CLASS);\n if (deleteIcon) {\n this.renderButton(buttonClass, cls.ICON + ' ' + cls.DELETE_ICON_CLASS, deleteAction, deleteIcon, this.deleteClick);\n }\n var closeIcon = quickEventPopup.querySelector('.' + cls.CLOSE_CLASS);\n if (closeIcon) {\n this.renderButton(buttonClass, cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.popupClose);\n }\n var editButton = quickEventPopup.querySelector('.' + cls.EDIT_EVENT_CLASS);\n if (editButton) {\n this.renderButton('e-flat e-primary', '', editAction, editButton, this.editClick);\n }\n var deleteButton = quickEventPopup.querySelector('.' + cls.DELETE_EVENT_CLASS);\n if (deleteButton) {\n this.renderButton('e-flat', '', deleteAction, deleteButton, this.deleteClick);\n }\n if (this.morePopup && !closest(events.element, '.' + cls.MORE_EVENT_WRAPPER_CLASS)) {\n this.morePopup.hide();\n }\n this.quickPopup.content = quickEventPopup;\n this.quickPopup.relateTo = this.parent.isAdaptive ? document.body :\n closest(events.element, '.' + cls.APPOINTMENT_CLASS);\n this.quickPopup.dataBind();\n this.beforeQuickPopupOpen(events.element, this.parent.eventBase.getPageCoordinates(events.originalEvent));\n }\n };\n QuickPopups.prototype.getPopupHeader = function (headerType, headerData) {\n var headerTemplate = createElement('div', { className: cls.POPUP_HEADER_CLASS });\n if (this.isQuickTemplate(headerType) && this.parent.quickInfoTemplates.header) {\n var headerArgs = extend({}, headerData, { elementType: headerType.toLowerCase() }, true);\n var templateId = this.parent.element.id;\n var headerTemp = [].slice.call(this.parent.getQuickInfoTemplatesHeader()(headerArgs, this.parent, 'header', templateId + '_headerTemplate', false));\n append([].slice.call(headerTemp), headerTemplate);\n }\n else {\n var header = void 0;\n var args = void 0;\n switch (headerType) {\n case 'Cell':\n header = \"
\");\n break;\n case 'Event':\n args = this.getFormattedString(headerData);\n header = \"
\" +\n (\"\") +\n (\"\") +\n (\"
\") +\n (\"
\");\n break;\n }\n var templateWrapper = createElement('div', { innerHTML: header });\n if (headerType === 'Event') {\n var subjectText = templateWrapper.querySelector('.' + cls.SUBJECT_CLASS);\n this.parent.sanitize(args.eventSubject, subjectText);\n }\n append([].slice.call(templateWrapper.childNodes), headerTemplate);\n }\n return headerTemplate;\n };\n QuickPopups.prototype.getPopupContent = function (type, args, data) {\n var contentTemplate = createElement('div', { className: cls.POPUP_CONTENT_CLASS });\n if (this.isQuickTemplate(type) && this.parent.quickInfoTemplates.content) {\n var contentArgs = extend({}, data, { elementType: type.toLowerCase() }, true);\n var templateId = this.parent.element.id;\n var contentTemp = [].slice.call(this.parent.getQuickInfoTemplatesContent()(contentArgs, this.parent, 'content', templateId + '_contentTemplate', false));\n append([].slice.call(contentTemp), contentTemplate);\n }\n else {\n var content = void 0;\n var cellDetails = void 0;\n var argsData = void 0;\n var resourceText = this.getResourceText(args, type.toLowerCase());\n switch (type) {\n case 'Cell':\n cellDetails = this.getFormattedString(data);\n content = \"
\") +\n (\"
\" + cellDetails.details + \"
\") +\n ((this.parent.activeViewOptions.group.resources.length > 0 ? \"
\" +\n (\"
\") : '') + \"
\");\n break;\n case 'Event':\n argsData = this.getFormattedString(data);\n content = '
' + argsData.details + '
';\n if (data[this.parent.eventFields.recurrenceRule]) {\n content += '
' +\n this.getRecurrenceSummary(data) + '
';\n }\n content += '
';\n if (data[this.parent.eventFields.location]) {\n content += '
';\n }\n if (data[this.parent.eventFields.startTimezone] || data[this.parent.eventFields.endTimezone]) {\n content += '
' +\n this.getTimezone(data) + '
';\n }\n if (data[this.parent.eventFields.description]) {\n content += '
';\n }\n if (this.parent.resourceCollection.length > 0) {\n content += '
';\n }\n break;\n }\n var templateWrapper = createElement('div', { innerHTML: content });\n if (data[this.parent.eventFields.location]) {\n var locationDetails = templateWrapper.querySelector('.' + cls.LOCATION_DETAILS_CLASS);\n if (!isNullOrUndefined(locationDetails)) {\n this.parent.sanitize(data[this.parent.eventFields.location], locationDetails);\n }\n }\n if (data[this.parent.eventFields.description]) {\n var descriptionDetails = templateWrapper.querySelector('.' + cls.DESCRIPTION_DETAILS_CLASS);\n if (!isNullOrUndefined(descriptionDetails)) {\n this.parent.sanitize(data[this.parent.eventFields.description], descriptionDetails);\n }\n }\n if (resourceText) {\n var resourceDetails = templateWrapper.querySelector('.' + cls.RESOURCE_DETAILS_CLASS);\n if (!isNullOrUndefined(resourceDetails)) {\n this.parent.sanitize(resourceText, resourceDetails);\n }\n }\n append([].slice.call(templateWrapper.childNodes), contentTemplate);\n }\n return contentTemplate;\n };\n QuickPopups.prototype.getPopupFooter = function (footerType, footerData) {\n var footerTemplate = createElement('div', { className: cls.POPUP_FOOTER_CLASS });\n if (this.isQuickTemplate(footerType) && this.parent.quickInfoTemplates.footer) {\n var footerArgs = extend({}, footerData, { elementType: footerType.toLowerCase() }, true);\n var templateId = this.parent.element.id;\n var footerTemp = [].slice.call(this.parent.getQuickInfoTemplatesFooter()(footerArgs, this.parent, 'footer', templateId + '_footerTemplate', false));\n append([].slice.call(footerTemp), footerTemplate);\n }\n else {\n var footer = void 0;\n switch (footerType) {\n case 'Cell':\n footer = \"\") +\n (\"\");\n break;\n case 'Event':\n footer = \"\" + (this.parent.isAdaptive ? '' : \"\") +\n (\"\"));\n break;\n }\n var templateWrapper = createElement('div', { innerHTML: footer });\n append([].slice.call(templateWrapper.childNodes), footerTemplate);\n }\n return footerTemplate;\n };\n QuickPopups.prototype.getResourceText = function (args, type) {\n if (this.parent.resourceCollection.length === 0) {\n return null;\n }\n var resourceValue = '';\n if (this.parent.activeViewOptions.group.resources.length === 0) {\n var resourceCollection_1 = this.parent.resourceBase.resourceCollection.slice(-1)[0];\n var resourceData = resourceCollection_1.dataSource;\n if (type === 'event') {\n var eventData = args.event;\n var _loop_2 = function (data) {\n var resourceId = eventData[resourceCollection_1.field];\n if (resourceId instanceof Array) {\n if (resourceId.indexOf(data[resourceCollection_1.idField]) > -1) {\n var id_1 = resourceId[resourceId.indexOf(data[resourceCollection_1.idField])];\n var resource = resourceData.filter(function (e) {\n return e[resourceCollection_1.idField] === id_1;\n })[0];\n resourceValue += (resourceValue === '') ? resource[resourceCollection_1.textField] :\n ', ' + resource[resourceCollection_1.textField];\n }\n }\n else if (data[resourceCollection_1.idField] === resourceId) {\n resourceValue = data[resourceCollection_1.textField].toString();\n }\n };\n for (var _i = 0, resourceData_1 = resourceData; _i < resourceData_1.length; _i++) {\n var data = resourceData_1[_i];\n _loop_2(data);\n }\n }\n else {\n resourceValue = resourceData[0][resourceCollection_1.textField].toString();\n }\n }\n else {\n if (type === 'event') {\n var eventData = args.event;\n var resourceData = void 0;\n var lastResource_1;\n for (var i = this.parent.resourceBase.resourceCollection.length - 1; i >= 0; i--) {\n resourceData = eventData[this.parent.resourceBase.resourceCollection[parseInt(i.toString(), 10)].field];\n if (!isNullOrUndefined(resourceData)) {\n lastResource_1 = this.parent.resourceBase.resourceCollection[parseInt(i.toString(), 10)];\n break;\n }\n }\n if (!Array.isArray(resourceData)) {\n resourceData = [resourceData];\n }\n var resNames_1 = [];\n var lastResourceData_1 = lastResource_1.dataSource;\n resourceData.forEach(function (value) {\n var text;\n var i = util.findIndexInData(lastResourceData_1, lastResource_1.idField, value);\n if (i > -1) {\n text = lastResourceData_1[parseInt(i.toString(), 10)][lastResource_1.textField];\n }\n if (text) {\n resNames_1.push(text);\n }\n });\n resourceValue = resNames_1.join(', ');\n }\n else {\n var argsData = args;\n var groupIndex = !isNullOrUndefined(argsData.groupIndex) ? argsData.groupIndex : 0;\n var resourceDetails = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex.toString(), 10)];\n resourceValue = resourceDetails.resourceData[resourceDetails.resource.textField];\n }\n }\n return resourceValue;\n };\n QuickPopups.prototype.getFormattedString = function (eventData) {\n var fields = this.parent.eventFields;\n var eventSubject = (eventData[fields.subject] || this.l10n.getConstant('noTitle'));\n var startDate = eventData[fields.startTime];\n var endDate = eventData[fields.endTime];\n var startDateDetails = this.getDateFormat(startDate, 'long');\n var endDateDetails = (eventData[fields.isAllDay] && endDate.getHours() === 0 && endDate.getMinutes() === 0) ?\n this.getDateFormat(util.addDays(new Date(endDate.getTime()), -1), 'long') :\n this.getDateFormat(endDate, 'long');\n var startTimeDetail = this.parent.getTimeString(startDate);\n var endTimeDetail = this.parent.getTimeString(endDate);\n var details = '';\n var spanLength = endDate.getDate() !== startDate.getDate() &&\n (endDate.getTime() - startDate.getTime()) / (60 * 60 * 1000) < 24 ? 1 : 0;\n if (eventData[fields.isAllDay]) {\n details = startDateDetails + ' (' + this.l10n.getConstant('allDay') + ')';\n if (((util.getUniversalTime(endDate) - util.getUniversalTime(startDate)) / util.MS_PER_DAY) > 1) {\n details += ' - ' + endDateDetails + ' (' + this.l10n.getConstant('allDay') + ')';\n }\n }\n else if ((((util.getUniversalTime(endDate) - util.getUniversalTime(startDate)) / util.MS_PER_DAY) >= 1) || spanLength > 0) {\n details = startDateDetails + ' (' + startTimeDetail + ')' + ' - ' + endDateDetails + ' (' + endTimeDetail + ')';\n }\n else {\n details = startDateDetails + ' (' + (startTimeDetail + ' - ' + endTimeDetail) + ')';\n }\n return { eventSubject: eventSubject, details: details };\n };\n QuickPopups.prototype.moreEventClick = function (data, endDate, groupIndex) {\n var _this = this;\n this.quickPopupHide(true);\n var moreEventContentEle = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS);\n if (moreEventContentEle) {\n remove(moreEventContentEle);\n }\n var selectedDate = ((data.date).getTime()).toString();\n var target = closest(data.element, '.' + cls.MORE_INDICATOR_CLASS + ',.' + cls.WORK_CELLS_CLASS);\n var day = this.parent.globalize.formatDate(data.date, { format: 'E', calendar: this.parent.getCalendarMode() });\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DAY_CLASS).innerHTML = util.capitalizeFirstWord(day, 'single');\n var dateElement = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS);\n dateElement.innerHTML = this.getDateFormat(data.date, 'd');\n dateElement.setAttribute('data-date', selectedDate);\n dateElement.setAttribute('data-end-date', endDate.getTime().toString());\n var groupOrder;\n if (!isNullOrUndefined(groupIndex)) {\n dateElement.setAttribute('data-group-index', groupIndex);\n groupOrder = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)].groupOrder;\n }\n var moreEventElements = this.createMoreEventList(data.event, groupOrder, groupIndex);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_POPUP_CLASS).appendChild(moreEventElements);\n removeClass(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_DATE_HEADER_CLASS).childNodes, cls.CURRENTDATE_CLASS);\n if (util.resetTime(data.date).getTime() === util.resetTime(this.parent.getCurrentTime()).getTime()) {\n addClass(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_DATE_HEADER_CLASS).childNodes, cls.CURRENTDATE_CLASS);\n }\n if (!this.parent.isAdaptive) {\n if (this.parent.currentView.indexOf('Timeline') !== -1) {\n var gIndex = target.getAttribute('data-group-index');\n var startDate = new Date(parseInt(target.getAttribute('data-start-date'), 10));\n startDate.setHours(startDate.getHours(), startDate.getMinutes(), 0);\n var tdDate = startDate.getTime().toString();\n if (isNullOrUndefined(gIndex)) {\n this.morePopup.relateTo = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS +\n ' tbody tr td[data-date=\"' + tdDate + '\"]');\n }\n else {\n this.morePopup.relateTo = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS +\n ' tbody tr td[data-group-index=\"' + gIndex + '\"][data-date=\"' + tdDate + '\"]');\n if (isNullOrUndefined(this.morePopup.relateTo)) {\n var workCells = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_WRAP_CLASS +\n ' tbody tr td[data-group-index=\"' + gIndex + '\"]'));\n for (var i = 0; i < workCells.length; i++) {\n var date = workCells[parseInt(i.toString(), 10)].getAttribute('data-date');\n if (date < tdDate) {\n this.morePopup.relateTo = workCells[parseInt(i.toString(), 10)];\n }\n }\n }\n }\n }\n else {\n this.morePopup.relateTo = closest(target, '.' + cls.WORK_CELLS_CLASS);\n }\n }\n this.parent.renderTemplates(function () {\n var eventProp = {\n type: 'EventContainer', cancel: false,\n element: _this.morePopup.element, data: data\n };\n _this.parent.trigger(event.popupOpen, eventProp, function (popupArgs) {\n if (!popupArgs.cancel) {\n _this.morePopup.show();\n }\n });\n });\n };\n QuickPopups.prototype.saveClick = function (event) {\n this.applyFormValidation();\n this.dialogEvent = event;\n this.isCrudAction = true;\n this.quickPopupHide();\n };\n QuickPopups.prototype.detailsClick = function (event) {\n var subjectEle = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectEle && subjectEle.value !== '') {\n extend(this.parent.activeCellsData, { subject: subjectEle.value });\n }\n this.dialogEvent = event;\n this.isCrudAction = false;\n this.fieldValidator.destroyToolTip();\n this.quickPopupHide();\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n QuickPopups.prototype.editClick = function (event) {\n this.dialogEvent = event;\n this.quickPopupHide(true);\n var data = this.parent.activeEventData.event;\n this.parent.currentAction = 'EditSeries';\n if (!isNullOrUndefined(data[this.parent.eventFields.recurrenceRule])) {\n this.parent.currentAction = 'EditOccurrence';\n this.openRecurrenceAlert();\n }\n else {\n this.parent.eventWindow.openEditor(data, this.parent.currentAction);\n }\n };\n QuickPopups.prototype.deleteClick = function (event) {\n this.dialogEvent = event;\n this.quickPopupHide(true);\n this.parent.currentAction = 'Delete';\n if (this.parent.activeEventData.event[this.parent.eventFields.recurrenceRule]) {\n this.openRecurrenceAlert();\n }\n else {\n this.openDeleteAlert();\n }\n };\n QuickPopups.prototype.updateMoreEventContent = function () {\n if (this.morePopup.element.classList.contains('e-popup-close')) {\n return;\n }\n var moreEventContentEle = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS);\n if (moreEventContentEle) {\n remove(moreEventContentEle);\n }\n var dateElement = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS);\n var startDate = new Date(parseInt(dateElement.getAttribute('data-date'), 10));\n var endDate = new Date(parseInt(dateElement.getAttribute('data-end-date'), 10));\n var groupIndex = dateElement.getAttribute('data-group-index');\n var data;\n var groupOrder;\n if (!isNullOrUndefined(groupIndex)) {\n data = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)];\n groupOrder = data.groupOrder;\n }\n var events = this.parent.eventBase.filterEvents(startDate, endDate, this.parent.eventsProcessed, data);\n var moreElement = this.createMoreEventList(events, groupOrder, groupIndex);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_POPUP_CLASS).appendChild(moreElement);\n };\n QuickPopups.prototype.closeClick = function (event) {\n this.dialogEvent = event;\n if (this.parent.currentView === 'Year' && this.parent.activeCellsData && this.parent.activeCellsData.element) {\n this.parent.selectCell(this.parent.activeCellsData.element);\n }\n this.quickPopupHide();\n this.morePopup.hide();\n };\n QuickPopups.prototype.dialogButtonClick = function (event) {\n this.dialogEvent = event;\n this.quickDialog.hide();\n var target = event.target;\n var cancelBtn = this.quickDialog.element.querySelector('.' + cls.QUICK_DIALOG_ALERT_CANCEL);\n var eventData = this.parent.activeEventData.event;\n if (target.classList.contains(cls.QUICK_DIALOG_OCCURRENCE_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteOccurrence' : 'EditOccurrence';\n switch (this.parent.currentAction) {\n case 'EditOccurrence':\n this.parent.eventWindow.openEditor(eventData, this.parent.currentAction);\n break;\n case 'DeleteOccurrence':\n this.parent.crudModule.deleteEvent(eventData, this.parent.currentAction);\n break;\n }\n }\n else if (target.classList.contains(cls.QUICK_DIALOG_FOLLOWING_EVENTS_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteFollowingEvents' : 'EditFollowingEvents';\n switch (this.parent.currentAction) {\n case 'EditFollowingEvents':\n this.parent.eventWindow.openEditor(eventData, this.parent.currentAction);\n break;\n case 'DeleteFollowingEvents':\n this.parent.crudModule.deleteEvent(eventData, this.parent.currentAction);\n break;\n }\n }\n else if (target.classList.contains(cls.QUICK_DIALOG_SERIES_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteSeries' : 'EditSeries';\n switch (this.parent.currentAction) {\n case 'EditSeries':\n this.parent.eventWindow.openEditor(this.parent.eventBase.getParentEvent(eventData, true), this.parent.currentAction);\n break;\n case 'DeleteSeries':\n this.parent.crudModule.deleteEvent(eventData, this.parent.currentAction);\n break;\n }\n }\n else if (target.classList.contains(cls.QUICK_DIALOG_DELETE_CLASS)) {\n this.parent.crudModule.deleteEvent(eventData, this.parent.currentAction);\n }\n else if (!cancelBtn.classList.contains(cls.DISABLE_CLASS) && (target.classList.contains(cls.QUICK_DIALOG_ALERT_OK) ||\n (target.classList.contains(cls.QUICK_DIALOG_ALERT_CANCEL) && !cancelBtn.classList.contains(cls.QUICK_DIALOG_CANCEL_CLASS)))) {\n this.parent.uiStateValues.isIgnoreOccurrence = target.classList.contains(cls.QUICK_DIALOG_ALERT_CANCEL);\n this.parent.eventWindow.eventSave(event, this.l10n.getConstant('ok'));\n }\n };\n QuickPopups.prototype.updateTapHoldEventPopup = function (target) {\n var selectedElements = this.parent.eventBase.getSelectedEventElements(target);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n if (selectedElements.length > 0) {\n var eventObj = this.parent.eventBase.getEventByGuid(selectedElements[0].getAttribute('data-guid'));\n var titleContent = (selectedElements.length === 1) ?\n (eventObj[this.parent.eventFields.subject] || this.l10n.getConstant('noTitle')) :\n '(' + selectedElements.length + ')' + ' ' + this.l10n.getConstant('selectedItems');\n this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS).innerHTML = titleContent;\n if (selectedElements.length > 1) {\n addClass([this.quickPopup.element.querySelector('.' + cls.EDIT_ICON_CLASS)], cls.HIDDEN_CLASS);\n }\n else {\n removeClass([this.quickPopup.element.querySelector('.' + cls.EDIT_ICON_CLASS)], cls.HIDDEN_CLASS);\n }\n }\n else {\n this.parent.selectedElements = [];\n this.quickPopupHide();\n }\n };\n QuickPopups.prototype.getTimezone = function (event) {\n var zoneDetails = '';\n zoneDetails += event[this.parent.eventFields.startTimezone] || '';\n zoneDetails += zoneDetails === '' ? '' : ' - ';\n zoneDetails += event[this.parent.eventFields.endTimezone] || '';\n return zoneDetails;\n };\n QuickPopups.prototype.getRecurrenceSummary = function (event) {\n var recurrenceEditor = this.parent.eventWindow.getRecurrenceEditorInstance();\n if (recurrenceEditor) {\n var ruleSummary = recurrenceEditor.getRuleSummary(event[this.parent.eventFields.recurrenceRule]);\n return ruleSummary.charAt(0).toUpperCase() + ruleSummary.slice(1);\n }\n return '';\n };\n QuickPopups.prototype.getDateFormat = function (date, skeletonString) {\n return util.capitalizeFirstWord(this.parent.globalize.formatDate(date, { skeleton: skeletonString, calendar: this.parent.getCalendarMode() }), 'single');\n };\n QuickPopups.prototype.getDataFromTarget = function (target) {\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n return this.parent.activeEventData.event;\n }\n // Deprecated cells data in quick popups\n var eventObj = {\n startTime: this.parent.activeCellsData.startTime,\n endTime: this.parent.activeCellsData.endTime,\n isAllDay: this.parent.activeCellsData.isAllDay,\n groupIndex: this.parent.activeCellsData.groupIndex\n };\n var cellsData = this.parent.activeCellsData;\n this.parent.eventWindow.convertToEventData(cellsData, eventObj);\n return eventObj;\n };\n QuickPopups.prototype.beforeQuickDialogClose = function (e) {\n var _this = this;\n var args = {\n event: e.event || this.dialogEvent,\n type: (isNullOrUndefined(this.parent.activeEventData.event)) ? 'ValidationAlert' :\n !isNullOrUndefined(this.parent.activeEventData.event[this.parent.eventFields.recurrenceRule])\n ? 'RecurrenceAlert' : 'DeleteAlert', cancel: false, data: this.parent.activeEventData.event,\n element: this.quickDialog.element\n };\n this.parent.trigger(event.popupClose, args, function (popupCloseArgs) {\n if (!popupCloseArgs.cancel) {\n _this.parent.eventBase.focusElement(true);\n }\n });\n };\n QuickPopups.prototype.beforeQuickPopupOpen = function (target, originalEvent) {\n var _this = this;\n this.parent.renderTemplates(function () {\n var isEventPopup = _this.quickPopup.element.querySelector('.' + cls.EVENT_POPUP_CLASS);\n var popupType = _this.parent.isAdaptive ? isEventPopup ? 'ViewEventInfo' : 'EditEventInfo' : 'QuickInfo';\n var eventProp = {\n type: popupType, cancel: false, data: extend({}, _this.getDataFromTarget(target), null, true),\n target: target, element: _this.quickPopup.element\n };\n _this.parent.trigger(event.popupOpen, eventProp, function (popupArgs) {\n if (popupArgs.cancel) {\n _this.quickPopupHide();\n _this.destroyPopupButtons('quickPopup');\n if (popupArgs.element.classList.contains(cls.POPUP_OPEN)) {\n _this.quickPopupClose();\n }\n util.removeChildren(_this.quickPopup.element);\n _this.isMultipleEventSelect = false;\n }\n else {\n var display = _this.quickPopup.element.style.display;\n _this.quickPopup.element.style.display = 'block';\n if (_this.parent.isAdaptive) {\n _this.quickPopup.element.removeAttribute('style');\n _this.quickPopup.element.style.display = 'block';\n _this.quickPopup.element.style.height = formatUnit((popupType === 'EditEventInfo') ? 65 : window.innerHeight);\n }\n else {\n var isVirtualScroll = _this.parent.virtualScrollModule && _this.parent.virtualScrollModule.isHorizontalScroll\n && !isNullOrUndefined(closest(target, '.' + cls.CONTENT_TABLE_CLASS));\n var conTable = _this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS + ' table');\n _this.quickPopup.offsetX = isVirtualScroll && !_this.parent.enableRtl ? (util.getTranslateX(conTable) + 10) : 10;\n _this.quickPopup.offsetY = _this.parent.virtualScrollModule && !_this.parent.virtualScrollModule.isHorizontalScroll ?\n _this.quickPopup.offsetY : 0;\n _this.quickPopup.collision = { X: _this.parent.enableRtl ? 'flip' : 'none', Y: 'fit' };\n _this.quickPopup.position = { X: _this.parent.enableRtl ? 'left' : 'right', Y: _this.parent.enableRtl ? 'bottom' : 'top' };\n _this.quickPopup.dataBind();\n _this.quickPopup.refreshPosition(null, true);\n var collide = isCollide(_this.quickPopup.element, _this.parent.element);\n if (collide.indexOf(_this.parent.enableRtl ? 'left' : 'right') > -1) {\n _this.quickPopup.offsetX = -target.offsetWidth - 10 - _this.quickPopup.element.offsetWidth;\n if (isVirtualScroll && !_this.parent.enableRtl) {\n _this.quickPopup.offsetX = util.getTranslateX(conTable) + _this.quickPopup.offsetX;\n }\n _this.quickPopup.dataBind();\n _this.quickPopup.refreshPosition(null, true);\n var leftCollide = isCollide(_this.quickPopup.element, _this.parent.element);\n if (leftCollide.indexOf('left') > -1) {\n _this.quickPopup.position = { X: 'center', Y: 'center' };\n _this.quickPopup.collision = { X: 'fit', Y: 'fit' };\n _this.quickPopup.offsetX = -(_this.quickPopup.element.offsetWidth / 2);\n _this.quickPopup.dataBind();\n }\n }\n if (_this.parent.virtualScrollModule && !_this.parent.virtualScrollModule.isHorizontalScroll && (collide.indexOf('top') > -1 || collide.indexOf('bottom') > -1)) {\n var translateY = util.getTranslateY(conTable);\n _this.quickPopup.offsetY = translateY;\n _this.quickPopup.dataBind();\n _this.quickPopup.refreshPosition(null, true);\n }\n if (_this.quickPopup.position.X === 'center' && _this.quickPopup.position.Y === 'center' && !isNullOrUndefined(originalEvent) &&\n originalEvent.clientX && originalEvent.clientY) {\n var clientX = originalEvent.clientX;\n var clientY = originalEvent.clientY;\n var targetRect = target.getBoundingClientRect();\n var offsetY = originalEvent.offsetY || Math.ceil(clientY - targetRect.y);\n var previousOffset = _this.quickPopup.offsetY;\n var collision = isCollide(_this.quickPopup.element, target);\n var popupRect = _this.quickPopup.element.getBoundingClientRect();\n var targetEle = document.elementFromPoint(clientX, clientY);\n if (collision.indexOf('top') > -1 || collision.indexOf('bottom') > -1 || closest(targetEle, '.' + cls.POPUP_WRAPPER_CLASS)) {\n if (popupRect.top <= clientY &&\n clientY <= popupRect.top + popupRect.height) {\n _this.quickPopup.offsetY = previousOffset - popupRect.height - 10;\n _this.quickPopup.dataBind();\n collision = isCollide(_this.quickPopup.element, _this.parent.element);\n if (collision.indexOf('top') > -1) {\n _this.quickPopup.offsetY = previousOffset + offsetY + 10;\n _this.quickPopup.dataBind();\n }\n }\n else if (isCollide(_this.quickPopup.element, _this.parent.element).indexOf('bottom') > -1) {\n _this.quickPopup.offsetY =\n previousOffset - offsetY - Math.ceil(popupRect.height) - 10;\n _this.quickPopup.dataBind();\n }\n }\n }\n }\n if (isEventPopup) {\n _this.applyEventColor();\n }\n _this.quickPopup.element.style.display = display;\n _this.quickPopup.dataBind();\n _this.quickPopup.show();\n }\n });\n });\n };\n QuickPopups.prototype.applyEventColor = function () {\n var colorField = '';\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n colorField = this.parent.enableRtl ? 'border-right-color' : 'border-left-color';\n }\n else {\n colorField = 'background-color';\n }\n var color = this.parent.activeEventData.element.style[colorField];\n if (color === '') {\n return;\n }\n var colorEle = this.quickPopup.element.querySelector('.' + cls.POPUP_HEADER_CLASS);\n var footerEle = this.quickPopup.element.querySelector('.' + cls.POPUP_FOOTER_CLASS);\n if (footerEle && footerEle.offsetParent) {\n colorEle = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (colorEle) {\n colorEle.style.borderLeftColor = color;\n color = \"rgba(\" + color.match(/\\d+/g).join() + \",0.3)\";\n }\n }\n if (colorEle) {\n colorEle.style.backgroundColor = color;\n }\n };\n QuickPopups.prototype.quickPopupOpen = function () {\n if (this.parent.isAdaptive) {\n this.quickPopup.element.style.top = '0px';\n return;\n }\n if (this.quickPopup.element.querySelector('.' + cls.CELL_POPUP_CLASS)) {\n var subjectElement = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectElement) {\n subjectElement.focus();\n }\n }\n else {\n var editElement = this.quickPopup.element.querySelector('.' + cls.EDIT_EVENT_CLASS);\n if (editElement) {\n editElement.focus();\n }\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n if (editIcon) {\n editIcon.focus();\n }\n }\n };\n QuickPopups.prototype.quickPopupClose = function () {\n this.parent.eventBase.focusElement();\n this.quickPopup.relateTo = '.' + cls.WORK_CELLS_CLASS;\n this.fieldValidator.destroyToolTip();\n if (this.quickPopup.element.querySelectorAll('.e-formvalidator').length) {\n this.fieldValidator.destroy();\n }\n this.destroyPopupButtons('quickPopup');\n util.removeChildren(this.quickPopup.element);\n };\n QuickPopups.prototype.morePopupOpen = function () {\n if (this.parent.isAdaptive) {\n this.morePopup.element.style.top = '0px';\n this.morePopup.element.style.left = '0px';\n this.morePopup.element.style.height = formatUnit(window.innerHeight);\n return;\n }\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).focus();\n this.morePopup.refreshPosition();\n };\n QuickPopups.prototype.morePopupClose = function () {\n var moreWrapper = this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS);\n if (moreWrapper) {\n remove(moreWrapper);\n }\n };\n QuickPopups.prototype.popupClose = function (event) {\n this.dialogEvent = event;\n this.isCrudAction = false;\n this.quickPopupHide(true);\n };\n QuickPopups.prototype.quickPopupHide = function (hideAnimation) {\n var _this = this;\n if (!this.quickPopup.element.classList.contains(cls.POPUP_OPEN)) {\n return;\n }\n var isCellPopup = this.quickPopup.element.querySelector('.' + cls.CELL_POPUP_CLASS);\n var popupData;\n if (isCellPopup) {\n var formvalidator = this.quickPopup.element.querySelector('.e-formvalidator');\n if (this.isCrudAction && formvalidator &&\n !formvalidator.ej2_instances[0].validate()) {\n return;\n }\n var fields = this.parent.eventFields;\n var saveObj = this.parent.eventWindow.getObjectFromFormData(cls.POPUP_WRAPPER_CLASS);\n this.parent.eventWindow.setDefaultValueToObject(saveObj);\n saveObj[fields.id] = this.parent.eventBase.getEventMaxID();\n saveObj[fields.startTime] = this.parent.activeCellsData.startTime;\n saveObj[fields.endTime] = this.parent.activeCellsData.endTime;\n saveObj[fields.isAllDay] = this.parent.activeCellsData.isAllDay;\n if (this.parent.resourceBase) {\n this.parent.resourceBase.setResourceValues(saveObj);\n }\n popupData = saveObj;\n }\n else {\n popupData = this.parent.activeEventData.event;\n }\n var isEventPopup = this.quickPopup.element.querySelector('.' + cls.EVENT_POPUP_CLASS);\n var args = {\n event: this.dialogEvent,\n type: this.parent.isAdaptive ? isEventPopup ? 'ViewEventInfo' : 'EditEventInfo' : 'QuickInfo',\n cancel: false, data: popupData, element: this.quickPopup.element,\n target: (isCellPopup ? this.parent.activeCellsData.element : this.parent.activeEventData.element)\n };\n this.parent.trigger(event.popupClose, args, function (popupCloseArgs) {\n if (!popupCloseArgs.cancel) {\n if (_this.quickPopup.element.classList.contains('e-popup-open')) {\n if (isCellPopup && _this.isCrudAction) {\n _this.parent.currentAction = 'Add';\n _this.parent.crudModule.addEvent(popupCloseArgs.data);\n }\n if (hideAnimation) {\n var animation = _this.quickPopup.hideAnimation;\n _this.quickPopup.hideAnimation = null;\n _this.quickPopup.hide();\n _this.quickPopup.hideAnimation = animation;\n }\n else {\n _this.quickPopup.hide();\n }\n _this.isMultipleEventSelect = false;\n _this.isCrudAction = false;\n }\n }\n });\n };\n QuickPopups.prototype.navigationClick = function (e) {\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n if (!isNullOrUndefined(navigateEle)) {\n var date = this.parent.getDateFromElement(e.currentTarget);\n if (!isNullOrUndefined(date)) {\n this.closeClick(e);\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView(this.parent.getNavigateView(), e);\n }\n }\n };\n QuickPopups.prototype.documentClick = function (e) {\n var target = e.event.target;\n var classNames = '.' + cls.POPUP_WRAPPER_CLASS + ',.' + cls.HEADER_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS +\n ',.' + cls.WORK_CELLS_CLASS + ',.' + cls.APPOINTMENT_CLASS + ',.e-popup';\n var popupWrap = this.parent.element.querySelector('.' + cls.POPUP_WRAPPER_CLASS);\n if ((popupWrap && popupWrap.childElementCount > 0 && !closest(target, classNames)) || !closest(target, classNames)) {\n this.quickPopupHide();\n this.parent.removeNewEventElement();\n }\n var tar = this.parent.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS);\n if (tar && tar !== target && this.parent.allowInline) {\n this.parent.inlineModule.documentClick();\n }\n if (closest(target, '.' + cls.APPOINTMENT_CLASS + ',.' + cls.HEADER_CELLS_CLASS)) {\n this.parent.removeNewEventElement();\n }\n if (!closest(target, '.' + cls.MORE_POPUP_WRAPPER_CLASS) && (target.classList &&\n !target.classList.contains(cls.MORE_INDICATOR_CLASS))\n && (!closest(target, '.' + cls.POPUP_OPEN)) && !closest(target, '.' + cls.WORK_CELLS_CLASS)) {\n this.morePopup.hide();\n }\n };\n QuickPopups.prototype.onClosePopup = function (event) {\n if (!isNullOrUndefined(event)) {\n this.dialogEvent = event;\n }\n this.quickPopupHide();\n if (isNullOrUndefined(event) || (!isNullOrUndefined(event) && event.action !== 'escape') ||\n (this.parent.inlineModule && this.parent.element.querySelector('.' + cls.INLINE_APPOINTMENT_CLASS))) {\n this.parent.eventBase.focusElement();\n }\n };\n QuickPopups.prototype.addEventListener = function () {\n this.parent.on(event.cellClick, this.cellClick, this);\n this.parent.on(event.eventClick, this.eventClick, this);\n this.parent.on(event.documentClick, this.documentClick, this);\n this.parent.on(event.dataReady, this.updateMoreEventContent, this);\n };\n QuickPopups.prototype.removeEventListener = function () {\n this.parent.off(event.cellClick, this.cellClick);\n this.parent.off(event.eventClick, this.eventClick);\n this.parent.off(event.documentClick, this.documentClick);\n this.parent.off(event.dataReady, this.updateMoreEventContent);\n };\n QuickPopups.prototype.destroyPopupButtons = function (popupName) {\n var popup = popupName === 'quickPopup' ? this.quickPopup : this.morePopup;\n var buttonCollections = [].slice.call(popup.element.querySelectorAll('.e-control.e-btn'));\n for (var _i = 0, buttonCollections_1 = buttonCollections; _i < buttonCollections_1.length; _i++) {\n var button = buttonCollections_1[_i];\n var instance = button.ej2_instances[0];\n if (instance) {\n instance.destroy();\n }\n }\n };\n QuickPopups.prototype.refreshQuickDialog = function () {\n this.destroyQuickDialog();\n this.renderQuickDialog();\n };\n QuickPopups.prototype.refreshQuickPopup = function () {\n this.destroyQuickPopup();\n this.renderQuickPopup();\n };\n QuickPopups.prototype.refreshMorePopup = function () {\n this.destroyMorePopup();\n this.renderMorePopup();\n };\n QuickPopups.prototype.destroyQuickDialog = function () {\n if (this.quickDialog.element) {\n this.quickDialog.destroy();\n remove(this.quickDialog.element);\n this.quickDialog = null;\n }\n };\n QuickPopups.prototype.destroyQuickPopup = function () {\n if (this.quickPopup.element) {\n this.destroyPopupButtons('quickPopup');\n this.quickPopup.destroy();\n remove(this.quickPopup.element);\n this.quickPopup = null;\n }\n };\n QuickPopups.prototype.destroyMorePopup = function () {\n if (this.morePopup.element) {\n this.destroyPopupButtons('morePopup');\n this.morePopup.destroy();\n remove(this.morePopup.element);\n this.morePopup = null;\n }\n };\n QuickPopups.prototype.destroy = function () {\n if (this.quickPopup.element.querySelectorAll('.e-formvalidator').length) {\n this.fieldValidator.destroy();\n }\n this.removeEventListener();\n this.destroyQuickPopup();\n this.destroyMorePopup();\n this.destroyQuickDialog();\n this.dialogEvent = null;\n this.parent = null;\n this.l10n = null;\n this.isCrudAction = null;\n this.fieldValidator = null;\n this.isMultipleEventSelect = null;\n };\n return QuickPopups;\n}());\nexport { QuickPopups };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNullOrUndefined, append, createElement, addClass, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Tooltip for Schedule\n */\nvar EventTooltip = /** @class */ (function () {\n function EventTooltip(parent) {\n this.parent = parent;\n this.tooltipObj = new Tooltip({\n animation: { close: { effect: 'FadeOut' } },\n content: 'No title',\n position: 'BottomRight',\n offsetY: 10,\n mouseTrail: this.parent.isAdaptive ? false : true,\n showTipPointer: false,\n cssClass: this.parent.cssClass + ' ' + cls.EVENT_TOOLTIP_ROOT_CLASS,\n target: this.getTargets(),\n beforeRender: this.onBeforeRender.bind(this),\n afterClose: this.onTooltipClose.bind(this),\n enableRtl: this.parent.enableRtl,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n });\n this.tooltipObj.appendTo(this.parent.element);\n }\n EventTooltip.prototype.getTargets = function () {\n var targets = [];\n if (this.parent.activeViewOptions.group.headerTooltipTemplate) {\n targets.push('.' + cls.RESOURCE_CELLS_CLASS);\n }\n if (this.parent.eventSettings.enableTooltip) {\n targets.push('.' + cls.APPOINTMENT_CLASS);\n }\n return targets.join(',');\n };\n EventTooltip.prototype.onBeforeRender = function (args) {\n if (!isNullOrUndefined(args.target.getAttribute('data-tooltip-id'))) {\n return;\n }\n if (args.target.classList.contains(cls.RESOURCE_CELLS_CLASS) && this.parent.activeViewOptions.group.resources.length > 0) {\n var resCollection = void 0;\n if (this.parent.activeView.isTimelineView()) {\n var index = parseInt(args.target.getAttribute('data-group-index'), 10);\n resCollection = this.parent.resourceBase.lastResourceLevel[parseInt(index.toString(), 10)];\n }\n else {\n var rowIndex = args.target.parentNode.sectionRowIndex;\n var cellIndex = args.target.cellIndex;\n resCollection =\n this.parent.activeView.getColumnLevels()[parseInt(rowIndex.toString(), 10)][parseInt(cellIndex.toString(), 10)];\n }\n var data = {\n resource: resCollection.resource,\n resourceData: resCollection.resourceData\n };\n var contentContainer = createElement('div');\n var templateId = this.parent.element.id + '_headerTooltipTemplate';\n var tooltipTemplate = [].slice.call(this.parent.getHeaderTooltipTemplate()(data, this.parent, 'headerTooltipTemplate', templateId, false));\n append(tooltipTemplate, contentContainer);\n this.setContent(contentContainer);\n this.parent.renderTemplates();\n return;\n }\n var record = this.parent.eventBase.getEventByGuid(args.target.getAttribute('data-guid'));\n if (isNullOrUndefined(record)) {\n return;\n }\n if (!isNullOrUndefined(this.parent.eventSettings.tooltipTemplate)) {\n var contentContainer = createElement('div');\n var templateId = this.parent.element.id + '_tooltipTemplate';\n var tooltipTemplate = [].slice.call(this.parent.getEventTooltipTemplate()(record, this.parent, 'tooltipTemplate', templateId, false));\n append(tooltipTemplate, contentContainer);\n this.setContent(contentContainer);\n }\n else {\n var globalize = this.parent.globalize;\n var fields = this.parent.eventFields;\n var eventStart = new Date('' + record[fields.startTime]);\n var eventEnd = new Date('' + record[fields.endTime]);\n eventEnd = (eventEnd.getHours() === 0 && eventEnd.getMinutes() === 0) ? new Date(eventEnd.setMilliseconds(-1000)) : eventEnd;\n var startDate = util.resetTime(new Date('' + eventStart));\n var endDate = util.resetTime(new Date('' + eventEnd));\n var tooltipSubject = (record[fields.subject] || this.parent.eventSettings.fields.subject.default\n || this.parent.localeObj.getConstant('addTitle'));\n var tooltipLocation = !isNullOrUndefined(record[fields.location]) ? record[fields.location] : '';\n var startMonthDate = '';\n var startMonthYearDate = '';\n var endMonthYearDate = '';\n startMonthDate = globalize.formatDate(eventStart, {\n type: 'date', skeleton: 'MMMd', calendar: this.parent.getCalendarMode()\n });\n startMonthYearDate = globalize.formatDate(eventStart, {\n type: 'date', skeleton: 'medium', calendar: this.parent.getCalendarMode()\n });\n endMonthYearDate = globalize.formatDate(eventEnd, {\n type: 'date', skeleton: 'medium', calendar: this.parent.getCalendarMode()\n });\n startMonthDate = util.capitalizeFirstWord(startMonthDate, 'single');\n startMonthYearDate = util.capitalizeFirstWord(startMonthYearDate, 'single');\n endMonthYearDate = util.capitalizeFirstWord(endMonthYearDate, 'single');\n var startTime = this.parent.getTimeString(eventStart);\n var endTime = this.parent.getTimeString(eventEnd);\n var tooltipDetails = void 0;\n if (startDate.getTime() === endDate.getTime()) {\n tooltipDetails =\n globalize.formatDate(eventStart, {\n type: 'date', skeleton: 'long', calendar: this.parent.getCalendarMode()\n });\n tooltipDetails = util.capitalizeFirstWord(tooltipDetails, 'single');\n }\n else {\n tooltipDetails = (startDate.getFullYear() === endDate.getFullYear()) ? (startMonthDate + ' - ' + endMonthYearDate) :\n (startMonthYearDate + ' - ' + endMonthYearDate);\n }\n var tooltipTime = (record[fields.isAllDay]) ? this.parent.localeObj.getConstant('allDay') :\n (startTime + ' - ' + endTime);\n var content_1 = '
' + tooltipSubject + '
' +\n '
' + tooltipLocation + '
' +\n '
' + tooltipDetails + '
' +\n '
' + tooltipTime + '
';\n var contentTemp = function () {\n return content_1;\n };\n this.setContent(initializeCSPTemplate(contentTemp));\n }\n this.parent.renderTemplates();\n };\n EventTooltip.prototype.onTooltipClose = function () {\n this.parent.resetTemplates(['tooltipTemplate', 'headerTooltipTemplate']);\n };\n EventTooltip.prototype.setContent = function (content) {\n this.tooltipObj.setProperties({ content: content }, true);\n };\n EventTooltip.prototype.close = function () {\n this.tooltipObj.close();\n };\n EventTooltip.prototype.destroy = function () {\n this.tooltipObj.destroy();\n addClass([this.parent.element], 'e-control');\n this.tooltipObj = null;\n this.parent = null;\n };\n return EventTooltip;\n}());\nexport { EventTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Event, Browser, detach } from '@syncfusion/ej2-base';\nimport { getDefaultDateObject, getValue, cldrData, L10n, isNullOrUndefined, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { EventHandler, classList } from '@syncfusion/ej2-base';\nimport { extractObjectFromRule, generate, generateSummary, getRecurrenceStringFromDate, getCalendarUtil } from './date-generator';\nimport { capitalizeFirstWord } from '../schedule/base/util';\nvar HEADER = 'e-editor';\nvar INPUTWARAPPER = 'e-input-wrapper';\nvar INPUTWARAPPERSIDE = 'e-input-wrapper-side';\nvar REPEATELEMENT = 'e-repeat-element';\nvar REPEATINTERVAL = 'e-repeat-interval';\nvar INTERVALCLASS = 'e-interval';\nvar DAYWRAPPER = 'e-days';\nvar WEEKWRAPPER = 'e-non-week';\nvar WEEKPOSITION = 'e-week-position';\nvar DAYPOSITION = 'e-day-position';\nvar YEAREXPANDERWRAPPER = 'e-year-expander';\nvar YEAREXPANDERELEMENT = 'e-year-expander-element';\nvar MONETHEXPANDERWRAPPER = 'e-month-expander';\nvar MONETHEXPANDWRAPPER = 'e-month-expand-wrapper';\nvar MONTHEXPANDERELEMENT = 'e-month-expander-element';\nvar MONTHEXPANDERCHECKBOXWRAPPER = 'e-month-expander-checkbox-wrapper';\nvar FORMLEFT = 'e-form-left';\nvar FORMRIGHT = 'e-form-right';\nvar MONTHDAYWRAPPER = 'e-month-day';\nvar MONTHEXPANNDERELEM = 'e-month-expander-wrapper';\nvar MONTHPOS = 'e-month-pos';\nvar MONTHWEEK = 'e-month-week';\nvar ENDON = 'e-end-on';\nvar MONTHEXPANDERLABEL = 'e-month-expander-label';\nvar WEEKEXPANDERLABEL = 'e-week-expander-label';\nvar ENDONLABEL = 'e-end-on-label';\nvar ENDONLEFT = 'e-end-on-left';\nvar MONTHDAYELEMENT = 'e-monthday-element';\nvar ENDONELEMENT = 'e-end-on-element';\nvar ENDONDATE = 'e-end-on-date';\nvar UNTILDATE = 'e-until-date';\nvar ENDONCOUNTWRAPPER = 'e-end-on-count';\nvar ENDONCOUNT = 'e-recurrence-count';\nvar HIDEWRAPPER = 'e-hide-recurrence-element';\nvar RTLCLASS = 'e-rtl';\nvar PRIMARY = 'e-primary';\nvar ACTIVE = 'e-active';\nvar RECURRENCETABLE = 'e-recurrence-table';\nvar REPEATCONTENT = 'e-repeat-content';\nvar REPEATCONTENTWRAPPER = 'e-repeat-content-wrapper';\nvar NONE = 'none';\nvar DAILY = 'daily';\nvar WEEKLY = 'weekly';\nvar MONTHLY = 'monthly';\nvar YEARLY = 'yearly';\nvar NEVER = 'never';\nvar UNTIL = 'until';\nvar COUNT = 'count';\nvar TEXTFIELD = 'text';\nvar VALUEFIELD = 'value';\nvar LAST = 'last';\nvar REPEAT = 'repeat';\nvar REPEATEVERY = 'repeatEvery';\nvar ON = 'on';\nvar END = 'end';\nvar RADIOLABEL = 'onDay';\nvar RULEUNTIL = 'UNTIL';\nvar RULEBYDAY = 'BYDAY';\nvar RULEBYMONTHDAY = 'BYMONTHDAY';\nvar RULEBYMONTH = 'BYMONTH';\nvar RULEINTERVAL = 'INTERVAL';\nvar RULECOUNT = 'COUNT';\nvar RULESETPOS = 'BYSETPOS';\nvar RULEFREQ = 'FREQ';\nvar RULEDAILY = 'DAILY';\nvar RULEWEEKLY = 'WEEKLY';\nvar RULEMONTHLY = 'MONTHLY';\nvar RULEYEARLY = 'YEARLY';\nvar RULESUNDAY = 'SU';\nvar RULEMONDAY = 'MO';\nvar RULETUESDAY = 'TU';\nvar RULEWEDNESDAY = 'WE';\nvar RULETHURSDAY = 'TH';\nvar RULEFRIDAY = 'FR';\nvar RULESATURDAY = 'SA';\nvar KEYSUNDAY = 'sun';\nvar KEYMONDAY = 'mon';\nvar KEYTUESDAY = 'tue';\nvar KEYWEDNESDAY = 'wed';\nvar KEYTHURSDAY = 'thu';\nvar KEYFRIDAY = 'fri';\nvar KEYSATURDAY = 'sat';\nvar EQUAL = '=';\nvar SEMICOLON = ';';\nvar COMMA = ',';\nvar FIRST = 'first';\nvar SECOND = 'second';\nvar THIRD = 'third';\nvar FOURTH = 'fourth';\nvar contentType = {\n none: '',\n daily: 'days',\n weekly: 'weeks',\n monthly: 'months',\n yearly: 'years'\n};\nvar valueData = {\n 'sun': RULESUNDAY,\n 'mon': RULEMONDAY,\n 'tue': RULETUESDAY,\n 'wed': RULEWEDNESDAY,\n 'thu': RULETHURSDAY,\n 'fri': RULEFRIDAY,\n 'sat': RULESATURDAY\n};\nvar neverClassList = [DAYWRAPPER, WEEKWRAPPER, ENDON, INTERVALCLASS, YEAREXPANDERWRAPPER, MONETHEXPANDERWRAPPER];\nvar weekClassList = [WEEKWRAPPER];\nvar monthClassList = [DAYWRAPPER, YEAREXPANDERWRAPPER];\nvar yearClassList = [DAYWRAPPER];\nvar dailyClassList = [DAYWRAPPER, WEEKWRAPPER, YEAREXPANDERWRAPPER, MONETHEXPANDERWRAPPER];\nvar noEndClassList = [ENDONDATE, ENDONCOUNTWRAPPER];\nvar endOnCountClassList = [ENDONDATE];\nvar endOnDateClassList = [ENDONCOUNTWRAPPER];\n/**\n * Represents the RecurrenceEditor component.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar RecurrenceEditor = /** @class */ (function (_super) {\n __extends(RecurrenceEditor, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {RecurrenceEditorModel} options Accepts the recurrence editor model properties to initiate the rendering\n * @param {string | HTMLElement} element Accepts the DOM element reference\n */\n function RecurrenceEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.defaultLocale = {\n none: 'None',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n month: 'Month',\n yearly: 'Yearly',\n never: 'Never',\n until: 'Until',\n count: 'Count',\n first: 'First',\n second: 'Second',\n third: 'Third',\n fourth: 'Fourth',\n last: 'Last',\n repeat: 'Repeat',\n repeatEvery: 'Repeat every',\n on: 'Repeat On',\n end: 'End',\n onDay: 'Day',\n days: 'Day(s)',\n weeks: 'Week(s)',\n months: 'Month(s)',\n years: 'Year(s)',\n every: 'every',\n summaryTimes: 'time(s)',\n summaryOn: 'on',\n summaryUntil: 'until',\n summaryRepeat: 'Repeats',\n summaryDay: 'day(s)',\n summaryWeek: 'week(s)',\n summaryMonth: 'month(s)',\n summaryYear: 'year(s)',\n monthWeek: 'Month Week',\n monthPosition: 'Month Position',\n monthExpander: 'Month Expander',\n yearExpander: 'Year Expander',\n repeatInterval: 'Repeat Interval'\n };\n _this.renderStatus = false;\n _this.dayButtons = [];\n _this.monthButtons = [];\n return _this;\n }\n RecurrenceEditor.prototype.startState = function (freq, endOn, startDate) {\n this.showFormElement();\n this.updateForm(freq);\n this.freshOnEndForm();\n this.updateEndOnForm(endOn);\n this.selectMonthDay(startDate);\n this.updateUntilDate(startDate);\n this.onMonthDay.setProperties({ checked: true });\n };\n RecurrenceEditor.prototype.preRender = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.calendarUtil = getCalendarUtil(this.calendarMode);\n };\n RecurrenceEditor.prototype.applyCustomClass = function (cssClass) {\n if (cssClass) {\n addClass([this.element], cssClass.split(' '));\n }\n };\n RecurrenceEditor.prototype.initialize = function () {\n addClass([this.element], 'e-' + this.getModuleName());\n this.renderComponent();\n if (!isNullOrUndefined(this.value) && this.value !== '') {\n this.setRecurrenceRule(this.value);\n }\n else {\n if (!isNullOrUndefined(this.repeatType.value)) {\n this.startState(this.repeatType.value.toString().toUpperCase(), this.endTypes[0], this.startDate);\n this.updateForm(this.repeatType.value.toString());\n }\n if (this.selectedType > 0) {\n this.setProperties({ value: this.getRecurrenceRule() }, false);\n }\n }\n this.applyCustomClass(this.cssClass);\n };\n RecurrenceEditor.prototype.triggerChangeEvent = function () {\n var _this = this;\n if (this.renderStatus) {\n var value = this.getRecurrenceRule();\n this.trigger('change', { value: value }, function (args) { return _this.setProperties({ value: args.value }, false); });\n }\n };\n RecurrenceEditor.prototype.resetDayButton = function () {\n var elements = [].slice.call(this.element.querySelectorAll('.' + DAYWRAPPER + ' button'));\n elements.forEach(function (element) { return removeClass([element], [ACTIVE, PRIMARY]); });\n };\n RecurrenceEditor.prototype.daySelection = function (dayIndex) {\n this.resetDayButton();\n var days = [0, 1, 2, 3, 4, 5, 6];\n this.rotateArray(days, this.firstDayOfWeek);\n var element = this.element.querySelector('.' + DAYWRAPPER + ' button[data-index=\"' + days.indexOf(dayIndex) + '\"]');\n if (element) {\n addClass([element], [ACTIVE, PRIMARY]);\n }\n };\n RecurrenceEditor.prototype.rtlClass = function (status) {\n if (status) {\n addClass([this.element], RTLCLASS);\n }\n else {\n removeClass([this.element], RTLCLASS);\n }\n };\n RecurrenceEditor.prototype.updateUntilDate = function (date) {\n var tempDate = new Date(date.getTime());\n tempDate.setDate(tempDate.getDate() + 60);\n this.untilDateObj.setProperties({ value: tempDate });\n };\n RecurrenceEditor.prototype.selectMonthDay = function (date) {\n var weekday = [KEYSUNDAY, KEYMONDAY, KEYTUESDAY, KEYWEDNESDAY, KEYTHURSDAY, KEYFRIDAY, KEYSATURDAY];\n this.monthDate.setProperties({ value: this.calendarUtil.getDate(date) });\n this.monthWeekDays.setProperties({ value: valueData[weekday[date.getDay()]] });\n this.monthValue.setProperties({ value: '' + this.calendarUtil.getMonth(date) });\n this.monthWeekPos.setProperties({ value: this.getDayPosition(date) });\n this.daySelection(date.getDay());\n };\n RecurrenceEditor.prototype.updateForm = function (state) {\n var _this = this;\n this.repeatType.setProperties({ value: state });\n var end = this.element.querySelector('.' + ENDON);\n if (state === DAILY) {\n classList(end, [FORMLEFT], [FORMRIGHT]);\n }\n else {\n classList(end, [FORMRIGHT], [FORMLEFT]);\n }\n switch (state) {\n case NONE:\n neverClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case WEEKLY:\n weekClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case MONTHLY:\n monthClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case YEARLY:\n yearClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case DAILY:\n dailyClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n }\n };\n RecurrenceEditor.prototype.updateEndOnForm = function (state) {\n var _this = this;\n this.endType.setProperties({ value: state });\n switch (state) {\n case NEVER:\n noEndClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case UNTIL:\n endOnDateClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case COUNT:\n endOnCountClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n }\n };\n RecurrenceEditor.prototype.freshOnEndForm = function () {\n var _this = this;\n noEndClassList.forEach(function (className) {\n var element = _this.element.querySelector('.' + className);\n if (element) {\n removeClass([element], HIDEWRAPPER);\n }\n });\n };\n RecurrenceEditor.prototype.showFormElement = function () {\n var _this = this;\n neverClassList.forEach(function (className) {\n var hideElement = _this.element.querySelector('.' + className);\n if (hideElement) {\n removeClass([hideElement], HIDEWRAPPER);\n }\n });\n };\n RecurrenceEditor.prototype.renderDropdowns = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n this.repeatType = new DropDownList({\n //set the data to dataSource property\n dataSource: this.getRepeatData(),\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n index: this.selectedType,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n placeholder: this.localeObj.getConstant(REPEAT),\n htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT) },\n change: function (args) {\n self.setProperties({ selectedType: _this.frequencies.indexOf(args.value) }, false);\n self.element.querySelector('.' + REPEATCONTENT).innerHTML =\n self.localeObj.getConstant(contentType[args.value]);\n self.showFormElement();\n self.updateForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n // set placeholder to DropDownList input element\n this.repeatType.appendTo(this.element.querySelector('.' + REPEATELEMENT));\n this.endType = new DropDownList({\n dataSource: this.getEndData(),\n popupWidth: this.getPopupWidth(),\n enableRtl: this.enableRtl,\n index: 1,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n change: function (args) {\n self.freshOnEndForm();\n self.updateEndOnForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.endType.appendTo(this.element.querySelector('.' + ENDONELEMENT));\n var renderDropDownList = function (dropDownData) {\n return new DropDownList({\n dataSource: dropDownData,\n popupWidth: _this.getPopupWidth(),\n enableRtl: _this.enableRtl,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n index: 1,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n change: function (args) {\n self.onWeekDay.setProperties({ checked: true });\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n };\n this.monthWeekPos = renderDropDownList(this.getMonthPosData());\n this.monthWeekPos.appendTo(this.element.querySelector('.' + MONTHPOS));\n this.monthWeekDays = renderDropDownList(this.getDayData('wide'));\n this.monthWeekDays.appendTo(this.element.querySelector('.' + MONTHWEEK));\n this.monthValue = new DropDownList({\n dataSource: this.getMonthData(),\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n enableRtl: this.enableRtl,\n index: 7,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n change: function (args) {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.monthValue.appendTo(this.element.querySelector('.' + YEAREXPANDERELEMENT));\n };\n RecurrenceEditor.prototype.setDefaultValue = function () {\n var formelement = [].slice.call(this.element.querySelectorAll('.e-control .e-numerictextbox'));\n for (var _i = 0, formelement_1 = formelement; _i < formelement_1.length; _i++) {\n var element = formelement_1[_i];\n var instance = element.ej2_instances[0];\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n instance.value = 1;\n instance.dataBind();\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n instance.value = 10;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.resetFormValues = function () {\n var recurreneElement = [].slice.call(this.element.querySelectorAll('.e-control [type=\"text\"]'));\n for (var _i = 0, recurreneElement_1 = recurreneElement; _i < recurreneElement_1.length; _i++) {\n var element = recurreneElement_1[_i];\n var instance = void 0;\n if (element.classList.contains('e-datepicker')) {\n instance = element.ej2_instances[0];\n if (instance.value) {\n // eslint-disable-next-line no-self-assign\n instance.value = instance.value;\n instance.dataBind();\n }\n else {\n this.updateUntilDate(this.startDate);\n }\n }\n else if (element.classList.contains('e-dropdownlist')) {\n instance = element.ej2_instances[0];\n instance.index = instance.index || 0;\n instance.dataBind();\n }\n else if (element.classList.contains('e-numerictextbox')) {\n instance = element.ej2_instances[0];\n var value = void 0;\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n value = 1;\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n value = 10;\n }\n else {\n value = this.startDate.getDate();\n }\n instance.value = instance.value || value;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.getPopupWidth = function () {\n return Browser.isDevice ? '100%' : 'auto';\n };\n RecurrenceEditor.prototype.renderDatePickers = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n this.untilDateObj = new DatePicker({\n firstDayOfWeek: this.firstDayOfWeek,\n enableRtl: this.enableRtl,\n locale: this.locale,\n min: this.minDate,\n max: this.maxDate,\n format: (isNullOrUndefined(this.dateFormat) ? this.getFormat('dateFormats') : this.dateFormat),\n change: function (args) {\n if (args.value) {\n self.triggerChangeEvent();\n }\n }\n });\n this.untilDateObj.appendTo(this.element.querySelector('.' + UNTILDATE));\n };\n RecurrenceEditor.prototype.getFormat = function (formatType) {\n var format;\n if (this.locale === 'en' || this.locale === 'en-US') {\n format = getValue(formatType + '.short', getDefaultDateObject(this.getCalendarMode()));\n }\n else {\n format = getValue('main.' + '' + this.locale + '.dates.calendars.' + this.getCalendarMode() + '.' + formatType + '.short', cldrData);\n }\n return format;\n };\n RecurrenceEditor.prototype.dayButtonRender = function () {\n var _this = this;\n var btns = [].slice.call(this.element.querySelectorAll('.' + DAYWRAPPER + ' button'));\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n for (var _i = 0, btns_1 = btns; _i < btns_1.length; _i++) {\n var btn = btns_1[_i];\n var button = new Button({ isToggle: true, enableRtl: this.enableRtl }, btn);\n this.dayButtons.push(button);\n EventHandler.add(btn, 'click', function (args) {\n var btns = [].slice.call(_this.element.querySelectorAll('.' + DAYWRAPPER + ' button.' + PRIMARY));\n var element = args.target;\n if (!element.classList.contains(PRIMARY)) {\n addClass([element], PRIMARY);\n self.triggerChangeEvent();\n }\n else if (btns.length > 1) {\n removeClass([element], PRIMARY);\n self.triggerChangeEvent();\n }\n });\n }\n };\n RecurrenceEditor.prototype.radioButtonRender = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n this.onMonthDay = new RadioButton({\n label: this.localeObj.getConstant(RADIOLABEL),\n enableRtl: this.enableRtl,\n name: 'monthType',\n value: 'day',\n change: function () {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.onMonthDay.appendTo(this.element.querySelector('.' + MONTHEXPANDERELEMENT));\n this.monthButtons.push(this.onMonthDay);\n this.onWeekDay = new RadioButton({\n label: this.localeObj.getConstant('monthExpander'),\n cssClass: 'e-month-type',\n name: 'monthType',\n enableRtl: this.enableRtl,\n value: 'daypos',\n change: function () {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.onWeekDay.appendTo(this.element.querySelector('.' + MONTHEXPANNDERELEM));\n this.monthButtons.push(this.onWeekDay);\n };\n RecurrenceEditor.prototype.numericTextboxRender = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n this.recurrenceCount = new NumericTextBox({\n value: 10,\n format: '#',\n enableRtl: this.enableRtl,\n min: 1,\n max: 999,\n change: function () {\n self.triggerChangeEvent();\n }\n });\n this.recurrenceCount.appendTo(this.element.querySelector('.' + ENDONCOUNT));\n this.monthDate = new NumericTextBox({\n value: 1,\n format: '#',\n enableRtl: this.enableRtl,\n min: 1,\n max: 31,\n change: function () {\n self.onMonthDay.setProperties({ checked: true });\n self.triggerChangeEvent();\n }\n });\n this.monthDate.appendTo(this.element.querySelector('.' + MONTHDAYWRAPPER));\n this.repeatInterval = new NumericTextBox({\n value: 1,\n format: '#',\n min: 1,\n max: 999,\n enableRtl: this.enableRtl,\n floatLabelType: 'Always',\n placeholder: this.localeObj.getConstant(REPEATEVERY),\n change: function () {\n self.triggerChangeEvent();\n }\n });\n this.repeatInterval.appendTo(this.element.querySelector('.' + REPEATINTERVAL));\n };\n RecurrenceEditor.prototype.renderComponent = function () {\n this.setTemplate();\n this.renderDropdowns();\n this.renderDatePickers();\n this.dayButtonRender();\n this.radioButtonRender();\n this.numericTextboxRender();\n };\n RecurrenceEditor.prototype.rotateArray = function (data, count) {\n var temp;\n for (var index = 0; index < count; index++) {\n temp = data.shift();\n data.push(temp);\n }\n };\n RecurrenceEditor.prototype.getEndData = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n var dataSource = [];\n this.endTypes.forEach(function (data) {\n dataSource.push({ text: self.localeObj.getConstant(data), value: data });\n });\n return dataSource;\n };\n RecurrenceEditor.prototype.getDayPosition = function (date) {\n var temp = new Date(date.getTime());\n var endDate = new Date(date.getTime());\n var day = date.getDay();\n var positionCollection = [];\n temp = this.calendarUtil.getMonthStartDate(temp);\n endDate = this.calendarUtil.getMonthEndDate(endDate);\n while (temp < endDate) {\n if (temp.getDay() === day) {\n positionCollection.push(temp.getTime());\n }\n temp.setDate(temp.getDate() + 1);\n }\n if (positionCollection.indexOf(date.getTime()) === positionCollection.length - 1) {\n return -1;\n }\n return (positionCollection.indexOf(date.getTime()) + 1);\n };\n RecurrenceEditor.prototype.getRepeatData = function () {\n var data = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n this.frequencies.forEach(function (element) {\n var textValue = (element === NONE) ? NEVER : element;\n data.push({ text: self.localeObj.getConstant(textValue), value: element });\n });\n return data;\n };\n RecurrenceEditor.prototype.getMonthPosData = function () {\n var monthpos = [FIRST, SECOND, THIRD, FOURTH, LAST];\n var monthposValue = {\n first: 1,\n second: 2,\n third: 3,\n fourth: 4,\n last: -1\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n var dataSource = [];\n monthpos.forEach(function (data) {\n dataSource.push({ text: self.localeObj.getConstant(data), value: monthposValue[\"\" + data] });\n });\n return dataSource;\n };\n RecurrenceEditor.prototype.getDayData = function (format) {\n var weekday = [KEYSUNDAY, KEYMONDAY, KEYTUESDAY, KEYWEDNESDAY, KEYTHURSDAY, KEYFRIDAY, KEYSATURDAY];\n var dayData = [];\n var cldrObj;\n this.rotateArray(weekday, this.firstDayOfWeek);\n if (this.locale === 'en' || this.locale === 'en-US') {\n var nameSpaceString = 'days.stand-alone.';\n cldrObj = (getValue(nameSpaceString + format, getDefaultDateObject(this.getCalendarMode())));\n }\n else {\n var nameSpaceString = 'main.' + '' + this.locale + '.dates.calendars.' + this.getCalendarMode() + '.days.stand-alone.' + format;\n cldrObj = (getValue(nameSpaceString, cldrData));\n }\n for (var _i = 0, weekday_1 = weekday; _i < weekday_1.length; _i++) {\n var obj = weekday_1[_i];\n var day = getValue(obj, cldrObj);\n dayData.push({ text: format === 'narrow' ? day : capitalizeFirstWord(day, 'single'), value: valueData[\"\" + obj] });\n }\n return dayData;\n };\n RecurrenceEditor.prototype.getMonthData = function () {\n var monthData = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n var nameSpaceString = 'months.stand-alone.wide';\n cldrObj = (getValue(nameSpaceString, getDefaultDateObject(this.getCalendarMode())));\n }\n else {\n var nameSpaceString = 'main.' + '' + this.locale + '.dates.calendars.' + this.getCalendarMode() + '.months.stand-alone.wide';\n cldrObj = (getValue(nameSpaceString, cldrData));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n monthData.push({\n text: capitalizeFirstWord(getValue(obj, cldrObj), 'single'),\n value: obj\n });\n }\n return monthData;\n };\n RecurrenceEditor.prototype.setTemplate = function () {\n var dayData = this.getDayData('narrow');\n var fullDay = this.getDayData('wide');\n this.element.innerHTML = '
' +\n '
' +\n '' +\n '
' +\n '' +\n '' +\n '
' +\n '
' + this.localeObj.getConstant(ON) + '
' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
' +\n '
' +\n '
' + this.localeObj.getConstant(ON) + '
' +\n '
' +\n '' +\n '
' +\n '
' +\n '' +\n '' +\n '' +\n '' +\n '
' +\n '
' +\n '' +\n '
' +\n '' +\n '
' +\n '
' +\n '' +\n '
' +\n '' +\n '
' +\n '' +\n '
' +\n '
' +\n '
' +\n '
' + this.localeObj.getConstant(END) + '
' +\n '
' +\n '' +\n '
' +\n '
' +\n '' +\n '
' +\n '
' +\n '' +\n '
' +\n '
';\n };\n RecurrenceEditor.prototype.getSelectedDaysData = function () {\n var ruleData = RULEBYDAY + EQUAL;\n var elements = [].slice.call(this.element.querySelectorAll('.' + DAYWRAPPER + ' button.' + PRIMARY));\n var weekday = [RULESUNDAY, RULEMONDAY, RULETUESDAY, RULEWEDNESDAY, RULETHURSDAY, RULEFRIDAY, RULESATURDAY];\n this.rotateArray(weekday, this.firstDayOfWeek);\n for (var index = 0; index < elements.length; index++) {\n ruleData += weekday[parseInt(elements[parseInt(index.toString(), 10)].getAttribute('data-index'), 10)] + (index === (elements.length - 1) ? '' : COMMA);\n }\n return ruleData + SEMICOLON;\n };\n RecurrenceEditor.prototype.getSelectedMonthData = function () {\n var ruleData;\n if (this.onWeekDay.checked) {\n ruleData = RULEBYDAY + EQUAL + this.monthWeekDays.value + SEMICOLON\n + RULESETPOS + EQUAL + this.monthWeekPos.value + SEMICOLON;\n }\n else {\n ruleData = RULEBYMONTHDAY + EQUAL + this.monthDate.value + SEMICOLON;\n }\n return ruleData;\n };\n RecurrenceEditor.prototype.getIntervalData = function () {\n return RULEINTERVAL + EQUAL + this.repeatInterval.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.getEndOnCount = function () {\n return RULECOUNT + EQUAL + this.recurrenceCount.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.getYearMonthRuleData = function () {\n return RULEBYMONTH + EQUAL + this.monthValue.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.updateWeekButton = function (keys) {\n var weekday = [RULESUNDAY, RULEMONDAY, RULETUESDAY, RULEWEDNESDAY, RULETHURSDAY, RULEFRIDAY, RULESATURDAY];\n this.rotateArray(weekday, this.firstDayOfWeek);\n for (var _i = 0, _a = this.dayButtons; _i < _a.length; _i++) {\n var obj = _a[_i];\n var index = parseInt(obj.element.getAttribute('data-index'), 10);\n if (keys.indexOf(weekday[parseInt(index.toString(), 10)]) !== -1) {\n obj.setProperties({ isPrimary: true });\n }\n else {\n obj.setProperties({ isPrimary: false });\n }\n }\n };\n RecurrenceEditor.prototype.updateMonthUI = function () {\n if (this.ruleObject.monthDay.length) {\n this.monthDate.setProperties({ value: this.ruleObject.monthDay[0] });\n this.onMonthDay.setProperties({ checked: true });\n }\n else {\n this.onWeekDay.setProperties({ checked: true });\n this.monthWeekPos.setProperties({ value: this.ruleObject.setPosition });\n for (var _i = 0, _a = Object.keys(valueData); _i < _a.length; _i++) {\n var key = _a[_i];\n if (valueData[\"\" + key] === this.ruleObject.day[0]) {\n this.monthWeekDays.setProperties({ value: this.ruleObject.day[0] });\n break;\n }\n }\n }\n };\n RecurrenceEditor.prototype.updateUI = function (repeat, state) {\n this.repeatInterval.setProperties({ value: this.ruleObject.interval });\n switch (state) {\n case UNTIL:\n this.untilDateObj.setProperties({ value: this.ruleObject.until });\n break;\n case COUNT:\n this.recurrenceCount.setProperties({ value: this.ruleObject.count });\n break;\n }\n switch (repeat) {\n case WEEKLY:\n this.updateWeekButton(this.ruleObject.day);\n break;\n case YEARLY:\n this.monthValue.setProperties({ index: (this.ruleObject.month[0] - 1) });\n this.updateMonthUI();\n break;\n case MONTHLY:\n this.updateMonthUI();\n break;\n }\n };\n RecurrenceEditor.prototype.getUntilData = function () {\n if (!this.untilDateObj.value) {\n return '';\n }\n var tempStr = getRecurrenceStringFromDate(this.untilDateObj.value);\n return RULEUNTIL + EQUAL + tempStr + SEMICOLON;\n };\n RecurrenceEditor.prototype.destroyComponents = function () {\n if (!this.recurrenceCount.isDestroyed) {\n this.recurrenceCount.destroy();\n this.recurrenceCount = null;\n }\n if (!this.monthDate.isDestroyed) {\n this.monthDate.destroy();\n this.monthDate = null;\n }\n if (!this.repeatInterval.isDestroyed) {\n this.repeatInterval.destroy();\n this.repeatInterval = null;\n }\n if (!this.untilDateObj.isDestroyed) {\n this.untilDateObj.destroy();\n this.untilDateObj = null;\n }\n if (!this.repeatType.isDestroyed) {\n this.repeatType.destroy();\n this.repeatType = null;\n }\n if (!this.endType.isDestroyed) {\n this.endType.destroy();\n this.endType = null;\n }\n if (!this.monthWeekPos.isDestroyed) {\n this.monthWeekPos.destroy();\n this.monthWeekPos = null;\n }\n if (!this.monthWeekDays.isDestroyed) {\n this.monthWeekDays.destroy();\n this.monthWeekDays = null;\n }\n if (!this.monthValue.isDestroyed) {\n this.monthValue.destroy();\n this.monthValue = null;\n }\n if (!this.onMonthDay.isDestroyed) {\n this.onMonthDay.destroy();\n this.onMonthDay = null;\n }\n if (!this.onWeekDay.isDestroyed) {\n this.onWeekDay.destroy();\n this.onWeekDay = null;\n }\n this.dayButtons.forEach(function (element) {\n if (!element.isDestroyed) {\n element.destroy();\n }\n });\n this.dayButtons = [];\n this.monthButtons.forEach(function (element) {\n if (!element.isDestroyed) {\n element.destroy();\n }\n });\n this.monthButtons = [];\n };\n RecurrenceEditor.prototype.resetFields = function () {\n this.startState(NONE, this.endTypes[0], this.startDate);\n this.setDefaultValue();\n };\n RecurrenceEditor.prototype.updateRuleUntilDate = function (startDate) {\n if (this.untilDateObj.value && startDate) {\n var untilDate = this.untilDateObj.value;\n var newUntilDate = new Date(untilDate.getFullYear(), untilDate.getMonth(), untilDate.getDate(), startDate.getHours(), startDate.getMinutes(), startDate.getMilliseconds());\n this.untilDateObj.setProperties({ value: newUntilDate });\n }\n };\n RecurrenceEditor.prototype.getCalendarMode = function () {\n return this.calendarMode.toLowerCase();\n };\n RecurrenceEditor.prototype.getRuleSummary = function (rule) {\n if (rule === void 0) { rule = this.getRecurrenceRule(); }\n return generateSummary(rule, this.localeObj, this.locale, this.calendarMode);\n };\n RecurrenceEditor.prototype.getRecurrenceDates = function (startDate, rule, excludeDate, maximumCount, viewDate) {\n viewDate = isNullOrUndefined(viewDate) ? this.startDate : viewDate;\n return generate(startDate, rule, excludeDate, this.firstDayOfWeek, maximumCount, viewDate, this.calendarMode);\n };\n RecurrenceEditor.prototype.getRecurrenceRule = function () {\n var ruleData = RULEFREQ + EQUAL;\n switch (this.repeatType.value) {\n case DAILY:\n ruleData += RULEDAILY + SEMICOLON;\n break;\n case WEEKLY:\n ruleData += RULEWEEKLY + SEMICOLON + this.getSelectedDaysData();\n break;\n case MONTHLY:\n ruleData += RULEMONTHLY + SEMICOLON + this.getSelectedMonthData();\n break;\n case YEARLY:\n ruleData += RULEYEARLY + SEMICOLON + this.getSelectedMonthData() + this.getYearMonthRuleData();\n break;\n case NONE:\n return '';\n }\n ruleData += this.getIntervalData();\n switch (this.endType.value) {\n case UNTIL:\n ruleData += this.getUntilData();\n break;\n case COUNT:\n ruleData += this.getEndOnCount();\n break;\n }\n return ruleData;\n };\n RecurrenceEditor.prototype.setRecurrenceRule = function (rule, startDate) {\n if (startDate === void 0) { startDate = this.startDate; }\n if (!rule) {\n this.repeatType.setProperties({ value: NONE });\n return;\n }\n this.renderStatus = false;\n this.ruleObject = extractObjectFromRule(rule);\n var endon = this.ruleObject.count ? COUNT : (this.ruleObject.until ? UNTIL : NEVER);\n switch (this.ruleObject.freq) {\n case RULEDAILY:\n this.startState(DAILY, endon, startDate);\n this.updateUI(DAILY, endon);\n break;\n case RULEWEEKLY:\n this.startState(WEEKLY, endon, startDate);\n this.updateUI(WEEKLY, endon);\n break;\n case RULEMONTHLY:\n this.startState(MONTHLY, endon, startDate);\n this.updateUI(MONTHLY, endon);\n break;\n case RULEYEARLY:\n this.startState(YEARLY, endon, startDate);\n this.updateUI(YEARLY, endon);\n break;\n }\n this.renderStatus = true;\n this.triggerChangeEvent();\n };\n RecurrenceEditor.prototype.detachInputs = function () {\n var inputElements = [].slice.call(this.element.querySelectorAll('input'));\n for (var _i = 0, inputElements_1 = inputElements; _i < inputElements_1.length; _i++) {\n var element = inputElements_1[_i];\n detach(element);\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n RecurrenceEditor.prototype.destroy = function () {\n if (!this.isDestroyed) {\n this.destroyComponents();\n _super.prototype.destroy.call(this);\n var removeClasses = ['e-' + this.getModuleName()];\n if (this.cssClass) {\n removeClasses = removeClasses.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], removeClasses);\n this.detachInputs();\n while (this.element.firstElementChild) {\n this.element.removeChild(this.element.firstElementChild);\n }\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} Returns the module name\n * @private\n */\n RecurrenceEditor.prototype.getModuleName = function () {\n return 'recurrenceeditor';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} Returns the persisted state\n */\n RecurrenceEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n RecurrenceEditor.prototype.render = function () {\n this.initialize();\n this.rtlClass(this.enableRtl);\n this.renderStatus = true;\n this.renderComplete();\n };\n /**\n * Called internally, if any of the property value changed.\n *\n * @param {RecurrenceEditorModel} newProp Accepts the changed properties new values\n * @param {RecurrenceEditorModel} oldProp Accepts the changed properties old values\n * @returns {void}\n * @private\n */\n RecurrenceEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'startDate':\n this.selectMonthDay(newProp.startDate);\n this.updateUntilDate(newProp.startDate);\n this.endType.setProperties({ index: 0 });\n break;\n case 'enableRtl':\n this.rtlClass(newProp.enableRtl);\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'selectedType':\n this.repeatType.setProperties({ index: this.selectedType });\n break;\n case 'minDate':\n this.untilDateObj.setProperties({ minDate: this.minDate });\n break;\n case 'maxDate':\n this.untilDateObj.setProperties({ maxDate: this.maxDate });\n break;\n case 'value':\n if (this.getRecurrenceRule() !== this.value) {\n this.setRecurrenceRule(this.value);\n }\n break;\n case 'calendarMode':\n this.calendarMode = newProp.calendarMode;\n this.calendarUtil = getCalendarUtil(newProp.calendarMode);\n break;\n case 'locale':\n case 'frequencies':\n case 'firstDayOfWeek':\n case 'endTypes':\n this.refresh();\n break;\n case 'dateFormat':\n this.untilDateObj.setProperties({ format: newProp.dateFormat });\n break;\n }\n }\n };\n __decorate([\n Property(['none', 'daily', 'weekly', 'monthly', 'yearly'])\n ], RecurrenceEditor.prototype, \"frequencies\", void 0);\n __decorate([\n Property(['never', 'until', 'count'])\n ], RecurrenceEditor.prototype, \"endTypes\", void 0);\n __decorate([\n Property(0)\n ], RecurrenceEditor.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(new Date())\n ], RecurrenceEditor.prototype, \"startDate\", void 0);\n __decorate([\n Property()\n ], RecurrenceEditor.prototype, \"dateFormat\", void 0);\n __decorate([\n Property('Gregorian')\n ], RecurrenceEditor.prototype, \"calendarMode\", void 0);\n __decorate([\n Property()\n ], RecurrenceEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property()\n ], RecurrenceEditor.prototype, \"value\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], RecurrenceEditor.prototype, \"minDate\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], RecurrenceEditor.prototype, \"maxDate\", void 0);\n __decorate([\n Property(0)\n ], RecurrenceEditor.prototype, \"selectedType\", void 0);\n __decorate([\n Event()\n ], RecurrenceEditor.prototype, \"change\", void 0);\n RecurrenceEditor = __decorate([\n NotifyPropertyChanges\n ], RecurrenceEditor);\n return RecurrenceEditor;\n}(Component));\nexport { RecurrenceEditor };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createElement, isNullOrUndefined, addClass, remove, EventHandler, extend, append, detach } from '@syncfusion/ej2-base';\nimport { cldrData, removeClass, getValue, getDefaultDateObject, closest, SanitizeHtmlHelper, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport { Query, Deferred } from '@syncfusion/ej2-data';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { FieldValidator } from './form-validator';\nimport { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_FIELD = 'e-field';\nvar REPEAT_CONTAINER_CLASS = 'e-recurrence-container';\nvar REPEAT_BUTTON_ICON_CLASS = 'e-recurrence-edit';\nvar REPEAT_BUTTON_CLASS = 'e-recurrence-edit-button';\nvar REPEAT_DIALOG_CLASS = 'e-recurrence-dialog';\nvar HIDE_STYLE_CLASS = 'e-hide';\n/**\n * Event editor window\n */\nvar EventWindow = /** @class */ (function () {\n function EventWindow(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.fields = this.parent.eventFields;\n this.eventWindowTime = { startTime: new Date(), endTime: new Date() };\n this.renderEventWindow();\n }\n EventWindow.prototype.renderEventWindow = function () {\n this.element = createElement('div', { id: this.parent.element.id + '_dialog_wrapper' });\n this.parent.element.appendChild(this.element);\n var dialogModel = {\n animationSettings: { effect: 'Zoom' },\n content: this.getEventWindowContent(),\n cssClass: cls.EVENT_WINDOW_DIALOG_CLASS,\n enableRtl: this.parent.enableRtl,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n height: this.parent.isAdaptive ? '100%' : 'auto',\n minHeight: '300px',\n isModal: true,\n showCloseIcon: this.parent.isAdaptive ? false : true,\n target: document.body,\n visible: false,\n width: '500px',\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n };\n if (this.parent.isAdaptive) {\n dialogModel.cssClass = cls.EVENT_WINDOW_DIALOG_CLASS + ' ' + cls.DEVICE_CLASS;\n dialogModel.header = '
' +\n this.l10n.getConstant('newEvent') + '
';\n }\n else {\n dialogModel.buttons = [{\n buttonModel: {\n content: this.l10n.getConstant('deleteButton'), cssClass: cls.DELETE_EVENT_CLASS,\n disabled: !this.parent.eventSettings.allowDeleting || this.parent.readonly\n },\n click: this.eventDelete.bind(this)\n }, {\n buttonModel: {\n content: this.l10n.getConstant('saveButton'), cssClass: 'e-primary ' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS,\n isPrimary: true, disabled: !this.parent.eventSettings.allowAdding || this.parent.readonly\n },\n click: this.eventSave.bind(this)\n }, {\n buttonModel: { cssClass: cls.EVENT_WINDOW_CANCEL_BUTTON_CLASS, content: this.l10n.getConstant('cancelButton') },\n click: this.dialogClose.bind(this)\n }];\n dialogModel.header = '
' + this.l10n.getConstant('newEvent') + '
';\n }\n this.dialogObject = new Dialog(dialogModel, this.element);\n if (this.dialogObject.element.querySelector('.e-dlg-closeicon-btn')) {\n this.dialogObject.element.querySelector('.e-dlg-closeicon-btn').setAttribute('title', this.l10n.getConstant('close'));\n }\n addClass([this.element.parentElement], cls.EVENT_WINDOW_DIALOG_CLASS + '-container');\n if (this.parent.isAdaptive) {\n EventHandler.add(this.element.querySelector('.' + cls.EVENT_WINDOW_BACK_ICON_CLASS), 'click', this.dialogClose, this);\n EventHandler.add(this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_ICON_CLASS), 'click', this.eventSave, this);\n }\n EventHandler.add(this.dialogObject.element, 'keydown', this.preventEventSave, this);\n this.applyFormValidation();\n };\n EventWindow.prototype.refresh = function () {\n this.destroy(true);\n this.renderEventWindow();\n };\n EventWindow.prototype.refreshRecurrenceEditor = function () {\n if (this.recurrenceEditor) {\n var recurrenceEditor = this.recurrenceEditor.element;\n this.recurrenceEditor.destroy();\n this.createRecurrenceEditor(recurrenceEditor);\n }\n };\n EventWindow.prototype.setRecurrenceEditor = function (recurrenceEditor) {\n if (this.parent.editorTemplate) {\n this.recurrenceEditor = recurrenceEditor;\n }\n };\n EventWindow.prototype.openEditor = function (data, type, isEventData, repeatType) {\n this.parent.currentAction = type;\n this.parent.removeNewEventElement();\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide(true);\n }\n this.parent.inlineModule.removeInlineAppointmentElement();\n if (type === 'Add') {\n var eventObj = {};\n this.cellClickAction = !isEventData;\n this.parent.activeCellsData = data;\n var event_1 = data;\n if (this.cellClickAction) {\n this.convertToEventData(event_1, eventObj);\n }\n else {\n this.parent.activeCellsData = {\n startTime: (event_1.startTime || event_1[this.fields.startTime]),\n endTime: (event_1.endTime || event_1[this.fields.endTime]),\n isAllDay: (event_1.isAllDay || event_1[this.fields.isAllDay]),\n element: event_1.element,\n groupIndex: event_1.groupIndex\n };\n eventObj = event_1;\n }\n data = eventObj;\n }\n if (!isNullOrUndefined(this.parent.editorTemplate)) {\n this.renderFormElements(this.element.querySelector('.e-schedule-form'), data);\n }\n if (!this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n removeClass([this.dialogObject.element.querySelector('.e-recurrenceeditor')], cls.DISABLE_CLASS);\n }\n if (this.recurrenceEditor) {\n this.recurrenceEditor.firstDayOfWeek = this.parent.activeViewOptions.firstDayOfWeek;\n }\n switch (type) {\n case 'Add':\n this.onCellDetailsUpdate(data, repeatType);\n break;\n case 'Save':\n case 'EditOccurrence':\n case 'EditSeries':\n case 'EditFollowingEvents':\n if (type === 'EditOccurrence' && !this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n addClass([this.dialogObject.element.querySelector('.e-recurrenceeditor')], cls.DISABLE_CLASS);\n }\n this.cellClickAction = false;\n this.onEventDetailsUpdate(data);\n break;\n }\n };\n EventWindow.prototype.setDialogContent = function () {\n this.dialogObject.content = this.getEventWindowContent();\n this.dialogObject.dataBind();\n this.applyFormValidation();\n };\n EventWindow.prototype.preventEventSave = function (e) {\n if (this.parent && !this.parent.allowKeyboardInteraction && e.code === 'Enter') {\n this.isEnterKey = true;\n }\n };\n EventWindow.prototype.onBeforeOpen = function (args) {\n var _this = this;\n var endTime = this.eventData[this.fields.endTime].getTime();\n var eventProp = {\n type: 'Editor',\n data: this.eventData,\n cancel: false,\n element: this.element,\n target: (this.cellClickAction ? this.parent.activeCellsData.element : this.parent.activeEventData.element)\n };\n if (this.cellClickAction) {\n eventProp.duration = this.getSlotDuration();\n }\n var saveObj = this.getInstance(cls.EVENT_WINDOW_SAVE_BUTTON_CLASS);\n if (saveObj) {\n saveObj.disabled = !(this.cellClickAction ? this.parent.eventSettings.allowAdding : this.parent.eventSettings.allowEditing);\n saveObj.dataBind();\n }\n var deleteObj = this.getInstance(cls.DELETE_EVENT_CLASS);\n if (deleteObj) {\n deleteObj.disabled = !this.parent.eventSettings.allowDeleting;\n deleteObj.dataBind();\n }\n var callBackPromise = new Deferred();\n this.parent.trigger(event.popupOpen, eventProp, function (popupArgs) {\n args.cancel = popupArgs.cancel;\n _this.duration = _this.cellClickAction ? popupArgs.duration : null;\n if (_this.eventData[_this.fields.endTime].getTime() === endTime && !_this.cellClickAction &&\n _this.eventData[_this.fields.endTime].getHours() === 0 &&\n _this.eventData[_this.fields.endTime].getMinutes() === 0) {\n _this.eventData = extend({}, _this.eventData, null, true);\n _this.trimAllDay(_this.eventData);\n }\n _this.refreshDateTimePicker(_this.duration);\n if (_this.cellClickAction && popupArgs.duration !== _this.getSlotDuration() && isNullOrUndefined(_this.parent.editorTemplate)) {\n var startObj = _this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n var endObj = _this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n endObj.value = new Date(startObj.value.getTime() + (util.MS_PER_MINUTE * popupArgs.duration));\n endObj.dataBind();\n }\n if (_this.parent.editorTemplate && _this.element.querySelector('.e-recurrenceeditor') && !_this.recurrenceEditor) {\n _this.recurrenceEditor = _this.getInstance('e-recurrenceeditor');\n }\n callBackPromise.resolve(args);\n });\n return callBackPromise;\n };\n EventWindow.prototype.onBeforeClose = function (args) {\n var _this = this;\n if (args.isInteracted) {\n this.isCrudAction = false;\n }\n var eventProp = {\n type: 'Editor',\n event: args.event || this.dialogEvent,\n data: this.eventCrudData,\n cancel: false,\n element: this.element,\n target: (this.cellClickAction ? this.parent.activeCellsData.element : this.parent.activeEventData.element)\n };\n var callBackPromise = new Deferred();\n this.parent.trigger(event.popupClose, eventProp, function (popupArgs) {\n args.cancel = popupArgs.cancel;\n if (!popupArgs.cancel) {\n if (_this.isCrudAction) {\n args.cancel = _this.processCrudActions(popupArgs.data);\n _this.isCrudAction = args.cancel;\n }\n if (!_this.isCrudAction) {\n _this.resetForm();\n _this.parent.eventBase.focusElement(true);\n _this.eventCrudData = null;\n }\n }\n callBackPromise.resolve(args);\n });\n return callBackPromise;\n };\n EventWindow.prototype.getEventWindowContent = function () {\n var container = createElement('div', { className: cls.FORM_CONTAINER_CLASS });\n var form = createElement('form', {\n id: this.parent.element.id + 'EditForm',\n className: cls.FORM_CLASS,\n attrs: { onsubmit: 'return false;' }\n });\n this.renderFormElements(form);\n container.appendChild(form);\n return container;\n };\n EventWindow.prototype.renderFormElements = function (form, args) {\n var _this = this;\n if (!isNullOrUndefined(this.parent.editorTemplate)) {\n if (args) {\n if (this.fieldValidator) {\n this.fieldValidator.destroy();\n this.fieldValidator = null;\n }\n if (this.recurrenceEditor) {\n this.recurrenceEditor.destroy();\n this.recurrenceEditor = null;\n }\n this.destroyComponents();\n var formElements = [].slice.call(form.children);\n for (var _i = 0, formElements_1 = formElements; _i < formElements_1.length; _i++) {\n var element = formElements_1[_i];\n remove(element);\n }\n this.parent.resetTemplates(['editorTemplate']);\n }\n var templateId = this.parent.element.id + '_editorTemplate';\n var tempEle = [].slice.call(this.parent.getEditorTemplate()(args || {}, this.parent, 'editorTemplate', templateId, false));\n append(tempEle, form);\n this.parent.renderTemplates(function () {\n if (_this.element) {\n _this.applyFormValidation();\n }\n });\n }\n else {\n form.appendChild(this.getDefaultEventWindowContent());\n }\n };\n EventWindow.prototype.getDefaultEventWindowContent = function () {\n var parentDiv = this.createDivElement(cls.EVENT_WINDOW_DIALOG_PARENT_CLASS);\n var titleLocationDiv = this.createDivElement(cls.EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS);\n parentDiv.appendChild(titleLocationDiv);\n titleLocationDiv.appendChild(this.renderTextBox(cls.SUBJECT_CLASS));\n titleLocationDiv.querySelector('.' + cls.SUBJECT_CLASS).setAttribute('title', this.parent.editorTitles.subject);\n titleLocationDiv.appendChild(this.renderTextBox(cls.LOCATION_CLASS));\n titleLocationDiv.querySelector('.' + cls.LOCATION_CLASS).setAttribute('title', this.parent.editorTitles.location);\n var startEndDateTimeDiv = this.createDivElement(cls.EVENT_WINDOW_START_END_DIV_CLASS);\n parentDiv.appendChild(startEndDateTimeDiv);\n startEndDateTimeDiv.appendChild(this.renderDateTimePicker(cls.EVENT_WINDOW_START_CLASS, this.onTimeChange.bind(this)));\n startEndDateTimeDiv.querySelector('.' + cls.EVENT_WINDOW_START_CLASS).setAttribute('title', this.parent.editorTitles.startTime);\n startEndDateTimeDiv.appendChild(this.renderDateTimePicker(cls.EVENT_WINDOW_END_CLASS));\n startEndDateTimeDiv.querySelector('.' + cls.EVENT_WINDOW_END_CLASS).setAttribute('title', this.parent.editorTitles.endTime);\n var allDayTimezoneDiv = this.createDivElement(cls.EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS);\n parentDiv.appendChild(allDayTimezoneDiv);\n allDayTimezoneDiv.appendChild(this.renderCheckBox(cls.EVENT_WINDOW_ALL_DAY_CLASS));\n allDayTimezoneDiv.appendChild(this.renderCheckBox(cls.TIME_ZONE_CLASS));\n var timezoneParentDiv = this.createDivElement(cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS);\n parentDiv.appendChild(timezoneParentDiv);\n timezoneParentDiv.appendChild(this.renderDropDown(cls.EVENT_WINDOW_START_TZ_CLASS));\n timezoneParentDiv.appendChild(this.renderDropDown(cls.EVENT_WINDOW_END_TZ_CLASS));\n var repeatParentDiv = this.createDivElement(cls.EVENT_WINDOW_REPEAT_DIV_CLASS);\n parentDiv.appendChild(repeatParentDiv);\n var repeatDiv = this.renderCheckBox(cls.EVENT_WINDOW_REPEAT_CLASS);\n var repeatEditContainer = createElement('span', { className: REPEAT_CONTAINER_CLASS });\n var button = createElement('button', {\n className: REPEAT_BUTTON_CLASS,\n attrs: { type: 'button', 'title': this.l10n.getConstant('editRecurrence') }\n });\n this.buttonObj = new Button({ iconCss: REPEAT_BUTTON_ICON_CLASS + ' e-icons', cssClass: 'e-medium ' + this.parent.cssClass });\n repeatEditContainer.appendChild(button);\n this.buttonObj.appendTo(button);\n repeatDiv.appendChild(repeatEditContainer);\n repeatParentDiv.appendChild(repeatDiv);\n if (this.parent.isAdaptive) {\n EventHandler.add(button, 'click', this.loadRecurrenceEditor, this);\n }\n else {\n this.createRecurrenceEditor(parentDiv);\n }\n if (this.parent.resourceCollection.length > 0) {\n var resourceParentDiv = this.createDivElement(cls.EVENT_WINDOW_RESOURCES_DIV_CLASS);\n for (var _i = 0, _a = this.parent.resourceBase.resourceCollection; _i < _a.length; _i++) {\n var resource = _a[_i];\n resourceParentDiv.appendChild(this.renderResourceDetails(resource));\n }\n parentDiv.appendChild(resourceParentDiv);\n }\n var description = this.createDivElement(cls.DESCRIPTION_CLASS + '-row');\n description.appendChild(this.renderTextBox(cls.DESCRIPTION_CLASS));\n description.querySelector('.' + cls.DESCRIPTION_CLASS).setAttribute('title', this.parent.editorTitles.description);\n parentDiv.appendChild(description);\n var submit = createElement('button', { attrs: { type: 'hidden', title: 'submit', style: 'display:none' } });\n parentDiv.appendChild(submit);\n return parentDiv;\n };\n EventWindow.prototype.createRecurrenceEditor = function (parentDiv) {\n var recurrenceEditor = createElement('div', { id: this.parent.element.id + '_recurrence_editor' });\n parentDiv.appendChild(recurrenceEditor);\n this.recurrenceEditor = this.renderRecurrenceEditor();\n this.recurrenceEditor.appendTo(recurrenceEditor);\n this.updateMinMaxDateToEditor();\n };\n EventWindow.prototype.createDivElement = function (className) {\n return createElement('div', { className: className });\n };\n EventWindow.prototype.createInputElement = function (className, fieldName, type) {\n return createElement(type || 'input', {\n className: className, attrs: {\n type: 'text', name: fieldName, value: '', id: fieldName,\n title: ((this.l10n.getConstant(fieldName.charAt(0).toLowerCase() + fieldName.slice(1))) === '') ?\n fieldName : this.l10n.getConstant(fieldName.charAt(0).toLowerCase() + fieldName.slice(1))\n }\n });\n };\n EventWindow.prototype.getSlotDuration = function () {\n return this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n };\n EventWindow.prototype.renderDateTimePicker = function (value, changeEvent) {\n var dateTimeDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var dateTimeInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n dateTimeDiv.appendChild(dateTimeInput);\n var dateTimePicker = new DateTimePicker({\n change: changeEvent,\n firstDayOfWeek: this.parent.activeViewOptions.firstDayOfWeek,\n calendarMode: this.parent.calendarMode,\n min: this.parent.minDate,\n max: new Date(new Date(+this.parent.maxDate).setHours(23, 59, 59)),\n cssClass: this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n floatLabelType: 'Always',\n timeFormat: this.parent.activeViewOptions.timeFormat,\n format: (isNullOrUndefined(this.parent.dateFormat) ?\n this.getFormat('dateFormats') : this.parent.dateFormat) + ' ' + this.parent.activeViewOptions.timeFormat,\n placeholder: this.getFieldLabel(value),\n step: this.getSlotDuration(),\n width: '100%'\n });\n dateTimePicker.appendTo(dateTimeInput);\n return dateTimeDiv;\n };\n EventWindow.prototype.refreshDateTimePicker = function (duration) {\n var elementSelector = '.' + cls.EVENT_WINDOW_START_CLASS + ',.' + cls.EVENT_WINDOW_END_CLASS;\n var startEndElement = [].slice.call(this.element.querySelectorAll(elementSelector));\n for (var _i = 0, startEndElement_1 = startEndElement; _i < startEndElement_1.length; _i++) {\n var element = startEndElement_1[_i];\n var instance = element.ej2_instances[0];\n instance.firstDayOfWeek = this.parent.activeViewOptions.firstDayOfWeek;\n instance.timeFormat = this.parent.activeViewOptions.timeFormat;\n instance.step = duration || this.getSlotDuration();\n instance.dataBind();\n }\n };\n EventWindow.prototype.onTimeChange = function () {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n if (startObj.element.parentElement.classList.contains('e-input-focus')) {\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n var duration = 0;\n if (this.cellClickAction) {\n duration = util.MS_PER_MINUTE * this.duration;\n this.eventWindowTime.startTime = startObj.value;\n }\n else {\n duration = this.eventData[this.fields.endTime].getTime() - this.eventData[this.fields.startTime].getTime();\n }\n var endDate = (isNullOrUndefined(startObj.value)) ? null : new Date(startObj.value.getTime() + duration);\n if (this.cellClickAction) {\n this.eventWindowTime.endTime = endDate;\n }\n endObj.value = endDate;\n endObj.dataBind();\n }\n if (this.recurrenceEditor) {\n this.recurrenceEditor.updateRuleUntilDate(this.eventWindowTime.startTime);\n }\n };\n EventWindow.prototype.renderResourceDetails = function (resourceData) {\n var fieldName = resourceData.field;\n var value = 'e-' + fieldName;\n var labelValue = resourceData.title;\n var resourceDiv = this.createDivElement(value + '-container' + ' ' + 'e-resources');\n var resourceInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n resourceDiv.appendChild(resourceInput);\n function resourceTemplate(data) {\n return \"
\" + data[resourceData.textField] + \"
\";\n }\n initializeCSPTemplate(resourceTemplate, resourceData);\n if (resourceData.allowMultiple) {\n var listObj = new MultiSelect({\n enableRtl: this.parent.enableRtl,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n cssClass: this.parent.cssClass || '',\n dataSource: resourceData.dataSource,\n change: this.onMultiselectResourceChange.bind(this),\n itemTemplate: resourceTemplate,\n fields: {\n text: resourceData.textField,\n value: resourceData.idField\n },\n htmlAttributes: { 'title': labelValue, 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: labelValue,\n popupHeight: '230px',\n popupWidth: '447px',\n mode: 'Box'\n });\n listObj.appendTo(resourceInput);\n }\n else {\n var dropDownList = new DropDownList({\n cssClass: this.parent.cssClass || '',\n change: this.onDropdownResourceChange.bind(this),\n dataSource: resourceData.dataSource,\n enableRtl: this.parent.enableRtl,\n fields: {\n text: resourceData.textField,\n value: resourceData.idField\n },\n htmlAttributes: { 'title': labelValue, 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: labelValue,\n popupHeight: '230px',\n popupWidth: '447px',\n itemTemplate: resourceTemplate\n });\n dropDownList.appendTo(resourceInput);\n }\n return resourceDiv;\n };\n EventWindow.prototype.renderDropDown = function (value) {\n var _this = this;\n var fieldName = this.getFieldName(value);\n var timezoneDiv = this.createDivElement(value + '-container');\n var timezoneInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n timezoneDiv.appendChild(timezoneInput);\n var dropDownList = new DropDownList({\n allowFiltering: true,\n change: this.onTimezoneChange.bind(this),\n cssClass: this.parent.cssClass || '',\n dataSource: this.parent.timezoneDataSource,\n enableRtl: this.parent.enableRtl,\n fields: { text: 'Text', value: 'Value' },\n filterBarPlaceholder: this.parent.localeObj.getConstant('searchTimezone'),\n noRecordsTemplate: this.parent.localeObj.getConstant('noRecords'),\n filtering: function (e) {\n var query = new Query();\n query = (e.text !== '') ? query.where('Text', 'contains', e.text, true) : query;\n e.updateData(_this.parent.timezoneDataSource, query);\n },\n htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: this.getFieldLabel(value),\n popupHeight: '230px'\n });\n dropDownList.appendTo(timezoneInput);\n return timezoneDiv;\n };\n EventWindow.prototype.onMultiselectResourceChange = function (args) {\n if (!args.value || !this.parent.activeViewOptions.group.byGroupID || this.parent.resourceCollection.length <= 1) {\n return;\n }\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n var fieldName = args.element.getAttribute('name') || this.getColumnName(args.element);\n for (var i = 0; i < resourceCollection.length; i++) {\n if (resourceCollection[parseInt(i.toString(), 10)].field === fieldName && i < resourceCollection.length - 1) {\n var resObject = this.createInstance(i);\n var datasource = [];\n var _loop_1 = function (j) {\n var resourceModel = resourceCollection[i + 1];\n // eslint-disable-next-line max-len\n var filter = resourceModel.dataSource.filter(function (data) {\n return data[resourceModel.groupIDField] === args.value[parseInt(j.toString(), 10)];\n })[0];\n var groupId = (!isNullOrUndefined(filter)) ?\n filter[resourceCollection[i + 1].groupIDField] : null;\n var filterRes = this_1.filterDatasource(i, groupId);\n datasource = datasource.concat(filterRes);\n };\n var this_1 = this;\n for (var j = 0; j < args.value.length; j++) {\n _loop_1(j);\n }\n resObject.dataSource = datasource;\n resObject.dataBind();\n }\n }\n };\n EventWindow.prototype.createInstance = function (index) {\n var resourceData = this.parent.resourceBase.resourceCollection[index + 1];\n var resObject = this.element.querySelector('.e-' + resourceData.field).\n ej2_instances[0];\n resObject.clear();\n return resObject;\n };\n EventWindow.prototype.onDropdownResourceChange = function (args) {\n if (!args.value || this.parent.resourceCollection.length <= 1 || !this.parent.activeViewOptions.group.byGroupID) {\n return;\n }\n var fieldName = args.element.getAttribute('name') || this.getColumnName(args.element);\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n for (var i = 0; i < resourceCollection.length; i++) {\n if ((i < resourceCollection.length - 1) && resourceCollection[parseInt(i.toString(), 10)].field === fieldName) {\n var resObj = this.createInstance(i);\n var groupId = args.itemData[resourceCollection[parseInt(i.toString(), 10)].idField];\n resObj.dataSource = this.filterDatasource(i, groupId);\n resObj.dataBind();\n var resValue = (resObj.dataSource.length > 0) ?\n resObj.dataSource[0][resourceCollection[i + 1].idField] : null;\n resObj.value = (resourceCollection[i + 1].allowMultiple) ? [resValue] : resValue;\n resObj.dataBind();\n }\n }\n };\n EventWindow.prototype.filterDatasource = function (index, groupId) {\n var resourceData = this.parent.resourceBase.resourceCollection[index + 1];\n return resourceData.dataSource.filter(function (data) {\n return data[resourceData.groupIDField] === groupId;\n });\n };\n EventWindow.prototype.onTimezoneChange = function (args) {\n var fieldName = args.element.getAttribute('name') || this.getColumnName(args.element);\n if (fieldName === this.parent.eventFields.startTimezone) {\n var startTimezoneObj = this.getInstance(cls.EVENT_WINDOW_START_TZ_CLASS);\n var endTimezoneObj = this.getInstance(cls.EVENT_WINDOW_END_TZ_CLASS);\n endTimezoneObj.value = startTimezoneObj.value;\n endTimezoneObj.dataBind();\n }\n };\n EventWindow.prototype.renderCheckBox = function (value) {\n var checkBoxDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var checkBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n checkBoxDiv.appendChild(checkBoxInput);\n var checkBox = new CheckBox({\n change: this.onChange.bind(this),\n cssClass: value + ' ' + this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n label: this.getFieldLabel(value)\n });\n checkBox.appendTo(checkBoxInput);\n checkBoxInput.setAttribute('name', fieldName);\n if (fieldName === 'Repeat') {\n this.repeatStatus = checkBox;\n }\n return checkBoxDiv;\n };\n EventWindow.prototype.renderTextBox = function (value) {\n var textBoxDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var elementType = (value === cls.DESCRIPTION_CLASS) ? 'textarea' : 'input';\n var textBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName, elementType);\n textBoxDiv.appendChild(textBoxInput);\n Input.createInput({\n element: textBoxInput,\n floatLabelType: 'Always',\n properties: {\n enableRtl: this.parent.enableRtl,\n placeholder: this.getFieldLabel(value)\n }\n });\n return textBoxDiv;\n };\n EventWindow.prototype.getFieldName = function (name) {\n var fieldName = '';\n switch (name) {\n case cls.SUBJECT_CLASS:\n fieldName = this.fields.subject;\n break;\n case cls.LOCATION_CLASS:\n fieldName = this.fields.location;\n break;\n case cls.EVENT_WINDOW_START_CLASS:\n fieldName = this.fields.startTime;\n break;\n case cls.EVENT_WINDOW_END_CLASS:\n fieldName = this.fields.endTime;\n break;\n case cls.DESCRIPTION_CLASS:\n fieldName = this.fields.description;\n break;\n case cls.EVENT_WINDOW_ALL_DAY_CLASS:\n fieldName = this.fields.isAllDay;\n break;\n case cls.EVENT_WINDOW_START_TZ_CLASS:\n fieldName = this.fields.startTimezone;\n break;\n case cls.EVENT_WINDOW_END_TZ_CLASS:\n fieldName = this.fields.endTimezone;\n break;\n case cls.TIME_ZONE_CLASS:\n fieldName = 'Timezone';\n break;\n case cls.EVENT_WINDOW_REPEAT_CLASS:\n fieldName = 'Repeat';\n break;\n }\n return fieldName;\n };\n EventWindow.prototype.getFieldLabel = function (fieldName) {\n var labelText = '';\n switch (fieldName) {\n case cls.SUBJECT_CLASS:\n labelText = this.parent.editorTitles.subject;\n break;\n case cls.LOCATION_CLASS:\n labelText = this.parent.editorTitles.location;\n break;\n case cls.DESCRIPTION_CLASS:\n labelText = this.parent.editorTitles.description;\n break;\n case cls.EVENT_WINDOW_START_CLASS:\n labelText = this.parent.editorTitles.startTime;\n break;\n case cls.EVENT_WINDOW_END_CLASS:\n labelText = this.parent.editorTitles.endTime;\n break;\n case cls.EVENT_WINDOW_START_TZ_CLASS:\n labelText = this.parent.editorTitles.startTimezone;\n break;\n case cls.EVENT_WINDOW_END_TZ_CLASS:\n labelText = this.parent.editorTitles.endTimezone;\n break;\n case cls.EVENT_WINDOW_REPEAT_CLASS:\n labelText = this.parent.editorTitles.recurrenceRule;\n break;\n case cls.EVENT_WINDOW_ALL_DAY_CLASS:\n labelText = this.parent.editorTitles.isAllDay;\n break;\n case cls.TIME_ZONE_CLASS:\n labelText = this.l10n.getConstant('timezone');\n break;\n }\n return labelText;\n };\n EventWindow.prototype.onChange = function (args) {\n if (args.event && args.event.target) {\n var targetSelector = \".\" + cls.EVENT_WINDOW_ALL_DAY_CLASS + \",.\" + cls.TIME_ZONE_CLASS + \",.\" + cls.EVENT_WINDOW_REPEAT_CLASS;\n var target = closest(args.event.target, targetSelector);\n if (target.classList.contains(cls.EVENT_WINDOW_ALL_DAY_CLASS)) {\n this.onAllDayChange(args.checked);\n }\n else if (target.classList.contains(cls.TIME_ZONE_CLASS)) {\n this.timezoneChangeStyle(args.checked);\n }\n else if (target.classList.contains(cls.EVENT_WINDOW_REPEAT_CLASS)) {\n this.onRepeatChange(args.checked);\n }\n }\n };\n EventWindow.prototype.renderRepeatDialog = function () {\n var element = createElement('div');\n this.repeatDialogObject = new Dialog({\n header: this.l10n.getConstant('recurrence'),\n visible: false,\n content: '
',\n closeOnEscape: true,\n width: '90%',\n buttons: [{\n click: this.repeatSaveDialog.bind(this),\n buttonModel: { content: this.l10n.getConstant('save'), cssClass: 'e-save', isPrimary: true }\n },\n { click: this.repeatCancelDialog.bind(this), buttonModel: { cssClass: 'e-cancel', content: this.l10n.getConstant('cancel') } }],\n target: this.element,\n animationSettings: { effect: 'Zoom' },\n enableRtl: this.parent.enableRtl,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n isModal: true,\n cssClass: REPEAT_DIALOG_CLASS,\n open: this.repeatOpenDialog.bind(this)\n });\n this.element.appendChild(element);\n this.repeatDialogObject.appendTo(element);\n this.createRecurrenceEditor(this.repeatDialogObject.element.querySelector('.e-rec-editor'));\n };\n EventWindow.prototype.loadRecurrenceEditor = function () {\n this.repeatDialogObject.show();\n if (this.recurrenceEditor && this.repeatRule) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatRule);\n }\n };\n EventWindow.prototype.onRepeatChange = function (state) {\n if (state) {\n if (!this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n this.recurrenceEditor.setProperties({ startDate: this.repeatStartDate, selectedType: 0 });\n this.loadRecurrenceEditor();\n }\n else {\n if (this.repeatDialogObject) {\n this.repeatDialogObject.hide();\n }\n this.repeatRule = '';\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatRule);\n this.updateRepeatLabel(this.repeatRule);\n }\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n addClass([element], HIDE_STYLE_CLASS);\n }\n };\n EventWindow.prototype.repeatSaveDialog = function () {\n this.repeatRule = this.recurrenceEditor.getRecurrenceRule();\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (this.recurrenceEditor.getRecurrenceRule()) {\n removeClass([element], HIDE_STYLE_CLASS);\n }\n else {\n addClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n this.closeRepeatDialog();\n };\n EventWindow.prototype.closeRepeatDialog = function () {\n this.repeatDialogObject.hide();\n };\n EventWindow.prototype.repeatCancelDialog = function () {\n this.closeRepeatDialog();\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatTempRule);\n }\n if (!this.repeatTempRule) {\n this.repeatStatus.setProperties({ checked: false });\n }\n };\n EventWindow.prototype.repeatOpenDialog = function () {\n this.repeatTempRule = this.recurrenceEditor.getRecurrenceRule();\n };\n EventWindow.prototype.onCellDetailsUpdate = function (eventObj, repeatType) {\n if (!this.parent.eventSettings.allowAdding) {\n return;\n }\n if (this.parent.isAdaptive && repeatType && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n this.element.querySelector('.' + cls.FORM_CLASS).removeAttribute('data-id');\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('newEvent');\n eventObj.Timezone = false;\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n if (!isNullOrUndefined(this.parent.eventSettings.fields.subject.default)) {\n eventObj[this.fields.subject] = this.parent.eventSettings.fields.subject.default;\n }\n if (!isNullOrUndefined(this.parent.eventSettings.fields.location.default)) {\n eventObj[this.fields.location] = this.parent.eventSettings.fields.location.default;\n }\n if (!isNullOrUndefined(this.parent.eventSettings.fields.description.default)) {\n eventObj[this.fields.description] = this.parent.eventSettings.fields.description.default;\n }\n this.showDetails(eventObj);\n if (eventObj[this.fields.recurrenceRule] && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n this.repeatRule = eventObj[this.fields.recurrenceRule];\n }\n var deleteButton = this.element.querySelector('.' + cls.DELETE_EVENT_CLASS);\n if (deleteButton) {\n addClass([deleteButton], cls.DISABLE_CLASS);\n }\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setProperties({\n startDate: eventObj[this.fields.startTime],\n selectedType: !isNullOrUndefined(repeatType) ? repeatType : !isNullOrUndefined(eventObj[this.fields.recurrenceRule]) ?\n this.recurrenceEditor.selectedType : 0\n });\n this.repeatRule = this.recurrenceEditor.value;\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (eventObj[this.fields.recurrenceRule] || repeatType) {\n removeClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: true });\n }\n else {\n addClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n }\n else {\n var saveButton = this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS);\n this.disableButton(saveButton, false);\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.convertToEventData = function (cellsData, eventObj) {\n if (cellsData.subject) {\n eventObj[this.fields.subject] = cellsData.subject;\n }\n eventObj[this.fields.startTime] = cellsData.startTime;\n eventObj[this.fields.endTime] = cellsData.endTime;\n eventObj[this.fields.isAllDay] = cellsData.isAllDay;\n if (cellsData.RecurrenceRule) {\n eventObj[this.fields.recurrenceRule] = cellsData.RecurrenceRule;\n }\n if (this.parent.resourceCollection.length > 0 || this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.setResourceValues(eventObj);\n }\n };\n EventWindow.prototype.applyFormValidation = function () {\n var form = this.element.querySelector('.' + cls.FORM_CLASS);\n if (!form) {\n return;\n }\n var getValidationRule = function (rules) {\n return (rules && Object.keys(rules).length > 0) ? rules : undefined;\n };\n var rules = {};\n var subjectRule = getValidationRule(this.parent.eventSettings.fields.subject.validation);\n if (!isNullOrUndefined(subjectRule)) {\n rules[this.parent.eventSettings.fields.subject.name] = subjectRule;\n }\n var locationRule = getValidationRule(this.parent.eventSettings.fields.location.validation);\n if (!isNullOrUndefined(locationRule)) {\n rules[this.parent.eventSettings.fields.location.name] = locationRule;\n }\n var startTimeRule = getValidationRule(this.parent.eventSettings.fields.startTime.validation);\n if (!isNullOrUndefined(startTimeRule)) {\n rules[this.parent.eventSettings.fields.startTime.name] = startTimeRule;\n }\n var endTimeRule = getValidationRule(this.parent.eventSettings.fields.endTime.validation);\n if (!isNullOrUndefined(endTimeRule)) {\n rules[this.parent.eventSettings.fields.endTime.name] = endTimeRule;\n }\n var descriptionRule = getValidationRule(this.parent.eventSettings.fields.description.validation);\n if (!isNullOrUndefined(descriptionRule)) {\n rules[this.parent.eventSettings.fields.description.name] = descriptionRule;\n }\n this.fieldValidator = new FieldValidator();\n this.fieldValidator.renderFormValidator(form, rules, this.element, this.parent.locale);\n };\n EventWindow.prototype.showDetails = function (eventData) {\n this.eventData = eventData;\n var eventObj = extend({}, eventData, null, true);\n if ((!this.cellClickAction || this.cellClickAction && !isNullOrUndefined(this.parent.editorTemplate)) &&\n eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {\n this.trimAllDay(eventObj);\n }\n var formElements = this.getFormElements(cls.EVENT_WINDOW_DIALOG_CLASS);\n var keyNames = Object.keys(eventObj);\n for (var _i = 0, formElements_2 = formElements; _i < formElements_2.length; _i++) {\n var curElement = formElements_2[_i];\n var columnName = curElement.name || this.getColumnName(curElement);\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n if (keyNames.indexOf(columnName) !== -1) {\n this.setValueToElement(curElement, eventObj[\"\" + columnName]);\n }\n else {\n this.setDefaultValueToElement(curElement);\n }\n }\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n this.onAllDayChange(eventObj[this.fields.isAllDay]);\n var timezoneObj = this.getInstance(cls.TIME_ZONE_CLASS + '.' + EVENT_FIELD);\n if (!(isNullOrUndefined(eventObj[this.fields.startTimezone]) && isNullOrUndefined(eventObj[this.fields.endTimezone]))) {\n timezoneObj.checked = true;\n timezoneObj.dataBind();\n }\n this.timezoneChangeStyle(timezoneObj.checked);\n delete eventObj.Timezone;\n }\n };\n EventWindow.prototype.getColumnName = function (element) {\n var attrName = element.getAttribute('data-name') || '';\n if (attrName === '') {\n var isDropDowns = false;\n var fieldSelector = '';\n if (element.classList.contains('e-dropdownlist')) {\n fieldSelector = 'e-ddl';\n isDropDowns = true;\n }\n else if (element.classList.contains('e-multiselect')) {\n fieldSelector = 'e-multiselect';\n isDropDowns = true;\n }\n else if (element.classList.contains('e-datetimepicker')) {\n fieldSelector = 'e-datetimepicker';\n }\n else if (element.classList.contains('e-datepicker')) {\n fieldSelector = 'e-datepicker';\n }\n else if (element.classList.contains('e-checkbox')) {\n fieldSelector = 'e-checkbox';\n }\n var classSelector = isDropDowns ? \".\" + fieldSelector + \":not(.e-control)\" : \".\" + fieldSelector;\n var control = closest(element, classSelector) || element.querySelector(\".\" + fieldSelector);\n if (control) {\n var attrEle = control.querySelector('[name]');\n if (attrEle) {\n attrName = attrEle.name;\n }\n }\n }\n return attrName;\n };\n EventWindow.prototype.onAllDayChange = function (allDayStatus) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n var timezoneDiv = this.element.querySelector('.e-time-zone-container');\n var format;\n if (allDayStatus) {\n format = (isNullOrUndefined(this.parent.dateFormat)) ? this.getFormat('dateFormats') : this.parent.dateFormat;\n addClass(this.element.querySelectorAll('.e-time-icon'), cls.EVENT_WINDOW_ICON_DISABLE_CLASS);\n addClass([timezoneDiv], cls.DISABLE_CLASS);\n if (this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS)) {\n removeClass([this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS)], cls.ENABLE_CLASS);\n }\n startObj.format = endObj.format = format;\n }\n else {\n format = (isNullOrUndefined(this.parent.dateFormat)) ? this.getFormat('dateFormats') + ' ' +\n this.parent.activeViewOptions.timeFormat : this.parent.dateFormat + ' ' + this.parent.activeViewOptions.timeFormat;\n removeClass(this.element.querySelectorAll('.e-time-icon'), cls.EVENT_WINDOW_ICON_DISABLE_CLASS);\n removeClass([timezoneDiv], cls.DISABLE_CLASS);\n if (this.element.querySelector('.e-checkbox-wrapper .e-time-zone').checked) {\n addClass([this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS)], cls.ENABLE_CLASS);\n }\n startObj.format = endObj.format = format;\n }\n if (this.cellClickAction) {\n this.updateDateTime(allDayStatus, startObj, endObj);\n }\n startObj.dataBind();\n endObj.dataBind();\n if (!isNullOrUndefined(this.recurrenceEditor)) {\n this.recurrenceEditor.updateRuleUntilDate(startObj.value);\n }\n };\n EventWindow.prototype.updateDateTime = function (allDayStatus, startObj, endObj) {\n var startDate;\n var endDate;\n if (allDayStatus) {\n startDate = util.resetTime(new Date(this.eventWindowTime.startTime.getTime()));\n if (this.parent.activeCellsData.isAllDay) {\n var temp = util.addDays(new Date(this.eventWindowTime.endTime.getTime()), -1).getTime();\n endDate = (+this.eventWindowTime.startTime > temp) ? this.eventWindowTime.endTime : new Date(temp);\n }\n else {\n endDate = util.resetTime(new Date(this.eventWindowTime.endTime.getTime()));\n }\n }\n else {\n var start = this.parent.activeCellsData.startTime;\n startDate = new Date(this.eventWindowTime.startTime.getTime());\n startDate.setHours(start.getHours(), start.getMinutes(), start.getSeconds());\n if (this.parent.activeCellsData.isAllDay) {\n var startHour = this.parent.getStartEndTime(this.parent.workHours.start);\n startDate.setHours(startHour.getHours(), startHour.getMinutes(), startHour.getSeconds());\n endDate = new Date(startDate.getTime());\n endDate.setMilliseconds(util.MS_PER_MINUTE * this.getSlotDuration());\n }\n else {\n endDate = new Date(startDate.getTime());\n endDate.setMilliseconds(this.parent.activeCellsData.endTime.getTime() - this.parent.activeCellsData.startTime.getTime());\n }\n }\n this.eventWindowTime = { startTime: new Date(startDate.getTime()), endTime: new Date(endDate.getTime()) };\n startObj.value = startDate;\n endObj.value = endDate;\n startObj.dataBind();\n endObj.dataBind();\n };\n EventWindow.prototype.getFormat = function (formatType) {\n var format;\n if (this.parent.locale === 'en' || this.parent.locale === 'en-US') {\n format = getValue(formatType + '.short', getDefaultDateObject(this.parent.getCalendarMode()));\n }\n else {\n format = getValue(\"main.\" + this.parent.locale + \".dates.calendars.\" + this.parent.getCalendarMode() + \".\" + formatType + \".short\", cldrData);\n }\n return format;\n };\n EventWindow.prototype.onEventDetailsUpdate = function (eventObj) {\n if (!this.parent.eventSettings.allowEditing) {\n return;\n }\n if (!this.parent.isAdaptive) {\n removeClass([this.element.querySelector('.' + cls.DELETE_EVENT_CLASS)], cls.DISABLE_CLASS);\n }\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('editEvent');\n this.element.querySelector('.' + cls.FORM_CLASS).setAttribute('data-id', eventObj[this.fields.id].toString());\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n eventObj = extend({}, eventObj, null, true);\n var timezoneObj = this.getInstance(cls.TIME_ZONE_CLASS + '.' + EVENT_FIELD);\n var timezoneValue = void 0;\n if (eventObj[this.fields.startTimezone] || eventObj[this.fields.endTimezone]) {\n timezoneValue = true;\n this.parent.eventBase.timezoneConvert(eventObj);\n }\n else {\n timezoneValue = false;\n }\n eventObj.Timezone = timezoneValue;\n timezoneObj.checked = timezoneValue;\n timezoneObj.dataBind();\n }\n this.showDetails(eventObj);\n if (eventObj[this.fields.recurrenceRule] && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n else if (!this.parent.isAdaptive && this.recurrenceEditor) {\n this.recurrenceEditor.setProperties({ startDate: eventObj[this.fields.startTime] });\n this.recurrenceEditor.setRecurrenceRule('');\n }\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n if (eventObj[this.fields.recurrenceRule]) {\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n this.repeatRule = eventObj[this.fields.recurrenceRule];\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (eventObj[this.fields.recurrenceRule]) {\n removeClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: true });\n }\n else {\n addClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n }\n var isDisable = (this.parent.readonly || eventObj[this.fields.isReadonly]);\n if (!this.parent.isAdaptive) {\n var saveButton = this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS);\n var deleteButton = this.element.querySelector('.' + cls.DELETE_EVENT_CLASS);\n this.disableButton(saveButton, isDisable);\n this.disableButton(deleteButton, isDisable);\n }\n else {\n var saveIcon = this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_ICON_CLASS);\n if (saveIcon) {\n if (isDisable) {\n addClass([saveIcon], cls.ICON_DISABLE_CLASS);\n }\n else {\n removeClass([saveIcon], cls.ICON_DISABLE_CLASS);\n }\n }\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.disableButton = function (element, value) {\n if (element) {\n element.ej2_instances[0].disabled = value;\n }\n };\n EventWindow.prototype.renderRecurrenceEditor = function () {\n return new RecurrenceEditor({\n calendarMode: this.parent.calendarMode,\n cssClass: this.parent.cssClass,\n dateFormat: this.parent.dateFormat,\n enableRtl: this.parent.enableRtl,\n firstDayOfWeek: this.parent.activeViewOptions.firstDayOfWeek,\n locale: this.parent.locale\n });\n };\n EventWindow.prototype.updateMinMaxDateToEditor = function () {\n var startDate = this.element.querySelector('.e-start');\n var endDate = this.element.querySelector('.e-end');\n if (startDate && endDate) {\n var startObj = startDate.ej2_instances[0];\n var endObj = endDate.ej2_instances[0];\n startObj.min = this.parent.minDate;\n startObj.max = this.parent.maxDate;\n endObj.min = this.parent.minDate;\n endObj.max = this.parent.maxDate;\n startObj.dataBind();\n endObj.dataBind();\n }\n if (this.recurrenceEditor) {\n var untilDate = this.recurrenceEditor.element.querySelector('.e-until-date');\n if (untilDate) {\n var untilObj = untilDate.ej2_instances[0];\n untilObj.min = this.parent.minDate;\n untilObj.max = this.parent.maxDate;\n untilObj.dataBind();\n }\n }\n };\n EventWindow.prototype.updateRepeatLabel = function (repeatRule) {\n if (this.parent.isAdaptive && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n var data = repeatRule ?\n (this.l10n.getConstant('repeats') + ' ' + this.recurrenceEditor.getRuleSummary(repeatRule)) : this.l10n.getConstant('repeat');\n this.repeatStatus.setProperties({ label: data });\n };\n EventWindow.prototype.dialogClose = function (event) {\n if (this.isEnterKey) {\n this.isEnterKey = false;\n return;\n }\n this.dialogEvent = event;\n this.isCrudAction = false;\n this.parent.activeEventData = { event: undefined, element: undefined };\n this.parent.currentAction = null;\n this.dialogObject.hide();\n };\n EventWindow.prototype.resetForm = function () {\n this.fieldValidator.destroyToolTip();\n this.resetFormFields();\n if (!this.parent.isAdaptive && this.recurrenceEditor && !this.recurrenceEditor.isDestroyed) {\n this.recurrenceEditor.resetFields();\n }\n };\n EventWindow.prototype.timezoneChangeStyle = function (value) {\n var timezoneDiv = this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS);\n var localTimezoneName = this.parent.tzModule.getLocalTimezoneName();\n if (value) {\n addClass([timezoneDiv], cls.ENABLE_CLASS);\n var startTimezoneObj = this.getInstance(cls.EVENT_WINDOW_START_TZ_CLASS);\n var endTimezoneObj = this.getInstance(cls.EVENT_WINDOW_END_TZ_CLASS);\n var timezone = startTimezoneObj.dataSource;\n if (!startTimezoneObj.value || !this.parent.timezone) {\n var found = timezone.some(function (tz) { return tz.Value === localTimezoneName; });\n if (!found) {\n timezone.push({ Value: localTimezoneName, Text: localTimezoneName });\n startTimezoneObj.dataSource = timezone;\n endTimezoneObj.dataSource = timezone;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n }\n startTimezoneObj.value = startTimezoneObj.value || this.parent.timezone || localTimezoneName;\n endTimezoneObj.value = endTimezoneObj.value || this.parent.timezone || localTimezoneName;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n else {\n removeClass([timezoneDiv], cls.ENABLE_CLASS);\n }\n };\n EventWindow.prototype.resetFormFields = function () {\n var formElement = this.getFormElements(cls.EVENT_WINDOW_DIALOG_CLASS);\n for (var _i = 0, formElement_1 = formElement; _i < formElement_1.length; _i++) {\n var currentElement = formElement_1[_i];\n var columnName = currentElement.name || this.getColumnName(currentElement);\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n this.setDefaultValueToElement(currentElement);\n }\n }\n };\n EventWindow.prototype.eventSave = function (event, alert) {\n if (this.isEnterKey) {\n this.isEnterKey = false;\n return;\n }\n var formElement = this.element.querySelector('.' + cls.FORM_CLASS);\n if (formElement && formElement.classList.contains('e-formvalidator') &&\n !formElement.ej2_instances[0].validate()) {\n return;\n }\n var dataCollection = this.getEventDataFromEditor();\n if (this.processEventValidation(dataCollection.tempData, alert)) {\n return;\n }\n this.eventCrudData = dataCollection.eventData;\n this.dialogEvent = event;\n this.isCrudAction = true;\n this.dialogObject.hide();\n };\n EventWindow.prototype.getEventDataFromEditor = function () {\n var eventObj = extend({}, this.getObjectFromFormData(cls.EVENT_WINDOW_DIALOG_CLASS));\n if (!eventObj.Timezone) {\n eventObj[this.fields.startTimezone] = null;\n eventObj[this.fields.endTimezone] = null;\n }\n delete eventObj.Timezone;\n delete eventObj.Repeat;\n this.setDefaultValueToObject(eventObj);\n eventObj[this.fields.recurrenceRule] = this.recurrenceEditor ? this.recurrenceEditor.getRecurrenceRule() || null : undefined;\n var tempObj = extend({}, eventObj, null, true);\n if (eventObj[this.fields.isAllDay]) {\n eventObj[this.fields.startTime] = (isNullOrUndefined(eventObj[this.fields.startTime])) ? null\n : util.resetTime(new Date(eventObj[this.fields.startTime].getTime()));\n eventObj[this.fields.endTime] = (isNullOrUndefined(eventObj[this.fields.endTime])) ? null\n : util.addDays(util.resetTime(new Date(eventObj[this.fields.endTime].getTime())), 1);\n }\n return { eventData: eventObj, tempData: tempObj };\n };\n EventWindow.prototype.processEventValidation = function (eventObj, alert) {\n var alertType;\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n if (!eventObj[this.fields.startTime] || !eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('invalidDateError');\n return true;\n }\n if (eventObj[this.fields.startTime] > eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('startEndError');\n return true;\n }\n }\n if (this.recurrenceEditor && this.recurrenceEditor.value && this.recurrenceEditor.value !== '') {\n if (this.parent.currentAction !== 'EditOccurrence') {\n alertType = this.recurrenceValidation(eventObj[this.fields.startTime], eventObj[this.fields.endTime], alert);\n }\n var isShowAlert = true;\n if (alertType === 'seriesChangeAlert' && this.parent.uiStateValues.isIgnoreOccurrence) {\n isShowAlert = false;\n }\n if (!isNullOrUndefined(alertType) && isShowAlert\n && ((!this.parent.enableRecurrenceValidation && alertType === 'wrongPattern') || this.parent.enableRecurrenceValidation)) {\n this.parent.quickPopup.openRecurrenceValidationAlert(alertType);\n return true;\n }\n }\n return false;\n };\n EventWindow.prototype.processCrudActions = function (eventObj) {\n var _this = this;\n this.parent.uiStateValues.isBlock = false;\n var resourceData = this.getResourceData(eventObj);\n var isResourceEventExpand = (this.parent.activeViewOptions.group.resources.length > 0 ||\n this.parent.resourceCollection.length > 0) && !this.parent.activeViewOptions.group.allowGroupEdit\n && !isNullOrUndefined(resourceData);\n var eventId = this.getEventIdFromForm();\n if (!isNullOrUndefined(eventId)) {\n var eveId_1 = this.parent.eventBase.getEventIDType() === 'string' ? eventId : parseInt(eventId, 10);\n var editedData = this.parent.eventsData.filter(function (data) {\n return data[_this.fields.id] === eveId_1;\n })[0];\n if (isNullOrUndefined(editedData)) {\n editedData = this.parent.blockData.filter(function (data) {\n return data[_this.fields.id] === eveId_1;\n })[0];\n }\n eventObj = extend({}, editedData, eventObj);\n if (eventObj[this.fields.isReadonly]) {\n return false;\n }\n var currentAction = void 0;\n if (!isNullOrUndefined(editedData[this.fields.recurrenceRule])) {\n currentAction = this.parent.currentAction;\n eventObj.Guid = this.parent.activeEventData.event.Guid;\n if (this.parent.currentAction === 'EditOccurrence') {\n if (!eventObj[this.fields.recurrenceID]) {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxID();\n eventObj.Guid = this.parent.activeEventData.event.Guid;\n }\n else {\n eveId_1 = eventObj[this.fields.recurrenceID];\n currentAction = null;\n }\n if (this.parent.enableRecurrenceValidation && this.editOccurrenceValidation(eveId_1, eventObj)) {\n return true;\n }\n }\n if (this.parent.currentAction === 'EditSeries' || eventObj[this.fields.id] !== editedData[this.fields.id]) {\n eventObj[this.fields.recurrenceID] = editedData[this.fields.id];\n }\n else if (this.parent.currentAction === 'EditFollowingEvents') {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxID();\n eventObj[this.fields.followingID] = editedData[this.fields.id];\n }\n }\n if (isResourceEventExpand) {\n this.resourceSaveEvent(eventObj, 'Save', currentAction);\n }\n else {\n this.parent.saveEvent(eventObj, currentAction);\n }\n }\n else {\n this.parent.currentAction = 'Add';\n if (isResourceEventExpand) {\n this.resourceSaveEvent(eventObj, this.parent.currentAction);\n }\n else {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxID();\n this.parent.addEvent(eventObj);\n }\n }\n return this.parent.uiStateValues.isBlock;\n };\n EventWindow.prototype.getResourceData = function (eventObj) {\n var resourceData = null;\n if (!isNullOrUndefined(this.parent.resourceBase) && !isNullOrUndefined(this.parent.resourceBase.resourceCollection)\n && this.parent.resourceBase.resourceCollection.length > 0) {\n var lastResourceData = this.parent.resourceBase.resourceCollection.slice(-1)[0];\n resourceData = eventObj[lastResourceData.field];\n }\n return resourceData;\n };\n EventWindow.prototype.getObjectFromFormData = function (className) {\n var formElement = this.getFormElements(className);\n var eventObj = {};\n for (var _i = 0, formElement_2 = formElement; _i < formElement_2.length; _i++) {\n var currentElement = formElement_2[_i];\n var columnName = currentElement.name || this.getColumnName(currentElement);\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n eventObj[\"\" + columnName] = this.getValueFromElement(currentElement);\n }\n }\n return eventObj;\n };\n EventWindow.prototype.setDefaultValueToObject = function (eventObj) {\n if (!isNullOrUndefined(eventObj[this.fields.subject])) {\n eventObj[this.fields.subject] = eventObj[this.fields.subject] || this.parent.eventSettings.fields.subject.default\n || this.l10n.getConstant('addTitle');\n }\n if (!isNullOrUndefined(eventObj[this.fields.location])) {\n eventObj[this.fields.location] = eventObj[this.fields.location] || this.parent.eventSettings.fields.location.default;\n }\n if (!isNullOrUndefined(eventObj[this.fields.description])) {\n eventObj[this.fields.description] = eventObj[this.fields.description] || this.parent.eventSettings.fields.description.default;\n }\n };\n EventWindow.prototype.recurrenceValidation = function (startDate, endDate, alert) {\n var alertMessage;\n var recEditor = this.recurrenceEditor;\n var interval = this.getInstance('e-repeat-interval.e-numerictextbox').value;\n if (alert !== this.l10n.getConstant('ok')) {\n var activeEvent = this.parent.activeEventData.event;\n var excludedEvents = [];\n if ((this.parent.currentAction === 'EditSeries' || this.parent.currentAction === 'EditFollowingEvents')\n && !isNullOrUndefined(activeEvent)) {\n var eventStartTime = activeEvent[this.parent.eventFields.startTime];\n var seriesEvents = this.parent.eventBase.getSeriesEvents(this.eventData, eventStartTime);\n if (seriesEvents.length > 0) {\n excludedEvents = this.parent.eventBase.getEditedOccurrences(seriesEvents, eventStartTime);\n }\n else {\n var event_2 = this.parent.eventBase.getEventById(activeEvent[this.parent.eventFields.id]);\n excludedEvents = this.parent.eventBase.getEditedOccurrences([event_2], eventStartTime);\n }\n if (this.parent.currentAction === 'EditSeries'\n && !isNullOrUndefined(this.eventData[this.parent.eventFields.recurrenceException])) {\n excludedEvents.push(this.eventData);\n }\n }\n if (excludedEvents.length > 0) {\n alertMessage = 'seriesChangeAlert';\n }\n if (this.getInstance('e-end-on-left .e-ddl .e-dropdownlist').value === 'until' &&\n this.getInstance('e-end-on-date .e-datepicker').value < startDate) {\n alertMessage = 'wrongPattern';\n }\n if (isNullOrUndefined(alertMessage)) {\n var types = recEditor.value.split(';')[1].split('=')[1].split(',');\n var obj = { 'SU': 0, 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6 };\n var temp = [];\n var tempDiff = [];\n var tempValue = void 0;\n switch (recEditor.value.split(';')[0].split('=')[1]) {\n case 'DAILY':\n if ((((endDate.getTime() - startDate.getTime()) / (1000 * 3600)) > (interval * 24))) {\n alertMessage = 'createError';\n }\n break;\n case 'WEEKLY':\n types = recEditor.value.split(';')[1].split('=')[1].split(',');\n for (var index = 0; index < types.length * (interval + 1); index++) {\n temp[parseInt(index.toString(), 10)] =\n (types.length > index) ? obj[types[parseInt(index.toString(), 10)]] :\n temp[index - types.length] + (7 * interval);\n }\n tempValue = temp.sort(function (a, b) { return a - b; });\n for (var index = 1; index < tempValue.length; index++) {\n tempDiff.push(tempValue[parseInt(index.toString(), 10)] - tempValue[index - 1]);\n }\n if ((((endDate.getTime() - startDate.getTime()) / (1000 * 3600)) >= Math.min.apply(Math, tempDiff) * 24)\n || isNullOrUndefined(interval)) {\n alertMessage = 'createError';\n }\n break;\n case 'MONTHLY':\n if (endDate.getTime() >= new Date(+startDate).setMonth(startDate.getMonth() + interval)) {\n alertMessage = 'createError';\n }\n break;\n case 'YEARLY':\n if (endDate.getTime() >= new Date(+startDate).setFullYear(startDate.getFullYear() + interval)) {\n alertMessage = 'createError';\n }\n break;\n }\n }\n }\n else {\n if (endDate.getTime() >= new Date(+startDate).setMonth(startDate.getMonth() + interval)) {\n alertMessage = 'createError';\n }\n if (isNullOrUndefined(alertMessage)) {\n this.parent.quickPopup.quickDialog.hide();\n }\n }\n if (isNullOrUndefined(interval)) {\n alertMessage = 'createError';\n }\n return alertMessage;\n };\n EventWindow.prototype.getRecurrenceIndex = function (recColl, event) {\n var recIndex;\n for (var index = 0; index < recColl.length; index++) {\n if (event[this.fields.startTime].valueOf() === recColl[parseInt(index.toString(), 10)][this.fields.startTime].valueOf()) {\n recIndex = index;\n break;\n }\n }\n return recIndex;\n };\n EventWindow.prototype.trimAllDay = function (data) {\n if (data[this.fields.isAllDay]) {\n var temp = util.addDays(new Date(+data[this.fields.endTime]), -1).getTime();\n data[this.fields.endTime] = (+data[this.fields.startTime] > temp) ? data[this.fields.endTime] : new Date(temp);\n }\n };\n EventWindow.prototype.editOccurrenceValidation = function (eventId, currentData, editData) {\n var _this = this;\n if (editData === void 0) {\n editData = this.eventData;\n }\n var recurColl = this.parent.getOccurrencesByID(eventId);\n var excludedDatas = this.parent.eventsData.filter(function (data) {\n return data[_this.fields.recurrenceID] === eventId;\n });\n excludedDatas.map(function (data) { return recurColl.push(extend({}, data)); });\n currentData = extend({}, currentData);\n this.trimAllDay(currentData);\n for (var _i = 0, recurColl_1 = recurColl; _i < recurColl_1.length; _i++) {\n var data = recurColl_1[_i];\n this.trimAllDay(data);\n }\n this.parent.eventBase.sortByTime(recurColl);\n var index = this.getRecurrenceIndex(recurColl, editData);\n if (isNullOrUndefined(index)) {\n return false;\n }\n var currentStartTime = new Date(+currentData[this.fields.startTime]);\n var currentEndTime = new Date(+currentData[this.fields.endTime]);\n var nextStartTime;\n var nextEndTime;\n if (index !== recurColl.length - 1) {\n nextStartTime = new Date(+recurColl[index + 1][this.fields.startTime]);\n nextEndTime = new Date(+recurColl[index + 1][this.fields.endTime]);\n }\n var lastEndTime = new Date(+recurColl[recurColl.length - 1][this.fields.endTime]);\n if (index === 0) {\n if (!isNullOrUndefined(recurColl[index + 1])) {\n if (!(nextStartTime.getTime() >= currentEndTime.getTime()) &&\n (util.resetTime(lastEndTime).getTime() >=\n util.resetTime(currentStartTime).getTime()) ||\n util.resetTime(lastEndTime).getTime() < util.resetTime(currentStartTime).getTime()) {\n this.parent.quickPopup.openRecurrenceValidationAlert('occurrenceAlert');\n return true;\n }\n else if (!(util.resetTime(currentStartTime).getTime() <\n util.resetTime(nextStartTime).getTime())) {\n this.parent.quickPopup.openRecurrenceValidationAlert('sameDayAlert');\n return true;\n }\n }\n return false;\n }\n else {\n var previousStartTime = new Date(+recurColl[index - 1][this.fields.startTime]);\n var previousEndTime = new Date(+recurColl[index - 1][this.fields.endTime]);\n if (index === recurColl.length - 1) {\n if (util.resetTime(new Date(+recurColl[(recurColl.length - 1) - index][this.fields.startTime])).getTime() >\n util.resetTime(currentStartTime).getTime()) {\n this.parent.quickPopup.openRecurrenceValidationAlert('occurrenceAlert');\n return true;\n }\n else if (!((previousEndTime.getTime() <= currentStartTime.getTime()) &&\n (util.resetTime(currentStartTime).getTime() > util.resetTime(previousStartTime).getTime()))) {\n this.parent.quickPopup.openRecurrenceValidationAlert('sameDayAlert');\n return true;\n }\n }\n else if (!(((util.resetTime(previousStartTime).getTime() < util.resetTime(currentStartTime).getTime()) ||\n util.resetTime(new Date(+recurColl[0][this.fields.startTime])).getTime() >\n util.resetTime(currentStartTime).getTime()) &&\n ((util.resetTime(nextStartTime).getTime() > util.resetTime(currentStartTime).getTime()) ||\n (lastEndTime.getTime() < currentStartTime.getTime())))) {\n this.parent.quickPopup.openRecurrenceValidationAlert('sameDayAlert');\n return true;\n }\n else if (!(previousEndTime.getTime() <= currentStartTime.getTime() && nextStartTime.getTime() >=\n currentEndTime.getTime()) || (util.resetTime(nextEndTime).getTime() <\n util.resetTime(currentStartTime).getTime()) ||\n (util.resetTime(previousStartTime).getTime() > util.resetTime(currentEndTime).getTime()) ||\n !(util.resetTime(currentStartTime).getTime() < util.resetTime(nextStartTime).getTime())) {\n this.parent.quickPopup.openRecurrenceValidationAlert('occurrenceAlert');\n return true;\n }\n }\n return false;\n };\n EventWindow.prototype.resourceSaveEvent = function (eventObj, action, currentAction) {\n var _this = this;\n var lastResourceData = this.parent.resourceBase.resourceCollection.slice(-1)[0];\n var resourceData = eventObj[lastResourceData.field];\n resourceData = (resourceData instanceof Array) ? resourceData.reverse() : [resourceData].reverse();\n var lastLevel = this.parent.resourceBase.lastResourceLevel;\n var eventList = [];\n var _loop_2 = function (i) {\n var events = extend({}, eventObj, null, true);\n events[this_2.fields.id] = this_2.parent.eventBase.getEventMaxID();\n var temp = [];\n var addValues = function () {\n if (action === 'Save' && i === resourceData.length - 1) {\n if (temp.length > 0) {\n temp[0][_this.fields.id] = eventObj[_this.fields.id];\n for (var k = 1; k < temp.length; k++) {\n temp[parseInt(k.toString(), 10)][_this.fields.id] = _this.parent.eventBase.getEventMaxID(i);\n eventList.push(temp[parseInt(k.toString(), 10)]);\n _this.parent.saveEvent(temp[0], currentAction);\n }\n }\n else {\n events[_this.fields.id] = eventObj[_this.fields.id];\n _this.parent.saveEvent(events, currentAction);\n }\n }\n else {\n if (temp.length > 0) {\n for (var j = 0; j < temp.length; j++) {\n temp[parseInt(j.toString(), 10)][_this.fields.id] = _this.parent.eventBase.getEventMaxID(j);\n eventList.push(temp[parseInt(j.toString(), 10)]);\n }\n }\n else {\n events[_this.fields.id] = _this.parent.eventBase.getEventMaxID(i);\n eventList.push(events);\n }\n }\n };\n if (this_2.parent.activeViewOptions.group.byGroupID && (!isNullOrUndefined(lastLevel))) {\n var lastResource = lastResourceData.dataSource;\n var resCol = this_2.parent.resourceCollection;\n var index = void 0;\n if (resCol.length > 1) {\n index =\n util.findIndexInData(lastResource, lastResourceData.idField, resourceData[parseInt(i.toString(), 10)], events, resCol);\n }\n else {\n index =\n util.findIndexInData(lastResource, lastResourceData.idField, resourceData[parseInt(i.toString(), 10)]);\n }\n if (index < 0) {\n return { value: void 0 };\n }\n var groupId_1 = lastResource[parseInt(index.toString(), 10)][lastResourceData.groupIDField];\n var filter = lastLevel.filter(function (obj) { return obj.resourceData[lastResourceData.idField] ===\n resourceData[parseInt(i.toString(), 10)]; }).\n filter(function (obj) { return obj.resourceData[lastResourceData.groupIDField] === groupId_1; })[0];\n var groupOrder = filter.groupOrder;\n for (var index_1 = 0; index_1 < this_2.parent.resourceBase.resourceCollection.length; index_1++) {\n var field = this_2.parent.resourceBase.resourceCollection[parseInt(index_1.toString(), 10)].field;\n events[\"\" + field] = (groupOrder[parseInt(index_1.toString(), 10)] instanceof Array) ? groupOrder[parseInt(index_1.toString(), 10)][0] :\n groupOrder[parseInt(index_1.toString(), 10)];\n }\n addValues();\n }\n else {\n for (var index = 0; index < this_2.parent.resourceBase.resourceCollection.length - 1; index++) {\n var field = this_2.parent.resourceBase.resourceCollection[parseInt(index.toString(), 10)].field;\n if (events[\"\" + field] instanceof Array && events[\"\" + field].length > 1) {\n for (var k = 0; k < events[\"\" + field].length; k++) {\n var event_3 = extend({}, events, null, true);\n event_3[\"\" + field] = eventObj[\"\" + field][parseInt(k.toString(), 10)];\n event_3[lastResourceData.field] = resourceData[parseInt(i.toString(), 10)];\n temp.push(event_3);\n }\n }\n else {\n if (temp.length === 0) {\n events[\"\" + field] = (eventObj[\"\" + field] instanceof Array) ?\n eventObj[\"\" + field][0] : eventObj[\"\" + field];\n events[lastResourceData.field] = resourceData[parseInt(i.toString(), 10)];\n }\n else {\n for (var l = 0; l < temp.length; l++) {\n temp[parseInt(l.toString(), 10)][\"\" + field] = (eventObj[\"\" + field] instanceof Array) ?\n eventObj[\"\" + field][0] : eventObj[\"\" + field];\n }\n }\n }\n }\n events[lastResourceData.field] = resourceData[parseInt(i.toString(), 10)];\n addValues();\n }\n };\n var this_2 = this;\n for (var i = 0; i < resourceData.length; i++) {\n var state_1 = _loop_2(i);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n if (eventList.length > 0) {\n for (var _i = 0, eventList_1 = eventList; _i < eventList_1.length; _i++) {\n var event_4 = eventList_1[_i];\n event_4[this.fields.recurrenceException] = null;\n event_4[this.fields.recurrenceID] = null;\n }\n this.parent.addEvent(eventList);\n }\n };\n EventWindow.prototype.getEventIdFromForm = function () {\n return this.element.querySelector('.' + cls.FORM_CLASS).getAttribute('data-id');\n };\n EventWindow.prototype.getFormElements = function (className) {\n var elements = [];\n if (className === cls.EVENT_WINDOW_DIALOG_CLASS) {\n elements = [].slice.call(this.element.querySelectorAll('.' + EVENT_FIELD));\n }\n else {\n elements = [].slice.call(this.parent.element.querySelectorAll('.' + className + ' .' + EVENT_FIELD));\n }\n return elements;\n };\n EventWindow.prototype.getValueFromElement = function (element) {\n var value;\n if (element.classList.contains('e-datepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-datetimepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-dropdownlist')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-multiselect')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-checkbox')) {\n value = element.ej2_instances[0].checked;\n }\n else {\n if (element.type === 'checkbox') {\n value = element.checked;\n }\n else {\n value = this.parent.enableHtmlSanitizer ?\n SanitizeHtmlHelper.sanitize(element.value) : element.value;\n }\n }\n return value;\n };\n EventWindow.prototype.setValueToElement = function (element, value) {\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-datetimepicker')) {\n var instance = element.ej2_instances[0];\n if (instance.element.classList.contains(cls.EVENT_WINDOW_START_CLASS)) {\n this.eventWindowTime.startTime = new Date('' + value);\n }\n else {\n this.eventWindowTime.endTime = new Date('' + value);\n }\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-multiselect')) {\n var instance = element.ej2_instances[0];\n instance.value = [];\n instance.value = ((value instanceof Array) ? value : [value]);\n instance.dataBind();\n }\n else if (element.classList.contains('e-checkbox')) {\n var instance = element.ej2_instances[0];\n instance.checked = value;\n instance.dataBind();\n }\n else {\n if (element.type !== 'checkbox') {\n element.value = value || '';\n }\n else {\n element.checked = value;\n }\n }\n };\n EventWindow.prototype.setDefaultValueToElement = function (element) {\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = this.parent.getCurrentTime();\n instance.dataBind();\n }\n else if (element.classList.contains('e-datetimepicker')) {\n var instance = element.ej2_instances[0];\n var dateValue = this.parent.getCurrentTime();\n this.eventWindowTime = { startTime: dateValue, endTime: dateValue };\n instance.value = dateValue;\n instance.dataBind();\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.value = null;\n instance.dataBind();\n }\n else if (element.classList.contains('e-multiselect')) {\n var instance = element.ej2_instances[0];\n instance.value = [];\n instance.dataBind();\n }\n else if (element.classList.contains('e-checkbox')) {\n var instance = element.ej2_instances[0];\n instance.checked = false;\n instance.dataBind();\n }\n else {\n if (element.type === 'checkbox') {\n element.checked = false;\n }\n else {\n element.value = '';\n }\n }\n };\n EventWindow.prototype.getInstance = function (className) {\n var element = this.element.querySelector('.' + className);\n return element ? element.ej2_instances[0] : null;\n };\n EventWindow.prototype.eventDelete = function (event) {\n if (this.isEnterKey) {\n this.isEnterKey = false;\n return;\n }\n switch (this.parent.currentAction) {\n case 'EditOccurrence':\n if (!isNullOrUndefined(this.parent.activeEventData.event[this.parent.eventFields.recurrenceRule])) {\n this.parent.currentAction = 'DeleteOccurrence';\n }\n else {\n this.parent.currentAction = 'Delete';\n }\n break;\n case 'EditSeries':\n this.parent.currentAction = 'DeleteSeries';\n break;\n case 'Save':\n this.parent.currentAction = 'Delete';\n break;\n case 'EditFollowingEvents':\n if (!isNullOrUndefined(this.parent.activeEventData.event[this.parent.eventFields.recurrenceRule])) {\n this.parent.currentAction = 'DeleteFollowingEvents';\n }\n break;\n }\n this.dialogEvent = event;\n this.isCrudAction = false;\n this.dialogObject.hide();\n this.parent.quickPopup.openDeleteAlert();\n };\n EventWindow.prototype.getRecurrenceEditorInstance = function () {\n if (this.parent.isAdaptive && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n return this.recurrenceEditor;\n };\n EventWindow.prototype.destroyComponents = function () {\n var formElements = this.getFormElements(cls.EVENT_WINDOW_DIALOG_CLASS);\n for (var _i = 0, formElements_3 = formElements; _i < formElements_3.length; _i++) {\n var element = formElements_3[_i];\n var instance = void 0;\n if (element.classList.contains('e-datetimepicker')) {\n instance = element.ej2_instances;\n }\n else if (element.classList.contains('e-datepicker')) {\n instance = element.ej2_instances;\n }\n else if (element.classList.contains('e-checkbox')) {\n instance = element.ej2_instances;\n }\n else if (element.classList.contains('e-dropdownlist')) {\n instance = element.ej2_instances;\n }\n else if (element.classList.contains('e-multiselect')) {\n instance = element.ej2_instances;\n }\n else if (element.classList.contains('e-numerictextbox')) {\n instance = element.ej2_instances;\n }\n if (instance && instance[0]) {\n instance[0].destroy();\n }\n }\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n };\n EventWindow.prototype.detachComponents = function () {\n var formElements = this.getFormElements(cls.EVENT_WINDOW_DIALOG_CLASS);\n for (var _i = 0, formElements_4 = formElements; _i < formElements_4.length; _i++) {\n var element = formElements_4[_i];\n detach(element);\n }\n };\n EventWindow.prototype.destroy = function (isIgnore) {\n if (this.parent && !this.parent.isDestroyed) {\n this.parent.resetTemplates(['editorTemplate']);\n }\n this.destroyComponents();\n if (this.recurrenceEditor) {\n this.recurrenceEditor.destroy();\n detach(this.recurrenceEditor.element);\n this.recurrenceEditor = null;\n }\n if (this.fieldValidator) {\n this.fieldValidator.destroy();\n this.fieldValidator = null;\n }\n if (this.repeatDialogObject) {\n this.repeatDialogObject.destroy();\n this.repeatDialogObject = null;\n }\n this.detachComponents();\n if (this.dialogObject) {\n if (this.dialogObject.element) {\n var form = this.dialogObject.element.querySelector('form');\n util.removeChildren(form);\n detach(form);\n EventHandler.remove(this.dialogObject.element, 'keydown', this.preventEventSave);\n }\n this.dialogObject.destroy();\n this.dialogObject = null;\n }\n if (this.element) {\n remove(this.element);\n this.element = null;\n }\n if (!isIgnore) {\n this.l10n = null;\n this.parent = null;\n this.fields = null;\n this.buttonObj = null;\n this.repeatStatus = null;\n this.eventWindowTime = null;\n this.dialogEvent = null;\n }\n };\n return EventWindow;\n}());\nexport { EventWindow };\n","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","import { isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { VirtualScroll } from '../actions/virtual-scroll';\nimport { EventTooltip } from '../popups/event-tooltip';\nimport * as cls from '../base/css-constant';\n/**\n * Schedule DOM rendering\n */\nvar Render = /** @class */ (function () {\n function Render(parent) {\n this.parent = parent;\n }\n Render.prototype.render = function (viewName, isDataRefresh) {\n if (isDataRefresh === void 0) { isDataRefresh = true; }\n this.initializeLayout(viewName);\n if (this.parent.activeView && isDataRefresh) {\n this.parent.crudModule.refreshDataManager();\n }\n };\n Render.prototype.initializeLayout = function (viewName) {\n if (this.parent.activeView) {\n var templates = [\n 'cellTemplate', 'eventTemplate', 'tooltipTemplate', 'majorSlotTemplate', 'minorSlotTemplate',\n 'headerTooltipTemplate', 'dateHeaderTemplate', 'dayHeaderTemplate', 'monthHeaderTemplate',\n 'headerIndentTemplate', 'resourceHeaderTemplate', 'cellHeaderTemplate', 'dateRangeTemplate'\n ];\n this.parent.resetTemplates(templates);\n this.parent.activeView.removeEventListener();\n this.parent.activeView.destroy();\n }\n switch (viewName) {\n case 'Day':\n this.parent.activeView = this.parent.dayModule;\n break;\n case 'Week':\n this.parent.activeView = this.parent.weekModule;\n break;\n case 'WorkWeek':\n this.parent.activeView = this.parent.workWeekModule;\n break;\n case 'Month':\n this.parent.activeView = this.parent.monthModule;\n break;\n case 'Year':\n this.parent.activeView = this.parent.yearModule;\n break;\n case 'Agenda':\n this.parent.activeView = this.parent.agendaModule;\n break;\n case 'MonthAgenda':\n this.parent.activeView = this.parent.monthAgendaModule;\n break;\n case 'TimelineDay':\n this.parent.activeView = this.parent.timelineViewsModule;\n this.parent.activeView.viewClass = 'e-timeline-day-view';\n break;\n case 'TimelineWorkWeek':\n this.parent.activeView = this.parent.timelineViewsModule;\n this.parent.activeView.viewClass = 'e-timeline-work-week-view';\n break;\n case 'TimelineWeek':\n this.parent.activeView = this.parent.timelineViewsModule;\n this.parent.activeView.viewClass = 'e-timeline-week-view';\n break;\n case 'TimelineMonth':\n this.parent.activeView = this.parent.timelineMonthModule;\n break;\n case 'TimelineYear':\n this.parent.activeView = this.parent.timelineYearModule;\n break;\n }\n if (isNullOrUndefined(this.parent.activeView)) {\n var firstView = this.parent.viewCollections[0].option;\n if (firstView) {\n this.parent.setProperties({ currentView: firstView }, true);\n if (this.parent.headerModule) {\n this.parent.headerModule.updateActiveView();\n this.parent.headerModule.setCalendarView();\n }\n return this.initializeLayout(firstView);\n }\n throw Error('Inject required modules');\n }\n this.parent.activeView.viewIndex = this.parent.viewIndex;\n this.updateLabelText(viewName);\n this.parent.activeView.addEventListener();\n this.parent.activeView.getRenderDates();\n this.parent.uiStateValues.isGroupAdaptive = this.parent.activeViewOptions.group.resources.length > 0 &&\n (this.parent.enableAdaptiveUI && !this.parent.isAdaptive ||\n this.parent.isAdaptive && this.parent.activeViewOptions.group.enableCompactView);\n if (this.parent.virtualScrollModule) {\n this.parent.virtualScrollModule.destroy();\n this.parent.virtualScrollModule = null;\n }\n if ((['Agenda', 'MonthAgenda', 'Year', 'TimelineYear'].indexOf(this.parent.currentView) === -1 ||\n (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.orientation === 'Vertical'))\n && this.parent.activeViewOptions.allowVirtualScrolling\n && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.parent.virtualScrollModule = new VirtualScroll(this.parent);\n if (this.parent.activeView.isTimelineView()) {\n this.parent.uiStateValues.top = 0;\n }\n else {\n this.parent.virtualScrollModule.isHorizontalScroll = true;\n this.parent.uiStateValues.left = 0;\n }\n }\n this.updateHeader();\n this.parent.currentTimezoneDate = this.parent.getCurrentTime();\n this.parent.activeView.renderLayout(cls.CURRENT_PANEL_CLASS);\n this.parent.renderTemplates();\n if (this.parent.eventTooltip) {\n this.parent.eventTooltip.destroy();\n this.parent.eventTooltip = null;\n }\n if (this.parent.eventSettings.enableTooltip || (this.parent.activeViewOptions.group.resources.length > 0\n && this.parent.activeViewOptions.group.headerTooltipTemplate)) {\n this.parent.eventTooltip = new EventTooltip(this.parent);\n }\n };\n Render.prototype.updateHeader = function () {\n if (this.parent.headerModule) {\n this.parent.headerModule.setDayOfWeek(this.parent.activeViewOptions.firstDayOfWeek);\n if (this.parent.activeViewOptions.readonly) {\n addClass([this.parent.element], cls.READ_ONLY);\n }\n else if (this.parent.element.classList.contains(cls.READ_ONLY)) {\n removeClass([this.parent.element], cls.READ_ONLY);\n }\n this.parent.headerModule.updateDateRange();\n this.parent.headerModule.updateHeaderItems('remove');\n }\n };\n Render.prototype.updateLabelText = function (view) {\n var content = this.parent.activeView.getLabelText(view);\n this.parent.element.setAttribute('role', 'main');\n this.parent.element.setAttribute('aria-label', content);\n };\n return Render;\n}());\nexport { Render };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that represents the configuration of working hours related options of scheduler.\n */\nvar WorkHours = /** @class */ (function (_super) {\n __extends(WorkHours, _super);\n function WorkHours() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], WorkHours.prototype, \"highlight\", void 0);\n __decorate([\n Property('09:00')\n ], WorkHours.prototype, \"start\", void 0);\n __decorate([\n Property('18:00')\n ], WorkHours.prototype, \"end\", void 0);\n return WorkHours;\n}(ChildProperty));\nexport { WorkHours };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that represents the configuration of options related to timescale on scheduler.\n */\nvar TimeScale = /** @class */ (function (_super) {\n __extends(TimeScale, _super);\n function TimeScale() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], TimeScale.prototype, \"enable\", void 0);\n __decorate([\n Property(60)\n ], TimeScale.prototype, \"interval\", void 0);\n __decorate([\n Property(2)\n ], TimeScale.prototype, \"slotCount\", void 0);\n __decorate([\n Property()\n ], TimeScale.prototype, \"minorSlotTemplate\", void 0);\n __decorate([\n Property()\n ], TimeScale.prototype, \"majorSlotTemplate\", void 0);\n return TimeScale;\n}(ChildProperty));\nexport { TimeScale };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that defines the template options available to customize the quick popup of scheduler.\n */\nvar QuickInfoTemplates = /** @class */ (function (_super) {\n __extends(QuickInfoTemplates, _super);\n function QuickInfoTemplates() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], QuickInfoTemplates.prototype, \"templateType\", void 0);\n __decorate([\n Property()\n ], QuickInfoTemplates.prototype, \"header\", void 0);\n __decorate([\n Property()\n ], QuickInfoTemplates.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], QuickInfoTemplates.prototype, \"footer\", void 0);\n return QuickInfoTemplates;\n}(ChildProperty));\nexport { QuickInfoTemplates };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that represents the header rows related configurations on timeline views.\n */\nvar HeaderRows = /** @class */ (function (_super) {\n __extends(HeaderRows, _super);\n function HeaderRows() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], HeaderRows.prototype, \"option\", void 0);\n __decorate([\n Property()\n ], HeaderRows.prototype, \"template\", void 0);\n return HeaderRows;\n}(ChildProperty));\nexport { HeaderRows };\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',\n 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] === parentEvent[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 timezone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();\n if (timezone) {\n eventStartTime = this.parent.tzModule.remove(new Date(+eventStartTime.getTime()), timezone);\n }\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 { 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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configuration that applies on each appointment field options of scheduler.\n */\nvar FieldOptions = /** @class */ (function (_super) {\n __extends(FieldOptions, _super);\n function FieldOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldOptions.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"default\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"title\", void 0);\n __decorate([\n Property({})\n ], FieldOptions.prototype, \"validation\", void 0);\n return FieldOptions;\n}(ChildProperty));\nexport { FieldOptions };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { FieldOptions } from './field-options';\n/**\n * A class that holds the collection of event fields that requires to be mapped with the dataSource\n * fields along with its available configuration settings. Each field in it accepts both string and object\n * data type. When each of the field is assigned with simple `string` value, it is assumed that the dataSource field\n * name is mapped with it. If the `object` type is defined on each fields, then the validation related settings and mapping of\n * those fields with dataSource can be given altogether within it.\n */\nvar Field = /** @class */ (function (_super) {\n __extends(Field, _super);\n function Field() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Id')\n ], Field.prototype, \"id\", void 0);\n __decorate([\n Property('IsBlock')\n ], Field.prototype, \"isBlock\", void 0);\n __decorate([\n Complex({ name: 'Subject' }, FieldOptions)\n ], Field.prototype, \"subject\", void 0);\n __decorate([\n Complex({ name: 'StartTime' }, FieldOptions)\n ], Field.prototype, \"startTime\", void 0);\n __decorate([\n Complex({ name: 'EndTime' }, FieldOptions)\n ], Field.prototype, \"endTime\", void 0);\n __decorate([\n Complex({ name: 'StartTimezone' }, FieldOptions)\n ], Field.prototype, \"startTimezone\", void 0);\n __decorate([\n Complex({ name: 'EndTimezone' }, FieldOptions)\n ], Field.prototype, \"endTimezone\", void 0);\n __decorate([\n Complex({ name: 'Location' }, FieldOptions)\n ], Field.prototype, \"location\", void 0);\n __decorate([\n Complex({ name: 'Description' }, FieldOptions)\n ], Field.prototype, \"description\", void 0);\n __decorate([\n Complex({ name: 'IsAllDay' }, FieldOptions)\n ], Field.prototype, \"isAllDay\", void 0);\n __decorate([\n Complex({ name: 'RecurrenceID' }, FieldOptions)\n ], Field.prototype, \"recurrenceID\", void 0);\n __decorate([\n Complex({ name: 'RecurrenceRule' }, FieldOptions)\n ], Field.prototype, \"recurrenceRule\", void 0);\n __decorate([\n Complex({ name: 'RecurrenceException' }, FieldOptions)\n ], Field.prototype, \"recurrenceException\", void 0);\n __decorate([\n Property('IsReadonly')\n ], Field.prototype, \"isReadonly\", void 0);\n __decorate([\n Property('FollowingID')\n ], Field.prototype, \"followingID\", void 0);\n return Field;\n}(ChildProperty));\nexport { Field };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Field } from './fields';\n/**\n * Holds the configuration of event related options and dataSource binding to Schedule.\n */\nvar EventSettings = /** @class */ (function (_super) {\n __extends(EventSettings, _super);\n function EventSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], EventSettings.prototype, \"template\", void 0);\n __decorate([\n Property([])\n ], EventSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"query\", void 0);\n __decorate([\n Complex({}, Field)\n ], EventSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], EventSettings.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property('AllDayRow')\n ], EventSettings.prototype, \"spannedEventPlacement\", void 0);\n __decorate([\n Property(1)\n ], EventSettings.prototype, \"minimumEventDuration\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"tooltipTemplate\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"resourceColorField\", void 0);\n __decorate([\n Property(false)\n ], EventSettings.prototype, \"editFollowingEvents\", void 0);\n __decorate([\n Property(true)\n ], EventSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(true)\n ], EventSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(true)\n ], EventSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property(false)\n ], EventSettings.prototype, \"enableMaxHeight\", void 0);\n __decorate([\n Property(false)\n ], EventSettings.prototype, \"enableIndicator\", void 0);\n __decorate([\n Property(false)\n ], EventSettings.prototype, \"ignoreWhitespace\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"sortComparer\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"includeFiltersInQuery\", void 0);\n return EventSettings;\n}(ChildProperty));\nexport { EventSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that holds the resource grouping related configurations on Schedule.\n */\nvar Group = /** @class */ (function (_super) {\n __extends(Group, _super);\n function Group() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], Group.prototype, \"byDate\", void 0);\n __decorate([\n Property(true)\n ], Group.prototype, \"byGroupID\", void 0);\n __decorate([\n Property(false)\n ], Group.prototype, \"allowGroupEdit\", void 0);\n __decorate([\n Property([])\n ], Group.prototype, \"resources\", void 0);\n __decorate([\n Property(true)\n ], Group.prototype, \"enableCompactView\", void 0);\n __decorate([\n Property()\n ], Group.prototype, \"headerTooltipTemplate\", void 0);\n __decorate([\n Property(false)\n ], Group.prototype, \"hideNonWorkingDays\", void 0);\n return Group;\n}(ChildProperty));\nexport { Group };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that represents the resource related configurations and its data binding options.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Resources.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"title\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"name\", void 0);\n __decorate([\n Property(false)\n ], Resources.prototype, \"allowMultiple\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"query\", void 0);\n __decorate([\n Property('Id')\n ], Resources.prototype, \"idField\", void 0);\n __decorate([\n Property('Text')\n ], Resources.prototype, \"textField\", void 0);\n __decorate([\n Property('Expanded')\n ], Resources.prototype, \"expandedField\", void 0);\n __decorate([\n Property('GroupID')\n ], Resources.prototype, \"groupIDField\", void 0);\n __decorate([\n Property('Color')\n ], Resources.prototype, \"colorField\", void 0);\n __decorate([\n Property('StartHour')\n ], Resources.prototype, \"startHourField\", void 0);\n __decorate([\n Property('EndHour')\n ], Resources.prototype, \"endHourField\", void 0);\n __decorate([\n Property('WorkDays')\n ], Resources.prototype, \"workDaysField\", void 0);\n __decorate([\n Property('CssClass')\n ], Resources.prototype, \"cssClassField\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isUndefined, Browser, compile, isNullOrUndefined, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { rippleEffect, Animation, remove } from '@syncfusion/ej2-base';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { getElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, closest, matches, detach, select, selectAll, isVisible, append } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined as isNOU, Touch, getValue, setValue, extend, merge, attributes } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-treeview';\nvar CONTROL = 'e-control';\nvar COLLAPSIBLE = 'e-icon-collapsible';\nvar EXPANDABLE = 'e-icon-expandable';\nvar LISTITEM = 'e-list-item';\nvar LISTTEXT = 'e-list-text';\nvar LISTWRAP = 'e-text-wrap';\nvar IELISTWRAP = 'e-ie-wrap';\nvar PARENTITEM = 'e-list-parent';\nvar HOVER = 'e-hover';\nvar ACTIVE = 'e-active';\nvar LOAD = 'e-icons-spinner';\nvar PROCESS = 'e-process';\nvar ICON = 'e-icons';\nvar TEXTWRAP = 'e-text-content';\nvar INPUT = 'e-input';\nvar INPUTGROUP = 'e-input-group';\nvar TREEINPUT = 'e-tree-input';\nvar EDITING = 'e-editing';\nvar RTL = 'e-rtl';\nvar INTERACTION = 'e-interaction';\nvar DRAGITEM = 'e-drag-item';\nvar DROPPABLE = 'e-droppable';\nvar DRAGGING = 'e-dragging';\nvar SIBLING = 'e-sibling';\nvar DROPIN = 'e-drop-in';\nvar DROPNEXT = 'e-drop-next';\nvar DROPOUT = 'e-drop-out';\nvar NODROP = 'e-no-drop';\nvar FULLROWWRAP = 'e-fullrow-wrap';\nvar FULLROW = 'e-fullrow';\nvar SELECTED = 'e-selected';\nvar EXPANDED = 'e-expanded';\nvar NODECOLLAPSED = 'e-node-collapsed';\nvar DISABLE = 'e-disable';\nvar DROPCOUNT = 'e-drop-count';\nvar CHECK = 'e-check';\nvar INDETERMINATE = 'e-stop';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar RIPPLE = 'e-ripple';\nvar RIPPLEELMENT = 'e-ripple-element';\nvar FOCUS = 'e-node-focus';\nvar IMAGE = 'e-list-img';\nvar BIGGER = 'e-bigger';\nvar SMALL = 'e-small';\nvar CHILD = 'e-has-child';\nvar ITEM_ANIMATION_ACTIVE = 'e-animation-active';\nvar DISABLED = 'e-disabled';\nvar PREVENTSELECT = 'e-prevent';\nvar treeAriaAttr = {\n treeRole: 'group',\n itemRole: 'treeitem',\n listRole: 'group',\n itemText: '',\n wrapperRole: ''\n};\n/**\n * Configures the fields to bind to the properties of node in the TreeView component.\n */\nvar FieldsSettings = /** @class */ (function (_super) {\n __extends(FieldsSettings, _super);\n function FieldsSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('child')\n ], FieldsSettings.prototype, \"child\", void 0);\n __decorate([\n Property([])\n ], FieldsSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('expanded')\n ], FieldsSettings.prototype, \"expanded\", void 0);\n __decorate([\n Property('hasChildren')\n ], FieldsSettings.prototype, \"hasChildren\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldsSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldsSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('id')\n ], FieldsSettings.prototype, \"id\", void 0);\n __decorate([\n Property('imageUrl')\n ], FieldsSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldsSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('parentID')\n ], FieldsSettings.prototype, \"parentID\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"query\", void 0);\n __decorate([\n Property('selectable')\n ], FieldsSettings.prototype, \"selectable\", void 0);\n __decorate([\n Property('selected')\n ], FieldsSettings.prototype, \"selected\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"tableName\", void 0);\n __decorate([\n Property('text')\n ], FieldsSettings.prototype, \"text\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldsSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('navigateUrl')\n ], FieldsSettings.prototype, \"navigateUrl\", void 0);\n return FieldsSettings;\n}(ChildProperty));\nexport { FieldsSettings };\n/**\n * Configures animation settings for the TreeView component.\n */\nvar ActionSettings = /** @class */ (function (_super) {\n __extends(ActionSettings, _super);\n function ActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], ActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], ActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], ActionSettings.prototype, \"easing\", void 0);\n return ActionSettings;\n}(ChildProperty));\nexport { ActionSettings };\n/**\n * Configures the animation settings for expanding and collapsing nodes in TreeView.\n */\nvar NodeAnimationSettings = /** @class */ (function (_super) {\n __extends(NodeAnimationSettings, _super);\n function NodeAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"expand\", void 0);\n return NodeAnimationSettings;\n}(ChildProperty));\nexport { NodeAnimationSettings };\n/**\n * The TreeView component is used to represent hierarchical data in a tree like structure with advanced\n * functions to perform edit, drag and drop, selection with check-box, and more.\n * ```html\n *
\n * ```\n * ```typescript\n * let treeObj: TreeView = new TreeView();\n * treeObj.appendTo('#tree');\n * ```\n */\nvar TreeView = /** @class */ (function (_super) {\n __extends(TreeView, _super);\n function TreeView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isRefreshed = false;\n _this.preventExpand = false;\n _this.checkedElement = [];\n _this.disableNode = [];\n // eslint-disable-next-line\n _this.validArr = [];\n _this.validNodes = [];\n _this.expandChildren = [];\n _this.isFieldChange = false;\n _this.changeDataSource = false;\n _this.hasTemplate = false;\n _this.isFirstRender = false;\n // Specifies whether the node is dropped or not\n _this.isNodeDropped = false;\n _this.isInteracted = false;\n _this.isRightClick = false;\n _this.mouseDownStatus = false;\n return _this;\n }\n TreeView_1 = TreeView;\n /**\n * Get component name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n TreeView.prototype.getModuleName = function () {\n return 'treeview';\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n */\n TreeView.prototype.preRender = function () {\n var _this = this;\n this.checkActionNodes = [];\n this.parentNodeCheck = [];\n this.dragStartAction = false;\n this.isAnimate = false;\n this.keyConfigs = {\n escape: 'escape',\n end: 'end',\n enter: 'enter',\n f2: 'f2',\n home: 'home',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlDown: 'ctrl+downarrow',\n ctrlUp: 'ctrl+uparrow',\n ctrlEnter: 'ctrl+enter',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n ctrlA: 'ctrl+A',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftEnter: 'shift+enter',\n shiftHome: 'shift+home',\n shiftEnd: 'shift+end',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n csEnter: 'ctrl+shift+enter',\n csHome: 'ctrl+shift+home',\n csEnd: 'ctrl+shift+end',\n space: 'space',\n shiftSpace: 'shift+space',\n ctrlSpace: 'ctrl+space'\n };\n this.listBaseOption = {\n expandCollapse: true,\n showIcon: true,\n expandIconClass: EXPANDABLE,\n ariaAttributes: treeAriaAttr,\n expandIconPosition: 'Left',\n itemCreated: function (e) {\n _this.beforeNodeCreate(e);\n },\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n itemNavigable: this.fullRowNavigable\n };\n this.updateListProp(this.fields);\n this.aniObj = new Animation({});\n this.treeList = [];\n this.isLoaded = false;\n this.isInitalExpand = false;\n this.expandChildren = [];\n this.index = 0;\n this.setTouchClass();\n if (isNOU(this.selectedNodes)) {\n this.setProperties({ selectedNodes: [] }, true);\n }\n if (isNOU(this.checkedNodes)) {\n this.setProperties({ checkedNodes: [] }, true);\n }\n if (isNOU(this.expandedNodes)) {\n this.setProperties({ expandedNodes: [] }, true);\n }\n else {\n this.isInitalExpand = true;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - returns the persisted data\n * @hidden\n */\n TreeView.prototype.getPersistData = function () {\n var keyEntity = ['selectedNodes', 'checkedNodes', 'expandedNodes'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n TreeView.prototype.render = function () {\n this.initialRender = true;\n this.initialize();\n this.setDataBinding(false);\n this.setDisabledMode();\n this.setExpandOnType();\n if (!this.disabled) {\n this.setRipple();\n }\n this.wireEditingEvents(this.allowEditing);\n this.setDragAndDrop(this.allowDragAndDrop);\n if (!this.disabled) {\n this.wireEvents();\n }\n this.initialRender = false;\n this.renderComplete();\n };\n TreeView.prototype.initialize = function () {\n this.element.setAttribute('role', 'tree');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n this.setCssClass(null, this.cssClass);\n this.setEnableRtl();\n this.setFullRow(this.fullRowSelect);\n this.setTextWrap();\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n };\n TreeView.prototype.setDisabledMode = function () {\n if (this.disabled) {\n this.element.classList.add(DISABLED);\n }\n else {\n this.element.classList.remove(DISABLED);\n }\n };\n TreeView.prototype.setEnableRtl = function () {\n (this.enableRtl ? addClass : removeClass)([this.element], RTL);\n };\n TreeView.prototype.setRipple = function () {\n var tempStr = '.' + FULLROW + ',.' + TEXTWRAP;\n var rippleModel = {\n selector: tempStr,\n ignore: '.' + TEXTWRAP + ' > .' + ICON + ',.' + INPUTGROUP + ',.' + INPUT + ', .' + CHECKBOXWRAP\n };\n this.rippleFn = rippleEffect(this.element, rippleModel);\n var iconModel = {\n selector: '.' + TEXTWRAP + ' > .' + ICON,\n isCenterRipple: true\n };\n this.rippleIconFn = rippleEffect(this.element, iconModel);\n };\n TreeView.prototype.setFullRow = function (isEnabled) {\n (isEnabled ? addClass : removeClass)([this.element], FULLROWWRAP);\n };\n TreeView.prototype.setMultiSelect = function (isEnabled) {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (isEnabled) {\n firstUl.setAttribute('aria-multiselectable', 'true');\n }\n else {\n firstUl.removeAttribute('aria-multiselectable');\n }\n };\n // eslint-disable-next-line\n TreeView.prototype.templateComplier = function (template) {\n if (template) {\n this.hasTemplate = true;\n // eslint-disable-next-line\n var e = void 0;\n this.element.classList.add(INTERACTION);\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n this.element.classList.remove(INTERACTION);\n return undefined;\n };\n TreeView.prototype.setDataBinding = function (changeDataSource) {\n var _this = this;\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager) {\n /* eslint-disable */\n this.isOffline = this.fields.dataSource.dataSource.offline;\n if (this.fields.dataSource.ready) {\n this.fields.dataSource.ready.then(function (e) {\n /* eslint-disable */\n _this.isOffline = _this.fields.dataSource.dataSource.offline;\n if (_this.fields.dataSource instanceof DataManager && _this.isOffline) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n _this.renderItems(true);\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n }\n }).catch(function (e) {\n _this.trigger('actionFailure', { error: e });\n });\n }\n else {\n this.fields.dataSource.executeQuery(this.getQuery(this.fields)).then(function (e) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n if (changeDataSource) {\n _this.changeDataSource = true;\n }\n _this.renderItems(true);\n _this.changeDataSource = false;\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n }).catch(function (e) {\n _this.trigger('actionFailure', { error: e });\n });\n }\n }\n else {\n this.treeList.pop();\n if (isNOU(this.fields.dataSource)) {\n this.rootData = this.treeData = [];\n }\n else {\n this.treeData = JSON.parse(JSON.stringify(this.fields.dataSource));\n this.setRootData();\n }\n this.isNumberTypeId = this.getType();\n this.renderItems(false);\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.getQuery = function (mapper, value) {\n if (value === void 0) { value = null; }\n var columns = [];\n var query;\n if (!mapper.query) {\n query = new Query();\n var prop = this.getActualProperties(mapper);\n for (var _i = 0, _a = Object.keys(prop); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col !== 'dataSource' && col !== 'tableName' && col !== 'child' && !!mapper[col]\n && col !== 'url' && columns.indexOf(mapper[col]) === -1) {\n columns.push(mapper[col]);\n }\n }\n query.select(columns);\n if (prop.hasOwnProperty('tableName')) {\n query.from(mapper.tableName);\n }\n }\n else {\n query = mapper.query.clone();\n }\n ListBase.addSorting(this.sortOrder, mapper.text, query);\n if (!isNOU(value) && !isNOU(mapper.parentID)) {\n query.where(mapper.parentID, 'equal', (this.isNumberTypeId ? parseFloat(value) : value));\n }\n return query;\n };\n TreeView.prototype.getType = function () {\n return this.treeData[0] ? ((typeof getValue(this.fields.id, this.treeData[0]) === 'number') ? true : false) : false;\n };\n TreeView.prototype.setRootData = function () {\n this.dataType = this.getDataType(this.treeData, this.fields);\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n var rootItems = this.getChildNodes(this.treeData, undefined, true);\n if (isNOU(rootItems)) {\n this.rootData = [];\n }\n else {\n this.rootData = rootItems;\n }\n }\n else {\n this.rootData = this.treeData;\n }\n };\n TreeView.prototype.renderItems = function (isSorted) {\n /* eslint-disable */\n this.listBaseOption.ariaAttributes.level = 1;\n var sortedData = this.getSortedData(this.rootData);\n this.ulElement = ListBase.createList(this.createElement, isSorted ? this.rootData : sortedData, this.listBaseOption);\n this.element.appendChild(this.ulElement);\n var rootNodes = this.ulElement.querySelectorAll('.e-list-item');\n if (this.loadOnDemand === false) {\n var i = 0;\n while (i < rootNodes.length) {\n this.renderChildNodes(rootNodes[i], true, null, true);\n i++;\n }\n }\n var parentEle = selectAll('.' + PARENTITEM, this.element);\n if ((parentEle.length === 1 && (rootNodes && rootNodes.length !== 0)) || this.loadOnDemand) {\n this.finalizeNode(this.element);\n }\n this.parentNodeCheck = [];\n this.parentCheckData = [];\n this.updateCheckedStateFromDS();\n if (this.autoCheck && this.showCheckBox && !this.isLoaded) {\n this.updateParentCheckState();\n }\n };\n /**\n * Update the checkedNodes from datasource at initial rendering\n */\n TreeView.prototype.updateCheckedStateFromDS = function (id) {\n this.validNodes = [];\n if (this.treeData && this.showCheckBox) {\n if (this.dataType === 1) {\n var mapper = this.fields;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.isChecked, 'equal', true, false));\n for (var i = 0; i < resultData.length; i++) {\n var resultId = resultData[i][this.fields.id] ? resultData[i][this.fields.id].toString() : null;\n var resultPId = resultData[i][this.fields.parentID] ? resultData[i][this.fields.parentID].toString() : null;\n if (this.checkedNodes.indexOf(resultId) === -1 && !(this.isLoaded)) {\n this.checkedNodes.push(resultId);\n }\n if (resultData[i][this.fields.hasChildren]) {\n var id_1 = resultData[i][this.fields.id];\n var childData = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper.parentID, 'equal', id_1, false));\n for (var child = 0; child < childData.length; child++) {\n var childId = childData[child][this.fields.id] ? childData[child][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(childId) === -1 && this.autoCheck) {\n this.checkedNodes.push(childId);\n }\n }\n }\n }\n for (var i = 0; i < this.checkedNodes.length; i++) {\n var mapper_1 = this.fields;\n var checkState = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper_1.id, 'equal', this.checkedNodes[i], true));\n if (checkState[0] && this.autoCheck) {\n this.getCheckedNodeDetails(mapper_1, checkState);\n this.checkIndeterminateState(checkState[0]);\n }\n if (checkState.length > 0) {\n var checkedId = checkState[0][this.fields.id] ? checkState[0][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(checkedId) > -1 && this.validNodes.indexOf(checkedId) === -1) {\n this.validNodes.push(checkedId);\n }\n }\n var checkedData = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper_1.parentID, 'equal', this.checkedNodes[i], true));\n for (var index = 0; index < checkedData.length; index++) {\n var checkedId = checkedData[index][this.fields.id] ? checkedData[index][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(checkedId) === -1 && this.autoCheck) {\n this.checkedNodes.push(checkedId);\n }\n if (this.checkedNodes.indexOf(checkedId) > -1 && this.validNodes.indexOf(checkedId) === -1) {\n this.validNodes.push(checkedId);\n }\n }\n }\n }\n else if (this.dataType === 2 || (this.fields.dataSource instanceof DataManager &&\n this.isOffline)) {\n for (var index = 0; index < this.treeData.length; index++) {\n var fieldId = this.treeData[index][this.fields.id] ? this.treeData[index][this.fields.id].toString() : '';\n if (this.treeData[index][this.fields.isChecked] && !(this.isLoaded) && this.checkedNodes.indexOf(fieldId) === -1) {\n this.checkedNodes.push(fieldId);\n }\n if (this.checkedNodes.indexOf(fieldId) > -1 && this.validNodes.indexOf(fieldId) === -1) {\n this.validNodes.push(fieldId);\n }\n var childItems = getValue(this.fields.child.toString(), this.treeData[index]);\n if (childItems) {\n this.updateChildCheckState(childItems, this.treeData[index]);\n }\n }\n this.validNodes = (this.enablePersistence) ? this.checkedNodes : this.validNodes;\n }\n this.setProperties({ checkedNodes: this.validNodes }, true);\n }\n };\n /**\n * To check whether the list data has sub child and to change the parent check state accordingly\n */\n TreeView.prototype.getCheckedNodeDetails = function (mapper, checkNodes) {\n var id = checkNodes[0][this.fields.parentID] ? checkNodes[0][this.fields.parentID].toString() : null;\n var count = 0;\n var element = this.element.querySelector('[data-uid=\"' + checkNodes[0][this.fields.id] + '\"]');\n var parentEle = this.element.querySelector('[data-uid=\"' + checkNodes[0][this.fields.parentID] + '\"]');\n if (!element && !parentEle) {\n var len = this.parentNodeCheck.length;\n if (this.parentNodeCheck.indexOf(id) === -1) {\n this.parentNodeCheck.push(id);\n }\n var childNodes = this.getChildNodes(this.treeData, id);\n for (var i = 0; i < childNodes.length; i++) {\n var childId = childNodes[i][this.fields.id] ? childNodes[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n if (count === childNodes.length && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n }\n var preElement = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper.id, 'equal', id, true));\n this.getCheckedNodeDetails(mapper, preElement);\n }\n else if (parentEle) {\n var check = select('.' + CHECK, parentEle);\n if (!check) {\n this.changeState(parentEle, 'indeterminate', null, true, true);\n }\n }\n };\n /**\n * Update the checkedNodes and parent state when all the child Nodes are in checkedstate at initial rendering\n */\n TreeView.prototype.updateParentCheckState = function () {\n var indeterminate = selectAll('.' + INDETERMINATE, this.element);\n var childCheckedElement;\n for (var i = 0; i < indeterminate.length; i++) {\n var node = closest(indeterminate[i], '.' + LISTITEM);\n var nodeId = node.getAttribute('data-uid').toString();\n if (this.dataType === 1) {\n childCheckedElement = new DataManager(this.treeData).\n executeLocal(new Query().where(this.fields.parentID, 'equal', nodeId, true));\n }\n else {\n childCheckedElement = this.getChildNodes(this.treeData, nodeId);\n }\n var count = 0;\n if (childCheckedElement) {\n for (var j = 0; j < childCheckedElement.length; j++) {\n var childId = childCheckedElement[j][this.fields.id].toString();\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n if (count === childCheckedElement.length) {\n var nodeCheck = node.getAttribute('data-uid');\n if (this.checkedNodes.indexOf(nodeCheck) === -1) {\n this.checkedNodes.push(nodeCheck);\n }\n this.changeState(node, 'check', null, true, true);\n }\n else if (count === 0 && this.checkedNodes.length === 0) {\n this.changeState(node, 'uncheck', null, true, true);\n }\n }\n }\n };\n /**\n * Change the parent to indeterminate state whenever the child is in checked state which is not rendered in DOM\n */\n TreeView.prototype.checkIndeterminateState = function (data) {\n var element;\n if (this.dataType === 1) {\n element = this.element.querySelector('[data-uid=\"' + data[this.fields.parentID] + '\"]');\n }\n else {\n element = this.element.querySelector('[data-uid=\"' + data[this.fields.id] + '\"]');\n }\n if (element) {\n var ariaChecked = element.querySelector('.' + CHECKBOXWRAP).getAttribute('aria-checked');\n if (ariaChecked !== 'true') {\n this.changeState(element, 'indeterminate', null, true, true);\n }\n }\n else if (this.dataType === 2) {\n var len = this.parentNodeCheck.length;\n if (this.parentNodeCheck.indexOf(data[this.fields.id].toString()) === -1) {\n this.parentNodeCheck.push(data[this.fields.id].toString());\n }\n }\n };\n /**\n * Update the checkedNodes for child and subchild from datasource (hierarchical datasource) at initial rendering\n */\n TreeView.prototype.updateChildCheckState = function (childItems, treeData) {\n var count = 0;\n var checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : '';\n for (var index = 0; index < childItems.length; index++) {\n var checkedChild = childItems[index][this.fields.id] ? childItems[index][this.fields.id].toString() : '';\n if (childItems[index][this.fields.isChecked] && !(this.isLoaded) && this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n }\n if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1 && this.autoCheck) {\n this.checkedNodes.push(checkedChild);\n }\n if (this.checkedNodes.indexOf(checkedChild) !== -1 && this.autoCheck) {\n count++;\n }\n if (this.checkedNodes.indexOf(checkedChild) > -1 && this.validNodes.indexOf(checkedChild) === -1) {\n this.validNodes.push(checkedChild);\n }\n var subChildItems = getValue(this.fields.child.toString(), childItems[index]);\n if (subChildItems && subChildItems.length) {\n if (this.parentCheckData.indexOf(treeData) === -1)\n this.parentCheckData.push(treeData);\n this.updateChildCheckState(subChildItems, childItems[index]);\n }\n if (count === childItems.length && this.autoCheck && this.checkedNodes.indexOf(checkedParent) === -1) {\n this.checkedNodes.push(checkedParent);\n }\n }\n if (count !== 0 && this.autoCheck) {\n this.checkIndeterminateState(treeData);\n for (var len = 0; len < this.parentCheckData.length; len++) {\n if ((treeData !== this.parentCheckData[len]) && (this.parentCheckData[len])) {\n this.checkIndeterminateState(this.parentCheckData[len]);\n }\n }\n }\n this.parentCheckData = [];\n };\n TreeView.prototype.beforeNodeCreate = function (e) {\n if (this.showCheckBox) {\n var checkboxEle = createCheckBox(this.createElement, true, { cssClass: this.touchClass });\n checkboxEle.setAttribute('role', 'checkbox');\n checkboxEle.setAttribute('aria-label', 'checkbox');\n var icon = select('div.' + ICON, e.item);\n var id = e.item.getAttribute('data-uid');\n e.item.childNodes[0].insertBefore(checkboxEle, e.item.childNodes[0].childNodes[isNOU(icon) ? 0 : 1]);\n var checkValue = getValue(e.fields.isChecked, e.curData);\n if (this.checkedNodes.indexOf(id) > -1) {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else if (!isNOU(checkValue) && checkValue.toString() === 'true') {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else {\n checkboxEle.setAttribute('aria-checked', 'false');\n }\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n EventHandler.add(frame, 'mousedown', this.frameMouseHandler, this);\n EventHandler.add(frame, 'mouseup', this.frameMouseHandler, this);\n }\n if (this.fullRowSelect) {\n this.createFullRow(e.item);\n }\n if (this.allowMultiSelection && !e.item.classList.contains(SELECTED)) {\n e.item.setAttribute('aria-selected', 'false');\n }\n var fields = e.fields;\n this.addActionClass(e, fields.selected, SELECTED);\n this.addActionClass(e, fields.expanded, EXPANDED);\n e.item.setAttribute(\"tabindex\", \"-1\");\n EventHandler.add(e.item, 'focus', this.focusIn, this);\n if (!isNOU(this.nodeTemplateFn)) {\n var textEle = e.item.querySelector('.' + LISTTEXT);\n var dataId = e.item.getAttribute('data-uid');\n textEle.innerHTML = '';\n this.renderNodeTemplate(e.curData, textEle, dataId);\n }\n var eventArgs = {\n node: e.item,\n nodeData: e.curData,\n text: e.text,\n };\n if (!this.isRefreshed) {\n this.trigger('drawNode', eventArgs);\n if (e.curData[this.fields.selectable] === false && !this.showCheckBox) {\n e.item.classList.add(PREVENTSELECT);\n e.item.firstElementChild.setAttribute('style', 'cursor: not-allowed');\n }\n }\n };\n TreeView.prototype.frameMouseHandler = function (e) {\n var rippleSpan = select('.' + CHECKBOXRIPPLE, e.target.parentElement);\n rippleMouseHandler(e, rippleSpan);\n };\n TreeView.prototype.addActionClass = function (e, action, cssClass) {\n var data = e.curData;\n var actionValue = getValue(action, data);\n if (!isNOU(actionValue) && actionValue.toString() !== 'false') {\n e.item.classList.add(cssClass);\n }\n };\n TreeView.prototype.getDataType = function (ds, mapper) {\n if (this.fields.dataSource instanceof DataManager) {\n for (var i = 0; i < ds.length; i++) {\n if (this.isOffline) {\n if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i])) && !isNOU(getValue(mapper.parentID, ds[i]))) {\n return 1;\n }\n }\n else if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i]))) {\n return 1;\n }\n }\n return 2;\n }\n for (var i = 0, len = ds.length; i < len; i++) {\n if ((typeof mapper.child === 'string') && !isNOU(getValue(mapper.child, ds[i]))) {\n return 2;\n }\n if (!isNOU(getValue(mapper.parentID, ds[i])) || !isNOU(getValue(mapper.hasChildren, ds[i]))) {\n return 1;\n }\n }\n return 1;\n };\n TreeView.prototype.getGroupedData = function (dataSource, groupBy) {\n var cusQuery = new Query().group(groupBy);\n var ds = ListBase.getDataSource(dataSource, cusQuery);\n var grpItem = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n grpItem.push(itemObj);\n }\n return grpItem;\n };\n TreeView.prototype.getSortedData = function (list) {\n if (list && this.sortOrder !== 'None') {\n list = ListBase.getDataSource(list, ListBase.addSorting(this.sortOrder, this.fields.text));\n }\n return list;\n };\n TreeView.prototype.finalizeNode = function (element) {\n var _this = this;\n var iNodes = selectAll('.' + IMAGE, element);\n for (var k = 0; k < iNodes.length; k++) {\n iNodes[k].setAttribute('alt', IMAGE);\n }\n if (this.isLoaded) {\n var sNodes = selectAll('.' + SELECTED, element);\n for (var i = 0; i < sNodes.length; i++) {\n this.selectNode(sNodes[i], null);\n break;\n }\n removeClass(sNodes, SELECTED);\n }\n var cNodes = selectAll('.' + LISTITEM + ':not(.' + EXPANDED + ')', element);\n for (var j = 0; j < cNodes.length; j++) {\n var icon = select('div.' + ICON, cNodes[j]);\n if (icon && icon.classList.contains(EXPANDABLE)) {\n this.disableExpandAttr(cNodes[j]);\n }\n }\n var eNodes = selectAll('.' + EXPANDED, element);\n if (!this.loadOnDemand) {\n this.isInitalExpand = this.treeData.filter(function (e) { return e[_this.fields.expanded] == true; }).length > 0 ? true : this.isInitalExpand;\n }\n if (!this.isInitalExpand) {\n for (var i = 0; i < eNodes.length; i++) {\n this.renderChildNodes(eNodes[i]);\n }\n }\n removeClass(eNodes, EXPANDED);\n this.updateList();\n if (this.isLoaded) {\n this.updateCheckedProp();\n }\n };\n TreeView.prototype.updateCheckedProp = function () {\n if (this.showCheckBox) {\n var nodes = [].concat([], this.checkedNodes);\n this.setProperties({ checkedNodes: nodes }, true);\n }\n };\n TreeView.prototype.ensureIndeterminate = function () {\n if (this.autoCheck) {\n var liElement = selectAll('li', this.element);\n var ulElement = void 0;\n for (var i = 0; i < liElement.length; i++) {\n if (liElement[i].classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, liElement[i]);\n if (ulElement) {\n this.ensureParentCheckState(liElement[i]);\n }\n else {\n this.ensureChildCheckState(liElement[i]);\n }\n }\n }\n }\n else {\n var indeterminate = selectAll('.' + INDETERMINATE, this.element);\n for (var i = 0; i < indeterminate.length; i++) {\n indeterminate[i].classList.remove(INDETERMINATE);\n }\n }\n };\n TreeView.prototype.ensureParentCheckState = function (element) {\n if (!isNOU(element)) {\n if (element.classList.contains(ROOT)) {\n return;\n }\n var ulElement = element;\n if (element.classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, element);\n }\n var checkedNodes = selectAll('.' + CHECK, ulElement);\n var indeterminateNodes = selectAll('.' + INDETERMINATE, ulElement);\n var nodes = selectAll('.' + LISTITEM, ulElement);\n var checkBoxEle = element.getElementsByClassName(CHECKBOXWRAP)[0];\n if (nodes.length === checkedNodes.length) {\n this.changeState(checkBoxEle, 'check', null, true, true);\n }\n else if (checkedNodes.length > 0 || indeterminateNodes.length > 0) {\n this.changeState(checkBoxEle, 'indeterminate', null, true, true);\n }\n else if (checkedNodes.length === 0) {\n this.changeState(checkBoxEle, 'uncheck', null, true, true);\n }\n var parentUL = closest(element, '.' + PARENTITEM);\n if (!isNOU(parentUL)) {\n var currentParent = closest(parentUL, '.' + LISTITEM);\n this.ensureParentCheckState(currentParent);\n }\n }\n };\n TreeView.prototype.ensureChildCheckState = function (element, e) {\n if (!isNOU(element)) {\n var childElement = select('.' + PARENTITEM, element);\n var checkBoxes = void 0;\n if (!isNOU(childElement)) {\n checkBoxes = selectAll('.' + CHECKBOXWRAP, childElement);\n var isChecked = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n var parentCheck = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(INDETERMINATE);\n var childCheck = childElement.querySelectorAll('li');\n var expandState = childElement.parentElement.getAttribute('aria-expanded');\n var checkedState = void 0;\n for (var index = 0; index < checkBoxes.length; index++) {\n var childId = childCheck[index].getAttribute('data-uid');\n if (!isNOU(this.currentLoadData) && !isNOU(getValue(this.fields.isChecked, this.currentLoadData[index]))) {\n checkedState = getValue(this.fields.isChecked, this.currentLoadData[index]) ? 'check' : 'uncheck';\n if (this.ele !== -1) {\n checkedState = isChecked ? 'check' : 'uncheck';\n }\n if ((checkedState === 'uncheck') && (!isUndefined(this.parentNodeCheck) && this.autoCheck\n && this.parentNodeCheck.indexOf(childId) !== -1)) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n checkedState = 'indeterminate';\n }\n }\n else {\n var isNodeChecked = checkBoxes[index].getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n if (isChecked) {\n checkedState = 'check';\n }\n else if (isNodeChecked && !this.isLoaded) {\n checkedState = 'check';\n }\n else if (this.checkedNodes.indexOf(childId) !== -1 && this.isLoaded && (parentCheck || isChecked)) {\n checkedState = 'check';\n }\n else if (childCheck[index].classList.contains(CHILD) && (!isUndefined(this.parentNodeCheck) && this.autoCheck\n && (isChecked || parentCheck) && this.parentNodeCheck.indexOf(childId) !== -1)) {\n checkedState = 'indeterminate';\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n }\n else if (this.dataType === 1 && (!isUndefined(this.parentNodeCheck) && this.autoCheck &&\n (isChecked || parentCheck) && this.parentNodeCheck.indexOf(childId) !== -1)) {\n checkedState = 'indeterminate';\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n }\n else {\n checkedState = 'uncheck';\n }\n }\n this.changeState(checkBoxes[index], checkedState, e, true, true);\n }\n }\n if (this.autoCheck && this.isLoaded) {\n this.updateParentCheckState();\n }\n }\n };\n TreeView.prototype.doCheckBoxAction = function (nodes, doCheck) {\n var li = selectAll('.' + LISTITEM, this.element);\n if (!isNOU(nodes)) {\n for (var len = nodes.length; len >= 0; len--) {\n var liEle = void 0;\n if (nodes.length === 1) {\n liEle = this.getElement(nodes[len - 1]);\n }\n else {\n liEle = this.getElement(nodes[len]);\n }\n if (isNOU(liEle)) {\n var node = void 0;\n node = nodes[len - nodes.length] ? nodes[len - nodes.length].toString() : nodes[len] ? nodes[len].toString() : null;\n if (node !== '' && doCheck && node) {\n this.setValidCheckedNode(node);\n this.dynamicCheckState(node, doCheck);\n }\n else if (this.checkedNodes.indexOf(node) !== -1 && node !== '' && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(node), 1);\n var childItems = this.getChildNodes(this.treeData, node);\n if (childItems) {\n for (var i = 0; i < childItems.length; i++) {\n var id = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(id) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(id), 1);\n var ele = this.element.querySelector('[data-uid=\"' + id + '\"]');\n if (ele) {\n this.changeState(ele, 'uncheck', null);\n }\n }\n }\n if (this.parentNodeCheck.indexOf(node) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(node), 1);\n }\n }\n if (node) {\n this.dynamicCheckState(node, doCheck);\n }\n this.updateField(this.treeData, this.fields, node, 'isChecked', null);\n }\n continue;\n }\n var checkBox = select('.' + PARENTITEM + ' .' + CHECKBOXWRAP, liEle);\n this.validateCheckNode(checkBox, !doCheck, liEle, null);\n }\n }\n else {\n var checkBoxes = selectAll('.' + CHECKBOXWRAP, this.element);\n if (this.loadOnDemand) {\n for (var index = 0; index < checkBoxes.length; index++) {\n this.updateFieldChecked(checkBoxes[index], doCheck);\n this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck', null, null, null, doCheck);\n }\n }\n else {\n for (var index = 0; index < checkBoxes.length; index++) {\n this.updateFieldChecked(checkBoxes[index], doCheck);\n this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck');\n }\n }\n }\n if (nodes) {\n for (var j = 0; j < nodes.length; j++) {\n var node = nodes[j] ? nodes[j].toString() : '';\n if (!doCheck) {\n this.updateField(this.treeData, this.fields, node, 'isChecked', null);\n }\n }\n }\n if (this.autoCheck) {\n this.updateParentCheckState();\n }\n };\n TreeView.prototype.updateFieldChecked = function (checkbox, doCheck) {\n var currLi = closest(checkbox, '.' + LISTITEM);\n var id = currLi.getAttribute('data-uid');\n var nodeDetails = this.getNodeData(currLi);\n if (nodeDetails.isChecked === 'true' && !doCheck) {\n this.updateField(this.treeData, this.fields, id, 'isChecked', null);\n }\n };\n /**\n * Changes the parent and child check state while changing the checkedNodes via setmodel\n */\n TreeView.prototype.dynamicCheckState = function (node, doCheck) {\n if (this.dataType === 1) {\n var count = 0;\n var resultId = new DataManager(this.treeData).executeLocal(new Query().where(this.fields.id, 'equal', node, true));\n if (resultId[0]) {\n var id = resultId[0][this.fields.id] ? resultId[0][this.fields.id].toString() : null;\n var parent_1 = resultId[0][this.fields.parentID] ? resultId[0][this.fields.parentID].toString() : null;\n var parentElement = this.element.querySelector('[data-uid=\"' + parent_1 + '\"]');\n var indeterminate = parentElement ? select('.' + INDETERMINATE, parentElement) : null;\n var check = parentElement ? select('.' + CHECK, parentElement) : null;\n var element = this.element.querySelector('[data-uid=\"' + id + '\"]');\n var childNodes = this.getChildNodes(this.treeData, parent_1);\n if (childNodes) {\n for (var i = 0; i < childNodes.length; i++) {\n var childId = childNodes[i][this.fields.id] ? childNodes[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n }\n if (this.checkedNodes.indexOf(node) !== -1 && parentElement && (id === node) && this.autoCheck) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && element && (id === node) && !doCheck) {\n this.changeState(element, 'uncheck', null);\n }\n else if (this.checkedNodes.indexOf(node) !== -1 && element && (id === node) && doCheck) {\n this.changeState(element, 'check', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && !element && parentElement && (id === node) && this.autoCheck\n && count !== 0) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && !element && parentElement && (id === node) && this.autoCheck\n && count === 0) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else if (!element && !parentElement && (id === node) && this.autoCheck) {\n this.updateIndeterminate(node, doCheck);\n }\n }\n }\n else if (this.dataType === 2 || (this.fields.dataSource instanceof DataManager &&\n this.isOffline)) {\n var id = void 0;\n var parentElement = void 0;\n var check = void 0;\n for (var i = 0; i < this.treeData.length; i++) {\n id = this.treeData[i][this.fields.id] ? this.treeData[i][this.fields.id].toString() : '';\n parentElement = this.element.querySelector('[data-uid=\"' + id + '\"]');\n check = parentElement ? select('.' + CHECK, parentElement) : null;\n if (this.checkedNodes.indexOf(id) === -1 && parentElement && check && !doCheck) {\n this.changeState(parentElement, 'uncheck', null);\n }\n var subChild = getValue(this.fields.child.toString(), this.treeData[i]);\n if (subChild) {\n this.updateChildIndeterminate(subChild, id, node, doCheck, id);\n }\n }\n }\n };\n /**\n * updates the parent and child check state while changing the checkedNodes via setmodel for listData\n */\n TreeView.prototype.updateIndeterminate = function (node, doCheck) {\n var indeterminateData = this.getTreeData(node);\n var count = 0;\n var parent;\n if (this.dataType === 1) {\n parent = indeterminateData[0][this.fields.parentID] ? indeterminateData[0][this.fields.parentID].toString() : null;\n }\n var childNodes = this.getChildNodes(this.treeData, parent);\n if (childNodes) {\n for (var i = 0; i < childNodes.length; i++) {\n var childId = childNodes[i][this.fields.id] ? childNodes[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n }\n var parentElement = this.element.querySelector('[data-uid=\"' + parent + '\"]');\n if (parentElement && doCheck) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (!doCheck && parentElement && this.parentNodeCheck.indexOf(parent) === -1 && count !== 0) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (!doCheck && parentElement && this.parentNodeCheck.indexOf(parent) === -1 && count === 0) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else if (!parentElement) {\n if (!doCheck && this.checkedNodes.indexOf(parent) === -1 && this.parentNodeCheck.indexOf(parent) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(parent), 1);\n }\n else if (doCheck && this.checkedNodes.indexOf(parent) === -1 && this.parentNodeCheck.indexOf(parent) === -1) {\n this.parentNodeCheck.push(parent);\n }\n else if (!doCheck && this.checkedNodes.indexOf(parent) !== -1 && this.parentNodeCheck.indexOf(parent) === -1\n && count !== 0) {\n this.parentNodeCheck.push(parent);\n }\n this.updateIndeterminate(parent, doCheck);\n if (this.checkedNodes.indexOf(parent) !== -1 && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(parent), 1);\n }\n }\n };\n /**\n * updates the parent and child check state while changing the checkedNodes via setmodel for hierarchical data\n */\n TreeView.prototype.updateChildIndeterminate = function (subChild, parent, node, doCheck, child) {\n var count = 0;\n for (var j = 0; j < subChild.length; j++) {\n var subId = subChild[j][this.fields.id] ? subChild[j][this.fields.id].toString() : '';\n if (this.checkedNodes.indexOf(subId) !== -1) {\n count++;\n }\n var parentElement = this.element.querySelector('[data-uid=\"' + parent + '\"]');\n var indeterminate = parentElement ? select('.' + INDETERMINATE, parentElement) : null;\n var check = parentElement ? select('.' + CHECK, parentElement) : null;\n var element = this.element.querySelector('[data-uid=\"' + subId + '\"]');\n var childElementCheck = element ? select('.' + CHECK, element) : null;\n if (this.checkedNodes.indexOf(node) !== -1 && parentElement && (subId === node) && this.autoCheck) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && parentElement && !element && (subId === node) && !doCheck) {\n if (this.autoCheck) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else {\n if (count !== 0) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else {\n this.changeState(parentElement, 'uncheck', null);\n }\n }\n }\n else if (this.checkedNodes.indexOf(node) === -1 && element && (subId === node) && !doCheck) {\n this.changeState(element, 'uncheck', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && indeterminate && (subId === node) && this.autoCheck && count === 0\n && !doCheck) {\n indeterminate.classList.remove(INDETERMINATE);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && !element && check && (subId === node) && count === 0) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else if (this.checkedNodes.indexOf(subId) === -1 && element && childElementCheck && count === 0) {\n this.changeState(element, 'uncheck', null);\n }\n else if (!element && !parentElement && (subId === node) || (this.parentNodeCheck.indexOf(parent) !== -1) && this.autoCheck) {\n var childElement = this.element.querySelector('[data-uid=\"' + child + '\"]');\n if (doCheck && count !== 0) {\n this.changeState(childElement, 'indeterminate', null);\n }\n else if (doCheck && count === subChild.length && this.checkedNodes.indexOf(parent) === -1) {\n this.checkedNodes.push(parent);\n }\n else if (!doCheck && count === 0 && this.parentNodeCheck.indexOf(parent) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(parent));\n }\n if (this.parentNodeCheck.indexOf(parent) === -1) {\n this.parentNodeCheck.push(parent);\n }\n }\n var innerChild = getValue(this.fields.child.toString(), subChild[j]);\n if (innerChild) {\n this.updateChildIndeterminate(innerChild, subId, node, doCheck, child);\n }\n }\n };\n TreeView.prototype.changeState = function (wrapper, state, e, isPrevent, isAdd, doCheck) {\n var _this = this;\n var eventArgs;\n var currLi = closest(wrapper, '.' + LISTITEM);\n if (wrapper === currLi) {\n wrapper = select('.' + CHECKBOXWRAP, currLi);\n }\n if (!isPrevent) {\n this.checkActionNodes = [];\n eventArgs = this.getCheckEvent(currLi, state, e);\n this.trigger('nodeChecking', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.nodeCheckAction(wrapper, state, currLi, observedArgs, e, isPrevent, isAdd, doCheck);\n }\n });\n }\n else {\n this.nodeCheckAction(wrapper, state, currLi, eventArgs, e, isPrevent, isAdd, doCheck);\n }\n };\n TreeView.prototype.nodeCheckAction = function (wrapper, state, currLi, eventArgs, e, isPrevent, isAdd, doCheck) {\n var ariaState;\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n this.addCheck(currLi);\n ariaState = 'true';\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n this.removeCheck(currLi);\n ariaState = 'false';\n }\n else if (state === 'indeterminate' && this.autoCheck) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n this.removeCheck(currLi);\n ariaState = 'mixed';\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n if (isAdd) {\n var data = [].concat([], this.checkActionNodes);\n eventArgs = this.getCheckEvent(currLi, state, e);\n if (isUndefined(isPrevent)) {\n eventArgs.data = data;\n }\n }\n if (doCheck !== undefined) {\n this.ensureStateChange(currLi, doCheck);\n }\n if (!isPrevent) {\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n eventArgs.data[0].checked = ariaState;\n this.trigger('nodeChecked', eventArgs);\n this.checkActionNodes = [];\n }\n }\n };\n TreeView.prototype.addCheck = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n };\n TreeView.prototype.removeCheck = function (liEle) {\n var index = this.checkedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.checkedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.getCheckEvent = function (currLi, action, e) {\n this.checkActionNodes.push(this.getNodeData(currLi));\n var nodeData = this.checkActionNodes;\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, data: nodeData };\n };\n TreeView.prototype.finalize = function () {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (!isNullOrUndefined(firstUl)) {\n firstUl.setAttribute('role', treeAriaAttr.treeRole);\n this.setMultiSelect(this.allowMultiSelection);\n var firstNode = select('.' + LISTITEM, this.element);\n if (firstNode) {\n firstNode.setAttribute('tabindex', '0');\n this.updateIdAttr(null, firstNode);\n }\n if (this.allowTextWrap) {\n this.updateWrap();\n }\n this.renderReactTemplates();\n this.hasPid = this.rootData[0] ? this.rootData[0].hasOwnProperty(this.fields.parentID) : false;\n this.doExpandAction();\n }\n };\n TreeView.prototype.setTextWrap = function () {\n (this.allowTextWrap ? addClass : removeClass)([this.element], LISTWRAP);\n if (Browser.isIE) {\n (this.allowTextWrap ? addClass : removeClass)([this.element], IELISTWRAP);\n }\n };\n TreeView.prototype.updateWrap = function (ulEle) {\n if (!this.fullRowSelect) {\n return;\n }\n var liEle = ulEle ? selectAll('.' + LISTITEM, ulEle) : this.liList;\n var length = liEle.length;\n for (var i = 0; i < length; i++) {\n this.calculateWrap(liEle[i]);\n }\n };\n TreeView.prototype.calculateWrap = function (liEle) {\n var element = select('.' + FULLROW, liEle);\n if (element && element.nextElementSibling) {\n element.style.height = this.allowTextWrap ? element.nextElementSibling.offsetHeight + 'px' : '';\n }\n };\n TreeView.prototype.doExpandAction = function () {\n var _this = this;\n var eUids = this.expandedNodes;\n if (!this.loadOnDemand) {\n this.isInitalExpand = this.treeData.filter(function (e) { return e[_this.fields.expanded] == true; }).length > 0 ? true : this.isInitalExpand;\n }\n if (this.isInitalExpand && eUids.length > 0) {\n this.setProperties({ expandedNodes: [] }, true);\n /* eslint-disable */\n if (this.fields.dataSource instanceof DataManager) {\n this.expandGivenNodes(eUids);\n }\n else {\n for (var i = 0; i < eUids.length; i++) {\n var eNode = select('[data-uid=\"' + eUids[i] + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null);\n }\n }\n else {\n if (eUids[i] && this.expandChildren.indexOf(eUids[i]) === -1) {\n this.expandChildren.push(eUids[i].toString());\n }\n continue;\n }\n }\n this.afterFinalized();\n }\n }\n else {\n this.afterFinalized();\n }\n };\n TreeView.prototype.expandGivenNodes = function (arr) {\n var proxy = this;\n this.expandCallback(arr[this.index], function () {\n proxy.index++;\n if (proxy.index < arr.length) {\n proxy.expandGivenNodes(arr);\n }\n else {\n proxy.afterFinalized();\n }\n });\n };\n TreeView.prototype.expandCallback = function (eUid, callback) {\n var eNode = select('[data-uid=\"' + eUid + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null, false, callback);\n }\n else {\n callback();\n }\n }\n else {\n callback();\n }\n };\n TreeView.prototype.afterFinalized = function () {\n this.doSelectionAction();\n this.updateCheckedProp();\n this.isAnimate = true;\n this.isInitalExpand = false;\n if ((!this.isLoaded || this.isFieldChange) && !this.isNodeDropped) {\n var eventArgs = { data: this.treeData };\n this.trigger('dataBound', eventArgs);\n }\n this.isLoaded = true;\n this.isNodeDropped = false;\n };\n TreeView.prototype.doSelectionAction = function () {\n var sNodes = selectAll('.' + SELECTED, this.element);\n var sUids = this.selectedNodes;\n if (sUids.length > 0) {\n this.setProperties({ selectedNodes: [] }, true);\n for (var i = 0; i < sUids.length; i++) {\n var sNode = select('[data-uid=\"' + sUids[i] + '\"]', this.element);\n if (sNode && !(sNode.classList.contains('e-active'))) {\n this.selectNode(sNode, null, true);\n }\n else {\n this.selectedNodes.push(sUids[i]);\n }\n if (!this.allowMultiSelection) {\n break;\n }\n }\n }\n else {\n this.selectGivenNodes(sNodes);\n }\n removeClass(sNodes, SELECTED);\n };\n TreeView.prototype.selectGivenNodes = function (sNodes) {\n for (var i = 0; i < sNodes.length; i++) {\n if (!sNodes[i].classList.contains('e-disable')) {\n this.selectNode(sNodes[i], null, true);\n }\n if (!this.allowMultiSelection) {\n break;\n }\n }\n };\n TreeView.prototype.clickHandler = function (event) {\n var target = Browser.isDevice && !Browser.isIos ? document.elementFromPoint(event.originalEvent.changedTouches[0].clientX, event.originalEvent.changedTouches[0].clientY) : event.originalEvent.target;\n EventHandler.remove(this.element, 'contextmenu', this.preventContextMenu);\n if (!target || this.dragStartAction) {\n return;\n }\n else {\n var classList = target.classList;\n var li = closest(target, '.' + LISTITEM);\n if (!li || (li.classList.contains(PREVENTSELECT) && !(classList.contains(EXPANDABLE) || classList.contains(COLLAPSIBLE)))) {\n return;\n }\n else if (event.originalEvent.which !== 3) {\n var rippleElement = select('.' + RIPPLEELMENT, li);\n var rippleIcons = select('.' + ICON, li);\n this.removeHover();\n this.setFocusElement(li);\n if (this.showCheckBox && !li.classList.contains('e-disable')) {\n var checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNOU(checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, checkWrapper);\n this.validateCheckNode(checkWrapper, checkElement.classList.contains(CHECK), li, event.originalEvent);\n this.triggerClickEvent(event.originalEvent, li);\n return;\n }\n }\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(li, target, event);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, target, event);\n }\n else if (rippleElement && rippleIcons) {\n if (rippleIcons.classList.contains(RIPPLE) && rippleIcons.classList.contains(EXPANDABLE)) {\n this.expandAction(li, rippleIcons, event);\n }\n else if (rippleIcons.classList.contains(RIPPLE) && rippleIcons.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, rippleIcons, event);\n }\n else if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n else {\n if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n }\n if (event.originalEvent.which === 3) {\n this.isRightClick = true;\n }\n this.triggerClickEvent(event.originalEvent, li);\n }\n };\n TreeView.prototype.nodeCheckedEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n var eventArgs = this.getCheckEvent(wrapper, isCheck ? 'uncheck' : 'check', e);\n eventArgs.data = eventArgs.data.splice(0, eventArgs.data.length - 1);\n this.trigger('nodeChecked', eventArgs);\n };\n TreeView.prototype.triggerClickEvent = function (e, li) {\n var eventArgs = {\n event: e,\n node: li,\n };\n this.trigger('nodeClicked', eventArgs);\n };\n TreeView.prototype.expandNode = function (currLi, icon, loaded) {\n var _this = this;\n this.renderReactTemplates();\n if (icon.classList.contains(LOAD)) {\n this.hideSpinner(icon);\n }\n if (!this.initialRender) {\n icon.classList.add('interaction');\n }\n if (loaded !== true || (loaded === true && currLi.classList.contains('e-expanded'))) {\n if (this.preventExpand !== true) {\n removeClass([icon], EXPANDABLE);\n addClass([icon], COLLAPSIBLE);\n var start_1 = 0;\n var end_1 = 0;\n var proxy_1 = this;\n var ul_1 = select('.' + PARENTITEM, currLi);\n var liEle_1 = currLi;\n this.setHeight(liEle_1, ul_1);\n var activeElement_1 = select('.' + LISTITEM + '.' + ACTIVE, currLi);\n if (this.isAnimate && !this.isRefreshed) {\n this.aniObj.animate(ul_1, {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing,\n begin: function (args) {\n liEle_1.style.overflow = 'hidden';\n if (!isNullOrUndefined(activeElement_1) && activeElement_1 instanceof HTMLElement) {\n activeElement_1.classList.add(ITEM_ANIMATION_ACTIVE);\n }\n start_1 = liEle_1.offsetHeight;\n end_1 = select('.' + TEXTWRAP, currLi).offsetHeight;\n },\n progress: function (args) {\n args.element.style.display = 'block';\n proxy_1.animateHeight(args, start_1, end_1);\n },\n end: function (args) {\n args.element.style.display = 'block';\n if (!isNullOrUndefined(activeElement_1) && activeElement_1 instanceof HTMLElement) {\n activeElement_1.classList.remove(ITEM_ANIMATION_ACTIVE);\n }\n _this.expandedNode(liEle_1, ul_1, icon);\n }\n });\n }\n else {\n this.expandedNode(liEle_1, ul_1, icon);\n }\n }\n }\n else {\n var ul = select('.' + PARENTITEM, currLi);\n ul.style.display = 'none';\n if (this.fields.dataSource instanceof DataManager === true) {\n this.preventExpand = false;\n }\n }\n if (this.initialRender) {\n icon.classList.add('interaction');\n }\n };\n TreeView.prototype.expandedNode = function (currLi, ul, icon) {\n ul.style.display = 'block';\n currLi.style.display = 'block';\n currLi.style.overflow = '';\n currLi.style.height = '';\n removeClass([icon], PROCESS);\n this.addExpand(currLi);\n if (this.allowTextWrap && this.isLoaded && this.isFirstRender) {\n this.updateWrap(currLi);\n this.isFirstRender = false;\n }\n if (this.isLoaded && this.expandArgs && !this.isRefreshed) {\n this.expandArgs = this.getExpandEvent(currLi, null);\n this.expandArgs.isInteracted = this.isInteracted;\n this.trigger('nodeExpanded', this.expandArgs);\n }\n };\n TreeView.prototype.addExpand = function (liEle) {\n liEle.setAttribute('aria-expanded', 'true');\n removeClass([liEle], NODECOLLAPSED);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.expandedNodes.indexOf(id) === -1) {\n this.expandedNodes.push(id);\n }\n };\n TreeView.prototype.collapseNode = function (currLi, icon, e) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n var colArgs;\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(currLi, e);\n this.isInteracted = colArgs.isInteracted;\n this.trigger('nodeCollapsing', colArgs, function (observedArgs) {\n if (observedArgs.cancel) {\n removeClass([icon], PROCESS);\n }\n else {\n _this.nodeCollapseAction(currLi, icon, observedArgs);\n }\n });\n }\n else {\n this.nodeCollapseAction(currLi, icon, colArgs);\n }\n };\n TreeView.prototype.nodeCollapseAction = function (currLi, icon, colArgs) {\n var _this = this;\n removeClass([icon], COLLAPSIBLE);\n addClass([icon], EXPANDABLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n var activeElement = select('.' + LISTITEM + '.' + ACTIVE, currLi);\n if (this.isAnimate) {\n this.aniObj.animate(ul, {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n if (!isNullOrUndefined(activeElement) && activeElement instanceof HTMLElement) {\n activeElement.classList.add(ITEM_ANIMATION_ACTIVE);\n }\n start = select('.' + TEXTWRAP, currLi).offsetHeight;\n end = liEle.offsetHeight;\n },\n progress: function (args) {\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n args.element.style.display = 'none';\n if (!isNullOrUndefined(activeElement) && activeElement instanceof HTMLElement) {\n activeElement.classList.remove(ITEM_ANIMATION_ACTIVE);\n }\n _this.collapsedNode(liEle, ul, icon, colArgs);\n }\n });\n }\n else {\n this.collapsedNode(liEle, ul, icon, colArgs);\n }\n };\n TreeView.prototype.collapsedNode = function (liEle, ul, icon, colArgs) {\n ul.style.display = 'none';\n liEle.style.overflow = '';\n liEle.style.height = '';\n removeClass([icon], PROCESS);\n this.removeExpand(liEle);\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(liEle, null);\n colArgs.isInteracted = this.isInteracted;\n this.trigger('nodeCollapsed', colArgs);\n }\n };\n TreeView.prototype.removeExpand = function (liEle, toRemove) {\n if (toRemove) {\n liEle.removeAttribute('aria-expanded');\n }\n else {\n this.disableExpandAttr(liEle);\n }\n var index = this.expandedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.expandedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.disableExpandAttr = function (liEle) {\n liEle.setAttribute('aria-expanded', 'false');\n addClass([liEle], NODECOLLAPSED);\n };\n TreeView.prototype.setHeight = function (currLi, ul) {\n ul.style.display = 'block';\n ul.style.visibility = 'hidden';\n currLi.style.height = currLi.offsetHeight + 'px';\n ul.style.display = 'none';\n ul.style.visibility = '';\n };\n TreeView.prototype.animateHeight = function (args, start, end) {\n var remaining = (args.duration - args.timeStamp) / args.duration;\n var currentHeight = (end - start) * remaining + start;\n args.element.parentElement.style.height = currentHeight + 'px';\n };\n TreeView.prototype.renderChildNodes = function (parentLi, expandChild, callback, loaded) {\n var _this = this;\n var eicon = select('div.' + ICON, parentLi);\n if (isNOU(eicon)) {\n return;\n }\n this.showSpinner(eicon);\n var childItems;\n /* eslint-disable */\n if (this.fields.dataSource instanceof DataManager) {\n var level = this.parents(parentLi, '.' + PARENTITEM).length;\n var mapper_2 = this.getChildFields(this.fields, level, 1);\n if (isNOU(mapper_2) || isNOU(mapper_2.dataSource)) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n return;\n }\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager && this.isOffline) {\n this.treeList.pop();\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.loadChild(childItems, mapper_2, eicon, parentLi, expandChild, callback, loaded);\n }\n else {\n mapper_2.dataSource.executeQuery(this.getQuery(mapper_2, parentLi.getAttribute('data-uid'))).then(function (e) {\n _this.treeList.pop();\n childItems = e.result;\n if (_this.dataType === 1) {\n _this.dataType = 2;\n }\n _this.loadChild(childItems, mapper_2, eicon, parentLi, expandChild, callback, loaded);\n }).catch(function (e) {\n _this.trigger('actionFailure', { error: e });\n });\n }\n }\n else {\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.currentLoadData = this.getSortedData(childItems);\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n return;\n }\n else {\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, this.currentLoadData, this.listBaseOption));\n this.expandNode(parentLi, eicon, loaded);\n this.setSelectionForChildNodes(childItems);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.disableTreeNodes(childItems);\n this.renderSubChild(parentLi, expandChild, loaded);\n }\n }\n };\n TreeView.prototype.loadChild = function (childItems, mapper, eicon, parentLi, expandChild, callback, loaded) {\n this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n }\n else {\n this.updateListProp(mapper);\n if (this.fields.dataSource instanceof DataManager && !this.isOffline) {\n var id = parentLi.getAttribute('data-uid');\n var nodeData = this.getNodeObject(id);\n setValue('child', childItems, nodeData);\n }\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, childItems, this.listBaseOption));\n this.expandNode(parentLi, eicon, loaded);\n this.setSelectionForChildNodes(childItems);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.disableTreeNodes(childItems);\n this.renderSubChild(parentLi, expandChild, loaded);\n }\n if (callback) {\n callback();\n }\n if (expandChild) {\n this.expandedNodes.push(parentLi.getAttribute('data-uid'));\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.disableTreeNodes = function (childItems) {\n var i = 0;\n while (i < childItems.length) {\n var id = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : null;\n if (this.disableNode !== undefined && this.disableNode.indexOf(id) !== -1) {\n this.doDisableAction([id]);\n }\n i++;\n }\n };\n /**\n * Sets the child Item in selectedState while rendering the child node\n */\n TreeView.prototype.setSelectionForChildNodes = function (nodes) {\n var i;\n for (i = 0; i < nodes.length; i++) {\n var id = nodes[i][this.fields.id] ? nodes[i][this.fields.id].toString() : null;\n if (this.selectedNodes !== undefined && this.selectedNodes.indexOf(id) !== -1) {\n this.doSelectionAction();\n }\n }\n };\n TreeView.prototype.ensureCheckNode = function (element) {\n if (this.showCheckBox) {\n this.ele = (this.checkedElement) ? this.checkedElement.indexOf(element.getAttribute('data-uid')) : null;\n if (this.autoCheck) {\n this.ensureChildCheckState(element);\n this.ensureParentCheckState(element);\n }\n }\n this.currentLoadData = null;\n };\n TreeView.prototype.getFields = function (mapper, nodeLevel, dataLevel) {\n if (nodeLevel === dataLevel) {\n return mapper;\n }\n else {\n return this.getFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildFields = function (mapper, nodeLevel, dataLevel) {\n var childData;\n if (nodeLevel === dataLevel) {\n return this.getChildMapper(mapper);\n }\n else {\n return this.getChildFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildMapper = function (mapper) {\n return (typeof mapper.child === 'string' || isNOU(mapper.child)) ? mapper : mapper.child;\n };\n TreeView.prototype.getChildNodes = function (obj, parentId, isRoot) {\n var _this = this;\n if (isRoot === void 0) { isRoot = false; }\n var childNodes;\n if (isNOU(obj)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n return this.getChildGroup(this.groupedData, parentId, isRoot);\n }\n else {\n if (typeof this.fields.child === 'string') {\n var index = obj.findIndex(function (data) { return getValue(_this.fields.id, data) && getValue(_this.fields.id, data).toString() === parentId; });\n if (index !== -1) {\n return getValue(this.fields.child, obj[index]);\n }\n if (index === -1) {\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var tempArray = getValue(this.fields.child, obj[i]);\n var childIndex = !isNOU(tempArray) ? tempArray.findIndex(function (data) { return getValue(_this.fields.id, data) && getValue(_this.fields.id, data).toString() === parentId; }) : -1;\n if (childIndex !== -1) {\n return getValue(this.fields.child, tempArray[childIndex]);\n }\n else if (!isNOU(tempArray)) {\n childNodes = this.getChildNodes(tempArray, parentId);\n if (childNodes !== undefined) {\n break;\n }\n }\n }\n }\n }\n }\n return childNodes;\n };\n TreeView.prototype.getChildGroup = function (data, parentId, isRoot) {\n var childNodes;\n if (isNOU(data)) {\n return childNodes;\n }\n for (var i = 0, objlen = data.length; i < objlen; i++) {\n if (!isNOU(data[i][0]) && !isNOU(getValue(this.fields.parentID, data[i][0]))) {\n if (getValue(this.fields.parentID, data[i][0]).toString() === parentId) {\n return data[i];\n }\n }\n else if (isRoot) {\n return data[i];\n }\n else {\n return [];\n }\n }\n return childNodes;\n };\n TreeView.prototype.renderSubChild = function (element, expandChild, loaded) {\n if (expandChild) {\n var cIcons = selectAll('.' + EXPANDABLE, element);\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n if (element.querySelector('.e-icons') !== cIcons[i]) {\n var curLi = closest(icon, '.' + LISTITEM);\n this.expandArgs = this.getExpandEvent(curLi, null);\n if (loaded !== true) {\n this.trigger('nodeExpanding', this.expandArgs);\n }\n this.renderChildNodes(curLi, expandChild, null, loaded);\n }\n }\n }\n };\n TreeView.prototype.toggleSelect = function (li, e, multiSelect) {\n if (!li.classList.contains('e-disable')) {\n if (this.allowMultiSelection && ((e && e.ctrlKey) || multiSelect) && this.isActive(li)) {\n this.unselectNode(li, e);\n }\n else {\n this.selectNode(li, e, multiSelect);\n }\n }\n };\n TreeView.prototype.isActive = function (li) {\n return li.classList.contains(ACTIVE) ? true : false;\n };\n TreeView.prototype.selectNode = function (li, e, multiSelect) {\n var _this = this;\n if (isNOU(li) || (!this.allowMultiSelection && this.isActive(li) && !isNOU(e))) {\n this.setFocusElement(li);\n return;\n }\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'select', e);\n this.trigger('nodeSelecting', eventArgs, function (observedArgs) {\n if ((!observedArgs.cancel) && !observedArgs.node.classList.contains(PREVENTSELECT)) {\n _this.nodeSelectAction(li, e, observedArgs, multiSelect);\n }\n });\n }\n else {\n this.nodeSelectAction(li, e, eventArgs, multiSelect);\n }\n };\n TreeView.prototype.nodeSelectAction = function (li, e, eventArgs, multiSelect) {\n if (!this.allowMultiSelection || (!multiSelect && (!e || (e && !e.ctrlKey)))) {\n this.removeSelectAll();\n }\n if (this.allowMultiSelection && e && e.shiftKey) {\n if (!this.startNode) {\n this.startNode = li;\n }\n var startIndex = this.liList.indexOf(this.startNode);\n var endIndex = this.liList.indexOf(li);\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex; i <= endIndex; i++) {\n var currNode = this.liList[i];\n if (isVisible(currNode) && !currNode.classList.contains('e-disable')) {\n this.addSelect(currNode);\n }\n }\n }\n else {\n this.startNode = li;\n this.addSelect(li);\n }\n if (this.isLoaded) {\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n this.isRightClick = false;\n }\n this.isRightClick = false;\n };\n TreeView.prototype.unselectNode = function (li, e) {\n var _this = this;\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'un-select', e);\n this.trigger('nodeSelecting', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.nodeUnselectAction(li, observedArgs);\n }\n });\n }\n else {\n this.nodeUnselectAction(li, eventArgs);\n }\n };\n TreeView.prototype.nodeUnselectAction = function (li, eventArgs) {\n this.removeSelect(li);\n this.setFocusElement(li);\n if (this.isLoaded) {\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.setFocusElement = function (li) {\n if (!isNOU(li)) {\n var focusedNode = this.getFocusedNode();\n if (focusedNode) {\n removeClass([focusedNode], FOCUS);\n focusedNode.setAttribute(\"tabindex\", \"-1\");\n }\n addClass([li], FOCUS);\n li.setAttribute('tabindex', '0');\n EventHandler.add(li, 'blur', this.focusOut, this);\n this.updateIdAttr(focusedNode, li);\n }\n };\n TreeView.prototype.addSelect = function (liEle) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n this.selectedNodes.push(id);\n }\n };\n TreeView.prototype.removeSelect = function (liEle) {\n if (this.allowMultiSelection) {\n liEle.setAttribute('aria-selected', 'false');\n }\n else {\n liEle.removeAttribute('aria-selected');\n }\n removeClass([liEle], ACTIVE);\n var index = this.selectedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.selectedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.removeSelectAll = function () {\n var selectedLI = this.element.querySelectorAll('.' + ACTIVE);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.allowMultiSelection) {\n ele.setAttribute('aria-selected', 'false');\n }\n else {\n ele.removeAttribute('aria-selected');\n }\n }\n removeClass(selectedLI, ACTIVE);\n this.setProperties({ selectedNodes: [] }, true);\n };\n TreeView.prototype.getSelectEvent = function (currLi, action, e) {\n var nodeData = this.getNodeData(currLi);\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData };\n };\n TreeView.prototype.setExpandOnType = function () {\n this.expandOnType = (this.expandOn === 'Auto') ? (Browser.isDevice ? 'Click' : 'DblClick') : this.expandOn;\n };\n TreeView.prototype.expandHandler = function (e) {\n var target = e.originalEvent.target;\n if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n return;\n }\n else {\n this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n }\n };\n TreeView.prototype.expandCollapseAction = function (currLi, e) {\n var icon = select('div.' + ICON, currLi);\n if (!icon || icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n var classList = icon.classList;\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(currLi, icon, e);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(currLi, icon, e);\n }\n }\n };\n TreeView.prototype.expandAction = function (currLi, icon, e, expandChild, callback) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n if (this.isLoaded && !this.isRefreshed) {\n this.expandArgs = this.getExpandEvent(currLi, e);\n this.isInteracted = this.expandArgs.isInteracted;\n this.trigger('nodeExpanding', this.expandArgs, function (observedArgs) {\n if (observedArgs.cancel) {\n removeClass([icon], PROCESS);\n }\n else {\n _this.nodeExpandAction(currLi, icon, expandChild, callback);\n }\n });\n }\n else {\n this.nodeExpandAction(currLi, icon, expandChild, callback);\n }\n };\n TreeView.prototype.nodeExpandAction = function (currLi, icon, expandChild, callback) {\n var ul = select('.' + PARENTITEM, currLi);\n if (ul && ul.nodeName === 'UL') {\n this.expandNode(currLi, icon);\n }\n else {\n this.isFirstRender = true;\n this.renderChildNodes(currLi, expandChild, callback);\n var liEles = selectAll('.' + LISTITEM, currLi);\n for (var i = 0; i < liEles.length; i++) {\n var id = this.getId(liEles[i]);\n if (this.expandChildren.indexOf(id) !== -1 && this.expandChildren !== undefined) {\n var icon_1 = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEles[i]));\n if (!isNOU(icon_1)) {\n this.expandAction(liEles[i], icon_1, null);\n }\n this.expandChildren.splice(this.expandChildren.indexOf(id), 1);\n }\n }\n }\n };\n TreeView.prototype.keyActionHandler = function (e) {\n var _this = this;\n var target = e.target;\n var focusedNode = this.getFocusedNode();\n if (target && target.classList.contains(INPUT)) {\n var inpEle = target;\n if (e.action === 'enter') {\n inpEle.blur();\n }\n else if (e.action === 'escape') {\n inpEle.value = this.oldText;\n inpEle.blur();\n }\n return;\n }\n e.preventDefault();\n var eventArgs = {\n cancel: false,\n event: e,\n node: focusedNode,\n };\n this.trigger('keyPress', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n switch (e.action) {\n case 'space':\n if (_this.showCheckBox) {\n _this.checkNode(e);\n }\n else {\n _this.toggleSelect(focusedNode, e);\n }\n break;\n case 'moveRight':\n _this.openNode(_this.enableRtl ? false : true, e);\n break;\n case 'moveLeft':\n _this.openNode(_this.enableRtl ? true : false, e);\n break;\n case 'shiftDown':\n _this.shiftKeySelect(true, e);\n break;\n case 'moveDown':\n case 'ctrlDown':\n case 'csDown':\n _this.navigateNode(true);\n break;\n case 'shiftUp':\n _this.shiftKeySelect(false, e);\n break;\n case 'moveUp':\n case 'ctrlUp':\n case 'csUp':\n _this.navigateNode(false);\n break;\n case 'home':\n case 'shiftHome':\n case 'ctrlHome':\n case 'csHome':\n _this.navigateRootNode(true);\n break;\n case 'end':\n case 'shiftEnd':\n case 'ctrlEnd':\n case 'csEnd':\n _this.navigateRootNode(false);\n break;\n case 'enter':\n case 'ctrlEnter':\n case 'shiftEnter':\n case 'csEnter':\n case 'shiftSpace':\n case 'ctrlSpace':\n _this.toggleSelect(focusedNode, e);\n break;\n case 'f2':\n if (_this.allowEditing && !focusedNode.classList.contains('e-disable')) {\n _this.createTextbox(focusedNode, e);\n }\n break;\n case 'ctrlA':\n if (_this.allowMultiSelection) {\n var sNodes = selectAll('.' + LISTITEM + ':not(.' + ACTIVE + ')', _this.element);\n _this.selectGivenNodes(sNodes);\n }\n break;\n }\n }\n });\n };\n TreeView.prototype.navigateToFocus = function (isUp) {\n var focusNode = this.getFocusedNode().querySelector('.' + TEXTWRAP);\n var pos = focusNode.getBoundingClientRect();\n var parent = this.getScrollParent(this.element);\n if (!isNOU(parent)) {\n var parentPos = parent.getBoundingClientRect();\n if (pos.bottom > parentPos.bottom) {\n parent.scrollTop += pos.bottom - parentPos.bottom;\n }\n else if (pos.top < parentPos.top) {\n parent.scrollTop -= parentPos.top - pos.top;\n }\n }\n var isVisible = this.isVisibleInViewport(focusNode);\n if (!isVisible) {\n focusNode.scrollIntoView(isUp);\n }\n };\n TreeView.prototype.isVisibleInViewport = function (txtWrap) {\n var pos = txtWrap.getBoundingClientRect();\n return (pos.top >= 0 && pos.left >= 0 && pos.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n pos.right <= (window.innerWidth || document.documentElement.clientWidth));\n };\n TreeView.prototype.getScrollParent = function (node) {\n if (isNOU(node)) {\n return null;\n }\n return (node.scrollHeight > node.clientHeight) ? node : this.getScrollParent(node.parentElement);\n };\n TreeView.prototype.shiftKeySelect = function (isTowards, e) {\n if (this.allowMultiSelection) {\n var focusedNode = this.getFocusedNode();\n var nextNode = isTowards ? this.getNextNode(focusedNode) : this.getPrevNode(focusedNode);\n this.removeHover();\n this.setFocusElement(nextNode);\n this.toggleSelect(nextNode, e, false);\n this.navigateToFocus(!isTowards);\n }\n else {\n this.navigateNode(isTowards);\n }\n };\n TreeView.prototype.checkNode = function (e) {\n var focusedNode = this.getFocusedNode();\n var checkWrap = select('.' + CHECKBOXWRAP, focusedNode);\n var isChecked = select(' .' + CHECKBOXFRAME, checkWrap).classList.contains(CHECK);\n if (!focusedNode.classList.contains('e-disable')) {\n if (focusedNode.getElementsByClassName(\"e-checkbox-disabled\").length == 0) {\n this.validateCheckNode(checkWrap, isChecked, focusedNode, e);\n }\n }\n };\n TreeView.prototype.validateCheckNode = function (checkWrap, isCheck, li, e) {\n var _this = this;\n var currLi = closest(checkWrap, '.' + LISTITEM);\n this.checkActionNodes = [];\n var ariaState = !isCheck ? 'true' : 'false';\n if (!isNOU(ariaState)) {\n checkWrap.setAttribute('aria-checked', ariaState);\n }\n var eventArgs = this.getCheckEvent(currLi, isCheck ? 'uncheck' : 'check', e);\n this.trigger('nodeChecking', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.nodeCheckingAction(checkWrap, isCheck, li, observedArgs, e);\n }\n });\n };\n TreeView.prototype.nodeCheckingAction = function (checkWrap, isCheck, li, eventArgs, e) {\n if (this.checkedElement.indexOf(li.getAttribute('data-uid')) === -1) {\n this.checkedElement.push(li.getAttribute('data-uid'));\n if (this.autoCheck) {\n var child = this.getChildNodes(this.treeData, li.getAttribute('data-uid'));\n (child !== null) ? this.allCheckNode(child, this.checkedElement, null, null, false) : child = null;\n }\n }\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n if (this.autoCheck) {\n this.ensureChildCheckState(li);\n this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n var doCheck = void 0;\n if (eventArgs.action === 'check') {\n doCheck = true;\n }\n else if (eventArgs.action === 'uncheck') {\n doCheck = false;\n }\n this.ensureStateChange(li, doCheck);\n }\n this.nodeCheckedEvent(checkWrap, isCheck, e);\n };\n /**\n * Update checkedNodes when UI interaction happens before the child node renders in DOM\n */\n TreeView.prototype.ensureStateChange = function (li, doCheck) {\n var childElement = select('.' + PARENTITEM, li);\n var parentIndex = li.getAttribute('data-uid');\n var mapper = this.fields;\n if (this.dataType === 1 && this.autoCheck) {\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.parentID, 'equal', parentIndex, true));\n for (var i = 0; i < resultData.length; i++) {\n var resultId = resultData[i][this.fields.id] ? resultData[i][this.fields.id].toString() : null;\n var isCheck = resultData[i][this.fields.isChecked] ? resultData[i][this.fields.isChecked].toString() : null;\n if (this.checkedNodes.indexOf(parentIndex) !== -1 && this.checkedNodes.indexOf(resultId) === -1) {\n this.checkedNodes.push(resultId);\n var childItems = this.getChildNodes(this.treeData, resultId);\n this.getChildItems(childItems, doCheck);\n if (this.parentNodeCheck.indexOf(resultId) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(resultId), 1);\n }\n }\n else if (this.checkedNodes.indexOf(parentIndex) === -1 && childElement === null &&\n this.checkedNodes.indexOf(resultId) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(resultId), 1);\n if (isCheck === 'true') {\n this.updateField(this.treeData, this.fields, resultId, 'isChecked', null);\n }\n if (this.checkedNodes.indexOf(parentIndex) === -1 && childElement === null ||\n this.parentNodeCheck.indexOf(resultId) !== -1) {\n var childNodes = this.getChildNodes(this.treeData, resultId);\n this.getChildItems(childNodes, doCheck);\n if (this.parentNodeCheck.indexOf(resultId) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(resultId), 1);\n }\n }\n }\n else {\n var childItems = this.getChildNodes(this.treeData, resultId);\n this.getChildItems(childItems, doCheck);\n }\n }\n }\n else if (this.dataType === 1 && !this.autoCheck) {\n if (!doCheck) {\n var checkedData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.isChecked, 'equal', true, false));\n for (var i = 0; i < checkedData.length; i++) {\n var id = checkedData[i][this.fields.id] ? checkedData[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(id) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(id), 1);\n }\n this.updateField(this.treeData, this.fields, id, 'isChecked', null);\n }\n this.checkedNodes = [];\n }\n else {\n for (var i = 0; i < this.treeData.length; i++) {\n var checkedId = this.treeData[i][this.fields.id] ? this.treeData[i][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(checkedId) === -1) {\n this.checkedNodes.push(checkedId);\n }\n }\n }\n }\n else {\n var childItems = this.getChildNodes(this.treeData, parentIndex);\n if (childItems) {\n this.childStateChange(childItems, parentIndex, childElement, doCheck);\n }\n }\n };\n TreeView.prototype.getChildItems = function (childItems, doCheck) {\n for (var i = 0; i < childItems.length; i++) {\n var childId = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : null;\n var childIsCheck = childItems[i][this.fields.isChecked] ? childItems[i][this.fields.isChecked].toString() :\n null;\n if (this.checkedNodes.indexOf(childId) !== -1 && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(childId), 1);\n }\n if (this.checkedNodes.indexOf(childId) === -1 && doCheck) {\n this.checkedNodes.push(childId);\n }\n if (childIsCheck === 'true' && !doCheck) {\n this.updateField(this.treeData, this.fields, childId, 'isChecked', null);\n }\n var subChildItems = this.getChildNodes(this.treeData, childId);\n if (subChildItems.length > 0) {\n this.getChildItems(subChildItems, doCheck);\n }\n }\n };\n /**\n * Update checkedNodes when UI interaction happens before the child node renders in DOM for hierarchical DS\n */\n TreeView.prototype.childStateChange = function (childItems, parent, childElement, doCheck) {\n for (var i = 0; i < childItems.length; i++) {\n var checkedChild = childItems[i][this.fields.id] ? childItems[i][this.fields.id].toString() : '';\n var isCheck = childItems[i][this.fields.isChecked] ? childItems[i][this.fields.isChecked].toString() : null;\n if (this.autoCheck) {\n if (this.checkedNodes.indexOf(parent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n if (this.parentNodeCheck.indexOf(checkedChild) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(checkedChild), 1);\n }\n }\n else if (this.checkedNodes.indexOf(parent) === -1 && this.checkedNodes.indexOf(checkedChild) !== -1 && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(checkedChild), 1);\n if (isCheck === 'true') {\n this.updateField(this.treeData, this.fields, checkedChild, 'isChecked', null);\n }\n }\n }\n else if (!this.autoCheck) {\n if (!doCheck) {\n if (this.checkedNodes.indexOf(checkedChild) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(checkedChild), 1);\n }\n this.updateField(this.treeData, this.fields, checkedChild, 'isChecked', null);\n this.checkedNodes = [];\n }\n else {\n if (this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n }\n }\n }\n var subChild = this.getChildNodes([childItems[i]], checkedChild);\n if (subChild) {\n this.childStateChange(subChild, parent, childElement, doCheck);\n }\n }\n };\n //This method can be used to get all child nodes of a parent by passing the children of a parent along with 'validateCheck' set to false\n TreeView.prototype.allCheckNode = function (child, newCheck, checked, childCheck, validateCheck) {\n if (child) {\n for (var length_1 = 0; length_1 < child.length; length_1++) {\n var childId = getValue(this.fields.id, child[length_1]);\n var check = this.element.querySelector('[data-uid=\"' + childId + '\"]');\n //Validates isChecked case while no UI interaction has been performed on the node or it's parent\n if (validateCheck !== false && this.checkedElement.indexOf(childId.toString()) === -1) {\n if (((check === null && !isNOU(child[length_1][this.fields.isChecked]) && newCheck.indexOf(childId.toString()) === -1)\n || childCheck === 0 || checked === 2)) {\n (child[length_1][this.fields.isChecked] !== false || checked === 2) ? newCheck.push(childId.toString())\n : childCheck = null;\n childCheck = (child[length_1][this.fields.isChecked] !== false || checked === 2) ? 0 : null;\n }\n }\n //Pushes child checked node done thro' UI interaction\n if (newCheck.indexOf(childId.toString()) === -1 && isNOU(checked)) {\n newCheck.push(childId.toString());\n }\n var hierChildId = getValue(this.fields.child.toString(), child[length_1]);\n //Gets if any next level children are available for child nodes\n if (getValue(this.fields.hasChildren, child[length_1]) === true || hierChildId) {\n var id = getValue(this.fields.id, child[length_1]);\n var childId_1 = void 0;\n if (this.dataType === 1) {\n childId_1 = this.getChildNodes(this.treeData, id.toString());\n }\n else {\n childId_1 = hierChildId;\n }\n if (childId_1) {\n (isNOU(validateCheck)) ? this.allCheckNode(childId_1, newCheck, checked, childCheck) :\n this.allCheckNode(childId_1, newCheck, checked, childCheck, validateCheck);\n childCheck = null;\n }\n }\n childCheck = null;\n }\n }\n };\n TreeView.prototype.openNode = function (toBeOpened, e) {\n var focusedNode = this.getFocusedNode();\n var icon = select('div.' + ICON, focusedNode);\n if (toBeOpened) {\n if (!icon) {\n return;\n }\n else if (icon.classList.contains(EXPANDABLE)) {\n this.expandAction(focusedNode, icon, e);\n }\n else {\n this.focusNextNode(focusedNode, true);\n }\n }\n else {\n if (icon && icon.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(focusedNode, icon, e);\n }\n else {\n var parentLi = closest(closest(focusedNode, '.' + PARENTITEM), '.' + LISTITEM);\n if (!parentLi) {\n return;\n }\n else {\n if (!parentLi.classList.contains('e-disable')) {\n this.setFocus(focusedNode, parentLi);\n this.navigateToFocus(true);\n }\n }\n }\n }\n };\n TreeView.prototype.navigateNode = function (isTowards) {\n var focusedNode = this.getFocusedNode();\n this.focusNextNode(focusedNode, isTowards);\n };\n TreeView.prototype.navigateRootNode = function (isBackwards) {\n var focusedNode = this.getFocusedNode();\n var rootNode = isBackwards ? this.getRootNode() : this.getEndNode();\n if (!rootNode.classList.contains('e-disable')) {\n this.setFocus(focusedNode, rootNode);\n this.navigateToFocus(isBackwards);\n }\n };\n TreeView.prototype.getFocusedNode = function () {\n var selectedItem;\n var fNode = select('.' + LISTITEM + '[tabindex=\"0\"]', this.element);\n if (isNOU(fNode)) {\n selectedItem = select('.' + LISTITEM, this.element);\n }\n return isNOU(fNode) ? (isNOU(selectedItem) ? this.element.firstElementChild : selectedItem) : fNode;\n };\n TreeView.prototype.focusNextNode = function (li, isTowards) {\n var nextNode = isTowards ? this.getNextNode(li) : this.getPrevNode(li);\n this.setFocus(li, nextNode);\n this.navigateToFocus(!isTowards);\n if (nextNode.classList.contains('e-disable')) {\n var lastChild = nextNode.lastChild;\n if (nextNode.previousSibling == null && nextNode.classList.contains('e-level-1')) {\n this.focusNextNode(nextNode, true);\n }\n else if (nextNode.nextSibling == null && nextNode.classList.contains('e-node-collapsed')) {\n this.focusNextNode(nextNode, false);\n }\n else if (nextNode.nextSibling == null && lastChild.classList.contains(TEXTWRAP)) {\n this.focusNextNode(nextNode, false);\n }\n else {\n this.focusNextNode(nextNode, isTowards);\n }\n }\n };\n TreeView.prototype.getNextNode = function (li) {\n var index = this.liList.indexOf(li);\n var nextNode;\n do {\n index++;\n nextNode = this.liList[index];\n if (isNOU(nextNode)) {\n return li;\n }\n } while (!isVisible(nextNode));\n return nextNode;\n };\n TreeView.prototype.getPrevNode = function (li) {\n var index = this.liList.indexOf(li);\n var prevNode;\n do {\n index--;\n prevNode = this.liList[index];\n if (isNOU(prevNode)) {\n return li;\n }\n } while (!isVisible(prevNode));\n return prevNode;\n };\n TreeView.prototype.getRootNode = function () {\n var index = 0;\n var rootNode;\n do {\n rootNode = this.liList[index];\n index++;\n } while (!isVisible(rootNode));\n return rootNode;\n };\n TreeView.prototype.getEndNode = function () {\n var index = this.liList.length - 1;\n var endNode;\n do {\n endNode = this.liList[index];\n index--;\n } while (!isVisible(endNode));\n return endNode;\n };\n TreeView.prototype.setFocus = function (preNode, nextNode) {\n removeClass([preNode], FOCUS);\n preNode.setAttribute(\"tabindex\", \"-1\");\n if (!nextNode.classList.contains('e-disable') && !nextNode.classList.contains(PREVENTSELECT)) {\n addClass([nextNode], FOCUS);\n nextNode.setAttribute('tabindex', '0');\n nextNode.focus();\n EventHandler.add(nextNode, 'blur', this.focusOut, this);\n this.updateIdAttr(preNode, nextNode);\n }\n };\n TreeView.prototype.updateIdAttr = function (preNode, nextNode) {\n this.element.removeAttribute('aria-activedescendant');\n if (preNode) {\n preNode.removeAttribute('id');\n }\n nextNode.setAttribute('id', this.element.id + '_active');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n };\n TreeView.prototype.focusIn = function () {\n if (!this.mouseDownStatus) {\n var focusedElement = this.getFocusedNode();\n focusedElement.setAttribute(\"tabindex\", \"0\");\n addClass([focusedElement], FOCUS);\n EventHandler.add(focusedElement, 'blur', this.focusOut, this);\n }\n this.mouseDownStatus = false;\n };\n TreeView.prototype.focusOut = function (event) {\n var focusedElement = this.getFocusedNode();\n if (event.target == focusedElement) {\n removeClass([focusedElement], FOCUS);\n EventHandler.remove(focusedElement, 'blur', this.focusOut);\n }\n };\n TreeView.prototype.onMouseOver = function (e) {\n var target = e.target;\n var classList = target.classList;\n var currentLi = closest(target, '.' + LISTITEM);\n if (!currentLi || classList.contains(PARENTITEM) || classList.contains(LISTITEM)) {\n this.removeHover();\n return;\n }\n else {\n if (currentLi && !currentLi.classList.contains('e-disable')) {\n this.setHover(currentLi);\n }\n }\n };\n TreeView.prototype.setHover = function (li) {\n if (!li.classList.contains(HOVER) && !li.classList.contains(PREVENTSELECT)) {\n this.removeHover();\n addClass([li], HOVER);\n }\n };\n ;\n TreeView.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n TreeView.prototype.removeHover = function () {\n var hoveredNode = selectAll('.' + HOVER, this.element);\n if (hoveredNode && hoveredNode.length) {\n removeClass(hoveredNode, HOVER);\n }\n };\n ;\n TreeView.prototype.getNodeData = function (currLi, fromDS) {\n if (!isNOU(currLi) && currLi.classList.contains(LISTITEM) &&\n !isNOU(closest(currLi, '.' + CONTROL)) && closest(currLi, '.' + CONTROL).classList.contains(ROOT)) {\n var id = currLi.getAttribute('data-uid');\n var text = this.getText(currLi, fromDS);\n var pNode = closest(currLi.parentNode, '.' + LISTITEM);\n var pid = pNode ? pNode.getAttribute('data-uid') : null;\n var selected = currLi.classList.contains(ACTIVE);\n var selectable = currLi.classList.contains(PREVENTSELECT) ? false : true;\n var expanded = (currLi.getAttribute('aria-expanded') === 'true') ? true : false;\n var hasChildren = currLi.getAttribute('aria-expanded') !== null ? true : (select('.' + EXPANDABLE, currLi) || select('.' + COLLAPSIBLE, currLi)) != null ? true : false;\n var checked = null;\n var checkboxElement = select('.' + CHECKBOXWRAP, currLi);\n if (this.showCheckBox && checkboxElement) {\n checked = checkboxElement.getAttribute('aria-checked');\n }\n return {\n id: id, text: text, parentID: pid, selected: selected, selectable: selectable, expanded: expanded,\n isChecked: checked, hasChildren: hasChildren\n };\n }\n return { id: '', text: '', parentID: '', selected: false, expanded: false, isChecked: '', hasChildren: false };\n };\n TreeView.prototype.getText = function (currLi, fromDS) {\n if (fromDS) {\n var nodeData = this.getNodeObject(currLi.getAttribute('data-uid'));\n var level = parseFloat(currLi.getAttribute('aria-level'));\n var nodeFields = this.getFields(this.fields, level, 1);\n return getValue(nodeFields.text, nodeData);\n }\n return select('.' + LISTTEXT, currLi).textContent;\n };\n TreeView.prototype.getExpandEvent = function (currLi, e) {\n var nodeData = this.getNodeData(currLi);\n return { cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData, event: e };\n };\n TreeView.prototype.renderNodeTemplate = function (data, textEle, dataId) {\n var tempArr = this.nodeTemplateFn(data, this, 'nodeTemplate' + dataId, this.element.id + 'nodeTemplate', this.isStringTemplate, undefined, textEle, this.root);\n if (tempArr) {\n tempArr = Array.prototype.slice.call(tempArr);\n append(tempArr, textEle);\n }\n };\n TreeView.prototype.destroyTemplate = function (liEle) {\n this.clearTemplate(['nodeTemplate' + liEle.getAttribute('data-uid')]);\n };\n TreeView.prototype.reRenderNodes = function () {\n this.updateListProp(this.fields);\n if (Browser.isIE) {\n this.ulElement = this.element.querySelector('.e-list-parent.e-ul');\n this.ulElement.parentElement.removeChild(this.ulElement);\n }\n else {\n this.element.innerHTML = '';\n }\n if (!isNOU(this.nodeTemplateFn)) {\n this.clearTemplate();\n }\n this.setTouchClass();\n this.setProperties({ selectedNodes: [], checkedNodes: [], expandedNodes: [] }, true);\n this.checkedElement = [];\n this.isLoaded = false;\n this.setDataBinding(true);\n };\n TreeView.prototype.setCssClass = function (oldClass, newClass) {\n if (!isNOU(oldClass) && oldClass !== '') {\n removeClass([this.element], oldClass.split(' '));\n }\n if (!isNOU(newClass) && newClass !== '') {\n addClass([this.element], newClass.split(' '));\n }\n };\n TreeView.prototype.editingHandler = function (e) {\n var target = e.target;\n if (!target || target.classList.contains(ROOT) || target.classList.contains(PARENTITEM) ||\n target.classList.contains(LISTITEM) || target.classList.contains(ICON) ||\n target.classList.contains(INPUT) || target.classList.contains(INPUTGROUP)) {\n return;\n }\n else {\n var liEle = closest(target, '.' + LISTITEM);\n this.createTextbox(liEle, e);\n }\n };\n TreeView.prototype.createTextbox = function (liEle, e) {\n var _this = this;\n var oldInpEle = select('.' + TREEINPUT, this.element);\n if (oldInpEle) {\n oldInpEle.blur();\n }\n var textEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var innerEle = this.createElement('input', { className: TREEINPUT, attrs: { value: this.oldText } });\n var eventArgs = this.getEditEvent(liEle, null, innerEle.outerHTML);\n this.trigger('nodeEditing', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n var inpWidth = textEle.offsetWidth + 5;\n var style_1 = 'width:' + inpWidth + 'px';\n addClass([liEle], EDITING);\n if (!isNOU(_this.nodeTemplateFn)) {\n _this.destroyTemplate(liEle);\n }\n if (_this.isReact) {\n setTimeout(function () {\n _this.renderTextBox(eventArgs, textEle, style_1);\n }, 5);\n }\n else {\n _this.renderTextBox(eventArgs, textEle, style_1);\n }\n }\n });\n };\n TreeView.prototype.renderTextBox = function (eventArgs, textEle, style) {\n textEle.innerHTML = eventArgs.innerHtml;\n var inpEle = select('.' + TREEINPUT, textEle);\n this.inputObj = Input.createInput({\n element: inpEle,\n properties: {\n enableRtl: this.enableRtl,\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('style', style);\n inpEle.focus();\n var inputEle = inpEle;\n inputEle.setSelectionRange(0, inputEle.value.length);\n this.wireInputEvents(inpEle);\n };\n TreeView.prototype.updateOldText = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n this.editData = this.getNodeObject(id);\n var level = parseFloat(liEle.getAttribute('aria-level'));\n this.editFields = this.getFields(this.fields, level, 1);\n this.oldText = getValue(this.editFields.text, this.editData);\n };\n TreeView.prototype.inputFocusOut = function (e) {\n if (!select('.' + TREEINPUT, this.element)) {\n return;\n }\n var target = e.target;\n var newText = target.value;\n var txtEle = closest(target, '.' + LISTTEXT);\n var liEle = closest(target, '.' + LISTITEM);\n detach(this.inputObj.container);\n if (this.fields.dataSource instanceof DataManager && !this.isOffline) {\n this.crudOperation('update', null, liEle, newText, null, null, true);\n }\n else {\n this.appendNewText(liEle, txtEle, newText, true);\n }\n };\n TreeView.prototype.appendNewText = function (liEle, txtEle, newText, isInput) {\n var _this = this;\n var eventArgs = this.getEditEvent(liEle, newText, null);\n this.trigger('nodeEdited', eventArgs, function (observedArgs) {\n newText = observedArgs.cancel ? observedArgs.oldText : observedArgs.newText;\n _this.updateText(liEle, txtEle, newText, isInput);\n if (observedArgs.oldText !== newText) {\n _this.triggerEvent('nodeEdited', [_this.getNode(liEle)]);\n }\n });\n };\n TreeView.prototype.updateText = function (liEle, txtEle, newText, isInput) {\n var newData = setValue(this.editFields.text, newText, this.editData);\n if (!isNOU(this.nodeTemplateFn)) {\n txtEle.innerText = '';\n var dataId = liEle.getAttribute('data-uid');\n this.renderNodeTemplate(newData, txtEle, dataId);\n this.renderReactTemplates();\n }\n else {\n this.enableHtmlSanitizer ? txtEle.innerText = SanitizeHtmlHelper.sanitize(newText) : txtEle.innerHTML = newText;\n }\n if (isInput) {\n removeClass([liEle], EDITING);\n liEle.focus();\n EventHandler.add(liEle, 'blur', this.focusOut, this);\n addClass([liEle], FOCUS);\n }\n if (this.allowTextWrap) {\n this.calculateWrap(liEle);\n }\n };\n TreeView.prototype.getElement = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return this.element.querySelector('[data-uid=\"' + ele + '\"]');\n }\n else if (typeof ele === 'object') {\n return getElement(ele);\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getId = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return ele;\n }\n else if (typeof ele === 'object') {\n return (getElement(ele)).getAttribute('data-uid');\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getEditEvent = function (liEle, newText, inpEle) {\n var data = this.getNodeData(liEle);\n return { cancel: false, newText: newText, node: liEle, nodeData: data, oldText: this.oldText, innerHtml: inpEle };\n };\n TreeView.prototype.getNodeObject = function (id) {\n var childNodes;\n if (isNOU(id)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n for (var i = 0, objlen = this.treeData.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, this.treeData[i]);\n if (!isNOU(this.treeData[i]) && !isNOU(dataId) && dataId.toString() === id) {\n return this.treeData[i];\n }\n }\n }\n else {\n return this.getChildNodeObject(this.treeData, this.fields, id);\n }\n return childNodes;\n };\n TreeView.prototype.getChildNodeObject = function (obj, mapper, id) {\n var newList;\n if (isNOU(obj)) {\n return newList;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(mapper.id, obj[i]);\n if (obj[i] && dataId && dataId.toString() === id) {\n return obj[i];\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var child = 'child';\n newList = this.getChildNodeObject(getValue(child, obj[i]), this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n }\n return newList;\n };\n TreeView.prototype.setDragAndDrop = function (toBind) {\n if (toBind && !this.disabled) {\n this.initializeDrag();\n }\n else {\n this.destroyDrag();\n }\n };\n TreeView.prototype.initializeDrag = function () {\n var _this = this;\n var virtualEle;\n var proxy = this;\n this.dragObj = new Draggable(this.element, {\n enableTailMode: true, enableAutoScroll: true,\n dragArea: this.dragArea,\n dragTarget: '.' + TEXTWRAP,\n enableTapHold: true,\n tapHoldThreshold: 100,\n helper: function (e) {\n _this.dragTarget = e.sender.target;\n var dragRoot = closest(_this.dragTarget, '.' + ROOT);\n var dragWrap = closest(_this.dragTarget, '.' + TEXTWRAP);\n _this.dragLi = closest(_this.dragTarget, '.' + LISTITEM);\n if (_this.fullRowSelect && !dragWrap && _this.dragTarget.classList.contains(FULLROW)) {\n dragWrap = _this.dragTarget.nextElementSibling;\n }\n if (!_this.dragTarget || !e.element.isSameNode(dragRoot) || !dragWrap ||\n _this.dragTarget.classList.contains(ROOT) || _this.dragTarget.classList.contains(PARENTITEM) ||\n _this.dragTarget.classList.contains(LISTITEM) || _this.dragLi.classList.contains('e-disable')) {\n return false;\n }\n var cloneEle = (dragWrap.cloneNode(true));\n if (isNOU(select('div.' + ICON, cloneEle))) {\n var icon = proxy.createElement('div', { className: ICON + ' ' + EXPANDABLE });\n cloneEle.insertBefore(icon, cloneEle.children[0]);\n }\n var cssClass = DRAGITEM + ' ' + ROOT + ' ' + _this.cssClass + ' ' + (_this.enableRtl ? RTL : '');\n virtualEle = proxy.createElement('div', { className: cssClass });\n virtualEle.appendChild(cloneEle);\n var nLen = _this.selectedNodes.length;\n if (nLen > 1 && _this.allowMultiSelection && _this.dragLi.classList.contains(ACTIVE)) {\n var cNode = proxy.createElement('span', { className: DROPCOUNT, innerHTML: '' + nLen });\n virtualEle.appendChild(cNode);\n }\n document.body.appendChild(virtualEle);\n document.body.style.cursor = '';\n _this.dragData = _this.getNodeData(_this.dragLi);\n return virtualEle;\n },\n dragStart: function (e) {\n addClass([_this.element], DRAGGING);\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, null, e.target, null, virtualEle, level);\n if (eventArgs.draggedNode.classList.contains(EDITING)) {\n _this.dragObj.intDestroy(e.event);\n _this.dragCancelAction(virtualEle);\n }\n else {\n _this.trigger('nodeDragStart', eventArgs, function (observedArgs) {\n if (observedArgs.cancel) {\n _this.dragObj.intDestroy(e.event);\n _this.dragCancelAction(virtualEle);\n }\n else {\n _this.dragStartAction = true;\n }\n });\n }\n },\n drag: function (e) {\n _this.dragObj.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20 } });\n _this.dragAction(e, virtualEle);\n },\n dragStop: function (e) {\n removeClass([_this.element], DRAGGING);\n _this.removeVirtualEle();\n var dropTarget = e.target;\n var preventTargetExpand = false;\n var dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n var isHelperElement = true;\n if (!dropTarget || !dropRoot) {\n detach(e.helper);\n document.body.style.cursor = '';\n isHelperElement = false;\n }\n var listItem = closest(dropTarget, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget, null, e.helper, level);\n eventArgs.preventTargetExpand = preventTargetExpand;\n _this.trigger('nodeDragStop', eventArgs, function (observedArgs) {\n _this.dragParent = observedArgs.draggedParentNode;\n _this.preventExpand = observedArgs.preventTargetExpand;\n if (observedArgs.cancel) {\n if (e.helper.parentNode) {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n isHelperElement = false;\n }\n _this.dragStartAction = false;\n });\n }\n });\n this.dropObj = new Droppable(this.element, {\n out: function (e) {\n if (!isNOU(e) && !e.target.classList.contains(SIBLING) && (_this.dropObj.dragData.default && _this.dropObj.dragData.default.helper.classList.contains(ROOT))) {\n document.body.style.cursor = 'not-allowed';\n }\n },\n over: function (e) {\n document.body.style.cursor = '';\n },\n drop: function (e) {\n _this.dropAction(e);\n }\n });\n };\n TreeView.prototype.dragCancelAction = function (virtualEle) {\n detach(virtualEle);\n removeClass([this.element], DRAGGING);\n this.dragStartAction = false;\n };\n TreeView.prototype.dragAction = function (e, virtualEle) {\n var dropRoot = closest(e.target, '.' + DROPPABLE);\n var dropWrap = closest(e.target, '.' + TEXTWRAP);\n var icon = select('div.' + ICON, virtualEle);\n removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n this.removeVirtualEle();\n document.body.style.cursor = '';\n var classList = e.target.classList;\n if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n dropWrap = e.target.nextElementSibling;\n }\n if (dropRoot) {\n var dropLi = closest(e.target, '.' + LISTITEM);\n var checkWrapper = closest(e.target, '.' + CHECKBOXWRAP);\n var collapse = closest(e.target, '.' + COLLAPSIBLE);\n var expand = closest(e.target, '.' + EXPANDABLE);\n if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n if (this.hasTemplate && dropLi) {\n var templateTarget = select(this.fullRowSelect ? '.' + FULLROW : '.' + TEXTWRAP, dropLi);\n if ((e && (!expand && !collapse) && e.event.offsetY < 7 && !checkWrapper) || (((expand && e.event.offsetY < 5) || (collapse && e.event.offsetX < 3)))) {\n var index = this.fullRowSelect ? (1) : (0);\n this.appendIndicator(dropLi, icon, index);\n }\n else if ((e && (!expand && !collapse) && !checkWrapper && templateTarget && e.event.offsetY > templateTarget.offsetHeight - 10) || ((expand && e.event.offsetY > 19) || (collapse && e.event.offsetX > 19))) {\n var index = this.fullRowSelect ? (2) : (1);\n this.appendIndicator(dropLi, icon, index);\n }\n else {\n addClass([icon], DROPIN);\n }\n }\n else {\n if ((dropLi && e && (!expand && !collapse) && (e.event.offsetY < 7) && !checkWrapper) || (((expand && e.event.offsetY < 5) || (collapse && e.event.offsetX < 3)))) {\n var index = this.fullRowSelect ? (1) : (0);\n this.appendIndicator(dropLi, icon, index);\n }\n else if ((dropLi && e && (!expand && !collapse) && (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10)) && !checkWrapper) || (((expand && e.event.offsetY > 19) || (collapse && e.event.offsetX > 19)))) {\n var index = this.fullRowSelect ? (2) : (1);\n this.appendIndicator(dropLi, icon, index);\n }\n else {\n addClass([icon], DROPIN);\n }\n }\n }\n else if (e.target.nodeName === 'LI' && (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi))) {\n addClass([icon], DROPNEXT);\n this.renderVirtualEle(e);\n }\n else if (e.target.classList.contains(SIBLING)) {\n addClass([icon], DROPNEXT);\n }\n else {\n addClass([icon], DROPOUT);\n }\n }\n else {\n addClass([icon], NODROP);\n document.body.style.cursor = 'not-allowed';\n }\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = this.getDragEvent(e.event, this, e.target, e.target, null, virtualEle, level);\n if (eventArgs.dropIndicator) {\n removeClass([icon], eventArgs.dropIndicator);\n }\n this.trigger('nodeDragging', eventArgs);\n if (eventArgs.dropIndicator) {\n addClass([icon], eventArgs.dropIndicator);\n }\n };\n TreeView.prototype.appendIndicator = function (dropLi, icon, index) {\n addClass([icon], DROPNEXT);\n var virEle = this.createElement('div', { className: SIBLING });\n dropLi.insertBefore(virEle, dropLi.children[index]);\n };\n /* eslint-disable */\n TreeView.prototype.dropAction = function (e) {\n var offsetY = e.event.offsetY;\n var dropTarget = e.target;\n var dragObj;\n var level;\n var drop = false;\n var dragInstance;\n var nodeData = [];\n var liArray = [];\n dragInstance = e.dragData.draggable;\n for (var i_1 = 0; i_1 < dragInstance.ej2_instances.length; i_1++) {\n if (dragInstance.ej2_instances[i_1] instanceof TreeView_1) {\n dragObj = dragInstance.ej2_instances[i_1];\n break;\n }\n }\n if (dragObj && dragObj.dragTarget) {\n var dragTarget = dragObj.dragTarget;\n var dragLi = (closest(dragTarget, '.' + LISTITEM));\n var dropLi = (closest(dropTarget, '.' + LISTITEM));\n liArray.push(dragLi);\n if (dropLi == null && dropTarget.classList.contains(ROOT)) {\n dropLi = dropTarget.firstElementChild;\n }\n detach(e.droppedElement);\n document.body.style.cursor = '';\n if (!dropLi || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n return;\n }\n if (dragObj.allowMultiSelection && dragLi.classList.contains(ACTIVE)) {\n var sNodes = selectAll('.' + ACTIVE, dragObj.element);\n liArray = sNodes;\n if (e.target.offsetHeight <= 33 && offsetY > e.target.offsetHeight - 10 && offsetY > 6) {\n for (var i_2 = sNodes.length - 1; i_2 >= 0; i_2--) {\n if (dropLi.isSameNode(sNodes[i_2]) || this.isDescendant(sNodes[i_2], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[i_2], dropLi, e, dragObj, offsetY);\n }\n }\n else {\n for (var i_3 = 0; i_3 < sNodes.length; i_3++) {\n if (dropLi.isSameNode(sNodes[i_3]) || this.isDescendant(sNodes[i_3], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[i_3], dropLi, e, dragObj, offsetY);\n }\n }\n }\n else {\n this.appendNode(dropTarget, dragLi, dropLi, e, dragObj, offsetY);\n }\n level = parseInt(dragLi.getAttribute('aria-level'), 10);\n drop = true;\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n for (var i = 0; i < liArray.length; i++) {\n nodeData.push(this.getNode(liArray[i]));\n }\n this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.dragData.draggedElement, null, level, drop));\n if (dragObj.element.id !== this.element.id) {\n dragObj.triggerEvent('nodeDropped', nodeData);\n this.isNodeDropped = true;\n this.fields.dataSource = this.treeData;\n }\n this.triggerEvent('nodeDropped', nodeData);\n };\n TreeView.prototype.appendNode = function (dropTarget, dragLi, dropLi, e, dragObj, offsetY) {\n var checkWrapper = closest(dropTarget, '.' + CHECKBOXWRAP);\n var collapse = closest(e.target, '.' + COLLAPSIBLE);\n var expand = closest(e.target, '.' + EXPANDABLE);\n if (!dragLi.classList.contains('e-disable') && !checkWrapper && ((expand && e.event.offsetY < 5) || (collapse && e.event.offsetX < 3) || (expand && e.event.offsetY > 19) || (collapse && e.event.offsetX > 19) || (!expand && !collapse))) {\n if (dropTarget.nodeName === 'LI') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else if (dropTarget.firstElementChild && dropTarget.classList.contains(ROOT)) {\n if (dropTarget.firstElementChild.nodeName === 'UL') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n }\n else if ((dropTarget.classList.contains('e-icon-collapsible')) || (dropTarget.classList.contains('e-icon-expandable'))) {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY);\n }\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY, true);\n }\n };\n TreeView.prototype.dropAsSiblingNode = function (dragLi, dropLi, e, dragObj) {\n var dropUl = closest(dropLi, '.' + PARENTITEM);\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var pre;\n if (e.target.offsetHeight > 0 && e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n else if (e.target.classList.contains('e-icon-expandable') || (e.target.classList.contains('e-icon-collapsible'))) {\n if ((e.event.offsetY < 5) || (e.event.offsetX < 3)) {\n pre = true;\n }\n else if ((e.event.offsetY > 15) || (e.event.offsetX > 17)) {\n pre = false;\n }\n }\n if ((e.target.classList.contains('e-icon-expandable')) || (e.target.classList.contains('e-icon-collapsible'))) {\n var target = e.target.closest('li');\n dropUl.insertBefore(dragLi, pre ? target : target.nextElementSibling);\n }\n else {\n dropUl.insertBefore(dragLi, pre ? e.target : e.target.nextElementSibling);\n }\n this.moveData(dragLi, dropLi, dropUl, pre, dragObj);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.dropAsChildNode = function (dragLi, dropLi, dragObj, index, e, pos, isCheck) {\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var dropParentUl = closest(dropLi, '.' + PARENTITEM);\n var templateTarget;\n if (e && e.target) {\n templateTarget = select(this.fullRowSelect ? '.' + FULLROW : '.' + TEXTWRAP, dropLi);\n }\n if (e && (pos < 7) && !isCheck) {\n dropParentUl.insertBefore(dragLi, dropLi);\n this.moveData(dragLi, dropLi, dropParentUl, true, dragObj);\n }\n else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10)) && !isCheck && !this.hasTemplate) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n this.moveData(dragLi, dropLi, dropParentUl, false, dragObj);\n }\n else if (this.hasTemplate && templateTarget && pos > templateTarget.offsetHeight - 10 && !isCheck) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n this.moveData(dragLi, dropLi, dropParentUl, false, dragObj);\n }\n else {\n var dropUl = this.expandParent(dropLi);\n var childLi = dropUl.childNodes[index];\n dropUl.insertBefore(dragLi, childLi);\n this.moveData(dragLi, childLi, dropUl, true, dragObj);\n }\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.moveData = function (dragLi, dropLi, dropUl, pre, dragObj) {\n var dropParentLi = closest(dropUl, '.' + LISTITEM);\n var id = this.getId(dragLi);\n var removedData = dragObj.updateChildField(dragObj.treeData, dragObj.fields, id, null, null, true);\n var refId = this.getId(dropLi);\n var index = this.getDataPos(this.treeData, this.fields, refId);\n var parentId = this.getId(dropParentLi);\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', true);\n var pos = isNOU(index) ? this.treeData.length : (pre ? index : index + 1);\n if (isNOU(parentId) && !this.hasPid) {\n delete removedData[0][this.fields.parentID];\n }\n else {\n var currPid = this.isNumberTypeId ? parseFloat(parentId) : parentId;\n setValue(this.fields.parentID, currPid, removedData[0]);\n }\n this.treeData.splice(pos, 0, removedData[0]);\n if (dragObj.element.id !== this.element.id) {\n var childData = dragObj.removeChildNodes(id);\n pos++;\n for (var i = 0, len = childData.length; i < len; i++) {\n this.treeData.splice(pos, 0, childData[i]);\n pos++;\n }\n dragObj.groupedData = dragObj.getGroupedData(dragObj.treeData, dragObj.fields.parentID);\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n else {\n this.addChildData(this.treeData, this.fields, parentId, removedData, pre ? index : index + 1);\n }\n };\n TreeView.prototype.expandParent = function (dropLi) {\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && this.preventExpand !== true) {\n this.expandAction(dropLi, dropIcon, null);\n }\n var dropUl = select('.' + PARENTITEM, dropLi);\n if (this.preventExpand === true && !dropUl && dropIcon) {\n this.renderChildNodes(dropLi);\n }\n dropUl = select('.' + PARENTITEM, dropLi);\n if (!isNOU(dropUl) && this.preventExpand === true) {\n dropUl.style.display = 'none';\n }\n if (!isNOU(dropUl) && this.preventExpand === false) {\n dropUl.style.display = 'block';\n }\n if (isNOU(dropUl) && this.preventExpand === true) {\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n if (icon) {\n icon.classList.add('e-icon-expandable');\n }\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n if (icon) {\n removeClass([icon], COLLAPSIBLE);\n }\n else {\n ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n }\n dropLi.setAttribute('aria-expanded', 'false');\n dropUl.style.display = 'none';\n }\n if (isNOU(dropUl)) {\n var args = this.expandArgs;\n if (isNOU(args) || args.name != 'nodeExpanding') {\n this.trigger('nodeExpanding', this.getExpandEvent(dropLi, null));\n }\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n if (icon) {\n removeClass([icon], EXPANDABLE);\n }\n else {\n ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n icon = select('div.' + ICON, dropLi);\n removeClass([icon], EXPANDABLE);\n }\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n this.addExpand(dropLi);\n this.trigger('nodeExpanded', this.getExpandEvent(dropLi, null));\n }\n return dropUl;\n };\n TreeView.prototype.updateElement = function (dragParentUl, dragParentLi) {\n if (dragParentLi && dragParentUl.childElementCount === 0) {\n var dragIcon = select('div.' + ICON, dragParentLi);\n detach(dragParentUl);\n detach(dragIcon);\n var parentId = this.getId(dragParentLi);\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', false);\n this.removeExpand(dragParentLi, true);\n }\n };\n TreeView.prototype.updateAriaLevel = function (dragLi) {\n var level = this.parents(dragLi, '.' + PARENTITEM).length;\n dragLi.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, dragLi), level + 1);\n };\n TreeView.prototype.updateChildAriaLevel = function (element, level) {\n if (!isNOU(element)) {\n var cNodes = element.childNodes;\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n liEle.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, liEle), level + 1);\n }\n }\n };\n TreeView.prototype.renderVirtualEle = function (e) {\n var pre;\n if (e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (pre ? 1 : 2) : (pre ? 0 : 1);\n e.target.insertBefore(virEle, e.target.children[index]);\n };\n TreeView.prototype.removeVirtualEle = function () {\n var sibEle = select('.' + SIBLING);\n if (sibEle) {\n detach(sibEle);\n }\n };\n TreeView.prototype.destroyDrag = function () {\n if (this.dragObj && this.dropObj) {\n this.dragObj.destroy();\n this.dropObj.destroy();\n }\n };\n TreeView.prototype.getDragEvent = function (event, obj, dropTarget, target, dragNode, cloneEle, level, drop) {\n var dropLi = dropTarget ? closest(dropTarget, '.' + LISTITEM) : null;\n var dropData = dropLi ? this.getNodeData(dropLi) : null;\n var draggedNode = obj ? obj.dragLi : dragNode;\n var draggedNodeData = obj ? obj.dragData : null;\n var newParent = dropTarget ? this.parents(dropTarget, '.' + LISTITEM) : null;\n var dragLiParent = obj.dragLi.parentElement;\n var dragParent = obj.dragLi ? closest(dragLiParent, '.' + LISTITEM) : null;\n var targetParent = null;\n var indexValue = null;\n var iconCss = [DROPNEXT, DROPIN, DROPOUT, NODROP];\n var iconClass = null;\n var node = (drop === true) ? draggedNode : dropLi;\n var index = node ? closest(node, '.e-list-parent') : null;\n var i = 0;\n var position = null;\n dragParent = (obj.dragLi && dragParent === null) ? closest(dragLiParent, '.' + ROOT) : dragParent;\n dragParent = (drop === true) ? this.dragParent : dragParent;\n if (cloneEle) {\n while (i < 4) {\n if (select('.' + ICON, cloneEle).classList.contains(iconCss[i])) {\n iconClass = iconCss[i];\n break;\n }\n i++;\n }\n }\n if (index) {\n var dropTar = 0;\n for (i = 0; i < index.childElementCount; i++) {\n dropTar = (drop !== true && index.children[i] === draggedNode && dropLi !== draggedNode) ? ++dropTar : dropTar;\n if ((drop !== true && index.children[i].classList.contains('e-hover'))) {\n indexValue = (event.offsetY >= 23) ? i + 1 : i;\n break;\n }\n else if (index.children[i] === node) {\n indexValue = (event.offsetY >= 23) ? i : i;\n break;\n }\n }\n indexValue = (dropTar !== 0) ? --indexValue : indexValue;\n position = (iconClass == \"e-drop-in\") ? \"Inside\" : ((event.offsetY < 7) ? \"Before\" : \"After\");\n }\n if (dropTarget) {\n if (newParent.length === 0) {\n targetParent = null;\n }\n else if (dropTarget.classList.contains(LISTITEM)) {\n targetParent = newParent[0];\n }\n else {\n targetParent = newParent[1];\n }\n }\n if (dropLi === draggedNode) {\n targetParent = dropLi;\n }\n if (dropTarget && target.offsetHeight <= 33 && event.offsetY < target.offsetHeight - 10 && event.offsetY > 6) {\n targetParent = dropLi;\n if (drop !== true) {\n level = ++level;\n var parent_2 = targetParent ? select('.e-list-parent', targetParent) : null;\n indexValue = (parent_2) ? parent_2.children.length : 0;\n if (!(this.fields.dataSource instanceof DataManager) && parent_2 === null && targetParent) {\n var parent_3 = targetParent.hasAttribute('data-uid') ?\n this.getChildNodes(this.fields.dataSource, targetParent.getAttribute('data-uid').toString()) : null;\n indexValue = (parent_3) ? parent_3.length : 0;\n }\n }\n }\n return {\n cancel: false,\n clonedNode: cloneEle,\n event: event,\n draggedNode: draggedNode,\n draggedNodeData: draggedNodeData,\n droppedNode: dropLi,\n droppedNodeData: dropData,\n dropIndex: indexValue,\n dropLevel: level,\n draggedParentNode: dragParent,\n dropTarget: targetParent,\n dropIndicator: iconClass,\n target: target,\n position: position,\n };\n };\n TreeView.prototype.addFullRow = function (toAdd) {\n var len = this.liList.length;\n if (toAdd) {\n for (var i = 0; i < len; i++) {\n this.createFullRow(this.liList[i]);\n }\n }\n else {\n for (var i = 0; i < len; i++) {\n var rowDiv = select('.' + FULLROW, this.liList[i]);\n detach(rowDiv);\n }\n }\n };\n TreeView.prototype.createFullRow = function (item) {\n var rowDiv = this.createElement('div', { className: FULLROW });\n item.insertBefore(rowDiv, item.childNodes[0]);\n };\n TreeView.prototype.addMultiSelect = function (toAdd) {\n if (toAdd) {\n var liEles = selectAll('.' + LISTITEM + ':not([aria-selected=\"true\"])', this.element);\n for (var _i = 0, liEles_1 = liEles; _i < liEles_1.length; _i++) {\n var ele = liEles_1[_i];\n ele.setAttribute('aria-selected', 'false');\n }\n }\n else {\n var liEles = selectAll('.' + LISTITEM + '[aria-selected=\"false\"]', this.element);\n for (var _a = 0, liEles_2 = liEles; _a < liEles_2.length; _a++) {\n var ele = liEles_2[_a];\n ele.removeAttribute('aria-selected');\n }\n }\n };\n TreeView.prototype.collapseByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var cNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n var icon = select('.' + COLLAPSIBLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.collapseNode(liEle, icon, null);\n }\n this.collapseByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.collapseAllNodes = function (excludeHiddenNodes) {\n var cIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + COLLAPSIBLE, this.element));\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.collapseNode(liEle, icon, null);\n }\n };\n TreeView.prototype.expandByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var eNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n var liEle = eNodes[i];\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.expandAction(liEle, icon, null);\n }\n this.expandByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.expandAllNodes = function (excludeHiddenNodes) {\n var eIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + EXPANDABLE, this.element));\n for (var i = 0, len = eIcons.length; i < len; i++) {\n var icon = eIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.expandAction(liEle, icon, null, true);\n }\n };\n TreeView.prototype.getVisibleNodes = function (excludeHiddenNodes, nodes) {\n var vNodes = Array.prototype.slice.call(nodes);\n if (excludeHiddenNodes) {\n for (var i = 0; i < vNodes.length; i++) {\n if (!isVisible(vNodes[i])) {\n vNodes.splice(i, 1);\n i--;\n }\n }\n }\n return vNodes;\n };\n TreeView.prototype.removeNode = function (node) {\n var dragParentUl = closest(node, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n if (!isNOU(this.nodeTemplateFn)) {\n this.destroyTemplate(node);\n }\n detach(node);\n this.updateElement(dragParentUl, dragParentLi);\n this.removeData(node);\n };\n TreeView.prototype.updateInstance = function () {\n this.updateList();\n this.updateSelectedNodes();\n this.updateExpandedNodes();\n };\n TreeView.prototype.updateList = function () {\n this.liList = Array.prototype.slice.call(selectAll('.' + LISTITEM, this.element));\n };\n TreeView.prototype.updateSelectedNodes = function () {\n this.setProperties({ selectedNodes: [] }, true);\n var sNodes = selectAll('.' + ACTIVE, this.element);\n this.selectGivenNodes(sNodes);\n };\n TreeView.prototype.updateExpandedNodes = function () {\n this.setProperties({ expandedNodes: [] }, true);\n var eNodes = selectAll('[aria-expanded=\"true\"]', this.element);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n this.addExpand(eNodes[i]);\n }\n };\n TreeView.prototype.removeData = function (node) {\n if (this.dataType === 1) {\n var dm = new DataManager(this.treeData);\n var id = this.getId(node);\n var data = {};\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = newId;\n dm.remove(this.fields.id, data);\n this.removeChildNodes(id);\n }\n else {\n var id = this.getId(node);\n this.updateChildField(this.treeData, this.fields, id, null, null, true);\n }\n };\n TreeView.prototype.removeChildNodes = function (parentId) {\n var cNodes = this.getChildGroup(this.groupedData, parentId, false);\n var childData = [];\n if (cNodes) {\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var dm = new DataManager(this.treeData);\n var id = getValue(this.fields.id, cNodes[i]).toString();\n var data = {};\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = currId;\n var nodeData = dm.remove(this.fields.id, data);\n childData.push(nodeData[0]);\n this.removeChildNodes(id);\n }\n }\n return childData;\n };\n TreeView.prototype.doGivenAction = function (nodes, selector, toExpand) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var icon = select('.' + selector, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n toExpand ? this.expandAction(liEle, icon, null) : this.collapseNode(liEle, icon, null);\n }\n }\n };\n TreeView.prototype.addGivenNodes = function (nodes, dropLi, index, isRemote, dropEle) {\n if (nodes.length === 0) {\n return;\n }\n var sNodes = this.getSortedData(nodes);\n var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n if (isRemote) {\n this.updateMapper(level);\n }\n var li = ListBase.createListItemFromJson(this.createElement, sNodes, this.listBaseOption, level);\n var id = this.getId(dropLi);\n var refNode;\n var dropIcon1;\n if (!isNullOrUndefined(dropLi)) {\n dropIcon1 = select('div.' + ICON, dropLi);\n }\n if (this.dataType === 1 && dropIcon1 && dropIcon1.classList.contains(EXPANDABLE) && !isNOU(this.element.offsetParent) && !this.element.offsetParent.parentElement.classList.contains('e-filemanager')) {\n this.preventExpand = true;\n }\n if (this.dataType !== 1) {\n this.addChildData(this.treeData, this.fields, id, nodes, index);\n this.isFirstRender = false;\n }\n var dropUl;\n if (!dropEle) {\n dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n }\n else {\n dropUl = dropEle;\n }\n refNode = dropUl.childNodes[index];\n if (!this.isFirstRender || this.dataType === 1) {\n var args = this.expandArgs;\n if (refNode || this.sortOrder === 'None') {\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[i], refNode);\n }\n if (this.dataType === 1 && !isNullOrUndefined(dropLi) && !isNOU(this.element.offsetParent) && !this.element.offsetParent.parentElement.classList.contains('e-filemanager')) {\n this.preventExpand = false;\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && (isNOU(args) || args.name != 'nodeExpanding')) {\n this.expandAction(dropLi, dropIcon, null);\n }\n }\n }\n if (!refNode && ((this.sortOrder === 'Ascending') || (this.sortOrder === 'Descending'))) {\n if (dropUl.childNodes.length === 0) {\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[i], refNode);\n }\n if (this.dataType === 1 && !isNullOrUndefined(dropLi) && !isNOU(this.element.offsetParent) && !this.element.offsetParent.parentElement.classList.contains('e-filemanager')) {\n this.preventExpand = false;\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && (isNOU(args) || args.name != 'nodeExpanding')) {\n this.expandAction(dropLi, dropIcon, null);\n }\n }\n }\n else {\n var cNodes = dropUl.childNodes;\n for (var i = 0; i < li.length; i++) {\n for (var j = 0; j < cNodes.length; j++) {\n var returnValue = (this.sortOrder === 'Ascending') ? cNodes[j].textContent.toUpperCase() > li[i].innerText.toUpperCase() : cNodes[j].textContent.toUpperCase() < li[i].innerText.toUpperCase();\n if (returnValue) {\n dropUl.insertBefore(li[i], cNodes[j]);\n break;\n }\n dropUl.insertBefore(li[i], cNodes[cNodes.length]);\n }\n }\n }\n }\n }\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, id, 'hasChildren', true);\n var refId = this.getId(refNode);\n var pos = isNOU(refId) ? this.treeData.length : this.getDataPos(this.treeData, this.fields, refId);\n for (var j = 0; j < nodes.length; j++) {\n if (!isNOU(id)) {\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n setValue(this.fields.parentID, currId, nodes[j]);\n }\n this.treeData.splice(pos, 0, nodes[j]);\n pos++;\n }\n }\n this.finalizeNode(dropUl);\n };\n TreeView.prototype.updateMapper = function (level) {\n var mapper = (level === 1) ? this.fields : this.getChildFields(this.fields, level - 1, 1);\n this.updateListProp(mapper);\n };\n TreeView.prototype.updateListProp = function (mapper) {\n var prop = this.getActualProperties(mapper);\n this.listBaseOption.fields = prop;\n this.listBaseOption.fields.url = prop.hasOwnProperty('navigateUrl') ? prop.navigateUrl : 'navigateUrl';\n };\n TreeView.prototype.getDataPos = function (obj, mapper, id) {\n var pos = null;\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n return i;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var data = getValue(mapper.child, obj[i]);\n pos = this.getDataPos(data, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var items = getValue('child', obj[i]);\n pos = this.getDataPos(items, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n }\n return pos;\n };\n TreeView.prototype.addChildData = function (obj, mapper, id, data, index) {\n var updated;\n if (isNOU(id)) {\n index = isNOU(index) ? obj.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n obj.splice(index, 0, data[k]);\n index++;\n }\n return updated;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n if ((typeof mapper.child === 'string' && (obj[i].hasOwnProperty(mapper.child) && obj[i][mapper.child] !== null)) ||\n ((this.fields.dataSource instanceof DataManager) && obj[i].hasOwnProperty('child'))) {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n var childData = getValue(key, obj[i]);\n if (isNOU(childData)) {\n childData = [];\n }\n index = isNOU(index) ? childData.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n childData.splice(index, 0, data[k]);\n index++;\n }\n }\n else {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n obj[i][key] = data;\n }\n return true;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childObj = getValue(mapper.child, obj[i]);\n updated = this.addChildData(childObj, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n else if ((this.fields.dataSource instanceof DataManager) && !isNOU(getValue('child', obj[i]))) {\n var childData = getValue('child', obj[i]);\n updated = this.addChildData(childData, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n }\n return updated;\n };\n TreeView.prototype.doDisableAction = function (nodes) {\n var validNodes = this.nodeType(nodes);\n var validID = this.checkValidId(validNodes);\n this.validArr = [];\n for (var i = 0, len = validID.length; i < len; i++) {\n var id = validID[i][this.fields.id].toString();\n if (id && this.disableNode.indexOf(id) === -1) {\n this.disableNode.push(id);\n }\n var liEle = this.getElement(id);\n if (liEle) {\n liEle.setAttribute('aria-disabled', 'true');\n addClass([liEle], DISABLE);\n }\n }\n };\n TreeView.prototype.doEnableAction = function (nodes) {\n var strNodes = this.nodeType(nodes);\n for (var i = 0, len = strNodes.length; i < len; i++) {\n var liEle = this.getElement(strNodes[i]);\n var id = strNodes[i];\n if (id && this.disableNode.indexOf(id) !== -1) {\n this.disableNode.splice(this.disableNode.indexOf(id), 1);\n }\n if (liEle) {\n liEle.removeAttribute('aria-disabled');\n removeClass([liEle], DISABLE);\n }\n }\n };\n TreeView.prototype.nodeType = function (nodes) {\n var validID = [];\n for (var i = 0, len = nodes.length; i < len; i++) {\n var id = void 0;\n if (typeof nodes[i] == \"string\") {\n id = (nodes[i]) ? nodes[i].toString() : null;\n }\n else if (typeof nodes[i] === \"object\") {\n id = nodes[i] ? nodes[i].getAttribute(\"data-uid\").toString() : null;\n }\n if (validID.indexOf(id) == -1) {\n validID.push(id);\n }\n }\n return validID;\n };\n TreeView.prototype.checkValidId = function (node) {\n var _this = this;\n if (this.dataType === 1) {\n this.validArr = this.treeData.filter(function (data) {\n return node.indexOf(data[_this.fields.id] ? data[_this.fields.id].toString() : null) !== -1;\n });\n }\n else if (this.dataType === 2) {\n for (var k = 0; k < this.treeData.length; k++) {\n var id = this.treeData[k][this.fields.id] ? this.treeData[k][this.fields.id].toString() : null;\n if (node.indexOf(id) !== -1) {\n this.validArr.push(this.treeData[k]);\n }\n var childItems = getValue(this.fields.child.toString(), this.treeData[k]);\n if (childItems) {\n this.filterNestedChild(childItems, node);\n }\n }\n }\n return this.validArr;\n };\n TreeView.prototype.filterNestedChild = function (treeData, nodes) {\n for (var k = 0; k < treeData.length; k++) {\n var id = treeData[k][this.fields.id] ? treeData[k][this.fields.id].toString() : null;\n if (nodes.indexOf(id) !== -1) {\n this.validArr.push(treeData[k]);\n }\n var childItems = getValue(this.fields.child.toString(), treeData[k]);\n if (childItems) {\n this.filterNestedChild(childItems, nodes);\n }\n }\n };\n TreeView.prototype.setTouchClass = function () {\n var ele = closest(this.element, '.' + BIGGER);\n this.touchClass = isNOU(ele) ? '' : SMALL;\n };\n TreeView.prototype.updatePersistProp = function () {\n this.removeField(this.treeData, this.fields, ['selected', 'expanded']);\n var sleNodes = this.selectedNodes;\n for (var l = 0, slelen = sleNodes.length; l < slelen; l++) {\n this.updateField(this.treeData, this.fields, sleNodes[l], 'selected', true);\n }\n var enodes = this.expandedNodes;\n for (var k = 0, nodelen = enodes.length; k < nodelen; k++) {\n this.updateField(this.treeData, this.fields, enodes[k], 'expanded', true);\n }\n if (this.showCheckBox) {\n this.removeField(this.treeData, this.fields, ['isChecked']);\n var cnodes = this.checkedNodes;\n for (var m = 0, nodelen = cnodes.length; m < nodelen; m++) {\n this.updateField(this.treeData, this.fields, cnodes[m], 'isChecked', true);\n }\n }\n };\n TreeView.prototype.removeField = function (obj, mapper, names) {\n if (isNOU(obj) || isNOU(mapper)) {\n return;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n for (var j = 0; j < names.length; j++) {\n var field = this.getMapperProp(mapper, names[j]);\n if (!isNOU(obj[i][field])) {\n delete obj[i][field];\n }\n }\n if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n this.removeField(getValue(mapper.child, obj[i]), this.getChildMapper(mapper), names);\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n this.removeField(getValue('child', obj[i]), this.getChildMapper(mapper), names);\n }\n }\n };\n TreeView.prototype.getMapperProp = function (mapper, fieldName) {\n switch (fieldName) {\n case 'selected':\n return !isNOU(mapper.selected) ? mapper.selected : 'selected';\n case 'expanded':\n return !isNOU(mapper.expanded) ? mapper.expanded : 'expanded';\n case 'isChecked':\n return !isNOU(mapper.isChecked) ? mapper.isChecked : 'isChecked';\n case 'hasChildren':\n return !isNOU(mapper.hasChildren) ? mapper.hasChildren : 'hasChildren';\n default:\n return fieldName;\n }\n };\n TreeView.prototype.updateField = function (obj, mapper, id, key, value) {\n var childNodes;\n if (isNOU(id)) {\n return;\n }\n else if (this.dataType === 1) {\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', newId, false));\n setValue(this.getMapperProp(mapper, key), value, resultData[0]);\n }\n else {\n this.updateChildField(obj, mapper, id, key, value);\n }\n };\n TreeView.prototype.updateChildField = function (obj, mapper, id, key, value, remove) {\n var removedData;\n if (isNOU(obj)) {\n return removedData;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n if (remove) {\n removedData = obj.splice(i, 1);\n }\n else {\n setValue(this.getMapperProp(mapper, key), value, obj[i]);\n removedData = [];\n }\n return removedData;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n removedData = this.updateChildField(childData, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var childItems = getValue('child', obj[i]);\n removedData = this.updateChildField(childItems, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n }\n return removedData;\n };\n TreeView.prototype.triggerEvent = function (action, node) {\n this.renderReactTemplates();\n if (action === 'addNodes') {\n var nodeData = [];\n for (var i = 0; i < node.length; i++) {\n nodeData.push(this.getNode(this.getElement(isNOU(node[i][this.fields.id]) ? getValue(this.fields.id, node[i]).toString() : null)));\n }\n node = nodeData;\n }\n var eventArgs = { data: this.treeData, action: action, nodeData: node };\n this.trigger('dataSourceChanged', eventArgs);\n };\n TreeView.prototype.wireInputEvents = function (inpEle) {\n EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n };\n TreeView.prototype.wireEditingEvents = function (toBind) {\n var _this = this;\n if (toBind && !this.disabled) {\n var proxy_2 = this;\n this.touchEditObj = new Touch(this.element, {\n tap: function (e) {\n if (_this.isDoubleTapped(e) && e.tapCount === 2) {\n e.originalEvent.preventDefault();\n proxy_2.editingHandler(e.originalEvent);\n }\n }\n });\n }\n else {\n if (this.touchEditObj) {\n this.touchEditObj.destroy();\n }\n }\n };\n TreeView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n var proxy_3 = this;\n this.touchClickObj = new Touch(this.element, {\n tap: function (e) {\n proxy_3.clickHandler(e);\n }\n });\n }\n else {\n if (this.touchClickObj) {\n this.touchClickObj.destroy();\n }\n }\n };\n TreeView.prototype.wireExpandOnEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var proxy_4 = this;\n this.touchExpandObj = new Touch(this.element, {\n tap: function (e) {\n if ((_this.expandOnType === 'Click' || (_this.expandOnType === 'DblClick' && _this.isDoubleTapped(e) && e.tapCount === 2))\n && e.originalEvent.which !== 3) {\n proxy_4.expandHandler(e);\n }\n }\n });\n }\n else {\n if (this.touchExpandObj) {\n this.touchExpandObj.destroy();\n }\n }\n };\n TreeView.prototype.mouseDownHandler = function (e) {\n this.mouseDownStatus = true;\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (e.ctrlKey && this.allowMultiSelection) {\n EventHandler.add(this.element, 'contextmenu', this.preventContextMenu, this);\n }\n };\n ;\n TreeView.prototype.preventContextMenu = function (e) {\n e.preventDefault();\n };\n TreeView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'mousedown', this.mouseDownHandler, this);\n this.wireClickEvent(true);\n if (this.expandOnType !== 'None') {\n this.wireExpandOnEvent(true);\n }\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.element, 'mouseout', this.onMouseLeave, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n };\n TreeView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'mousedown', this.mouseDownHandler);\n this.wireClickEvent(false);\n this.wireExpandOnEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.element, 'mouseout', this.onMouseLeave);\n if (!this.disabled) {\n this.keyboardModule.destroy();\n }\n };\n TreeView.prototype.parents = function (element, selector) {\n var matched = [];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, selector)) {\n matched.push(el);\n }\n el = el.parentNode;\n }\n return matched;\n };\n TreeView.prototype.isDoubleTapped = function (e) {\n var target = e.originalEvent.target;\n var secondTap;\n if (target && e.tapCount) {\n if (e.tapCount === 1) {\n this.firstTap = closest(target, '.' + LISTITEM);\n }\n else if (e.tapCount === 2) {\n secondTap = closest(target, '.' + LISTITEM);\n }\n }\n return (this.firstTap === secondTap);\n };\n TreeView.prototype.isDescendant = function (parent, child) {\n var node = child.parentNode;\n while (!isNOU(node)) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n TreeView.prototype.showSpinner = function (element) {\n addClass([element], LOAD);\n createSpinner({\n target: element,\n width: Browser.isDevice ? 16 : 14\n }, this.createElement);\n showSpinner(element);\n };\n TreeView.prototype.hideSpinner = function (element) {\n hideSpinner(element);\n element.innerHTML = '';\n removeClass([element], LOAD);\n };\n TreeView.prototype.setCheckedNodes = function (nodes) {\n nodes = JSON.parse(JSON.stringify(nodes));\n this.uncheckAll(this.checkedNodes);\n this.setIndeterminate(nodes);\n if (nodes.length > 0) {\n this.checkAll(nodes);\n }\n };\n /**\n * Checks whether the checkedNodes entered are valid and sets the valid checkedNodes while changing via setmodel\n */\n TreeView.prototype.setValidCheckedNode = function (node) {\n if (this.dataType === 1) {\n var mapper = this.fields;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', node, true));\n if (resultData[0]) {\n this.setChildCheckState(resultData, node, resultData[0]);\n if (this.autoCheck) {\n var parent_4 = resultData[0][this.fields.parentID] ? resultData[0][this.fields.parentID].toString() : null;\n var childNodes = this.getChildNodes(this.treeData, parent_4);\n var count = 0;\n for (var len = 0; len < childNodes.length; len++) {\n var childId = childNodes[len][this.fields.id].toString();\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n if (count === childNodes.length && this.checkedNodes.indexOf(parent_4) === -1 && parent_4) {\n this.checkedNodes.push(parent_4);\n }\n }\n }\n }\n else if (this.dataType === 2) {\n for (var a = 0; a < this.treeData.length; a++) {\n var index = this.treeData[a][this.fields.id] ? this.treeData[a][this.fields.id].toString() : '';\n if (index === node && this.checkedNodes.indexOf(node) === -1) {\n this.checkedNodes.push(node);\n break;\n }\n var childItems = getValue(this.fields.child.toString(), this.treeData[a]);\n if (childItems) {\n this.setChildCheckState(childItems, node, this.treeData[a]);\n }\n }\n }\n };\n /**\n * Checks whether the checkedNodes entered are valid and sets the valid checkedNodes while changing via setmodel(for hierarchical DS)\n */\n TreeView.prototype.setChildCheckState = function (childItems, node, treeData) {\n var checkedParent;\n var count = 0;\n if (this.dataType === 1) {\n if (treeData) {\n checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : null;\n }\n for (var index = 0; index < childItems.length; index++) {\n var checkNode = childItems[index][this.fields.id] ? childItems[index][this.fields.id].toString() : null;\n if (treeData && checkedParent && this.autoCheck) {\n if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkNode) === -1) {\n this.checkedNodes.push(checkNode);\n }\n }\n if (checkNode === node && this.checkedNodes.indexOf(node) === -1) {\n this.checkedNodes.push(node);\n }\n var subChildItems = this.getChildNodes(this.treeData, checkNode);\n if (subChildItems) {\n this.setChildCheckState(subChildItems, node, treeData);\n }\n }\n }\n else {\n if (treeData) {\n checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : '';\n }\n for (var index = 0; index < childItems.length; index++) {\n var checkedChild = childItems[index][this.fields.id] ? childItems[index][this.fields.id].toString() : '';\n if (treeData && checkedParent && this.autoCheck) {\n if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n }\n }\n if (checkedChild === node && this.checkedNodes.indexOf(node) === -1) {\n this.checkedNodes.push(node);\n }\n var subChildItems = getValue(this.fields.child.toString(), childItems[index]);\n if (subChildItems) {\n this.setChildCheckState(subChildItems, node, childItems[index]);\n }\n if (this.checkedNodes.indexOf(checkedChild) !== -1 && this.autoCheck) {\n count++;\n }\n if (count === childItems.length && this.checkedNodes.indexOf(checkedParent) === -1 && this.autoCheck) {\n this.checkedNodes.push(checkedParent);\n }\n }\n }\n };\n TreeView.prototype.setIndeterminate = function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n this.setValidCheckedNode(nodes[i]);\n }\n };\n TreeView.prototype.updatePosition = function (id, newData, isRefreshChild, childValue) {\n if (this.dataType === 1) {\n var pos = this.getDataPos(this.treeData, this.fields, id);\n this.treeData.splice(pos, 1, newData);\n if (isRefreshChild) {\n this.removeChildNodes(id);\n for (var j = 0; j < childValue.length; j++) {\n this.treeData.splice(pos, 0, childValue[j]);\n pos++;\n }\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n else {\n this.updateChildPosition(this.treeData, this.fields, id, [newData], undefined);\n }\n };\n TreeView.prototype.updateChildPosition = function (treeData, mapper, currID, newData, index) {\n var found;\n for (var i = 0, objlen = treeData.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, treeData[i]);\n if (treeData[i] && nodeId && nodeId.toString() === currID) {\n treeData[i] = newData[0];\n return true;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, treeData[i]))) {\n var childObj = getValue(mapper.child, treeData[i]);\n found = this.updateChildPosition(childObj, this.getChildMapper(mapper), currID, newData, index);\n if (found !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', treeData[i]))) {\n var childData = getValue('child', treeData[i]);\n found = this.updateChildPosition(childData, this.getChildMapper(mapper), currID, newData, index);\n if (found !== undefined) {\n break;\n }\n }\n }\n return found;\n };\n TreeView.prototype.dynamicState = function () {\n this.setDragAndDrop(this.allowDragAndDrop);\n this.wireEditingEvents(this.allowEditing);\n if (!this.disabled) {\n this.wireEvents();\n this.setRipple();\n }\n else {\n this.unWireEvents();\n this.rippleFn();\n this.rippleIconFn();\n }\n };\n TreeView.prototype.crudOperation = function (operation, nodes, target, newText, newNode, index, prevent) {\n var _this = this;\n var data = this.fields.dataSource;\n var matchedArr = [];\n var query = this.getQuery(this.fields);\n var key = this.fields.id;\n var crud;\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n var nodesID = [];\n if (nodes) {\n nodesID = this.nodeType(nodes);\n }\n else if (target) {\n if (typeof target == \"string\") {\n nodesID[0] = target.toString();\n }\n else if (typeof target === \"object\") {\n nodesID[0] = target.getAttribute(\"data-uid\").toString();\n }\n }\n for (var i = 0, len = nodesID.length; i < len; i++) {\n var liEle = this.getElement(nodesID[i]);\n if (isNullOrUndefined(liEle)) {\n continue;\n }\n var removedData = this.getNodeObject(nodesID[i]);\n matchedArr.push(removedData);\n }\n switch (operation) {\n case 'delete':\n if (nodes.length == 1) {\n crud = data.remove(key, matchedArr[0], query.fromTable, query);\n }\n else {\n changes.deletedRecords = matchedArr;\n crud = data.saveChanges(changes, key, query.fromTable, query);\n }\n crud.then(function (e) { return _this.deleteSuccess(nodesID); })\n .catch(function (e) { return _this.dmFailure(e); });\n break;\n case 'update':\n matchedArr[0][this.fields.text] = newText;\n crud = data.update(key, matchedArr[0], query.fromTable, query);\n crud.then(function (e) { return _this.editSucess(target, newText, prevent); })\n .catch(function (e) { return _this.dmFailure(e, target, prevent); });\n break;\n case 'insert':\n if (newNode.length == 1) {\n crud = data.insert(newNode[0], query.fromTable, query);\n }\n else {\n var arr = [];\n for (var i = 0, len = newNode.length; i < len; i++) {\n arr.push(newNode[i]);\n }\n changes.addedRecords = arr;\n crud = data.saveChanges(changes, key, query.fromTable, query);\n }\n crud.then(function (e) {\n var dropLi = _this.getElement(target);\n _this.addSuccess(newNode, dropLi, index);\n _this.preventExpand = false;\n }).catch(function (e) { return _this.dmFailure(e); });\n break;\n }\n };\n TreeView.prototype.deleteSuccess = function (nodes) {\n var nodeData = [];\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n nodeData.push(this.getNode(liEle));\n if (isNOU(liEle)) {\n continue;\n }\n this.removeNode(liEle);\n }\n this.updateInstance();\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n this.triggerEvent('removeNode', nodeData);\n };\n TreeView.prototype.editSucess = function (target, newText, prevent) {\n var liEle = this.getElement(target);\n var txtEle = select('.' + LISTTEXT, liEle);\n this.appendNewText(liEle, txtEle, newText, prevent);\n };\n TreeView.prototype.addSuccess = function (nodes, dropLi, index) {\n var dropUl;\n var icon = dropLi ? dropLi.querySelector('.' + ICON) : null;\n var proxy = this;\n if (dropLi && icon && icon.classList.contains(EXPANDABLE) &&\n dropLi.querySelector('.' + PARENTITEM) === null) {\n proxy.renderChildNodes(dropLi, null, function () {\n dropUl = dropLi.querySelector('.' + PARENTITEM);\n proxy.addGivenNodes(nodes, dropLi, index, true, dropUl);\n proxy.triggerEvent('addNodes', nodes);\n });\n }\n else {\n this.addGivenNodes(nodes, dropLi, index, true);\n this.triggerEvent('addNodes', nodes);\n }\n };\n TreeView.prototype.dmFailure = function (e, target, prevent) {\n if (target) {\n this.updatePreviousText(target, prevent);\n }\n this.trigger('actionFailure', { error: e });\n };\n TreeView.prototype.updatePreviousText = function (target, prevent) {\n var liEle = this.getElement(target);\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateText(liEle, txtEle, this.oldText, prevent);\n };\n TreeView.prototype.getHierarchicalParentId = function (node, data, parentsID) {\n var _this = this;\n var index = data.findIndex(function (data) { return data[_this.fields.id] && data[_this.fields.id].toString() === node; });\n if (index == -1) {\n for (var i = 0; i < data.length; i++) {\n var childItems = getValue(this.fields.child.toString(), data[i]);\n if (!isNOU(childItems)) {\n index = childItems.findIndex(function (data) { return data[_this.fields.id] && data[_this.fields.id].toString() === node; });\n if (index == -1) {\n this.getHierarchicalParentId(node, childItems, parentsID);\n }\n else {\n parentsID.push(data[i][this.fields.id].toString());\n this.getHierarchicalParentId(data[i][this.fields.id].toString(), this.treeData, parentsID);\n break;\n }\n }\n }\n }\n return parentsID;\n };\n /**\n * Called internally if any of the property value changed.\n * @param {TreeView} newProp\n * @param {TreeView} oldProp\n * @returns void\n * @private\n */\n TreeView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.setDragAndDrop(this.allowDragAndDrop);\n break;\n case 'dragArea':\n if (this.allowDragAndDrop) {\n this.dragObj.dragArea = this.dragArea;\n }\n break;\n case 'allowEditing':\n this.wireEditingEvents(this.allowEditing);\n break;\n case 'allowMultiSelection':\n if (this.selectedNodes.length > 1) {\n var sNode = this.getElement(this.selectedNodes[0]);\n this.isLoaded = false;\n this.removeSelectAll();\n this.selectNode(sNode, null);\n this.isLoaded = true;\n }\n this.setMultiSelect(this.allowMultiSelection);\n this.addMultiSelect(this.allowMultiSelection);\n break;\n case 'allowTextWrap':\n this.setTextWrap();\n this.updateWrap();\n break;\n case 'checkedNodes':\n if (this.showCheckBox) {\n this.checkedNodes = oldProp.checkedNodes;\n this.setCheckedNodes(newProp.checkedNodes);\n }\n break;\n case 'autoCheck':\n if (this.showCheckBox) {\n this.autoCheck = newProp.autoCheck;\n this.ensureIndeterminate();\n }\n break;\n case 'cssClass':\n this.setCssClass(oldProp.cssClass, newProp.cssClass);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'expandedNodes':\n this.isAnimate = false;\n this.setProperties({ expandedNodes: [] }, true);\n this.collapseAll();\n this.isInitalExpand = true;\n this.setProperties({ expandedNodes: isNOU(newProp.expandedNodes) ? [] : newProp.expandedNodes }, true);\n this.doExpandAction();\n this.isInitalExpand = false;\n this.isAnimate = true;\n break;\n case 'expandOn':\n this.wireExpandOnEvent(false);\n this.setExpandOnType();\n if (this.expandOnType !== 'None' && !this.disabled) {\n this.wireExpandOnEvent(true);\n }\n break;\n case 'disabled':\n this.setDisabledMode();\n this.dynamicState();\n break;\n case 'fields':\n this.isAnimate = false;\n this.isFieldChange = true;\n this.initialRender = true;\n this.reRenderNodes();\n this.initialRender = false;\n this.isAnimate = true;\n this.isFieldChange = false;\n break;\n case 'fullRowSelect':\n this.setFullRow(this.fullRowSelect);\n this.addFullRow(this.fullRowSelect);\n if (this.allowTextWrap) {\n this.setTextWrap();\n this.updateWrap();\n }\n break;\n case 'loadOnDemand':\n if (this.loadOnDemand === false && !this.onLoaded) {\n var nodes = this.element.querySelectorAll('li');\n var i = 0;\n while (i < nodes.length) {\n if (nodes[i].getAttribute('aria-expanded') !== 'true') {\n this.renderChildNodes(nodes[i], true, null, true);\n }\n i++;\n }\n this.onLoaded = true;\n }\n break;\n case 'nodeTemplate':\n this.hasTemplate = false;\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n this.reRenderNodes();\n break;\n case 'selectedNodes':\n this.removeSelectAll();\n this.setProperties({ selectedNodes: newProp.selectedNodes }, true);\n this.doSelectionAction();\n break;\n case 'showCheckBox':\n this.reRenderNodes();\n break;\n case 'sortOrder':\n this.reRenderNodes();\n break;\n case 'fullRowNavigable':\n this.setProperties({ fullRowNavigable: newProp.fullRowNavigable }, true);\n this.listBaseOption.itemNavigable = newProp.fullRowNavigable;\n this.reRenderNodes();\n break;\n }\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n */\n TreeView.prototype.destroy = function () {\n this.clearTemplate();\n this.element.removeAttribute('aria-activedescendant');\n this.unWireEvents();\n this.wireEditingEvents(false);\n if (!this.disabled) {\n this.rippleFn();\n this.rippleIconFn();\n }\n this.setCssClass(this.cssClass, null);\n this.setDragAndDrop(false);\n this.setFullRow(false);\n if (this.ulElement && this.ulElement.parentElement) {\n this.ulElement.parentElement.removeChild(this.ulElement);\n }\n this.ulElement = null;\n this.liList = null;\n this.startNode = null;\n this.firstTap = null;\n this.expandArgs = null;\n this.dragLi = null;\n this.dragTarget = null;\n this.dragParent = null;\n this.dragObj = null;\n this.dropObj = null;\n this.inputObj = null;\n this.touchEditObj = null;\n this.touchExpandObj = null;\n this.touchClickObj = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Adds the collection of TreeView nodes based on target and index position. If target node is not specified,\n * then the nodes are added as children of the given parentID or in the root level of TreeView.\n * @param { { [key: string]: Object }[] } nodes - Specifies the array of JSON data that has to be added.\n * @param { string | Element } target - Specifies ID of TreeView node/TreeView node as target element.\n * @param { number } index - Specifies the index to place the newly added nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n */\n TreeView.prototype.addNodes = function (nodes, target, index, preventTargetExpand) {\n if (isNOU(nodes)) {\n return;\n }\n nodes = JSON.parse(JSON.stringify(nodes));\n var dropLi = this.getElement(target);\n this.preventExpand = preventTargetExpand;\n if (this.fields.dataSource instanceof DataManager) {\n if (!this.isOffline) {\n this.crudOperation('insert', null, target, null, nodes, index, this.preventExpand);\n }\n else {\n this.addSuccess(nodes, dropLi, index);\n }\n }\n else if (this.dataType === 2) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n if (dropLi) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n nodes = this.getSortedData(nodes);\n for (var i = 0; i < nodes.length; i++) {\n var pid = getValue(this.fields.parentID, nodes[i]);\n dropLi = pid ? this.getElement(pid.toString()) : pid;\n this.addGivenNodes([nodes[i]], dropLi, index);\n }\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n this.updateCheckedStateFromDS();\n if (this.showCheckBox && dropLi) {\n this.ensureParentCheckState(dropLi);\n }\n if ((this.fields.dataSource instanceof DataManager === false)) {\n this.preventExpand = false;\n this.triggerEvent('addNodes', nodes);\n }\n };\n /**\n * Editing can also be enabled by using the `beginEdit` property, instead of clicking on the\n * TreeView node. On passing the node ID or element through this property, the edit textBox\n * will be created for the particular node thus allowing us to edit it.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.beginEdit = function (node) {\n var ele = this.getElement(node);\n if (isNOU(ele) || this.disabled) {\n return;\n }\n this.createTextbox(ele, null);\n };\n /**\n * Checks all the unchecked nodes. You can also check specific nodes by passing array of unchecked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.checkAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, true);\n }\n };\n /**\n * Collapses all the expanded TreeView nodes. You can collapse specific nodes by passing array of nodes as argument to this method.\n * You can also collapse all the nodes excluding the hidden nodes by setting **excludeHiddenNodes** to true. If you want to collapse\n * a specific level of nodes, set **level** as argument to collapseAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/ array of TreeView node.\n * @param {number} level - TreeView nodes will collapse up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes of TreeView when collapsing all nodes.\n */\n TreeView.prototype.collapseAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, COLLAPSIBLE, false);\n }\n else {\n if (level > 0) {\n this.collapseByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.collapseAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Disables the collection of nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.disableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doDisableAction(nodes);\n }\n };\n /**\n * Enables the collection of disabled nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.enableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doEnableAction(nodes);\n }\n };\n /**\n * Ensures visibility of the TreeView node by using node ID or node element.\n * When many TreeView nodes are present and we need to find a particular node, `ensureVisible` property\n * helps bring the node to visibility by expanding the TreeView and scrolling to the specific node.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView nodes.\n */\n TreeView.prototype.ensureVisible = function (node) {\n var parentsId = [];\n if (this.dataType == 1) {\n var nodeData = this.getTreeData(node);\n while (nodeData.length != 0 && !isNOU(nodeData[0][this.fields.parentID])) {\n parentsId.push(nodeData[0][this.fields.parentID].toString());\n nodeData = this.getTreeData(nodeData[0][this.fields.parentID].toString());\n }\n }\n else if (this.dataType == 2) {\n parentsId = this.getHierarchicalParentId(node, this.treeData, parentsId).reverse();\n }\n this.expandAll(parentsId);\n var liEle = this.getElement(node);\n if (!isNOU(liEle)) {\n if (typeof node == 'object') {\n var parents = this.parents(liEle, '.' + LISTITEM);\n this.expandAll(parents);\n }\n setTimeout(function () { liEle.scrollIntoView({ behavior: \"smooth\" }); }, 450);\n }\n };\n /**\n * Expands all the collapsed TreeView nodes. You can expand the specific nodes by passing the array of collapsed nodes\n * as argument to this method. You can also expand all the collapsed nodes by excluding the hidden nodes by setting\n * **excludeHiddenNodes** to true to this method. To expand a specific level of nodes, set **level** as argument to expandAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @param {number} level - TreeView nodes will expand up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes when expanding all nodes.\n */\n TreeView.prototype.expandAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, EXPANDABLE, true);\n }\n else {\n if (level > 0) {\n this.expandByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.expandAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Gets all the checked nodes including child, whether it is loaded or not.\n */\n TreeView.prototype.getAllCheckedNodes = function () {\n var checkNodes = this.checkedNodes;\n return checkNodes;\n };\n /**\n * Gets all the disabled nodes including child, whether it is loaded or not.\n */\n TreeView.prototype.getDisabledNodes = function () {\n var disabledNodes = this.disableNode;\n return disabledNodes;\n };\n /**\n * Gets the node's data such as id, text, parentID, selected, isChecked, and expanded by passing the node element or it's ID.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.getNode = function (node) {\n var ele = this.getElement(node);\n return this.getNodeData(ele, true);\n };\n /**\n * To get the updated data source of TreeView after performing some operation like drag and drop, node editing,\n * node selecting/unSelecting, node expanding/collapsing, node checking/unChecking, adding and removing node.\n * * If you pass the ID of TreeView node as arguments for this method then it will return the updated data source\n * of the corresponding node otherwise it will return the entire updated data source of TreeView.\n * * The updated data source also contains custom attributes if you specified in data source.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n * @isGenericType true\n */\n TreeView.prototype.getTreeData = function (node) {\n var id = this.getId(node);\n this.updatePersistProp();\n if (isNOU(id)) {\n return this.treeData;\n }\n else {\n var data = this.getNodeObject(id);\n return isNOU(data) ? [] : [data];\n }\n };\n /**\n * Moves the collection of nodes within the same TreeView based on target or its index position.\n * @param {string[] | Element[]} sourceNodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {number} index - Specifies the index to place the moved nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n */\n TreeView.prototype.moveNodes = function (sourceNodes, target, index, preventTargetExpand) {\n var dropLi = this.getElement(target);\n var nodeData = [];\n if (isNOU(dropLi)) {\n return;\n }\n for (var i = 0; i < sourceNodes.length; i++) {\n var dragLi = this.getElement(sourceNodes[i]);\n nodeData.push(this.getNode(dragLi));\n if (isNOU(dragLi) || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n continue;\n }\n this.preventExpand = preventTargetExpand;\n this.dropAsChildNode(dragLi, dropLi, this, index);\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n this.triggerEvent('moveNodes', nodeData);\n };\n /**\n * Refreshes a particular node of the TreeView.\n * @param {string | Element} target - Specifies the ID of TreeView node or TreeView node as target element.\n * @param {{ [key: string]: Object }[]} newData - Specifies the new data of TreeView node.\n */\n TreeView.prototype.refreshNode = function (target, newData) {\n if (isNOU(target) || isNOU(newData)) {\n return;\n }\n var id;\n var isRefreshChild = false;\n if (this.dataType == 1 && newData.length > 1) {\n isRefreshChild = true;\n }\n else if (this.dataType == 2 && newData.length === 1) {\n var updatedChildValue = getValue(this.fields.child.toString(), newData[0]);\n if (!isNOU(updatedChildValue)) {\n isRefreshChild = true;\n }\n }\n var liEle = this.getElement(target);\n id = liEle ? liEle.getAttribute('data-uid') : ((target) ? target.toString() : null);\n this.refreshData = this.getNodeObject(id);\n newData = JSON.parse(JSON.stringify(newData));\n /* eslint-disable */\n var newNodeData;\n var parentData;\n if (this.dataType == 1 && isRefreshChild) {\n for (var k = 0; k < newData.length; k++) {\n if (isNOU(newData[k][this.fields.parentID])) {\n parentData = newData[k];\n newData.splice(k, 1);\n break;\n }\n }\n newNodeData = extend({}, this.refreshData, parentData);\n }\n else {\n newNodeData = extend({}, this.refreshData, newData[0]);\n }\n if (isNOU(liEle)) {\n this.updatePosition(id, newNodeData, isRefreshChild, newData);\n return;\n }\n this.isRefreshed = true;\n var level = parseFloat(liEle.getAttribute('aria-level'));\n var newliEle = ListBase.createListItemFromJson(this.createElement, [newNodeData], this.listBaseOption, level);\n var ul = select('.' + PARENTITEM, liEle);\n var childItems = getValue(this.fields.child.toString(), newNodeData);\n if ((isRefreshChild && ul) || (isRefreshChild && !isNOU(childItems))) {\n var parentEle = liEle.parentElement;\n var index = Array.prototype.indexOf.call(parentEle.childNodes, liEle);\n remove(liEle);\n parentEle.insertBefore(newliEle[0], parentEle.childNodes[index]);\n this.updatePosition(id, newNodeData, isRefreshChild, newData);\n if (isRefreshChild && ul) {\n this.expandAll([id]);\n }\n }\n else {\n var txtEle = select('.' + TEXTWRAP, liEle);\n var newTextEle = select('.' + TEXTWRAP, newliEle[0]);\n var icon = select('div.' + ICON, txtEle);\n var newIcon = select('div.' + ICON, newTextEle);\n if (icon && newIcon) {\n if (newIcon.classList.contains(EXPANDABLE) && icon.classList.contains(COLLAPSIBLE)) {\n removeClass([newIcon], EXPANDABLE);\n addClass([newIcon], COLLAPSIBLE);\n }\n else if (newIcon.classList.contains(COLLAPSIBLE) && icon.classList.contains(EXPANDABLE)) {\n removeClass([newIcon], COLLAPSIBLE);\n addClass([newIcon], EXPANDABLE);\n }\n else if (icon.classList.contains('interaction')) {\n addClass([newIcon], 'interaction');\n }\n }\n remove(txtEle);\n var fullEle = select('.' + FULLROW, liEle);\n fullEle.parentNode.insertBefore(newTextEle, fullEle.nextSibling);\n this.updatePosition(id, newNodeData, isRefreshChild, newData);\n }\n liEle = this.getElement(target);\n if (newNodeData[this.fields.tooltip]) {\n liEle.setAttribute(\"title\", newNodeData[this.fields.tooltip]);\n }\n if (newNodeData.hasOwnProperty(this.fields.htmlAttributes) && newNodeData[this.fields.htmlAttributes]) {\n var attr = {};\n merge(attr, newNodeData[this.fields.htmlAttributes]);\n if (attr.class) {\n addClass([liEle], attr.class.split(' '));\n delete attr.class;\n }\n else {\n attributes(liEle, attr);\n }\n }\n if (this.selectedNodes.indexOf(id) !== -1) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n }\n this.isRefreshed = false;\n this.triggerEvent('refreshNode', [this.getNode(liEle)]);\n };\n /**\n * Removes the collection of TreeView nodes by passing the array of node details as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.removeNodes = function (nodes) {\n if (!isNOU(nodes)) {\n if (this.fields.dataSource instanceof DataManager && !this.isOffline) {\n this.crudOperation('delete', nodes);\n }\n else {\n this.deleteSuccess(nodes);\n }\n }\n };\n /**\n * Replaces the text of the TreeView node with the given text.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {string} newText - Specifies the new text of TreeView node.\n */\n TreeView.prototype.updateNode = function (target, newText) {\n var _this = this;\n if (isNOU(target) || isNOU(newText) || !this.allowEditing) {\n return;\n }\n var liEle = this.getElement(target);\n if (isNOU(liEle)) {\n return;\n }\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var eventArgs = this.getEditEvent(liEle, null, null);\n this.trigger('nodeEditing', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n if (_this.fields.dataSource instanceof DataManager && !_this.isOffline) {\n _this.crudOperation('update', null, target, newText, null, null, false);\n }\n else {\n _this.appendNewText(liEle, txtEle, newText, false);\n }\n }\n });\n };\n /**\n * Unchecks all the checked nodes. You can also uncheck the specific nodes by passing array of checked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.uncheckAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, false);\n }\n };\n var TreeView_1;\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, NodeAnimationSettings)\n ], TreeView.prototype, \"animation\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"checkedNodes\", void 0);\n __decorate([\n Property('')\n ], TreeView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"disabled\", void 0);\n __decorate([\n Property(null)\n ], TreeView.prototype, \"dragArea\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"expandedNodes\", void 0);\n __decorate([\n Property('Auto')\n ], TreeView.prototype, \"expandOn\", void 0);\n __decorate([\n Complex({}, FieldsSettings)\n ], TreeView.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"fullRowSelect\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"loadOnDemand\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"locale\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"nodeTemplate\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"selectedNodes\", void 0);\n __decorate([\n Property('None')\n ], TreeView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"autoCheck\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"fullRowNavigable\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"drawNode\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"keyPress\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecking\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeClicked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragging\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStart\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStop\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDropped\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEdited\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEditing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanded\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanding\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelected\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelecting\", void 0);\n TreeView = TreeView_1 = __decorate([\n NotifyPropertyChanges\n ], TreeView);\n return TreeView;\n}(Component));\nexport { TreeView };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable max-len */\nimport { extend, isNullOrUndefined, createElement, EventHandler, addClass, append, removeClass, remove, closest, classList } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Data } from '../actions/data';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar ResourceBase = /** @class */ (function () {\n function ResourceBase(parent) {\n this.resourceCollection = [];\n this.leftPixel = 25;\n this.resourceDateTree = [];\n this.parent = parent;\n }\n ResourceBase.prototype.renderResourceHeaderIndent = function (tr) {\n var resColTd = createElement('td', { className: cls.RESOURCE_LEFT_TD_CLASS });\n var resColDiv = createElement('div', { className: cls.RESOURCE_TEXT_CLASS });\n if (this.parent.activeViewOptions.headerIndentTemplate) {\n var data = { className: [resColTd.className], type: 'emptyCells' };\n this.parent.renderHeaderIndentTemplate(data, resColTd);\n }\n else {\n resColTd.appendChild(resColDiv);\n }\n var args = { elementType: 'emptyCells', element: resColTd };\n this.parent.trigger(events.renderCell, args);\n tr.appendChild(resColTd);\n };\n ResourceBase.prototype.hideResourceRows = function (tBody) {\n if (this.resourceCollection.length <= 1 || this.parent.virtualScrollModule) {\n return;\n }\n var trCount = this.lastResourceLevel.length;\n for (var i = 0; i < trCount; i++) {\n var resData = this.lastResourceLevel[parseInt(i.toString(), 10)].resourceData;\n var res = this.lastResourceLevel[parseInt(i.toString(), 10)].resource;\n if (resData.ClassName === cls.RESOURCE_PARENT_CLASS && !resData[res.expandedField] &&\n !isNullOrUndefined(resData[res.expandedField])) {\n var trCollection = [].slice.call(tBody.children);\n var slicedCollection = trCollection.slice(i + 1, i + (parseInt(resData.Count, 10) + 1));\n addClass(slicedCollection, cls.HIDDEN_CLASS);\n }\n }\n };\n ResourceBase.prototype.createResourceColumn = function () {\n var resColl = this.resourceCollection;\n var resDiv = createElement('div', { className: cls.RESOURCE_COLUMN_WRAP_CLASS });\n var tbl = this.parent.activeView.createTableLayout(cls.RESOURCE_COLUMN_TABLE_CLASS);\n if (!this.parent.uiStateValues.isGroupAdaptive && this.parent.rowAutoHeight && this.parent.activeView.isTimelineView()\n && this.parent.activeViewOptions.group.resources.length > 0) {\n addClass([tbl], cls.AUTO_HEIGHT);\n }\n var tBody = tbl.querySelector('tbody');\n var resData = this.generateTreeData(true);\n this.countCalculation(resColl.slice(0, -2), resColl.slice(0, -1));\n this.renderedResources = this.lastResourceLevel;\n if (this.parent.virtualScrollModule) {\n var resourceCount = this.parent.virtualScrollModule.getRenderedCount();\n this.setExpandedResources();\n resData = this.expandedResources.slice(0, resourceCount);\n this.renderedResources = resData;\n }\n append(this.getContentRows(resData), tBody);\n this.hideResourceRows(tBody);\n tbl.appendChild(tBody);\n resDiv.appendChild(tbl);\n return resDiv;\n };\n ResourceBase.prototype.setRenderedResources = function () {\n var resColl = this.resourceCollection;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var temp = this.generateTreeData(true);\n this.countCalculation(resColl.slice(0, -2), resColl.slice(0, -1));\n this.renderedResources = this.lastResourceLevel;\n };\n ResourceBase.prototype.setExpandedResources = function () {\n var resources = [];\n for (var i = 0; i < this.lastResourceLevel.length; i++) {\n var resource = this.lastResourceLevel[parseInt(i.toString(), 10)].resourceData;\n var count = resource.Count;\n resources.push(this.lastResourceLevel[parseInt(i.toString(), 10)]);\n var isExpanded = resource[this.lastResourceLevel[parseInt(i.toString(), 10)].resource.expandedField];\n if (!isNullOrUndefined(isExpanded) && !isExpanded && count > 0) {\n i = i + count;\n }\n }\n this.expandedResources = resources;\n };\n ResourceBase.prototype.getContentRows = function (resData, isVirtualScroll) {\n var resRows = [];\n var left;\n var rIndex;\n var resColl = this.resourceCollection;\n var tr = createElement('tr');\n var td = createElement('td', { attrs: { tabindex: isVirtualScroll ? '-1' : '0' } });\n for (var i = 0; i < resData.length; i++) {\n var ntd = td.cloneNode();\n rIndex = util.findIndexInData(resColl, 'name', resData[parseInt(i.toString(), 10)].resource.name);\n if (rIndex === resColl.length - 1) {\n extend(resData[parseInt(i.toString(), 10)].resourceData, { ClassName: cls.RESOURCE_CHILD_CLASS });\n this.renderedResources[parseInt(i.toString(), 10)].className = [cls.RESOURCE_CHILD_CLASS];\n }\n else {\n extend(resData[parseInt(i.toString(), 10)].resourceData, { ClassName: cls.RESOURCE_PARENT_CLASS });\n this.renderedResources[parseInt(i.toString(), 10)].className = [cls.RESOURCE_PARENT_CLASS];\n }\n left = (rIndex * this.leftPixel) + 'px';\n if (resData[parseInt(i.toString(), 10)].resourceData.ClassName === cls.RESOURCE_PARENT_CLASS\n && !isNullOrUndefined(resData[parseInt(i.toString(), 10)].resourceData.Count) && (resData[parseInt(i.toString(), 10)].resourceData.Count > 0)) {\n var iconClass = void 0;\n if (resData[parseInt(i.toString(), 10)].resourceData[resColl[parseInt(rIndex.toString(), 10)].expandedField] ||\n isNullOrUndefined(resData[parseInt(i.toString(), 10)].resourceData[resColl[parseInt(rIndex.toString(), 10)].expandedField])) {\n iconClass = cls.RESOURCE_COLLAPSE_CLASS;\n }\n else {\n iconClass = cls.RESOURCE_EXPAND_CLASS;\n }\n var iconDiv = createElement('div');\n addClass([iconDiv], [cls.RESOURCE_TREE_ICON_CLASS, iconClass]);\n this.setMargin(iconDiv, left);\n ntd.appendChild(iconDiv);\n if (this.resourceCollection.length > 1) {\n EventHandler.add(iconDiv, 'click', this.onTreeIconClick, this);\n }\n }\n this.parent.activeView.setResourceHeaderContent(ntd, resData[parseInt(i.toString(), 10)], cls.RESOURCE_TEXT_CLASS);\n ntd.setAttribute('data-group-index', resData[parseInt(i.toString(), 10)].groupIndex.toString());\n ntd.setAttribute('aria-label', resData[parseInt(i.toString(), 10)].resourceData[resData[parseInt(i.toString(), 10)].resource.textField] + ' resource');\n if (!this.parent.activeViewOptions.resourceHeaderTemplate) {\n this.setMargin(ntd.querySelector('.' + cls.RESOURCE_TEXT_CLASS), left);\n }\n var classCollection = [cls.RESOURCE_CELLS_CLASS, resData[parseInt(i.toString(), 10)].resourceData.ClassName];\n addClass([ntd], classCollection);\n var args = { elementType: 'resourceHeader', element: ntd, groupIndex: resData[parseInt(i.toString(), 10)].groupIndex };\n this.parent.trigger(events.renderCell, args);\n var ntr = tr.cloneNode();\n ntr.appendChild(ntd);\n resRows.push(ntr);\n }\n return resRows;\n };\n ResourceBase.prototype.setMargin = function (element, value) {\n if (!this.parent.enableRtl) {\n element.style.marginLeft = value;\n }\n else {\n element.style.marginRight = value;\n }\n };\n ResourceBase.prototype.countCalculation = function (parentCollection, wholeCollection) {\n var collection;\n for (var y = 0; y < parentCollection.length; y++) {\n var data = parentCollection[parentCollection.length - (y + 1)].dataSource;\n for (var x = 0; x < data.length; x++) {\n var totalCount = 0;\n if (this.parent.activeViewOptions.group.byGroupID) {\n var query = new Query().where(wholeCollection[wholeCollection.length - 1].groupIDField, 'equal', data[parseInt(x.toString(), 10)][parentCollection[parentCollection.length - (y + 1)].idField]);\n collection = new DataManager(wholeCollection[wholeCollection.length - 1].dataSource).executeLocal(query);\n }\n else {\n collection = wholeCollection[wholeCollection.length - 1].dataSource;\n }\n for (var z = 0; z < collection.length; z++) {\n totalCount = totalCount + parseInt(collection[parseInt(z.toString(), 10)].Count, 10);\n }\n totalCount = totalCount + parseInt(data[parseInt(x.toString(), 10)].Count, 10);\n extend(data[parseInt(x.toString(), 10)], { Count: totalCount });\n }\n wholeCollection = wholeCollection.slice(0, -1);\n }\n };\n ResourceBase.prototype.onTreeIconClick = function (e) {\n var _this = this;\n if (this.parent.eventTooltip) {\n this.parent.eventTooltip.close();\n }\n var target = e.target;\n var hide;\n var trElement = closest(target, '.' + cls.RESOURCE_PARENT_CLASS)\n .parentElement;\n var index = parseInt(trElement.children[0].getAttribute('data-group-index'), 10);\n var args = {\n cancel: false, event: e, groupIndex: index,\n requestType: !target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS) ? 'resourceExpand' : 'resourceCollapse'\n };\n this.parent.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS)) {\n classList(target, [cls.RESOURCE_EXPAND_CLASS], [cls.RESOURCE_COLLAPSE_CLASS]);\n hide = true;\n }\n else {\n classList(target, [cls.RESOURCE_COLLAPSE_CLASS], [cls.RESOURCE_EXPAND_CLASS]);\n hide = false;\n }\n var eventElements = [].slice.call(_this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS + ',.' + cls.MORE_INDICATOR_CLASS));\n for (var _i = 0, eventElements_1 = eventElements; _i < eventElements_1.length; _i++) {\n var element = eventElements_1[_i];\n remove(element);\n }\n if (_this.parent.virtualScrollModule) {\n _this.updateVirtualContent(index, hide, e, target);\n }\n else {\n _this.updateContent(index, hide);\n }\n var data = { cssProperties: _this.parent.getCssProperties(), module: 'scroll' };\n _this.parent.notify(events.scrollUiUpdate, data);\n args = {\n cancel: false, event: e, groupIndex: index,\n requestType: target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS) ? 'resourceExpanded' : 'resourceCollapsed'\n };\n _this.parent.refreshEvents(false);\n _this.parent.trigger(events.actionComplete, args);\n }\n });\n };\n ResourceBase.prototype.updateContent = function (index, hide) {\n var rowCollection = [];\n var workCellCollection = [];\n var headerRowCollection = [];\n var pNode;\n var clickedRes = this.lastResourceLevel[parseInt(index.toString(), 10)].resourceData;\n var resRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.RESOURCE_COLUMN_WRAP_CLASS + ' ' + 'tr'));\n var contentRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_WRAP_CLASS + ' ' + 'tbody tr'));\n var eventRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_WRAP_CLASS + ' .' + cls.APPOINTMENT_CONTAINER_CLASS));\n for (var j = 0; j < clickedRes.Count; j++) {\n rowCollection.push(resRows[index + j + 1]);\n workCellCollection.push(contentRows[index + j + 1]);\n headerRowCollection.push(eventRows[index + j + 1]);\n }\n var clonedCollection = this.lastResourceLevel;\n for (var i = 0; i < rowCollection.length; i++) {\n var expanded = true;\n pNode = rowCollection[parseInt(i.toString(), 10)].children[0].classList.contains(cls.RESOURCE_PARENT_CLASS);\n clonedCollection[parseInt(index.toString(), 10)].resourceData[clonedCollection[parseInt(index.toString(), 10)].resource.expandedField] = !hide;\n if (hide) {\n if (pNode) {\n var trElem = rowCollection[parseInt(i.toString(), 10)].querySelector('.' + cls.RESOURCE_TREE_ICON_CLASS);\n if (trElem) {\n classList(trElem, [cls.RESOURCE_EXPAND_CLASS], [cls.RESOURCE_COLLAPSE_CLASS]);\n }\n }\n if (!rowCollection[parseInt(i.toString(), 10)].classList.contains(cls.HIDDEN_CLASS)) {\n addClass([rowCollection[parseInt(i.toString(), 10)], workCellCollection[parseInt(i.toString(), 10)], headerRowCollection[parseInt(i.toString(), 10)]], cls.HIDDEN_CLASS);\n }\n }\n else {\n if (pNode) {\n var rowIndex = rowCollection[parseInt(i.toString(), 10)].rowIndex;\n if (!clonedCollection[parseInt(rowIndex.toString(), 10)].resourceData[clonedCollection[parseInt(rowIndex.toString(), 10)].resource.expandedField]\n && !isNullOrUndefined(clonedCollection[parseInt(rowIndex.toString(), 10)].resourceData[clonedCollection[parseInt(rowIndex.toString(), 10)].resource.expandedField])) {\n rowCollection.splice(i + 1, (parseInt(clonedCollection[parseInt(rowIndex.toString(), 10)].resourceData.Count, 10)));\n workCellCollection.splice(i + 1, (parseInt(clonedCollection[parseInt(rowIndex.toString(), 10)].resourceData.Count, 10)));\n headerRowCollection.splice(i + 1, (parseInt(clonedCollection[parseInt(rowIndex.toString(), 10)].resourceData.Count, 10)));\n expanded = false;\n }\n if (expanded) {\n var trElem = rowCollection[parseInt(i.toString(), 10)].querySelector('.' + cls.RESOURCE_TREE_ICON_CLASS);\n if (trElem) {\n classList(trElem, [cls.RESOURCE_COLLAPSE_CLASS], [cls.RESOURCE_EXPAND_CLASS]);\n }\n }\n }\n if (rowCollection[parseInt(i.toString(), 10)].classList.contains(cls.HIDDEN_CLASS)) {\n removeClass([rowCollection[parseInt(i.toString(), 10)], workCellCollection[parseInt(i.toString(), 10)], headerRowCollection[parseInt(i.toString(), 10)]], cls.HIDDEN_CLASS);\n }\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ResourceBase.prototype.updateVirtualContent = function (index, expand, e, target) {\n this.lastResourceLevel[parseInt(index.toString(), 10)].resourceData[this.lastResourceLevel[parseInt(index.toString(), 10)].resource.expandedField] = !expand;\n this.setExpandedResources();\n var resourceCount = this.parent.virtualScrollModule.getRenderedCount();\n var startIndex = this.expandedResources.indexOf(this.renderedResources[0]);\n this.renderedResources = this.expandedResources.slice(startIndex, startIndex + resourceCount);\n if (this.renderedResources.length < resourceCount) {\n var sIndex = this.expandedResources.length - resourceCount;\n sIndex = (sIndex > 0) ? sIndex : 0;\n this.renderedResources = this.expandedResources.slice(sIndex, this.expandedResources.length);\n }\n var virtualTrack = this.parent.element.querySelector('.' + cls.VIRTUAL_TRACK_CLASS);\n this.parent.virtualScrollModule.updateVirtualTrackHeight(virtualTrack);\n var resTable = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS + ' ' + 'table');\n var contentTable = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS + ' ' + 'table');\n var eventTable = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);\n this.parent.virtualScrollModule.updateContent(resTable, contentTable, eventTable, this.renderedResources);\n var timeIndicator = this.parent.element.querySelector('.' + cls.CURRENT_TIMELINE_CLASS);\n if (!isNullOrUndefined(timeIndicator)) {\n timeIndicator.style.height =\n this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetHeight + 'px';\n }\n };\n ResourceBase.prototype.renderResourceHeader = function () {\n var resourceWrapper = createElement('div', { className: cls.RESOURCE_TOOLBAR_CONTAINER });\n resourceWrapper.innerHTML = '
' +\n '
';\n if (this.parent.currentView === 'MonthAgenda') {\n var target = this.parent.activeView.getPanel().querySelector('.' + cls.CONTENT_WRAP_CLASS);\n target.insertBefore(resourceWrapper, target.querySelector('.' + cls.WRAPPER_CONTAINER_CLASS));\n }\n else {\n this.parent.element.insertBefore(resourceWrapper, this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS));\n }\n this.renderResourceHeaderText();\n EventHandler.add(resourceWrapper.querySelector('.' + cls.RESOURCE_MENU_ICON), 'click', this.menuClick, this);\n };\n ResourceBase.prototype.renderResourceTree = function () {\n this.popupOverlay = createElement('div', { className: cls.RESOURCE_TREE_POPUP_OVERLAY });\n var treeWrapper = createElement('div', { className: cls.RESOURCE_TREE_POPUP + ' e-popup-close' });\n if (this.parent.currentView === 'MonthAgenda') {\n var target = this.parent.activeView.getPanel().querySelector('.' + cls.WRAPPER_CONTAINER_CLASS);\n target.insertBefore(treeWrapper, target.children[0]);\n target.appendChild(this.popupOverlay);\n }\n else {\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(treeWrapper);\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.popupOverlay);\n }\n var resourceTree = createElement('div', { className: cls.RESOURCE_TREE });\n treeWrapper.appendChild(resourceTree);\n this.treeViewObj = new TreeView({\n cssClass: this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n fields: {\n dataSource: [].slice.call(this.generateTreeData()),\n id: 'resourceId',\n text: 'resourceName',\n child: 'resourceChild'\n },\n nodeTemplate: this.parent.resourceHeaderTemplate,\n nodeClicked: this.resourceClick.bind(this),\n created: this.resourceTreeCreated.bind(this)\n });\n this.treeViewObj.appendTo(resourceTree);\n this.treeViewObj.expandAll();\n this.treePopup = new Popup(treeWrapper, {\n targetType: 'relative',\n actionOnScroll: 'none',\n content: this.treeViewObj.element,\n relateTo: this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS),\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'SlideLeftOut', duration: 500 },\n showAnimation: { name: 'SlideLeftIn', duration: 500 },\n viewPortElement: this.parent.element.querySelector('.' + (this.parent.currentView === 'MonthAgenda' ?\n cls.WRAPPER_CONTAINER_CLASS : cls.TABLE_CONTAINER_CLASS))\n });\n this.parent.on(events.documentClick, this.documentClick, this);\n };\n ResourceBase.prototype.resourceTreeCreated = function () {\n if (this.parent.activeViewOptions.resourceHeaderTemplate && this.parent.portals && this.treeViewObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.treeViewObj.portals);\n this.parent.renderTemplates();\n }\n };\n ResourceBase.prototype.generateTreeData = function (isTimeLine) {\n var _this = this;\n var treeCollection = [];\n var resTreeColl = [];\n var groupIndex = 0;\n var _loop_1 = function (i, len) {\n var treeHandler = function (treeLevel, index, levelId) {\n var resource = _this.resourceCollection[parseInt(index.toString(), 10)];\n var treeArgs;\n var resObj;\n if (!isTimeLine) {\n treeArgs = {\n resourceId: levelId,\n resourceName: treeLevel.resourceData[resource.textField],\n resource: treeLevel.resource,\n resourceData: treeLevel.resourceData\n };\n }\n else {\n resObj = {\n type: 'resourceHeader', resource: treeLevel.resource,\n resourceData: treeLevel.resourceData, groupIndex: groupIndex,\n groupOrder: treeLevel.groupOrder\n };\n resTreeColl.push(resObj);\n groupIndex++;\n }\n if (treeLevel.child.length > 0 && !isTimeLine) {\n treeArgs.resourceChild = [];\n }\n var count = 1;\n for (var _i = 0, _a = treeLevel.child; _i < _a.length; _i++) {\n var tree = _a[_i];\n if (!isTimeLine) {\n treeArgs.resourceChild.push(treeHandler(tree, index + 1, levelId + '-' + count));\n }\n else {\n treeHandler(tree, index + 1, levelId + '-' + count);\n }\n count += 1;\n }\n if (isTimeLine) {\n extend(resObj.resourceData, { Count: count - 1 });\n }\n return treeArgs;\n };\n if (!isTimeLine) {\n treeCollection.push(treeHandler(this_1.resourceTreeLevel[parseInt(i.toString(), 10)], 0, (i + 1).toString()));\n }\n else {\n treeHandler(this_1.resourceTreeLevel[parseInt(i.toString(), 10)], 0, (i + 1).toString());\n }\n };\n var this_1 = this;\n for (var i = 0, len = this.resourceTreeLevel.length; i < len; i++) {\n _loop_1(i, len);\n }\n if (isTimeLine) {\n this.lastResourceLevel = resTreeColl;\n return resTreeColl;\n }\n else {\n return treeCollection;\n }\n };\n ResourceBase.prototype.renderResourceHeaderText = function () {\n var resource = this.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n var headerCollection = [];\n var _loop_2 = function (i, len) {\n var resourceLevel = this_2.resourceCollection[parseInt(i.toString(), 10)];\n var resourceText = resourceLevel.dataSource.filter(function (resData) {\n return resData[resourceLevel.idField] === resource.groupOrder[parseInt(i.toString(), 10)];\n });\n var resourceName = createElement('div', { className: cls.RESOURCE_NAME });\n this_2.parent.sanitize(resourceText[0][resourceLevel.textField], resourceName);\n headerCollection.push(resourceName);\n var levelIcon = createElement('div', { className: 'e-icons e-icon-next' });\n headerCollection.push(levelIcon);\n };\n var this_2 = this;\n for (var i = 0, len = resource.groupOrder.length; i < len; i++) {\n _loop_2(i, len);\n }\n headerCollection.pop();\n var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;\n var headerWrapper = target.querySelector('.' + cls.RESOURCE_LEVEL_TITLE);\n util.removeChildren(headerWrapper);\n for (var _i = 0, headerCollection_1 = headerCollection; _i < headerCollection_1.length; _i++) {\n var header = headerCollection_1[_i];\n headerWrapper.appendChild(header);\n }\n if (this.lastResourceLevel.length === 1) {\n addClass([this.parent.element.querySelector('.' + cls.RESOURCE_MENU)], cls.DISABLE_CLASS);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ResourceBase.prototype.menuClick = function (event) {\n if (this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP).classList.contains(cls.POPUP_OPEN)) {\n this.treePopup.hide();\n removeClass([this.popupOverlay], cls.ENABLE_CLASS);\n }\n else {\n var treeNodes = [].slice.call(this.treeViewObj.element.querySelectorAll('.e-list-item:not(.e-has-child)'));\n removeClass(treeNodes, 'e-active');\n addClass([treeNodes[this.parent.uiStateValues.groupIndex]], 'e-active');\n this.treePopup.show();\n addClass([this.popupOverlay], cls.ENABLE_CLASS);\n }\n };\n ResourceBase.prototype.selectResourceByIndex = function (groupIndex) {\n if (this.lastResourceLevel && groupIndex > -1 && groupIndex < this.lastResourceLevel.length) {\n this.triggerEvents(groupIndex);\n }\n };\n ResourceBase.prototype.resourceClick = function (event) {\n if (!event.node.classList.contains('e-has-child')) {\n this.treePopup.hide();\n removeClass([this.popupOverlay], cls.ENABLE_CLASS);\n var treeNodes = [].slice.call(this.treeViewObj.element.querySelectorAll('.e-list-item:not(.e-has-child)'));\n var groupIndex = treeNodes.indexOf(event.node);\n this.triggerEvents(groupIndex, event);\n event.event.preventDefault();\n }\n };\n ResourceBase.prototype.triggerEvents = function (groupIndex, event) {\n var _this = this;\n var args = { cancel: false, event: (event) ? event.event : null, groupIndex: groupIndex, requestType: 'resourceChange' };\n this.parent.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.parent.uiStateValues.groupIndex = actionArgs.groupIndex;\n _this.parent.renderModule.render(_this.parent.currentView);\n args = {\n cancel: false, event: (event) ? event.event : null, groupIndex: _this.parent.uiStateValues.groupIndex, requestType: 'resourceChanged'\n };\n _this.parent.trigger(events.actionComplete, args);\n }\n });\n };\n ResourceBase.prototype.documentClick = function (args) {\n if (closest(args.event.target, '.' + cls.RESOURCE_TREE_POPUP)) {\n return;\n }\n var treeWrapper = this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP);\n if (treeWrapper && treeWrapper.classList.contains(cls.POPUP_OPEN)) {\n this.treePopup.hide();\n removeClass([this.popupOverlay], cls.ENABLE_CLASS);\n }\n };\n ResourceBase.prototype.bindResourcesData = function (isSetModel) {\n var _this = this;\n this.parent.showSpinner();\n var promises = [];\n for (var _i = 0, _a = this.parent.resources; _i < _a.length; _i++) {\n var resource = _a[_i];\n var dataModule = new Data(this.parent, resource.dataSource, resource.query);\n promises.push(dataModule.getData(dataModule.generateQuery()));\n }\n Promise.all(promises).then(function (e) { return _this.dataManagerSuccess(e, isSetModel); })\n .catch(function (e) { return _this.parent.crudModule.dataManagerFailure(e); });\n };\n ResourceBase.prototype.dataManagerSuccess = function (e, isSetModel) {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.parent.resourceCollection = [];\n for (var i = 0, length_1 = e.length; i < length_1; i++) {\n var resource = this.parent.resources[parseInt(i.toString(), 10)];\n var resourceObj = this.getResourceModel(resource, e[parseInt(i.toString(), 10)].result);\n this.parent.resourceCollection.push(resourceObj);\n }\n this.refreshLayout(isSetModel);\n };\n ResourceBase.prototype.getResourceModel = function (resource, resourceData) {\n var resourceObj = {\n field: resource.field,\n title: resource.title,\n name: resource.name,\n allowMultiple: resource.allowMultiple,\n dataSource: resourceData || resource.dataSource,\n idField: resource.idField,\n textField: resource.textField,\n groupIDField: resource.groupIDField,\n colorField: resource.colorField,\n startHourField: resource.startHourField,\n endHourField: resource.endHourField,\n workDaysField: resource.workDaysField,\n expandedField: resource.expandedField,\n cssClassField: resource.cssClassField\n };\n return resourceObj;\n };\n ResourceBase.prototype.refreshLayout = function (isSetModel) {\n if (isNullOrUndefined(this.parent.uiStateValues.groupIndex) || !(this.parent.enablePersistence)) {\n this.parent.uiStateValues.groupIndex = 0;\n }\n this.parent.renderElements(isSetModel);\n };\n ResourceBase.prototype.setResourceCollection = function () {\n var requiredResources = [];\n this.resourceCollection = [];\n this.colorIndex = null;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n for (var _i = 0, _a = this.parent.activeViewOptions.group.resources; _i < _a.length; _i++) {\n var resource = _a[_i];\n var index_1 = util.findIndexInData(this.parent.resourceCollection, 'name', resource);\n if (index_1 >= 0) {\n requiredResources.push(this.parent.resourceCollection[parseInt(index_1.toString(), 10)]);\n }\n }\n }\n else if (this.parent.resourceCollection.length > 0) {\n requiredResources = this.parent.resourceCollection;\n }\n var index = 0;\n for (var _b = 0, requiredResources_1 = requiredResources; _b < requiredResources_1.length; _b++) {\n var resource = requiredResources_1[_b];\n var resources = this.getResourceModel(resource);\n if (resource.name === this.parent.eventSettings.resourceColorField) {\n this.colorIndex = index;\n }\n index++;\n this.resourceCollection.push(resources);\n }\n if (isNullOrUndefined(this.colorIndex)) {\n this.colorIndex = this.resourceCollection.length - 1;\n }\n };\n ResourceBase.prototype.generateResourceLevels = function (innerDates, isTimeLine) {\n var _this = this;\n var resources = this.resourceCollection;\n var resTreeGroup = [];\n var lastColumnDates = [];\n var group = function (resources, index, prevResource, prevResourceData, prevOrder) {\n var resTree = [];\n var resource = resources[0];\n if (resource) {\n var data = void 0;\n if (prevResourceData && _this.parent.activeViewOptions.group.byGroupID) {\n var id_1 = prevResourceData[prevResource.idField];\n data = resource.dataSource.filter(function (e) {\n return e[resource.groupIDField] === id_1;\n });\n }\n else {\n data = resource.dataSource;\n }\n for (var i = 0; i < data.length; i++) {\n var groupOrder = [];\n if (prevOrder && prevOrder.length > 0) {\n groupOrder = groupOrder.concat(prevOrder);\n }\n groupOrder.push(data[parseInt(i.toString(), 10)][resource.idField]);\n var items = group(resources.slice(1), index + 1, resource, data[parseInt(i.toString(), 10)], groupOrder);\n // Here validate child item empty top level resource only\n if (index === 0 && items.length === 0 && _this.resourceCollection.length > 1) {\n continue;\n }\n var dateCol = [];\n var renderDates = _this.parent.activeView.renderDates;\n var resWorkDays = void 0;\n if (!_this.parent.activeViewOptions.group.byDate && index + 1 === _this.resourceCollection.length) {\n var workDays = data[parseInt(i.toString(), 10)][resource.workDaysField];\n var resStartHour = data[parseInt(i.toString(), 10)][resource.startHourField];\n var resEndHour = data[parseInt(i.toString(), 10)][resource.endHourField];\n if (workDays && workDays.length > 0) {\n renderDates = _this.parent.activeView.getRenderDates(workDays);\n resWorkDays = workDays;\n dateCol = _this.parent.activeView.getDateSlots(renderDates, workDays);\n }\n else {\n resWorkDays = _this.parent.activeViewOptions.workDays;\n dateCol = innerDates;\n }\n var dateSlots = _this.generateCustomHours(dateCol, resStartHour, resEndHour, groupOrder);\n lastColumnDates = lastColumnDates.concat(dateSlots);\n }\n var resCssClass = data[parseInt(i.toString(), 10)][resource.cssClassField];\n var slotData = {\n type: 'resourceHeader', className: ['e-resource-cells'],\n resourceLevelIndex: index, groupOrder: groupOrder,\n resource: resource, resourceData: data[parseInt(i.toString(), 10)],\n colSpan: _this.parent.activeViewOptions.group.byDate ? 1 : dateCol.length,\n renderDates: renderDates, workDays: resWorkDays, cssClass: resCssClass,\n child: items\n };\n resTree.push(slotData);\n }\n if (!resTreeGroup[parseInt(index.toString(), 10)]) {\n resTreeGroup[parseInt(index.toString(), 10)] = [];\n }\n if (resTree.length > 0) {\n resTreeGroup[parseInt(index.toString(), 10)].push(resTree);\n }\n return resTree;\n }\n return [];\n };\n this.resourceTreeLevel = group(resources, 0);\n return (isTimeLine) ? [] : this.generateHeaderLevels(resTreeGroup, lastColumnDates, innerDates);\n };\n ResourceBase.prototype.generateCustomHours = function (renderDates, startHour, endHour, groupOrder) {\n var dateSlots = extend([], renderDates, null, true);\n for (var _i = 0, dateSlots_1 = dateSlots; _i < dateSlots_1.length; _i++) {\n var dateSlot = dateSlots_1[_i];\n if (startHour) {\n dateSlot.startHour = this.parent.getStartEndTime(startHour);\n }\n if (endHour) {\n dateSlot.endHour = this.parent.getStartEndTime(endHour);\n }\n if (groupOrder) {\n dateSlot.groupOrder = groupOrder;\n }\n }\n return dateSlots;\n };\n ResourceBase.prototype.generateHeaderLevels = function (resTreeGroup, lastColumnDates, headerDates) {\n var headerLevels = [];\n for (var i = resTreeGroup.length - 1; i >= 0; i--) {\n var temp = 0;\n for (var _i = 0, _a = resTreeGroup[parseInt(i.toString(), 10)]; _i < _a.length; _i++) {\n var currentLevelChilds = _a[_i];\n for (var _b = 0, currentLevelChilds_1 = currentLevelChilds; _b < currentLevelChilds_1.length; _b++) {\n var currentLevelChild = currentLevelChilds_1[_b];\n if (resTreeGroup[i + 1] && resTreeGroup[i + 1].length > 0) {\n var nextLevelChilds = resTreeGroup[parseInt((i + 1).toString(), 10)][parseInt(temp.toString(), 10)];\n if (!nextLevelChilds) {\n continue;\n }\n var colSpan = 0;\n for (var _c = 0, nextLevelChilds_1 = nextLevelChilds; _c < nextLevelChilds_1.length; _c++) {\n var nextLevelChild = nextLevelChilds_1[_c];\n if (!this.parent.activeViewOptions.group.byGroupID || (this.parent.activeViewOptions.group.byGroupID &&\n nextLevelChild.resourceData[nextLevelChild.resource.groupIDField] ===\n currentLevelChild.resourceData[currentLevelChild.resource.idField])) {\n colSpan += nextLevelChild.colSpan;\n }\n }\n currentLevelChild.colSpan = colSpan;\n }\n currentLevelChild.groupIndex = temp;\n temp++;\n headerLevels[currentLevelChild.resourceLevelIndex] = headerLevels[currentLevelChild.resourceLevelIndex] || [];\n headerLevels[currentLevelChild.resourceLevelIndex].push(currentLevelChild);\n }\n }\n }\n this.lastResourceLevel = headerLevels.slice(-1)[0] || [];\n if (!this.parent.activeViewOptions.group.byDate) {\n var index = 0;\n for (var _d = 0, _e = this.lastResourceLevel; _d < _e.length; _d++) {\n var lastLevelResource = _e[_d];\n for (var i = 0; i < lastLevelResource.colSpan; i++) {\n lastColumnDates[parseInt(index.toString(), 10)].groupIndex = lastLevelResource.groupIndex;\n index++;\n }\n }\n headerLevels.push(lastColumnDates);\n return headerLevels;\n }\n var dateHeaderLevels = [];\n var levels = extend([], headerLevels, null, true);\n var datesColumn = [];\n if (this.parent.activeViewOptions.group.hideNonWorkingDays) {\n var renderDates_1 = [];\n var dateIndex = 0;\n var _loop_3 = function (headerDate) {\n this_3.resourceDateTree[parseInt(dateIndex.toString(), 10)] = [];\n var currentDateLevels = [];\n var _loop_4 = function (j) {\n var workDays = this_3.lastResourceLevel[parseInt(j.toString(), 10)].resourceData[this_3.lastResourceLevel[parseInt(j.toString(), 10)].resource.workDaysField];\n if (!workDays) {\n workDays = this_3.parent.activeViewOptions.workDays;\n }\n if (workDays.indexOf(headerDate.date.getDay()) !== -1) {\n var resTd_1 = extend({}, this_3.lastResourceLevel[parseInt(j.toString(), 10)], null, true);\n resTd_1.date = headerDate.date;\n this_3.lastResourceLevel[parseInt(j.toString(), 10)].workDays = workDays;\n resTd_1.startHour = this_3.parent.getStartEndTime(resTd_1.resourceData[resTd_1.resource.startHourField]) ||\n headerDate.startHour;\n resTd_1.endHour = this_3.parent.getStartEndTime(resTd_1.resourceData[resTd_1.resource.endHourField]) ||\n headerDate.endHour;\n this_3.resourceDateTree[parseInt(dateIndex.toString(), 10)].push(resTd_1);\n var _loop_5 = function (k) {\n if (!currentDateLevels[parseInt(k.toString(), 10)]) {\n currentDateLevels[parseInt(k.toString(), 10)] = [];\n }\n if (k === resTd_1.groupOrder.length - 1) {\n if (!renderDates_1[parseInt(j.toString(), 10)]) {\n renderDates_1[parseInt(j.toString(), 10)] = [];\n }\n var filterDates = resTd_1.renderDates.filter(function (x) { return x.getDay() === headerDate.date.getDay(); });\n renderDates_1[parseInt(j.toString(), 10)] = renderDates_1[parseInt(j.toString(), 10)].concat(filterDates);\n currentDateLevels[parseInt(k.toString(), 10)].push(resTd_1);\n return \"continue\";\n }\n var currentLevel = levels[parseInt(k.toString(), 10)];\n var filteredResource = currentLevel.filter(function (data) {\n return data.resourceData[data.resource.idField] === resTd_1.groupOrder[parseInt(k.toString(), 10)];\n });\n if (filteredResource && filteredResource.length > 0) {\n var existedResource = currentDateLevels[parseInt(k.toString(), 10)].filter(function (data) {\n return data.resourceData[data.resource.idField] === resTd_1.groupOrder[parseInt(k.toString(), 10)];\n });\n if (existedResource && existedResource.length > 0) {\n existedResource[0].colSpan += 1;\n }\n else {\n var filteredTd = extend({}, filteredResource[0], null, true);\n filteredTd.colSpan = 1;\n currentDateLevels[parseInt(k.toString(), 10)].push(filteredTd);\n }\n }\n };\n for (var k = 0; k < resTd_1.groupOrder.length; k++) {\n _loop_5(k);\n }\n }\n };\n for (var j = 0; j < this_3.lastResourceLevel.length; j++) {\n _loop_4(j);\n }\n if (currentDateLevels.length > 0) {\n for (var l = 0; l < levels.length; l++) {\n if (!dateHeaderLevels[parseInt(l.toString(), 10)]) {\n dateHeaderLevels[parseInt(l.toString(), 10)] = [];\n }\n dateHeaderLevels[parseInt(l.toString(), 10)] = dateHeaderLevels[parseInt(l.toString(), 10)].concat(currentDateLevels[parseInt(l.toString(), 10)]);\n }\n headerDate.colSpan = currentDateLevels[currentDateLevels.length - 1].length;\n datesColumn.push(headerDate);\n }\n dateIndex++;\n };\n var this_3 = this;\n for (var _f = 0, headerDates_1 = headerDates; _f < headerDates_1.length; _f++) {\n var headerDate = headerDates_1[_f];\n _loop_3(headerDate);\n }\n this.resourceDateTree = this.resourceDateTree.filter(function (data) { return data.length > 0; });\n this.lastResourceLevel.forEach(function (x, index) {\n if (renderDates_1[parseInt(index.toString(), 10)]) {\n x.renderDates = renderDates_1[parseInt(index.toString(), 10)].sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n });\n dateHeaderLevels.unshift(datesColumn);\n return dateHeaderLevels;\n }\n var dateColSpan = 0;\n for (var _g = 0, _h = levels[0]; _g < _h.length; _g++) {\n var firstRowTd = _h[_g];\n dateColSpan += firstRowTd.colSpan;\n }\n for (var _j = 0, headerDates_2 = headerDates; _j < headerDates_2.length; _j++) {\n var headerDate = headerDates_2[_j];\n headerDate.colSpan = dateColSpan;\n datesColumn.push(headerDate);\n var resGroup = extend([], levels, null, true);\n for (var k = 0, length_2 = resGroup.length; k < length_2; k++) {\n if (k === resGroup.length - 1) {\n for (var _k = 0, _l = resGroup[parseInt(k.toString(), 10)]; _k < _l.length; _k++) {\n var resTd = _l[_k];\n resTd.date = headerDate.date;\n resTd.workDays = headerDate.workDays;\n resTd.startHour = this.parent.getStartEndTime(resTd.resourceData[resTd.resource.startHourField]) ||\n headerDate.startHour;\n resTd.endHour = this.parent.getStartEndTime(resTd.resourceData[resTd.resource.endHourField]) ||\n headerDate.endHour;\n }\n }\n if (!dateHeaderLevels[parseInt(k.toString(), 10)]) {\n dateHeaderLevels[parseInt(k.toString(), 10)] = [];\n }\n dateHeaderLevels[parseInt(k.toString(), 10)] = dateHeaderLevels[parseInt(k.toString(), 10)].concat(resGroup[parseInt(k.toString(), 10)]);\n }\n }\n dateHeaderLevels.unshift(datesColumn);\n return dateHeaderLevels;\n };\n ResourceBase.prototype.setResourceValues = function (eventObj, groupIndex) {\n var _this = this;\n var setValues = function (index, field, value) {\n if (_this.resourceCollection[parseInt(index.toString(), 10)].allowMultiple && _this.parent.activeViewOptions.group.allowGroupEdit) {\n eventObj[\"\" + field] = [value];\n }\n else {\n eventObj[\"\" + field] = value;\n }\n };\n if (groupIndex === void 0) {\n groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n this.parent.activeCellsData.groupIndex;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0 && !isNullOrUndefined(groupIndex)) {\n var groupOrder = this.lastResourceLevel[parseInt(groupIndex.toString(), 10)].groupOrder;\n for (var index = 0; index < this.resourceCollection.length; index++) {\n setValues(index, this.resourceCollection[parseInt(index.toString(), 10)].field, groupOrder[parseInt(index.toString(), 10)]);\n }\n }\n else if (this.parent.resourceCollection.length > 0) {\n for (var index = 0; index < this.resourceCollection.length; index++) {\n var data = this.resourceCollection[parseInt(index.toString(), 10)].dataSource[0];\n if (data) {\n setValues(index, this.resourceCollection[parseInt(index.toString(), 10)].field, data[this.resourceCollection[parseInt(index.toString(), 10)].idField]);\n }\n }\n }\n };\n ResourceBase.prototype.getResourceColor = function (eventObj, groupOrder) {\n var colorFieldIndex = (!isNullOrUndefined(groupOrder) &&\n this.colorIndex > groupOrder.length - 1) ? groupOrder.length - 1 : this.colorIndex;\n var resource = this.resourceCollection[parseInt(colorFieldIndex.toString(), 10)];\n if (isNullOrUndefined(groupOrder) && this.parent.activeViewOptions.group.allowGroupEdit && resource.allowMultiple) {\n return undefined;\n }\n var id = isNullOrUndefined(groupOrder) ? eventObj[resource.field] : groupOrder[parseInt(colorFieldIndex.toString(), 10)];\n var data = this.filterData(resource.dataSource, resource.idField, id);\n if (data.length > 0) {\n return data[0][resource.colorField];\n }\n return undefined;\n };\n ResourceBase.prototype.getCssClass = function (eventObj) {\n var resource = this.resourceCollection.slice(-1)[0];\n if (this.parent.activeViewOptions.group.allowGroupEdit && resource.allowMultiple) {\n return undefined;\n }\n var data = this.filterData(resource.dataSource, resource.idField, eventObj[resource.field]);\n if (data.length > 0) {\n return data[0][resource.cssClassField];\n }\n return undefined;\n };\n ResourceBase.prototype.getResourceRenderDates = function () {\n // eslint-disable-next-line prefer-spread\n var resourceDates = [].concat.apply([], this.lastResourceLevel.map(function (e) { return e.renderDates; }));\n var removeDuplicateDates = function (dateColl) { return dateColl.filter(function (date, index, dates) {\n return dates.map(function (dateObj) { return dateObj.getTime(); }).indexOf(date.getTime()) === index;\n }); };\n var renderDates = removeDuplicateDates(resourceDates);\n renderDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n return renderDates;\n };\n ResourceBase.prototype.filterData = function (dataSource, field, value) {\n return dataSource.filter(function (data) { return data[\"\" + field] === value; });\n };\n ResourceBase.prototype.getResourceData = function (eventObj, index, groupEditIndex) {\n if (this.parent.activeViewOptions.group.allowGroupEdit) {\n var resourceObj = {};\n for (var _i = 0, groupEditIndex_1 = groupEditIndex; _i < groupEditIndex_1.length; _i++) {\n var groupIndex = groupEditIndex_1[_i];\n var resourceLevel = this.lastResourceLevel[parseInt(groupIndex.toString(), 10)].groupOrder;\n for (var level = 0, length_3 = resourceLevel.length; level < length_3; level++) {\n var fieldName = this.resourceCollection[parseInt(level.toString(), 10)].field;\n if (isNullOrUndefined(resourceObj[\"\" + fieldName])) {\n resourceObj[\"\" + fieldName] = [];\n }\n resourceObj[\"\" + fieldName].push(resourceLevel[parseInt(level.toString(), 10)]);\n }\n }\n eventObj = extend(eventObj, resourceObj);\n }\n else {\n for (var level = 0, length_4 = this.resourceCollection.length; level < length_4; level++) {\n if (this.lastResourceLevel[parseInt(index.toString(), 10)]) {\n eventObj[this.resourceCollection[parseInt(level.toString(), 10)].field] = this.lastResourceLevel[parseInt(index.toString(), 10)].groupOrder[parseInt(level.toString(), 10)];\n }\n }\n }\n };\n ResourceBase.prototype.addResource = function (resources, name, index) {\n var resourceCollection = (resources instanceof Array) ? resources : [resources];\n var _loop_6 = function (resource) {\n if (resource.name === name) {\n resourceCollection.forEach(function (addObj, i) {\n return new DataManager({ json: resource.dataSource }).insert(addObj, null, null, index + i);\n });\n return \"break\";\n }\n };\n for (var _i = 0, _a = this.parent.resourceCollection; _i < _a.length; _i++) {\n var resource = _a[_i];\n var state_1 = _loop_6(resource);\n if (state_1 === \"break\")\n break;\n }\n this.refreshLayout(true);\n };\n ResourceBase.prototype.removeResource = function (resourceId, name) {\n var resourceCollection = (resourceId instanceof Array) ? resourceId : [resourceId];\n var _loop_7 = function (resource) {\n if (resource.name === name) {\n resourceCollection.forEach(function (removeObj) {\n return new DataManager({ json: resource.dataSource }).remove(resource.idField, removeObj);\n });\n return \"break\";\n }\n };\n for (var _i = 0, _a = this.parent.resourceCollection; _i < _a.length; _i++) {\n var resource = _a[_i];\n var state_2 = _loop_7(resource);\n if (state_2 === \"break\")\n break;\n }\n this.refreshLayout(true);\n };\n ResourceBase.prototype.getIndexFromResourceId = function (id, name, resourceData, event, parentField) {\n name = name || this.parent.resourceCollection.slice(-1)[0].name;\n if (isNullOrUndefined(resourceData)) {\n resourceData = this.resourceCollection.filter(function (e) { return e.name === name; })[0];\n if (isNullOrUndefined(resourceData)) {\n return null;\n }\n }\n var resource = resourceData.dataSource.filter(function (e) {\n if (event && e[resourceData.idField] === id) {\n if (e[resourceData.groupIDField] === event[\"\" + parentField]) {\n return e[resourceData.idField] === id;\n }\n return null;\n }\n else {\n return e[resourceData.idField] === id;\n }\n })[0];\n return (this.lastResourceLevel.map(function (e) { return e.resourceData; }).indexOf(resource));\n };\n ResourceBase.prototype.resourceExpand = function (id, name, hide) {\n var resource = this.parent.resourceCollection.filter(function (e) {\n if (e.name === name) {\n return e;\n }\n return null;\n })[0];\n var index = 0;\n var resourceData = resource.dataSource.filter(function (e) { return e[resource.idField] === id; })[0];\n if (!this.parent.activeViewOptions.group.byGroupID) {\n index = this.getIndexFromResourceId(id, name, resource);\n }\n else {\n index = this.lastResourceLevel.map(function (e) { return e.resourceData; }).indexOf(resourceData);\n }\n var target = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS + ' ' + (\"[data-group-index=\\\"\" + index + \"\\\"]\") +\n ' ' + '.' + cls.RESOURCE_TREE_ICON_CLASS);\n if (target) {\n if (target.classList.contains(cls.RESOURCE_EXPAND_CLASS) && !hide) {\n target.click();\n }\n else if (target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS) && hide) {\n target.click();\n }\n }\n };\n ResourceBase.prototype.resourceScroll = function (id, name) {\n if (this.parent.isAdaptive || ['Agenda', 'MonthAgenda'].indexOf(this.parent.currentView) > -1) {\n return;\n }\n var levelName = name || this.parent.resourceCollection.slice(-1)[0].name;\n var levelIndex = this.parent.resourceCollection.length - 1;\n var resource = this.parent.resourceCollection.filter(function (e, index) {\n if (e.name === levelName) {\n levelIndex = index;\n return e;\n }\n return null;\n })[0];\n var scrollElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var index = 0;\n if (this.parent.activeView.isTimelineView()) {\n if (!this.parent.activeViewOptions.group.byGroupID) {\n index = this.getIndexFromResourceId(id, levelName, resource);\n }\n else {\n var resourceData = resource.dataSource.filter(function (e) {\n return e[resource.idField] === id;\n })[0];\n index = this.lastResourceLevel.map(function (e) { return e.resourceData; }).indexOf(resourceData);\n }\n if (this.parent.virtualScrollModule) {\n var virtual = this.parent.element.querySelector('.' + cls.VIRTUAL_TRACK_CLASS);\n var averageRowHeight = Math.round(virtual.offsetHeight / this.expandedResources.length);\n if (this.parent.rowAutoHeight) {\n scrollElement.scrollTop = 0;\n this.parent.virtualScrollModule.virtualScrolling();\n }\n scrollElement.scrollTop = (index * averageRowHeight) - (((this.parent.virtualScrollModule.bufferCount - 1) * averageRowHeight));\n this.parent.virtualScrollModule.virtualScrolling();\n if (this.parent.rowAutoHeight) {\n var td = this.parent.element.querySelector(\".\" + cls.WORK_CELLS_CLASS + \"[data-group-index=\\\"\" + index + \"\\\"]\");\n if (td && !td.parentElement.classList.contains(cls.HIDDEN_CLASS)) {\n scrollElement.scrollTop =\n (scrollElement.scrollTop < td.offsetTop) ? td.offsetTop : scrollElement.scrollTop + td.offsetTop;\n }\n }\n else {\n scrollElement.scrollTop = (index * averageRowHeight);\n }\n }\n else {\n var td = this.parent.element.querySelector(\".\" + cls.WORK_CELLS_CLASS + \"[data-group-index=\\\"\" + index + \"\\\"]\");\n if (td && !td.parentElement.classList.contains(cls.HIDDEN_CLASS)) {\n scrollElement.scrollTop = td.offsetTop;\n }\n }\n }\n else {\n if (!this.parent.activeViewOptions.group.byGroupID) {\n index = this.getIndexFromResourceId(id, levelName, resource);\n }\n else {\n if (levelName === this.parent.resourceCollection.slice(-1)[0].name) {\n index = this.lastResourceLevel.map(function (e) { return e.resourceData[resource.idField]; }).indexOf(id);\n }\n else {\n index = resource.dataSource.map(function (e) { return e[resource.idField]; }).indexOf(id);\n }\n }\n var offsetTarget = this.parent.element.querySelector(\".\" + cls.HEADER_ROW_CLASS + \":nth-child(\" + (levelIndex + 1) + \")\");\n var offset = [].slice.call(offsetTarget.children).map(function (node) { return node.offsetLeft; });\n scrollElement.scrollLeft = offset[parseInt(index.toString(), 10)];\n }\n };\n ResourceBase.prototype.destroy = function () {\n this.parent.off(events.documentClick, this.documentClick);\n if (this.treeViewObj) {\n if (this.treeViewObj.portals && this.treeViewObj.portals.length > 0) {\n var treeViewTemplates = this.treeViewObj.portals.map(function (x) { return x.propName; });\n if (treeViewTemplates.length > 0) {\n this.parent.resetTemplates(treeViewTemplates);\n }\n }\n this.treeViewObj.destroy();\n this.treeViewObj = null;\n }\n if (this.treePopup) {\n this.treePopup.destroy();\n this.treePopup = null;\n remove(this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP));\n remove(this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP_OVERLAY));\n }\n var resToolBarEle = this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER);\n if (resToolBarEle) {\n remove(resToolBarEle);\n }\n };\n return ResourceBase;\n}());\nexport { ResourceBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, Property, Event, Animation, Collection, append } from '@syncfusion/ej2-base';\nimport { EventHandler, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';\nimport { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { getElement, removeClass, addClass, classList, remove, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { HeaderRenderer } from '../renderer/header-renderer';\nimport { Scroll } from '../actions/scroll';\nimport { ScheduleTouch } from '../actions/touch';\nimport { KeyboardInteraction } from '../actions/keyboard';\nimport { Data } from '../actions/data';\nimport { EventBase } from '../event-renderer/event-base';\nimport { InlineEdit } from '../event-renderer/inline-edit';\nimport { QuickPopups } from '../popups/quick-popups';\nimport { EventTooltip } from '../popups/event-tooltip';\nimport { EventWindow } from '../popups/event-window';\nimport { Render } from '../renderer/renderer';\nimport { WorkHours } from '../models/work-hours';\nimport { TimeScale } from '../models/time-scale';\nimport { QuickInfoTemplates } from '../models/quick-info-templates';\nimport { HeaderRows } from '../models/header-rows';\nimport { Crud } from '../actions/crud';\nimport { WorkCellInteraction } from '../actions/work-cells';\nimport { EventSettings } from '../models/event-settings';\nimport { Group } from '../models/group';\nimport { Resources } from '../models/resources';\nimport { Gregorian, Islamic } from '../../common/calendar-util';\nimport { ResourceBase } from '../base/resource';\nimport { Timezone, timezoneData } from '../timezone/timezone';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Represents the Schedule component that displays a list of events scheduled against specific date and timings,\n * thus helping us to plan and manage it properly.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Schedule = /** @class */ (function (_super) {\n __extends(Schedule, _super);\n /**\n * Constructor for creating the Schedule widget\n *\n * @param {ScheduleModel} options Accepts the schedule model properties to initiate the rendering\n * @param {string | HTMLElement} element Accepts the DOM element reference\n */\n function Schedule(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Core method that initializes the control rendering.\n *\n * @returns {void}\n * @private\n */\n Schedule.prototype.render = function () {\n var addClasses = [];\n var removeClasses = [];\n addClasses.push(cls.ROOT);\n if (this.enableRtl) {\n addClasses.push(cls.RTL);\n }\n else {\n removeClasses.push(cls.RTL);\n }\n if (this.isAdaptive) {\n addClasses.push(cls.DEVICE_CLASS);\n }\n else {\n removeClasses.push(cls.DEVICE_CLASS);\n }\n if (this.allowMultiDrag) {\n addClasses.push(cls.MULTI_DRAG);\n }\n else {\n removeClasses.push(cls.MULTI_DRAG);\n }\n if (this.cssClass) {\n var cssClass = this.cssClass.split(' ');\n for (var _i = 0, cssClass_1 = cssClass; _i < cssClass_1.length; _i++) {\n var cls_1 = cssClass_1[_i];\n addClasses.push(cls_1);\n }\n }\n classList(this.element, addClasses, removeClasses);\n this.validateDate();\n createSpinner({ target: this.element });\n this.scrollModule = new Scroll(this);\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n this.renderModule = new Render(this);\n this.eventBase = new EventBase(this);\n this.workCellAction = new WorkCellInteraction(this);\n if (this.allowKeyboardInteraction) {\n this.keyboardInteractionModule = new KeyboardInteraction(this);\n }\n this.inlineModule = new InlineEdit(this);\n this.initializeDataModule();\n this.renderTableContainer();\n this.activeViewOptions = this.getActiveViewOptions();\n this.initializeResources();\n this.wireEvents();\n };\n Schedule.prototype.renderTableContainer = function () {\n if (!this.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS)) {\n this.element.appendChild(this.createElement('div', { className: cls.TABLE_CONTAINER_CLASS }));\n }\n };\n /**\n * Method to render react templates\n *\n * @param {Function} callback - Specifies the callBack method\n * @returns {void}\n * @private\n */\n Schedule.prototype.renderTemplates = function (callback) {\n if (this.isReact) {\n this.renderReactTemplates(callback);\n }\n else if (callback) {\n callback();\n }\n };\n /**\n * Method to reset react templates\n *\n * @param {string[]} templates Accepts the template ID\n * @returns {void}\n * @private\n */\n Schedule.prototype.resetTemplates = function (templates) {\n if (this.isAngular || this.isReact) {\n this.clearTemplate(templates);\n }\n };\n /**\n * This method renders untrusted strings and scripts securely by sanitizing them first.\n *\n * @param {string} value - A string value representing the HTML string value to be sanitized.\n * @param {HTMLElement} element - An HTML element to which the sanitized or unsanitized HTML string will be assigned.\n * @returns {void}\n * @private\n */\n Schedule.prototype.sanitize = function (value, element) {\n if (this.enableHtmlSanitizer) {\n element.innerText = SanitizeHtmlHelper.sanitize(value);\n }\n else {\n element.innerHTML = value;\n }\n };\n Schedule.prototype.initializeResources = function (isSetModel) {\n if (isSetModel === void 0) { isSetModel = false; }\n if (this.resources.length > 0) {\n this.resourceBase = new ResourceBase(this);\n this.resourceBase.bindResourcesData(isSetModel);\n }\n else {\n this.resourceBase = null;\n this.resourceCollection = [];\n this.renderElements(isSetModel);\n }\n };\n /**\n * Method to render the layout elements\n *\n * @param {boolean} isLayoutOnly Accepts the boolean value to render layout or not\n * @returns {void}\n * @private\n */\n Schedule.prototype.renderElements = function (isLayoutOnly) {\n if (isLayoutOnly) {\n this.initializeView(this.currentView);\n this.eventWindow.refresh();\n return;\n }\n this.destroyHeaderModule();\n if (this.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n }\n this.renderTableContainer();\n if (Browser.isDevice || Browser.isTouch) {\n this.scheduleTouchModule = new ScheduleTouch(this);\n }\n this.initializeView(this.currentView);\n this.destroyPopups();\n if (!this.isPrinting) {\n this.initializePopups();\n }\n };\n Schedule.prototype.validateDate = function (selectedDate) {\n if (selectedDate === void 0) { selectedDate = this.selectedDate; }\n // persist the selected date value\n var date = selectedDate instanceof Date ? new Date(selectedDate.getTime()) : new Date(selectedDate);\n var minDate = this.minDate instanceof Date ? new Date(this.minDate.getTime()) : new Date(this.minDate);\n var maxDate = this.maxDate instanceof Date ? new Date(this.maxDate.getTime()) : new Date(this.maxDate);\n if (minDate <= maxDate) {\n if (date < minDate) {\n date = minDate;\n }\n if (date > maxDate) {\n date = maxDate;\n }\n this.setProperties({ selectedDate: new Date('' + date), minDate: new Date('' + minDate), maxDate: new Date('' + maxDate) }, true);\n if (this.eventWindow) {\n this.eventWindow.updateMinMaxDateToEditor();\n }\n }\n else {\n throw Error('minDate should be equal or less than maxDate');\n }\n };\n Schedule.prototype.getViewIndex = function (viewName) {\n for (var item = 0; item < this.viewCollections.length; item++) {\n var checkIndex = this.viewCollections[parseInt(item.toString(), 10)].option;\n if (checkIndex === viewName) {\n return item;\n }\n }\n return -1;\n };\n Schedule.prototype.setViewOptions = function (isModuleLoad) {\n if (isModuleLoad === void 0) { isModuleLoad = false; }\n this.viewOptions = {};\n this.viewCollections = [];\n var viewName;\n var selectedView;\n var prevIndex = this.viewIndex;\n var count = 0;\n this.viewIndex = -1;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var view = _a[_i];\n var isOptions = (typeof view === 'string') ? false : true;\n if (typeof view === 'string') {\n viewName = view;\n if (this.currentView === viewName) {\n selectedView = viewName;\n this.viewIndex = count;\n }\n }\n else {\n viewName = view.option;\n if (view.isSelected) {\n selectedView = viewName;\n this.viewIndex = count;\n }\n }\n var obj = extend({ option: viewName }, isOptions ? view : {});\n var fieldViewName = viewName.charAt(0).toLowerCase() + viewName.slice(1);\n obj.cellHeaderTemplateName = obj.cellHeaderTemplate ? obj.option : '';\n obj.dateHeaderTemplateName = obj.dateHeaderTemplate ? obj.option : '';\n obj.dateRangeTemplateName = obj.dateRangeTemplate ? obj.option : '';\n obj.cellTemplateName = obj.cellTemplate ? obj.option : '';\n obj.dayHeaderTemplateName = obj.dayHeaderTemplate ? obj.option : '';\n obj.monthHeaderTemplateName = obj.monthHeaderTemplate ? obj.option : '';\n obj.resourceHeaderTemplateName = obj.resourceHeaderTemplate ? obj.option : '';\n obj.headerIndentTemplateName = obj.headerIndentTemplate ? obj.option : '';\n obj.eventTemplateName = obj.eventTemplate ? obj.option : '';\n if (!isNullOrUndefined(obj.firstDayOfWeek) && obj.firstDayOfWeek === 0) {\n delete obj.firstDayOfWeek;\n }\n if (!isNullOrUndefined(obj.interval) && obj.interval === 1) {\n delete obj.interval;\n }\n this.viewCollections.push(obj);\n if (isNullOrUndefined(this.viewOptions[\"\" + fieldViewName])) {\n this.viewOptions[\"\" + fieldViewName] = [obj];\n }\n else {\n this.viewOptions[\"\" + fieldViewName].push(obj);\n }\n count++;\n }\n if (!isModuleLoad && selectedView) {\n this.setProperties({ currentView: selectedView }, true);\n }\n if (this.viewIndex === -1) {\n var currentIndex = this.getViewIndex(this.currentView);\n this.viewIndex = ((typeof this.views[0] !== 'string') && (!isNullOrUndefined(prevIndex) && prevIndex !== -1)) ? prevIndex :\n (currentIndex === -1) ? 0 : currentIndex;\n }\n };\n Schedule.prototype.getActiveViewOptions = function () {\n var timeScale = {\n enable: this.timeScale.enable,\n interval: this.timeScale.interval,\n slotCount: this.timeScale.slotCount,\n majorSlotTemplate: this.timeScale.majorSlotTemplate,\n minorSlotTemplate: this.timeScale.minorSlotTemplate\n };\n var isYearView = this.viewCollections[this.viewIndex].option.indexOf('Year') > -1;\n var group = {\n byDate: isYearView ? false : this.group.byDate,\n byGroupID: this.group.byGroupID,\n allowGroupEdit: this.group.allowGroupEdit,\n resources: this.group.resources,\n headerTooltipTemplate: this.group.headerTooltipTemplate,\n enableCompactView: this.group.enableCompactView,\n hideNonWorkingDays: ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.currentView) > -1 ? this.group.hideNonWorkingDays : false\n };\n var workDays = this.viewCollections[this.viewIndex].workDays ? [] : this.workDays;\n var scheduleOptions = {\n dateFormat: this.dateFormat,\n endHour: this.endHour,\n isSelected: false,\n option: null,\n readonly: this.readonly,\n startHour: this.startHour,\n allowVirtualScrolling: false,\n cellHeaderTemplate: this.cellHeaderTemplate,\n dayHeaderTemplate: this.dayHeaderTemplate,\n monthHeaderTemplate: this.monthHeaderTemplate,\n cellTemplate: this.cellTemplate,\n eventTemplate: this.eventSettings.template,\n dateHeaderTemplate: this.dateHeaderTemplate,\n dateRangeTemplate: this.dateRangeTemplate,\n resourceHeaderTemplate: this.resourceHeaderTemplate,\n headerIndentTemplate: this.headerIndentTemplate,\n firstMonthOfYear: this.firstMonthOfYear,\n firstDayOfWeek: this.firstDayOfWeek,\n workDays: workDays,\n monthsCount: this.monthsCount,\n showWeekend: this.showWeekend,\n showWeekNumber: this.showWeekNumber,\n displayName: null,\n interval: 1,\n timeScale: timeScale,\n timeFormat: this.internalTimeFormat,\n group: group,\n headerRows: this.headerRows,\n orientation: 'Horizontal',\n numberOfWeeks: 0,\n displayDate: null\n };\n var viewOptions = this.viewCollections[this.viewIndex];\n var viewsData = extend(scheduleOptions, viewOptions, undefined, true);\n if (this.firstDayOfWeek !== 0 && viewOptions.firstDayOfWeek && this.firstDayOfWeek !== viewOptions.firstDayOfWeek) {\n viewsData.firstDayOfWeek = this.firstDayOfWeek;\n }\n if (viewsData.displayDate) {\n viewsData.displayDate = viewsData.displayDate instanceof Date ? new Date(viewsData.displayDate.getTime()) :\n new Date(viewsData.displayDate);\n }\n return viewsData;\n };\n Schedule.prototype.initializeDataModule = function () {\n this.eventFields = {\n id: this.eventSettings.fields.id,\n isBlock: this.eventSettings.fields.isBlock,\n subject: this.eventSettings.fields.subject.name,\n startTime: this.eventSettings.fields.startTime.name,\n endTime: this.eventSettings.fields.endTime.name,\n startTimezone: this.eventSettings.fields.startTimezone.name,\n endTimezone: this.eventSettings.fields.endTimezone.name,\n location: this.eventSettings.fields.location.name,\n description: this.eventSettings.fields.description.name,\n isAllDay: this.eventSettings.fields.isAllDay.name,\n recurrenceID: this.eventSettings.fields.recurrenceID.name,\n recurrenceRule: this.eventSettings.fields.recurrenceRule.name,\n recurrenceException: this.eventSettings.fields.recurrenceException.name,\n isReadonly: this.eventSettings.fields.isReadonly,\n followingID: this.eventSettings.fields.followingID\n };\n this.setEditorTitles();\n this.dataModule = new Data(this, this.eventSettings.dataSource, this.eventSettings.query);\n this.crudModule = new Crud(this);\n };\n Schedule.prototype.setEditorTitles = function () {\n this.editorTitles = {\n subject: this.eventSettings.fields.subject.title || this.localeObj.getConstant('title'),\n startTime: this.eventSettings.fields.startTime.title || this.localeObj.getConstant('start'),\n endTime: this.eventSettings.fields.endTime.title || this.localeObj.getConstant('end'),\n isAllDay: this.eventSettings.fields.isAllDay.title || this.localeObj.getConstant('allDay'),\n startTimezone: this.eventSettings.fields.startTimezone.title || this.localeObj.getConstant('startTimezone'),\n endTimezone: this.eventSettings.fields.endTimezone.title || this.localeObj.getConstant('endTimezone'),\n location: this.eventSettings.fields.location.title || this.localeObj.getConstant('location'),\n description: this.eventSettings.fields.description.title || this.localeObj.getConstant('description'),\n recurrenceRule: this.eventSettings.fields.recurrenceRule.title || this.localeObj.getConstant('repeat')\n };\n };\n Schedule.prototype.initializeView = function (viewName) {\n this.showSpinner();\n this.activeViewOptions = this.getActiveViewOptions();\n if (this.resourceBase) {\n this.resourceBase.setResourceCollection();\n }\n this.initializeTemplates();\n this.renderModule.render(viewName);\n };\n Schedule.prototype.initializeTemplates = function () {\n this.cellHeaderTemplateFn = this.templateParser(this.activeViewOptions.cellHeaderTemplate);\n this.dayHeaderTemplateFn = this.templateParser(this.activeViewOptions.dayHeaderTemplate);\n this.monthHeaderTemplateFn = this.templateParser(this.activeViewOptions.monthHeaderTemplate);\n this.cellTemplateFn = this.templateParser(this.activeViewOptions.cellTemplate);\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n this.dateRangeTemplateFn = this.templateParser(this.activeViewOptions.dateRangeTemplate);\n this.majorSlotTemplateFn = this.templateParser(this.activeViewOptions.timeScale.majorSlotTemplate);\n this.minorSlotTemplateFn = this.templateParser(this.activeViewOptions.timeScale.minorSlotTemplate);\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n this.resourceHeaderTemplateFn = this.templateParser(this.activeViewOptions.resourceHeaderTemplate);\n this.headerIndentTemplateFn = this.templateParser(this.activeViewOptions.headerIndentTemplate);\n this.headerTooltipTemplateFn = this.templateParser(this.activeViewOptions.group.headerTooltipTemplate);\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n this.quickInfoTemplatesHeaderFn = this.templateParser(this.quickInfoTemplates.header);\n this.quickInfoTemplatesContentFn = this.templateParser(this.quickInfoTemplates.content);\n this.quickInfoTemplatesFooterFn = this.templateParser(this.quickInfoTemplates.footer);\n };\n Schedule.prototype.initializePopups = function () {\n this.eventWindow = new EventWindow(this);\n this.quickPopup = new QuickPopups(this);\n };\n /**\n * Method to get day names\n *\n * @param {string} type Accepts the day name\n * @returns {string[]} Returns the collection of day names\n * @private\n */\n Schedule.prototype.getDayNames = function (type) {\n var culShortNames = [];\n var cldrObj;\n var nameSpace = '';\n if (this.locale === 'en' || this.locale === 'en-US') {\n nameSpace = 'days.stand-alone.';\n cldrObj = (getValue(nameSpace + type, getDefaultDateObject(this.getCalendarMode())));\n }\n else {\n nameSpace = 'main.' + '' + this.locale + '.dates.calendars.' + this.getCalendarMode() + '.days.format.' + type;\n cldrObj = (getValue(nameSpace, cldrData));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n return culShortNames;\n };\n Schedule.prototype.setCldrTimeFormat = function () {\n if (!isNullOrUndefined(this.timeFormat)) {\n this.internalTimeFormat = this.timeFormat;\n return;\n }\n if (this.locale === 'en' || this.locale === 'en-US') {\n this.internalTimeFormat = (getValue('timeFormats.short', getDefaultDateObject(this.getCalendarMode())));\n }\n else {\n this.internalTimeFormat = (getValue('main.' + '' + this.locale + '.dates.calendars.' + this.getCalendarMode() + '.timeFormats.short', cldrData));\n }\n };\n /**\n * Method to get calendar mode\n *\n * @returns {string} Returns the calendar mode\n * @private\n */\n Schedule.prototype.getCalendarMode = function () {\n return this.calendarMode.toLowerCase();\n };\n /**\n * Method to get time in string\n *\n * @param {Date} date Accepts the date object\n * @returns {string} Returns the time in string\n * @private\n */\n Schedule.prototype.getTimeString = function (date) {\n var time = this.globalize.formatDate(date, {\n format: this.activeViewOptions.timeFormat,\n type: 'time', calendar: this.getCalendarMode()\n });\n return time.toLocaleUpperCase();\n };\n /**\n * Method to get date object\n *\n * @param {Date} date Accepts the date object\n * @returns {Date} Returns the date object\n * @private\n */\n Schedule.prototype.getDateTime = function (date) {\n return date instanceof Date ? new Date(date.getTime()) : new Date(date);\n };\n Schedule.prototype.setCalendarMode = function () {\n if (this.calendarMode === 'Islamic') {\n this.calendarUtil = new Islamic();\n }\n else {\n this.calendarUtil = new Gregorian();\n }\n };\n /**\n * Method to change the current view\n *\n * @param {View} view Accepts the view name\n * @param {Event} event Accepts the event object\n * @param {boolean} muteOnChange Accepts the value to enable or disable mute on change\n * @param {number} index Accepts the index value\n * @returns {void}\n * @private\n */\n Schedule.prototype.changeView = function (view, event, muteOnChange, index) {\n var _this = this;\n if (isNullOrUndefined(index)) {\n index = this.getViewIndex(view);\n }\n if (!muteOnChange && index === this.viewIndex && this.currentView === view || index < 0) {\n return;\n }\n var previousView = this.activeViewOptions ? this.activeViewOptions.option : this.currentView;\n var args = { requestType: 'viewNavigate', cancel: false, event: event };\n this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n var navArgs = {\n action: 'view', cancel: false, currentDate: _this.selectedDate, previousView: previousView, currentView: view, viewIndex: index\n };\n _this.trigger(events.navigating, navArgs, function (navigationArgs) {\n if (!navigationArgs.cancel) {\n var isVertical = ['Day', 'Week', 'WorkWeek'].indexOf(view) > -1 && ['Day', 'Week', 'WorkWeek'].indexOf(previousView) < 0;\n _this.uiStateValues.isInitial = isVertical || view.indexOf('Timeline') > -1 || view.indexOf('Year') > -1;\n _this.uiStateValues.top = view.indexOf('Timeline') > -1 && previousView.indexOf('Timeline') < 0 ? 0 : _this.uiStateValues.top;\n _this.viewIndex = navigationArgs.viewIndex;\n _this.setProperties({ currentView: view }, true);\n if (_this.headerModule) {\n _this.headerModule.updateActiveView();\n _this.headerModule.setCalendarDate(_this.selectedDate);\n _this.headerModule.setCalendarView();\n }\n _this.initializeView(_this.currentView);\n _this.animateLayout();\n args = { requestType: 'viewNavigate', cancel: false, event: event };\n _this.trigger(events.actionComplete, args);\n }\n else {\n _this.currentView = previousView;\n }\n });\n }\n else {\n _this.currentView = previousView;\n }\n });\n };\n /**\n * Method to change the view date\n *\n * @param {Date} selectedDate Accepts the selected date\n * @param {Event} event Accepts the event object\n * @returns {void}\n * @private\n */\n Schedule.prototype.changeDate = function (selectedDate, event) {\n var _this = this;\n var args = { requestType: 'dateNavigate', cancel: false, event: event };\n this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n var navArgs = {\n action: 'date', cancel: false, previousDate: _this.selectedDate, currentDate: selectedDate\n };\n _this.trigger(events.navigating, navArgs, function (navigationArgs) {\n if (!navigationArgs.cancel) {\n _this.uiStateValues.isInitial = _this.activeView.isTimelineView() && _this.currentView !== 'TimelineYear';\n _this.validateDate(navigationArgs.currentDate);\n if (_this.headerModule) {\n _this.headerModule.setCalendarDate(navigationArgs.currentDate);\n }\n if (_this.currentView === 'MonthAgenda' && _this.monthAgendaModule) {\n _this.monthAgendaModule.monthAgendaDate = new Date('' + _this.selectedDate);\n }\n _this.initializeView(_this.currentView);\n _this.animateLayout();\n args = { requestType: 'dateNavigate', cancel: false, event: event };\n _this.trigger(events.actionComplete, args);\n }\n });\n }\n });\n };\n /**\n * Method to validate min and max date\n *\n * @param {Date} date Accepts the date object\n * @returns {boolean} Returns the boolean result to validate the min and max date\n * @private\n */\n Schedule.prototype.isMinMaxDate = function (date) {\n if (date === void 0) { date = this.selectedDate; }\n return ((date.getTime() >= this.minDate.getTime()) && (date.getTime() <= this.maxDate.getTime()));\n };\n /**\n * Method to validate the selected date\n *\n * @param {Date} date Accepts the date object\n * @returns {boolean} Returns the boolean value for given date is selected date or not\n * @private\n */\n Schedule.prototype.isSelectedDate = function (date) {\n return date.setHours(0, 0, 0, 0) === new Date('' + this.selectedDate).setHours(0, 0, 0, 0);\n };\n /**\n * Method to get the current time\n *\n * @param {Date} date Accepts the date object\n * @returns {Date} Returns the date object after performing the timezone conversion\n * @private\n */\n Schedule.prototype.getCurrentTime = function (date) {\n if (date === void 0) { date = new Date(); }\n if (this.timezone) {\n return this.tzModule.convert(date, this.tzModule.getLocalTimezoneName(), this.timezone);\n }\n return date;\n };\n /** Method to get navigate view\n *\n * @returns {View} Return the navigate view name\n * @private\n */\n Schedule.prototype.getNavigateView = function () {\n if (this.activeView.isTimelineView()) {\n return this.currentView === 'TimelineMonth' || this.currentView === 'TimelineYear' ? 'TimelineDay' : 'Agenda';\n }\n return 'Day';\n };\n Schedule.prototype.animateLayout = function () {\n if (!this.activeView.element) {\n return;\n }\n new Animation({ duration: 600, name: 'FadeIn', timingFunction: 'easeIn' }).animate(this.activeView.element);\n };\n /**\n * To provide the array of modules needed for control rendering\n *\n * @returns {ModuleDeclaration[]} Returns the declared modules\n * @private\n */\n Schedule.prototype.requiredModules = function () {\n var modules = [];\n this.setViewOptions(true);\n for (var _i = 0, _a = Object.keys(this.viewOptions); _i < _a.length; _i++) {\n var view = _a[_i];\n view = (view === 'timelineDay' || view === 'timelineWeek' || view === 'timelineWorkWeek') ? 'timelineViews' : view;\n modules.push({ member: view, args: [this] });\n }\n if (this.allowDragAndDrop) {\n modules.push({ member: 'dragAndDrop', args: [this] });\n }\n if (this.allowResizing) {\n modules.push({ member: 'resize', args: [this] });\n }\n modules.push({ member: 'excelExport', args: [this] });\n modules.push({ member: 'iCalendarExport', args: [this] });\n modules.push({ member: 'iCalendarImport', args: [this] });\n modules.push({ member: 'print', args: [this] });\n return modules;\n };\n /**\n * Initializes the values of private members.\n *\n * @returns {void}\n * @private\n */\n Schedule.prototype.preRender = function () {\n this.isAdaptive = Browser.isDevice || util.isIPadDevice();\n this.globalize = new Internationalization(this.locale);\n this.tzModule = new Timezone();\n if (this && isNullOrUndefined(this.uiStateValues) || !(this.enablePersistence)) {\n this.uiStateValues = {\n expand: false, isInitial: true, left: 0, top: 0, isGroupAdaptive: false,\n isIgnoreOccurrence: false, groupIndex: 0, action: false, isBlock: false, isCustomMonth: true, isPreventTimezone: false\n };\n }\n this.currentTimezoneDate = this.getCurrentTime();\n this.activeCellsData = {\n startTime: new Date(this.currentTimezoneDate),\n endTime: new Date(this.currentTimezoneDate),\n isAllDay: false\n };\n this.activeEventData = { event: undefined, element: undefined };\n this.getDefaultLocale();\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.setCldrTimeFormat();\n this.setCalendarMode();\n this.eventsData = [];\n this.eventsProcessed = [];\n this.blockData = [];\n this.blockProcessed = [];\n this.resourceCollection = [];\n this.currentAction = null;\n this.selectedElements = [];\n this.setViewOptions();\n };\n Schedule.prototype.getDefaultLocale = function () {\n this.defaultLocale = {\n day: 'Day',\n week: 'Week',\n workWeek: 'Work Week',\n month: 'Month',\n year: 'Year',\n agenda: 'Agenda',\n weekAgenda: 'Week Agenda',\n workWeekAgenda: 'Work Week Agenda',\n monthAgenda: 'Month Agenda',\n today: 'Today',\n noEvents: 'No events',\n emptyContainer: 'There are no events scheduled on this day.',\n allDay: 'All day',\n start: 'Start',\n end: 'End',\n more: 'more',\n close: 'Close',\n cancel: 'Cancel',\n noTitle: '(No Title)',\n delete: 'Delete',\n deleteEvent: 'Delete Event',\n deleteMultipleEvent: 'Delete Multiple Events',\n selectedItems: 'Items selected',\n deleteSeries: 'Entire Series',\n edit: 'Edit',\n editSeries: 'Entire Series',\n editEvent: 'Edit Event',\n createEvent: 'Create',\n subject: 'Subject',\n addTitle: 'Add title',\n moreDetails: 'More Details',\n save: 'Save',\n editContent: 'How would you like to change the appointment in the series?',\n deleteContent: 'Are you sure you want to delete this event?',\n deleteMultipleContent: 'Are you sure you want to delete the selected events?',\n newEvent: 'New Event',\n title: 'Title',\n location: 'Location',\n description: 'Description',\n timezone: 'Timezone',\n startTimezone: 'Start Timezone',\n endTimezone: 'End Timezone',\n repeat: 'Repeat',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n deleteButton: 'Delete',\n recurrence: 'Recurrence',\n wrongPattern: 'The recurrence pattern is not valid.',\n seriesChangeAlert: 'Do you want to cancel the changes made to specific ' +\n 'instances of this series and match it to the whole series again?',\n createError: 'The duration of the event must be shorter than how frequently it occurs. ' +\n 'Shorten the duration, or change the recurrence pattern in the recurrence event editor.',\n sameDayAlert: 'Two occurrences of the same event cannot occur on the same day.',\n occurenceAlert: 'Cannot reschedule an occurrence of the recurring appointment if it skips over ' +\n 'a later occurrence of the same appointment.',\n editRecurrence: 'Edit Recurrence',\n repeats: 'Repeats',\n alert: 'Alert',\n startEndError: 'The selected end date occurs before the start date.',\n invalidDateError: 'The entered date value is invalid.',\n blockAlert: 'Events cannot be scheduled within the blocked time range.',\n ok: 'Ok',\n yes: 'Yes',\n no: 'No',\n occurrence: 'Occurrence',\n series: 'Series',\n previous: 'Previous',\n next: 'Next',\n timelineDay: 'Timeline Day',\n timelineWeek: 'Timeline Week',\n timelineWorkWeek: 'Timeline Work Week',\n timelineMonth: 'Timeline Month',\n timelineYear: 'Timeline Year',\n editFollowingEvent: 'Following Events',\n deleteTitle: 'Delete Event',\n editTitle: 'Edit Event',\n beginFrom: 'Begin From',\n endAt: 'Ends At',\n expandAllDaySection: 'Expand-all-day-section',\n collapseAllDaySection: 'Collapse-all-day-section',\n searchTimezone: 'Search Timezone',\n noRecords: 'No records found'\n };\n };\n Schedule.prototype.wireEvents = function () {\n EventHandler.add(window, 'resize', this.onScheduleResize, this);\n EventHandler.add(window, 'orientationchange', this.onScheduleResize, this);\n EventHandler.add(document, Browser.touchStartEvent, this.onDocumentClick, this);\n };\n /**\n * Method to remove selected class\n *\n * @returns {void}\n * @private\n */\n Schedule.prototype.removeSelectedClass = function () {\n var selectedCells = this.getSelectedCells();\n for (var _i = 0, selectedCells_1 = selectedCells; _i < selectedCells_1.length; _i++) {\n var cell = selectedCells_1[_i];\n if (this.currentView !== 'Year') {\n cell.setAttribute('aria-selected', 'false');\n }\n cell.removeAttribute('tabindex');\n }\n removeClass(selectedCells, cls.SELECTED_CELL_CLASS);\n if (this.keyboardInteractionModule && this.keyboardInteractionModule.selectedCells.length > 0) {\n this.keyboardInteractionModule.selectedCells = [];\n }\n };\n /**\n * Method to add selected class\n *\n * @param {HTMLTableCellElement[]} cells Accepts the collection of elements\n * @param {HTMLTableCellElement} focusCell Accepts the focus element\n * @param {boolean} isPreventScroll Accepts the boolean value to prevent scroll\n * @returns {void}\n * @private\n */\n Schedule.prototype.addSelectedClass = function (cells, focusCell, isPreventScroll) {\n if (this.currentView !== 'Year') {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n cell.setAttribute('aria-selected', 'true');\n }\n }\n addClass(cells, cls.SELECTED_CELL_CLASS);\n if (focusCell) {\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus({ preventScroll: isPreventScroll || false });\n }\n };\n /**\n * Method to select cell\n *\n * @param {HTMLElement | HTMLTableCellElement} element Accepts the select element\n * @returns {void}\n * @private\n */\n Schedule.prototype.selectCell = function (element) {\n this.removeSelectedClass();\n this.addSelectedClass([element], element);\n };\n /**\n * Method to get all day row element\n *\n * @returns {Element} Returns the all day row element\n * @private\n */\n Schedule.prototype.getAllDayRow = function () {\n return this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n };\n /**\n * Method to get content table element\n *\n * @returns {HTMLElement} Returns the content table element\n * @private\n */\n Schedule.prototype.getContentTable = function () {\n return this.activeView.element.querySelector('.' + cls.CONTENT_TABLE_CLASS + ' tbody');\n };\n /**\n * Method to get all content table rows\n *\n * @returns {HTMLElement[]} Returns the content table rows\n * @private\n */\n Schedule.prototype.getTableRows = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr:not(.' + cls.HIDDEN_CLASS + ')'));\n };\n /**\n * Method to get work cell elements\n *\n * @returns {Element[]} Returns the all work cell elements\n * @private\n */\n Schedule.prototype.getWorkCellElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n };\n /**\n * Method to get the index from date collection\n *\n * @param {Date[]} collection Accepts the collections of date\n * @param {Date} date Accepts the date object\n * @returns {number} Returns the index compared date with date collections\n * @private\n */\n Schedule.prototype.getIndexOfDate = function (collection, date) {\n return collection.map(Number).indexOf(+date);\n };\n /**\n * Method to find all day cell\n *\n * @param {Element} td Accepts the DOM Element\n * @returns {boolean} Returns the boolean value\n * @private\n */\n Schedule.prototype.isAllDayCell = function (td) {\n if (['Month', 'TimelineMonth', 'TimelineYear', 'MonthAgenda'].indexOf(this.currentView) > -1 ||\n td.classList.contains(cls.ALLDAY_CELLS_CLASS) ||\n td.classList.contains(cls.HEADER_CELLS_CLASS) || !this.activeViewOptions.timeScale.enable) {\n return true;\n }\n if (this.activeView.isTimelineView() && this.activeViewOptions.headerRows.length > 0 &&\n this.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour') {\n return true;\n }\n return false;\n };\n /**\n * Method to get date from element\n *\n * @param {Element} td Accepts the DOM element\n * @returns {Date} Returns the date object\n * @private\n */\n Schedule.prototype.getDateFromElement = function (td) {\n var dateString;\n if (!isNullOrUndefined(td)) {\n dateString = td.getAttribute('data-date');\n }\n if (!isNullOrUndefined(dateString)) {\n var dateInMS = parseInt(dateString, 10);\n var date = new Date(dateInMS);\n return date;\n }\n return undefined;\n };\n /**\n * Method to get target element from given selector\n *\n * @param {string} selector Accepts the element selector\n * @param {number} left Accepts the pageX value\n * @param {number} top Accepts the pageY value\n * @returns {Element[]} Returns the collection of elements based on the given selector\n * @private\n */\n Schedule.prototype.getTargetElement = function (selector, left, top) {\n var element = document.elementFromPoint(left, top);\n var targetElement;\n if (element) {\n targetElement = element.closest(selector);\n }\n return (targetElement) ? [targetElement] : null;\n };\n /**\n * Method to process cell header template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getCellHeaderTemplate = function () {\n return this.cellHeaderTemplateFn;\n };\n /**\n * Method to process cell header template in year view.\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getDayHeaderTemplate = function () {\n return this.dayHeaderTemplateFn;\n };\n /**\n * Method to process cell header template in year view.\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getMonthHeaderTemplate = function () {\n return this.monthHeaderTemplateFn;\n };\n /**\n * Method to process cell template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getCellTemplate = function () {\n return this.cellTemplateFn;\n };\n /**\n * Method to process date header template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getDateHeaderTemplate = function () {\n return this.dateHeaderTemplateFn;\n };\n /**\n * Method to process date range template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getDateRangeTemplate = function () {\n return this.dateRangeTemplateFn;\n };\n /**\n * Method to process major slot template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getMajorSlotTemplate = function () {\n return this.majorSlotTemplateFn;\n };\n /**\n * Method to process minor slot template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getMinorSlotTemplate = function () {\n return this.minorSlotTemplateFn;\n };\n /**\n * Method to process appointment template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getAppointmentTemplate = function () {\n return this.appointmentTemplateFn;\n };\n /**\n * Method to process appointment tooltip template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getEventTooltipTemplate = function () {\n return this.eventTooltipTemplateFn;\n };\n /**\n * Method to process header tooltip template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getHeaderTooltipTemplate = function () {\n return this.headerTooltipTemplateFn;\n };\n /**\n * Method to process editor template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getEditorTemplate = function () {\n return this.editorTemplateFn;\n };\n /**\n * Method to process quick info header template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getQuickInfoTemplatesHeader = function () {\n return this.quickInfoTemplatesHeaderFn;\n };\n /**\n * Method to process quick info content template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getQuickInfoTemplatesContent = function () {\n return this.quickInfoTemplatesContentFn;\n };\n /**\n * Method to process quick info footer template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getQuickInfoTemplatesFooter = function () {\n return this.quickInfoTemplatesFooterFn;\n };\n /**\n * Method to process resource header template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getResourceHeaderTemplate = function () {\n return this.resourceHeaderTemplateFn;\n };\n /**\n * Method to process indent template\n *\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.getHeaderIndentTemplate = function () {\n return this.headerIndentTemplateFn;\n };\n /**\n * Method to get dynamic CSS properties\n *\n * @returns {ScrollCss} Returns the CSS properties dynamically\n * @private\n */\n Schedule.prototype.getCssProperties = function () {\n var cssProps = {\n border: this.enableRtl ? 'borderLeftWidth' : 'borderRightWidth',\n padding: this.enableRtl ? 'paddingLeft' : 'paddingRight',\n rtlBorder: this.enableRtl ? 'borderRightWidth' : 'borderLeftWidth',\n rtlPadding: this.enableRtl ? 'paddingRight' : 'paddingLeft'\n };\n return cssProps;\n };\n /**\n * Method to remove new event element in adaptive mode\n *\n * @returns {void}\n * @private\n */\n Schedule.prototype.removeNewEventElement = function () {\n var eventClone = this.element.querySelector('.' + cls.NEW_EVENT_CLASS);\n if (!isNullOrUndefined(eventClone)) {\n remove(eventClone);\n }\n };\n /**\n * Method to get start end time from string\n *\n * @param {string} startEndTime Accepts the start end time string value\n * @returns {Date} Returns the date object\n * @private\n */\n Schedule.prototype.getStartEndTime = function (startEndTime) {\n if (!isNullOrUndefined(startEndTime) && startEndTime !== '') {\n var startEndDate = util.resetTime(new Date(this.currentTimezoneDate) || this.getCurrentTime());\n var timeString = startEndTime.split(':');\n if (timeString.length === 2) {\n startEndDate.setHours(parseInt(timeString[0], 10), parseInt(timeString[1], 10), 0);\n }\n return startEndDate;\n }\n return null;\n };\n Schedule.prototype.onDocumentClick = function (args) {\n this.notify(events.documentClick, { event: args });\n };\n Schedule.prototype.onScheduleResize = function () {\n if (isNullOrUndefined(this.activeView) || ((this.isAdaptive || util.isMobile()) && document.activeElement\n && document.activeElement.classList.contains(cls.SUBJECT_CLASS))) {\n return;\n }\n if (this.activeViewOptions.timeScale.enable && this.activeView) {\n this.activeView.highlightCurrentTime();\n }\n if (this.quickPopup) {\n this.quickPopup.onClosePopup();\n }\n util.resetScrollbarWidth();\n if (this.currentView === 'Month' || ((this.currentView !== 'Agenda' && this.currentView !== 'MonthAgenda')\n && !this.activeViewOptions.timeScale.enable) || this.activeView.isTimelineView()) {\n this.activeView.resetColWidth();\n this.notify(events.scrollUiUpdate, { cssProperties: this.getCssProperties(), isPreventScrollUpdate: true });\n this.refreshEvents(false);\n }\n else {\n this.notify(events.contentReady, {});\n }\n };\n /**\n * Method to process the templates\n *\n * @param {string | Function} template Accepts the template in string\n * @returns {CallbackFunction} Returns the callback function\n * @private\n */\n Schedule.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template === 'function') {\n return compile(template);\n }\n else {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n }\n catch (error) {\n return compile(template);\n }\n }\n return undefined;\n };\n /**\n * Retrieves the selected cells.\n *\n * @returns {Element[]} The elements of currently selected cells will be returned.\n * @private\n */\n Schedule.prototype.getSelectedCells = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.SELECTED_CELL_CLASS));\n };\n /**\n * Method to generate the announcement string\n *\n * @param {Object} event Accepts the event object\n * @param {string} subject Accepts the subject text\n * @returns {string} Returns the announcement string\n * @private\n */\n Schedule.prototype.getAnnouncementString = function (event, subject) {\n var resourceName;\n if (this.quickPopup && this.activeViewOptions.group.resources.length > 0) {\n var constantText = '\"s event - ';\n resourceName = this.quickPopup.getResourceText({ event: event }, 'event') + constantText;\n }\n var recordSubject = (subject || (event[this.eventFields.subject] || this.eventSettings.fields.subject.default));\n var skeleton = 'full';\n var startDateText = this.globalize.formatDate(event[this.eventFields.startTime], {\n type: 'dateTime', skeleton: skeleton, calendar: this.getCalendarMode()\n });\n var endDateText = this.globalize.formatDate(event[this.eventFields.endTime], {\n type: 'dateTime', skeleton: skeleton, calendar: this.getCalendarMode()\n });\n var announcementString = recordSubject + ' ' + this.localeObj.getConstant('beginFrom') + ' '\n + startDateText + ' ' + this.localeObj.getConstant('endAt') + ' ' + endDateText;\n if (resourceName) {\n announcementString = resourceName + ' ' + announcementString;\n }\n return announcementString;\n };\n /**\n * Method to process the element boundary validation\n *\n * @param {number} pageY Accepts the pageY value\n * @param {number} pageX Accepts the pageX value\n * @returns {ResizeEdges} Returns the boundary validation object\n * @private\n */\n Schedule.prototype.boundaryValidation = function (pageY, pageX) {\n var autoScrollDistance = 30;\n var scrollEdges = { left: false, right: false, top: false, bottom: false };\n var viewBoundaries = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS).getBoundingClientRect();\n if ((pageY < viewBoundaries.top + autoScrollDistance + window.pageYOffset) &&\n (pageY > viewBoundaries.top + window.pageYOffset)) {\n scrollEdges.top = true;\n }\n if ((pageY > (viewBoundaries.bottom - autoScrollDistance) + window.pageYOffset) &&\n (pageY < viewBoundaries.bottom + window.pageYOffset)) {\n scrollEdges.bottom = true;\n }\n if ((pageX < viewBoundaries.left + autoScrollDistance + window.pageXOffset) &&\n (pageX > viewBoundaries.left + window.pageXOffset)) {\n scrollEdges.left = true;\n }\n if ((pageX > (viewBoundaries.right - autoScrollDistance) + window.pageXOffset) &&\n (pageX < viewBoundaries.right + window.pageXOffset)) {\n scrollEdges.right = true;\n }\n return scrollEdges;\n };\n /**\n * Method to get the week number.\n *\n * @param {Date[]} dates Accepts the date collections\n * @returns {number} Returns the week number\n * @private\n */\n Schedule.prototype.getWeekNumberContent = function (dates) {\n var weekNumber;\n if (this.weekRule === 'FirstDay') {\n var weekNumberDate = util.getWeekLastDate(dates.slice(-1)[0], this.firstDayOfWeek);\n weekNumber = this.globalize.formatNumber(util.getWeekNumber(weekNumberDate));\n }\n else if (this.weekRule === 'FirstFourDayWeek') {\n var weekFirstDate = util.getWeekFirstDate(dates.slice(-1)[0], this.firstDayOfWeek);\n var weekLastDate = util.getWeekLastDate(dates.slice(-1)[0], this.firstDayOfWeek);\n var weekMidDate = util.getWeekMiddleDate(weekFirstDate, weekLastDate);\n weekNumber = this.globalize.formatNumber(util.getWeekNumber(weekMidDate));\n }\n else if (this.weekRule === 'FirstFullWeek') {\n var weekFirstDate = util.getWeekFirstDate(dates.slice(-1)[0], this.firstDayOfWeek);\n weekNumber = this.globalize.formatNumber(util.getWeekNumber(weekFirstDate));\n }\n return weekNumber;\n };\n /**\n * Method to render the header indent template.\n *\n * @param {TdData} data Accepts the td data\n * @param {Element} td Accepts the td element\n * @returns {void}\n * @private\n */\n Schedule.prototype.renderHeaderIndentTemplate = function (data, td) {\n if (this.activeViewOptions.headerIndentTemplate) {\n var scheduleId = this.element.id + '_';\n var viewName = this.activeViewOptions.headerIndentTemplateName;\n var templateId = scheduleId + viewName + 'headerIndentTemplate';\n var indentTemplate = [].slice.call(this.getHeaderIndentTemplate()(data, this, 'headerIndentTemplate', templateId, false));\n append(indentTemplate, td);\n }\n };\n /**\n * Method to check for refreshing the targeted resource row events.\n *\n * @returns {boolean} Returns the boolean value\n * @private\n */\n Schedule.prototype.isSpecificResourceEvents = function () {\n return this.activeViewOptions.group.resources.length > 0 && !this.activeViewOptions.group.allowGroupEdit &&\n !this.rowAutoHeight && !this.virtualScrollModule && this.activeViewOptions.group.byGroupID;\n };\n Schedule.prototype.unWireEvents = function () {\n EventHandler.remove(window, 'resize', this.onScheduleResize);\n EventHandler.remove(window, 'orientationchange', this.onScheduleResize);\n EventHandler.remove(document, Browser.touchStartEvent, this.onDocumentClick);\n };\n /**\n * Core method to return the component name.\n *\n * @returns {string} Returns the module name\n * @private\n */\n Schedule.prototype.getModuleName = function () {\n return 'schedule';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n *\n * @returns {string} Returns the persistance data\n * @private\n */\n Schedule.prototype.getPersistData = function () {\n return this.addOnPersist(['currentView', 'selectedDate', 'scrollTop', 'scrollLeft']);\n };\n /**\n * Called internally, if any of the property value changed.\n *\n * @returns {void}\n * @private\n */\n Schedule.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.isReact && isNullOrUndefined(this.activeView)) {\n return;\n }\n var state = {\n isRefresh: false, isResource: false, isDate: false, isView: false, isLayout: false, isDataManager: false\n };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'views':\n this.setViewOptions();\n if (this.headerModule) {\n this.headerModule.updateItems();\n }\n state.isView = true;\n break;\n case 'currentView':\n state.isView = true;\n break;\n case 'minDate':\n case 'maxDate':\n case 'selectedDate':\n state.isDate = true;\n break;\n case 'dateFormat':\n this.activeViewOptions = this.getActiveViewOptions();\n if (this.headerModule) {\n this.headerModule.updateDateRange();\n }\n break;\n case 'showHeaderBar':\n this.destroyHeaderModule();\n if (newProp.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n this.headerModule.updateDateRange();\n }\n this.notify(events.scrollUiUpdate, { cssProperties: this.getCssProperties() });\n if (this.activeView.isTimelineView()) {\n this.refreshEvents(false);\n }\n break;\n case 'workDays':\n if (JSON.stringify(oldProp.workDays) !== JSON.stringify(newProp.workDays)) {\n state.isLayout = true;\n }\n break;\n case 'showWeekend':\n case 'startHour':\n case 'endHour':\n case 'workHours':\n case 'readonly':\n case 'headerRows':\n case 'showWeekNumber':\n case 'rowAutoHeight':\n state.isLayout = true;\n break;\n case 'locale':\n case 'calendarMode':\n this.globalize = new Internationalization(this.locale);\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.setCldrTimeFormat();\n this.setCalendarMode();\n state.isRefresh = true;\n break;\n case 'firstDayOfWeek':\n this.activeViewOptions.firstDayOfWeek = newProp.firstDayOfWeek;\n if (this.eventWindow) {\n this.eventWindow.refreshRecurrenceEditor();\n }\n state.isLayout = true;\n break;\n case 'showTimeIndicator':\n if (this.activeViewOptions.timeScale.enable && this.activeView) {\n this.activeView.highlightCurrentTime();\n }\n break;\n case 'cellHeaderTemplate':\n this.activeViewOptions.cellHeaderTemplate = newProp.cellHeaderTemplate;\n this.cellHeaderTemplateFn = this.templateParser(this.activeViewOptions.cellHeaderTemplate);\n state.isLayout = true;\n break;\n case 'cellTemplate':\n this.activeViewOptions.cellTemplate = newProp.cellTemplate;\n this.cellTemplateFn = this.templateParser(this.activeViewOptions.cellTemplate);\n state.isLayout = true;\n break;\n case 'dateHeaderTemplate':\n this.activeViewOptions.dateHeaderTemplate = newProp.dateHeaderTemplate;\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n state.isLayout = true;\n break;\n case 'dateRangeTemplate':\n this.activeViewOptions.dateRangeTemplate = newProp.dateRangeTemplate;\n this.dateRangeTemplateFn = this.templateParser(this.activeViewOptions.dateRangeTemplate);\n if (this.headerModule) {\n this.headerModule.updateDateRange();\n }\n break;\n case 'dayHeaderTemplate':\n this.activeViewOptions.dayHeaderTemplate = newProp.dayHeaderTemplate;\n this.dayHeaderTemplateFn = this.templateParser(this.activeViewOptions.dayHeaderTemplate);\n state.isLayout = true;\n break;\n case 'monthHeaderTemplate':\n this.activeViewOptions.monthHeaderTemplate = newProp.monthHeaderTemplate;\n this.monthHeaderTemplateFn = this.templateParser(this.activeViewOptions.monthHeaderTemplate);\n state.isLayout = true;\n break;\n case 'resourceHeaderTemplate':\n this.activeViewOptions.resourceHeaderTemplate = newProp.resourceHeaderTemplate;\n this.resourceHeaderTemplateFn = this.templateParser(this.activeViewOptions.resourceHeaderTemplate);\n state.isLayout = true;\n break;\n case 'timezone':\n this.eventBase.timezonePropertyChange(oldProp.timezone);\n this.headerModule.setCalendarTimezone();\n break;\n case 'enableRtl':\n this.setRtlClass();\n state.isRefresh = true;\n break;\n default:\n this.extendedPropertyChange(prop, newProp, oldProp, state);\n break;\n }\n }\n this.propertyChangeAction(state);\n };\n Schedule.prototype.propertyChangeAction = function (state) {\n if (state.isRefresh) {\n this.refresh();\n }\n else if (state.isResource) {\n this.initializeResources(true);\n }\n else if (state.isView) {\n this.changeView(this.currentView, null, true);\n }\n else if (state.isDate) {\n this.changeDate(this.selectedDate);\n }\n else if (state.isLayout) {\n this.activeCellsData = null;\n this.initializeView(this.currentView);\n }\n else if (state.isDataManager && this.crudModule) {\n if (this.dragAndDropModule) {\n this.dragAndDropModule.actionObj.action = '';\n removeClass([this.element], cls.EVENT_ACTION_CLASS);\n }\n this.crudModule.refreshDataManager();\n }\n };\n Schedule.prototype.allDayRowScrollUpdate = function () {\n var dateHeader = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n var allDayRow = this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n if (this.height === 'auto' || !this.enableAllDayScroll) {\n addClass([dateHeader], cls.ALLDAY_APPOINTMENT_AUTO);\n if (dateHeader.classList.contains(cls.ALLDAY_APPOINTMENT_SCROLL)) {\n removeClass([dateHeader], cls.ALLDAY_APPOINTMENT_SCROLL);\n }\n if (this.uiStateValues.expand) {\n var allDayCells = [].slice.call(this.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS));\n allDayCells[0].style.height = (allDayRow.style.height) ? allDayRow.style.height : allDayCells[1].style.height;\n }\n }\n else {\n if (dateHeader.classList.contains(cls.ALLDAY_APPOINTMENT_AUTO)) {\n removeClass([dateHeader], cls.ALLDAY_APPOINTMENT_AUTO);\n }\n this.eventBase.allDayExpandScroll(dateHeader);\n }\n if (!this.uiStateValues.expand) {\n allDayRow.style.height = '';\n }\n };\n Schedule.prototype.extendedPropertyChange = function (prop, newProp, oldProp, state) {\n switch (prop) {\n case 'width':\n case 'height':\n case 'enableAllDayScroll':\n if (['Day', 'Week', 'WorkWeek'].indexOf(this.currentView) > -1) {\n this.allDayRowScrollUpdate();\n }\n this.notify(events.uiUpdate, { module: 'scroll', properties: { width: newProp.width, height: newProp.height } });\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'hideEmptyAgendaDays':\n case 'agendaDaysCount':\n this.activeViewOptions = this.getActiveViewOptions();\n state.isView = true;\n break;\n case 'eventSettings':\n this.onEventSettingsPropertyChanged(newProp.eventSettings, oldProp.eventSettings, state);\n break;\n case 'allowKeyboardInteraction':\n if (this.keyboardInteractionModule) {\n this.keyboardInteractionModule.destroy();\n this.keyboardInteractionModule = null;\n }\n if (newProp.allowKeyboardInteraction) {\n this.keyboardInteractionModule = new KeyboardInteraction(this);\n }\n break;\n case 'timezoneDataSource':\n if (this.eventWindow) {\n this.eventWindow.refresh();\n }\n break;\n case 'editorTemplate':\n if (!isNullOrUndefined(this.editorTemplate)) {\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n }\n if (this.eventWindow) {\n this.eventWindow.setDialogContent();\n }\n break;\n case 'quickInfoTemplates':\n if (this.quickInfoTemplates.header) {\n this.quickInfoTemplatesHeaderFn = this.templateParser(this.quickInfoTemplates.header);\n }\n if (this.quickInfoTemplates.content) {\n this.quickInfoTemplatesContentFn = this.templateParser(this.quickInfoTemplates.content);\n }\n if (this.quickInfoTemplates.footer) {\n this.quickInfoTemplatesFooterFn = this.templateParser(this.quickInfoTemplates.footer);\n }\n break;\n case 'group':\n this.onGroupSettingsPropertyChanged(newProp.group, oldProp.group, state);\n break;\n case 'resources':\n state.isResource = true;\n break;\n case 'timeScale':\n this.activeViewOptions.timeScale.interval = newProp.timeScale.interval || this.activeViewOptions.timeScale.interval;\n this.activeViewOptions.timeScale.slotCount = newProp.timeScale.slotCount || this.activeViewOptions.timeScale.slotCount;\n if (this.eventWindow) {\n this.eventWindow.refreshDateTimePicker();\n }\n state.isLayout = true;\n break;\n case 'allowDragAndDrop':\n case 'allowResizing':\n case 'eventDragArea':\n this.refreshEvents(false);\n break;\n case 'weekRule':\n state.isLayout = true;\n break;\n case 'firstMonthOfYear':\n this.activeViewOptions.firstMonthOfYear = newProp.firstMonthOfYear;\n this.viewIndex = this.activeView.viewIndex;\n state.isLayout = true;\n break;\n case 'monthsCount':\n this.activeViewOptions.monthsCount = newProp.monthsCount;\n this.viewIndex = this.activeView.viewIndex;\n state.isLayout = true;\n break;\n case 'timeFormat':\n this.internalTimeFormat = newProp.timeFormat || this.activeViewOptions.timeFormat;\n if (this.eventWindow) {\n this.eventWindow.refreshDateTimePicker();\n }\n state.isLayout = true;\n break;\n case 'enableAdaptiveUI':\n if (this.showHeaderBar && this.headerModule) {\n this.destroyHeaderModule();\n this.headerModule = new HeaderRenderer(this);\n this.headerModule.updateDateRange();\n }\n state.isLayout = true;\n break;\n case 'headerIndentTemplate':\n this.activeViewOptions.headerIndentTemplate = newProp.headerIndentTemplate;\n this.headerIndentTemplateFn = this.templateParser(this.activeViewOptions.headerIndentTemplate);\n state.isLayout = true;\n break;\n }\n };\n Schedule.prototype.setRtlClass = function () {\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n else {\n removeClass([this.element], 'e-rtl');\n }\n };\n Schedule.prototype.onGroupSettingsPropertyChanged = function (newProp, oldProp, state) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (prop === 'headerTooltipTemplate') {\n this.headerTooltipTemplateFn = this.templateParser(newProp.headerTooltipTemplate);\n }\n else {\n state.isLayout = true;\n if (this.eventWindow) {\n this.eventWindow.refresh();\n }\n }\n }\n };\n Schedule.prototype.onEventSettingsPropertyChanged = function (newProp, oldProp, state) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'dataSource':\n case 'query':\n case 'fields':\n case 'includeFiltersInQuery':\n this.initializeDataModule();\n state.isDataManager = true;\n break;\n case 'template':\n this.activeViewOptions.eventTemplate = newProp.template;\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n state.isDataManager = true;\n break;\n case 'enableTooltip':\n if (this.eventTooltip) {\n this.eventTooltip.destroy();\n this.eventTooltip = null;\n }\n if (newProp.enableTooltip) {\n this.eventTooltip = new EventTooltip(this);\n }\n break;\n case 'tooltipTemplate':\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n break;\n case 'resourceColorField':\n if (this.resourceBase) {\n this.resourceBase.setResourceCollection();\n }\n state.isDataManager = true;\n break;\n case 'editFollowingEvents':\n if (this.quickPopup) {\n this.quickPopup.refreshQuickDialog();\n }\n break;\n case 'allowAdding':\n case 'allowEditing':\n case 'allowDeleting':\n if (this.showHeaderBar && this.headerModule) {\n this.headerModule.updateAddIcon();\n }\n if (this.eventWindow) {\n this.eventWindow.refresh();\n }\n break;\n case 'spannedEventPlacement':\n case 'minimumEventDuration':\n case 'enableMaxHeight':\n case 'enableIndicator':\n this.refreshEvents(false);\n break;\n case 'ignoreWhitespace':\n state.isLayout = true;\n break;\n }\n }\n };\n Schedule.prototype.destroyHeaderModule = function () {\n if (this.headerModule) {\n this.headerModule.destroy();\n this.headerModule = null;\n }\n };\n Schedule.prototype.destroyPopups = function () {\n if (this.quickPopup) {\n this.quickPopup.destroy();\n this.quickPopup = null;\n }\n if (this.eventWindow) {\n this.eventWindow.destroy();\n this.eventWindow = null;\n }\n };\n /**\n * Allows to show the spinner on schedule at the required scenarios.\n *\n * @function showSpinner\n * @returns {void}\n */\n Schedule.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * When the spinner is shown manually using `showSpinner` method, it can be hidden using this `hideSpinner` method.\n *\n * @function hideSpinner\n * @returns {void}\n */\n Schedule.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Sets different working hours on the required working days by accepting the required start and end time as well as the date collection\n * as its parameters.\n *\n * @function setWorkHours\n * @param {Date} dates Collection of dates on which the given start and end hour range needs to be applied.\n * @param {string} start Defines the work start hour.\n * @param {string} end Defines the work end hour.\n * @param {number} groupIndex Defines the resource index from last level.\n * @returns {void}\n */\n Schedule.prototype.setWorkHours = function (dates, start, end, groupIndex) {\n var cells = [];\n cells = this.getWorkHourCells(dates, start, end, groupIndex);\n addClass(cells, cls.WORK_HOURS_CLASS);\n };\n /**\n * Removes or resets different working hours on the required working days by accepting the required start and end time as well as the\n * date collection as its parameters.\n * if no parameters has been passed to this function, it will remove all the work hours.\n *\n * @param {Date} dates Collection of dates on which the given start and end hour range need to be applied.\n * @param {string} start Defines the work start hour.\n * @param {string} end Defines the work end hour.\n * @param {number} groupIndex Defines the resource index from last level.\n * @returns {void}\n */\n Schedule.prototype.resetWorkHours = function (dates, start, end, groupIndex) {\n if (dates === void 0) { dates = this.activeView.renderDates; }\n if (dates && start && end) {\n var cells = this.getWorkHourCells(dates, start, end, groupIndex);\n removeClass(cells, cls.WORK_HOURS_CLASS);\n }\n else {\n var workHourCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_HOURS_CLASS));\n removeClass(workHourCells, cls.WORK_HOURS_CLASS);\n }\n };\n Schedule.prototype.getWorkHourCells = function (dates, start, end, groupIndex) {\n if (['Agenda', 'MonthAgenda', 'Month', 'TimelineMonth'].indexOf(this.currentView) > -1) {\n return [];\n }\n var startHour = this.getStartEndTime(start);\n var endHour = this.getStartEndTime(end);\n var tableEle = this.getContentTable();\n if (isNullOrUndefined(startHour) || isNullOrUndefined(endHour) || !tableEle) {\n return [];\n }\n startHour.setMilliseconds(0);\n endHour.setMilliseconds(0);\n var viewStartHour = this.activeView.getStartHour();\n if (startHour < viewStartHour) {\n startHour = viewStartHour;\n }\n var viewEndHour = this.activeView.getEndHour();\n if (endHour > viewEndHour) {\n endHour = viewEndHour;\n }\n var msMajorInterval = this.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.activeViewOptions.timeScale.slotCount;\n var startIndex = Math.round((startHour.getTime() - viewStartHour.getTime()) / msInterval);\n var endIndex = Math.ceil((endHour.getTime() - viewStartHour.getTime()) / msInterval);\n var tempStartIndex = startIndex;\n var tempEndIndex = endIndex;\n var cells = [];\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var date = dates_1[_i];\n date = this.getDateTime(date);\n util.resetTime(date);\n var renderDates = this.activeView.renderDates;\n if (!isNullOrUndefined(groupIndex) && this.resourceBase && !this.activeView.isTimelineView()) {\n renderDates = this.resourceBase.lastResourceLevel[parseInt(groupIndex.toString(), 10)].renderDates;\n }\n var colIndex = this.getIndexOfDate(renderDates, date);\n if (colIndex >= 0) {\n if (this.activeView.isTimelineView()) {\n var slotsPerDay = Math.round((viewEndHour.getTime() - viewStartHour.getTime()) / msInterval);\n startIndex = tempStartIndex + (colIndex * slotsPerDay);\n endIndex = tempEndIndex + (colIndex * slotsPerDay);\n }\n for (var i = startIndex; i < endIndex; i++) {\n if (this.activeView.isTimelineView()) {\n var rowIndex = (!isNullOrUndefined(groupIndex)) ? groupIndex : 0;\n cells.push(tableEle.rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(i.toString(), 10)]);\n }\n else {\n if (!isNullOrUndefined(groupIndex)) {\n var selector = '.' + cls.WORK_CELLS_CLASS + '[data-group-index=\"' + groupIndex + '\"]';\n var tds = [].slice.call(tableEle.rows[parseInt(i.toString(), 10)].querySelectorAll(selector));\n cells.push(tds[parseInt(colIndex.toString(), 10)]);\n }\n else {\n cells.push(tableEle.rows[parseInt(i.toString(), 10)].cells[parseInt(colIndex.toString(), 10)]);\n }\n }\n }\n }\n }\n return cells;\n };\n /**\n * Retrieves the start and end time information of the specific cell element.\n *\n * @function getCellDetails\n * @param {Element | Element[]} tdCol Accepts the single or collection of elements.\n * @returns {CellClickEventArgs} Object An object holding the startTime, endTime and all-day information along with the target HTML element will be returned.\n */\n Schedule.prototype.getCellDetails = function (tdCol) {\n var td = (tdCol instanceof Array) ? tdCol : [tdCol];\n var firstTd = getElement(td[0]);\n var lastTd = getElement(td.slice(-1)[0]);\n var startTime = this.getDateFromElement(firstTd);\n var endTime = this.getDateFromElement(lastTd);\n if (isNullOrUndefined(startTime) || isNullOrUndefined(endTime)) {\n return undefined;\n }\n var endDateFromColSpan = this.activeView.isTimelineView() && !isNullOrUndefined(lastTd.getAttribute('colSpan')) &&\n this.headerRows.length > 0;\n var duration = endDateFromColSpan ? parseInt(lastTd.getAttribute('colSpan'), 10) : 1;\n if (!this.activeViewOptions.timeScale.enable || endDateFromColSpan || lastTd.classList.contains(cls.ALLDAY_CELLS_CLASS) ||\n lastTd.classList.contains(cls.HEADER_CELLS_CLASS)) {\n endTime = util.addDays(new Date(endTime.getTime()), duration);\n }\n else {\n endTime = this.activeView.getEndDateFromStartDate(endTime);\n }\n var data = {\n startTime: startTime,\n endTime: endTime,\n isAllDay: this.isAllDayCell(firstTd),\n element: tdCol\n };\n var groupIndex = firstTd.getAttribute('data-group-index');\n if (!isNullOrUndefined(groupIndex)) {\n data.groupIndex = parseInt(groupIndex, 10);\n }\n return data;\n };\n /**\n * Retrieves the selected cell elements.\n *\n * @function getSelectedElements\n * @returns {Element[]} The elements of currently selected cells will be returned.\n */\n Schedule.prototype.getSelectedElements = function () {\n if (this.keyboardInteractionModule && this.keyboardInteractionModule.selectedCells.length > 0) {\n return this.keyboardInteractionModule.selectedCells;\n }\n return this.getSelectedCells();\n };\n /**\n * To get the resource collection\n *\n * @function getResourceCollections\n * @returns {ResourcesModel[]} Returns the resource collections\n */\n Schedule.prototype.getResourceCollections = function () {\n return this.resourceCollection;\n };\n /**\n * To set the resource collection\n *\n * @function setResourceCollections\n * @param {ResourcesModel[]} resourceCol Accepts the resource collections in ResourcesModel type\n * @returns {void}\n */\n Schedule.prototype.setResourceCollections = function (resourceCol) {\n this.setProperties({ resources: resourceCol }, false);\n };\n /**\n * Current View could be change based on the provided parameters.\n *\n * @function changeCurrentView\n * @param {View} viewName Accept the view in the viewCollections.\n * @param {number} viewIndex Accept the viewIndex in the viewCollections.\n * @returns {void}\n */\n Schedule.prototype.changeCurrentView = function (viewName, viewIndex) {\n var index = this.getViewIndex(viewName);\n var view = viewName.charAt(0).toLowerCase() + viewName.slice(1);\n var viewOptions = this.viewOptions[\"\" + view];\n if (viewOptions) {\n index = this.viewCollections.indexOf(viewOptions[viewIndex || 0]);\n }\n if (index === -1 || index === this.viewIndex) {\n return;\n }\n this.changeView(viewName, null, null, index);\n };\n /**\n * Return the current view Index.\n *\n * @function getCurrentViewIndex\n * @returns {number} Returns the view index\n */\n Schedule.prototype.getCurrentViewIndex = function () {\n return this.viewIndex;\n };\n /**\n * Retrieves the resource details based on the provided resource index.\n *\n * @param {number} index index of the resources at the last level.\n * @returns {ResourceDetails} Object An object holding the details of resource and resourceData.\n */\n Schedule.prototype.getResourcesByIndex = function (index) {\n if (this.resourceBase && this.resourceBase.lastResourceLevel) {\n if (index < 0 || index >= this.resourceBase.lastResourceLevel.length) {\n return undefined;\n }\n var data = this.resourceBase.lastResourceLevel[parseInt(index.toString(), 10)];\n var groupData = {};\n this.resourceBase.setResourceValues(groupData, index);\n return { resource: data.resource, resourceData: data.resourceData, groupData: groupData };\n }\n return undefined;\n };\n /**\n * This method allows to expand the resource that available on the scheduler.\n *\n * @function expandResource\n * @param {string | number} resourceId Accepts the resource id in either string or number type\n * @param {string} name Accepts the name of the resource collection\n * @returns {void}\n */\n Schedule.prototype.expandResource = function (resourceId, name) {\n if (this.activeView.isTimelineView() && this.resourceBase && this.resourceCollection.length > 1) {\n this.resourceBase.resourceExpand(resourceId, name, false);\n }\n };\n /**\n * This method allows to collapse the resource that available on the scheduler.\n *\n * @function collapseResource\n * @param {string | number} resourceId Accepts the resource id in either string or number type\n * @param {string} name Accepts the name of the resource collection\n * @returns {void}\n */\n Schedule.prototype.collapseResource = function (resourceId, name) {\n if (this.activeView.isTimelineView() && this.resourceBase && this.resourceCollection.length > 1) {\n this.resourceBase.resourceExpand(resourceId, name, true);\n }\n };\n /**\n * Scrolls the Schedule content area to the specified time.\n *\n * @function scrollTo\n * @param {string} hour Accepts the time value in the skeleton format of 'Hm'.\n * @param {Date} scrollDate Accepts the date object value.\n * @returns {void}\n */\n Schedule.prototype.scrollTo = function (hour, scrollDate) {\n if (this.activeView.scrollToDate && isNullOrUndefined(hour) && scrollDate) {\n this.activeView.scrollToDate(scrollDate);\n }\n else if (this.activeView.scrollToHour) {\n this.activeView.scrollToHour(hour, scrollDate);\n }\n };\n /**\n * This method allows scroll to the position of the any resources that available on the scheduler.\n * This method is applicable for without Agenda and Month agenda views of the schedule.\n *\n * @function scrollToResource\n * @param {string | number} resourceId Accepts the resource id in either string or number type\n * @param {string} groupName Accepts the name of the resource collection\n * @returns {void}\n */\n Schedule.prototype.scrollToResource = function (resourceId, groupName) {\n if (this.resourceBase && this.resourceBase.lastResourceLevel) {\n this.resourceBase.resourceScroll(resourceId, groupName);\n }\n };\n /**\n * Exports the Scheduler events to a calendar (.ics) file. By default, the calendar is exported with a file name `Calendar.ics`.\n * To change this file name on export, pass the custom string value as `fileName` to get the file downloaded with this provided name.\n *\n * @function exportToICalendar\n * @param {string} fileName Accepts the string value.\n * @param {Object[]} customData Accepts the collection of objects.\n * @returns {void}\n */\n Schedule.prototype.exportToICalendar = function (fileName, customData) {\n if (this.iCalendarExportModule) {\n this.iCalendarExportModule.initializeCalendarExport(fileName, customData);\n }\n else {\n throw Error('Inject ICalendarExport module');\n }\n };\n /**\n * Imports the events from an .ics file downloaded from any of the calendars like Google or Outlook into the Scheduler.\n * This method accepts the blob object or string format of an .ics file to be imported as a mandatory argument.\n *\n * @function importICalendar\n * @param {Blob | string} fileContent Accepts the file object or string format of an .ics file.\n * @returns {void}\n */\n Schedule.prototype.importICalendar = function (fileContent) {\n if (this.iCalendarImportModule) {\n this.iCalendarImportModule.initializeCalendarImport(fileContent);\n }\n else {\n throw Error('Inject ICalendarImport module');\n }\n };\n /**\n * Adds the newly created event into the Schedule dataSource.\n *\n * @function addEvent\n * @param {Object | Object[]} data Single or collection of event objects to be added into Schedule.\n * @returns {void}\n */\n Schedule.prototype.addEvent = function (data) {\n this.crudModule.addEvent(data);\n };\n /**\n * Generates the occurrences of a single recurrence event based on the provided event.\n *\n * @function generateEventOccurrences\n * @param {Object} event Accepts the parent recurrence event from which the occurrences are generated.\n * @param {Date} startDate Accepts the start date for the event occurrences. If not provided, the event's start date will be used.\n * @returns {Object[]} Returns the collection of occurrence event objects.\n */\n Schedule.prototype.generateEventOccurrences = function (event, startDate) {\n return (this.eventBase) ? this.eventBase.generateOccurrence(event, startDate) : [];\n };\n /**\n * Allows the Scheduler events data to be exported as an Excel file either in .xlsx or .csv file formats.\n * By default, the whole event collection bound to the Scheduler gets exported as an Excel file.\n * To export only the specific events of Scheduler, you need to pass the custom data collection as\n * a parameter to this `exportToExcel` method. This method accepts the export options as arguments such as fileName,\n * exportType, fields, customData, and includeOccurrences. The `fileName` denotes the name to be given for the exported\n * file and the `exportType` allows you to set the format of an Excel file to be exported either as .xlsx or .csv.\n * The custom or specific field collection of event dataSource to be exported can be provided through `fields` option\n * and the custom data collection can be exported by passing them through the `customData` option. There also exists\n * option to export each individual instances of the recurring events to an Excel file, by setting true or false to the\n * `includeOccurrences` option, denoting either to include or exclude the occurrences as separate instances on an exported Excel file.\n *\n * @function exportToExcel\n * @param {ExportOptions} excelExportOptions The export options to be set before start with exporting the Scheduler events to an Excel file.\n * @returns {void}\n */\n Schedule.prototype.exportToExcel = function (excelExportOptions) {\n if (this.excelExportModule) {\n this.excelExportModule.initializeExcelExport(excelExportOptions);\n }\n else {\n throw Error('Inject ExcelExport module');\n }\n };\n /**\n * Method allows to print the scheduler.\n *\n * @function print\n * @param {ScheduleModel} printOptions The export options to be set before start with exporting\n * the Scheduler events to the print window.\n * @returns {void}\n */\n Schedule.prototype.print = function (printOptions) {\n if (this.printModule) {\n this.printModule.print(printOptions);\n }\n else {\n throw Error('Inject Print module');\n }\n };\n /**\n * Updates the changes made in the event object by passing it as an parameter into the dataSource.\n *\n * @function saveEvent\n * @param {Object | Object[]} data Single or collection of event objects to be saved into Schedule.\n * @param {CurrentAction} currentAction Denotes the action that takes place either for editing occurrence or series.\n * The valid current action names are `EditOccurrence` or `EditSeries`.\n * @returns {void}\n */\n Schedule.prototype.saveEvent = function (data, currentAction) {\n this.crudModule.saveEvent(data, currentAction);\n };\n /**\n * Deletes the events based on the provided ID or event collection in the argument list.\n *\n * @function deleteEvent\n * @param {string | number | Object | Object[]} id Accepts the ID as string or number type or single or collection of the event object which needs to be removed from the Schedule.\n * @param {CurrentAction} currentAction Denotes the delete action that takes place either on occurrence or series events.\n * The valid current action names are `Delete`, `DeleteOccurrence` or `DeleteSeries`.\n * @returns {void}\n */\n Schedule.prototype.deleteEvent = function (id, currentAction) {\n this.crudModule.deleteEvent(id, currentAction);\n };\n /**\n * Retrieves the entire collection of events bound to the Schedule.\n *\n * @function getEvents\n * @param {Date} startDate Accepts the start date.\n * @param {Date} endDate Accepts te end date.\n * @param {boolean} includeOccurrences Accepts the boolean value to process the occurrence from recurrence series.\n * @returns {Object[]} Returns the collection of event objects from the Schedule.\n */\n Schedule.prototype.getEvents = function (startDate, endDate, includeOccurrences) {\n var eventCollections = [];\n if (includeOccurrences) {\n eventCollections = this.eventBase.getProcessedEvents();\n }\n else {\n eventCollections = this.eventsData;\n }\n if (startDate) {\n startDate = this.getDateTime(startDate);\n }\n if (endDate) {\n endDate = this.getDateTime(endDate);\n }\n eventCollections = this.eventBase.filterEventsByRange(eventCollections, startDate, endDate);\n return eventCollections;\n };\n /**\n * Retrieves the entire collection of block events bound to the Schedule.\n *\n * @function getBlockEvents\n * @param {Date} startDate Accepts the start date.\n * @param {Date} endDate Accepts te end date.\n * @param {boolean} includeOccurrences Accepts the boolean value to process the occurrence from recurrence series.\n * @returns {Object[]} Returns the collection of block event objects from the Schedule.\n */\n Schedule.prototype.getBlockEvents = function (startDate, endDate, includeOccurrences) {\n var eventCollections = [];\n if (includeOccurrences) {\n eventCollections = this.eventBase.getProcessedEvents(this.blockData);\n }\n else {\n eventCollections = this.blockData;\n }\n if (startDate) {\n startDate = this.getDateTime(startDate);\n }\n if (endDate) {\n endDate = this.getDateTime(endDate);\n }\n eventCollections = this.eventBase.filterEventsByRange(eventCollections, startDate, endDate);\n return eventCollections;\n };\n /**\n * Retrieves the occurrences of a single recurrence event based on the provided parent ID.\n *\n * @function getOccurrencesByID\n * @param {number} eventID ID of the parent recurrence data from which the occurrences are fetched.\n * @returns {Object[]} Returns the collection of occurrence event objects.\n */\n Schedule.prototype.getOccurrencesByID = function (eventID) {\n return this.eventBase.getOccurrencesByID(eventID);\n };\n /**\n * Retrieves all the occurrences that lies between the specific start and end time range.\n *\n * @function getOccurrencesByRange\n * @param {Date} startTime Denotes the start time range.\n * @param {Date} endTime Denotes the end time range.\n * @returns {Object[]} Returns the collection of occurrence event objects that lies between the provided start and end time.\n */\n Schedule.prototype.getOccurrencesByRange = function (startTime, endTime) {\n startTime = this.getDateTime(startTime);\n endTime = this.getDateTime(endTime);\n return this.eventBase.getOccurrencesByRange(startTime, endTime);\n };\n /**\n * Retrieves the dates that lies on active view of Schedule.\n *\n * @function getCurrentViewDates\n * @returns {Date[]} Returns the collection of dates.\n */\n Schedule.prototype.getCurrentViewDates = function () {\n return this.activeView ? this.activeView.renderDates : [];\n };\n /**\n * Set the recurrence editor instance from custom editor template.\n *\n * @function setRecurrenceEditor\n * @param {RecurrenceEditor} recurrenceEditor instance has passed to fetch the instance in event window.\n * @returns {void}\n */\n Schedule.prototype.setRecurrenceEditor = function (recurrenceEditor) {\n this.eventWindow.setRecurrenceEditor(recurrenceEditor);\n };\n /**\n * Get the maximum id of an event.\n *\n * @function getEventMaxID\n * @returns {number | string} Returns the maximum ID from scheduler data collections.\n */\n Schedule.prototype.getEventMaxID = function () {\n return this.eventBase.getEventMaxID();\n };\n /**\n * Get deleted occurrences from given recurrence series.\n *\n * @function getDeletedOccurrences\n * @param {string | number | Object} recurrenceData Accepts the parent ID of the event object or parent event object\n * @returns {Object[]} Returns the collection of deleted occurrence events.\n */\n Schedule.prototype.getDeletedOccurrences = function (recurrenceData) {\n return this.eventBase.getDeletedOccurrences(recurrenceData);\n };\n /**\n * Retrieves the events that lies on the current date range of the active view of Schedule.\n *\n * @function getCurrentViewEvents\n * @returns {Object[]} Returns the collection of events.\n */\n Schedule.prototype.getCurrentViewEvents = function () {\n return this.eventsProcessed;\n };\n /**\n * Refreshes the event dataSource. This method may be useful when the events alone in the schedule needs to be re-rendered.\n *\n * @function refreshEvents\n * @param {boolean} isRemoteRefresh Accepts the boolean to refresh data from remote or local\n * @returns {void}\n */\n Schedule.prototype.refreshEvents = function (isRemoteRefresh) {\n if (isRemoteRefresh === void 0) { isRemoteRefresh = true; }\n if (isRemoteRefresh) {\n if (this.dragAndDropModule) {\n this.dragAndDropModule.actionObj.action = '';\n removeClass([this.element], cls.EVENT_ACTION_CLASS);\n }\n this.crudModule.refreshDataManager();\n }\n else {\n if (this.uiStateValues) {\n this.uiStateValues.isPreventTimezone = true;\n }\n if (this.crudModule) {\n this.crudModule.refreshProcessedData();\n }\n if (this.uiStateValues) {\n this.uiStateValues.isPreventTimezone = false;\n }\n }\n };\n /**\n * Method to refresh the given Schedule templates\n *\n * @param {string} templateName Accepts the template name\n * @returns {void}\n */\n Schedule.prototype.refreshTemplates = function (templateName) {\n if (templateName) {\n this.resetTemplates([templateName]);\n }\n else {\n this.resetTemplates();\n }\n switch (templateName) {\n case 'eventTemplate':\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n this.refreshEvents(false);\n break;\n case 'dateHeaderTemplate':\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n this.activeView.refreshHeader();\n break;\n case 'dateRangeTemplate':\n this.dateRangeTemplateFn = this.templateParser(this.activeViewOptions.dateRangeTemplate);\n if (this.headerModule) {\n this.headerModule.refresh();\n }\n break;\n case 'resourceHeaderTemplate':\n this.resourceHeaderTemplateFn = this.templateParser(this.activeViewOptions.resourceHeaderTemplate);\n if (this.activeView.isTimelineView()) {\n this.activeView.refreshResourceHeader();\n }\n else {\n this.activeView.refreshHeader();\n }\n break;\n case 'quickInfoTemplates':\n if (this.quickPopup) {\n this.quickPopup.destroy();\n this.quickPopup = null;\n }\n this.quickPopup = new QuickPopups(this);\n this.quickInfoTemplatesHeaderFn = this.templateParser(this.quickInfoTemplates.header);\n this.quickInfoTemplatesContentFn = this.templateParser(this.quickInfoTemplates.content);\n this.quickInfoTemplatesFooterFn = this.templateParser(this.quickInfoTemplates.footer);\n break;\n case 'editorTemplate':\n if (this.eventWindow) {\n this.eventWindow.destroy();\n this.eventWindow = null;\n }\n this.eventWindow = new EventWindow(this);\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n break;\n case 'tooltipTemplate':\n case 'headerTooltipTemplate':\n if (this.eventTooltip) {\n this.eventTooltip.destroy();\n this.eventTooltip = null;\n }\n this.eventTooltip = new EventTooltip(this);\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n this.headerTooltipTemplateFn = this.templateParser(this.activeViewOptions.group.headerTooltipTemplate);\n break;\n default:\n this.initializeView(this.currentView);\n break;\n }\n };\n /**\n * Refreshes the Schedule layout without re-render.\n *\n * @function refreshLayout\n * @returns {void}\n */\n Schedule.prototype.refreshLayout = function () {\n this.onScheduleResize();\n if (this.headerModule) {\n this.headerModule.refresh();\n }\n if (this.eventWindow) {\n this.eventWindow.refresh();\n }\n };\n /**\n * To retrieve the appointment object from element.\n *\n * @function getEventDetails\n * @param {Element} element Denotes the event UI element on the Schedule.\n * @returns {Object} Returns the event details.\n */\n Schedule.prototype.getEventDetails = function (element) {\n element = getElement(element);\n var guid = element.getAttribute('data-guid');\n if (guid) {\n return this.eventBase.getEventByGuid(guid);\n }\n return {};\n };\n /**\n * To check whether the given time range slots are available for event creation or already occupied by other events.\n *\n * @function isSlotAvailable\n * @param {Date | Object} startTime Denotes the start time of the slot.\n * @param {Date} endTime Denotes the end time of the slot.\n * @param {number} groupIndex Defines the resource index from last level.\n * @returns {boolean} Returns true, if the slot that lies in the provided time range does not contain any other events.\n */\n Schedule.prototype.isSlotAvailable = function (startTime, endTime, groupIndex) {\n var _this = this;\n var eventStart;\n var eventEnd;\n var eventObj = this.activeEventData.event;\n if (startTime instanceof Date || typeof (startTime) === 'string') {\n eventStart = startTime;\n eventEnd = endTime;\n }\n else {\n eventObj = startTime;\n eventStart = startTime[this.eventFields.startTime];\n eventEnd = startTime[this.eventFields.endTime];\n if (this.resourceBase) {\n groupIndex = this.eventBase.getGroupIndexFromEvent(startTime);\n }\n }\n if (isNullOrUndefined(eventStart) || isNullOrUndefined(eventEnd)) {\n return true;\n }\n eventStart = this.getDateTime(eventStart);\n eventEnd = this.getDateTime(eventEnd);\n var eventCollection = this.eventBase.filterEvents(eventStart, eventEnd);\n if (!isNullOrUndefined(groupIndex) && this.resourceBase && this.resourceBase.lastResourceLevel.length > 0) {\n eventCollection =\n this.eventBase.filterEventsByResource(this.resourceBase.lastResourceLevel[parseInt(groupIndex.toString(), 10)], eventCollection);\n }\n if (eventObj) {\n if (eventObj.Guid) {\n eventCollection = eventCollection.filter(function (event) { return event.Guid !== eventObj.Guid; });\n }\n else {\n eventCollection = eventCollection.filter(function (event) {\n return event[_this.eventFields.id] !== eventObj[_this.eventFields.id];\n });\n }\n }\n return (eventCollection.length > 0) ? false : true;\n };\n /**\n * To manually open the event editor on specific time or on certain events.\n *\n * @function openEditor\n * @param {Object} data It can be either cell data or event data.\n * @param {CurrentAction} action Defines the action for which the editor needs to be opened such as either for new event creation or\n * for editing of existing events. The applicable action names that can be used here are `Add`, `Save`, `EditOccurrence`\n * and `EditSeries`.\n * @param {boolean} isEventData It allows to decide whether the editor needs to be opened with the clicked cell details or with the\n * passed event details.\n * @param {number} repeatType It opens the editor with the recurrence options based on the provided repeat type.\n * @returns {void}\n */\n Schedule.prototype.openEditor = function (data, action, isEventData, repeatType) {\n if (action === 'Add' && !isEventData) {\n data.startTime = this.getDateTime(data.startTime);\n data.endTime = this.getDateTime(data.endTime);\n if (!isNullOrUndefined(data.element)) {\n data.element = getElement(data.element);\n }\n }\n else {\n data[this.eventFields.startTime] = this.getDateTime(data[this.eventFields.startTime]);\n data[this.eventFields.endTime] = this.getDateTime(data[this.eventFields.endTime]);\n }\n this.currentAction = action;\n if (action !== 'Add') {\n this.activeEventData.event = data;\n }\n this.eventWindow.openEditor(data, action, isEventData, repeatType);\n };\n /**\n * To manually close the event editor window\n *\n * @function closeEditor\n * @returns {void}\n */\n Schedule.prototype.closeEditor = function () {\n if (this.eventWindow) {\n this.eventWindow.dialogClose();\n }\n };\n /**\n * To manually open the quick info popup based on cell or event details.\n *\n * @param {object} data Defines the cell or event data. If the data contains valid ID, it will open event quick info popup,\n * otherwise cell quick info popup displayed.\n * @returns {void}\n */\n Schedule.prototype.openQuickInfoPopup = function (data) {\n var _this = this;\n if (this.currentView === 'Year' || isNullOrUndefined(data)) {\n return;\n }\n if (isNullOrUndefined(data[this.eventFields.id])) {\n if (this.currentView === 'Agenda' || this.currentView === 'MonthAgenda' || isNullOrUndefined(this.activeView)) {\n return;\n }\n var cellData = {\n startTime: this.activeCellsData.startTime = this.getDateTime(data[this.eventFields.startTime]),\n endTime: this.activeCellsData.endTime = this.getDateTime(data[this.eventFields.endTime]),\n isAllDay: this.activeCellsData.isAllDay =\n !isNullOrUndefined(data[this.eventFields.isAllDay]) ? data[this.eventFields.isAllDay] : false\n };\n var startTime = this.activeView.getAdjustedDate(new Date(cellData.startTime));\n if (startTime) {\n var query = '.' + cls.WORK_CELLS_CLASS + '[data-date=\"' + startTime.getTime() + '\"]';\n if (this.activeViewOptions.group.resources.length > 0 && !this.uiStateValues.isGroupAdaptive\n && this.resourceBase && this.eventBase) {\n cellData.groupIndex = this.eventBase.getGroupIndexFromEvent(data);\n query = '.' + cls.WORK_CELLS_CLASS + '[data-date=\"' + startTime.getTime() + '\"][data-group-index=\"' + cellData.groupIndex + '\"]';\n }\n var workCell = this.element.querySelector(query);\n if (workCell) {\n workCell.focus();\n cellData.element = workCell;\n this.notify(events.cellClick, cellData);\n }\n }\n }\n else {\n var app = this.getCurrentViewEvents().filter(function (item) {\n return data[_this.eventFields.id] === item[_this.eventFields.id];\n });\n if (app.length <= 0) {\n return;\n }\n var selectEvent = app[0];\n if (data[this.eventFields.recurrenceRule]) {\n var occurence = app.filter(function (x) {\n return x[_this.eventFields.startTime].getTime() === data[_this.eventFields.startTime].getTime();\n });\n if (occurence.length > 0) {\n selectEvent = occurence[0];\n }\n }\n var element = this.element.querySelector('div[data-guid=\"' + selectEvent.Guid + '\"]');\n if (element) {\n this.eventBase.removeSelectedAppointmentClass();\n this.eventBase.addSelectedAppointments([element], false);\n this.activeEventData = { event: selectEvent, element: element };\n if (this.currentView === 'Agenda' || this.currentView === 'MonthAgenda') {\n addClass([this.activeEventData.element], cls.AGENDA_SELECTED_CELL);\n }\n this.notify(events.eventClick, this.activeEventData);\n }\n }\n };\n /**\n * To manually close the quick info popup\n *\n * @function closeQuickInfoPopup\n * @returns {void}\n */\n Schedule.prototype.closeQuickInfoPopup = function () {\n if (this.quickPopup) {\n this.quickPopup.quickPopupHide(true);\n }\n };\n /**\n * Closes the tooltip.\n * For example, when the context menu is opened for an event,\n * the tooltip can be closed by calling this method.\n *\n * @function closeTooltip\n * @returns {void}\n */\n Schedule.prototype.closeTooltip = function () {\n if (this.eventTooltip) {\n this.eventTooltip.close();\n }\n };\n /**\n * Select the resource based on group index in mobile mode.\n *\n * @param {number} groupIndex Defines the resource index based on last level.\n * @returns {void}\n */\n Schedule.prototype.selectResourceByIndex = function (groupIndex) {\n if (this.resourceBase && this.uiStateValues.isGroupAdaptive) {\n this.resourceBase.selectResourceByIndex(groupIndex);\n }\n };\n /**\n * Select the resources to the based on id.\n *\n * @param {string | number} id id of the resource defined in resources collection.\n * @param {string} name Name of the resource defined in resources collection.\n * @returns {number} Returns the group index\n */\n Schedule.prototype.getIndexFromResourceId = function (id, name) {\n if (this.resourceBase) {\n return this.resourceBase.getIndexFromResourceId(id, name);\n }\n return null;\n };\n /**\n * Adds the resources to the specified index.\n *\n * @param {Object | Object[]} resources Accepts the resource data in single or collection of data.\n * @param {string} name Name of the resource defined in resources collection.\n * @param {number} index Index or position where the resource should be added.\n * @returns {void}\n */\n Schedule.prototype.addResource = function (resources, name, index) {\n this.resourceBase.addResource(resources, name, index);\n };\n /**\n * Removes the specified resource.\n *\n * @param {string | string[] | number | number[]} resourceId Specifies the resource id to be removed.\n * @param {string} name Specifies the resource name from which the id should be referred.\n * @returns {void}\n */\n Schedule.prototype.removeResource = function (resourceId, name) {\n this.resourceBase.removeResource(resourceId, name);\n };\n /**\n * Destroys the Schedule component.\n *\n * @function destroy\n * @returns {void}\n */\n Schedule.prototype.destroy = function () {\n if (this.eventTooltip) {\n this.eventTooltip.destroy();\n this.eventTooltip = null;\n }\n this.destroyPopups();\n this.hideSpinner();\n this.unWireEvents();\n this.destroyHeaderModule();\n if (this.eventBase) {\n this.eventBase.destroy();\n this.eventBase = null;\n }\n if (this.workCellAction) {\n this.workCellAction.destroy();\n this.workCellAction = null;\n }\n if (this.inlineModule) {\n this.inlineModule.destroy();\n this.inlineModule = null;\n }\n if (this.keyboardInteractionModule) {\n this.keyboardInteractionModule.destroy();\n this.keyboardInteractionModule = null;\n }\n if (this.scrollModule) {\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n if (this.printModule) {\n this.printModule.destroy();\n }\n if (this.activeView) {\n this.resetTemplates();\n this.activeView.removeEventListener();\n this.activeView.destroy();\n this.activeView = null;\n }\n if (this.scheduleTouchModule) {\n this.scheduleTouchModule.destroy();\n this.scheduleTouchModule = null;\n }\n if (this.crudModule) {\n this.crudModule.destroy();\n this.crudModule = null;\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n this.dataModule = null;\n }\n _super.prototype.destroy.call(this);\n var modules = [\n 'dayModule', 'weekModule', 'workWeekModule', 'monthModule', 'monthAgendaModule', 'yearModule', 'agendaModule',\n 'timelineViewsModule', 'timelineMonthModule', 'timelineYearModule', 'resizeModule', 'dragAndDropModule',\n 'excelExportModule', 'printModule', 'iCalendarExportModule', 'iCalendarImportModule', 'tzModule', 'eventsData',\n 'eventsProcessed', 'blockData', 'blockProcessed', 'uiStateValues', 'viewCollections', 'viewOptions', 'defaultLocale',\n 'localeObj', 'selectedElements', 'resourceCollection', 'editorTitles', 'eventFields', 'activeViewOptions',\n 'activeEventData', 'activeCellsData', 'renderModule'\n ];\n for (var _i = 0, modules_1 = modules; _i < modules_1.length; _i++) {\n var module = modules_1[_i];\n this[\"\" + module] = null;\n }\n util.removeChildren(this.element);\n var removeClasses = [cls.ROOT, cls.RTL, cls.DEVICE_CLASS, cls.MULTI_DRAG];\n if (this.cssClass) {\n removeClasses = removeClasses.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], removeClasses);\n };\n __decorate([\n Property('auto')\n ], Schedule.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Schedule.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showHeaderBar\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showTimeIndicator\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowSwiping\", void 0);\n __decorate([\n Property('Week')\n ], Schedule.prototype, \"currentView\", void 0);\n __decorate([\n Property(['Day', 'Week', 'WorkWeek', 'Month', 'Agenda'])\n ], Schedule.prototype, \"views\", void 0);\n __decorate([\n Property(new Date())\n ], Schedule.prototype, \"selectedDate\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], Schedule.prototype, \"minDate\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], Schedule.prototype, \"maxDate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateFormat\", void 0);\n __decorate([\n Property('Gregorian')\n ], Schedule.prototype, \"calendarMode\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showWeekend\", void 0);\n __decorate([\n Property(0)\n ], Schedule.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('FirstDay')\n ], Schedule.prototype, \"weekRule\", void 0);\n __decorate([\n Property([1, 2, 3, 4, 5])\n ], Schedule.prototype, \"workDays\", void 0);\n __decorate([\n Property(12)\n ], Schedule.prototype, \"monthsCount\", void 0);\n __decorate([\n Property('00:00')\n ], Schedule.prototype, \"startHour\", void 0);\n __decorate([\n Property('24:00')\n ], Schedule.prototype, \"endHour\", void 0);\n __decorate([\n Property(null)\n ], Schedule.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"enableAllDayScroll\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowResizing\", void 0);\n __decorate([\n Complex({}, WorkHours)\n ], Schedule.prototype, \"workHours\", void 0);\n __decorate([\n Complex({}, TimeScale)\n ], Schedule.prototype, \"timeScale\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowKeyboardInteraction\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateHeaderTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateRangeTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cellHeaderTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dayHeaderTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"monthHeaderTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cellTemplate\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showQuickInfo\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"allowInline\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowMultiCellSelection\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowMultiRowSelection\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"quickInfoOnSelectionEnd\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"showWeekNumber\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"rowAutoHeight\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"allowMultiDrag\", void 0);\n __decorate([\n Property(0)\n ], Schedule.prototype, \"firstMonthOfYear\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"editorTemplate\", void 0);\n __decorate([\n Complex({}, QuickInfoTemplates)\n ], Schedule.prototype, \"quickInfoTemplates\", void 0);\n __decorate([\n Property(7)\n ], Schedule.prototype, \"agendaDaysCount\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"hideEmptyAgendaDays\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"enableRecurrenceValidation\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"timezone\", void 0);\n __decorate([\n Complex({}, EventSettings)\n ], Schedule.prototype, \"eventSettings\", void 0);\n __decorate([\n Property(timezoneData)\n ], Schedule.prototype, \"timezoneDataSource\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"resourceHeaderTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"headerIndentTemplate\", void 0);\n __decorate([\n Complex({}, Group)\n ], Schedule.prototype, \"group\", void 0);\n __decorate([\n Collection([], Resources)\n ], Schedule.prototype, \"resources\", void 0);\n __decorate([\n Collection([], HeaderRows)\n ], Schedule.prototype, \"headerRows\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cssClass\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"eventDragArea\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellDoubleClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"moreEventsClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"hover\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"navigating\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"renderCell\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventRendered\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBinding\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBound\", void 0);\n Schedule = __decorate([\n NotifyPropertyChanges\n ], Schedule);\n return Schedule;\n}(Component));\nexport { Schedule };\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var ViewsDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-views';\n }\n }\n});\nexport var ViewsPlugin = {\n name: 'e-views',\n install: function (Vue) {\n Vue.component(ViewsPlugin.name, ViewsDirective);\n }\n};\n/**\n * `e-views` directive represent a view of the VueJS Schedule.\n * It must be contained in a Schedule component(`ejs-schedule`).\n * ```vue\n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var ViewDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-view';\n }\n }\n});\nexport var ViewPlugin = {\n name: 'e-view',\n install: function (Vue) {\n Vue.component(ViewPlugin.name, ViewDirective);\n }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var HeaderRowsDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-header-rows';\n }\n }\n});\nexport var HeaderRowsPlugin = {\n name: 'e-header-rows',\n install: function (Vue) {\n Vue.component(HeaderRowsPlugin.name, HeaderRowsDirective);\n }\n};\n/**\n * `e-header-rows` directive represent a header rows of the VueJS Schedule.\n * It must be contained in a Schedule component(`ejs-schedule`).\n * ```vue\n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var HeaderRowDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-header-row';\n }\n }\n});\nexport var HeaderRowPlugin = {\n name: 'e-header-row',\n install: function (Vue) {\n Vue.component(HeaderRowPlugin.name, HeaderRowDirective);\n }\n};\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { isUndefined } from '@syncfusion/ej2-base';\nimport { Schedule } from '@syncfusion/ej2-schedule';\nimport { ViewsDirective, ViewDirective, ViewsPlugin, ViewPlugin } from './views.directive';\nimport { ResourcesDirective, ResourceDirective, ResourcesPlugin, ResourcePlugin } from './resources.directive';\nimport { HeaderRowsDirective, HeaderRowDirective, HeaderRowsPlugin, HeaderRowPlugin } from './headerrows.directive';\nexport var properties = ['isLazyUpdate', 'plugins', 'agendaDaysCount', 'allowDragAndDrop', 'allowInline', 'allowKeyboardInteraction', 'allowMultiCellSelection', 'allowMultiDrag', 'allowMultiRowSelection', 'allowResizing', 'allowSwiping', 'calendarMode', 'cellHeaderTemplate', 'cellTemplate', 'cssClass', 'currentView', 'dateFormat', 'dateHeaderTemplate', 'dateRangeTemplate', 'dayHeaderTemplate', 'editorTemplate', 'enableAdaptiveUI', 'enableAllDayScroll', 'enableHtmlSanitizer', 'enablePersistence', 'enableRecurrenceValidation', 'enableRtl', 'endHour', 'eventDragArea', 'eventSettings', 'firstDayOfWeek', 'firstMonthOfYear', 'group', 'headerIndentTemplate', 'headerRows', 'height', 'hideEmptyAgendaDays', 'locale', 'maxDate', 'minDate', 'monthHeaderTemplate', 'monthsCount', 'quickInfoOnSelectionEnd', 'quickInfoTemplates', 'readonly', 'resourceHeaderTemplate', 'resources', 'rowAutoHeight', 'selectedDate', 'showHeaderBar', 'showQuickInfo', 'showTimeIndicator', 'showWeekNumber', 'showWeekend', 'startHour', 'timeFormat', 'timeScale', 'timezone', 'timezoneDataSource', 'views', 'weekRule', 'width', 'workDays', 'workHours', 'actionBegin', 'actionComplete', 'actionFailure', 'cellClick', 'cellDoubleClick', 'created', 'dataBinding', 'dataBound', 'destroyed', 'drag', 'dragStart', 'dragStop', 'eventClick', 'eventRendered', 'hover', 'moreEventsClick', 'navigating', 'popupClose', 'popupOpen', 'renderCell', 'resizeStart', 'resizeStop', 'resizing', 'select'];\nexport var modelProps = ['currentView', 'selectedDate'];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n var props_1 = modelProps_1[_i];\n emitProbs.push('update:' + props_1);\n}\n/**\n * `ej-schedule` represents the VueJS Schedule Component.\n * ```vue\n * \n * ```\n */\nexport var ScheduleComponent = vueDefineComponent({\n name: 'ScheduleComponent',\n mixins: [ComponentBase],\n props: props,\n watch: watch,\n emits: emitProbs,\n model: { event: 'modelchanged' },\n provide: function () { return { custom: this.custom }; },\n data: function () {\n return {\n ej2Instance: new Schedule({}),\n propKeys: properties,\n models: modelProps,\n hasChildDirective: true,\n hasInjectedModules: true,\n tagMapper: { \"e-views\": \"e-view\", \"e-resources\": \"e-resource\", \"e-header-rows\": \"e-header-row\" },\n tagNameMapper: { \"e-header-rows\": \"e-headerRows\" },\n isVue3: !isExecute,\n templateCollection: {},\n };\n },\n created: function () {\n this.ej2Instances._trigger = this.ej2Instances.trigger;\n this.ej2Instances.trigger = this.trigger;\n this.bindProperties();\n this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n this.ej2Instances.setProperties = this.setProperties;\n this.ej2Instances.clearTemplate = this.clearTemplate;\n this.updated = this.updated;\n },\n render: function (createElement) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', slots);\n },\n methods: {\n clearTemplate: function (templateNames) {\n if (!templateNames) {\n templateNames = Object.keys(this.templateCollection || {});\n }\n if (templateNames.length && this.templateCollection) {\n for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n var tempName = templateNames_1[_i];\n var elementCollection = this.templateCollection[tempName];\n if (elementCollection && elementCollection.length) {\n for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n var ele = elementCollection_1[_a];\n var destroy = getValue('__vue__.$destroy', ele);\n if (destroy) {\n ele.__vue__.$destroy();\n }\n if (ele.innerHTML) {\n ele.innerHTML = '';\n }\n }\n delete this.templateCollection[tempName];\n }\n }\n }\n },\n setProperties: function (prop, muteOnChange) {\n var _this = this;\n if (this.isVue3) {\n this.models = !this.models ? this.ej2Instances.referModels : this.models;\n }\n if (this.ej2Instances && this.ej2Instances._setProperties) {\n this.ej2Instances._setProperties(prop, muteOnChange);\n }\n if (prop && this.models && this.models.length) {\n Object.keys(prop).map(function (key) {\n _this.models.map(function (model) {\n if ((key === model) && !(/datasource/i.test(key))) {\n if (_this.isVue3) {\n _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n }\n else {\n _this.$emit('update:' + key, prop[key]);\n _this.$emit('modelchanged', prop[key]);\n }\n }\n });\n });\n }\n },\n trigger: function (eventName, eventProp, successHandler) {\n if (!isExecute) {\n this.models = !this.models ? this.ej2Instances.referModels : this.models;\n }\n if ((eventName === 'change' || eventName === 'input') && this.models && (this.models.length !== 0)) {\n var key = this.models.toString().match(/checked|value/) || [];\n var propKey = key[0];\n if (eventProp && key && !isUndefined(eventProp[propKey])) {\n if (!isExecute) {\n this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('update:modelValue', eventProp[propKey]);\n }\n else {\n if (eventName === 'change' || (this.$props && !this.$props.isLazyUpdate)) {\n this.$emit('update:' + propKey, eventProp[propKey]);\n this.$emit('modelchanged', eventProp[propKey]);\n }\n }\n }\n }\n else if ((eventName === 'actionBegin' && eventProp.requestType === 'dateNavigate') && this.models && (this.models.length !== 0)) {\n var key = this.models.toString().match(/currentView|selectedDate/) || [];\n var propKey = key[0];\n if (eventProp && key && !isUndefined(eventProp[propKey])) {\n if (!isExecute) {\n this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n }\n else {\n this.$emit('update:' + propKey, eventProp[propKey]);\n this.$emit('modelchanged', eventProp[propKey]);\n }\n }\n }\n if ((this.ej2Instances && this.ej2Instances._trigger)) {\n this.ej2Instances._trigger(eventName, eventProp, successHandler);\n }\n },\n custom: function () {\n this.updated();\n },\n addEvent: function (data) {\n return this.ej2Instances.addEvent(data);\n },\n addResource: function (resources, name, index) {\n return this.ej2Instances.addResource(resources, name, index);\n },\n changeCurrentView: function (viewName, viewIndex) {\n return this.ej2Instances.changeCurrentView(viewName, viewIndex);\n },\n closeEditor: function () {\n return this.ej2Instances.closeEditor();\n },\n closeQuickInfoPopup: function () {\n return this.ej2Instances.closeQuickInfoPopup();\n },\n closeTooltip: function () {\n return this.ej2Instances.closeTooltip();\n },\n collapseResource: function (resourceId, name) {\n return this.ej2Instances.collapseResource(resourceId, name);\n },\n deleteEvent: function (id, currentAction) {\n return this.ej2Instances.deleteEvent(id, currentAction);\n },\n expandResource: function (resourceId, name) {\n return this.ej2Instances.expandResource(resourceId, name);\n },\n exportToExcel: function (excelExportOptions) {\n return this.ej2Instances.exportToExcel(excelExportOptions);\n },\n exportToICalendar: function (fileName, customData) {\n return this.ej2Instances.exportToICalendar(fileName, customData);\n },\n generateEventOccurrences: function (event, startDate) {\n return this.ej2Instances.generateEventOccurrences(event, startDate);\n },\n getBlockEvents: function (startDate, endDate, includeOccurrences) {\n return this.ej2Instances.getBlockEvents(startDate, endDate, includeOccurrences);\n },\n getCellDetails: function (tdCol) {\n return this.ej2Instances.getCellDetails(tdCol);\n },\n getCurrentViewDates: function () {\n return this.ej2Instances.getCurrentViewDates();\n },\n getCurrentViewEvents: function () {\n return this.ej2Instances.getCurrentViewEvents();\n },\n getCurrentViewIndex: function () {\n return this.ej2Instances.getCurrentViewIndex();\n },\n getDeletedOccurrences: function (recurrenceData) {\n return this.ej2Instances.getDeletedOccurrences(recurrenceData);\n },\n getEventDetails: function (element) {\n return this.ej2Instances.getEventDetails(element);\n },\n getEventMaxID: function () {\n return this.ej2Instances.getEventMaxID();\n },\n getEvents: function (startDate, endDate, includeOccurrences) {\n return this.ej2Instances.getEvents(startDate, endDate, includeOccurrences);\n },\n getIndexFromResourceId: function (id, name) {\n return this.ej2Instances.getIndexFromResourceId(id, name);\n },\n getOccurrencesByID: function (eventID) {\n return this.ej2Instances.getOccurrencesByID(eventID);\n },\n getOccurrencesByRange: function (startTime, endTime) {\n return this.ej2Instances.getOccurrencesByRange(startTime, endTime);\n },\n getResourceCollections: function () {\n return this.ej2Instances.getResourceCollections();\n },\n getResourcesByIndex: function (index) {\n return this.ej2Instances.getResourcesByIndex(index);\n },\n getSelectedElements: function () {\n return this.ej2Instances.getSelectedElements();\n },\n hideSpinner: function () {\n return this.ej2Instances.hideSpinner();\n },\n importICalendar: function (fileContent) {\n return this.ej2Instances.importICalendar(fileContent);\n },\n isSlotAvailable: function (startTime, endTime, groupIndex) {\n return this.ej2Instances.isSlotAvailable(startTime, endTime, groupIndex);\n },\n openEditor: function (data, action, isEventData, repeatType) {\n return this.ej2Instances.openEditor(data, action, isEventData, repeatType);\n },\n openQuickInfoPopup: function (data) {\n return this.ej2Instances.openQuickInfoPopup(data);\n },\n print: function (printOptions) {\n return this.ej2Instances.print(printOptions);\n },\n refreshEvents: function (isRemoteRefresh) {\n return this.ej2Instances.refreshEvents(isRemoteRefresh);\n },\n refreshLayout: function () {\n return this.ej2Instances.refreshLayout();\n },\n refreshTemplates: function (templateName) {\n return this.ej2Instances.refreshTemplates(templateName);\n },\n removeResource: function (resourceId, name) {\n return this.ej2Instances.removeResource(resourceId, name);\n },\n resetWorkHours: function (dates, start, end, groupIndex) {\n return this.ej2Instances.resetWorkHours(dates, start, end, groupIndex);\n },\n saveEvent: function (data, currentAction) {\n return this.ej2Instances.saveEvent(data, currentAction);\n },\n scrollTo: function (hour, scrollDate) {\n return this.ej2Instances.scrollTo(hour, scrollDate);\n },\n scrollToResource: function (resourceId, groupName) {\n return this.ej2Instances.scrollToResource(resourceId, groupName);\n },\n selectResourceByIndex: function (groupIndex) {\n return this.ej2Instances.selectResourceByIndex(groupIndex);\n },\n setRecurrenceEditor: function (recurrenceEditor) {\n return this.ej2Instances.setRecurrenceEditor(recurrenceEditor);\n },\n setResourceCollections: function (resourceCol) {\n return this.ej2Instances.setResourceCollections(resourceCol);\n },\n setWorkHours: function (dates, start, end, groupIndex) {\n return this.ej2Instances.setWorkHours(dates, start, end, groupIndex);\n },\n showSpinner: function () {\n return this.ej2Instances.showSpinner();\n },\n }\n});\nexport var SchedulePlugin = {\n name: 'ejs-schedule',\n install: function (Vue) {\n Vue.component(SchedulePlugin.name, ScheduleComponent);\n Vue.component(ViewPlugin.name, ViewDirective);\n Vue.component(ViewsPlugin.name, ViewsDirective);\n Vue.component(ResourcePlugin.name, ResourceDirective);\n Vue.component(ResourcesPlugin.name, ResourcesDirective);\n Vue.component(HeaderRowPlugin.name, HeaderRowDirective);\n Vue.component(HeaderRowsPlugin.name, HeaderRowsDirective);\n }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var ResourcesDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-resources';\n }\n }\n});\nexport var ResourcesPlugin = {\n name: 'e-resources',\n install: function (Vue) {\n Vue.component(ResourcesPlugin.name, ResourcesDirective);\n }\n};\n/**\n * `e-resources` directive represent a resources of the VueJS Schedule.\n * It must be contained in a Schedule component(`ejs-schedule`).\n * ```vue\n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var ResourceDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-resource';\n }\n }\n});\nexport var ResourcePlugin = {\n name: 'e-resource',\n install: function (Vue) {\n Vue.component(ResourcePlugin.name, ResourceDirective);\n }\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, createElement, addClass, formatUnit, remove } from '@syncfusion/ej2-base';\nimport { AgendaBase } from '../event-renderer/agenda-base';\nimport { Month } from './month';\nimport * as util from '../base/util';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * month agenda view\n */\nvar MonthAgenda = /** @class */ (function (_super) {\n __extends(MonthAgenda, _super);\n function MonthAgenda(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dayNameFormat = 'narrow';\n _this.viewClass = 'e-month-agenda-view';\n _this.monthAgendaDate = new Date('' + parent.selectedDate);\n return _this;\n }\n MonthAgenda.prototype.getModuleName = function () {\n return 'monthAgenda';\n };\n MonthAgenda.prototype.renderAppointmentContainer = function () {\n var contentArea = this.getContentAreaElement();\n var wrapperContainer = createElement('div', { className: cls.WRAPPER_CONTAINER_CLASS });\n contentArea.appendChild(wrapperContainer);\n var appWrap = createElement('div', { className: cls.APPOINTMENT_WRAP_CLASS });\n wrapperContainer.appendChild(appWrap);\n this.appendAppContainer(appWrap);\n this.setEventWrapperHeight();\n };\n MonthAgenda.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive) {\n return 'narrow';\n }\n return 'abbreviated';\n };\n MonthAgenda.prototype.updateSelectedCellClass = function (data) {\n if (util.resetTime(data.date).getTime() === util.resetTime(this.monthAgendaDate).getTime()) {\n data.className.push(cls.SELECTED_CELL_CLASS);\n }\n };\n MonthAgenda.prototype.setEventWrapperHeight = function () {\n var headerHeight = (this.parent.headerModule ? this.parent.headerModule.getHeaderElement().offsetHeight : 0) + 2;\n var resourceWrapper = this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR);\n if (resourceWrapper) {\n headerHeight += resourceWrapper.offsetHeight;\n }\n var contentArea = this.getContentAreaElement().firstElementChild;\n var dateHeader = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n var availHeight = this.parent.element.offsetHeight - headerHeight - dateHeader.offsetHeight;\n var contentAreaHeight = (this.parent.activeViewOptions.interval > 1) ?\n Math.round(availHeight * 0.8) : contentArea.offsetHeight;\n var appContainerHeight = availHeight - contentAreaHeight;\n var wrapperContainer = this.element.querySelector('.' + cls.WRAPPER_CONTAINER_CLASS);\n var eventWrapper = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n if (this.parent.height !== 'auto') {\n if (this.parent.activeViewOptions.interval > 1) {\n contentArea.style.height = formatUnit(contentAreaHeight);\n EventHandler.add(contentArea, 'scroll', this.onContentScroll, this);\n }\n wrapperContainer.style.height = eventWrapper.style.height = formatUnit(appContainerHeight);\n }\n };\n MonthAgenda.prototype.onDataReady = function (args) {\n this.setEventWrapperHeight();\n this.clearElements();\n var eventCollection = args.processedData;\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n eventCollection = this.parent.eventBase.filterEventsByResource(resource, eventCollection);\n }\n this.agendaBase = this.getAgendaBase();\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(eventCollection);\n var count = 0;\n for (var _i = 0, _a = this.renderDates; _i < _a.length; _i++) {\n var date = _a[_i];\n var filterData = this.appointmentFiltering(date);\n var workCell = this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS)[parseInt(count.toString(), 10)];\n if (filterData.length > 0) {\n if (!workCell.querySelector('.' + cls.APPOINTMENT_INDICATOR_CLASS)) {\n workCell.appendChild(createElement('div', { className: cls.APPOINTMENT_INDICATOR_CLASS }));\n }\n if (date.getTime() === util.resetTime(new Date(this.monthAgendaDate.getTime())).getTime()) {\n this.onEventRender(filterData, date);\n }\n }\n count++;\n }\n this.parent.notify(events.eventsLoaded, {});\n };\n MonthAgenda.prototype.onCellClick = function (event) {\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide();\n }\n var filterData = this.appointmentFiltering(event.startTime);\n this.onEventRender(filterData, event.startTime);\n this.parent.notify(events.eventsLoaded, {});\n this.monthAgendaDate = new Date('' + event.startTime);\n };\n MonthAgenda.prototype.onEventRender = function (events, date) {\n this.agendaBase = this.getAgendaBase();\n var appWrap = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n util.removeChildren(appWrap);\n if (this.parent.activeViewOptions.group.resources.length === 0 || this.parent.uiStateValues.isGroupAdaptive) {\n if (events.length > 0) {\n var appContainer = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n appWrap.appendChild(this.agendaBase.createAgendaContentElement('data', events, appContainer));\n }\n else {\n this.appendAppContainer(appWrap);\n }\n }\n else {\n if (events.length > 0) {\n var table = this.createTableLayout();\n var tBody = table.querySelector('tbody');\n this.agendaBase.calculateResourceTableElement(tBody, 1, date);\n table.appendChild(tBody);\n appWrap.appendChild(table);\n }\n else {\n this.appendAppContainer(appWrap);\n }\n }\n this.agendaBase.wireEventActions();\n };\n MonthAgenda.prototype.appointmentFiltering = function (date) {\n var dateStart = util.resetTime(new Date(date.getTime()));\n var dateEnd = util.setTime(new Date(dateStart.getTime()), util.MS_PER_DAY);\n return this.parent.eventBase.filterEvents(dateStart, dateEnd);\n };\n MonthAgenda.prototype.clearElements = function () {\n var appointmentIndicators = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_INDICATOR_CLASS));\n for (var _i = 0, appointmentIndicators_1 = appointmentIndicators; _i < appointmentIndicators_1.length; _i++) {\n var appointmentIndicator = appointmentIndicators_1[_i];\n remove(appointmentIndicator);\n }\n this.appendAppContainer(this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS));\n };\n MonthAgenda.prototype.appendAppContainer = function (appWrap) {\n var app = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n addClass([app], cls.AGENDA_NO_EVENT_CLASS);\n app.innerHTML = this.parent.localeObj.getConstant('noEvents');\n util.removeChildren(appWrap);\n appWrap.appendChild(app);\n };\n MonthAgenda.prototype.getNextPreviousDate = function (type) {\n var selectedDate = this.parent.selectedDate;\n var interval = (type === 'next') ? this.parent.activeViewOptions.interval : -this.parent.activeViewOptions.interval;\n var navigateDate = util.addMonths(this.parent.selectedDate, interval);\n var month = (type === 'next') ? 2 : 0;\n var lastDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth() + month, 0).getDate();\n var date = (lastDate >= this.monthAgendaDate.getDate()) ? this.monthAgendaDate.getDate() : lastDate;\n this.monthAgendaDate = new Date(navigateDate.getFullYear(), navigateDate.getMonth(), date);\n return this.monthAgendaDate;\n };\n MonthAgenda.prototype.getAgendaBase = function () {\n return this.agendaBase || new AgendaBase(this.parent);\n };\n MonthAgenda.prototype.destroy = function () {\n if (this.agendaBase) {\n this.agendaBase.destroy();\n this.agendaBase = null;\n }\n _super.prototype.destroy.call(this);\n };\n return MonthAgenda;\n}(Month));\nexport { MonthAgenda };\n","import Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { deepEqual } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'comparable',\n props: {\n valueComparator: {\n type: Function,\n default: deepEqual,\n } as PropValidator,\n },\n})\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, formatUnit, isNullOrUndefined, createElement, addClass, append, prepend, remove, extend } from '@syncfusion/ej2-base';\nimport { ViewBase } from './view-base';\nimport { MonthEvent } from '../event-renderer/month';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * month view\n */\nvar Month = /** @class */ (function (_super) {\n __extends(Month, _super);\n function Month(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dayNameFormat = 'wide';\n _this.viewClass = 'e-month-view';\n _this.isInverseTableSelect = false;\n _this.monthEvent = null;\n _this.monthDates = {};\n return _this;\n }\n Month.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.onScrollUIUpdate, this);\n this.parent.on(event.dataReady, this.onDataReady, this);\n this.parent.on(event.cellClick, this.onCellClick, this);\n };\n Month.prototype.removeEventListener = function () {\n if (this.parent) {\n this.parent.off(event.scrollUiUpdate, this.onScrollUIUpdate);\n this.parent.off(event.dataReady, this.onDataReady);\n this.parent.off(event.cellClick, this.onCellClick);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Month.prototype.onDataReady = function (args) {\n this.monthEvent = new MonthEvent(this.parent);\n this.monthEvent.renderAppointments();\n this.parent.notify(event.eventsLoaded, {});\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Month.prototype.onCellClick = function (event) { };\n Month.prototype.onContentScroll = function (e) {\n this.parent.removeNewEventElement();\n this.parent.notify(event.virtualScroll, e);\n this.scrollTopPanel(e.target);\n this.scrollLeftPanel(e.target);\n this.parent.uiStateValues.top = e.target.scrollTop;\n this.parent.uiStateValues.left = e.target.scrollLeft;\n this.setPersistence();\n };\n Month.prototype.scrollLeftPanel = function (target) {\n var leftPanel = this.getLeftPanelElement();\n if (leftPanel) {\n leftPanel.scrollTop = target.scrollTop;\n }\n };\n Month.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.WEEK_NUMBER_WRAPPER_CLASS);\n };\n Month.prototype.onScrollUIUpdate = function (args) {\n var headerHeight = this.getHeaderBarHeight();\n var header = this.getDatesHeaderElement();\n var content = this.getContentAreaElement();\n var height = this.parent.element.offsetHeight - headerHeight - header.offsetHeight;\n var leftPanel = this.getLeftPanelElement();\n if (this.parent.height !== 'auto') {\n this.setContentHeight(content, leftPanel, height);\n }\n var scrollBarWidth = util.getScrollBarWidth();\n header.firstElementChild.style[args.cssProperties.rtlBorder] = '';\n header.style[args.cssProperties.rtlPadding] = '';\n if (content.offsetWidth - content.clientWidth > 0) {\n header.firstElementChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstElementChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n this.setColWidth(content);\n if (args.scrollPosition || !args.isPreventScrollUpdate && this.parent.currentView === 'TimelineMonth') {\n var top_1 = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top;\n if (leftPanel) {\n leftPanel.scrollTop = top_1;\n }\n content.scrollTop = top_1;\n if (this.parent.uiStateValues.isInitial) {\n this.scrollToSelectedDate();\n this.parent.uiStateValues.isInitial = false;\n }\n else {\n content.scrollLeft = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.left :\n args.scrollPosition.left;\n }\n }\n else {\n this.scrollToSelectedDate();\n }\n this.retainScrollPosition();\n };\n Month.prototype.scrollToSelectedDate = function () {\n var headerCell = this.element.querySelector('.' + cls.HEADER_CELLS_CLASS + '[data-date=\"'\n + this.parent.selectedDate.getTime().toString() + '\"]');\n var content = this.getContentAreaElement();\n if (!isNullOrUndefined(headerCell)) {\n content.scrollLeft = !this.parent.enableRtl ?\n headerCell.offsetLeft : -(this.parent.getContentTable().offsetWidth - headerCell.offsetLeft - headerCell.offsetWidth);\n }\n else {\n content.scrollLeft = 0;\n }\n if (content.scrollLeft === 0 && this.parent.uiStateValues.isInitial) {\n this.parent.uiStateValues.left = 0;\n }\n };\n Month.prototype.setContentHeight = function (content, leftPanelElement, height) {\n content.style.height = 'auto';\n if (this.parent.currentView === 'Month') {\n content.style.height = formatUnit(height);\n }\n if (leftPanelElement) {\n if (this.parent.currentView === 'MonthAgenda') {\n height = (this.parent.activeViewOptions.interval > 1) ?\n this.getContentAreaElement().firstElementChild.offsetHeight :\n this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetHeight;\n }\n leftPanelElement.style.height = 'auto';\n leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(content));\n }\n };\n Month.prototype.generateColumnLevels = function () {\n var colLevels = [];\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n colLevels = this.parent.resourceBase.generateResourceLevels(level);\n if (this.parent.currentView === 'MonthAgenda') {\n colLevels = [level];\n }\n if (this.parent.uiStateValues.isGroupAdaptive && this.parent.resourceBase.lastResourceLevel.length > 0) {\n var resourceLevel = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n var levels_1 = this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays);\n if (this.parent.activeViewOptions.group.byDate && this.parent.activeViewOptions.group.hideNonWorkingDays) {\n var index = levels_1.findIndex(function (x, index) {\n return index !== 0 && x.date.getDay() === levels_1[0].date.getDay();\n });\n levels_1 = index > -1 ? levels_1.slice(0, index) : levels_1;\n }\n colLevels = [levels_1];\n }\n }\n else {\n colLevels.push(level);\n }\n this.colLevels = colLevels;\n return colLevels;\n };\n Month.prototype.getDateSlots = function (renderDates, workDays) {\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : workDays.length;\n var dateSlots = [];\n var isCurrentMonth = this.isCurrentMonth(this.parent.selectedDate);\n for (var col = 0; col < count; col++) {\n var classList = [cls.HEADER_CELLS_CLASS];\n var currentDateIndex = renderDates.slice(0, count).map(function (date) { return date.getDay(); });\n if (isCurrentMonth && currentDateIndex.indexOf(this.parent.currentTimezoneDate.getDay()) === col) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateSlots.push({ date: renderDates[parseInt(col.toString(), 10)], type: 'monthDay', className: classList, colSpan: 1, workDays: workDays });\n }\n return dateSlots;\n };\n Month.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive || this.parent.activeViewOptions.group.resources.length > 0) {\n return 'abbreviated';\n }\n return 'wide';\n };\n Month.prototype.renderLayout = function (type) {\n this.dayNameFormat = this.getDayNameFormat();\n this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));\n var clsList = [this.viewClass];\n clsList.push(type);\n if (this.parent.activeViewOptions.group.byDate) {\n clsList.push('e-by-date');\n if (this.parent.currentView !== 'Month') {\n this.parent.activeViewOptions.group.hideNonWorkingDays = false;\n }\n }\n if (this.parent.activeViewOptions.allowVirtualScrolling && !this.parent.uiStateValues.isGroupAdaptive) {\n clsList.push(cls.VIRTUAL_SCROLL_CLASS);\n }\n if (this.parent.rowAutoHeight && this.parent.eventSettings.ignoreWhitespace) {\n clsList.push(cls.IGNORE_WHITESPACE);\n }\n addClass([this.element], clsList);\n this.renderPanel(type);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.element.querySelector('table').setAttribute('role', 'presentation');\n this.colLevels = this.generateColumnLevels();\n this.renderHeader();\n this.renderContent();\n var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;\n if (this.parent.uiStateValues.isGroupAdaptive && !target.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n if (this.parent.uiStateValues.isCustomMonth) {\n this.parent.uiStateValues.isCustomMonth = false;\n }\n };\n Month.prototype.refreshHeader = function () {\n remove(this.element.querySelector('tbody tr'));\n this.renderHeader();\n this.parent.notify(event.contentReady, {});\n };\n Month.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.parent.workCellAction.cellMouseDown, this.parent.workCellAction);\n EventHandler.add(element, 'click', this.parent.workCellAction.cellClick, this.parent.workCellAction);\n if (!this.parent.isAdaptive) {\n EventHandler.add(element, 'dblclick', this.parent.workCellAction.cellDblClick, this.parent.workCellAction);\n }\n };\n Month.prototype.renderHeader = function () {\n var tr = createElement('tr');\n this.renderLeftIndent(tr);\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n Month.prototype.renderLeftIndent = function (tr) {\n if (this.parent.activeViewOptions.showWeekNumber) {\n tr.appendChild(createElement('td', { className: 'e-left-indent' }));\n }\n };\n Month.prototype.renderContent = function () {\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.renderedResources = extend([], this.parent.resourceBase.lastResourceLevel, null, true);\n }\n var tr = createElement('tr');\n if (this.parent.activeViewOptions.showWeekNumber) {\n tr.appendChild(this.renderWeekNumberContent());\n }\n var workTd = createElement('td');\n var levels = this.colLevels.slice(0);\n if (this.parent.virtualScrollModule) {\n this.resetColLevels();\n }\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var contentArea = this.renderContentArea();\n if (this.parent.currentView === 'Month') {\n wrap.appendChild(contentArea);\n }\n else {\n var monthAgendaWrapper = createElement('div', { className: cls.TABLE_CONTAINER_CLASS });\n monthAgendaWrapper.appendChild(contentArea);\n wrap.appendChild(monthAgendaWrapper);\n }\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n workTd.appendChild(wrap);\n tr.appendChild(workTd);\n if (this.parent.virtualScrollModule) {\n this.colLevels = levels;\n this.parent.virtualScrollModule.renderVirtualTrack(wrap);\n }\n this.element.querySelector('tbody').appendChild(tr);\n this.renderAppointmentContainer();\n };\n Month.prototype.renderWeekNumberContent = function () {\n var dateCol = this.renderDates.map(function (date) { return new Date(+date); });\n var td = createElement('td');\n var contentWrapper = createElement('div', { className: cls.WEEK_NUMBER_WRAPPER_CLASS });\n td.appendChild(contentWrapper);\n var contentWrapTable = this.createTableLayout();\n contentWrapper.appendChild(contentWrapTable);\n var noOfDays = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :\n this.parent.activeViewOptions.workDays.length;\n for (var i = 0, length_1 = (this.renderDates.length / noOfDays); i < length_1; i++) {\n var dates = dateCol.splice(0, noOfDays);\n var weekNumber = this.parent.getWeekNumberContent(dates);\n contentWrapTable.querySelector('tbody').appendChild(this.createWeekNumberElement(weekNumber));\n }\n return td;\n };\n Month.prototype.renderAppointmentContainer = function () {\n //Here needs to render mobile view appointment details on selected date\n };\n Month.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n container.appendChild(wrap);\n var table = this.createTableLayout();\n if (this.parent.currentView === 'Month') {\n var thead = createElement('thead');\n thead.appendChild(createElement('tr'));\n prepend([thead], table);\n }\n this.createColGroup(table, this.colLevels[this.colLevels.length - 1]);\n var trEle = createElement('tr');\n for (var i = 0; i < this.colLevels.length; i++) {\n var level = this.colLevels[parseInt(i.toString(), 10)];\n var ntr = trEle.cloneNode();\n for (var j = 0; j < level.length; j++) {\n var td = level[parseInt(j.toString(), 10)];\n ntr.appendChild(this.createHeaderCell(td));\n }\n table.querySelector('tbody').appendChild(ntr);\n }\n wrap.appendChild(table);\n return container;\n };\n Month.prototype.createHeaderCell = function (td) {\n var tdEle = createElement('td');\n this.addAttributes(td, tdEle);\n if (td.type === 'monthDay') {\n var ele = createElement('span', { innerHTML: util.capitalizeFirstWord(this.parent.getDayNames(this.dayNameFormat)[td.date.getDay()], 'single') });\n tdEle.appendChild(ele);\n }\n if (td.type === 'resourceHeader') {\n this.setResourceHeaderContent(tdEle, td);\n }\n if (td.type === 'dateHeader') {\n addClass([tdEle], cls.DATE_HEADER_CLASS);\n tdEle.setAttribute('data-date', td.date.getTime().toString());\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n var cellArgs = { date: td.date, type: td.type };\n var elementId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.dateHeaderTemplateName;\n var templateId = elementId + viewName + 'dateHeaderTemplate';\n var dateTemplate = [].slice.call(this.parent.getDateHeaderTemplate()(cellArgs, this.parent, 'dateHeaderTemplate', templateId, false));\n if (dateTemplate && dateTemplate.length) {\n append(dateTemplate, tdEle);\n }\n }\n else {\n var ele = createElement('span', { className: cls.NAVIGATE_CLASS });\n var skeleton = 'full';\n var title = this.parent.globalize.formatDate(td.date, { skeleton: skeleton, calendar: this.parent.getCalendarMode() });\n ele.setAttribute('title', util.capitalizeFirstWord(title, 'multiple'));\n var innerText = (this.parent.calendarUtil.isMonthStart(td.date) && !this.isCurrentDate(td.date) && !this.parent.isAdaptive) ?\n this.parent.globalize.formatDate(td.date, { format: 'MMM d', calendar: this.parent.getCalendarMode() }) :\n this.parent.globalize.formatDate(td.date, { skeleton: 'd', calendar: this.parent.getCalendarMode() });\n ele.innerHTML = util.capitalizeFirstWord(innerText, 'single');\n tdEle.appendChild(ele);\n }\n this.wireCellEvents(tdEle);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n Month.prototype.getContentSlots = function () {\n if (!(this.colLevels[this.colLevels.length - 1] && this.colLevels[this.colLevels.length - 1][0])) {\n return [];\n }\n var slotDatas = [];\n var prepareSlots = function (rowIndex, renderDate, resData, classList) {\n var data = {\n date: new Date(+renderDate), groupIndex: resData.groupIndex, workDays: resData.workDays,\n type: 'monthCells', className: classList || [cls.WORK_CELLS_CLASS]\n };\n if (!slotDatas[parseInt(rowIndex.toString(), 10)]) {\n slotDatas[parseInt(rowIndex.toString(), 10)] = [];\n }\n slotDatas[parseInt(rowIndex.toString(), 10)].push(data);\n };\n var includeResource = this.parent.currentView !== 'MonthAgenda' &&\n this.parent.activeViewOptions.group.resources.length > 0;\n if (includeResource && !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeViewOptions.group.byDate) {\n for (var _i = 0, _a = this.colLevels[this.colLevels.length - 2]; _i < _a.length; _i++) {\n var res = _a[_i];\n var dates = res.renderDates.map(function (date) { return new Date(+date); });\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : res.workDays.length;\n for (var i = 0; i < (res.renderDates.length / count); i++) {\n var colDates = dates.splice(0, count);\n for (var _b = 0, colDates_1 = colDates; _b < colDates_1.length; _b++) {\n var colDate = colDates_1[_b];\n prepareSlots(i, colDate, res);\n }\n }\n }\n }\n else {\n var dates = this.renderDates.map(function (date) { return new Date(+date); });\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :\n this.parent.activeViewOptions.workDays.length;\n var level = this.colLevels.slice(0, 1)[0];\n var startIndex = this.renderDates.map(Number).indexOf(+level[0].date);\n for (var i = 0; i < (this.renderDates.length / count); i++) {\n var colDates = dates.splice(0, count);\n var k = startIndex;\n var _loop_1 = function (j) {\n var colDate = colDates[parseInt(k.toString(), 10)];\n k++;\n if (includeResource) {\n var lastRow = this_1.colLevels[(this_1.colLevels.length - 1)];\n var rowCount = lastRow.length / count;\n var resourcesTd = lastRow.slice(0, rowCount);\n if (this_1.parent.activeViewOptions.group.hideNonWorkingDays) {\n resourcesTd = lastRow.filter(function (x) { return x.date.getDay() === colDate.getDay(); });\n if (resourcesTd.length === 0) {\n j = j - 1;\n return out_j_1 = j, \"continue\";\n }\n }\n for (var resIndex = 0; resIndex < resourcesTd.length; resIndex++) {\n var clsList = void 0;\n if (resIndex !== 0) {\n clsList = [cls.WORK_CELLS_CLASS, cls.DISABLE_DATE];\n }\n prepareSlots(i, colDate, resourcesTd[parseInt(resIndex.toString(), 10)], clsList);\n }\n }\n else {\n prepareSlots(i, colDate, this_1.colLevels[this_1.colLevels.length - 1][0]);\n }\n out_j_1 = j;\n };\n var this_1 = this, out_j_1;\n for (var j = startIndex; j < (this.colLevels[0].length + startIndex) && j < colDates.length; j++) {\n _loop_1(j);\n j = out_j_1;\n }\n }\n }\n return slotDatas;\n };\n Month.prototype.updateClassList = function (data) {\n if (!this.isCustomMonth() && this.isOtherMonth(data.date)) {\n data.className.push(cls.OTHERMONTH_CLASS);\n }\n if (!this.parent.isMinMaxDate(data.date)) {\n data.className.push(cls.DISABLE_DATES);\n }\n this.updateSelectedCellClass(data);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Month.prototype.updateSelectedCellClass = function (data) {\n return;\n };\n Month.prototype.isOtherMonth = function (date) {\n return date.getTime() < this.monthDates.start.getTime() || date.getTime() > this.monthDates.end.getTime();\n };\n Month.prototype.renderContentArea = function () {\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n this.setAriaAttributes(tbl);\n this.addAutoHeightClass(tbl);\n if (this.parent.currentView === 'TimelineMonth') {\n this.createColGroup(tbl, this.colLevels[this.colLevels.length - 1]);\n }\n var monthDate = new Date(this.parent.selectedDate.getTime());\n this.monthDates = {\n start: this.parent.calendarUtil.firstDateOfMonth(monthDate),\n end: this.parent.calendarUtil.lastDateOfMonth(util.addMonths(monthDate, this.parent.activeViewOptions.interval - 1))\n };\n var tBody = tbl.querySelector('tbody');\n append(this.getContentRows(), tBody);\n this.wireCellEvents(tBody);\n return tbl;\n };\n Month.prototype.getContentRows = function () {\n var trows = [];\n var tr = createElement('tr');\n var td = createElement('td', { attrs: { 'aria-selected': 'false' } });\n var slotDatas = this.getContentSlots();\n for (var row = 0; row < slotDatas.length; row++) {\n var ntr = tr.cloneNode();\n for (var col = 0; col < slotDatas[parseInt(row.toString(), 10)].length; col++) {\n var ntd = this.createContentTd(slotDatas[parseInt(row.toString(), 10)][parseInt(col.toString(), 10)], td);\n ntr.appendChild(ntd);\n }\n trows.push(ntr);\n }\n return trows;\n };\n Month.prototype.createContentTd = function (data, td) {\n var ntd = td.cloneNode();\n if (data.colSpan) {\n ntd.setAttribute('colspan', data.colSpan.toString());\n }\n this.updateClassList(data);\n var type = data.type;\n if (data.className.indexOf(cls.RESOURCE_PARENT_CLASS) !== -1) {\n data.className.push(cls.RESOURCE_GROUP_CELLS_CLASS);\n type = 'resourceGroupCells';\n }\n if (this.parent.workHours.highlight && this.isWorkDay(data.date, data.workDays)) {\n data.className.push(cls.WORKDAY_CLASS);\n }\n if (this.isCurrentDate(data.date)) {\n data.className.push(cls.CURRENTDATE_CLASS);\n }\n addClass([ntd], data.className);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n if (!isNullOrUndefined(data.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) {\n var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n data.groupIndex;\n ntd.setAttribute('data-group-index', '' + groupIndex);\n }\n this.renderDateHeaderElement(data, ntd);\n if (this.parent.activeViewOptions.cellTemplate) {\n var args_1 = { date: data.date, type: type, groupIndex: data.groupIndex };\n var scheduleId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.cellTemplateName;\n var templateId = scheduleId + viewName + 'cellTemplate';\n var cellTemplate = [].slice.call(this.parent.getCellTemplate()(args_1, this.parent, 'cellTemplate', templateId, false));\n append(cellTemplate, ntd);\n }\n var args = { elementType: type, element: ntd, date: data.date, groupIndex: data.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return ntd;\n };\n Month.prototype.renderDateHeaderElement = function (data, ntd) {\n if (this.parent.currentView === 'TimelineMonth') {\n return;\n }\n var dateHeader = createElement('div', { className: cls.DATE_HEADER_CLASS });\n if (this.parent.activeViewOptions.cellHeaderTemplate) {\n var args = { date: data.date, type: data.type, groupIndex: data.groupIndex };\n var scheduleId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.cellHeaderTemplateName;\n var templateId = scheduleId + viewName + 'cellHeaderTemplate';\n var cellHeaderTemplate = [].slice.call(this.parent.getCellHeaderTemplate()(args, this.parent, 'cellHeaderTemplate', templateId, false));\n append(cellHeaderTemplate, dateHeader);\n }\n else {\n var innerText = (this.parent.calendarUtil.isMonthStart(data.date) && !this.isCurrentDate(data.date) && !this.parent.isAdaptive) ?\n this.parent.globalize.formatDate(data.date, { format: 'MMM d', calendar: this.parent.getCalendarMode() }) :\n this.parent.globalize.formatDate(data.date, { skeleton: 'd', calendar: this.parent.getCalendarMode() });\n dateHeader.innerHTML = util.capitalizeFirstWord(innerText, 'single');\n }\n ntd.appendChild(dateHeader);\n if (this.getModuleName() === 'month') {\n addClass([dateHeader], cls.NAVIGATE_CLASS);\n var skeleton = 'full';\n var announcementText = this.parent.globalize.formatDate(data.date, { skeleton: skeleton, calendar: this.parent.getCalendarMode() });\n ntd.setAttribute('aria-label', announcementText);\n }\n };\n Month.prototype.getMonthStart = function (currentDate) {\n var useDisplayDate = this.parent.currentView === 'Month' && !isNullOrUndefined(this.parent.activeViewOptions.displayDate) && (this.parent.uiStateValues.isCustomMonth || this.isCustomRange());\n var date = useDisplayDate ? this.parent.activeViewOptions.displayDate : !(this.parent.uiStateValues.isCustomMonth ||\n this.isCustomRange()) && this.isCustomMonth() ? currentDate : this.parent.calendarUtil.firstDateOfMonth(currentDate);\n var monthStart = util.getWeekFirstDate(date, this.parent.activeViewOptions.firstDayOfWeek);\n return new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());\n };\n Month.prototype.getMonthEnd = function (currentDate) {\n if (this.isCustomMonth()) {\n var start = this.getMonthStart(currentDate);\n var numberOfDays = util.WEEK_LENGTH * (this.parent.activeViewOptions.numberOfWeeks > 0 ?\n this.parent.activeViewOptions.numberOfWeeks : util.DEFAULT_WEEKS);\n return util.addDays(start, (numberOfDays - 1));\n }\n else {\n var endDate = util.addMonths(currentDate, this.parent.activeViewOptions.interval - 1);\n var lastWeekOfMonth = util.getWeekFirstDate(this.parent.calendarUtil.lastDateOfMonth(endDate), this.parent.activeViewOptions.firstDayOfWeek);\n return util.addDays(lastWeekOfMonth, util.WEEK_LENGTH - 1);\n }\n };\n Month.prototype.isCustomRange = function () {\n var dates = this.parent.getCurrentViewDates();\n if (dates && dates.length > 0) {\n var selectedTime = util.resetTime(this.parent.selectedDate).getTime();\n var weekFirstDate = util.getWeekFirstDate(dates[dates.length - 1], this.parent.activeViewOptions.firstDayOfWeek);\n return !(selectedTime >= util.getWeekFirstDate(dates[0], this.parent.activeViewOptions.firstDayOfWeek).getTime() &&\n selectedTime <= util.addDays(weekFirstDate, 6).getTime());\n }\n return false;\n };\n Month.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n var currentDate = util.resetTime(this.parent.selectedDate);\n var start = this.getMonthStart(currentDate);\n var monthEnd = this.getMonthEnd(currentDate);\n do {\n if (this.parent.activeViewOptions.showWeekend) {\n renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n if (start.getHours() > 0) {\n start = util.resetTime(start);\n }\n } while (start.getTime() <= monthEnd.getTime());\n if (!workDays) {\n this.renderDates = renderDates;\n }\n if (this.parent.headerModule) {\n this.parent.headerModule.previousNextIconHandler();\n }\n return renderDates;\n };\n Month.prototype.getNextPreviousDate = function (type) {\n if (this.isCustomMonth()) {\n var dates = this.parent.getCurrentViewDates();\n var date = util.getWeekFirstDate(type === 'next' ? dates[dates.length - 1]\n : dates[0], this.parent.activeViewOptions.firstDayOfWeek);\n return util.addDays(date, type === 'next' ? util.WEEK_LENGTH : -(this.parent.activeViewOptions.numberOfWeeks > 0 ?\n this.parent.activeViewOptions.numberOfWeeks : util.DEFAULT_WEEKS) * util.WEEK_LENGTH);\n }\n else {\n return util.addMonths(this.parent.selectedDate, ((type === 'next' ? 1 : -1) * this.parent.activeViewOptions.interval));\n }\n };\n Month.prototype.getStartDate = function () {\n return this.getMonthStart(this.parent.selectedDate);\n };\n Month.prototype.getEndDate = function () {\n return this.getMonthEnd(this.parent.selectedDate);\n };\n Month.prototype.getEndDateFromStartDate = function (start) {\n return util.addDays(new Date(start.getTime()), 1);\n };\n Month.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive || isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {\n var startDate = this.parent.selectedDate;\n var endDate = void 0;\n var updateCustomRange = false;\n if (this.isCustomMonth()) {\n var dates = this.parent.getCurrentViewDates();\n updateCustomRange = dates[0].getMonth() !== dates[dates.length - 1].getMonth() ||\n dates[0].getFullYear() !== dates[dates.length - 1].getFullYear();\n if (updateCustomRange) {\n startDate = dates[0];\n endDate = dates[dates.length - 1];\n }\n }\n var isUpdateDateRange = (this.parent.currentView !== 'Month' || !this.isCustomMonth());\n if (this.parent.activeViewOptions.interval > 1 && isUpdateDateRange || updateCustomRange) {\n endDate = endDate ? endDate : util.addMonths(util.lastDateOfMonth(startDate), this.parent.activeViewOptions.interval - 1);\n if (startDate.getFullYear() === endDate.getFullYear()) {\n var monthNames = (this.parent.globalize.formatDate(startDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' - ' +\n (this.parent.globalize.formatDate(endDate, { format: 'MMMM ', calendar: this.parent.getCalendarMode() })) +\n this.parent.globalize.formatDate(endDate, { skeleton: 'y', calendar: this.parent.getCalendarMode() });\n return util.capitalizeFirstWord(monthNames, 'single');\n }\n var text = (this.parent.globalize.formatDate(startDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' ' +\n startDate.getFullYear() + ' - ' +\n this.parent.globalize.formatDate(endDate, { format: 'MMMM ', calendar: this.parent.getCalendarMode() }) +\n this.parent.globalize.formatDate(endDate, { skeleton: 'y', calendar: this.parent.getCalendarMode() });\n return util.capitalizeFirstWord(text, 'single');\n }\n var format = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';\n return util.capitalizeFirstWord(this.parent.globalize.formatDate(startDate, { format: format, calendar: this.parent.getCalendarMode() }), 'single');\n }\n return this.formatDateRange(this.parent.selectedDate);\n };\n Month.prototype.getLabelText = function (view) {\n return this.parent.localeObj.getConstant(view) + ' of ' + util.capitalizeFirstWord(this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y', calendar: this.parent.getCalendarMode() }), 'single');\n };\n Month.prototype.createWeekNumberElement = function (text) {\n var tr = createElement('tr');\n var td = createElement('td', {\n className: cls.WEEK_NUMBER_CLASS,\n attrs: { 'title': (text ? this.parent.localeObj.getConstant('week') + ' ' + text : '') },\n innerHTML: (text || '')\n });\n tr.appendChild(td);\n var args = { elementType: 'weekNumberCell', element: td };\n this.parent.trigger(event.renderCell, args);\n return tr;\n };\n Month.prototype.unWireEvents = function () {\n var contentScrollableEle = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (contentScrollableEle) {\n EventHandler.remove(contentScrollableEle, 'scroll', this.onContentScroll);\n }\n };\n Month.prototype.isCustomMonth = function () {\n return this.parent.currentView === 'Month' &&\n (!isNullOrUndefined(this.parent.activeViewOptions.displayDate) || this.parent.activeViewOptions.numberOfWeeks > 0);\n };\n Month.prototype.getModuleName = function () {\n return 'month';\n };\n Month.prototype.destroy = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n if (this.monthEvent) {\n this.monthEvent.destroy();\n this.monthEvent = null;\n }\n this.unWireEvents();\n if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\n if (this.parent.scheduleTouchModule) {\n this.parent.scheduleTouchModule.resetValues();\n }\n _super.prototype.destroy.call(this);\n }\n };\n return Month;\n}(ViewBase));\nexport { Month };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, createElement, formatUnit } from '@syncfusion/ej2-base';\nimport { Month } from './month';\nimport { TimelineEvent } from '../event-renderer/timeline-view';\nimport { TimelineHeaderRow } from './timeline-header-row';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * timeline month view\n */\nvar TimelineMonth = /** @class */ (function (_super) {\n __extends(TimelineMonth, _super);\n function TimelineMonth(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-timeline-month-view';\n _this.isInverseTableSelect = true;\n _this.appointment = null;\n return _this;\n }\n TimelineMonth.prototype.getModuleName = function () {\n return 'timelineMonth';\n };\n TimelineMonth.prototype.onDataReady = function () {\n this.appointment = new TimelineEvent(this.parent, 'day');\n this.appointment.renderAppointments();\n this.parent.notify(event.eventsLoaded, {});\n };\n TimelineMonth.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n };\n TimelineMonth.prototype.scrollTopPanel = function (target) {\n _super.prototype.scrollTopPanel.call(this, target);\n this.scrollHeaderLabels(target);\n };\n TimelineMonth.prototype.setContentHeight = function (content, leftPanelElement, height) {\n if (leftPanelElement) {\n leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(content));\n }\n content.style.height = formatUnit(height);\n };\n TimelineMonth.prototype.getDateSlots = function (renderDates, workDays) {\n var dateSlots = [];\n for (var _i = 0, renderDates_1 = renderDates; _i < renderDates_1.length; _i++) {\n var col = renderDates_1[_i];\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentDate(col)) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateSlots.push({ date: col, type: 'dateHeader', className: classList, colSpan: 1, workDays: workDays });\n }\n return dateSlots;\n };\n TimelineMonth.prototype.renderLeftIndent = function (tr) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.parent.resourceBase.renderResourceHeaderIndent(tr);\n }\n };\n TimelineMonth.prototype.renderContent = function () {\n var contentTr = createElement('tr');\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var resTd = createElement('td');\n resTd.appendChild(this.parent.resourceBase.createResourceColumn());\n contentTr.appendChild(resTd);\n }\n var contentTd = createElement('td');\n this.element.querySelector('tbody').appendChild(contentTr);\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n wrap.appendChild(this.renderContentArea());\n wrap.appendChild(this.createEventTable(this.getRowCount()));\n this.collapseRows(wrap);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n contentTd.appendChild(wrap);\n if (this.parent.virtualScrollModule) {\n this.parent.virtualScrollModule.renderVirtualTrack(wrap);\n }\n contentTr.appendChild(contentTd);\n };\n TimelineMonth.prototype.getRowCount = function () {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n return this.parent.resourceBase.renderedResources.length;\n }\n return 1;\n };\n TimelineMonth.prototype.getContentSlots = function () {\n var slotDatas = [];\n for (var row = 0; row < this.getRowCount(); row++) {\n for (var _i = 0, _a = this.colLevels[this.colLevels.length - 1]; _i < _a.length; _i++) {\n var data = _a[_i];\n data.className = [cls.WORK_CELLS_CLASS];\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var resLevel = this.parent.resourceBase.renderedResources[parseInt(row.toString(), 10)];\n data.workDays = resLevel.resourceData[resLevel.resource.workDaysField] || this.parent.workDays;\n data.className = data.className.concat(resLevel.className);\n data.groupIndex = resLevel.groupIndex;\n data.groupOrder = resLevel.groupOrder;\n }\n var slotData = {\n date: new Date(+data.date), colSpan: data.colSpan, groupIndex: data.groupIndex, workDays: data.workDays,\n type: 'monthCells', className: data.className\n };\n if (!slotDatas[parseInt(row.toString(), 10)]) {\n slotDatas[parseInt(row.toString(), 10)] = [];\n }\n slotDatas[parseInt(row.toString(), 10)].push(slotData);\n }\n }\n return slotDatas;\n };\n TimelineMonth.prototype.updateClassList = function (data) {\n if (!this.parent.isMinMaxDate(data.date)) {\n data.className.push(cls.DISABLE_DATES);\n }\n };\n TimelineMonth.prototype.unWireEvents = function () {\n EventHandler.remove(this.getContentAreaElement(), 'scroll', this.onContentScroll);\n };\n TimelineMonth.prototype.getMonthStart = function (currentDate) {\n var monthStart = this.parent.calendarUtil.firstDateOfMonth(util.resetTime(currentDate));\n return new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());\n };\n TimelineMonth.prototype.getMonthEnd = function (currentDate) {\n var monthStart = this.parent.calendarUtil.firstDateOfMonth(util.resetTime(currentDate));\n return this.parent.calendarUtil.lastDateOfMonth(util.addMonths(new Date(+monthStart), this.parent.activeViewOptions.interval - 1));\n };\n TimelineMonth.prototype.generateColumnLevels = function () {\n var colLevels = [];\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n colLevels.push(level);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.generateResourceLevels(level, !this.parent.uiStateValues.isGroupAdaptive);\n }\n var hourSlots = [];\n if (this.parent.activeViewOptions.headerRows.length > 0) {\n var renderGn = new TimelineHeaderRow(this.parent, this.renderDates);\n colLevels = renderGn.generateColumnLevels(level, hourSlots);\n }\n this.colLevels = colLevels;\n return colLevels;\n };\n TimelineMonth.prototype.getAdjustedDate = function (startTime) {\n var timeSlots = this.colLevels[this.colLevels.length - 1];\n for (var i = 0; i < timeSlots.length; i++) {\n if (timeSlots[parseInt(i.toString(), 10)].date.getTime() > startTime.getTime()) {\n return timeSlots[i - 1].date;\n }\n }\n return null;\n };\n TimelineMonth.prototype.destroy = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n var contentScrollableEle = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (contentScrollableEle) {\n EventHandler.remove(contentScrollableEle, 'scroll', this.onContentScroll);\n }\n }\n if (this.appointment) {\n this.appointment.destroy();\n this.appointment = null;\n }\n _super.prototype.destroy.call(this);\n };\n return TimelineMonth;\n}(Month));\nexport { TimelineMonth };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { append, prepend, createElement, extend, EventHandler, closest, addClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { EventBase } from './event-base';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_GAP = 0;\n/**\n * Month view events render\n */\nvar MonthEvent = /** @class */ (function (_super) {\n __extends(MonthEvent, _super);\n function MonthEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.renderedEvents = [];\n _this.monthHeaderHeight = 0;\n _this.moreIndicatorHeight = 19;\n _this.renderType = 'day';\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.maxHeight = _this.parent.eventSettings.enableMaxHeight && !_this.parent.eventSettings.enableIndicator\n && !_this.parent.rowAutoHeight;\n _this.withIndicator = _this.parent.eventSettings.enableMaxHeight && _this.parent.eventSettings.enableIndicator\n && !_this.parent.rowAutoHeight;\n _this.maxOrIndicator = (_this.maxHeight || _this.withIndicator);\n _this.moreIndicatorHeight =\n (_this.parent.rowAutoHeight && _this.parent.eventSettings.ignoreWhitespace) ? 0 : _this.moreIndicatorHeight;\n _this.addEventListener();\n return _this;\n }\n MonthEvent.prototype.removeEventWrapper = function (appElement) {\n if (appElement.length > 0) {\n appElement = (this.parent.currentView === 'Month' || (!this.parent.activeView.isTimelineView() &&\n !this.parent.activeViewOptions.timeScale.enable)) ? appElement : [appElement[0]];\n for (var _i = 0, appElement_1 = appElement; _i < appElement_1.length; _i++) {\n var wrap = appElement_1[_i];\n if (wrap.parentElement && wrap.parentElement.parentNode) {\n remove(wrap.parentElement);\n }\n }\n }\n };\n MonthEvent.prototype.renderAppointments = function () {\n if (this.parent.dragAndDropModule) {\n this.parent.dragAndDropModule.setDragArea();\n }\n this.isResourceEventTemplate = this.parent.isSpecificResourceEvents();\n var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (this.parent.rowAutoHeight) {\n this.parent.uiStateValues.top = conWrap.scrollTop;\n this.parent.uiStateValues.left = conWrap.scrollLeft;\n }\n var appointmentWrapper = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_CLASS));\n if (this.parent.crudModule && this.parent.crudModule.crudObj.isCrudAction) {\n for (var i = 0, len = this.parent.crudModule.crudObj.sourceEvent.length; i < len; i++) {\n var appElement = [].slice.call(this.element.querySelectorAll('.e-appointment-wrapper ' + '[data-group-index=\"' +\n this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)].groupIndex + '\"]'));\n this.removeEventWrapper(appElement);\n if (this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)] &&\n this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)].groupIndex !==\n this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)].groupIndex) {\n var ele = [].slice.call(this.element.querySelectorAll('.e-appointment-wrapper ' + '[data-group-index=\"' +\n this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)].groupIndex + '\"]'));\n this.removeEventWrapper(ele);\n }\n }\n }\n else {\n for (var _i = 0, appointmentWrapper_1 = appointmentWrapper; _i < appointmentWrapper_1.length; _i++) {\n var wrap = appointmentWrapper_1[_i];\n remove(wrap);\n }\n }\n this.removeHeightProperty(cls.CONTENT_TABLE_CLASS);\n if (!this.element.querySelector('.' + cls.WORK_CELLS_CLASS)) {\n return;\n }\n if (this.parent.currentView === 'Month') {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n var cellTd = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);\n cellTd.appendChild(wrapper);\n this.monthHeaderHeight = wrapper.offsetTop - cellTd.offsetTop;\n cellTd.removeChild(wrapper);\n }\n this.eventHeight = util.getElementHeightFromClass(this.element, cls.APPOINTMENT_CLASS);\n var scrollTop = conWrap.scrollTop;\n if (this.parent.rowAutoHeight && this.parent.virtualScrollModule && !this.parent.virtualScrollModule.isHorizontalScroll\n && !isNullOrUndefined(this.parent.currentAction)) {\n conWrap.scrollTop = conWrap.scrollTop - 1;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.renderResourceEvents();\n if (this.parent.virtualScrollModule) {\n this.parent.virtualScrollModule.updateFocusedWorkCell();\n }\n }\n else {\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays);\n }\n if (this.parent.rowAutoHeight) {\n this.updateBlockElements();\n var data = {\n cssProperties: this.parent.getCssProperties(),\n module: this.parent.getModuleName(),\n isPreventScrollUpdate: true,\n scrollPosition: { left: this.parent.uiStateValues.left, top: this.parent.uiStateValues.top }\n };\n if (this.parent.virtualScrollModule && !this.parent.virtualScrollModule.isHorizontalScroll) {\n if (this.parent.currentAction) {\n conWrap.scrollTop = scrollTop;\n this.parent.currentAction = null;\n }\n else {\n this.parent.virtualScrollModule.updateVirtualScrollHeight();\n }\n }\n if (!this.parent.enablePersistence) {\n this.parent.notify(events.contentReady, {});\n }\n this.parent.notify(events.scrollUiUpdate, data);\n if (this.parent.currentView === 'Month' && this.parent.showWeekNumber) {\n var totalCells_1 = [].slice.call(this.parent.element.querySelectorAll('.e-content-wrap table tr td:first-child'));\n var weekNumberCells = [].slice.call(this.parent.element.querySelectorAll('.' + cls.WEEK_NUMBER_CLASS));\n weekNumberCells.forEach(function (cell, i) {\n var height = totalCells_1[parseInt(i.toString(), 10)].offsetHeight;\n setStyleAttribute(cell, { 'height': height + 'px' });\n });\n this.parent.element.querySelector('.' + cls.WEEK_NUMBER_WRAPPER_CLASS).scrollTop =\n this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS).scrollTop;\n }\n }\n this.parent.renderTemplates();\n };\n MonthEvent.prototype.renderEventsHandler = function (dateRender, workDays, resData) {\n this.renderedEvents = [];\n var eventsList;\n var blockList;\n var resIndex = 0;\n if (resData) {\n resIndex = resData.groupIndex;\n this.cssClass = resData.cssClass;\n this.groupOrder = resData.groupOrder;\n eventsList = this.parent.eventBase.filterEventsByResource(resData, this.parent.eventsProcessed);\n blockList = this.parent.eventBase.filterEventsByResource(resData, this.parent.blockProcessed);\n this.workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS + '[data-group-index=\"' + resIndex + '\"]'));\n }\n else {\n eventsList = this.parent.eventsProcessed;\n blockList = this.parent.blockProcessed;\n this.workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n }\n this.sortByDateTime(eventsList);\n this.sortByDateTime(blockList);\n if (this.parent.currentView === 'Month' && this.parent.rowAutoHeight && this.parent.activeViewOptions.group.resources.length === 0) {\n var totalCells = [].slice.call(this.parent.element.querySelectorAll('.e-content-wrap table tr td:first-child'));\n var height_1 = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).clientHeight / totalCells.length;\n totalCells.forEach(function (cell) {\n setStyleAttribute(cell, { 'height': height_1 + 'px' });\n });\n }\n var cellDetail = this.workCells[this.parent.activeView.isTimelineView() ?\n 0 : this.workCells.length - 1].getBoundingClientRect();\n this.cellWidth = cellDetail.width;\n this.cellHeight = cellDetail.height;\n this.dateRender = dateRender;\n var filteredDates = this.getRenderedDates(dateRender);\n this.getSlotDates(workDays || this.parent.activeViewOptions.workDays);\n this.processBlockEvents(blockList, resIndex, resData);\n var events = [];\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_1 = eventsList_1[_i];\n if (this.parent.resourceBase && !resData) {\n this.cssClass = this.parent.resourceBase.getCssClass(event_1);\n }\n events = events.concat(this.splitEvent(event_1, filteredDates || this.dateRender));\n }\n for (var level = 0; level < this.slots.length; level++) {\n this.renderedEvents = [];\n var slot = this.slots[parseInt(level.toString(), 10)];\n var endDate = util.addDays(new Date(slot[slot.length - 1]), 1);\n var spannedEvents = this.filterEvents(new Date(slot[0]), endDate, events);\n for (var _a = 0, spannedEvents_1 = spannedEvents; _a < spannedEvents_1.length; _a++) {\n var event_2 = spannedEvents_1[_a];\n if (this.maxHeight) {\n var sDate = this.parent.currentView === 'Month' ? event_2[this.fields.startTime] :\n this.getStartTime(event_2, event_2.data);\n if (this.getIndex(sDate) > 0) {\n continue;\n }\n }\n this.updateIndicatorIcon(event_2);\n this.renderEvents(event_2, resIndex, eventsList);\n }\n }\n this.cssClass = null;\n this.groupOrder = null;\n };\n MonthEvent.prototype.processBlockEvents = function (blockEvents, resIndex, resData) {\n for (var _i = 0, blockEvents_1 = blockEvents; _i < blockEvents_1.length; _i++) {\n var event_3 = blockEvents_1[_i];\n if (this.parent.resourceBase && !resData) {\n this.cssClass = this.parent.resourceBase.getCssClass(event_3);\n }\n var blockSpannedList = [];\n if (this.renderType === 'day' && !event_3[this.fields.isAllDay]) {\n var temp = extend({}, event_3, null, true);\n var isSameDate = this.isSameDate(temp[this.fields.startTime], temp[this.fields.endTime]);\n temp.isBlockIcon = isSameDate;\n if (!isSameDate && util.getDateInMs(temp[this.fields.startTime]) > 0) {\n var e = extend({}, event_3, null, true);\n e[this.fields.endTime] = util.addDays(util.resetTime(new Date(event_3[this.fields.startTime] + '')), 1);\n e.isBlockIcon = true;\n temp[this.fields.startTime] = e[this.fields.endTime];\n blockSpannedList.push(e);\n }\n isSameDate = this.isSameDate(temp[this.fields.startTime], temp[this.fields.endTime]);\n if (!isSameDate && util.getDateInMs(temp[this.fields.endTime]) > 0) {\n var e = extend({}, event_3, null, true);\n e[this.fields.startTime] = util.resetTime(new Date(event_3[this.fields.endTime] + ''));\n e.isBlockIcon = true;\n blockSpannedList.push(e);\n temp[this.fields.endTime] = e[this.fields.startTime];\n }\n blockSpannedList.push(temp);\n }\n else {\n blockSpannedList.push(event_3);\n }\n for (var _a = 0, blockSpannedList_1 = blockSpannedList; _a < blockSpannedList_1.length; _a++) {\n var blockEvent = blockSpannedList_1[_a];\n var spannedEvents = this.splitEvent(blockEvent, this.dateRender);\n for (var _b = 0, spannedEvents_2 = spannedEvents; _b < spannedEvents_2.length; _b++) {\n var event_4 = spannedEvents_2[_b];\n this.renderBlockEvents(event_4, resIndex, !!blockEvent.isBlockIcon);\n }\n }\n }\n };\n MonthEvent.prototype.isSameDate = function (start, end) {\n return new Date(+start).setHours(0, 0, 0, 0) === new Date(+end).setHours(0, 0, 0, 0);\n };\n MonthEvent.prototype.renderBlockEvents = function (event, resIndex, isIcon) {\n var eventData = event.data;\n var startTime = this.getStartTime(event, eventData);\n var endTime = this.getEndTime(event, eventData);\n var day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime())));\n if (day < 0 || startTime > endTime) {\n return;\n }\n var cellTd = this.getCellTd(day);\n var position = this.getPosition(startTime, endTime, event[this.fields.isAllDay], day);\n if (!isIcon) {\n var diffInDays = eventData.count;\n var appWidth = this.getEventWidth(startTime, endTime, event[this.fields.isAllDay], diffInDays);\n appWidth = (appWidth <= 0) ? this.cellWidth : appWidth;\n var appLeft = (this.parent.enableRtl) ? 0 : position;\n var appRight = (this.parent.enableRtl) ? position : 0;\n var appHeight = this.cellHeight - this.monthHeaderHeight;\n var appTop = this.getRowTop(resIndex);\n var blockElement = this.createBlockAppointmentElement(event, resIndex, this.isResourceEventTemplate);\n setStyleAttribute(blockElement, {\n 'width': appWidth + 'px', 'height': appHeight + 'px', 'left': appLeft + 'px',\n 'right': appRight + 'px', 'top': appTop + 'px'\n });\n this.renderEventElement(event, blockElement, cellTd);\n }\n else {\n this.renderBlockIndicator(cellTd, position, resIndex);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.renderBlockIndicator = function (cellTd, position, resIndex) {\n var blockIndicator = createElement('div', { className: 'e-icons ' + cls.BLOCK_INDICATOR_CLASS });\n if (isNullOrUndefined(cellTd.querySelector('.' + cls.BLOCK_INDICATOR_CLASS))) {\n cellTd.appendChild(blockIndicator);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.getStartTime = function (event, eventData) {\n return event[this.fields.startTime];\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.getEndTime = function (event, eventData) {\n return event[this.fields.endTime];\n };\n MonthEvent.prototype.getCellTd = function (day) {\n return this.workCells[parseInt(day.toString(), 10)];\n };\n MonthEvent.prototype.getEventWidth = function (startDate, endDate, isAllDay, count) {\n return count * this.cellWidth - 1;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.getPosition = function (startTime, endTime, isAllDay, day) {\n return 0;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.getRowTop = function (resIndex) {\n return 0;\n };\n MonthEvent.prototype.updateIndicatorIcon = function (event) {\n if (this.parent.currentView.indexOf('Timeline') === -1 || this.parent.currentView === 'TimelineMonth'\n || event[this.fields.isAllDay]) {\n return;\n }\n var cloneData = event.data;\n var start = this.parent.activeView.getStartHour();\n var end = this.parent.activeView.getEndHour();\n var startHour = util.getStartEndHours(event[this.fields.startTime], start, end);\n var endHour = util.getStartEndHours(event[this.fields.endTime], start, end);\n var actualStartTime = cloneData[this.fields.startTime];\n var actualEndTime = cloneData[this.fields.endTime];\n cloneData.isLeft = cloneData.isLeft || actualStartTime.getTime() < startHour.startHour.getTime();\n cloneData.isRight = cloneData.isRight || actualEndTime.getTime() > endHour.endHour.getTime();\n if (util.resetTime(actualStartTime).getTime() !== util.resetTime(actualEndTime).getTime()) {\n var actualStartHour = startHour.startHour;\n var actualEndHour = endHour.endHour;\n var startTime = new Date(util.resetTime(actualStartTime));\n startTime.setHours(actualEndHour.getHours(), actualEndHour.getMinutes(), actualEndHour.getSeconds());\n cloneData.isLeft = cloneData.isLeft || actualStartTime.getTime() >= (actualStartHour.getDate() === startHour.endHour.getDate() ?\n startTime.getTime() : util.addDays(startTime, 1).getTime());\n if (actualEndTime.getTime() !== util.resetTime(actualEndTime).getTime()) {\n var endTime = new Date(util.resetTime(actualEndTime));\n cloneData.isRight = cloneData.isRight || actualEndTime.getTime() <=\n endTime.setHours(actualStartHour.getHours(), actualStartHour.getMinutes(), actualStartHour.getSeconds());\n }\n }\n };\n MonthEvent.prototype.renderResourceEvents = function () {\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.renderedResources;\n if (this.parent.crudModule && this.parent.crudModule.crudObj.isCrudAction) {\n for (var i = 0, len = this.parent.crudModule.crudObj.sourceEvent.length; i < len; i++) {\n var sourceRes = this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)];\n this.renderEventsHandler(sourceRes.renderDates, sourceRes.workDays, sourceRes);\n if (this.parent.crudModule.crudObj.sourceEvent[parseInt(i.toString(), 10)].groupIndex !==\n this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)].groupIndex) {\n var target = this.parent.crudModule.crudObj.targetEvent[parseInt(i.toString(), 10)];\n this.renderEventsHandler(target.renderDates, target.workDays, target);\n }\n }\n this.parent.crudModule.crudObj.isCrudAction = false;\n }\n else {\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\n var slotData = resources_1[_i];\n this.renderEventsHandler(slotData.renderDates, slotData.workDays, slotData);\n }\n }\n };\n MonthEvent.prototype.getSlotDates = function (workDays) {\n this.slots = [];\n var dates = this.dateRender.map(function (date) { return +date; });\n var noOfDays = !this.parent.activeViewOptions.showWeekend || (this.parent.activeViewOptions.group.byDate &&\n this.parent.activeViewOptions.group.hideNonWorkingDays) ? workDays.length : util.WEEK_LENGTH;\n while (dates.length > 0) {\n this.slots.push(dates.splice(0, noOfDays));\n }\n };\n MonthEvent.prototype.createAppointmentElement = function (record, resIndex, isCloneElement) {\n if (isCloneElement === void 0) { isCloneElement = false; }\n var eventSubject = (record[this.fields.subject] || this.parent.eventSettings.fields.subject.default ||\n this.parent.localeObj.getConstant('addTitle'));\n var newRecord = extend({}, record, record.data, true);\n var attrs = {\n 'data-id': 'Appointment_' + record[this.fields.id],\n 'role': 'button', 'tabindex': '0',\n 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),\n 'aria-label': this.parent.getAnnouncementString(newRecord, eventSubject)\n };\n if (!isCloneElement) {\n attrs['data-guid'] = record.Guid;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n attrs['data-group-index'] = resIndex.toString();\n }\n var appointmentWrapper = createElement('div', { className: cls.APPOINTMENT_CLASS, attrs: attrs });\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n if (record[this.fields.isReadonly]) {\n addClass([appointmentWrapper], 'e-read-only');\n }\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n var templateElement;\n var eventData = record.data;\n var eventObj = this.getEventData(record);\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n var scheduleId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.eventTemplateName;\n var templateId = scheduleId + viewName + 'eventTemplate';\n var eventTemplate = 'eventTemplate' + (this.isResourceEventTemplate ? '_' + resIndex : '');\n templateElement = this.parent.getAppointmentTemplate()(eventObj, this.parent, eventTemplate, templateId, false);\n }\n else {\n var eventLocation = (record[this.fields.location] || this.parent.eventSettings.fields.location.default || '');\n var appointmentSubject = createElement('div', { className: cls.SUBJECT_CLASS });\n this.parent.sanitize((eventSubject + (eventLocation ? '; ' + eventLocation : '')), appointmentSubject);\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventData[this.fields.startTime])\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventData[this.fields.endTime])\n });\n if (this.parent.currentView === 'Month') {\n if (record[this.fields.isAllDay]) {\n templateElement = [appointmentSubject];\n addClass([appointmentSubject], 'e-text-center');\n }\n else if (eventData.count <= 1 && !eventData.isLeft && !eventData.isRight) {\n templateElement = [appointmentStartTime, appointmentSubject];\n }\n else {\n templateElement = [];\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n else {\n var innerElement = void 0;\n if (record[this.fields.isAllDay]) {\n var allDayString = createElement('div', {\n className: cls.APPOINTMENT_TIME, innerHTML: this.parent.localeObj.getConstant('allDay')\n });\n innerElement = [appointmentSubject, allDayString];\n }\n else {\n var timeString = this.parent.getTimeString(eventData[this.fields.startTime])\n + ' - ' + this.parent.getTimeString(eventData[this.fields.endTime]);\n var appTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''), innerHTML: timeString\n });\n var appLocation = createElement('div', { className: cls.LOCATION_CLASS });\n this.parent.sanitize(eventLocation, appLocation);\n innerElement = [appointmentSubject, appTime, appLocation];\n }\n var wrap = createElement('div', { className: 'e-inner-wrap' });\n append(innerElement, wrap);\n templateElement = [wrap];\n }\n }\n append(templateElement, appointmentDetails);\n this.appendEventIcons(record, appointmentDetails);\n this.renderResizeHandler(appointmentWrapper, record.data, record[this.fields.isReadonly]);\n return appointmentWrapper;\n };\n MonthEvent.prototype.appendEventIcons = function (record, appointmentDetails) {\n var eventData = record.data;\n if (!isNullOrUndefined(record[this.fields.recurrenceRule]) || !isNullOrUndefined(record[this.fields.recurrenceID])) {\n var iconClass = (record[this.fields.id] === record[this.fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentDetails.appendChild(createElement('div', {\n className: cls.ICON + ' ' + iconClass + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : '')\n }));\n }\n if (eventData.isLeft) {\n var iconLeft = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_LEFT_CLASS\n });\n prepend([iconLeft], appointmentDetails);\n }\n if (eventData.isRight) {\n var iconRight = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_RIGHT_CLASS\n });\n append([iconRight], appointmentDetails);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MonthEvent.prototype.renderEvents = function (event, resIndex, eventsList) {\n var startTime = event[this.fields.startTime];\n var endTime = event[this.fields.endTime];\n var day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(startTime));\n if ((day < 0) || (startTime.getTime() < this.parent.minDate.getTime()) || (endTime.getTime() > this.parent.maxDate.getTime())) {\n return;\n }\n var overlapCount = this.getIndex(startTime);\n event.Index = overlapCount;\n var diffInDays = event.data.count;\n if (startTime.getTime() <= endTime.getTime()) {\n var appWidth = (diffInDays * this.cellWidth) - 5;\n var cellTd = this.workCells[parseInt(day.toString(), 10)];\n var appTop = (overlapCount * (this.eventHeight + EVENT_GAP));\n var height = this.monthHeaderHeight + ((overlapCount + 1) * (this.eventHeight + EVENT_GAP)) + this.moreIndicatorHeight;\n var enableAppRender = this.maxOrIndicator ? overlapCount < 1 ? true : false : this.cellHeight > height;\n if (this.parent.rowAutoHeight || enableAppRender) {\n this.renderedEvents.push(extend({}, event, null, true));\n var appointmentElement = void 0;\n if (this.inlineValue) {\n appointmentElement = this.parent.inlineModule.createInlineAppointmentElement();\n }\n else {\n appointmentElement = this.createAppointmentElement(event, resIndex);\n }\n this.applyResourceColor(appointmentElement, event, 'backgroundColor', this.groupOrder);\n this.wireAppointmentEvents(appointmentElement, event);\n setStyleAttribute(appointmentElement, { 'width': appWidth + 'px', 'top': appTop + 'px' });\n this.renderEventElement(event, appointmentElement, cellTd);\n if (this.parent.rowAutoHeight) {\n var firstChild = cellTd.parentElement.firstElementChild;\n this.updateCellHeight(firstChild, height);\n }\n }\n else {\n for (var i = 0; i < diffInDays; i++) {\n if (this.workCells[day + i]) {\n var indicator = this.workCells[day + i].querySelector('.' + cls.MORE_INDICATOR_CLASS);\n if (indicator) {\n var count = parseInt(indicator.getAttribute('data-count'), 10) + 1;\n indicator.setAttribute('data-count', count.toString());\n indicator.innerHTML = this.getMoreIndicatorText(count);\n }\n else {\n var startDate = new Date(this.dateRender[day + i].getTime());\n var endDate = util.addDays(this.dateRender[day + i], 1);\n var groupIndex = this.workCells[day + i].getAttribute('data-group-index');\n var moreIndicatorElement = this.getMoreIndicatorElement(1, startDate, endDate);\n if (!isNullOrUndefined(groupIndex)) {\n moreIndicatorElement.setAttribute('data-group-index', groupIndex);\n }\n moreIndicatorElement.style.top = (this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight) + 'px';\n moreIndicatorElement.style.width = this.cellWidth - 2 + 'px';\n this.renderElement(this.workCells[day + i], moreIndicatorElement);\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n }\n }\n }\n }\n };\n MonthEvent.prototype.updateCellHeight = function (cell, height) {\n if ((height > cell.offsetHeight)) {\n setStyleAttribute(cell, { 'height': height + 'px' });\n }\n };\n MonthEvent.prototype.updateBlockElements = function () {\n var blockElement = [].slice.call(this.element.querySelectorAll('.' + cls.BLOCK_APPOINTMENT_CLASS));\n for (var _i = 0, blockElement_1 = blockElement; _i < blockElement_1.length; _i++) {\n var element = blockElement_1[_i];\n var target = closest(element, 'tr');\n this.monthHeaderHeight = element.offsetParent.offsetTop - target.offsetTop;\n element.style.height = ((target.offsetHeight - 1) - this.monthHeaderHeight) + 'px';\n var firstChild = target.firstElementChild;\n var width = Math.round(element.offsetWidth / firstChild.offsetWidth);\n element.style.width = (firstChild.offsetWidth * width) + 'px';\n }\n };\n // eslint-disable-next-line max-len\n MonthEvent.prototype.getFilteredEvents = function (startDate, endDate, groupIndex, eventsList) {\n var filteredEvents;\n if (isNullOrUndefined(groupIndex)) {\n filteredEvents = this.filterEvents(startDate, endDate);\n }\n else {\n var data = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)];\n filteredEvents = this.filterEvents(startDate, endDate, isNullOrUndefined(eventsList) ? undefined : eventsList, data);\n }\n return filteredEvents;\n };\n MonthEvent.prototype.getOverlapEvents = function (date, appointments) {\n var appointmentsList = [];\n var dateTime = util.resetTime(date).getTime();\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= dateTime) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= dateTime)) {\n appointmentsList.push(app);\n }\n }\n return appointmentsList;\n };\n MonthEvent.prototype.getIndex = function (date) {\n var appIndex = -1;\n var appointments = this.renderedEvents;\n if (appointments.length > 0) {\n var appointmentsList = this.getOverlapEvents(date, appointments);\n var appLevel = appointmentsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n MonthEvent.prototype.moreIndicatorClick = function (event) {\n var _this = this;\n var target = closest(event.target, '.' + cls.MORE_INDICATOR_CLASS);\n var startDate = new Date(parseInt(target.getAttribute('data-start-date'), 10));\n var endDate = new Date(parseInt(target.getAttribute('data-end-date'), 10));\n var groupIndex = target.getAttribute('data-group-index');\n var moreArgs = {\n cancel: false, event: event, element: target, isPopupOpen: true,\n startTime: startDate, endTime: endDate, viewName: this.parent.getNavigateView()\n };\n if (groupIndex) {\n moreArgs.groupIndex = parseInt(groupIndex, 10);\n }\n this.parent.trigger(events.moreEventsClick, moreArgs, function (clickArgs) {\n if (!clickArgs.cancel) {\n if (clickArgs.isPopupOpen) {\n var filteredEvents = _this.getFilteredEvents(startDate, endDate, groupIndex);\n var moreArgs_1 = { date: startDate, event: filteredEvents, element: event.target };\n _this.parent.quickPopup.moreEventClick(moreArgs_1, endDate, groupIndex);\n }\n else {\n _this.parent.setProperties({ selectedDate: startDate }, true);\n _this.parent.changeView(clickArgs.viewName, event);\n }\n }\n });\n };\n MonthEvent.prototype.renderEventElement = function (event, appointmentElement, cellTd) {\n var _this = this;\n var eventType = appointmentElement.classList.contains(cls.BLOCK_APPOINTMENT_CLASS) ? 'blockEvent' : 'event';\n var isAppointment = appointmentElement.classList.contains(cls.APPOINTMENT_CLASS);\n var eventObj = this.getEventData(event);\n var args = { data: eventObj, element: appointmentElement, cancel: false, type: eventType };\n this.parent.trigger(events.eventRendered, args, function (eventArgs) {\n if (eventArgs.cancel) {\n _this.renderedEvents.pop();\n }\n else {\n _this.renderElement(cellTd, appointmentElement, isAppointment);\n }\n });\n };\n MonthEvent.prototype.getEventData = function (event) {\n var eventObj = extend({}, event, null, true);\n eventObj[this.fields.startTime] = event.data[this.fields.startTime];\n eventObj[this.fields.endTime] = event.data[this.fields.endTime];\n return eventObj;\n };\n MonthEvent.prototype.renderElement = function (cellTd, element, isAppointment) {\n if (isAppointment === void 0) { isAppointment = false; }\n if (this.maxOrIndicator && isAppointment) {\n this.setMaxEventHeight(element, cellTd);\n }\n var wrapperEle = cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (wrapperEle) {\n wrapperEle.appendChild(element);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(element);\n cellTd.appendChild(wrapper);\n }\n };\n MonthEvent.prototype.getMoreIndicatorElement = function (count, startDate, endDate) {\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n innerHTML: this.getMoreIndicatorText(count),\n attrs: {\n 'tabindex': '0',\n 'data-count': count.toString(),\n 'data-start-date': startDate.getTime().toString(),\n 'data-end-date': endDate.getTime().toString()\n }\n });\n return moreIndicatorElement;\n };\n MonthEvent.prototype.getMoreIndicatorText = function (count) {\n return '+' + this.parent.globalize.formatNumber(count) + ' ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));\n };\n MonthEvent.prototype.removeHeightProperty = function (selector) {\n var rows = [].slice.call(this.element.querySelectorAll('.' + selector + ' tbody tr'));\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n row.firstElementChild.style.height = '';\n }\n };\n MonthEvent.prototype.setMaxEventHeight = function (event, cell) {\n var headerHeight = util.getOuterHeight(cell.querySelector('.' + cls.DATE_HEADER_CLASS));\n var height = (cell.offsetHeight - headerHeight) - (this.maxHeight ? 0 : this.moreIndicatorHeight);\n setStyleAttribute(event, { 'height': height + 'px', 'align-items': 'center' });\n };\n MonthEvent.prototype.destroy = function () {\n this.element = null;\n this.fields = null;\n this.maxHeight = null;\n this.withIndicator = null;\n this.maxOrIndicator = null;\n this.moreIndicatorHeight = null;\n this.removeEventListener();\n _super.prototype.destroy.call(this);\n };\n return MonthEvent;\n}(EventBase));\nexport { MonthEvent };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, createElement, prepend, extend, formatUnit, append, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { VerticalView } from './vertical-view';\nimport { TimelineEvent } from '../event-renderer/timeline-view';\nimport { TimelineHeaderRow } from './timeline-header-row';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * timeline views\n */\nvar TimelineViews = /** @class */ (function (_super) {\n __extends(TimelineViews, _super);\n function TimelineViews(parent) {\n var _this = _super.call(this, parent) || this;\n _this.timelineAppointment = null;\n _this.baseCssClass = 'e-timeline-view';\n return _this;\n }\n TimelineViews.prototype.getModuleName = function () {\n return 'timelineViews';\n };\n TimelineViews.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n };\n TimelineViews.prototype.scrollTopPanel = function (target) {\n _super.prototype.scrollTopPanel.call(this, target);\n this.scrollHeaderLabels(target);\n };\n TimelineViews.prototype.scrollToWorkHour = function () {\n var start = this.parent.getStartEndTime(this.parent.workHours.start);\n var currDateTime = this.isWorkDay(this.parent.selectedDate) && this.parent.workHours.highlight &&\n !isNullOrUndefined(start) ? new Date(+this.parent.selectedDate).setHours(start.getHours(), start.getMinutes(), 0, 0)\n : new Date(+this.parent.selectedDate).setHours(0, 0, 0, 0);\n var queryString = '[data-date=\"' + new Date(currDateTime).getTime().toString() + '\"]';\n var firstWorkHourCell = this.element.querySelector(queryString);\n if (firstWorkHourCell) {\n this.getContentAreaElement().scrollLeft = !this.parent.enableRtl ? firstWorkHourCell.offsetLeft :\n -(this.parent.getContentTable().offsetWidth - firstWorkHourCell.offsetLeft - firstWorkHourCell.offsetWidth);\n }\n };\n TimelineViews.prototype.scrollToHour = function (hour, scrollDate) {\n var date;\n var index;\n if (scrollDate) {\n index = this.parent.getIndexOfDate(this.renderDates, util.resetTime(scrollDate));\n if (index >= 0) {\n date = scrollDate;\n if (!isNullOrUndefined(hour)) {\n var timeString = hour.split(':');\n if (timeString.length === 2) {\n date = new Date(scrollDate.setHours(parseInt(timeString[0], 10), parseInt(timeString[1], 10), 0));\n }\n }\n }\n }\n date = isNullOrUndefined(scrollDate) ? this.parent.getStartEndTime(hour) : date;\n if (isNullOrUndefined(date)) {\n return;\n }\n var scrollLeft;\n if (isNullOrUndefined(hour) || !this.parent.activeViewOptions.timeScale.enable) {\n scrollLeft = index * this.getWorkCellWidth();\n }\n else {\n scrollLeft = isNullOrUndefined(scrollDate) ? this.getLeftFromDateTime(null, date) :\n this.getLeftFromDateTime([index], date);\n }\n this.getScrollableElement().scrollLeft = !this.parent.enableRtl ? scrollLeft : -scrollLeft;\n };\n TimelineViews.prototype.generateColumnLevels = function () {\n var levels = [];\n var dateSlots = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n levels.push(dateSlots);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.generateResourceLevels(dateSlots, !this.parent.uiStateValues.isGroupAdaptive);\n }\n var hourSlots = [];\n if (this.parent.activeViewOptions.timeScale.enable) {\n hourSlots = this.generateTimeSlots(levels[levels.length - 1]);\n levels.push(hourSlots);\n }\n if (this.parent.activeViewOptions.headerRows.length > 0) {\n var renderGn = new TimelineHeaderRow(this.parent, this.renderDates);\n levels = renderGn.generateColumnLevels(dateSlots, hourSlots);\n }\n return levels;\n };\n TimelineViews.prototype.generateTimeSlots = function (dateSlots) {\n var _this = this;\n var handler = function (r) {\n r.type = r.first ? 'majorSlot' : 'minorSlot';\n r.className = r.first ? [cls.TIME_SLOT_CLASS] : [cls.TIME_SLOT_CLASS, cls.TIME_CELLS_CLASS];\n r.workDays = _this.parent.activeViewOptions.workDays;\n return r;\n };\n var timeSlotData = this.getTimeSlotRows(handler);\n var slots = [];\n for (var _i = 0, dateSlots_1 = dateSlots; _i < dateSlots_1.length; _i++) {\n var data = dateSlots_1[_i];\n data.colSpan = timeSlotData.length;\n var tempTimeSlots = extend([], timeSlotData, null, true);\n for (var _a = 0, tempTimeSlots_1 = tempTimeSlots; _a < tempTimeSlots_1.length; _a++) {\n var slot = tempTimeSlots_1[_a];\n var cellDate = util.resetTime(new Date('' + data.date));\n slot.date = util.setTime(cellDate, util.getDateInMs(slot.date));\n slots.push(slot);\n }\n }\n return slots;\n };\n TimelineViews.prototype.changeCurrentTimePosition = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.removeCurrentTimeIndicatorElements();\n var currentDateIndex = this.getCurrentTimeIndicatorIndex();\n var left = this.getLeftFromDateTime(currentDateIndex, this.parent.getCurrentTime());\n var height = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetHeight;\n var headerWrap = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n var contentWrap = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n contentWrap.appendChild(createElement('div', {\n className: cls.CURRENT_TIMELINE_CLASS,\n styles: (this.parent.enableRtl ? 'right' : 'left') + ':' + formatUnit(left) + '; height:' + formatUnit(height)\n }));\n if (this.parent.virtualScrollModule) {\n var timeIndicator = this.parent.element.querySelector('.' + cls.CURRENT_TIMELINE_CLASS);\n var element = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS + ' table');\n setStyleAttribute(timeIndicator, {\n transform: element.style.transform\n });\n }\n var currentTimeEle = createElement('div', {\n innerHTML: this.parent.getTimeString(this.parent.getCurrentTime()),\n className: cls.CURRENT_TIME_CLASS\n });\n headerWrap.appendChild(currentTimeEle);\n currentTimeEle.style[this.parent.enableRtl ? 'right' : 'left'] = formatUnit(left - (currentTimeEle.offsetWidth / 2));\n };\n TimelineViews.prototype.getLeftFromDateTime = function (currentDateIndex, date) {\n var startHour = this.getStartHour();\n var diffInDates = 0;\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n if (!isNullOrUndefined(currentDateIndex)) {\n if (currentDateIndex[0] !== 0) {\n var index = this.parent.activeView.colLevels.findIndex(function (level) { return level[0].type === 'dateHeader'; });\n if (this.parent.activeView.colLevels[parseInt(index.toString(), 10)] &&\n this.parent.activeView.colLevels[parseInt(index.toString(), 10)][0].colSpan) {\n diffInDates = currentDateIndex[0] * this.parent.activeView.colLevels[parseInt(index.toString(), 10)][0].colSpan *\n this.getWorkCellWidth();\n }\n else {\n var endHour = this.getEndHour();\n var end = (endHour.getHours() === 0) ? 24 : endHour.getHours();\n diffInMinutes = diffInMinutes + ((currentDateIndex[0]) * (((end - startHour.getHours()) * 60) +\n (endHour.getMinutes() - startHour.getMinutes())));\n }\n }\n }\n return diffInDates + ((diffInMinutes * this.getWorkCellWidth() * this.parent.activeViewOptions.timeScale.slotCount) /\n this.parent.activeViewOptions.timeScale.interval);\n };\n TimelineViews.prototype.getWorkCellWidth = function () {\n return this.element.querySelector('.e-work-cells').getBoundingClientRect().width;\n };\n TimelineViews.prototype.renderHeader = function () {\n var tr = createElement('tr');\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.parent.resourceBase.renderResourceHeaderIndent(tr);\n }\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimelineViews.prototype.createAllDayRow = function (table, tdData) { };\n TimelineViews.prototype.getCurrentTimeIndicatorIndex = function () {\n var currentDateIndex = [];\n var index = this.parent.getIndexOfDate(this.renderDates, util.resetTime(this.parent.getCurrentTime()));\n if (index >= 0) {\n currentDateIndex.push(index);\n }\n return currentDateIndex;\n };\n TimelineViews.prototype.renderContent = function () {\n var tr = createElement('tr');\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var resTd = createElement('td');\n resTd.appendChild(this.parent.resourceBase.createResourceColumn());\n tr.appendChild(resTd);\n }\n var workTd = createElement('td');\n var wrap = this.renderContentArea();\n wrap.appendChild(this.createEventTable(this.getRowCount()));\n this.collapseRows(wrap);\n workTd.appendChild(wrap);\n tr.appendChild(workTd);\n if (this.parent.virtualScrollModule) {\n this.parent.virtualScrollModule.renderVirtualTrack(wrap);\n }\n this.element.querySelector('tbody').appendChild(tr);\n };\n TimelineViews.prototype.getRowCount = function () {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n return this.parent.resourceBase.renderedResources.length;\n }\n return 1;\n };\n TimelineViews.prototype.getResourceTdData = function (i, tdData) {\n var resLevel = this.parent.resourceBase.renderedResources[parseInt(i.toString(), 10)];\n var resSHr = resLevel.resourceData[resLevel.resource.startHourField] || this.parent.workHours.start;\n var resEHr = resLevel.resourceData[resLevel.resource.endHourField] || this.parent.workHours.end;\n tdData.startHour = this.parent.getStartEndTime(resSHr);\n tdData.endHour = this.parent.getStartEndTime(resEHr);\n tdData.workDays = resLevel.resourceData[resLevel.resource.workDaysField] || this.parent.workDays;\n tdData.className = resLevel.className;\n tdData.groupIndex = resLevel.groupIndex;\n tdData.groupOrder = resLevel.groupOrder;\n return tdData;\n };\n TimelineViews.prototype.renderContentTable = function (table) {\n var tBody = table.querySelector('tbody');\n append(this.getContentRows(), tBody);\n };\n TimelineViews.prototype.getContentRows = function () {\n var rows = [];\n var tr = createElement('tr');\n var td = createElement('td', { attrs: { 'aria-selected': 'false' } });\n var trCount = this.getRowCount();\n for (var i = 0; i < trCount; i++) {\n var ntr = tr.cloneNode();\n for (var _i = 0, _a = this.colLevels[this.colLevels.length - 1]; _i < _a.length; _i++) {\n var tdData = _a[_i];\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n tdData = this.getResourceTdData(i, tdData);\n }\n var ntd = this.createContentTd(tdData, tdData, td);\n ntr.appendChild(ntd);\n }\n rows.push(ntr);\n }\n return rows;\n };\n TimelineViews.prototype.getContentTdClass = function (r) {\n return (r.first || !this.parent.activeViewOptions.timeScale.enable) ? [cls.WORK_CELLS_CLASS] :\n [cls.WORK_CELLS_CLASS, cls.ALTERNATE_CELLS_CLASS];\n };\n TimelineViews.prototype.renderEvents = function () {\n this.timelineAppointment = new TimelineEvent(this.parent, this.parent.activeViewOptions.timeScale.enable ? 'hour' : 'day');\n this.timelineAppointment.renderAppointments();\n this.parent.notify(event.eventsLoaded, {});\n };\n TimelineViews.prototype.getAdjustedDate = function (date) {\n if (!this.parent.activeViewOptions.timeScale.enable) {\n return new Date(date.setHours(0, 0, 0, 0));\n }\n else {\n var timeSlots = this.colLevels[this.colLevels.length - 1];\n for (var i = 0; i < timeSlots.length; i++) {\n if (timeSlots[parseInt(i.toString(), 10)].date.getTime() > date.getTime()) {\n return timeSlots[i - 1].date;\n }\n }\n }\n return null;\n };\n TimelineViews.prototype.destroy = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n if (this.timelineAppointment) {\n this.timelineAppointment.destroy();\n this.timelineAppointment = null;\n }\n _super.prototype.destroy.call(this);\n };\n return TimelineViews;\n}(VerticalView));\nexport { TimelineViews };\n","// Styles\nimport './VCheckbox.sass'\nimport '../../styles/components/_selection-controls.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport VInput from '../VInput'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\n\n/* @vue/component */\nexport default Selectable.extend({\n name: 'v-checkbox',\n\n props: {\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n },\n\n data () {\n return {\n inputIndeterminate: this.indeterminate,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls': true,\n 'v-input--checkbox': true,\n 'v-input--indeterminate': this.inputIndeterminate,\n }\n },\n computedIcon (): string {\n if (this.inputIndeterminate) {\n return this.indeterminateIcon\n } else if (this.isActive) {\n return this.onIcon\n } else {\n return this.offIcon\n }\n },\n // Do not return undefined if disabled,\n // according to spec, should still show\n // a color when disabled and active\n validationState (): string | undefined {\n if (this.isDisabled && !this.inputIndeterminate) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor !== null) return this.computedColor\n return undefined\n },\n },\n\n watch: {\n indeterminate (val) {\n // https://github.com/vuetifyjs/vuetify/issues/8270\n this.$nextTick(() => (this.inputIndeterminate = val))\n },\n inputIndeterminate (val) {\n this.$emit('update:indeterminate', val)\n },\n isActive () {\n if (!this.indeterminate) return\n this.inputIndeterminate = false\n },\n },\n\n methods: {\n genCheckbox () {\n const { title, ...checkboxAttrs } = this.attrs$\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.$createElement(VIcon, this.setTextColor(this.validationState, {\n props: {\n dense: this.dense,\n dark: this.dark,\n light: this.light,\n },\n }), this.computedIcon),\n this.genInput('checkbox', {\n ...checkboxAttrs,\n 'aria-checked': this.inputIndeterminate\n ? 'mixed'\n : this.isActive.toString(),\n }),\n this.genRipple(this.setTextColor(this.rippleState)),\n ])\n },\n genDefaultSlot () {\n return [\n this.genCheckbox(),\n this.genLabel(),\n ]\n },\n },\n})\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VerticalView } from './vertical-view';\n/**\n * day view\n */\nvar Day = /** @class */ (function (_super) {\n __extends(Day, _super);\n /**\n * Constructor for day view\n *\n * @param {Schedule} parent Accepts the schedule instance\n */\n function Day(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-day-view';\n return _this;\n }\n /**\n * Get module name.\n *\n * @returns {string} Returns the module name.\n */\n Day.prototype.getModuleName = function () {\n return 'day';\n };\n return Day;\n}(VerticalView));\nexport { Day };\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"spinner spinner--socker\",style:(_vm.styles)},[_c('div',{staticClass:\"spinner-inner\",style:(_vm.innerStyles)},[_vm._m(0),_vm._m(1),_vm._m(2),_vm._m(3),_vm._m(4),_vm._m(5),_vm._m(6),_vm._m(7),_vm._m(8),_vm._m(9),_vm._m(10),_vm._m(11),_vm._m(12),_vm._m(13),_vm._m(14),_vm._m(15),_vm._m(16),_vm._m(17),_vm._m(18),_vm._m(19),_vm._m(20),_vm._m(21),_vm._m(22),_vm._m(23),_vm._m(24),_vm._m(25),_vm._m(26),_vm._m(27),_vm._m(28),_vm._m(29),_vm._m(30),_vm._m(31),_vm._m(32),_vm._m(33),_vm._m(34),_vm._m(35),_vm._m(36)])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel center-gel\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c1 r1\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c2 r1\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c3 r1\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c4 r1\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c5 r1\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c6 r1\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c7 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c8 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c9 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c10 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c11 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c12 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c13 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c14 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c15 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c16 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c17 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c18 r2\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c19 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c20 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c21 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c22 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c23 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c24 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c25 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c26 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c28 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c29 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c30 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c31 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c32 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c33 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c34 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c35 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c36 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gel c37 r3\"},[_c('div',{staticClass:\"hex-brick h1\"}),_c('div',{staticClass:\"hex-brick h2\"}),_c('div',{staticClass:\"hex-brick h3\"})])\n}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Loading.vue?vue&type=template&id=1fa53aeb&scoped=true\"\nimport script from \"./Loading.vue?vue&type=script&lang=js\"\nexport * from \"./Loading.vue?vue&type=script&lang=js\"\nimport style0 from \"./Loading.vue?vue&type=style&index=0&id=1fa53aeb&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1fa53aeb\",\n null\n \n)\n\nexport default component.exports","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VerticalView } from './vertical-view';\n/**\n * week view\n */\nvar Week = /** @class */ (function (_super) {\n __extends(Week, _super);\n /**\n * Constructor for week view\n *\n * @param {Schedule} parent Accepts the schedule instance\n */\n function Week(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-week-view';\n return _this;\n }\n Week.prototype.startDate = function () {\n return this.getViewStartDate();\n };\n Week.prototype.endDate = function () {\n return this.getViewEndDate();\n };\n /**\n * Get module name.\n *\n * @returns {string} Returns the module name.\n */\n Week.prototype.getModuleName = function () {\n return 'week';\n };\n return Week;\n}(VerticalView));\nexport { Week };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { append, createElement, extend, EventHandler, Animation, formatUnit } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { EventBase } from './event-base';\nimport * as util from '../base/util';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Vertical view appointment rendering\n */\nvar VerticalEvent = /** @class */ (function (_super) {\n __extends(VerticalEvent, _super);\n function VerticalEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dateRender = [];\n _this.renderedEvents = [];\n _this.renderedAllDayEvents = [];\n _this.overlapEvents = [];\n _this.moreEvents = [];\n _this.overlapList = [];\n _this.allDayEvents = [];\n _this.slotCount = _this.parent.activeViewOptions.timeScale.slotCount;\n _this.interval = _this.parent.activeViewOptions.timeScale.interval;\n _this.allDayLevel = 0;\n _this.startHour = _this.parent.activeView.getStartHour();\n _this.endHour = _this.parent.activeView.getEndHour();\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.animation = new Animation({ progress: _this.animationUiUpdate.bind(_this) });\n _this.addEventListener();\n return _this;\n }\n VerticalEvent.prototype.renderAppointments = function () {\n if (isNullOrUndefined(this.parent)) {\n return;\n }\n if (this.parent.dragAndDropModule) {\n this.parent.dragAndDropModule.setDragArea();\n }\n this.isResourceEventTemplate = this.parent.isSpecificResourceEvents();\n var wrapperElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.BLOCK_APPOINTMENT_CLASS +\n ',.' + cls.APPOINTMENT_CLASS + ',.' + cls.ROW_COUNT_WRAPPER_CLASS));\n var isDragging = (this.parent.crudModule && this.parent.crudModule.crudObj.isCrudAction) ? true : false;\n for (var _i = 0, wrapperElements_1 = wrapperElements; _i < wrapperElements_1.length; _i++) {\n var wrapper = wrapperElements_1[_i];\n if (isDragging && !(wrapper.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) ||\n wrapper.classList.contains(cls.ROW_COUNT_WRAPPER_CLASS))) {\n var groupIndex = parseInt(wrapper.getAttribute('data-group-index'), 10);\n for (var j = 0, len = this.parent.crudModule.crudObj.sourceEvent.length; j < len; j++) {\n if (groupIndex === this.parent.crudModule.crudObj.sourceEvent[parseInt(j.toString(), 10)].groupIndex ||\n groupIndex === this.parent.crudModule.crudObj.targetEvent[parseInt(j.toString(), 10)].groupIndex) {\n remove(wrapper);\n }\n }\n }\n else {\n remove(wrapper);\n }\n }\n if (!this.element.querySelector('.' + cls.WORK_CELLS_CLASS)) {\n return;\n }\n if (this.parent.virtualScrollModule) {\n this.parent.virtualScrollModule.updateFocusedWorkCell();\n }\n this.allDayElement = [].slice.call(this.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS));\n this.setAllDayRowHeight(0);\n if (this.parent.eventsProcessed.length === 0 && this.parent.blockProcessed.length === 0) {\n return;\n }\n var expandCollapse = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n EventHandler.remove(expandCollapse, 'click', this.rowExpandCollapse);\n EventHandler.add(expandCollapse, 'click', this.rowExpandCollapse, this);\n this.renderedEvents = [];\n this.renderedAllDayEvents = [];\n this.initializeValues();\n this.processBlockEvents();\n this.renderEvents('normalEvents');\n if (this.allDayEvents.length > 0) {\n this.allDayEvents = this.allDayEvents.filter(function (item, index, arr) {\n return index === arr.map(function (item) { return item.Guid; }).indexOf(item.Guid);\n });\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n this.slots.push(this.parent.activeView.renderDates.map(function (date) { return +date; }));\n this.renderEvents('allDayEvents');\n this.animation.animate(this.allDayElement[0]);\n }\n this.parent.notify(events.contentReady, {});\n addClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n if (isDragging) {\n this.parent.crudModule.crudObj.isCrudAction = false;\n }\n this.parent.renderTemplates();\n };\n VerticalEvent.prototype.initializeValues = function () {\n this.resources = (this.parent.activeViewOptions.group.resources.length > 0) ? this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel : [];\n if (this.resources.length > 0 && this.parent.activeViewOptions.allowVirtualScrolling && this.parent.virtualScrollModule) {\n this.resources = this.parent.resourceBase.renderedResources;\n }\n this.cellHeight =\n parseFloat(this.parent.element.querySelector('.e-content-wrap tbody tr').getBoundingClientRect().height.toFixed(2));\n this.dateRender[0] = this.parent.activeView.renderDates;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n for (var i = 0, len = this.resources.length; i < len; i++) {\n this.dateRender[parseInt(i.toString(), 10)] = this.resources[parseInt(i.toString(), 10)].renderDates;\n }\n }\n };\n VerticalEvent.prototype.getHeight = function (start, end) {\n var appHeight = (util.getUniversalTime(end) - util.getUniversalTime(start)) /\n util.MS_PER_MINUTE * (this.cellHeight * this.slotCount) / this.interval;\n appHeight = (appHeight <= 0) ? this.cellHeight : appHeight;\n return appHeight;\n };\n VerticalEvent.prototype.appendEvent = function (eventObj, appointmentElement, index, appLeft) {\n var appointmentWrap = this.element.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS + '[id=\"' + cls.APPOINTMENT_WRAPPER_CLASS + '-' + index + '\"]');\n if (this.parent.enableRtl) {\n setStyleAttribute(appointmentElement, { 'right': appLeft });\n }\n else {\n setStyleAttribute(appointmentElement, { 'left': appLeft });\n }\n var eventType = appointmentElement.classList.contains(cls.BLOCK_APPOINTMENT_CLASS) ? 'blockEvent' : 'event';\n var args = {\n data: extend({}, eventObj, null, true),\n element: appointmentElement, cancel: false, type: eventType\n };\n this.parent.trigger(events.eventRendered, args, function (eventArgs) {\n if (!eventArgs.cancel) {\n appointmentWrap.appendChild(appointmentElement);\n }\n });\n };\n VerticalEvent.prototype.processBlockEvents = function () {\n var resources = this.getResourceList();\n var dateCount = this.getStartCount();\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\n var resource = resources_1[_i];\n var renderDates = this.dateRender[parseInt(resource.toString(), 10)];\n for (var day = 0, length_1 = renderDates.length; day < length_1; day++) {\n var startDate = new Date(renderDates[parseInt(day.toString(), 10)].getTime());\n var endDate = util.addDays(renderDates[parseInt(day.toString(), 10)], 1);\n var filterEvents = this.filterEvents(startDate, endDate, this.parent.blockProcessed, this.resources[parseInt(resource.toString(), 10)]);\n for (var _a = 0, filterEvents_1 = filterEvents; _a < filterEvents_1.length; _a++) {\n var event_1 = filterEvents_1[_a];\n if (this.parent.resourceBase) {\n this.setValues(event_1, resource);\n }\n this.renderBlockEvents(event_1, day, resource, dateCount);\n this.cssClass = null;\n this.groupOrder = null;\n }\n dateCount += 1;\n }\n }\n };\n VerticalEvent.prototype.renderBlockEvents = function (eventObj, dayIndex, resource, dayCount) {\n var spannedData = this.isSpannedEvent(eventObj, dayIndex, resource);\n var eStart = spannedData[this.fields.startTime];\n var eEnd = spannedData[this.fields.endTime];\n var currentDate = util.resetTime(new Date(this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n if (eStart <= eEnd && this.isValidEvent(eventObj, eStart, eEnd, schedule) && this.isWorkDayAvailable(resource, eStart)) {\n var blockTop = void 0;\n var blockHeight = void 0;\n if (spannedData[this.fields.isAllDay]) {\n var contentWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS + ' table');\n blockHeight = formatUnit(contentWrap.offsetHeight);\n blockTop = formatUnit(0);\n }\n else {\n blockHeight = formatUnit(this.getHeight(eStart, eEnd));\n blockTop = formatUnit(this.getTopValue(eStart, dayIndex, resource));\n }\n var appointmentElement = this.createBlockAppointmentElement(eventObj, resource, this.isResourceEventTemplate);\n setStyleAttribute(appointmentElement, { 'width': '100%', 'height': blockHeight, 'top': blockTop });\n var index = this.getDayIndex(dayIndex, resource, dayCount);\n this.appendEvent(eventObj, appointmentElement, index, '0px');\n }\n };\n VerticalEvent.prototype.renderEvents = function (eventType) {\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n var eventCollection = (eventType === 'allDayEvents') ? this.sortByDateTime(this.allDayEvents) : undefined;\n var resources = this.getResourceList();\n var dateCount = this.getStartCount();\n var isRender;\n var appHeight = eventType === 'allDayEvents' ? util.getElementHeightFromClass(this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS), cls.APPOINTMENT_CLASS) : 0;\n var allDayRowTop = eventType === 'allDayEvents' && this.allDayElement.length > 0 ? this.allDayElement[0].offsetTop : 0;\n var _loop_1 = function (resource) {\n isRender = true;\n if (this_1.parent.crudModule && this_1.parent.crudModule.crudObj.isCrudAction && eventType !== 'allDayEvents'\n && !this_1.parent.uiStateValues.isGroupAdaptive) {\n if (this_1.parent.crudModule.crudObj.sourceEvent.filter(function (data) { return data.groupIndex === resource; }).length === 0 &&\n this_1.parent.crudModule.crudObj.targetEvent.filter(function (data) { return data.groupIndex === resource; }).length === 0) {\n isRender = false;\n }\n }\n this_1.slots = [];\n var renderDates = this_1.dateRender[parseInt(resource.toString(), 10)];\n var renderedDate = this_1.getRenderedDates(renderDates) || renderDates;\n this_1.slots.push(renderDates.map(function (date) { return +date; }));\n for (var day = 0, length_2 = renderDates.length; day < length_2 &&\n renderDates[parseInt(day.toString(), 10)] <= renderedDate[renderedDate.length - 1]; day++) {\n this_1.renderedEvents = [];\n var startDate = new Date(renderDates[parseInt(day.toString(), 10)].getTime());\n var endDate = util.addDays(renderDates[parseInt(day.toString(), 10)], 1);\n var filterEvents = this_1.filterEvents(startDate, endDate, eventCollection, this_1.resources[parseInt(resource.toString(), 10)]);\n if (isRender) {\n for (var _i = 0, filterEvents_2 = filterEvents; _i < filterEvents_2.length; _i++) {\n var event_2 = filterEvents_2[_i];\n if (this_1.parent.resourceBase) {\n this_1.setValues(event_2, resource);\n }\n if (eventType === 'allDayEvents') {\n this_1.renderAllDayEvents(event_2, day, resource, dateCount, false, allDayRowTop, appHeight);\n }\n else {\n if (this_1.isAllDayAppointment(event_2)) {\n this_1.allDayEvents.push(extend({}, event_2, null, true));\n }\n else {\n if (this_1.parent.eventSettings.enableMaxHeight) {\n if (this_1.getOverlapIndex(event_2, day, false, resource) > 0) {\n continue;\n }\n }\n this_1.renderNormalEvents(event_2, day, resource, dateCount);\n }\n }\n this_1.cssClass = null;\n this_1.groupOrder = null;\n }\n }\n else {\n for (var _a = 0, filterEvents_3 = filterEvents; _a < filterEvents_3.length; _a++) {\n var event_3 = filterEvents_3[_a];\n if (this_1.isAllDayAppointment(event_3)) {\n this_1.allDayEvents.push(extend({}, event_3, null, true));\n }\n }\n }\n dateCount += 1;\n }\n };\n var this_1 = this;\n for (var _i = 0, resources_2 = resources; _i < resources_2.length; _i++) {\n var resource = resources_2[_i];\n _loop_1(resource);\n }\n };\n VerticalEvent.prototype.getStartCount = function () {\n return this.parent.virtualScrollModule && this.parent.activeViewOptions.allowVirtualScrolling && this.parent.timeScale.enable ?\n parseInt(this.element.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).getAttribute('id').split('-').slice(-1)[0], 10) : 0;\n };\n VerticalEvent.prototype.getDayIndex = function (dayIndex, resource, dayCount) {\n var _this = this;\n if (!this.parent.activeViewOptions.group.byDate) {\n return dayCount;\n }\n if (this.parent.activeViewOptions.group.byDate && !this.parent.activeViewOptions.group.hideNonWorkingDays) {\n var renderedIndex = this.parent.resourceBase.lastResourceLevel[0].renderDates.indexOf(this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)]);\n return (this.resources.length * renderedIndex) + resource;\n }\n var dateIndex = 0;\n var firstColumn = this.parent.activeView.colLevels[0];\n var currentDate = this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)].getTime();\n var currentResources = [];\n for (var i = 0; i < firstColumn.length; i++) {\n currentResources = this.parent.resourceBase.resourceDateTree[parseInt(i.toString(), 10)];\n if (currentDate === firstColumn[parseInt(i.toString(), 10)].date.getTime()) {\n break;\n }\n dateIndex = dateIndex + firstColumn[parseInt(i.toString(), 10)].colSpan;\n }\n var resIndex = currentResources.findIndex(function (x) { return x.groupOrder.toString() ===\n _this.resources[parseInt(resource.toString(), 10)].groupOrder.toString(); });\n if (resIndex < 0) {\n return dateIndex;\n }\n return dateIndex + resIndex;\n };\n VerticalEvent.prototype.setValues = function (event, resourceIndex) {\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.cssClass = this.resources[parseInt(resourceIndex.toString(), 10)].cssClass;\n this.groupOrder = this.resources[parseInt(resourceIndex.toString(), 10)].groupOrder;\n }\n else {\n this.cssClass = this.parent.resourceBase.getCssClass(event);\n }\n };\n VerticalEvent.prototype.getResourceList = function () {\n // eslint-disable-next-line prefer-spread\n var resources = Array.apply(null, {\n length: (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) ?\n this.resources.length : 1\n }).map(function (value, index) { return index; });\n return resources;\n };\n // eslint-disable-next-line max-len\n VerticalEvent.prototype.createAppointmentElement = function (record, isAllDay, data, resource) {\n var fieldMapping = this.parent.eventFields;\n var recordSubject = (record[fieldMapping.subject] || this.parent.eventSettings.fields.subject.default\n || this.parent.localeObj.getConstant('addTitle'));\n var appointmentWrapper = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-id': 'Appointment_' + record[fieldMapping.id],\n 'data-guid': record.Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),\n 'aria-label': this.parent.getAnnouncementString(record)\n }\n });\n if (record[this.fields.isReadonly]) {\n addClass([appointmentWrapper], 'e-read-only');\n }\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex : resource;\n appointmentWrapper.setAttribute('data-group-index', resourceIndex.toString());\n }\n var templateElement;\n var eventData = data;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n var elementId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.eventTemplateName;\n var templateId = elementId + viewName + 'eventTemplate';\n var resIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex : resource;\n var templateName = 'eventTemplate' + (this.isResourceEventTemplate ? '_' + resIndex : '');\n templateElement = this.parent.getAppointmentTemplate()(record, this.parent, templateName, templateId, false);\n }\n else {\n var appointmentSubject = createElement('div', { className: cls.SUBJECT_CLASS });\n this.parent.sanitize(recordSubject, appointmentSubject);\n if (isAllDay) {\n if (record[fieldMapping.isAllDay]) {\n templateElement = [appointmentSubject];\n }\n else {\n templateElement = [];\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(record[fieldMapping.startTime])\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(record[fieldMapping.endTime])\n });\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n else {\n var timeStr = this.parent.getTimeString(record[fieldMapping.startTime]) + ' - ' +\n this.parent.getTimeString(record[fieldMapping.endTime]);\n var appointmentTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: timeStr\n });\n var appointmentLocation = createElement('div', { className: cls.LOCATION_CLASS });\n this.parent.sanitize((record[fieldMapping.location] || this.parent.eventSettings.fields.location.default || ''), appointmentLocation);\n templateElement = [appointmentSubject, appointmentTime, appointmentLocation];\n }\n }\n append(templateElement, appointmentDetails);\n if (!this.parent.isAdaptive &&\n (!isNullOrUndefined(record[fieldMapping.recurrenceRule]) || !isNullOrUndefined(record[fieldMapping.recurrenceID]))) {\n var iconClass = (record[fieldMapping.id] === record[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n var recurrenceIcon = createElement('div', { className: cls.ICON + ' ' + iconClass });\n if (isAllDay) {\n appointmentDetails.appendChild(recurrenceIcon);\n }\n else {\n appointmentWrapper.appendChild(recurrenceIcon);\n }\n }\n this.parent.eventBase.renderSpannedIcon(isAllDay ? appointmentDetails : appointmentWrapper, eventData);\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n this.applyResourceColor(appointmentWrapper, record, 'backgroundColor', this.groupOrder);\n this.renderResizeHandler(appointmentWrapper, eventData, record[this.fields.isReadonly]);\n return appointmentWrapper;\n };\n VerticalEvent.prototype.createMoreIndicator = function (allDayRow, count, currentDay) {\n var index = currentDay + count;\n var countWrapper = allDayRow[parseInt(index.toString(), 10)];\n if (countWrapper.childElementCount <= 0) {\n var innerCountWrap = createElement('div', {\n className: cls.ROW_COUNT_WRAPPER_CLASS,\n id: cls.ROW_COUNT_WRAPPER_CLASS + '-' + index.toString()\n });\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n attrs: { 'tabindex': '0', 'data-index': index.toString(), 'data-count': '1' },\n innerHTML: '+1 ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))\n });\n innerCountWrap.appendChild(moreIndicatorElement);\n countWrapper.appendChild(innerCountWrap);\n EventHandler.add(moreIndicatorElement, 'click', this.rowExpandCollapse, this);\n }\n else {\n var countCell = countWrapper.querySelector('.' + cls.MORE_INDICATOR_CLASS);\n var moreCount = parseInt(countCell.getAttribute('data-count'), 10) + 1;\n countCell.setAttribute('data-count', moreCount.toString());\n countCell.innerHTML = '+' + this.parent.globalize.formatNumber(moreCount) + ' ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));\n }\n };\n VerticalEvent.prototype.isSpannedEvent = function (record, day, resource) {\n var currentDate = util.resetTime(this.dateRender[parseInt(resource.toString(), 10)][parseInt(day.toString(), 10)]);\n var renderedDate = this.getRenderedDates(this.dateRender[parseInt(resource.toString(), 10)]) || [currentDate];\n var currentDay = renderedDate.filter(function (date) { return date.getDay() === day; });\n if (currentDay.length === 0) {\n currentDate = util.resetTime(renderedDate[0]);\n }\n var field = this.parent.eventFields;\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var event = extend({}, record, null, true);\n event.isSpanned = { isBottom: false, isTop: false };\n if (record[field.startTime].getTime() < schedule.startHour.getTime()) {\n event[field.startTime] = schedule.startHour;\n event.isSpanned.isTop = true;\n }\n if (record[field.endTime].getTime() > schedule.endHour.getTime()) {\n event[field.endTime] = schedule.endHour;\n event.isSpanned.isBottom = true;\n }\n var eventDates = this.updateEventMinimumDuration(schedule, event[field.startTime], event[field.endTime]);\n event[field.startTime] = eventDates.startDate;\n event[field.endTime] = eventDates.endDate;\n return event;\n };\n VerticalEvent.prototype.isWorkDayAvailable = function (resource, start) {\n if (this.parent.activeViewOptions.group.hideNonWorkingDays && this.resources.length > 0) {\n var workDays = this.resources[parseInt(resource.toString(), 10)].\n resourceData[this.resources[parseInt(resource.toString(), 10)].resource.workDaysField] ||\n this.parent.activeViewOptions.workDays;\n return workDays && workDays.indexOf(start.getDay()) >= 0;\n }\n return true;\n };\n // eslint-disable-next-line max-len\n VerticalEvent.prototype.renderAllDayEvents = function (eventObj, dayIndex, resource, dayCount, inline, cellTop, eventHeight) {\n var _this = this;\n var currentDates = this.getRenderedDates(this.dateRender[parseInt(resource.toString(), 10)]) ||\n this.dateRender[parseInt(resource.toString(), 10)];\n if (this.parent.activeViewOptions.group.byDate) {\n this.slots[0] = [this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)].getTime()];\n currentDates = [this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)]];\n }\n var record = this.splitEvent(eventObj, currentDates)[0];\n var eStart = new Date(record[this.parent.eventFields.startTime].getTime());\n var eEnd = new Date(record[this.parent.eventFields.endTime].getTime());\n var appWidth = 0;\n var topValue = 1;\n var isDateRange = currentDates[0].getTime() <= eStart.getTime() &&\n util.addDays(currentDates.slice(-1)[0], 1).getTime() >= eStart.getTime();\n if (eStart <= eEnd && isDateRange && this.isWorkDayAvailable(resource, eStart)) {\n var isAlreadyRendered = [];\n if (this.renderedAllDayEvents[parseInt(resource.toString(), 10)]) {\n isAlreadyRendered = this.renderedAllDayEvents[parseInt(resource.toString(), 10)].filter(function (event) {\n return event.Guid === eventObj.Guid;\n });\n if (this.parent.activeViewOptions.group.byDate) {\n isAlreadyRendered = isAlreadyRendered.filter(function (event) {\n return event[_this.parent.eventFields.startTime] >= currentDates[parseInt(dayIndex.toString(), 10)] &&\n event[_this.parent.eventFields.endTime] <=\n util.addDays(new Date(+currentDates[parseInt(dayIndex.toString(), 10)]), 1);\n });\n }\n }\n if (isAlreadyRendered.length === 0) {\n var allDayDifference_1 = record.data.count;\n var allDayIndex_1 = this.getOverlapIndex(record, dayIndex, true, resource);\n record.Index = allDayIndex_1;\n this.allDayLevel = (this.allDayLevel < allDayIndex_1) ? allDayIndex_1 : this.allDayLevel;\n var widthAdjustment = record.data.isRight ? 0 :\n this.parent.currentView === 'Day' ? 4 : 7;\n if (allDayDifference_1 >= 0) {\n appWidth = (allDayDifference_1 * 100) - widthAdjustment;\n }\n if (isNullOrUndefined(this.renderedAllDayEvents[parseInt(resource.toString(), 10)])) {\n this.renderedAllDayEvents[parseInt(resource.toString(), 10)] = [];\n }\n this.renderedAllDayEvents[parseInt(resource.toString(), 10)].push(extend({}, record, null, true));\n var allDayRow_1 = [].slice.call(this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).children);\n var wIndex_1 = this.getDayIndex(dayIndex, resource, dayCount);\n var eventWrapper_1 = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS +\n ':nth-child(' + (wIndex_1 + 1) + ')');\n var appointmentElement_1;\n if (inline) {\n appointmentElement_1 = this.parent.inlineModule.createInlineAppointmentElement(eventObj);\n }\n else {\n appointmentElement_1 = this.createAppointmentElement(eventObj, true, record.data, resource);\n }\n addClass([appointmentElement_1], cls.ALLDAY_APPOINTMENT_CLASS);\n var eventData = extend({}, record.data, null, true);\n eventObj.data = eventData;\n var args = { data: eventObj, element: appointmentElement_1, cancel: false };\n this.parent.trigger(events.eventRendered, args, function (eventArgs) {\n if (!eventArgs.cancel) {\n eventWrapper_1.appendChild(appointmentElement_1);\n topValue += (allDayIndex_1 === 0 ? cellTop : (cellTop + (allDayIndex_1 * eventHeight))) + 1;\n setStyleAttribute(appointmentElement_1, { 'width': appWidth + '%', 'top': formatUnit(topValue) });\n if (allDayIndex_1 > 1) {\n _this.moreEvents.push(appointmentElement_1);\n for (var count = 0, length_3 = allDayDifference_1; count < length_3; count++) {\n _this.createMoreIndicator(allDayRow_1, count, wIndex_1);\n }\n }\n _this.allDayElement[0].setAttribute('data-count', _this.allDayLevel.toString());\n var allDayRowHeight = ((!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) ?\n (3 * eventHeight) : ((_this.allDayLevel + 1) * eventHeight)) + 4;\n _this.setAllDayRowHeight(allDayRowHeight);\n _this.addOrRemoveClass();\n _this.wireAppointmentEvents(appointmentElement_1, eventObj);\n }\n });\n }\n }\n };\n VerticalEvent.prototype.renderNormalEvents = function (eventObj, dayIndex, resource, dayCount, inline) {\n var record = this.isSpannedEvent(eventObj, dayIndex, resource);\n var eStart = record[this.fields.startTime];\n var eEnd = record[this.fields.endTime];\n var appWidth = '0%';\n var appLeft = '0%';\n var topValue = 0;\n var currentDate = util.resetTime(new Date(this.dateRender[parseInt(resource.toString(), 10)][parseInt(dayIndex.toString(), 10)].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var isValidEvent = this.isValidEvent(eventObj, eStart, eEnd, schedule);\n if ((eStart.getTime() < this.parent.minDate.getTime()) || (eEnd.getTime() > this.parent.maxDate.getTime())) {\n return;\n }\n if (eStart <= eEnd && isValidEvent && this.isWorkDayAvailable(resource, eStart)) {\n var appHeight = this.getHeight(eStart, eEnd);\n if (eStart.getTime() > schedule.startHour.getTime()) {\n topValue = this.getTopValue(eStart, dayIndex, resource);\n }\n var appIndex = this.getOverlapIndex(record, dayIndex, false, resource);\n record.Index = appIndex;\n this.overlapList.push(record);\n if (this.overlapList.length > 1) {\n if (isNullOrUndefined(this.overlapEvents[parseInt(appIndex.toString(), 10)])) {\n this.overlapEvents[parseInt(appIndex.toString(), 10)] = [];\n }\n this.overlapEvents[parseInt(appIndex.toString(), 10)].push(record);\n }\n else {\n this.overlapEvents = [];\n this.overlapEvents.push([record]);\n }\n appWidth = this.getEventWidth();\n var argsData = {\n index: appIndex, left: appLeft, width: appWidth,\n day: dayCount, dayIndex: dayIndex, record: record, resource: resource\n };\n var tempData = this.adjustOverlapElements(argsData);\n appWidth = (tempData.appWidth);\n if (isNullOrUndefined(this.renderedEvents[parseInt(resource.toString(), 10)])) {\n this.renderedEvents[parseInt(resource.toString(), 10)] = [];\n }\n this.renderedEvents[parseInt(resource.toString(), 10)].push(extend({}, record, null, true));\n var appointmentElement = void 0;\n if (inline) {\n appointmentElement = this.parent.inlineModule.createInlineAppointmentElement(eventObj);\n }\n else {\n appointmentElement = this.createAppointmentElement(eventObj, false, record.isSpanned, resource);\n }\n setStyleAttribute(appointmentElement, {\n 'width': (this.parent.eventSettings.enableMaxHeight ? '100%' : tempData.appWidth),\n 'height': appHeight + 'px', 'top': topValue + 'px'\n });\n var iconHeight = appointmentElement.querySelectorAll('.' + cls.EVENT_INDICATOR_CLASS).length * 15;\n var maxHeight = appHeight - 40 - iconHeight;\n var subjectElement = appointmentElement.querySelector('.' + cls.SUBJECT_CLASS);\n if (!this.parent.isAdaptive && subjectElement) {\n subjectElement.style.maxHeight = formatUnit(maxHeight);\n }\n var index = this.getDayIndex(dayIndex, resource, dayCount);\n var eventData = {};\n eventData[this.fields.startTime] = eventObj[this.fields.startTime];\n eventData[this.fields.endTime] = eventObj[this.fields.endTime];\n record.data = eventData;\n this.appendEvent(record, appointmentElement, index, tempData.appLeft);\n this.wireAppointmentEvents(appointmentElement, eventObj);\n }\n };\n VerticalEvent.prototype.getEventWidth = function () {\n var width = this.parent.currentView === 'Day' ? 97 : 94;\n var tempWidth = ((width - this.overlapEvents.length) / this.overlapEvents.length);\n return (tempWidth < 0 ? 0 : tempWidth) + '%';\n };\n VerticalEvent.prototype.getEventLeft = function (appWidth, index) {\n var tempLeft = (parseFloat(appWidth) + 1) * index;\n return (tempLeft > 99 ? 99 : tempLeft) + '%';\n };\n VerticalEvent.prototype.getTopValue = function (date, day, resource) {\n var startEndHours = util.getStartEndHours(util.resetTime(this.dateRender[parseInt(resource.toString(), 10)][parseInt(day.toString(), 10)]), this.startHour, this.endHour);\n var startHour = startEndHours.startHour;\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (this.parent.activeViewOptions.timeScale.enable) ? ((diffInMinutes * this.cellHeight * this.slotCount) / this.interval) : 0;\n };\n VerticalEvent.prototype.getOverlapIndex = function (record, day, isAllDay, resource) {\n var _this = this;\n var fieldMapping = this.parent.eventFields;\n var eventsList = [];\n var appIndex = -1;\n this.overlapEvents = [];\n if (isAllDay) {\n if (!isNullOrUndefined(this.renderedAllDayEvents[parseInt(resource.toString(), 10)])) {\n var date_1 = util.resetTime(new Date(this.dateRender[parseInt(resource.toString(), 10)][parseInt(day.toString(), 10)].getTime()));\n eventsList = this.renderedAllDayEvents[parseInt(resource.toString(), 10)].filter(function (app) {\n return util.resetTime(app[fieldMapping.startTime]).getTime() <= date_1.getTime() &&\n util.resetTime(app[fieldMapping.endTime]).getTime() >= date_1.getTime();\n });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n eventsList = this.filterEventsByResource(this.resources[parseInt(resource.toString(), 10)], eventsList);\n }\n }\n }\n else {\n var appointmentList_1 = !isNullOrUndefined(this.renderedEvents[parseInt(resource.toString(), 10)]) ?\n this.renderedEvents[parseInt(resource.toString(), 10)] : [];\n var appointment_1 = [];\n var recordStart_1 = record[fieldMapping.startTime];\n var recordEnd_1 = record[fieldMapping.endTime];\n this.overlapList = appointmentList_1.filter(function (data) {\n return (data[fieldMapping.endTime] > recordStart_1 && data[fieldMapping.startTime] <= recordEnd_1) ||\n (data[fieldMapping.startTime] >= recordEnd_1 && data[fieldMapping.endTime] <= recordStart_1) ||\n (data[fieldMapping.endTime].getTime() === data[fieldMapping.startTime].getTime() &&\n data[fieldMapping.startTime].getTime() === recordStart_1.getTime() && data[fieldMapping.endTime] < recordEnd_1);\n });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.overlapList = this.filterEventsByResource(this.resources[parseInt(resource.toString(), 10)], this.overlapList);\n }\n this.overlapList.forEach(function (obj) {\n var filterList = appointmentList_1.filter(function (data) {\n return data[fieldMapping.endTime] > obj[fieldMapping.startTime] && data[fieldMapping.startTime] <= obj[fieldMapping.endTime];\n });\n if (_this.parent.activeViewOptions.group.resources.length > 0) {\n filterList = _this.filterEventsByResource(_this.resources[parseInt(resource.toString(), 10)], filterList);\n }\n var collection = filterList.filter(function (val) {\n return _this.overlapList.indexOf(val) === -1;\n });\n if (collection.length > 0) {\n appointment_1 = appointment_1.concat(collection);\n }\n });\n for (var i = 0; i < appointment_1.length - 1; i++) {\n for (var j = i + 1; j < appointment_1.length; j++) {\n if (appointment_1[parseInt(i.toString(), 10)][fieldMapping.id] ===\n appointment_1[parseInt(j.toString(), 10)][fieldMapping.id]) {\n appointment_1.splice(j, 1);\n j--;\n }\n }\n }\n this.overlapList = this.overlapList.concat(appointment_1);\n eventsList = this.overlapList;\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_4 = eventsList_1[_i];\n var record_1 = event_4;\n var index = record_1.Index;\n if (isNullOrUndefined(this.overlapEvents[parseInt(index.toString(), 10)])) {\n this.overlapEvents[parseInt(index.toString(), 10)] = [event_4];\n }\n else {\n this.overlapEvents[parseInt(index.toString(), 10)].push(event_4);\n }\n }\n }\n if (!isAllDay) {\n eventsList = eventsList.filter(function (obj) { return (obj[fieldMapping.startTime] === record[fieldMapping.startTime] &&\n obj[fieldMapping.endTime] > record[fieldMapping.endTime] || obj[fieldMapping.endTime] > record[fieldMapping.startTime] &&\n obj[fieldMapping.startTime] < record[fieldMapping.endTime] || obj[fieldMapping.endTime] === record[fieldMapping.startTime]\n && obj[fieldMapping.startTime] === record[fieldMapping.endTime]) ||\n ((obj[fieldMapping.startTime].getTime() === record[fieldMapping.startTime].getTime() &&\n obj[fieldMapping.endTime].getTime() === record[fieldMapping.endTime].getTime())\n || (obj[fieldMapping.startTime].getTime() === record[fieldMapping.startTime].getTime() &&\n obj[fieldMapping.endTime].getTime() < record[fieldMapping.endTime].getTime() ||\n obj[fieldMapping.endTime].getTime() > record[fieldMapping.endTime].getTime())); });\n }\n if (eventsList.length > 0) {\n var appLevel = eventsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n VerticalEvent.prototype.adjustOverlapElements = function (args) {\n var data = { appWidth: args.width, appLeft: args.left };\n for (var i = 0, length1 = this.overlapEvents.length; i < length1; i++) {\n if (!isNullOrUndefined(this.overlapEvents[parseInt(i.toString(), 10)])) {\n for (var j = 0, length2 = this.overlapEvents[parseInt(i.toString(), 10)].length; j < length2; j++) {\n var dayCount = this.getDayIndex(args.dayIndex, args.resource, args.day);\n var element = this.element.querySelector('#e-appointment-wrapper-' + dayCount);\n if (element && element.childElementCount > 0) {\n var eleGuid = this.overlapEvents[parseInt(i.toString(), 10)][parseInt(j.toString(), 10)].Guid;\n if (element.querySelectorAll('div[data-guid=\"' + eleGuid + '\"]').length > 0 && eleGuid !== args.record.Guid) {\n var apps = element.querySelector('div[data-guid=\"' + eleGuid + '\"]');\n if (parseFloat(args.width) <= parseFloat(apps.style.width)) {\n if (this.parent.enableRtl) {\n apps.style.right = this.getEventLeft(args.width, i);\n }\n else {\n apps.style.left = this.getEventLeft(args.width, i);\n }\n apps.style.width = ((parseFloat(args.width))) + '%';\n data.appWidth = apps.style.width;\n }\n else {\n data.appWidth = apps.style.width;\n }\n }\n else {\n var appWidth = args.width;\n if (isNullOrUndefined(this.overlapEvents[i - 1])) {\n appWidth = this.getEventWidth();\n }\n data.appWidth = appWidth;\n data.appLeft = this.getEventLeft(appWidth, args.index);\n }\n }\n }\n }\n }\n return data;\n };\n VerticalEvent.prototype.setAllDayRowHeight = function (height) {\n var dateHeader = this.parent.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n if (this.parent.height === 'auto' || !this.parent.enableAllDayScroll) {\n addClass([dateHeader], cls.ALLDAY_APPOINTMENT_AUTO);\n }\n var allDayRow = this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n allDayRow.style.height = '';\n if (this.parent.uiStateValues.expand && this.parent.height !== 'auto' && this.parent.enableAllDayScroll) {\n allDayRow.style.height = (height / 12) + 'em';\n this.parent.eventBase.allDayExpandScroll(dateHeader);\n }\n else {\n for (var _i = 0, _a = this.allDayElement; _i < _a.length; _i++) {\n var element = _a[_i];\n element.style.height = (height / 12) + 'em';\n }\n removeClass([dateHeader], cls.ALLDAY_APPOINTMENT_SCROLL);\n }\n };\n VerticalEvent.prototype.addOrRemoveClass = function () {\n var _this = this;\n this.moreEvents.filter(function (element) {\n if (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) {\n addClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '-1');\n }\n else {\n removeClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '0');\n }\n });\n var moreEventCount = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n if (this.parent.uiStateValues.expand) {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n }\n else {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n }\n if (this.allDayLevel > 2) {\n removeClass([moreEventCount], cls.DISABLE_CLASS);\n }\n else {\n addClass([moreEventCount], cls.DISABLE_CLASS);\n }\n var countCell = [].slice.call(this.element.querySelectorAll('.' + cls.ROW_COUNT_WRAPPER_CLASS));\n countCell.forEach(function (element) {\n if (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) {\n removeClass([element], cls.DISABLE_CLASS);\n }\n else {\n addClass([element], cls.DISABLE_CLASS);\n }\n });\n };\n VerticalEvent.prototype.getEventHeight = function () {\n var eventElement = createElement('div', { className: cls.APPOINTMENT_CLASS, styles: 'visibility:hidden' });\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS + ':first-child');\n eventWrapper.appendChild(eventElement);\n var height = eventElement.offsetHeight;\n remove(eventElement);\n return height;\n };\n VerticalEvent.prototype.rowExpandCollapse = function () {\n var target = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n this.parent.uiStateValues.expand = target.classList.contains(cls.APPOINTMENT_ROW_EXPAND_CLASS);\n var rowHeight;\n if (this.parent.uiStateValues.expand) {\n target.setAttribute('title', this.parent.localeObj.getConstant('collapseAllDaySection'));\n target.setAttribute('aria-label', 'Collapse section');\n rowHeight = ((this.allDayLevel + 1) * this.getEventHeight()) + 4;\n }\n else {\n target.setAttribute('title', this.parent.localeObj.getConstant('expandAllDaySection'));\n target.setAttribute('aria-label', 'Expand section');\n rowHeight = (3 * this.getEventHeight()) + 4;\n this.parent.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS).scrollTop = 0;\n }\n this.setAllDayRowHeight(rowHeight);\n this.animation.animate(this.allDayElement[0]);\n this.addOrRemoveClass();\n this.animation.animate(target);\n };\n VerticalEvent.prototype.animationUiUpdate = function () {\n this.parent.notify(events.contentReady, {});\n };\n VerticalEvent.prototype.destroy = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.allDayElement = null;\n this.renderedAllDayEvents = null;\n this.renderedEvents = null;\n this.slotCount = null;\n this.interval = null;\n this.startHour = null;\n this.endHour = null;\n this.element = null;\n this.fields = null;\n this.animation = null;\n _super.prototype.destroy.call(this);\n };\n return VerticalEvent;\n}(EventBase));\nexport { VerticalEvent };\n","import { createElement, append, prepend, isNullOrUndefined, getValue, getDefaultDateObject, cldrData, addClass, setStyleAttribute, formatUnit, EventHandler, remove } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\n/**\n * view base\n */\nvar ViewBase = /** @class */ (function () {\n /**\n * Constructor\n *\n * @param {Schedule} parent Accepts the schedule instance\n */\n function ViewBase(parent) {\n this.previousNextAction = 'next';\n this.parent = parent;\n }\n ViewBase.prototype.isTimelineView = function () {\n return this.parent.currentView.indexOf('Timeline') !== -1;\n };\n ViewBase.prototype.getContentRows = function () {\n return [];\n };\n ViewBase.prototype.refreshHeader = function () {\n // Method to refresh the date header\n };\n ViewBase.prototype.refreshResourceHeader = function () {\n remove(this.element.querySelector('tbody').lastElementChild.firstElementChild);\n var resTd = createElement('td');\n resTd.appendChild(this.parent.resourceBase.createResourceColumn());\n prepend([resTd], this.element.querySelector('tbody').lastElementChild);\n this.parent.notify(event.contentReady, {});\n };\n ViewBase.prototype.getDayName = function (date) {\n return this.parent.getDayNames('abbreviated')[date.getDay()];\n };\n ViewBase.prototype.getDate = function (date) {\n return this.parent.globalize.formatDate(date, { format: 'd', calendar: this.parent.getCalendarMode() });\n };\n ViewBase.prototype.getTime = function (date) {\n if (this.parent.isAdaptive) {\n if (this.parent.activeViewOptions.timeFormat === 'HH:mm' || this.parent.activeViewOptions.timeFormat === 'HH.mm') {\n return this.parent.globalize.formatDate(date, { format: 'H', calendar: this.parent.getCalendarMode() });\n }\n return this.parent.globalize.formatDate(date, { skeleton: 'h', calendar: this.parent.getCalendarMode() });\n }\n return this.parent.getTimeString(date);\n };\n ViewBase.prototype.getTimelineDate = function (date) {\n var text = this.parent.globalize.formatDate(date, { skeleton: 'MMMd', calendar: this.parent.getCalendarMode() }) + ', ' +\n this.parent.getDayNames('wide')[date.getDay()];\n return util.capitalizeFirstWord(text, 'multiple');\n };\n ViewBase.prototype.createEventTable = function (trCount) {\n var eventTable = createElement('div', { className: cls.EVENT_TABLE_CLASS });\n append(this.getEventRows(trCount), eventTable);\n return eventTable;\n };\n ViewBase.prototype.getEventRows = function (trCount) {\n var eventRows = [];\n var eventContainer;\n for (var row = 0; row < trCount; row++) {\n eventContainer = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n if (this.parent.resourceBase && !this.parent.uiStateValues.isGroupAdaptive && this.parent.resourceBase.renderedResources) {\n eventContainer.setAttribute('data-group-index', this.parent.resourceBase.renderedResources[parseInt(row.toString(), 10)].groupIndex.toString());\n }\n eventRows.push(eventContainer);\n }\n return eventRows;\n };\n ViewBase.prototype.collapseRows = function (wrap) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.parent.resourceBase.hideResourceRows(wrap.querySelector('tbody'));\n this.parent.resourceBase.hideResourceRows(wrap.querySelector('.' + cls.EVENT_TABLE_CLASS));\n }\n };\n ViewBase.prototype.createTableLayout = function (className) {\n var clsName = className || '';\n var table = createElement('table', { className: cls.SCHEDULE_TABLE_CLASS + ' ' + clsName });\n var tbody = createElement('tbody');\n table.appendChild(tbody);\n return table;\n };\n ViewBase.prototype.setAriaAttributes = function (table) {\n table.setAttribute('role', 'grid');\n table.setAttribute('aria-label', this.getLabelText(this.parent.currentView));\n };\n ViewBase.prototype.createColGroup = function (table, lastRow) {\n var length = lastRow.length;\n if (lastRow[0] && lastRow[0].colSpan) {\n length = lastRow.map(function (value) { return value.colSpan; }).reduce(function (prev, next) { return prev + next; });\n }\n var colGroupEle = createElement('colgroup');\n for (var i = 0; i < length; i++) {\n colGroupEle.appendChild(createElement('col'));\n }\n prepend([colGroupEle], table);\n };\n ViewBase.prototype.getScrollXIndent = function (content) {\n return content.offsetHeight - content.clientHeight > 0 ? util.getScrollBarWidth() : 0;\n };\n ViewBase.prototype.scrollTopPanel = function (target) {\n this.getDatesHeaderElement().firstElementChild.scrollLeft = target.scrollLeft;\n };\n ViewBase.prototype.scrollHeaderLabels = function (target) {\n var headerTable = this.element.querySelector('.e-date-header-wrap table');\n var colWidth = headerTable.offsetWidth / headerTable.querySelectorAll('colgroup col').length;\n var applyLeft = function (headerCells, isRtl) {\n var currentCell;\n var tdLeft = 0;\n var colSpan = 0;\n var hiddenLeft = isRtl ? -(target.scrollLeft) : target.scrollLeft;\n for (var _i = 0, headerCells_2 = headerCells; _i < headerCells_2.length; _i++) {\n var cell = headerCells_2[_i];\n colSpan += parseInt(cell.getAttribute('colSpan'), 10);\n if (colSpan > Math.floor(hiddenLeft / colWidth)) {\n currentCell = cell;\n break;\n }\n tdLeft += cell.offsetWidth;\n }\n if (!isNullOrUndefined(currentCell)) {\n currentCell.children[0].style[isRtl ? 'right' : 'left'] = (hiddenLeft - tdLeft) + 'px';\n }\n };\n var classNames = ['.e-header-year-cell', '.e-header-month-cell', '.e-header-week-cell', '.e-header-cells'];\n for (var _i = 0, classNames_1 = classNames; _i < classNames_1.length; _i++) {\n var className = classNames_1[_i];\n var headerCells = [].slice.call(this.element.querySelectorAll(className));\n if (headerCells.length > 0) {\n for (var _a = 0, headerCells_1 = headerCells; _a < headerCells_1.length; _a++) {\n var element = headerCells_1[_a];\n element.children[0].style[this.parent.enableRtl ? 'right' : 'left'] = '';\n }\n applyLeft(headerCells, this.parent.enableRtl);\n }\n }\n };\n ViewBase.prototype.addAttributes = function (td, element) {\n if (td.template) {\n append(td.template, element);\n }\n if (td.colSpan) {\n element.setAttribute('colspan', td.colSpan.toString());\n }\n if (td.className) {\n addClass([element], td.className);\n }\n };\n ViewBase.prototype.getHeaderBarHeight = function () {\n var headerBarHeight = 2;\n if (this.parent.headerModule) {\n headerBarHeight += util.getOuterHeight(this.parent.headerModule.getHeaderElement());\n }\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resHeader = this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR);\n if (resHeader) {\n headerBarHeight += resHeader.offsetHeight;\n }\n }\n return headerBarHeight;\n };\n ViewBase.prototype.renderPanel = function (type) {\n if (type === cls.PREVIOUS_PANEL_CLASS) {\n prepend([this.element], this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS));\n }\n else {\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n }\n };\n ViewBase.prototype.setPanel = function (panel) {\n this.element = panel;\n };\n ViewBase.prototype.getPanel = function () {\n return this.element;\n };\n ViewBase.prototype.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ViewBase.prototype.getDateSlots = function (renderDates, workDays) {\n return []; // Here getDateSlots only need in vertical and month views\n };\n ViewBase.prototype.generateColumnLevels = function () {\n return []; // Here generateColumnLevels only need in vertical and month views\n };\n ViewBase.prototype.getColumnLevels = function () {\n return this.colLevels;\n };\n ViewBase.prototype.highlightCurrentTime = function () {\n // Here showTimeIndicator functionalities\n };\n ViewBase.prototype.getStartDate = function () {\n return this.renderDates[0];\n };\n ViewBase.prototype.getEndDate = function () {\n return this.renderDates[this.renderDates.length - 1];\n };\n ViewBase.prototype.startDate = function () {\n return this.renderDates[0];\n };\n ViewBase.prototype.endDate = function () {\n return util.addDays(this.renderDates[this.renderDates.length - 1], 1);\n };\n ViewBase.prototype.getStartHour = function () {\n var startHour = this.parent.getStartEndTime(this.parent.activeViewOptions.startHour);\n if (isNullOrUndefined(startHour)) {\n startHour = new Date(2000, 0, 0, 0);\n }\n return startHour;\n };\n ViewBase.prototype.getEndHour = function () {\n var endHour = this.parent.getStartEndTime(this.parent.activeViewOptions.endHour);\n if (isNullOrUndefined(endHour)) {\n endHour = new Date(2000, 0, 0, 0);\n }\n return endHour;\n };\n ViewBase.prototype.isCurrentDate = function (date) {\n return date.setHours(0, 0, 0, 0) === new Date(this.parent.currentTimezoneDate).setHours(0, 0, 0, 0);\n };\n ViewBase.prototype.isCurrentMonth = function (date) {\n if (this.parent.activeViewOptions.displayDate || this.parent.activeViewOptions.numberOfWeeks > 0) {\n return this.parent.activeView.getStartDate().getTime() <= this.parent.getCurrentTime().getTime() &&\n this.parent.activeView.getEndDate().getTime() >= this.parent.getCurrentTime().getTime();\n }\n return date.getFullYear() ===\n this.parent.getCurrentTime().getFullYear() && date.getMonth() === this.parent.getCurrentTime().getMonth();\n };\n ViewBase.prototype.isWorkDay = function (date, workDays) {\n if (workDays === void 0) { workDays = this.parent.activeViewOptions.workDays; }\n if (workDays.indexOf(date.getDay()) >= 0) {\n return true;\n }\n return false;\n };\n ViewBase.prototype.isWorkHour = function (date, startHour, endHour, workDays) {\n if (isNullOrUndefined(startHour) || isNullOrUndefined(endHour)) {\n return false;\n }\n startHour.setMilliseconds(0);\n endHour.setMilliseconds(0);\n return !(util.getDateInMs(date) < util.getDateInMs(startHour) || util.getDateInMs(date) >= util.getDateInMs(endHour) ||\n !this.isWorkDay(date, workDays));\n };\n ViewBase.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n // Due to same code for vertical and time line, week & work week views, if condition has used\n if (this.parent.currentView === 'Week' || this.parent.currentView === 'TimelineWeek') {\n var selectedDate = util.resetTime(this.parent.selectedDate);\n var start = util.getWeekFirstDate(selectedDate, this.parent.activeViewOptions.firstDayOfWeek);\n for (var i = 0, length_1 = util.WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_1; i++) {\n if (this.parent.activeViewOptions.showWeekend) {\n renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n }\n }\n else if (this.parent.currentView === 'WorkWeek' || this.parent.currentView === 'TimelineWorkWeek') {\n var start = util.getWeekFirstDate(util.resetTime(this.parent.selectedDate), this.parent.activeViewOptions.firstDayOfWeek);\n for (var i = 0, length_2 = util.WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_2; i++) {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n start = util.addDays(start, 1);\n }\n }\n else {\n var dayCount = this.parent.currentView === 'Agenda' ? this.parent.agendaDaysCount :\n this.parent.activeViewOptions.interval;\n var start = util.resetTime(this.parent.selectedDate);\n do {\n if (this.parent.activeViewOptions.showWeekend) {\n renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n } while (dayCount !== renderDates.length);\n }\n if (!workDays) {\n this.renderDates = renderDates;\n }\n if (this.parent.headerModule) {\n this.parent.headerModule.previousNextIconHandler();\n }\n return renderDates;\n };\n ViewBase.prototype.getNextPreviousDate = function (type) {\n this.previousNextAction = type;\n if (this.parent.currentView === 'Day' || this.parent.currentView === 'TimelineDay') {\n if (this.parent.activeViewOptions.showWeekend) {\n var daysCount = this.parent.activeViewOptions.interval;\n return util.addDays(this.parent.selectedDate, type === 'next' ? daysCount : -daysCount);\n }\n else {\n var date = void 0;\n if (type === 'next') {\n date = util.addDays(this.renderDates.slice(-1)[0], 1);\n while (!this.isWorkDay(date)) {\n date = util.addDays(date, 1);\n }\n }\n else {\n date = util.addDays(this.renderDates[0], -1);\n var count = 0;\n do {\n if (this.isWorkDay(date)) {\n count += 1;\n }\n if (this.parent.activeViewOptions.interval !== count) {\n date = util.addDays(date, -1);\n }\n } while (this.parent.activeViewOptions.interval !== count);\n }\n return date;\n }\n }\n var weekLength = type === 'next' ? util.WEEK_LENGTH : -util.WEEK_LENGTH;\n return util.addDays(this.parent.selectedDate, weekLength * this.parent.activeViewOptions.interval);\n };\n ViewBase.prototype.getLabelText = function (view) {\n var viewStr = view.charAt(0).toLowerCase() + view.substring(1);\n return this.parent.localeObj.getConstant(viewStr) + ' of ' + util.capitalizeFirstWord(this.parent.globalize.formatDate(this.parent.selectedDate, { skeleton: 'long', calendar: this.parent.getCalendarMode() }), 'single');\n };\n ViewBase.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive) {\n var formatDate = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';\n return util.capitalizeFirstWord(this.parent.globalize.formatDate(this.parent.selectedDate, { format: formatDate, calendar: this.parent.getCalendarMode() }), 'single');\n }\n return this.formatDateRange(this.renderDates[0], this.renderDates[this.renderDates.length - 1]);\n };\n ViewBase.prototype.formatDateRange = function (startDate, endDate) {\n var globalize = this.parent.globalize;\n var mode = this.parent.getCalendarMode();\n if (startDate === endDate) {\n endDate = null;\n }\n if (!isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {\n var text = '';\n if (!endDate) {\n text = globalize.formatDate(startDate, { format: this.parent.activeViewOptions.dateFormat, calendar: mode });\n return util.capitalizeFirstWord(text, 'multiple');\n }\n text = (globalize.formatDate(startDate, { format: this.parent.activeViewOptions.dateFormat, calendar: mode }) +\n ' - ' + globalize.formatDate(endDate, { format: this.parent.activeViewOptions.dateFormat, calendar: mode }));\n return util.capitalizeFirstWord(text, 'multiple');\n }\n var formattedStr;\n var longDateFormat;\n if (this.parent.locale === 'en' || this.parent.locale === 'en-US') {\n longDateFormat = getValue('dateFormats.long', getDefaultDateObject(mode));\n }\n else {\n longDateFormat = getValue('main.' + '' + this.parent.locale + '.dates.calendars.' + mode + '.dateFormats.long', cldrData);\n }\n if (!endDate) {\n return util.capitalizeFirstWord(globalize.formatDate(startDate, { format: longDateFormat, calendar: mode }), 'single');\n }\n var dateFormat = longDateFormat.trim().toLocaleLowerCase();\n if (dateFormat.substr(0, 1) === 'd') {\n if (startDate.getFullYear() === endDate.getFullYear()) {\n if (startDate.getMonth() === endDate.getMonth()) {\n formattedStr = globalize.formatDate(startDate, { format: 'dd', calendar: mode }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMMM yyyy', calendar: mode });\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'dd MMM', calendar: mode }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMM yyyy', calendar: mode });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'dd MMM yyyy', calendar: mode }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMM yyyy', calendar: mode });\n }\n }\n else if (dateFormat.substr(0, 1) === 'm') {\n if (startDate.getFullYear() === endDate.getFullYear()) {\n if (startDate.getMonth() === endDate.getMonth()) {\n formattedStr = globalize.formatDate(startDate, { format: 'MMMM dd', calendar: mode }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd, yyyy', calendar: mode });\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'MMM dd', calendar: mode }) + ' - ' +\n globalize.formatDate(endDate, { format: 'MMM dd, yyyy', calendar: mode });\n }\n }\n else {\n formattedStr = globalize.\n formatDate(startDate, { format: 'MMM dd, yyyy', calendar: mode }) + ' - ' +\n globalize.formatDate(endDate, { format: 'MMM dd, yyyy', calendar: mode });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: longDateFormat, calendar: mode }) + ' - ' +\n globalize.formatDate(endDate, { format: longDateFormat, calendar: mode });\n }\n return util.capitalizeFirstWord(formattedStr, 'multiple');\n };\n ViewBase.prototype.getMobileDateElement = function (date, className) {\n var wrap = createElement('div', {\n className: className,\n innerHTML: '
' + this.parent.globalize.formatDate(date, { format: 'd', calendar: this.parent.getCalendarMode() }) + '
' + '
' +\n util.capitalizeFirstWord(this.parent.globalize.formatDate(date, { format: 'E', calendar: this.parent.getCalendarMode() }), 'single') + '
'\n });\n return wrap;\n };\n ViewBase.prototype.setResourceHeaderContent = function (tdElement, tdData, className) {\n if (className === void 0) { className = cls.TEXT_ELLIPSIS; }\n if (this.parent.activeViewOptions.resourceHeaderTemplate) {\n var data = { resource: tdData.resource, resourceData: tdData.resourceData };\n var scheduleId = this.parent.element.id + '_';\n var viewName = this.parent.activeViewOptions.resourceHeaderTemplateName;\n var templateId = scheduleId + viewName + 'resourceHeaderTemplate';\n var quickTemplate = [].slice.call(this.parent.getResourceHeaderTemplate()(data, this.parent, 'resourceHeaderTemplate', templateId, false));\n append(quickTemplate, tdElement);\n }\n else {\n var resourceText = createElement('div', { className: className });\n this.parent.sanitize(tdData.resourceData[tdData.resource.textField], resourceText);\n tdElement.appendChild(resourceText);\n }\n };\n ViewBase.prototype.renderResourceMobileLayout = function () {\n if (this.parent.resourceBase.lastResourceLevel && this.parent.resourceBase.lastResourceLevel.length <= 0) {\n return;\n }\n this.parent.resourceBase.renderResourceHeader();\n this.parent.resourceBase.renderResourceTree();\n };\n ViewBase.prototype.addAutoHeightClass = function (element) {\n if (!this.parent.uiStateValues.isGroupAdaptive && this.parent.rowAutoHeight && this.isTimelineView()\n && this.parent.activeViewOptions.group.resources.length > 0) {\n addClass([element], cls.AUTO_HEIGHT);\n }\n };\n ViewBase.prototype.getColElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.CONTENT_WRAP_CLASS + ' col, .' + cls.DATE_HEADER_WRAP_CLASS + ' col'));\n };\n ViewBase.prototype.setColWidth = function (content) {\n if (this.isTimelineView()) {\n var colElements = this.getColElements();\n var contentBody = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS + ' tbody');\n var colWidth_1 = (contentBody.getBoundingClientRect().width / (colElements.length / 2));\n if (content.offsetHeight !== content.clientHeight) {\n var resourceColumn = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n if (!isNullOrUndefined(resourceColumn)) {\n setStyleAttribute(resourceColumn, { 'height': formatUnit(content.clientHeight) });\n }\n }\n var cssClass = \".\" + cls.HEADER_CELLS_CLASS + \",.\" + cls.TIME_SLOT_CLASS + \",.\" + cls.HEADER_WEEK_CELLS_CLASS + \",.\" + cls.HEADER_MONTH_CELLS_CLASS + \",.\" + cls.HEADER_YEAR_CELLS_CLASS;\n var headerCellElements = [].slice.call(this.element.querySelectorAll(cssClass));\n headerCellElements.forEach(function (ele) {\n var colSpan = isNullOrUndefined(ele.getAttribute('colspan')) ? '1' : ele.getAttribute('colspan');\n var headerCellColSpan = parseInt(colSpan, 10);\n setStyleAttribute(ele, { 'width': formatUnit(colWidth_1 * headerCellColSpan) });\n });\n }\n };\n ViewBase.prototype.resetColWidth = function () {\n var colElements = this.getColElements();\n for (var _i = 0, colElements_1 = colElements; _i < colElements_1.length; _i++) {\n var col = colElements_1[_i];\n col.style.width = '';\n }\n };\n ViewBase.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n ViewBase.prototype.wireExpandCollapseIconEvents = function () {\n if (this.parent.resourceBase && this.parent.resourceBase.resourceCollection.length > 1) {\n var treeIcons = [].slice.call(this.element.querySelectorAll('.' + cls.RESOURCE_TREE_ICON_CLASS));\n for (var _i = 0, treeIcons_1 = treeIcons; _i < treeIcons_1.length; _i++) {\n var icon = treeIcons_1[_i];\n EventHandler.clearEvents(icon);\n EventHandler.add(icon, 'click', this.parent.resourceBase.onTreeIconClick, this.parent.resourceBase);\n }\n }\n };\n ViewBase.prototype.scrollToDate = function (scrollDate) {\n if (['Month', 'TimelineMonth'].indexOf(this.parent.currentView) === -1 || isNullOrUndefined(scrollDate)) {\n return;\n }\n var scrollWrap = this.getContentAreaElement();\n var tdDate = new Date(util.resetTime(new Date(+scrollDate)).getTime()).getTime();\n var dateElement = scrollWrap.querySelector(\".\" + cls.WORK_CELLS_CLASS + \"[data-date=\\\"\" + tdDate + \"\\\"]\");\n if (this.parent.currentView === 'Month' && dateElement) {\n if (scrollWrap.scrollWidth > scrollWrap.clientWidth) {\n if (!this.parent.enableRtl) {\n scrollWrap.scrollLeft = dateElement.offsetLeft;\n }\n else {\n scrollWrap.scrollLeft = -(this.parent.getContentTable().offsetWidth - dateElement.offsetLeft - dateElement.offsetWidth);\n }\n }\n scrollWrap.scrollTop = dateElement.offsetTop;\n }\n if (this.parent.currentView === 'TimelineMonth' && dateElement) {\n if (!this.parent.enableRtl) {\n scrollWrap.scrollLeft = dateElement.offsetLeft;\n }\n else {\n scrollWrap.scrollLeft = -(this.parent.getContentTable().offsetWidth - dateElement.offsetLeft - dateElement.offsetWidth);\n }\n }\n };\n ViewBase.prototype.setPersistence = function () {\n if (this.parent.enablePersistence) {\n var contentWrap = this.element.querySelector('.e-content-wrap');\n if (!isNullOrUndefined(contentWrap)) {\n this.parent.scrollLeft = contentWrap.scrollLeft;\n this.parent.scrollTop = contentWrap.scrollTop;\n }\n }\n };\n ViewBase.prototype.retainScrollPosition = function () {\n if (this.parent.enablePersistence) {\n var conWrap = this.parent.element.querySelector('.e-content-wrap');\n if (!isNullOrUndefined(conWrap) && !isNullOrUndefined(this.parent.scrollLeft) && !isNullOrUndefined(this.parent.scrollTop)) {\n conWrap.scrollTop = this.parent.scrollTop;\n conWrap.scrollLeft = this.parent.scrollLeft;\n }\n }\n };\n ViewBase.prototype.getViewStartDate = function () {\n var startDate = this.renderDates[0];\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.resourceBase.lastResourceLevel.length > 0) {\n startDate = this.parent.resourceBase.getResourceRenderDates()[0];\n }\n return startDate;\n };\n ViewBase.prototype.getViewEndDate = function () {\n var endDate = util.addDays(this.renderDates[this.renderDates.length - 1], 1);\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.resourceBase.lastResourceLevel.length > 0) {\n endDate = util.addDays(this.parent.resourceBase.getResourceRenderDates().slice(-1)[0], 1);\n }\n return endDate;\n };\n ViewBase.prototype.getAdjustedDate = function (startTime) {\n if (!this.parent.activeViewOptions.timeScale.enable || this.parent.currentView === 'Month' ||\n (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.group.resources.length === 0)) {\n return new Date(startTime.setHours(0, 0, 0, 0));\n }\n else if (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.group.resources.length > 0) {\n startTime.setHours(0, 0, 0, 0);\n return new Date(startTime.setDate(1));\n }\n return null;\n };\n ViewBase.prototype.resetColLevels = function () {\n this.parent.resourceBase.expandedResources = [];\n var renderedCount = this.parent.virtualScrollModule.getRenderedCount();\n var lastLevel = this.parent.activeViewOptions.group.byDate ? this.colLevels[0] :\n this.parent.resourceBase.renderedResources;\n var index = 0;\n for (var i = 0; i < lastLevel.length; i++) {\n if (index >= renderedCount) {\n break;\n }\n index += lastLevel[parseInt(i.toString(), 10)].colSpan;\n this.parent.resourceBase.expandedResources.push(lastLevel[parseInt(i.toString(), 10)]);\n }\n if (this.parent.activeViewOptions.group.byDate) {\n this.colLevels[0] = this.parent.resourceBase.expandedResources;\n this.parent.virtualScrollModule.setRenderedDates(this.parent.resourceBase.expandedResources);\n }\n else {\n this.colLevels[this.colLevels.length - 2] = this.parent.resourceBase.expandedResources;\n this.parent.resourceBase.renderedResources = this.parent.resourceBase.expandedResources;\n }\n if (this.parent.currentView !== 'Month') {\n this.colLevels[this.colLevels.length - 1] = this.colLevels[this.colLevels.length - 1].slice(0, index);\n this.parent.resourceBase.expandedResources = this.colLevels[this.colLevels.length - 1];\n }\n };\n ViewBase.prototype.destroy = function () {\n if (this.element && this.element.parentNode) {\n remove(this.element);\n }\n this.element = null;\n this.renderDates = null;\n this.colLevels = null;\n };\n return ViewBase;\n}());\nexport { ViewBase };\n","import { createElement } from '@syncfusion/ej2-base';\nimport { MS_PER_DAY, capitalizeFirstWord } from '../base/util';\n/**\n * timeline header rows\n */\nvar TimelineHeaderRow = /** @class */ (function () {\n function TimelineHeaderRow(parent, renderDates) {\n this.parent = parent;\n this.renderDates = renderDates;\n }\n TimelineHeaderRow.prototype.groupByYear = function (dates) {\n var result = {};\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var d = dates_1[_i];\n var key = d.getFullYear();\n result[parseInt(key.toString(), 10)] = result[parseInt(key.toString(), 10)] || [];\n result[parseInt(key.toString(), 10)].push(d);\n }\n return result;\n };\n TimelineHeaderRow.prototype.groupByMonth = function (dates) {\n var result = {};\n for (var _i = 0, dates_2 = dates; _i < dates_2.length; _i++) {\n var d = dates_2[_i];\n var key = (d.getFullYear() - 1970) * 12 + d.getMonth();\n result[parseInt(key.toString(), 10)] = result[parseInt(key.toString(), 10)] || [];\n result[parseInt(key.toString(), 10)].push(d);\n }\n return result;\n };\n TimelineHeaderRow.prototype.groupByWeek = function (dates) {\n var result = {};\n for (var _i = 0, dates_3 = dates; _i < dates_3.length; _i++) {\n var d = dates_3[_i];\n var jsDate = +new Date(1970, 0, 1);\n var tzOffsetDiff = d.getTimezoneOffset() - new Date(1970, 0, 1).getTimezoneOffset();\n var key = Math.ceil(((((+d - jsDate) - (tzOffsetDiff * 60 * 1000)) / MS_PER_DAY) + new Date(jsDate).getDay() + 1) / 7);\n if (this.parent.firstDayOfWeek && this.parent.firstDayOfWeek > new Date(+d).getDay()) {\n key = key - 1;\n }\n result[parseInt(key.toString(), 10)] = result[parseInt(key.toString(), 10)] || [];\n result[parseInt(key.toString(), 10)].push(d);\n }\n return result;\n };\n TimelineHeaderRow.prototype.generateSlots = function (data, colspan, row, cls, type) {\n var _this = this;\n var dateParser = function (date, format) {\n return _this.parent.globalize.formatDate(date, { format: format, calendar: _this.parent.getCalendarMode() });\n };\n var tdDatas = [];\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var dates = data[keys[parseInt(i.toString(), 10)]];\n var htmlCol = void 0;\n if (row.template) {\n var args = { date: dates[0], type: type };\n var templateId = this.parent.element.id + '_headerRowTemplate';\n htmlCol = [].slice.call(this.parent.templateParser(row.template)(args, this.parent, 'template', templateId, false));\n }\n else {\n var viewTemplate = void 0;\n switch (row.option) {\n case 'Year':\n viewTemplate = \"\" + dateParser(dates[0], 'y') + \"\";\n break;\n case 'Month':\n viewTemplate = \"\" + capitalizeFirstWord(dateParser(dates[0], 'MMMM'), 'single') + \"\";\n break;\n case 'Week':\n viewTemplate = \"\" + this.parent.getWeekNumberContent(dates) + \"\";\n }\n var headerWrapper = createElement('div', { innerHTML: viewTemplate });\n htmlCol = [].slice.call(headerWrapper.childNodes);\n }\n tdDatas.push({ date: dates[0], type: type, className: [cls], colSpan: dates.length * colspan, template: htmlCol });\n }\n return tdDatas;\n };\n TimelineHeaderRow.prototype.generateColumnLevels = function (dateSlots, hourSlots) {\n var levels = [];\n var rows = this.parent.activeViewOptions.headerRows;\n var lastLevelColspan = 1;\n if (rows[rows.length - 1].option === 'Hour' && hourSlots.length > 0) {\n lastLevelColspan = hourSlots.length / dateSlots.length;\n }\n var tdDatas = [];\n var byYear;\n var byMonth;\n var byWeek;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n switch (row.option) {\n case 'Year':\n byYear = this.groupByYear(this.renderDates);\n tdDatas = this.generateSlots(byYear, lastLevelColspan, row, 'e-header-year-cell', 'yearHeader');\n levels.push(tdDatas);\n break;\n case 'Month':\n byMonth = this.groupByMonth(this.renderDates);\n tdDatas = this.generateSlots(byMonth, lastLevelColspan, row, 'e-header-month-cell', 'monthHeader');\n levels.push(tdDatas);\n break;\n case 'Week':\n byWeek = this.groupByWeek(this.renderDates);\n tdDatas = this.generateSlots(byWeek, lastLevelColspan, row, 'e-header-week-cell', 'weekHeader');\n levels.push(tdDatas);\n break;\n case 'Date':\n tdDatas = dateSlots;\n tdDatas = tdDatas.map(function (value) {\n value.colSpan = lastLevelColspan;\n return value;\n });\n levels.push(tdDatas);\n break;\n case 'Hour':\n if (hourSlots.length > 0) {\n levels.push(hourSlots);\n }\n break;\n }\n }\n return levels;\n };\n return TimelineHeaderRow;\n}());\nexport { TimelineHeaderRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { formatUnit, isNullOrUndefined, closest, extend, append, prepend, remove } from '@syncfusion/ej2-base';\nimport { createElement, addClass, EventHandler } from '@syncfusion/ej2-base';\nimport { AgendaBase } from '../event-renderer/agenda-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * agenda view\n */\nvar Agenda = /** @class */ (function (_super) {\n __extends(Agenda, _super);\n function Agenda(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-agenda-view';\n _this.isInverseTableSelect = false;\n _this.agendaDates = {};\n _this.virtualScrollTop = 1;\n return _this;\n }\n Agenda.prototype.getModuleName = function () {\n return 'agenda';\n };\n Agenda.prototype.renderLayout = function () {\n this.agendaDates = {};\n this.element = createElement('div', { className: cls.TABLE_WRAP_CLASS });\n addClass([this.element], this.viewClass);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.element.querySelector('table').setAttribute('role', 'presentation');\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n var eTr = createElement('tr');\n this.element.querySelector('tbody').appendChild(eTr);\n var workTd = createElement('td');\n eTr.appendChild(workTd);\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n workTd.appendChild(wrap);\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n this.setAriaAttributes(tbl);\n wrap.appendChild(tbl);\n var tBody = tbl.querySelector('tbody');\n var agendaDate = util.resetTime(this.parent.selectedDate);\n this.renderEmptyContent(tBody, agendaDate);\n this.wireEvents();\n if (this.parent.resourceBase) {\n this.parent.resourceBase.generateResourceLevels([{ renderDates: this.parent.activeView.renderDates }]);\n }\n if (this.parent.uiStateValues.isGroupAdaptive && !this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n Agenda.prototype.eventLoad = function (args) {\n this.dataSource = extend([], this.parent.eventsData, null, true);\n for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n delete event_1.generatedDates;\n }\n var eventCollection = this.parent.activeViewOptions.allowVirtualScrolling ?\n args.processedData : this.parent.eventsProcessed;\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n this.dataSource = this.parent.eventBase.filterEventsByResource(resource, this.dataSource);\n eventCollection = this.parent.eventBase.filterEventsByResource(resource, eventCollection);\n }\n this.parent.eventsProcessed = this.processAgendaEvents(eventCollection);\n var agendaDate = util.resetTime(this.parent.selectedDate);\n var tBody = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS + ' tbody');\n util.removeChildren(tBody);\n this.renderInitialContent(tBody, agendaDate);\n this.wireEventActions();\n var contentArea = closest(tBody, '.' + cls.CONTENT_WRAP_CLASS);\n contentArea.scrollTop = 1;\n this.parent.notify(event.eventsLoaded, {});\n if (!this.parent.activeViewOptions.allowVirtualScrolling) {\n this.retainScrollPosition();\n }\n };\n Agenda.prototype.refreshEvent = function (refreshDate) {\n var processedData = [];\n var fields = this.parent.eventFields;\n for (var _i = 0, _a = this.dataSource; _i < _a.length; _i++) {\n var data = _a[_i];\n if (isNullOrUndefined(data[fields.recurrenceID]) && !isNullOrUndefined(data[fields.recurrenceRule]) &&\n !isNullOrUndefined(data.generatedDates) && refreshDate >= data.generatedDates.end) {\n processedData = processedData.concat(this.parent.eventBase.generateOccurrence(data, refreshDate));\n }\n }\n this.parent.eventsProcessed = this.parent.eventsProcessed.concat(this.processAgendaEvents(processedData));\n };\n Agenda.prototype.refreshHeader = function () {\n var tBody = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS + ' tbody');\n if (this.parent.activeViewOptions.group.byDate) {\n util.removeChildren(tBody);\n }\n else {\n remove(tBody.firstElementChild);\n }\n var agendaDate = util.resetTime(this.parent.selectedDate);\n var emptyTBody = createElement('tbody');\n var firstDate = new Date(agendaDate.getTime());\n var lastDate = (this.parent.activeViewOptions.allowVirtualScrolling && this.parent.hideEmptyAgendaDays) ?\n this.getEndDateFromStartDate(firstDate) : util.addDays(firstDate, this.parent.agendaDaysCount);\n this.renderContent(emptyTBody, firstDate, lastDate);\n append([].slice.call(emptyTBody.childNodes), tBody);\n };\n Agenda.prototype.renderInitialContent = function (tBody, agendaDate) {\n var emptyTBody = createElement('tbody');\n var firstDate = new Date(agendaDate.getTime());\n var lastDate = (this.parent.activeViewOptions.allowVirtualScrolling && this.parent.hideEmptyAgendaDays) ?\n this.getEndDateFromStartDate(firstDate) : util.addDays(firstDate, this.parent.agendaDaysCount);\n this.renderContent(emptyTBody, firstDate, lastDate);\n append([].slice.call(emptyTBody.childNodes), tBody);\n // Initial rendering, to load previous date events upto scroll bar enable\n if (this.parent.activeViewOptions.allowVirtualScrolling && this.parent.hideEmptyAgendaDays && this.parent.eventsData.length > 0) {\n var contentArea = this.getContentAreaElement();\n var contentChild = contentArea.querySelector('.e-content-table');\n while (contentArea.offsetWidth <= contentArea.clientWidth) {\n if (this.parent.isAdaptive && contentChild.offsetHeight >= contentArea.clientHeight) {\n break;\n }\n var emptyTBody_1 = createElement('tbody');\n lastDate = firstDate;\n firstDate = util.addDays(lastDate, -this.parent.agendaDaysCount);\n this.renderContent(emptyTBody_1, firstDate, lastDate);\n prepend([].slice.call(emptyTBody_1.childNodes), tBody);\n if (firstDate <= this.parent.minDate) {\n break;\n }\n }\n }\n if (tBody.childNodes.length <= 0) {\n this.renderEmptyContent(tBody, agendaDate);\n }\n };\n Agenda.prototype.renderContent = function (tBody, agendaDate, lastDate) {\n var fieldMapping = this.parent.eventFields;\n var firstDate = new Date(agendaDate.getTime());\n var isObject = this.appointmentFiltering(firstDate, lastDate);\n if (isObject.length > 0 && this.parent.activeViewOptions.allowVirtualScrolling && this.parent.hideEmptyAgendaDays) {\n agendaDate = isObject[0][fieldMapping.startTime];\n agendaDate = new Date(new Date(agendaDate.getTime()).setHours(0, 0, 0, 0));\n this.updateHeaderText(isObject[0][fieldMapping.startTime]);\n }\n var endDate;\n if (!this.parent.hideEmptyAgendaDays || (this.parent.agendaDaysCount > 0 && isObject.length > 0)) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var date = agendaDate;\n if (!this.parent.activeViewOptions.group.byDate) {\n this.parent.activeViewOptions.allowVirtualScrolling = false;\n date = firstDate;\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange();\n this.parent.headerModule.updateHeaderItems('remove');\n }\n }\n this.calculateResourceTableElement(tBody, this.parent.agendaDaysCount, date);\n }\n else {\n for (var day = 0; day < this.parent.agendaDaysCount; day++) {\n var filterData = this.appointmentFiltering(agendaDate);\n var nTr = this.createTableRowElement(agendaDate, 'data');\n if (this.element.querySelector('tr[data-row-index=\"' + parseInt(nTr.getAttribute('data-row-index'), 10) + '\"]')) {\n agendaDate = util.addDays(agendaDate, 1);\n continue;\n }\n var dTd = nTr.children[0];\n var aTd = nTr.children[1];\n if (filterData.length > 0 || (!this.parent.hideEmptyAgendaDays && filterData.length === 0)) {\n var elementType = (!this.parent.hideEmptyAgendaDays && filterData.length === 0) ? 'noEvents' : 'data';\n dTd.appendChild(this.createDateHeaderElement(agendaDate));\n nTr.appendChild(dTd);\n var cTd = this.createAgendaContentElement(elementType, filterData, aTd);\n nTr.appendChild(cTd);\n if (cTd.querySelectorAll('li').length > 0) {\n tBody.appendChild(nTr);\n }\n }\n else if (this.parent.activeViewOptions.allowVirtualScrolling) {\n day--;\n }\n if (this.isCurrentDate(new Date(agendaDate.getTime()))) {\n addClass(dTd.childNodes, cls.AGENDA_CURRENT_DAY_CLASS);\n }\n agendaDate = util.addDays(agendaDate, 1);\n if (agendaDate.getTime() > lastDate.getTime()) {\n break;\n }\n }\n }\n endDate = new Date(agendaDate.getTime() - util.MS_PER_DAY);\n }\n this.agendaDates = { start: firstDate, end: endDate };\n };\n Agenda.prototype.agendaScrolling = function (event) {\n if (this.parent.quickPopup) {\n this.parent.quickPopup.quickPopupHide();\n }\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n this.virtualScrolling(event);\n }\n if (!this.parent.activeViewOptions.allowVirtualScrolling) {\n this.setPersistence();\n }\n };\n Agenda.prototype.virtualScrolling = function (event) {\n var target = event.target;\n var scrollTop = target.scrollTop;\n var scrollHeight = target.scrollHeight;\n var offsetHeight = target.clientHeight;\n var totalHeight = scrollTop + offsetHeight;\n var direction = (this.virtualScrollTop < scrollTop) ? 'next' : 'previous';\n var tBody = target.querySelector('tbody');\n var emptyTBody = createElement('tbody');\n var topElement = this.getElementFromScrollerPosition(event);\n var scrollDate = this.parent.getDateFromElement(topElement);\n var filterDate;\n var filterData;\n if (scrollTop === 0) {\n filterDate = this.getPreviousNextDate(util.addDays(scrollDate, -1), direction);\n filterData = this.appointmentFiltering(filterDate.start, filterDate.end);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n this.renderContent(emptyTBody, filterDate.start, filterDate.end);\n prepend([].slice.call(emptyTBody.childNodes), tBody);\n this.wireEventActions();\n for (var s = 0, element = tBody.children; s < element.length; s++) {\n if (element[parseInt(s.toString(), 10)].getAttribute('data-row-index') === topElement.getAttribute('data-column-index')) {\n var scrollToValue = element[parseInt(s.toString(), 10)].offsetTop -\n this.element.querySelector('.e-agenda-item').offsetHeight;\n target.scrollTop = scrollToValue;\n break;\n }\n }\n this.updateHeaderText(scrollDate);\n }\n }\n else if (totalHeight >= (scrollHeight - 5)) {\n filterDate = this.getPreviousNextDate(util.addDays(scrollDate, 1), direction);\n filterData = this.appointmentFiltering(filterDate.start, filterDate.end);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n this.renderContent(emptyTBody, filterDate.start, filterDate.end);\n append([].slice.call(emptyTBody.childNodes), tBody);\n this.wireEventActions();\n this.updateHeaderText(scrollDate);\n }\n }\n else {\n this.updateHeaderText(scrollDate);\n }\n this.virtualScrollTop = scrollTop;\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n if (selectedElements.length > 0) {\n selectedElements[selectedElements.length - 1].focus();\n }\n };\n Agenda.prototype.getElementFromScrollerPosition = function (event) {\n var filterElement;\n var target = event.target;\n var scrollTop = target.scrollTop;\n var scrollHeight = target.scrollHeight;\n var offsetHeight = target.clientHeight;\n var totalHeight = scrollTop + offsetHeight;\n var liCollection = [].slice.call(target.querySelectorAll('.e-agenda-item'));\n var li;\n var liDetails;\n if (liCollection.length > 0) {\n if (scrollTop === 0) {\n li = liCollection[0];\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n }\n else if (totalHeight === scrollHeight) {\n li = liCollection[liCollection.length - 1];\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n }\n else {\n for (var a = 0, length_1 = liCollection.length; a < length_1; a++) {\n li = liCollection[parseInt(a.toString(), 10)];\n liDetails = li.getBoundingClientRect();\n if (liDetails.top >= 0) {\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n break;\n }\n }\n }\n }\n return filterElement;\n };\n Agenda.prototype.updateHeaderText = function (date) {\n if (this.parent.showHeaderBar) {\n this.parent.headerModule.updateDateRange(date);\n }\n };\n Agenda.prototype.getPreviousNextDate = function (date, type) {\n var currentDate = new Date(date.getTime());\n var firstDate = this.getStartDateFromEndDate(date);\n var lastDate = this.getEndDateFromStartDate(date);\n var daysCount = 0;\n do {\n var filterData = this.appointmentFiltering(currentDate);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n daysCount++;\n }\n currentDate = util.addDays(currentDate, (type === 'next') ? 1 : -1);\n if (currentDate < firstDate || currentDate > lastDate) {\n break;\n }\n } while (daysCount !== this.parent.agendaDaysCount);\n var endDate = util.addDays(currentDate, (type === 'next') ? -1 : 1);\n return (type === 'next') ? { start: date, end: util.addDays(endDate, 1) } : { start: endDate, end: util.addDays(date, 1) };\n };\n Agenda.prototype.appointmentFiltering = function (startDate, endDate) {\n var dateStart;\n var dateEnd;\n if (!isNullOrUndefined(startDate) && isNullOrUndefined(endDate)) {\n dateStart = util.resetTime(new Date(startDate.getTime()));\n dateEnd = util.setTime(new Date(dateStart.getTime()), util.MS_PER_DAY);\n }\n else {\n dateStart = new Date(startDate.getTime());\n dateEnd = new Date(endDate.getTime());\n }\n var filterData = this.parent.eventBase.filterEvents(dateStart, dateEnd);\n if (filterData.length === 0) {\n this.refreshEvent(startDate);\n filterData = this.parent.eventBase.filterEvents(dateStart, dateEnd);\n }\n return filterData;\n };\n Agenda.prototype.getStartDateFromEndDate = function (endDate) {\n var filterDate;\n var fields = this.parent.eventFields;\n if (this.parent.eventsProcessed.length > 0) {\n var firstDate = Math.min.apply(Math, this.parent.eventsProcessed.map(function (a) {\n return a[fields.startTime].getTime();\n }));\n filterDate = this.parent.hideEmptyAgendaDays ? new Date(firstDate) : this.parent.minDate;\n }\n else {\n filterDate = this.parent.hideEmptyAgendaDays ? util.addMonths(endDate, -1) : this.parent.minDate;\n }\n return util.resetTime(filterDate);\n };\n Agenda.prototype.getEndDateFromStartDate = function (startDate) {\n var filterDate;\n var fieldMapping = this.parent.eventFields;\n if (this.parent.eventsProcessed.length > 0) {\n var lastDate = Math.max.apply(Math, this.parent.eventsProcessed.map(function (a) {\n return a[fieldMapping.endTime].getTime();\n }));\n filterDate = this.parent.hideEmptyAgendaDays ? new Date(lastDate) : this.parent.maxDate;\n }\n else {\n filterDate = this.parent.hideEmptyAgendaDays ? util.addMonths(startDate, 1) : this.parent.maxDate;\n }\n return util.resetTime(util.addDays(filterDate, 1));\n };\n Agenda.prototype.getNextPreviousDate = function (type) {\n var noOfDays = (type === 'next') ? 1 : -1;\n return util.addDays(this.parent.selectedDate, noOfDays);\n };\n Agenda.prototype.startDate = function () {\n return util.resetTime(this.parent.selectedDate);\n };\n Agenda.prototype.endDate = function () {\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n return this.getEndDateFromStartDate(this.startDate());\n }\n else {\n return util.addDays(this.startDate(), this.parent.agendaDaysCount);\n }\n };\n Agenda.prototype.getDateRangeText = function (date) {\n var formatDate = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';\n if (this.parent.activeViewOptions.allowVirtualScrolling || this.parent.isAdaptive) {\n var currentDate = isNullOrUndefined(date) ? this.parent.selectedDate : date;\n return util.capitalizeFirstWord(this.parent.globalize.formatDate(currentDate, { format: formatDate, calendar: this.parent.getCalendarMode() }), 'multiple');\n }\n else {\n var startDate = this.parent.selectedDate;\n var endDate = util.addDays(startDate, this.parent.agendaDaysCount - 1);\n return this.formatDateRange(startDate, endDate);\n }\n };\n Agenda.prototype.dayNavigationClick = function (e) {\n var element = closest(e.currentTarget, '.' + cls.AGENDA_CELLS_CLASS);\n var date = this.parent.getDateFromElement(element);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive && this.parent.isMinMaxDate(date)) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day', e);\n }\n };\n Agenda.prototype.wireEvents = function () {\n EventHandler.add(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), event.scroll, this.agendaScrolling, this);\n };\n Agenda.prototype.unWireEvents = function () {\n EventHandler.remove(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), event.scroll, this.agendaScrolling);\n var dateHeaderElement = [].slice.call(this.element.querySelectorAll('.e-m-date'));\n for (var _i = 0, dateHeaderElement_1 = dateHeaderElement; _i < dateHeaderElement_1.length; _i++) {\n var element = dateHeaderElement_1[_i];\n EventHandler.remove(element, 'click', this.dayNavigationClick);\n }\n };\n Agenda.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.onAgendaScrollUiUpdate, this);\n this.parent.on(event.dataReady, this.eventLoad, this);\n };\n Agenda.prototype.removeEventListener = function () {\n if (this.parent) {\n this.parent.off(event.scrollUiUpdate, this.onAgendaScrollUiUpdate);\n this.parent.off(event.dataReady, this.eventLoad);\n }\n };\n Agenda.prototype.onAgendaScrollUiUpdate = function () {\n var headerHeight = this.getHeaderBarHeight();\n if (this.parent.headerModule) {\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n this.parent.headerModule.updateHeaderItems('add');\n }\n else {\n this.parent.headerModule.updateHeaderItems('remove');\n }\n }\n var contentArea = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (this.parent.height !== 'auto') {\n contentArea.style.height = formatUnit(this.parent.element.offsetHeight - headerHeight);\n }\n };\n Agenda.prototype.scrollToDate = function (scrollDate) {\n var date = new Date(+util.resetTime(scrollDate));\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n if (!this.parent.hideEmptyAgendaDays || this.parent.getEvents(date, util.addDays(date, 1), true).length > 0) {\n this.parent.changeDate(date);\n }\n }\n else {\n var dateElement = this.element.querySelector('.' + cls.AGENDA_CELLS_CLASS + '[data-date=\"' + date.getTime() + '\"]');\n if (dateElement) {\n this.getContentAreaElement().scrollTop = dateElement.offsetTop;\n }\n }\n };\n Agenda.prototype.destroy = function () {\n if (!this.parent || this.parent && this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n this.unWireEvents();\n if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\n if (this.parent.headerModule && this.parent.activeViewOptions.allowVirtualScrolling) {\n this.parent.headerModule.updateHeaderItems('remove');\n }\n _super.prototype.destroy.call(this);\n }\n };\n return Agenda;\n}(AgendaBase));\nexport { Agenda };\n","// Components\nimport VInput from '../../components/VInput'\n\n// Mixins\nimport Rippleable from '../rippleable'\nimport Comparable from '../comparable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\nexport function prevent (e: Event) {\n e.preventDefault()\n}\n\n/* @vue/component */\nexport default mixins(\n VInput,\n Rippleable,\n Comparable\n).extend({\n name: 'selectable',\n\n model: {\n prop: 'inputValue',\n event: 'change',\n },\n\n props: {\n id: String,\n inputValue: null as any,\n falseValue: null as any,\n trueValue: null as any,\n multiple: {\n type: Boolean,\n default: null,\n },\n label: String,\n },\n\n data () {\n return {\n hasColor: this.inputValue,\n lazyValue: this.inputValue,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (!this.isActive) return undefined\n if (this.color) return this.color\n if (this.isDark && !this.appIsDark) return 'white'\n return 'primary'\n },\n isMultiple (): boolean {\n return this.multiple === true || (this.multiple === null && Array.isArray(this.internalValue))\n },\n isActive (): boolean {\n const value = this.value\n const input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) return false\n\n return input.some(item => this.valueComparator(item, value))\n }\n\n if (this.trueValue === undefined || this.falseValue === undefined) {\n return value\n ? this.valueComparator(value, input)\n : Boolean(input)\n }\n\n return this.valueComparator(input, this.trueValue)\n },\n isDirty (): boolean {\n return this.isActive\n },\n rippleState (): string | undefined {\n return !this.isDisabled && !this.validationState\n ? undefined\n : this.validationState\n },\n },\n\n watch: {\n inputValue (val) {\n this.lazyValue = val\n this.hasColor = val\n },\n },\n\n methods: {\n genLabel () {\n const label = VInput.options.methods.genLabel.call(this)\n\n if (!label) return label\n\n label!.data!.on = {\n // Label shouldn't cause the input to focus\n click: prevent,\n }\n\n return label\n },\n genInput (type: string, attrs: object) {\n return this.$createElement('input', {\n attrs: Object.assign({\n 'aria-checked': this.isActive.toString(),\n disabled: this.isDisabled,\n id: this.computedId,\n role: type,\n type,\n }, attrs),\n domProps: {\n value: this.value,\n checked: this.isActive,\n },\n on: {\n blur: this.onBlur,\n change: this.onChange,\n focus: this.onFocus,\n keydown: this.onKeydown,\n click: prevent,\n },\n ref: 'input',\n })\n },\n onClick (e: Event) {\n this.onChange()\n this.$emit('click', e)\n },\n onChange () {\n if (!this.isInteractive) return\n\n const value = this.value\n let input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) {\n input = []\n }\n\n const length = input.length\n\n input = input.filter((item: any) => !this.valueComparator(item, value))\n\n if (input.length === length) {\n input.push(value)\n }\n } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue\n } else if (value) {\n input = this.valueComparator(input, value) ? null : value\n } else {\n input = !input\n }\n\n this.validate(true, input)\n this.internalValue = input\n this.hasColor = input\n },\n onFocus (e: FocusEvent) {\n this.isFocused = true\n this.$emit('focus', e)\n },\n onBlur (e: FocusEvent) {\n this.isFocused = false\n this.$emit('blur', e)\n },\n /** @abstract */\n onKeydown (e: Event) {},\n },\n})\n"],"sourceRoot":""}