{"version":3,"sources":["webpack:///./node_modules/core-js/modules/_string-pad.js","webpack:///./src/components/calendar/CalendarPage.vue?7295","webpack:///./src/components/calendar/components/CreateCompositionGroupDialog.vue?3034","webpack:///./src/components/calendar/components/CreateCompositionGroupDialog.vue","webpack:///./src/components/calendar/components/CreateCompositionGroupDialog.vue?cffa","webpack:///./src/components/calendar/components/CreateCompositionGroupDialog.vue?295a","webpack:///./src/components/calendar/components/CalendarDayList.vue?6836","webpack:///./src/components/calendar/components/CalendarDayListItem.vue?26de","webpack:///./src/components/calendar/components/CalendarDayListItem.vue","webpack:///./src/components/calendar/components/CalendarDayListItem.vue?021c","webpack:///./src/components/calendar/components/CalendarDayListItem.vue?f274","webpack:///./src/components/calendar/components/CalendarDayList.vue","webpack:///./src/components/calendar/components/CalendarDayList.vue?e7d6","webpack:///./src/components/calendar/components/CalendarDayList.vue?e865","webpack:///./src/components/_global/Calendar.vue?686d","webpack:///./src/components/_global/Calendar.vue?bdf3","webpack:///./src/components/_global/Calendar.vue?36a6","webpack:///../../../src/mixins/localable/index.ts","webpack:///../../../../src/components/VCalendar/mixins/mouse.ts","webpack:///../../src/util/dateTimeUtils.ts","webpack:///../../../../src/components/VCalendar/util/timestamp.ts","webpack:///../../../../src/components/VCalendar/mixins/times.ts","webpack:///../../../../src/components/VCalendar/modes/common.ts","webpack:///../../../../src/components/VCalendar/modes/stack.ts","webpack:///../../../../src/components/VCalendar/modes/column.ts","webpack:///../../../../src/components/VCalendar/modes/index.ts","webpack:///../../../../src/components/VCalendar/util/props.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-base.ts","webpack:///../../../../src/components/VCalendar/util/events.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-with-events.ts","webpack:///../../../src/components/VCalendar/VCalendarWeekly.ts","webpack:///../../../src/components/VCalendar/VCalendarMonthly.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-with-intervals.ts","webpack:///../../../src/components/VCalendar/VCalendarDaily.ts","webpack:///../../../../src/components/VCalendar/util/parser.ts","webpack:///../../../src/components/VCalendar/VCalendarCategory.ts","webpack:///../../../src/components/VCalendar/VCalendar.ts","webpack:///./src/components/_global/Calendar.vue?ef81","webpack:///./src/components/calendar/CalendarPage.vue?9e73","webpack:///./src/components/calendar/CalendarPage.vue?2a06","webpack:///./src/components/calendar/CalendarPage.vue?b21a","webpack:///./src/utils/date-helpers.ts","webpack:///./src/config/presence-items.ts","webpack:///./src/api/compositions.ts","webpack:///./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack:///./src/api/raids.ts","webpack:///../../../src/components/VCard/index.ts","webpack:///../../../src/mixins/button-group/index.ts","webpack:///../../../src/components/VBtnToggle/VBtnToggle.ts","webpack:///../../../src/components/VCard/VCard.ts","webpack:///./src/components/_global/Calendar.vue?9959","webpack:///./src/components/calendar/CalendarPage.vue?13fc","webpack:///./node_modules/core-js/modules/es7.string.pad-start.js"],"names":["toLength","repeat","defined","module","exports","that","maxLength","fillString","left","S","String","stringLength","length","fillStr","undefined","intMaxLength","fillLen","stringFiller","call","Math","ceil","slice","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","isLoading","$vuetify","breakpoint","smAndDown","on","prev","_v","next","_s","title","isEditMode","handleToggleEditMode","compositionGroups","ref","handleDayContextMenu","scopedSlots","_u","key","fn","date","isResponsiveMode","filter","x","handleChipContextMenu","handleSignup","_e","class","$event","handleCreateCompositionGroupClick","model","value","callback","$$v","calendar","expression","handleAfterCreateCompositionGroup","contextMenuX","contextMenuY","showContextMenu","tempContextMenuID","handleCopyComposition","$t","contextMenuCopiedID","handlePasteComposition","staticRenderFns","form","$set","displayedRaids","name","zoneID","imageLinks","miniThumbnailZone","close","canSubmit","teamModule","classes","id","raids","$refs","modal","open","raidID","refreshRaids","fetchRaids","compositions","createComposition","currentTeam","onAfterCreate","handleAPIError","State","VBtn","VCard","VCardActions","VCardText","VCardTitle","VDivider","VTextField","staticStyle","_l","compositionGroup","onContextMenu","onSignup","style","raid","thumbnailZone","isPublished","preventDefault","ev","apply","arguments","signups","signupState","signupStates","ACCEPTED","color","icon","theme","dark","presenceItems","selectable","presenceItem","handleSignupClick","mySignup","find","newSignupState","default","type","Boolean","VIcon","VListItem","VListItemAction","VListItemActionText","VList","VListItemContent","VListItemSubtitle","VListItemTitle","components","CalendarDayListItem","directives","rawName","updateRange","proxy","present","day","month","handleContextMenu","start","_t","focus","monthDay","k","createDateStringByDay","today","monthDays","Date","val","$emit","internalModel","end","range","getDateStringByYearMonth","externalModel","year","onDayContextMenu","CalendarDayList","props","locale","computed","currentLocale","lang","methods","getDefaultMouseEventHandlers","getMouseEventHandlers","event","prevent","result","eventOptions","events","prefix","handler","e","mouseEvent","getEvent","Array","createUTCDate","isFinite","firstWeekOffset","firstWeekDayInFirstWeek","firstDayOfWeek","firstWeekDayOfYear","dayOfYear","isLeapYear","weeksInYear","weekOffset","weekOffsetNext","daysInYear","week","PARSE_REGEX","PARSE_TIME","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","DAYS_IN_MONTH_MIN","DAYS_IN_MONTH_MAX","MONTH_MAX","MONTH_MIN","DAY_MIN","DAYS_IN_WEEK","MINUTES_IN_HOUR","MINUTE_MAX","MINUTES_IN_DAY","HOUR_MAX","OFFSET_YEAR","OFFSET_MONTH","OFFSET_HOUR","OFFSET_TIME","copyTimestamp","findWeekday","weekdays","updateFormatted","updateRelative","updateWeekday","daysInMonth","input","parts","parseInt","required","parseDate","now","Error","timestamp","time","hour","minute","weekday","hasDay","hasTime","past","future","getDayIdentifier","getTimeIdentifier","a","b","getTime","minutes","getWeekday","getDate","_","m","C","Y","padded","str","padNumber","mover","days","max","min","M","D","h","maxDays","skips","filled","i","skip","j","stop","current","currentIdentifier","stopped","weekdaySkips","relativeDays","nextDay","intervals","mins","first","int","updateMinutes","emptyFormatter","Intl","intlFormatter","getOptions","validator","validateTimestamp","data","times","parsedNow","watch","created","setPresent","updateTimes","getNow","updateDay","target","updateTime","MILLIS_IN_DAY","minStart","visuals","columnCount","column","width","exclude","s0","e0","groups","group","groupVisual","dayStart","intersected","hasOverlap","timed","getRange","getDayRange","groupStart","groupEnd","reset","getVisuals","getTimestampIdentifier","dayEvents","visual","setColumnCount","targetGroup","getOpenGroup","FULL_WIDTH","DEFAULT_OFFSET","WIDTH_MULTIPLIER","firstWeekday","overlapThreshold","getOverlapGroupHandler","getGroups","nodes","child","getNode","index","getNextIndex","parent","getParent","addTime","getOverlappingRange","children","grand","grandNext","calculateBounds","columns","getMaxChildIndex","spaceLeft","spaceWidth","offset","columnWidthMultiplier","getColumnWidthMultiplier","node","columnOffset","columnWidth","hasFullWidth","maxColumn","minColumn","c","getOverlappingIndices","indices","other","returnFirstColumn","overlapping","n","getNormalizedRange","added","sibling","childMax","removeMinutes","identifier","totalMinutes","addHours","addMinutes","CalendarEventOverlapModes","stack","base","Number","validate","validateWeekdays","hideHeader","shortWeekdays","weekdayFormat","dayFormat","shortIntervals","intervalHeight","validateNumber","intervalWidth","intervalMinutes","firstInterval","firstTime","validateTime","intervalCount","intervalFormat","intervalStyle","showIntervalLabel","weeks","localeFirstDayOfYear","minWeeks","shortMonths","showMonthOnFirst","showWeek","monthFormat","category","categories","categoryText","Function","categoryHideDynamic","categoryShowAll","categoryForInvalid","categoryDays","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventName","eventOverlapThreshold","eventOverlapMode","mode","eventMore","eventMoreText","eventRipple","eventMarginBottom","ints","visited","wrapped","d","mixins","Resize","parsedWeekdays","getWeekdaySkips","weekdaySkipsReverse","reversed","reverse","parsedStart","parsedEnd","createDayList","dayFormatter","options","timeZone","createNativeLocaleFormatter","weekdayFormatter","longOptions","shortOptions","short","getRelativeClasses","outside","getStartOfWeek","getEndOfWeek","getFormatter","startInput","endInput","startParsed","endParsed","isTimedless","updateHasTime","startIdentifier","startTimestampIdentifier","endIdentifier","endOffset","endTimestampIdentifier","allDay","dayIdentifier","isEventOn","WIDTH_FULL","WIDTH_START","ripple","noEvents","parsedEvents","map","parsedEventOverlapThreshold","eventTimedFunction","eventCategoryFunction","eventTextColorFunction","eventNameFunction","eventModeFunction","eventWeekdays","categoryMode","eventColorFunction","parseEvent","formatTime","formatter","withTime","updateEventVisibility","eventsMap","more","parentBounds","last","hide","hidden","eventBounds","t","getEventsMap","elements","el","genDayEvent","weekdayIdentifier","scope","eventParsed","genEvent","height","refInFor","genTimedEvent","isEventHiddenOn","top","bottom","slot","$scopedSlots","text","background","overlapsNoon","singline","diffMinutes","timeSummary","eventSummary","delimiter","scopeInput","setTextColor","setBackgroundColor","nativeEvent","genName","domProps","innerHTML","genPlaceholder","genMore","click","display","getVisibleEvents","isEventOverlapping","isEventForCategory","getEventsForDay","isEventStart","getEventsForDayAll","getEventsForDayTimed","getScopedSlots","isNode","getSlotChildren","getter","mapper","mapped","slots","slotDay","slotDayHeader","slotDayBody","parsedMinWeeks","minDays","todayWeek","monthFormatter","isOutside","genHead","genHeadDays","header","genHeadDay","genWeeks","weekDays","genWeek","getWeekNumber","weekNodes","genWeekNumber","weekNumber","determineDay","genDay","genDayLabel","genDayLabelButton","hasMonth","fab","depressed","small","genDayMonth","render","dragstart","getStartOfMonth","getEndOfMonth","parsedFirstInterval","parsedIntervalMinutes","parsedIntervalCount","parsedIntervalHeight","parseFloat","parsedFirstTime","parseTime","firstMinute","bodyHeight","count","createIntervalList","intervalFormatter","shortHourOptions","tms","showIntervalLabelDefault","isFirst","interval","intervalStyleDefault","getTimestampAtEvent","bounds","baseMinutes","touchEvent","touches","clientY","addIntervals","getSlotScope","scrollToTime","y","timeToY","pane","minutesToPixels","clamp","timeDelta","gap","scrollPush","themeClasses","mounted","init","onResize","getScrollPush","area","marginRight","genHeadIntervals","genHeadWeekday","genHeadDayLabel","genDayHeader","genHeadDayButton","genBody","genScrollArea","genPane","genDayContainer","genDays","genDayIntervals","genDayBody","genDayInterval","styler","genBodyIntervals","genIntervalLabels","genIntervalLabel","shower","show","label","modifiers","quiet","categoryName","parsedCategoryText","parsedCategories","getParsedCategories","getCategoryScope","cat","genDayHeaderCategory","headerTitle","genDayHeaderCategoryTitle","v","genDayBodyCategory","lastStart","lastEnd","parsedValue","parsedCategoryDays","renderProps","around","component","getCategoryList","spanYears","spanMonths","monthShortFormatter","monthLongFormatter","updated","window","checkChange","move","amount","moved","forward","limit","$children","parseTimestamp","timestampToDate","categoryMap","categoryLength","VCalendar","VChip","VSheet","startMonth","startYear","hasPermission","roles","MANAGE_COMPOSITIONS","calendarRef","forceLoading","fetchCompositions","oldVal","createCompositionGroupDialog","triggerShowContextMenu","tempContextMenuDate","canManageCompositions","$nextTick","clientX","$snackbar","openInfo","copyComposition","compositionGroupID","setSignupState","characterID","comment","role","deep","CreateCompositionGroupDialog","Calendar","VBtnToggle","VCol","VContainer","VMenu","VRow","createDateString","toString","padStart","getLocaleString","toLocaleString","getLocaleStringFromDateString","dateString","parse","getLocaleStringFromDateStringWithOptions","getDateTimeString","getTimezoneOffset","toISOString","getElegantDateString","toLocaleDateString","getElegantDateStringFromString","dateAsString","getMonthName","monthNumber","getDateStringFromDateTimeAsString","dateTimeAsString","split","getDateString","smartDisplayDays","numberOfDays","years","floor","months","push","join","differenceInMinutesBetweenDates","date1","date2","round","differenceInDaysBetweenDates","UTC","getFullYear","getMonth","getMaxDate","dates","reduce","getTimeSince","referenceDate","onlyMinutes","intervalType","seconds","UNKNOWN","TENTATIVE","DECLINED","teamID","get","fetchCompositionGroup","withSignups","withCompositions","withUnknownSignups","arrayFields","payload","post","editComposition","put","compositionToCopyID","destinationDate","deleteCompositionGroup","delete","saveAll","broadcastToDiscord","compositionID","togglePublished","patch","toggleLocked","$export","MAX_SAFE_INTEGER","VCardSubtitle","provide","btnToggle","genData","backgroundColor","borderless","dense","rounded","shaped","tile","flat","hover","img","link","loaderHeight","raised","styles","genProgress","tag","$slots","$pad","userAgent","WEBKIT_BUG","test","P","F"],"mappings":"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","file":"dist/js/chunk-04f58356.fd6926fd.js","sourcesContent":["// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"fill-height\"},[_c('v-container',{staticClass:\"fill-height align-baseline\",attrs:{\"fluid\":\"\",\"px-0\":\"\",\"grid-list-xl\":\"\"}},[_c('v-row',{staticClass:\"align-center\",attrs:{\"cols\":\"12\"}},[_c('v-col',{staticClass:\"mr-auto\",attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"disabled\":_vm.isLoading,\"small\":_vm.$vuetify.breakpoint.smAndDown,\"depressed\":\"\"},on:{\"click\":_vm.prev}},[_c('v-icon',[_vm._v(\"mdi-chevron-left\")])],1),_c('v-btn',{attrs:{\"disabled\":_vm.isLoading,\"small\":_vm.$vuetify.breakpoint.smAndDown,\"depressed\":\"\"},on:{\"click\":_vm.next}},[_c('v-icon',[_vm._v(\"mdi-chevron-right\")])],1)],1),_c('v-col',[_c('div',{staticClass:\"d-flex align-center\"},[(_vm.$vuetify.breakpoint.smAndDown)?_c('h3',{staticClass:\"text-center flex-grow-1\"},[_vm._v(_vm._s(_vm.title))]):_c('h2',{staticClass:\"text-center flex-grow-1\"},[_vm._v(_vm._s(_vm.title))]),_c('v-btn-toggle',{attrs:{\"value\":_vm.isEditMode ? 0 : undefined,\"dense\":\"\"},on:{\"change\":_vm.handleToggleEditMode}},[_c('v-btn',{attrs:{\"disabled\":_vm.isLoading || _vm.compositionGroups == null || _vm.compositionGroups.length == 0,\"small\":_vm.$vuetify.breakpoint.smAndDown}},[_c('v-icon',[_vm._v(\"checklist\")])],1)],1)],1)])],1),(_vm.isLoading && _vm.compositionGroups == null)?_c('app-loading'):_c('v-row',{staticClass:\"mt-0 fill-height align-baseline content-fade-in\",attrs:{\"cols\":\"12\"}},[_c('v-col',[_c('calendar',{ref:\"calendarRef\",attrs:{\"on-day-context-menu\":_vm.handleDayContextMenu},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar date = ref.date;\nvar isResponsiveMode = ref.isResponsiveMode;\nreturn [_c('div',{staticClass:\"d-flex flex-column fill-height justify-space-between gap-2\"},[_c('div',[(_vm.compositionGroups)?_c('calendar-day-list',{attrs:{\"composition-groups\":_vm.compositionGroups.filter(function (x) { return x.date === date; }),\"on-context-menu\":_vm.handleChipContextMenu,\"is-edit-mode\":_vm.isEditMode,\"on-signup\":_vm.handleSignup}}):_vm._e()],1),(_vm.canManageCompositions)?_c('div',{staticClass:\"d-flex justify-end\"},[_c('v-btn',{class:[{'appear-with-mouse': !isResponsiveMode}],attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.handleCreateCompositionGroupClick(date)}}},[_c('v-icon',[_vm._v(\"fas fa-plus\")])],1)],1):_vm._e()])]}}]),model:{value:(_vm.calendar),callback:function ($$v) {_vm.calendar=$$v},expression:\"calendar\"}})],1)],1),_c('create-composition-group-dialog',{ref:\"createCompositionGroupDialog\",attrs:{\"on-after-create\":_vm.handleAfterCreateCompositionGroup}}),_c('v-menu',{attrs:{\"position-x\":_vm.contextMenuX,\"position-y\":_vm.contextMenuY,\"content-class\":\"calendar-context-menu\",\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.showContextMenu),callback:function ($$v) {_vm.showContextMenu=$$v},expression:\"showContextMenu\"}},[_c('v-list',[_c('v-list-item',{attrs:{\"disabled\":!_vm.tempContextMenuID},on:{\"click\":_vm.handleCopyComposition}},[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t('composition.copy')))])],1),_c('v-list-item',{attrs:{\"disabled\":!_vm.contextMenuCopiedID},on:{\"click\":_vm.handlePasteComposition}},[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t('composition.paste')))])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('app-dialog',{ref:\"modal\",attrs:{\"persistent\":true}},[(_vm.form)?_c('v-card',[_c('v-card-title',{staticClass:\"headline\",attrs:{\"primary-title\":\"\"}},[_vm._v(_vm._s(_vm.$t('composition.create')))]),_c('v-card-text',{staticClass:\"py-5\"},[_c('v-text-field',{attrs:{\"label\":_vm.$t('composition.event_name'),\"outlined\":\"\",\"dense\":\"\",\"autofocus\":\"\",\"counter\":\"50\",\"maxlength\":\"50\"},model:{value:(_vm.form.name),callback:function ($$v) {_vm.$set(_vm.form, \"name\", $$v)},expression:\"form.name\"}}),_c('app-select',{attrs:{\"label\":_vm.$t('composition.instance'),\"items\":_vm.displayedRaids,\"item-text\":function (x) { return x.name; },\"item-image\":function (x) { return x.zoneID ? _vm.imageLinks.miniThumbnailZone(x.zoneID) : null; },\"item-value\":\"id\",\"outlined\":\"\",\"dense\":\"\"},model:{value:(_vm.form.raidID),callback:function ($$v) {_vm.$set(_vm.form, \"raidID\", $$v)},expression:\"form.raidID\"}})],1),_c('v-divider'),_c('v-card-actions',[_c('div',{staticClass:\"flex-grow-1\"}),_c('v-btn',{attrs:{\"text\":\"\"},on:{\"click\":_vm.close}},[_vm._v(_vm._s(_vm.$t('modal.cancel')))]),_c('v-btn',{attrs:{\"loading\":_vm.isLoading,\"disabled\":!_vm.canSubmit,\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.handleCreateCompositionGroupClick}},[_vm._v(_vm._s(_vm.$t('composition.create_event'))+\"\\n\\t\\t\\t\")])],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Prop } from \"vue-property-decorator\";\nimport { namespace } from \"vuex-class\";\n\n/**\n * Utils\n */\nimport * as imageLinks from \"@/config/image-links\";\nimport classes from \"@/config/wow/classes\";\n\n/**\n * Helpers\n */\n\n/**\n * Mixins\n */\n\n/**\n * Components\n */\nimport Dialog from \"@/components/_global/Dialog.vue\";\n\n/**\n * API\n */\nimport raidsAPI from \"@/api/raids\";\nimport compositionsAPI from \"@/api/compositions\";\nimport { GetOneTeamResponse } from \"@/api/teams/get-one-team.response\";\nimport { DateOnlyString } from \"@/domain/date-only-string\";\nimport { Guid } from \"@/domain/guid\";\n\n/**\n * VueX Modules\n */\nconst teamModule = namespace(\"team\");\n\ninterface Form {\n\tname: string;\n\tdate: DateOnlyString;\n\traidID: Guid | null;\n}\n\n/**\n * Create composition group modal.\n */\n@Component\nexport default class CreateCompositionGroupDialog extends Vue {\n\t$refs!: {\n\t\tmodal: Dialog;\n\t};\n\n\t/// Injections\n\timageLinks = imageLinks;\n\tclasses = classes;\n\n\t/// Properties\n\t@Prop()\n\tonAfterCreate!: (id: any) => Promise;\n\n\t/// Attributes\n\tisLoading = false;\n\traids: any[] | null = null;\n\n\tget displayedRaids() {\n\t\treturn [{\n\t\t\tname: this.$t(\"composition.no_instance\"),\n\t\t\tid: null\n\t\t}, ...(this.raids ? this.raids : [])];\n\t}\n\n\t/// VueX Modules\n\t@teamModule.State(\"team\")\n\tcurrentTeam!: GetOneTeamResponse;\n\n\t// Form\n\tform: Form | null = null;\n\n\t// date: DateOnlyString | null = null;\n\t// name = \"\";\n\t// raidID: Guid | null = null;\n\n\tget canSubmit() {\n\t\treturn this.form?.name;\n\t}\n\n\t/// Methods\n\tasync open(date: DateOnlyString) {\n\t\tthis.$refs.modal.open();\n\n\t\tthis.form = {\n\t\t\tname: \"\",\n\t\t\tdate: date,\n\t\t\traidID: null\n\t\t};\n\n\t\t// this.date = date;\n\t\t// this.name = \"\";\n\t\t// this.raidID = null;\n\n\t\tawait this.refreshRaids();\n\t}\n\n\tclose() {\n\t\tthis.$refs.modal.close();\n\t}\n\n\tasync refreshRaids() {\n\t\tthis.raids = await raidsAPI.fetchRaids();\n\t}\n\n\tasync handleCreateCompositionGroupClick() {\n\t\tconst form = this.form;\n\t\tif (!this.canSubmit || form == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isLoading = true;\n\t\ttry {\n\t\t\tconst id = await compositionsAPI.createComposition(this.currentTeam.id, {\n\t\t\t\tname: form.name,\n\t\t\t\tdate: form.date,\n\t\t\t\traidID: form.raidID\n\t\t\t});\n\t\t\tif (this.onAfterCreate) {\n\t\t\t\tawait this.onAfterCreate(id);\n\t\t\t}\n\t\t\tthis.close();\n\t\t} catch (error) {\n\t\t\tthis.handleAPIError(error);\n\t\t}\n\t\tthis.isLoading = false;\n\t}\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CreateCompositionGroupDialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CreateCompositionGroupDialog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CreateCompositionGroupDialog.vue?vue&type=template&id=7d3e985d&\"\nimport script from \"./CreateCompositionGroupDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./CreateCompositionGroupDialog.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VDivider,VTextField})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.compositionGroups.length > 0)?_c('v-list',{staticClass:\"pa-0 ma-0\",staticStyle:{\"background-color\":\"transparent\"},attrs:{\"two-line\":\"\",\"nav\":\"\"}},[_vm._l((_vm.compositionGroups),function(compositionGroup){return [_c('calendar-day-list-item',{key:compositionGroup.id,attrs:{\"composition-group\":compositionGroup,\"on-context-menu\":_vm.onContextMenu,\"is-edit-mode\":_vm.isEditMode,\"on-signup\":_vm.onSignup}})]})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"mb-2\",style:((\"\\n\\tbackground-color:#555; \\n\\tbackground-image: url(\" + (_vm.compositionGroup.raid ? _vm.imageLinks.thumbnailZone(_vm.compositionGroup.raid.zoneID) : '') + \");\\n\\tbackground-size: cover; \\n\\tbackground-position: center; \\n\\ttext-shadow: black 0px 0px 3px;\\n\\tborder-radius: 4px;\\n\\topacity: \" + (_vm.compositionGroup.isPublished ? 1.0 : 0.5)))},[_c('v-list-item',{staticClass:\"mb-0\",style:((\"\\n\\t\\t\\t\" + (_vm.isEditMode ? \"border-radius: 4px 4px 0 0;\" : '') + \"\\n\\t\\t\")),attrs:{\"to\":(\"events/\" + (_vm.compositionGroup.id) + \"/signups\"),\"dark\":\"\"},on:{\"contextmenu\":function($event){$event.preventDefault();return (function (ev) { return _vm.onContextMenu(_vm.compositionGroup.id, ev); }).apply(null, arguments)}}},[_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.compositionGroup.name)+\"\\n\\t\\t\\t\")]),_c('v-list-item-subtitle')],1),_c('v-list-item-action',[(_vm.compositionGroup.signups && _vm.compositionGroup.signups.length > 0)?_c('v-list-item-action-text',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.compositionGroup.signups.filter(function (x) { return x.signupState === _vm.signupStates.ACCEPTED; }).length)+\" / \"+_vm._s(_vm.compositionGroup.signups.length)+\"\\n\\t\\t\\t\")]):_vm._e(),(_vm.signupState != null)?_c('v-icon',{attrs:{\"color\":_vm.signupState.color,\"small\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.signupState.icon)+\"\\n\\t\\t\\t\")]):_vm._e()],1)],1),(_vm.isEditMode)?_c('div',{staticClass:\"d-flex justify-center align-center inner\",style:((\"\\n\\t\\t\\t\\t\\t\\tbackground-color: \" + (_vm.$vuetify.theme.dark ? '#000000aa' : '#00000077') + \"; \\n\\t\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\t\\tborder-radius: 0 0 4px 4px;\\n\\t\\t\\t\\t\\t\"))},[(_vm.compositionGroup.isLocked)?[_c('v-btn',{staticStyle:{\"text-shadow\":\"black 0 0 4px\"},attrs:{\"dark\":\"\",\"disabled\":\"\",\"icon\":\"\"}},[_c('v-icon',[_vm._v(\"lock\")])],1)]:[_vm._l((_vm.presenceItems.filter(function (x) { return x.selectable; })),function(presenceItem){return [_c('v-btn',{key:presenceItem.id,staticStyle:{\"text-shadow\":\"black 0 0 4px\"},attrs:{\"color\":presenceItem.color,\"disabled\":_vm.isLoading || (_vm.signupState != null && _vm.signupState.id == presenceItem.id),\"icon\":\"\",\"dark\":\"\"},on:{\"click\":function($event){return _vm.handleSignupClick(presenceItem.id)}}},[_c('v-icon',[_vm._v(_vm._s(presenceItem.icon))])],1)]})]],2):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Prop } from \"vue-property-decorator\";\n\n/**\n * Utils\n */\nimport * as imageLinks from \"@/config/image-links\";\nimport presenceItems, { PresenceItem } from \"@/config/presence-items\";\nimport { signupStates } from \"@/config/presence-items\";\nimport { GetCompositionGroupsResponse } from \"@/api/compositions/get-composition-groups.response\";\nimport { SignupState } from \"@/api/compositions/signup-state\";\nimport { Guid } from \"@/domain/guid\";\n\n/**\n * Helpers\n */\n\n/**\n * Mixins\n */\n\n/**\n * Components\n */\n\n/**\n * Calendar cell day list.\n */\n@Component\nexport default class CalendarDayList extends Vue {\n\t/// Injections\n\timageLinks = imageLinks;\n\tpresenceItems = presenceItems;\n\tsignupStates = signupStates;\n\n\t/// Properties\n\t@Prop()\n\tcompositionGroup!: GetCompositionGroupsResponse.CompositionGroup;\n\n\t@Prop()\n\tonContextMenu!: (id: Guid, ev: PointerEvent) => void;\n\n\t@Prop({\n\t\tdefault: false,\n\t\ttype: Boolean\n\t})\n\tisEditMode!: boolean;\n\n\t@Prop()\n\tonSignup!: (compositionGroupID: Guid, newSignupState: SignupState) => Promise;\n\n\tisLoading = false;\n\n\tget signupState(): PresenceItem | null {\n\t\treturn this.compositionGroup.mySignup ? (presenceItems.find(x => x.id === this.compositionGroup.mySignup.signupState) || null) : null;\n\t}\n\n\tasync handleSignupClick(newSignupState: SignupState) {\n\t\tthis.isLoading = true;\n\t\ttry {\n\t\t\tawait this.onSignup(this.compositionGroup.id, newSignupState);\n\t\t} catch (error) {\n\t\t\tthis.handleAPIError(error);\n\t\t}\n\t\tthis.isLoading = false;\n\t}\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CalendarDayListItem.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CalendarDayListItem.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CalendarDayListItem.vue?vue&type=template&id=5fa7e71c&\"\nimport script from \"./CalendarDayListItem.vue?vue&type=script&lang=ts&\"\nexport * from \"./CalendarDayListItem.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemActionText } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VBtn,VIcon,VListItem,VListItemAction,VListItemActionText,VListItemContent,VListItemSubtitle,VListItemTitle})\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Prop } from \"vue-property-decorator\";\n\n/**\n * Utils\n */\n\nimport CalendarDayListItem from \"./CalendarDayListItem.vue\";\nimport { Guid } from \"@/domain/guid\";\nimport { SignupState } from \"@/api/compositions/signup-state\";\nimport { GetCompositionGroupsResponse } from \"@/api/compositions/get-composition-groups.response\";\n\n/**\n * Helpers\n */\n\n/**\n * Mixins\n */\n\n/**\n * Components\n */\n\n/**\n * Calendar cell day list.\n */\n@Component({\n\tcomponents: {CalendarDayListItem}\n})\nexport default class CalendarDayList extends Vue {\n\t/// Properties\n\t@Prop()\n\tcompositionGroups!: GetCompositionGroupsResponse.CompositionGroup[];\n\n\t@Prop()\n\tonContextMenu!: (id: Guid, ev: PointerEvent) => void;\n\n\t@Prop()\n\tonSignup!: (compositionGroupID: Guid, newSignupState: SignupState) => Promise;\n\n\t@Prop({\n\t\tdefault: false,\n\t\ttype: Boolean\n\t})\n\tisEditMode!: boolean;\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CalendarDayList.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--14-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CalendarDayList.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CalendarDayList.vue?vue&type=template&id=46b51ee6&\"\nimport script from \"./CalendarDayList.vue?vue&type=script&lang=ts&\"\nexport * from \"./CalendarDayList.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VList } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VList})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-sheet',[_c('v-calendar',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.$vuetify.breakpoint.smAndDown),expression:\"!$vuetify.breakpoint.smAndDown\"}],ref:\"calendar\",attrs:{\"weekdays\":[1, 2, 3, 4, 5, 6, 0]},on:{\"change\":_vm.updateRange},scopedSlots:_vm._u([{key:\"day-label\",fn:function(){return undefined},proxy:true},{key:\"day\",fn:function(ref){\nvar present = ref.present;\nvar date = ref.date;\nvar day = ref.day;\nvar month = ref.month;\nreturn [(_vm.start)?_c('div',{staticClass:\"pa-2 ma-0 d-flex flex-column gap-2\",staticStyle:{\"height\":\"100%\",\"min-height\":\"7em\"},on:{\"contextmenu\":function (ev) { return _vm.handleContextMenu(date, ev); }}},[_c('div',[_c('v-chip',{class:['ma-0', {'grey--text': month !== _vm.start.month, 'font-weight-black': present, 'font-weight-light':!present}],attrs:{\"color\":present ? 'primary' : 'transparent',\"input-value\":false}},[_vm._v(_vm._s(day)+\"\\n\\t\\t\\t\\t\\t\")])],1),_c('div',{staticClass:\"flex-grow-1\"},[_vm._t(\"default\",null,{\"date\":date,\"isResponsiveMode\":false})],2)]):_vm._e()]}}],null,true),model:{value:(_vm.focus),callback:function ($$v) {_vm.focus=$$v},expression:\"focus\"}}),(_vm.$vuetify.breakpoint.smAndDown)?_c('v-sheet',{staticClass:\"app--outlined\"},[_vm._l((_vm.monthDays),function(monthDay,k){return [_c('div',{key:monthDay,on:{\"contextmenu\":function (ev) { return _vm.handleContextMenu(_vm.createDateStringByDay(monthDay), ev); }}},[_c('div',{staticClass:\"pa-2 d-flex flex-column gap-2\"},[_c('div',[_c('v-chip',{class:['ma-0', {'font-weight-black': _vm.createDateStringByDay(monthDay) == _vm.today, 'font-weight-light':_vm.createDateStringByDay(monthDay) != _vm.today}],attrs:{\"color\":_vm.createDateStringByDay(monthDay) == _vm.today ? 'primary' : 'transparent',\"input-value\":false}},[_vm._v(_vm._s(monthDay)+\"\\n\\t\\t\\t\\t\\t\\t\")])],1),_c('div',{staticClass:\"flex-grow-1\"},[_vm._t(\"default\",null,{\"date\":_vm.createDateStringByDay(monthDay),\"isResponsiveMode\":true})],2)]),(k < _vm.monthDays.length - 1)?_c('v-divider'):_vm._e()],1)]})],2):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Model, Prop, Vue, Watch } from \"vue-property-decorator\";\nimport _ from \"lodash\";\n\n/**\n * Utils\n */\nimport { getDateString, createDateString } from \"@/utils/date-helpers\";\nimport CalendarDayList from \"@/components/calendar/components/CalendarDayList.vue\";\n\n\ninterface VuetifyCalendar {\n\tprev: () => void;\n\tnext: () => void;\n}\n\n/**\n * VueX Modules\n */\n\nexport interface CalendarModelInterface {\n\tmonth: number;\n\tyear: number;\n}\n\n\ninterface ComplexDate {\n\tdate: string;\n\ttime: string;\n\tyear: number;\n\tmonth: number;\n\tday: number;\n\thour: number;\n\tminute: number;\n\tweekday: number;\n\thasDay: boolean;\n\thasTime: boolean;\n\tpast: boolean;\n\tpresent: boolean;\n\tfuture: boolean;\n}\n\n\n/**\n * Calendar page.\n */\n@Component({\n\tcomponents: {CalendarDayList}\n})\nexport default class Calendar extends Vue {\n\t$refs!: {\n\t\tcalendar: any;\n\t};\n\n\t/// Injections\n\n\t/// Attributes\n\ttoday: string = getDateString(new Date());\n\tfocus: string = getDateString(new Date());\n\tstart: ComplexDate | null = null;\n\tend: ComplexDate | null = null;\n\n\t// Props\n\t@Prop()\n\tonDayContextMenu!: (date: string, ev: PointerEvent) => void;\n\n\t/** V-MODEL */\n\t@Model(\"change\")\n\treadonly externalModel!: CalendarModelInterface | null;\n\n\tinternalModel: CalendarModelInterface | null = null;\n\n\t@Watch(\"internalModel\")\n\tonInternalModelChanged(val: CalendarModelInterface) {\n\t\tthis.$emit(\"change\", val);\n\t}\n\n\t@Watch(\"externalModel\")\n\tonExternalModelChanged(val: CalendarModelInterface) {\n\t\tthis.internalModel = val;\n\t}\n\n\t/**\n\t * Get an array of days in the current month.\n\t * ex. [1, 2, ..., 31]\n\t */\n\tget monthDays() {\n\t\tif (this.start && this.end) {\n\t\t\treturn _.range(this.start.day, this.end.day + 1);\n\t\t}\n\t\telse {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/// Methods\n\tcreated() {\n\t\tthis.focus = this.getDateStringByYearMonth(this.externalModel);\n\t}\n\n\tgetDateStringByYearMonth(model: CalendarModelInterface | null) {\n\t\tif (model == null) {\n\t\t\treturn getDateString(new Date());\n\t\t}\n\n\t\treturn createDateString(model.year, model.month, 1);\n\t}\n\n\t/**\n\t * Create a string 'yyyy-MM-{monthDay}' where yyyy-MM is the current focused month.\n\t */\n\tcreateDateStringByDay(monthDay: number): string | null {\n\t\tif (this.start == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn createDateString(this.start.year, this.start.month, monthDay);\n\t}\n\n\t/**\n\t * Even handler calendar@change.\n\t */\n\tasync updateRange({\n\t\t start,\n\t\t end\n\t }: {\n\t\tstart: ComplexDate;\n\t\tend: ComplexDate;\n\t}) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t\tthis.internalModel = {\n\t\t\tmonth: this.start.month,\n\t\t\tyear: this.start.year\n\t\t};\n\t}\n\n\n\thandleContextMenu(date: string, ev: PointerEvent) {\n\t\tif (this.onDayContextMenu) {\n\t\t\tev.preventDefault();\n\t\t\tthis.onDayContextMenu(date, ev);\n\t\t}\n\t}\n\n\tprev() {\n\t\tthis.$refs.calendar.prev();\n\t}\n\n\tnext() {\n\t\tthis.$refs.calendar.next();\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Calendar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Calendar.vue?vue&type=script&lang=ts&\"","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'localable',\n\n props: {\n locale: String,\n },\n\n computed: {\n currentLocale (): string {\n return this.locale || this.$vuetify.lang.current\n },\n },\n})\n","import Vue from 'vue'\n\nexport type MouseHandler = (e: MouseEvent | TouchEvent) => any\n\nexport type MouseEvents = {\n [event: string]: {\n event: string\n passive?: boolean\n capture?: boolean\n once?: boolean\n stop?: boolean\n prevent?: boolean\n button?: number\n result?: any\n }\n}\n\nexport type MouseEventsMap = {\n [event: string]: MouseHandler | MouseHandler[]\n}\n\nexport default Vue.extend({\n name: 'mouse',\n\n methods: {\n getDefaultMouseEventHandlers (suffix: string, getEvent: MouseHandler): MouseEventsMap {\n return this.getMouseEventHandlers({\n ['click' + suffix]: { event: 'click' },\n ['contextmenu' + suffix]: { event: 'contextmenu', prevent: true, result: false },\n ['mousedown' + suffix]: { event: 'mousedown' },\n ['mousemove' + suffix]: { event: 'mousemove' },\n ['mouseup' + suffix]: { event: 'mouseup' },\n ['mouseenter' + suffix]: { event: 'mouseenter' },\n ['mouseleave' + suffix]: { event: 'mouseleave' },\n ['touchstart' + suffix]: { event: 'touchstart' },\n ['touchmove' + suffix]: { event: 'touchmove' },\n ['touchend' + suffix]: { event: 'touchend' },\n }, getEvent)\n },\n getMouseEventHandlers (events: MouseEvents, getEvent: MouseHandler): MouseEventsMap {\n const on: MouseEventsMap = {}\n\n for (const event in events) {\n const eventOptions = events[event]\n\n if (!this.$listeners[event]) continue\n\n // TODO somehow pull in modifiers\n\n const prefix = eventOptions.passive ? '&' : ((eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : ''))\n const key = prefix + eventOptions.event\n\n const handler: MouseHandler = e => {\n const mouseEvent: MouseEvent = e as MouseEvent\n if (eventOptions.button === undefined || (mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button)) {\n if (eventOptions.prevent) {\n e.preventDefault()\n }\n if (eventOptions.stop) {\n e.stopPropagation()\n }\n this.$emit(event, getEvent(e))\n }\n\n return eventOptions.result\n }\n\n if (key in on) {\n /* istanbul ignore next */\n if (Array.isArray(on[key])) {\n (on[key] as MouseHandler[]).push(handler)\n } else {\n on[key] = [on[key], handler] as MouseHandler[]\n }\n } else {\n on[key] = handler\n }\n }\n\n return on\n },\n },\n})\n","function createUTCDate (year: number, month = 0, day = 1) {\n let date\n if (year < 100 && year >= 0) {\n date = new Date(Date.UTC(year, month, day))\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(year)\n }\n } else {\n date = new Date(Date.UTC(year, month, day))\n }\n\n return date\n}\n\nfunction firstWeekOffset (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear\n const firstWeekDayOfYear = (7 + createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() - firstDayOfWeek) % 7\n\n return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1\n}\n\nfunction dayOfYear (year: number, month: number, day: number, firstDayOfWeek: number) {\n let dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][month]\n if (month > 1 && isLeapYear(year)) {\n dayOfYear++\n }\n\n return dayOfYear + day\n}\n\nfunction weeksInYear (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, firstDayOfYear)\n const weekOffsetNext = firstWeekOffset(year + 1, firstDayOfWeek, firstDayOfYear)\n const daysInYear = isLeapYear(year) ? 366 : 365\n\n return (daysInYear - weekOffset + weekOffsetNext) / 7\n}\n\nexport function weekNumber (year: number, month: number, day: number, firstDayOfWeek: number, localeFirstDayOfYear: number): number {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, localeFirstDayOfYear)\n const week = Math.ceil((dayOfYear(year, month, day, firstDayOfWeek) - weekOffset) / 7)\n\n if (week < 1) {\n return week + weeksInYear(year - 1, firstDayOfWeek, localeFirstDayOfYear)\n } else if (week > weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)) {\n return week - weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)\n } else {\n return week\n }\n}\n\nexport function isLeapYear (year: number): boolean {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)\n}\n","import { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\nimport { isLeapYear } from '../../../util/dateTimeUtils'\n\nexport const PARSE_REGEX = /^(\\d{4})-(\\d{1,2})(-(\\d{1,2}))?([^\\d]+(\\d{1,2}))?(:(\\d{1,2}))?(:(\\d{1,2}))?$/\nexport const PARSE_TIME = /(\\d\\d?)(:(\\d\\d?)|)(:(\\d\\d?)|)/\n\nexport const DAYS_IN_MONTH: number[] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_LEAP: number[] = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_MIN = 28\nexport const DAYS_IN_MONTH_MAX = 31\nexport const MONTH_MAX = 12\nexport const MONTH_MIN = 1\nexport const DAY_MIN = 1\nexport const DAYS_IN_WEEK = 7\nexport const MINUTES_IN_HOUR = 60\nexport const MINUTE_MAX = 59\nexport const MINUTES_IN_DAY = 24 * 60\nexport const HOURS_IN_DAY = 24\nexport const HOUR_MAX = 23\nexport const FIRST_HOUR = 0\nexport const OFFSET_YEAR = 10000\nexport const OFFSET_MONTH = 100\nexport const OFFSET_HOUR = 100\nexport const OFFSET_TIME = 10000\n\ntype CalendarTimestampFormatOptions = (timestamp: CalendarTimestamp, short: boolean) => object\ntype CalendarTimestampOperation = (timestamp: CalendarTimestamp) => CalendarTimestamp\nexport type VTime = number | string | {\n hour: number\n minute: number\n}\n\nexport type VTimestampInput = number | string | Date;\n\nexport function getStartOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n findWeekday(start, weekdays[0], prevDay)\n updateFormatted(start)\n if (today) {\n updateRelative(start, today, start.hasTime)\n }\n\n return start\n}\n\nexport function getEndOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n findWeekday(end, weekdays[weekdays.length - 1])\n updateFormatted(end)\n if (today) {\n updateRelative(end, today, end.hasTime)\n }\n\n return end\n}\n\nexport function getStartOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n start.day = DAY_MIN\n updateWeekday(start)\n updateFormatted(start)\n\n return start\n}\n\nexport function getEndOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n end.day = daysInMonth(end.year, end.month)\n updateWeekday(end)\n updateFormatted(end)\n\n return end\n}\n\nexport function validateTime (input: any): input is VTime {\n return (typeof input === 'number' && isFinite(input)) ||\n (!!PARSE_TIME.exec(input)) ||\n (typeof input === 'object' && isFinite(input.hour) && isFinite(input.minute))\n}\n\nexport function parseTime (input: any): number | false {\n if (typeof input === 'number') {\n // when a number is given, it's minutes since 12:00am\n return input\n } else if (typeof input === 'string') {\n // when a string is given, it's a hh:mm:ss format where seconds are optional\n const parts = PARSE_TIME.exec(input)\n if (!parts) {\n return false\n }\n\n return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0)\n } else if (typeof input === 'object') {\n // when an object is given, it must have hour and minute\n if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {\n return false\n }\n\n return input.hour * 60 + input.minute\n } else {\n // unsupported type\n return false\n }\n}\n\nexport function validateTimestamp (input: any): input is VTimestampInput {\n return (typeof input === 'number' && isFinite(input)) ||\n (typeof input === 'string' && !!PARSE_REGEX.exec(input)) ||\n (input instanceof Date)\n}\n\nexport function parseTimestamp (input: VTimestampInput, required?: false, now?: CalendarTimestamp): CalendarTimestamp | null\nexport function parseTimestamp (input: VTimestampInput, required: true, now?: CalendarTimestamp): CalendarTimestamp\nexport function parseTimestamp (input: VTimestampInput, required = false, now?: CalendarTimestamp): CalendarTimestamp | null {\n if (typeof input === 'number' && isFinite(input)) {\n input = new Date(input)\n }\n\n if (input instanceof Date) {\n const date: CalendarTimestamp = parseDate(input)\n\n if (now) {\n updateRelative(date, now, date.hasTime)\n }\n\n return date\n }\n\n if (typeof input !== 'string') {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n return null\n }\n\n // YYYY-MM-DD hh:mm:ss\n const parts = PARSE_REGEX.exec(input)\n\n if (!parts) {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n\n return null\n }\n\n const timestamp: CalendarTimestamp = {\n date: input,\n time: '',\n year: parseInt(parts[1]),\n month: parseInt(parts[2]),\n day: parseInt(parts[4]) || 1,\n hour: parseInt(parts[6]) || 0,\n minute: parseInt(parts[8]) || 0,\n weekday: 0,\n hasDay: !!parts[4],\n hasTime: !!(parts[6] && parts[8]),\n past: false,\n present: false,\n future: false,\n }\n\n updateWeekday(timestamp)\n updateFormatted(timestamp)\n\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n\n return timestamp\n}\n\nexport function parseDate (date: Date): CalendarTimestamp {\n return updateFormatted({\n date: '',\n time: '',\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n weekday: date.getDay(),\n hour: date.getHours(),\n minute: date.getMinutes(),\n hasDay: true,\n hasTime: true,\n past: false,\n present: true,\n future: false,\n })\n}\n\nexport function getDayIdentifier (timestamp: { year: number, month: number, day: number }): number {\n return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day\n}\n\nexport function getTimeIdentifier (timestamp: { hour: number, minute: number }): number {\n return timestamp.hour * OFFSET_HOUR + timestamp.minute\n}\n\nexport function getTimestampIdentifier (timestamp: CalendarTimestamp): number {\n return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp)\n}\n\nexport function updateRelative (timestamp: CalendarTimestamp, now: CalendarTimestamp, time = false): CalendarTimestamp {\n let a = getDayIdentifier(now)\n let b = getDayIdentifier(timestamp)\n let present = a === b\n\n if (timestamp.hasTime && time && present) {\n a = getTimeIdentifier(now)\n b = getTimeIdentifier(timestamp)\n present = a === b\n }\n\n timestamp.past = b < a\n timestamp.present = present\n timestamp.future = b > a\n\n return timestamp\n}\n\nexport function isTimedless (input: VTimestampInput): input is (Date | number) {\n return (input instanceof Date) || (typeof input === 'number' && isFinite(input))\n}\n\nexport function updateHasTime (timestamp: CalendarTimestamp, hasTime: boolean, now?: CalendarTimestamp): CalendarTimestamp {\n if (timestamp.hasTime !== hasTime) {\n timestamp.hasTime = hasTime\n if (!hasTime) {\n timestamp.hour = HOUR_MAX\n timestamp.minute = MINUTE_MAX\n timestamp.time = getTime(timestamp)\n }\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n }\n\n return timestamp\n}\n\nexport function updateMinutes (timestamp: CalendarTimestamp, minutes: number, now?: CalendarTimestamp): CalendarTimestamp {\n timestamp.hasTime = true\n timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR)\n timestamp.minute = minutes % MINUTES_IN_HOUR\n timestamp.time = getTime(timestamp)\n if (now) {\n updateRelative(timestamp, now, true)\n }\n\n return timestamp\n}\n\nexport function updateWeekday (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.weekday = getWeekday(timestamp)\n\n return timestamp\n}\n\nexport function updateFormatted (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.time = getTime(timestamp)\n timestamp.date = getDate(timestamp)\n\n return timestamp\n}\n\nexport function getWeekday (timestamp: CalendarTimestamp): number {\n if (timestamp.hasDay) {\n const _ = Math.floor\n const k = timestamp.day\n const m = ((timestamp.month + 9) % MONTH_MAX) + 1\n const C = _(timestamp.year / 100)\n const Y = (timestamp.year % 100) - (timestamp.month <= 2 ? 1 : 0)\n\n return (((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7) + 7) % 7\n }\n\n return timestamp.weekday\n}\n\nexport function daysInMonth (year: number, month: number) {\n return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month]\n}\n\nexport function copyTimestamp (timestamp: CalendarTimestamp): CalendarTimestamp {\n const { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future } = timestamp\n\n return { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future }\n}\n\nexport function padNumber (x: number, length: number): string {\n let padded = String(x)\n while (padded.length < length) {\n padded = '0' + padded\n }\n\n return padded\n}\n\nexport function getDate (timestamp: CalendarTimestamp): string {\n let str = `${padNumber(timestamp.year, 4)}-${padNumber(timestamp.month, 2)}`\n\n if (timestamp.hasDay) str += `-${padNumber(timestamp.day, 2)}`\n\n return str\n}\n\nexport function getTime (timestamp: CalendarTimestamp): string {\n if (!timestamp.hasTime) {\n return ''\n }\n\n return `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n}\n\nexport function nextMinutes (timestamp: CalendarTimestamp, minutes: number): CalendarTimestamp {\n timestamp.minute += minutes\n while (timestamp.minute > MINUTES_IN_HOUR) {\n timestamp.minute -= MINUTES_IN_HOUR\n timestamp.hour++\n if (timestamp.hour >= HOURS_IN_DAY) {\n nextDay(timestamp)\n timestamp.hour = FIRST_HOUR\n }\n }\n\n return timestamp\n}\n\nexport function nextDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day++\n timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK\n if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {\n timestamp.day = DAY_MIN\n timestamp.month++\n if (timestamp.month > MONTH_MAX) {\n timestamp.month = MONTH_MIN\n timestamp.year++\n }\n }\n\n return timestamp\n}\n\nexport function prevDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day--\n timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK\n if (timestamp.day < DAY_MIN) {\n timestamp.month--\n if (timestamp.month < MONTH_MIN) {\n timestamp.year--\n timestamp.month = MONTH_MAX\n }\n timestamp.day = daysInMonth(timestamp.year, timestamp.month)\n }\n\n return timestamp\n}\n\nexport function relativeDays (\n timestamp: CalendarTimestamp,\n mover: CalendarTimestampOperation = nextDay,\n days = 1\n): CalendarTimestamp {\n while (--days >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function diffMinutes (min: CalendarTimestamp, max: CalendarTimestamp) {\n const Y = (max.year - min.year) * 525600\n const M = (max.month - min.month) * 43800\n const D = (max.day - min.day) * 1440\n const h = (max.hour - min.hour) * 60\n const m = (max.minute - min.minute)\n\n return Y + M + D + h + m\n}\n\nexport function findWeekday (timestamp: CalendarTimestamp, weekday: number,\n mover: CalendarTimestampOperation = nextDay, maxDays = 6): CalendarTimestamp {\n while (timestamp.weekday !== weekday && --maxDays >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function getWeekdaySkips (weekdays: number[]): number[] {\n const skips: number[] = [1, 1, 1, 1, 1, 1, 1]\n const filled: number[] = [0, 0, 0, 0, 0, 0, 0]\n for (let i = 0; i < weekdays.length; i++) {\n filled[weekdays[i]] = 1\n }\n for (let k = 0; k < DAYS_IN_WEEK; k++) {\n let skip = 1\n for (let j = 1; j < DAYS_IN_WEEK; j++) {\n const next = (k + j) % DAYS_IN_WEEK\n if (filled[next]) {\n break\n }\n skip++\n }\n skips[k] = filled[k] * skip\n }\n\n return skips\n}\n\nexport function timestampToDate (timestamp: CalendarTimestamp): Date {\n const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n const date = timestamp.date\n\n return new Date(`${date}T${time}:00+00:00`)\n}\n\nexport function createDayList (\n start: CalendarTimestamp,\n end: CalendarTimestamp,\n now: CalendarTimestamp,\n weekdaySkips: number[],\n max = 42,\n min = 0\n): CalendarTimestamp[] {\n const stop = getDayIdentifier(end)\n const days: CalendarTimestamp[] = []\n let current = copyTimestamp(start)\n let currentIdentifier = 0\n let stopped = currentIdentifier === stop\n\n if (stop < getDayIdentifier(start)) {\n throw new Error('End date is earlier than start date.')\n }\n\n while ((!stopped || days.length < min) && days.length < max) {\n currentIdentifier = getDayIdentifier(current)\n stopped = stopped || currentIdentifier === stop\n if (weekdaySkips[current.weekday] === 0) {\n current = nextDay(current)\n continue\n }\n const day = copyTimestamp(current)\n updateFormatted(day)\n updateRelative(day, now)\n days.push(day)\n current = relativeDays(current, nextDay, weekdaySkips[current.weekday])\n }\n\n if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.')\n\n return days\n}\n\nexport function createIntervalList (timestamp: CalendarTimestamp, first: number,\n minutes: number, count: number, now?: CalendarTimestamp): CalendarTimestamp[] {\n const intervals: CalendarTimestamp[] = []\n\n for (let i = 0; i < count; i++) {\n const mins = first + (i * minutes)\n const int = copyTimestamp(timestamp)\n intervals.push(updateMinutes(int, mins, now))\n }\n\n return intervals\n}\n\nexport function createNativeLocaleFormatter (locale: string, getOptions: CalendarTimestampFormatOptions): CalendarFormatter {\n const emptyFormatter: CalendarFormatter = (_t, _s) => ''\n\n if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return emptyFormatter\n }\n\n return (timestamp, short) => {\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short))\n\n return intlFormatter.format(timestampToDate(timestamp))\n } catch (e) {\n return ''\n }\n }\n}\n","import Vue from 'vue'\n\nimport {\n validateTimestamp,\n parseTimestamp,\n parseDate,\n} from '../util/timestamp'\nimport { CalendarTimestamp } from 'vuetify/types'\n\nexport default Vue.extend({\n name: 'times',\n\n props: {\n now: {\n type: String,\n validator: validateTimestamp,\n },\n },\n\n data: () => ({\n times: {\n now: parseTimestamp('0000-00-00 00:00', true),\n today: parseTimestamp('0000-00-00', true),\n },\n }),\n\n computed: {\n parsedNow (): CalendarTimestamp | null {\n return this.now ? parseTimestamp(this.now, true) : null\n },\n },\n\n watch: {\n parsedNow: 'updateTimes',\n },\n\n created () {\n this.updateTimes()\n this.setPresent()\n },\n\n methods: {\n setPresent (): void {\n this.times.now.present = this.times.today.present = true\n this.times.now.past = this.times.today.past = false\n this.times.now.future = this.times.today.future = false\n },\n updateTimes (): void {\n const now: CalendarTimestamp = this.parsedNow || this.getNow()\n this.updateDay(now, this.times.now)\n this.updateTime(now, this.times.now)\n this.updateDay(now, this.times.today)\n },\n getNow (): CalendarTimestamp {\n return parseDate(new Date())\n },\n updateDay (now: CalendarTimestamp, target: CalendarTimestamp): void {\n if (now.date !== target.date) {\n target.year = now.year\n target.month = now.month\n target.day = now.day\n target.weekday = now.weekday\n target.date = now.date\n }\n },\n updateTime (now: CalendarTimestamp, target: CalendarTimestamp): void {\n if (now.time !== target.time) {\n target.hour = now.hour\n target.minute = now.minute\n target.time = now.time\n }\n },\n },\n})\n","import { CalendarEventParsed, CalendarEventVisual, CalendarTimestamp } from 'vuetify/types'\nimport { getTimestampIdentifier } from '../util/timestamp'\n\nconst MILLIS_IN_DAY = 86400000\n\nexport type GetRange = (event: CalendarEventParsed) => [number, number]\n\nexport function getVisuals (events: CalendarEventParsed[], minStart = 0): CalendarEventVisual[] {\n const visuals = events.map(event => ({\n event,\n columnCount: 0,\n column: 0,\n left: 0,\n width: 100,\n }))\n\n visuals.sort((a, b) => {\n return (Math.max(minStart, a.event.startTimestampIdentifier) - Math.max(minStart, b.event.startTimestampIdentifier)) ||\n (b.event.endTimestampIdentifier - a.event.endTimestampIdentifier)\n })\n\n return visuals\n}\n\nexport interface ColumnGroup {\n start: number\n end: number\n visuals: CalendarEventVisual[]\n}\n\nexport function hasOverlap (s0: number, e0: number, s1: number, e1: number, exclude = true): boolean {\n return exclude ? !(s0 >= e1 || e0 <= s1) : !(s0 > e1 || e0 < s1)\n}\n\nexport function setColumnCount (groups: ColumnGroup[]) {\n groups.forEach(group => {\n group.visuals.forEach(groupVisual => {\n groupVisual.columnCount = groups.length\n })\n })\n}\n\nexport function getRange (event: CalendarEventParsed): [number, number] {\n return [event.startTimestampIdentifier, event.endTimestampIdentifier]\n}\n\nexport function getDayRange (event: CalendarEventParsed): [number, number] {\n return [event.startIdentifier, event.endIdentifier]\n}\n\nexport function getNormalizedRange (event: CalendarEventParsed, dayStart: number): [number, number] {\n return [Math.max(dayStart, event.startTimestampIdentifier), Math.min(dayStart + MILLIS_IN_DAY, event.endTimestampIdentifier)]\n}\n\nexport function getOpenGroup (groups: ColumnGroup[], start: number, end: number, timed: boolean) {\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i]\n let intersected = false\n\n if (hasOverlap(start, end, group.start, group.end, timed)) {\n for (let k = 0; k < group.visuals.length; k++) {\n const groupVisual = group.visuals[k]\n const [groupStart, groupEnd] = timed ? getRange(groupVisual.event) : getDayRange(groupVisual.event)\n\n if (hasOverlap(start, end, groupStart, groupEnd, timed)) {\n intersected = true\n break\n }\n }\n }\n\n if (!intersected) {\n return i\n }\n }\n\n return -1\n}\n\nexport function getOverlapGroupHandler (firstWeekday: number) {\n const handler = {\n groups: [] as ColumnGroup[],\n min: -1,\n max: -1,\n reset: () => {\n handler.groups = []\n handler.min = handler.max = -1\n },\n getVisuals: (day: CalendarTimestamp, dayEvents: CalendarEventParsed[], timed: boolean, reset = false) => {\n if (day.weekday === firstWeekday || reset) {\n handler.reset()\n }\n\n const dayStart = getTimestampIdentifier(day)\n const visuals = getVisuals(dayEvents, dayStart)\n\n visuals.forEach(visual => {\n const [start, end] = timed ? getRange(visual.event) : getDayRange(visual.event)\n\n if (handler.groups.length > 0 && !hasOverlap(start, end, handler.min, handler.max, timed)) {\n setColumnCount(handler.groups)\n handler.reset()\n }\n\n let targetGroup = getOpenGroup(handler.groups, start, end, timed)\n\n if (targetGroup === -1) {\n targetGroup = handler.groups.length\n\n handler.groups.push({ start, end, visuals: [] })\n }\n\n const target = handler.groups[targetGroup]\n target.visuals.push(visual)\n target.start = Math.min(target.start, start)\n target.end = Math.max(target.end, end)\n\n visual.column = targetGroup\n\n if (handler.min === -1) {\n handler.min = start\n handler.max = end\n } else {\n handler.min = Math.min(handler.min, start)\n handler.max = Math.max(handler.max, end)\n }\n })\n\n setColumnCount(handler.groups)\n\n if (timed) {\n handler.reset()\n }\n\n return visuals\n },\n }\n\n return handler\n}\n","import { CalendarEventOverlapMode, CalendarEventVisual } from 'vuetify/types'\nimport { getOverlapGroupHandler, getVisuals, hasOverlap, getNormalizedRange } from './common'\nimport { getTimestampIdentifier } from '../util/timestamp'\n\ninterface Group {\n start: number\n end: number\n visuals: CalendarEventVisual[]\n}\n\ninterface Node {\n parent: Node | null\n sibling: boolean\n index: number\n visual: CalendarEventVisual\n start: number\n end: number\n children: Node[]\n}\n\nconst FULL_WIDTH = 100\n\nconst DEFAULT_OFFSET = 5\n\nconst WIDTH_MULTIPLIER = 1.7\n\n/**\n * Variation of column mode where events can be stacked. The priority of this\n * mode is to stack events together taking up the least amount of space while\n * trying to ensure the content of the event is always visible as well as its\n * start and end. A sibling column has intersecting event content and must be\n * placed beside each other. Non-sibling columns are offset by 5% from the\n * previous column. The width is scaled by 1.7 so the events overlap and\n * whitespace is reduced. If there is a hole in columns the event width is\n * scaled up so it intersects with the next column. The columns have equal\n * width in the space they are given. If the event doesn't have any to the\n * right of it that intersect with it's content it's right side is extended\n * to the right side.\n */\n\nexport const stack: CalendarEventOverlapMode = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday)\n\n // eslint-disable-next-line max-statements\n return (day, dayEvents, timed, reset) => {\n if (!timed) {\n return handler.getVisuals(day, dayEvents, timed, reset)\n }\n\n const dayStart = getTimestampIdentifier(day)\n const visuals = getVisuals(dayEvents, dayStart)\n const groups = getGroups(visuals, dayStart)\n\n for (const group of groups) {\n const nodes: Node[] = []\n\n for (const visual of group.visuals) {\n const child = getNode(visual, dayStart)\n const index = getNextIndex(child, nodes)\n\n if (index === false) {\n const parent = getParent(child, nodes)\n if (parent) {\n child.parent = parent\n child.sibling = hasOverlap(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold))\n child.index = parent.index + 1\n parent.children.push(child)\n }\n } else {\n const [parent] = getOverlappingRange(child, nodes, index - 1, index - 1)\n const children = getOverlappingRange(child, nodes, index + 1, index + nodes.length, true)\n\n child.children = children\n child.index = index\n\n if (parent) {\n child.parent = parent\n child.sibling = hasOverlap(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold))\n parent.children.push(child)\n }\n\n for (const grand of children) {\n if (grand.parent === parent) {\n grand.parent = child\n }\n\n const grandNext = grand.index - child.index <= 1\n if (grandNext && child.sibling &&\n hasOverlap(child.start, addTime(child.start, overlapThreshold), grand.start, grand.end)) {\n grand.sibling = true\n }\n }\n }\n\n nodes.push(child)\n }\n\n calculateBounds(nodes, overlapThreshold)\n }\n\n visuals.sort((a, b) => (a.left - b.left) || (a.event.startTimestampIdentifier - b.event.startTimestampIdentifier))\n\n return visuals\n }\n}\n\nfunction calculateBounds (nodes: Node[], overlapThreshold: number) {\n for (const node of nodes) {\n const { visual, parent } = node\n const columns = getMaxChildIndex(node) + 1\n const spaceLeft = parent ? parent.visual.left : 0\n const spaceWidth = FULL_WIDTH - spaceLeft\n const offset = Math.min(DEFAULT_OFFSET, FULL_WIDTH / columns)\n const columnWidthMultiplier = getColumnWidthMultiplier(node, nodes)\n const columnOffset = spaceWidth / (columns - node.index + 1)\n const columnWidth = spaceWidth / (columns - node.index + (node.sibling ? 1 : 0)) * columnWidthMultiplier\n\n if (parent) {\n visual.left = node.sibling\n ? spaceLeft + columnOffset\n : spaceLeft + offset\n }\n\n visual.width = hasFullWidth(node, nodes, overlapThreshold)\n ? FULL_WIDTH - visual.left\n : Math.min(FULL_WIDTH - visual.left, columnWidth * WIDTH_MULTIPLIER)\n }\n}\n\nfunction getColumnWidthMultiplier (node: Node, nodes: Node[]): number {\n if (!node.children.length) {\n return 1\n }\n\n const maxColumn = node.index + nodes.length\n const minColumn = node.children.reduce((min, c) => Math.min(min, c.index), maxColumn)\n\n return minColumn - node.index\n}\n\nfunction getOverlappingIndices (node: Node, nodes: Node[]): number[] {\n const indices: number[] = []\n for (const other of nodes) {\n if (hasOverlap(node.start, node.end, other.start, other.end)) {\n indices.push(other.index)\n }\n }\n return indices\n}\n\nfunction getNextIndex (node: Node, nodes: Node[]): number | false {\n const indices = getOverlappingIndices(node, nodes)\n indices.sort()\n\n for (let i = 0; i < indices.length; i++) {\n if (i < indices[i]) {\n return i\n }\n }\n return false\n}\n\nfunction getOverlappingRange (node: Node, nodes: Node[], indexMin: number, indexMax: number, returnFirstColumn = false): Node[] {\n const overlapping: Node[] = []\n for (const other of nodes) {\n if (other.index >= indexMin && other.index <= indexMax && hasOverlap(node.start, node.end, other.start, other.end)) {\n overlapping.push(other)\n }\n }\n if (returnFirstColumn && overlapping.length > 0) {\n const first = overlapping.reduce((min, n) => Math.min(min, n.index), overlapping[0].index)\n return overlapping.filter(n => n.index === first)\n }\n return overlapping\n}\n\nfunction getParent (node: Node, nodes: Node[]): Node | null {\n let parent: Node | null = null\n for (const other of nodes) {\n if (hasOverlap(node.start, node.end, other.start, other.end) && (parent === null || other.index > parent.index)) {\n parent = other\n }\n }\n return parent\n}\n\nfunction hasFullWidth (node: Node, nodes: Node[], overlapThreshold: number): boolean {\n for (const other of nodes) {\n if (other !== node &&\n other.index > node.index &&\n hasOverlap(node.start, addTime(node.start, overlapThreshold), other.start, other.end)) {\n return false\n }\n }\n\n return true\n}\n\nfunction getGroups (visuals: CalendarEventVisual[], dayStart: number): Group[] {\n const groups: Group[] = []\n\n for (const visual of visuals) {\n const [start, end] = getNormalizedRange(visual.event, dayStart)\n let added = false\n\n for (const group of groups) {\n if (hasOverlap(start, end, group.start, group.end)) {\n group.visuals.push(visual)\n group.end = Math.max(group.end, end)\n added = true\n break\n }\n }\n\n if (!added) {\n groups.push({ start, end, visuals: [visual] })\n }\n }\n\n return groups\n}\n\nfunction getNode (visual: CalendarEventVisual, dayStart: number): Node {\n const [start, end] = getNormalizedRange(visual.event, dayStart)\n\n return {\n parent: null,\n sibling: true,\n index: 0,\n visual,\n start,\n end,\n children: [],\n }\n}\n\nfunction getMaxChildIndex (node: Node): number {\n let max = node.index\n for (const child of node.children) {\n const childMax = getMaxChildIndex(child)\n if (childMax > max) {\n max = childMax\n }\n }\n return max\n}\n\nfunction addTime (identifier: number, minutes: number): number {\n const removeMinutes = identifier % 100\n const totalMinutes = removeMinutes + minutes\n const addHours = Math.floor(totalMinutes / 60)\n const addMinutes = totalMinutes % 60\n\n return identifier - removeMinutes + addHours * 100 + addMinutes\n}\n","import { CalendarEventOverlapMode } from 'vuetify/types'\nimport { getOverlapGroupHandler } from './common'\n\nconst FULL_WIDTH = 100\n\nexport const column: CalendarEventOverlapMode = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday)\n\n return (day, dayEvents, timed, reset) => {\n const visuals = handler.getVisuals(day, dayEvents, timed, reset)\n\n if (timed) {\n visuals.forEach(visual => {\n visual.left = visual.column * FULL_WIDTH / visual.columnCount\n visual.width = FULL_WIDTH / visual.columnCount\n })\n }\n\n return visuals\n }\n}\n","import { CalendarEventOverlapMode } from 'vuetify/types'\nimport { stack } from './stack'\nimport { column } from './column'\n\nexport const CalendarEventOverlapModes: Record = {\n stack,\n column,\n}\n","\nimport { validateTimestamp, parseDate, DAYS_IN_WEEK, validateTime } from './timestamp'\nimport { PropType } from 'vue'\nimport { CalendarEvent, CalendarFormatter, CalendarTimestamp, CalendarEventOverlapMode, CalendarEventNameFunction, CalendarEventColorFunction, CalendarEventCategoryFunction, CalendarEventTimedFunction, 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// Helpers\nimport { escapeHTML } from '../../../util/helpers'\n\n// Util\nimport props from '../util/props'\nimport {\n CalendarEventOverlapModes,\n} from '../modes'\nimport {\n getDayIdentifier, diffMinutes,\n} from '../util/timestamp'\nimport {\n parseEvent,\n isEventStart,\n isEventOn,\n isEventOverlapping,\n 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) => escapeHTML(event.input[this.eventName as string] as string || '')\n },\n eventModeFunction (): CalendarEventOverlapMode {\n return typeof this.eventOverlapMode === 'function'\n ? this.eventOverlapMode\n : CalendarEventOverlapModes[this.eventOverlapMode]\n },\n eventWeekdays (): number[] {\n return this.parsedWeekdays\n },\n categoryMode (): boolean {\n return 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 let hide = false\n let hidden = 0\n\n for (let i = 0; i <= last; i++) {\n if (!hide) {\n const eventBounds = events[i].getBoundingClientRect()\n hide = i === last\n ? (eventBounds.bottom > parentBounds.bottom)\n : (eventBounds.bottom + eventHeight > parentBounds.bottom)\n }\n if (hide) {\n events[i].style.display = 'none'\n hidden++\n }\n }\n\n if (hide) {\n more.style.display = ''\n more.innerHTML = this.$vuetify.lang.t(this.eventMoreText, hidden)\n } else {\n more.style.display = 'none'\n }\n }\n },\n getEventsMap (): VDailyEventsMap {\n const eventsMap: VDailyEventsMap = {}\n const elements = this.$refs.events as HTMLElement[]\n\n if (!elements || !elements.forEach) {\n return eventsMap\n }\n\n elements.forEach(el => {\n const date = el.getAttribute('data-date')\n if (el.parentElement && date) {\n if (!(date in eventsMap)) {\n eventsMap[date] = {\n parent: el.parentElement,\n more: null,\n events: [],\n }\n }\n if (el.getAttribute('data-more')) {\n eventsMap[date].more = el\n } else {\n eventsMap[date].events.push(el)\n el.style.display = ''\n }\n }\n })\n\n return eventsMap\n },\n genDayEvent ({ event }: CalendarEventVisual, day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n const dayIdentifier = getDayIdentifier(day)\n const week = day.week\n const start = dayIdentifier === event.startIdentifier\n let end = dayIdentifier === event.endIdentifier\n let width = WIDTH_START\n\n if (!this.categoryMode) {\n for (let i = day.index + 1; i < week.length; i++) {\n const weekdayIdentifier = getDayIdentifier(week[i])\n if (event.endIdentifier >= weekdayIdentifier) {\n width += WIDTH_FULL\n end = end || weekdayIdentifier === event.endIdentifier\n } else {\n end = true\n break\n }\n }\n }\n const scope = { eventParsed: event, day, start, end, timed: false }\n\n return this.genEvent(event, scope, false, {\n staticClass: 'v-event',\n class: {\n 'v-event-start': start,\n 'v-event-end': end,\n },\n style: {\n height: `${eventHeight}px`,\n width: `${width}%`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n key: event.index,\n ref: 'events',\n refInFor: true,\n })\n },\n genTimedEvent ({ event, left, width }: CalendarEventVisual, day: CalendarDayBodySlotScope): VNode | false {\n if (day.timeDelta(event.end) < 0 || day.timeDelta(event.start) >= 1 || 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\n if (event.start.hasTime) {\n if (timedEvent) {\n const time = timeSummary()\n const delimiter = singline ? ', ' : '
'\n\n return `${name}${delimiter}${time}`\n } else {\n const time = formatTime(event.start, true)\n\n return `${time} ${name}`\n }\n }\n\n return name\n }\n\n const scope = {\n ...scopeInput,\n event: event.input,\n outside: scopeInput.day.outside,\n singline,\n overlapsNoon,\n formatTime,\n timeSummary,\n eventSummary,\n }\n\n return this.$createElement('div',\n this.setTextColor(text,\n this.setBackgroundColor(background, {\n on: this.getDefaultMouseEventHandlers(':event', nativeEvent => ({ ...scope, nativeEvent })),\n directives: [{\n name: 'ripple',\n value: this.eventRipple ?? true,\n }],\n ...data,\n })\n ), slot\n ? slot(scope)\n : [this.genName(eventSummary)]\n )\n },\n genName (eventSummary: () => string): VNode {\n return this.$createElement('div', {\n staticClass: 'pl-1',\n domProps: {\n innerHTML: eventSummary(),\n },\n })\n },\n genPlaceholder (day: CalendarTimestamp): VNode {\n const height = this.eventHeight + this.eventMarginBottom\n\n return this.$createElement('div', {\n style: {\n height: `${height}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n ref: 'events',\n refInFor: true,\n })\n },\n genMore (day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n\n return this.$createElement('div', {\n staticClass: 'v-event-more pl-1',\n class: {\n 'v-outside': day.outside,\n },\n attrs: {\n 'data-date': day.date,\n 'data-more': 1,\n },\n directives: [{\n name: 'ripple',\n value: this.eventRipple ?? true,\n }],\n on: {\n click: () => this.$emit('click:more', day),\n },\n style: {\n display: 'none',\n height: `${eventHeight}px`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n ref: 'events',\n refInFor: true,\n })\n },\n getVisibleEvents (): CalendarEventParsed[] {\n const start = getDayIdentifier(this.days[0])\n const end = getDayIdentifier(this.days[this.days.length - 1])\n\n return this.parsedEvents.filter(\n event => isEventOverlapping(event, start, end)\n )\n },\n isEventForCategory (event: CalendarEventParsed, category: 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 }, this.genHeadDays())\n },\n genHeadDays (): VNode[] {\n const header = this.todayWeek.map(this.genHeadDay)\n\n if (this.showWeek) {\n header.unshift(this.$createElement('div', {\n staticClass: 'v-calendar-weekly__head-weeknumber',\n }))\n }\n\n return header\n },\n genHeadDay (day: CalendarTimestamp, index: number): VNode {\n const outside = this.isOutside(this.days[index])\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n key: day.date,\n staticClass: 'v-calendar-weekly__head-weekday',\n class: this.getRelativeClasses(day, outside),\n }), this.weekdayFormatter(day, this.shortWeekdays))\n },\n genWeeks (): VNode[] {\n const days = this.days\n const weekDays = this.parsedWeekdays.length\n const weeks: VNode[] = []\n\n for (let i = 0; i < days.length; i += weekDays) {\n weeks.push(this.genWeek(days.slice(i, i + weekDays), this.getWeekNumber(days[i])))\n }\n\n return weeks\n },\n genWeek (week: CalendarTimestamp[], weekNumber: number): VNode {\n const weekNodes = week.map((day, index) => this.genDay(day, index, week))\n\n if (this.showWeek) {\n weekNodes.unshift(this.genWeekNumber(weekNumber))\n }\n\n return this.$createElement('div', {\n key: week[0].date,\n staticClass: 'v-calendar-weekly__week',\n }, weekNodes)\n },\n getWeekNumber (determineDay: CalendarTimestamp) {\n return weekNumber(\n determineDay.year,\n determineDay.month - 1,\n determineDay.day,\n this.parsedWeekdays[0],\n parseInt(this.localeFirstDayOfYear)\n )\n },\n genWeekNumber (weekNumber: number) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__weeknumber',\n }, [\n this.$createElement('small', String(weekNumber)),\n ])\n },\n genDay (day: CalendarTimestamp, index: number, week: CalendarTimestamp[]): VNode {\n const outside = this.isOutside(day)\n\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-weekly__day',\n class: this.getRelativeClasses(day, outside),\n on: this.getDefaultMouseEventHandlers(':day', _e => day),\n }, [\n this.genDayLabel(day),\n ...(getSlot(this, 'day', () => ({ outside, index, week, ...day })) || []),\n ])\n },\n genDayLabel (day: CalendarTimestamp): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__day-label',\n }, getSlot(this, 'day-label', day) || [this.genDayLabelButton(day)])\n },\n genDayLabelButton (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : 'transparent'\n const hasMonth = day.day === 1 && this.showMonthOnFirst\n\n return this.$createElement(VBtn, {\n props: {\n color,\n fab: true,\n depressed: true,\n small: true,\n },\n on: this.getMouseEventHandlers({\n 'click:date': { event: 'click', stop: true },\n 'contextmenu:date': { event: 'contextmenu', stop: true, prevent: true, result: false },\n }, _e => day),\n }, hasMonth\n ? this.monthFormatter(day, this.shortMonths) + ' ' + this.dayFormatter(day, false)\n : this.dayFormatter(day, false)\n )\n },\n genDayMonth (day: CalendarTimestamp): VNode | string {\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-calendar-weekly__day-month',\n }), getSlot(this, 'day-month', day) || this.monthFormatter(day, this.shortMonths))\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: this.staticClass,\n class: this.classes,\n on: {\n dragstart: (e: MouseEvent) => {\n e.preventDefault()\n },\n },\n }, [\n !this.hideHeader ? this.genHead() : '',\n ...this.genWeeks(),\n ])\n },\n})\n","// Styles\nimport './VCalendarWeekly.sass'\n\n// Mixins\nimport VCalendarWeekly from './VCalendarWeekly'\n\n// Util\nimport { parseTimestamp, getStartOfMonth, getEndOfMonth } from './util/timestamp'\nimport { CalendarTimestamp } from 'vuetify/types'\n\n/* @vue/component */\nexport default VCalendarWeekly.extend({\n name: 'v-calendar-monthly',\n\n computed: {\n staticClass (): string {\n return 'v-calendar-monthly v-calendar-weekly'\n },\n parsedStart (): CalendarTimestamp {\n return getStartOfMonth(parseTimestamp(this.start, true))\n },\n parsedEnd (): CalendarTimestamp {\n return getEndOfMonth(parseTimestamp(this.end, true))\n },\n },\n\n})\n","\n// Mixins\nimport CalendarBase from './calendar-base'\n\n// Util\nimport props from '../util/props'\nimport {\n parseTime,\n copyTimestamp,\n updateMinutes,\n createDayList,\n createIntervalList,\n createNativeLocaleFormatter,\n VTime,\n MINUTES_IN_DAY,\n} from '../util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter, CalendarDayBodySlotScope } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'calendar-with-intervals',\n\n props: props.intervals,\n\n computed: {\n parsedFirstInterval (): number {\n return parseInt(this.firstInterval)\n },\n parsedIntervalMinutes (): number {\n return parseInt(this.intervalMinutes)\n },\n parsedIntervalCount (): number {\n return parseInt(this.intervalCount)\n },\n parsedIntervalHeight (): number {\n return parseFloat(this.intervalHeight)\n },\n parsedFirstTime (): number | false {\n return parseTime(this.firstTime)\n },\n firstMinute (): number {\n const time = this.parsedFirstTime\n\n return time !== false && time >= 0 && time <= MINUTES_IN_DAY\n ? time\n : this.parsedFirstInterval * this.parsedIntervalMinutes\n },\n bodyHeight (): number {\n return this.parsedIntervalCount * this.parsedIntervalHeight\n },\n days (): CalendarTimestamp[] {\n return createDayList(\n this.parsedStart,\n this.parsedEnd,\n this.times.today,\n this.weekdaySkips,\n this.maxDays\n )\n },\n intervals (): CalendarTimestamp[][] {\n const days: CalendarTimestamp[] = this.days\n const first: number = this.firstMinute\n const minutes: number = this.parsedIntervalMinutes\n const count: number = this.parsedIntervalCount\n const now: CalendarTimestamp = this.times.now\n\n return days.map(d => createIntervalList(d, first, minutes, count, now))\n },\n intervalFormatter (): CalendarFormatter {\n if (this.intervalFormat) {\n return this.intervalFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', hour: '2-digit', minute: '2-digit' }\n const shortOptions = { timeZone: 'UTC', hour: 'numeric', minute: '2-digit' }\n const shortHourOptions = { timeZone: 'UTC', hour: 'numeric' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (tms, short) => short ? (tms.minute === 0 ? shortHourOptions : shortOptions) : longOptions\n )\n },\n },\n\n methods: {\n showIntervalLabelDefault (interval: CalendarTimestamp): boolean {\n const first: CalendarTimestamp = this.intervals[0][0]\n const isFirst: boolean = first.hour === interval.hour && first.minute === interval.minute\n return !isFirst\n },\n intervalStyleDefault (_interval: CalendarTimestamp): object | undefined {\n return undefined\n },\n getTimestampAtEvent (e: MouseEvent | TouchEvent, day: CalendarTimestamp): CalendarTimestamp {\n const timestamp: CalendarTimestamp = copyTimestamp(day)\n const bounds = (e.currentTarget as HTMLElement).getBoundingClientRect()\n const baseMinutes: number = this.firstMinute\n const touchEvent: TouchEvent = e as TouchEvent\n const mouseEvent: MouseEvent = e as MouseEvent\n const touches: TouchList = touchEvent.changedTouches || touchEvent.touches\n const clientY: number = touches && touches[0] ? touches[0].clientY : mouseEvent.clientY\n const addIntervals: number = (clientY - bounds.top) / this.parsedIntervalHeight\n const addMinutes: number = Math.floor(addIntervals * this.parsedIntervalMinutes)\n const minutes: number = baseMinutes + addMinutes\n\n return updateMinutes(timestamp, minutes, this.times.now)\n },\n getSlotScope (timestamp: CalendarTimestamp): CalendarDayBodySlotScope {\n const scope = copyTimestamp(timestamp) as any\n scope.timeToY = this.timeToY\n scope.timeDelta = this.timeDelta\n scope.minutesToPixels = this.minutesToPixels\n scope.week = this.days\n return scope\n },\n scrollToTime (time: VTime): boolean {\n const y = this.timeToY(time)\n const pane = this.$refs.scrollArea as HTMLElement\n\n if (y === false || !pane) {\n return false\n }\n\n pane.scrollTop = y\n\n return true\n },\n minutesToPixels (minutes: number): number {\n return minutes / this.parsedIntervalMinutes * this.parsedIntervalHeight\n },\n timeToY (time: VTime, clamp = true): number | false {\n let y = this.timeDelta(time)\n\n if (y !== false) {\n y *= this.bodyHeight\n\n if (clamp) {\n if (y < 0) {\n y = 0\n }\n if (y > this.bodyHeight) {\n y = this.bodyHeight\n }\n }\n }\n\n return y\n },\n timeDelta (time: VTime): number | false {\n const minutes = parseTime(time)\n\n if (minutes === false) {\n return false\n }\n\n const min: number = this.firstMinute\n const gap: number = this.parsedIntervalCount * this.parsedIntervalMinutes\n\n return (minutes - min) / gap\n },\n },\n})\n","// Styles\nimport './VCalendarDaily.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Components\nimport VBtn from '../VBtn'\n\n// Mixins\nimport CalendarWithIntervals from './mixins/calendar-with-intervals'\n\n// Util\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { CalendarTimestamp } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarWithIntervals.extend({\n name: 'v-calendar-daily',\n\n directives: { Resize },\n\n data: () => ({\n scrollPush: 0,\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-calendar-daily': true,\n ...this.themeClasses,\n }\n },\n },\n\n mounted () {\n this.init()\n },\n\n methods: {\n init () {\n this.$nextTick(this.onResize)\n },\n onResize () {\n this.scrollPush = this.getScrollPush()\n },\n getScrollPush (): number {\n const area = this.$refs.scrollArea as HTMLElement\n const pane = this.$refs.pane as HTMLElement\n\n return area && pane ? (area.offsetWidth - pane.offsetWidth) : 0\n },\n genHead (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__head',\n style: {\n marginRight: this.scrollPush + 'px',\n },\n }, [\n this.genHeadIntervals(),\n ...this.genHeadDays(),\n ])\n },\n genHeadIntervals (): VNode {\n const width: string | undefined = convertToUnit(this.intervalWidth)\n\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__intervals-head',\n style: {\n width,\n },\n }, getSlot(this, 'interval-header'))\n },\n genHeadDays (): VNode[] {\n return this.days.map(this.genHeadDay)\n },\n genHeadDay (day: CalendarTimestamp, index: number): VNode {\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-daily_head-day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':day', _e => {\n return this.getSlotScope(day)\n }),\n }, [\n this.genHeadWeekday(day),\n this.genHeadDayLabel(day),\n ...this.genDayHeader(day, index),\n ])\n },\n genDayHeader (day: CalendarTimestamp, index: number): VNode[] {\n return getSlot(this, 'day-header', () => ({\n week: this.days, ...day, index,\n })) || []\n },\n genHeadWeekday (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-calendar-daily_head-weekday',\n }), this.weekdayFormatter(day, this.shortWeekdays))\n },\n genHeadDayLabel (day: CalendarTimestamp): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily_head-day-label',\n }, getSlot(this, 'day-label-header', day) || [this.genHeadDayButton(day)])\n },\n genHeadDayButton (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : 'transparent'\n\n return this.$createElement(VBtn, {\n props: {\n color,\n fab: true,\n depressed: true,\n },\n on: this.getMouseEventHandlers({\n 'click:date': { event: 'click', stop: true },\n 'contextmenu:date': { event: 'contextmenu', stop: true, prevent: true, result: false },\n }, _e => {\n return day\n }),\n }, this.dayFormatter(day, false))\n },\n genBody (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__body',\n }, [\n this.genScrollArea(),\n ])\n },\n genScrollArea (): VNode {\n return this.$createElement('div', {\n ref: 'scrollArea',\n staticClass: 'v-calendar-daily__scroll-area',\n }, [\n this.genPane(),\n ])\n },\n genPane (): VNode {\n return this.$createElement('div', {\n ref: 'pane',\n staticClass: 'v-calendar-daily__pane',\n style: {\n height: convertToUnit(this.bodyHeight),\n },\n }, [\n this.genDayContainer(),\n ])\n },\n genDayContainer (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__day-container',\n }, [\n this.genBodyIntervals(),\n ...this.genDays(),\n ])\n },\n genDays (): VNode[] {\n return this.days.map(this.genDay)\n },\n genDay (day: CalendarTimestamp, index: number): VNode {\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-daily__day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':time', e => {\n return this.getSlotScope(this.getTimestampAtEvent(e, day))\n }),\n }, [\n ...this.genDayIntervals(index),\n ...this.genDayBody(day),\n ])\n },\n genDayBody (day: CalendarTimestamp): VNode[] {\n return getSlot(this, 'day-body', () => this.getSlotScope(day)) || []\n },\n genDayIntervals (index: number): VNode[] {\n return this.intervals[index].map(this.genDayInterval)\n },\n genDayInterval (interval: CalendarTimestamp): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const styler = this.intervalStyle || this.intervalStyleDefault\n\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler(interval),\n },\n }\n\n const children = getSlot(this, 'interval', () => this.getSlotScope(interval))\n\n return this.$createElement('div', data, children)\n },\n genBodyIntervals (): VNode {\n const width: string | undefined = convertToUnit(this.intervalWidth)\n const data = {\n staticClass: 'v-calendar-daily__intervals-body',\n style: {\n width,\n },\n on: this.getDefaultMouseEventHandlers(':interval', e => {\n return this.getTimestampAtEvent(e, this.parsedStart)\n }),\n }\n\n return this.$createElement('div', data, this.genIntervalLabels())\n },\n genIntervalLabels (): VNode[] | null {\n if (!this.intervals.length) return null\n\n return this.intervals[0].map(this.genIntervalLabel)\n },\n genIntervalLabel (interval: CalendarTimestamp): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const short: boolean = this.shortIntervals\n const shower = this.showIntervalLabel || this.showIntervalLabelDefault\n const show = shower(interval)\n const label = show ? this.intervalFormatter(interval, short) : undefined\n\n return this.$createElement('div', {\n key: interval.time,\n staticClass: 'v-calendar-daily__interval',\n style: {\n height,\n },\n }, [\n this.$createElement('div', {\n staticClass: 'v-calendar-daily__interval-text',\n }, label),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n class: this.classes,\n on: {\n dragstart: (e: MouseEvent) => {\n e.preventDefault()\n },\n },\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.onResize,\n }],\n }, [\n !this.hideHeader ? this.genHead() : '',\n this.genBody(),\n ])\n },\n})\n","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 directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.updateEventVisibility,\n }],\n on: {\n ...this.$listeners,\n 'click:date': (day: CalendarTimestamp) => {\n if (this.$listeners.input) {\n this.$emit('input', day.date)\n }\n if (this.$listeners['click:date']) {\n this.$emit('click:date', day)\n }\n },\n },\n scopedSlots: this.getScopedSlots(),\n })\n },\n})\n","import { render, staticRenderFns } from \"./Calendar.vue?vue&type=template&id=48227776&\"\nimport script from \"./Calendar.vue?vue&type=script&lang=ts&\"\nexport * from \"./Calendar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Calendar.vue?vue&type=style&index=0&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\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCalendar } from 'vuetify/lib/components/VCalendar';\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VSheet } from 'vuetify/lib/components/VSheet';\ninstallComponents(component, {VCalendar,VChip,VDivider,VSheet})\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Watch } from \"vue-property-decorator\";\nimport { namespace } from \"vuex-class\";\n\n/**\n * Utils\n */\nimport { getMonthName } from \"@/utils/date-helpers\";\nimport { roles } from \"@/config/roles\";\n\n\n/**\n * Components\n */\nimport CreateCompositionGroupDialog from \"./components/CreateCompositionGroupDialog.vue\";\nimport CalendarDayList from \"./components/CalendarDayList.vue\";\nimport Calendar, { CalendarModelInterface } from \"@/components/_global/Calendar.vue\";\n\n/**\n * API\n */\nimport compositionsAPI from \"@/api/compositions\";\nimport { Guid } from \"@/domain/guid\";\nimport { GetCompositionGroupsResponse } from \"@/api/compositions/get-composition-groups.response\";\nimport { GetOneTeamResponse } from \"@/api/teams/get-one-team.response\";\nimport { SignupState } from \"@/api/compositions/signup-state\";\n\n\n/**\n * VueX Modules\n */\nconst teamModule = namespace(\"team\");\n\n/**\n * Calendar page.\n */\n@Component({\n\tcomponents: {\n\t\tCreateCompositionGroupDialog,\n\t\tCalendarDayList,\n\t\tCalendar\n\t}\n})\nexport default class CalendarPage extends Vue {\n\t$refs!: {\n\t\tcalendarRef: Calendar;\n\t\tcreateCompositionGroupDialog: CreateCompositionGroupDialog;\n\t};\n\n\t/// Injections\n\n\t/// Attributes\n\tisLoading = false;\n\tisEditMode = false;\n\tcompositionGroups: GetCompositionGroupsResponse.CompositionGroup[] | null = null;\n\n\tshowContextMenu = false;\n\tcontextMenuX = 0;\n\tcontextMenuY = 0;\n\ttempContextMenuID: Guid | null = null;\n\ttempContextMenuDate: string | null = null;\n\tcontextMenuCopiedID: Guid | null = null;\n\n\tcalendar: CalendarModelInterface | null = null;\n\n\t/**\n\t * Get the title of the calendar.\n\t * ex. \"January 2020\"\n\t */\n\tget title() {\n\t\tif (!this.calendar) {\n\t\t\treturn null;\n\t\t}\n\t\tconst startMonth = getMonthName(this.calendar.month);\n\t\tconst startYear = this.calendar.year;\n\n\t\treturn `${startMonth} ${startYear}`;\n\t}\n\n\tget canManageCompositions() {\n\t\treturn this.hasPermission(roles.MANAGE_COMPOSITIONS);\n\t}\n\n\t/// VueX Modules\n\t@teamModule.State(\"team\")\n\tcurrentTeam!: GetOneTeamResponse;\n\n\n\t/// Methods\n\tasync created() {\n\t}\n\n\tprev() {\n\t\tthis.$refs.calendarRef?.prev();\n\t}\n\n\tnext() {\n\t\tthis.$refs.calendarRef?.next();\n\t}\n\n\tasync fetchCompositions(forceLoading = true) {\n\t\tthis.isLoading = true;\n\t\ttry {\n\t\t\tif (this.calendar) {\n\t\t\t\tif (forceLoading) {\n\t\t\t\t\tthis.compositionGroups = null;\n\t\t\t\t}\n\t\t\t\tthis.compositionGroups = await compositionsAPI.fetchCompositions(this.currentTeam.id, this.calendar.month, this.calendar.year);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.handleAPIError(error);\n\t\t}\n\t\tthis.isLoading = false;\n\t}\n\n\t@Watch(\"calendar\", {deep: true})\n\tasync onCalendarChanged(val: CalendarModelInterface, oldVal: CalendarModelInterface | null) {\n\t\tif (oldVal == null || (val.year !== oldVal.year || val.month !== oldVal.month)) {\n\t\t\tawait this.fetchCompositions(true);\n\t\t}\n\t}\n\n\tasync handleCreateCompositionGroupClick(date: string) {\n\t\tawait this.$refs.createCompositionGroupDialog.open(date);\n\t}\n\n\tasync handleAfterCreateCompositionGroup(id: Guid) {\n\t\tawait this.fetchCompositions(false);\n\t\t//await this.$router.push(teamUrl(this.currentTeam, `/events/${id}/compositions/edit`));\n\t}\n\n\thandleChipContextMenu(id: Guid, ev: PointerEvent) {\n\t\tthis.tempContextMenuID = id;\n\t\tthis.triggerShowContextMenu(ev);\n\t\treturn false;\n\t}\n\n\thandleDayContextMenu(date: string, ev: PointerEvent) {\n\t\tif (!this.showContextMenu) {\n\t\t\tthis.tempContextMenuID = null;\n\t\t\tthis.tempContextMenuDate = null;\n\t\t}\n\t\tthis.tempContextMenuDate = date;\n\t\tthis.triggerShowContextMenu(ev);\n\t\treturn false;\n\t}\n\n\ttriggerShowContextMenu(ev: PointerEvent) {\n\t\tif (!this.canManageCompositions) {\n\t\t\treturn;\n\t\t}\n\t\tthis.showContextMenu = false;\n\n\t\tthis.$nextTick(() => {\n\t\t\tthis.contextMenuX = ev.clientX;\n\t\t\tthis.contextMenuY = ev.clientY;\n\t\t\tthis.showContextMenu = true;\n\t\t});\n\t}\n\n\thandleCopyComposition() {\n\t\tthis.contextMenuCopiedID = this.tempContextMenuID;\n\t\tthis.$snackbar.openInfo(this.$t(\"calendar.copy_success\"));\n\t}\n\n\tasync handlePasteComposition() {\n\t\ttry {\n\t\t\tif (this.tempContextMenuDate && this.contextMenuCopiedID) {\n\t\t\t\tawait compositionsAPI.copyComposition(this.contextMenuCopiedID, this.tempContextMenuDate);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.handleAPIError(error);\n\t\t}\n\n\t\tawait this.fetchCompositions(false);\n\t}\n\n\tasync handleSignup(compositionGroupID: Guid, newSignupState: SignupState) {\n\t\tawait compositionsAPI.setSignupState(compositionGroupID, {\n\t\t\tsignupState: newSignupState,\n\t\t\tcharacterID: null,\n\t\t\tcomment: null,\n\t\t\trole: null,\n\t\t});\n\t\tawait this.fetchCompositions(false);\n\t}\n\n\tasync handleToggleEditMode() {\n\t\tthis.isEditMode = !this.isEditMode;\n\t\tawait this.fetchCompositions(false);\n\t}\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CalendarPage.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CalendarPage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CalendarPage.vue?vue&type=template&id=9a9ec67e&\"\nimport script from \"./CalendarPage.vue?vue&type=script&lang=ts&\"\nexport * from \"./CalendarPage.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./CalendarPage.vue?vue&type=style&index=0&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\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VBtnToggle } from 'vuetify/lib/components/VBtnToggle';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VBtnToggle,VCol,VContainer,VIcon,VList,VListItem,VListItemTitle,VMenu,VRow})\n","/**\n * Retourne un *string* de la forme \"YYYY-MM-DD\" à partir de Year, Month, Day.\n * @param year\n * @param month\n * @param day\n */\nexport const createDateString = (year: number, month: number, day: number) => {\n\treturn `${year}-${month.toString().padStart(2, \"0\")}-${day.toString().padStart(2, \"0\")}`;\n};\n\n/**\n * Retourne un *string* de la forme \"DD/MM/YYYY\" à partir d'une date.\n * @param date\n * @param locale\n */\nexport const getLocaleDateString = (date: Date, locale = \"en-US\") => {\n\treturn date.toLocaleDateString(locale);\n};\n\n/**\n * Retourne un *string* de la forme \"DD/MM/YYYY à HH:mm:ss\" à partir d'une date.\n * @param date\n * @param locale\n */\nexport const getLocaleString = (date: Date, locale = \"en-US\") => {\n\treturn date.toLocaleString(locale);\n};\n\n/**\n * Retourne un *string* de la forme \"DD/MM/YYYY à HH:mm:ss\" à partir d'une date string.\n * @param dateString\n * @param locale\n */\nexport const getLocaleStringFromDateString = (dateString: string, locale = \"en-GB\") => {\n\treturn getLocaleString(new Date(Date.parse(dateString)), locale);\n};\n\n/**\n * Retourne un *string* de la forme \"Aug 22nd 2020 hh:mm:ss UTC\" à partir d'une date string.\n */\nexport const getLocaleStringFromDateStringWithOptions = (dateString: string, options?: Intl.DateTimeFormatOptions, locale = \"en-GB\") => {\n\treturn (new Date(Date.parse(dateString))).toLocaleString(locale, options);\n};\n\n\n/**\n * Retourne un *string* de la forme \"2019-03-20T11:24:06.065Z\".\n * @param date\n */\nexport const getDateTimeString = (date: Date) => {\n\treturn new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString();\n};\n\n\n/**\n * Retourne un *string* de la forme \"lundi 1 janvier 2000\" à partir d'une date.\n * @param date\n * @param locale\n */\nexport const getElegantDateString = (date: Date, locale = \"en-US\") => {\n\treturn date.toLocaleDateString(locale, {\n\t\tweekday: \"long\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"long\",\n\t\tday: \"numeric\"\n\t});\n};\n\n/**\n * Retourne un *string* de la forme \"lundi 1 janvier 2000\" à partir d'une string de la forme yyyy-MM-dd.\n */\nexport const getElegantDateStringFromString = (dateAsString: string, locale = \"en-US\") => {\n\treturn (new Date(`${dateAsString}T00:00:00`)).toLocaleDateString(locale, {\n\t\tweekday: \"long\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"long\",\n\t\tday: \"numeric\"\n\t});\n};\n\n/**\n * Retourne le mois traduit dans la {locale} à partir du numéro du mois.\n * @param monthNumber\n * @param locale\n */\nexport const getMonthName = (monthNumber: number, locale = \"en-US\") => {\n\treturn (new Date(`2000-${monthNumber.toString().padStart(2, \"0\")}-01T00:00:00`)).toLocaleDateString(locale, {\n\t\tmonth: \"long\"\n\t});\n};\n\n\n/**\n * Retourne un *string* de la forme \"janvier\" à partir d'une date.\n * @param date\n * @param locale\n */\nexport const getMonthStringFromDate = (date: Date, locale = \"en-US\") => {\n\treturn date.toLocaleDateString(locale, {\n\t\tmonth: \"long\"\n\t});\n};\n\n/**\n * Retourne le timestamp en nombre de jours (arrondi en floor).\n */\nexport const getTimestampInDays = (timestampInMS: number) => {\n\treturn Math.floor((((timestampInMS / 1000) / 60) / 60) / 24);\n};\n\n/**\n * Retourne un *string* de la forme \"2019-03-20\".\n */\nexport const getDateStringFromDateTimeAsString = (dateTimeAsString: string) => {\n\treturn dateTimeAsString.split(\"T\")[0];\n};\n\n/**\n * Retourne un *string* de la forme \"2019-03-20\".\n * @param date\n */\nexport const getDateString = (date: Date) => {\n\treturn getDateStringFromDateTimeAsString(getDateTimeString(date));\n};\n/**\n * Retourne un *string* de la forme \"2019-03\".\n * @param date\n */\nexport const getYearMonthString = (date: Date) => {\n\tconst dateStringSplit = getDateString(date).split(\"-\");\n\treturn `${dateStringSplit[0]}-${dateStringSplit[1]}`;\n};\n/**\n * Retourne un *string* de la forme \"11:24:06.065Z\".\n * @param date\n */\nexport const getTimeString = (date: Date) => {\n\treturn getDateTimeString(date).split(\"T\")[1];\n};\n/**\n * Retourne un *string* de la forme \"11:24\".\n * @param date\n */\nexport const getShortTimeString = (date: Date) => {\n\tconst timeSplit = getTimeString(date).split(\":\");\n\treturn `${timeSplit[0]}:${timeSplit[1]}`;\n};\n\n/**\n * Ajout un nombre de minutes à un time de la forme \"11:24\".\n * @param time\n * @param nbMinutesToAdd\n */\nexport const addMinutes = (time: string, nbMinutesToAdd: number) => {\n\tconst timeSplit = time.split(\":\");\n\tconst hour = parseInt(timeSplit[0], 10);\n\tconst minute = parseInt(timeSplit[1], 10);\n\n\tconst rawMinuteAfterAddition = minute + nbMinutesToAdd;\n\treturn `${(hour + Math.floor(rawMinuteAfterAddition / 60)).toString().padStart(2, \"0\")}:${(rawMinuteAfterAddition % 60).toString().padStart(2, \"0\")}`;\n};\n\n/**\n * Retourne un affichage *string* intelligent d'une durée en heures ou en minutes.\n * @param minutes\n */\nexport const smartDisplayMinutes = (minutes: number) => {\n\tif (minutes == null) {\n\t\treturn \"-\";\n\t}\n\tif (minutes >= 60) {\n\t\tconst remainingSeconds = minutes % 60;\n\t\treturn `${Math.floor(minutes / 60)}h` + (remainingSeconds > 0 ? remainingSeconds.toString().padStart(2, \"0\") : \"\");\n\t}\n\treturn `${minutes} min`;\n};\n\n/**\n * Retourne un affichage *string* intelligent d'une durée en jours (Y year, M months, D days).\n * @param numberOfDays\n */\nexport const smartDisplayDays = (numberOfDays: number) => {\n\tif (numberOfDays == 0) {\n\t\treturn \"today\";\n\t}\n\n\tconst years = Math.floor(numberOfDays / 365);\n\tconst months = Math.floor(numberOfDays % 365 / 30);\n\tconst days = Math.floor(numberOfDays % 365 % 30);\n\n\tconst result = [];\n\tif (years > 0) {\n\t\tresult.push(years + (years == 1 ? \" year\" : \" years\"));\n\t}\n\tif (months > 0) {\n\t\tresult.push(months + (months == 1 ? \" month\" : \" months\"));\n\t}\n\tif (days > 0) {\n\t\tresult.push(days + (days == 1 ? \" day\" : \" days\"));\n\t}\n\n\treturn result.join(\", \");\n};\n\n/**\n * Retourne la différence en minutes entre *date1* et *date2* telles que date1 < date2.\n */\nexport const differenceInMinutesBetweenDates = (date1: Date, date2: Date) => {\n\treturn Math.round(((date2.getTime() - date1.getTime()) / 1000) / 60); // minutes\n};\n\n/**\n * Retourne la différence en jours entre *date1* et *date2* telles que date1 < date2.\n */\nexport const differenceInDaysBetweenDates = function (date1: Date, date2: Date) {\n\treturn Math.floor((Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate()) - Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate())) / (1000 * 60 * 60 * 24));\n};\n\n/**\n * Retourne la différence en minutes entre *hh1:mm1* et *hh2:mm2* telles que hh1:mm1 < hh2:mm2.\n */\nexport const differenceInMinutesBetweenHoursMinutes = (hm1: string, hm2: string) => {\n\tconst h1 = parseInt(hm1.split(\":\")[0], 10);\n\tconst m1 = parseInt(hm1.split(\":\")[1], 10);\n\tconst h2 = parseInt(hm2.split(\":\")[0], 10);\n\tconst m2 = parseInt(hm2.split(\":\")[1], 10);\n\treturn (60 * h2 + m2) - (60 * h1 + m1);\n};\n\n/**\n * Fonction de tri par date croissant si a < b.\n * @param a\n * @param b\n */\nexport const sortByDate = (a: Date, b: Date) => {\n\treturn a > b ? -1 : a < b ? 1 : 0;\n};\n\n\n/**\n * Retourne la date minimale d'un array de dates.\n */\nexport const getMinDate = (dates: Date[]) => {\n\treturn dates.reduce(function (a, b) {\n\t\treturn a < b ? a : b;\n\t});\n};\n\n/**\n * Retourne la date maximale d'un array de dates.\n */\nexport const getMaxDate = (dates: Date[]) => {\n\treturn dates.reduce(function (a, b) {\n\t\treturn a > b ? a : b;\n\t});\n};\n\n/**\n * Retourne la durée formatée entre maintenant et la date passée en paramètre.\n * @param date\n * @param referenceDate\n * @param onlyMinutes\n */\nexport const getTimeSince = (date: Date, referenceDate: Date = new Date(), onlyMinutes = false) => {\n\tif (typeof date !== \"object\") {\n\t\tdate = new Date(date);\n\t}\n\n\tlet seconds = Math.floor((+referenceDate - +date) / 1000);\n\tif (seconds < 0) {\n\t\tseconds = 0;\n\t}\n\tlet intervalType;\n\n\tlet interval = Math.floor(seconds / 31536000);\n\tif (interval >= 1) {\n\t\tintervalType = \"year\";\n\t}\n\telse {\n\t\tinterval = Math.floor(seconds / 2592000);\n\t\tif (interval >= 1) {\n\t\t\tintervalType = \"month\";\n\t\t}\n\t\telse {\n\t\t\tinterval = Math.floor(seconds / 86400);\n\t\t\tif (interval >= 1) {\n\t\t\t\tintervalType = \"day\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\tinterval = Math.floor(seconds / 3600);\n\t\t\t\tif (interval >= 1) {\n\t\t\t\t\tintervalType = \"hour\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tinterval = Math.floor(seconds / 60);\n\t\t\t\t\tif (interval >= 1 || onlyMinutes) {\n\t\t\t\t\t\tintervalType = \"minute\";\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tinterval = seconds;\n\t\t\t\t\t\tintervalType = \"second\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (interval > 1 || interval === 0) {\n\t\tintervalType += \"s\";\n\t}\n\n\n\tif (onlyMinutes) {\n\n\t}\n\n\treturn (interval > 0 ? interval : \"< 1\") + \" \" + intervalType;\n};","export const signupStates = {\n\tUNKNOWN: 0,\n\tACCEPTED: 1,\n\tTENTATIVE: 2,\n\tDECLINED: 3\n};\n\nexport interface PresenceItem {\n\tid: number;\n\ticon: string;\n\tcolor: string;\n\tname: string;\n\tselectable: boolean;\n};\n\nconst presenceItems: PresenceItem[] = [\n\t{\n\t\tid: signupStates.ACCEPTED,\n\t\ticon: \"fas fa-check\",\n\t\tcolor: \"success\",\n\t\tname: \"composition.state[1]\",\n\t\tselectable: true\n\t},\n\t{\n\t\tid: signupStates.TENTATIVE,\n\t\ticon: \"fas fa-question\",\n\t\tcolor: \"warning\",\n\t\tname: \"composition.state[2]\",\n\t\tselectable: true\n\t},\n\t{\n\t\tid: signupStates.DECLINED,\n\t\ticon: \"fas fa-times\",\n\t\tcolor: \"error\",\n\t\tname: \"composition.state[3]\",\n\t\tselectable: true\n\t},\n\t{\n\t\tid: signupStates.UNKNOWN,\n\t\ticon: \"fas fa-question\",\n\t\tcolor: \"grey lighten-1\",\n\t\tname: \"composition.state[0]\",\n\t\tselectable: false\n\t}\n];\n\nexport default presenceItems;","import axios from \"@/utils/axios\";\nimport { GetOneCompositionGroupResponse } from \"@/api/compositions/get-one-composition-group.response\";\nimport { Guid } from \"@/domain/guid\";\nimport { GetCompositionGroupsResponse } from \"@/api/compositions/get-composition-groups.response\";\nimport { CreateCompositionGroupRequest } from \"@/api/compositions/create-composition-group.request\";\nimport { SetSignupStateRequest } from \"@/api/compositions/set-signup-state.request\";\n\nexport default {\n\tasync fetchCompositions(teamID: Guid, month: number, year: number): Promise {\n\t\treturn (await axios().get(`/compositions?month=${month}&year=${year}&teamID=${teamID}`)).data;\n\t},\n\tasync fetchCompositionGroup(\n\t\tcompositionGroupID: Guid,\n\t\twithSignups = false,\n\t\twithCompositions = false,\n\t\twithUnknownSignups = false\n\t): Promise {\n\t\t\n\t\tconst arrayFields: string[] = [];\n\t\tif (withSignups) {\n\t\t\tarrayFields.push(\"signups\");\n\t\t}\n\t\tif (withCompositions) {\n\t\t\tarrayFields.push(\"compositions\");\n\t\t}\n\t\tif (withUnknownSignups) {\n\t\t\tarrayFields.push(\"signups-unknown\");\n\t\t}\n\t\treturn (await axios().get(`/compositions/${compositionGroupID}?fields=${arrayFields.join(\",\")}`)).data;\n\t},\n\tasync createComposition(teamID: Guid, payload: CreateCompositionGroupRequest): Promise {\n\t\treturn (await axios().post(`/compositions/create?teamID=${teamID}`, payload)).data;\n\t},\n\tasync editComposition(compositionGroupID: Guid, payload: any): Promise {\n\t\treturn (await axios().put(`/compositions/${compositionGroupID}/meta`, payload)).data;\n\t},\n\tasync copyComposition(compositionToCopyID: Guid, destinationDate: string): Promise {\n\t\treturn (await axios().post(`/compositions/copy/${compositionToCopyID}/${destinationDate}`)).data;\n\t},\n\tasync deleteCompositionGroup(compositionGroupID: Guid): Promise {\n\t\treturn (await axios().delete(`/compositions/${compositionGroupID}`)).data;\n\t},\n\tasync saveAll(compositionGroup: any): Promise {\n\t\treturn (await axios().put(`/compositions/${compositionGroup.id}`, compositionGroup)).data;\n\t},\n\tasync setSignupState(compositionGroupID: Guid, payload: SetSignupStateRequest): Promise {\n\t\treturn (await axios().post(`/compositions/setSignupState/${compositionGroupID}`, payload)).data;\n\t},\n\tasync broadcastToDiscord(compositionID: Guid): Promise {\n\t\treturn (await axios().post(`/compositions/composition/${compositionID}/discord`)).data;\n\t},\n\tasync togglePublished(compositionGroupID: Guid): Promise {\n\t\treturn (await axios().patch(`/compositions/${compositionGroupID}/togglePublished`)).data;\n\t},\n\tasync toggleLocked(compositionGroupID: Guid): Promise {\n\t\treturn (await axios().patch(`/compositions/${compositionGroupID}/toggleLocked`)).data;\n\t},\n};","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","import axios from \"@/utils/axios\";\nimport { GetRaidsResponse } from \"@/api/raids/get-raids.response\";\n\nexport default {\n\tasync fetchRaids(): Promise {\n\t\treturn (await axios().get(\"/raids/\")).data;\n\t}\n};","import VCard from './VCard'\nimport { createSimpleFunctional } from '../../util/helpers'\n\nconst VCardActions = createSimpleFunctional('v-card__actions')\nconst VCardSubtitle = createSimpleFunctional('v-card__subtitle')\nconst VCardText = createSimpleFunctional('v-card__text')\nconst VCardTitle = createSimpleFunctional('v-card__title')\n\nexport {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n}\n\nexport default {\n $_vuetify_subcomponents: {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n },\n}\n","// Extensions\nimport { BaseItemGroup } from '../../components/VItemGroup/VItemGroup'\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n name: 'button-group',\n\n provide (): object {\n return {\n btnToggle: this,\n }\n },\n\n computed: {\n classes (): object {\n return BaseItemGroup.options.computed.classes.call(this)\n },\n },\n\n methods: {\n // Isn't being passed down through types\n genData: BaseItemGroup.options.methods.genData,\n },\n})\n","// Styles\nimport './VBtnToggle.sass'\n\n// Mixins\nimport ButtonGroup from '../../mixins/button-group'\nimport Colorable from '../../mixins/colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(\n ButtonGroup,\n Colorable\n).extend({\n name: 'v-btn-toggle',\n\n props: {\n backgroundColor: String,\n borderless: Boolean,\n dense: Boolean,\n group: Boolean,\n rounded: Boolean,\n shaped: Boolean,\n tile: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n ...ButtonGroup.options.computed.classes.call(this),\n 'v-btn-toggle': true,\n 'v-btn-toggle--borderless': this.borderless,\n 'v-btn-toggle--dense': this.dense,\n 'v-btn-toggle--group': this.group,\n 'v-btn-toggle--rounded': this.rounded,\n 'v-btn-toggle--shaped': this.shaped,\n 'v-btn-toggle--tile': this.tile,\n ...this.themeClasses,\n }\n },\n },\n\n methods: {\n genData () {\n const data = this.setTextColor(this.color, {\n ...ButtonGroup.options.methods.genData.call(this),\n })\n\n if (this.group) return data\n\n return this.setBackgroundColor(this.backgroundColor, data)\n },\n },\n})\n","// Styles\nimport './VCard.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Mixins\nimport Loadable from '../../mixins/loadable'\nimport Routable from '../../mixins/routable'\n\n// Helpers\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n Loadable,\n Routable,\n VSheet\n).extend({\n name: 'v-card',\n\n props: {\n flat: Boolean,\n hover: Boolean,\n img: String,\n link: Boolean,\n loaderHeight: {\n type: [Number, String],\n default: 4,\n },\n raised: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n 'v-card': true,\n ...Routable.options.computed.classes.call(this),\n 'v-card--flat': this.flat,\n 'v-card--hover': this.hover,\n 'v-card--link': this.isClickable,\n 'v-card--loading': this.loading,\n 'v-card--disabled': this.disabled,\n 'v-card--raised': this.raised,\n ...VSheet.options.computed.classes.call(this),\n }\n },\n styles (): object {\n const style: Dictionary = {\n ...VSheet.options.computed.styles.call(this),\n }\n\n if (this.img) {\n style.background = `url(\"${this.img}\") center center / cover no-repeat`\n }\n\n return style\n },\n },\n\n methods: {\n genProgress () {\n const render = Loadable.options.methods.genProgress.call(this)\n\n if (!render) return null\n\n return this.$createElement('div', {\n staticClass: 'v-card__progress',\n key: 'progress',\n }, [render])\n },\n },\n\n render (h): VNode {\n const { tag, data } = this.generateRouteLink()\n\n data.style = this.styles\n\n if (this.isClickable) {\n data.attrs = data.attrs || {}\n data.attrs.tabindex = 0\n }\n\n return h(tag, this.setBackgroundColor(this.color, data), [\n this.genProgress(),\n this.$slots.default,\n ])\n },\n})\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Calendar.vue?vue&type=style&index=0&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CalendarPage.vue?vue&type=style&index=0&lang=css&\"","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n"],"sourceRoot":""}