UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 33.3 kB
{"version":3,"file":"calendar-with-events.mjs","names":["ripple","CalendarBase","props","CalendarEventOverlapModes","getDayIdentifier","diffMinutes","parseEvent","isEventStart","isEventOn","isEventOverlapping","isEventHiddenOn","WIDTH_FULL","WIDTH_START","MINUTES_IN_DAY","extend","name","directives","events","calendar","category","computed","noEvents","length","parsedEvents","map","parsedEventOverlapThreshold","parseInt","eventOverlapThreshold","eventTimedFunction","eventTimed","event","eventCategoryFunction","eventCategory","eventTextColorFunction","eventTextColor","eventNameFunction","eventName","timedEvent","input","eventModeFunction","eventOverlapMode","eventWeekdays","parsedWeekdays","categoryMode","type","methods","eventColorFunction","e","eventColor","color","index","arguments","undefined","eventStart","eventEnd","formatTime","withTime","ampm","formatter","getFormatter","timeZone","hour","minute","updateEventVisibility","eventMore","eventHeight","eventsMap","getEventsMap","date","parent","more","parentBounds","getBoundingClientRect","last","eventsSorted","bottom","sort","a","b","hidden","i","hide","style","display","innerHTML","$vuetify","lang","t","eventMoreText","elements","$refs","forEach","el","getAttribute","parentElement","push","genDayEvent","_ref","day","eventMarginBottom","dayIdentifier","week","start","startIdentifier","end","endIdentifier","width","weekdayIdentifier","scope","eventParsed","timed","genEvent","staticClass","class","height","attrs","key","ref","refInFor","genTimedEvent","_ref2","left","timeDelta","top","timeToY","Math","max","scopeInput","data","slot","$scopedSlots","text","background","overlapsNoon","singline","timeSummary","eventSummary","hasTime","time","delimiter","$createElement","outside","setTextColor","setBackgroundColor","on","getDefaultMouseEventHandlers","nativeEvent","value","eventRipple","genName","genPlaceholder","genMore","getVisibleEvents","days","filter","isEventForCategory","categoryName","getEventsForDay","identifier","firstWeekday","getEventsForDayAll","allDay","getEventsForDayTimed","getScopedSlots","mode","isNode","getSlotChildren","getter","mapper","visuals","visual","children","column","mapped","slots","slotDay","slotDayHeader","slotDayBody","concat"],"sources":["../../../../src/components/VCalendar/mixins/calendar-with-events.ts"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable */\n\n// Styles\nimport './calendar-with-events.sass'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\n\n// Directives\nimport ripple from '../../../directives/ripple'\n\n// Mixins\nimport CalendarBase from './calendar-base'\n\n// Util\nimport props from '../util/props'\nimport {\n CalendarEventOverlapModes,\n} from '../modes'\nimport {\n getDayIdentifier, diffMinutes,\n} from '../util/timestamp'\nimport {\n parseEvent,\n isEventStart,\n isEventOn,\n isEventOverlapping,\n isEventHiddenOn,\n} from '../util/events'\nimport {\n CalendarTimestamp,\n CalendarEventParsed,\n CalendarEventVisual,\n CalendarEventColorFunction,\n CalendarEventNameFunction,\n CalendarEventTimedFunction,\n CalendarDaySlotScope,\n CalendarDayBodySlotScope,\n CalendarEventOverlapMode,\n CalendarEvent,\n CalendarEventCategoryFunction,\n CalendarCategory,\n} from 'vuetify/types'\n\n// Types\ntype VEventGetter<D> = (day: D) => CalendarEventParsed[]\n\ntype VEventVisualToNode<D> = (visual: CalendarEventVisual, day: D) => VNode | false\n\ntype VEventsToNodes = <D extends CalendarDaySlotScope>(\n day: D,\n getter: VEventGetter<D>,\n mapper: VEventVisualToNode<D>,\n timed: boolean) => VNode[] | undefined\n\ntype VDailyEventsMap = {\n [date: string]: {\n parent: HTMLElement\n more: HTMLElement | null\n events: HTMLElement[]\n }\n}\n\ninterface VEventScopeInput {\n eventParsed: CalendarEventParsed\n day: CalendarDaySlotScope\n start: boolean\n end: boolean\n timed: boolean\n}\n\nconst WIDTH_FULL = 100\nconst WIDTH_START = 95\nconst MINUTES_IN_DAY = 1440\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'calendar-with-events',\n\n directives: {\n ripple,\n },\n\n props: {\n ...props.events,\n ...props.calendar,\n ...props.category,\n },\n\n computed: {\n noEvents (): boolean {\n return this.events.length === 0\n },\n parsedEvents (): CalendarEventParsed[] {\n return this.events.map(this.parseEvent)\n },\n parsedEventOverlapThreshold (): number {\n return parseInt(this.eventOverlapThreshold)\n },\n eventTimedFunction (): CalendarEventTimedFunction {\n return typeof this.eventTimed === 'function'\n ? this.eventTimed\n : event => !!event[this.eventTimed as string]\n },\n eventCategoryFunction (): CalendarEventCategoryFunction {\n return typeof this.eventCategory === 'function'\n ? this.eventCategory\n : event => event[this.eventCategory as string]\n },\n eventTextColorFunction (): CalendarEventColorFunction {\n return typeof this.eventTextColor === 'function'\n ? this.eventTextColor\n : () => this.eventTextColor as string\n },\n eventNameFunction (): CalendarEventNameFunction {\n return typeof this.eventName === 'function'\n ? this.eventName\n : (event, timedEvent) => event.input[this.eventName as string] as string || ''\n },\n eventModeFunction (): CalendarEventOverlapMode {\n return typeof this.eventOverlapMode === 'function'\n ? this.eventOverlapMode\n : CalendarEventOverlapModes[this.eventOverlapMode]\n },\n eventWeekdays (): number[] {\n return this.parsedWeekdays\n },\n categoryMode (): boolean {\n return this.type === 'category'\n },\n },\n\n methods: {\n eventColorFunction (e: CalendarEvent): string {\n return typeof this.eventColor === 'function'\n ? this.eventColor(e)\n : e.color || this.eventColor\n },\n parseEvent (input: CalendarEvent, index = 0): CalendarEventParsed {\n return parseEvent(\n input,\n index,\n this.eventStart,\n this.eventEnd,\n this.eventTimedFunction(input),\n this.categoryMode ? this.eventCategoryFunction(input) : false,\n )\n },\n formatTime (withTime: CalendarTimestamp, ampm: boolean): string {\n const formatter = this.getFormatter({\n timeZone: 'UTC',\n hour: 'numeric',\n minute: withTime.minute > 0 ? 'numeric' : undefined,\n })\n\n return formatter(withTime, true)\n },\n updateEventVisibility () {\n if (this.noEvents || !this.eventMore) {\n return\n }\n\n const eventHeight = this.eventHeight\n const eventsMap = this.getEventsMap()\n\n for (const date in eventsMap) {\n const { parent, events, more } = eventsMap[date]\n if (!more) {\n break\n }\n\n const parentBounds = parent.getBoundingClientRect()\n const last = events.length - 1\n const eventsSorted = events.map(event => ({\n event,\n bottom: event.getBoundingClientRect().bottom,\n })).sort((a, b) => a.bottom - b.bottom)\n let hidden = 0\n\n for (let i = 0; i <= last; i++) {\n const bottom = eventsSorted[i].bottom\n const hide = i === last\n ? (bottom > parentBounds.bottom)\n : (bottom + eventHeight > parentBounds.bottom)\n\n if (hide) {\n eventsSorted[i].event.style.display = 'none'\n hidden++\n }\n }\n\n if (hidden) {\n more.style.display = ''\n more.innerHTML = this.$vuetify.lang.t(this.eventMoreText, hidden)\n } else {\n more.style.display = 'none'\n }\n }\n },\n getEventsMap (): VDailyEventsMap {\n const eventsMap: VDailyEventsMap = {}\n const elements = this.$refs.events as HTMLElement[]\n\n if (!elements || !elements.forEach) {\n return eventsMap\n }\n\n elements.forEach(el => {\n const date = el.getAttribute('data-date')\n if (el.parentElement && date) {\n if (!(date in eventsMap)) {\n eventsMap[date] = {\n parent: el.parentElement,\n more: null,\n events: [],\n }\n }\n if (el.getAttribute('data-more')) {\n eventsMap[date].more = el\n } else {\n eventsMap[date].events.push(el)\n el.style.display = ''\n }\n }\n })\n\n return eventsMap\n },\n genDayEvent ({ event }: CalendarEventVisual, day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n const dayIdentifier = getDayIdentifier(day)\n const week = day.week\n const start = dayIdentifier === event.startIdentifier\n let end = dayIdentifier === event.endIdentifier\n let width = WIDTH_START\n\n if (!this.categoryMode) {\n for (let i = day.index + 1; i < week.length; i++) {\n const weekdayIdentifier = getDayIdentifier(week[i])\n if (event.endIdentifier >= weekdayIdentifier) {\n width += WIDTH_FULL\n end = end || weekdayIdentifier === event.endIdentifier\n } else {\n end = true\n break\n }\n }\n }\n const scope = { eventParsed: event, day, start, end, timed: false }\n\n return this.genEvent(event, scope, false, {\n staticClass: 'v-event',\n class: {\n 'v-event-start': start,\n 'v-event-end': end,\n },\n style: {\n height: `${eventHeight}px`,\n width: `${width}%`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n key: event.index,\n ref: 'events',\n refInFor: true,\n })\n },\n genTimedEvent ({ event, left, width }: CalendarEventVisual, day: CalendarDayBodySlotScope): VNode | false {\n if (day.timeDelta(event.end) < 0 || day.timeDelta(event.start) >= 1 || isEventHiddenOn(event, day)) {\n return false\n }\n\n const dayIdentifier = getDayIdentifier(day)\n const start = event.startIdentifier >= dayIdentifier\n const end = event.endIdentifier > dayIdentifier\n const top = start ? day.timeToY(event.start) : 0\n const bottom = end ? day.timeToY(MINUTES_IN_DAY) : day.timeToY(event.end)\n const height = Math.max(this.eventHeight, bottom - top)\n const scope = { eventParsed: event, day, start, end, timed: true }\n\n return this.genEvent(event, scope, true, {\n staticClass: 'v-event-timed',\n style: {\n top: `${top}px`,\n height: `${height}px`,\n left: `${left}%`,\n width: `${width}%`,\n },\n })\n },\n genEvent (event: CalendarEventParsed, scopeInput: VEventScopeInput, timedEvent: boolean, data: VNodeData): VNode {\n const slot = this.$scopedSlots.event\n const text = this.eventTextColorFunction(event.input)\n const background = this.eventColorFunction(event.input)\n const overlapsNoon = event.start.hour < 12 && event.end.hour >= 12\n const singline = diffMinutes(event.start, event.end) <= this.parsedEventOverlapThreshold\n const formatTime = this.formatTime\n const timeSummary = () => formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true)\n const eventSummary = () => {\n const name = this.eventNameFunction(event, timedEvent)\n if (event.start.hasTime) {\n if (timedEvent) {\n const time = timeSummary()\n const delimiter = singline ? ', ' : this.$createElement('br')\n\n return this.$createElement('span', { staticClass: 'v-event-summary' }, [\n this.$createElement('strong', [name]),\n delimiter,\n time,\n ])\n } else {\n const time = formatTime(event.start, true)\n\n return this.$createElement('span', { staticClass: 'v-event-summary' }, [\n this.$createElement('strong', [time]),\n ' ',\n name,\n ])\n }\n }\n\n return this.$createElement('span', { staticClass: 'v-event-summary' }, [name])\n }\n\n const scope = {\n ...scopeInput,\n event: event.input,\n outside: scopeInput.day.outside,\n singline,\n overlapsNoon,\n formatTime,\n timeSummary,\n eventSummary,\n }\n\n return this.$createElement('div',\n this.setTextColor(text,\n this.setBackgroundColor(background, {\n on: this.getDefaultMouseEventHandlers(':event', nativeEvent => ({ ...scope, nativeEvent })),\n directives: [{\n name: 'ripple',\n value: this.eventRipple ?? true,\n }],\n ...data,\n })\n ), slot\n ? slot(scope)\n : [this.genName(eventSummary)]\n )\n },\n genName (eventSummary: () => string | VNode): VNode {\n return this.$createElement('div', {\n staticClass: 'pl-1',\n }, [eventSummary()])\n },\n genPlaceholder (day: CalendarTimestamp): VNode {\n const height = this.eventHeight + this.eventMarginBottom\n\n return this.$createElement('div', {\n style: {\n height: `${height}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n ref: 'events',\n refInFor: true,\n })\n },\n genMore (day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n\n return this.$createElement('div', {\n staticClass: 'v-event-more pl-1',\n class: {\n 'v-outside': day.outside,\n },\n attrs: {\n 'data-date': day.date,\n 'data-more': 1,\n },\n directives: [{\n name: 'ripple',\n value: this.eventRipple ?? true,\n }],\n on: this.getDefaultMouseEventHandlers(':more', nativeEvent => {\n return { nativeEvent, ...day }\n }),\n\n style: {\n display: 'none',\n height: `${eventHeight}px`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n ref: 'events',\n refInFor: true,\n })\n },\n getVisibleEvents (): CalendarEventParsed[] {\n const start = getDayIdentifier(this.days[0])\n const end = getDayIdentifier(this.days[this.days.length - 1])\n\n return this.parsedEvents.filter(\n event => isEventOverlapping(event, start, end)\n )\n },\n isEventForCategory (event: CalendarEventParsed, category: CalendarCategory): boolean {\n return !this.categoryMode ||\n (typeof category === 'object' && category.categoryName &&\n category.categoryName === event.category) ||\n (typeof event.category === 'string' && category === event.category) ||\n (typeof event.category !== 'string' && category === null)\n },\n getEventsForDay (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n const firstWeekday = this.eventWeekdays[0]\n\n return this.parsedEvents.filter(\n event => isEventStart(event, day, identifier, firstWeekday)\n )\n },\n getEventsForDayAll (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n const firstWeekday = this.eventWeekdays[0]\n\n return this.parsedEvents.filter(\n event => event.allDay &&\n (this.categoryMode ? isEventOn(event, identifier) : isEventStart(event, day, identifier, firstWeekday)) &&\n this.isEventForCategory(event, day.category)\n )\n },\n getEventsForDayTimed (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n return this.parsedEvents.filter(\n event => !event.allDay &&\n isEventOn(event, identifier) &&\n this.isEventForCategory(event, day.category)\n )\n },\n getScopedSlots () {\n if (this.noEvents) {\n return { ...this.$scopedSlots }\n }\n\n const mode = this.eventModeFunction(\n this.parsedEvents,\n this.eventWeekdays[0],\n this.parsedEventOverlapThreshold\n )\n\n const isNode = (input: VNode | false): input is VNode => !!input\n const getSlotChildren: VEventsToNodes = (day, getter, mapper, timed) => {\n const events = getter(day)\n const visuals = mode(day, events, timed, this.categoryMode)\n\n if (timed) {\n return visuals.map(visual => mapper(visual, day)).filter(isNode)\n }\n\n const children: VNode[] = []\n\n visuals.forEach((visual, index) => {\n while (children.length < visual.column) {\n children.push(this.genPlaceholder(day))\n }\n\n const mapped = mapper(visual, day)\n if (mapped) {\n children.push(mapped)\n }\n })\n\n return children\n }\n\n const slots = this.$scopedSlots\n const slotDay = slots.day\n const slotDayHeader = slots['day-header']\n const slotDayBody = slots['day-body']\n\n return {\n ...slots,\n day: (day: CalendarDaySlotScope) => {\n let children = getSlotChildren(day, this.getEventsForDay, this.genDayEvent, false)\n if (children && children.length > 0 && this.eventMore) {\n children.push(this.genMore(day))\n }\n if (slotDay) {\n const slot = slotDay(day)\n if (slot) {\n children = children ? children.concat(slot) : slot\n }\n }\n return children\n },\n 'day-header': (day: CalendarDaySlotScope) => {\n let children = getSlotChildren(day, this.getEventsForDayAll, this.genDayEvent, false)\n\n if (slotDayHeader) {\n const slot = slotDayHeader(day)\n if (slot) {\n children = children ? children.concat(slot) : slot\n }\n }\n return children\n },\n 'day-body': (day: CalendarDayBodySlotScope) => {\n const events = getSlotChildren(day, this.getEventsForDayTimed, this.genTimedEvent, true)\n let children: VNode[] = [\n this.$createElement('div', {\n staticClass: 'v-event-timed-container',\n }, events),\n ]\n\n if (slotDayBody) {\n const slot = slotDayBody(day)\n if (slot) {\n children = children.concat(slot)\n }\n }\n return children\n },\n }\n },\n },\n})\n"],"mappings":"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"}