{"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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"}