{"version":3,"sources":["webpack:///./src/views/Calendar/Edit.vue?24dc","webpack:///src/views/Calendar/Edit.vue","webpack:///./src/views/Calendar/Edit.vue?3c6b","webpack:///./src/views/Calendar/Edit.vue","webpack:///./src/views/Calendar/Calendar.vue?e7c7","webpack:///./src/services/manager/DateService.js","webpack:///./src/views/Calendar/Calendar.vue?fad0","webpack:///src/views/Calendar/Calendar.vue","webpack:///./src/views/Calendar/Calendar.vue?32c6","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/util/parser.ts","webpack:///../../../src/components/VCalendar/VCalendarCategory.ts","webpack:///../../../src/components/VCalendar/VCalendar.ts","webpack:///./src/views/Calendar/Calendar.vue?8125","webpack:///../../../src/mixins/rippleable/index.ts","webpack:///../../../src/mixins/selectable/index.ts","webpack:///../../../src/components/VCheckbox/VCheckbox.ts","webpack:///./src/services/api/CalendarEventsService.js","webpack:///../../../src/mixins/mouse/index.ts","webpack:///./src/services/api/EventsService.js"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","_v","_s","pageTitle","model","value","callback","$$v","valid","expression","titleRules","calendarEvent","$set","colors","scopedSlots","_u","key","fn","ref","item","name","descriptionRules","on","onBack","onSubmit","staticRenderFns","mixins","authorizedMixin","components","statusalert","store","computed","result","calendarEventId","title","description","startDate","Date","toISOString","substring","endDate","isAllDay","eventColorId","url","priviledged","router","$route","params","CalendarEventsService","methods","$refs","alert","displayResult","component","VBtn","VCheckbox","VCol","VContainer","VDatePicker","VForm","VIcon","VLayout","VRow","VSelect","VSpacer","VTextField","VTextarea","convertDate","dateString","full","undefined","theDate","year","getFullYear","month","getMonth","day","getDate","hour","getHours","minute","getMinutes","am","toString","padStart","setToday","prev","calendar","_e","next","_g","_b","typeToLabel","type","$event","events","getEventColor","showEvent","updateRange","focus","selectedElement","selectedOpen","class","getEventClass","selectedEvent","domProps","details","onEditEvent","id","onAddEvent","dialog","deleteEvent","data","week","names","checkChange","event","find","e","color","console","log","x","open","nativeEvent","target","setTimeout","stopPropagation","EventsService","a","b","Math","floor","random","props","now","validator","times","today","watch","parsedNow","present","past","future","MILLIS_IN_DAY","minStart","visuals","columnCount","column","left","width","exclude","s0","e0","groups","group","groupVisual","dayStart","i","intersected","hasOverlap","start","end","k","groupStart","groupEnd","timed","getRange","getDayRange","handler","min","max","reset","getVisuals","dayEvents","visual","setColumnCount","targetGroup","getOpenGroup","FULL_WIDTH","DEFAULT_OFFSET","WIDTH_MULTIPLIER","stack","firstWeekday","overlapThreshold","getOverlapGroupHandler","getGroups","nodes","child","getNode","index","getNextIndex","parent","getParent","addTime","getOverlappingRange","children","grand","grandNext","calculateBounds","columns","getMaxChildIndex","spaceLeft","spaceWidth","offset","columnWidthMultiplier","getColumnWidthMultiplier","node","columnOffset","columnWidth","hasFullWidth","maxColumn","minColumn","c","getOverlappingIndices","indices","other","returnFirstColumn","overlapping","first","n","getNormalizedRange","added","sibling","childMax","removeMinutes","identifier","totalMinutes","addHours","addMinutes","CalendarEventOverlapModes","base","String","Number","validate","default","date","weekdays","Array","validateWeekdays","hideHeader","Boolean","shortWeekdays","weekdayFormat","dayFormat","intervals","maxDays","shortIntervals","intervalHeight","validateNumber","intervalWidth","intervalMinutes","firstInterval","firstTime","intervalCount","intervalFormat","intervalStyle","showIntervalLabel","weeks","localeFirstDayOfYear","minWeeks","shortMonths","showMonthOnFirst","showWeek","monthFormat","category","categories","categoryText","Function","categoryHideDynamic","categoryShowAll","categoryForInvalid","categoryDays","isFinite","parseInt","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventName","eventOverlapThreshold","eventOverlapMode","mode","eventMore","eventMoreText","eventRipple","eventMarginBottom","input","ints","visited","wrapped","d","directives","Resize","reversed","weekdaySkips","reverse","options","timeZone","_tms","_short","longOptions","weekday","shortOptions","short","outside","timestamp","startInput","endInput","startParsed","endParsed","startIdentifier","startTimestampIdentifier","endIdentifier","endOffset","endTimestampIdentifier","allDay","dayIdentifier","isEventOn","WIDTH_FULL","WIDTH_START","MINUTES_IN_DAY","ripple","length","map","timedEvent","parseEvent","eventTimedFunction","categoryMode","eventCategoryFunction","formatter","getFormatter","withTime","noEvents","eventsMap","more","parentBounds","last","eventsSorted","bottom","hidden","hide","$vuetify","lang","t","elements","el","weekdayIdentifier","scope","eventParsed","genEvent","style","height","refInFor","isEventHiddenOn","top","slot","$scopedSlots","text","eventTextColorFunction","background","eventColorFunction","overlapsNoon","singline","formatTime","timeSummary","eventSummary","eventNameFunction","time","delimiter","scopeInput","setTextColor","setBackgroundColor","getDefaultMouseEventHandlers","genName","display","days","parsedEvents","filter","isEventOverlapping","eventWeekdays","isEventStart","isEventForCategory","eventModeFunction","isNode","getSlotChildren","getter","mapper","genPlaceholder","mapped","slots","slotDay","slotDayHeader","slotDayBody","genMore","minDays","parsedMinWeeks","parsedWeekdays","getStartOfWeek","getEndOfWeek","role","header","todayWeek","isOutside","getRelativeClasses","weekdayFormatter","weekDays","genWeek","getWeekNumber","weekNodes","genDay","genWeekNumber","determineDay","genDayLabel","genDayLabelButton","hasMonth","fab","depressed","small","getMouseEventHandlers","stop","prevent","monthFormatter","dayFormatter","h","dragstart","parseFloat","parsedFirstInterval","parsedIntervalCount","minutes","count","shortHourOptions","tms","isFirst","interval","bounds","baseMinutes","touchEvent","mouseEvent","touches","clientY","addIntervals","y","timeToY","pane","clamp","timeDelta","gap","scrollPush","themeClasses","area","marginRight","getSlotScope","genHeadWeekday","genHeadDayLabel","genDayHeader","genHeadDayButton","getTimestampAtEvent","genDayIntervals","genDayBody","styler","shower","show","label","intervalFormatter","modifiers","quiet","onResize","categoryName","parsedCategoryText","getParsedCategories","parsedCategories","genDayHeaderCategory","getCategoryScope","cat","headerTitle","genDayHeaderCategoryTitle","j","v","genDayInterval","genDayBodyCategory","lastStart","lastEnd","parsedStart","around","getCategoryList","Error","renderProps","spanYears","spanMonths","monthShortFormatter","monthLongFormatter","window","amount","moved","forward","mover","limit","$children","required","categoryMap","categoryLength","ev","updateEventVisibility","$listeners","getScopedSlots","VCalendar","VCard","VCardActions","VCardText","VCardTitle","VDialog","VList","VListItem","VListItemTitle","VMenu","VSheet","VToolbar","VToolbarTitle","center","prop","inputValue","falseValue","trueValue","multiple","hasColor","lazyValue","isDark","valueComparator","VInput","click","Object","isActive","disabled","checked","blur","change","keydown","indeterminate","indeterminateIcon","offIcon","onIcon","inputIndeterminate","isDisabled","hasError","checkboxAttrs","dense","dark","light","genInput","genRipple","get","API","BASE_URL","axios","then","response","getEvent","eventId","create","evt","post","update","put","delete","eventFirst","listeners","acc","suffix","eventOptions","prefix","classSeparator","eventTargetClasses","currentTargets","document","currentTarget","TouchEvent","changedTouches","targetTouches","getData","getEventDocuments","course","entryFee","signUpEnd","signUpStart","canSignup","can","getSignupMessage","message","DateService"],"mappings":"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","file":"js/calendar.e092db19.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"page-header\"},[_c('v-layout',{attrs:{\"row\":\"\",\"align-center\":\"\"}},[_c('v-icon',{attrs:{\"x-large\":\"\"}},[_vm._v(\"mdi-calendar-month\")]),_c('h1',{staticClass:\"page-title\"},[_vm._v(_vm._s(_vm.pageTitle))])],1)],1),_c('v-form',{model:{value:(_vm.valid),callback:function ($$v) {_vm.valid=$$v},expression:\"valid\"}},[_c('v-container',[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\",\"lg\":\"3\",\"md\":\"6\",\"sm\":\"12\"}},[_c('v-text-field',{attrs:{\"label\":\"Title\",\"rules\":_vm.titleRules,\"required\":\"\"},model:{value:(_vm.calendarEvent.title),callback:function ($$v) {_vm.$set(_vm.calendarEvent, \"title\", $$v)},expression:\"calendarEvent.title\"}})],1),_c('v-col',{attrs:{\"cols\":\"12\",\"lg\":\"3\",\"md\":\"6\",\"sm\":\"12\"}},[_c('v-checkbox',{attrs:{\"label\":\"Is All Day\"},model:{value:(_vm.calendarEvent.isAllDay),callback:function ($$v) {_vm.$set(_vm.calendarEvent, \"isAllDay\", $$v)},expression:\"calendarEvent.isAllDay\"}})],1),_c('v-col',{attrs:{\"cols\":\"12\",\"lg\":\"3\",\"md\":\"6\",\"sm\":\"12\"}},[_c('v-select',{attrs:{\"label\":\"Color\",\"items\":_vm.colors,\"item-value\":\"id\",\"item-text\":\"name\"},scopedSlots:_vm._u([{key:\"selection\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('div',[_vm._v(_vm._s(item.name))])]}},{key:\"item\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('div',[_vm._v(_vm._s(item.name))])]}}]),model:{value:(_vm.calendarEvent.eventColorId),callback:function ($$v) {_vm.$set(_vm.calendarEvent, \"eventColorId\", $$v)},expression:\"calendarEvent.eventColorId\"}})],1),_c('v-col',{attrs:{\"cols\":\"12\",\"lg\":\"3\",\"md\":\"6\",\"sm\":\"12\"}},[_c('v-text-field',{attrs:{\"label\":\"Url\"},model:{value:(_vm.calendarEvent.url),callback:function ($$v) {_vm.$set(_vm.calendarEvent, \"url\", $$v)},expression:\"calendarEvent.url\"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-textarea',{attrs:{\"label\":\"Description\",\"rules\":_vm.descriptionRules,\"required\":\"\"},model:{value:(_vm.calendarEvent.description),callback:function ($$v) {_vm.$set(_vm.calendarEvent, \"description\", $$v)},expression:\"calendarEvent.description\"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\",\"lg\":\"6\",\"md\":\"6\",\"sm\":\"12\"}},[_c('v-date-picker',{staticClass:\"picker\",attrs:{\"full-width\":\"\",\"required\":\"\"},model:{value:(_vm.calendarEvent.startDate),callback:function ($$v) {_vm.$set(_vm.calendarEvent, \"startDate\", $$v)},expression:\"calendarEvent.startDate\"}})],1),_c('v-col',{attrs:{\"cols\":\"12\",\"lg\":\"6\",\"md\":\"6\",\"sm\":\"12\"}},[_c('v-date-picker',{staticClass:\"picker\",attrs:{\"full-width\":\"\",\"required\":\"\"},model:{value:(_vm.calendarEvent.endDate),callback:function ($$v) {_vm.$set(_vm.calendarEvent, \"endDate\", $$v)},expression:\"calendarEvent.endDate\"}})],1)],1),_c('v-row',[_c('v-spacer'),_c('v-btn',{staticClass:\"mr-4\",attrs:{\"outlined\":\"\",\"color\":\"accent\"},on:{\"click\":_vm.onBack}},[_vm._v(\"Back\")]),_c('v-btn',{staticClass:\"mr-4\",attrs:{\"outlined\":\"\",\"disabled\":!_vm.valid},on:{\"click\":_vm.onSubmit}},[_vm._v(\"Submit\")])],1)],1)],1),_c('div',[_c('statusalert',{ref:\"alert\",attrs:{\"returnUrl\":\"/calendar\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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!./Edit.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!./Edit.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Edit.vue?vue&type=template&id=606e265b&scoped=true&\"\nimport script from \"./Edit.vue?vue&type=script&lang=js&\"\nexport * from \"./Edit.vue?vue&type=script&lang=js&\"\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 \"606e265b\",\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 { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCheckbox } from 'vuetify/lib/components/VCheckbox';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDatePicker } from 'vuetify/lib/components/VDatePicker';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VTextarea } from 'vuetify/lib/components/VTextarea';\ninstallComponents(component, {VBtn,VCheckbox,VCol,VContainer,VDatePicker,VForm,VIcon,VLayout,VRow,VSelect,VSpacer,VTextField,VTextarea})\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../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=1b424306&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../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=1b424306&lang=scss&scoped=true&\"","export default {\r\n convertDate: function(dateString, full) {\r\n var result = ''\r\n \r\n if (dateString != undefined) {\r\n var theDate = new Date(dateString)\r\n const year = theDate.getFullYear()\r\n const month = theDate.getMonth() + 1\r\n const day = theDate.getDate()\r\n let hour = theDate.getHours()\r\n const minute = theDate.getMinutes()\r\n const am = hour < 12 ? 'AM' : 'PM'\r\n if (hour > 12) {\r\n hour = hour - 12\r\n }\r\n result = month + '/' + day + '/' + year\r\n if (full) {\r\n result =\r\n result +\r\n ' ' +\r\n hour +\r\n ':' +\r\n minute.toString().padStart(2, '0') +\r\n ' ' +\r\n am\r\n }\r\n }\r\n return result\r\n }, \r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"calendar\"},[_c('div',{staticClass:\"page-header\"},[_c('v-layout',{attrs:{\"row\":\"\",\"align-center\":\"\"}},[_c('v-icon',{attrs:{\"x-large\":\"\",\"color\":\"primary\"}},[_vm._v(\"mdi-calendar-month\")]),_c('h1',{staticClass:\"page-title\"},[_vm._v(\"Calendar\")])],1)],1),_c('v-row',{staticClass:\"fill-height\"},[_c('v-col',[_c('v-sheet',{attrs:{\"height\":\"64\"}},[_c('v-toolbar',{attrs:{\"flat\":\"\"}},[_c('v-btn',{staticClass:\"mr-4\",attrs:{\"outlined\":\"\"},on:{\"click\":_vm.setToday}},[_vm._v(\" Today \")]),_c('v-btn',{attrs:{\"fab\":\"\",\"text\":\"\",\"small\":\"\"},on:{\"click\":_vm.prev}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-chevron-left\")])],1),(_vm.$refs.calendar)?_c('v-toolbar-title',[_vm._v(\" \"+_vm._s(_vm.$refs.calendar.title)+\" \")]):_vm._e(),_c('v-btn',{attrs:{\"fab\":\"\",\"text\":\"\",\"small\":\"\"},on:{\"click\":_vm.next}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-chevron-right\")])],1),_c('v-spacer'),_c('v-menu',{attrs:{\"bottom\":\"\",\"right\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({attrs:{\"outlined\":\"\"}},'v-btn',attrs,false),on),[_c('span',[_vm._v(_vm._s(_vm.typeToLabel[_vm.type]))]),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\"mdi-menu-down\")])],1)]}}])},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){_vm.type = 'week'}}},[_c('v-list-item-title',[_vm._v(\"Week\")])],1),_c('v-list-item',{on:{\"click\":function($event){_vm.type = 'month'}}},[_c('v-list-item-title',[_vm._v(\"Month\")])],1)],1)],1)],1)],1),_c('v-sheet',{attrs:{\"height\":\"600\"}},[_c('v-calendar',{ref:\"calendar\",attrs:{\"color\":\"secondary\",\"events\":_vm.events,\"event-color\":_vm.getEventColor,\"type\":_vm.type},on:{\"click:event\":_vm.showEvent,\"change\":_vm.updateRange},model:{value:(_vm.focus),callback:function ($$v) {_vm.focus=$$v},expression:\"focus\"}}),_c('v-menu',{attrs:{\"close-on-content-click\":false,\"activator\":_vm.selectedElement,\"offset-x\":\"\"},model:{value:(_vm.selectedOpen),callback:function ($$v) {_vm.selectedOpen=$$v},expression:\"selectedOpen\"}},[_c('v-card',{class:_vm.getEventClass(_vm.selectedEvent),attrs:{\"min-width\":\"350px\",\"outlined\":\"\"}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('h2',{class:_vm.getEventClass(_vm.selectedEvent)},[_vm._v(\" \"+_vm._s(_vm.selectedEvent.name)+\" \")])])],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('h3',{class:_vm.getEventClass(_vm.selectedEvent),domProps:{\"innerHTML\":_vm._s(_vm.selectedEvent.details)}})])],1),(_vm.priviledgedEvent)?_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-btn',{class:_vm.getEventClass(_vm.selectedEvent),attrs:{\"outlined\":\"\"},on:{\"click\":function($event){return _vm.onEditEvent(_vm.selectedEvent.id)}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-pencil\")]),_vm._v(\"Edit \")],1)],1)],1):_vm._e(),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-btn',{class:_vm.getEventClass(_vm.selectedEvent),attrs:{\"outlined\":\"\"},on:{\"click\":function($event){_vm.selectedOpen = false}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-close\")]),_vm._v(\"Close \")],1)],1)],1)],1)],1)],1)],1)],1),_c('v-row',[_c('v-spacer'),(_vm.priviledged)?_c('v-btn',{attrs:{\"outlined\":\"\"},on:{\"click\":_vm.onAddEvent}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-plus\")]),_vm._v(\"Add Event \")],1):_vm._e()],1),_c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-dialog',{attrs:{\"persistent\":\"\",\"max-width\":\"400\"},model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[_c('v-card',[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(\"Delete the selected\"),_c('br'),_vm._v(\"calendar event?\")]),_c('v-card-text',[_vm._v(_vm._s(_vm.title))]),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.dialog = false}}},[_vm._v(\"No\")]),_c('v-btn',{attrs:{\"text\":\"\"},on:{\"click\":_vm.deleteEvent}},[_vm._v(\"Yes\")])],1)],1)],1)],1),_c('statusalert',{ref:\"alert\",attrs:{\"returnUrl\":\"/calendar\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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\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, CalendarCategoryTextFunction, CalendarCategory } from 'vuetify/types'\nimport { CalendarEventOverlapModes } from '../modes'\nimport { PropValidator } from 'vue/types/options'\n\nexport default {\n base: {\n start: {\n type: [String, Number, Date],\n validate: validateTimestamp,\n default: () => parseDate(new Date()).date,\n },\n end: {\n type: [String, Number, Date],\n validate: validateTimestamp,\n },\n weekdays: {\n type: [Array, String] as PropType,\n default: () => [0, 1, 2, 3, 4, 5, 6],\n validate: validateWeekdays,\n },\n hideHeader: {\n type: Boolean,\n },\n shortWeekdays: {\n type: Boolean,\n default: true,\n },\n weekdayFormat: {\n type: Function as PropType,\n default: null,\n },\n dayFormat: {\n type: Function as PropType,\n default: null,\n },\n },\n intervals: {\n maxDays: {\n type: Number,\n default: 7,\n },\n shortIntervals: {\n type: Boolean,\n default: true,\n },\n intervalHeight: {\n type: [Number, String],\n default: 48,\n validate: validateNumber,\n },\n intervalWidth: {\n type: [Number, String],\n default: 60,\n validate: validateNumber,\n },\n intervalMinutes: {\n type: [Number, String],\n default: 60,\n validate: validateNumber,\n },\n firstInterval: {\n type: [Number, String],\n default: 0,\n validate: validateNumber,\n },\n firstTime: {\n type: [Number, String, Object],\n validate: validateTime,\n },\n intervalCount: {\n type: [Number, String],\n default: 24,\n validate: validateNumber,\n },\n intervalFormat: {\n type: Function as PropType,\n default: null,\n },\n intervalStyle: {\n type: Function as PropType<(interval: CalendarTimestamp) => object>,\n default: null,\n },\n showIntervalLabel: {\n type: Function as PropType<(interval: CalendarTimestamp) => boolean>,\n default: null,\n },\n },\n weeks: {\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n minWeeks: {\n validate: validateNumber,\n default: 1,\n },\n shortMonths: {\n type: Boolean,\n default: true,\n },\n showMonthOnFirst: {\n type: Boolean,\n default: true,\n },\n showWeek: Boolean,\n monthFormat: {\n type: Function as PropType,\n default: null,\n },\n },\n calendar: {\n type: {\n type: String,\n default: 'month',\n },\n value: {\n type: [String, Number, Date] as PropType,\n validate: validateTimestamp,\n },\n },\n category: {\n categories: {\n type: [Array, String] as PropType,\n default: '',\n },\n categoryText: {\n type: [String, Function] as PropType,\n },\n categoryHideDynamic: {\n type: Boolean,\n },\n categoryShowAll: {\n type: Boolean,\n },\n categoryForInvalid: {\n type: String,\n default: '',\n },\n categoryDays: {\n type: [Number, String],\n default: 1,\n validate: (x: any) => isFinite(parseInt(x)) && parseInt(x) > 0,\n },\n },\n events: {\n events: {\n type: Array,\n default: () => [],\n } as PropValidator,\n eventStart: {\n type: String,\n default: 'start',\n },\n eventEnd: {\n type: String,\n default: 'end',\n },\n eventTimed: {\n type: [String, Function] as PropType,\n default: 'timed',\n },\n eventCategory: {\n type: [String, Function] as PropType,\n default: 'category',\n },\n eventHeight: {\n type: Number,\n default: 20,\n },\n eventColor: {\n type: [String, Function] as PropType,\n default: 'primary',\n },\n eventTextColor: {\n type: [String, Function] as PropType,\n default: 'white',\n },\n eventName: {\n type: [String, Function] as PropType,\n default: 'name',\n },\n eventOverlapThreshold: {\n type: [String, Number],\n default: 60,\n },\n eventOverlapMode: {\n type: [String, Function],\n default: 'stack',\n validate: (mode: any) => mode in CalendarEventOverlapModes || typeof mode === 'function',\n } as PropValidator<'stack' | 'column' | CalendarEventOverlapMode>,\n eventMore: {\n type: Boolean,\n default: true,\n },\n eventMoreText: {\n type: String,\n default: '$vuetify.calendar.moreEvents',\n },\n eventRipple: {\n type: [Boolean, Object],\n default: null,\n },\n eventMarginBottom: {\n type: Number,\n default: 1,\n },\n },\n}\n\nexport function validateNumber (input: any): boolean {\n return isFinite(parseInt(input))\n}\n\nexport function validateWeekdays (input: string | (number | string)[]): boolean {\n if (typeof input === 'string') {\n input = input.split(',')\n }\n\n if (Array.isArray(input)) {\n const ints = input.map(x => parseInt(x))\n\n if (ints.length > DAYS_IN_WEEK || ints.length === 0) {\n return false\n }\n\n const visited: Record = {}\n let wrapped = false\n\n for (let i = 0; i < ints.length; i++) {\n const x = ints[i]\n\n if (!isFinite(x) || x < 0 || x >= DAYS_IN_WEEK) {\n return false\n }\n\n if (i > 0) {\n const d = x - ints[i - 1]\n if (d < 0) {\n if (wrapped) {\n return false\n }\n wrapped = true\n } else if (d === 0) {\n return false\n }\n }\n\n if (visited[x]) {\n return false\n }\n visited[x] = true\n }\n\n return true\n }\n\n return false\n}\n","\n// Mixins\nimport mixins from '../../../util/mixins'\nimport Colorable from '../../../mixins/colorable'\nimport Localable from '../../../mixins/localable'\nimport Mouse from '../../../mixins/mouse'\nimport Themeable from '../../../mixins/themeable'\nimport Times from './times'\n\n// Directives\nimport Resize from '../../../directives/resize'\n\n// Util\nimport props from '../util/props'\nimport {\n parseTimestamp,\n getWeekdaySkips,\n createDayList,\n createNativeLocaleFormatter,\n getStartOfWeek,\n getEndOfWeek,\n getTimestampIdentifier,\n} from '../util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\n\nexport default mixins(\n Colorable,\n Localable,\n Mouse,\n Themeable,\n Times\n/* @vue/component */\n).extend({\n name: 'calendar-base',\n\n directives: {\n Resize,\n },\n\n props: props.base,\n\n computed: {\n parsedWeekdays (): number[] {\n return Array.isArray(this.weekdays)\n ? this.weekdays\n : (this.weekdays || '').split(',').map(x => parseInt(x, 10))\n },\n weekdaySkips (): number[] {\n return getWeekdaySkips(this.parsedWeekdays)\n },\n weekdaySkipsReverse (): number [] {\n const reversed = this.weekdaySkips.slice()\n reversed.reverse()\n return reversed\n },\n parsedStart (): CalendarTimestamp {\n return parseTimestamp(this.start, true)\n },\n parsedEnd (): CalendarTimestamp {\n const start = this.parsedStart\n const end: CalendarTimestamp = this.end ? parseTimestamp(this.end) || start : start\n\n return getTimestampIdentifier(end) < getTimestampIdentifier(start) ? start : end\n },\n days (): CalendarTimestamp[] {\n return createDayList(\n this.parsedStart,\n this.parsedEnd,\n this.times.today,\n this.weekdaySkips\n )\n },\n dayFormatter (): CalendarFormatter {\n if (this.dayFormat) {\n return this.dayFormat as CalendarFormatter\n }\n\n const options = { timeZone: 'UTC', day: 'numeric' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, _short) => options\n )\n },\n weekdayFormatter (): CalendarFormatter {\n if (this.weekdayFormat) {\n return this.weekdayFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', weekday: 'long' }\n const shortOptions = { timeZone: 'UTC', weekday: 'short' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, short) => short ? shortOptions : longOptions\n )\n },\n },\n\n methods: {\n getRelativeClasses (timestamp: CalendarTimestamp, outside = false): object {\n return {\n 'v-present': timestamp.present,\n 'v-past': timestamp.past,\n 'v-future': timestamp.future,\n 'v-outside': outside,\n }\n },\n getStartOfWeek (timestamp: CalendarTimestamp): CalendarTimestamp {\n return getStartOfWeek(timestamp, this.parsedWeekdays, this.times.today)\n },\n getEndOfWeek (timestamp: CalendarTimestamp): CalendarTimestamp {\n return getEndOfWeek(timestamp, this.parsedWeekdays, this.times.today)\n },\n getFormatter (options: object): CalendarFormatter {\n return createNativeLocaleFormatter(\n this.locale,\n (_tms, _short) => options\n )\n },\n },\n})\n","import {\n parseTimestamp,\n getDayIdentifier,\n getTimestampIdentifier,\n isTimedless,\n updateHasTime,\n} from './timestamp'\nimport { CalendarTimestamp, CalendarEvent, CalendarEventParsed } from 'vuetify/types'\n\nexport function parseEvent (\n input: CalendarEvent,\n index: number,\n startProperty: string,\n endProperty: string,\n timed = false,\n category: string | false = false,\n): CalendarEventParsed {\n const startInput = input[startProperty]\n const endInput = input[endProperty]\n const startParsed: CalendarTimestamp = parseTimestamp(startInput, true)\n const endParsed: CalendarTimestamp = (endInput ? parseTimestamp(endInput, true) : startParsed)\n const start: CalendarTimestamp = isTimedless(startInput)\n ? updateHasTime(startParsed, timed)\n : startParsed\n const end: CalendarTimestamp = isTimedless(endInput)\n ? updateHasTime(endParsed, timed)\n : endParsed\n const startIdentifier: number = getDayIdentifier(start)\n const startTimestampIdentifier: number = getTimestampIdentifier(start)\n const endIdentifier: number = getDayIdentifier(end)\n const endOffset: number = start.hasTime ? 0 : 2359\n const endTimestampIdentifier: number = getTimestampIdentifier(end) + endOffset\n const allDay = !start.hasTime\n\n return { input, start, startIdentifier, startTimestampIdentifier, end, endIdentifier, endTimestampIdentifier, allDay, index, category }\n}\n\nexport function isEventOn (event: CalendarEventParsed, dayIdentifier: number): boolean {\n return dayIdentifier >= event.startIdentifier && dayIdentifier <= event.endIdentifier\n}\n\nexport function isEventHiddenOn (event: CalendarEventParsed, day: CalendarTimestamp): boolean {\n return event.end.time === '00:00' && event.end.date === day.date && event.start.date !== day.date\n}\n\nexport function isEventStart (event: CalendarEventParsed, day: CalendarTimestamp, dayIdentifier: number, firstWeekday: number): boolean {\n return dayIdentifier === event.startIdentifier || (firstWeekday === day.weekday && isEventOn(event, dayIdentifier))\n}\n\nexport function isEventOverlapping (event: CalendarEventParsed, startIdentifier: number, endIdentifier: number): boolean {\n return startIdentifier <= event.endIdentifier && endIdentifier >= event.startIdentifier\n}\n","// Styles\nimport './calendar-with-events.sass'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\n\n// Directives\nimport ripple from '../../../directives/ripple'\n\n// Mixins\nimport CalendarBase from './calendar-base'\n\n// Util\nimport props from '../util/props'\nimport {\n CalendarEventOverlapModes,\n} from '../modes'\nimport {\n getDayIdentifier, diffMinutes,\n} from '../util/timestamp'\nimport {\n parseEvent,\n isEventStart,\n isEventOn,\n isEventOverlapping,\n isEventHiddenOn,\n} from '../util/events'\nimport {\n CalendarTimestamp,\n CalendarEventParsed,\n CalendarEventVisual,\n CalendarEventColorFunction,\n CalendarEventNameFunction,\n CalendarEventTimedFunction,\n CalendarDaySlotScope,\n CalendarDayBodySlotScope,\n CalendarEventOverlapMode,\n CalendarEvent,\n CalendarEventCategoryFunction,\n CalendarCategory,\n} from 'vuetify/types'\n\n// Types\ntype VEventGetter = (day: D) => CalendarEventParsed[]\n\ntype VEventVisualToNode = (visual: CalendarEventVisual, day: D) => VNode | false\n\ntype VEventsToNodes = (\n day: D,\n getter: VEventGetter,\n mapper: VEventVisualToNode,\n timed: boolean) => VNode[] | undefined\n\ntype VDailyEventsMap = {\n [date: string]: {\n parent: HTMLElement\n more: HTMLElement | null\n events: HTMLElement[]\n }\n}\n\ninterface VEventScopeInput {\n eventParsed: CalendarEventParsed\n day: CalendarDaySlotScope\n start: boolean\n end: boolean\n timed: boolean\n}\n\nconst WIDTH_FULL = 100\nconst WIDTH_START = 95\nconst MINUTES_IN_DAY = 1440\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'calendar-with-events',\n\n directives: {\n ripple,\n },\n\n props: {\n ...props.events,\n ...props.calendar,\n ...props.category,\n },\n\n computed: {\n noEvents (): boolean {\n return this.events.length === 0\n },\n parsedEvents (): CalendarEventParsed[] {\n return this.events.map(this.parseEvent)\n },\n parsedEventOverlapThreshold (): number {\n return parseInt(this.eventOverlapThreshold)\n },\n eventTimedFunction (): CalendarEventTimedFunction {\n return typeof this.eventTimed === 'function'\n ? this.eventTimed\n : event => !!event[this.eventTimed as string]\n },\n eventCategoryFunction (): CalendarEventCategoryFunction {\n return typeof this.eventCategory === 'function'\n ? this.eventCategory\n : event => event[this.eventCategory as string]\n },\n eventTextColorFunction (): CalendarEventColorFunction {\n return typeof this.eventTextColor === 'function'\n ? this.eventTextColor\n : () => this.eventTextColor as string\n },\n eventNameFunction (): CalendarEventNameFunction {\n return typeof this.eventName === 'function'\n ? this.eventName\n : (event, timedEvent) => event.input[this.eventName as string] as string || ''\n },\n eventModeFunction (): CalendarEventOverlapMode {\n return typeof this.eventOverlapMode === 'function'\n ? this.eventOverlapMode\n : CalendarEventOverlapModes[this.eventOverlapMode]\n },\n eventWeekdays (): number[] {\n return this.parsedWeekdays\n },\n categoryMode (): boolean {\n return this.type === 'category'\n },\n },\n\n methods: {\n eventColorFunction (e: CalendarEvent): string {\n return typeof this.eventColor === 'function'\n ? this.eventColor(e)\n : e.color || this.eventColor\n },\n parseEvent (input: CalendarEvent, index = 0): CalendarEventParsed {\n return parseEvent(\n input,\n index,\n this.eventStart,\n this.eventEnd,\n this.eventTimedFunction(input),\n this.categoryMode ? this.eventCategoryFunction(input) : false,\n )\n },\n formatTime (withTime: CalendarTimestamp, ampm: boolean): string {\n const formatter = this.getFormatter({\n timeZone: 'UTC',\n hour: 'numeric',\n minute: withTime.minute > 0 ? 'numeric' : undefined,\n })\n\n return formatter(withTime, true)\n },\n updateEventVisibility () {\n if (this.noEvents || !this.eventMore) {\n return\n }\n\n const eventHeight = this.eventHeight\n const eventsMap = this.getEventsMap()\n\n for (const date in eventsMap) {\n const { parent, events, more } = eventsMap[date]\n if (!more) {\n break\n }\n\n const parentBounds = parent.getBoundingClientRect()\n const last = events.length - 1\n const eventsSorted = events.map(event => ({\n event,\n bottom: event.getBoundingClientRect().bottom,\n })).sort((a, b) => a.bottom - b.bottom)\n let hidden = 0\n\n for (let i = 0; i <= last; i++) {\n const bottom = eventsSorted[i].bottom\n const hide = i === last\n ? (bottom > parentBounds.bottom)\n : (bottom + eventHeight > parentBounds.bottom)\n\n if (hide) {\n eventsSorted[i].event.style.display = 'none'\n hidden++\n }\n }\n\n if (hidden) {\n more.style.display = ''\n more.innerHTML = this.$vuetify.lang.t(this.eventMoreText, hidden)\n } else {\n more.style.display = 'none'\n }\n }\n },\n getEventsMap (): VDailyEventsMap {\n const eventsMap: VDailyEventsMap = {}\n const elements = this.$refs.events as HTMLElement[]\n\n if (!elements || !elements.forEach) {\n return eventsMap\n }\n\n elements.forEach(el => {\n const date = el.getAttribute('data-date')\n if (el.parentElement && date) {\n if (!(date in eventsMap)) {\n eventsMap[date] = {\n parent: el.parentElement,\n more: null,\n events: [],\n }\n }\n if (el.getAttribute('data-more')) {\n eventsMap[date].more = el\n } else {\n eventsMap[date].events.push(el)\n el.style.display = ''\n }\n }\n })\n\n return eventsMap\n },\n genDayEvent ({ event }: CalendarEventVisual, day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n const dayIdentifier = getDayIdentifier(day)\n const week = day.week\n const start = dayIdentifier === event.startIdentifier\n let end = dayIdentifier === event.endIdentifier\n let width = WIDTH_START\n\n if (!this.categoryMode) {\n for (let i = day.index + 1; i < week.length; i++) {\n const weekdayIdentifier = getDayIdentifier(week[i])\n if (event.endIdentifier >= weekdayIdentifier) {\n width += WIDTH_FULL\n end = end || weekdayIdentifier === event.endIdentifier\n } else {\n end = true\n break\n }\n }\n }\n const scope = { eventParsed: event, day, start, end, timed: false }\n\n return this.genEvent(event, scope, false, {\n staticClass: 'v-event',\n class: {\n 'v-event-start': start,\n 'v-event-end': end,\n },\n style: {\n height: `${eventHeight}px`,\n width: `${width}%`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n key: event.index,\n ref: 'events',\n refInFor: true,\n })\n },\n genTimedEvent ({ event, left, width }: CalendarEventVisual, day: CalendarDayBodySlotScope): VNode | false {\n if (day.timeDelta(event.end) < 0 || day.timeDelta(event.start) >= 1 || isEventHiddenOn(event, day)) {\n return false\n }\n\n const dayIdentifier = getDayIdentifier(day)\n const start = event.startIdentifier >= dayIdentifier\n const end = event.endIdentifier > dayIdentifier\n const top = start ? day.timeToY(event.start) : 0\n const bottom = end ? day.timeToY(MINUTES_IN_DAY) : day.timeToY(event.end)\n const height = Math.max(this.eventHeight, bottom - top)\n const scope = { eventParsed: event, day, start, end, timed: true }\n\n return this.genEvent(event, scope, true, {\n staticClass: 'v-event-timed',\n style: {\n top: `${top}px`,\n height: `${height}px`,\n left: `${left}%`,\n width: `${width}%`,\n },\n })\n },\n genEvent (event: CalendarEventParsed, scopeInput: VEventScopeInput, timedEvent: boolean, data: VNodeData): VNode {\n const slot = this.$scopedSlots.event\n const text = this.eventTextColorFunction(event.input)\n const background = this.eventColorFunction(event.input)\n const overlapsNoon = event.start.hour < 12 && event.end.hour >= 12\n const singline = diffMinutes(event.start, event.end) <= this.parsedEventOverlapThreshold\n const formatTime = this.formatTime\n const timeSummary = () => formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true)\n const eventSummary = () => {\n const name = this.eventNameFunction(event, timedEvent)\n if (event.start.hasTime) {\n if (timedEvent) {\n const time = timeSummary()\n const delimiter = singline ? ', ' : this.$createElement('br')\n\n return this.$createElement('span', { staticClass: 'v-event-summary' }, [\n this.$createElement('strong', [name]),\n delimiter,\n time,\n ])\n } else {\n const time = formatTime(event.start, true)\n\n return this.$createElement('span', { staticClass: 'v-event-summary' }, [\n this.$createElement('strong', [time]),\n ' ',\n name,\n ])\n }\n }\n\n return this.$createElement('span', { staticClass: 'v-event-summary' }, [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): VNode {\n return this.$createElement('div', {\n staticClass: 'pl-1',\n }, [eventSummary()])\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: this.getDefaultMouseEventHandlers(':more', nativeEvent => {\n return { nativeEvent, ...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 getVisibleEvents (): CalendarEventParsed[] {\n const start = getDayIdentifier(this.days[0])\n const end = getDayIdentifier(this.days[this.days.length - 1])\n\n return this.parsedEvents.filter(\n event => isEventOverlapping(event, start, end)\n )\n },\n isEventForCategory (event: CalendarEventParsed, category: CalendarCategory): boolean {\n return !this.categoryMode ||\n (typeof category === 'object' && category.categoryName &&\n category.categoryName === event.category) ||\n (typeof event.category === 'string' && category === event.category) ||\n (typeof event.category !== 'string' && category === null)\n },\n getEventsForDay (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n const firstWeekday = this.eventWeekdays[0]\n\n return this.parsedEvents.filter(\n event => isEventStart(event, day, identifier, firstWeekday)\n )\n },\n getEventsForDayAll (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n const firstWeekday = this.eventWeekdays[0]\n\n return this.parsedEvents.filter(\n event => event.allDay &&\n (this.categoryMode ? isEventOn(event, identifier) : isEventStart(event, day, identifier, firstWeekday)) &&\n this.isEventForCategory(event, day.category)\n )\n },\n getEventsForDayTimed (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n return this.parsedEvents.filter(\n event => !event.allDay &&\n isEventOn(event, identifier) &&\n this.isEventForCategory(event, day.category)\n )\n },\n getScopedSlots () {\n if (this.noEvents) {\n return { ...this.$scopedSlots }\n }\n\n const mode = this.eventModeFunction(\n this.parsedEvents,\n this.eventWeekdays[0],\n this.parsedEventOverlapThreshold\n )\n\n const isNode = (input: VNode | false): input is VNode => !!input\n const getSlotChildren: VEventsToNodes = (day, getter, mapper, timed) => {\n const events = getter(day)\n const visuals = mode(day, events, timed, this.categoryMode)\n\n if (timed) {\n return visuals.map(visual => mapper(visual, day)).filter(isNode)\n }\n\n const children: VNode[] = []\n\n visuals.forEach((visual, index) => {\n while (children.length < visual.column) {\n children.push(this.genPlaceholder(day))\n }\n\n const mapped = mapper(visual, day)\n if (mapped) {\n children.push(mapped)\n }\n })\n\n return children\n }\n\n const slots = this.$scopedSlots\n const slotDay = slots.day\n const slotDayHeader = slots['day-header']\n const slotDayBody = slots['day-body']\n\n return {\n ...slots,\n day: (day: CalendarDaySlotScope) => {\n let children = getSlotChildren(day, this.getEventsForDay, this.genDayEvent, false)\n if (children && children.length > 0 && this.eventMore) {\n children.push(this.genMore(day))\n }\n if (slotDay) {\n const slot = slotDay(day)\n if (slot) {\n children = children ? children.concat(slot) : slot\n }\n }\n return children\n },\n 'day-header': (day: CalendarDaySlotScope) => {\n let children = getSlotChildren(day, this.getEventsForDayAll, this.genDayEvent, false)\n\n if (slotDayHeader) {\n const slot = slotDayHeader(day)\n if (slot) {\n children = children ? children.concat(slot) : slot\n }\n }\n return children\n },\n 'day-body': (day: CalendarDayBodySlotScope) => {\n const events = getSlotChildren(day, this.getEventsForDayTimed, this.genTimedEvent, true)\n let children: VNode[] = [\n this.$createElement('div', {\n staticClass: 'v-event-timed-container',\n }, events),\n ]\n\n if (slotDayBody) {\n const slot = slotDayBody(day)\n if (slot) {\n children = children.concat(slot)\n }\n }\n return children\n },\n }\n },\n },\n})\n","// Styles\nimport './VCalendarWeekly.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Components\nimport VBtn from '../VBtn'\n\n// Mixins\nimport CalendarBase from './mixins/calendar-base'\n\n// Util\nimport { getSlot } from '../../util/helpers'\nimport { weekNumber } from '../../util/dateTimeUtils'\nimport props from './util/props'\nimport {\n createDayList,\n getDayIdentifier,\n createNativeLocaleFormatter,\n} from './util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'v-calendar-weekly',\n\n props: props.weeks,\n\n computed: {\n staticClass (): string {\n return 'v-calendar-weekly'\n },\n classes (): object {\n return this.themeClasses\n },\n parsedMinWeeks (): number {\n return parseInt(this.minWeeks)\n },\n days (): CalendarTimestamp[] {\n const minDays = this.parsedMinWeeks * this.parsedWeekdays.length\n const start = this.getStartOfWeek(this.parsedStart)\n const end = this.getEndOfWeek(this.parsedEnd)\n\n return createDayList(\n start,\n end,\n this.times.today,\n this.weekdaySkips,\n Number.MAX_SAFE_INTEGER,\n minDays\n )\n },\n todayWeek (): CalendarTimestamp[] {\n const today = this.times.today\n const start = this.getStartOfWeek(today)\n const end = this.getEndOfWeek(today)\n\n return createDayList(\n start,\n end,\n today,\n this.weekdaySkips,\n this.parsedWeekdays.length,\n this.parsedWeekdays.length\n )\n },\n monthFormatter (): CalendarFormatter {\n if (this.monthFormat) {\n return this.monthFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', month: 'long' }\n const shortOptions = { timeZone: 'UTC', month: 'short' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, short) => short ? shortOptions : longOptions\n )\n },\n },\n\n methods: {\n isOutside (day: CalendarTimestamp): boolean {\n const dayIdentifier = getDayIdentifier(day)\n\n return dayIdentifier < getDayIdentifier(this.parsedStart) ||\n dayIdentifier > getDayIdentifier(this.parsedEnd)\n },\n genHead (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__head',\n attrs: {\n role: 'row',\n },\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 attrs: {\n role: 'columnheader',\n },\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 attrs: {\n role: 'row',\n },\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 attrs: {\n role: 'cell',\n },\n on: this.getDefaultMouseEventHandlers(':day', nativeEvent => {\n return { nativeEvent, ...day }\n }),\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 }, nativeEvent => ({ nativeEvent, ...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', nativeEvent => {\n return { nativeEvent, ...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 }, nativeEvent => {\n return { nativeEvent, ...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', nativeEvent => {\n return { nativeEvent, ...this.getSlotScope(this.getTimestampAtEvent(nativeEvent, 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\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', nativeEvent => {\n return { nativeEvent, ...this.getTimestampAtEvent(nativeEvent, this.parsedStart) }\n }),\n }\n\n return this.$createElement('div', data, this.genIntervalLabels())\n },\n genIntervalLabels (): VNode[] | null {\n if (!this.intervals.length) return null\n\n return this.intervals[0].map(this.genIntervalLabel)\n },\n genIntervalLabel (interval: CalendarTimestamp): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const short: boolean = this.shortIntervals\n const shower = this.showIntervalLabel || this.showIntervalLabelDefault\n const show = shower(interval)\n const label = show ? this.intervalFormatter(interval, short) : undefined\n\n return this.$createElement('div', {\n key: interval.time,\n staticClass: 'v-calendar-daily__interval',\n style: {\n height,\n },\n }, [\n this.$createElement('div', {\n staticClass: 'v-calendar-daily__interval-text',\n }, label),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n class: this.classes,\n on: {\n dragstart: (e: MouseEvent) => {\n e.preventDefault()\n },\n },\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.onResize,\n }],\n }, [\n !this.hideHeader ? this.genHead() : '',\n this.genBody(),\n ])\n },\n})\n","import { CalendarCategory, CalendarCategoryTextFunction } from 'types'\n\nexport function parsedCategoryText (\n category: CalendarCategory,\n categoryText: string | CalendarCategoryTextFunction\n): string {\n return typeof categoryText === 'string' && typeof category === 'object' && category\n ? category[categoryText]\n : typeof categoryText === 'function'\n ? categoryText(category)\n : category\n}\n\nexport function getParsedCategories (\n categories: CalendarCategory | CalendarCategory[],\n categoryText: string | CalendarCategoryTextFunction\n): CalendarCategory[] {\n if (typeof categories === 'string') return categories.split(/\\s*,\\s/)\n if (Array.isArray(categories)) {\n return categories.map((category: CalendarCategory) => {\n if (typeof category === 'string') return category\n\n const categoryName = typeof category.categoryName === 'string'\n ? category.categoryName\n : parsedCategoryText(category, categoryText)\n return { ...category, categoryName }\n })\n }\n return []\n}\n","// Styles\nimport './VCalendarCategory.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Mixins\nimport VCalendarDaily from './VCalendarDaily'\n\n// Util\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { CalendarCategory, CalendarTimestamp } from 'types'\nimport props from './util/props'\nimport { getParsedCategories } from './util/parser'\n\n/* @vue/component */\nexport default VCalendarDaily.extend({\n name: 'v-calendar-category',\n\n props: props.category,\n\n computed: {\n classes (): object {\n return {\n 'v-calendar-daily': true,\n 'v-calendar-category': true,\n ...this.themeClasses,\n }\n },\n parsedCategories (): CalendarCategory[] {\n return getParsedCategories(this.categories, this.categoryText)\n },\n },\n methods: {\n genDayHeader (day: CalendarTimestamp, index: number): VNode[] {\n const data = {\n staticClass: 'v-calendar-category__columns',\n }\n const scope = {\n week: this.days, ...day, index,\n }\n\n const children = this.parsedCategories.map(category => {\n return this.genDayHeaderCategory(day, this.getCategoryScope(scope, category))\n })\n\n return [this.$createElement('div', data, children)]\n },\n getCategoryScope (scope: any, category: CalendarCategory) {\n const cat = typeof category === 'object' && category &&\n category.categoryName === this.categoryForInvalid ? null : category\n return {\n ...scope,\n category: cat,\n }\n },\n genDayHeaderCategory (day: CalendarTimestamp, scope: any): VNode {\n const headerTitle = typeof scope.category === 'object' ? scope.category.categoryName : scope.category\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__column-header',\n on: this.getDefaultMouseEventHandlers(':day-category', e => {\n return this.getCategoryScope(this.getSlotScope(day), scope.category)\n }),\n }, [\n getSlot(this, 'category', scope) || this.genDayHeaderCategoryTitle(headerTitle),\n getSlot(this, 'day-header', scope),\n ])\n },\n genDayHeaderCategoryTitle (categoryName: string | null) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__category',\n }, categoryName === null ? this.categoryForInvalid : categoryName)\n },\n genDays (): VNode[] {\n const days: VNode[] = []\n this.days.forEach((d, j) => {\n const day = new Array(this.parsedCategories.length || 1)\n day.fill(d)\n days.push(...day.map((v, i) => this.genDay(v, j, i)))\n })\n return days\n },\n genDay (day: CalendarTimestamp, index: number, categoryIndex: number): VNode {\n const category = this.parsedCategories[categoryIndex]\n return this.$createElement('div', {\n key: day.date + '-' + categoryIndex,\n staticClass: 'v-calendar-daily__day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':time', e => {\n return this.getSlotScope(this.getTimestampAtEvent(e, day))\n }),\n }, [\n ...this.genDayIntervals(index, category),\n ...this.genDayBody(day, category),\n ])\n },\n genDayIntervals (index: number, category: CalendarCategory): VNode[] {\n return this.intervals[index].map(v => this.genDayInterval(v, category))\n },\n genDayInterval (interval: CalendarTimestamp, category: CalendarCategory): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const styler = this.intervalStyle || this.intervalStyleDefault\n\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler({ ...interval, category }),\n },\n }\n\n const children = getSlot(this, 'interval', () =>\n this.getCategoryScope(this.getSlotScope(interval), category)\n )\n\n return this.$createElement('div', data, children)\n },\n genDayBody (day: CalendarTimestamp, category: CalendarCategory): VNode[] {\n const data = {\n staticClass: 'v-calendar-category__columns',\n }\n\n const children = [this.genDayBodyCategory(day, category)]\n\n return [this.$createElement('div', data, children)]\n },\n genDayBodyCategory (day: CalendarTimestamp, category: CalendarCategory): VNode {\n const data = {\n staticClass: 'v-calendar-category__column',\n on: this.getDefaultMouseEventHandlers(':time-category', e => {\n return this.getCategoryScope(this.getSlotScope(this.getTimestampAtEvent(e, day)), category)\n }),\n }\n\n const children = getSlot(this, 'day-body', () => this.getCategoryScope(this.getSlotScope(day), category))\n\n return this.$createElement('div', data, children)\n },\n },\n})\n","// Styles\n// import '../../stylus/components/_calendar-daily.styl'\n\n// Types\nimport { VNode, Component } from 'vue'\n\n// Mixins\nimport CalendarWithEvents from './mixins/calendar-with-events'\n\n// Util\nimport props from './util/props'\nimport {\n DAYS_IN_MONTH_MAX,\n DAY_MIN,\n DAYS_IN_WEEK,\n parseTimestamp,\n validateTimestamp,\n relativeDays,\n nextDay,\n prevDay,\n copyTimestamp,\n updateFormatted,\n updateWeekday,\n updateRelative,\n getStartOfMonth,\n getEndOfMonth,\n VTime,\n VTimestampInput,\n timestampToDate,\n} from './util/timestamp'\n\n// Calendars\nimport VCalendarMonthly from './VCalendarMonthly'\nimport VCalendarDaily from './VCalendarDaily'\nimport VCalendarWeekly from './VCalendarWeekly'\nimport VCalendarCategory from './VCalendarCategory'\nimport { CalendarTimestamp, CalendarFormatter, CalendarCategory } from 'vuetify/types'\nimport { getParsedCategories } from './util/parser'\n\n// Types\ninterface VCalendarRenderProps {\n start: CalendarTimestamp\n end: CalendarTimestamp\n component: string | Component\n maxDays: number\n weekdays: number[]\n categories: CalendarCategory[]\n}\n\n/* @vue/component */\nexport default CalendarWithEvents.extend({\n name: 'v-calendar',\n\n props: {\n ...props.calendar,\n ...props.weeks,\n ...props.intervals,\n ...props.category,\n },\n\n data: () => ({\n lastStart: null as CalendarTimestamp | null,\n lastEnd: null as CalendarTimestamp | null,\n }),\n\n computed: {\n parsedValue (): CalendarTimestamp {\n return (validateTimestamp(this.value)\n ? parseTimestamp(this.value, true)\n : (this.parsedStart || this.times.today))\n },\n parsedCategoryDays (): number {\n return parseInt(this.categoryDays) || 1\n },\n renderProps (): VCalendarRenderProps {\n const around = this.parsedValue\n let component: any = null\n let maxDays = this.maxDays\n let weekdays = this.parsedWeekdays\n let categories = this.parsedCategories\n let start = around\n let end = around\n switch (this.type) {\n case 'month':\n component = VCalendarMonthly\n start = getStartOfMonth(around)\n end = getEndOfMonth(around)\n break\n case 'week':\n component = VCalendarDaily\n start = this.getStartOfWeek(around)\n end = this.getEndOfWeek(around)\n maxDays = 7\n break\n case 'day':\n component = VCalendarDaily\n maxDays = 1\n weekdays = [start.weekday]\n break\n case '4day':\n component = VCalendarDaily\n end = relativeDays(copyTimestamp(end), nextDay, 3)\n updateFormatted(end)\n maxDays = 4\n weekdays = [\n start.weekday,\n (start.weekday + 1) % 7,\n (start.weekday + 2) % 7,\n (start.weekday + 3) % 7,\n ]\n break\n case 'custom-weekly':\n component = VCalendarWeekly\n start = this.parsedStart || around\n end = this.parsedEnd\n break\n case 'custom-daily':\n component = VCalendarDaily\n start = this.parsedStart || around\n end = this.parsedEnd\n break\n case 'category':\n const days = this.parsedCategoryDays\n\n component = VCalendarCategory\n end = relativeDays(copyTimestamp(end), nextDay, days)\n updateFormatted(end)\n maxDays = days\n weekdays = []\n\n for (let i = 0; i < days; i++) {\n weekdays.push((start.weekday + i) % 7)\n }\n\n categories = this.getCategoryList(categories)\n break\n default:\n throw new Error(this.type + ' is not a valid Calendar type')\n }\n\n return { component, start, end, maxDays, weekdays, categories }\n },\n eventWeekdays (): number[] {\n return this.renderProps.weekdays\n },\n categoryMode (): boolean {\n return this.type === 'category'\n },\n title (): string {\n const { start, end } = this.renderProps\n const spanYears = start.year !== end.year\n const spanMonths = spanYears || start.month !== end.month\n\n if (spanYears) {\n return this.monthShortFormatter(start, true) + ' ' + start.year + ' - ' + this.monthShortFormatter(end, true) + ' ' + end.year\n }\n\n if (spanMonths) {\n return this.monthShortFormatter(start, true) + ' - ' + this.monthShortFormatter(end, true) + ' ' + end.year\n } else {\n return this.monthLongFormatter(start, false) + ' ' + start.year\n }\n },\n monthLongFormatter (): CalendarFormatter {\n return this.getFormatter({\n timeZone: 'UTC', month: 'long',\n })\n },\n monthShortFormatter (): CalendarFormatter {\n return this.getFormatter({\n timeZone: 'UTC', month: 'short',\n })\n },\n parsedCategories (): CalendarCategory[] {\n return getParsedCategories(this.categories, this.categoryText)\n },\n },\n\n watch: {\n renderProps: 'checkChange',\n },\n\n mounted () {\n this.updateEventVisibility()\n this.checkChange()\n },\n\n updated () {\n window.requestAnimationFrame(this.updateEventVisibility)\n },\n\n methods: {\n checkChange (): void {\n const { lastStart, lastEnd } = this\n const { start, end } = this.renderProps\n if (!lastStart || !lastEnd ||\n start.date !== lastStart.date ||\n end.date !== lastEnd.date) {\n this.lastStart = start\n this.lastEnd = end\n this.$emit('change', { start, end })\n }\n },\n move (amount = 1): void {\n const moved = copyTimestamp(this.parsedValue)\n const forward = amount > 0\n const mover = forward ? nextDay : prevDay\n const limit = forward ? DAYS_IN_MONTH_MAX : DAY_MIN\n let times = forward ? amount : -amount\n\n while (--times >= 0) {\n switch (this.type) {\n case 'month':\n moved.day = limit\n mover(moved)\n break\n case 'week':\n relativeDays(moved, mover, DAYS_IN_WEEK)\n break\n case 'day':\n relativeDays(moved, mover, 1)\n break\n case '4day':\n relativeDays(moved, mover, 4)\n break\n case 'category':\n relativeDays(moved, mover, this.parsedCategoryDays)\n break\n }\n }\n\n updateWeekday(moved)\n updateFormatted(moved)\n updateRelative(moved, this.times.now)\n\n if (this.value instanceof Date) {\n this.$emit('input', timestampToDate(moved))\n } else if (typeof this.value === 'number') {\n this.$emit('input', timestampToDate(moved).getTime())\n } else {\n this.$emit('input', moved.date)\n }\n\n this.$emit('moved', moved)\n },\n next (amount = 1): void {\n this.move(amount)\n },\n prev (amount = 1): void {\n this.move(-amount)\n },\n timeToY (time: VTime, clamp = true): number | false {\n const c = this.$children[0] as any\n\n if (c && c.timeToY) {\n return c.timeToY(time, clamp)\n } else {\n return false\n }\n },\n timeDelta (time: VTime): number | false {\n const c = this.$children[0] as any\n\n if (c && c.timeDelta) {\n return c.timeDelta(time)\n } else {\n return false\n }\n },\n minutesToPixels (minutes: number): number {\n const c = this.$children[0] as any\n\n if (c && c.minutesToPixels) {\n return c.minutesToPixels(minutes)\n } else {\n return -1\n }\n },\n scrollToTime (time: VTime): boolean {\n const c = this.$children[0] as any\n\n if (c && c.scrollToTime) {\n return c.scrollToTime(time)\n } else {\n return false\n }\n },\n parseTimestamp (input: VTimestampInput, required?: false): CalendarTimestamp | null {\n return parseTimestamp(input, required, this.times.now)\n },\n timestampToDate (timestamp: CalendarTimestamp): Date {\n return timestampToDate(timestamp)\n },\n getCategoryList (categories: CalendarCategory[]): CalendarCategory[] {\n if (!this.noEvents) {\n const categoryMap: any = categories.reduce((map: any, category, index) => {\n if (typeof category === 'object' && category.categoryName) map[category.categoryName] = { index, count: 0 }\n else if (typeof category === 'string') map[category] = { index, count: 0 }\n return map\n }, {})\n\n if (!this.categoryHideDynamic || !this.categoryShowAll) {\n let categoryLength = categories.length\n\n this.parsedEvents.forEach(ev => {\n let category = ev.category\n\n if (typeof category !== 'string') {\n category = this.categoryForInvalid\n }\n\n if (!category) {\n return\n }\n\n if (category in categoryMap) {\n categoryMap[category].count++\n } else if (!this.categoryHideDynamic) {\n categoryMap[category] = {\n index: categoryLength++,\n count: 1,\n }\n }\n })\n }\n\n if (!this.categoryShowAll) {\n for (const category in categoryMap) {\n if (categoryMap[category].count === 0) {\n delete categoryMap[category]\n }\n }\n }\n\n categories = categories.filter((category: CalendarCategory) => {\n if (typeof category === 'object' && category.categoryName) {\n return categoryMap.hasOwnProperty(category.categoryName)\n } else if (typeof category === 'string') {\n return categoryMap.hasOwnProperty(category)\n }\n return false\n })\n }\n return categories\n },\n },\n\n render (h): VNode {\n const { start, end, maxDays, component, weekdays, categories } = this.renderProps\n\n return h(component, {\n staticClass: 'v-calendar',\n class: {\n 'v-calendar-events': !this.noEvents,\n },\n props: {\n ...this.$props,\n start: start.date,\n end: end.date,\n maxDays,\n weekdays,\n categories,\n },\n attrs: {\n role: 'grid',\n },\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.updateEventVisibility,\n }],\n on: {\n ...this.$listeners,\n\n 'click:date': (day: CalendarTimestamp, e?: MouseEvent) => {\n if (this.$listeners.input) {\n this.$emit('input', day.date)\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","import { render, staticRenderFns } from \"./Calendar.vue?vue&type=template&id=1b424306&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=1b424306&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b424306\",\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 { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCalendar } from 'vuetify/lib/components/VCalendar';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSheet } from 'vuetify/lib/components/VSheet';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCalendar,VCard,VCardActions,VCardText,VCardTitle,VCol,VDialog,VIcon,VLayout,VList,VListItem,VListItemTitle,VMenu,VRow,VSheet,VSpacer,VToolbar,VToolbarTitle})\n","// Directives\nimport ripple from '../../directives/ripple'\n\n// Types\nimport Vue, { VNode, VNodeData, VNodeDirective } from 'vue'\n\nexport default Vue.extend({\n name: 'rippleable',\n\n directives: { ripple },\n\n props: {\n ripple: {\n type: [Boolean, Object],\n default: true,\n },\n },\n\n methods: {\n genRipple (data: VNodeData = {}): VNode | null {\n if (!this.ripple) return null\n\n data.staticClass = 'v-input--selection-controls__ripple'\n\n data.directives = data.directives || []\n data.directives.push({\n name: 'ripple',\n value: { center: true },\n } as VNodeDirective)\n\n return this.$createElement('div', data)\n },\n },\n})\n","// Components\nimport VInput from '../../components/VInput'\n\n// Mixins\nimport Rippleable from '../rippleable'\nimport Comparable from '../comparable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\nexport function prevent (e: Event) {\n e.preventDefault()\n}\n\n/* @vue/component */\nexport default mixins(\n VInput,\n Rippleable,\n Comparable\n).extend({\n name: 'selectable',\n\n model: {\n prop: 'inputValue',\n event: 'change',\n },\n\n props: {\n id: String,\n inputValue: null as any,\n falseValue: null as any,\n trueValue: null as any,\n multiple: {\n type: Boolean,\n default: null,\n },\n label: String,\n },\n\n data () {\n return {\n hasColor: this.inputValue,\n lazyValue: this.inputValue,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (!this.isActive) return undefined\n if (this.color) return this.color\n if (this.isDark && !this.appIsDark) return 'white'\n return 'primary'\n },\n isMultiple (): boolean {\n return this.multiple === true || (this.multiple === null && Array.isArray(this.internalValue))\n },\n isActive (): boolean {\n const value = this.value\n const input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) return false\n\n return input.some(item => this.valueComparator(item, value))\n }\n\n if (this.trueValue === undefined || this.falseValue === undefined) {\n return value\n ? this.valueComparator(value, input)\n : Boolean(input)\n }\n\n return this.valueComparator(input, this.trueValue)\n },\n isDirty (): boolean {\n return this.isActive\n },\n rippleState (): string | undefined {\n return !this.isDisabled && !this.validationState\n ? undefined\n : this.validationState\n },\n },\n\n watch: {\n inputValue (val) {\n this.lazyValue = val\n this.hasColor = val\n },\n },\n\n methods: {\n genLabel () {\n const label = VInput.options.methods.genLabel.call(this)\n\n if (!label) return label\n\n label!.data!.on = {\n // Label shouldn't cause the input to focus\n click: prevent,\n }\n\n return label\n },\n genInput (type: string, attrs: object) {\n return this.$createElement('input', {\n attrs: Object.assign({\n 'aria-checked': this.isActive.toString(),\n disabled: this.isDisabled,\n id: this.computedId,\n role: type,\n type,\n }, attrs),\n domProps: {\n value: this.value,\n checked: this.isActive,\n },\n on: {\n blur: this.onBlur,\n change: this.onChange,\n focus: this.onFocus,\n keydown: this.onKeydown,\n click: prevent,\n },\n ref: 'input',\n })\n },\n onClick (e: Event) {\n this.onChange()\n this.$emit('click', e)\n },\n onChange () {\n if (!this.isInteractive) return\n\n const value = this.value\n let input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) {\n input = []\n }\n\n const length = input.length\n\n input = input.filter((item: any) => !this.valueComparator(item, value))\n\n if (input.length === length) {\n input.push(value)\n }\n } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue\n } else if (value) {\n input = this.valueComparator(input, value) ? null : value\n } else {\n input = !input\n }\n\n this.validate(true, input)\n this.internalValue = input\n this.hasColor = input\n },\n onFocus (e: FocusEvent) {\n this.isFocused = true\n this.$emit('focus', e)\n },\n onBlur (e: FocusEvent) {\n this.isFocused = false\n this.$emit('blur', e)\n },\n /** @abstract */\n onKeydown (e: Event) {},\n },\n})\n","// Styles\nimport './VCheckbox.sass'\nimport '../../styles/components/_selection-controls.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport VInput from '../VInput'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\n\n/* @vue/component */\nexport default Selectable.extend({\n name: 'v-checkbox',\n\n props: {\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n },\n\n data () {\n return {\n inputIndeterminate: this.indeterminate,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls': true,\n 'v-input--checkbox': true,\n 'v-input--indeterminate': this.inputIndeterminate,\n }\n },\n computedIcon (): string {\n if (this.inputIndeterminate) {\n return this.indeterminateIcon\n } else if (this.isActive) {\n return this.onIcon\n } else {\n return this.offIcon\n }\n },\n // Do not return undefined if disabled,\n // according to spec, should still show\n // a color when disabled and active\n validationState (): string | undefined {\n if (this.isDisabled && !this.inputIndeterminate) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor !== null) return this.computedColor\n return undefined\n },\n },\n\n watch: {\n indeterminate (val) {\n // https://github.com/vuetifyjs/vuetify/issues/8270\n this.$nextTick(() => (this.inputIndeterminate = val))\n },\n inputIndeterminate (val) {\n this.$emit('update:indeterminate', val)\n },\n isActive () {\n if (!this.indeterminate) return\n this.inputIndeterminate = false\n },\n },\n\n methods: {\n genCheckbox () {\n const { title, ...checkboxAttrs } = this.attrs$\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.$createElement(VIcon, this.setTextColor(this.validationState, {\n props: {\n dense: this.dense,\n dark: this.dark,\n light: this.light,\n },\n }), this.computedIcon),\n this.genInput('checkbox', {\n ...checkboxAttrs,\n 'aria-checked': this.inputIndeterminate\n ? 'mixed'\n : this.isActive.toString(),\n }),\n this.genRipple(this.setTextColor(this.rippleState)),\n ])\n },\n genDefaultSlot () {\n return [\n this.genCheckbox(),\n this.genLabel(),\n ]\n },\n },\n})\n","import axios from 'axios'\r\nimport API from './index'\r\nexport default {\r\n get(start, end) {\r\n // const proxyurl = 'https://cors-anywhere.herokuapp.com/'\r\n\r\n const url = API.BASE_URL + 'CalendarEvents?start=' + start + \"&end=\" + end \r\n return axios\r\n .get(url, {})\r\n .then(response => {\r\n return response.data\r\n })\r\n },\r\n\r\n getEvent(eventId) {\r\n const url = API.BASE_URL + 'CalendarEvents/' + eventId\r\n return axios\r\n .get(url, {\r\n })\r\n .then(response => {\r\n return response.data\r\n })\r\n },\r\n\r\n create(evt) {\r\n const url = API.BASE_URL + 'CalendarEvents'\r\n return axios\r\n .post(url, {\r\n calendarEventId: evt.calendarEventId,\r\n title: evt.title,\r\n description: evt.description,\r\n startDate: evt.startDate,\r\n endDate: evt.endDate,\r\n isAllDay: evt.isAllDay,\r\n eventColorId: evt.eventColorId,\r\n url: evt.url,\r\n })\r\n .then(response => {\r\n return response.data\r\n })\r\n },\r\n\r\n update(evt) {\r\n const url = API.BASE_URL + 'CalendarEvents/' + evt.calendarEventId\r\n return axios\r\n .put(url, {\r\n calendarEventId: evt.calendarEventId,\r\n title: evt.title,\r\n description: evt.description,\r\n startDate: evt.startDate,\r\n endDate: evt.endDate,\r\n isAllDay: evt.isAllDay,\r\n eventColorId: evt.eventColorId,\r\n url: evt.url,\r\n })\r\n .then(response => {\r\n return response.data\r\n })\r\n },\r\n\r\n delete(id) {\r\n const url = API.BASE_URL + 'CalendarEvents/' + id\r\n return axios\r\n .delete(url, {})\r\n .then(response => {\r\n return response.data\r\n })\r\n },\r\n\r\n}\r\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, getData: MouseHandler, eventFirst = false): MouseEventsMap {\n const listeners = Object.keys(this.$listeners)\n .filter(key => key.endsWith(suffix))\n .reduce((acc, key) => {\n acc[key] = { event: key.slice(0, -suffix.length) }\n return acc\n }, {} as MouseEvents)\n\n return this.getMouseEventHandlers({\n ...listeners,\n ['contextmenu' + suffix]: { event: 'contextmenu', prevent: true, result: false },\n }, getData, eventFirst)\n },\n getMouseEventHandlers (events: MouseEvents, getData: MouseHandler, eventFirst = false): MouseEventsMap {\n const on: MouseEventsMap = {}\n\n for (const event in events) {\n const eventOptions = events[event]\n\n if (!this.$listeners[event]) continue\n\n // TODO somehow pull in modifiers\n\n const prefix = eventOptions.passive ? '&' : ((eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : ''))\n const key = prefix + eventOptions.event\n\n const handler: MouseHandler = e => {\n const mouseEvent: MouseEvent = e as MouseEvent\n if (eventOptions.button === undefined || (mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button)) {\n if (eventOptions.prevent) {\n e.preventDefault()\n }\n if (eventOptions.stop) {\n e.stopPropagation()\n }\n\n // Due to TouchEvent target always returns the element that is first placed\n // Even if touch point has since moved outside the interactive area of that element\n // Ref: https://developer.mozilla.org/en-US/docs/Web/API/Touch/target\n // This block of code aims to make sure touchEvent is always dispatched from the element that is being pointed at\n if (e && 'touches' in e) {\n const classSeparator = ' '\n\n const eventTargetClasses = (e.currentTarget as HTMLElement)?.className.split(classSeparator)\n const currentTargets = document.elementsFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY)\n\n // 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 const currentTarget = currentTargets.find(t => t.className.split(classSeparator).some(c => eventTargetClasses.includes(c)))\n\n if (currentTarget &&\n !(e.target as HTMLElement)?.isSameNode(currentTarget)\n ) {\n currentTarget.dispatchEvent(new TouchEvent(e.type, {\n changedTouches: e.changedTouches as unknown as Touch[],\n targetTouches: e.targetTouches as unknown as Touch[],\n touches: e.touches as unknown as Touch[],\n }))\n return\n }\n }\n\n // TODO: VCalendar emits the calendar event as the first argument,\n // but it really should be the native event instead so modifiers can be used\n if (eventFirst) {\n this.$emit(event, e, getData(e))\n } else {\n this.$emit(event, getData(e), e)\n }\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","import axios from 'axios'\r\nimport API from './index'\r\nimport DateService from '../manager/DateService.js'\r\n\r\nexport default {\r\n get() {\r\n const url = API.BASE_URL + 'Events'\r\n console.log(\"apiUrl: \", url)\r\n return axios\r\n .get(url, {\r\n })\r\n .then(response => {\r\n return response.data\r\n })\r\n },\r\n\r\n getEvent(eventId) {\r\n const url = API.BASE_URL + 'Events/' + eventId\r\n return axios\r\n .get(url, {\r\n })\r\n .then(response => {\r\n return response.data\r\n })\r\n },\r\n getEventDocuments(eventId){\r\n const url = API.BASE_URL + 'Events/GetEventDocuments/' + eventId\r\n return axios\r\n .get(url, {\r\n })\r\n .then(response => {\r\n return response.data\r\n })\r\n },\r\n create(evt) {\r\n const url = API.BASE_URL + 'Events'\r\n return axios\r\n .post(url, {\r\n eventId: evt.eventId,\r\n course: evt.course,\r\n description: evt.description,\r\n entryFee: evt.entryFee,\r\n eventEnd: evt.eventEnd,\r\n eventStart: evt.eventStart,\r\n signUpEnd: evt.signUpEnd,\r\n signUpStart: evt.signUpStart,\r\n start: evt.start,\r\n title: evt.title,\r\n })\r\n .then(response => {\r\n return response\r\n })\r\n },\r\n\r\n update(evt) {\r\n const url = API.BASE_URL + 'Events/' + evt.eventId\r\n return axios\r\n .put(url, {\r\n eventId: evt.eventId,\r\n course: evt.course,\r\n description: evt.description,\r\n entryFee: evt.entryFee,\r\n eventEnd: evt.eventEnd,\r\n eventStart: evt.eventStart,\r\n signUpEnd: evt.signUpEnd,\r\n signUpStart: evt.signUpStart,\r\n start: evt.start,\r\n title: evt.title,\r\n })\r\n .then(response => {\r\n return response\r\n })\r\n },\r\n\r\n delete(id) {\r\n const url = API.BASE_URL + 'Events/' + id\r\n return axios\r\n .delete(url, {})\r\n .then(response => {\r\n return response\r\n })\r\n },\r\n\r\n canSignup(startDate, endDate) {\r\n var start = new Date(startDate)\r\n var end = new Date(endDate)\r\n var today = new Date()\r\n\r\n var can = today > start && today <= end\r\n return can\r\n },\r\n\r\n getSignupMessage(startDate, endDate) {\r\n var start = new Date(startDate)\r\n var end = new Date(endDate)\r\n var today = new Date()\r\n let message = ''\r\n if (start <= today && today <= end) {\r\n message = 'Go to https://unknowngolf.com to signup'\r\n } else if (today > end) {\r\n message =\r\n 'Signup is closed'\r\n } else if (today < start) {\r\n message = 'Signup will start ' + DateService.convertDate(startDate, true)\r\n }\r\n\r\n return message\r\n },\r\n}\r\n"],"sourceRoot":""}