{"version":3,"sources":["webpack:///./src/mixins/metatags.mixin.js","webpack:///./src/mixins/data.mixin.js","webpack:///./src/components/common/LoadingIcon.vue?1dcc","webpack:///../../src/util/dateTimeUtils.ts","webpack:///./src/components/common/EventSlotCalendar.vue?aa4e","webpack:///./src/mixins/menu-helper.mixin.js","webpack:///./src/components/common/LoadingIcon.vue","webpack:///src/components/common/LoadingIcon.vue","webpack:///./src/components/common/LoadingIcon.vue?1924","webpack:///./src/components/common/LoadingIcon.vue?584b","webpack:///../../../../src/components/VCalendar/mixins/mouse.ts","webpack:///../../../../src/components/VCalendar/mixins/times.ts","webpack:///../../../../src/components/VCalendar/modes/common.ts","webpack:///../../../../src/components/VCalendar/modes/stack.ts","webpack:///../../../../src/components/VCalendar/modes/column.ts","webpack:///../../../../src/components/VCalendar/modes/index.ts","webpack:///../../../../src/components/VCalendar/util/props.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-base.ts","webpack:///../../../../src/components/VCalendar/util/events.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-with-events.ts","webpack:///../../../src/components/VCalendar/VCalendarWeekly.ts","webpack:///../../../src/components/VCalendar/VCalendarMonthly.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-with-intervals.ts","webpack:///../../../src/components/VCalendar/VCalendarDaily.ts","webpack:///../../../../src/components/VCalendar/util/parser.ts","webpack:///../../../src/components/VCalendar/VCalendarCategory.ts","webpack:///../../../src/components/VCalendar/VCalendar.ts","webpack:///./src/components/common/EventSlotCalendar.vue","webpack:///src/components/common/EventSlotCalendar.vue","webpack:///./src/components/common/EventSlotCalendar.vue?7975","webpack:///./src/components/common/EventSlotCalendar.vue?727f","webpack:///../../../src/components/VDivider/VDivider.ts","webpack:///../../../src/mixins/localable/index.ts","webpack:///./src/components/common/ImageDiv.vue","webpack:///src/components/common/ImageDiv.vue","webpack:///./src/components/common/ImageDiv.vue?c0e3","webpack:///./src/components/common/ImageDiv.vue?5d87","webpack:///../../../../src/components/VCalendar/util/timestamp.ts"],"names":["data","methods","getKeywords","content","vmid","name","getMetaDescription","getAuthor","getSocialMediaMetas","title","description","imageUrl","imageAlt","this","getMetaOGs","getMetaTwitters","metas","push","getMetaOGTitle","getMetaOGDescription","getMetaOGImageSource","getMetaOGImageAlt","getMetaPageUrl","getMetaOGType","property","window","location","origin","$router","currentRoute","fullPath","getMetaTwitterCard","getMetaTwitterTitle","getMetaTwitterDescription","getMetaTwitterImage","getMetaTwitterImageAlt","getMetaTwitterSite","getMetaTwitterCreator","mixins","FormatMixin","numbers","rules","required","value","requiredExcept","isAccepted","email","pattern","test","date","birthdayInRange","getBirthdayValidation","birthdayOfAccountOwnerInRange","account_age_limit","password","nameLength","length","validName","validRange","min","max","timeRangeValidation","timestart","timeEnd","phoneNumberLength","maxLength","confirmPassword","agreeTerms","ageLimit","error","Date","parseDate","minBirthdate","maxBirthdate","createUTCDate","year","month","day","UTC","isFinite","getUTCFullYear","setUTCFullYear","firstWeekOffset","firstDayOfWeek","firstDayOfYear","firstWeekDayInFirstWeek","firstWeekDayOfYear","getUTCDay","dayOfYear","isLeapYear","weeksInYear","weekOffset","weekOffsetNext","daysInYear","weekNumber","localeFirstDayOfYear","week","Math","ceil","computed","mapState","fuelTypes","state","foodRestrictions","productStatuses","suppliers","roadtripLabels","vehicleMakes","countries","productCategories","accountOrigins","roadtripLocationTypes","getFuelType","id","undefined","fuel","find","x","item1","item2","replace","getFoodRestrictions","allergies","allergyInfo","map","v","o","toLowerCase","join","getFoodRestriction","allergy","getProductStatusId","status","getProductCategoryId","category","getRoadtripLabelId","label","getRoadtripLabel","getSupplierName","supplier","getLocationTypeName","roadtripLocationType","getVehicleMake","make","getCountryName","country","getAccountOriginId","isElectricCar","fuelTypeId","attrs","staticRenderFns","props","isLoading","imgClass","component","Vue","extend","getDefaultMouseEventHandlers","suffix","getEvent","listeners","Object","keys","$listeners","filter","key","endsWith","reduce","acc","event","slice","getMouseEventHandlers","prevent","result","events","on","eventOptions","prefix","passive","once","capture","handler","e","mouseEvent","button","buttons","preventDefault","stop","stopPropagation","classSeparator","eventTargetClasses","currentTarget","_a","className","split","currentTargets","document","elementsFromPoint","changedTouches","clientX","clientY","t","some","c","includes","target","_b","isSameNode","dispatchEvent","TouchEvent","type","targetTouches","touches","$emit","Array","isArray","now","String","validator","validateTimestamp","times","parseTimestamp","today","parsedNow","watch","created","updateTimes","setPresent","present","past","future","getNow","updateDay","updateTime","weekday","time","hour","minute","MILLIS_IN_DAY","getVisuals","minStart","visuals","columnCount","column","left","width","sort","a","b","startTimestampIdentifier","endTimestampIdentifier","hasOverlap","s0","e0","s1","e1","exclude","setColumnCount","groups","forEach","group","groupVisual","getRange","getDayRange","startIdentifier","endIdentifier","getNormalizedRange","dayStart","getOpenGroup","start","end","timed","i","intersected","k","groupStart","groupEnd","getOverlapGroupHandler","firstWeekday","reset","dayEvents","getTimestampIdentifier","visual","targetGroup","FULL_WIDTH","DEFAULT_OFFSET","WIDTH_MULTIPLIER","stack","overlapThreshold","getGroups","nodes","child","getNode","index","getNextIndex","parent","getParent","sibling","addTime","children","getOverlappingRange","grand","grandNext","calculateBounds","node","columns","getMaxChildIndex","spaceLeft","spaceWidth","offset","columnWidthMultiplier","getColumnWidthMultiplier","columnOffset","columnWidth","hasFullWidth","maxColumn","minColumn","getOverlappingIndices","indices","other","indexMin","indexMax","returnFirstColumn","overlapping","first","n","added","childMax","identifier","minutes","removeMinutes","totalMinutes","addHours","floor","addMinutes","CalendarEventOverlapModes","base","Number","validate","default","weekdays","validateWeekdays","hideHeader","Boolean","shortWeekdays","weekdayFormat","Function","dayFormat","intervals","maxDays","shortIntervals","intervalHeight","validateNumber","intervalWidth","intervalMinutes","firstInterval","firstTime","validateTime","intervalCount","intervalFormat","intervalStyle","showIntervalLabel","weeks","minWeeks","shortMonths","showMonthOnFirst","showWeek","monthFormat","calendar","categories","categoryText","categoryHideDynamic","categoryShowAll","categoryForInvalid","categoryDays","parseInt","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventName","eventOverlapThreshold","eventOverlapMode","mode","eventMore","eventMoreText","eventRipple","eventMarginBottom","input","ints","DAYS_IN_WEEK","visited","wrapped","d","Colorable","Localable","Mouse","Themeable","Times","directives","Resize","parsedWeekdays","weekdaySkips","getWeekdaySkips","weekdaySkipsReverse","reversed","reverse","parsedStart","parsedEnd","days","createDayList","dayFormatter","options","timeZone","createNativeLocaleFormatter","currentLocale","_tms","_short","weekdayFormatter","longOptions","shortOptions","short","getRelativeClasses","timestamp","outside","getStartOfWeek","getEndOfWeek","getFormatter","locale","parseEvent","startProperty","endProperty","startInput","endInput","startParsed","endParsed","isTimedless","updateHasTime","getDayIdentifier","endOffset","hasTime","allDay","isEventOn","dayIdentifier","isEventHiddenOn","isEventStart","isEventOverlapping","WIDTH_FULL","WIDTH_START","MINUTES_IN_DAY","CalendarBase","ripple","noEvents","parsedEvents","parsedEventOverlapThreshold","eventTimedFunction","eventCategoryFunction","eventTextColorFunction","eventNameFunction","timedEvent","eventModeFunction","eventWeekdays","categoryMode","eventColorFunction","color","formatTime","withTime","ampm","formatter","updateEventVisibility","eventsMap","getEventsMap","more","parentBounds","getBoundingClientRect","last","eventsSorted","bottom","hidden","hide","style","display","innerHTML","$vuetify","lang","elements","$refs","el","getAttribute","parentElement","genDayEvent","weekdayIdentifier","scope","eventParsed","genEvent","staticClass","class","height","ref","refInFor","genTimedEvent","timeDelta","top","timeToY","scopeInput","slot","$scopedSlots","text","background","overlapsNoon","singline","diffMinutes","timeSummary","eventSummary","delimiter","$createElement","setTextColor","setBackgroundColor","nativeEvent","genName","genPlaceholder","genMore","getVisibleEvents","isEventForCategory","categoryName","getEventsForDay","getEventsForDayAll","getEventsForDayTimed","getScopedSlots","isNode","getSlotChildren","getter","mapper","mapped","slots","slotDay","slotDayHeader","slotDayBody","concat","classes","themeClasses","parsedMinWeeks","minDays","MAX_SAFE_INTEGER","todayWeek","monthFormatter","isOutside","genHead","role","genHeadDays","header","genHeadDay","unshift","genWeeks","weekDays","genWeek","getWeekNumber","weekNodes","genDay","genWeekNumber","determineDay","genDayLabel","getSlot","genDayLabelButton","hasMonth","VBtn","fab","depressed","small","genDayMonth","render","h","dragstart","VCalendarWeekly","getStartOfMonth","getEndOfMonth","parsedFirstInterval","parsedIntervalMinutes","parsedIntervalCount","parsedIntervalHeight","parseFloat","parsedFirstTime","parseTime","firstMinute","bodyHeight","count","createIntervalList","intervalFormatter","shortHourOptions","tms","showIntervalLabelDefault","interval","isFirst","intervalStyleDefault","_interval","getTimestampAtEvent","copyTimestamp","bounds","baseMinutes","touchEvent","addIntervals","updateMinutes","getSlotScope","minutesToPixels","scrollToTime","y","pane","scrollArea","scrollTop","clamp","gap","CalendarWithIntervals","scrollPush","mounted","init","$nextTick","onResize","getScrollPush","area","offsetWidth","marginRight","genHeadIntervals","convertToUnit","genHeadWeekday","genHeadDayLabel","genDayHeader","genHeadDayButton","genBody","genScrollArea","genPane","genDayContainer","genBodyIntervals","genDays","genDayIntervals","genDayBody","genDayInterval","styler","genIntervalLabels","genIntervalLabel","shower","show","modifiers","quiet","parsedCategoryText","getParsedCategories","VCalendarDaily","parsedCategories","genDayHeaderCategory","getCategoryScope","cat","headerTitle","genDayHeaderCategoryTitle","j","fill","categoryIndex","genDayBodyCategory","CalendarWithEvents","lastStart","lastEnd","parsedValue","parsedCategoryDays","renderProps","around","VCalendarMonthly","relativeDays","nextDay","updateFormatted","VCalendarCategory","getCategoryList","Error","spanYears","spanMonths","monthShortFormatter","monthLongFormatter","checkChange","updated","requestAnimationFrame","move","amount","moved","forward","mover","prevDay","limit","DAYS_IN_MONTH_MAX","DAY_MIN","updateWeekday","updateRelative","timestampToDate","getTime","next","prev","$children","categoryMap","categoryLength","ev","hasOwnProperty","$props","scopedSlots","durationOfTheDay","getEventColor","_vm","goToEventLink","_c","eventDate","defaultFirstTimeOfTheDay","defaultDurationOfTheDay","firstTimeOfTheDay","editTitle","inset","vertical","orientation","$attrs","current","imageSource","fn","templateClass","PARSE_REGEX","PARSE_TIME","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","DAYS_IN_MONTH_MIN","MONTH_MAX","MONTH_MIN","MINUTES_IN_HOUR","MINUTE_MAX","HOUR_MAX","OFFSET_YEAR","OFFSET_MONTH","OFFSET_HOUR","OFFSET_TIME","findWeekday","daysInMonth","exec","parts","hasDay","getFullYear","getMonth","getDate","getDay","getHours","getMinutes","getTimeIdentifier","getWeekday","_","m","C","Y","padNumber","padded","str","M","D","skips","filled","skip","currentIdentifier","stopped","mins","int","getOptions","emptyFormatter","_t","_s","Intl","DateTimeFormat","intlFormatter","format"],"mappings":"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","file":"js/chunk-276a88e3.e055102b.js","sourcesContent":["export default {\r\n data: function() {\r\n return {\r\n }\r\n },\r\n methods: \r\n {\r\n getKeywords(content)\r\n { \r\n return {\r\n vmid: \"keywords\",\r\n name: \"keywords\",\r\n content: `Roadpursuit, roadtrip, roadtrips, rijden, toeren, toerrit, rit, driving, passie, cars, auto's, liefhebbers, auto community, ${content}`\r\n }\r\n },\r\n getMetaDescription(content)\r\n { \r\n return {\r\n vmid: \"description\",\r\n name: \"description\",\r\n content: content\r\n }\r\n },\r\n getAuthor()\r\n {\r\n return {\r\n vmid: \"author\",\r\n name: \"author\",\r\n content: `Roadpursuit`\r\n }\r\n },\r\n\r\n getSocialMediaMetas(title, description, imageUrl, imageAlt)\r\n {\r\n return [\r\n ...this.getMetaOGs(title, description, imageUrl, imageAlt),\r\n ...this.getMetaTwitters(title, description, imageUrl, imageAlt)\r\n ];\r\n\r\n },\r\n \r\n // OG -> Open Graph / Facebook tags\r\n // have a very nice preview when sharing your website on facebook.\r\n getMetaOGs(title, description, imageUrl, imageAlt)\r\n {\r\n let metas = [];\r\n metas.push(this.getMetaOGTitle(title));\r\n metas.push(this.getMetaOGDescription(description));\r\n\r\n if (imageUrl != \"\")\r\n {\r\n metas.push(this.getMetaOGImageSource(imageUrl));\r\n metas.push(this.getMetaOGImageAlt(imageAlt));\r\n }\r\n \r\n metas.push(this.getMetaPageUrl());\r\n metas.push(this.getMetaOGType());\r\n return metas;\r\n },\r\n getMetaOGType()\r\n { \r\n return {\r\n vmid: \"og:type\",\r\n property: \"og:type\",\r\n content: \"website\"\r\n }\r\n },\r\n getMetaOGTitle(content)\r\n { \r\n return {\r\n vmid: \"og:title\",\r\n property: \"og:title\",\r\n content: content\r\n }\r\n },\r\n getMetaOGDescription(content)\r\n { \r\n return {\r\n vmid: \"og:description\",\r\n property: \"og:description\",\r\n content: content\r\n }\r\n },\r\n getMetaOGImageSource(content)\r\n { \r\n return {\r\n vmid: \"og:image\",\r\n property: \"og:image\",\r\n content: content // image url\r\n }\r\n },\r\n getMetaOGImageAlt(content)\r\n { \r\n return {\r\n vmid: \"og:image:alt\",\r\n property: \"og:image:alt\",\r\n content: content\r\n }\r\n },\r\n getMetaPageUrl()\r\n { \r\n return {\r\n vmid: \"og:url\",\r\n property: \"og:url\",\r\n content: `${window.location.origin}${this.$router.currentRoute.fullPath}`\r\n }\r\n },\r\n\r\n // Twitter tags\r\n // have a nice twitter preview when sharing your website on twitter\r\n getMetaTwitters(title, description, imageUrl, imageAlt)\r\n {\r\n let metas = [];\r\n metas.push(this.getMetaTwitterCard());\r\n metas.push(this.getMetaTwitterTitle(title));\r\n metas.push(this.getMetaTwitterDescription(description));\r\n\r\n if (imageUrl != \"\")\r\n {\r\n metas.push(this.getMetaTwitterImage(imageUrl));\r\n metas.push(this.getMetaTwitterImageAlt(imageAlt));\r\n }\r\n \r\n metas.push(this.getMetaTwitterSite());\r\n metas.push(this.getMetaTwitterCreator());\r\n return metas;\r\n },\r\n getMetaTwitterCard()\r\n {\r\n return {\r\n vmid: \"twitter:card\",\r\n name:\"twitter:card\",\r\n content: \"summary\" // must be set to a value of “summary”\r\n }\r\n },\r\n getMetaTwitterTitle(content)\r\n {\r\n return {\r\n vmid: \"twitter:title\",\r\n name:\"twitter:title\", \r\n content: content\r\n }\r\n },\r\n getMetaTwitterDescription(content)\r\n {\r\n return {\r\n vmid: \"twitter:description\",\r\n name:\"twitter:description\",\r\n content: content\r\n }\r\n },\r\n getMetaTwitterImage(content)\r\n {\r\n return {\r\n vmid: \"twitter:image\",\r\n name:\"twitter:image\",\r\n content: content\r\n }\r\n },\r\n getMetaTwitterImageAlt(content)\r\n {\r\n return {\r\n vmid: \"twitter:image:alt\",\r\n name:\"twitter:image:alt\", \r\n content: content // maximum 420 characters.\r\n }\r\n },\r\n getMetaTwitterSite()\r\n {\r\n return {\r\n vmid: \"twitter:site\",\r\n name:\"twitter:site\",\r\n content: \"@roadpursuit\" // the Twitter @username the card should be attributed to.\r\n }\r\n },\r\n getMetaTwitterCreator()\r\n {\r\n return {\r\n vmid: \"twitter:creator\",\r\n name:\"twitter:creator\",\r\n content: \"Roadpursuit\"\r\n }\r\n }\r\n }\r\n}","import FormatMixin from \"@/mixins/format.mixin\";\r\nexport default {\r\n mixins: [FormatMixin],\r\n data: function () {\r\n return {\r\n numbers: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\r\n rules: {\r\n required: value => !!value || 'Veld is verplicht.',\r\n requiredExcept(value, isAccepted)\r\n {\r\n // If value is not empty or value is equal to accepted value, return true\r\n // Else, return error.\r\n if (!!value || isAccepted) return true;\r\n return 'Veld is verplicht.';\r\n },\r\n email: value => {\r\n const pattern = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n return pattern.test(value) || 'Invalid e-mail.'\r\n },\r\n date: value => {\r\n if(value == null || value == \"\") return true;\r\n const pattern = /^(0[1-9]|[12][0-9]|3[01])[-](0[1-9]|1[012])[-](19|20)\\d\\d$/\r\n return pattern.test(value) || 'DD-MM-YYYY format'\r\n },\r\n birthdayInRange: value => {\r\n if (value == null || value == \"\") return true;\r\n return this.getBirthdayValidation(value, 0);\r\n },\r\n birthdayOfAccountOwnerInRange: value => {\r\n if (value == null || value == \"\") return true;\r\n return this.getBirthdayValidation(value, this.account_age_limit);\r\n },\r\n password: value => !!value || 'Wachtwoord is verplicht',\r\n\r\n // name validations\r\n nameLength: value => (value || '' ).length <= 35 || 'Uw naam is te lang.',\r\n validName: value => {\r\n if(value == null || value == \"\") return true;\r\n // eslint-disable-next-line no-useless-escape\r\n const pattern = /^\\s*([A-Za-z]([\\.,] |[-']| ))+[A-Za-z]+\\.?\\s*|\\w+$/\r\n return pattern.test(value) || 'Uw naam kan alleen uit letters bestaan.'\r\n },\r\n\r\n // number validations\r\n validRange(value, min, max) {\r\n return (value || \"\") >= min && (value || \"\") <= max || `Data geldig: [${min}-${max}]`;\r\n },\r\n\r\n timeRangeValidation(timestart, timeEnd)\r\n {\r\n // timeStart should be less that timeEnd.\r\n if (timestart < timeEnd) return true;\r\n return 'De vertrektijd moet later zijn dan de aankomsttijd.';\r\n },\r\n\r\n phoneNumberLength: value => (value || '' ).length <= 20 || 'Telefoonnummer is te lang.',\r\n maxLength(value, max) {\r\n return (value || '' ).length <= max || 'Ingevoerde data te lang.';\r\n },\r\n confirmPassword: value => value === this.password || 'De nieuwe wachtwoorden komen niet overeen.',\r\n agreeTerms: value => !!value || 'U dient de algemene voorwaarden en privacyverklaring te accepteren om verder te kunnen gaan.',\r\n }\r\n }\r\n },\r\n methods: {\r\n getBirthdayValidation(value, ageLimit)\r\n {\r\n let error = '';\r\n // eslint-disable-next-line no-unused-vars\r\n try \r\n {\r\n let date = new Date(this.parseDate(value));\r\n let min = new Date(this.minBirthdate())\r\n let max = new Date(this.maxBirthdate(ageLimit));\r\n\r\n if (date < min)\r\n {\r\n error = 'Datum is niet geldig.';\r\n }\r\n else if (date > max)\r\n {\r\n error = ageLimit == this.account_age_limit \r\n ? 'De accounthouder dient altijd minimaal 16 jaar oud te zijn.'\r\n : 'Datum ligt in de toekomst.';\r\n }\r\n }\r\n catch\r\n {\r\n error = 'Datum is niet geldig.';\r\n }\r\n\r\n return error == '' ? true : error;\r\n }\r\n }\r\n}","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoadingIcon.vue?vue&type=style&index=0&id=4cf14fb6&prod&lang=css&\"","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 * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EventSlotCalendar.vue?vue&type=style&index=0&id=ebac5a30&prod&lang=css&\"","import { mapState } from 'vuex';\r\nexport default {\r\n computed:\r\n {\r\n ...mapState('menuHelper', {\r\n fuelTypes: state => state.fuelTypes,\r\n foodRestrictions: state => state.foodRestrictions,\r\n productStatuses: state => state.productStatuses,\r\n suppliers: state => state.suppliers,\r\n roadtripLabels: state => state.roadtripLabels,\r\n vehicleMakes: state => state.vehicleMakes,\r\n countries: state => state.countries,\r\n productCategories: state => state.productCategories,\r\n accountOrigins: state => state.accountOrigins,\r\n roadtripLocationTypes: state => state.roadtripLocationTypes\r\n }),\r\n },\r\n methods: \r\n {\r\n getFuelType(id)\r\n {\r\n if(id == undefined) return;\r\n\r\n let fuel = this.fuelTypes.find(x => x.item1 == id);\r\n return fuel ? fuel.item2.replace('_', ' ') : '';\r\n },\r\n getFoodRestrictions(allergies){\r\n let allergyInfo = allergies.map(v => this.foodRestrictions.find(o => o.item1 === v).item2.toLowerCase()).join(', ');\r\n return allergyInfo == '' ? '-' : allergyInfo;\r\n },\r\n getFoodRestriction(id){\r\n if(id == undefined) return;\r\n\r\n let allergy = this.foodRestrictions.find(x => x.item1 == id);\r\n return allergy ? allergy.item2 : '';\r\n },\r\n getProductStatusId(status)\r\n {\r\n return this.productStatuses.find(x => x.item2 === status).item1;\r\n },\r\n getProductCategoryId(category)\r\n {\r\n return this.productCategories.find(x => x.item2 === category).item1;\r\n },\r\n getRoadtripLabelId(label)\r\n {\r\n return this.roadtripLabels.find(x => x.item2.toLowerCase() === label.toLowerCase()).item1;\r\n },\r\n getRoadtripLabel(id)\r\n {\r\n let label = this.roadtripLabels.find(x => x.item1 == id);\r\n return label ? label.item2 : '';\r\n },\r\n getSupplierName(id)\r\n {\r\n if(id == undefined) return;\r\n\r\n let supplier = this.suppliers.find(x => x.item1 == id);\r\n return supplier ? supplier.item2 : '';\r\n },\r\n getLocationTypeName(id)\r\n {\r\n if(id == undefined) return;\r\n\r\n let roadtripLocationType = this.roadtripLocationTypes.find(x => x.item1 == id);\r\n return roadtripLocationType ? roadtripLocationType.item2 : '';\r\n },\r\n getVehicleMake(id)\r\n {\r\n let make = this.vehicleMakes.find(x => x.item1 == id);\r\n return make ? make.item2 : '';\r\n },\r\n getCountryName(id)\r\n {\r\n let country = this.countries.find(x => x.item1 == id);\r\n return country ? country.item2 : '';\r\n },\r\n getAccountOriginId(name)\r\n {\r\n return this.accountOrigins.find(x => x.item2 === name).item1;\r\n },\r\n isElectricCar(fuelTypeId)\r\n {\r\n return fuelTypeId == 2;\r\n }\r\n }\r\n}","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-fade-transition',[(_vm.isLoading)?_c('v-overlay',{attrs:{\"absolute\":\"\",\"color\":\"#181717\"}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"color\":\"grey lighten-5\"}})],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoadingIcon.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoadingIcon.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LoadingIcon.vue?vue&type=template&id=4cf14fb6&\"\nimport script from \"./LoadingIcon.vue?vue&type=script&lang=js&\"\nexport * from \"./LoadingIcon.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LoadingIcon.vue?vue&type=style&index=0&id=4cf14fb6&prod&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 null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\n\nexport type MouseHandler = (e: MouseEvent | TouchEvent) => any\n\nexport type MouseEvents = {\n [event: string]: {\n event: string\n passive?: boolean\n capture?: boolean\n once?: boolean\n stop?: boolean\n prevent?: boolean\n button?: number\n result?: any\n }\n}\n\nexport type MouseEventsMap = {\n [event: string]: MouseHandler | MouseHandler[]\n}\n\nexport default Vue.extend({\n name: 'mouse',\n\n methods: {\n getDefaultMouseEventHandlers (suffix: string, getEvent: MouseHandler): MouseEventsMap {\n 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 }, getEvent)\n },\n getMouseEventHandlers (events: MouseEvents, getEvent: MouseHandler): MouseEventsMap {\n const on: MouseEventsMap = {}\n\n for (const event in events) {\n const eventOptions = events[event]\n\n if (!this.$listeners[event]) continue\n\n // TODO somehow pull in modifiers\n\n const prefix = eventOptions.passive ? '&' : ((eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : ''))\n const key = prefix + eventOptions.event\n\n const handler: MouseHandler = e => {\n const mouseEvent: MouseEvent = e as MouseEvent\n if (eventOptions.button === undefined || (mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button)) {\n if (eventOptions.prevent) {\n e.preventDefault()\n }\n if (eventOptions.stop) {\n e.stopPropagation()\n }\n\n // Due to TouchEvent target always returns the element that is first placed\n // Even if touch point has since moved outside the interactive area of that element\n // Ref: https://developer.mozilla.org/en-US/docs/Web/API/Touch/target\n // This block of code aims to make sure touchEvent is always dispatched from the element that is being pointed at\n if (e && '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 this.$emit(event, getEvent(e), e)\n }\n\n return eventOptions.result\n }\n\n if (key in on) {\n /* istanbul ignore next */\n if (Array.isArray(on[key])) {\n (on[key] as MouseHandler[]).push(handler)\n } else {\n on[key] = [on[key], handler] as MouseHandler[]\n }\n } else {\n on[key] = handler\n }\n }\n\n return on\n },\n },\n})\n","import 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 './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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"event-slot\"},[_c('v-sheet',[_c('v-calendar',{ref:\"calendar\",attrs:{\"first-interval\":_vm.firstTimeOfTheDay,\"interval-minutes\":60,\"interval-count\":_vm.durationOfTheDay,\"now\":_vm.eventDate,\"value\":_vm.eventDate,\"events\":_vm.events,\"event-overlap-threshold\":30,\"event-color\":_vm.getEventColor,\"interval-format\":_vm.intervalFormat,\"type\":\"day\"},on:{\"click:event\":_vm.goToEventLink},scopedSlots:_vm._u([{key:\"event\",fn:function({ event }){return [_c('div',{staticClass:\"px-2\"},[_c('strong',[_vm._v(_vm._s(event.name))]),_vm._v(\" \"+_vm._s(_vm.getTimeOnly(event.start))+\" - \"+_vm._s(_vm.getTimeOnly(event.end))+\" \")])]}}])})],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EventSlotCalendar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EventSlotCalendar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EventSlotCalendar.vue?vue&type=template&id=ebac5a30&\"\nimport script from \"./EventSlotCalendar.vue?vue&type=script&lang=js&\"\nexport * from \"./EventSlotCalendar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EventSlotCalendar.vue?vue&type=style&index=0&id=ebac5a30&prod&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 null,\n null\n \n)\n\nexport default component.exports","// Styles\nimport './VDivider.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\nexport default Themeable.extend({\n name: 'v-divider',\n\n props: {\n inset: Boolean,\n vertical: Boolean,\n },\n\n render (h): VNode {\n // WAI-ARIA attributes\n let orientation\n if (!this.$attrs.role || this.$attrs.role === 'separator') {\n orientation = this.vertical ? 'vertical' : 'horizontal'\n }\n return h('hr', {\n class: {\n 'v-divider': true,\n 'v-divider--inset': this.inset,\n 'v-divider--vertical': this.vertical,\n ...this.themeClasses,\n },\n attrs: {\n role: 'separator',\n 'aria-orientation': orientation,\n ...this.$attrs,\n },\n on: this.$listeners,\n })\n },\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 render(){var _vm=this,_c=_vm._self._c;return _c('v-img',{staticClass:\"grey darken-4\",class:_vm.templateClass,attrs:{\"src\":_vm.imageSource,\"lazy-src\":_vm.imageSource,\"aspect-ratio\":\"1\"},scopedSlots:_vm._u([{key:\"placeholder\",fn:function(){return [_c('v-row',{staticClass:\"fill-height ma-0\",attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"color\":\"grey lighten-5\"}})],1)]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageDiv.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageDiv.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageDiv.vue?vue&type=template&id=0fb170df&\"\nimport script from \"./ImageDiv.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageDiv.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","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"],"sourceRoot":""}