{"version":3,"sources":["webpack:///./src/mixins/basePageMixin.js","webpack:///./src/mixins/common.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/mixins/mouse.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/mixins/times.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/modes/common.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/modes/stack.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/modes/column.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/modes/index.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/util/props.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/mixins/calendar-base.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/util/events.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/mixins/calendar-with-events.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/VCalendarWeekly.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/VCalendarMonthly.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/mixins/calendar-with-intervals.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/VCalendarDaily.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/util/parser.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/VCalendarCategory.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/VCalendar.js"],"names":["basePageMixin","data","title","routeParams","routeQuery","loadingData","rememberState","rememberScroll","showingDialogs","pageLoaded","bottomNavBarButtons","dbReady","created","this","_","cloneDeep","$route","params","query","extra","decodeBase64","computed","routeFromBrowserHistory","meta","fromBrowserHistory","userPermissions","get","permissions","methods","initDB","$offline","db","$loading","showManual","connect","initSchema","init","hide","closeDB","close","copyRouteParamsToPageStore","pageStoreName","routeParam","storeHasProperty","setStoreProperty","initStore","property","$store","value","set","getStoreProperty","dispatchStore","actionName","payload","dispatch","hasViewPerm","perm","hasInsertPerm","hasEditPerm","hasDeletePerm","hasPerm","beforeRouteLeaveBase","to","from","next","beforeRouteLeaveCommon","initNavigationBottom","addNavigationBottomButton","name","icon","visible","badge","badgeColor","index","push","order","length","that","showingDialog","dialog","$set","extend","suffix","getEvent","getMouseEventHandlers","event","prevent","result","events","on","eventOptions","$listeners","prefix","passive","once","capture","key","handler","e","mouseEvent","undefined","button","buttons","preventDefault","stop","stopPropagation","_e$currentTarget","_e$target","classSeparator","eventTargetClasses","currentTarget","className","split","currentTargets","document","elementsFromPoint","changedTouches","clientX","clientY","find","t","some","c","includes","target","isSameNode","dispatchEvent","TouchEvent","type","targetTouches","touches","$emit","Array","isArray","props","now","String","validator","times","today","watch","parsedNow","updateTimes","setPresent","present","past","future","getNow","updateDay","updateTime","Date","date","year","month","day","weekday","time","hour","minute","MILLIS_IN_DAY","getVisuals","minStart","visuals","map","columnCount","column","left","width","sort","a","b","Math","max","startTimestampIdentifier","endTimestampIdentifier","hasOverlap","s0","e0","s1","e1","exclude","setColumnCount","groups","forEach","group","groupVisual","getRange","getDayRange","startIdentifier","endIdentifier","getNormalizedRange","dayStart","min","getOpenGroup","start","end","timed","i","intersected","k","groupStart","groupEnd","getOverlapGroupHandler","firstWeekday","reset","dayEvents","visual","targetGroup","FULL_WIDTH","DEFAULT_OFFSET","WIDTH_MULTIPLIER","stack","overlapThreshold","getGroups","nodes","child","getNode","getNextIndex","parent","getParent","sibling","addTime","children","getOverlappingRange","grand","grandNext","calculateBounds","node","columns","getMaxChildIndex","spaceLeft","spaceWidth","offset","columnWidthMultiplier","getColumnWidthMultiplier","columnOffset","columnWidth","hasFullWidth","maxColumn","minColumn","reduce","getOverlappingIndices","indices","other","indexMin","indexMax","returnFirstColumn","overlapping","first","n","filter","added","childMax","identifier","minutes","removeMinutes","totalMinutes","addHours","floor","addMinutes","CalendarEventOverlapModes","base","Number","validate","default","weekdays","validateWeekdays","hideHeader","Boolean","shortWeekdays","weekdayFormat","Function","dayFormat","intervals","maxDays","shortIntervals","intervalHeight","validateNumber","intervalWidth","intervalMinutes","firstInterval","firstTime","Object","intervalCount","intervalFormat","intervalStyle","showIntervalLabel","weeks","localeFirstDayOfYear","minWeeks","shortMonths","showMonthOnFirst","showWeek","monthFormat","calendar","category","categories","categoryText","categoryHideDynamic","categoryShowAll","categoryForInvalid","categoryDays","x","isFinite","parseInt","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventName","eventOverlapThreshold","eventOverlapMode","mode","eventMore","eventMoreText","eventRipple","eventMarginBottom","input","ints","visited","wrapped","d","mixins","directives","Resize","parsedWeekdays","reversed","weekdaySkips","slice","reverse","parsedStart","parsedEnd","options","timeZone","currentLocale","_tms","_short","longOptions","shortOptions","short","timestamp","outside","locale","parseEvent","startProperty","endProperty","startInput","endInput","startParsed","endParsed","endOffset","hasTime","allDay","isEventOn","dayIdentifier","isEventHiddenOn","isEventStart","isEventOverlapping","WIDTH_FULL","WIDTH_START","MINUTES_IN_DAY","ripple","timedEvent","color","eventTimedFunction","categoryMode","eventCategoryFunction","withTime","ampm","formatter","getFormatter","noEvents","eventsMap","getEventsMap","more","parentBounds","getBoundingClientRect","last","eventsSorted","bottom","hidden","style","display","innerHTML","$vuetify","lang","elements","$refs","el","getAttribute","parentElement","week","weekdayIdentifier","scope","eventParsed","genEvent","staticClass","class","height","attrs","ref","refInFor","timeDelta","top","timeToY","scopeInput","_this$eventRipple","slot","$scopedSlots","text","eventTextColorFunction","background","eventColorFunction","overlapsNoon","singline","parsedEventOverlapThreshold","formatTime","timeSummary","eventSummary","eventNameFunction","eventSummaryClass","delimiter","$createElement","setTextColor","setBackgroundColor","getDefaultMouseEventHandlers","nativeEvent","genName","domProps","_this$eventRipple2","days","parsedEvents","categoryName","eventWeekdays","isEventForCategory","eventModeFunction","isNode","getSlotChildren","getter","mapper","genPlaceholder","mapped","slots","slotDay","slotDayHeader","slotDayBody","getEventsForDay","genDayEvent","genMore","concat","getEventsForDayAll","getEventsForDayTimed","genTimedEvent","themeClasses","minDays","parsedMinWeeks","getStartOfWeek","getEndOfWeek","MAX_SAFE_INTEGER","genHeadDays","header","todayWeek","genHeadDay","unshift","isOutside","getRelativeClasses","weekdayFormatter","weekDays","genWeek","getWeekNumber","weekNumber","weekNodes","genDay","genWeekNumber","determineDay","genDayLabel","genDayLabelButton","hasMonth","VBtn","fab","depressed","small","monthFormatter","dayFormatter","h","classes","dragstart","genHead","genWeeks","parseFloat","parsedFirstTime","parsedFirstInterval","parsedIntervalMinutes","parsedIntervalCount","parsedIntervalHeight","firstMinute","count","shortHourOptions","tms","interval","isFirst","_interval","bounds","baseMinutes","touchEvent","addIntervals","minutesToPixels","y","pane","scrollArea","scrollTop","clamp","bodyHeight","gap","scrollPush","$nextTick","onResize","getScrollPush","area","offsetWidth","marginRight","genHeadIntervals","getSlotScope","genHeadWeekday","genHeadDayLabel","genDayHeader","genHeadDayButton","genScrollArea","genPane","genDayContainer","genBodyIntervals","genDays","getTimestampAtEvent","genDayIntervals","genDayBody","genDayInterval","styler","intervalStyleDefault","genIntervalLabels","genIntervalLabel","shower","showIntervalLabelDefault","show","label","intervalFormatter","modifiers","quiet","genBody","parsedCategoryText","getParsedCategories","parsedCategories","genDayHeaderCategory","getCategoryScope","cat","headerTitle","genDayHeaderCategoryTitle","j","fill","v","categoryIndex","genDayBodyCategory","lastStart","lastEnd","around","parsedValue","component","VCalendarMonthly","parsedCategoryDays","getCategoryList","Error","renderProps","spanYears","spanMonths","monthShortFormatter","monthLongFormatter","updateEventVisibility","checkChange","window","requestAnimationFrame","amount","moved","forward","mover","limit","getTime","move","$children","scrollToTime","required","categoryMap","categoryLength","ev","hasOwnProperty","$props","scopedSlots","getScopedSlots"],"mappings":"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","file":"js/chunk-3d23a927.e48555f4.js","sourcesContent":["import { decodeBase64 } from '@/utils/router'\r\nimport { get } from 'vuex-pathify'\r\nimport _ from '@/utils/lodash'\r\nimport { beforeRouteLeaveCommon } from './common'\r\nimport { hasViewPerm, hasInsertPerm, hasEditPerm, hasDeletePerm, hasPerm, permissions } from '@/utils/permissions'\r\nimport { initSchema, connect } from '@/offline/database'\r\n\r\nexport const basePageMixin = {\r\n data () {\r\n return {\r\n title: '',\r\n routeParams: null,\r\n routeQuery: null,\r\n loadingData: false,\r\n rememberState: false,\r\n rememberScroll: false,\r\n showingDialogs: {},\r\n pageLoaded: false,\r\n bottomNavBarButtons: [],\r\n dbReady: false,\r\n }\r\n },\r\n created () {\r\n this.routeParams = _.cloneDeep(this.$route.params)\r\n this.routeQuery = _.cloneDeep(this.$route.query)\r\n if (this.routeQuery.extra) {\r\n this.routeQuery.extra = decodeBase64(this.routeQuery.extra)\r\n }\r\n },\r\n computed: {\r\n routeFromBrowserHistory () {\r\n // no mostrar alerts en el \"back\" del navegador\r\n return this.$route.meta.fromBrowserHistory\r\n },\r\n userPermissions: get('usuario/permisos'),\r\n permissions () {\r\n return permissions\r\n },\r\n },\r\n methods: {\r\n async initDB () {\r\n if (!this.$offline.db) {\r\n this.$loading.showManual('Inicializando base de datos...')\r\n try {\r\n await this.$offline.init(await connect(initSchema()))\r\n } finally {\r\n this.dbReady = true\r\n this.$loading.hide()\r\n }\r\n } else {\r\n this.dbReady = true\r\n }\r\n },\r\n async closeDB () {\r\n if (this.$offline.db) {\r\n await this.$offline.db.close()\r\n this.$offline.db = null\r\n this.dbReady = false\r\n }\r\n },\r\n async copyRouteParamsToPageStore () {\r\n if (this.pageStoreName) {\r\n for (const routeParam in this.routeParams) {\r\n if (this.storeHasProperty(routeParam)) {\r\n await this.setStoreProperty(routeParam, this.routeParams[routeParam])\r\n }\r\n }\r\n }\r\n },\r\n async initStore () {\r\n // routeParams -> ¿existe en el store de la página? -> copiar valor\r\n // usado para: nextRoute, readonly\r\n await this.copyRouteParamsToPageStore()\r\n },\r\n storeHasProperty (property) {\r\n return property in this.$store.get(`${this.pageStoreName}`)\r\n },\r\n async setStoreProperty (property, value) {\r\n await this.$store.set(`${this.pageStoreName}/${property}`, value)\r\n },\r\n async getStoreProperty (property) {\r\n return await this.$store.get(`${this.pageStoreName}/${property}`)\r\n },\r\n async dispatchStore (actionName, payload) {\r\n return await this.$store.dispatch(`${this.pageStoreName}/${actionName}`, payload)\r\n },\r\n hasViewPerm (perm) {\r\n return hasViewPerm(this.userPermissions, perm)\r\n },\r\n hasInsertPerm (perm) {\r\n return hasInsertPerm(this.userPermissions, perm)\r\n },\r\n hasEditPerm (perm) {\r\n return hasEditPerm(this.userPermissions, perm)\r\n },\r\n hasDeletePerm (perm) {\r\n return hasDeletePerm(this.userPermissions, perm)\r\n },\r\n hasPerm (perm) {\r\n return hasPerm(this.userPermissions, perm)\r\n },\r\n beforeRouteLeaveBase (to, from, next) {\r\n if (!beforeRouteLeaveCommon(this, to, from, next)) {\r\n next()\r\n }\r\n },\r\n initNavigationBottom () {\r\n this.bottomNavBarButtons = []\r\n },\r\n addNavigationBottomButton (title, name, icon, visible = true, badge = null, badgeColor = 'green') {\r\n const index = this.bottomNavBarButtons.push({\r\n title,\r\n name,\r\n icon,\r\n order: this.bottomNavBarButtons.length + 1,\r\n visible,\r\n badge,\r\n badgeColor,\r\n })\r\n return this.bottomNavBarButtons[index - 1]\r\n },\r\n }\r\n}\r\n","export const beforeRouteLeaveCommon = (that, to, from, next) => {\r\n if (that.loadingData) {\r\n next(false)\r\n return true\r\n } else {\r\n let showingDialog = false\r\n for (const dialog in that.showingDialogs) {\r\n if (that.showingDialogs[dialog]) {\r\n that.$set(that.showingDialogs, dialog, false)\r\n showingDialog = true\r\n next(false)\r\n break\r\n }\r\n }\r\n return showingDialog\r\n }\r\n}\r\n","import Vue from 'vue';\nexport default Vue.extend({\n name: 'mouse',\n methods: {\n getDefaultMouseEventHandlers(suffix, getEvent) {\n return this.getMouseEventHandlers({\n ['click' + suffix]: {\n event: 'click'\n },\n ['contextmenu' + suffix]: {\n event: 'contextmenu',\n prevent: true,\n result: false\n },\n ['mousedown' + suffix]: {\n event: 'mousedown'\n },\n ['mousemove' + suffix]: {\n event: 'mousemove'\n },\n ['mouseup' + suffix]: {\n event: 'mouseup'\n },\n ['mouseenter' + suffix]: {\n event: 'mouseenter'\n },\n ['mouseleave' + suffix]: {\n event: 'mouseleave'\n },\n ['touchstart' + suffix]: {\n event: 'touchstart'\n },\n ['touchmove' + suffix]: {\n event: 'touchmove'\n },\n ['touchend' + suffix]: {\n event: 'touchend'\n }\n }, getEvent);\n },\n\n getMouseEventHandlers(events, getEvent) {\n const on = {};\n\n for (const event in events) {\n const eventOptions = events[event];\n if (!this.$listeners[event]) continue; // 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 = e => {\n const mouseEvent = e;\n\n if (eventOptions.button === undefined || mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button) {\n if (eventOptions.prevent) {\n e.preventDefault();\n }\n\n if (eventOptions.stop) {\n e.stopPropagation();\n } // Due to TouchEvent target always returns the element that is first placed\n // Even if touch point has since moved outside the interactive area of that element\n // Ref: https://developer.mozilla.org/en-US/docs/Web/API/Touch/target\n // This block of code aims to make sure touchEvent is always dispatched from the element that is being pointed at\n\n\n if (e && 'touches' in e) {\n var _e$currentTarget, _e$target;\n\n const classSeparator = ' ';\n const eventTargetClasses = (_e$currentTarget = e.currentTarget) == null ? void 0 : _e$currentTarget.className.split(classSeparator);\n const currentTargets = document.elementsFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY); // Get \"the same kind\" current hovering target by checking\n // If element has the same class of initial touch start element (which has touch event listener registered)\n\n const currentTarget = currentTargets.find(t => t.className.split(classSeparator).some(c => eventTargetClasses.includes(c)));\n\n if (currentTarget && !((_e$target = e.target) != null && _e$target.isSameNode(currentTarget))) {\n currentTarget.dispatchEvent(new TouchEvent(e.type, {\n changedTouches: e.changedTouches,\n targetTouches: e.targetTouches,\n touches: e.touches\n }));\n return;\n }\n }\n\n this.$emit(event, getEvent(e), 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].push(handler);\n } else {\n on[key] = [on[key], handler];\n }\n } else {\n on[key] = handler;\n }\n }\n\n return on;\n }\n\n }\n});\n//# sourceMappingURL=mouse.js.map","import Vue from 'vue';\nimport { validateTimestamp, parseTimestamp, parseDate } from '../util/timestamp';\nexport default Vue.extend({\n name: 'times',\n props: {\n now: {\n type: String,\n validator: validateTimestamp\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 computed: {\n parsedNow() {\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() {\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\n updateTimes() {\n const now = 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\n getNow() {\n return parseDate(new Date());\n },\n\n updateDay(now, target) {\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\n updateTime(now, target) {\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});\n//# sourceMappingURL=times.js.map","import { getTimestampIdentifier } from '../util/timestamp';\nconst MILLIS_IN_DAY = 86400000;\nexport function getVisuals(events, minStart = 0) {\n const visuals = events.map(event => ({\n event,\n columnCount: 0,\n column: 0,\n left: 0,\n width: 100\n }));\n visuals.sort((a, b) => {\n return Math.max(minStart, a.event.startTimestampIdentifier) - Math.max(minStart, b.event.startTimestampIdentifier) || b.event.endTimestampIdentifier - a.event.endTimestampIdentifier;\n });\n return visuals;\n}\nexport function hasOverlap(s0, e0, s1, e1, exclude = true) {\n return exclude ? !(s0 >= e1 || e0 <= s1) : !(s0 > e1 || e0 < s1);\n}\nexport function setColumnCount(groups) {\n groups.forEach(group => {\n group.visuals.forEach(groupVisual => {\n groupVisual.columnCount = groups.length;\n });\n });\n}\nexport function getRange(event) {\n return [event.startTimestampIdentifier, event.endTimestampIdentifier];\n}\nexport function getDayRange(event) {\n return [event.startIdentifier, event.endIdentifier];\n}\nexport function getNormalizedRange(event, dayStart) {\n return [Math.max(dayStart, event.startTimestampIdentifier), Math.min(dayStart + MILLIS_IN_DAY, event.endTimestampIdentifier)];\n}\nexport function getOpenGroup(groups, start, end, timed) {\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}\nexport function getOverlapGroupHandler(firstWeekday) {\n const handler = {\n groups: [],\n min: -1,\n max: -1,\n reset: () => {\n handler.groups = [];\n handler.min = handler.max = -1;\n },\n getVisuals: (day, dayEvents, timed, 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 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 handler.groups.push({\n start,\n end,\n visuals: []\n });\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 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 setColumnCount(handler.groups);\n\n if (timed) {\n handler.reset();\n }\n\n return visuals;\n }\n };\n return handler;\n}\n//# sourceMappingURL=common.js.map","import { getOverlapGroupHandler, getVisuals, hasOverlap, getNormalizedRange } from './common';\nimport { getTimestampIdentifier } from '../util/timestamp';\nconst FULL_WIDTH = 100;\nconst DEFAULT_OFFSET = 5;\nconst WIDTH_MULTIPLIER = 1.7;\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 = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday); // eslint-disable-next-line max-statements\n\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 = [];\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\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 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\n if (grandNext && child.sibling && 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 return visuals;\n };\n};\n\nfunction calculateBounds(nodes, overlapThreshold) {\n for (const node of nodes) {\n const {\n visual,\n parent\n } = 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 ? spaceLeft + columnOffset : spaceLeft + offset;\n }\n\n visual.width = hasFullWidth(node, nodes, overlapThreshold) ? FULL_WIDTH - visual.left : Math.min(FULL_WIDTH - visual.left, columnWidth * WIDTH_MULTIPLIER);\n }\n}\n\nfunction getColumnWidthMultiplier(node, nodes) {\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 return minColumn - node.index;\n}\n\nfunction getOverlappingIndices(node, nodes) {\n const indices = [];\n\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\n return indices;\n}\n\nfunction getNextIndex(node, nodes) {\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\n return false;\n}\n\nfunction getOverlappingRange(node, nodes, indexMin, indexMax, returnFirstColumn = false) {\n const overlapping = [];\n\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\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\n return overlapping;\n}\n\nfunction getParent(node, nodes) {\n let parent = null;\n\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\n return parent;\n}\n\nfunction hasFullWidth(node, nodes, overlapThreshold) {\n for (const other of nodes) {\n if (other !== node && other.index > node.index && 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, dayStart) {\n const groups = [];\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({\n start,\n end,\n visuals: [visual]\n });\n }\n }\n\n return groups;\n}\n\nfunction getNode(visual, dayStart) {\n const [start, end] = getNormalizedRange(visual.event, dayStart);\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) {\n let max = node.index;\n\n for (const child of node.children) {\n const childMax = getMaxChildIndex(child);\n\n if (childMax > max) {\n max = childMax;\n }\n }\n\n return max;\n}\n\nfunction addTime(identifier, minutes) {\n const removeMinutes = identifier % 100;\n const totalMinutes = removeMinutes + minutes;\n const addHours = Math.floor(totalMinutes / 60);\n const addMinutes = totalMinutes % 60;\n return identifier - removeMinutes + addHours * 100 + addMinutes;\n}\n//# sourceMappingURL=stack.js.map","import { getOverlapGroupHandler } from './common';\nconst FULL_WIDTH = 100;\nexport const column = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday);\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//# sourceMappingURL=column.js.map","import { stack } from './stack';\nimport { column } from './column';\nexport const CalendarEventOverlapModes = {\n stack,\n column\n};\n//# sourceMappingURL=index.js.map","import { validateTimestamp, parseDate, DAYS_IN_WEEK, validateTime } from './timestamp';\nimport { CalendarEventOverlapModes } from '../modes';\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],\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,\n default: null\n },\n dayFormat: {\n type: Function,\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,\n default: null\n },\n intervalStyle: {\n type: Function,\n default: null\n },\n showIntervalLabel: {\n type: Function,\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,\n default: null\n }\n },\n calendar: {\n type: {\n type: String,\n default: 'month'\n },\n value: {\n type: [String, Number, Date],\n validate: validateTimestamp\n }\n },\n category: {\n categories: {\n type: [Array, String],\n default: ''\n },\n categoryText: {\n type: [String, Function]\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 => isFinite(parseInt(x)) && parseInt(x) > 0\n }\n },\n events: {\n events: {\n type: Array,\n default: () => []\n },\n eventStart: {\n type: String,\n default: 'start'\n },\n eventEnd: {\n type: String,\n default: 'end'\n },\n eventTimed: {\n type: [String, Function],\n default: 'timed'\n },\n eventCategory: {\n type: [String, Function],\n default: 'category'\n },\n eventHeight: {\n type: Number,\n default: 20\n },\n eventColor: {\n type: [String, Function],\n default: 'primary'\n },\n eventTextColor: {\n type: [String, Function],\n default: 'white'\n },\n eventName: {\n type: [String, Function],\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 => mode in CalendarEventOverlapModes || typeof mode === 'function'\n },\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};\nexport function validateNumber(input) {\n return isFinite(parseInt(input));\n}\nexport function validateWeekdays(input) {\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 = {};\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\n if (d < 0) {\n if (wrapped) {\n return false;\n }\n\n wrapped = true;\n } else if (d === 0) {\n return false;\n }\n }\n\n if (visited[x]) {\n return false;\n }\n\n visited[x] = true;\n }\n\n return true;\n }\n\n return false;\n}\n//# sourceMappingURL=props.js.map","// 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'; // Directives\n\nimport Resize from '../../../directives/resize'; // Util\n\nimport props from '../util/props';\nimport { parseTimestamp, getWeekdaySkips, createDayList, createNativeLocaleFormatter, getStartOfWeek, getEndOfWeek, getTimestampIdentifier } from '../util/timestamp';\nexport default mixins(Colorable, Localable, Mouse, Themeable, Times\n/* @vue/component */\n).extend({\n name: 'calendar-base',\n directives: {\n Resize\n },\n props: props.base,\n computed: {\n parsedWeekdays() {\n return Array.isArray(this.weekdays) ? this.weekdays : (this.weekdays || '').split(',').map(x => parseInt(x, 10));\n },\n\n weekdaySkips() {\n return getWeekdaySkips(this.parsedWeekdays);\n },\n\n weekdaySkipsReverse() {\n const reversed = this.weekdaySkips.slice();\n reversed.reverse();\n return reversed;\n },\n\n parsedStart() {\n return parseTimestamp(this.start, true);\n },\n\n parsedEnd() {\n const start = this.parsedStart;\n const end = this.end ? parseTimestamp(this.end) || start : start;\n return getTimestampIdentifier(end) < getTimestampIdentifier(start) ? start : end;\n },\n\n days() {\n return createDayList(this.parsedStart, this.parsedEnd, this.times.today, this.weekdaySkips);\n },\n\n dayFormatter() {\n if (this.dayFormat) {\n return this.dayFormat;\n }\n\n const options = {\n timeZone: 'UTC',\n day: 'numeric'\n };\n return createNativeLocaleFormatter(this.currentLocale, (_tms, _short) => options);\n },\n\n weekdayFormatter() {\n if (this.weekdayFormat) {\n return this.weekdayFormat;\n }\n\n const longOptions = {\n timeZone: 'UTC',\n weekday: 'long'\n };\n const shortOptions = {\n timeZone: 'UTC',\n weekday: 'short'\n };\n return createNativeLocaleFormatter(this.currentLocale, (_tms, short) => short ? shortOptions : longOptions);\n }\n\n },\n methods: {\n getRelativeClasses(timestamp, outside = false) {\n return {\n 'v-present': timestamp.present,\n 'v-past': timestamp.past,\n 'v-future': timestamp.future,\n 'v-outside': outside\n };\n },\n\n getStartOfWeek(timestamp) {\n return getStartOfWeek(timestamp, this.parsedWeekdays, this.times.today);\n },\n\n getEndOfWeek(timestamp) {\n return getEndOfWeek(timestamp, this.parsedWeekdays, this.times.today);\n },\n\n getFormatter(options) {\n return createNativeLocaleFormatter(this.locale, (_tms, _short) => options);\n }\n\n }\n});\n//# sourceMappingURL=calendar-base.js.map","import { parseTimestamp, getDayIdentifier, getTimestampIdentifier, isTimedless, updateHasTime } from './timestamp';\nexport function parseEvent(input, index, startProperty, endProperty, timed = false, category = false) {\n const startInput = input[startProperty];\n const endInput = input[endProperty];\n const startParsed = parseTimestamp(startInput, true);\n const endParsed = endInput ? parseTimestamp(endInput, true) : startParsed;\n const start = isTimedless(startInput) ? updateHasTime(startParsed, timed) : startParsed;\n const end = isTimedless(endInput) ? updateHasTime(endParsed, timed) : endParsed;\n const startIdentifier = getDayIdentifier(start);\n const startTimestampIdentifier = getTimestampIdentifier(start);\n const endIdentifier = getDayIdentifier(end);\n const endOffset = start.hasTime ? 0 : 2359;\n const endTimestampIdentifier = getTimestampIdentifier(end) + endOffset;\n const allDay = !start.hasTime;\n return {\n input,\n start,\n startIdentifier,\n startTimestampIdentifier,\n end,\n endIdentifier,\n endTimestampIdentifier,\n allDay,\n index,\n category\n };\n}\nexport function isEventOn(event, dayIdentifier) {\n return dayIdentifier >= event.startIdentifier && dayIdentifier <= event.endIdentifier;\n}\nexport function isEventHiddenOn(event, day) {\n return event.end.time === '00:00' && event.end.date === day.date && event.start.date !== day.date;\n}\nexport function isEventStart(event, day, dayIdentifier, firstWeekday) {\n return dayIdentifier === event.startIdentifier || firstWeekday === day.weekday && isEventOn(event, dayIdentifier);\n}\nexport function isEventOverlapping(event, startIdentifier, endIdentifier) {\n return startIdentifier <= event.endIdentifier && endIdentifier >= event.startIdentifier;\n}\n//# sourceMappingURL=events.js.map","// Styles\nimport \"../../../../src/components/VCalendar/mixins/calendar-with-events.sass\"; // Directives\n\nimport ripple from '../../../directives/ripple'; // Mixins\n\nimport CalendarBase from './calendar-base'; // Helpers\n\nimport { escapeHTML } from '../../../util/helpers'; // Util\n\nimport props from '../util/props';\nimport { CalendarEventOverlapModes } from '../modes';\nimport { getDayIdentifier, diffMinutes } from '../util/timestamp';\nimport { parseEvent, isEventStart, isEventOn, isEventOverlapping, isEventHiddenOn } from '../util/events';\nconst WIDTH_FULL = 100;\nconst WIDTH_START = 95;\nconst MINUTES_IN_DAY = 1440;\n/* @vue/component */\n\nexport default CalendarBase.extend({\n name: 'calendar-with-events',\n directives: {\n ripple\n },\n props: { ...props.events,\n ...props.calendar,\n ...props.category\n },\n computed: {\n noEvents() {\n return this.events.length === 0;\n },\n\n parsedEvents() {\n return this.events.map(this.parseEvent);\n },\n\n parsedEventOverlapThreshold() {\n return parseInt(this.eventOverlapThreshold);\n },\n\n eventTimedFunction() {\n return typeof this.eventTimed === 'function' ? this.eventTimed : event => !!event[this.eventTimed];\n },\n\n eventCategoryFunction() {\n return typeof this.eventCategory === 'function' ? this.eventCategory : event => event[this.eventCategory];\n },\n\n eventTextColorFunction() {\n return typeof this.eventTextColor === 'function' ? this.eventTextColor : () => this.eventTextColor;\n },\n\n eventNameFunction() {\n return typeof this.eventName === 'function' ? this.eventName : (event, timedEvent) => escapeHTML(event.input[this.eventName] || '');\n },\n\n eventModeFunction() {\n return typeof this.eventOverlapMode === 'function' ? this.eventOverlapMode : CalendarEventOverlapModes[this.eventOverlapMode];\n },\n\n eventWeekdays() {\n return this.parsedWeekdays;\n },\n\n categoryMode() {\n return this.type === 'category';\n }\n\n },\n methods: {\n eventColorFunction(e) {\n return typeof this.eventColor === 'function' ? this.eventColor(e) : e.color || this.eventColor;\n },\n\n parseEvent(input, index = 0) {\n return parseEvent(input, index, this.eventStart, this.eventEnd, this.eventTimedFunction(input), this.categoryMode ? this.eventCategoryFunction(input) : false);\n },\n\n formatTime(withTime, ampm) {\n const formatter = this.getFormatter({\n timeZone: 'UTC',\n hour: 'numeric',\n minute: withTime.minute > 0 ? 'numeric' : undefined\n });\n return formatter(withTime, true);\n },\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 {\n parent,\n events,\n more\n } = eventsMap[date];\n\n if (!more) {\n break;\n }\n\n const parentBounds = parent.getBoundingClientRect();\n const last = events.length - 1;\n const eventsSorted = events.map(event => ({\n event,\n bottom: event.getBoundingClientRect().bottom\n })).sort((a, b) => a.bottom - b.bottom);\n let hidden = 0;\n\n for (let i = 0; i <= last; i++) {\n const bottom = eventsSorted[i].bottom;\n const hide = i === last ? bottom > parentBounds.bottom : bottom + eventHeight > parentBounds.bottom;\n\n if (hide) {\n eventsSorted[i].event.style.display = 'none';\n hidden++;\n }\n }\n\n if (hidden) {\n more.style.display = '';\n more.innerHTML = this.$vuetify.lang.t(this.eventMoreText, hidden);\n } else {\n more.style.display = 'none';\n }\n }\n },\n\n getEventsMap() {\n const eventsMap = {};\n const elements = this.$refs.events;\n\n if (!elements || !elements.forEach) {\n return eventsMap;\n }\n\n elements.forEach(el => {\n const date = el.getAttribute('data-date');\n\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\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 return eventsMap;\n },\n\n genDayEvent({\n event\n }, day) {\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\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\n const scope = {\n eventParsed: event,\n day,\n start,\n end,\n 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\n genTimedEvent({\n event,\n left,\n width\n }, day) {\n if (day.timeDelta(event.end) < 0 || day.timeDelta(event.start) >= 1 || isEventHiddenOn(event, day)) {\n return false;\n }\n\n const dayIdentifier = getDayIdentifier(day);\n const start = event.startIdentifier >= dayIdentifier;\n const end = event.endIdentifier > dayIdentifier;\n const top = start ? day.timeToY(event.start) : 0;\n const bottom = end ? day.timeToY(MINUTES_IN_DAY) : day.timeToY(event.end);\n const height = Math.max(this.eventHeight, bottom - top);\n const scope = {\n eventParsed: event,\n day,\n start,\n end,\n 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\n genEvent(event, scopeInput, timedEvent, data) {\n var _this$eventRipple;\n\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\n const timeSummary = () => formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true);\n\n const eventSummary = () => {\n const name = this.eventNameFunction(event, timedEvent);\n\n if (event.start.hasTime) {\n const eventSummaryClass = 'v-event-summary';\n\n if (timedEvent) {\n const time = timeSummary();\n const delimiter = singline ? ', ' : '
';\n return `${name}${delimiter}${time}`;\n } else {\n const time = formatTime(event.start, true);\n return `${time} ${name}`;\n }\n }\n\n return name;\n };\n\n const scope = { ...scopeInput,\n event: event.input,\n outside: scopeInput.day.outside,\n singline,\n overlapsNoon,\n formatTime,\n timeSummary,\n eventSummary\n };\n return this.$createElement('div', this.setTextColor(text, this.setBackgroundColor(background, {\n on: this.getDefaultMouseEventHandlers(':event', nativeEvent => ({ ...scope,\n nativeEvent\n })),\n directives: [{\n name: 'ripple',\n value: (_this$eventRipple = this.eventRipple) != null ? _this$eventRipple : true\n }],\n ...data\n })), slot ? slot(scope) : [this.genName(eventSummary)]);\n },\n\n genName(eventSummary) {\n return this.$createElement('div', {\n staticClass: 'pl-1',\n domProps: {\n innerHTML: eventSummary()\n }\n });\n },\n\n genPlaceholder(day) {\n const height = this.eventHeight + this.eventMarginBottom;\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\n genMore(day) {\n var _this$eventRipple2;\n\n const eventHeight = this.eventHeight;\n const eventMarginBottom = this.eventMarginBottom;\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$eventRipple2 = this.eventRipple) != null ? _this$eventRipple2 : true\n }],\n on: this.getDefaultMouseEventHandlers(':more', nativeEvent => {\n return {\n nativeEvent,\n ...day\n };\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\n getVisibleEvents() {\n const start = getDayIdentifier(this.days[0]);\n const end = getDayIdentifier(this.days[this.days.length - 1]);\n return this.parsedEvents.filter(event => isEventOverlapping(event, start, end));\n },\n\n isEventForCategory(event, category) {\n return !this.categoryMode || typeof category === 'object' && category.categoryName && category.categoryName === event.category || typeof event.category === 'string' && category === event.category || typeof event.category !== 'string' && category === null;\n },\n\n getEventsForDay(day) {\n const identifier = getDayIdentifier(day);\n const firstWeekday = this.eventWeekdays[0];\n return this.parsedEvents.filter(event => isEventStart(event, day, identifier, firstWeekday));\n },\n\n getEventsForDayAll(day) {\n const identifier = getDayIdentifier(day);\n const firstWeekday = this.eventWeekdays[0];\n return this.parsedEvents.filter(event => event.allDay && (this.categoryMode ? isEventOn(event, identifier) : isEventStart(event, day, identifier, firstWeekday)) && this.isEventForCategory(event, day.category));\n },\n\n getEventsForDayTimed(day) {\n const identifier = getDayIdentifier(day);\n return this.parsedEvents.filter(event => !event.allDay && isEventOn(event, identifier) && this.isEventForCategory(event, day.category));\n },\n\n getScopedSlots() {\n if (this.noEvents) {\n return { ...this.$scopedSlots\n };\n }\n\n const mode = this.eventModeFunction(this.parsedEvents, this.eventWeekdays[0], this.parsedEventOverlapThreshold);\n\n const isNode = input => !!input;\n\n const getSlotChildren = (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 = [];\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\n if (mapped) {\n children.push(mapped);\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 return { ...slots,\n day: day => {\n let children = getSlotChildren(day, this.getEventsForDay, this.genDayEvent, false);\n\n if (children && children.length > 0 && this.eventMore) {\n children.push(this.genMore(day));\n }\n\n if (slotDay) {\n const slot = slotDay(day);\n\n if (slot) {\n children = children ? children.concat(slot) : slot;\n }\n }\n\n return children;\n },\n 'day-header': day => {\n let children = getSlotChildren(day, this.getEventsForDayAll, this.genDayEvent, false);\n\n if (slotDayHeader) {\n const slot = slotDayHeader(day);\n\n if (slot) {\n children = children ? children.concat(slot) : slot;\n }\n }\n\n return children;\n },\n 'day-body': day => {\n const events = getSlotChildren(day, this.getEventsForDayTimed, this.genTimedEvent, true);\n let children = [this.$createElement('div', {\n staticClass: 'v-event-timed-container'\n }, events)];\n\n if (slotDayBody) {\n const slot = slotDayBody(day);\n\n if (slot) {\n children = children.concat(slot);\n }\n }\n\n return children;\n }\n };\n }\n\n }\n});\n//# sourceMappingURL=calendar-with-events.js.map","// Styles\nimport \"../../../src/components/VCalendar/VCalendarWeekly.sass\"; // Components\n\nimport VBtn from '../VBtn'; // Mixins\n\nimport CalendarBase from './mixins/calendar-base'; // Util\n\nimport { getSlot } from '../../util/helpers';\nimport { weekNumber } from '../../util/dateTimeUtils';\nimport props from './util/props';\nimport { createDayList, getDayIdentifier, createNativeLocaleFormatter } from './util/timestamp';\n/* @vue/component */\n\nexport default CalendarBase.extend({\n name: 'v-calendar-weekly',\n props: props.weeks,\n computed: {\n staticClass() {\n return 'v-calendar-weekly';\n },\n\n classes() {\n return this.themeClasses;\n },\n\n parsedMinWeeks() {\n return parseInt(this.minWeeks);\n },\n\n days() {\n const minDays = this.parsedMinWeeks * this.parsedWeekdays.length;\n const start = this.getStartOfWeek(this.parsedStart);\n const end = this.getEndOfWeek(this.parsedEnd);\n return createDayList(start, end, this.times.today, this.weekdaySkips, Number.MAX_SAFE_INTEGER, minDays);\n },\n\n todayWeek() {\n const today = this.times.today;\n const start = this.getStartOfWeek(today);\n const end = this.getEndOfWeek(today);\n return createDayList(start, end, today, this.weekdaySkips, this.parsedWeekdays.length, this.parsedWeekdays.length);\n },\n\n monthFormatter() {\n if (this.monthFormat) {\n return this.monthFormat;\n }\n\n const longOptions = {\n timeZone: 'UTC',\n month: 'long'\n };\n const shortOptions = {\n timeZone: 'UTC',\n month: 'short'\n };\n return createNativeLocaleFormatter(this.currentLocale, (_tms, short) => short ? shortOptions : longOptions);\n }\n\n },\n methods: {\n isOutside(day) {\n const dayIdentifier = getDayIdentifier(day);\n return dayIdentifier < getDayIdentifier(this.parsedStart) || dayIdentifier > getDayIdentifier(this.parsedEnd);\n },\n\n genHead() {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__head'\n }, this.genHeadDays());\n },\n\n genHeadDays() {\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\n genHeadDay(day, index) {\n const outside = this.isOutside(this.days[index]);\n const color = day.present ? this.color : undefined;\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\n genWeeks() {\n const days = this.days;\n const weekDays = this.parsedWeekdays.length;\n const weeks = [];\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\n genWeek(week, weekNumber) {\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\n getWeekNumber(determineDay) {\n return weekNumber(determineDay.year, determineDay.month - 1, determineDay.day, this.parsedWeekdays[0], parseInt(this.localeFirstDayOfYear));\n },\n\n genWeekNumber(weekNumber) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__weeknumber'\n }, [this.$createElement('small', String(weekNumber))]);\n },\n\n genDay(day, index, week) {\n const outside = this.isOutside(day);\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', nativeEvent => {\n return {\n nativeEvent,\n ...day\n };\n })\n }, [this.genDayLabel(day), ...(getSlot(this, 'day', () => ({\n outside,\n index,\n week,\n ...day\n })) || [])]);\n },\n\n genDayLabel(day) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__day-label'\n }, getSlot(this, 'day-label', day) || [this.genDayLabelButton(day)]);\n },\n\n genDayLabelButton(day) {\n const color = day.present ? this.color : 'transparent';\n const hasMonth = day.day === 1 && this.showMonthOnFirst;\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': {\n event: 'click',\n stop: true\n },\n 'contextmenu:date': {\n event: 'contextmenu',\n stop: true,\n prevent: true,\n result: false\n }\n }, nativeEvent => ({\n nativeEvent,\n ...day\n }))\n }, hasMonth ? this.monthFormatter(day, this.shortMonths) + ' ' + this.dayFormatter(day, false) : this.dayFormatter(day, false));\n },\n\n genDayMonth(day) {\n const color = day.present ? this.color : undefined;\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\n render(h) {\n return h('div', {\n staticClass: this.staticClass,\n class: this.classes,\n on: {\n dragstart: e => {\n e.preventDefault();\n }\n }\n }, [!this.hideHeader ? this.genHead() : '', ...this.genWeeks()]);\n }\n\n});\n//# sourceMappingURL=VCalendarWeekly.js.map","// Styles\nimport \"../../../src/components/VCalendar/VCalendarWeekly.sass\"; // Mixins\n\nimport VCalendarWeekly from './VCalendarWeekly'; // Util\n\nimport { parseTimestamp, getStartOfMonth, getEndOfMonth } from './util/timestamp';\n/* @vue/component */\n\nexport default VCalendarWeekly.extend({\n name: 'v-calendar-monthly',\n computed: {\n staticClass() {\n return 'v-calendar-monthly v-calendar-weekly';\n },\n\n parsedStart() {\n return getStartOfMonth(parseTimestamp(this.start, true));\n },\n\n parsedEnd() {\n return getEndOfMonth(parseTimestamp(this.end, true));\n }\n\n }\n});\n//# sourceMappingURL=VCalendarMonthly.js.map","// Mixins\nimport CalendarBase from './calendar-base'; // Util\n\nimport props from '../util/props';\nimport { parseTime, copyTimestamp, updateMinutes, createDayList, createIntervalList, createNativeLocaleFormatter, MINUTES_IN_DAY } from '../util/timestamp';\n/* @vue/component */\n\nexport default CalendarBase.extend({\n name: 'calendar-with-intervals',\n props: props.intervals,\n computed: {\n parsedFirstInterval() {\n return parseInt(this.firstInterval);\n },\n\n parsedIntervalMinutes() {\n return parseInt(this.intervalMinutes);\n },\n\n parsedIntervalCount() {\n return parseInt(this.intervalCount);\n },\n\n parsedIntervalHeight() {\n return parseFloat(this.intervalHeight);\n },\n\n parsedFirstTime() {\n return parseTime(this.firstTime);\n },\n\n firstMinute() {\n const time = this.parsedFirstTime;\n return time !== false && time >= 0 && time <= MINUTES_IN_DAY ? time : this.parsedFirstInterval * this.parsedIntervalMinutes;\n },\n\n bodyHeight() {\n return this.parsedIntervalCount * this.parsedIntervalHeight;\n },\n\n days() {\n return createDayList(this.parsedStart, this.parsedEnd, this.times.today, this.weekdaySkips, this.maxDays);\n },\n\n intervals() {\n const days = this.days;\n const first = this.firstMinute;\n const minutes = this.parsedIntervalMinutes;\n const count = this.parsedIntervalCount;\n const now = this.times.now;\n return days.map(d => createIntervalList(d, first, minutes, count, now));\n },\n\n intervalFormatter() {\n if (this.intervalFormat) {\n return this.intervalFormat;\n }\n\n const longOptions = {\n timeZone: 'UTC',\n hour: '2-digit',\n minute: '2-digit'\n };\n const shortOptions = {\n timeZone: 'UTC',\n hour: 'numeric',\n minute: '2-digit'\n };\n const shortHourOptions = {\n timeZone: 'UTC',\n hour: 'numeric'\n };\n return createNativeLocaleFormatter(this.currentLocale, (tms, short) => short ? tms.minute === 0 ? shortHourOptions : shortOptions : longOptions);\n }\n\n },\n methods: {\n showIntervalLabelDefault(interval) {\n const first = this.intervals[0][0];\n const isFirst = first.hour === interval.hour && first.minute === interval.minute;\n return !isFirst;\n },\n\n intervalStyleDefault(_interval) {\n return undefined;\n },\n\n getTimestampAtEvent(e, day) {\n const timestamp = copyTimestamp(day);\n const bounds = e.currentTarget.getBoundingClientRect();\n const baseMinutes = this.firstMinute;\n const touchEvent = e;\n const mouseEvent = e;\n const touches = touchEvent.changedTouches || touchEvent.touches;\n const clientY = touches && touches[0] ? touches[0].clientY : mouseEvent.clientY;\n const addIntervals = (clientY - bounds.top) / this.parsedIntervalHeight;\n const addMinutes = Math.floor(addIntervals * this.parsedIntervalMinutes);\n const minutes = baseMinutes + addMinutes;\n return updateMinutes(timestamp, minutes, this.times.now);\n },\n\n getSlotScope(timestamp) {\n const scope = copyTimestamp(timestamp);\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\n scrollToTime(time) {\n const y = this.timeToY(time);\n const pane = this.$refs.scrollArea;\n\n if (y === false || !pane) {\n return false;\n }\n\n pane.scrollTop = y;\n return true;\n },\n\n minutesToPixels(minutes) {\n return minutes / this.parsedIntervalMinutes * this.parsedIntervalHeight;\n },\n\n timeToY(time, clamp = true) {\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\n if (y > this.bodyHeight) {\n y = this.bodyHeight;\n }\n }\n }\n\n return y;\n },\n\n timeDelta(time) {\n const minutes = parseTime(time);\n\n if (minutes === false) {\n return false;\n }\n\n const min = this.firstMinute;\n const gap = this.parsedIntervalCount * this.parsedIntervalMinutes;\n return (minutes - min) / gap;\n }\n\n }\n});\n//# sourceMappingURL=calendar-with-intervals.js.map","// Styles\nimport \"../../../src/components/VCalendar/VCalendarDaily.sass\"; // Directives\n\nimport Resize from '../../directives/resize'; // Components\n\nimport VBtn from '../VBtn'; // Mixins\n\nimport CalendarWithIntervals from './mixins/calendar-with-intervals'; // Util\n\nimport { convertToUnit, getSlot } from '../../util/helpers';\n/* @vue/component */\n\nexport default CalendarWithIntervals.extend({\n name: 'v-calendar-daily',\n directives: {\n Resize\n },\n data: () => ({\n scrollPush: 0\n }),\n computed: {\n classes() {\n return {\n 'v-calendar-daily': true,\n ...this.themeClasses\n };\n }\n\n },\n\n mounted() {\n this.init();\n },\n\n methods: {\n init() {\n this.$nextTick(this.onResize);\n },\n\n onResize() {\n this.scrollPush = this.getScrollPush();\n },\n\n getScrollPush() {\n const area = this.$refs.scrollArea;\n const pane = this.$refs.pane;\n return area && pane ? area.offsetWidth - pane.offsetWidth : 0;\n },\n\n genHead() {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__head',\n style: {\n marginRight: this.scrollPush + 'px'\n }\n }, [this.genHeadIntervals(), ...this.genHeadDays()]);\n },\n\n genHeadIntervals() {\n const width = convertToUnit(this.intervalWidth);\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__intervals-head',\n style: {\n width\n }\n }, getSlot(this, 'interval-header'));\n },\n\n genHeadDays() {\n return this.days.map(this.genHeadDay);\n },\n\n genHeadDay(day, index) {\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', nativeEvent => {\n return {\n nativeEvent,\n ...this.getSlotScope(day)\n };\n })\n }, [this.genHeadWeekday(day), this.genHeadDayLabel(day), ...this.genDayHeader(day, index)]);\n },\n\n genDayHeader(day, index) {\n return getSlot(this, 'day-header', () => ({\n week: this.days,\n ...day,\n index\n })) || [];\n },\n\n genHeadWeekday(day) {\n const color = day.present ? this.color : undefined;\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-calendar-daily_head-weekday'\n }), this.weekdayFormatter(day, this.shortWeekdays));\n },\n\n genHeadDayLabel(day) {\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\n genHeadDayButton(day) {\n const color = day.present ? this.color : 'transparent';\n return this.$createElement(VBtn, {\n props: {\n color,\n fab: true,\n depressed: true\n },\n on: this.getMouseEventHandlers({\n 'click:date': {\n event: 'click',\n stop: true\n },\n 'contextmenu:date': {\n event: 'contextmenu',\n stop: true,\n prevent: true,\n result: false\n }\n }, nativeEvent => {\n return {\n nativeEvent,\n ...day\n };\n })\n }, this.dayFormatter(day, false));\n },\n\n genBody() {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__body'\n }, [this.genScrollArea()]);\n },\n\n genScrollArea() {\n return this.$createElement('div', {\n ref: 'scrollArea',\n staticClass: 'v-calendar-daily__scroll-area'\n }, [this.genPane()]);\n },\n\n genPane() {\n return this.$createElement('div', {\n ref: 'pane',\n staticClass: 'v-calendar-daily__pane',\n style: {\n height: convertToUnit(this.bodyHeight)\n }\n }, [this.genDayContainer()]);\n },\n\n genDayContainer() {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__day-container'\n }, [this.genBodyIntervals(), ...this.genDays()]);\n },\n\n genDays() {\n return this.days.map(this.genDay);\n },\n\n genDay(day, index) {\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', nativeEvent => {\n return {\n nativeEvent,\n ...this.getSlotScope(this.getTimestampAtEvent(nativeEvent, day))\n };\n })\n }, [...this.genDayIntervals(index), ...this.genDayBody(day)]);\n },\n\n genDayBody(day) {\n return getSlot(this, 'day-body', () => this.getSlotScope(day)) || [];\n },\n\n genDayIntervals(index) {\n return this.intervals[index].map(this.genDayInterval);\n },\n\n genDayInterval(interval) {\n const height = convertToUnit(this.intervalHeight);\n const styler = this.intervalStyle || this.intervalStyleDefault;\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler(interval)\n }\n };\n const children = getSlot(this, 'interval', () => this.getSlotScope(interval));\n return this.$createElement('div', data, children);\n },\n\n genBodyIntervals() {\n const width = convertToUnit(this.intervalWidth);\n const data = {\n staticClass: 'v-calendar-daily__intervals-body',\n style: {\n width\n },\n on: this.getDefaultMouseEventHandlers(':interval', nativeEvent => {\n return {\n nativeEvent,\n ...this.getTimestampAtEvent(nativeEvent, this.parsedStart)\n };\n })\n };\n return this.$createElement('div', data, this.genIntervalLabels());\n },\n\n genIntervalLabels() {\n if (!this.intervals.length) return null;\n return this.intervals[0].map(this.genIntervalLabel);\n },\n\n genIntervalLabel(interval) {\n const height = convertToUnit(this.intervalHeight);\n const short = this.shortIntervals;\n const shower = this.showIntervalLabel || this.showIntervalLabelDefault;\n const show = shower(interval);\n const label = show ? this.intervalFormatter(interval, short) : undefined;\n return this.$createElement('div', {\n key: interval.time,\n staticClass: 'v-calendar-daily__interval',\n style: {\n height\n }\n }, [this.$createElement('div', {\n staticClass: 'v-calendar-daily__interval-text'\n }, label)]);\n }\n\n },\n\n render(h) {\n return h('div', {\n class: this.classes,\n on: {\n dragstart: e => {\n e.preventDefault();\n }\n },\n directives: [{\n modifiers: {\n quiet: true\n },\n name: 'resize',\n value: this.onResize\n }]\n }, [!this.hideHeader ? this.genHead() : '', this.genBody()]);\n }\n\n});\n//# sourceMappingURL=VCalendarDaily.js.map","export function parsedCategoryText(category, categoryText) {\n return typeof categoryText === 'string' && typeof category === 'object' && category ? category[categoryText] : typeof categoryText === 'function' ? categoryText(category) : category;\n}\nexport function getParsedCategories(categories, categoryText) {\n if (typeof categories === 'string') return categories.split(/\\s*,\\s/);\n\n if (Array.isArray(categories)) {\n return categories.map(category => {\n if (typeof category === 'string') return category;\n const categoryName = typeof category.categoryName === 'string' ? category.categoryName : parsedCategoryText(category, categoryText);\n return { ...category,\n categoryName\n };\n });\n }\n\n return [];\n}\n//# sourceMappingURL=parser.js.map","// Styles\nimport \"../../../src/components/VCalendar/VCalendarCategory.sass\"; // Mixins\n\nimport VCalendarDaily from './VCalendarDaily'; // Util\n\nimport { convertToUnit, getSlot } from '../../util/helpers';\nimport props from './util/props';\nimport { getParsedCategories } from './util/parser';\n/* @vue/component */\n\nexport default VCalendarDaily.extend({\n name: 'v-calendar-category',\n props: props.category,\n computed: {\n classes() {\n return {\n 'v-calendar-daily': true,\n 'v-calendar-category': true,\n ...this.themeClasses\n };\n },\n\n parsedCategories() {\n return getParsedCategories(this.categories, this.categoryText);\n }\n\n },\n methods: {\n genDayHeader(day, index) {\n const data = {\n staticClass: 'v-calendar-category__columns'\n };\n const scope = {\n week: this.days,\n ...day,\n index\n };\n const children = this.parsedCategories.map(category => {\n return this.genDayHeaderCategory(day, this.getCategoryScope(scope, category));\n });\n return [this.$createElement('div', data, children)];\n },\n\n getCategoryScope(scope, category) {\n const cat = typeof category === 'object' && category && category.categoryName === this.categoryForInvalid ? null : category;\n return { ...scope,\n category: cat\n };\n },\n\n genDayHeaderCategory(day, scope) {\n const headerTitle = typeof scope.category === 'object' ? scope.category.categoryName : scope.category;\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__column-header',\n on: this.getDefaultMouseEventHandlers(':day-category', e => {\n return this.getCategoryScope(this.getSlotScope(day), scope.category);\n })\n }, [getSlot(this, 'category', scope) || this.genDayHeaderCategoryTitle(headerTitle), getSlot(this, 'day-header', scope)]);\n },\n\n genDayHeaderCategoryTitle(categoryName) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__category'\n }, categoryName === null ? this.categoryForInvalid : categoryName);\n },\n\n genDays() {\n const days = [];\n this.days.forEach((d, j) => {\n const day = new Array(this.parsedCategories.length || 1);\n day.fill(d);\n days.push(...day.map((v, i) => this.genDay(v, j, i)));\n });\n return days;\n },\n\n genDay(day, index, categoryIndex) {\n const category = this.parsedCategories[categoryIndex];\n return this.$createElement('div', {\n key: day.date + '-' + categoryIndex,\n staticClass: 'v-calendar-daily__day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':time', e => {\n return this.getSlotScope(this.getTimestampAtEvent(e, day));\n })\n }, [...this.genDayIntervals(index, category), ...this.genDayBody(day, category)]);\n },\n\n genDayIntervals(index, category) {\n return this.intervals[index].map(v => this.genDayInterval(v, category));\n },\n\n genDayInterval(interval, category) {\n const height = convertToUnit(this.intervalHeight);\n const styler = this.intervalStyle || this.intervalStyleDefault;\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler({ ...interval,\n category\n })\n }\n };\n const children = getSlot(this, 'interval', () => this.getCategoryScope(this.getSlotScope(interval), category));\n return this.$createElement('div', data, children);\n },\n\n genDayBody(day, category) {\n const data = {\n staticClass: 'v-calendar-category__columns'\n };\n const children = [this.genDayBodyCategory(day, category)];\n return [this.$createElement('div', data, children)];\n },\n\n genDayBodyCategory(day, category) {\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 const children = getSlot(this, 'day-body', () => this.getCategoryScope(this.getSlotScope(day), category));\n return this.$createElement('div', data, children);\n }\n\n }\n});\n//# sourceMappingURL=VCalendarCategory.js.map","// Styles\n// import '../../stylus/components/_calendar-daily.styl'\n// Mixins\nimport CalendarWithEvents from './mixins/calendar-with-events'; // Util\n\nimport props from './util/props';\nimport { DAYS_IN_MONTH_MAX, DAY_MIN, DAYS_IN_WEEK, parseTimestamp, validateTimestamp, relativeDays, nextDay, prevDay, copyTimestamp, updateFormatted, updateWeekday, updateRelative, getStartOfMonth, getEndOfMonth, timestampToDate } from './util/timestamp'; // Calendars\n\nimport VCalendarMonthly from './VCalendarMonthly';\nimport VCalendarDaily from './VCalendarDaily';\nimport VCalendarWeekly from './VCalendarWeekly';\nimport VCalendarCategory from './VCalendarCategory';\nimport { getParsedCategories } from './util/parser';\n/* @vue/component */\n\nexport default CalendarWithEvents.extend({\n name: 'v-calendar',\n props: { ...props.calendar,\n ...props.weeks,\n ...props.intervals,\n ...props.category\n },\n data: () => ({\n lastStart: null,\n lastEnd: null\n }),\n computed: {\n parsedValue() {\n return validateTimestamp(this.value) ? parseTimestamp(this.value, true) : this.parsedStart || this.times.today;\n },\n\n parsedCategoryDays() {\n return parseInt(this.categoryDays) || 1;\n },\n\n renderProps() {\n const around = this.parsedValue;\n let component = 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\n switch (this.type) {\n case 'month':\n component = VCalendarMonthly;\n start = getStartOfMonth(around);\n end = getEndOfMonth(around);\n break;\n\n case 'week':\n component = VCalendarDaily;\n start = this.getStartOfWeek(around);\n end = this.getEndOfWeek(around);\n maxDays = 7;\n break;\n\n case 'day':\n component = VCalendarDaily;\n maxDays = 1;\n weekdays = [start.weekday];\n break;\n\n case '4day':\n component = VCalendarDaily;\n end = relativeDays(copyTimestamp(end), nextDay, 3);\n updateFormatted(end);\n maxDays = 4;\n weekdays = [start.weekday, (start.weekday + 1) % 7, (start.weekday + 2) % 7, (start.weekday + 3) % 7];\n break;\n\n case 'custom-weekly':\n component = VCalendarWeekly;\n start = this.parsedStart || around;\n end = this.parsedEnd;\n break;\n\n case 'custom-daily':\n component = VCalendarDaily;\n start = this.parsedStart || around;\n end = this.parsedEnd;\n break;\n\n case 'category':\n const days = this.parsedCategoryDays;\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\n default:\n throw new Error(this.type + ' is not a valid Calendar type');\n }\n\n return {\n component,\n start,\n end,\n maxDays,\n weekdays,\n categories\n };\n },\n\n eventWeekdays() {\n return this.renderProps.weekdays;\n },\n\n categoryMode() {\n return this.type === 'category';\n },\n\n title() {\n const {\n start,\n end\n } = 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\n monthLongFormatter() {\n return this.getFormatter({\n timeZone: 'UTC',\n month: 'long'\n });\n },\n\n monthShortFormatter() {\n return this.getFormatter({\n timeZone: 'UTC',\n month: 'short'\n });\n },\n\n parsedCategories() {\n return getParsedCategories(this.categories, this.categoryText);\n }\n\n },\n watch: {\n renderProps: 'checkChange'\n },\n\n mounted() {\n this.updateEventVisibility();\n this.checkChange();\n },\n\n updated() {\n window.requestAnimationFrame(this.updateEventVisibility);\n },\n\n methods: {\n checkChange() {\n const {\n lastStart,\n lastEnd\n } = this;\n const {\n start,\n end\n } = this.renderProps;\n\n if (!lastStart || !lastEnd || start.date !== lastStart.date || end.date !== lastEnd.date) {\n this.lastStart = start;\n this.lastEnd = end;\n this.$emit('change', {\n start,\n end\n });\n }\n },\n\n move(amount = 1) {\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\n case 'week':\n relativeDays(moved, mover, DAYS_IN_WEEK);\n break;\n\n case 'day':\n relativeDays(moved, mover, 1);\n break;\n\n case '4day':\n relativeDays(moved, mover, 4);\n break;\n\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\n next(amount = 1) {\n this.move(amount);\n },\n\n prev(amount = 1) {\n this.move(-amount);\n },\n\n timeToY(time, clamp = true) {\n const c = this.$children[0];\n\n if (c && c.timeToY) {\n return c.timeToY(time, clamp);\n } else {\n return false;\n }\n },\n\n timeDelta(time) {\n const c = this.$children[0];\n\n if (c && c.timeDelta) {\n return c.timeDelta(time);\n } else {\n return false;\n }\n },\n\n minutesToPixels(minutes) {\n const c = this.$children[0];\n\n if (c && c.minutesToPixels) {\n return c.minutesToPixels(minutes);\n } else {\n return -1;\n }\n },\n\n scrollToTime(time) {\n const c = this.$children[0];\n\n if (c && c.scrollToTime) {\n return c.scrollToTime(time);\n } else {\n return false;\n }\n },\n\n parseTimestamp(input, required) {\n return parseTimestamp(input, required, this.times.now);\n },\n\n timestampToDate(timestamp) {\n return timestampToDate(timestamp);\n },\n\n getCategoryList(categories) {\n if (!this.noEvents) {\n const categoryMap = categories.reduce((map, category, index) => {\n if (typeof category === 'object' && category.categoryName) map[category.categoryName] = {\n index,\n count: 0\n };else if (typeof category === 'string') map[category] = {\n index,\n count: 0\n };\n return map;\n }, {});\n\n if (!this.categoryHideDynamic || !this.categoryShowAll) {\n let categoryLength = categories.length;\n this.parsedEvents.forEach(ev => {\n let category = ev.category;\n\n if (typeof category !== 'string') {\n category = this.categoryForInvalid;\n }\n\n if (!category) {\n return;\n }\n\n if (category in categoryMap) {\n categoryMap[category].count++;\n } else if (!this.categoryHideDynamic) {\n categoryMap[category] = {\n index: categoryLength++,\n count: 1\n };\n }\n });\n }\n\n if (!this.categoryShowAll) {\n for (const category in categoryMap) {\n if (categoryMap[category].count === 0) {\n delete categoryMap[category];\n }\n }\n }\n\n categories = categories.filter(category => {\n if (typeof category === 'object' && category.categoryName) {\n return categoryMap.hasOwnProperty(category.categoryName);\n } else if (typeof category === 'string') {\n return categoryMap.hasOwnProperty(category);\n }\n\n return false;\n });\n }\n\n return categories;\n }\n\n },\n\n render(h) {\n const {\n start,\n end,\n maxDays,\n component,\n weekdays,\n categories\n } = this.renderProps;\n return h(component, {\n staticClass: 'v-calendar',\n class: {\n 'v-calendar-events': !this.noEvents\n },\n props: { ...this.$props,\n start: start.date,\n end: end.date,\n maxDays,\n weekdays,\n categories\n },\n directives: [{\n modifiers: {\n quiet: true\n },\n name: 'resize',\n value: this.updateEventVisibility\n }],\n on: { ...this.$listeners,\n 'click:date': (day, e) => {\n if (this.$listeners.input) {\n this.$emit('input', day.date);\n }\n\n if (this.$listeners['click:date']) {\n this.$emit('click:date', day, e);\n }\n }\n },\n scopedSlots: this.getScopedSlots()\n });\n }\n\n});\n//# sourceMappingURL=VCalendar.js.map"],"sourceRoot":""}