{"version":3,"sources":["webpack:///./src/views/Calendar.vue?2908","webpack:///./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack:///./src/components/SleepBar.vue?211b","webpack:///./src/components/SleepBar.vue?15d4","webpack:///src/components/SleepBar.vue","webpack:///./src/components/SleepBar.vue?e022","webpack:///../../../src/mixins/menuable/index.ts","webpack:///../../../src/components/VTooltip/VTooltip.ts","webpack:///./src/components/SleepBar.vue?53c4","webpack:///./src/views/Calendar.vue?1747","webpack:///src/views/Calendar.vue","webpack:///./src/views/Calendar.vue?1996","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/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/VCalendarCategory.ts","webpack:///../../../src/components/VCalendar/VCalendar.ts","webpack:///../../../src/components/VChip/VChip.ts","webpack:///./src/views/Calendar.vue?7fff"],"names":["$export","S","MAX_SAFE_INTEGER","render","_vm","this","_h","$createElement","_c","_self","staticClass","class","date","isWeekend","_v","_s","day","substring","_e","_l","percent","i","key","attrs","scopedSlots","_u","fn","ref","on","category","Math","round","colors","_g","parseInt","staticRenderFns","baseMixins","mixins","name","props","allowOverflow","light","dark","maxWidth","type","Number","default","minWidth","nudgeBottom","nudgeLeft","nudgeRight","nudgeTop","nudgeWidth","offsetOverflow","openOnClick","positionX","positionY","zIndex","data","absoluteX","absoluteY","activatedBy","activatorFixed","dimensions","activator","top","left","bottom","right","width","height","offsetTop","scrollHeight","offsetLeft","content","hasJustFocused","hasWindow","inputActivator","isContentActive","pageWidth","pageYOffset","stackClass","stackMinZIndex","computed","computedLeft","a","c","activatorLeft","attach","isNaN","computedTop","hasActivator","$slots","$scopedSlots","watch","disabled","val","isActive","beforeMount","window","methods","absolutePosition","activate","calcLeft","calcXOverflow","calcTop","calcYOverflow","xOverflow","documentHeight","toTop","contentHeight","totalHeight","isOverflowing","callActivate","callDeactivate","checkForPageYOffset","checkActivatorFixed","el","deactivate","genActivatorListeners","listeners","onClick","e","getInnerHeight","document","getOffsetLeft","getOffsetTop","getRoundedBoundedClientRect","rect","measure","style","sneakPeek","requestAnimationFrame","cb","startTransition","Promise","resolve","updateDimensions","closeDelay","fixed","openDelay","openOnHover","tag","transition","String","calculatedMinWidth","closeDependents","calculatedLeft","unknown","calculatedTop","activatorTop","classes","computedTransition","offsetY","offsetX","styles","opacity","activeZIndex","mounted","console","genTransition","genContent","setBackgroundColor","directives","value","h","showLazyContent","component","VSheet","VTooltip","$event","$refs","calendar","prev","month","next","$store","getters","isAuthenticated","now","today","viewDay","future","undefined","tracked","months","efficiency","$vuetify","breakpoint","mdAndUp","toFixed","model","callback","$$v","expression","startMenu","start","endMenu","end","nowMenu","minWeeks","intervals","intervalsDefault","locale","currentLocale","lang","getDefaultMouseEventHandlers","getMouseEventHandlers","event","prevent","result","eventOptions","events","prefix","handler","mouseEvent","getEvent","Array","createUTCDate","year","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","updateWeekday","daysInMonth","input","parts","required","parseDate","Error","timestamp","time","hour","minute","weekday","hasDay","hasTime","past","present","getDayIdentifier","getTimeIdentifier","b","getTime","minutes","getWeekday","getDate","_","k","m","C","Y","padded","str","padNumber","mover","days","max","min","M","D","maxDays","skips","filled","skip","j","stop","current","currentIdentifier","stopped","weekdaySkips","relativeDays","nextDay","mins","first","int","updateMinutes","emptyFormatter","_t","Intl","intlFormatter","getOptions","validator","validateTimestamp","times","parsedNow","created","setPresent","updateTimes","getNow","updateDay","target","updateTime","MILLIS_IN_DAY","minStart","visuals","columnCount","column","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","getOverlappingIndices","indices","other","returnFirstColumn","overlapping","n","getNormalizedRange","added","sibling","childMax","removeMinutes","identifier","totalMinutes","addHours","addMinutes","CalendarEventOverlapModes","stack","base","validate","validateWeekdays","hideHeader","Boolean","shortWeekdays","weekdayFormat","dayFormat","shortIntervals","intervalHeight","validateNumber","intervalWidth","intervalMinutes","firstInterval","firstTime","validateTime","intervalCount","intervalFormat","intervalStyle","showIntervalLabel","weeks","localeFirstDayOfYear","shortMonths","showMonthOnFirst","showWeek","monthFormat","categories","categoryHideDynamic","categoryShowAll","categoryForInvalid","categoryDays","x","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventName","eventOverlapThreshold","eventOverlapMode","mode","eventMore","eventMoreText","eventRipple","eventMarginBottom","ints","visited","wrapped","d","Resize","parsedWeekdays","getWeekdaySkips","weekdaySkipsReverse","reversed","reverse","parsedStart","parsedEnd","createDayList","dayFormatter","options","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","eventColorFunction","eventTimedFunction","eventCategoryFunction","eventTextColorFunction","eventNameFunction","eventModeFunction","eventWeekdays","categoryMode","parseEvent","formatTime","formatter","withTime","updateEventVisibility","eventsMap","more","parentBounds","last","hide","hidden","eventBounds","t","getEventsMap","elements","genDayEvent","weekdayIdentifier","scope","eventParsed","genEvent","refInFor","genTimedEvent","slot","text","background","overlapsNoon","singline","diffMinutes","timeSummary","eventSummary","delimiter","scopeInput","setTextColor","nativeEvent","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","parsedMinWeeks","minDays","todayWeek","monthFormatter","isOutside","genHead","genHeadDays","header","genHeadDay","color","genWeeks","weekDays","genWeek","getWeekNumber","weekNodes","genWeekNumber","weekNumber","determineDay","genDay","genDayLabel","genDayLabelButton","hasMonth","fab","depressed","small","genDayMonth","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","touches","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","parsedCategories","split","getCategoryScope","genDayHeaderCategory","genDayHeaderCategoryTitle","genDayBodyCategory","lastStart","lastEnd","parsedValue","parsedCategoryDays","renderProps","around","getCategoryList","title","spanYears","spanMonths","monthShortFormatter","monthLongFormatter","updated","checkChange","move","amount","moved","forward","limit","$children","parseTimestamp","timestampToDate","categoryMap","Object","categoryLength","ev","active","activeClass","chipGroup","close","closeIcon","draggable","filterIcon","link","outlined","pill","textColor","proxyClass","groupClasses","hasClose","isClickable","breakingProps","original","replacement","genFilter","VIcon","genClose","size","tabindex","VAlert","VBtn","VCalendar","VChip","VCol","VContainer","VRow"],"mappings":"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","file":"js/calendar~31ecd969.1b2045fa.js","sourcesContent":["export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Calendar.vue?vue&type=style&index=0&id=03da5e00&scoped=true&lang=css&\"","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SleepBar.vue?vue&type=style&index=0&id=73a20d0f&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-flex fill-height max-height\"},[(_vm.showDate)?_c('small',{staticClass:\"date\",class:{'weekend': _vm.date.isWeekend}},[_vm._v(_vm._s(_vm.date.day)+\" \"),_c('br'),_vm._v(_vm._s(_vm.date.date.substring(8,10))+\"-\"+_vm._s(_vm.date.date.substring(5,7)))]):_vm._e(),_vm._l((_vm.tracked),function(percent,i){return _c('v-tooltip',{key:i,attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-sheet',{attrs:{\"title\":_vm.category[i] + \" \" + (Math.round(percent)) + \"%\",\"color\":_vm.colors[i],\"width\":(percent + \"%\"),\"height\":\"100%\",\"tile\":\"\"}},[(percent > 0)?_c('div',_vm._g({staticClass:\"track d-none d-sm-none d-md-flex pl-1 fill-height\"},on),[_vm._v(\"\\n \"+_vm._s((percent == 100) ? 'geen gegevens' : (Math.round(percent)) + \"%\" + \" \" + (parseInt(percent /100 * 1440)) + \" min.\")+\"\\n \")]):_vm._e()])]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.date.date.substring(5,10) + ' : ' + _vm.category[i] + \" \" + (parseInt(percent /100 * 1440)) + \" minuten\"))])])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n {{date.day}} {{date.date.substring(8,10)}}-{{date.date.substring(5,7)}}\r\n \r\n \r\n \r\n 0\" v-on=\"on\">\r\n {{(percent == 100) ? 'geen gegevens' : `${Math.round(percent)}%` + ` ${parseInt(percent /100 * 1440)} min.`}}\r\n \r\n \r\n \r\n {{date.date.substring(5,10) + ' : ' + category[i] + ` ${parseInt(percent /100 * 1440)} minuten`}}\r\n \r\n \r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SleepBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SleepBar.vue?vue&type=script&lang=js&\"","// Mixins\nimport Positionable from '../positionable'\nimport Stackable from '../stackable'\nimport Activatable from '../activatable'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nconst baseMixins = mixins(\n Stackable,\n Positionable,\n Activatable\n)\n\ninterface options extends ExtractVue {\n attach: boolean | string | Element\n offsetY: boolean\n offsetX: boolean\n $refs: {\n content: HTMLElement\n activator: HTMLElement\n }\n}\n\n/* @vue/component */\nexport default baseMixins.extend().extend({\n name: 'menuable',\n\n props: {\n allowOverflow: Boolean,\n light: Boolean,\n dark: Boolean,\n maxWidth: {\n type: [Number, String],\n default: 'auto',\n },\n minWidth: [Number, String],\n nudgeBottom: {\n type: [Number, String],\n default: 0,\n },\n nudgeLeft: {\n type: [Number, String],\n default: 0,\n },\n nudgeRight: {\n type: [Number, String],\n default: 0,\n },\n nudgeTop: {\n type: [Number, String],\n default: 0,\n },\n nudgeWidth: {\n type: [Number, String],\n default: 0,\n },\n offsetOverflow: Boolean,\n openOnClick: Boolean,\n positionX: {\n type: Number,\n default: null,\n },\n positionY: {\n type: Number,\n default: null,\n },\n zIndex: {\n type: [Number, String],\n default: null,\n },\n },\n\n data: () => ({\n absoluteX: 0,\n absoluteY: 0,\n activatedBy: null as EventTarget | null,\n activatorFixed: false,\n dimensions: {\n activator: {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0,\n offsetTop: 0,\n scrollHeight: 0,\n offsetLeft: 0,\n },\n content: {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0,\n offsetTop: 0,\n scrollHeight: 0,\n },\n },\n hasJustFocused: false,\n hasWindow: false,\n inputActivator: false,\n isContentActive: false,\n pageWidth: 0,\n pageYOffset: 0,\n stackClass: 'v-menu__content--active',\n stackMinZIndex: 6,\n }),\n\n computed: {\n computedLeft () {\n const a = this.dimensions.activator\n const c = this.dimensions.content\n const activatorLeft = (this.attach !== false ? a.offsetLeft : a.left) || 0\n const minWidth = Math.max(a.width, c.width)\n let left = 0\n left += this.left ? activatorLeft - (minWidth - a.width) : activatorLeft\n if (this.offsetX) {\n const maxWidth = isNaN(Number(this.maxWidth))\n ? a.width\n : Math.min(a.width, Number(this.maxWidth))\n\n left += this.left ? -maxWidth : a.width\n }\n if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n return left\n },\n computedTop () {\n const a = this.dimensions.activator\n const c = this.dimensions.content\n let top = 0\n\n if (this.top) top += a.height - c.height\n if (this.attach !== false) top += a.offsetTop\n else top += a.top + this.pageYOffset\n if (this.offsetY) top += this.top ? -a.height : a.height\n if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n\n return top\n },\n hasActivator (): boolean {\n return !!this.$slots.activator || !!this.$scopedSlots.activator || !!this.activator || !!this.inputActivator\n },\n },\n\n watch: {\n disabled (val) {\n val && this.callDeactivate()\n },\n isActive (val) {\n if (this.disabled) return\n\n val ? this.callActivate() : this.callDeactivate()\n },\n positionX: 'updateDimensions',\n positionY: 'updateDimensions',\n },\n\n beforeMount () {\n this.hasWindow = typeof window !== 'undefined'\n },\n\n methods: {\n absolutePosition () {\n return {\n offsetTop: 0,\n offsetLeft: 0,\n scrollHeight: 0,\n top: this.positionY || this.absoluteY,\n bottom: this.positionY || this.absoluteY,\n left: this.positionX || this.absoluteX,\n right: this.positionX || this.absoluteX,\n height: 0,\n width: 0,\n }\n },\n activate () {},\n calcLeft (menuWidth: number) {\n return convertToUnit(this.attach !== false\n ? this.computedLeft\n : this.calcXOverflow(this.computedLeft, menuWidth))\n },\n calcTop () {\n return convertToUnit(this.attach !== false\n ? this.computedTop\n : this.calcYOverflow(this.computedTop))\n },\n calcXOverflow (left: number, menuWidth: number) {\n const xOverflow = left + menuWidth - this.pageWidth + 12\n\n if ((!this.left || this.right) && xOverflow > 0) {\n left = Math.max(left - xOverflow, 0)\n } else {\n left = Math.max(left, 12)\n }\n\n return left + this.getOffsetLeft()\n },\n calcYOverflow (top: number) {\n const documentHeight = this.getInnerHeight()\n const toTop = this.pageYOffset + documentHeight\n const activator = this.dimensions.activator\n const contentHeight = this.dimensions.content.height\n const totalHeight = top + contentHeight\n const isOverflowing = toTop < totalHeight\n\n // If overflowing bottom and offset\n // TODO: set 'bottom' position instead of 'top'\n if (isOverflowing &&\n this.offsetOverflow &&\n // If we don't have enough room to offset\n // the overflow, don't offset\n activator.top > contentHeight\n ) {\n top = this.pageYOffset + (activator.top - contentHeight)\n // If overflowing bottom\n } else if (isOverflowing && !this.allowOverflow) {\n top = toTop - contentHeight - 12\n // If overflowing top\n } else if (top < this.pageYOffset && !this.allowOverflow) {\n top = this.pageYOffset + 12\n }\n\n return top < 12 ? 12 : top\n },\n callActivate () {\n if (!this.hasWindow) return\n\n this.activate()\n },\n callDeactivate () {\n this.isContentActive = false\n\n this.deactivate()\n },\n checkForPageYOffset () {\n if (this.hasWindow) {\n this.pageYOffset = this.activatorFixed ? 0 : this.getOffsetTop()\n }\n },\n checkActivatorFixed () {\n if (this.attach !== false) return\n let el = this.getActivator()\n while (el) {\n if (window.getComputedStyle(el).position === 'fixed') {\n this.activatorFixed = true\n return\n }\n el = el.offsetParent as HTMLElement\n }\n this.activatorFixed = false\n },\n deactivate () {},\n genActivatorListeners () {\n const listeners = Activatable.options.methods.genActivatorListeners.call(this)\n\n const onClick = listeners.click\n\n listeners.click = (e: MouseEvent & KeyboardEvent & FocusEvent) => {\n if (this.openOnClick) {\n onClick && onClick(e)\n }\n\n this.absoluteX = e.clientX\n this.absoluteY = e.clientY\n }\n\n return listeners\n },\n getInnerHeight () {\n if (!this.hasWindow) return 0\n\n return window.innerHeight ||\n document.documentElement.clientHeight\n },\n getOffsetLeft () {\n if (!this.hasWindow) return 0\n\n return window.pageXOffset ||\n document.documentElement.scrollLeft\n },\n getOffsetTop () {\n if (!this.hasWindow) return 0\n\n return window.pageYOffset ||\n document.documentElement.scrollTop\n },\n getRoundedBoundedClientRect (el: Element) {\n const rect = el.getBoundingClientRect()\n return {\n top: Math.round(rect.top),\n left: Math.round(rect.left),\n bottom: Math.round(rect.bottom),\n right: Math.round(rect.right),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n }\n },\n measure (el: HTMLElement) {\n if (!el || !this.hasWindow) return null\n\n const rect = this.getRoundedBoundedClientRect(el)\n\n // Account for activator margin\n if (this.attach !== false) {\n const style = window.getComputedStyle(el)\n\n rect.left = parseInt(style.marginLeft!)\n rect.top = parseInt(style.marginTop!)\n }\n\n return rect\n },\n sneakPeek (cb: () => void) {\n requestAnimationFrame(() => {\n const el = this.$refs.content\n\n if (!el || el.style.display !== 'none') {\n cb()\n return\n }\n\n el.style.display = 'inline-block'\n cb()\n el.style.display = 'none'\n })\n },\n startTransition () {\n return new Promise(resolve => requestAnimationFrame(() => {\n this.isContentActive = this.hasJustFocused = this.isActive\n resolve()\n }))\n },\n updateDimensions () {\n this.hasWindow = typeof window !== 'undefined'\n this.checkActivatorFixed()\n this.checkForPageYOffset()\n this.pageWidth = document.documentElement.clientWidth\n\n const dimensions: any = {\n activator: { ...this.dimensions.activator },\n content: { ...this.dimensions.content },\n }\n\n // Activator should already be shown\n if (!this.hasActivator || this.absolute) {\n dimensions.activator = this.absolutePosition()\n } else {\n const activator = this.getActivator()\n if (!activator) return\n\n dimensions.activator = this.measure(activator)\n dimensions.activator.offsetLeft = activator.offsetLeft\n if (this.attach !== false) {\n // account for css padding causing things to not line up\n // this is mostly for v-autocomplete, hopefully it won't break anything\n dimensions.activator.offsetTop = activator.offsetTop\n } else {\n dimensions.activator.offsetTop = 0\n }\n }\n\n // Display and hide to get dimensions\n this.sneakPeek(() => {\n this.$refs.content && (dimensions.content = this.measure(this.$refs.content))\n\n this.dimensions = dimensions\n })\n },\n },\n})\n","import './VTooltip.sass'\n\n// Mixins\nimport Activatable from '../../mixins/activatable'\nimport Colorable from '../../mixins/colorable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Menuable from '../../mixins/menuable'\nimport Toggleable from '../../mixins/toggleable'\n\n// Helpers\nimport { convertToUnit, keyCodes, getSlotType } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Colorable, Delayable, Dependent, Detachable, Menuable, Toggleable).extend({\n name: 'v-tooltip',\n\n props: {\n closeDelay: {\n type: [Number, String],\n default: 0,\n },\n disabled: Boolean,\n fixed: {\n type: Boolean,\n default: true,\n },\n openDelay: {\n type: [Number, String],\n default: 0,\n },\n openOnHover: {\n type: Boolean,\n default: true,\n },\n tag: {\n type: String,\n default: 'span',\n },\n transition: String,\n },\n\n data: () => ({\n calculatedMinWidth: 0,\n closeDependents: false,\n }),\n\n computed: {\n calculatedLeft (): string {\n const { activator, content } = this.dimensions\n const unknown = !this.bottom && !this.left && !this.top && !this.right\n const activatorLeft = this.attach !== false ? activator.offsetLeft : activator.left\n let left = 0\n\n if (this.top || this.bottom || unknown) {\n left = (\n activatorLeft +\n (activator.width / 2) -\n (content.width / 2)\n )\n } else if (this.left || this.right) {\n left = (\n activatorLeft +\n (this.right ? activator.width : -content.width) +\n (this.right ? 10 : -10)\n )\n }\n\n if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n return `${this.calcXOverflow(left, this.dimensions.content.width)}px`\n },\n calculatedTop (): string {\n const { activator, content } = this.dimensions\n const activatorTop = this.attach !== false ? activator.offsetTop : activator.top\n let top = 0\n\n if (this.top || this.bottom) {\n top = (\n activatorTop +\n (this.bottom ? activator.height : -content.height) +\n (this.bottom ? 10 : -10)\n )\n } else if (this.left || this.right) {\n top = (\n activatorTop +\n (activator.height / 2) -\n (content.height / 2)\n )\n }\n\n if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n\n return `${this.calcYOverflow(top + this.pageYOffset)}px`\n },\n classes (): object {\n return {\n 'v-tooltip--top': this.top,\n 'v-tooltip--right': this.right,\n 'v-tooltip--bottom': this.bottom,\n 'v-tooltip--left': this.left,\n 'v-tooltip--attached':\n this.attach === '' ||\n this.attach === true ||\n this.attach === 'attach',\n }\n },\n computedTransition (): string {\n if (this.transition) return this.transition\n\n return this.isActive ? 'scale-transition' : 'fade-transition'\n },\n offsetY (): boolean {\n return this.top || this.bottom\n },\n offsetX (): boolean {\n return this.left || this.right\n },\n styles (): object {\n return {\n left: this.calculatedLeft,\n maxWidth: convertToUnit(this.maxWidth),\n minWidth: convertToUnit(this.minWidth),\n opacity: this.isActive ? 0.9 : 0,\n top: this.calculatedTop,\n zIndex: this.zIndex || this.activeZIndex,\n }\n },\n },\n\n beforeMount () {\n this.$nextTick(() => {\n this.value && this.callActivate()\n })\n },\n\n mounted () {\n if (getSlotType(this, 'activator', true) === 'v-slot') {\n consoleError(`v-tooltip's activator slot must be bound, try ''`, this)\n }\n },\n\n methods: {\n activate () {\n // Update coordinates and dimensions of menu\n // and its activator\n this.updateDimensions()\n // Start the transition\n requestAnimationFrame(this.startTransition)\n },\n deactivate () {\n this.runDelay('close')\n },\n genActivatorListeners () {\n const listeners = Activatable.options.methods.genActivatorListeners.call(this)\n\n listeners.focus = (e: Event) => {\n this.getActivator(e)\n this.runDelay('open')\n }\n listeners.blur = (e: Event) => {\n this.getActivator(e)\n this.runDelay('close')\n }\n listeners.keydown = (e: KeyboardEvent) => {\n if (e.keyCode === keyCodes.esc) {\n this.getActivator(e)\n this.runDelay('close')\n }\n }\n\n return listeners\n },\n genTransition () {\n const content = this.genContent()\n\n if (!this.computedTransition) return content\n\n return this.$createElement('transition', {\n props: {\n name: this.computedTransition,\n },\n }, [content])\n },\n genContent () {\n return this.$createElement(\n 'div',\n this.setBackgroundColor(this.color, {\n staticClass: 'v-tooltip__content',\n class: {\n [this.contentClass]: true,\n menuable__content__active: this.isActive,\n 'v-tooltip__content--fixed': this.activatorFixed,\n },\n style: this.styles,\n attrs: this.getScopeIdAttrs(),\n directives: [{\n name: 'show',\n value: this.isContentActive,\n }],\n ref: 'content',\n }),\n this.getContentSlot()\n )\n },\n },\n\n render (h): VNode {\n return h(this.tag, {\n staticClass: 'v-tooltip',\n class: this.classes,\n }, [\n this.showLazyContent(() => [this.genTransition()]),\n this.genActivator(),\n ])\n },\n})\n","import { render, staticRenderFns } from \"./SleepBar.vue?vue&type=template&id=73a20d0f&scoped=true&\"\nimport script from \"./SleepBar.vue?vue&type=script&lang=js&\"\nexport * from \"./SleepBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SleepBar.vue?vue&type=style&index=0&id=73a20d0f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73a20d0f\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSheet } from 'vuetify/lib/components/VSheet';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VSheet,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',[_c('h1',{staticClass:\"mb-5\"},[_vm._v(\"Uw slaapkalender\")]),_c('v-row',{staticClass:\"d-flex justify-space-between mr-1 ml-1\"},[_c('v-btn',{attrs:{\"fab\":\"\",\"outlined\":\"\",\"small\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){return _vm.$refs.calendar.prev()}}},[_c('v-icon',{attrs:{\"dark\":\"\"}},[_vm._v(\"mdi-chevron-left\")])],1),_c('h2',[_vm._v(_vm._s(_vm.month))]),_c('v-btn',{attrs:{\"fab\":\"\",\"outlined\":\"\",\"small\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){return _vm.$refs.calendar.next()}}},[_c('v-icon',{attrs:{\"dark\":\"\"}},[_vm._v(\"mdi-chevron-right\")])],1)],1),_c('v-row',[_c('v-col',[_c('v-alert',{attrs:{\"type\":\"info\",\"dismissible\":\"\"}},[_vm._v(\"\\r\\n Klik op een datum om het slaapdagboek van die dag te gaan.\\r\\n \"),(!_vm.$store.getters.isAuthenticated)?_c('div',[_c('br'),_c('strong',[_vm._v(\"U bent niet ingelogd!\")]),_vm._v(\"Â \"),_c('router-link',{attrs:{\"tag\":\"a\",\"to\":{ name: 'login'}}},[_vm._v(\"Login\")]),_vm._v(\" om uw data gratis in de cloud te bewaren.\\r\\n \")],1):_vm._e()])],1)],1),_c('v-row',{},[_c('v-col',[_c('v-sheet',{attrs:{\"height\":\"500\"}},[_c('v-calendar',{ref:\"calendar\",attrs:{\"now\":_vm.now,\"value\":_vm.today,\"weekdays\":[1,2,3,4,5,6,0],\"short-intervals\":false,\"short-months\":true,\"short-weekdays\":true,\"type\":\"month\",\"color\":\"primary\"},on:{\"click:date\":_vm.viewDay,\"click:day\":_vm.viewDay},scopedSlots:_vm._u([{key:\"day-label\",fn:function(ref){\nvar date = ref.date;\nvar day = ref.day;\nvar month = ref.month;\nvar future = ref.future;\nreturn [_c('v-btn',{attrs:{\"fab\":\"\",\"rounded\":\"\",\"light\":\"\",\"small\":\"\",\"depressed\":\"\",\"text\":_vm.tracked[date] == undefined,\"disabled\":future,\"color\":\"info\"}},[_vm._v(\"\\r\\n \"+_vm._s(day)+\" \"),(day == 1)?_c('span',[_vm._v(_vm._s((_vm.months[month - 1]).substring(0,3))+\".\")]):_vm._e()])]}},{key:\"day\",fn:function(ref){\nvar date = ref.date;\nreturn [_c('v-row',{staticClass:\"fill-height text-center\"},[(_vm.tracked[date])?[_c('v-col',{staticClass:\"text-center\"},[(_vm.tracked[date].savedToCloud)?_c('v-icon',{staticClass:\"cloud d-none d-sm-flex\",attrs:{\"color\":\"primary\"}},[_vm._v(\"mdi-cloud-outline\")]):_vm._e(),_c('v-chip',{staticClass:\"pa-1\",attrs:{\"label\":\"\",\"color\":\"primary\",\"outlined\":\"\",\"small\":\"\"}},[(_vm.tracked[date].efficiency > 85 && _vm.$vuetify.breakpoint.mdAndUp)?_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-arrow-top-right\")]):(_vm.$vuetify.breakpoint.mdAndUp)?_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-arrow-bottom-right\")]):_vm._e(),_c('small',[_vm._v(\"\\r\\n \"+_vm._s(_vm.tracked[date].efficiency.toFixed(0))+\"%\\r\\n \")])],1)],1)]:_vm._e()],2)]}}]),model:{value:(_vm.today),callback:function ($$v) {_vm.today=$$v},expression:\"today\"}})],1)],1)],1),_c('v-row',[_c('v-col',[_c('div',{staticClass:\"d-flex mb-3 align-center\"},[_c('v-chip',{staticClass:\"pa-1\",attrs:{\"label\":\"\",\"color\":\"primary\",\"outlined\":\"\",\"small\":\"\"}},[(_vm.$vuetify.breakpoint.mdAndUp)?_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-arrow-top-right\")]):_vm._e(),_c('small',[_vm._v(\"\\r\\n 95%\\r\\n \")])],1),_c('div',{staticClass:\"pl-3\"},[_vm._v(\"Slaapefficientie %\")])],1)])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n Uw slaapkalender\r\n \r\n \r\n mdi-chevron-left\r\n \r\n {{month}}\r\n \r\n mdi-chevron-right\r\n \r\n \r\n \r\n \r\n \r\n Klik op een datum om het slaapdagboek van die dag te gaan.\r\n \r\n \r\n U bent niet ingelogd! Login om uw data gratis in de cloud te bewaren.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{day}} {{(months[month - 1]).substring(0,3)}}.\r\n \r\n \r\n \r\n \r\n \r\n \r\n mdi-cloud-outline\r\n \r\n 85 && $vuetify.breakpoint.mdAndUp\">mdi-arrow-top-right\r\n mdi-arrow-bottom-right\r\n \r\n {{tracked[date].efficiency.toFixed(0)}}%\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n mdi-arrow-top-right\r\n \r\n 95%\r\n \r\n \r\n Slaapefficientie %\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Calendar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Calendar.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 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 seconds 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 seconds 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 { 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 } 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],\n default: '',\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 OFFSET_TIME,\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 &&\n dayIdentifier <= event.endIdentifier &&\n dayIdentifier * OFFSET_TIME !== event.endTimestampIdentifier\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} 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} 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: props.events,\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 eventColorFunction (): CalendarEventColorFunction {\n return typeof this.eventColor === 'function'\n ? this.eventColor\n : () => (this.eventColor as string)\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 false\n },\n },\n\n methods: {\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 let hide = false\n let hidden = 0\n\n for (let i = 0; i <= last; i++) {\n if (!hide) {\n const eventBounds = events[i].getBoundingClientRect()\n hide = i === last\n ? (eventBounds.bottom > parentBounds.bottom)\n : (eventBounds.bottom + eventHeight > parentBounds.bottom)\n }\n if (hide) {\n events[i].style.display = 'none'\n hidden++\n }\n }\n\n if (hide) {\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) {\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: string | undefined | null): boolean {\n return !this.categoryMode ||\n 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\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 on: this.getDefaultMouseEventHandlers(':time', e => {\n return this.getSlotScope(this.getTimestampAtEvent(e, day))\n }),\n }, [\n ...this.genDayIntervals(index),\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): VNode[] {\n return this.intervals[index].map(this.genDayInterval)\n },\n genDayInterval (interval: 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 }\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","// Styles\nimport './VCalendarCategory.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Mixins\nimport VCalendarDaily from './VCalendarDaily'\n\n// Util\nimport { getSlot } from '../../util/helpers'\nimport { CalendarTimestamp } from 'types'\nimport props from './util/props'\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 (): string[] {\n return typeof this.categories === 'string' && this.categories\n ? this.categories.split(/\\s*,\\s*/)\n : Array.isArray(this.categories)\n ? this.categories as string[]\n : []\n },\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 => this.genDayHeaderCategory(day, this.getCategoryScope(scope, category)))\n\n return [this.$createElement('div', data, children)]\n },\n getCategoryScope (scope: any, category: string) {\n return {\n ...scope,\n category: category === this.categoryForInvalid ? null : category,\n }\n },\n genDayHeaderCategory (day: CalendarTimestamp, scope: any): VNode {\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(scope.category),\n getSlot(this, 'day-header', scope),\n ])\n },\n genDayHeaderCategoryTitle (category: string) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__category',\n }, category === null ? this.categoryForInvalid : category)\n },\n genDayBody (day: CalendarTimestamp): VNode[] {\n const data = {\n staticClass: 'v-calendar-category__columns',\n }\n\n const children = this.parsedCategories.map(category => this.genDayBodyCategory(day, category))\n\n return [this.$createElement('div', data, children)]\n },\n genDayBodyCategory (day: CalendarTimestamp, category: string): 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 } from 'vuetify/types'\n\n// Types\ninterface VCalendarRenderProps {\n start: CalendarTimestamp\n end: CalendarTimestamp\n component: string | Component\n maxDays: number\n weekdays: number[]\n categories: string[]\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, 4)\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 (): string[] {\n return typeof this.categories === 'string' && this.categories\n ? this.categories.split(/\\s*,\\s*/)\n : Array.isArray(this.categories)\n ? this.categories as string[]\n : []\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: string[]): string[] {\n if (!this.noEvents) {\n const categoryMap = categories.reduce((map, category, index) => {\n map[category] = { index, count: 0 }\n\n return map\n }, Object.create(null))\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 = Object.keys(categoryMap)\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","// Styles\nimport './VChip.sass'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Components\nimport { VExpandXTransition } from '../transitions'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport { breaking } from '../../util/console'\n\n// Types\nimport { PropValidator, PropType } from 'vue/types/options'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Sizeable,\n Routable,\n Themeable,\n GroupableFactory('chipGroup'),\n ToggleableFactory('inputValue')\n).extend({\n name: 'v-chip',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.chipGroup) return ''\n\n return this.chipGroup.activeClass\n },\n } as any as PropValidator,\n close: Boolean,\n closeIcon: {\n type: String,\n default: '$delete',\n },\n disabled: Boolean,\n draggable: Boolean,\n filter: Boolean,\n filterIcon: {\n type: String,\n default: '$complete',\n },\n label: Boolean,\n link: Boolean,\n outlined: Boolean,\n pill: Boolean,\n tag: {\n type: String,\n default: 'span',\n },\n textColor: String,\n value: null as any as PropType,\n },\n\n data: () => ({\n proxyClass: 'v-chip--active',\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-chip': true,\n ...Routable.options.computed.classes.call(this),\n 'v-chip--clickable': this.isClickable,\n 'v-chip--disabled': this.disabled,\n 'v-chip--draggable': this.draggable,\n 'v-chip--label': this.label,\n 'v-chip--link': this.isLink,\n 'v-chip--no-color': !this.color,\n 'v-chip--outlined': this.outlined,\n 'v-chip--pill': this.pill,\n 'v-chip--removable': this.hasClose,\n ...this.themeClasses,\n ...this.sizeableClasses,\n ...this.groupClasses,\n }\n },\n hasClose (): boolean {\n return Boolean(this.close)\n },\n isClickable (): boolean {\n return Boolean(\n Routable.options.computed.isClickable.call(this) ||\n this.chipGroup\n )\n },\n },\n\n created () {\n const breakingProps = [\n ['outline', 'outlined'],\n ['selected', 'input-value'],\n ['value', 'active'],\n ['@input', '@active.sync'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n\n this.chipGroup && this.toggle()\n },\n genFilter (): VNode {\n const children = []\n\n if (this.isActive) {\n children.push(\n this.$createElement(VIcon, {\n staticClass: 'v-chip__filter',\n props: { left: true },\n }, this.filterIcon)\n )\n }\n\n return this.$createElement(VExpandXTransition, children)\n },\n genClose (): VNode {\n return this.$createElement(VIcon, {\n staticClass: 'v-chip__close',\n props: {\n right: true,\n size: 18,\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n e.preventDefault()\n\n this.$emit('click:close')\n this.$emit('update:active', false)\n },\n },\n }, this.closeIcon)\n },\n genContent (): VNode {\n return this.$createElement('span', {\n staticClass: 'v-chip__content',\n }, [\n this.filter && this.genFilter(),\n this.$slots.default,\n this.hasClose && this.genClose(),\n ])\n },\n },\n\n render (h): VNode {\n const children = [this.genContent()]\n let { tag, data } = this.generateRouteLink()\n\n data.attrs = {\n ...data.attrs,\n draggable: this.draggable ? 'true' : undefined,\n tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs!.tabindex,\n }\n data.directives!.push({\n name: 'show',\n value: this.active,\n })\n data = this.setBackgroundColor(this.color, data)\n\n const color = this.textColor || (this.outlined && this.color)\n\n return h(tag, this.setTextColor(color, data), children)\n },\n})\n","import { render, staticRenderFns } from \"./Calendar.vue?vue&type=template&id=03da5e00&scoped=true&\"\nimport script from \"./Calendar.vue?vue&type=script&lang=js&\"\nexport * from \"./Calendar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Calendar.vue?vue&type=style&index=0&id=03da5e00&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"03da5e00\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCalendar } from 'vuetify/lib/components/VCalendar';\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSheet } from 'vuetify/lib/components/VSheet';\ninstallComponents(component, {VAlert,VBtn,VCalendar,VChip,VCol,VContainer,VIcon,VRow,VSheet})\n"],"sourceRoot":""}