{"version":3,"file":"kendo.calendar.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendocalendar","js","this","$","undefined$1","kendo","window","support","ui","Widget","keys","parse","parseDate","encode","htmlEncode","adjustDST","date","weekInYear","Selectable","RangeSelectable","extractFormat","_extractFormat","template","getCulture","transitions","transitionOrigin","css","cellTemplate","data","cssClass","ns","dateString","value","emptyCellTemplate","otherMonthCellTemplate","weekNumberTemplate","weekNumber","outerWidth","_outerWidth","CLICK","KEYDOWN_NS","ID","SLIDE","MONTH","CENTURY","CHANGE","NAVIGATE","VALUE","DISABLED","FOCUSED","OTHERMONTH","EMPTYCELL","CELLSELECTOR","START","CELLSELECTORVALID","SELECTED","BLUR","FOCUS","FOCUS_WITH_NS","MOUSEENTER","touch","MOUSEENTER_WITH_NS","MOUSELEAVE","MS_PER_DAY","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","extend","DATE","Date","views","month","year","decade","century","HEADERSELECTOR","Calendar","init","element","options","that","componentType","fn","call","wrapper","url","unescape","disableDates","getDisabledExpr","_templates","_selectable","_header","_viewWrapper","hasFooter","_footer","footer","_today","find","_toggle","addClass","on","mousetoggle","_move","bind","e","link","currentTarget","firstChild","toDateObject","indexOf","preventDefault","_view","name","_isSingleSelection","_click","_focusView","focusOnNav","attr","first","closest","last","_isMultipleSelection","selectable","_lastActive","selectRange","trigger","event","_isRangeSelection","rangeSelectable","range","change","_current","_value","_setCurrent","normalize","format","culture","_selectDates","_index","start","restrictValue","min","max","_addClassProxy","_active","_cell","hasClass","todayString","toDateString","getToday","_cellByDate","_removeClassProxy","removeClass","selectDates","length","_range","notify","dates","allowReverse","centuryCellsFormat","end","target","depth","size","showOtherMonthDays","animation","horizontal","effects","reverse","duration","divisor","vertical","messages","weekColumnHeader","today","navigateTo","parentViews","events","componentTypes","classic","header","actionAttr","isRtl","icon","iconClass","guid","linksSelector","contentClasses","modern","setOptions","_destroySelectable","hide","navigate","destroy","off","_title","_table","current","view","focus","table","_bindTable","_option","navigateToPast","_navigate","navigateToFuture","navigateUp","index","navigateDown","isEqualDate","isNaN","to","currentView","compare","disabled","title","from","old","_oldTable","currentValue","future","viewWrapper","children","calendar","toggleClass","kendoStop","_changeView","html","removeAttr","content","isWeekColumnVisible","_aria","replace","_animate","_focus","_visualizeSelectedDatesInView","_selectCell","validSelectedDates","datesUnique","map","getTime","filter","position","array","time","grep","_validateValue","setHours","createDate","getFullYear","getMonth","getDate","isInRange","selectedDates","each","clear","cells","_selectElement","parseOptions","single","multiple","selectableOptions","widget","cellSelector","cellSelectorValid","_onSelect","resetOnStart","aria","inputSelectors","relatedTarget","_onRelatedTarget","_restoreSelection","_preventChange","startInRange","endInRange","visibleRange","_visibleRange","_dateInViews","selectTo","selectFrom","mid","is","initialRange","eventArgs","useEnd","sender","_useEnd","useStart","_useStart","ctrlKey","metaKey","_toggleSelection","_cellsBySelector","_deselect","_addSelectedCellsToArray","shiftKey","_rangeSelection","currentCell","push","toDateCell","startDate","daysDifference","fromDate","toDate","daysBetweenTwoDates","addDaysToArray","DOT","selector","item","currentDateIndex","Number","splice","_dateInView","firstDateInView","_isNavigatable","cellIndex","isDisabled","eq","tables","lastDateInView","prevent","method","temp","cell","lastActive","key","keyCode","RIGHT","LEFT","UP","DOWN","SPACEBAR","HOME","END","getHours","getMinutes","getSeconds","getMilliseconds","setFullYear","_todayClick","ENTER","_keyboardToggleSelection","focusedDate","setDate","_nextNavigatable","_keyboardRangeSelection","focusedCell","_end","_start","PAGEUP","PAGEDOWN","_unselect","navigatableDate","active","parent","remove","append","insertAfter","_horizontal","viewWidth","margin","add","width","wrap","display","complete","unwrap","kendoAnimate","_vertical","insertBefore","left","parseInt","top","height","_selectedCell","removeAttribute","id","appendTo","show","toString","getValidCssClass","arrow","modifier","has","option","isBigger","value1","value2","isEqualMonth","empty","toggle","isTodayDisabled","todayClass","_todayClass","footerTemplate","linkClass","executeTemplate","label","useWithBlock","_updateAria","ariaTemplate","text","valueType","plugin","firstDayOfMonth","firstVisibleDay","calendarInfo","firstDay","getDay","setTime","tzOffsetBefore","getTimezoneOffset","resultDATE","tzOffsetDiff","getCalendarInfo","months","names","idx","navigateUrl","showHeader","hasUrl","currentCalendar","firstDayIdx","days","shiftArray","shortNames","namesShort","lastDayOfMonth","perRow","setter","build","day","i","inArray","join","weekNumberBuild","currentDate","timeOffset","Math","abs","date1","date2","month1","year1","month2","year2","hours","calendarMonths","namesAbbr","namesFull","setMonth","minYear","maxYear","modular","cellsPerRow","otherMonthTemplate","result","slice","concat","multiplier","endDate","fromDateUTC","UTC","endDateUTC","ceil","numberOfDays","nextDay","type","dateObject","calendars","standard","patterns","d","isFunction","Array","isArray","callback","disabledDates","convertDatesArray","toLowerCase","createDisabledExpr","noop","oldValue","newValue","split","tmpl","isEqualDatePart","viewsEnum","jQuery"],"sources":["kendo.calendar.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.core.js'), require('kendo.selectable.js'), require('kendo.icons.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.core', 'kendo.selectable', 'kendo.icons'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendocalendar = global.kendocalendar || {}, global.kendocalendar.js = factory()));\n})(this, (function () {\n let __meta__ = {\n id: \"calendar\",\n name: \"Calendar\",\n category: \"web\",\n description: \"The Calendar widget renders a graphical calendar that supports navigation and selection.\",\n depends: [ \"core\", \"selectable\" ]\n };\n\n (function($, undefined$1) {\n let kendo = window.kendo,\n support = kendo.support,\n ui = kendo.ui,\n Widget = ui.Widget,\n keys = kendo.keys,\n parse = kendo.parseDate,\n encode = kendo.htmlEncode,\n adjustDST = kendo.date.adjustDST,\n weekInYear = kendo.date.weekInYear,\n Selectable = kendo.ui.Selectable,\n RangeSelectable = kendo.ui.RangeSelectable,\n extractFormat = kendo._extractFormat,\n template = kendo.template,\n getCulture = kendo.getCulture,\n transitions = kendo.support.transitions,\n transitionOrigin = transitions ? transitions.css + \"transform-origin\" : \"\",\n cellTemplate = template((data) => `${data.value}`),\n emptyCellTemplate = template(() => ''),\n otherMonthCellTemplate = template(() => ' '),\n weekNumberTemplate = template((data) => `${data.weekNumber}`),\n outerWidth = kendo._outerWidth,\n ns = \".kendoCalendar\",\n CLICK = \"click\" + ns,\n KEYDOWN_NS = \"keydown\" + ns,\n DOT = \".\",\n EMPTY = \" \",\n TABLE = \"table\",\n CALENDAR_VIEW = \"k-calendar-view\",\n ID = \"id\",\n MIN = \"min\",\n LEFT = \"left\",\n SLIDE = \"slideIn\",\n MONTH = \"month\",\n CENTURY = \"century\",\n CHANGE = \"change\",\n NAVIGATE = \"navigate\",\n VALUE = \"value\",\n HOVER = \"k-hover\",\n DISABLED = \"k-disabled\",\n FOCUSED = \"k-focus\",\n OTHERMONTH = \"k-other-month\",\n EMPTYCELL = \"k-empty\",\n TODAY = \"k-calendar-nav-today\",\n CELLSELECTOR = \"td:has(.k-link)\",\n START = \"start\",\n END = \"end\",\n CELLSELECTORVALID = \"td:has(.k-link):not(.\" + DISABLED + \"):not(.\" + EMPTYCELL + \")\",\n WEEKCOLUMNSELECTOR = \"td:not(:has(.k-link))\",\n SELECTED = \"k-selected\",\n BLUR = \"blur\" + ns,\n FOCUS = \"focus\",\n FOCUS_WITH_NS = FOCUS + ns,\n MOUSEENTER = support.touch ? \"touchstart\" : \"mouseenter\",\n MOUSEENTER_WITH_NS = support.touch ? \"touchstart\" + ns : \"mouseenter\" + ns,\n MOUSELEAVE = support.touch ? \"touchend\" + ns + \" touchmove\" + ns : \"mouseleave\" + ns,\n MS_PER_MINUTE = 60000,\n MS_PER_DAY = 86400000,\n PREVARROW = \"_prevArrow\",\n NEXTARROW = \"_nextArrow\",\n ARIA_DISABLED = \"aria-disabled\",\n ARIA_SELECTED = \"aria-selected\",\n ARIA_LABEL = \"aria-label\",\n extend = $.extend,\n DATE = Date,\n views = {\n month: 0,\n year: 1,\n decade: 2,\n century: 3\n },\n HEADERSELECTOR = '.k-header, .k-calendar-header',\n CLASSIC_HEADER_TEMPLATE = ({ actionAttr, size, isRtl }) => `
\n ${kendo.ui.icon({ icon: `caret-alt-${isRtl ? \"right\" : \"left\"}`, iconClass: \"k-button-icon\" })}\n \n ${kendo.ui.icon({ icon: `caret-alt-${isRtl ? \"left\" : \"right\"}`, iconClass: \"k-button-icon\" })}\n
`,\n MODERN_HEADER_TEMPLATE = ({ actionAttr, size, messages, isRtl }) => `
\n \n \n \n \n \n \n \n
`;\n\n var Calendar = Widget.extend({\n init: function(element, options) {\n var that = this, value, id;\n options = options || {};\n options.componentType = options.componentType || \"classic\";\n Widget.fn.init.call(that, element, options);\n\n element = that.wrapper = that.element;\n options = that.options;\n\n options.url = kendo.unescape(options.url);\n\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n\n that._templates();\n\n that._selectable();\n\n that._header();\n\n that._viewWrapper();\n\n if (that.options.hasFooter) {\n that._footer(that.footer);\n } else {\n that._today = that.element.find('.k-calendar-nav-today');\n that._toggle();\n }\n\n id = element\n .addClass(\"k-calendar k-calendar-md \" + (options.weekNumber ? \" k-week-number\" : \"\"))\n .on(MOUSEENTER_WITH_NS + \" \" + MOUSELEAVE, CELLSELECTOR, mousetoggle)\n .on(KEYDOWN_NS, \"table.k-calendar-table\", that._move.bind(that))\n .on(CLICK + \" touchend\", CELLSELECTORVALID, function(e) {\n var link = e.currentTarget.firstChild,\n value = toDateObject(link);\n\n if ($(link).data(\"href\").indexOf(\"#\") != -1) {\n e.preventDefault();\n }\n\n if (that._view.name == \"month\" && that.options.disableDates(value)) {\n return;\n }\n if (that._view.name != \"month\" || that._isSingleSelection()) {\n that._click($(link));\n }\n })\n .on(\"mouseup\" + ns, \"table.k-calendar-table, .k-calendar-footer\", function() {\n that._focusView(that.options.focusOnNav !== false);\n })\n .attr(ID);\n\n if (that.options.weekNumber) {\n element.on(CLICK, WEEKCOLUMNSELECTOR, function(e) {\n var first = $(e.currentTarget).closest(\"tr\").find(CELLSELECTORVALID).first(),\n last = $(e.currentTarget).closest(\"tr\").find(CELLSELECTORVALID).last();\n\n if (that._isMultipleSelection()) {\n that.selectable._lastActive = last;\n that.selectable.selectRange(first, last);\n that.selectable.trigger(CHANGE, { event: e });\n }\n\n if (that._isRangeSelection()) {\n that.rangeSelectable._lastActive = last;\n that.rangeSelectable.range(first, last);\n that.rangeSelectable.change();\n }\n\n that._current = that._value = toDateObject(last.find(\"span\"));\n that._setCurrent(that._current);\n });\n }\n\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._selectDates = [];\n\n that._index = views[options.start];\n\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n\n that._addClassProxy = function() {\n that._active = true;\n\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n\n that._cell.addClass(FOCUSED);\n };\n\n that._removeClassProxy = function() {\n that._active = false;\n if (that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n };\n\n that.value(value);\n\n if (that._isMultipleSelection() && options.selectDates.length > 0) {\n that.selectDates(options.selectDates);\n }\n\n that._range = options.range;\n\n if (that._isRangeSelection()) {\n that.selectRange(that._range);\n }\n\n kendo.notify(that);\n },\n\n options: {\n name: \"Calendar\",\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n disableDates: null,\n allowReverse: false,\n centuryCellsFormat: \"long\",\n url: \"\",\n culture: \"\",\n footer: \"\",\n format: \"\",\n month: {},\n weekNumber: false,\n range: { start: null, end: null, target: START },\n selectable: \"single\",\n selectDates: [],\n start: MONTH,\n depth: MONTH,\n size: \"medium\",\n showOtherMonthDays: true,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: \"zoomIn\",\n duration: 400\n }\n },\n messages: {\n weekColumnHeader: \"\",\n today: \"Today\",\n navigateTo: \"Navigate to \",\n parentViews: {\n month: \"year view\",\n year: \"decade view\",\n decade: \"century view\"\n }\n },\n componentType: \"classic\"\n },\n\n events: [\n CHANGE,\n NAVIGATE\n ],\n\n componentTypes: {\n \"classic\": {\n header: {\n template: CLASSIC_HEADER_TEMPLATE\n },\n hasFooter: true,\n linksSelector: \".k-button\",\n contentClasses: \"k-calendar-table\"\n },\n \"modern\": {\n header: {\n template: MODERN_HEADER_TEMPLATE\n },\n hasFooter: false,\n linksSelector: \".k-button\",\n contentClasses: \"k-calendar-table\"\n }\n },\n\n setOptions: function(options) {\n var that = this;\n\n normalize(options);\n\n options.disableDates = getDisabledExpr(options.disableDates);\n that._destroySelectable();\n\n if (options.messages) {\n options.messages = $.extend({}, true, that.options.messages, options.messages);\n }\n\n Widget.fn.setOptions.call(that, options);\n\n that._templates();\n\n that._selectable();\n\n that._viewWrapper();\n\n if (that.options.hasFooter) {\n that._footer(that.footer);\n } else {\n that.element.find(\".k-calendar-footer\").hide();\n that._toggle();\n }\n that._index = views[that.options.start];\n\n that.navigate();\n\n if (options.weekNumber) {\n that.element.addClass('k-week-number');\n }\n },\n\n destroy: function() {\n var that = this,\n today = that._today;\n\n that.element.off(ns);\n that._title.off(ns);\n that[PREVARROW].off(ns);\n that[NEXTARROW].off(ns);\n that._destroySelectable();\n kendo.destroy(that._table);\n\n if (today) {\n kendo.destroy(today.off(ns));\n }\n\n Widget.fn.destroy.call(that);\n },\n\n current: function() {\n return this._current;\n },\n\n view: function() {\n return this._view;\n },\n\n focus: function(table) {\n table = table || this._table;\n this._bindTable(table);\n table.trigger(\"focus\");\n },\n\n min: function(value) {\n return this._option(MIN, value);\n },\n\n max: function(value) {\n return this._option(\"max\", value);\n },\n\n navigateToPast: function() {\n this._navigate(PREVARROW, -1);\n },\n\n navigateToFuture: function() {\n this._navigate(NEXTARROW, 1);\n },\n\n navigateUp: function() {\n var that = this,\n index = that._index;\n\n if (that._title.hasClass(DISABLED)) {\n return;\n }\n\n that.navigate(that._current, ++index);\n },\n\n navigateDown: function(value) {\n var that = this,\n index = that._index,\n depth = that.options.depth;\n\n if (!value) {\n return;\n }\n\n if (index === views[depth]) {\n if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n that.value(value);\n that.trigger(CHANGE);\n }\n return;\n }\n\n that.navigate(value, --index);\n },\n\n navigate: function(value, view) {\n view = isNaN(view) ? views[view] : view;\n\n var that = this,\n options = that.options,\n culture = options.culture,\n min = options.min,\n max = options.max,\n title = that._title,\n from = that._table,\n old = that._oldTable,\n currentValue = that._current,\n future = value && +value > +currentValue,\n vertical = view !== undefined$1 && view !== that._index,\n to, currentView, compare,\n disabled,\n viewWrapper = that.element.children(\".k-calendar-view\");\n\n if (!value) {\n value = currentValue;\n }\n\n that._current = value = new DATE(+restrictValue(value, min, max));\n\n if (view === undefined$1) {\n view = that._index;\n } else {\n that._index = view;\n }\n\n that._view = currentView = calendar.views[view];\n compare = currentView.compare;\n\n disabled = view === views[CENTURY];\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n\n disabled = compare(value, min) < 1;\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n\n if (from && old && old.data(\"animating\")) {\n old.kendoStop(true, true);\n from.kendoStop(true, true);\n }\n\n that._oldTable = from;\n\n if (!from || that._changeView) {\n title.html('' + currentView.title(value, min, max, culture) + '');\n\n if (that.options.messages.parentViews && that._view.name !== CENTURY) {\n title.attr(\"title\", encode(that.options.messages.navigateTo + that.options.messages.parentViews[that._view.name]));\n } else {\n title.removeAttr(\"title\");\n }\n\n that._table = to = $(currentView.content(extend({\n min: min,\n max: max,\n date: value,\n url: options.url,\n dates: options.dates,\n format: options.format,\n showOtherMonthDays: options.showOtherMonthDays,\n centuryCellsFormat: options.centuryCellsFormat,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber,\n messages: options.messages,\n contentClasses: that.options.contentClasses\n }, that[currentView.name])));\n\n that._aria();\n\n var replace = from && from.data(\"start\") === to.data(\"start\");\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n\n viewWrapper.removeClass(\"k-calendar-monthview k-calendar-yearview k-calendar-decadeview k-calendar-centuryview\");\n viewWrapper.addClass(\"k-calendar-\" + currentView.name + \"view\");\n\n that.trigger(NAVIGATE);\n\n that._focus(value);\n }\n\n if (view === views[options.depth] && that._selectDates.length > 0) {\n that._visualizeSelectedDatesInView();\n }\n\n if (that._isSingleSelection()) {\n if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n that._selectCell(that._value);\n }\n }\n\n that._setCurrent(value);\n\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n\n that._changeView = true;\n },\n\n selectDates: function(dates) {\n var that = this,\n validSelectedDates,\n datesUnique;\n\n if (dates === undefined$1) {\n return that._selectDates;\n }\n\n datesUnique = dates\n .map(function(date) { return date.getTime(); })\n .filter(function(date, position, array) {\n return array.indexOf(date) === position;\n })\n .map(function(time) { return new Date(time); });\n\n validSelectedDates = $.grep(datesUnique, function(value) {\n if (value) {\n return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n }\n });\n that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : (datesUnique.length === 0 ? datesUnique : that._selectDates);\n that._visualizeSelectedDatesInView();\n },\n\n value: function(value) {\n var that = this,\n old = that._view,\n view = that._view;\n\n if (value === undefined$1) {\n return that._value;\n }\n\n value = that._validateValue(value);\n if (value && that._isMultipleSelection()) {\n var date = new Date(+value);\n date.setHours(0, 0, 0, 0);\n that._selectDates = [date];\n that.selectable._lastActive = null;\n }\n\n if (old && value === null && that._cell) {\n that._cell.removeClass(SELECTED);\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n\n isRtl: function() {\n return kendo.support.isRtl(this.wrapper);\n },\n\n _aria: function() {\n var table = this._table;\n\n table.attr(\"aria-labelledby\", this._title.attr(\"id\"));\n\n if (this._view.name === \"month\" && this._isMultipleSelection()) {\n table.attr(\"aria-multiselectable\", \"true\");\n }\n },\n\n _validateValue: function(value) {\n var that = this,\n options = that.options,\n min = options.min,\n max = options.max;\n\n if (value === null) {\n that._current = createDate(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n\n value = parse(value, options.format, options.culture);\n\n if (value !== null) {\n value = new DATE(+value);\n\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n\n if (value === null || !that.options.disableDates(new Date(+value))) {\n that._value = value;\n } else if (that._value === undefined$1) {\n that._value = null;\n }\n\n return that._value;\n },\n\n _visualizeSelectedDatesInView: function() {\n var that = this;\n var selectedDates = {};\n $.each(that._selectDates, function(index, value) {\n selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n });\n that.selectable.clear();\n var cells = that._table\n .find(CELLSELECTOR)\n .filter(function(index, element) {\n return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n });\n if (cells.length > 0) {\n that.selectable._selectElement(cells, true);\n }\n },\n\n _isSingleSelection: function() {\n let selectable = this.options.selectable,\n selectableOptions = Selectable.parseOptions(selectable);\n return selectableOptions.single;\n },\n\n _isMultipleSelection: function() {\n let selectable = this.options.selectable,\n selectableOptions = Selectable.parseOptions(selectable);\n return selectableOptions.multiple;\n },\n\n _isRangeSelection: function() {\n let selectable = this.options.selectable,\n selectableOptions = Selectable.parseOptions(selectable);\n return selectableOptions.range;\n },\n\n _selectable: function() {\n let that = this,\n selectable = that.options.selectable,\n selectableOptions = Selectable.parseOptions(selectable);\n\n if (!that._isMultipleSelection() && !that._isRangeSelection()) {\n return;\n }\n\n if (that.rangeSelectable) {\n that.rangeSelectable.destroy();\n that.rangeSelectable = null;\n }\n\n if (selectableOptions.range) {\n that.rangeSelectable = new RangeSelectable(that.wrapper, {\n widget: that,\n filter: \".k-calendar-monthview table \" + CELLSELECTORVALID,\n cellSelector: CELLSELECTOR,\n cellSelectorValid: CELLSELECTORVALID,\n change: that._onSelect.bind(that),\n reverse: that.options.allowReverse,\n resetOnStart: true,\n ns: ns\n });\n\n that.element.addClass(\"k-calendar-range\");\n } else {\n that.selectable = new Selectable(that.wrapper, {\n aria: true,\n //excludes the anchor element\n inputSelectors: \"input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-caret-alt-down,span.k-icon.k-i-caret-alt-up,span.k-svg-icon.k-svg-i-caret-alt-down,span.k-svg-icon.k-svg-i-caret-alt-up\",\n multiple: selectableOptions.multiple,\n filter: \"table.k-calendar-table:eq(0) \" + CELLSELECTORVALID,\n change: that._onSelect.bind(that),\n relatedTarget: that._onRelatedTarget.bind(that)\n });\n }\n },\n\n _restoreSelection: function() {\n const that = this;\n let range;\n\n that._preventChange = true;\n\n if (that._isRangeSelection()) {\n range = that.selectRange();\n\n if (!range || !range.start) {\n that._preventChange = false;\n return;\n }\n\n that.selectRange(range);\n }\n\n that._preventChange = false;\n },\n\n selectRange: function(range) {\n const that = this, view = that._view;\n let startInRange, endInRange, visibleRange;\n\n if (range === undefined$1) {\n return that._range;\n }\n\n that._range = range;\n\n if (!range.start) {\n return;\n }\n\n visibleRange = that._visibleRange();\n\n startInRange = that._dateInViews(range.start);\n endInRange = range.end && that._dateInViews(range.end);\n\n if (!startInRange && endInRange) {\n that.rangeSelectable.selectTo(that._cellByDate(view.toDateString(range.end)));\n }\n\n if (startInRange && endInRange) {\n that.rangeSelectable.range(that._cellByDate(view.toDateString(range.start)), that._cellByDate(view.toDateString(range.end)), false, that.options.allowReverse);\n }\n\n if (range.end && startInRange && !endInRange) {\n that.rangeSelectable.selectFrom(that._cellByDate(view.toDateString(range.start)));\n }\n\n if (!range.end && startInRange) {\n that.rangeSelectable.start(that._cellByDate(view.toDateString(range.start)));\n }\n\n if (+visibleRange.start > +range.start && +visibleRange.end < +range.end) {\n that.rangeSelectable.mid(that.element.find(CELLSELECTORVALID));\n }\n },\n\n _onRelatedTarget: function(target) {\n var that = this;\n\n if (that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n that._current = toDateObject(target.find(\"span\"));\n that._setCurrent(that._current);\n }\n\n },\n\n _onSelect: function(e) {\n let that = this,\n eventArgs = e,\n range,\n useEnd = e.sender._useEnd,\n useStart = e.sender._useStart,\n initialRange,\n start,\n end,\n value,\n target,\n selectableOptions = Selectable.parseOptions(that.options.selectable);\n\n if (that._isRangeSelection()) {\n range = e.sender.range();\n initialRange = that.selectRange() || {};\n target = initialRange.target;\n if (range.start && range.start.length) {\n start = toDateObject(range.start.find(\"span\"));\n }\n\n if (range.end && range.end.length) {\n end = toDateObject(range.end.find(\"span\"));\n }\n\n if (target === END) {\n target = START;\n } else {\n target = END;\n }\n\n that._range = { start: useStart ? initialRange.start : start, end: useEnd ? initialRange.end : end, target: target };\n\n if (!that._preventChange) {\n that.trigger(CHANGE);\n }\n\n value = end || start;\n\n if (end && !that._dateInViews(end)) {\n value = start;\n }\n\n that.selectRange(that._range);\n that.value(value);\n return;\n }\n\n if (!selectableOptions.multiple) {\n if ($(eventArgs.event.currentTarget).is(\"td\") && !$(eventArgs.event.currentTarget).hasClass(\"k-selected\")) {\n $(eventArgs.event.currentTarget).addClass(\"k-selected\");\n }\n else {\n that._click($(eventArgs.event.currentTarget).find(\"span\"));\n }\n return;\n }\n\n if (eventArgs.event.ctrlKey || eventArgs.event.metaKey) {\n if ($(eventArgs.event.currentTarget).is(CELLSELECTORVALID)) {\n that._toggleSelection($(eventArgs.event.currentTarget));\n }\n else {\n that._cellsBySelector(CELLSELECTORVALID).each(function(index, element) {\n var value = toDateObject($(element).find(\"span\"));\n that._deselect(value);\n });\n that._addSelectedCellsToArray();\n }\n }\n else if (eventArgs.event.shiftKey) {\n that._rangeSelection(that._cell);\n }\n else if ($(eventArgs.event.currentTarget).is(CELLSELECTOR)) {\n that.value(toDateObject($(eventArgs.event.currentTarget).find(\"span\")));\n }\n else {\n that._selectDates = [];\n that._addSelectedCellsToArray();\n }\n that.trigger(CHANGE);\n },\n\n _destroySelectable: function() {\n var that = this;\n\n if (that.selectable) {\n that.selectable.destroy();\n that.selectable = null;\n }\n\n if (that.rangeSelectable) {\n that.rangeSelectable.destroy();\n that.rangeSelectable = null;\n }\n },\n\n //when ctrl key is clicked\n _toggleSelection: function(currentCell) {\n var that = this,\n date = toDateObject(currentCell.find(\"span\"));\n if (currentCell.hasClass(\"k-selected\")) {\n that._selectDates.push(date);\n }\n else {\n that._deselect(date);\n }\n },\n\n //shift selection\n _rangeSelection: function(toDateCell, startDate) {\n var that = this,\n fromDate = startDate || toDateObject(that.selectable.value().first().find(\"span\")),\n toDate = toDateObject(toDateCell.find(\"span\")),\n daysDifference;\n\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find(\"span\")) : new Date(+that._value);\n } else {\n that.selectable._lastActive = startDate ? that._cellByDate(that._view.toDateString(startDate), CELLSELECTORVALID) : that.selectable.value().first();\n }\n\n that._selectDates = [];\n daysDifference = daysBetweenTwoDates(fromDate, toDate);\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n\n that._visualizeSelectedDatesInView();\n },\n\n _visibleRange: function() {\n let table = this.element.find(DOT + CALENDAR_VIEW + EMPTY + TABLE),\n firstDateInView = toDateObject(table.first().find(CELLSELECTOR).first().find(\"span\")),\n lastDateInView = toDateObject(table.last().find(CELLSELECTOR).last().find(\"span\"));\n return { start: firstDateInView, end: lastDateInView };\n },\n\n _cellsBySelector: function(selector) {\n var that = this;\n return that._table.find(selector);\n },\n\n _addSelectedCellsToArray: function() {\n var that = this;\n that.selectable.value().each(function(index, item) {\n var date = toDateObject($(item.firstChild));\n if (!that.options.disableDates(date)) {\n that._selectDates.push(date);\n }\n });\n },\n\n _deselect: function(date) {\n var that = this;\n var currentDateIndex = that._selectDates.map(Number).indexOf(+date);\n if (currentDateIndex != -1) {\n that._selectDates.splice(currentDateIndex, 1);\n }\n },\n\n _dateInView: function(date) {\n var that = this,\n firstDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID).first().find(\"span\")),\n lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID).last().find(\"span\"));\n\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n\n _isNavigatable: function(currentValue, cellIndex) {\n var that = this;\n var isDisabled = that.options.disableDates;\n var cell;\n var index;\n\n if (that._view.name == \"month\") {\n return !isDisabled(currentValue);\n } else {\n index = that.wrapper.find(\".\" + FOCUSED).index();\n cell = that.wrapper.find(\".k-calendar-table td\").eq(index + cellIndex);\n return cell.is(CELLSELECTORVALID) || !isDisabled(currentValue);\n }\n },\n\n _dateInViews: function(date) {\n let that = this,\n tables = that.element.find(\".k-calendar-view table\"),\n firstDateInView = toDateObject(tables.first().find(CELLSELECTOR).first().find(\"span\")),\n lastDateInView = toDateObject(tables.last().find(CELLSELECTOR).last().find(\"span\"));\n\n date = new Date(date.toDateString());\n\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n\n _move: function(e) {\n var that = this,\n options = that.options,\n key = e.keyCode,\n view = that._view,\n index = that._index,\n min = that.options.min,\n max = that.options.max,\n currentValue = new DATE(+that._current),\n isRtl = that.isRtl(),\n isDisabled = that.options.disableDates,\n value, prevent, method, temp, cell, focusedCell, lastActive;\n\n if (e.target === that._table[0]) {\n that._active = true;\n }\n\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.SPACEBAR) {\n value = 0;\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? \"first\" : \"last\";\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n currentValue.setFullYear(temp.getFullYear());\n prevent = true;\n } else if (key === 84) {\n that._todayClick(e);\n prevent = true;\n }\n\n if (e.ctrlKey || e.metaKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n }\n else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n that._keyboardToggleSelection(e);\n\n var focusedDate = toDateObject($(that._cell[0]).find(\"span\"));\n that._setCurrent(focusedDate);\n\n }\n } else if (e.shiftKey) {\n if (value !== undefined$1 || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else if (that._isRangeSelection()) {\n if (!that._dateInViews(currentValue)) {\n if (value > 0) {\n that.navigateToFuture();\n } else {\n that.navigateToPast();\n }\n }\n } else {\n that._focus(currentValue);\n }\n }\n\n if (that.rangeSelectable) {\n cell = that._cellByDate(view.toDateString(currentValue));\n lastActive = toDateObject((that.rangeSelectable._lastActive || focusedCell).find(\"span\"));\n if (!that._dateInViews(lastActive)) {\n if (+lastActive > +currentValue) {\n that.rangeSelectable._end = that.rangeSelectable._lastActive;\n that.rangeSelectable.selectFrom(cell);\n } else {\n that.rangeSelectable.selectTo(cell);\n }\n } else {\n if (that.rangeSelectable._end && that.rangeSelectable._end.is(\".\" + FOCUSED)) {\n that.rangeSelectable._lastActive = that.rangeSelectable._start;\n } else {\n that.rangeSelectable._lastActive = that._cellByDate(view.toDateString(lastActive));\n }\n that.rangeSelectable.range(that.rangeSelectable._lastActive, cell);\n }\n that.rangeSelectable.change();\n that._setCurrent(currentValue);\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == \"month\" && that._isMultipleSelection()) {\n that.value(toDateObject($(that._cell.find(\"span\"))));\n that.selectable._lastActive = $(that._cell[0]);\n that.trigger(CHANGE);\n } else if (that.rangeSelectable) {\n that.rangeSelectable.change();\n } else {\n that._click($(that._cell[0].firstChild));\n }\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n\n if (!that._isNavigatable(currentValue, value)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n }\n else {\n that._current = currentValue;\n that._setCurrent(currentValue);\n }\n }\n else {\n that._focus(currentValue);\n }\n }\n }\n\n if (prevent) {\n e.preventDefault();\n }\n\n return that._current;\n },\n\n _keyboardRangeSelection: function(event, currentValue) {\n var that = this,\n fromDate,\n daysDifference;\n\n if (!that._dateInView(currentValue)) {\n that._selectDates = [];\n\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find(\"span\")) : currentValue;\n daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n\n that.navigate(currentValue);\n that._current = currentValue;\n that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n that.trigger(CHANGE);\n return;\n }\n that.selectable.options.filter = that.wrapper.find(\"table\").length > 1 && +currentValue > +that._current ? \"table.k-calendar-table:eq(1) \" + CELLSELECTORVALID : \"table.k-calendar-table:eq(0) \" + CELLSELECTORVALID;\n that._setCurrent(currentValue);\n that._current = currentValue;\n\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n\n that.trigger(CHANGE);\n\n that.selectable.options.filter = \"table.k-calendar-table:eq(0) \" + CELLSELECTORVALID;\n },\n\n _keyboardToggleSelection: function(event) {\n var that = this;\n\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n }\n else {\n that.selectable.value($(that._cell[0]));\n }\n that.selectable.trigger(CHANGE, { event: event });\n },\n\n _nextNavigatable: function(currentValue, value) {\n var that = this,\n disabled = true,\n view = that._view,\n min = that.options.min,\n max = that.options.max,\n isDisabled = that.options.disableDates,\n navigatableDate = new Date(currentValue.getTime());\n\n view.setDate(navigatableDate, -value);\n\n while (disabled) {\n view.setDate(currentValue, value);\n\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n\n _animate: function(options) {\n var that = this;\n var from = options.from;\n var to = options.to;\n var active = that._active;\n var viewWrapper = that.element.children(\".k-calendar-view\");\n\n if (!from) {\n viewWrapper.append(to);\n that._bindTable(to);\n } else if (from.parent().data(\"animating\")) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n\n viewWrapper.append(to);\n that._focusView(active);\n } else if (!from.is(\":visible\") || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n\n that._focusView(active);\n } else {\n that[options.vertical ? \"_vertical\" : \"_horizontal\"](from, to, options.future);\n }\n },\n\n _horizontal: function(from, to, future) {\n var that = this,\n active = that._active,\n horizontal = that.options.animation.horizontal,\n effects = horizontal.effects,\n viewWidth = outerWidth(from),\n margin = (outerWidth(from, true) - viewWidth);\n\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n\n from.wrap(\"
\");\n\n that._focusView(active, from);\n\n from.parent()\n .css({\n position: \"relative\",\n width: (viewWidth * 2) + (2 * margin),\n display: \"flex\",\n \"margin-left\": future ? 0 : (-viewWidth - margin)\n });\n\n to[future ? \"insertAfter\" : \"insertBefore\"](from);\n\n extend(horizontal, {\n effects: SLIDE + \":\" + (future ? \"right\" : LEFT),\n complete: function() {\n from.off(ns).remove();\n that._oldTable = null;\n\n to.unwrap();\n\n that._focusView(active);\n\n }\n });\n\n from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n }\n },\n\n _vertical: function(from, to) {\n var that = this,\n vertical = that.options.animation.vertical,\n effects = vertical.effects,\n active = that._active, //active state before from's blur\n cell, position;\n\n if (effects && effects.indexOf(\"zoom\") != -1) {\n to.insertBefore(from);\n\n from.css({\n position: \"absolute\",\n width: to.width()\n });\n\n if (transitionOrigin) {\n cell = that._cellByDate(that._view.toDateString(that._current));\n position = cell.position();\n position = (position.left + parseInt(cell.width() / 2, 10)) + \"px\" + \" \" + (position.top + parseInt(cell.height() / 2, 10) + \"px\");\n to.css(transitionOrigin, position);\n }\n\n from.kendoStop(true, true).kendoAnimate({\n effects: \"fadeOut\",\n duration: 600,\n complete: function() {\n from.off(ns).remove();\n that._oldTable = null;\n\n that._focusView(active);\n }\n });\n\n to.kendoStop(true, true).kendoAnimate(vertical);\n }\n },\n\n _cellByDate: function(value, selector) {\n return this._table.find(selector ? selector : \"td:not(.\" + OTHERMONTH + \")\")\n .filter(function() {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n });\n },\n\n _selectCell: function(date) {\n var that = this,\n cell = that._selectedCell,\n value = that._view.toDateString(date);\n\n if (cell && cell[0]) {\n cell[0].removeAttribute(ARIA_SELECTED);\n cell.removeClass(SELECTED);\n }\n\n cell = that._cellByDate(value, CELLSELECTOR);\n\n that._selectedCell = cell;\n cell.addClass(SELECTED)\n .attr(ARIA_SELECTED, true);\n },\n\n _setCurrent: function(date) {\n var that = this,\n id = kendo.guid(),\n cell = that._cell,\n value = that._view.toDateString(date);\n\n if (cell && cell[0]) {\n cell.removeClass(FOCUSED);\n cell[0].removeAttribute(ARIA_LABEL);\n cell[0].removeAttribute(ID);\n }\n\n cell = that._cellByDate(value, that._isMultipleSelection() ? CELLSELECTOR : \"td:not(.\" + OTHERMONTH + \")\");\n\n that._cell = cell;\n\n cell.attr(ID, id)\n .addClass(FOCUSED);\n\n if (that._table[0]) {\n that._table[0].removeAttribute(\"aria-activedescendant\");\n that._table.attr(\"aria-activedescendant\", id);\n }\n },\n\n _bindTable: function(table) {\n table\n .on(FOCUS_WITH_NS, this._addClassProxy)\n .on(BLUR, this._removeClassProxy);\n },\n\n _click: function(link) {\n var that = this,\n options = that.options,\n currentValue = new Date(+that._current),\n value = toDateObject(link);\n\n adjustDST(value, 0);\n\n if (that._view.name == \"month\" && that.options.disableDates(value)) {\n value = that._value;\n }\n\n that._view.setDate(currentValue, value);\n\n that.navigateDown(restrictValue(currentValue, options.min, options.max));\n },\n\n _focus: function(value) {\n var that = this,\n view = that._view;\n\n if (view.compare(value, that._current) !== 0) {\n that.navigate(value);\n } else {\n that._current = value;\n that._setCurrent(value);\n }\n },\n\n _focusView: function(active, table) {\n if (active) {\n this.focus(table);\n }\n },\n\n _viewWrapper: function() {\n var that = this;\n var element = that.element;\n var viewWrapper = element.children(\".k-calendar-view\");\n\n if (!viewWrapper[0]) {\n viewWrapper = $(\"
\").insertAfter(element.find(HEADERSELECTOR));\n }\n },\n\n _footer: function(template) {\n var that = this,\n today = getToday(),\n element = that.element,\n footer = element.find(\".k-calendar-footer\");\n\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n\n if (!footer[0]) {\n footer = $(`
\n \n
`).appendTo(element);\n }\n\n that._today = footer.show()\n .find(\".k-button-flat-primary\")\n .attr(\"title\", kendo.toString(today, \"D\", that.options.culture));\n\n footer.find(\".k-button-text\")\n .html(template(today));\n\n that._toggle();\n },\n\n _header: function() {\n var that = this,\n element = that.element,\n linksSelector = that.options.linksSelector;\n\n if (!element.find(HEADERSELECTOR)[0]) {\n element.html(kendo.template(that.options.header.template)($.extend(true,{}, that.options, {\n actionAttr: kendo.attr(\"action\"),\n size: kendo.getValidCssClass(\"k-button-\", \"size\", that.options.size),\n isRtl: that.isRtl()\n })));\n }\n\n element.find(linksSelector)\n .on(CLICK + \" touchend\" + ns, function() { return false; } );\n\n that._title = element.find('[' + kendo.attr(\"action\") + '=\"nav-up\"]').on(CLICK + \" touchend\" + ns, function() {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = element.find('[' + kendo.attr(\"action\") + '=\"prev\"]').on(CLICK + \" touchend\" + ns, function() {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = element.find('[' + kendo.attr(\"action\") + '=\"next\"]').on(CLICK + \" touchend\" + ns, function() {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n element.find('[' + kendo.attr(\"action\") + '=\"today\"]').on(CLICK + \" touchend\" + ns, that._todayClick.bind(that));\n\n },\n\n _navigate: function(arrow, modifier) {\n var that = this,\n index = that._index + 1,\n currentValue = new DATE(+that._current);\n\n if (that._isMultipleSelection()) {\n var firstDayCurrentMonth = that._table.find(\"td:not(.\" + OTHERMONTH + \"):not(.\" + EMPTYCELL + \")\").has(\".k-link\").first();\n currentValue = toDateObject(firstDayCurrentMonth.find(\"span\"));\n that._current = new Date(+currentValue);\n }\n\n arrow = that[arrow];\n\n if (!arrow.hasClass(DISABLED)) {\n if (index > 3) {\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n } else {\n calendar.views[index].setDate(currentValue, modifier);\n }\n\n that.navigate(currentValue);\n that._restoreSelection();\n }\n },\n\n _option: function(option, value) {\n var that = this,\n options = that.options,\n currentValue = that._value || that._current,\n isBigger;\n\n if (value === undefined$1) {\n return options[option];\n }\n\n value = parse(value, options.format, options.culture);\n\n if (!value) {\n return;\n }\n\n options[option] = new DATE(+value);\n\n if (option === MIN) {\n isBigger = value > currentValue;\n } else {\n isBigger = currentValue > value;\n }\n\n if (isBigger || isEqualMonth(currentValue, value)) {\n if (isBigger) {\n that._value = null;\n }\n that._changeView = true;\n }\n\n if (!that._changeView) {\n that._changeView = !!(options.month.content || options.month.empty);\n }\n\n that.navigate(that._value);\n\n that._toggle();\n },\n\n _toggle: function(toggle) {\n var that = this,\n options = that.options,\n isTodayDisabled = that.options.disableDates(getToday()),\n link = that._today,\n todayClass = that._todayClass();\n\n if (toggle === undefined$1) {\n toggle = isInRange(getToday(), options.min, options.max);\n }\n\n if (link) {\n link.off(CLICK);\n\n if (toggle && !isTodayDisabled) {\n link.addClass(todayClass)\n .removeClass(DISABLED)\n .on(CLICK, that._todayClick.bind(that));\n } else {\n link.removeClass(todayClass)\n .addClass(DISABLED)\n .on(CLICK, prevent);\n }\n }\n },\n\n _todayClass: function() {\n return TODAY;\n },\n\n _todayClick: function(e) {\n var that = this,\n depth = views[that.options.depth],\n disabled = that.options.disableDates,\n today = getToday();\n\n e.preventDefault();\n\n if (disabled(today)) {\n return;\n }\n\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n that._changeView = false;\n }\n\n if (that._isMultipleSelection()) {\n that._selectDates = [today];\n that.selectable._lastActive = null;\n }\n\n that._value = today;\n that.navigate(today, depth);\n\n that.trigger(CHANGE);\n },\n\n _templates: function() {\n var that = this,\n options = that.options,\n footer = options.footer,\n month = options.month,\n content = month.content,\n weekNumber = month.weekNumber,\n empty = month.empty,\n footerTemplate = (data) => `${kendo.toString(data,\"D\",options.culture)}`;\n\n that.month = {\n content: (data) => `${executeTemplate(content, data) || data.value}`,\n empty: (data) => `${executeTemplate(empty, data) || \" \"}`,\n weekNumber: (data) => `${executeTemplate(weekNumber, data) || data.weekNumber}`\n };\n\n that.year = {\n content: template((data) => `${data.value}`)\n };\n\n if (footer && footer !== true) {\n footerTemplate = footer;\n }\n\n that.footer = footer !== false ? template(footerTemplate, { useWithBlock: false }) : null;\n },\n\n _updateAria: function(ariaTemplate, date) {\n var that = this;\n var cell = that._cell;\n var valueType = that.view().valueType();\n var current = date || that.current();\n var text;\n\n if (valueType === \"month\") {\n text = kendo.toString(current, \"MMMM\");\n } else if (valueType === \"date\") {\n text = kendo.toString(current, \"D\");\n } else {\n text = cell.text();\n }\n\n cell.attr(\"aria-label\", ariaTemplate({ current: current, valueType: valueType, text: text }));\n\n return cell.attr(\"id\");\n }\n });\n\n ui.plugin(Calendar);\n\n var calendar = {\n firstDayOfMonth: function(date) {\n return createDate(\n date.getFullYear(),\n date.getMonth(),\n 1\n );\n },\n\n firstVisibleDay: function(date, calendarInfo) {\n calendarInfo = calendarInfo || kendo.culture().calendar;\n\n var firstDay = calendarInfo.firstDay,\n firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n firstVisibleDay.setFullYear(date.getFullYear());\n\n while (firstVisibleDay.getDay() != firstDay) {\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n\n return firstVisibleDay;\n },\n\n setTime: function(date, time) {\n var tzOffsetBefore = date.getTimezoneOffset(),\n resultDATE = new DATE(date.getTime() + time),\n tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n },\n views: [{\n name: MONTH,\n title: function(date, min, max, culture) {\n return getCalendarInfo(culture).months.names[date.getMonth()] + \" \" + date.getFullYear();\n },\n content: function(options) {\n var that = this,\n idx = 0,\n min = options.min,\n max = options.max,\n date = options.date,\n dates = options.dates,\n format = options.format,\n culture = options.culture,\n navigateUrl = options.url,\n showHeader = options.showHeader,\n showOtherMonthDays = options.showOtherMonthDays,\n isWeekColumnVisible = options.isWeekColumnVisible,\n hasUrl = navigateUrl && dates[0],\n currentCalendar = getCalendarInfo(culture),\n firstDayIdx = currentCalendar.firstDay,\n days = currentCalendar.days,\n names = shiftArray(days.names, firstDayIdx),\n shortNames = shiftArray(days.namesShort, firstDayIdx),\n start = calendar.firstVisibleDay(date, currentCalendar),\n firstDayOfMonth = that.first(date),\n lastDayOfMonth = that.last(date),\n toDateString = that.toDateString,\n today = getToday(),\n contentClasses = options.contentClasses,\n html = '';\n\n if (showHeader) {\n html += '';\n }\n\n html += '';\n\n if (isWeekColumnVisible) {\n html += '';\n }\n\n for (; idx < 7; idx++) {\n html += '';\n }\n\n adjustDST(today, 0);\n today = +today;\n\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\n start: createDate(start.getFullYear(), start.getMonth(), start.getDate()),\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n max: createDate(max.getFullYear(), max.getMonth(), max.getDate()),\n showOtherMonthDays: showOtherMonthDays,\n content: options.content,\n lastDayOfMonth: lastDayOfMonth,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function(date, idx, disableDates) {\n var cssClass = [ \"k-calendar-td\" ],\n day = date.getDay(),\n linkClass = \"\",\n url = \"#\";\n\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n\n if (+date === today) {\n cssClass.push(\"k-today\");\n }\n\n if (day === 0 || day === 6) {\n cssClass.push(\"k-weekend\");\n }\n\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace(\"{0}\", kendo.toString(date, format, culture));\n linkClass = \" k-action-link\";\n }\n\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, \"D\", culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass.join(\" \"),\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function(date) {\n return {\n weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n currentDate: date\n };\n }\n });\n },\n first: function(date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function(date) {\n var last = createDate(date.getFullYear(), date.getMonth() + 1, 0),\n first = calendar.firstDayOfMonth(date),\n timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n\n if (timeOffset) {\n last.setHours(first.getHours() + (timeOffset / 60));\n }\n\n return last;\n },\n compare: function(date1, date2) {\n var result,\n month1 = date1.getMonth(),\n year1 = date1.getFullYear(),\n month2 = date2.getMonth(),\n year2 = date2.getFullYear();\n\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n\n return result;\n },\n setDate: function(date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function(date) {\n return date.getFullYear() + \"/\" + date.getMonth() + \"/\" + date.getDate();\n },\n valueType: function() {\n return \"date\";\n }\n },\n {\n name: \"year\",\n title: function(date) {\n return date.getFullYear();\n },\n content: function(options) {\n var calendarMonths = getCalendarInfo(options.culture).months,\n namesAbbr = calendarMonths.namesAbbr,\n namesFull = calendarMonths.names,\n toDateString = this.toDateString,\n min = options.min,\n max = options.max,\n html = \"\";\n\n if (options.showHeader) {\n html += '
' + this.title(date, min, max, culture) + '
' + encode(options.messages.weekColumnHeader) + '' + shortNames[idx] + '
';\n html += '';\n html += '';\n html += '';\n }\n\n return view({\n min: createDate(min.getFullYear(), min.getMonth(), 1),\n max: createDate(max.getFullYear(), max.getMonth(), 1),\n start: createDate(options.date.getFullYear(), 0, 1),\n html: html,\n setter: this.setDate,\n content: options.content,\n build: function(date) {\n var cssClass = [ \"k-calendar-td\" ];\n\n return {\n value: namesAbbr[date.getMonth()],\n label: namesFull[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: cssClass.join(\" \")\n };\n }\n });\n },\n first: function(date) {\n return createDate(date.getFullYear(), 0, date.getDate());\n },\n last: function(date) {\n return createDate(date.getFullYear(), 11, date.getDate());\n },\n compare: function(date1, date2) {\n return compare(date1, date2);\n },\n setDate: function(date, value) {\n var month,\n hours = date.getHours();\n\n if (value instanceof DATE) {\n month = value.getMonth();\n\n date.setFullYear(value.getFullYear(), month, date.getDate());\n\n if (month !== date.getMonth()) {\n date.setDate(0);\n }\n } else {\n month = date.getMonth() + value;\n\n date.setMonth(month);\n\n if (month > 11) {\n month -= 12;\n }\n\n if (month > 0 && date.getMonth() != month) {\n date.setDate(0);\n }\n }\n\n adjustDST(date, hours);\n },\n toDateString: function(date) {\n return date.getFullYear() + \"/\" + date.getMonth() + \"/1\";\n },\n valueType: function() {\n return \"month\";\n }\n },\n {\n name: \"decade\",\n title: function(date, min, max) {\n return title(date, min, max, 10);\n },\n content: function(options) {\n var year = options.date.getFullYear(),\n toDateString = this.toDateString,\n html = \"\";\n\n if (options.showHeader) {\n html += '
';\n html += this.title(options.date);\n html += '
';\n html += '';\n html += '';\n html += '';\n }\n\n return view({\n start: createDate(year - year % 10, 0, 1),\n min: createDate(options.min.getFullYear(), 0, 1),\n max: createDate(options.max.getFullYear(), 0, 1),\n showOtherMonthDays: options.showOtherMonthDays,\n html: html,\n setter: this.setDate,\n build: function(date, idx) {\n var cssClass = [ \"k-calendar-td\" ];\n\n if (idx === 10 || idx === 11) {\n cssClass.push(EMPTYCELL);\n }\n\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: cssClass.join(\" \")\n };\n }\n });\n },\n first: function(date) {\n var year = date.getFullYear();\n return createDate(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function(date) {\n var year = date.getFullYear();\n return createDate(year - year % 10 + 9, date.getMonth(), date.getDate());\n },\n compare: function(date1, date2) {\n return compare(date1, date2, 10);\n },\n setDate: function(date, value) {\n setDate(date, value, 1);\n },\n toDateString: function(date) {\n return date.getFullYear() + \"/0/1\";\n },\n valueType: function() {\n return \"year\";\n }\n },\n {\n name: CENTURY,\n title: function(date, min, max) {\n return title(date, min, max, 100);\n },\n content: function(options) {\n var year = options.date.getFullYear(),\n min = options.min.getFullYear(),\n max = options.max.getFullYear(),\n toDateString = this.toDateString,\n minYear = min,\n maxYear = max,\n html = \"\";\n\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n\n if (options.showHeader) {\n html += '
';\n html += this.title(options.date, options.min, options.max);\n html += '
';\n html += '';\n html += '';\n html += '';\n }\n\n return view({\n start: createDate(year - year % 100, 0, 1),\n min: createDate(minYear, 0, 1),\n max: createDate(maxYear, 0, 1),\n showOtherMonthDays: options.showOtherMonthDays,\n html: html,\n setter: this.setDate,\n build: function(date, idx) {\n var cssClass = [ \"k-calendar-td\" ];\n var start = date.getFullYear(),\n end = start + 9;\n\n if (idx === 10 || idx === 11) {\n cssClass.push(EMPTYCELL);\n }\n\n if (start < min) {\n start = min;\n }\n\n if (end > max) {\n end = max;\n }\n\n return {\n ns: kendo.ns,\n value: options.centuryCellsFormat === \"long\" ? `${start} - ${end}` : start,\n dateString: toDateString(date),\n cssClass: cssClass.join(\" \")\n };\n }\n });\n },\n first: function(date) {\n var year = date.getFullYear();\n return createDate(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function(date) {\n var year = date.getFullYear();\n return createDate(year - year % 100 + 99, date.getMonth(), date.getDate());\n },\n compare: function(date1, date2) {\n return compare(date1, date2, 100);\n },\n setDate: function(date, value) {\n setDate(date, value, 10);\n },\n toDateString: function(date) {\n var year = date.getFullYear();\n return (year - year % 10) + \"/0/1\";\n },\n valueType: function() {\n return \"decade\";\n }\n }]\n };\n\n function title(date, min, max, modular) {\n var start = date.getFullYear(),\n minYear = min.getFullYear(),\n maxYear = max.getFullYear(),\n end;\n\n start = start - start % modular;\n end = start + (modular - 1);\n\n if (start < minYear) {\n start = minYear;\n }\n if (end > maxYear) {\n end = maxYear;\n }\n\n return start + \"-\" + end;\n }\n\n function view(options) {\n var idx = 0,\n data,\n min = options.min,\n max = options.max,\n start = options.start,\n setter = options.setter,\n build = options.build,\n weekNumberBuild = options.weekNumberBuild,\n length = options.cells || 12,\n isWeekColumnVisible = options.isWeekColumnVisible,\n cellsPerRow = options.perRow || 4,\n showOtherMonthDays = options.showOtherMonthDays,\n lastDayOfMonth = options.lastDayOfMonth,\n weekNumber = options.weekNumber || weekNumberTemplate,\n content = options.content || cellTemplate,\n empty = options.empty || emptyCellTemplate,\n otherMonthTemplate = options.otherMonthCellTemplate || otherMonthCellTemplate,\n html = options.html || '
';\n html += this.title(options.date, options.min, options.max);\n html += '
';\n\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n\n\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '';\n if (isWeekColumnVisible) {\n html += showOtherMonthDays || (+start <= +lastDayOfMonth) ? weekNumber(weekNumberBuild(start)) : weekNumber({ weekNumber: \" \" });\n }\n }\n\n start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n adjustDST(start, 0);\n\n data = build(start, idx, options.disableDates);\n\n if (data.cssClass.indexOf(OTHERMONTH) !== -1 && !showOtherMonthDays) {\n html += otherMonthTemplate(data);\n } else {\n if (isInRange(start, min, max) && data.cssClass.indexOf(EMPTYCELL) === -1) {\n html += content(data);\n } else {\n html += empty(data);\n }\n }\n\n setter(start, 1);\n }\n\n return html + \"
\";\n }\n\n function compare(date1, date2, modifier) {\n var year1 = date1.getFullYear(),\n start = date2.getFullYear(),\n end = start,\n result = 0;\n\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n\n if (year1 > end) {\n result = 1;\n } else if (year1 < start) {\n result = -1;\n }\n\n return result;\n }\n\n function getToday() {\n var today = new DATE();\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n }\n\n function restrictValue(value, min, max) {\n var today = getToday();\n\n if (value) {\n today = new DATE(+value);\n }\n\n if (min > today) {\n today = new DATE(+min);\n } else if (max < today) {\n today = new DATE(+max);\n }\n return today;\n }\n\n function isInRange(date, min, max) {\n return +date >= +min && +date <= +max;\n }\n\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n\n function setDate(date, value, multiplier) {\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n date.setFullYear(value);\n }\n\n function daysBetweenTwoDates(startDate, endDate) {\n if (+endDate < +startDate) {\n var temp = +startDate;\n calendar.views[0].setDate(startDate, endDate);\n calendar.views[0].setDate(endDate, new Date(temp));\n }\n var fromDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n var endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n\n return Math.ceil((+endDateUTC - +fromDateUTC) / kendo.date.MS_PER_DAY);\n }\n\n function addDaysToArray(array, numberOfDays, fromDate, disableDates) {\n for (var i = 0; i <= numberOfDays; i++) {\n var nextDay = new Date(fromDate.getTime());\n nextDay = new Date(nextDay.setDate(nextDay.getDate() + i));\n if (!disableDates(nextDay)) {\n array.push(nextDay);\n }\n }\n }\n\n function mousetoggle(e) {\n var disabled = $(this).hasClass(\"k-disabled\");\n\n if (!disabled) {\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n }\n }\n\n function prevent(e) {\n e.preventDefault();\n }\n\n // creates date with full year\n function createDate(year, month, date) {\n var dateObject = new DATE(year, month, date);\n dateObject.setFullYear(year, month, date);\n return dateObject;\n }\n\n function getCalendarInfo(culture) {\n return getCulture(culture).calendars.standard;\n }\n\n function normalize(options) {\n var start = views[options.start],\n depth = views[options.depth],\n culture = getCulture(options.culture);\n\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n\n if (isNaN(start)) {\n start = 0;\n options.start = MONTH;\n }\n\n if (depth === undefined$1 || depth > start) {\n options.depth = MONTH;\n }\n\n if (options.dates === null) {\n options.dates = [];\n }\n }\n\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() &&\n value1.getMonth() === value2.getMonth() &&\n value1.getDate() === value2.getDate();\n }\n\n return false;\n }\n\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() &&\n value1.getMonth() === value2.getMonth();\n }\n\n return false;\n }\n\n\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n\n if (Array.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n\n function createDisabledExpr(dates) {\n var callback,\n disabledDates = [],\n days = [\"su\", \"mo\", \"tu\", \"we\", \"th\", \"fr\", \"sa\"];\n\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n callback = (date) => !!(date && disabledDates.indexOf((new Date(date)).setHours(0, 0, 0, 0)) > -1);\n } else {\n disabledDates = dates.map(day => {\n day = day.slice(0,2).toLowerCase();\n let index = days.indexOf(day);\n if (index > -1) {\n return index;\n }\n });\n\n callback = (date) => !!(date && disabledDates.indexOf((new Date(date)).getDay()) > -1);\n }\n\n return callback;\n }\n\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n\n return oldValue === newValue;\n }\n\n function toDateObject(link) {\n var value = $(link).attr(kendo.attr(VALUE)).split(\"/\");\n //Safari cannot create correctly date from \"1/1/2090\"\n value = createDate(value[0], value[1], value[2]);\n\n return value;\n }\n\n // Backwards compatibility after CSP changes.\n function executeTemplate(tmpl, data) {\n if (tmpl) {\n if (kendo.isFunction(tmpl)) {\n return tmpl(data);\n }\n return template(tmpl)(data);\n }\n return undefined$1;\n }\n\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n calendar.toDateObject = toDateObject;\n calendar.getToday = getToday;\n calendar.createDate = createDate;\n\n kendo.calendar = calendar;\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}