{"version":3,"sources":["webpack:///./src/views/Events.vue?8038","webpack:///./src/components/Calender.vue?3479","webpack:///src/components/Calender.vue","webpack:///./src/components/Calender.vue?a398","webpack:///../../../src/mixins/localable/index.ts","webpack:///../../../../src/components/VCalendar/mixins/mouse.ts","webpack:///../../src/util/dateTimeUtils.ts","webpack:///../../../../src/components/VCalendar/util/timestamp.ts","webpack:///../../../../src/components/VCalendar/mixins/times.ts","webpack:///../../../src/directives/resize/index.ts","webpack:///../../../../src/components/VCalendar/modes/common.ts","webpack:///../../../../src/components/VCalendar/modes/stack.ts","webpack:///../../../../src/components/VCalendar/modes/column.ts","webpack:///../../../../src/components/VCalendar/modes/index.ts","webpack:///../../../../src/components/VCalendar/util/props.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-base.ts","webpack:///../../../../src/components/VCalendar/util/events.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-with-events.ts","webpack:///../../../src/components/VCalendar/VCalendarWeekly.ts","webpack:///../../../src/components/VCalendar/VCalendarMonthly.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-with-intervals.ts","webpack:///../../../src/components/VCalendar/VCalendarDaily.ts","webpack:///../../../../src/components/VCalendar/util/parser.ts","webpack:///../../../src/components/VCalendar/VCalendarCategory.ts","webpack:///../../../src/components/VCalendar/VCalendar.ts","webpack:///../../../src/components/VThemeProvider/VThemeProvider.ts","webpack:///../../../src/mixins/delayable/index.ts","webpack:///../../../src/mixins/activatable/index.ts","webpack:///../../../src/mixins/dependent/index.ts","webpack:///../../../src/mixins/stackable/index.ts","webpack:///../../../src/mixins/detachable/index.ts","webpack:///../../../src/mixins/menuable/index.ts","webpack:///../../../src/mixins/returnable/index.ts","webpack:///../../src/util/dom.ts","webpack:///../../../src/directives/click-outside/index.ts","webpack:///../../../src/components/VMenu/VMenu.ts","webpack:///../../../src/components/VGrid/VSpacer.ts","webpack:///../../../src/components/VToolbar/VToolbar.ts","webpack:///../../../src/components/VToolbar/index.ts","webpack:///./src/components/Calender.vue","webpack:///src/views/Events.vue","webpack:///./src/views/Events.vue?a8c0","webpack:///./src/views/Events.vue","webpack:///./node_modules/core-js/modules/es.number.max-safe-integer.js"],"names":["_vm","this","_h","$createElement","_c","_self","staticRenderFns","staticStyle","attrs","staticClass","_v","_s","title","lang","on","prev","next","$refs","calendar","_e","ref","events","getEventColor","type","showEvent","updateRange","model","value","callback","$$v","focus","expression","selectedElement","selectedOpen","selectedEvent","color","name","origin","photos","description","$event","inject","data","start","end","mounted","currentMonth","D","getMonth","year","getFullYear","calenderRepo","all","then","methods","viewDay","date","event","setToday","$store","commit","get","console","log","response","requestAnimationFrame","open","nativeEvent","stopPropagation","rnd","Math","floor","b","a","random","computed","state","calenderTitle","props","locale","String","currentLocale","$vuetify","getDefaultMouseEventHandlers","getMouseEventHandlers","prevent","result","eventOptions","prefix","key","handler","e","mouseEvent","currentTarget","document","TouchEvent","changedTouches","targetTouches","touches","getEvent","Array","createUTCDate","month","day","Date","isFinite","firstWeekOffset","firstWeekDayInFirstWeek","firstDayOfWeek","firstWeekDayOfYear","dayOfYear","isLeapYear","weeksInYear","weekOffset","weekOffsetNext","daysInYear","week","PARSE_REGEX","PARSE_TIME","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","DAYS_IN_MONTH_MIN","DAYS_IN_MONTH_MAX","MONTH_MAX","MONTH_MIN","DAY_MIN","DAYS_IN_WEEK","MINUTES_IN_HOUR","MINUTE_MAX","MINUTES_IN_DAY","HOUR_MAX","OFFSET_YEAR","OFFSET_MONTH","OFFSET_HOUR","OFFSET_TIME","copyTimestamp","findWeekday","weekdays","updateFormatted","updateRelative","today","updateWeekday","daysInMonth","input","parts","parseInt","required","parseDate","now","Error","timestamp","time","hour","minute","weekday","hasDay","hasTime","past","present","future","getDayIdentifier","getTimeIdentifier","getTime","minutes","getWeekday","getDate","_","k","m","C","Y","padded","str","padNumber","mover","days","max","min","M","h","maxDays","skips","filled","i","skip","j","stop","current","currentIdentifier","stopped","weekdaySkips","relativeDays","nextDay","intervals","mins","first","int","updateMinutes","emptyFormatter","_t","Intl","intlFormatter","getOptions","validator","validateTimestamp","times","parsedNow","watch","created","setPresent","updateTimes","getNow","updateDay","target","updateTime","inserted","binding","options","passive","window","el","unbind","Resize","MILLIS_IN_DAY","minStart","visuals","columnCount","column","left","width","exclude","s0","e0","groups","group","groupVisual","dayStart","intersected","hasOverlap","timed","getRange","getDayRange","groupStart","groupEnd","reset","getVisuals","getTimestampIdentifier","dayEvents","visual","setColumnCount","targetGroup","getOpenGroup","FULL_WIDTH","DEFAULT_OFFSET","WIDTH_MULTIPLIER","firstWeekday","overlapThreshold","getOverlapGroupHandler","getGroups","nodes","child","getNode","index","getNextIndex","parent","getParent","addTime","getOverlappingRange","children","grand","grandNext","calculateBounds","columns","getMaxChildIndex","spaceLeft","spaceWidth","offset","columnWidthMultiplier","getColumnWidthMultiplier","node","columnOffset","columnWidth","hasFullWidth","maxColumn","minColumn","c","getOverlappingIndices","indices","other","returnFirstColumn","overlapping","n","getNormalizedRange","added","sibling","childMax","removeMinutes","identifier","totalMinutes","addHours","addMinutes","CalendarEventOverlapModes","stack","base","Number","validate","default","validateWeekdays","hideHeader","Boolean","shortWeekdays","weekdayFormat","dayFormat","shortIntervals","intervalHeight","validateNumber","intervalWidth","intervalMinutes","firstInterval","firstTime","validateTime","intervalCount","intervalFormat","intervalStyle","showIntervalLabel","weeks","localeFirstDayOfYear","minWeeks","shortMonths","showMonthOnFirst","showWeek","monthFormat","category","categories","categoryText","Function","categoryHideDynamic","categoryShowAll","categoryForInvalid","categoryDays","x","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventName","eventOverlapThreshold","eventOverlapMode","mode","eventMore","eventMoreText","eventRipple","eventMarginBottom","ints","visited","wrapped","d","mixins","directives","parsedWeekdays","getWeekdaySkips","weekdaySkipsReverse","reversed","reverse","parsedStart","parsedEnd","createDayList","dayFormatter","timeZone","createNativeLocaleFormatter","weekdayFormatter","longOptions","shortOptions","short","getRelativeClasses","outside","getStartOfWeek","getEndOfWeek","getFormatter","startInput","endInput","startParsed","endParsed","isTimedless","updateHasTime","startIdentifier","startTimestampIdentifier","endIdentifier","endOffset","endTimestampIdentifier","allDay","dayIdentifier","isEventOn","WIDTH_FULL","WIDTH_START","ripple","noEvents","length","parsedEvents","map","parsedEventOverlapThreshold","eventTimedFunction","eventCategoryFunction","eventTextColorFunction","eventNameFunction","eventModeFunction","eventWeekdays","categoryMode","eventColorFunction","parseEvent","formatTime","formatter","withTime","undefined","updateEventVisibility","eventsMap","more","parentBounds","last","eventsSorted","bottom","hidden","hide","t","getEventsMap","elements","genDayEvent","weekdayIdentifier","scope","eventParsed","genEvent","class","style","height","refInFor","genTimedEvent","isEventHiddenOn","top","slot","$scopedSlots","text","background","overlapsNoon","singline","diffMinutes","timeSummary","eventSummary","delimiter","scopeInput","setTextColor","setBackgroundColor","genName","domProps","innerHTML","genPlaceholder","genMore","click","display","getVisibleEvents","filter","isEventOverlapping","isEventForCategory","getEventsForDay","isEventStart","getEventsForDayAll","getEventsForDayTimed","getScopedSlots","isNode","getSlotChildren","getter","mapper","mapped","slots","slotDay","slotDayHeader","slotDayBody","classes","parsedMinWeeks","minDays","todayWeek","monthFormatter","isOutside","genHead","genHeadDays","header","genHeadDay","genWeeks","weekDays","genWeek","getWeekNumber","weekNodes","genWeekNumber","weekNumber","determineDay","genDay","genDayLabel","genDayLabelButton","hasMonth","fab","depressed","small","genDayMonth","render","dragstart","getStartOfMonth","getEndOfMonth","parsedFirstInterval","parsedIntervalMinutes","parsedIntervalCount","parsedIntervalHeight","parseFloat","parsedFirstTime","parseTime","firstMinute","bodyHeight","count","createIntervalList","intervalFormatter","shortHourOptions","tms","showIntervalLabelDefault","isFirst","interval","intervalStyleDefault","getTimestampAtEvent","bounds","baseMinutes","touchEvent","clientY","addIntervals","getSlotScope","scrollToTime","y","timeToY","pane","minutesToPixels","clamp","timeDelta","gap","scrollPush","themeClasses","init","onResize","getScrollPush","area","marginRight","genHeadIntervals","genHeadWeekday","genHeadDayLabel","genDayHeader","genHeadDayButton","genBody","genScrollArea","genPane","genDayContainer","genDays","genDayIntervals","genDayBody","genDayInterval","styler","genBodyIntervals","genIntervalLabels","genIntervalLabel","shower","show","label","modifiers","quiet","categoryName","parsedCategoryText","parsedCategories","getParsedCategories","getCategoryScope","cat","genDayHeaderCategory","headerTitle","genDayHeaderCategoryTitle","v","genDayBodyCategory","lastStart","lastEnd","parsedValue","parsedCategoryDays","renderProps","around","component","getCategoryList","spanYears","spanMonths","monthShortFormatter","monthLongFormatter","updated","checkChange","move","amount","moved","forward","limit","$children","parseTimestamp","timestampToDate","categoryMap","categoryLength","ev","scopedSlots","root","isDark","$slots","openDelay","closeDelay","openTimeout","closeTimeout","clearDelay","clearTimeout","runDelay","delay","setTimeout","cb","close","baseMixins","activator","val","includes","disabled","internalActivator","openOnHover","openOnFocus","activatorElement","activatorNode","listeners","slotType","beforeDestroy","addActivatorEvents","keys","Object","genActivator","genActivatorAttributes","role","genActivatorListeners","getActivator","vm","Node","getContentSlot","getValueProxy","self","removeActivatorEvents","resetActivator","searchChildren","results","closeDependents","isActive","isDependent","openDependents","getOpenDependents","getOpenDependentElements","getClickableDependentElements","overlay","stackElement","stackExclude","stackMinZIndex","activeZIndex","content","getMaxZIndex","zis","activeElements","validateAttachTarget","attach","contentClass","hasDetached","hasContent","beforeMount","deactivated","getScopeIdAttrs","scopeId","initDetach","_isDestroyed","positionable","allowOverflow","light","dark","maxWidth","minWidth","nudgeBottom","nudgeLeft","nudgeRight","nudgeTop","nudgeWidth","offsetOverflow","openOnClick","positionX","positionY","zIndex","absoluteX","absoluteY","activatedBy","activatorFixed","dimensions","right","offsetTop","scrollHeight","offsetLeft","relativeYOffset","hasJustFocused","hasWindow","inputActivator","isContentActive","pageWidth","pageYOffset","stackClass","computedLeft","activatorLeft","isNaN","computedTop","hasActivator","absoluteYOffset","absolutePosition","activate","calcLeft","calcXOverflow","calcTop","calcYOverflow","xOverflow","documentHeight","toTop","contentHeight","totalHeight","isOverflowing","callActivate","callDeactivate","checkForPageYOffset","checkActivatorFixed","deactivate","onClick","getInnerHeight","getOffsetLeft","getOffsetTop","getRoundedBoundedClientRect","rect","measure","sneakPeek","startTransition","Promise","resolve","updateDimensions","offsetRect","returnValue","originalValue","save","composed","defaultConditional","checkEvent","checkIsActive","attachedRoot","ShadowRoot","directive","handleShadow","ClickOutside","onMousedown","app","lastMousedownWasOutside","provide","isInMenu","theme","auto","closeOnClick","closeOnContentClick","disableKeys","maxHeight","offsetX","offsetY","transition","calculatedTopAuto","defaultOffset","listIndex","resizeTimeout","selectedIndex","tiles","activeTile","calculatedLeft","menuWidth","calculatedMaxHeight","calculatedMaxWidth","calculatedMinWidth","calculatedTop","hasClickableTiles","find","tile","styles","transformOrigin","scrollTop","appOffset","duration","container","classList","remove","$attrs","hasOwnProperty","calcScrollPosition","$el","maxScrollTop","calcLeftAuto","calcTopAuto","tileDistanceFromMenuTop","firstTileOffsetTop","changeListIndex","closeConditional","contains","attributes","id","genTransition","genDirectives","include","genContent","menuable__content__active","keydown","onKeyDown","$listeners","getTiles","querySelectorAll","mouseEnterHandler","mouseLeaveHandler","nextTile","prevTile","lastTile","firstTile","arg","showLazyContent","VSheet","absolute","collapse","dense","extended","extensionHeight","flat","floating","prominent","src","tag","isExtended","computedHeight","isCollapsed","computedContentHeight","isProminent","breakpoint","breakingProps","original","replacement","genBackground","image","img","VImg","genExtension","VToolbarTitle","VBtn","VCalendar","VCard","VCardActions","VCardText","VCol","VContainer","VIcon","VMenu","VRow","VSpacer","VToolbar","components","$","stat","MAX_SAFE_INTEGER"],"mappings":"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","file":"js/chunk-5a259e88.52c1c28c.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('calender')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',[_c('v-row',{staticStyle:{\"margin-top\":\"50px\"},attrs:{\"justify\":\"center\"}},[_c('v-col',{staticStyle:{\"display\":\"contents\"},attrs:{\"cols\":\"12\",\"sm\":\"3\"}},[_c('div',{attrs:{\"data-aos-duration\":\"1000\",\"data-aos\":\"zoom-out-up\",\"data-aos-anchor-placement\":\"bottom-bottom\"}},[_c('h1',{staticClass:\"font-weight-bold mb-1 secTitle\",staticStyle:{\"font-size\":\"40px\",\"width\":\"fit-content\"}},[_vm._v(\" \"+_vm._s(_vm.title[_vm.lang])+\" \")])])])],1),_c('v-row',{staticStyle:{\"margin-top\":\"5px\",\"margin-bottom\":\"50px height:fit-content\"},attrs:{\"justify\":\"center\"}},[_c('v-col',{staticStyle:{\"border\":\"5px solid #005677\",\"border-radius\":\"10px\",\"height\":\"95vh\"},attrs:{\"cols\":\"12\",\"sm\":\"9\"}},[_c('v-sheet',{attrs:{\"height\":\"80vh\"}},[_c('v-toolbar',{attrs:{\"flat\":\"\"}},[_c('v-btn',{attrs:{\"fab\":\"\",\"text\":\"\",\"small\":\"\",\"color\":\"grey darken-2\"},on:{\"click\":_vm.prev}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\" mdi-chevron-left \")])],1),_c('v-btn',{attrs:{\"fab\":\"\",\"text\":\"\",\"small\":\"\",\"color\":\"grey darken-2\"},on:{\"click\":_vm.next}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\" mdi-chevron-right \")])],1),(_vm.$refs.calendar)?_c('v-toolbar-title',[_vm._v(\" \"+_vm._s(_vm.$refs.calendar.title)+\" \")]):_vm._e(),_c('v-spacer')],1),_c('v-calendar',{ref:\"calendar\",staticStyle:{\"border\":\"3px solid #005677\",\"border-radius\":\"10px\"},attrs:{\"color\":\"primary\",\"events\":_vm.events,\"event-color\":_vm.getEventColor,\"type\":_vm.type,\"event-name\":'name[' + _vm.lang + ']',\"height\":\"70vh\"},on:{\"click:event\":_vm.showEvent,\"change\":_vm.updateRange},model:{value:(_vm.focus),callback:function ($$v) {_vm.focus=$$v},expression:\"focus\"}}),_c('v-menu',{attrs:{\"close-on-content-click\":false,\"activator\":_vm.selectedElement,\"offset-x\":\"\"},model:{value:(_vm.selectedOpen),callback:function ($$v) {_vm.selectedOpen=$$v},expression:\"selectedOpen\"}},[_c('v-card',{attrs:{\"color\":\"grey lighten-4\",\"min-width\":\"350px\",\"flat\":\"\"}},[_c('v-toolbar',{attrs:{\"color\":_vm.selectedEvent.color,\"dark\":\"\"}},[_c('v-toolbar-title',[_vm._v(_vm._s(_vm.selectedEvent.name[_vm.lang]))]),_c('v-spacer')],1),_c('img',{staticStyle:{\"width\":\"350px\"},attrs:{\"src\":_vm.origin + _vm.selectedEvent.photos,\"alt\":\"\"}}),_c('v-card-text',[_c('span',[_vm._v(\" \"+_vm._s(_vm.selectedEvent.description[_vm.lang]))])]),_c('v-card-actions',[_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"secondary\"},on:{\"click\":function($event){_vm.selectedOpen = false}}},[_vm._v(\" Cancel \")])],1)],1)],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\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!./Calender.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!./Calender.vue?vue&type=script&lang=js&\"","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'localable',\n\n props: {\n locale: String,\n },\n\n computed: {\n currentLocale (): string {\n return this.locale || this.$vuetify.lang.current\n },\n },\n})\n","import Vue from 'vue'\n\nexport type MouseHandler = (e: MouseEvent | TouchEvent) => any\n\nexport type MouseEvents = {\n [event: string]: {\n event: string\n passive?: boolean\n capture?: boolean\n once?: boolean\n stop?: boolean\n prevent?: boolean\n button?: number\n result?: any\n }\n}\n\nexport type MouseEventsMap = {\n [event: string]: MouseHandler | MouseHandler[]\n}\n\nexport default Vue.extend({\n name: 'mouse',\n\n methods: {\n getDefaultMouseEventHandlers (suffix: string, getEvent: MouseHandler): MouseEventsMap {\n return this.getMouseEventHandlers({\n ['click' + suffix]: { event: 'click' },\n ['contextmenu' + suffix]: { event: 'contextmenu', prevent: true, result: false },\n ['mousedown' + suffix]: { event: 'mousedown' },\n ['mousemove' + suffix]: { event: 'mousemove' },\n ['mouseup' + suffix]: { event: 'mouseup' },\n ['mouseenter' + suffix]: { event: 'mouseenter' },\n ['mouseleave' + suffix]: { event: 'mouseleave' },\n ['touchstart' + suffix]: { event: 'touchstart' },\n ['touchmove' + suffix]: { event: 'touchmove' },\n ['touchend' + suffix]: { event: 'touchend' },\n }, getEvent)\n },\n getMouseEventHandlers (events: MouseEvents, getEvent: MouseHandler): MouseEventsMap {\n const on: MouseEventsMap = {}\n\n for (const event in events) {\n const eventOptions = events[event]\n\n if (!this.$listeners[event]) continue\n\n // TODO somehow pull in modifiers\n\n const prefix = eventOptions.passive ? '&' : ((eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : ''))\n const key = prefix + eventOptions.event\n\n const handler: MouseHandler = e => {\n const mouseEvent: MouseEvent = e as MouseEvent\n if (eventOptions.button === undefined || (mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button)) {\n if (eventOptions.prevent) {\n e.preventDefault()\n }\n if (eventOptions.stop) {\n e.stopPropagation()\n }\n\n // Due to TouchEvent target always returns the element that is first placed\n // Even if touch point has since moved outside the interactive area of that element\n // Ref: https://developer.mozilla.org/en-US/docs/Web/API/Touch/target\n // This block of code aims to make sure touchEvent is always dispatched from the element that is being pointed at\n if (e instanceof TouchEvent) {\n const currentTarget = document.elementFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY)\n\n if (currentTarget &&\n !(e.target as HTMLElement)?.isSameNode(currentTarget) &&\n (e.target as HTMLElement)?.className === currentTarget.className\n ) {\n currentTarget.dispatchEvent(new TouchEvent(e.type, {\n changedTouches: e.changedTouches as unknown as Touch[],\n targetTouches: e.targetTouches as unknown as Touch[],\n touches: e.touches as unknown as Touch[],\n }))\n return\n }\n }\n\n this.$emit(event, getEvent(e))\n }\n\n return eventOptions.result\n }\n\n if (key in on) {\n /* istanbul ignore next */\n if (Array.isArray(on[key])) {\n (on[key] as MouseHandler[]).push(handler)\n } else {\n on[key] = [on[key], handler] as MouseHandler[]\n }\n } else {\n on[key] = handler\n }\n }\n\n return on\n },\n },\n})\n","function createUTCDate (year: number, month = 0, day = 1) {\n let date\n if (year < 100 && year >= 0) {\n date = new Date(Date.UTC(year, month, day))\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(year)\n }\n } else {\n date = new Date(Date.UTC(year, month, day))\n }\n\n return date\n}\n\nfunction firstWeekOffset (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear\n const firstWeekDayOfYear = (7 + createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() - firstDayOfWeek) % 7\n\n return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1\n}\n\nfunction dayOfYear (year: number, month: number, day: number, firstDayOfWeek: number) {\n let dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][month]\n if (month > 1 && isLeapYear(year)) {\n dayOfYear++\n }\n\n return dayOfYear + day\n}\n\nfunction weeksInYear (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, firstDayOfYear)\n const weekOffsetNext = firstWeekOffset(year + 1, firstDayOfWeek, firstDayOfYear)\n const daysInYear = isLeapYear(year) ? 366 : 365\n\n return (daysInYear - weekOffset + weekOffsetNext) / 7\n}\n\nexport function weekNumber (year: number, month: number, day: number, firstDayOfWeek: number, localeFirstDayOfYear: number): number {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, localeFirstDayOfYear)\n const week = Math.ceil((dayOfYear(year, month, day, firstDayOfWeek) - weekOffset) / 7)\n\n if (week < 1) {\n return week + weeksInYear(year - 1, firstDayOfWeek, localeFirstDayOfYear)\n } else if (week > weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)) {\n return week - weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)\n } else {\n return week\n }\n}\n\nexport function isLeapYear (year: number): boolean {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)\n}\n","import { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\nimport { isLeapYear } from '../../../util/dateTimeUtils'\n\nexport const PARSE_REGEX = /^(\\d{4})-(\\d{1,2})(-(\\d{1,2}))?([^\\d]+(\\d{1,2}))?(:(\\d{1,2}))?(:(\\d{1,2}))?$/\nexport const PARSE_TIME = /(\\d\\d?)(:(\\d\\d?)|)(:(\\d\\d?)|)/\n\nexport const DAYS_IN_MONTH: number[] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_LEAP: number[] = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_MIN = 28\nexport const DAYS_IN_MONTH_MAX = 31\nexport const MONTH_MAX = 12\nexport const MONTH_MIN = 1\nexport const DAY_MIN = 1\nexport const DAYS_IN_WEEK = 7\nexport const MINUTES_IN_HOUR = 60\nexport const MINUTE_MAX = 59\nexport const MINUTES_IN_DAY = 24 * 60\nexport const HOURS_IN_DAY = 24\nexport const HOUR_MAX = 23\nexport const FIRST_HOUR = 0\nexport const OFFSET_YEAR = 10000\nexport const OFFSET_MONTH = 100\nexport const OFFSET_HOUR = 100\nexport const OFFSET_TIME = 10000\n\ntype CalendarTimestampFormatOptions = (timestamp: CalendarTimestamp, short: boolean) => object\ntype CalendarTimestampOperation = (timestamp: CalendarTimestamp) => CalendarTimestamp\nexport type VTime = number | string | {\n hour: number\n minute: number\n}\n\nexport type VTimestampInput = number | string | Date;\n\nexport function getStartOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n findWeekday(start, weekdays[0], prevDay)\n updateFormatted(start)\n if (today) {\n updateRelative(start, today, start.hasTime)\n }\n\n return start\n}\n\nexport function getEndOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n findWeekday(end, weekdays[weekdays.length - 1])\n updateFormatted(end)\n if (today) {\n updateRelative(end, today, end.hasTime)\n }\n\n return end\n}\n\nexport function getStartOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n start.day = DAY_MIN\n updateWeekday(start)\n updateFormatted(start)\n\n return start\n}\n\nexport function getEndOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n end.day = daysInMonth(end.year, end.month)\n updateWeekday(end)\n updateFormatted(end)\n\n return end\n}\n\nexport function validateTime (input: any): input is VTime {\n return (typeof input === 'number' && isFinite(input)) ||\n (!!PARSE_TIME.exec(input)) ||\n (typeof input === 'object' && isFinite(input.hour) && isFinite(input.minute))\n}\n\nexport function parseTime (input: any): number | false {\n if (typeof input === 'number') {\n // when a number is given, it's minutes since 12:00am\n return input\n } else if (typeof input === 'string') {\n // when a string is given, it's a hh:mm:ss format where seconds are optional\n const parts = PARSE_TIME.exec(input)\n if (!parts) {\n return false\n }\n\n return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0)\n } else if (typeof input === 'object') {\n // when an object is given, it must have hour and minute\n if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {\n return false\n }\n\n return input.hour * 60 + input.minute\n } else {\n // unsupported type\n return false\n }\n}\n\nexport function validateTimestamp (input: any): input is VTimestampInput {\n return (typeof input === 'number' && isFinite(input)) ||\n (typeof input === 'string' && !!PARSE_REGEX.exec(input)) ||\n (input instanceof Date)\n}\n\nexport function parseTimestamp (input: VTimestampInput, required?: false, now?: CalendarTimestamp): CalendarTimestamp | null\nexport function parseTimestamp (input: VTimestampInput, required: true, now?: CalendarTimestamp): CalendarTimestamp\nexport function parseTimestamp (input: VTimestampInput, required = false, now?: CalendarTimestamp): CalendarTimestamp | null {\n if (typeof input === 'number' && isFinite(input)) {\n input = new Date(input)\n }\n\n if (input instanceof Date) {\n const date: CalendarTimestamp = parseDate(input)\n\n if (now) {\n updateRelative(date, now, date.hasTime)\n }\n\n return date\n }\n\n if (typeof input !== 'string') {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n return null\n }\n\n // YYYY-MM-DD hh:mm:ss\n const parts = PARSE_REGEX.exec(input)\n\n if (!parts) {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n\n return null\n }\n\n const timestamp: CalendarTimestamp = {\n date: input,\n time: '',\n year: parseInt(parts[1]),\n month: parseInt(parts[2]),\n day: parseInt(parts[4]) || 1,\n hour: parseInt(parts[6]) || 0,\n minute: parseInt(parts[8]) || 0,\n weekday: 0,\n hasDay: !!parts[4],\n hasTime: !!(parts[6] && parts[8]),\n past: false,\n present: false,\n future: false,\n }\n\n updateWeekday(timestamp)\n updateFormatted(timestamp)\n\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n\n return timestamp\n}\n\nexport function parseDate (date: Date): CalendarTimestamp {\n return updateFormatted({\n date: '',\n time: '',\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n weekday: date.getDay(),\n hour: date.getHours(),\n minute: date.getMinutes(),\n hasDay: true,\n hasTime: true,\n past: false,\n present: true,\n future: false,\n })\n}\n\nexport function getDayIdentifier (timestamp: { year: number, month: number, day: number }): number {\n return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day\n}\n\nexport function getTimeIdentifier (timestamp: { hour: number, minute: number }): number {\n return timestamp.hour * OFFSET_HOUR + timestamp.minute\n}\n\nexport function getTimestampIdentifier (timestamp: CalendarTimestamp): number {\n return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp)\n}\n\nexport function updateRelative (timestamp: CalendarTimestamp, now: CalendarTimestamp, time = false): CalendarTimestamp {\n let a = getDayIdentifier(now)\n let b = getDayIdentifier(timestamp)\n let present = a === b\n\n if (timestamp.hasTime && time && present) {\n a = getTimeIdentifier(now)\n b = getTimeIdentifier(timestamp)\n present = a === b\n }\n\n timestamp.past = b < a\n timestamp.present = present\n timestamp.future = b > a\n\n return timestamp\n}\n\nexport function isTimedless (input: VTimestampInput): input is (Date | number) {\n return (input instanceof Date) || (typeof input === 'number' && isFinite(input))\n}\n\nexport function updateHasTime (timestamp: CalendarTimestamp, hasTime: boolean, now?: CalendarTimestamp): CalendarTimestamp {\n if (timestamp.hasTime !== hasTime) {\n timestamp.hasTime = hasTime\n if (!hasTime) {\n timestamp.hour = HOUR_MAX\n timestamp.minute = MINUTE_MAX\n timestamp.time = getTime(timestamp)\n }\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n }\n\n return timestamp\n}\n\nexport function updateMinutes (timestamp: CalendarTimestamp, minutes: number, now?: CalendarTimestamp): CalendarTimestamp {\n timestamp.hasTime = true\n timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR)\n timestamp.minute = minutes % MINUTES_IN_HOUR\n timestamp.time = getTime(timestamp)\n if (now) {\n updateRelative(timestamp, now, true)\n }\n\n return timestamp\n}\n\nexport function updateWeekday (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.weekday = getWeekday(timestamp)\n\n return timestamp\n}\n\nexport function updateFormatted (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.time = getTime(timestamp)\n timestamp.date = getDate(timestamp)\n\n return timestamp\n}\n\nexport function getWeekday (timestamp: CalendarTimestamp): number {\n if (timestamp.hasDay) {\n const _ = Math.floor\n const k = timestamp.day\n const m = ((timestamp.month + 9) % MONTH_MAX) + 1\n const C = _(timestamp.year / 100)\n const Y = (timestamp.year % 100) - (timestamp.month <= 2 ? 1 : 0)\n\n return (((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7) + 7) % 7\n }\n\n return timestamp.weekday\n}\n\nexport function daysInMonth (year: number, month: number) {\n return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month]\n}\n\nexport function copyTimestamp (timestamp: CalendarTimestamp): CalendarTimestamp {\n const { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future } = timestamp\n\n return { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future }\n}\n\nexport function padNumber (x: number, length: number): string {\n let padded = String(x)\n while (padded.length < length) {\n padded = '0' + padded\n }\n\n return padded\n}\n\nexport function getDate (timestamp: CalendarTimestamp): string {\n let str = `${padNumber(timestamp.year, 4)}-${padNumber(timestamp.month, 2)}`\n\n if (timestamp.hasDay) str += `-${padNumber(timestamp.day, 2)}`\n\n return str\n}\n\nexport function getTime (timestamp: CalendarTimestamp): string {\n if (!timestamp.hasTime) {\n return ''\n }\n\n return `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n}\n\nexport function nextMinutes (timestamp: CalendarTimestamp, minutes: number): CalendarTimestamp {\n timestamp.minute += minutes\n while (timestamp.minute > MINUTES_IN_HOUR) {\n timestamp.minute -= MINUTES_IN_HOUR\n timestamp.hour++\n if (timestamp.hour >= HOURS_IN_DAY) {\n nextDay(timestamp)\n timestamp.hour = FIRST_HOUR\n }\n }\n\n return timestamp\n}\n\nexport function nextDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day++\n timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK\n if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {\n timestamp.day = DAY_MIN\n timestamp.month++\n if (timestamp.month > MONTH_MAX) {\n timestamp.month = MONTH_MIN\n timestamp.year++\n }\n }\n\n return timestamp\n}\n\nexport function prevDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day--\n timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK\n if (timestamp.day < DAY_MIN) {\n timestamp.month--\n if (timestamp.month < MONTH_MIN) {\n timestamp.year--\n timestamp.month = MONTH_MAX\n }\n timestamp.day = daysInMonth(timestamp.year, timestamp.month)\n }\n\n return timestamp\n}\n\nexport function relativeDays (\n timestamp: CalendarTimestamp,\n mover: CalendarTimestampOperation = nextDay,\n days = 1\n): CalendarTimestamp {\n while (--days >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function diffMinutes (min: CalendarTimestamp, max: CalendarTimestamp) {\n const Y = (max.year - min.year) * 525600\n const M = (max.month - min.month) * 43800\n const D = (max.day - min.day) * 1440\n const h = (max.hour - min.hour) * 60\n const m = (max.minute - min.minute)\n\n return Y + M + D + h + m\n}\n\nexport function findWeekday (timestamp: CalendarTimestamp, weekday: number,\n mover: CalendarTimestampOperation = nextDay, maxDays = 6): CalendarTimestamp {\n while (timestamp.weekday !== weekday && --maxDays >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function getWeekdaySkips (weekdays: number[]): number[] {\n const skips: number[] = [1, 1, 1, 1, 1, 1, 1]\n const filled: number[] = [0, 0, 0, 0, 0, 0, 0]\n for (let i = 0; i < weekdays.length; i++) {\n filled[weekdays[i]] = 1\n }\n for (let k = 0; k < DAYS_IN_WEEK; k++) {\n let skip = 1\n for (let j = 1; j < DAYS_IN_WEEK; j++) {\n const next = (k + j) % DAYS_IN_WEEK\n if (filled[next]) {\n break\n }\n skip++\n }\n skips[k] = filled[k] * skip\n }\n\n return skips\n}\n\nexport function timestampToDate (timestamp: CalendarTimestamp): Date {\n const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n const date = timestamp.date\n\n return new Date(`${date}T${time}:00+00:00`)\n}\n\nexport function createDayList (\n start: CalendarTimestamp,\n end: CalendarTimestamp,\n now: CalendarTimestamp,\n weekdaySkips: number[],\n max = 42,\n min = 0\n): CalendarTimestamp[] {\n const stop = getDayIdentifier(end)\n const days: CalendarTimestamp[] = []\n let current = copyTimestamp(start)\n let currentIdentifier = 0\n let stopped = currentIdentifier === stop\n\n if (stop < getDayIdentifier(start)) {\n throw new Error('End date is earlier than start date.')\n }\n\n while ((!stopped || days.length < min) && days.length < max) {\n currentIdentifier = getDayIdentifier(current)\n stopped = stopped || currentIdentifier === stop\n if (weekdaySkips[current.weekday] === 0) {\n current = nextDay(current)\n continue\n }\n const day = copyTimestamp(current)\n updateFormatted(day)\n updateRelative(day, now)\n days.push(day)\n current = relativeDays(current, nextDay, weekdaySkips[current.weekday])\n }\n\n if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.')\n\n return days\n}\n\nexport function createIntervalList (timestamp: CalendarTimestamp, first: number,\n minutes: number, count: number, now?: CalendarTimestamp): CalendarTimestamp[] {\n const intervals: CalendarTimestamp[] = []\n\n for (let i = 0; i < count; i++) {\n const mins = first + (i * minutes)\n const int = copyTimestamp(timestamp)\n intervals.push(updateMinutes(int, mins, now))\n }\n\n return intervals\n}\n\nexport function createNativeLocaleFormatter (locale: string, getOptions: CalendarTimestampFormatOptions): CalendarFormatter {\n const emptyFormatter: CalendarFormatter = (_t, _s) => ''\n\n if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return emptyFormatter\n }\n\n return (timestamp, short) => {\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short))\n\n return intlFormatter.format(timestampToDate(timestamp))\n } catch (e) {\n return ''\n }\n }\n}\n","import Vue from 'vue'\n\nimport {\n validateTimestamp,\n parseTimestamp,\n parseDate,\n} from '../util/timestamp'\nimport { CalendarTimestamp } from 'vuetify/types'\n\nexport default Vue.extend({\n name: 'times',\n\n props: {\n now: {\n type: String,\n validator: validateTimestamp,\n },\n },\n\n data: () => ({\n times: {\n now: parseTimestamp('0000-00-00 00:00', true),\n today: parseTimestamp('0000-00-00', true),\n },\n }),\n\n computed: {\n parsedNow (): CalendarTimestamp | null {\n return this.now ? parseTimestamp(this.now, true) : null\n },\n },\n\n watch: {\n parsedNow: 'updateTimes',\n },\n\n created () {\n this.updateTimes()\n this.setPresent()\n },\n\n methods: {\n setPresent (): void {\n this.times.now.present = this.times.today.present = true\n this.times.now.past = this.times.today.past = false\n this.times.now.future = this.times.today.future = false\n },\n updateTimes (): void {\n const now: CalendarTimestamp = this.parsedNow || this.getNow()\n this.updateDay(now, this.times.now)\n this.updateTime(now, this.times.now)\n this.updateDay(now, this.times.today)\n },\n getNow (): CalendarTimestamp {\n return parseDate(new Date())\n },\n updateDay (now: CalendarTimestamp, target: CalendarTimestamp): void {\n if (now.date !== target.date) {\n target.year = now.year\n target.month = now.month\n target.day = now.day\n target.weekday = now.weekday\n target.date = now.date\n }\n },\n updateTime (now: CalendarTimestamp, target: CalendarTimestamp): void {\n if (now.time !== target.time) {\n target.hour = now.hour\n target.minute = now.minute\n target.time = now.time\n }\n },\n },\n})\n","import { VNodeDirective } from 'vue/types/vnode'\n\ninterface ResizeVNodeDirective extends VNodeDirective {\n value?: () => void\n options?: boolean | AddEventListenerOptions\n}\n\nfunction inserted (el: HTMLElement, binding: ResizeVNodeDirective) {\n const callback = binding.value!\n const options = binding.options || { passive: true }\n\n window.addEventListener('resize', callback, options)\n el._onResize = {\n callback,\n options,\n }\n\n if (!binding.modifiers || !binding.modifiers.quiet) {\n callback()\n }\n}\n\nfunction unbind (el: HTMLElement) {\n if (!el._onResize) return\n\n const { callback, options } = el._onResize\n window.removeEventListener('resize', callback, options)\n delete el._onResize\n}\n\nexport const Resize = {\n inserted,\n unbind,\n}\n\nexport default Resize\n","import { CalendarEventParsed, CalendarEventVisual, CalendarTimestamp } from 'vuetify/types'\nimport { getTimestampIdentifier } from '../util/timestamp'\n\nconst MILLIS_IN_DAY = 86400000\n\nexport type GetRange = (event: CalendarEventParsed) => [number, number]\n\nexport function getVisuals (events: CalendarEventParsed[], minStart = 0): CalendarEventVisual[] {\n const visuals = events.map(event => ({\n event,\n columnCount: 0,\n column: 0,\n left: 0,\n width: 100,\n }))\n\n visuals.sort((a, b) => {\n return (Math.max(minStart, a.event.startTimestampIdentifier) - Math.max(minStart, b.event.startTimestampIdentifier)) ||\n (b.event.endTimestampIdentifier - a.event.endTimestampIdentifier)\n })\n\n return visuals\n}\n\nexport interface ColumnGroup {\n start: number\n end: number\n visuals: CalendarEventVisual[]\n}\n\nexport function hasOverlap (s0: number, e0: number, s1: number, e1: number, exclude = true): boolean {\n return exclude ? !(s0 >= e1 || e0 <= s1) : !(s0 > e1 || e0 < s1)\n}\n\nexport function setColumnCount (groups: ColumnGroup[]) {\n groups.forEach(group => {\n group.visuals.forEach(groupVisual => {\n groupVisual.columnCount = groups.length\n })\n })\n}\n\nexport function getRange (event: CalendarEventParsed): [number, number] {\n return [event.startTimestampIdentifier, event.endTimestampIdentifier]\n}\n\nexport function getDayRange (event: CalendarEventParsed): [number, number] {\n return [event.startIdentifier, event.endIdentifier]\n}\n\nexport function getNormalizedRange (event: CalendarEventParsed, dayStart: number): [number, number] {\n return [Math.max(dayStart, event.startTimestampIdentifier), Math.min(dayStart + MILLIS_IN_DAY, event.endTimestampIdentifier)]\n}\n\nexport function getOpenGroup (groups: ColumnGroup[], start: number, end: number, timed: boolean) {\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i]\n let intersected = false\n\n if (hasOverlap(start, end, group.start, group.end, timed)) {\n for (let k = 0; k < group.visuals.length; k++) {\n const groupVisual = group.visuals[k]\n const [groupStart, groupEnd] = timed ? getRange(groupVisual.event) : getDayRange(groupVisual.event)\n\n if (hasOverlap(start, end, groupStart, groupEnd, timed)) {\n intersected = true\n break\n }\n }\n }\n\n if (!intersected) {\n return i\n }\n }\n\n return -1\n}\n\nexport function getOverlapGroupHandler (firstWeekday: number) {\n const handler = {\n groups: [] as ColumnGroup[],\n min: -1,\n max: -1,\n reset: () => {\n handler.groups = []\n handler.min = handler.max = -1\n },\n getVisuals: (day: CalendarTimestamp, dayEvents: CalendarEventParsed[], timed: boolean, reset = false) => {\n if (day.weekday === firstWeekday || reset) {\n handler.reset()\n }\n\n const dayStart = getTimestampIdentifier(day)\n const visuals = getVisuals(dayEvents, dayStart)\n\n visuals.forEach(visual => {\n const [start, end] = timed ? getRange(visual.event) : getDayRange(visual.event)\n\n if (handler.groups.length > 0 && !hasOverlap(start, end, handler.min, handler.max, timed)) {\n setColumnCount(handler.groups)\n handler.reset()\n }\n\n let targetGroup = getOpenGroup(handler.groups, start, end, timed)\n\n if (targetGroup === -1) {\n targetGroup = handler.groups.length\n\n handler.groups.push({ start, end, visuals: [] })\n }\n\n const target = handler.groups[targetGroup]\n target.visuals.push(visual)\n target.start = Math.min(target.start, start)\n target.end = Math.max(target.end, end)\n\n visual.column = targetGroup\n\n if (handler.min === -1) {\n handler.min = start\n handler.max = end\n } else {\n handler.min = Math.min(handler.min, start)\n handler.max = Math.max(handler.max, end)\n }\n })\n\n setColumnCount(handler.groups)\n\n if (timed) {\n handler.reset()\n }\n\n return visuals\n },\n }\n\n return handler\n}\n","import { CalendarEventOverlapMode, CalendarEventVisual } from 'vuetify/types'\nimport { getOverlapGroupHandler, getVisuals, hasOverlap, getNormalizedRange } from './common'\nimport { getTimestampIdentifier } from '../util/timestamp'\n\ninterface Group {\n start: number\n end: number\n visuals: CalendarEventVisual[]\n}\n\ninterface Node {\n parent: Node | null\n sibling: boolean\n index: number\n visual: CalendarEventVisual\n start: number\n end: number\n children: Node[]\n}\n\nconst FULL_WIDTH = 100\n\nconst DEFAULT_OFFSET = 5\n\nconst WIDTH_MULTIPLIER = 1.7\n\n/**\n * Variation of column mode where events can be stacked. The priority of this\n * mode is to stack events together taking up the least amount of space while\n * trying to ensure the content of the event is always visible as well as its\n * start and end. A sibling column has intersecting event content and must be\n * placed beside each other. Non-sibling columns are offset by 5% from the\n * previous column. The width is scaled by 1.7 so the events overlap and\n * whitespace is reduced. If there is a hole in columns the event width is\n * scaled up so it intersects with the next column. The columns have equal\n * width in the space they are given. If the event doesn't have any to the\n * right of it that intersect with it's content it's right side is extended\n * to the right side.\n */\n\nexport const stack: CalendarEventOverlapMode = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday)\n\n // eslint-disable-next-line max-statements\n return (day, dayEvents, timed, reset) => {\n if (!timed) {\n return handler.getVisuals(day, dayEvents, timed, reset)\n }\n\n const dayStart = getTimestampIdentifier(day)\n const visuals = getVisuals(dayEvents, dayStart)\n const groups = getGroups(visuals, dayStart)\n\n for (const group of groups) {\n const nodes: Node[] = []\n\n for (const visual of group.visuals) {\n const child = getNode(visual, dayStart)\n const index = getNextIndex(child, nodes)\n\n if (index === false) {\n const parent = getParent(child, nodes)\n if (parent) {\n child.parent = parent\n child.sibling = hasOverlap(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold))\n child.index = parent.index + 1\n parent.children.push(child)\n }\n } else {\n const [parent] = getOverlappingRange(child, nodes, index - 1, index - 1)\n const children = getOverlappingRange(child, nodes, index + 1, index + nodes.length, true)\n\n child.children = children\n child.index = index\n\n if (parent) {\n child.parent = parent\n child.sibling = hasOverlap(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold))\n parent.children.push(child)\n }\n\n for (const grand of children) {\n if (grand.parent === parent) {\n grand.parent = child\n }\n\n const grandNext = grand.index - child.index <= 1\n if (grandNext && child.sibling &&\n hasOverlap(child.start, addTime(child.start, overlapThreshold), grand.start, grand.end)) {\n grand.sibling = true\n }\n }\n }\n\n nodes.push(child)\n }\n\n calculateBounds(nodes, overlapThreshold)\n }\n\n visuals.sort((a, b) => (a.left - b.left) || (a.event.startTimestampIdentifier - b.event.startTimestampIdentifier))\n\n return visuals\n }\n}\n\nfunction calculateBounds (nodes: Node[], overlapThreshold: number) {\n for (const node of nodes) {\n const { visual, parent } = node\n const columns = getMaxChildIndex(node) + 1\n const spaceLeft = parent ? parent.visual.left : 0\n const spaceWidth = FULL_WIDTH - spaceLeft\n const offset = Math.min(DEFAULT_OFFSET, FULL_WIDTH / columns)\n const columnWidthMultiplier = getColumnWidthMultiplier(node, nodes)\n const columnOffset = spaceWidth / (columns - node.index + 1)\n const columnWidth = spaceWidth / (columns - node.index + (node.sibling ? 1 : 0)) * columnWidthMultiplier\n\n if (parent) {\n visual.left = node.sibling\n ? spaceLeft + columnOffset\n : spaceLeft + offset\n }\n\n visual.width = hasFullWidth(node, nodes, overlapThreshold)\n ? FULL_WIDTH - visual.left\n : Math.min(FULL_WIDTH - visual.left, columnWidth * WIDTH_MULTIPLIER)\n }\n}\n\nfunction getColumnWidthMultiplier (node: Node, nodes: Node[]): number {\n if (!node.children.length) {\n return 1\n }\n\n const maxColumn = node.index + nodes.length\n const minColumn = node.children.reduce((min, c) => Math.min(min, c.index), maxColumn)\n\n return minColumn - node.index\n}\n\nfunction getOverlappingIndices (node: Node, nodes: Node[]): number[] {\n const indices: number[] = []\n for (const other of nodes) {\n if (hasOverlap(node.start, node.end, other.start, other.end)) {\n indices.push(other.index)\n }\n }\n return indices\n}\n\nfunction getNextIndex (node: Node, nodes: Node[]): number | false {\n const indices = getOverlappingIndices(node, nodes)\n indices.sort()\n\n for (let i = 0; i < indices.length; i++) {\n if (i < indices[i]) {\n return i\n }\n }\n return false\n}\n\nfunction getOverlappingRange (node: Node, nodes: Node[], indexMin: number, indexMax: number, returnFirstColumn = false): Node[] {\n const overlapping: Node[] = []\n for (const other of nodes) {\n if (other.index >= indexMin && other.index <= indexMax && hasOverlap(node.start, node.end, other.start, other.end)) {\n overlapping.push(other)\n }\n }\n if (returnFirstColumn && overlapping.length > 0) {\n const first = overlapping.reduce((min, n) => Math.min(min, n.index), overlapping[0].index)\n return overlapping.filter(n => n.index === first)\n }\n return overlapping\n}\n\nfunction getParent (node: Node, nodes: Node[]): Node | null {\n let parent: Node | null = null\n for (const other of nodes) {\n if (hasOverlap(node.start, node.end, other.start, other.end) && (parent === null || other.index > parent.index)) {\n parent = other\n }\n }\n return parent\n}\n\nfunction hasFullWidth (node: Node, nodes: Node[], overlapThreshold: number): boolean {\n for (const other of nodes) {\n if (other !== node &&\n other.index > node.index &&\n hasOverlap(node.start, addTime(node.start, overlapThreshold), other.start, other.end)) {\n return false\n }\n }\n\n return true\n}\n\nfunction getGroups (visuals: CalendarEventVisual[], dayStart: number): Group[] {\n const groups: Group[] = []\n\n for (const visual of visuals) {\n const [start, end] = getNormalizedRange(visual.event, dayStart)\n let added = false\n\n for (const group of groups) {\n if (hasOverlap(start, end, group.start, group.end)) {\n group.visuals.push(visual)\n group.end = Math.max(group.end, end)\n added = true\n break\n }\n }\n\n if (!added) {\n groups.push({ start, end, visuals: [visual] })\n }\n }\n\n return groups\n}\n\nfunction getNode (visual: CalendarEventVisual, dayStart: number): Node {\n const [start, end] = getNormalizedRange(visual.event, dayStart)\n\n return {\n parent: null,\n sibling: true,\n index: 0,\n visual,\n start,\n end,\n children: [],\n }\n}\n\nfunction getMaxChildIndex (node: Node): number {\n let max = node.index\n for (const child of node.children) {\n const childMax = getMaxChildIndex(child)\n if (childMax > max) {\n max = childMax\n }\n }\n return max\n}\n\nfunction addTime (identifier: number, minutes: number): number {\n const removeMinutes = identifier % 100\n const totalMinutes = removeMinutes + minutes\n const addHours = Math.floor(totalMinutes / 60)\n const addMinutes = totalMinutes % 60\n\n return identifier - removeMinutes + addHours * 100 + addMinutes\n}\n","import { CalendarEventOverlapMode } from 'vuetify/types'\nimport { getOverlapGroupHandler } from './common'\n\nconst FULL_WIDTH = 100\n\nexport const column: CalendarEventOverlapMode = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday)\n\n return (day, dayEvents, timed, reset) => {\n const visuals = handler.getVisuals(day, dayEvents, timed, reset)\n\n if (timed) {\n visuals.forEach(visual => {\n visual.left = visual.column * FULL_WIDTH / visual.columnCount\n visual.width = FULL_WIDTH / visual.columnCount\n })\n }\n\n return visuals\n }\n}\n","import { CalendarEventOverlapMode } from 'vuetify/types'\nimport { stack } from './stack'\nimport { column } from './column'\n\nexport const CalendarEventOverlapModes: Record = {\n stack,\n column,\n}\n","\nimport { validateTimestamp, parseDate, DAYS_IN_WEEK, validateTime } from './timestamp'\nimport { PropType } from 'vue'\nimport { CalendarEvent, CalendarFormatter, CalendarTimestamp, CalendarEventOverlapMode, CalendarEventNameFunction, CalendarEventColorFunction, CalendarEventCategoryFunction, CalendarEventTimedFunction, CalendarCategoryTextFunction, CalendarCategory } from 'vuetify/types'\nimport { CalendarEventOverlapModes } from '../modes'\nimport { PropValidator } from 'vue/types/options'\n\nexport default {\n base: {\n start: {\n type: [String, Number, Date],\n validate: validateTimestamp,\n default: () => parseDate(new Date()).date,\n },\n end: {\n type: [String, Number, Date],\n validate: validateTimestamp,\n },\n weekdays: {\n type: [Array, String] as PropType,\n default: () => [0, 1, 2, 3, 4, 5, 6],\n validate: validateWeekdays,\n },\n hideHeader: {\n type: Boolean,\n },\n shortWeekdays: {\n type: Boolean,\n default: true,\n },\n weekdayFormat: {\n type: Function as PropType,\n default: null,\n },\n dayFormat: {\n type: Function as PropType,\n default: null,\n },\n },\n intervals: {\n maxDays: {\n type: Number,\n default: 7,\n },\n shortIntervals: {\n type: Boolean,\n default: true,\n },\n intervalHeight: {\n type: [Number, String],\n default: 48,\n validate: validateNumber,\n },\n intervalWidth: {\n type: [Number, String],\n default: 60,\n validate: validateNumber,\n },\n intervalMinutes: {\n type: [Number, String],\n default: 60,\n validate: validateNumber,\n },\n firstInterval: {\n type: [Number, String],\n default: 0,\n validate: validateNumber,\n },\n firstTime: {\n type: [Number, String, Object],\n validate: validateTime,\n },\n intervalCount: {\n type: [Number, String],\n default: 24,\n validate: validateNumber,\n },\n intervalFormat: {\n type: Function as PropType,\n default: null,\n },\n intervalStyle: {\n type: Function as PropType<(interval: CalendarTimestamp) => object>,\n default: null,\n },\n showIntervalLabel: {\n type: Function as PropType<(interval: CalendarTimestamp) => boolean>,\n default: null,\n },\n },\n weeks: {\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n minWeeks: {\n validate: validateNumber,\n default: 1,\n },\n shortMonths: {\n type: Boolean,\n default: true,\n },\n showMonthOnFirst: {\n type: Boolean,\n default: true,\n },\n showWeek: Boolean,\n monthFormat: {\n type: Function as PropType,\n default: null,\n },\n },\n calendar: {\n type: {\n type: String,\n default: 'month',\n },\n value: {\n type: [String, Number, Date] as PropType,\n validate: validateTimestamp,\n },\n },\n category: {\n categories: {\n type: [Array, String] as PropType,\n default: '',\n },\n categoryText: {\n type: [String, Function] as PropType,\n },\n categoryHideDynamic: {\n type: Boolean,\n },\n categoryShowAll: {\n type: Boolean,\n },\n categoryForInvalid: {\n type: String,\n default: '',\n },\n categoryDays: {\n type: [Number, String],\n default: 1,\n validate: (x: any) => isFinite(parseInt(x)) && parseInt(x) > 0,\n },\n },\n events: {\n events: {\n type: Array,\n default: () => [],\n } as PropValidator,\n eventStart: {\n type: String,\n default: 'start',\n },\n eventEnd: {\n type: String,\n default: 'end',\n },\n eventTimed: {\n type: [String, Function] as PropType,\n default: 'timed',\n },\n eventCategory: {\n type: [String, Function] as PropType,\n default: 'category',\n },\n eventHeight: {\n type: Number,\n default: 20,\n },\n eventColor: {\n type: [String, Function] as PropType,\n default: 'primary',\n },\n eventTextColor: {\n type: [String, Function] as PropType,\n default: 'white',\n },\n eventName: {\n type: [String, Function] as PropType,\n default: 'name',\n },\n eventOverlapThreshold: {\n type: [String, Number],\n default: 60,\n },\n eventOverlapMode: {\n type: [String, Function],\n default: 'stack',\n validate: (mode: any) => mode in CalendarEventOverlapModes || typeof mode === 'function',\n } as PropValidator<'stack' | 'column' | CalendarEventOverlapMode>,\n eventMore: {\n type: Boolean,\n default: true,\n },\n eventMoreText: {\n type: String,\n default: '$vuetify.calendar.moreEvents',\n },\n eventRipple: {\n type: [Boolean, Object],\n default: null,\n },\n eventMarginBottom: {\n type: Number,\n default: 1,\n },\n },\n}\n\nexport function validateNumber (input: any): boolean {\n return isFinite(parseInt(input))\n}\n\nexport function validateWeekdays (input: string | (number | string)[]): boolean {\n if (typeof input === 'string') {\n input = input.split(',')\n }\n\n if (Array.isArray(input)) {\n const ints = input.map(x => parseInt(x))\n\n if (ints.length > DAYS_IN_WEEK || ints.length === 0) {\n return false\n }\n\n const visited: Record = {}\n let wrapped = false\n\n for (let i = 0; i < ints.length; i++) {\n const x = ints[i]\n\n if (!isFinite(x) || x < 0 || x >= DAYS_IN_WEEK) {\n return false\n }\n\n if (i > 0) {\n const d = x - ints[i - 1]\n if (d < 0) {\n if (wrapped) {\n return false\n }\n wrapped = true\n } else if (d === 0) {\n return false\n }\n }\n\n if (visited[x]) {\n return false\n }\n visited[x] = true\n }\n\n return true\n }\n\n return false\n}\n","\n// Mixins\nimport mixins from '../../../util/mixins'\nimport Colorable from '../../../mixins/colorable'\nimport Localable from '../../../mixins/localable'\nimport Mouse from './mouse'\nimport Themeable from '../../../mixins/themeable'\nimport Times from './times'\n\n// Directives\nimport Resize from '../../../directives/resize'\n\n// Util\nimport props from '../util/props'\nimport {\n parseTimestamp,\n getWeekdaySkips,\n createDayList,\n createNativeLocaleFormatter,\n getStartOfWeek,\n getEndOfWeek,\n getTimestampIdentifier,\n} from '../util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\n\nexport default mixins(\n Colorable,\n Localable,\n Mouse,\n Themeable,\n Times\n/* @vue/component */\n).extend({\n name: 'calendar-base',\n\n directives: {\n Resize,\n },\n\n props: props.base,\n\n computed: {\n parsedWeekdays (): number[] {\n return Array.isArray(this.weekdays)\n ? this.weekdays\n : (this.weekdays || '').split(',').map(x => parseInt(x, 10))\n },\n weekdaySkips (): number[] {\n return getWeekdaySkips(this.parsedWeekdays)\n },\n weekdaySkipsReverse (): number [] {\n const reversed = this.weekdaySkips.slice()\n reversed.reverse()\n return reversed\n },\n parsedStart (): CalendarTimestamp {\n return parseTimestamp(this.start, true)\n },\n parsedEnd (): CalendarTimestamp {\n const start = this.parsedStart\n const end: CalendarTimestamp = this.end ? parseTimestamp(this.end) || start : start\n\n return getTimestampIdentifier(end) < getTimestampIdentifier(start) ? start : end\n },\n days (): CalendarTimestamp[] {\n return createDayList(\n this.parsedStart,\n this.parsedEnd,\n this.times.today,\n this.weekdaySkips\n )\n },\n dayFormatter (): CalendarFormatter {\n if (this.dayFormat) {\n return this.dayFormat as CalendarFormatter\n }\n\n const options = { timeZone: 'UTC', day: 'numeric' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, _short) => options\n )\n },\n weekdayFormatter (): CalendarFormatter {\n if (this.weekdayFormat) {\n return this.weekdayFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', weekday: 'long' }\n const shortOptions = { timeZone: 'UTC', weekday: 'short' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, short) => short ? shortOptions : longOptions\n )\n },\n },\n\n methods: {\n getRelativeClasses (timestamp: CalendarTimestamp, outside = false): object {\n return {\n 'v-present': timestamp.present,\n 'v-past': timestamp.past,\n 'v-future': timestamp.future,\n 'v-outside': outside,\n }\n },\n getStartOfWeek (timestamp: CalendarTimestamp): CalendarTimestamp {\n return getStartOfWeek(timestamp, this.parsedWeekdays, this.times.today)\n },\n getEndOfWeek (timestamp: CalendarTimestamp): CalendarTimestamp {\n return getEndOfWeek(timestamp, this.parsedWeekdays, this.times.today)\n },\n getFormatter (options: object): CalendarFormatter {\n return createNativeLocaleFormatter(\n this.locale,\n (_tms, _short) => options\n )\n },\n },\n})\n","import {\n parseTimestamp,\n getDayIdentifier,\n getTimestampIdentifier,\n isTimedless,\n updateHasTime,\n} from './timestamp'\nimport { CalendarTimestamp, CalendarEvent, CalendarEventParsed } from 'vuetify/types'\n\nexport function parseEvent (\n input: CalendarEvent,\n index: number,\n startProperty: string,\n endProperty: string,\n timed = false,\n category: string | false = false,\n): CalendarEventParsed {\n const startInput = input[startProperty]\n const endInput = input[endProperty]\n const startParsed: CalendarTimestamp = parseTimestamp(startInput, true)\n const endParsed: CalendarTimestamp = (endInput ? parseTimestamp(endInput, true) : startParsed)\n const start: CalendarTimestamp = isTimedless(startInput)\n ? updateHasTime(startParsed, timed)\n : startParsed\n const end: CalendarTimestamp = isTimedless(endInput)\n ? updateHasTime(endParsed, timed)\n : endParsed\n const startIdentifier: number = getDayIdentifier(start)\n const startTimestampIdentifier: number = getTimestampIdentifier(start)\n const endIdentifier: number = getDayIdentifier(end)\n const endOffset: number = start.hasTime ? 0 : 2359\n const endTimestampIdentifier: number = getTimestampIdentifier(end) + endOffset\n const allDay = !start.hasTime\n\n return { input, start, startIdentifier, startTimestampIdentifier, end, endIdentifier, endTimestampIdentifier, allDay, index, category }\n}\n\nexport function isEventOn (event: CalendarEventParsed, dayIdentifier: number): boolean {\n return dayIdentifier >= event.startIdentifier && dayIdentifier <= event.endIdentifier\n}\n\nexport function isEventHiddenOn (event: CalendarEventParsed, day: CalendarTimestamp): boolean {\n return event.end.time === '00:00' && event.end.date === day.date && event.start.date !== day.date\n}\n\nexport function isEventStart (event: CalendarEventParsed, day: CalendarTimestamp, dayIdentifier: number, firstWeekday: number): boolean {\n return dayIdentifier === event.startIdentifier || (firstWeekday === day.weekday && isEventOn(event, dayIdentifier))\n}\n\nexport function isEventOverlapping (event: CalendarEventParsed, startIdentifier: number, endIdentifier: number): boolean {\n return startIdentifier <= event.endIdentifier && endIdentifier >= event.startIdentifier\n}\n","// Styles\nimport './calendar-with-events.sass'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\n\n// Directives\nimport ripple from '../../../directives/ripple'\n\n// Mixins\nimport CalendarBase from './calendar-base'\n\n// Helpers\nimport { escapeHTML } from '../../../util/helpers'\n\n// Util\nimport props from '../util/props'\nimport {\n CalendarEventOverlapModes,\n} from '../modes'\nimport {\n getDayIdentifier, diffMinutes,\n} from '../util/timestamp'\nimport {\n parseEvent,\n isEventStart,\n isEventOn,\n isEventOverlapping,\n isEventHiddenOn,\n} from '../util/events'\nimport {\n CalendarTimestamp,\n CalendarEventParsed,\n CalendarEventVisual,\n CalendarEventColorFunction,\n CalendarEventNameFunction,\n CalendarEventTimedFunction,\n CalendarDaySlotScope,\n CalendarDayBodySlotScope,\n CalendarEventOverlapMode,\n CalendarEvent,\n CalendarEventCategoryFunction,\n CalendarCategory,\n} from 'vuetify/types'\n\n// Types\ntype VEventGetter = (day: D) => CalendarEventParsed[]\n\ntype VEventVisualToNode = (visual: CalendarEventVisual, day: D) => VNode | false\n\ntype VEventsToNodes = (\n day: D,\n getter: VEventGetter,\n mapper: VEventVisualToNode,\n timed: boolean) => VNode[] | undefined\n\ntype VDailyEventsMap = {\n [date: string]: {\n parent: HTMLElement\n more: HTMLElement | null\n events: HTMLElement[]\n }\n}\n\ninterface VEventScopeInput {\n eventParsed: CalendarEventParsed\n day: CalendarDaySlotScope\n start: boolean\n end: boolean\n timed: boolean\n}\n\nconst WIDTH_FULL = 100\nconst WIDTH_START = 95\nconst MINUTES_IN_DAY = 1440\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'calendar-with-events',\n\n directives: {\n ripple,\n },\n\n props: {\n ...props.events,\n ...props.calendar,\n ...props.category,\n },\n\n computed: {\n noEvents (): boolean {\n return this.events.length === 0\n },\n parsedEvents (): CalendarEventParsed[] {\n return this.events.map(this.parseEvent)\n },\n parsedEventOverlapThreshold (): number {\n return parseInt(this.eventOverlapThreshold)\n },\n eventTimedFunction (): CalendarEventTimedFunction {\n return typeof this.eventTimed === 'function'\n ? this.eventTimed\n : event => !!event[this.eventTimed as string]\n },\n eventCategoryFunction (): CalendarEventCategoryFunction {\n return typeof this.eventCategory === 'function'\n ? this.eventCategory\n : event => event[this.eventCategory as string]\n },\n eventTextColorFunction (): CalendarEventColorFunction {\n return typeof this.eventTextColor === 'function'\n ? this.eventTextColor\n : () => this.eventTextColor as string\n },\n eventNameFunction (): CalendarEventNameFunction {\n return typeof this.eventName === 'function'\n ? this.eventName\n : (event, timedEvent) => escapeHTML(event.input[this.eventName as string] as string || '')\n },\n eventModeFunction (): CalendarEventOverlapMode {\n return typeof this.eventOverlapMode === 'function'\n ? this.eventOverlapMode\n : CalendarEventOverlapModes[this.eventOverlapMode]\n },\n eventWeekdays (): number[] {\n return this.parsedWeekdays\n },\n categoryMode (): boolean {\n return this.type === 'category'\n },\n },\n\n methods: {\n eventColorFunction (e: CalendarEvent): string {\n return typeof this.eventColor === 'function'\n ? this.eventColor(e)\n : e.color || this.eventColor\n },\n parseEvent (input: CalendarEvent, index = 0): CalendarEventParsed {\n return parseEvent(\n input,\n index,\n this.eventStart,\n this.eventEnd,\n this.eventTimedFunction(input),\n this.categoryMode ? this.eventCategoryFunction(input) : false,\n )\n },\n formatTime (withTime: CalendarTimestamp, ampm: boolean): string {\n const formatter = this.getFormatter({\n timeZone: 'UTC',\n hour: 'numeric',\n minute: withTime.minute > 0 ? 'numeric' : undefined,\n })\n\n return formatter(withTime, true)\n },\n updateEventVisibility () {\n if (this.noEvents || !this.eventMore) {\n return\n }\n\n const eventHeight = this.eventHeight\n const eventsMap = this.getEventsMap()\n\n for (const date in eventsMap) {\n const { parent, events, more } = eventsMap[date]\n if (!more) {\n break\n }\n\n const parentBounds = parent.getBoundingClientRect()\n const last = events.length - 1\n const eventsSorted = events.map(event => ({\n event,\n bottom: event.getBoundingClientRect().bottom,\n })).sort((a, b) => a.bottom - b.bottom)\n let hidden = 0\n\n for (let i = 0; i <= last; i++) {\n const bottom = eventsSorted[i].bottom\n const hide = i === last\n ? (bottom > parentBounds.bottom)\n : (bottom + eventHeight > parentBounds.bottom)\n\n if (hide) {\n eventsSorted[i].event.style.display = 'none'\n hidden++\n }\n }\n\n if (hidden) {\n more.style.display = ''\n more.innerHTML = this.$vuetify.lang.t(this.eventMoreText, hidden)\n } else {\n more.style.display = 'none'\n }\n }\n },\n getEventsMap (): VDailyEventsMap {\n const eventsMap: VDailyEventsMap = {}\n const elements = this.$refs.events as HTMLElement[]\n\n if (!elements || !elements.forEach) {\n return eventsMap\n }\n\n elements.forEach(el => {\n const date = el.getAttribute('data-date')\n if (el.parentElement && date) {\n if (!(date in eventsMap)) {\n eventsMap[date] = {\n parent: el.parentElement,\n more: null,\n events: [],\n }\n }\n if (el.getAttribute('data-more')) {\n eventsMap[date].more = el\n } else {\n eventsMap[date].events.push(el)\n el.style.display = ''\n }\n }\n })\n\n return eventsMap\n },\n genDayEvent ({ event }: CalendarEventVisual, day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n const dayIdentifier = getDayIdentifier(day)\n const week = day.week\n const start = dayIdentifier === event.startIdentifier\n let end = dayIdentifier === event.endIdentifier\n let width = WIDTH_START\n\n if (!this.categoryMode) {\n for (let i = day.index + 1; i < week.length; i++) {\n const weekdayIdentifier = getDayIdentifier(week[i])\n if (event.endIdentifier >= weekdayIdentifier) {\n width += WIDTH_FULL\n end = end || weekdayIdentifier === event.endIdentifier\n } else {\n end = true\n break\n }\n }\n }\n const scope = { eventParsed: event, day, start, end, timed: false }\n\n return this.genEvent(event, scope, false, {\n staticClass: 'v-event',\n class: {\n 'v-event-start': start,\n 'v-event-end': end,\n },\n style: {\n height: `${eventHeight}px`,\n width: `${width}%`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n key: event.index,\n ref: 'events',\n refInFor: true,\n })\n },\n genTimedEvent ({ event, left, width }: CalendarEventVisual, day: CalendarDayBodySlotScope): VNode | false {\n if (day.timeDelta(event.end) < 0 || day.timeDelta(event.start) >= 1 || isEventHiddenOn(event, day)) {\n return false\n }\n\n const dayIdentifier = getDayIdentifier(day)\n const start = event.startIdentifier >= dayIdentifier\n const end = event.endIdentifier > dayIdentifier\n const top = start ? day.timeToY(event.start) : 0\n const bottom = end ? day.timeToY(MINUTES_IN_DAY) : day.timeToY(event.end)\n const height = Math.max(this.eventHeight, bottom - top)\n const scope = { eventParsed: event, day, start, end, timed: true }\n\n return this.genEvent(event, scope, true, {\n staticClass: 'v-event-timed',\n style: {\n top: `${top}px`,\n height: `${height}px`,\n left: `${left}%`,\n width: `${width}%`,\n },\n })\n },\n genEvent (event: CalendarEventParsed, scopeInput: VEventScopeInput, timedEvent: boolean, data: VNodeData): VNode {\n const slot = this.$scopedSlots.event\n const text = this.eventTextColorFunction(event.input)\n const background = this.eventColorFunction(event.input)\n const overlapsNoon = event.start.hour < 12 && event.end.hour >= 12\n const singline = diffMinutes(event.start, event.end) <= this.parsedEventOverlapThreshold\n const formatTime = this.formatTime\n const timeSummary = () => formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true)\n const eventSummary = () => {\n const name = this.eventNameFunction(event, timedEvent)\n\n if (event.start.hasTime) {\n if (timedEvent) {\n const time = timeSummary()\n const delimiter = singline ? ', ' : '
'\n\n return `${name}${delimiter}${time}`\n } else {\n const time = formatTime(event.start, true)\n\n return `${time} ${name}`\n }\n }\n\n return name\n }\n\n const scope = {\n ...scopeInput,\n event: event.input,\n outside: scopeInput.day.outside,\n singline,\n overlapsNoon,\n formatTime,\n timeSummary,\n eventSummary,\n }\n\n return this.$createElement('div',\n this.setTextColor(text,\n this.setBackgroundColor(background, {\n on: this.getDefaultMouseEventHandlers(':event', nativeEvent => ({ ...scope, nativeEvent })),\n directives: [{\n name: 'ripple',\n value: this.eventRipple ?? true,\n }],\n ...data,\n })\n ), slot\n ? slot(scope)\n : [this.genName(eventSummary)]\n )\n },\n genName (eventSummary: () => string): VNode {\n return this.$createElement('div', {\n staticClass: 'pl-1',\n domProps: {\n innerHTML: eventSummary(),\n },\n })\n },\n genPlaceholder (day: CalendarTimestamp): VNode {\n const height = this.eventHeight + this.eventMarginBottom\n\n return this.$createElement('div', {\n style: {\n height: `${height}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n ref: 'events',\n refInFor: true,\n })\n },\n genMore (day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n\n return this.$createElement('div', {\n staticClass: 'v-event-more pl-1',\n class: {\n 'v-outside': day.outside,\n },\n attrs: {\n 'data-date': day.date,\n 'data-more': 1,\n },\n directives: [{\n name: 'ripple',\n value: this.eventRipple ?? true,\n }],\n on: {\n click: () => this.$emit('click:more', day),\n },\n style: {\n display: 'none',\n height: `${eventHeight}px`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n ref: 'events',\n refInFor: true,\n })\n },\n getVisibleEvents (): CalendarEventParsed[] {\n const start = getDayIdentifier(this.days[0])\n const end = getDayIdentifier(this.days[this.days.length - 1])\n\n return this.parsedEvents.filter(\n event => isEventOverlapping(event, start, end)\n )\n },\n isEventForCategory (event: CalendarEventParsed, category: CalendarCategory): boolean {\n return !this.categoryMode ||\n (typeof category === 'object' && category.categoryName &&\n category.categoryName === event.category) ||\n (typeof event.category === 'string' && category === event.category) ||\n (typeof event.category !== 'string' && category === null)\n },\n getEventsForDay (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n const firstWeekday = this.eventWeekdays[0]\n\n return this.parsedEvents.filter(\n event => isEventStart(event, day, identifier, firstWeekday)\n )\n },\n getEventsForDayAll (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n const firstWeekday = this.eventWeekdays[0]\n\n return this.parsedEvents.filter(\n event => event.allDay &&\n (this.categoryMode ? isEventOn(event, identifier) : isEventStart(event, day, identifier, firstWeekday)) &&\n this.isEventForCategory(event, day.category)\n )\n },\n getEventsForDayTimed (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n return this.parsedEvents.filter(\n event => !event.allDay &&\n isEventOn(event, identifier) &&\n this.isEventForCategory(event, day.category)\n )\n },\n getScopedSlots () {\n if (this.noEvents) {\n return { ...this.$scopedSlots }\n }\n\n const mode = this.eventModeFunction(\n this.parsedEvents,\n this.eventWeekdays[0],\n this.parsedEventOverlapThreshold\n )\n\n const isNode = (input: VNode | false): input is VNode => !!input\n const getSlotChildren: VEventsToNodes = (day, getter, mapper, timed) => {\n const events = getter(day)\n const visuals = mode(day, events, timed, this.categoryMode)\n\n if (timed) {\n return visuals.map(visual => mapper(visual, day)).filter(isNode)\n }\n\n const children: VNode[] = []\n\n visuals.forEach((visual, index) => {\n while (children.length < visual.column) {\n children.push(this.genPlaceholder(day))\n }\n\n const mapped = mapper(visual, day)\n if (mapped) {\n children.push(mapped)\n }\n })\n\n return children\n }\n\n const slots = this.$scopedSlots\n const slotDay = slots.day\n const slotDayHeader = slots['day-header']\n const slotDayBody = slots['day-body']\n\n return {\n ...slots,\n day: (day: CalendarDaySlotScope) => {\n let children = getSlotChildren(day, this.getEventsForDay, this.genDayEvent, false)\n if (children && children.length > 0 && this.eventMore) {\n children.push(this.genMore(day))\n }\n if (slotDay) {\n const slot = slotDay(day)\n if (slot) {\n children = children ? children.concat(slot) : slot\n }\n }\n return children\n },\n 'day-header': (day: CalendarDaySlotScope) => {\n let children = getSlotChildren(day, this.getEventsForDayAll, this.genDayEvent, false)\n\n if (slotDayHeader) {\n const slot = slotDayHeader(day)\n if (slot) {\n children = children ? children.concat(slot) : slot\n }\n }\n return children\n },\n 'day-body': (day: CalendarDayBodySlotScope) => {\n const events = getSlotChildren(day, this.getEventsForDayTimed, this.genTimedEvent, true)\n let children: VNode[] = [\n this.$createElement('div', {\n staticClass: 'v-event-timed-container',\n }, events),\n ]\n\n if (slotDayBody) {\n const slot = slotDayBody(day)\n if (slot) {\n children = children.concat(slot)\n }\n }\n return children\n },\n }\n },\n },\n})\n","// Styles\nimport './VCalendarWeekly.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Components\nimport VBtn from '../VBtn'\n\n// Mixins\nimport CalendarBase from './mixins/calendar-base'\n\n// Util\nimport { getSlot } from '../../util/helpers'\nimport { weekNumber } from '../../util/dateTimeUtils'\nimport props from './util/props'\nimport {\n createDayList,\n getDayIdentifier,\n createNativeLocaleFormatter,\n} from './util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'v-calendar-weekly',\n\n props: props.weeks,\n\n computed: {\n staticClass (): string {\n return 'v-calendar-weekly'\n },\n classes (): object {\n return this.themeClasses\n },\n parsedMinWeeks (): number {\n return parseInt(this.minWeeks)\n },\n days (): CalendarTimestamp[] {\n const minDays = this.parsedMinWeeks * this.parsedWeekdays.length\n const start = this.getStartOfWeek(this.parsedStart)\n const end = this.getEndOfWeek(this.parsedEnd)\n\n return createDayList(\n start,\n end,\n this.times.today,\n this.weekdaySkips,\n Number.MAX_SAFE_INTEGER,\n minDays\n )\n },\n todayWeek (): CalendarTimestamp[] {\n const today = this.times.today\n const start = this.getStartOfWeek(today)\n const end = this.getEndOfWeek(today)\n\n return createDayList(\n start,\n end,\n today,\n this.weekdaySkips,\n this.parsedWeekdays.length,\n this.parsedWeekdays.length\n )\n },\n monthFormatter (): CalendarFormatter {\n if (this.monthFormat) {\n return this.monthFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', month: 'long' }\n const shortOptions = { timeZone: 'UTC', month: 'short' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, short) => short ? shortOptions : longOptions\n )\n },\n },\n\n methods: {\n isOutside (day: CalendarTimestamp): boolean {\n const dayIdentifier = getDayIdentifier(day)\n\n return dayIdentifier < getDayIdentifier(this.parsedStart) ||\n dayIdentifier > getDayIdentifier(this.parsedEnd)\n },\n genHead (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__head',\n }, this.genHeadDays())\n },\n genHeadDays (): VNode[] {\n const header = this.todayWeek.map(this.genHeadDay)\n\n if (this.showWeek) {\n header.unshift(this.$createElement('div', {\n staticClass: 'v-calendar-weekly__head-weeknumber',\n }))\n }\n\n return header\n },\n genHeadDay (day: CalendarTimestamp, index: number): VNode {\n const outside = this.isOutside(this.days[index])\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n key: day.date,\n staticClass: 'v-calendar-weekly__head-weekday',\n class: this.getRelativeClasses(day, outside),\n }), this.weekdayFormatter(day, this.shortWeekdays))\n },\n genWeeks (): VNode[] {\n const days = this.days\n const weekDays = this.parsedWeekdays.length\n const weeks: VNode[] = []\n\n for (let i = 0; i < days.length; i += weekDays) {\n weeks.push(this.genWeek(days.slice(i, i + weekDays), this.getWeekNumber(days[i])))\n }\n\n return weeks\n },\n genWeek (week: CalendarTimestamp[], weekNumber: number): VNode {\n const weekNodes = week.map((day, index) => this.genDay(day, index, week))\n\n if (this.showWeek) {\n weekNodes.unshift(this.genWeekNumber(weekNumber))\n }\n\n return this.$createElement('div', {\n key: week[0].date,\n staticClass: 'v-calendar-weekly__week',\n }, weekNodes)\n },\n getWeekNumber (determineDay: CalendarTimestamp) {\n return weekNumber(\n determineDay.year,\n determineDay.month - 1,\n determineDay.day,\n this.parsedWeekdays[0],\n parseInt(this.localeFirstDayOfYear)\n )\n },\n genWeekNumber (weekNumber: number) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__weeknumber',\n }, [\n this.$createElement('small', String(weekNumber)),\n ])\n },\n genDay (day: CalendarTimestamp, index: number, week: CalendarTimestamp[]): VNode {\n const outside = this.isOutside(day)\n\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-weekly__day',\n class: this.getRelativeClasses(day, outside),\n on: this.getDefaultMouseEventHandlers(':day', _e => day),\n }, [\n this.genDayLabel(day),\n ...(getSlot(this, 'day', () => ({ outside, index, week, ...day })) || []),\n ])\n },\n genDayLabel (day: CalendarTimestamp): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__day-label',\n }, getSlot(this, 'day-label', day) || [this.genDayLabelButton(day)])\n },\n genDayLabelButton (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : 'transparent'\n const hasMonth = day.day === 1 && this.showMonthOnFirst\n\n return this.$createElement(VBtn, {\n props: {\n color,\n fab: true,\n depressed: true,\n small: true,\n },\n on: this.getMouseEventHandlers({\n 'click:date': { event: 'click', stop: true },\n 'contextmenu:date': { event: 'contextmenu', stop: true, prevent: true, result: false },\n }, _e => day),\n }, hasMonth\n ? this.monthFormatter(day, this.shortMonths) + ' ' + this.dayFormatter(day, false)\n : this.dayFormatter(day, false)\n )\n },\n genDayMonth (day: CalendarTimestamp): VNode | string {\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-calendar-weekly__day-month',\n }), getSlot(this, 'day-month', day) || this.monthFormatter(day, this.shortMonths))\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: this.staticClass,\n class: this.classes,\n on: {\n dragstart: (e: MouseEvent) => {\n e.preventDefault()\n },\n },\n }, [\n !this.hideHeader ? this.genHead() : '',\n ...this.genWeeks(),\n ])\n },\n})\n","// Styles\nimport './VCalendarWeekly.sass'\n\n// Mixins\nimport VCalendarWeekly from './VCalendarWeekly'\n\n// Util\nimport { parseTimestamp, getStartOfMonth, getEndOfMonth } from './util/timestamp'\nimport { CalendarTimestamp } from 'vuetify/types'\n\n/* @vue/component */\nexport default VCalendarWeekly.extend({\n name: 'v-calendar-monthly',\n\n computed: {\n staticClass (): string {\n return 'v-calendar-monthly v-calendar-weekly'\n },\n parsedStart (): CalendarTimestamp {\n return getStartOfMonth(parseTimestamp(this.start, true))\n },\n parsedEnd (): CalendarTimestamp {\n return getEndOfMonth(parseTimestamp(this.end, true))\n },\n },\n\n})\n","\n// Mixins\nimport CalendarBase from './calendar-base'\n\n// Util\nimport props from '../util/props'\nimport {\n parseTime,\n copyTimestamp,\n updateMinutes,\n createDayList,\n createIntervalList,\n createNativeLocaleFormatter,\n VTime,\n MINUTES_IN_DAY,\n} from '../util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter, CalendarDayBodySlotScope } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'calendar-with-intervals',\n\n props: props.intervals,\n\n computed: {\n parsedFirstInterval (): number {\n return parseInt(this.firstInterval)\n },\n parsedIntervalMinutes (): number {\n return parseInt(this.intervalMinutes)\n },\n parsedIntervalCount (): number {\n return parseInt(this.intervalCount)\n },\n parsedIntervalHeight (): number {\n return parseFloat(this.intervalHeight)\n },\n parsedFirstTime (): number | false {\n return parseTime(this.firstTime)\n },\n firstMinute (): number {\n const time = this.parsedFirstTime\n\n return time !== false && time >= 0 && time <= MINUTES_IN_DAY\n ? time\n : this.parsedFirstInterval * this.parsedIntervalMinutes\n },\n bodyHeight (): number {\n return this.parsedIntervalCount * this.parsedIntervalHeight\n },\n days (): CalendarTimestamp[] {\n return createDayList(\n this.parsedStart,\n this.parsedEnd,\n this.times.today,\n this.weekdaySkips,\n this.maxDays\n )\n },\n intervals (): CalendarTimestamp[][] {\n const days: CalendarTimestamp[] = this.days\n const first: number = this.firstMinute\n const minutes: number = this.parsedIntervalMinutes\n const count: number = this.parsedIntervalCount\n const now: CalendarTimestamp = this.times.now\n\n return days.map(d => createIntervalList(d, first, minutes, count, now))\n },\n intervalFormatter (): CalendarFormatter {\n if (this.intervalFormat) {\n return this.intervalFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', hour: '2-digit', minute: '2-digit' }\n const shortOptions = { timeZone: 'UTC', hour: 'numeric', minute: '2-digit' }\n const shortHourOptions = { timeZone: 'UTC', hour: 'numeric' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (tms, short) => short ? (tms.minute === 0 ? shortHourOptions : shortOptions) : longOptions\n )\n },\n },\n\n methods: {\n showIntervalLabelDefault (interval: CalendarTimestamp): boolean {\n const first: CalendarTimestamp = this.intervals[0][0]\n const isFirst: boolean = first.hour === interval.hour && first.minute === interval.minute\n return !isFirst\n },\n intervalStyleDefault (_interval: CalendarTimestamp): object | undefined {\n return undefined\n },\n getTimestampAtEvent (e: MouseEvent | TouchEvent, day: CalendarTimestamp): CalendarTimestamp {\n const timestamp: CalendarTimestamp = copyTimestamp(day)\n const bounds = (e.currentTarget as HTMLElement).getBoundingClientRect()\n const baseMinutes: number = this.firstMinute\n const touchEvent: TouchEvent = e as TouchEvent\n const mouseEvent: MouseEvent = e as MouseEvent\n const touches: TouchList = touchEvent.changedTouches || touchEvent.touches\n const clientY: number = touches && touches[0] ? touches[0].clientY : mouseEvent.clientY\n const addIntervals: number = (clientY - bounds.top) / this.parsedIntervalHeight\n const addMinutes: number = Math.floor(addIntervals * this.parsedIntervalMinutes)\n const minutes: number = baseMinutes + addMinutes\n\n return updateMinutes(timestamp, minutes, this.times.now)\n },\n getSlotScope (timestamp: CalendarTimestamp): CalendarDayBodySlotScope {\n const scope = copyTimestamp(timestamp) as any\n scope.timeToY = this.timeToY\n scope.timeDelta = this.timeDelta\n scope.minutesToPixels = this.minutesToPixels\n scope.week = this.days\n return scope\n },\n scrollToTime (time: VTime): boolean {\n const y = this.timeToY(time)\n const pane = this.$refs.scrollArea as HTMLElement\n\n if (y === false || !pane) {\n return false\n }\n\n pane.scrollTop = y\n\n return true\n },\n minutesToPixels (minutes: number): number {\n return minutes / this.parsedIntervalMinutes * this.parsedIntervalHeight\n },\n timeToY (time: VTime, clamp = true): number | false {\n let y = this.timeDelta(time)\n\n if (y !== false) {\n y *= this.bodyHeight\n\n if (clamp) {\n if (y < 0) {\n y = 0\n }\n if (y > this.bodyHeight) {\n y = this.bodyHeight\n }\n }\n }\n\n return y\n },\n timeDelta (time: VTime): number | false {\n const minutes = parseTime(time)\n\n if (minutes === false) {\n return false\n }\n\n const min: number = this.firstMinute\n const gap: number = this.parsedIntervalCount * this.parsedIntervalMinutes\n\n return (minutes - min) / gap\n },\n },\n})\n","// Styles\nimport './VCalendarDaily.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Components\nimport VBtn from '../VBtn'\n\n// Mixins\nimport CalendarWithIntervals from './mixins/calendar-with-intervals'\n\n// Util\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { CalendarTimestamp } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarWithIntervals.extend({\n name: 'v-calendar-daily',\n\n directives: { Resize },\n\n data: () => ({\n scrollPush: 0,\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-calendar-daily': true,\n ...this.themeClasses,\n }\n },\n },\n\n mounted () {\n this.init()\n },\n\n methods: {\n init () {\n this.$nextTick(this.onResize)\n },\n onResize () {\n this.scrollPush = this.getScrollPush()\n },\n getScrollPush (): number {\n const area = this.$refs.scrollArea as HTMLElement\n const pane = this.$refs.pane as HTMLElement\n\n return area && pane ? (area.offsetWidth - pane.offsetWidth) : 0\n },\n genHead (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__head',\n style: {\n marginRight: this.scrollPush + 'px',\n },\n }, [\n this.genHeadIntervals(),\n ...this.genHeadDays(),\n ])\n },\n genHeadIntervals (): VNode {\n const width: string | undefined = convertToUnit(this.intervalWidth)\n\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__intervals-head',\n style: {\n width,\n },\n }, getSlot(this, 'interval-header'))\n },\n genHeadDays (): VNode[] {\n return this.days.map(this.genHeadDay)\n },\n genHeadDay (day: CalendarTimestamp, index: number): VNode {\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-daily_head-day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':day', _e => {\n return this.getSlotScope(day)\n }),\n }, [\n this.genHeadWeekday(day),\n this.genHeadDayLabel(day),\n ...this.genDayHeader(day, index),\n ])\n },\n genDayHeader (day: CalendarTimestamp, index: number): VNode[] {\n return getSlot(this, 'day-header', () => ({\n week: this.days, ...day, index,\n })) || []\n },\n genHeadWeekday (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-calendar-daily_head-weekday',\n }), this.weekdayFormatter(day, this.shortWeekdays))\n },\n genHeadDayLabel (day: CalendarTimestamp): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily_head-day-label',\n }, getSlot(this, 'day-label-header', day) || [this.genHeadDayButton(day)])\n },\n genHeadDayButton (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : 'transparent'\n\n return this.$createElement(VBtn, {\n props: {\n color,\n fab: true,\n depressed: true,\n },\n on: this.getMouseEventHandlers({\n 'click:date': { event: 'click', stop: true },\n 'contextmenu:date': { event: 'contextmenu', stop: true, prevent: true, result: false },\n }, _e => {\n return day\n }),\n }, this.dayFormatter(day, false))\n },\n genBody (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__body',\n }, [\n this.genScrollArea(),\n ])\n },\n genScrollArea (): VNode {\n return this.$createElement('div', {\n ref: 'scrollArea',\n staticClass: 'v-calendar-daily__scroll-area',\n }, [\n this.genPane(),\n ])\n },\n genPane (): VNode {\n return this.$createElement('div', {\n ref: 'pane',\n staticClass: 'v-calendar-daily__pane',\n style: {\n height: convertToUnit(this.bodyHeight),\n },\n }, [\n this.genDayContainer(),\n ])\n },\n genDayContainer (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__day-container',\n }, [\n this.genBodyIntervals(),\n ...this.genDays(),\n ])\n },\n genDays (): VNode[] {\n return this.days.map(this.genDay)\n },\n genDay (day: CalendarTimestamp, index: number): VNode {\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-daily__day',\n class: this.getRelativeClasses(day),\n }, [\n ...this.genDayIntervals(index, day),\n ...this.genDayBody(day),\n ])\n },\n genDayBody (day: CalendarTimestamp): VNode[] {\n return getSlot(this, 'day-body', () => this.getSlotScope(day)) || []\n },\n genDayIntervals (index: number, day: CalendarTimestamp): VNode[] {\n return this.intervals[index].map(i => this.genDayInterval(i, day))\n },\n genDayInterval (interval: CalendarTimestamp, day: CalendarTimestamp): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const styler = this.intervalStyle || this.intervalStyleDefault\n\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler(interval),\n },\n on: this.getDefaultMouseEventHandlers(':time', e => {\n return this.getSlotScope(this.getTimestampAtEvent(e, day))\n }),\n }\n\n const children = getSlot(this, 'interval', () => this.getSlotScope(interval))\n\n return this.$createElement('div', data, children)\n },\n genBodyIntervals (): VNode {\n const width: string | undefined = convertToUnit(this.intervalWidth)\n const data = {\n staticClass: 'v-calendar-daily__intervals-body',\n style: {\n width,\n },\n on: this.getDefaultMouseEventHandlers(':interval', e => {\n return this.getTimestampAtEvent(e, this.parsedStart)\n }),\n }\n\n return this.$createElement('div', data, this.genIntervalLabels())\n },\n genIntervalLabels (): VNode[] | null {\n if (!this.intervals.length) return null\n\n return this.intervals[0].map(this.genIntervalLabel)\n },\n genIntervalLabel (interval: CalendarTimestamp): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const short: boolean = this.shortIntervals\n const shower = this.showIntervalLabel || this.showIntervalLabelDefault\n const show = shower(interval)\n const label = show ? this.intervalFormatter(interval, short) : undefined\n\n return this.$createElement('div', {\n key: interval.time,\n staticClass: 'v-calendar-daily__interval',\n style: {\n height,\n },\n }, [\n this.$createElement('div', {\n staticClass: 'v-calendar-daily__interval-text',\n }, label),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n class: this.classes,\n on: {\n dragstart: (e: MouseEvent) => {\n e.preventDefault()\n },\n },\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.onResize,\n }],\n }, [\n !this.hideHeader ? this.genHead() : '',\n this.genBody(),\n ])\n },\n})\n","import { CalendarCategory, CalendarCategoryTextFunction } from 'types'\n\nexport function parsedCategoryText (\n category: CalendarCategory,\n categoryText: string | CalendarCategoryTextFunction\n): string {\n return typeof categoryText === 'string' && typeof category === 'object' && category\n ? category[categoryText]\n : typeof categoryText === 'function'\n ? categoryText(category)\n : category\n}\n\nexport function getParsedCategories (\n categories: CalendarCategory | CalendarCategory[],\n categoryText: string | CalendarCategoryTextFunction\n): CalendarCategory[] {\n if (typeof categories === 'string') return categories.split(/\\s*,\\s/)\n if (Array.isArray(categories)) {\n return categories.map((category: CalendarCategory) => {\n if (typeof category === 'string') return category\n\n const categoryName = typeof category.categoryName === 'string'\n ? category.categoryName\n : parsedCategoryText(category, categoryText)\n return { ...category, categoryName }\n })\n }\n return []\n}\n","// Styles\nimport './VCalendarCategory.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Mixins\nimport VCalendarDaily from './VCalendarDaily'\n\n// Util\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { CalendarCategory, CalendarTimestamp } from 'types'\nimport props from './util/props'\nimport { getParsedCategories } from './util/parser'\n\n/* @vue/component */\nexport default VCalendarDaily.extend({\n name: 'v-calendar-category',\n\n props: props.category,\n\n computed: {\n classes (): object {\n return {\n 'v-calendar-daily': true,\n 'v-calendar-category': true,\n ...this.themeClasses,\n }\n },\n parsedCategories (): CalendarCategory[] {\n return getParsedCategories(this.categories, this.categoryText)\n },\n },\n methods: {\n genDayHeader (day: CalendarTimestamp, index: number): VNode[] {\n const data = {\n staticClass: 'v-calendar-category__columns',\n }\n const scope = {\n week: this.days, ...day, index,\n }\n\n const children = this.parsedCategories.map(category => {\n return this.genDayHeaderCategory(day, this.getCategoryScope(scope, category))\n })\n\n return [this.$createElement('div', data, children)]\n },\n getCategoryScope (scope: any, category: CalendarCategory) {\n const cat = typeof category === 'object' && category &&\n category.categoryName === this.categoryForInvalid ? null : category\n return {\n ...scope,\n category: cat,\n }\n },\n genDayHeaderCategory (day: CalendarTimestamp, scope: any): VNode {\n const headerTitle = typeof scope.category === 'object' ? scope.category.categoryName : scope.category\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__column-header',\n on: this.getDefaultMouseEventHandlers(':day-category', e => {\n return this.getCategoryScope(this.getSlotScope(day), scope.category)\n }),\n }, [\n getSlot(this, 'category', scope) || this.genDayHeaderCategoryTitle(headerTitle),\n getSlot(this, 'day-header', scope),\n ])\n },\n genDayHeaderCategoryTitle (categoryName: string | null) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__category',\n }, categoryName === null ? this.categoryForInvalid : categoryName)\n },\n genDays (): VNode[] {\n const days: VNode[] = []\n this.days.forEach((d, j) => {\n const day = new Array(this.parsedCategories.length || 1)\n day.fill(d)\n days.push(...day.map((v, i) => this.genDay(v, j, i)))\n })\n return days\n },\n genDay (day: CalendarTimestamp, index: number, categoryIndex: number): VNode {\n const category = this.parsedCategories[categoryIndex]\n return this.$createElement('div', {\n key: day.date + '-' + categoryIndex,\n staticClass: 'v-calendar-daily__day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':time', e => {\n return this.getSlotScope(this.getTimestampAtEvent(e, day))\n }),\n }, [\n ...this.genDayIntervals(index, category),\n ...this.genDayBody(day, category),\n ])\n },\n genDayIntervals (index: number, category: CalendarCategory): VNode[] {\n return this.intervals[index].map(v => this.genDayInterval(v, category))\n },\n genDayInterval (interval: CalendarTimestamp, category: CalendarCategory): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const styler = this.intervalStyle || this.intervalStyleDefault\n\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler({ ...interval, category }),\n },\n }\n\n const children = getSlot(this, 'interval', () =>\n this.getCategoryScope(this.getSlotScope(interval), category)\n )\n\n return this.$createElement('div', data, children)\n },\n genDayBody (day: CalendarTimestamp, category: CalendarCategory): VNode[] {\n const data = {\n staticClass: 'v-calendar-category__columns',\n }\n\n const children = [this.genDayBodyCategory(day, category)]\n\n return [this.$createElement('div', data, children)]\n },\n genDayBodyCategory (day: CalendarTimestamp, category: CalendarCategory): VNode {\n const data = {\n staticClass: 'v-calendar-category__column',\n on: this.getDefaultMouseEventHandlers(':time-category', e => {\n return this.getCategoryScope(this.getSlotScope(this.getTimestampAtEvent(e, day)), category)\n }),\n }\n\n const children = getSlot(this, 'day-body', () => this.getCategoryScope(this.getSlotScope(day), category))\n\n return this.$createElement('div', data, children)\n },\n },\n})\n","// Styles\n// import '../../stylus/components/_calendar-daily.styl'\n\n// Types\nimport { VNode, Component } from 'vue'\n\n// Mixins\nimport CalendarWithEvents from './mixins/calendar-with-events'\n\n// Util\nimport props from './util/props'\nimport {\n DAYS_IN_MONTH_MAX,\n DAY_MIN,\n DAYS_IN_WEEK,\n parseTimestamp,\n validateTimestamp,\n relativeDays,\n nextDay,\n prevDay,\n copyTimestamp,\n updateFormatted,\n updateWeekday,\n updateRelative,\n getStartOfMonth,\n getEndOfMonth,\n VTime,\n VTimestampInput,\n timestampToDate,\n} from './util/timestamp'\n\n// Calendars\nimport VCalendarMonthly from './VCalendarMonthly'\nimport VCalendarDaily from './VCalendarDaily'\nimport VCalendarWeekly from './VCalendarWeekly'\nimport VCalendarCategory from './VCalendarCategory'\nimport { CalendarTimestamp, CalendarFormatter, CalendarCategory } from 'vuetify/types'\nimport { getParsedCategories } from './util/parser'\n\n// Types\ninterface VCalendarRenderProps {\n start: CalendarTimestamp\n end: CalendarTimestamp\n component: string | Component\n maxDays: number\n weekdays: number[]\n categories: CalendarCategory[]\n}\n\n/* @vue/component */\nexport default CalendarWithEvents.extend({\n name: 'v-calendar',\n\n props: {\n ...props.calendar,\n ...props.weeks,\n ...props.intervals,\n ...props.category,\n },\n\n data: () => ({\n lastStart: null as CalendarTimestamp | null,\n lastEnd: null as CalendarTimestamp | null,\n }),\n\n computed: {\n parsedValue (): CalendarTimestamp {\n return (validateTimestamp(this.value)\n ? parseTimestamp(this.value, true)\n : (this.parsedStart || this.times.today))\n },\n parsedCategoryDays (): number {\n return parseInt(this.categoryDays) || 1\n },\n renderProps (): VCalendarRenderProps {\n const around = this.parsedValue\n let component: any = null\n let maxDays = this.maxDays\n let weekdays = this.parsedWeekdays\n let categories = this.parsedCategories\n let start = around\n let end = around\n switch (this.type) {\n case 'month':\n component = VCalendarMonthly\n start = getStartOfMonth(around)\n end = getEndOfMonth(around)\n break\n case 'week':\n component = VCalendarDaily\n start = this.getStartOfWeek(around)\n end = this.getEndOfWeek(around)\n maxDays = 7\n break\n case 'day':\n component = VCalendarDaily\n maxDays = 1\n weekdays = [start.weekday]\n break\n case '4day':\n component = VCalendarDaily\n end = relativeDays(copyTimestamp(end), nextDay, 3)\n updateFormatted(end)\n maxDays = 4\n weekdays = [\n start.weekday,\n (start.weekday + 1) % 7,\n (start.weekday + 2) % 7,\n (start.weekday + 3) % 7,\n ]\n break\n case 'custom-weekly':\n component = VCalendarWeekly\n start = this.parsedStart || around\n end = this.parsedEnd\n break\n case 'custom-daily':\n component = VCalendarDaily\n start = this.parsedStart || around\n end = this.parsedEnd\n break\n case 'category':\n const days = this.parsedCategoryDays\n\n component = VCalendarCategory\n end = relativeDays(copyTimestamp(end), nextDay, days)\n updateFormatted(end)\n maxDays = days\n weekdays = []\n\n for (let i = 0; i < days; i++) {\n weekdays.push((start.weekday + i) % 7)\n }\n\n categories = this.getCategoryList(categories)\n break\n default:\n throw new Error(this.type + ' is not a valid Calendar type')\n }\n\n return { component, start, end, maxDays, weekdays, categories }\n },\n eventWeekdays (): number[] {\n return this.renderProps.weekdays\n },\n categoryMode (): boolean {\n return this.type === 'category'\n },\n title (): string {\n const { start, end } = this.renderProps\n const spanYears = start.year !== end.year\n const spanMonths = spanYears || start.month !== end.month\n\n if (spanYears) {\n return this.monthShortFormatter(start, true) + ' ' + start.year + ' - ' + this.monthShortFormatter(end, true) + ' ' + end.year\n }\n\n if (spanMonths) {\n return this.monthShortFormatter(start, true) + ' - ' + this.monthShortFormatter(end, true) + ' ' + end.year\n } else {\n return this.monthLongFormatter(start, false) + ' ' + start.year\n }\n },\n monthLongFormatter (): CalendarFormatter {\n return this.getFormatter({\n timeZone: 'UTC', month: 'long',\n })\n },\n monthShortFormatter (): CalendarFormatter {\n return this.getFormatter({\n timeZone: 'UTC', month: 'short',\n })\n },\n parsedCategories (): CalendarCategory[] {\n return getParsedCategories(this.categories, this.categoryText)\n },\n },\n\n watch: {\n renderProps: 'checkChange',\n },\n\n mounted () {\n this.updateEventVisibility()\n this.checkChange()\n },\n\n updated () {\n window.requestAnimationFrame(this.updateEventVisibility)\n },\n\n methods: {\n checkChange (): void {\n const { lastStart, lastEnd } = this\n const { start, end } = this.renderProps\n if (!lastStart || !lastEnd ||\n start.date !== lastStart.date ||\n end.date !== lastEnd.date) {\n this.lastStart = start\n this.lastEnd = end\n this.$emit('change', { start, end })\n }\n },\n move (amount = 1): void {\n const moved = copyTimestamp(this.parsedValue)\n const forward = amount > 0\n const mover = forward ? nextDay : prevDay\n const limit = forward ? DAYS_IN_MONTH_MAX : DAY_MIN\n let times = forward ? amount : -amount\n\n while (--times >= 0) {\n switch (this.type) {\n case 'month':\n moved.day = limit\n mover(moved)\n break\n case 'week':\n relativeDays(moved, mover, DAYS_IN_WEEK)\n break\n case 'day':\n relativeDays(moved, mover, 1)\n break\n case '4day':\n relativeDays(moved, mover, 4)\n break\n case 'category':\n relativeDays(moved, mover, this.parsedCategoryDays)\n break\n }\n }\n\n updateWeekday(moved)\n updateFormatted(moved)\n updateRelative(moved, this.times.now)\n\n if (this.value instanceof Date) {\n this.$emit('input', timestampToDate(moved))\n } else if (typeof this.value === 'number') {\n this.$emit('input', timestampToDate(moved).getTime())\n } else {\n this.$emit('input', moved.date)\n }\n\n this.$emit('moved', moved)\n },\n next (amount = 1): void {\n this.move(amount)\n },\n prev (amount = 1): void {\n this.move(-amount)\n },\n timeToY (time: VTime, clamp = true): number | false {\n const c = this.$children[0] as any\n\n if (c && c.timeToY) {\n return c.timeToY(time, clamp)\n } else {\n return false\n }\n },\n timeDelta (time: VTime): number | false {\n const c = this.$children[0] as any\n\n if (c && c.timeDelta) {\n return c.timeDelta(time)\n } else {\n return false\n }\n },\n minutesToPixels (minutes: number): number {\n const c = this.$children[0] as any\n\n if (c && c.minutesToPixels) {\n return c.minutesToPixels(minutes)\n } else {\n return -1\n }\n },\n scrollToTime (time: VTime): boolean {\n const c = this.$children[0] as any\n\n if (c && c.scrollToTime) {\n return c.scrollToTime(time)\n } else {\n return false\n }\n },\n parseTimestamp (input: VTimestampInput, required?: false): CalendarTimestamp | null {\n return parseTimestamp(input, required, this.times.now)\n },\n timestampToDate (timestamp: CalendarTimestamp): Date {\n return timestampToDate(timestamp)\n },\n getCategoryList (categories: CalendarCategory[]): CalendarCategory[] {\n if (!this.noEvents) {\n const categoryMap: any = categories.reduce((map: any, category, index) => {\n if (typeof category === 'object' && category.categoryName) map[category.categoryName] = { index, count: 0 }\n else if (typeof category === 'string') map[category] = { index, count: 0 }\n return map\n }, {})\n\n if (!this.categoryHideDynamic || !this.categoryShowAll) {\n let categoryLength = categories.length\n\n this.parsedEvents.forEach(ev => {\n let category = ev.category\n\n if (typeof category !== 'string') {\n category = this.categoryForInvalid\n }\n\n if (!category) {\n return\n }\n\n if (category in categoryMap) {\n categoryMap[category].count++\n } else if (!this.categoryHideDynamic) {\n categoryMap[category] = {\n index: categoryLength++,\n count: 1,\n }\n }\n })\n }\n\n if (!this.categoryShowAll) {\n for (const category in categoryMap) {\n if (categoryMap[category].count === 0) {\n delete categoryMap[category]\n }\n }\n }\n\n categories = categories.filter((category: CalendarCategory) => {\n if (typeof category === 'object' && category.categoryName) {\n return categoryMap.hasOwnProperty(category.categoryName)\n } else if (typeof category === 'string') {\n return categoryMap.hasOwnProperty(category)\n }\n return false\n })\n }\n return categories\n },\n },\n\n render (h): VNode {\n const { start, end, maxDays, component, weekdays, categories } = this.renderProps\n\n return h(component, {\n staticClass: 'v-calendar',\n class: {\n 'v-calendar-events': !this.noEvents,\n },\n props: {\n ...this.$props,\n start: start.date,\n end: end.date,\n maxDays,\n weekdays,\n categories,\n },\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.updateEventVisibility,\n }],\n on: {\n ...this.$listeners,\n 'click:date': (day: CalendarTimestamp) => {\n if (this.$listeners.input) {\n this.$emit('input', day.date)\n }\n if (this.$listeners['click:date']) {\n this.$emit('click:date', day)\n }\n },\n },\n scopedSlots: this.getScopedSlots(),\n })\n },\n})\n","// Mixins\nimport Themeable from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default Themeable.extend({\n name: 'v-theme-provider',\n\n props: { root: Boolean },\n\n computed: {\n isDark (): boolean {\n return this.root\n ? this.rootIsDark\n : Themeable.options.computed.isDark.call(this)\n },\n },\n\n render (): VNode {\n /* istanbul ignore next */\n return (\n this.$slots.default! &&\n this.$slots.default!.find(node => !node.isComment && node.text !== ' ')!\n )\n },\n})\n","import Vue from 'vue'\n\n/**\n * Delayable\n *\n * @mixin\n *\n * Changes the open or close delay time for elements\n */\nexport default Vue.extend().extend({\n name: 'delayable',\n\n props: {\n openDelay: {\n type: [Number, String],\n default: 0,\n },\n closeDelay: {\n type: [Number, String],\n default: 0,\n },\n },\n\n data: () => ({\n openTimeout: undefined as number | undefined,\n closeTimeout: undefined as number | undefined,\n }),\n\n methods: {\n /**\n * Clear any pending delay timers from executing\n */\n clearDelay (): void {\n clearTimeout(this.openTimeout)\n clearTimeout(this.closeTimeout)\n },\n /**\n * Runs callback after a specified delay\n */\n runDelay (type: 'open' | 'close', cb?: () => void): void {\n this.clearDelay()\n\n const delay = parseInt((this as any)[`${type}Delay`], 10)\n\n ;(this as any)[`${type}Timeout`] = setTimeout(cb || (() => {\n this.isActive = { open: true, close: false }[type]\n }), delay)\n },\n },\n})\n","// Mixins\nimport Delayable from '../delayable'\nimport Toggleable from '../toggleable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { getSlot, getSlotType } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\n\n// Types\nimport { VNode, PropType } from 'vue'\n\ntype Listeners = Dictionary<(e: MouseEvent & KeyboardEvent & FocusEvent) => void>\n\nconst baseMixins = mixins(\n Delayable,\n Toggleable\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'activatable',\n\n props: {\n activator: {\n default: null as unknown as PropType,\n validator: (val: string | object) => {\n return ['string', 'object'].includes(typeof val)\n },\n },\n disabled: Boolean,\n internalActivator: Boolean,\n openOnHover: Boolean,\n openOnFocus: Boolean,\n },\n\n data: () => ({\n // Do not use this directly, call getActivator() instead\n activatorElement: null as HTMLElement | null,\n activatorNode: [] as VNode[],\n events: ['click', 'mouseenter', 'mouseleave', 'focus'],\n listeners: {} as Listeners,\n }),\n\n watch: {\n activator: 'resetActivator',\n openOnFocus: 'resetActivator',\n openOnHover: 'resetActivator',\n },\n\n mounted () {\n const slotType = getSlotType(this, 'activator', true)\n\n if (slotType && ['v-slot', 'normal'].includes(slotType)) {\n consoleError(`The activator slot must be bound, try '