{"version":3,"sources":["webpack:///./src/common/utils/fileUtils.ts","webpack:///./src/common/filters/format-time.ts","webpack:///./src/common/components/CDeleteConfirm.vue?5439","webpack:///./src/common/components/CDeleteConfirm.vue","webpack:///./src/common/components/CDeleteConfirm.vue?7057","webpack:///./src/common/components/CDeleteConfirm.vue?5752","webpack:///./src/common/components/CDeleteConfirm.vue?b3c3","webpack:///./src/common/filters/format-date.ts","webpack:///../../src/util/dateTimeUtils.ts","webpack:///./src/common/validators/rules.ts","webpack:///./src/store/fixtures-api.ts","webpack:///./src/store/venues-api.ts","webpack:///./src/components/fixtures/FixtureItem.vue?722d","webpack:///./src/store/teams-api.ts","webpack:///./src/components/fixtures/FixtureSubscriptionVerify.vue?a968","webpack:///./src/components/fixtures/FixtureSubscriptionVerify.vue","webpack:///./src/components/fixtures/FixtureSubscriptionVerify.vue?2944","webpack:///./src/components/fixtures/FixtureSubscriptionVerify.vue?790f","webpack:///./src/components/fixtures/FixtureItem.vue?1a5b","webpack:///./src/components/fixtures/FixtureItem.vue","webpack:///./src/components/fixtures/FixtureItem.vue?19c4","webpack:///./src/components/fixtures/FixtureItem.vue?f82f","webpack:///./src/store/notifications-api.ts","webpack:///../../../src/mixins/localable/index.ts","webpack:///./src/components/fixtures/Calendar.vue?5ec1","webpack:///./src/components/fixtures/Calendar.vue","webpack:///./src/components/fixtures/Calendar.vue?39ae","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/components/fixtures/Calendar.vue?c5bf","webpack:///../../../../src/components/VCalendar/util/timestamp.ts","webpack:///../../../src/mixins/mouse/index.ts","webpack:///./src/components/fixtures/FixtureSubscriptionSignup.vue?f81b","webpack:///./src/components/fixtures/FixtureSubscriptionSignup.vue","webpack:///./src/components/fixtures/FixtureSubscriptionSignup.vue?e7af","webpack:///./src/components/fixtures/FixtureSubscriptionSignup.vue?5135"],"names":["objectToFormData","obj","formData","options","pre","this","isFormData","indices","FormData","isUndefined","isNull","isArray","forEach","value","index","key","isFile","isDate","append","toISOString","isObject","isBlob","name","Object","keys","prop","length","lastIndexOf","substring","undefined","Array","Date","size","type","slice","lastModifiedDate","lastModified","render","_vm","_h","$createElement","_c","_self","class","hasActivator","attrs","model","callback","$$v","dialog","expression","_v","_t","_s","titleText","on","close","confirmed","click","open","staticRenderFns","item","$scopedSlots","activator","title","Function","CDeleteConfirm","components","VProgressLinear","VForm","VDivider","component","VBtn","VCard","VCardActions","VCardText","VCardTitle","VDialog","VSpacer","createUTCDate","month","day","year","date","isFinite","firstWeekOffset","firstWeekDayInFirstWeek","firstDayOfWeek","firstWeekDayOfYear","dayOfYear","isLeapYear","weeksInYear","weekOffset","weekOffsetNext","daysInYear","week","Math","required","v","toString","trim","maxLength","email","test","requiredIf","other","message","getAll","teamId","range","get","params","getCalendarEvents","start","end","venueIds","teamIds","eventType","fixtureId","Promise","resolve","data","minute","home","save","fixture","id","put","post","delete","getOptions","venue","venueId","teamCategory","getPrevious","team","dialogOpen","loading","staticClass","fail","$event","notificationsStore","token","verify","then","catch","FixtureSubscriptionVerify","mapUri","_f","dateTime","address","played","competitive","homeScore","isWin","opponentScore","_e","competition","opponentUri","opponent","edit","ref","deleteConfirmed","scopedSlots","_u","fn","_g","fixturesStore","active","Boolean","default","FixtureItem","filters","formatTime","formatDate","VAvatar","VCol","VIcon","VImg","VListItem","VListItemAvatar","VListItemContent","VList","VListItemSubtitle","VListItemTitle","VRow","VSubheader","signup","props","locale","String","computed","currentLocale","$vuetify","lang","setToday","prev","next","$refs","_b","typeToLabel","eventTypes","filtersChanged","venues","teams","weekdays","events","getEventColor","selectEvent","getEvents","focus","selectedOpen","selectedEvent","gameTitle","fixtureStore","venuesStore","teamsStore","selectedElement","text","calendar","mounted","res","$route","query","lastStart","lastEnd","nativeEvent","event","target","setTimeout","stopPropagation","Calendar","FixtureSubscriptionSignup","now","validator","times","today","parsedNow","watch","created","methods","setPresent","present","past","future","updateTimes","getNow","updateDay","updateTime","MILLIS_IN_DAY","minStart","visuals","columnCount","column","left","width","a","b","exclude","s0","e0","groups","group","groupVisual","dayStart","i","intersected","hasOverlap","k","timed","getRange","getDayRange","groupStart","groupEnd","handler","min","max","reset","getVisuals","dayEvents","visual","setColumnCount","targetGroup","getOpenGroup","FULL_WIDTH","DEFAULT_OFFSET","WIDTH_MULTIPLIER","firstWeekday","overlapThreshold","getOverlapGroupHandler","getGroups","nodes","child","getNode","getNextIndex","parent","getParent","addTime","getOverlappingRange","children","grand","grandNext","calculateBounds","columns","getMaxChildIndex","spaceLeft","spaceWidth","offset","columnWidthMultiplier","getColumnWidthMultiplier","node","columnOffset","columnWidth","hasFullWidth","maxColumn","minColumn","c","getOverlappingIndices","returnFirstColumn","overlapping","first","n","getNormalizedRange","added","sibling","childMax","removeMinutes","identifier","totalMinutes","addHours","addMinutes","CalendarEventOverlapModes","stack","base","Number","validate","validateWeekdays","hideHeader","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","categoryHideDynamic","categoryShowAll","categoryForInvalid","categoryDays","x","parseInt","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventName","eventOverlapThreshold","eventOverlapMode","mode","eventMore","eventMoreText","eventRipple","eventMarginBottom","input","ints","visited","wrapped","d","mixins","directives","Resize","parsedWeekdays","weekdaySkips","weekdaySkipsReverse","reversed","reverse","parsedStart","parsedEnd","days","dayFormatter","timeZone","weekdayFormatter","longOptions","weekday","shortOptions","short","getRelativeClasses","outside","timestamp","getStartOfWeek","getEndOfWeek","getFormatter","startInput","endInput","startParsed","endParsed","startIdentifier","startTimestampIdentifier","endIdentifier","endOffset","endTimestampIdentifier","allDay","dayIdentifier","isEventOn","WIDTH_FULL","WIDTH_START","MINUTES_IN_DAY","ripple","noEvents","parsedEvents","map","parsedEventOverlapThreshold","eventTimedFunction","eventCategoryFunction","eventTextColorFunction","eventNameFunction","eventModeFunction","eventWeekdays","categoryMode","eventColorFunction","e","parseEvent","formatter","hour","withTime","updateEventVisibility","eventsMap","more","parentBounds","last","eventsSorted","bottom","hidden","hide","t","getEventsMap","elements","el","genDayEvent","weekdayIdentifier","scope","eventParsed","genEvent","style","height","refInFor","genTimedEvent","isEventHiddenOn","top","slot","background","overlapsNoon","singline","timeSummary","eventSummary","time","delimiter","scopeInput","setTextColor","setBackgroundColor","getDefaultMouseEventHandlers","genName","genPlaceholder","genMore","display","getVisibleEvents","filter","isEventOverlapping","isEventForCategory","getEventsForDay","isEventStart","getEventsForDayAll","getEventsForDayTimed","getScopedSlots","isNode","getSlotChildren","getter","mapper","mapped","slots","slotDay","slotDayHeader","slotDayBody","classes","parsedMinWeeks","minDays","todayWeek","monthFormatter","isOutside","genHead","role","genHeadDays","header","genHeadDay","color","genWeeks","weekDays","genWeek","getWeekNumber","weekNodes","genWeekNumber","determineDay","genDay","genDayLabel","genDayLabelButton","hasMonth","fab","depressed","small","getMouseEventHandlers","stop","prevent","result","genDayMonth","h","dragstart","parsedFirstInterval","parsedIntervalMinutes","parsedIntervalCount","parsedIntervalHeight","parseFloat","parsedFirstTime","firstMinute","bodyHeight","minutes","count","intervalFormatter","shortHourOptions","tms","showIntervalLabelDefault","isFirst","interval","intervalStyleDefault","getTimestampAtEvent","bounds","baseMinutes","touchEvent","mouseEvent","touches","clientY","addIntervals","getSlotScope","scrollToTime","y","timeToY","pane","minutesToPixels","clamp","timeDelta","gap","scrollPush","themeClasses","init","onResize","getScrollPush","area","marginRight","genHeadIntervals","genHeadWeekday","genHeadDayLabel","genDayHeader","genHeadDayButton","genBody","genScrollArea","genPane","genDayContainer","genDays","genDayIntervals","genDayBody","genDayInterval","styler","genBodyIntervals","genIntervalLabels","genIntervalLabel","shower","show","label","modifiers","quiet","categoryName","parsedCategoryText","parsedCategories","getParsedCategories","getCategoryScope","cat","genDayHeaderCategory","headerTitle","genDayHeaderCategoryTitle","genDayBodyCategory","parsedValue","parsedCategoryDays","renderProps","around","getCategoryList","Error","spanYears","spanMonths","monthShortFormatter","monthLongFormatter","updated","window","checkChange","move","amount","moved","forward","mover","limit","$children","parseTimestamp","timestampToDate","categoryMap","categoryLength","ev","VCalendar","VMenu","VSelect","VToolbarTitle","VToolbar","PARSE_REGEX","PARSE_TIME","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","DAYS_IN_MONTH_MIN","DAYS_IN_MONTH_MAX","MONTH_MAX","MONTH_MIN","DAY_MIN","DAYS_IN_WEEK","MINUTES_IN_HOUR","MINUTE_MAX","HOUR_MAX","OFFSET_YEAR","OFFSET_MONTH","OFFSET_HOUR","OFFSET_TIME","copyTimestamp","findWeekday","updateFormatted","updateRelative","updateWeekday","daysInMonth","parts","parseDate","hasDay","hasTime","getDayIdentifier","getTimeIdentifier","getTime","getWeekday","getDate","_","m","C","Y","padded","str","padNumber","M","D","skips","filled","skip","j","current","currentIdentifier","stopped","relativeDays","nextDay","mins","int","updateMinutes","emptyFormatter","Intl","intlFormatter","eventFirst","listeners","acc","suffix","eventOptions","prefix","classSeparator","eventTargetClasses","currentTargets","document","currentTarget","TouchEvent","changedTouches","targetTouches","getData","preventDefault","complete","validators","rawName","form","VAlert","VTextField"],"mappings":"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","file":"js/calendar.cee2a5ab.js","sourcesContent":["export default class FileUtils {\n static objectToFormData(obj: any, formData?: any, options?: any, pre?: any) {\n // takes a {} object and returns a FormData object\n // https://gist.github.com/ghinda/8442a57f22099bdb2e34\n // https://github.com/therealparmesh/object-to-formdata/blob/master/index.js\n //objectToFormData(\n // object,\n // existingFormData, // optional\n // options, // optional\n // keyPrefix // optional\n //)\n\n // whether or not to include array indices in FormData keys\n // defaults to true\n // const options = {\n // indices: true\n //}\n if (this.isFormData(options)) {\n pre = formData;\n formData = options;\n options = null;\n }\n\n options = options || {};\n options.indices = options.indices || true;\n formData = formData || new FormData();\n\n if (this.isUndefined(obj) || this.isNull(obj)) {\n return formData;\n } else if (this.isArray(obj)) {\n obj.forEach((value: any, index: any) => {\n // FILES do not appear to work with an index anymore on core\n let key = pre;\n if (!this.isFile(value)) {\n key = pre + \"[\" + (options.indices ? index : \"\") + \"]\";\n }\n this.objectToFormData(value, formData, options, key);\n });\n } else if (this.isDate(obj)) {\n formData.append(pre, obj.toISOString());\n } else if (this.isObject(obj) && !this.isFile(obj) && !this.isBlob(obj)) {\n Object.keys(obj).forEach((prop) => {\n const value = obj[prop];\n if (this.isArray(value)) {\n while (prop.length > 2 && prop.lastIndexOf(\"[]\") === prop.length - 2) {\n prop = prop.substring(0, prop.length - 2);\n }\n }\n\n const key = pre ? pre + \".\" + prop : prop;\n\n this.objectToFormData(value, formData, options, key);\n });\n } else if (this.isBlob(obj)) {\n formData.append(pre, obj, obj.name);\n } else {\n formData.append(pre, obj);\n }\n\n return formData;\n }\n\n static isUndefined(value: any) {\n return value === undefined;\n }\n static isNull(value: any) {\n return value === null;\n }\n static isObject(value: any) {\n return value === Object(value);\n }\n static isArray(value: any) {\n return Array.isArray(value);\n }\n static isDate(value: any) {\n return value instanceof Date;\n }\n static isBlob(value: any) {\n return (\n value &&\n typeof value.size === \"number\" &&\n typeof value.type === \"string\" &&\n typeof value.slice === \"function\"\n );\n }\n static isFile(value: any) {\n return (\n this.isBlob(value) &&\n (typeof value.lastModifiedDate === \"object\" || typeof value.lastModified === \"number\") &&\n typeof value.name === \"string\"\n );\n }\n static isFormData(value: any) {\n return value instanceof FormData;\n }\n}\n","import { format } from \"date-fns/esm\";\n\nexport default function(value: string) {\n if (value) {\n return format(new Date(value), \"@ h:mm a\");\n }\n return \"\";\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.hasActivator ? '' : 'd-none'},[_c('v-dialog',{attrs:{\"width\":\"400\"},model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[_c('v-card',[_c('v-card-title',[_vm._v(\"Delete Confirmation\")]),_c('v-card-text',[_vm._t(\"default\",[_vm._v(\"This will delete \"+_vm._s(_vm.titleText)+\". Are you sure?\")])],2),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"blue darken-1\",\"text\":\"\"},on:{\"click\":_vm.close}},[_vm._v(\" Cancel \")]),_c('v-btn',{attrs:{\"color\":\"error darken-1\",\"text\":\"\"},on:{\"click\":_vm.confirmed}},[_vm._v(\" Delete \")])],1)],1)],1),_vm._t(\"activator\",null,{\"on\":{ click: _vm.open }})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Emit, Prop } from \"vue-property-decorator\";\nimport { VProgressLinear, VForm, VDivider } from \"vuetify/lib\";\n\n@Component({ components: { VProgressLinear, VForm, VDivider } })\nexport default class CDeleteConfirm extends Vue {\n @Prop({ type: Function }) title!: any;\n\n dialog = false;\n item: any = {} as any;\n\n get hasActivator() {\n return !!this.$scopedSlots.activator;\n }\n\n get titleText() {\n return this.title(this.item);\n }\n\n open(item: any) {\n this.item = item;\n this.dialog = true;\n }\n\n close() {\n this.dialog = false;\n }\n\n @Emit()\n confirmed() {\n this.dialog = false;\n return this.item;\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CDeleteConfirm.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CDeleteConfirm.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CDeleteConfirm.vue?vue&type=template&id=50f3a48e&scoped=true&\"\nimport script from \"./CDeleteConfirm.vue?vue&type=script&lang=ts&\"\nexport * from \"./CDeleteConfirm.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./CDeleteConfirm.vue?vue&type=style&index=0&id=50f3a48e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"50f3a48e\",\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 { 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 { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VDialog,VSpacer})\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CDeleteConfirm.vue?vue&type=style&index=0&id=50f3a48e&scoped=true&lang=css&\"","import { format } from \"date-fns/esm\";\n\nexport default function(value: string) {\n if (value) {\n return format(new Date(value), \"MMM do, yyyy\");\n }\n return \"-\";\n}\n","function createUTCDate (year: number, month = 0, day = 1) {\n let date\n if (year < 100 && year >= 0) {\n date = new Date(Date.UTC(year, month, day))\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(year)\n }\n } else {\n date = new Date(Date.UTC(year, month, day))\n }\n\n return date\n}\n\nfunction firstWeekOffset (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear\n const firstWeekDayOfYear = (7 + createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() - firstDayOfWeek) % 7\n\n return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1\n}\n\nfunction dayOfYear (year: number, month: number, day: number, firstDayOfWeek: number) {\n let dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][month]\n if (month > 1 && isLeapYear(year)) {\n dayOfYear++\n }\n\n return dayOfYear + day\n}\n\nfunction weeksInYear (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, firstDayOfYear)\n const weekOffsetNext = firstWeekOffset(year + 1, firstDayOfWeek, firstDayOfYear)\n const daysInYear = isLeapYear(year) ? 366 : 365\n\n return (daysInYear - weekOffset + weekOffsetNext) / 7\n}\n\nexport function weekNumber (year: number, month: number, day: number, firstDayOfWeek: number, localeFirstDayOfYear: number): number {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, localeFirstDayOfYear)\n const week = Math.ceil((dayOfYear(year, month, day, firstDayOfWeek) - weekOffset) / 7)\n\n if (week < 1) {\n return week + weeksInYear(year - 1, firstDayOfWeek, localeFirstDayOfYear)\n } else if (week > weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)) {\n return week - weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)\n } else {\n return week\n }\n}\n\nexport function isLeapYear (year: number): boolean {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)\n}\n","export const required = () => (v: any) => (Array.isArray(v) ? v.length > 0 : v && !!v.toString().trim()) || \"Required\";\nexport const dateAfter = (otherDate: Date, message: string) => (v: any) =>\n (otherDate && new Date(v) > new Date(otherDate)) || message;\nexport const dateBefore = (otherDate: Date, message: string) => (v: any) =>\n (otherDate && new Date(v) < new Date(otherDate)) || message;\nexport const maxLength = (length: number) => (v: string) =>\n typeof v !== \"string\" || (v || \"\").length <= length || `Max length of ${length}`;\nexport const minLength = (length: number) => (v: string) => (v && v.length >= length) || `Min length of ${length}`;\n\n// Regex - @.\n// Dot or comma or whitespace should NOT be the last character\n// Shouldn't be surrounded by angular brackets\nexport const email = () => (v: any) => !v || /^[^<]\\S+@\\S+\\.\\S+[^.^,^>]$/.test(v.trim()) || \"Must be a valid email\";\n\nexport const multiEmail = (maxEmails?: number) => (v: string) => {\n const emails = (v || \"\").split(\",\").map((p) => p.trim());\n\n if (maxEmails && emails.length > maxEmails) {\n return `Only ${maxEmails} emails are allowed`;\n }\n\n return emails.every((v) => !v || email()(v) === true) || \"Must be comma separated list of valid emails\";\n};\nexport const numeric = () => (v: string) => /\\d+/.test(v) || \"Must include numbers (0-9)\";\nexport const alphaLower = () => (v: string) => /[a-z]/.test(v) || \"Must include lowercase letter (a-z)\";\nexport const alphaUpper = () => (v: string) => /[A-Z]/.test(v) || \"Must include uppercase letter (A-Z)\";\nexport const equal = (other: string, message: string) => (v: string) => other === v || message;\nexport const requiredIf = (other: boolean, message?: string) => (v: any) =>\n !other || (Array.isArray(v) ? v.length > 0 : !!v) || message || \"Required\";\n","import { axios } from \"./axios\";\nimport { AxiosResponse } from \"axios\";\nimport { ValueText } from \"@/common/models/interfaces\";\n\nexport class FixturesApi {\n getAll({ teamId, range }: { teamId?: number; range?: number }) {\n return axios.get(\"/fixtures\", {\n params: { teamId, range },\n });\n }\n\n getCalendarEvents({\n start,\n end,\n venueIds,\n teamIds,\n eventType,\n }: {\n start: Date;\n end: Date;\n venueIds: number[];\n teamIds: number[];\n eventType: string;\n }) {\n return axios.get(\"/fixtures/calendar\", {\n params: { start, end, venueIds, teamIds, eventType },\n });\n }\n\n get({ fixtureId }: { fixtureId?: number }) {\n if (!fixtureId) {\n return Promise.resolve>({\n data: {\n date: new Date().toISOString().substring(0, 10),\n minute: 0,\n home: true,\n } as Fixture,\n } as AxiosResponse);\n }\n return axios.get(`/fixtures/${fixtureId}`);\n }\n\n save({ fixture }: { fixture: Fixture }) {\n if (fixture.id) {\n return axios.put(\"/fixtures\", fixture);\n } else {\n return axios.post(\"/fixtures\", fixture);\n }\n }\n\n delete({ fixtureId }: { fixtureId?: number }) {\n return axios.delete(`/fixtures/${fixtureId}`);\n }\n\n getOptions() {\n return axios.get(\"/fixtures/options\");\n }\n}\n\nexport interface Fixture {\n id?: number;\n teamId: number;\n address: string;\n team: string;\n opponent: string;\n teamUri: string;\n opponentUri: string;\n dateTime: string;\n competition: string;\n date: string;\n hour: string;\n minute: number;\n time: string;\n homeScore: number;\n opponentScore: number;\n competitionId: number;\n venueId: number;\n opponentId: number;\n home: boolean;\n contactName: string;\n contactNumber: string;\n referee: string;\n kit: string;\n notes: string;\n mapUri: string;\n competitive: false;\n}\n\nexport interface CalendarEvent {\n address: string;\n name: string;\n opponent: string;\n teamUri: string;\n opponentUri: string;\n home: boolean;\n start: Date;\n end: Date;\n timed: boolean;\n eventType: 1 | 2;\n}\n\nexport interface VenueOption {\n value: any;\n text: string;\n isHome: boolean;\n opponentIds: number[];\n}\n\nexport interface FixtureOptions {\n competitions: ValueText[];\n venues: VenueOption[];\n opponents: ValueText[];\n hours: ValueText[];\n minutes: ValueText[];\n}\n","import { axios } from \"./axios\";\n\nexport class VenuesApi {\n getAll(home?: boolean) {\n return axios.get(\"/venues\", {\n params: {\n home: home,\n },\n });\n }\n\n save({ venue }: { venue: Venue }) {\n if (!!venue.id && venue.id > -1) {\n return axios.put(\"/venues\", venue);\n } else {\n return axios.post(\"/venues\", venue);\n }\n }\n\n delete({ venueId }: { venueId: number }) {\n return axios.delete(`/venues/${venueId}`);\n }\n}\n\nexport interface Venue {\n id: number;\n name: string;\n formatted_address: string;\n isHome: boolean;\n lng: number;\n lat: number;\n url: string;\n fixtures: number;\n opponents: number;\n}\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FixtureItem.vue?vue&type=style&index=0&id=75b0a1ec&scoped=true&lang=css&\"","import { axios } from \"./axios\";\nimport { ValueText } from \"@/common/models/interfaces\";\nimport FileUtils from \"@/common/utils/fileUtils\";\n\nexport class TeamsApi {\n getAll({ teamCategory }: { teamCategory?: string }) {\n return axios.get(\"/teams/all\", { params: { teamCategory } });\n }\n\n getPrevious() {\n return axios.get(\"/teams/previous\");\n }\n\n get({ teamId }: { teamId: number }) {\n if (!teamId) {\n return Promise.resolve({ data: {} as Team });\n }\n return axios.get(`/teams/${teamId}`);\n }\n\n save({ team }: { team: Team }) {\n const formData = FileUtils.objectToFormData(team);\n if (!!team.id && team.id > -1) {\n return axios.put(\"/teams\", formData);\n } else {\n return axios.post(\"/teams\", formData);\n }\n }\n\n delete({ teamId }: { teamId?: number }) {\n return axios.delete(`/teams/${teamId}`);\n }\n\n getOptions() {\n return axios.get(\"/teams/options\");\n }\n}\n\nexport interface Team {\n id: number;\n name: string;\n alias: string;\n description: string;\n teamCategoryId: number;\n seasonStartYear: string;\n externalLeagueUri: string;\n imageUpload: Blob;\n coaches: string[];\n assistants: string[];\n managers: string[];\n contributors: string[];\n officials: Official[];\n mediaUri: string;\n isNonCompetitiveLeague: boolean;\n}\n\nexport interface TeamOptions {\n venues: ValueText[];\n officials: ValueText[];\n teamCategories: ValueText[];\n seasons: ValueText[];\n}\n\nexport interface Official {\n firstName: string;\n lastName: string;\n officialType: number;\n officialTypeString: string;\n imageUri: string;\n email: string;\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"400\"},model:{value:(_vm.dialogOpen),callback:function ($$v) {_vm.dialogOpen=$$v},expression:\"dialogOpen\"}},[_c('v-card',{attrs:{\"loading\":_vm.loading}},[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(\"Email Verification\")]),(!_vm.fail)?_c('v-card-text',[_vm._v(\"Thank you for verifying your email address. You will now receive regular emails with Ongar Chasers fixtures and results.\")]):_c('v-card-text',[_vm._v(\"We could not verify this link. Please resubscribe and try again.\")]),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":function($event){_vm.dialogOpen = false}}},[_vm._v(\" Close \")])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { NotificationsApi } from \"@/store/notifications-api\";\n\n@Component({ components: {} })\nexport default class FixtureSubscriptionVerify extends Vue {\n notificationsStore = new NotificationsApi();\n loading = false;\n fail = false;\n dialogOpen = false;\n\n open(email: string, token: string) {\n this.loading = true;\n this.dialogOpen = true;\n this.notificationsStore\n .verify({ email: email, token: token })\n .then(() => (this.loading = false))\n .catch(() => {\n this.loading = false;\n this.fail = true;\n });\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FixtureSubscriptionVerify.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FixtureSubscriptionVerify.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./FixtureSubscriptionVerify.vue?vue&type=template&id=4067fbc8&\"\nimport script from \"./FixtureSubscriptionVerify.vue?vue&type=script&lang=ts&\"\nexport * from \"./FixtureSubscriptionVerify.vue?vue&type=script&lang=ts&\"\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 null,\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 { 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 { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VDialog,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-row',[_c('v-col',{attrs:{\"order\":\"1\",\"cols\":\"12\",\"sm\":\"6\",\"md\":\"4\"}},[_c('v-list-item',{attrs:{\"two-line\":\"\"}},[_c('v-list-item-avatar',[_c('v-btn',{attrs:{\"icon\":\"\",\"large\":\"\",\"href\":_vm.fixture.mapUri,\"target\":\"_blank\"}},[_c('v-icon',{attrs:{\"color\":\"primary\"}},[_vm._v(\"mdi-google-maps\")])],1)],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm._f(\"formatDate\")(_vm.fixture.dateTime))+\" \"+_vm._s(_vm._f(\"formatTime\")(_vm.fixture.dateTime)))]),_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.fixture.address))])],1)],1)],1),_c('v-col',{staticClass:\"d-flex flex-column align-center\",attrs:{\"cols\":\"4\",\"sm\":\"2\",\"order\":_vm.fixture.home ? 2 : 4}},[_c('v-avatar',[_c('v-img',{attrs:{\"src\":require(\"../../assets/logo.svg\"),\"alt\":_vm.fixture.team}})],1),_c('v-subheader',{staticClass:\"px-0 text-center\"},[_vm._v(_vm._s(_vm.fixture.team))])],1),_c('v-col',{attrs:{\"cols\":\"4\",\"sm\":\"2\",\"order\":\"3\"}},[_c('v-subheader',{staticClass:\"flex-column\"},[(!_vm.played(_vm.fixture))?_c('div',[_vm._v(_vm._s(_vm._f(\"formatTime\")(_vm.fixture.dateTime)))]):(!_vm.fixture.competitive)?_c('div',[_c('v-icon',[_vm._v(\"mdi-basketball\")])],1):(_vm.fixture.homeScore !== null)?_c('div',{staticClass:\"d-flex\",class:_vm.isWin(_vm.fixture) ? 'win' : 'loss'},[_c('span',{staticClass:\"score\",class:_vm.fixture.home ? 'order-1' : 'order-3'},[_vm._v(_vm._s(_vm.fixture.homeScore))]),_c('span',{staticClass:\"mx-2 order-2\"},[_vm._v(\"vs\")]),_c('span',{staticClass:\"score\",class:_vm.fixture.home ? 'order-3' : 'order-1'},[_vm._v(_vm._s(_vm.fixture.opponentScore))])]):_vm._e(),_c('div',[_vm._v(_vm._s(_vm.fixture.competition))])])],1),_c('v-col',{staticClass:\"d-flex flex-column align-center\",attrs:{\"cols\":\"4\",\"sm\":\"2\",\"order\":!_vm.fixture.home ? 2 : 4}},[_c('v-avatar',[_c('v-img',{attrs:{\"src\":_vm.fixture.opponentUri,\"alt\":_vm.fixture.opponent}})],1),_c('v-subheader',{staticClass:\"px-0 text-center\"},[_vm._v(_vm._s(_vm.fixture.opponent))])],1),(_vm.canEdit)?_c('v-col',{staticClass:\"d-flex\",attrs:{\"cols\":\"12\",\"order\":\"5\",\"md\":\"2\"}},[_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.edit}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-pencil\")])],1),_c('c-delete-confirm',{ref:\"delete\",attrs:{\"title\":function () { return 'this fixture'; }},on:{\"confirmed\":_vm.deleteConfirmed},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\",\"color\":\"error\"}},on),[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-trash-can-outline\")])],1)]}}],null,false,793408695)})],1):_vm._e(),_c('v-col',{staticClass:\"d-sm-none\",attrs:{\"order\":\"6\"}},[_c('v-divider')],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Prop, Emit } from \"vue-property-decorator\";\nimport { FixturesApi, Fixture } from \"@/store/fixtures-api\";\nimport formatTime from \"@/common/filters/format-time\";\nimport formatDate from \"@/common/filters/format-date\";\nimport CDeleteConfirm from \"@/common/components/CDeleteConfirm.vue\";\n\n@Component({\n components: { CDeleteConfirm },\n filters: { formatTime, formatDate },\n})\nexport default class FixtureItem extends Vue {\n @Prop() fixture!: Fixture;\n @Prop({ type: Boolean, default: false }) canEdit: boolean | undefined;\n fixturesStore = new FixturesApi();\n active = false;\n\n @Emit()\n edit() {\n return this.fixture;\n }\n\n @Emit(\"deleted\")\n deleteConfirmed() {\n return this.fixturesStore.delete({ fixtureId: this.fixture.id });\n }\n\n played(fixture: Fixture) {\n return new Date(fixture.dateTime) < new Date() || (fixture.homeScore >= 0 && fixture.opponentScore >= 0);\n }\n\n isWin(fixture: Fixture) {\n return fixture.homeScore >= fixture.opponentScore;\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FixtureItem.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FixtureItem.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./FixtureItem.vue?vue&type=template&id=75b0a1ec&scoped=true&\"\nimport script from \"./FixtureItem.vue?vue&type=script&lang=ts&\"\nexport * from \"./FixtureItem.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FixtureItem.vue?vue&type=style&index=0&id=75b0a1ec&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"75b0a1ec\",\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 { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VAvatar,VBtn,VCol,VDivider,VIcon,VImg,VListItem,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VRow,VSpacer,VSubheader})\n","import { axios } from \"./axios\";\n\nexport class NotificationsApi {\n signup({ email }: { email: string }) {\n return axios.post(\"/notifications/signup\", { email });\n }\n\n verify({ email, token }: { email: string; token: string }) {\n return axios.post(\"/notifications/signup/verify\", {\n email,\n token,\n });\n }\n}\n\nexport interface NotificationOptions {\n email: string;\n token: string;\n}\n","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'localable',\n\n props: {\n locale: String,\n },\n\n computed: {\n currentLocale (): string {\n return this.locale || this.$vuetify.lang.current\n },\n },\n})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-row',[_c('v-col',{staticClass:\"d-flex\"},[_c('v-btn',{staticClass:\"mr-4\",attrs:{\"outlined\":\"\",\"color\":\"grey darken-2\"},on:{\"click\":_vm.setToday}},[_vm._v(\"Today\")]),_c('v-btn',{attrs:{\"fab\":\"\",\"text\":\"\",\"small\":\"\",\"color\":\"grey darken-2\"},on:{\"click\":_vm.prev}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-chevron-left\")])],1),_c('v-btn',{attrs:{\"fab\":\"\",\"text\":\"\",\"small\":\"\",\"color\":\"grey darken-2\"},on:{\"click\":_vm.next}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-chevron-right\")])],1),(_vm.$refs.calendar)?_c('v-toolbar-title',[_vm._v(\" \"+_vm._s(_vm.title)+\" \")]):_vm._e()],1),_c('v-col',[_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\":\"\",\"color\":\"grey darken-2\"}},'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 = 'day'}}},[_c('v-list-item-title',[_vm._v(\"Day\")])],1),_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),_c('v-col',[_c('v-select',{attrs:{\"items\":_vm.eventTypes,\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\"},on:{\"change\":_vm.filtersChanged},model:{value:(_vm.eventType),callback:function ($$v) {_vm.eventType=$$v},expression:\"eventType\"}})],1),_c('v-col',[_c('v-select',{staticClass:\"mx-2\",attrs:{\"items\":_vm.venues,\"item-text\":\"name\",\"item-value\":\"id\",\"multiple\":\"\",\"dense\":\"\",\"outlined\":\"\",\"hide-details\":\"\",\"label\":\"Location\"},on:{\"change\":_vm.filtersChanged},model:{value:(_vm.venueIds),callback:function ($$v) {_vm.venueIds=$$v},expression:\"venueIds\"}})],1),_c('v-col',[_c('v-select',{attrs:{\"items\":_vm.teams,\"item-text\":\"name\",\"item-value\":\"id\",\"multiple\":\"\",\"dense\":\"\",\"outlined\":\"\",\"hide-details\":\"\",\"label\":\"Team\"},on:{\"change\":_vm.filtersChanged},model:{value:(_vm.teamIds),callback:function ($$v) {_vm.teamIds=$$v},expression:\"teamIds\"}})],1)],1),_c('v-row',[_c('v-col',[_c('v-calendar',{ref:\"calendar\",attrs:{\"weekdays\":_vm.weekdays,\"type\":_vm.type,\"events\":_vm.events,\"event-overlap-threshold\":30,\"event-color\":_vm.getEventColor,\"first-interval\":\"9\",\"interval-count\":\"13\"},on:{\"click:event\":_vm.selectEvent,\"change\":_vm.getEvents},model:{value:(_vm.focus),callback:function ($$v) {_vm.focus=$$v},expression:\"focus\"}})],1)],1),_c('v-dialog',{attrs:{\"width\":\"500\"},model:{value:(_vm.selectedOpen),callback:function ($$v) {_vm.selectedOpen=$$v},expression:\"selectedOpen\"}},[(_vm.selectedEvent)?_c('v-card',[_c('v-card-title',[(_vm.isTraining)?_c('div',[_vm._v(\"Training for \"+_vm._s(_vm.selectedEvent.name))]):_c('div',[_vm._v(_vm._s(_vm.gameTitle))])]),_c('v-card-text',[_c('v-list-item',{staticClass:\"px-0\",attrs:{\"three-line\":\"\"}},[_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm._f(\"formatDate\")(_vm.selectedEvent.start))+\" \"+_vm._s(_vm._f(\"formatTime\")(_vm.selectedEvent.start)))]),_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.selectedEvent.address))])],1)],1)],1)],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { FixturesApi, CalendarEvent } from \"@/store/fixtures-api\";\nimport { VenuesApi, Venue } from \"@/store/venues-api\";\nimport FixtureItem from \"./FixtureItem.vue\";\nimport FixtureSubscriptionSignup from \"./FixtureSubscriptionSignup.vue\";\nimport FixtureSubscriptionVerify from \"./FixtureSubscriptionVerify.vue\";\nimport { TeamsApi, Team } from \"@/store/teams-api\";\nimport formatDate from \"@/common/filters/format-date\";\nimport formatTime from \"@/common/filters/format-time\";\n\n@Component({\n components: {\n FixtureItem,\n FixtureSubscriptionSignup,\n FixtureSubscriptionVerify,\n },\n filters: { formatDate, formatTime },\n})\nexport default class Calendar extends Vue {\n fixtureStore = new FixturesApi();\n venuesStore = new VenuesApi();\n teamsStore = new TeamsApi();\n events: CalendarEvent[] = [];\n venues: Venue[] = [];\n teams: Team[] = [];\n selectedOpen = false;\n selectedEvent: CalendarEvent = {} as CalendarEvent;\n selectedElement: EventTarget | null = null;\n loading = false;\n focus = \"\";\n range = 4;\n venueIds: number[] = [];\n teamIds: number[] = [];\n typeToLabel = {\n month: \"Month\",\n week: \"Week\",\n day: \"Day\",\n };\n type = \"week\";\n eventTypes = [\n { text: \"Games & Training\", value: \"both\" },\n { text: \"Games\", value: \"games\" },\n { text: \"Training\", value: \"training\" },\n ];\n eventType = \"both\";\n weekdays: number[] = [1, 2, 3, 4, 5, 6, 0];\n\n get title() {\n return (this.$refs.calendar as any).title;\n }\n\n get isTraining() {\n return this.selectedEvent.eventType == 1;\n }\n\n get gameTitle() {\n return this.selectedEvent.home\n ? `${this.selectedEvent.name} v ${this.selectedEvent.opponent}`\n : `${this.selectedEvent.opponent} v ${this.selectedEvent.name}`;\n }\n\n mounted() {\n this.venuesStore.getAll(true).then((res) => (this.venues = res.data));\n\n this.teamsStore.getAll({ teamCategory: \"\" }).then((res) => (this.teams = res.data));\n\n if (this.$route.query.email && this.$route.query.token) {\n (this.$refs.verify as any).open(this.$route.query.email, this.$route.query.token);\n }\n }\n\n getEvents({ start, end }: { start: any; end: any }) {\n this.loading = true;\n this.fixtureStore\n .getCalendarEvents({\n start: start.date,\n end: end.date,\n venueIds: this.venueIds,\n teamIds: this.teamIds,\n eventType: this.eventType,\n })\n .then((res) => (this.events = res.data))\n .then(() => (this.loading = false));\n }\n\n setToday() {\n this.focus = \"\";\n }\n\n prev() {\n (this.$refs.calendar as any).prev();\n }\n\n next() {\n (this.$refs.calendar as any).next();\n }\n\n filtersChanged() {\n this.getEvents({\n start: (this.$refs.calendar as any).lastStart,\n end: (this.$refs.calendar as any).lastEnd,\n });\n }\n\n selectEvent({ nativeEvent, event }: { nativeEvent: MouseEvent; event: CalendarEvent }) {\n const open = () => {\n this.selectedEvent = event;\n this.selectedElement = nativeEvent.target;\n setTimeout(() => {\n this.selectedOpen = true;\n }, 10);\n };\n\n if (this.selectedOpen) {\n this.selectedOpen = false;\n setTimeout(open, 10);\n } else {\n open();\n }\n\n nativeEvent.stopPropagation();\n }\n\n getEventColor(event: CalendarEvent) {\n return event.eventType == 1 ? \"orange\" : \"blue\";\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-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=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-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=script&lang=ts&\"","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=5e5dafc0&\"\nimport script from \"./Calendar.vue?vue&type=script&lang=ts&\"\nexport * from \"./Calendar.vue?vue&type=script&lang=ts&\"\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 null,\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 { 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 { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } 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 { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCalendar,VCard,VCardText,VCardTitle,VCol,VDialog,VIcon,VList,VListItem,VListItemContent,VListItemSubtitle,VListItemTitle,VMenu,VRow,VSelect,VToolbarTitle})\n","import { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\nimport { isLeapYear } from '../../../util/dateTimeUtils'\n\nexport const PARSE_REGEX = /^(\\d{4})-(\\d{1,2})(-(\\d{1,2}))?([^\\d]+(\\d{1,2}))?(:(\\d{1,2}))?(:(\\d{1,2}))?$/\nexport const PARSE_TIME = /(\\d\\d?)(:(\\d\\d?)|)(:(\\d\\d?)|)/\n\nexport const DAYS_IN_MONTH: number[] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_LEAP: number[] = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_MIN = 28\nexport const DAYS_IN_MONTH_MAX = 31\nexport const MONTH_MAX = 12\nexport const MONTH_MIN = 1\nexport const DAY_MIN = 1\nexport const DAYS_IN_WEEK = 7\nexport const MINUTES_IN_HOUR = 60\nexport const MINUTE_MAX = 59\nexport const MINUTES_IN_DAY = 24 * 60\nexport const HOURS_IN_DAY = 24\nexport const HOUR_MAX = 23\nexport const FIRST_HOUR = 0\nexport const OFFSET_YEAR = 10000\nexport const OFFSET_MONTH = 100\nexport const OFFSET_HOUR = 100\nexport const OFFSET_TIME = 10000\n\ntype CalendarTimestampFormatOptions = (timestamp: CalendarTimestamp, short: boolean) => object\ntype CalendarTimestampOperation = (timestamp: CalendarTimestamp) => CalendarTimestamp\nexport type VTime = number | string | {\n hour: number\n minute: number\n}\n\nexport type VTimestampInput = number | string | Date;\n\nexport function getStartOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n findWeekday(start, weekdays[0], prevDay)\n updateFormatted(start)\n if (today) {\n updateRelative(start, today, start.hasTime)\n }\n\n return start\n}\n\nexport function getEndOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n findWeekday(end, weekdays[weekdays.length - 1])\n updateFormatted(end)\n if (today) {\n updateRelative(end, today, end.hasTime)\n }\n\n return end\n}\n\nexport function getStartOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n start.day = DAY_MIN\n updateWeekday(start)\n updateFormatted(start)\n\n return start\n}\n\nexport function getEndOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n end.day = daysInMonth(end.year, end.month)\n updateWeekday(end)\n updateFormatted(end)\n\n return end\n}\n\nexport function validateTime (input: any): input is VTime {\n return (typeof input === 'number' && isFinite(input)) ||\n (!!PARSE_TIME.exec(input)) ||\n (typeof input === 'object' && isFinite(input.hour) && isFinite(input.minute))\n}\n\nexport function parseTime (input: any): number | false {\n if (typeof input === 'number') {\n // when a number is given, it's minutes since 12:00am\n return input\n } else if (typeof input === 'string') {\n // when a string is given, it's a hh:mm:ss format where seconds are optional\n const parts = PARSE_TIME.exec(input)\n if (!parts) {\n return false\n }\n\n return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0)\n } else if (typeof input === 'object') {\n // when an object is given, it must have hour and minute\n if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {\n return false\n }\n\n return input.hour * 60 + input.minute\n } else {\n // unsupported type\n return false\n }\n}\n\nexport function validateTimestamp (input: any): input is VTimestampInput {\n return (typeof input === 'number' && isFinite(input)) ||\n (typeof input === 'string' && !!PARSE_REGEX.exec(input)) ||\n (input instanceof Date)\n}\n\nexport function parseTimestamp (input: VTimestampInput, required?: false, now?: CalendarTimestamp): CalendarTimestamp | null\nexport function parseTimestamp (input: VTimestampInput, required: true, now?: CalendarTimestamp): CalendarTimestamp\nexport function parseTimestamp (input: VTimestampInput, required = false, now?: CalendarTimestamp): CalendarTimestamp | null {\n if (typeof input === 'number' && isFinite(input)) {\n input = new Date(input)\n }\n\n if (input instanceof Date) {\n const date: CalendarTimestamp = parseDate(input)\n\n if (now) {\n updateRelative(date, now, date.hasTime)\n }\n\n return date\n }\n\n if (typeof input !== 'string') {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n return null\n }\n\n // YYYY-MM-DD hh:mm:ss\n const parts = PARSE_REGEX.exec(input)\n\n if (!parts) {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n\n return null\n }\n\n const timestamp: CalendarTimestamp = {\n date: input,\n time: '',\n year: parseInt(parts[1]),\n month: parseInt(parts[2]),\n day: parseInt(parts[4]) || 1,\n hour: parseInt(parts[6]) || 0,\n minute: parseInt(parts[8]) || 0,\n weekday: 0,\n hasDay: !!parts[4],\n hasTime: !!(parts[6] && parts[8]),\n past: false,\n present: false,\n future: false,\n }\n\n updateWeekday(timestamp)\n updateFormatted(timestamp)\n\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n\n return timestamp\n}\n\nexport function parseDate (date: Date): CalendarTimestamp {\n return updateFormatted({\n date: '',\n time: '',\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n weekday: date.getDay(),\n hour: date.getHours(),\n minute: date.getMinutes(),\n hasDay: true,\n hasTime: true,\n past: false,\n present: true,\n future: false,\n })\n}\n\nexport function getDayIdentifier (timestamp: { year: number, month: number, day: number }): number {\n return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day\n}\n\nexport function getTimeIdentifier (timestamp: { hour: number, minute: number }): number {\n return timestamp.hour * OFFSET_HOUR + timestamp.minute\n}\n\nexport function getTimestampIdentifier (timestamp: CalendarTimestamp): number {\n return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp)\n}\n\nexport function updateRelative (timestamp: CalendarTimestamp, now: CalendarTimestamp, time = false): CalendarTimestamp {\n let a = getDayIdentifier(now)\n let b = getDayIdentifier(timestamp)\n let present = a === b\n\n if (timestamp.hasTime && time && present) {\n a = getTimeIdentifier(now)\n b = getTimeIdentifier(timestamp)\n present = a === b\n }\n\n timestamp.past = b < a\n timestamp.present = present\n timestamp.future = b > a\n\n return timestamp\n}\n\nexport function isTimedless (input: VTimestampInput): input is (Date | number) {\n return (input instanceof Date) || (typeof input === 'number' && isFinite(input))\n}\n\nexport function updateHasTime (timestamp: CalendarTimestamp, hasTime: boolean, now?: CalendarTimestamp): CalendarTimestamp {\n if (timestamp.hasTime !== hasTime) {\n timestamp.hasTime = hasTime\n if (!hasTime) {\n timestamp.hour = HOUR_MAX\n timestamp.minute = MINUTE_MAX\n timestamp.time = getTime(timestamp)\n }\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n }\n\n return timestamp\n}\n\nexport function updateMinutes (timestamp: CalendarTimestamp, minutes: number, now?: CalendarTimestamp): CalendarTimestamp {\n timestamp.hasTime = true\n timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR)\n timestamp.minute = minutes % MINUTES_IN_HOUR\n timestamp.time = getTime(timestamp)\n if (now) {\n updateRelative(timestamp, now, true)\n }\n\n return timestamp\n}\n\nexport function updateWeekday (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.weekday = getWeekday(timestamp)\n\n return timestamp\n}\n\nexport function updateFormatted (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.time = getTime(timestamp)\n timestamp.date = getDate(timestamp)\n\n return timestamp\n}\n\nexport function getWeekday (timestamp: CalendarTimestamp): number {\n if (timestamp.hasDay) {\n const _ = Math.floor\n const k = timestamp.day\n const m = ((timestamp.month + 9) % MONTH_MAX) + 1\n const C = _(timestamp.year / 100)\n const Y = (timestamp.year % 100) - (timestamp.month <= 2 ? 1 : 0)\n\n return (((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7) + 7) % 7\n }\n\n return timestamp.weekday\n}\n\nexport function daysInMonth (year: number, month: number) {\n return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month]\n}\n\nexport function copyTimestamp (timestamp: CalendarTimestamp): CalendarTimestamp {\n const { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future } = timestamp\n\n return { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future }\n}\n\nexport function padNumber (x: number, length: number): string {\n let padded = String(x)\n while (padded.length < length) {\n padded = '0' + padded\n }\n\n return padded\n}\n\nexport function getDate (timestamp: CalendarTimestamp): string {\n let str = `${padNumber(timestamp.year, 4)}-${padNumber(timestamp.month, 2)}`\n\n if (timestamp.hasDay) str += `-${padNumber(timestamp.day, 2)}`\n\n return str\n}\n\nexport function getTime (timestamp: CalendarTimestamp): string {\n if (!timestamp.hasTime) {\n return ''\n }\n\n return `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n}\n\nexport function nextMinutes (timestamp: CalendarTimestamp, minutes: number): CalendarTimestamp {\n timestamp.minute += minutes\n while (timestamp.minute > MINUTES_IN_HOUR) {\n timestamp.minute -= MINUTES_IN_HOUR\n timestamp.hour++\n if (timestamp.hour >= HOURS_IN_DAY) {\n nextDay(timestamp)\n timestamp.hour = FIRST_HOUR\n }\n }\n\n return timestamp\n}\n\nexport function nextDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day++\n timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK\n if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {\n timestamp.day = DAY_MIN\n timestamp.month++\n if (timestamp.month > MONTH_MAX) {\n timestamp.month = MONTH_MIN\n timestamp.year++\n }\n }\n\n return timestamp\n}\n\nexport function prevDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day--\n timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK\n if (timestamp.day < DAY_MIN) {\n timestamp.month--\n if (timestamp.month < MONTH_MIN) {\n timestamp.year--\n timestamp.month = MONTH_MAX\n }\n timestamp.day = daysInMonth(timestamp.year, timestamp.month)\n }\n\n return timestamp\n}\n\nexport function relativeDays (\n timestamp: CalendarTimestamp,\n mover: CalendarTimestampOperation = nextDay,\n days = 1\n): CalendarTimestamp {\n while (--days >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function diffMinutes (min: CalendarTimestamp, max: CalendarTimestamp) {\n const Y = (max.year - min.year) * 525600\n const M = (max.month - min.month) * 43800\n const D = (max.day - min.day) * 1440\n const h = (max.hour - min.hour) * 60\n const m = (max.minute - min.minute)\n\n return Y + M + D + h + m\n}\n\nexport function findWeekday (timestamp: CalendarTimestamp, weekday: number,\n mover: CalendarTimestampOperation = nextDay, maxDays = 6): CalendarTimestamp {\n while (timestamp.weekday !== weekday && --maxDays >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function getWeekdaySkips (weekdays: number[]): number[] {\n const skips: number[] = [1, 1, 1, 1, 1, 1, 1]\n const filled: number[] = [0, 0, 0, 0, 0, 0, 0]\n for (let i = 0; i < weekdays.length; i++) {\n filled[weekdays[i]] = 1\n }\n for (let k = 0; k < DAYS_IN_WEEK; k++) {\n let skip = 1\n for (let j = 1; j < DAYS_IN_WEEK; j++) {\n const next = (k + j) % DAYS_IN_WEEK\n if (filled[next]) {\n break\n }\n skip++\n }\n skips[k] = filled[k] * skip\n }\n\n return skips\n}\n\nexport function timestampToDate (timestamp: CalendarTimestamp): Date {\n const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n const date = timestamp.date\n\n return new Date(`${date}T${time}:00+00:00`)\n}\n\nexport function createDayList (\n start: CalendarTimestamp,\n end: CalendarTimestamp,\n now: CalendarTimestamp,\n weekdaySkips: number[],\n max = 42,\n min = 0\n): CalendarTimestamp[] {\n const stop = getDayIdentifier(end)\n const days: CalendarTimestamp[] = []\n let current = copyTimestamp(start)\n let currentIdentifier = 0\n let stopped = currentIdentifier === stop\n\n if (stop < getDayIdentifier(start)) {\n throw new Error('End date is earlier than start date.')\n }\n\n while ((!stopped || days.length < min) && days.length < max) {\n currentIdentifier = getDayIdentifier(current)\n stopped = stopped || currentIdentifier === stop\n if (weekdaySkips[current.weekday] === 0) {\n current = nextDay(current)\n continue\n }\n const day = copyTimestamp(current)\n updateFormatted(day)\n updateRelative(day, now)\n days.push(day)\n current = relativeDays(current, nextDay, weekdaySkips[current.weekday])\n }\n\n if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.')\n\n return days\n}\n\nexport function createIntervalList (timestamp: CalendarTimestamp, first: number,\n minutes: number, count: number, now?: CalendarTimestamp): CalendarTimestamp[] {\n const intervals: CalendarTimestamp[] = []\n\n for (let i = 0; i < count; i++) {\n const mins = first + (i * minutes)\n const int = copyTimestamp(timestamp)\n intervals.push(updateMinutes(int, mins, now))\n }\n\n return intervals\n}\n\nexport function createNativeLocaleFormatter (locale: string, getOptions: CalendarTimestampFormatOptions): CalendarFormatter {\n const emptyFormatter: CalendarFormatter = (_t, _s) => ''\n\n if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return emptyFormatter\n }\n\n return (timestamp, short) => {\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short))\n\n return intlFormatter.format(timestampToDate(timestamp))\n } catch (e) {\n return ''\n }\n }\n}\n","import Vue from 'vue'\n\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"400\"},model:{value:(_vm.dialogOpen),callback:function ($$v) {_vm.dialogOpen=$$v},expression:\"dialogOpen\"}},[_c('v-form',{ref:\"form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.signup()}}},[_c('v-card',{attrs:{\"loading\":_vm.loading}},[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(\"Weekly Fixtures Sign Up\")]),(!_vm.fail && !_vm.complete)?_c('v-card-text',[_c('p',[_vm._v(\"We'll send a confirmation email to you.\")]),_c('p',[_vm._v(\" You'll be able to unsubscribe at any time from the weekly emails we send. \")]),_c('v-text-field',{attrs:{\"label\":\"Email\",\"color\":\"primary\",\"rules\":[_vm.validators.required(), _vm.validators.email()]},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:\"email\"}})],1):_vm._e(),(_vm.complete)?_c('v-card-text',[_c('v-alert',{attrs:{\"outlined\":\"\",\"type\":\"success\",\"text\":\"\"}},[_vm._v(\" We have sent an email to \"+_vm._s(_vm.email)+\". Please click on the verification button in it to complete the signup. \")])],1):_vm._e(),(_vm.fail)?_c('v-card-text',[_c('v-alert',{attrs:{\"outlined\":\"\",\"type\":\"warning\",\"text\":\"\"}},[_vm._v(\" There has been a failure, Please try again later. \")])],1):_vm._e(),_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":function($event){_vm.dialogOpen = false}}},[_vm._v(\" Close \")]),_c('v-spacer'),_c('v-btn',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.complete),expression:\"!complete\"}],attrs:{\"color\":\"primary\",\"type\":\"submit\"}},[_vm._v(\" Sign Up \")])],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { required, email } from \"@/common/validators/rules\";\n\nimport { NotificationsApi } from \"@/store/notifications-api\";\n\n@Component({ components: {} })\nexport default class FixtureSubscriptionSignup extends Vue {\n notificationsStore = new NotificationsApi();\n validators = { required, email };\n loading = false;\n email = \"\";\n complete = false;\n fail = false;\n dialogOpen = false;\n\n open() {\n this.email = \"\";\n this.complete = false;\n this.fail = false;\n this.loading = false;\n this.dialogOpen = true;\n }\n\n signup() {\n if (!(this.$refs.form as any).validate()) {\n return;\n }\n\n this.loading = true;\n this.dialogOpen = true;\n this.notificationsStore\n .signup({ email: this.email })\n .then(() => (this.complete = true))\n .then(() => (this.loading = false))\n .catch(() => {\n this.loading = false;\n this.fail = true;\n });\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FixtureSubscriptionSignup.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FixtureSubscriptionSignup.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./FixtureSubscriptionSignup.vue?vue&type=template&id=b9461c42&\"\nimport script from \"./FixtureSubscriptionSignup.vue?vue&type=script&lang=ts&\"\nexport * from \"./FixtureSubscriptionSignup.vue?vue&type=script&lang=ts&\"\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 null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { 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 { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VAlert,VBtn,VCard,VCardActions,VCardText,VCardTitle,VDialog,VForm,VSpacer,VTextField})\n"],"sourceRoot":""}