{"version":3,"file":"main.js","sources":["../../src/core/util/dom-manip.ts","../../src/core/util/geom.ts","../../src/core/util/scrollbars.ts","../../src/core/util/dom-geom.ts","../../src/core/util/dom-event.ts","../../src/core/datelib/marker.ts","../../src/core/datelib/duration.ts","../../src/core/util/misc.ts","../../node_modules/tslib/tslib.es6.js","../../src/core/structs/recurring-event.ts","../../src/core/util/object.ts","../../src/core/structs/event-store.ts","../../src/core/datelib/date-range.ts","../../src/core/util/array.ts","../../src/core/util/memoize.ts","../../src/core/datelib/formatting-native.ts","../../src/core/datelib/formatting-cmd.ts","../../src/core/datelib/formatting-func.ts","../../src/core/datelib/formatting.ts","../../src/core/api/EventSourceApi.ts","../../src/core/api/EventApi.ts","../../src/core/component/event-rendering.ts","../../src/core/structs/event-mutation.ts","../../src/core/reducers/eventStore.ts","../../src/core/validation.ts","../../src/core/util/html.ts","../../src/core/component/event-ui.ts","../../src/core/structs/event.ts","../../src/core/structs/business-hours.ts","../../src/core/component/memoized-rendering.ts","../../src/core/component/event-splitting.ts","../../src/core/component/date-rendering.ts","../../src/core/util/promise.ts","../../src/core/common/Mixin.ts","../../src/core/common/EmitterMixin.ts","../../src/core/common/PositionCache.ts","../../src/core/common/scroll-controller.ts","../../src/core/common/ScrollComponent.ts","../../src/core/theme/Theme.ts","../../src/core/component/Component.ts","../../src/core/component/DateComponent.ts","../../src/core/plugin-system.ts","../../src/core/event-sources/array-event-source.ts","../../src/core/event-sources/func-event-source.ts","../../src/core/util/requestJson.ts","../../src/core/event-sources/json-feed-event-source.ts","../../src/core/structs/recurring-event-simple.ts","../../src/core/option-change-handlers.ts","../../src/core/options.ts","../../src/core/datelib/locale.ts","../../src/core/OptionsManager.ts","../../src/core/datelib/calendar-system.ts","../../src/core/datelib/parsing.ts","../../src/core/datelib/env.ts","../../src/core/structs/event-source.ts","../../src/core/reducers/eventSources.ts","../../src/core/DateProfileGenerator.ts","../../src/core/reducers/main.ts","../../src/core/structs/date-span.ts","../../src/core/structs/view-def.ts","../../src/core/structs/view-config.ts","../../src/core/structs/view-spec.ts","../../src/core/Toolbar.ts","../../src/core/CalendarComponent.ts","../../src/core/interactions/interaction.ts","../../src/core/interactions/EventClicking.ts","../../src/core/interactions/EventHovering.ts","../../src/core/theme/StandardTheme.ts","../../src/core/Calendar.ts","../../src/core/View.ts","../../src/core/component/renderers/FgEventRenderer.ts","../../src/core/component/renderers/FillRenderer.ts","../../src/core/datelib/timezone.ts","../../src/core/interactions/ElementDragging.ts","../../src/core/formatting-api.ts","../../src/core/structs/drag-meta.ts","../../src/core/common/table-utils.ts","../../src/core/common/DayHeader.ts","../../src/core/common/DaySeries.ts","../../src/core/common/DayTable.ts","../../src/core/common/slicing-utils.ts","../../src/core/main.ts"],"sourcesContent":["\n// Creating\n// ----------------------------------------------------------------------------------------------------------------\n\nconst elementPropHash = { // when props given to createElement should be treated as props, not attributes\n  className: true,\n  colSpan: true,\n  rowSpan: true\n}\n\nconst containerTagHash = {\n  '<tr': 'tbody',\n  '<td': 'tr'\n}\n\nexport function createElement(tagName: string, attrs: object | null, content?: ElementContent): HTMLElement {\n  let el: HTMLElement = document.createElement(tagName)\n\n  if (attrs) {\n    for (let attrName in attrs) {\n      if (attrName === 'style') {\n        applyStyle(el, attrs[attrName])\n      } else if (elementPropHash[attrName]) {\n        el[attrName] = attrs[attrName]\n      } else {\n        el.setAttribute(attrName, attrs[attrName])\n      }\n    }\n  }\n\n  if (typeof content === 'string') {\n    el.innerHTML = content // shortcut. no need to process HTML in any way\n  } else if (content != null) {\n    appendToElement(el, content)\n  }\n\n  return el\n}\n\nexport function htmlToElement(html: string): HTMLElement {\n  html = html.trim()\n  let container = document.createElement(computeContainerTag(html))\n  container.innerHTML = html\n  return container.firstChild as HTMLElement\n}\n\nexport function htmlToElements(html: string): HTMLElement[] {\n  return Array.prototype.slice.call(htmlToNodeList(html))\n}\n\nfunction htmlToNodeList(html: string): NodeList {\n  html = html.trim()\n  let container = document.createElement(computeContainerTag(html))\n  container.innerHTML = html\n  return container.childNodes\n}\n\n// assumes html already trimmed and tag names are lowercase\nfunction computeContainerTag(html: string) {\n  return containerTagHash[\n    html.substr(0, 3) // faster than using regex\n  ] || 'div'\n}\n\n\n// Inserting / Removing\n// ----------------------------------------------------------------------------------------------------------------\n\nexport type ElementContent = string | Node | Node[] | NodeList\n\nexport function appendToElement(el: HTMLElement, content: ElementContent) {\n  let childNodes = normalizeContent(content)\n\n  for (let i = 0; i < childNodes.length; i++) {\n    el.appendChild(childNodes[i])\n  }\n}\n\nexport function prependToElement(parent: HTMLElement, content: ElementContent) {\n  let newEls = normalizeContent(content)\n  let afterEl = parent.firstChild || null // if no firstChild, will append to end, but that's okay, b/c there were no children\n\n  for (let i = 0; i < newEls.length; i++) {\n    parent.insertBefore(newEls[i], afterEl)\n  }\n}\n\nexport function insertAfterElement(refEl: HTMLElement, content: ElementContent) {\n  let newEls = normalizeContent(content)\n  let afterEl = refEl.nextSibling || null\n\n  for (let i = 0; i < newEls.length; i++) {\n    refEl.parentNode.insertBefore(newEls[i], afterEl)\n  }\n}\n\nfunction normalizeContent(content: ElementContent): Node[] {\n  let els\n  if (typeof content === 'string') {\n    els = htmlToElements(content)\n  } else if (content instanceof Node) {\n    els = [ content ]\n  } else { // Node[] or NodeList\n    els = Array.prototype.slice.call(content)\n  }\n  return els\n}\n\nexport function removeElement(el: HTMLElement) {\n  if (el.parentNode) {\n    el.parentNode.removeChild(el)\n  }\n}\n\n\n// Querying\n// ----------------------------------------------------------------------------------------------------------------\n\n// from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\nconst matchesMethod =\n  Element.prototype.matches ||\n  (Element.prototype as any).matchesSelector ||\n  (Element.prototype as any).msMatchesSelector\n\nconst closestMethod = Element.prototype.closest || function(selector) {\n  // polyfill\n  let el = this\n  if (!document.documentElement.contains(el)) {\n    return null\n  }\n  do {\n    if (elementMatches(el, selector)) {\n      return el\n    }\n    el = el.parentElement || el.parentNode\n  } while (el !== null && el.nodeType === 1)\n  return null\n}\n\nexport function elementClosest(el: HTMLElement, selector: string): HTMLElement {\n  return closestMethod.call(el, selector)\n}\n\nexport function elementMatches(el: HTMLElement, selector: string): HTMLElement {\n  return matchesMethod.call(el, selector)\n}\n\n// accepts multiple subject els\n// returns a real array. good for methods like forEach\nexport function findElements(container: HTMLElement[] | HTMLElement | NodeListOf<HTMLElement>, selector: string): HTMLElement[] {\n  let containers = container instanceof HTMLElement ? [ container ] : container\n  let allMatches: HTMLElement[] = []\n\n  for (let i = 0; i < containers.length; i++) {\n    let matches = containers[i].querySelectorAll(selector)\n\n    for (let j = 0; j < matches.length; j++) {\n      allMatches.push(matches[j] as HTMLElement)\n    }\n  }\n\n  return allMatches\n}\n\n// accepts multiple subject els\n// only queries direct child elements\nexport function findChildren(parent: HTMLElement[] | HTMLElement, selector?: string): HTMLElement[] {\n  let parents = parent instanceof HTMLElement ? [ parent ] : parent\n  let allMatches = []\n\n  for (let i = 0; i < parents.length; i++) {\n    let childNodes = parents[i].children // only ever elements\n\n    for (let j = 0; j < childNodes.length; j++) {\n      let childNode = childNodes[j]\n\n      if (!selector || elementMatches(childNode as HTMLElement, selector)) {\n        allMatches.push(childNode)\n      }\n    }\n  }\n\n  return allMatches\n}\n\n\n// Attributes\n// ----------------------------------------------------------------------------------------------------------------\n\nexport function forceClassName(el: HTMLElement, className: string, bool) { // might not be used anywhere\n  if (bool) {\n    el.classList.add(className)\n  } else {\n    el.classList.remove(className)\n  }\n}\n\n\n// Style\n// ----------------------------------------------------------------------------------------------------------------\n\nconst PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i\n\nexport function applyStyle(el: HTMLElement, props: object) {\n  for (let propName in props) {\n    applyStyleProp(el, propName, props[propName])\n  }\n}\n\nexport function applyStyleProp(el: HTMLElement, name: string, val) {\n  if (val == null) {\n    el.style[name] = ''\n  } else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {\n    el.style[name] = val + 'px'\n  } else {\n    el.style[name] = val\n  }\n}\n","\nexport interface Point {\n  left: number\n  top: number\n}\n\nexport interface Rect {\n  left: number\n  right: number\n  top: number\n  bottom: number\n}\n\n\nexport function pointInsideRect(point: Point, rect: Rect): boolean {\n  return point.left >= rect.left &&\n    point.left < rect.right &&\n    point.top >= rect.top &&\n    point.top < rect.bottom\n}\n\n\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\nexport function intersectRects(rect1: Rect, rect2: Rect): Rect | false {\n  let res = {\n    left: Math.max(rect1.left, rect2.left),\n    right: Math.min(rect1.right, rect2.right),\n    top: Math.max(rect1.top, rect2.top),\n    bottom: Math.min(rect1.bottom, rect2.bottom)\n  }\n\n  if (res.left < res.right && res.top < res.bottom) {\n    return res\n  }\n\n  return false\n}\n\n\nexport function translateRect(rect: Rect, deltaX: number, deltaY: number): Rect {\n  return {\n    left: rect.left + deltaX,\n    right: rect.right + deltaX,\n    top: rect.top + deltaY,\n    bottom: rect.bottom + deltaY\n  }\n}\n\n\n// Returns a new point that will have been moved to reside within the given rectangle\nexport function constrainPoint(point: Point, rect: Rect): Point {\n  return {\n    left: Math.min(Math.max(point.left, rect.left), rect.right),\n    top: Math.min(Math.max(point.top, rect.top), rect.bottom)\n  }\n}\n\n\n// Returns a point that is the center of the given rectangle\nexport function getRectCenter(rect: Rect): Point {\n  return {\n    left: (rect.left + rect.right) / 2,\n    top: (rect.top + rect.bottom) / 2\n  }\n}\n\n\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\nexport function diffPoints(point1: Point, point2: Point): Point {\n  return {\n    left: point1.left - point2.left,\n    top: point1.top - point2.top\n  }\n}\n","import { createElement, removeElement } from './dom-manip'\n\n\n// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\n\nlet isRtlScrollbarOnLeft: boolean | null = null\n\nexport function getIsRtlScrollbarOnLeft() { // responsible for caching the computation\n  if (isRtlScrollbarOnLeft === null) {\n    isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft()\n  }\n  return isRtlScrollbarOnLeft\n}\n\nfunction computeIsRtlScrollbarOnLeft() { // creates an offscreen test element, then removes it\n  let outerEl = createElement('div', {\n    style: {\n      position: 'absolute',\n      top: -1000,\n      left: 0,\n      border: 0,\n      padding: 0,\n      overflow: 'scroll',\n      direction: 'rtl'\n    }\n  }, '<div></div>')\n\n  document.body.appendChild(outerEl)\n  let innerEl = outerEl.firstChild as HTMLElement\n  let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left\n\n  removeElement(outerEl)\n  return res\n}\n\n\n// The scrollbar width computations in computeEdges are sometimes flawed when it comes to\n// retina displays, rounding, and IE11. Massage them into a usable value.\nexport function sanitizeScrollbarWidth(width: number) {\n  width = Math.max(0, width) // no negatives\n  width = Math.round(width)\n  return width\n}\n","import { Rect, intersectRects } from './geom'\nimport { sanitizeScrollbarWidth, getIsRtlScrollbarOnLeft } from './scrollbars'\n\nexport interface EdgeInfo {\n  borderLeft: number\n  borderRight: number\n  borderTop: number\n  borderBottom: number\n  scrollbarLeft: number\n  scrollbarRight: number\n  scrollbarBottom: number\n  paddingLeft?: number\n  paddingRight?: number\n  paddingTop?: number\n  paddingBottom?: number\n}\n\n\nexport function computeEdges(el, getPadding = false): EdgeInfo {\n  let computedStyle = window.getComputedStyle(el)\n  let borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0\n  let borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0\n  let borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0\n  let borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0\n  let scrollbarLeftRight = sanitizeScrollbarWidth(el.offsetWidth - el.clientWidth - borderLeft - borderRight)\n  let scrollbarBottom = sanitizeScrollbarWidth(el.offsetHeight - el.clientHeight - borderTop - borderBottom)\n  let res: EdgeInfo = {\n    borderLeft,\n    borderRight,\n    borderTop,\n    borderBottom,\n    scrollbarBottom,\n    scrollbarLeft: 0,\n    scrollbarRight: 0\n  }\n\n  if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?\n    res.scrollbarLeft = scrollbarLeftRight\n  } else {\n    res.scrollbarRight = scrollbarLeftRight\n  }\n\n  if (getPadding) {\n    res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0\n    res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0\n    res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0\n    res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0\n  }\n\n  return res\n}\n\n\nexport function computeInnerRect(el, goWithinPadding = false) {\n  let outerRect = computeRect(el)\n  let edges = computeEdges(el, goWithinPadding)\n  let res = {\n    left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,\n    right: outerRect.right - edges.borderRight - edges.scrollbarRight,\n    top: outerRect.top + edges.borderTop,\n    bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom\n  }\n\n  if (goWithinPadding) {\n    res.left += edges.paddingLeft\n    res.right -= edges.paddingRight\n    res.top += edges.paddingTop\n    res.bottom -= edges.paddingBottom\n  }\n\n  return res\n}\n\n\nexport function computeRect(el): Rect {\n  let rect = el.getBoundingClientRect()\n\n  return {\n    left: rect.left + window.pageXOffset,\n    top: rect.top + window.pageYOffset,\n    right: rect.right + window.pageXOffset,\n    bottom: rect.bottom + window.pageYOffset\n  }\n}\n\n\nfunction computeViewportRect(): Rect {\n  return {\n    left: window.pageXOffset,\n    right: window.pageXOffset + document.documentElement.clientWidth,\n    top: window.pageYOffset,\n    bottom: window.pageYOffset + document.documentElement.clientHeight\n  }\n}\n\n\nexport function computeHeightAndMargins(el: HTMLElement) {\n  let computed = window.getComputedStyle(el)\n  return el.getBoundingClientRect().height +\n    parseInt(computed.marginTop, 10) +\n    parseInt(computed.marginBottom, 10)\n}\n\n\n// does not return window\nexport function getClippingParents(el: HTMLElement): HTMLElement[] {\n  let parents: HTMLElement[] = []\n\n  while (el instanceof HTMLElement) { // will stop when gets to document or null\n    let computedStyle = window.getComputedStyle(el)\n\n    if (computedStyle.position === 'fixed') {\n      break\n    }\n\n    if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {\n      parents.push(el)\n    }\n\n    el = el.parentNode as HTMLElement\n  }\n\n  return parents\n}\n\n\nexport function computeClippingRect(el: HTMLElement): Rect {\n  return getClippingParents(el)\n    .map(function(el) {\n      return computeInnerRect(el)\n    })\n    .concat(computeViewportRect())\n    .reduce(function(rect0, rect1) {\n      return intersectRects(rect0, rect1) || rect1 // should always intersect\n    })\n}\n","import { elementClosest } from './dom-manip'\n\n\n// Stops a mouse/touch event from doing it's native browser action\nexport function preventDefault(ev) {\n  ev.preventDefault()\n}\n\n\n// Event Delegation\n// ----------------------------------------------------------------------------------------------------------------\n\nexport function listenBySelector(\n  container: HTMLElement,\n  eventType: string,\n  selector: string,\n  handler: (ev: Event, matchedTarget: HTMLElement) => void\n) {\n  function realHandler(ev: Event) {\n    let matchedChild = elementClosest(ev.target as HTMLElement, selector)\n    if (matchedChild) {\n      handler.call(matchedChild, ev, matchedChild)\n    }\n  }\n\n  container.addEventListener(eventType, realHandler)\n\n  return function() {\n    container.removeEventListener(eventType, realHandler)\n  }\n}\n\nexport function listenToHoverBySelector(\n  container: HTMLElement,\n  selector: string,\n  onMouseEnter: (ev: Event, matchedTarget: HTMLElement) => void,\n  onMouseLeave: (ev: Event, matchedTarget: HTMLElement) => void\n) {\n  let currentMatchedChild\n\n  return listenBySelector(container, 'mouseover', selector, function(ev, matchedChild) {\n    if (matchedChild !== currentMatchedChild) {\n      currentMatchedChild = matchedChild\n      onMouseEnter(ev, matchedChild)\n\n      let realOnMouseLeave = (ev) => {\n        currentMatchedChild = null\n        onMouseLeave(ev, matchedChild)\n        matchedChild.removeEventListener('mouseleave', realOnMouseLeave)\n      }\n\n      // listen to the next mouseleave, and then unattach\n      matchedChild.addEventListener('mouseleave', realOnMouseLeave)\n    }\n  })\n}\n\n\n// Animation\n// ----------------------------------------------------------------------------------------------------------------\n\nconst transitionEventNames = [\n  'webkitTransitionEnd',\n  'otransitionend',\n  'oTransitionEnd',\n  'msTransitionEnd',\n  'transitionend'\n]\n\n// triggered only when the next single subsequent transition finishes\nexport function whenTransitionDone(el: HTMLElement, callback: (ev: Event) => void) {\n  let realCallback = function(ev) {\n    callback(ev)\n    transitionEventNames.forEach(function(eventName) {\n      el.removeEventListener(eventName, realCallback)\n    })\n  }\n\n  transitionEventNames.forEach(function(eventName) {\n    el.addEventListener(eventName, realCallback) // cross-browser way to determine when the transition finishes\n  })\n}\n","import { Duration } from './duration'\n\nexport type DateMarker = Date\n\nexport const DAY_IDS = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ]\n\n\n// Adding\n\nexport function addWeeks(m: DateMarker, n: number) {\n  let a = dateToUtcArray(m)\n  a[2] += n * 7\n  return arrayToUtcDate(a)\n}\n\nexport function addDays(m: DateMarker, n: number) {\n  let a = dateToUtcArray(m)\n  a[2] += n\n  return arrayToUtcDate(a)\n}\n\nexport function addMs(m: DateMarker, n: number) {\n  let a = dateToUtcArray(m)\n  a[6] += n\n  return arrayToUtcDate(a)\n}\n\n\n// Diffing (all return floats)\n\nexport function diffWeeks(m0, m1) {\n  return diffDays(m0, m1) / 7\n}\n\nexport function diffDays(m0, m1) {\n  return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24)\n}\n\nexport function diffHours(m0, m1) {\n  return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60)\n}\n\nexport function diffMinutes(m0, m1) {\n  return (m1.valueOf() - m0.valueOf()) / (1000 * 60)\n}\n\nexport function diffSeconds(m0, m1) {\n  return (m1.valueOf() - m0.valueOf()) / 1000\n}\n\nexport function diffDayAndTime(m0: DateMarker, m1: DateMarker): Duration {\n  let m0day = startOfDay(m0)\n  let m1day = startOfDay(m1)\n\n  return {\n    years: 0,\n    months: 0,\n    days: Math.round(diffDays(m0day, m1day)),\n    milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf())\n  }\n}\n\n\n// Diffing Whole Units\n\nexport function diffWholeWeeks(m0: DateMarker, m1: DateMarker): number {\n  let d = diffWholeDays(m0, m1)\n\n  if (d !== null && d % 7 === 0) {\n    return d / 7\n  }\n\n  return null\n}\n\nexport function diffWholeDays(m0: DateMarker, m1: DateMarker): number {\n  if (timeAsMs(m0) === timeAsMs(m1)) {\n    return Math.round(diffDays(m0, m1))\n  }\n  return null\n}\n\n\n// Start-Of\n\nexport function startOfDay(m: DateMarker): DateMarker {\n  return arrayToUtcDate([\n    m.getUTCFullYear(),\n    m.getUTCMonth(),\n    m.getUTCDate()\n  ])\n}\n\nexport function startOfHour(m: DateMarker) {\n  return arrayToUtcDate([\n    m.getUTCFullYear(),\n    m.getUTCMonth(),\n    m.getUTCDate(),\n    m.getUTCHours()\n  ])\n}\n\nexport function startOfMinute(m: DateMarker) {\n  return arrayToUtcDate([\n    m.getUTCFullYear(),\n    m.getUTCMonth(),\n    m.getUTCDate(),\n    m.getUTCHours(),\n    m.getUTCMinutes()\n  ])\n}\n\nexport function startOfSecond(m: DateMarker) {\n  return arrayToUtcDate([\n    m.getUTCFullYear(),\n    m.getUTCMonth(),\n    m.getUTCDate(),\n    m.getUTCHours(),\n    m.getUTCMinutes(),\n    m.getUTCSeconds()\n  ])\n}\n\n\n// Week Computation\n\nexport function weekOfYear(marker, dow, doy) {\n  let y = marker.getUTCFullYear()\n  let w = weekOfGivenYear(marker, y, dow, doy)\n\n  if (w < 1) {\n    return weekOfGivenYear(marker, y - 1, dow, doy)\n  }\n\n  let nextW = weekOfGivenYear(marker, y + 1, dow, doy)\n  if (nextW >= 1) {\n    return Math.min(w, nextW)\n  }\n\n  return w\n}\n\nfunction weekOfGivenYear(marker, year, dow, doy) {\n  let firstWeekStart = arrayToUtcDate([ year, 0, 1 + firstWeekOffset(year, dow, doy) ])\n  let dayStart = startOfDay(marker)\n  let days = Math.round(diffDays(firstWeekStart, dayStart))\n\n  return Math.floor(days / 7) + 1 // zero-indexed\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n\n  // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n  let fwd = 7 + dow - doy\n\n  // first-week day local weekday -- which local weekday is fwd\n  let fwdlw = (7 + arrayToUtcDate([ year, 0, fwd ]).getUTCDay() - dow) % 7\n\n  return -fwdlw + fwd - 1\n}\n\n\n// Array Conversion\n\nexport function dateToLocalArray(date) {\n  return [\n    date.getFullYear(),\n    date.getMonth(),\n    date.getDate(),\n    date.getHours(),\n    date.getMinutes(),\n    date.getSeconds(),\n    date.getMilliseconds()\n  ]\n}\n\nexport function arrayToLocalDate(a) {\n  return new Date(\n    a[0],\n    a[1] || 0,\n    a[2] == null ? 1 : a[2], // day of month\n    a[3] || 0,\n    a[4] || 0,\n    a[5] || 0\n  )\n}\n\nexport function dateToUtcArray(date) {\n  return [\n    date.getUTCFullYear(),\n    date.getUTCMonth(),\n    date.getUTCDate(),\n    date.getUTCHours(),\n    date.getUTCMinutes(),\n    date.getUTCSeconds(),\n    date.getUTCMilliseconds()\n  ]\n}\n\nexport function arrayToUtcDate(a) {\n\n  // according to web standards (and Safari), a month index is required.\n  // massage if only given a year.\n  if (a.length === 1) {\n    a = a.concat([ 0 ])\n  }\n\n  return new Date(Date.UTC.apply(Date, a))\n}\n\n\n// Other Utils\n\nexport function isValidDate(m: DateMarker) {\n  return !isNaN(m.valueOf())\n}\n\nexport function timeAsMs(m: DateMarker) {\n  return m.getUTCHours() * 1000 * 60 * 60 +\n    m.getUTCMinutes() * 1000 * 60 +\n    m.getUTCSeconds() * 1000 +\n    m.getUTCMilliseconds()\n}\n","import { isInt } from '../util/misc'\n\nexport type DurationInput = DurationObjectInput | string | number\n\nexport interface DurationObjectInput {\n  years?: number\n  year?: number\n  months?: number\n  month?: number\n  weeks?: number\n  week?: number\n  days?: number\n  day?: number\n  hours?: number\n  hour?: number\n  minutes?: number\n  minute?: number\n  seconds?: number\n  second?: number\n  milliseconds?: number\n  millisecond?: number\n  ms?: number\n}\n\nexport interface Duration {\n  years: number\n  months: number\n  days: number\n  milliseconds: number\n}\n\nconst INTERNAL_UNITS = [ 'years', 'months', 'days', 'milliseconds' ]\nconst PARSE_RE = /^(-?)(?:(\\d+)\\.)?(\\d+):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?/\n\n\n// Parsing and Creation\n\nexport function createDuration(input: DurationInput, unit?: string): Duration | null {\n  if (typeof input === 'string') {\n    return parseString(input)\n  } else if (typeof input === 'object' && input) { // non-null object\n    return normalizeObject(input)\n  } else if (typeof input === 'number') {\n    return normalizeObject({ [unit || 'milliseconds']: input })\n  } else {\n    return null\n  }\n}\n\nfunction parseString(s: string): Duration {\n  let m = PARSE_RE.exec(s)\n  if (m) {\n    let sign = m[1] ? -1 : 1\n    return {\n      years: 0,\n      months: 0,\n      days: sign * (m[2] ? parseInt(m[2], 10) : 0),\n      milliseconds: sign * (\n        (m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours\n        (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes\n        (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds\n        (m[6] ? parseInt(m[6], 10) : 0) // ms\n      )\n    }\n  }\n  return null\n}\n\nfunction normalizeObject(obj: DurationObjectInput): Duration {\n  return {\n    years: obj.years || obj.year || 0,\n    months: obj.months || obj.month || 0,\n    days:\n      (obj.days || obj.day || 0) +\n      getWeeksFromInput(obj) * 7,\n    milliseconds:\n      (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours\n      (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes\n      (obj.seconds || obj.second || 0) * 1000 + // seconds\n      (obj.milliseconds || obj.millisecond || obj.ms || 0) // ms\n  }\n}\n\nexport function getWeeksFromInput(obj: DurationObjectInput) {\n  return obj.weeks || obj.week || 0\n}\n\n\n// Equality\n\nexport function durationsEqual(d0: Duration, d1: Duration): boolean {\n  return d0.years === d1.years &&\n    d0.months === d1.months &&\n    d0.days === d1.days &&\n    d0.milliseconds === d1.milliseconds\n}\n\nexport function isSingleDay(dur: Duration) {\n  return dur.years === 0 && dur.months === 0 && dur.days === 1 && dur.milliseconds === 0\n}\n\n\n// Simple Math\n\nexport function addDurations(d0: Duration, d1: Duration) {\n  return {\n    years: d0.years + d1.years,\n    months: d0.months + d1.months,\n    days: d0.days + d1.days,\n    milliseconds: d0.milliseconds + d1.milliseconds\n  }\n}\n\nexport function subtractDurations(d1: Duration, d0: Duration): Duration {\n  return {\n    years: d1.years - d0.years,\n    months: d1.months - d0.months,\n    days: d1.days - d0.days,\n    milliseconds: d1.milliseconds - d0.milliseconds\n  }\n}\n\nexport function multiplyDuration(d: Duration, n: number) {\n  return {\n    years: d.years * n,\n    months: d.months * n,\n    days: d.days * n,\n    milliseconds: d.milliseconds * n\n  }\n}\n\n\n// Conversions\n// \"Rough\" because they are based on average-case Gregorian months/years\n\nexport function asRoughYears(dur: Duration) {\n  return asRoughDays(dur) / 365\n}\n\nexport function asRoughMonths(dur: Duration) {\n  return asRoughDays(dur) / 30\n}\n\nexport function asRoughDays(dur: Duration) {\n  return asRoughMs(dur) / 864e5\n}\n\nexport function asRoughHours(dur: Duration) {\n  return asRoughMs(dur) / (1000 * 60 * 60)\n}\n\nexport function asRoughMinutes(dur: Duration) {\n  return asRoughMs(dur) / (1000 * 60)\n}\n\nexport function asRoughSeconds(dur: Duration) {\n  return asRoughMs(dur) / 1000\n}\n\nexport function asRoughMs(dur: Duration) {\n  return dur.years * (365 * 864e5) +\n    dur.months * (30 * 864e5) +\n    dur.days * 864e5 +\n    dur.milliseconds\n}\n\n\n// Advanced Math\n\nexport function wholeDivideDurations(numerator: Duration, denominator: Duration): number {\n  let res = null\n\n  for (let i = 0; i < INTERNAL_UNITS.length; i++) {\n    let unit = INTERNAL_UNITS[i]\n\n    if (denominator[unit]) {\n      let localRes = numerator[unit] / denominator[unit]\n\n      if (!isInt(localRes) || (res !== null && res !== localRes)) {\n        return null\n      }\n\n      res = localRes\n\n    } else if (numerator[unit]) {\n      // needs to divide by something but can't!\n      return null\n    }\n  }\n\n  return res\n}\n\nexport function greatestDurationDenominator(dur: Duration, dontReturnWeeks?: boolean) {\n  let ms = dur.milliseconds\n  if (ms) {\n    if (ms % 1000 !== 0) {\n      return { unit: 'millisecond', value: ms }\n    }\n    if (ms % (1000 * 60) !== 0) {\n      return { unit: 'second', value: ms / 1000 }\n    }\n    if (ms % (1000 * 60 * 60) !== 0) {\n      return { unit: 'minute', value: ms / (1000 * 60) }\n    }\n    if (ms) {\n      return { unit: 'hour', value: ms / (1000 * 60 * 60) }\n    }\n  }\n  if (dur.days) {\n    if (!dontReturnWeeks && dur.days % 7 === 0) {\n      return { unit: 'week', value: dur.days / 7 }\n    }\n    return { unit: 'day', value: dur.days }\n  }\n  if (dur.months) {\n    return { unit: 'month', value: dur.months }\n  }\n  if (dur.years) {\n    return { unit: 'year', value: dur.years }\n  }\n  return { unit: 'millisecond', value: 0 }\n}\n","import { applyStyle } from './dom-manip'\nimport { computeHeightAndMargins } from './dom-geom'\nimport { preventDefault } from './dom-event'\nimport { DateMarker, startOfDay, addDays, diffDays, diffDayAndTime } from '../datelib/marker'\nimport { Duration, asRoughMs, createDuration } from '../datelib/duration'\nimport { DateEnv } from '../datelib/env'\nimport { DateRange, OpenDateRange } from '../datelib/date-range'\n\n\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\nexport function compensateScroll(rowEl: HTMLElement, scrollbarWidths) {\n  if (scrollbarWidths.left) {\n    applyStyle(rowEl, {\n      borderLeftWidth: 1,\n      marginLeft: scrollbarWidths.left - 1\n    })\n  }\n  if (scrollbarWidths.right) {\n    applyStyle(rowEl, {\n      borderRightWidth: 1,\n      marginRight: scrollbarWidths.right - 1\n    })\n  }\n}\n\n\n// Undoes compensateScroll and restores all borders/margins\nexport function uncompensateScroll(rowEl: HTMLElement) {\n  applyStyle(rowEl, {\n    marginLeft: '',\n    marginRight: '',\n    borderLeftWidth: '',\n    borderRightWidth: ''\n  })\n}\n\n\n// Make the mouse cursor express that an event is not allowed in the current area\nexport function disableCursor() {\n  document.body.classList.add('fc-not-allowed')\n}\n\n\n// Returns the mouse cursor to its original look\nexport function enableCursor() {\n  document.body.classList.remove('fc-not-allowed')\n}\n\n\n// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and\n// reduces the available height.\nexport function distributeHeight(els: HTMLElement[], availableHeight, shouldRedistribute) {\n\n  // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\n  // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\n\n  let minOffset1 = Math.floor(availableHeight / els.length) // for non-last element\n  let minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)) // for last element *FLOORING NOTE*\n  let flexEls = [] // elements that are allowed to expand. array of DOM nodes\n  let flexOffsets = [] // amount of vertical space it takes up\n  let flexHeights = [] // actual css height\n  let usedHeight = 0\n\n  undistributeHeight(els) // give all elements their natural height\n\n  // find elements that are below the recommended height (expandable).\n  // important to query for heights in a single first pass (to avoid reflow oscillation).\n  els.forEach(function(el, i) {\n    let minOffset = i === els.length - 1 ? minOffset2 : minOffset1\n    let naturalOffset = computeHeightAndMargins(el)\n\n    if (naturalOffset < minOffset) {\n      flexEls.push(el)\n      flexOffsets.push(naturalOffset)\n      flexHeights.push(el.offsetHeight)\n    } else {\n      // this element stretches past recommended height (non-expandable). mark the space as occupied.\n      usedHeight += naturalOffset\n    }\n  })\n\n  // readjust the recommended height to only consider the height available to non-maxed-out rows.\n  if (shouldRedistribute) {\n    availableHeight -= usedHeight\n    minOffset1 = Math.floor(availableHeight / flexEls.length)\n    minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)) // *FLOORING NOTE*\n  }\n\n  // assign heights to all expandable elements\n  flexEls.forEach(function(el, i) {\n    let minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1\n    let naturalOffset = flexOffsets[i]\n    let naturalHeight = flexHeights[i]\n    let newHeight = minOffset - (naturalOffset - naturalHeight) // subtract the margin/padding\n\n    if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things\n      el.style.height = newHeight + 'px'\n    }\n  })\n}\n\n\n// Undoes distrubuteHeight, restoring all els to their natural height\nexport function undistributeHeight(els: HTMLElement[]) {\n  els.forEach(function(el) {\n    el.style.height = ''\n  })\n}\n\n\n// Given `els`, a set of <td> cells, find the cell with the largest natural width and set the widths of all the\n// cells to be that width.\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\nexport function matchCellWidths(els: HTMLElement[]) {\n  let maxInnerWidth = 0\n\n  els.forEach(function(el) {\n    let innerEl = el.firstChild // hopefully an element\n    if (innerEl instanceof HTMLElement) {\n      let innerWidth = innerEl.offsetWidth\n      if (innerWidth > maxInnerWidth) {\n        maxInnerWidth = innerWidth\n      }\n    }\n  })\n\n  maxInnerWidth++ // sometimes not accurate of width the text needs to stay on one line. insurance\n\n  els.forEach(function(el) {\n    el.style.width = maxInnerWidth + 'px'\n  })\n\n  return maxInnerWidth\n}\n\n\n// Given one element that resides inside another,\n// Subtracts the height of the inner element from the outer element.\nexport function subtractInnerElHeight(outerEl: HTMLElement, innerEl: HTMLElement) {\n\n  // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\n  let reflowStyleProps = {\n    position: 'relative', // cause a reflow, which will force fresh dimension recalculation\n    left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\n  }\n  applyStyle(outerEl, reflowStyleProps)\n  applyStyle(innerEl, reflowStyleProps)\n\n  let diff = outerEl.offsetHeight - innerEl.offsetHeight // grab the dimensions\n\n  // undo hack\n  let resetStyleProps = { position: '', left: '' }\n  applyStyle(outerEl, resetStyleProps)\n  applyStyle(innerEl, resetStyleProps)\n\n  return diff\n}\n\n\n/* Selection\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nexport function preventSelection(el: HTMLElement) {\n  el.classList.add('fc-unselectable')\n  el.addEventListener('selectstart', preventDefault)\n}\n\n\nexport function allowSelection(el: HTMLElement) {\n  el.classList.remove('fc-unselectable')\n  el.removeEventListener('selectstart', preventDefault)\n}\n\n\n/* Context Menu\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nexport function preventContextMenu(el: HTMLElement) {\n  el.addEventListener('contextmenu', preventDefault)\n}\n\n\nexport function allowContextMenu(el: HTMLElement) {\n  el.removeEventListener('contextmenu', preventDefault)\n}\n\n\n/* Object Ordering by Field\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function parseFieldSpecs(input) {\n  let specs = []\n  let tokens = []\n  let i\n  let token\n\n  if (typeof input === 'string') {\n    tokens = input.split(/\\s*,\\s*/)\n  } else if (typeof input === 'function') {\n    tokens = [ input ]\n  } else if (Array.isArray(input)) {\n    tokens = input\n  }\n\n  for (i = 0; i < tokens.length; i++) {\n    token = tokens[i]\n\n    if (typeof token === 'string') {\n      specs.push(\n        token.charAt(0) === '-' ?\n          { field: token.substring(1), order: -1 } :\n          { field: token, order: 1 }\n      )\n    } else if (typeof token === 'function') {\n      specs.push({ func: token })\n    }\n  }\n\n  return specs\n}\n\n\nexport function compareByFieldSpecs(obj0, obj1, fieldSpecs) {\n  let i\n  let cmp\n\n  for (i = 0; i < fieldSpecs.length; i++) {\n    cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i])\n    if (cmp) {\n      return cmp\n    }\n  }\n\n  return 0\n}\n\n\nexport function compareByFieldSpec(obj0, obj1, fieldSpec) {\n  if (fieldSpec.func) {\n    return fieldSpec.func(obj0, obj1)\n  }\n\n  return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])\n    * (fieldSpec.order || 1)\n}\n\n\nexport function flexibleCompare(a, b) {\n  if (!a && !b) {\n    return 0\n  }\n  if (b == null) {\n    return -1\n  }\n  if (a == null) {\n    return 1\n  }\n  if (typeof a === 'string' || typeof b === 'string') {\n    return String(a).localeCompare(String(b))\n  }\n  return a - b\n}\n\n\n/* String Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nexport function capitaliseFirstLetter(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\n\nexport function padStart(val, len) { // doesn't work with total length more than 3\n  let s = String(val)\n  return '000'.substr(0, len - s.length) + s\n}\n\n\n/* Number Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nexport function compareNumbers(a, b) { // for .sort()\n  return a - b\n}\n\n\nexport function isInt(n) {\n  return n % 1 === 0\n}\n\n\n/* Weird Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nexport function applyAll(functions, thisObj, args) {\n  if (typeof functions === 'function') { // supplied a single function\n    functions = [ functions ]\n  }\n  if (functions) {\n    let i\n    let ret\n    for (i = 0; i < functions.length; i++) {\n      ret = functions[i].apply(thisObj, args) || ret\n    }\n    return ret\n  }\n}\n\n\nexport function firstDefined(...args) {\n  for (let i = 0; i < args.length; i++) {\n    if (args[i] !== undefined) {\n      return args[i]\n    }\n  }\n}\n\n\n// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\nexport function debounce(func, wait) {\n  let timeout\n  let args\n  let context\n  let timestamp\n  let result\n\n  let later = function() {\n    let last = new Date().valueOf() - timestamp\n    if (last < wait) {\n      timeout = setTimeout(later, wait - last)\n    } else {\n      timeout = null\n      result = func.apply(context, args)\n      context = args = null\n    }\n  }\n\n  return function() {\n    context = this\n    args = arguments\n    timestamp = new Date().valueOf()\n    if (!timeout) {\n      timeout = setTimeout(later, wait)\n    }\n    return result\n  }\n}\n\n\n/* Object Parsing\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nexport type GenericHash = { [key: string]: any }\n\n// Number and Boolean are only types that defaults or not computed for\n// TODO: write more comments\nexport function refineProps(rawProps: GenericHash, processors: GenericHash, defaults: GenericHash = {}, leftoverProps?: GenericHash): GenericHash {\n  let refined: GenericHash = {}\n\n  for (let key in processors) {\n    let processor = processors[key]\n\n    if (rawProps[key] !== undefined) {\n      // found\n      if (processor === Function) {\n        refined[key] = typeof rawProps[key] === 'function' ? rawProps[key] : null\n      } else if (processor) { // a refining function?\n        refined[key] = processor(rawProps[key])\n      } else {\n        refined[key] = rawProps[key]\n      }\n    } else if (defaults[key] !== undefined) {\n      // there's an explicit default\n      refined[key] = defaults[key]\n    } else {\n      // must compute a default\n      if (processor === String) {\n        refined[key] = '' // empty string is default for String\n      } else if (!processor || processor === Number || processor === Boolean || processor === Function) {\n        refined[key] = null // assign null for other non-custom processor funcs\n      } else {\n        refined[key] = processor(null) // run the custom processor func\n      }\n    }\n  }\n\n  if (leftoverProps) {\n    for (let key in rawProps) {\n      if (processors[key] === undefined) {\n        leftoverProps[key] = rawProps[key]\n      }\n    }\n  }\n\n  return refined\n}\n\n\n/* Date stuff that doesn't belong in datelib core\n----------------------------------------------------------------------------------------------------------------------*/\n\n\n// given a timed range, computes an all-day range that has the same exact duration,\n// but whose start time is aligned with the start of the day.\nexport function computeAlignedDayRange(timedRange: DateRange): DateRange {\n  let dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1\n  let start = startOfDay(timedRange.start)\n  let end = addDays(start, dayCnt)\n  return { start, end }\n}\n\n\n// given a timed range, computes an all-day range based on how for the end date bleeds into the next day\n// TODO: give nextDayThreshold a default arg\nexport function computeVisibleDayRange(timedRange: OpenDateRange, nextDayThreshold: Duration = createDuration(0)): OpenDateRange {\n  let startDay: DateMarker = null\n  let endDay: DateMarker = null\n\n  if (timedRange.end) {\n    endDay = startOfDay(timedRange.end)\n\n    let endTimeMS: number = timedRange.end.valueOf() - endDay.valueOf() // # of milliseconds into `endDay`\n\n    // If the end time is actually inclusively part of the next day and is equal to or\n    // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n    // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n    if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {\n      endDay = addDays(endDay, 1)\n    }\n  }\n\n  if (timedRange.start) {\n    startDay = startOfDay(timedRange.start) // the beginning of the day the range starts\n\n    // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\n    if (endDay && endDay <= startDay) {\n      endDay = addDays(startDay, 1)\n    }\n  }\n\n  return { start: startDay, end: endDay }\n}\n\n\n// spans from one day into another?\nexport function isMultiDayRange(range: DateRange) {\n  let visibleRange = computeVisibleDayRange(range)\n\n  return diffDays(visibleRange.start, visibleRange.end) > 1\n}\n\n\nexport function diffDates(date0: DateMarker, date1: DateMarker, dateEnv: DateEnv, largeUnit?: string) {\n  if (largeUnit === 'year') {\n    return createDuration(dateEnv.diffWholeYears(date0, date1), 'year')!\n  } else if (largeUnit === 'month') {\n    return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month')!\n  } else {\n    return diffDayAndTime(date0, date1) // returns a duration\n  }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { EventInput, EventDef } from './event'\nimport { DateRange } from '../datelib/date-range'\nimport { DateEnv } from '../datelib/env'\nimport { Duration } from '../datelib/duration'\nimport { DateMarker, startOfDay } from '../datelib/marker'\nimport { __assign } from 'tslib'\n\n/*\nThe plugin system for defining how a recurring event is expanded into individual instances.\n*/\n\nexport interface ParsedRecurring {\n  typeData: any\n  allDayGuess: boolean | null\n  duration: Duration | null // signals hasEnd\n}\n\nexport interface RecurringType {\n  parse: (rawEvent: EventInput, leftoverProps: any, dateEnv: DateEnv) => ParsedRecurring | null\n  expand: (typeData: any, framingRange: DateRange, dateEnv: DateEnv) => DateMarker[]\n}\n\n\nexport function parseRecurring(\n  eventInput: EventInput,\n  allDayDefault: boolean | null,\n  dateEnv: DateEnv,\n  recurringTypes: RecurringType[],\n  leftovers: any\n) {\n  for (let i = 0; i < recurringTypes.length; i++) {\n    let localLeftovers = {} as any\n    let parsed = recurringTypes[i].parse(eventInput, localLeftovers, dateEnv) as ParsedRecurring\n\n    if (parsed) {\n\n      let allDay = localLeftovers.allDay\n      delete localLeftovers.allDay // remove from leftovers\n      if (allDay == null) {\n        allDay = allDayDefault\n        if (allDay == null) {\n          allDay = parsed.allDayGuess\n          if (allDay == null) {\n            allDay = false\n          }\n        }\n      }\n\n      __assign(leftovers, localLeftovers)\n\n      return {\n        allDay,\n        duration: parsed.duration,\n        typeData: parsed.typeData,\n        typeId: i\n      }\n\n    }\n  }\n\n  return null\n}\n\n\n/*\nEvent MUST have a recurringDef\n*/\nexport function expandRecurringRanges(\n  eventDef: EventDef,\n  duration: Duration,\n  framingRange: DateRange,\n  dateEnv: DateEnv,\n  recurringTypes: RecurringType[]\n): DateMarker[] {\n  let typeDef = recurringTypes[eventDef.recurringDef.typeId]\n  let markers = typeDef.expand(\n    eventDef.recurringDef.typeData,\n    {\n      start: dateEnv.subtract(framingRange.start, duration), // for when event starts before framing range and goes into\n      end: framingRange.end\n    },\n    dateEnv\n  )\n\n  // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to\n  if (eventDef.allDay) {\n    markers = markers.map(startOfDay)\n  }\n\n  return markers\n}\n","\nconst hasOwnProperty = Object.prototype.hasOwnProperty\n\n// Merges an array of objects into a single object.\n// The second argument allows for an array of property names who's object values will be merged together.\nexport function mergeProps(propObjs, complexProps?): any {\n  let dest = {}\n  let i\n  let name\n  let complexObjs\n  let j\n  let val\n  let props\n\n  if (complexProps) {\n    for (i = 0; i < complexProps.length; i++) {\n      name = complexProps[i]\n      complexObjs = []\n\n      // collect the trailing object values, stopping when a non-object is discovered\n      for (j = propObjs.length - 1; j >= 0; j--) {\n        val = propObjs[j][name]\n\n        if (typeof val === 'object' && val) { // non-null object\n          complexObjs.unshift(val)\n        } else if (val !== undefined) {\n          dest[name] = val // if there were no objects, this value will be used\n          break\n        }\n      }\n\n      // if the trailing values were objects, use the merged value\n      if (complexObjs.length) {\n        dest[name] = mergeProps(complexObjs)\n      }\n    }\n  }\n\n  // copy values into the destination, going from last to first\n  for (i = propObjs.length - 1; i >= 0; i--) {\n    props = propObjs[i]\n\n    for (name in props) {\n      if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\n        dest[name] = props[name]\n      }\n    }\n  }\n\n  return dest\n}\n\n\nexport function filterHash(hash, func) {\n  let filtered = {}\n\n  for (let key in hash) {\n    if (func(hash[key], key)) {\n      filtered[key] = hash[key]\n    }\n  }\n\n  return filtered\n}\n\n\nexport function mapHash<InputItem, OutputItem>(\n  hash: { [key: string]: InputItem },\n  func: (input: InputItem, key: string) => OutputItem\n): { [key: string]: OutputItem } {\n  let newHash = {}\n\n  for (let key in hash) {\n    newHash[key] = func(hash[key], key)\n  }\n\n  return newHash\n}\n\n\nexport function arrayToHash(a): { [key: string]: true } {\n  let hash = {}\n\n  for (let item of a) {\n    hash[item] = true\n  }\n\n  return hash\n}\n\n\nexport function hashValuesToArray(obj) {\n  let a = []\n\n  for (let key in obj) {\n    a.push(obj[key])\n  }\n\n  return a\n}\n\n\nexport function isPropsEqual(obj0, obj1) {\n\n  for (let key in obj0) {\n    if (hasOwnProperty.call(obj0, key)) {\n      if (!(key in obj1)) {\n        return false\n      }\n    }\n  }\n\n  for (let key in obj1) {\n    if (hasOwnProperty.call(obj1, key)) {\n      if (obj0[key] !== obj1[key]) {\n        return false\n      }\n    }\n  }\n\n  return true\n}\n","import {\n  EventInput,\n  EventDef,\n  EventDefHash,\n  EventInstance,\n  EventInstanceHash,\n  createEventInstance,\n  parseEvent,\n  EventTuple\n} from './event'\nimport { EventSource } from './event-source'\nimport { expandRecurringRanges } from './recurring-event'\nimport Calendar from '../Calendar'\nimport { filterHash } from '../util/object'\nimport { DateRange } from '../datelib/date-range'\n\n/*\nA data structure that encapsulates EventDefs and EventInstances.\nUtils for parsing this data from raw EventInputs.\nUtils for manipulating an EventStore.\n*/\n\nexport interface EventStore {\n  defs: EventDefHash\n  instances: EventInstanceHash\n}\n\nexport function parseEvents(\n  rawEvents: EventInput[],\n  sourceId: string,\n  calendar: Calendar,\n  allowOpenRange?: boolean\n): EventStore {\n  let eventStore = createEmptyEventStore()\n\n  for (let rawEvent of rawEvents) {\n    let tuple = parseEvent(rawEvent, sourceId, calendar, allowOpenRange)\n\n    if (tuple) {\n      eventTupleToStore(tuple, eventStore)\n    }\n  }\n\n  return eventStore\n}\n\nexport function eventTupleToStore(tuple: EventTuple, eventStore: EventStore = createEmptyEventStore()) {\n  eventStore.defs[tuple.def.defId] = tuple.def\n\n  if (tuple.instance) {\n    eventStore.instances[tuple.instance.instanceId] = tuple.instance\n  }\n\n  return eventStore\n}\n\nexport function expandRecurring(eventStore: EventStore, framingRange: DateRange, calendar: Calendar): EventStore {\n  let dateEnv = calendar.dateEnv\n  let { defs, instances } = eventStore\n\n  // remove existing recurring instances\n  instances = filterHash(instances, function(instance: EventInstance) {\n    return !defs[instance.defId].recurringDef\n  })\n\n  for (let defId in defs) {\n    let def = defs[defId]\n\n    if (def.recurringDef) {\n      let duration = def.recurringDef.duration\n\n      if (!duration) {\n        duration = def.allDay ?\n          calendar.defaultAllDayEventDuration :\n          calendar.defaultTimedEventDuration\n      }\n\n      let starts = expandRecurringRanges(def, duration, framingRange, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes)\n\n      for (let start of starts) {\n        let instance = createEventInstance(defId, {\n          start,\n          end: dateEnv.add(start, duration)\n        })\n        instances[instance.instanceId] = instance\n      }\n    }\n  }\n\n  return { defs, instances }\n}\n\n// retrieves events that have the same groupId as the instance specified by `instanceId`\n// or they are the same as the instance.\n// why might instanceId not be in the store? an event from another calendar?\nexport function getRelevantEvents(eventStore: EventStore, instanceId: string): EventStore {\n  let instance = eventStore.instances[instanceId]\n\n  if (instance) {\n    let def = eventStore.defs[instance.defId]\n\n    // get events/instances with same group\n    let newStore = filterEventStoreDefs(eventStore, function(lookDef) {\n      return isEventDefsGrouped(def, lookDef)\n    })\n\n    // add the original\n    // TODO: wish we could use eventTupleToStore or something like it\n    newStore.defs[def.defId] = def\n    newStore.instances[instance.instanceId] = instance\n\n    return newStore\n  }\n\n  return createEmptyEventStore()\n}\n\nfunction isEventDefsGrouped(def0: EventDef, def1: EventDef): boolean {\n  return Boolean(def0.groupId && def0.groupId === def1.groupId)\n}\n\nexport function transformRawEvents(rawEvents, eventSource: EventSource, calendar: Calendar) {\n  let calEachTransform = calendar.opt('eventDataTransform')\n  let sourceEachTransform = eventSource ? eventSource.eventDataTransform : null\n\n  if (sourceEachTransform) {\n    rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform)\n  }\n\n  if (calEachTransform) {\n    rawEvents = transformEachRawEvent(rawEvents, calEachTransform)\n  }\n\n  return rawEvents\n}\n\nfunction transformEachRawEvent(rawEvents, func) {\n  let refinedEvents\n\n  if (!func) {\n    refinedEvents = rawEvents\n  } else {\n    refinedEvents = []\n\n    for (let rawEvent of rawEvents) {\n      let refinedEvent = func(rawEvent)\n\n      if (refinedEvent) {\n        refinedEvents.push(refinedEvent)\n      } else if (refinedEvent == null) {\n        refinedEvents.push(rawEvent)\n      } // if a different falsy value, do nothing\n    }\n  }\n\n  return refinedEvents\n}\n\nexport function createEmptyEventStore(): EventStore {\n  return { defs: {}, instances: {} }\n}\n\nexport function mergeEventStores(store0: EventStore, store1: EventStore): EventStore {\n  return {\n    defs: { ...store0.defs, ...store1.defs },\n    instances: { ...store0.instances, ...store1.instances }\n  }\n}\n\nexport function filterEventStoreDefs(eventStore: EventStore, filterFunc: (eventDef: EventDef) => boolean): EventStore {\n  let defs = filterHash(eventStore.defs, filterFunc)\n  let instances = filterHash(eventStore.instances, function(instance: EventInstance) {\n    return defs[instance.defId] // still exists?\n  })\n  return { defs, instances }\n}\n","import { DateMarker } from './marker'\nimport { DateEnv, DateInput } from './env'\n\nexport interface DateRangeInput {\n  start?: DateInput\n  end?: DateInput\n}\n\nexport interface OpenDateRange {\n  start: DateMarker | null\n  end: DateMarker | null\n}\n\nexport interface DateRange {\n  start: DateMarker\n  end: DateMarker\n}\n\nexport function parseRange(input: DateRangeInput, dateEnv: DateEnv): OpenDateRange {\n  let start = null\n  let end = null\n\n  if (input.start) {\n    start = dateEnv.createMarker(input.start)\n  }\n\n  if (input.end) {\n    end = dateEnv.createMarker(input.end)\n  }\n\n  if (!start && !end) {\n    return null\n  }\n\n  if (start && end && end < start) {\n    return null\n  }\n\n  return { start, end }\n}\n\n// SIDE-EFFECT: will mutate ranges.\n// Will return a new array result.\nexport function invertRanges(ranges: DateRange[], constraintRange: DateRange): DateRange[] {\n  let invertedRanges: DateRange[] = []\n  let start = constraintRange.start // the end of the previous range. the start of the new range\n  let i\n  let dateRange\n\n  // ranges need to be in order. required for our date-walking algorithm\n  ranges.sort(compareRanges)\n\n  for (i = 0; i < ranges.length; i++) {\n    dateRange = ranges[i]\n\n    // add the span of time before the event (if there is any)\n    if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)\n      invertedRanges.push({ start, end: dateRange.start })\n    }\n\n    if (dateRange.end > start) {\n      start = dateRange.end\n    }\n  }\n\n  // add the span of time after the last event (if there is any)\n  if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)\n    invertedRanges.push({ start, end: constraintRange.end })\n  }\n\n  return invertedRanges\n}\n\nfunction compareRanges(range0: DateRange, range1: DateRange) {\n  return range0.start.valueOf() - range1.start.valueOf() // earlier ranges go first\n}\n\nexport function intersectRanges(range0: OpenDateRange, range1: OpenDateRange): OpenDateRange {\n  let start = range0.start\n  let end = range0.end\n  let newRange = null\n\n  if (range1.start !== null) {\n    if (start === null) {\n      start = range1.start\n    } else {\n      start = new Date(Math.max(start.valueOf(), range1.start.valueOf()))\n    }\n  }\n\n  if (range1.end != null) {\n    if (end === null) {\n      end = range1.end\n    } else {\n      end = new Date(Math.min(end.valueOf(), range1.end.valueOf()))\n    }\n  }\n\n  if (start === null || end === null || start < end) {\n    newRange = { start, end }\n  }\n\n  return newRange\n}\n\nexport function rangesEqual(range0: OpenDateRange, range1: OpenDateRange): boolean {\n  return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&\n    (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf())\n}\n\nexport function rangesIntersect(range0: OpenDateRange, range1: OpenDateRange): boolean {\n  return (range0.end === null || range1.start === null || range0.end > range1.start) &&\n    (range0.start === null || range1.end === null || range0.start < range1.end)\n}\n\nexport function rangeContainsRange(outerRange: OpenDateRange, innerRange: OpenDateRange): boolean {\n  return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&\n    (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end))\n}\n\nexport function rangeContainsMarker(range: OpenDateRange, date: DateMarker | number): boolean { // date can be a millisecond time\n  return (range.start === null || date >= range.start) &&\n    (range.end === null || date < range.end)\n}\n\n// If the given date is not within the given range, move it inside.\n// (If it's past the end, make it one millisecond before the end).\nexport function constrainMarkerToRange(date: DateMarker, range: DateRange): DateMarker {\n  if (range.start != null && date < range.start) {\n    return range.start\n  }\n\n  if (range.end != null && date >= range.end) {\n    return new Date(range.end.valueOf() - 1)\n  }\n\n  return date\n}\n","\nexport function removeMatching(array, testFunc) {\n  let removeCnt = 0\n  let i = 0\n\n  while (i < array.length) {\n    if (testFunc(array[i])) { // truthy value means *remove*\n      array.splice(i, 1)\n      removeCnt++\n    } else {\n      i++\n    }\n  }\n\n  return removeCnt\n}\n\n\nexport function removeExact(array, exactVal) {\n  let removeCnt = 0\n  let i = 0\n\n  while (i < array.length) {\n    if (array[i] === exactVal) {\n      array.splice(i, 1)\n      removeCnt++\n    } else {\n      i++\n    }\n  }\n\n  return removeCnt\n}\n\nexport function isArraysEqual(a0, a1) {\n  let len = a0.length\n  let i\n\n  if (len !== a1.length) { // not array? or not same length?\n    return false\n  }\n\n  for (i = 0; i < len; i++) {\n    if (a0[i] !== a1[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n","import { isArraysEqual } from './array'\n\nexport function memoize<T>(workerFunc: T): T {\n  let args\n  let res\n\n  return function() {\n    if (!args || !isArraysEqual(args, arguments)) {\n      args = arguments\n      res = (workerFunc as any).apply(this, arguments)\n    }\n\n    return res\n  } as any\n}\n\n/*\nalways executes the workerFunc, but if the result is equal to the previous result,\nreturn the previous result instead.\n*/\nexport function memoizeOutput<T>(workerFunc: T, equalityFunc: (output0, output1) => boolean): T {\n  let cachedRes = null\n\n  return function() {\n    let newRes = (workerFunc as any).apply(this, arguments)\n\n    if (cachedRes === null || !(cachedRes === newRes || equalityFunc(cachedRes, newRes))) {\n      cachedRes = newRes\n    }\n\n    return cachedRes\n  } as any\n}\n","import { DateMarker, timeAsMs } from './marker'\nimport { CalendarSystem } from './calendar-system'\nimport { Locale } from './locale'\nimport { DateFormatter, DateFormattingContext, ZonedMarker, formatTimeZoneOffset } from './formatting'\nimport { memoize } from '../util/memoize'\n\nconst EXTENDED_SETTINGS_AND_SEVERITIES = {\n  week: 3,\n  separator: 0, // 0 = not applicable\n  omitZeroMinute: 0,\n  meridiem: 0, // like am/pm\n  omitCommas: 0\n}\n\nconst STANDARD_DATE_PROP_SEVERITIES = {\n  timeZoneName: 7,\n  era: 6,\n  year: 5,\n  month: 4,\n  day: 2,\n  weekday: 2,\n  hour: 1,\n  minute: 1,\n  second: 1\n}\n\nconst MERIDIEM_RE = /\\s*([ap])\\.?m\\.?/i // eats up leading spaces too\nconst COMMA_RE = /,/g // we need re for globalness\nconst MULTI_SPACE_RE = /\\s+/g\nconst LTR_RE = /\\u200e/g // control character\nconst UTC_RE = /UTC|GMT/\n\nexport class NativeFormatter implements DateFormatter {\n\n  standardDateProps: any\n  extendedSettings: any\n  severity: number\n  private buildFormattingFunc: typeof buildFormattingFunc // caching for efficiency with same date env\n\n  constructor(formatSettings) {\n    let standardDateProps: any = {}\n    let extendedSettings: any = {}\n    let severity = 0\n\n    for (let name in formatSettings) {\n      if (name in EXTENDED_SETTINGS_AND_SEVERITIES) {\n        extendedSettings[name] = formatSettings[name]\n        severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name], severity)\n      } else {\n        standardDateProps[name] = formatSettings[name]\n\n        if (name in STANDARD_DATE_PROP_SEVERITIES) {\n          severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name], severity)\n        }\n      }\n    }\n\n    this.standardDateProps = standardDateProps\n    this.extendedSettings = extendedSettings\n    this.severity = severity\n\n    this.buildFormattingFunc = memoize(buildFormattingFunc)\n  }\n\n  format(date: ZonedMarker, context: DateFormattingContext) {\n    return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date)\n  }\n\n  formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext) {\n    let { standardDateProps, extendedSettings } = this\n\n    let diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem)\n    if (!diffSeverity) {\n      return this.format(start, context)\n    }\n\n    let biggestUnitForPartial = diffSeverity\n    if (\n      biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time\n      (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&\n      (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&\n      (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')\n    ) {\n      biggestUnitForPartial = 1 // make it look like the dates are only different in terms of time\n    }\n\n    let full0 = this.format(start, context)\n    let full1 = this.format(end, context)\n\n    if (full0 === full1) {\n      return full0\n    }\n\n    let partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial)\n    let partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context)\n    let partial0 = partialFormattingFunc(start)\n    let partial1 = partialFormattingFunc(end)\n\n    let insertion = findCommonInsertion(full0, partial0, full1, partial1)\n    let separator = extendedSettings.separator || ''\n\n    if (insertion) {\n      return insertion.before + partial0 + separator + partial1 + insertion.after\n    }\n\n    return full0 + separator + full1\n  }\n\n  getLargestUnit() {\n    switch (this.severity) {\n      case 7:\n      case 6:\n      case 5:\n        return 'year'\n      case 4:\n        return 'month'\n      case 3:\n        return 'week'\n      default:\n        return 'day'\n    }\n  }\n\n}\n\nfunction buildFormattingFunc(\n  standardDateProps,\n  extendedSettings,\n  context: DateFormattingContext\n): (date: ZonedMarker) => string {\n  let standardDatePropCnt = Object.keys(standardDateProps).length\n\n  if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {\n    return function(date: ZonedMarker) {\n      return formatTimeZoneOffset(date.timeZoneOffset)\n    }\n  }\n\n  if (standardDatePropCnt === 0 && extendedSettings.week) {\n    return function(date: ZonedMarker) {\n      return formatWeekNumber(\n        context.computeWeekNumber(date.marker),\n        context.weekLabel,\n        context.locale,\n        extendedSettings.week\n      )\n    }\n  }\n\n  return buildNativeFormattingFunc(standardDateProps, extendedSettings, context)\n}\n\nfunction buildNativeFormattingFunc(\n  standardDateProps,\n  extendedSettings,\n  context: DateFormattingContext\n): (date: ZonedMarker) => string {\n  standardDateProps = { ...standardDateProps } // copy\n  extendedSettings = { ...extendedSettings } // copy\n\n  sanitizeSettings(standardDateProps, extendedSettings)\n\n  standardDateProps.timeZone = 'UTC' // we leverage the only guaranteed timeZone for our UTC markers\n\n  let normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps)\n  let zeroFormat // needed?\n\n  if (extendedSettings.omitZeroMinute) {\n    let zeroProps = { ...standardDateProps }\n    delete zeroProps.minute // seconds and ms were already considered in sanitizeSettings\n    zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps)\n  }\n\n  return function(date: ZonedMarker) {\n    let marker = date.marker\n    let format\n\n    if (zeroFormat && !marker.getUTCMinutes()) {\n      format = zeroFormat\n    } else {\n      format = normalFormat\n    }\n\n    let s = format.format(marker)\n\n    return postProcess(s, date, standardDateProps, extendedSettings, context)\n  }\n}\n\nfunction sanitizeSettings(standardDateProps, extendedSettings) {\n\n  // deal with a browser inconsistency where formatting the timezone\n  // requires that the hour/minute be present.\n  if (standardDateProps.timeZoneName) {\n    if (!standardDateProps.hour) {\n      standardDateProps.hour = '2-digit'\n    }\n    if (!standardDateProps.minute) {\n      standardDateProps.minute = '2-digit'\n    }\n  }\n\n  // only support short timezone names\n  if (standardDateProps.timeZoneName === 'long') {\n    standardDateProps.timeZoneName = 'short'\n  }\n\n  // if requesting to display seconds, MUST display minutes\n  if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {\n    delete extendedSettings.omitZeroMinute\n  }\n}\n\nfunction postProcess(s: string, date: ZonedMarker, standardDateProps, extendedSettings, context: DateFormattingContext): string {\n\n  s = s.replace(LTR_RE, '') // remove left-to-right control chars. do first. good for other regexes\n\n  if (standardDateProps.timeZoneName === 'short') {\n    s = injectTzoStr(\n      s,\n      (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?\n        'UTC' : // important to normalize for IE, which does \"GMT\"\n        formatTimeZoneOffset(date.timeZoneOffset)\n    )\n  }\n\n  if (extendedSettings.omitCommas) {\n    s = s.replace(COMMA_RE, '').trim()\n  }\n\n  if (extendedSettings.omitZeroMinute) {\n    s = s.replace(':00', '') // zeroFormat doesn't always achieve this\n  }\n\n  // ^ do anything that might create adjacent spaces before this point,\n  // because MERIDIEM_RE likes to eat up loading spaces\n\n  if (extendedSettings.meridiem === false) {\n    s = s.replace(MERIDIEM_RE, '').trim()\n  } else if (extendedSettings.meridiem === 'narrow') { // a/p\n    s = s.replace(MERIDIEM_RE, function(m0, m1) {\n      return m1.toLocaleLowerCase()\n    })\n  } else if (extendedSettings.meridiem === 'short') { // am/pm\n    s = s.replace(MERIDIEM_RE, function(m0, m1) {\n      return m1.toLocaleLowerCase() + 'm'\n    })\n  } else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase\n    s = s.replace(MERIDIEM_RE, function(m0) {\n      return m0.toLocaleLowerCase()\n    })\n  }\n\n  s = s.replace(MULTI_SPACE_RE, ' ')\n  s = s.trim()\n\n  return s\n}\n\nfunction injectTzoStr(s: string, tzoStr: string): string {\n  let replaced = false\n\n  s = s.replace(UTC_RE, function() {\n    replaced = true\n    return tzoStr\n  })\n\n  // IE11 doesn't include UTC/GMT in the original string, so append to end\n  if (!replaced) {\n    s += ' ' + tzoStr\n  }\n\n  return s\n}\n\nfunction formatWeekNumber(num: number, weekLabel: string, locale: Locale, display?: 'numeric' | 'narrow' | 'short'): string {\n  let parts = []\n\n  if (display === 'narrow') {\n    parts.push(weekLabel)\n  } else if (display === 'short') {\n    parts.push(weekLabel, ' ')\n  }\n  // otherwise, considered 'numeric'\n\n  parts.push(locale.simpleNumberFormat.format(num))\n\n  if (locale.options.isRtl) { // TODO: use control characters instead?\n    parts.reverse()\n  }\n\n  return parts.join('')\n}\n\n\n// Range Formatting Utils\n\n// 0 = exactly the same\n// 1 = different by time\n// and bigger\nfunction computeMarkerDiffSeverity(d0: DateMarker, d1: DateMarker, ca: CalendarSystem) {\n  if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {\n    return 5\n  }\n  if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {\n    return 4\n  }\n  if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {\n    return 2\n  }\n  if (timeAsMs(d0) !== timeAsMs(d1)) {\n    return 1\n  }\n  return 0\n}\n\nfunction computePartialFormattingOptions(options, biggestUnit) {\n  let partialOptions = {}\n\n  for (let name in options) {\n    if (\n      !(name in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)\n      STANDARD_DATE_PROP_SEVERITIES[name] <= biggestUnit\n    ) {\n      partialOptions[name] = options[name]\n    }\n  }\n\n  return partialOptions\n}\n\nfunction findCommonInsertion(full0, partial0, full1, partial1) {\n\n  let i0 = 0\n  while (i0 < full0.length) {\n\n    let found0 = full0.indexOf(partial0, i0)\n    if (found0 === -1) {\n      break\n    }\n\n    let before0 = full0.substr(0, found0)\n    i0 = found0 + partial0.length\n    let after0 = full0.substr(i0)\n\n    let i1 = 0\n    while (i1 < full1.length) {\n\n      let found1 = full1.indexOf(partial1, i1)\n      if (found1 === -1) {\n        break\n      }\n\n      let before1 = full1.substr(0, found1)\n      i1 = found1 + partial1.length\n      let after1 = full1.substr(i1)\n\n      if (before0 === before1 && after0 === after1) {\n        return {\n          before: before0,\n          after: after0\n        }\n      }\n    }\n  }\n\n  return null\n}\n","import {\n  DateFormatter, DateFormattingContext, ZonedMarker,\n  VerboseFormattingArg, createVerboseFormattingArg\n} from './formatting'\n\nexport type CmdFormatterFunc = (cmd: string, arg: VerboseFormattingArg) => string\n\n/*\nTODO: fix the terminology of \"formatter\" vs \"formatting func\"\n*/\n\n/*\nAt the time of instantiation, this object does not know which cmd-formatting system it will use.\nIt receives this at the time of formatting, as a setting.\n*/\nexport class CmdFormatter implements DateFormatter {\n\n  cmdStr: string\n  separator: string\n\n  constructor(cmdStr: string, separator?: string) {\n    this.cmdStr = cmdStr\n    this.separator = separator\n  }\n\n  format(date: ZonedMarker, context: DateFormattingContext) {\n    return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, this.separator))\n  }\n\n  formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext) {\n    return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, this.separator))\n  }\n\n}\n","import {\n  DateFormatter, DateFormattingContext, ZonedMarker,\n  VerboseFormattingArg, createVerboseFormattingArg\n} from './formatting'\n\nexport type FuncFormatterFunc = (arg: VerboseFormattingArg) => string\n\n\nexport class FuncFormatter implements DateFormatter {\n\n  func: FuncFormatterFunc\n\n  constructor(func: FuncFormatterFunc) {\n    this.func = func\n  }\n\n  format(date: ZonedMarker, context: DateFormattingContext) {\n    return this.func(createVerboseFormattingArg(date, null, context))\n  }\n\n  formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext) {\n    return this.func(createVerboseFormattingArg(start, end, context))\n  }\n\n}\n","import { padStart } from '../util/misc'\nimport { DateMarker } from './marker'\nimport { CalendarSystem } from './calendar-system'\nimport { Locale } from './locale'\nimport { NativeFormatter } from './formatting-native'\nimport { CmdFormatter, CmdFormatterFunc } from './formatting-cmd'\nimport { FuncFormatter, FuncFormatterFunc } from './formatting-func'\n\nexport interface ZonedMarker {\n  marker: DateMarker,\n  timeZoneOffset: number\n}\n\nexport interface ExpandedZonedMarker extends ZonedMarker {\n  array: number[],\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number\n}\n\nexport interface VerboseFormattingArg { // TODO: kill this\n  date: ExpandedZonedMarker\n  start: ExpandedZonedMarker\n  end?: ExpandedZonedMarker\n  timeZone: string\n  localeCodes: string[],\n  separator: string\n}\n\nexport interface DateFormattingContext {\n  timeZone: string,\n  locale: Locale,\n  calendarSystem: CalendarSystem\n  computeWeekNumber: (d: DateMarker) => number\n  weekLabel: string\n  cmdFormatter?: CmdFormatterFunc\n}\n\nexport interface DateFormatter {\n  format(date: ZonedMarker, context: DateFormattingContext)\n  formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext)\n}\n\n// TODO: use Intl.DateTimeFormatOptions\nexport type FormatterInput = object | string | FuncFormatterFunc\n\n\n// Formatter Object Creation\n\nexport function createFormatter(input: FormatterInput, defaultSeparator?: string): DateFormatter {\n  if (typeof input === 'object' && input) { // non-null object\n    if (typeof defaultSeparator === 'string') {\n      input = { separator: defaultSeparator, ...input }\n    }\n    return new NativeFormatter(input)\n\n  } else if (typeof input === 'string') {\n    return new CmdFormatter(input, defaultSeparator)\n\n  } else if (typeof input === 'function') {\n    return new FuncFormatter(input as FuncFormatterFunc)\n  }\n}\n\n\n// String Utils\n\n// timeZoneOffset is in minutes\nexport function buildIsoString(marker: DateMarker, timeZoneOffset?: number, stripZeroTime: boolean = false) {\n  let s = marker.toISOString()\n\n  s = s.replace('.000', '')\n\n  if (stripZeroTime) {\n    s = s.replace('T00:00:00Z', '')\n  }\n\n  if (s.length > 10) { // time part wasn't stripped, can add timezone info\n    if (timeZoneOffset == null) {\n      s = s.replace('Z', '')\n    } else if (timeZoneOffset !== 0) {\n      s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true))\n    }\n    // otherwise, its UTC-0 and we want to keep the Z\n  }\n\n  return s\n}\n\nexport function formatIsoTimeString(marker: DateMarker) {\n  return padStart(marker.getUTCHours(), 2) + ':' +\n    padStart(marker.getUTCMinutes(), 2) + ':' +\n    padStart(marker.getUTCSeconds(), 2)\n}\n\nexport function formatTimeZoneOffset(minutes: number, doIso = false) {\n  let sign = minutes < 0 ? '-' : '+'\n  let abs = Math.abs(minutes)\n  let hours = Math.floor(abs / 60)\n  let mins = Math.round(abs % 60)\n\n  if (doIso) {\n    return sign + padStart(hours, 2) + ':' + padStart(mins, 2)\n  } else {\n    return 'GMT' + sign + hours + (mins ? ':' + padStart(mins, 2) : '')\n  }\n}\n\n\n// Arg Utils\n\nexport function createVerboseFormattingArg(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, separator?: string): VerboseFormattingArg {\n  let startInfo = expandZonedMarker(start, context.calendarSystem)\n  let endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null\n\n  return {\n    date: startInfo,\n    start: startInfo,\n    end: endInfo,\n    timeZone: context.timeZone,\n    localeCodes: context.locale.codes,\n    separator\n  }\n}\n\nfunction expandZonedMarker(dateInfo: ZonedMarker, calendarSystem: CalendarSystem): ExpandedZonedMarker {\n  let a = calendarSystem.markerToArray(dateInfo.marker)\n\n  return {\n    marker: dateInfo.marker,\n    timeZoneOffset: dateInfo.timeZoneOffset,\n    array: a,\n    year: a[0],\n    month: a[1],\n    day: a[2],\n    hour: a[3],\n    minute: a[4],\n    second: a[5],\n    millisecond: a[6]\n  }\n}\n","import Calendar from '../Calendar'\nimport { EventSource } from '../structs/event-source'\n\nexport default class EventSourceApi {\n\n  calendar: Calendar\n  internalEventSource: EventSource // rename?\n\n  constructor(calendar: Calendar, internalEventSource: EventSource) {\n    this.calendar = calendar\n    this.internalEventSource = internalEventSource\n  }\n\n  remove() {\n    this.calendar.dispatch({\n      type: 'REMOVE_EVENT_SOURCE',\n      sourceId: this.internalEventSource.sourceId\n    })\n  }\n\n  refetch() {\n    this.calendar.dispatch({\n      type: 'FETCH_EVENT_SOURCES',\n      sourceIds: [ this.internalEventSource.sourceId ]\n    })\n  }\n\n  get id(): string {\n    return this.internalEventSource.publicId\n  }\n\n  // only relevant to json-feed event sources\n  get url(): string {\n    return this.internalEventSource.meta.url\n  }\n\n}\n","import Calendar from '../Calendar'\nimport { EventDef, EventInstance, NON_DATE_PROPS, DATE_PROPS } from '../structs/event'\nimport { UNSCOPED_EVENT_UI_PROPS } from '../component/event-ui'\nimport { EventMutation } from '../structs/event-mutation'\nimport { DateInput } from '../datelib/env'\nimport { diffDates, computeAlignedDayRange } from '../util/misc'\nimport { subtractDurations, DurationInput, createDuration } from '../datelib/duration'\nimport { createFormatter, FormatterInput } from '../datelib/formatting'\nimport EventSourceApi from './EventSourceApi'\n\nexport default class EventApi {\n\n  _calendar: Calendar\n  _def: EventDef\n  _instance: EventInstance | null\n\n  constructor(calendar: Calendar, def: EventDef, instance?: EventInstance) {\n    this._calendar = calendar\n    this._def = def\n    this._instance = instance || null\n  }\n\n  /*\n  TODO: make event struct more responsible for this\n  */\n  setProp(name: string, val: string) {\n    if (name in DATE_PROPS) {\n      // error. date-related props need other methods\n\n    } else if (name in NON_DATE_PROPS) {\n\n      if (typeof NON_DATE_PROPS[name] === 'function') {\n        val = NON_DATE_PROPS[name](val)\n      }\n\n      this.mutate({\n        standardProps: { [name]: val }\n      })\n\n    } else if (name in UNSCOPED_EVENT_UI_PROPS) {\n      let ui\n\n      if (typeof UNSCOPED_EVENT_UI_PROPS[name] === 'function') {\n        val = UNSCOPED_EVENT_UI_PROPS[name](val)\n      }\n\n      if (name === 'color') {\n        ui = { backgroundColor: val, borderColor: val }\n      } else if (name === 'editable') {\n        ui = { startEditable: val, durationEditable: val }\n      } else {\n        ui = { [name]: val }\n      }\n\n      this.mutate({\n        standardProps: { ui }\n      })\n\n    } else {\n      // error\n    }\n  }\n\n  setExtendedProp(name: string, val: string) {\n    this.mutate({\n      extendedProps: { [name]: val }\n    })\n  }\n\n  setStart(startInput: DateInput, options: { granularity?: string, maintainDuration?: boolean } = {}) {\n    let { dateEnv } = this._calendar\n    let start = dateEnv.createMarker(startInput)\n\n    if (start && this._instance) { // TODO: warning if parsed bad\n      let instanceRange = this._instance.range\n      let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity) // what if parsed bad!?\n      let endDelta = null\n\n      if (options.maintainDuration) {\n        let origDuration = diffDates(instanceRange.start, instanceRange.end, dateEnv, options.granularity)\n        let newDuration = diffDates(start, instanceRange.end, dateEnv, options.granularity)\n        endDelta = subtractDurations(origDuration, newDuration)\n      }\n\n      this.mutate({ startDelta, endDelta })\n    }\n  }\n\n  setEnd(endInput: DateInput | null, options: { granularity?: string } = {}) {\n    let { dateEnv } = this._calendar\n    let end\n\n    if (endInput != null) {\n      end = dateEnv.createMarker(endInput)\n\n      if (!end) {\n        return // TODO: warning if parsed bad\n      }\n    }\n\n    if (this._instance) {\n      if (end) {\n        let endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity)\n        this.mutate({ endDelta })\n      } else {\n        this.mutate({ standardProps: { hasEnd: false } })\n      }\n    }\n  }\n\n  setDates(startInput: DateInput, endInput: DateInput | null, options: { allDay?: boolean, granularity?: string } = {}) {\n    let { dateEnv } = this._calendar\n    let standardProps = { allDay: options.allDay } as any\n    let start = dateEnv.createMarker(startInput)\n    let end\n\n    if (!start) {\n      return // TODO: warning if parsed bad\n    }\n\n    if (endInput != null) {\n      end = dateEnv.createMarker(endInput)\n\n      if (!end) { // TODO: warning if parsed bad\n        return\n      }\n    }\n\n    if (this._instance) {\n      let instanceRange = this._instance.range\n\n      // when computing the diff for an event being converted to all-day,\n      // compute diff off of the all-day values the way event-mutation does.\n      if (options.allDay === true) {\n        instanceRange = computeAlignedDayRange(instanceRange)\n      }\n\n      let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity)\n\n      if (end) {\n        let endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity)\n        this.mutate({ startDelta, endDelta, standardProps })\n      } else {\n        standardProps.hasEnd = false\n        this.mutate({ startDelta, standardProps })\n      }\n    }\n  }\n\n  moveStart(deltaInput: DurationInput) {\n    let delta = createDuration(deltaInput)\n\n    if (delta) { // TODO: warning if parsed bad\n      this.mutate({ startDelta: delta })\n    }\n  }\n\n  moveEnd(deltaInput: DurationInput) {\n    let delta = createDuration(deltaInput)\n\n    if (delta) { // TODO: warning if parsed bad\n      this.mutate({ endDelta: delta })\n    }\n  }\n\n  moveDates(deltaInput: DurationInput) {\n    let delta = createDuration(deltaInput)\n\n    if (delta) { // TODO: warning if parsed bad\n      this.mutate({ startDelta: delta, endDelta: delta })\n    }\n  }\n\n  setAllDay(allDay: boolean, options: { maintainDuration?: boolean } = {}) {\n    let standardProps = { allDay } as any\n    let maintainDuration = options.maintainDuration\n\n    if (maintainDuration == null) {\n      maintainDuration = this._calendar.opt('allDayMaintainDuration')\n    }\n\n    if (this._def.allDay !== allDay) {\n      standardProps.hasEnd = maintainDuration\n    }\n\n    this.mutate({ standardProps })\n  }\n\n  formatRange(formatInput: FormatterInput) {\n    let { dateEnv } = this._calendar\n    let instance = this._instance\n    let formatter = createFormatter(formatInput, this._calendar.opt('defaultRangeSeparator'))\n\n    if (this._def.hasEnd) {\n      return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {\n        forcedStartTzo: instance.forcedStartTzo,\n        forcedEndTzo: instance.forcedEndTzo\n      })\n    } else {\n      return dateEnv.format(instance.range.start, formatter, {\n        forcedTzo: instance.forcedStartTzo\n      })\n    }\n  }\n\n  mutate(mutation: EventMutation) { // meant to be private. but plugins need access\n    let def = this._def\n    let instance = this._instance\n\n    if (instance) {\n      this._calendar.dispatch({\n        type: 'MUTATE_EVENTS',\n        instanceId: instance.instanceId,\n        mutation,\n        fromApi: true\n      })\n\n      let eventStore = this._calendar.state.eventStore\n      this._def = eventStore.defs[def.defId]\n      this._instance = eventStore.instances[instance.instanceId]\n    }\n  }\n\n  remove() {\n    this._calendar.dispatch({\n      type: 'REMOVE_EVENT_DEF',\n      defId: this._def.defId\n    })\n  }\n\n  get source(): EventSourceApi | null {\n    let sourceId = this._def.sourceId\n\n    if (sourceId) {\n      return new EventSourceApi(\n        this._calendar,\n        this._calendar.state.eventSources[sourceId]\n      )\n    }\n    return null\n  }\n\n  get start(): Date | null {\n    return this._instance ?\n      this._calendar.dateEnv.toDate(this._instance.range.start) :\n      null\n  }\n\n  get end(): Date | null {\n    return (this._instance && this._def.hasEnd) ?\n      this._calendar.dateEnv.toDate(this._instance.range.end) :\n      null\n  }\n\n  // computable props that all access the def\n  // TODO: find a TypeScript-compatible way to do this at scale\n  get id(): string { return this._def.publicId }\n  get groupId(): string { return this._def.groupId }\n  get allDay(): boolean { return this._def.allDay }\n  get title(): string { return this._def.title }\n  get url(): string { return this._def.url }\n  get rendering(): string { return this._def.rendering }\n  get startEditable(): boolean { return this._def.ui.startEditable }\n  get durationEditable(): boolean { return this._def.ui.durationEditable }\n  get constraint(): any { return this._def.ui.constraints[0] || null }\n  get overlap(): any { return this._def.ui.overlap }\n  get allow(): any { return this._def.ui.allows[0] || null }\n  get backgroundColor(): string { return this._def.ui.backgroundColor }\n  get borderColor(): string { return this._def.ui.borderColor }\n  get textColor(): string { return this._def.ui.textColor }\n\n  // NOTE: user can't modify these because Object.freeze was called in event-def parsing\n  get classNames(): string[] { return this._def.ui.classNames }\n  get extendedProps(): any { return this._def.extendedProps }\n\n}\n","import { EventDef, EventTuple, EventDefHash } from '../structs/event'\nimport { EventStore } from '../structs/event-store'\nimport { DateRange, invertRanges, intersectRanges } from '../datelib/date-range'\nimport { Duration } from '../datelib/duration'\nimport { computeVisibleDayRange } from '../util/misc'\nimport { Seg } from './DateComponent'\nimport View from '../View'\nimport EventApi from '../api/EventApi'\nimport { EventUi, EventUiHash, combineEventUis } from './event-ui'\nimport { mapHash } from '../util/object'\n\nexport interface EventRenderRange extends EventTuple {\n  ui: EventUi\n  range: DateRange\n  isStart: boolean\n  isEnd: boolean\n}\n\n/*\nSpecifying nextDayThreshold signals that all-day ranges should be sliced.\n*/\nexport function sliceEventStore(eventStore: EventStore, eventUiBases: EventUiHash, framingRange: DateRange, nextDayThreshold?: Duration) {\n  let inverseBgByGroupId: { [groupId: string]: DateRange[] } = {}\n  let inverseBgByDefId: { [defId: string]: DateRange[] } = {}\n  let defByGroupId: { [groupId: string]: EventDef } = {}\n  let bgRanges: EventRenderRange[] = []\n  let fgRanges: EventRenderRange[] = []\n  let eventUis = compileEventUis(eventStore.defs, eventUiBases)\n\n  for (let defId in eventStore.defs) {\n    let def = eventStore.defs[defId]\n\n    if (def.rendering === 'inverse-background') {\n      if (def.groupId) {\n        inverseBgByGroupId[def.groupId] = []\n\n        if (!defByGroupId[def.groupId]) {\n          defByGroupId[def.groupId] = def\n        }\n      } else {\n        inverseBgByDefId[defId] = []\n      }\n    }\n  }\n\n  for (let instanceId in eventStore.instances) {\n    let instance = eventStore.instances[instanceId]\n    let def = eventStore.defs[instance.defId]\n    let ui = eventUis[def.defId]\n    let origRange = instance.range\n\n    let normalRange = (!def.allDay && nextDayThreshold) ?\n      computeVisibleDayRange(origRange, nextDayThreshold) :\n      origRange\n\n    let slicedRange = intersectRanges(normalRange, framingRange)\n\n    if (slicedRange) {\n      if (def.rendering === 'inverse-background') {\n        if (def.groupId) {\n          inverseBgByGroupId[def.groupId].push(slicedRange)\n        } else {\n          inverseBgByDefId[instance.defId].push(slicedRange)\n        }\n      } else {\n        (def.rendering === 'background' ? bgRanges : fgRanges).push({\n          def,\n          ui,\n          instance,\n          range: slicedRange,\n          isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),\n          isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf()\n        })\n      }\n    }\n  }\n\n  for (let groupId in inverseBgByGroupId) { // BY GROUP\n    let ranges = inverseBgByGroupId[groupId]\n    let invertedRanges = invertRanges(ranges, framingRange)\n\n    for (let invertedRange of invertedRanges) {\n      let def = defByGroupId[groupId]\n      let ui = eventUis[def.defId]\n\n      bgRanges.push({\n        def,\n        ui,\n        instance: null,\n        range: invertedRange,\n        isStart: false,\n        isEnd: false\n      })\n    }\n  }\n\n  for (let defId in inverseBgByDefId) {\n    let ranges = inverseBgByDefId[defId]\n    let invertedRanges = invertRanges(ranges, framingRange)\n\n    for (let invertedRange of invertedRanges) {\n      bgRanges.push({\n        def: eventStore.defs[defId],\n        ui: eventUis[defId],\n        instance: null,\n        range: invertedRange,\n        isStart: false,\n        isEnd: false\n      })\n    }\n  }\n\n  return { bg: bgRanges, fg: fgRanges }\n}\n\nexport function hasBgRendering(def: EventDef) {\n  return def.rendering === 'background' || def.rendering === 'inverse-background'\n}\n\nexport function filterSegsViaEls(view: View, segs: Seg[], isMirror: boolean) {\n\n  if (view.hasPublicHandlers('eventRender')) {\n    segs = segs.filter(function(seg) {\n      let custom = view.publiclyTrigger('eventRender', [\n        {\n          event: new EventApi(\n            view.calendar,\n            seg.eventRange.def,\n            seg.eventRange.instance\n          ),\n          isMirror,\n          isStart: seg.isStart,\n          isEnd: seg.isEnd,\n          // TODO: include seg.range once all components consistently generate it\n          el: seg.el,\n          view\n        }\n      ])\n\n      if (custom === false) { // means don't render at all\n        return false\n      } else if (custom && custom !== true) {\n        seg.el = custom\n      }\n\n      return true\n    })\n  }\n\n  for (let seg of segs) {\n    setElSeg(seg.el, seg)\n  }\n\n  return segs\n}\n\nfunction setElSeg(el: HTMLElement, seg: Seg) {\n  (el as any).fcSeg = seg\n}\n\nexport function getElSeg(el: HTMLElement): Seg | null {\n  return (el as any).fcSeg || null\n}\n\n\n// event ui computation\n\nexport function compileEventUis(eventDefs: EventDefHash, eventUiBases: EventUiHash) {\n  return mapHash(eventDefs, function(eventDef: EventDef) {\n    return compileEventUi(eventDef, eventUiBases)\n  })\n}\n\nexport function compileEventUi(eventDef: EventDef, eventUiBases: EventUiHash) {\n  let uis = []\n\n  if (eventUiBases['']) {\n    uis.push(eventUiBases[''])\n  }\n\n  if (eventUiBases[eventDef.defId]) {\n    uis.push(eventUiBases[eventDef.defId])\n  }\n\n  uis.push(eventDef.ui)\n\n  return combineEventUis(uis)\n}\n","import { Duration, asRoughMs, durationsEqual } from '../datelib/duration'\nimport { EventStore, createEmptyEventStore } from './event-store'\nimport { EventDef, EventInstance } from './event'\nimport Calendar from '../Calendar'\nimport { computeAlignedDayRange } from '../util/misc'\nimport { startOfDay } from '../datelib/marker'\nimport { EventUiHash, EventUi } from '../component/event-ui'\nimport { compileEventUis } from '../component/event-rendering'\n\n/*\nA data structure for how to modify an EventDef/EventInstance within an EventStore\n*/\n\nexport interface EventMutation {\n  startDelta?: Duration\n  endDelta?: Duration\n  standardProps?: any // for the def. should not include extendedProps\n  extendedProps?: any // for the def\n}\n\n// applies the mutation to ALL defs/instances within the event store\nexport function applyMutationToEventStore(eventStore: EventStore, eventConfigBase: EventUiHash, mutation: EventMutation, calendar: Calendar): EventStore {\n  let eventConfigs = compileEventUis(eventStore.defs, eventConfigBase)\n  let dest = createEmptyEventStore()\n\n  for (let defId in eventStore.defs) {\n    let def = eventStore.defs[defId]\n\n    dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, calendar.pluginSystem.hooks.eventDefMutationAppliers, calendar)\n  }\n\n  for (let instanceId in eventStore.instances) {\n    let instance = eventStore.instances[instanceId]\n    let def = dest.defs[instance.defId] // important to grab the newly modified def\n\n    dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, calendar)\n  }\n\n  return dest\n}\n\nexport type eventDefMutationApplier = (eventDef: EventDef, mutation: EventMutation, calendar: Calendar) => void\n\n\nfunction applyMutationToEventDef(eventDef: EventDef, eventConfig: EventUi, mutation: EventMutation, appliers: eventDefMutationApplier[], calendar: Calendar): EventDef {\n  let standardProps = mutation.standardProps || {}\n\n  // if hasEnd has not been specified, guess a good value based on deltas.\n  // if duration will change, there's no way the default duration will persist,\n  // and thus, we need to mark the event as having a real end\n  if (\n    standardProps.hasEnd == null &&\n    eventConfig.durationEditable &&\n    willDeltasAffectDuration(\n      eventConfig.startEditable ? mutation.startDelta : null,\n      mutation.endDelta || null\n    )\n  ) {\n    standardProps.hasEnd = true // TODO: is this mutation okay?\n  }\n\n  let copy: EventDef = {\n    ...eventDef,\n    ...standardProps,\n    ui: { ...eventDef.ui, ...standardProps.ui } // the only prop we want to recursively overlay\n  }\n\n  if (mutation.extendedProps) {\n    copy.extendedProps = { ...copy.extendedProps, ...mutation.extendedProps }\n  }\n\n  for (let applier of appliers) {\n    applier(copy, mutation, calendar)\n  }\n\n  if (!copy.hasEnd && calendar.opt('forceEventDuration')) {\n    copy.hasEnd = true\n  }\n\n  return copy\n}\n\nfunction willDeltasAffectDuration(startDelta: Duration | null, endDelta: Duration | null) {\n  if (startDelta && !asRoughMs(startDelta)) { startDelta = null }\n  if (endDelta && !asRoughMs(endDelta)) { endDelta = null }\n\n  if (!startDelta && !endDelta) {\n    return false\n  }\n\n  if (Boolean(startDelta) !== Boolean(endDelta)) {\n    return true\n  }\n\n  return !durationsEqual(startDelta, endDelta)\n}\n\nfunction applyMutationToEventInstance(\n  eventInstance: EventInstance,\n  eventDef: EventDef, // must first be modified by applyMutationToEventDef\n  eventConfig: EventUi,\n  mutation: EventMutation,\n  calendar: Calendar\n): EventInstance {\n  let dateEnv = calendar.dateEnv\n  let forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true\n  let clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false\n  let copy = { ...eventInstance } as EventInstance\n\n  if (forceAllDay) {\n    copy.range = computeAlignedDayRange(copy.range)\n  }\n\n  if (mutation.startDelta && eventConfig.startEditable) {\n    copy.range = {\n      start: dateEnv.add(copy.range.start, mutation.startDelta),\n      end: copy.range.end\n    }\n  }\n\n  if (clearEnd) {\n    copy.range = {\n      start: copy.range.start,\n      end: calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start)\n    }\n  } else if (\n    mutation.endDelta &&\n    (\n      eventConfig.durationEditable ||\n      !willDeltasAffectDuration( // TODO: nonDRY logic above\n        eventConfig.startEditable ? mutation.startDelta : null,\n        mutation.endDelta\n      )\n    )\n  ) {\n    copy.range = {\n      start: copy.range.start,\n      end: dateEnv.add(copy.range.end, mutation.endDelta)\n    }\n  }\n\n  // in case event was all-day but the supplied deltas were not\n  // better util for this?\n  if (eventDef.allDay) {\n    copy.range = {\n      start: startOfDay(copy.range.start),\n      end: startOfDay(copy.range.end)\n    }\n  }\n\n  // handle invalid durations\n  if (copy.range.end < copy.range.start) {\n    copy.range.end = calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start)\n  }\n\n  return copy\n}\n","import Calendar from '../Calendar'\nimport { filterHash, mapHash } from '../util/object'\nimport { EventMutation, applyMutationToEventStore } from '../structs/event-mutation'\nimport { EventDef, EventInstance, EventInput, EventInstanceHash } from '../structs/event'\nimport {\n  EventStore,\n  mergeEventStores,\n  getRelevantEvents,\n  createEmptyEventStore,\n  filterEventStoreDefs,\n  parseEvents,\n  expandRecurring,\n  transformRawEvents\n} from '../structs/event-store'\nimport { Action } from './types'\nimport { EventSourceHash, EventSource } from '../structs/event-source'\nimport { DateRange } from '../datelib/date-range'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { DateEnv } from '../datelib/env'\nimport { EventUiHash } from '../component/event-ui'\n\n\nexport default function(eventStore: EventStore, action: Action, eventSources: EventSourceHash, dateProfile: DateProfile, calendar: Calendar): EventStore {\n  switch (action.type) {\n\n    case 'RECEIVE_EVENTS': // raw\n      return receiveRawEvents(\n        eventStore,\n        eventSources[action.sourceId],\n        action.fetchId,\n        action.fetchRange,\n        action.rawEvents,\n        calendar\n      )\n\n    case 'ADD_EVENTS': // already parsed, but not expanded\n      return addEvent(\n        eventStore,\n        action.eventStore, // new ones\n        dateProfile ? dateProfile.activeRange : null,\n        calendar\n      )\n\n    case 'MERGE_EVENTS': // already parsed and expanded\n      return mergeEventStores(eventStore, action.eventStore)\n\n    case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n    case 'NEXT':\n    case 'SET_DATE':\n    case 'SET_VIEW_TYPE':\n      if (dateProfile) {\n        return expandRecurring(eventStore, dateProfile.activeRange, calendar)\n      } else {\n        return eventStore\n      }\n\n    case 'CHANGE_TIMEZONE':\n      return rezoneDates(eventStore, action.oldDateEnv, calendar.dateEnv)\n\n    case 'MUTATE_EVENTS':\n      return applyMutationToRelated(eventStore, action.instanceId, action.mutation, action.fromApi, calendar)\n\n    case 'REMOVE_EVENT_INSTANCES':\n      return excludeInstances(eventStore, action.instances)\n\n    case 'REMOVE_EVENT_DEF':\n      return filterEventStoreDefs(eventStore, function(eventDef) {\n        return eventDef.defId !== action.defId\n      })\n\n    case 'REMOVE_EVENT_SOURCE':\n      return excludeEventsBySourceId(eventStore, action.sourceId)\n\n    case 'REMOVE_ALL_EVENT_SOURCES':\n      return filterEventStoreDefs(eventStore, function(eventDef: EventDef) {\n        return !eventDef.sourceId // only keep events with no source id\n      })\n\n    case 'REMOVE_ALL_EVENTS':\n      return createEmptyEventStore()\n\n    case 'RESET_EVENTS':\n      return { // returns a new object with the same contents\n        defs: eventStore.defs,\n        instances: eventStore.instances\n      }\n\n    default:\n      return eventStore\n  }\n}\n\n\nfunction receiveRawEvents(\n  eventStore: EventStore,\n  eventSource: EventSource,\n  fetchId: string,\n  fetchRange: DateRange | null,\n  rawEvents: EventInput[],\n  calendar: Calendar\n): EventStore {\n\n  if (\n    eventSource && // not already removed\n    fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources\n  ) {\n\n    let subset = parseEvents(\n      transformRawEvents(rawEvents, eventSource, calendar),\n      eventSource.sourceId,\n      calendar\n    )\n\n    if (fetchRange) {\n      subset = expandRecurring(subset, fetchRange, calendar)\n    }\n\n    return mergeEventStores(\n      excludeEventsBySourceId(eventStore, eventSource.sourceId),\n      subset\n    )\n  }\n\n  return eventStore\n}\n\n\nfunction addEvent(eventStore: EventStore, subset: EventStore, expandRange: DateRange | null, calendar: Calendar): EventStore {\n\n  if (expandRange) {\n    subset = expandRecurring(subset, expandRange, calendar)\n  }\n\n  return mergeEventStores(eventStore, subset)\n}\n\n\nfunction rezoneDates(eventStore: EventStore, oldDateEnv: DateEnv, newDateEnv: DateEnv): EventStore {\n  let defs = eventStore.defs\n\n  let instances = mapHash(eventStore.instances, function(instance: EventInstance): EventInstance {\n    let def = defs[instance.defId]\n\n    if (def.allDay || def.recurringDef) {\n      return instance // isn't dependent on timezone\n    } else {\n      return {\n        ...instance,\n        range: {\n          start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),\n          end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo))\n        },\n        forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo,\n        forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo\n      }\n    }\n  })\n\n  return { defs, instances }\n}\n\n\nfunction applyMutationToRelated(eventStore: EventStore, instanceId: string, mutation: EventMutation, fromApi: boolean, calendar: Calendar): EventStore {\n  let relevant = getRelevantEvents(eventStore, instanceId)\n  let eventConfigBase = fromApi ?\n    { '': { // HACK. always allow API to mutate events\n      startEditable: true,\n      durationEditable: true,\n      constraints: [],\n      overlap: null,\n      allows: [],\n      backgroundColor: '',\n      borderColor: '',\n      textColor: '',\n      classNames: []\n    } } as EventUiHash :\n    calendar.eventUiBases\n\n\n  relevant = applyMutationToEventStore(relevant, eventConfigBase, mutation, calendar)\n\n  return mergeEventStores(eventStore, relevant)\n}\n\n\nfunction excludeEventsBySourceId(eventStore, sourceId) {\n  return filterEventStoreDefs(eventStore, function(eventDef: EventDef) {\n    return eventDef.sourceId !== sourceId\n  })\n}\n\n\n// QUESTION: why not just return instances? do a general object-property-exclusion util\nexport function excludeInstances(eventStore: EventStore, removals: EventInstanceHash): EventStore {\n  return {\n    defs: eventStore.defs,\n    instances: filterHash(eventStore.instances, function(instance: EventInstance) {\n      return !removals[instance.instanceId]\n    })\n  }\n}\n","import { EventStore, expandRecurring, filterEventStoreDefs, parseEvents, createEmptyEventStore } from './structs/event-store'\nimport Calendar from './Calendar'\nimport { DateSpan, DateSpanApi } from './structs/date-span'\nimport { rangeContainsRange, rangesIntersect, DateRange, OpenDateRange } from './datelib/date-range'\nimport EventApi from './api/EventApi'\nimport { compileEventUis } from './component/event-rendering'\nimport { excludeInstances } from './reducers/eventStore'\nimport { EventInput } from './structs/event'\nimport { EventInteractionState } from './interactions/event-interaction-state'\nimport { SplittableProps } from './component/event-splitting'\nimport { mapHash } from './util/object'\n\n// TODO: rename to \"criteria\" ?\nexport type ConstraintInput = 'businessHours' | string | EventInput | EventInput[]\nexport type Constraint = 'businessHours' | string | EventStore | false // false means won't pass at all\nexport type OverlapFunc = ((stillEvent: EventApi, movingEvent: EventApi | null) => boolean)\nexport type AllowFunc = (span: DateSpanApi, movingEvent: EventApi | null) => boolean\nexport type isPropsValidTester = (props: SplittableProps, calendar: Calendar) => boolean\n\n\n// high-level segmenting-aware tester functions\n// ------------------------------------------------------------------------------------------------------------------------\n\nexport function isInteractionValid(interaction: EventInteractionState, calendar: Calendar) {\n  return isNewPropsValid({ eventDrag: interaction }, calendar) // HACK: the eventDrag props is used for ALL interactions\n}\n\nexport function isDateSelectionValid(dateSelection: DateSpan, calendar: Calendar) {\n  return isNewPropsValid({ dateSelection }, calendar)\n}\n\nfunction isNewPropsValid(newProps, calendar: Calendar) {\n  let view = calendar.view\n\n  let props = {\n    businessHours: view ? view.props.businessHours : createEmptyEventStore(), // why? yuck\n    dateSelection: '',\n    eventStore: calendar.state.eventStore,\n    eventUiBases: calendar.eventUiBases,\n    eventSelection: '',\n    eventDrag: null,\n    eventResize: null,\n    ...newProps\n  }\n\n  return (calendar.pluginSystem.hooks.isPropsValid || isPropsValid)(props, calendar)\n}\n\nexport function isPropsValid(state: SplittableProps, calendar: Calendar, dateSpanMeta = {}, filterConfig?): boolean {\n\n  if (state.eventDrag && !isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig)) {\n    return false\n  }\n\n  if (state.dateSelection && !isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig)) {\n    return false\n  }\n\n  return true\n}\n\n\n// Moving Event Validation\n// ------------------------------------------------------------------------------------------------------------------------\n\nfunction isInteractionPropsValid(state: SplittableProps, calendar: Calendar, dateSpanMeta: any, filterConfig): boolean {\n  let interaction = state.eventDrag // HACK: the eventDrag props is used for ALL interactions\n\n  let subjectEventStore = interaction.mutatedEvents\n  let subjectDefs = subjectEventStore.defs\n  let subjectInstances = subjectEventStore.instances\n  let subjectConfigs = compileEventUis(\n    subjectDefs,\n    interaction.isEvent ?\n      state.eventUiBases :\n      { '': calendar.selectionConfig } // if not a real event, validate as a selection\n  )\n\n  if (filterConfig) {\n    subjectConfigs = mapHash(subjectConfigs, filterConfig)\n  }\n\n  let otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances) // exclude the subject events. TODO: exclude defs too?\n  let otherDefs = otherEventStore.defs\n  let otherInstances = otherEventStore.instances\n  let otherConfigs = compileEventUis(otherDefs, state.eventUiBases)\n\n  for (let subjectInstanceId in subjectInstances) {\n    let subjectInstance = subjectInstances[subjectInstanceId]\n    let subjectRange = subjectInstance.range\n    let subjectConfig = subjectConfigs[subjectInstance.defId]\n    let subjectDef = subjectDefs[subjectInstance.defId]\n\n    // constraint\n    if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, calendar)) {\n      return false\n    }\n\n    // overlap\n\n    let overlapFunc = calendar.opt('eventOverlap')\n    if (typeof overlapFunc !== 'function') { overlapFunc = null }\n\n    for (let otherInstanceId in otherInstances) {\n      let otherInstance = otherInstances[otherInstanceId]\n\n      // intersect! evaluate\n      if (rangesIntersect(subjectRange, otherInstance.range)) {\n        let otherOverlap = otherConfigs[otherInstance.defId].overlap\n\n        // consider the other event's overlap. only do this if the subject event is a \"real\" event\n        if (otherOverlap === false && interaction.isEvent) {\n          return false\n        }\n\n        if (subjectConfig.overlap === false) {\n          return false\n        }\n\n        if (overlapFunc && !overlapFunc(\n          new EventApi(calendar, otherDefs[otherInstance.defId], otherInstance), // still event\n          new EventApi(calendar, subjectDef, subjectInstance) // moving event\n        )) {\n          return false\n        }\n      }\n    }\n\n    // allow (a function)\n    for (let subjectAllow of subjectConfig.allows) {\n\n      let subjectDateSpan: DateSpan = {\n        ...dateSpanMeta,\n        range: subjectInstance.range,\n        allDay: subjectDef.allDay\n      }\n\n      let origDef = state.eventStore.defs[subjectDef.defId]\n      let origInstance = state.eventStore.instances[subjectInstanceId]\n      let eventApi\n\n      if (origDef) { // was previously in the calendar\n        eventApi = new EventApi(calendar, origDef, origInstance)\n      } else { // was an external event\n        eventApi = new EventApi(calendar, subjectDef) // no instance, because had no dates\n      }\n\n      if (!subjectAllow(\n        calendar.buildDateSpanApi(subjectDateSpan),\n        eventApi\n      )) {\n        return false\n      }\n    }\n\n  }\n\n  return true\n}\n\n\n// Date Selection Validation\n// ------------------------------------------------------------------------------------------------------------------------\n\nfunction isDateSelectionPropsValid(state: SplittableProps, calendar: Calendar, dateSpanMeta: any, filterConfig): boolean {\n  let relevantEventStore = state.eventStore\n  let relevantDefs = relevantEventStore.defs\n  let relevantInstances = relevantEventStore.instances\n\n  let selection = state.dateSelection\n  let selectionRange = selection.range\n  let { selectionConfig } = calendar\n\n  if (filterConfig) {\n    selectionConfig = filterConfig(selectionConfig)\n  }\n\n  // constraint\n  if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, calendar)) {\n    return false\n  }\n\n  // overlap\n\n  let overlapFunc = calendar.opt('selectOverlap')\n  if (typeof overlapFunc !== 'function') { overlapFunc = null }\n\n  for (let relevantInstanceId in relevantInstances) {\n    let relevantInstance = relevantInstances[relevantInstanceId]\n\n    // intersect! evaluate\n    if (rangesIntersect(selectionRange, relevantInstance.range)) {\n\n      if (selectionConfig.overlap === false) {\n        return false\n      }\n\n      if (overlapFunc && !overlapFunc(\n        new EventApi(calendar, relevantDefs[relevantInstance.defId], relevantInstance)\n      )) {\n        return false\n      }\n    }\n  }\n\n  // allow (a function)\n  for (let selectionAllow of selectionConfig.allows) {\n\n    let fullDateSpan = { ...dateSpanMeta, ...selection }\n\n    if (!selectionAllow(\n      calendar.buildDateSpanApi(fullDateSpan),\n      null\n    )) {\n      return false\n    }\n  }\n\n  return true\n}\n\n\n// Constraint Utils\n// ------------------------------------------------------------------------------------------------------------------------\n\nfunction allConstraintsPass(\n  constraints: Constraint[],\n  subjectRange: DateRange,\n  otherEventStore: EventStore,\n  businessHoursUnexpanded: EventStore,\n  calendar: Calendar\n): boolean {\n  for (let constraint of constraints) {\n    if (!anyRangesContainRange(\n      constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, calendar),\n      subjectRange\n    )) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction constraintToRanges(\n  constraint: Constraint,\n  subjectRange: DateRange, // for expanding a recurring constraint, or expanding business hours\n  otherEventStore: EventStore, // for if constraint is an even group ID\n  businessHoursUnexpanded: EventStore, // for if constraint is 'businessHours'\n  calendar: Calendar // for expanding businesshours\n): OpenDateRange[] {\n\n  if (constraint === 'businessHours') {\n    return eventStoreToRanges(\n      expandRecurring(businessHoursUnexpanded, subjectRange, calendar)\n    )\n\n  } else if (typeof constraint === 'string') { // an group ID\n    return eventStoreToRanges(\n      filterEventStoreDefs(otherEventStore, function(eventDef) {\n        return eventDef.groupId === constraint\n      })\n    )\n\n  } else if (typeof constraint === 'object' && constraint) { // non-null object\n    return eventStoreToRanges(\n      expandRecurring(constraint, subjectRange, calendar)\n    )\n  }\n\n  return [] // if it's false\n}\n\n// TODO: move to event-store file?\nfunction eventStoreToRanges(eventStore: EventStore): DateRange[] {\n  let { instances } = eventStore\n  let ranges: DateRange[] = []\n\n  for (let instanceId in instances) {\n    ranges.push(instances[instanceId].range)\n  }\n\n  return ranges\n}\n\n// TODO: move to geom file?\nfunction anyRangesContainRange(outerRanges: DateRange[], innerRange: DateRange): boolean {\n\n  for (let outerRange of outerRanges) {\n    if (rangeContainsRange(outerRange, innerRange)) {\n      return true\n    }\n  }\n\n  return false\n}\n\n\n// Parsing\n// ------------------------------------------------------------------------------------------------------------------------\n\nexport function normalizeConstraint(input: ConstraintInput, calendar: Calendar): Constraint | null {\n  if (Array.isArray(input)) {\n    return parseEvents(input, '', calendar, true) // allowOpenRange=true\n\n  } else if (typeof input === 'object' && input) { // non-null object\n    return parseEvents([ input ], '', calendar, true) // allowOpenRange=true\n\n  } else if (input != null) {\n    return String(input)\n\n  } else {\n    return null\n  }\n}\n","\nexport function htmlEscape(s) {\n  return (s + '').replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/'/g, '&#039;')\n    .replace(/\"/g, '&quot;')\n    .replace(/\\n/g, '<br />')\n}\n\n\n// Given a hash of CSS properties, returns a string of CSS.\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\nexport function cssToStr(cssProps) {\n  let statements = []\n\n  for (let name in cssProps) {\n    let val = cssProps[name]\n    if (val != null && val !== '') {\n      statements.push(name + ':' + val)\n    }\n  }\n\n  return statements.join(';')\n}\n\n\n// Given an object hash of HTML attribute names to values,\n// generates a string that can be injected between < > in HTML\nexport function attrsToStr(attrs) {\n  let parts = []\n\n  for (let name in attrs) {\n    let val = attrs[name]\n    if (val != null) {\n      parts.push(name + '=\"' + htmlEscape(val) + '\"')\n    }\n  }\n\n  return parts.join(' ')\n}\n\n\nexport type ClassNameInput = string | string[]\n\nexport function parseClassName(raw: ClassNameInput) {\n  if (Array.isArray(raw)) {\n    return raw\n  } else if (typeof raw === 'string') {\n    return raw.split(/\\s+/)\n  } else {\n    return []\n  }\n}\n","import { Constraint, AllowFunc, normalizeConstraint, ConstraintInput } from '../validation'\nimport { parseClassName } from '../util/html'\nimport { refineProps, capitaliseFirstLetter } from '../util/misc'\nimport Calendar from '../Calendar'\n\n// TODO: better called \"EventSettings\" or \"EventConfig\"\n// TODO: move this file into structs\n// TODO: separate constraint/overlap/allow, because selection uses only that, not other props\n\nexport interface UnscopedEventUiInput {\n  editable?: boolean\n  startEditable?: boolean\n  durationEditable?: boolean\n  constraint?: ConstraintInput\n  overlap?: boolean\n  allow?: AllowFunc\n  className?: string[] | string\n  classNames?: string[] | string\n  backgroundColor?: string\n  borderColor?: string\n  textColor?: string\n  color?: string\n}\n\nexport interface EventUi {\n  startEditable: boolean | null\n  durationEditable: boolean | null\n  constraints: Constraint[]\n  overlap: boolean | null\n  allows: AllowFunc[]\n  backgroundColor: string\n  borderColor: string\n  textColor: string,\n  classNames: string[]\n}\n\nexport type EventUiHash = { [defId: string]: EventUi }\n\nexport const UNSCOPED_EVENT_UI_PROPS = {\n  editable: Boolean,\n  startEditable: Boolean,\n  durationEditable: Boolean,\n  constraint: null,\n  overlap: null,\n  allow: null,\n  className: parseClassName,\n  classNames: parseClassName,\n  color: String,\n  backgroundColor: String,\n  borderColor: String,\n  textColor: String\n}\n\nexport function processUnscopedUiProps(rawProps: UnscopedEventUiInput, calendar: Calendar, leftovers?): EventUi {\n  let props = refineProps(rawProps, UNSCOPED_EVENT_UI_PROPS, {}, leftovers)\n  let constraint = normalizeConstraint(props.constraint, calendar)\n\n  return {\n    startEditable: props.startEditable != null ? props.startEditable : props.editable,\n    durationEditable: props.durationEditable != null ? props.durationEditable : props.editable,\n    constraints: constraint != null ? [ constraint ] : [],\n    overlap: props.overlap,\n    allows: props.allow != null ? [ props.allow ] : [],\n    backgroundColor: props.backgroundColor || props.color,\n    borderColor: props.borderColor || props.color,\n    textColor: props.textColor,\n    classNames: props.classNames.concat(props.className)\n  }\n}\n\nexport function processScopedUiProps(prefix: string, rawScoped: any, calendar: Calendar, leftovers?): EventUi {\n  let rawUnscoped = {} as any\n  let wasFound = {} as any\n\n  for (let key in UNSCOPED_EVENT_UI_PROPS) {\n    let scopedKey = prefix + capitaliseFirstLetter(key)\n    rawUnscoped[key] = rawScoped[scopedKey]\n    wasFound[scopedKey] = true\n  }\n\n  if (prefix === 'event') {\n    rawUnscoped.editable = rawScoped.editable // special case. there is no 'eventEditable', just 'editable'\n  }\n\n  if (leftovers) {\n    for (let key in rawScoped) {\n      if (!wasFound[key]) {\n        leftovers[key] = rawScoped[key]\n      }\n    }\n  }\n\n  return processUnscopedUiProps(rawUnscoped, calendar)\n}\n\nconst EMPTY_EVENT_UI: EventUi = {\n  startEditable: null,\n  durationEditable: null,\n  constraints: [],\n  overlap: null,\n  allows: [],\n  backgroundColor: '',\n  borderColor: '',\n  textColor: '',\n  classNames: []\n}\n\n// prevent against problems with <2 args!\nexport function combineEventUis(uis: EventUi[]): EventUi {\n  return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI)\n}\n\nfunction combineTwoEventUis(item0: EventUi, item1: EventUi): EventUi { // hash1 has higher precedence\n  return {\n    startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,\n    durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,\n    constraints: item0.constraints.concat(item1.constraints),\n    overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,\n    allows: item0.allows.concat(item1.allows),\n    backgroundColor: item1.backgroundColor || item0.backgroundColor,\n    borderColor: item1.borderColor || item0.borderColor,\n    textColor: item1.textColor || item0.textColor,\n    classNames: item0.classNames.concat(item1.classNames)\n  }\n}\n","import { refineProps } from '../util/misc'\nimport { DateInput } from '../datelib/env'\nimport Calendar from '../Calendar'\nimport { DateRange } from '../datelib/date-range'\nimport { startOfDay } from '../datelib/marker'\nimport { parseRecurring } from './recurring-event'\nimport { Duration } from '../datelib/duration'\nimport { UnscopedEventUiInput, EventUi, processUnscopedUiProps } from '../component/event-ui'\nimport { __assign } from 'tslib'\n\n/*\nUtils for parsing event-input data. Each util parses a subset of the event-input's data.\nIt's up to the caller to stitch them together into an aggregate object like an EventStore.\n*/\n\nexport type EventRenderingChoice = '' | 'background' | 'inverse-background' | 'none'\n\nexport interface EventNonDateInput extends UnscopedEventUiInput {\n  id?: string | number\n  groupId?: string | number\n  title?: string\n  url?: string\n  rendering?: EventRenderingChoice\n  extendedProps?: object\n  [extendedProp: string]: any\n}\n\nexport interface EventDateInput {\n  start?: DateInput\n  end?: DateInput\n  date?: DateInput\n  allDay?: boolean\n}\n\nexport type EventInput = EventNonDateInput & EventDateInput\n\nexport interface EventDef {\n  defId: string\n  sourceId: string\n  publicId: string\n  groupId: string\n  allDay: boolean\n  hasEnd: boolean\n  recurringDef: { typeId: number, typeData: any, duration: Duration | null } | null\n  title: string\n  url: string\n  rendering: EventRenderingChoice\n  ui: EventUi\n  extendedProps: any\n}\n\nexport interface EventInstance {\n  instanceId: string\n  defId: string\n  range: DateRange\n  forcedStartTzo: number | null\n  forcedEndTzo: number | null\n}\n\nexport interface EventTuple {\n  def: EventDef\n  instance: EventInstance | null\n}\n\nexport type EventInstanceHash = { [instanceId: string]: EventInstance }\nexport type EventDefHash = { [defId: string]: EventDef }\n\nexport const NON_DATE_PROPS = {\n  id: String,\n  groupId: String,\n  title: String,\n  url: String,\n  rendering: String,\n  extendedProps: null\n}\n\nexport const DATE_PROPS = {\n  start: null,\n  date: null, // alias for start\n  end: null,\n  allDay: null\n}\n\nlet uid = 0\n\n\nexport function parseEvent(raw: EventInput, sourceId: string, calendar: Calendar, allowOpenRange?: boolean): EventTuple | null {\n  let allDayDefault = computeIsAllDayDefault(sourceId, calendar)\n  let leftovers0 = {}\n  let recurringRes = parseRecurring(\n    raw, // raw, but with single-event stuff stripped out\n    allDayDefault,\n    calendar.dateEnv,\n    calendar.pluginSystem.hooks.recurringTypes,\n    leftovers0 // will populate with non-recurring props\n  )\n\n  if (recurringRes) {\n    let def = parseEventDef(leftovers0, sourceId, recurringRes.allDay, Boolean(recurringRes.duration), calendar)\n\n    def.recurringDef = { // don't want all the props from recurringRes. TODO: more efficient way to do this\n      typeId: recurringRes.typeId,\n      typeData: recurringRes.typeData,\n      duration: recurringRes.duration\n    }\n\n    return { def, instance: null }\n\n  } else {\n    let leftovers1 = {}\n    let singleRes = parseSingle(raw, allDayDefault, calendar, leftovers1, allowOpenRange)\n\n    if (singleRes) {\n      let def = parseEventDef(leftovers1, sourceId, singleRes.allDay, singleRes.hasEnd, calendar)\n      let instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo)\n\n      return { def, instance }\n    }\n  }\n\n  return null\n}\n\n\n/*\nWill NOT populate extendedProps with the leftover properties.\nWill NOT populate date-related props.\nThe EventNonDateInput has been normalized (id => publicId, etc).\n*/\nexport function parseEventDef(raw: EventNonDateInput, sourceId: string, allDay: boolean, hasEnd: boolean, calendar: Calendar): EventDef {\n  let leftovers = {}\n  let def = pluckNonDateProps(raw, calendar, leftovers) as EventDef\n\n  def.defId = String(uid++)\n  def.sourceId = sourceId\n  def.allDay = allDay\n  def.hasEnd = hasEnd\n\n  for (let eventDefParser of calendar.pluginSystem.hooks.eventDefParsers) {\n    let newLeftovers = {}\n    eventDefParser(def, leftovers, newLeftovers)\n    leftovers = newLeftovers\n  }\n\n  def.extendedProps = __assign(leftovers, def.extendedProps || {})\n\n  // help out EventApi from having user modify props\n  Object.freeze(def.ui.classNames)\n  Object.freeze(def.extendedProps)\n\n  return def\n}\n\nexport type eventDefParserFunc = (def: EventDef, props: any, leftovers: any) => void\n\n\nexport function createEventInstance(\n  defId: string,\n  range: DateRange,\n  forcedStartTzo?: number,\n  forcedEndTzo?: number\n): EventInstance {\n  return {\n    instanceId: String(uid++),\n    defId,\n    range,\n    forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,\n    forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo\n  }\n}\n\n\nfunction parseSingle(raw: EventInput, allDayDefault: boolean | null, calendar: Calendar, leftovers?, allowOpenRange?: boolean) {\n  let props = pluckDateProps(raw, leftovers)\n  let allDay = props.allDay\n  let startMeta\n  let startMarker = null\n  let hasEnd = false\n  let endMeta\n  let endMarker = null\n\n  startMeta = calendar.dateEnv.createMarkerMeta(props.start)\n\n  if (startMeta) {\n    startMarker = startMeta.marker\n  } else if (!allowOpenRange) {\n    return null\n  }\n\n  if (props.end != null) {\n    endMeta = calendar.dateEnv.createMarkerMeta(props.end)\n  }\n\n  if (allDay == null) {\n    if (allDayDefault != null) {\n      allDay = allDayDefault\n    } else {\n      // fall back to the date props LAST\n      allDay = (!startMeta || startMeta.isTimeUnspecified) &&\n        (!endMeta || endMeta.isTimeUnspecified)\n    }\n  }\n\n  if (allDay && startMarker) {\n    startMarker = startOfDay(startMarker)\n  }\n\n  if (endMeta) {\n    endMarker = endMeta.marker\n\n    if (allDay) {\n      endMarker = startOfDay(endMarker)\n    }\n\n    if (startMarker && endMarker <= startMarker) {\n      endMarker = null\n    }\n  }\n\n  if (endMarker) {\n    hasEnd = true\n  } else if (!allowOpenRange) {\n    hasEnd = calendar.opt('forceEventDuration') || false\n\n    endMarker = calendar.dateEnv.add(\n      startMarker,\n      allDay ?\n        calendar.defaultAllDayEventDuration :\n        calendar.defaultTimedEventDuration\n    )\n  }\n\n  return {\n    allDay,\n    hasEnd,\n    range: { start: startMarker, end: endMarker },\n    forcedStartTzo: startMeta ? startMeta.forcedTzo : null,\n    forcedEndTzo: endMeta ? endMeta.forcedTzo : null\n  }\n}\n\n\nfunction pluckDateProps(raw: EventInput, leftovers: any) {\n  let props = refineProps(raw, DATE_PROPS, {}, leftovers)\n\n  props.start = (props.start !== null) ? props.start : props.date\n  delete props.date\n\n  return props\n}\n\n\nfunction pluckNonDateProps(raw: EventInput, calendar: Calendar, leftovers?) {\n  let preLeftovers = {}\n  let props = refineProps(raw, NON_DATE_PROPS, {}, preLeftovers)\n  let ui = processUnscopedUiProps(preLeftovers, calendar, leftovers)\n\n  props.publicId = props.id\n  delete props.id\n\n  props.ui = ui\n\n  return props\n}\n\n\nfunction computeIsAllDayDefault(sourceId: string, calendar: Calendar): boolean | null {\n  let res = null\n\n  if (sourceId) {\n    let source = calendar.state.eventSources[sourceId]\n    res = source.allDayDefault\n  }\n\n  if (res == null) {\n    res = calendar.opt('allDayDefault')\n  }\n\n  return res\n}\n","import Calendar from '../Calendar'\n\nimport { EventInput } from './event'\nimport { EventStore, parseEvents } from './event-store'\n\n/*\nUtils for converting raw business hour input into an EventStore,\nfor both rendering and the constraint system.\n*/\n\nexport type BusinessHoursInput = boolean | EventInput | EventInput[]\n\nconst DEF_DEFAULTS = {\n  startTime: '09:00',\n  endTime: '17:00',\n  daysOfWeek: [ 1, 2, 3, 4, 5 ], // monday - friday\n  rendering: 'inverse-background',\n  classNames: 'fc-nonbusiness',\n  groupId: '_businessHours' // so multiple defs get grouped\n}\n\n/*\nTODO: pass around as EventDefHash!!!\n*/\nexport function parseBusinessHours(input: BusinessHoursInput, calendar: Calendar): EventStore {\n  return parseEvents(\n    refineInputs(input),\n    '',\n    calendar\n  )\n}\n\nfunction refineInputs(input: BusinessHoursInput) {\n  let rawDefs\n\n  if (input === true) {\n    rawDefs = [ {} ] // will get DEF_DEFAULTS verbatim\n  } else if (Array.isArray(input)) {\n    // if specifying an array, every sub-definition NEEDS a day-of-week\n    rawDefs = input.filter(function(rawDef) {\n      return rawDef.daysOfWeek\n    })\n  } else if (typeof input === 'object' && input) { // non-null object\n    rawDefs = [ input ]\n  } else { // is probably false\n    rawDefs = []\n  }\n\n  rawDefs = rawDefs.map(function(rawDef) {\n    return { ...DEF_DEFAULTS, ...rawDef }\n  })\n\n  return rawDefs\n}\n","import { isArraysEqual } from '../util/array'\n\nexport interface MemoizedRendering<ArgsType extends any[]> {\n  (...args: ArgsType): void\n  unrender: () => void\n  dependents: MemoizedRendering<any>[]\n}\n\nexport function memoizeRendering<ArgsType extends any[]>(\n  renderFunc: (...args: ArgsType) => void,\n  unrenderFunc?: (...args: ArgsType) => void,\n  dependencies: MemoizedRendering<any>[] = []\n): MemoizedRendering<ArgsType> {\n\n  let dependents: MemoizedRendering<any>[] = []\n  let thisContext\n  let prevArgs\n\n  function unrender() {\n    if (prevArgs) {\n\n      for (let dependent of dependents) {\n        dependent.unrender()\n      }\n\n      if (unrenderFunc) {\n        unrenderFunc.apply(thisContext, prevArgs)\n      }\n\n      prevArgs = null\n    }\n  }\n\n  function res() {\n    if (!prevArgs || !isArraysEqual(prevArgs, arguments)) {\n      unrender()\n      thisContext = this\n      prevArgs = arguments\n      renderFunc.apply(this, arguments)\n    }\n  }\n\n  res.dependents = dependents\n  res.unrender = unrender\n\n  for (let dependency of dependencies) {\n    dependency.dependents.push(res)\n  }\n\n  return res\n}\n","import { EventStore, createEmptyEventStore } from '../structs/event-store'\nimport { EventDef } from '../structs/event'\nimport { EventInteractionState } from '../interactions/event-interaction-state'\nimport { mapHash } from '../util/object'\nimport { memoize } from '../util/memoize'\nimport { EventUiHash, EventUi, combineEventUis } from './event-ui'\nimport { DateSpan } from '../structs/date-span'\nimport { __assign } from 'tslib'\n\nexport interface SplittableProps {\n  businessHours: EventStore | null // is this really allowed to be null?\n  dateSelection: DateSpan | null\n  eventStore: EventStore\n  eventUiBases: EventUiHash\n  eventSelection: string\n  eventDrag: EventInteractionState | null\n  eventResize: EventInteractionState | null\n}\n\nconst EMPTY_EVENT_STORE = createEmptyEventStore() // for purecomponents. TODO: keep elsewhere\n\nexport default abstract class Splitter<PropsType extends SplittableProps = SplittableProps> {\n\n  private getKeysForEventDefs = memoize(this._getKeysForEventDefs)\n  private splitDateSelection = memoize(this._splitDateSpan)\n  private splitEventStore = memoize(this._splitEventStore)\n  private splitIndividualUi = memoize(this._splitIndividualUi)\n  private splitEventDrag = memoize(this._splitInteraction)\n  private splitEventResize = memoize(this._splitInteraction)\n  private eventUiBuilders = {} // TODO: typescript protection\n\n  abstract getKeyInfo(props: PropsType): { [key: string]: { ui?: EventUi, businessHours?: EventStore } }\n  abstract getKeysForDateSpan(dateSpan: DateSpan): string[]\n  abstract getKeysForEventDef(eventDef: EventDef): string[]\n\n  splitProps(props: PropsType): { [key: string]: SplittableProps } {\n\n    let keyInfos = this.getKeyInfo(props)\n    let defKeys = this.getKeysForEventDefs(props.eventStore)\n    let dateSelections = this.splitDateSelection(props.dateSelection)\n    let individualUi = this.splitIndividualUi(props.eventUiBases, defKeys) // the individual *bases*\n    let eventStores = this.splitEventStore(props.eventStore, defKeys)\n    let eventDrags = this.splitEventDrag(props.eventDrag)\n    let eventResizes = this.splitEventResize(props.eventResize)\n    let splitProps: { [key: string]: SplittableProps } = {}\n\n    this.eventUiBuilders = mapHash(keyInfos, (info, key) => {\n      return this.eventUiBuilders[key] || memoize(buildEventUiForKey)\n    })\n\n    for (let key in keyInfos) {\n      let keyInfo = keyInfos[key]\n      let eventStore = eventStores[key] || EMPTY_EVENT_STORE\n      let buildEventUi = this.eventUiBuilders[key]\n\n      splitProps[key] = {\n        businessHours: keyInfo.businessHours || props.businessHours,\n        dateSelection: dateSelections[key] || null,\n        eventStore,\n        eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),\n        eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',\n        eventDrag: eventDrags[key] || null,\n        eventResize: eventResizes[key] || null\n      }\n    }\n\n    return splitProps\n  }\n\n  private _splitDateSpan(dateSpan: DateSpan | null) {\n    let dateSpans = {}\n\n    if (dateSpan) {\n      let keys = this.getKeysForDateSpan(dateSpan)\n\n      for (let key of keys) {\n        dateSpans[key] = dateSpan\n      }\n    }\n\n    return dateSpans\n  }\n\n  private _getKeysForEventDefs(eventStore: EventStore) {\n    return mapHash(eventStore.defs, (eventDef: EventDef) => {\n      return this.getKeysForEventDef(eventDef)\n    })\n  }\n\n  private _splitEventStore(eventStore: EventStore, defKeys): { [key: string]: EventStore } {\n    let { defs, instances } = eventStore\n    let splitStores = {}\n\n    for (let defId in defs) {\n      for (let key of defKeys[defId]) {\n\n        if (!splitStores[key]) {\n          splitStores[key] = createEmptyEventStore()\n        }\n\n        splitStores[key].defs[defId] = defs[defId]\n      }\n    }\n\n    for (let instanceId in instances) {\n      let instance = instances[instanceId]\n\n      for (let key of defKeys[instance.defId]) {\n\n        if (splitStores[key]) { // must have already been created\n          splitStores[key].instances[instanceId] = instance\n        }\n      }\n    }\n\n    return splitStores\n  }\n\n  private _splitIndividualUi(eventUiBases: EventUiHash, defKeys): { [key: string]: EventUiHash } {\n    let splitHashes: { [key: string]: EventUiHash } = {}\n\n    for (let defId in eventUiBases) {\n      if (defId) { // not the '' key\n        for (let key of defKeys[defId]) {\n\n          if (!splitHashes[key]) {\n            splitHashes[key] = {}\n          }\n\n          splitHashes[key][defId] = eventUiBases[defId]\n        }\n      }\n    }\n\n    return splitHashes\n  }\n\n  private _splitInteraction(interaction: EventInteractionState | null): { [key: string]: EventInteractionState } {\n    let splitStates: { [key: string]: EventInteractionState } = {}\n\n    if (interaction) {\n      let affectedStores = this._splitEventStore(\n        interaction.affectedEvents,\n        this._getKeysForEventDefs(interaction.affectedEvents) // can't use cached. might be events from other calendar\n      )\n\n      // can't rely on defKeys because event data is mutated\n      let mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents)\n      let mutatedStores = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId)\n\n      let populate = function(key) {\n        if (!splitStates[key]) {\n          splitStates[key] = {\n            affectedEvents: affectedStores[key] || EMPTY_EVENT_STORE,\n            mutatedEvents: mutatedStores[key] || EMPTY_EVENT_STORE,\n            isEvent: interaction.isEvent,\n            origSeg: interaction.origSeg\n          }\n        }\n      }\n\n      for (let key in affectedStores) {\n        populate(key)\n      }\n\n      for (let key in mutatedStores) {\n        populate(key)\n      }\n    }\n\n    return splitStates\n  }\n\n}\n\nfunction buildEventUiForKey(allUi: EventUi | null, eventUiForKey: EventUi | null, individualUi: EventUiHash | null) {\n  let baseParts = []\n\n  if (allUi) {\n    baseParts.push(allUi)\n  }\n\n  if (eventUiForKey) {\n    baseParts.push(eventUiForKey)\n  }\n\n  let stuff = {\n    '': combineEventUis(baseParts)\n  }\n\n  if (individualUi) {\n    __assign(stuff, individualUi)\n  }\n\n  return stuff\n}\n","import { htmlEscape, attrsToStr } from '../util/html'\nimport { DateMarker, startOfDay, addDays, DAY_IDS } from '../datelib/marker'\nimport { rangeContainsMarker } from '../datelib/date-range'\nimport Component, { ComponentContext } from '../component/Component'\nimport { DateProfile } from '../DateProfileGenerator'\n\n\n// Generates HTML for an anchor to another view into the calendar.\n// Will either generate an <a> tag or a non-clickable <span> tag, depending on enabled settings.\n// `gotoOptions` can either be a DateMarker, or an object with the form:\n// { date, type, forceOff }\n// `type` is a view-type like \"day\" or \"week\". default value is \"day\".\n// `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\nexport function buildGotoAnchorHtml(component: Component<any>, gotoOptions, attrs, innerHtml?) {\n  let { dateEnv } = component\n  let date\n  let type\n  let forceOff\n  let finalOptions\n\n  if (gotoOptions instanceof Date) {\n    date = gotoOptions // a single date-like input\n  } else {\n    date = gotoOptions.date\n    type = gotoOptions.type\n    forceOff = gotoOptions.forceOff\n  }\n\n  finalOptions = { // for serialization into the link\n    date: dateEnv.formatIso(date, { omitTime: true }),\n    type: type || 'day'\n  }\n\n  if (typeof attrs === 'string') {\n    innerHtml = attrs\n    attrs = null\n  }\n\n  attrs = attrs ? ' ' + attrsToStr(attrs) : '' // will have a leading space\n  innerHtml = innerHtml || ''\n\n  if (!forceOff && component.opt('navLinks')) {\n    return '<a' + attrs +\n      ' data-goto=\"' + htmlEscape(JSON.stringify(finalOptions)) + '\">' +\n      innerHtml +\n      '</a>'\n  } else {\n    return '<span' + attrs + '>' +\n      innerHtml +\n      '</span>'\n  }\n}\n\n\nexport function getAllDayHtml(component: Component<any>) {\n  return component.opt('allDayHtml') || htmlEscape(component.opt('allDayText'))\n}\n\n\n// Computes HTML classNames for a single-day element\nexport function getDayClasses(date: DateMarker, dateProfile: DateProfile, context: ComponentContext, noThemeHighlight?) {\n  let { calendar, view, theme, dateEnv } = context\n  let classes = []\n  let todayStart: DateMarker\n  let todayEnd: DateMarker\n\n  if (!rangeContainsMarker(dateProfile.activeRange, date)) {\n    classes.push('fc-disabled-day')\n  } else {\n    classes.push('fc-' + DAY_IDS[date.getUTCDay()])\n\n    if (\n      view.opt('monthMode') &&\n      dateEnv.getMonth(date) !== dateEnv.getMonth(dateProfile.currentRange.start)\n    ) {\n      classes.push('fc-other-month')\n    }\n\n    todayStart = startOfDay(calendar.getNow())\n    todayEnd = addDays(todayStart, 1)\n\n    if (date < todayStart) {\n      classes.push('fc-past')\n    } else if (date >= todayEnd) {\n      classes.push('fc-future')\n    } else {\n      classes.push('fc-today')\n\n      if (noThemeHighlight !== true) {\n        classes.push(theme.getClass('today'))\n      }\n    }\n  }\n\n  return classes\n}\n","\n// given a function that resolves a result asynchronously.\n// the function can either call passed-in success and failure callbacks,\n// or it can return a promise.\n// if you need to pass additional params to func, bind them first.\nexport function unpromisify(func, success, failure?) {\n\n  // guard against success/failure callbacks being called more than once\n  // and guard against a promise AND callback being used together.\n  let isResolved = false\n  let wrappedSuccess = function() {\n    if (!isResolved) {\n      isResolved = true\n      success.apply(this, arguments)\n    }\n  }\n  let wrappedFailure = function() {\n    if (!isResolved) {\n      isResolved = true\n      if (failure) {\n        failure.apply(this, arguments)\n      }\n    }\n  }\n\n  let res = func(wrappedSuccess, wrappedFailure)\n  if (res && typeof res.then === 'function') {\n    res.then(wrappedSuccess, wrappedFailure)\n  }\n}\n","\nexport default class Mixin {\n\n  // mix into a CLASS\n  static mixInto(destClass) {\n    this.mixIntoObj(destClass.prototype)\n  }\n\n  // mix into ANY object\n  static mixIntoObj(destObj) {\n    Object.getOwnPropertyNames(this.prototype).forEach((name) => { // copy methods\n      if (!destObj[name]) { // if destination doesn't already define it\n        destObj[name] = this.prototype[name]\n      }\n    })\n  }\n\n  /*\n  will override existing methods\n  TODO: remove! not used anymore\n  */\n  static mixOver(destClass) {\n    Object.getOwnPropertyNames(this.prototype).forEach((name) => { // copy methods\n      destClass.prototype[name] = this.prototype[name]\n    })\n  }\n\n}\n","/*\nUSAGE:\n  import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'\nin class:\n  on: EmitterInterface['on']\n  one: EmitterInterface['one']\n  off: EmitterInterface['off']\n  trigger: EmitterInterface['trigger']\n  triggerWith: EmitterInterface['triggerWith']\n  hasHandlers: EmitterInterface['hasHandlers']\nafter class:\n  EmitterMixin.mixInto(TheClass)\n*/\n\nimport { applyAll } from '../util/misc'\nimport Mixin from './Mixin'\n\nexport interface EmitterInterface {\n  on(types, handler)\n  one(types, handler)\n  off(types, handler)\n  trigger(type, ...args)\n  triggerWith(type, context, args)\n  hasHandlers(type)\n}\n\nexport default class EmitterMixin extends Mixin implements EmitterInterface {\n\n  _handlers: any\n  _oneHandlers: any\n\n  on(type, handler) {\n    addToHash(\n      this._handlers || (this._handlers = {}),\n      type,\n      handler\n    )\n    return this // for chaining\n  }\n\n  // todo: add comments\n  one(type, handler) {\n    addToHash(\n      this._oneHandlers || (this._oneHandlers = {}),\n      type,\n      handler\n    )\n    return this // for chaining\n  }\n\n  off(type, handler?) {\n    if (this._handlers) {\n      removeFromHash(this._handlers, type, handler)\n    }\n    if (this._oneHandlers) {\n      removeFromHash(this._oneHandlers, type, handler)\n    }\n    return this // for chaining\n  }\n\n  trigger(type, ...args) {\n    this.triggerWith(type, this, args)\n    return this // for chaining\n  }\n\n  triggerWith(type, context, args) {\n    if (this._handlers) {\n      applyAll(this._handlers[type], context, args)\n    }\n    if (this._oneHandlers) {\n      applyAll(this._oneHandlers[type], context, args)\n      delete this._oneHandlers[type] // will never fire again\n    }\n    return this // for chaining\n  }\n\n  hasHandlers(type) {\n    return (this._handlers && this._handlers[type] && this._handlers[type].length) ||\n      (this._oneHandlers && this._oneHandlers[type] && this._oneHandlers[type].length)\n  }\n\n}\n\nfunction addToHash(hash, type, handler) {\n  (hash[type] || (hash[type] = []))\n    .push(handler)\n}\n\nfunction removeFromHash(hash, type, handler?) {\n  if (handler) {\n    if (hash[type]) {\n      hash[type] = hash[type].filter(function(func) {\n        return func !== handler\n      })\n    }\n  } else {\n    delete hash[type] // remove all handler funcs for this type\n  }\n}\n","\n/*\nRecords offset information for a set of elements, relative to an origin element.\nCan record the left/right OR the top/bottom OR both.\nProvides methods for querying the cache by position.\n*/\nexport default class PositionCache {\n\n  originClientRect: ClientRect\n  els: HTMLElement[] // assumed to be siblings\n  originEl: HTMLElement // options can override the natural originEl\n  isHorizontal: boolean // whether to query for left/right/width\n  isVertical: boolean // whether to query for top/bottom/height\n\n  // arrays of coordinates (from topleft of originEl)\n  // caller can access these directly\n  lefts: any\n  rights: any\n  tops: any\n  bottoms: any\n\n\n  constructor(originEl: HTMLElement, els: HTMLElement[], isHorizontal: boolean, isVertical: boolean) {\n    this.originEl = originEl\n    this.els = els\n    this.isHorizontal = isHorizontal\n    this.isVertical = isVertical\n  }\n\n\n  // Queries the els for coordinates and stores them.\n  // Call this method before using and of the get* methods below.\n  build() {\n    let originEl = this.originEl\n    let originClientRect = this.originClientRect =\n      originEl.getBoundingClientRect() // relative to viewport top-left\n\n    if (this.isHorizontal) {\n      this.buildElHorizontals(originClientRect.left)\n    }\n\n    if (this.isVertical) {\n      this.buildElVerticals(originClientRect.top)\n    }\n  }\n\n\n  // Populates the left/right internal coordinate arrays\n  buildElHorizontals(originClientLeft: number) {\n    let lefts = []\n    let rights = []\n\n    for (let el of this.els) {\n      let rect = el.getBoundingClientRect()\n      lefts.push(rect.left - originClientLeft)\n      rights.push(rect.right - originClientLeft)\n    }\n\n    this.lefts = lefts\n    this.rights = rights\n  }\n\n\n  // Populates the top/bottom internal coordinate arrays\n  buildElVerticals(originClientTop: number) {\n    let tops = []\n    let bottoms = []\n\n    for (let el of this.els) {\n      let rect = el.getBoundingClientRect()\n      tops.push(rect.top - originClientTop)\n      bottoms.push(rect.bottom - originClientTop)\n    }\n\n    this.tops = tops\n    this.bottoms = bottoms\n  }\n\n\n  // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n  // If no intersection is made, returns undefined.\n  leftToIndex(leftPosition: number) {\n    let lefts = this.lefts\n    let rights = this.rights\n    let len = lefts.length\n    let i\n\n    for (i = 0; i < len; i++) {\n      if (leftPosition >= lefts[i] && leftPosition < rights[i]) {\n        return i\n      }\n    }\n  }\n\n\n  // Given a top offset (from document top), returns the index of the el that it vertically intersects.\n  // If no intersection is made, returns undefined.\n  topToIndex(topPosition: number) {\n    let tops = this.tops\n    let bottoms = this.bottoms\n    let len = tops.length\n    let i\n\n    for (i = 0; i < len; i++) {\n      if (topPosition >= tops[i] && topPosition < bottoms[i]) {\n        return i\n      }\n    }\n  }\n\n\n  // Gets the width of the element at the given index\n  getWidth(leftIndex: number) {\n    return this.rights[leftIndex] - this.lefts[leftIndex]\n  }\n\n\n  // Gets the height of the element at the given index\n  getHeight(topIndex: number) {\n    return this.bottoms[topIndex] - this.tops[topIndex]\n  }\n\n}\n","\n/*\nAn object for getting/setting scroll-related information for an element.\nInternally, this is done very differently for window versus DOM element,\nso this object serves as a common interface.\n*/\nexport abstract class ScrollController {\n\n  abstract getScrollTop(): number\n  abstract getScrollLeft(): number\n  abstract setScrollTop(top: number): void\n  abstract setScrollLeft(left: number): void\n  abstract getClientWidth(): number\n  abstract getClientHeight(): number\n  abstract getScrollWidth(): number\n  abstract getScrollHeight(): number\n\n  getMaxScrollTop() {\n    return this.getScrollHeight() - this.getClientHeight()\n  }\n\n  getMaxScrollLeft() {\n    return this.getScrollWidth() - this.getClientWidth()\n  }\n\n  canScrollVertically() {\n    return this.getMaxScrollTop() > 0\n  }\n\n  canScrollHorizontally() {\n    return this.getMaxScrollLeft() > 0\n  }\n\n  canScrollUp() {\n    return this.getScrollTop() > 0\n  }\n\n  canScrollDown() {\n    return this.getScrollTop() < this.getMaxScrollTop()\n  }\n\n  canScrollLeft() {\n    return this.getScrollLeft() > 0\n  }\n\n  canScrollRight() {\n    return this.getScrollLeft() < this.getMaxScrollLeft()\n  }\n\n}\n\nexport class ElementScrollController extends ScrollController {\n\n  el: HTMLElement\n\n  constructor(el: HTMLElement) {\n    super()\n    this.el = el\n  }\n\n  getScrollTop() {\n    return this.el.scrollTop\n  }\n\n  getScrollLeft() {\n    return this.el.scrollLeft\n  }\n\n  setScrollTop(top: number) {\n    this.el.scrollTop = top\n  }\n\n  setScrollLeft(left: number) {\n    this.el.scrollLeft = left\n  }\n\n  getScrollWidth() {\n    return this.el.scrollWidth\n  }\n\n  getScrollHeight() {\n    return this.el.scrollHeight\n  }\n\n  getClientHeight() {\n    return this.el.clientHeight\n  }\n\n  getClientWidth() {\n    return this.el.clientWidth\n  }\n\n}\n\nexport class WindowScrollController extends ScrollController {\n\n  getScrollTop() {\n    return window.pageYOffset\n  }\n\n  getScrollLeft() {\n    return window.pageXOffset\n  }\n\n  setScrollTop(n: number) {\n    window.scroll(window.pageXOffset, n)\n  }\n\n  setScrollLeft(n: number) {\n    window.scroll(n, window.pageYOffset)\n  }\n\n  getScrollWidth() {\n    return document.documentElement.scrollWidth\n  }\n\n  getScrollHeight() {\n    return document.documentElement.scrollHeight\n  }\n\n  getClientHeight() {\n    return document.documentElement.clientHeight\n  }\n\n  getClientWidth() {\n    return document.documentElement.clientWidth\n  }\n\n}\n","import { computeEdges } from '../util/dom-geom'\nimport { removeElement, createElement, applyStyle, applyStyleProp } from '../util/dom-manip'\nimport { ElementScrollController } from './scroll-controller'\n\nexport interface ScrollbarWidths {\n  left: number\n  right: number\n  bottom: number\n}\n\n/*\nEmbodies a div that has potential scrollbars\n*/\nexport default class ScrollComponent extends ElementScrollController {\n\n  overflowX: string\n  overflowY: string\n\n  constructor(overflowX: string, overflowY: string) {\n    super(\n      createElement('div', {\n        className: 'fc-scroller'\n      })\n    )\n    this.overflowX = overflowX\n    this.overflowY = overflowY\n    this.applyOverflow()\n  }\n\n\n  // sets to natural height, unlocks overflow\n  clear() {\n    this.setHeight('auto')\n    this.applyOverflow()\n  }\n\n\n  destroy() {\n    removeElement(this.el)\n  }\n\n\n  // Overflow\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  applyOverflow() {\n    applyStyle(this.el, {\n      overflowX: this.overflowX,\n      overflowY: this.overflowY\n    })\n  }\n\n\n  // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\n  // Useful for preserving scrollbar widths regardless of future resizes.\n  // Can pass in scrollbarWidths for optimization.\n  lockOverflow(scrollbarWidths: ScrollbarWidths) {\n    let overflowX = this.overflowX\n    let overflowY = this.overflowY\n\n    scrollbarWidths = scrollbarWidths || this.getScrollbarWidths()\n\n    if (overflowX === 'auto') {\n      overflowX = (\n          scrollbarWidths.bottom || // horizontal scrollbars?\n          this.canScrollHorizontally() // OR scrolling pane with massless scrollbars?\n        ) ? 'scroll' : 'hidden'\n    }\n\n    if (overflowY === 'auto') {\n      overflowY = (\n          scrollbarWidths.left || scrollbarWidths.right || // horizontal scrollbars?\n          this.canScrollVertically() // OR scrolling pane with massless scrollbars?\n        ) ? 'scroll' : 'hidden'\n    }\n\n    applyStyle(this.el, { overflowX, overflowY })\n  }\n\n\n  setHeight(height: number | string) {\n    applyStyleProp(this.el, 'height', height)\n  }\n\n\n  getScrollbarWidths(): ScrollbarWidths {\n    let edges = computeEdges(this.el)\n    return {\n      left: edges.scrollbarLeft,\n      right: edges.scrollbarRight,\n      bottom: edges.scrollbarBottom\n    }\n  }\n\n}\n","\nexport default class Theme {\n\n  calendarOptions: any\n\n  // settings. default values are set after the class\n  classes: any\n  iconClasses: any\n  baseIconClass: string\n  iconOverrideOption: any\n  iconOverrideCustomButtonOption: any\n  iconOverridePrefix: string\n\n\n  constructor(calendarOptions) {\n    this.calendarOptions = calendarOptions\n    this.processIconOverride()\n  }\n\n\n  processIconOverride() {\n    if (this.iconOverrideOption) {\n      this.setIconOverride(\n        this.calendarOptions[this.iconOverrideOption]\n      )\n    }\n  }\n\n\n  setIconOverride(iconOverrideHash) {\n    let iconClassesCopy\n    let buttonName\n\n    if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object\n      iconClassesCopy = { ...this.iconClasses }\n\n      for (buttonName in iconOverrideHash) {\n        iconClassesCopy[buttonName] = this.applyIconOverridePrefix(\n          iconOverrideHash[buttonName]\n        )\n      }\n\n      this.iconClasses = iconClassesCopy\n    } else if (iconOverrideHash === false) {\n      this.iconClasses = {}\n    }\n  }\n\n\n  applyIconOverridePrefix(className) {\n    let prefix = this.iconOverridePrefix\n\n    if (prefix && className.indexOf(prefix) !== 0) { // if not already present\n      className = prefix + className\n    }\n\n    return className\n  }\n\n\n  getClass(key) {\n    return this.classes[key] || ''\n  }\n\n\n  getIconClass(buttonName) {\n    let className = this.iconClasses[buttonName]\n\n    if (className) {\n      return this.baseIconClass + ' ' + className\n    }\n\n    return ''\n  }\n\n\n  getCustomButtonIconClass(customButtonProps) {\n    let className\n\n    if (this.iconOverrideCustomButtonOption) {\n      className = customButtonProps[this.iconOverrideCustomButtonOption]\n\n      if (className) {\n        return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className)\n      }\n    }\n\n    return ''\n  }\n\n}\n\nTheme.prototype.classes = {}\nTheme.prototype.iconClasses = {}\nTheme.prototype.baseIconClass = ''\nTheme.prototype.iconOverridePrefix = ''\n\nexport type ThemeClass = { new(calendarOptions: any): Theme }\n","import Calendar from '../Calendar'\nimport View from '../View'\nimport Theme from '../theme/Theme'\nimport { DateEnv } from '../datelib/env'\n\nlet guid = 0\n\nexport interface ComponentContext {\n  options: any\n  dateEnv: DateEnv\n  theme: Theme\n  calendar: Calendar\n  view: View\n}\n\nexport type EqualityFuncHash = { [propName: string]: (obj0, obj1) => boolean }\n\nexport default class Component<PropsType> {\n\n  equalityFuncs: EqualityFuncHash // can't initialize here. done below...\n\n  uid: string\n  props: PropsType | null\n\n  // context vars\n  context: ComponentContext\n  dateEnv: DateEnv\n  theme: Theme\n  view: View\n  calendar: Calendar\n  isRtl: boolean\n\n  constructor(context: ComponentContext, isView?: boolean) {\n\n    // HACK to populate view at top of component instantiation call chain\n    if (isView) {\n      context.view = this as any\n    }\n\n    this.uid = String(guid++)\n    this.context = context\n    this.dateEnv = context.dateEnv\n    this.theme = context.theme\n    this.view = context.view\n    this.calendar = context.calendar\n    this.isRtl = this.opt('dir') === 'rtl'\n  }\n\n  static addEqualityFuncs(newFuncs: EqualityFuncHash) {\n    this.prototype.equalityFuncs = {\n      ...this.prototype.equalityFuncs,\n      ...newFuncs\n    }\n  }\n\n  opt(name) {\n    return this.context.options[name]\n  }\n\n  receiveProps(props: PropsType) {\n    let { anyChanges, comboProps } = recycleProps(this.props || {}, props, this.equalityFuncs)\n\n    this.props = comboProps\n\n    if (anyChanges) {\n      this.render(comboProps)\n    }\n  }\n\n  protected render(props: PropsType) {\n  }\n\n  // after destroy is called, this component won't ever be used again\n  destroy() {\n  }\n\n}\n\nComponent.prototype.equalityFuncs = {}\n\n\n/*\nReuses old values when equal. If anything is unequal, returns newProps as-is.\nGreat for PureComponent, but won't be feasible with React, so just eliminate and use React's DOM diffing.\n*/\nfunction recycleProps(oldProps, newProps, equalityFuncs: EqualityFuncHash) {\n  let comboProps = {} as any // some old, some new\n  let anyChanges = false\n\n  for (let key in newProps) {\n    if (\n      key in oldProps && (\n        oldProps[key] === newProps[key] ||\n        (equalityFuncs[key] && equalityFuncs[key](oldProps[key], newProps[key]))\n      )\n    ) {\n      // equal to old? use old prop\n      comboProps[key] = oldProps[key]\n    } else {\n      comboProps[key] = newProps[key]\n      anyChanges = true\n    }\n  }\n\n  for (let key in oldProps) {\n    if (!(key in newProps)) {\n      anyChanges = true\n      break\n    }\n  }\n\n  return { anyChanges, comboProps }\n}\n","import Component, { ComponentContext } from './Component'\nimport { EventRenderRange } from './event-rendering'\nimport { DateSpan } from '../structs/date-span'\nimport { EventInstanceHash } from '../structs/event'\nimport { rangeContainsRange } from '../datelib/date-range'\nimport { Hit } from '../interactions/hit'\nimport { elementClosest, removeElement } from '../util/dom-manip'\nimport { isDateSelectionValid, isInteractionValid } from '../validation'\nimport EventApi from '../api/EventApi'\nimport FgEventRenderer from './renderers/FgEventRenderer'\nimport FillRenderer from './renderers/FillRenderer'\nimport { EventInteractionState } from '../interactions/event-interaction-state'\nimport View from '../View'\nimport { EventHandlerName, EventHandlerArgs } from '../types/input-types'\n\nexport type DateComponentHash = { [uid: string]: DateComponent<any> }\n\n// NOTE: for fg-events, eventRange.range is NOT sliced,\n// thus, we need isStart/isEnd\nexport interface Seg {\n  component?: DateComponent<any>\n  isStart: boolean\n  isEnd: boolean\n  eventRange?: EventRenderRange\n  el?: HTMLElement\n  [otherProp: string]: any // TODO: remove this. extending Seg will handle this\n}\n\nexport interface EventSegUiInteractionState {\n  affectedInstances: EventInstanceHash\n  segs: Seg[]\n  isEvent: boolean\n  sourceSeg: any\n}\n\n/*\nPURPOSES:\n- hook up to fg, fill, and mirror renderers\n- interface for dragging and hits\n*/\nexport default class DateComponent<PropsType> extends Component<PropsType> {\n\n  // self-config, overridable by subclasses. must set on prototype\n  fgSegSelector: string // lets eventRender produce elements without fc-event class\n  bgSegSelector: string\n  // IN SCHEDULER: allowAcrossResources\n\n  // if defined, holds the unit identified (ex: \"year\" or \"month\") that determines the level of granularity\n  // of the date areas. if not defined, assumes to be day and time granularity.\n  // TODO: port isTimeScale into same system?\n  largeUnit: any\n\n  eventRenderer: FgEventRenderer\n  mirrorRenderer: FgEventRenderer\n  fillRenderer: FillRenderer\n\n  el: HTMLElement // passed in to constructor\n\n\n  constructor(context: ComponentContext, el: HTMLElement, isView?: boolean) {\n    super(context, isView)\n\n    this.el = el\n  }\n\n  destroy() {\n    super.destroy()\n\n    removeElement(this.el)\n  }\n\n\n  // TODO: WHAT ABOUT (sourceSeg && sourceSeg.component.doesDragMirror)\n  //\n  // Event Drag-n-Drop Rendering (for both events and external elements)\n  // ---------------------------------------------------------------------------------------------------------------\n  /*\n  renderEventDragSegs(state: EventSegUiInteractionState) {\n    if (state) {\n      let { isEvent, segs, sourceSeg } = state\n\n      if (this.eventRenderer) {\n        this.eventRenderer.hideByHash(state.affectedInstances)\n      }\n\n      // if the user is dragging something that is considered an event with real event data,\n      // and this component likes to do drag mirrors OR the component where the seg came from\n      // likes to do drag mirrors, then render a drag mirror.\n      if (isEvent && (this.doesDragMirror || sourceSeg && sourceSeg.component.doesDragMirror)) {\n        if (this.mirrorRenderer) {\n          this.mirrorRenderer.renderSegs(segs, { isDragging: true, sourceSeg })\n        }\n      }\n\n      // if it would be impossible to render a drag mirror OR this component likes to render\n      // highlights, then render a highlight.\n      if (!isEvent || this.doesDragHighlight) {\n        if (this.fillRenderer) {\n          this.fillRenderer.renderSegs('highlight', segs)\n        }\n      }\n    }\n  }\n  */\n\n\n  // Hit System\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  buildPositionCaches() {\n  }\n\n\n  queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit | null {\n    return null // this should be abstract\n  }\n\n\n  // Validation\n  // -----------------------------------------------------------------------------------------------------------------\n\n  isInteractionValid(interaction: EventInteractionState) {\n    let { calendar } = this\n    let dateProfile = (this.props as any).dateProfile // HACK\n    let instances = interaction.mutatedEvents.instances\n\n    if (dateProfile) { // HACK for DayTile\n      for (let instanceId in instances) {\n        if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {\n          return false\n        }\n      }\n    }\n\n    return isInteractionValid(interaction, calendar)\n  }\n\n  isDateSelectionValid(selection: DateSpan): boolean {\n    let dateProfile = (this.props as any).dateProfile // HACK\n\n    if (\n      dateProfile && // HACK for DayTile\n      !rangeContainsRange(dateProfile.validRange, selection.range)\n    ) {\n      return false\n    }\n\n    return isDateSelectionValid(selection, this.calendar)\n  }\n\n\n  // Triggering\n  // -----------------------------------------------------------------------------------------------------------------\n  // TODO: move to Calendar\n\n\n  publiclyTrigger<T extends EventHandlerName>(name: T, args?: EventHandlerArgs<T>) {\n    let calendar = this.calendar\n\n    return calendar.publiclyTrigger(name, args)\n  }\n\n\n  publiclyTriggerAfterSizing<T extends EventHandlerName>(name: T, args: EventHandlerArgs<T>) {\n    let calendar = this.calendar\n\n    return calendar.publiclyTriggerAfterSizing(name, args)\n  }\n\n\n  hasPublicHandlers<T extends EventHandlerName>(name: T) {\n    let calendar = this.calendar\n\n    return calendar.hasPublicHandlers(name)\n  }\n\n\n  triggerRenderedSegs(segs: Seg[], isMirrors: boolean) {\n    let { calendar } = this\n\n    if (this.hasPublicHandlers('eventPositioned')) {\n\n      for (let seg of segs) {\n        this.publiclyTriggerAfterSizing('eventPositioned', [\n          {\n            event: new EventApi(\n              calendar,\n              seg.eventRange.def,\n              seg.eventRange.instance\n            ),\n            isMirror: isMirrors,\n            isStart: seg.isStart,\n            isEnd: seg.isEnd,\n            el: seg.el,\n            view: this as unknown as View // safe to cast because this method is only called on context.view\n          }\n        ])\n      }\n    }\n\n    if (!calendar.state.loadingLevel) { // avoid initial empty state while pending\n      calendar.afterSizingTriggers._eventsPositioned = [ null ] // fire once\n    }\n  }\n\n  triggerWillRemoveSegs(segs: Seg[], isMirrors: boolean) {\n    let { calendar } = this\n\n    for (let seg of segs) {\n      calendar.trigger('eventElRemove', seg.el)\n    }\n\n    if (this.hasPublicHandlers('eventDestroy')) {\n\n      for (let seg of segs) {\n        this.publiclyTrigger('eventDestroy', [\n          {\n            event: new EventApi(\n              calendar,\n              seg.eventRange.def,\n              seg.eventRange.instance\n            ),\n            isMirror: isMirrors,\n            el: seg.el,\n            view: this as unknown as View // safe to cast because this method is only called on context.view\n          }\n        ])\n      }\n    }\n  }\n\n\n  // Pointer Interaction Utils\n  // -----------------------------------------------------------------------------------------------------------------\n\n  isValidSegDownEl(el: HTMLElement) {\n    return !(this.props as any).eventDrag && // HACK\n      !(this.props as any).eventResize && // HACK\n      !elementClosest(el, '.fc-mirror') &&\n      (this.isPopover() || !this.isInPopover(el))\n      // ^above line ensures we don't detect a seg interaction within a nested component.\n      // it's a HACK because it only supports a popover as the nested component.\n  }\n\n\n  isValidDateDownEl(el: HTMLElement) {\n    let segEl = elementClosest(el, this.fgSegSelector)\n\n    return (!segEl || segEl.classList.contains('fc-mirror')) &&\n      !elementClosest(el, '.fc-more') && // a \"more..\" link\n      !elementClosest(el, 'a[data-goto]') && // a clickable nav link\n      !this.isInPopover(el)\n  }\n\n\n  isPopover() {\n    return this.el.classList.contains('fc-popover')\n  }\n\n\n  isInPopover(el: HTMLElement) {\n    return Boolean(elementClosest(el, '.fc-popover'))\n  }\n\n}\n\nDateComponent.prototype.fgSegSelector = '.fc-event-container > *'\nDateComponent.prototype.bgSegSelector = '.fc-bgevent:not(.fc-nonbusiness)'\n","import { reducerFunc } from './reducers/types'\nimport { eventDefParserFunc } from './structs/event'\nimport { eventDefMutationApplier } from './structs/event-mutation'\nimport Calendar, { DatePointTransform, DateSpanTransform, CalendarInteractionClass, OptionChangeHandlerMap } from './Calendar'\nimport { ViewConfigInputHash } from './structs/view-config'\nimport { ViewSpec } from './structs/view-spec'\nimport View, { ViewProps } from './View'\nimport { CalendarComponentProps } from './CalendarComponent'\nimport { isPropsValidTester } from './validation'\nimport { eventDragMutationMassager, EventDropTransformers } from './interactions/event-dragging'\nimport { dateSelectionJoinTransformer } from './interactions/date-selecting'\nimport { EventResizeJoinTransforms } from './interactions/event-resizing'\nimport { ExternalDefTransform } from './interactions/external-element-dragging'\nimport { InteractionClass } from './interactions/interaction'\nimport { ThemeClass } from './theme/Theme'\nimport { EventSourceDef } from './structs/event-source'\nimport { CmdFormatterFunc } from './datelib/formatting-cmd'\nimport { RecurringType } from './structs/recurring-event'\nimport { NamedTimeZoneImplClass } from './datelib/timezone'\nimport { ElementDraggingClass } from './interactions/ElementDragging'\n\n// TODO: easier way to add new hooks? need to update a million things\n\nexport interface PluginDefInput {\n  deps?: PluginDef[]\n  reducers?: reducerFunc[]\n  eventDefParsers?: eventDefParserFunc[]\n  eventDragMutationMassagers?: eventDragMutationMassager[]\n  eventDefMutationAppliers?: eventDefMutationApplier[]\n  dateSelectionTransformers?: dateSelectionJoinTransformer[]\n  datePointTransforms?: DatePointTransform[]\n  dateSpanTransforms?: DateSpanTransform[]\n  views?: ViewConfigInputHash\n  viewPropsTransformers?: ViewPropsTransformerClass[]\n  isPropsValid?: isPropsValidTester\n  externalDefTransforms?: ExternalDefTransform[]\n  eventResizeJoinTransforms?: EventResizeJoinTransforms[]\n  viewContainerModifiers?: ViewContainerModifier[]\n  eventDropTransformers?: EventDropTransformers[]\n  componentInteractions?: InteractionClass[]\n  calendarInteractions?: CalendarInteractionClass[]\n  themeClasses?: { [themeSystemName: string]: ThemeClass }\n  eventSourceDefs?: EventSourceDef[]\n  cmdFormatter?: CmdFormatterFunc\n  recurringTypes?: RecurringType[]\n  namedTimeZonedImpl?: NamedTimeZoneImplClass\n  defaultView?: string\n  elementDraggingImpl?: ElementDraggingClass\n  optionChangeHandlers?: OptionChangeHandlerMap\n}\n\nexport interface PluginHooks {\n  reducers: reducerFunc[]\n  eventDefParsers: eventDefParserFunc[]\n  eventDragMutationMassagers: eventDragMutationMassager[]\n  eventDefMutationAppliers: eventDefMutationApplier[]\n  dateSelectionTransformers: dateSelectionJoinTransformer[]\n  datePointTransforms: DatePointTransform[]\n  dateSpanTransforms: DateSpanTransform[]\n  views: ViewConfigInputHash // TODO: parse before gets to this step?\n  viewPropsTransformers: ViewPropsTransformerClass[]\n  isPropsValid: isPropsValidTester | null\n  externalDefTransforms: ExternalDefTransform[]\n  eventResizeJoinTransforms: EventResizeJoinTransforms[]\n  viewContainerModifiers: ViewContainerModifier[]\n  eventDropTransformers: EventDropTransformers[]\n  componentInteractions: InteractionClass[]\n  calendarInteractions: CalendarInteractionClass[]\n  themeClasses: { [themeSystemName: string]: ThemeClass }\n  eventSourceDefs: EventSourceDef[]\n  cmdFormatter?: CmdFormatterFunc\n  recurringTypes: RecurringType[]\n  namedTimeZonedImpl?: NamedTimeZoneImplClass\n  defaultView: string\n  elementDraggingImpl?: ElementDraggingClass\n  optionChangeHandlers: OptionChangeHandlerMap\n}\n\nexport interface PluginDef extends PluginHooks {\n  id: string\n  deps: PluginDef[]\n}\n\nexport type ViewPropsTransformerClass = new() => ViewPropsTransformer\n\nexport interface ViewPropsTransformer {\n  transform(viewProps: ViewProps, viewSpec: ViewSpec, calendarProps: CalendarComponentProps, view: View): any\n}\n\nexport type ViewContainerModifier = (contentEl: HTMLElement, calendar: Calendar) => void\n\n\nlet uid = 0\n\nexport function createPlugin(input: PluginDefInput): PluginDef {\n  return {\n    id: String(uid++),\n    deps: input.deps || [],\n    reducers: input.reducers || [],\n    eventDefParsers: input.eventDefParsers || [],\n    eventDragMutationMassagers: input.eventDragMutationMassagers || [],\n    eventDefMutationAppliers: input.eventDefMutationAppliers || [],\n    dateSelectionTransformers: input.dateSelectionTransformers || [],\n    datePointTransforms: input.datePointTransforms || [],\n    dateSpanTransforms: input.dateSpanTransforms || [],\n    views: input.views || {},\n    viewPropsTransformers: input.viewPropsTransformers || [],\n    isPropsValid: input.isPropsValid || null,\n    externalDefTransforms: input.externalDefTransforms || [],\n    eventResizeJoinTransforms: input.eventResizeJoinTransforms || [],\n    viewContainerModifiers: input.viewContainerModifiers || [],\n    eventDropTransformers: input.eventDropTransformers || [],\n    componentInteractions: input.componentInteractions || [],\n    calendarInteractions: input.calendarInteractions || [],\n    themeClasses: input.themeClasses || {},\n    eventSourceDefs: input.eventSourceDefs || [],\n    cmdFormatter: input.cmdFormatter,\n    recurringTypes: input.recurringTypes || [],\n    namedTimeZonedImpl: input.namedTimeZonedImpl,\n    defaultView: input.defaultView || '',\n    elementDraggingImpl: input.elementDraggingImpl,\n    optionChangeHandlers: input.optionChangeHandlers || {}\n  }\n}\n\nexport class PluginSystem {\n\n  hooks: PluginHooks\n  addedHash: { [pluginId: string]: true }\n\n  constructor() {\n    this.hooks = {\n      reducers: [],\n      eventDefParsers: [],\n      eventDragMutationMassagers: [],\n      eventDefMutationAppliers: [],\n      dateSelectionTransformers: [],\n      datePointTransforms: [],\n      dateSpanTransforms: [],\n      views: {},\n      viewPropsTransformers: [],\n      isPropsValid: null,\n      externalDefTransforms: [],\n      eventResizeJoinTransforms: [],\n      viewContainerModifiers: [],\n      eventDropTransformers: [],\n      componentInteractions: [],\n      calendarInteractions: [],\n      themeClasses: {},\n      eventSourceDefs: [],\n      cmdFormatter: null,\n      recurringTypes: [],\n      namedTimeZonedImpl: null,\n      defaultView: '',\n      elementDraggingImpl: null,\n      optionChangeHandlers: {}\n    }\n    this.addedHash = {}\n  }\n\n  add(plugin: PluginDef) {\n    if (!this.addedHash[plugin.id]) {\n      this.addedHash[plugin.id] = true\n\n      for (let dep of plugin.deps) {\n        this.add(dep)\n      }\n\n      this.hooks = combineHooks(this.hooks, plugin)\n    }\n  }\n\n}\n\nfunction combineHooks(hooks0: PluginHooks, hooks1: PluginHooks): PluginHooks {\n  return {\n    reducers: hooks0.reducers.concat(hooks1.reducers),\n    eventDefParsers: hooks0.eventDefParsers.concat(hooks1.eventDefParsers),\n    eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),\n    eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),\n    dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),\n    datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),\n    dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),\n    views: { ...hooks0.views, ...hooks1.views },\n    viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),\n    isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,\n    externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),\n    eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms),\n    viewContainerModifiers: hooks0.viewContainerModifiers.concat(hooks1.viewContainerModifiers),\n    eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),\n    calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),\n    componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),\n    themeClasses: { ...hooks0.themeClasses, ...hooks1.themeClasses },\n    eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),\n    cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,\n    recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),\n    namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,\n    defaultView: hooks0.defaultView || hooks1.defaultView, // put earlier plugins FIRST\n    elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl, // \"\n    optionChangeHandlers: { ...hooks0.optionChangeHandlers, ...hooks1.optionChangeHandlers }\n  }\n}\n","import { createPlugin } from '../plugin-system'\nimport { EventSourceDef } from '../structs/event-source'\nimport { EventInput } from '../structs/event'\n\nlet eventSourceDef: EventSourceDef = {\n  ignoreRange: true,\n\n  parseMeta(raw: any): EventInput[] | null {\n    if (Array.isArray(raw)) { // short form\n      return raw\n    } else if (Array.isArray(raw.events)) {\n      return raw.events\n    }\n    return null\n  },\n\n  fetch(arg, success) {\n    success({\n      rawEvents: arg.eventSource.meta as EventInput[]\n    })\n  }\n}\n\nexport default createPlugin({\n  eventSourceDefs: [ eventSourceDef ]\n})\n","import { unpromisify } from '../util/promise'\nimport { EventSourceError, EventSourceDef } from '../structs/event-source'\nimport { EventInput } from '../structs/event'\nimport { createPlugin } from '../plugin-system'\n\nexport type EventSourceFunc = (\n  arg: {\n    start: Date\n    end: Date\n    timeZone: string\n  },\n  successCallback: (events: EventInput[]) => void,\n  failureCallback: (error: EventSourceError) => void\n) => (void | PromiseLike<EventInput[]>)\n\n\nlet eventSourceDef: EventSourceDef = {\n\n  parseMeta(raw: any): EventSourceFunc {\n    if (typeof raw === 'function') { // short form\n      return raw\n    } else if (typeof raw.events === 'function') {\n      return raw.events\n    }\n    return null\n  },\n\n  fetch(arg, success, failure) {\n    let dateEnv = arg.calendar.dateEnv\n    let func = arg.eventSource.meta as EventSourceFunc\n\n    unpromisify(\n      func.bind(null, { // the function returned from parseMeta\n        start: dateEnv.toDate(arg.range.start),\n        end: dateEnv.toDate(arg.range.end),\n        startStr: dateEnv.formatIso(arg.range.start),\n        endStr: dateEnv.formatIso(arg.range.end),\n        timeZone: dateEnv.timeZone\n      }),\n      function(rawEvents) { // success\n        success({ rawEvents }) // needs an object response\n      },\n      failure // send errorObj directly to failure callback\n    )\n  }\n\n}\n\nexport default createPlugin({\n  eventSourceDefs: [ eventSourceDef ]\n})\n","\nexport default function requestJson(method: string, url: string, params: object, successCallback, failureCallback) {\n  method = method.toUpperCase()\n\n  let body = null\n\n  if (method === 'GET') {\n    url = injectQueryStringParams(url, params)\n  } else {\n    body = encodeParams(params)\n  }\n\n  let xhr = new XMLHttpRequest()\n  xhr.open(method, url, true)\n\n  if (method !== 'GET') {\n    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')\n  }\n\n  xhr.onload = function() {\n    if (xhr.status >= 200 && xhr.status < 400) {\n      try {\n        let res = JSON.parse(xhr.responseText)\n        successCallback(res, xhr)\n      } catch (err) {\n        failureCallback('Failure parsing JSON', xhr)\n      }\n    } else {\n      failureCallback('Request failed', xhr)\n    }\n  }\n\n  xhr.onerror = function() {\n    failureCallback('Request failed', xhr)\n  }\n\n  xhr.send(body)\n}\n\nfunction injectQueryStringParams(url: string, params) {\n  return url +\n    (url.indexOf('?') === -1 ? '?' : '&') +\n    encodeParams(params)\n}\n\nfunction encodeParams(params) {\n  let parts = []\n\n  for (let key in params) {\n    parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]))\n  }\n\n  return parts.join('&')\n}\n","import requestJson from '../util/requestJson'\nimport Calendar from '../Calendar'\nimport { EventSourceDef } from '../structs/event-source'\nimport { DateRange } from '../datelib/date-range'\nimport { __assign } from 'tslib'\nimport { createPlugin } from '../plugin-system'\n\ninterface JsonFeedMeta {\n  url: string\n  method: string\n  extraParams?: any\n  startParam?: string\n  endParam?: string\n  timeZoneParam?: string\n}\n\nlet eventSourceDef: EventSourceDef = {\n\n  parseMeta(raw: any): JsonFeedMeta | null {\n    if (typeof raw === 'string') { // short form\n      raw = { url: raw }\n    } else if (!raw || typeof raw !== 'object' || !raw.url) {\n      return null\n    }\n\n    return {\n      url: raw.url,\n      method: (raw.method || 'GET').toUpperCase(),\n      extraParams: raw.extraParams,\n      startParam: raw.startParam,\n      endParam: raw.endParam,\n      timeZoneParam: raw.timeZoneParam\n    }\n  },\n\n  fetch(arg, success, failure) {\n    let meta: JsonFeedMeta = arg.eventSource.meta\n    let requestParams = buildRequestParams(meta, arg.range, arg.calendar)\n\n    requestJson(\n      meta.method, meta.url, requestParams,\n      function(rawEvents, xhr) {\n        success({ rawEvents, xhr })\n      },\n      function(errorMessage, xhr) {\n        failure({ message: errorMessage, xhr })\n      }\n    )\n  }\n\n}\n\nexport default createPlugin({\n  eventSourceDefs: [ eventSourceDef ]\n})\n\nfunction buildRequestParams(meta: JsonFeedMeta, range: DateRange, calendar: Calendar) {\n  const dateEnv = calendar.dateEnv\n  let startParam\n  let endParam\n  let timeZoneParam\n  let customRequestParams\n  let params = {}\n\n  startParam = meta.startParam\n  if (startParam == null) {\n    startParam = calendar.opt('startParam')\n  }\n\n  endParam = meta.endParam\n  if (endParam == null) {\n    endParam = calendar.opt('endParam')\n  }\n\n  timeZoneParam = meta.timeZoneParam\n  if (timeZoneParam == null) {\n    timeZoneParam = calendar.opt('timeZoneParam')\n  }\n\n  // retrieve any outbound GET/POST data from the options\n  if (typeof meta.extraParams === 'function') {\n    // supplied as a function that returns a key/value object\n    customRequestParams = meta.extraParams()\n  } else {\n    // probably supplied as a straight key/value object\n    customRequestParams = meta.extraParams || {}\n  }\n\n  __assign(params, customRequestParams)\n\n  params[startParam] = dateEnv.formatIso(range.start)\n  params[endParam] = dateEnv.formatIso(range.end)\n\n  if (dateEnv.timeZone !== 'local') {\n    params[timeZoneParam] = dateEnv.timeZone\n  }\n\n  return params\n}\n","import { startOfDay, addDays, DateMarker } from '../datelib/marker'\nimport { Duration, createDuration, subtractDurations } from '../datelib/duration'\nimport { arrayToHash } from '../util/object'\nimport { refineProps } from '../util/misc'\nimport { RecurringType, ParsedRecurring } from './recurring-event'\nimport { EventInput } from './event'\nimport { DateRange, intersectRanges } from '../datelib/date-range'\nimport { DateEnv } from '../datelib/env'\nimport { createPlugin } from '../plugin-system'\n\n/*\nAn implementation of recurring events that only supports every-day or weekly recurrences.\n*/\n\ninterface SimpleRecurringData {\n  daysOfWeek: number[] | null\n  startTime: Duration | null\n  endTime: Duration | null\n  startRecur: DateMarker | null\n  endRecur: DateMarker | null\n}\n\ninterface SimpleParsedRecurring extends ParsedRecurring {\n  typeData: SimpleRecurringData // the whole point is to make this more specific\n}\n\nlet recurring: RecurringType = {\n\n  parse(rawEvent: EventInput, leftoverProps: any, dateEnv: DateEnv): SimpleParsedRecurring | null {\n    let createMarker = dateEnv.createMarker.bind(dateEnv)\n    let processors = {\n      daysOfWeek: null,\n      startTime: createDuration,\n      endTime: createDuration,\n      startRecur: createMarker,\n      endRecur: createMarker\n    }\n\n    let props = refineProps(rawEvent, processors, {}, leftoverProps) as SimpleRecurringData\n    let anyValid = false\n\n    for (let propName in props) {\n      if (props[propName] != null) {\n        anyValid = true\n        break\n      }\n    }\n\n    if (anyValid) {\n      let duration: Duration = null\n\n      if ('duration' in leftoverProps) {\n        duration = createDuration(leftoverProps.duration)\n        delete leftoverProps.duration\n      }\n      if (!duration && props.startTime && props.endTime) {\n        duration = subtractDurations(props.endTime, props.startTime)\n      }\n\n      return {\n        allDayGuess: Boolean(!props.startTime && !props.endTime),\n        duration,\n        typeData: props // doesn't need endTime anymore but oh well\n      }\n    }\n\n    return null\n  },\n\n  expand(typeData: SimpleRecurringData, framingRange: DateRange, dateEnv: DateEnv): DateMarker[] {\n    let clippedFramingRange = intersectRanges(\n      framingRange,\n      { start: typeData.startRecur, end: typeData.endRecur }\n    )\n\n    if (clippedFramingRange) {\n      return expandRanges(\n        typeData.daysOfWeek,\n        typeData.startTime,\n        clippedFramingRange,\n        dateEnv\n      )\n    } else {\n      return []\n    }\n  }\n\n}\n\nexport default createPlugin({\n  recurringTypes: [ recurring ]\n})\n\nfunction expandRanges(\n  daysOfWeek: number[] | null,\n  startTime: Duration | null,\n  framingRange: DateRange,\n  dateEnv: DateEnv\n): DateMarker[] {\n  let dowHash: { [num: string]: true } | null = daysOfWeek ? arrayToHash(daysOfWeek) : null\n  let dayMarker = startOfDay(framingRange.start)\n  let endMarker = framingRange.end\n  let instanceStarts: DateMarker[] = []\n\n  while (dayMarker < endMarker) {\n    let instanceStart\n\n    // if everyday, or this particular day-of-week\n    if (!dowHash || dowHash[dayMarker.getUTCDay()]) {\n\n      if (startTime) {\n        instanceStart = dateEnv.add(dayMarker, startTime)\n      } else {\n        instanceStart = dayMarker\n      }\n\n      instanceStarts.push(instanceStart)\n    }\n\n    dayMarker = addDays(dayMarker, 1)\n  }\n\n  return instanceStarts\n}\n","import { createPlugin } from './plugin-system'\nimport { Calendar } from './main'\nimport { hashValuesToArray } from './util/object'\nimport { EventSource } from './structs/event-source'\n\nexport default createPlugin({\n  optionChangeHandlers: {\n    events(events, calendar, deepEquals) {\n      handleEventSources([ events ], calendar, deepEquals)\n    },\n    eventSources: handleEventSources,\n    plugins: handlePlugins\n  }\n})\n\nfunction handleEventSources(inputs, calendar: Calendar, deepEquals) {\n  let unfoundSources: EventSource[] = hashValuesToArray(calendar.state.eventSources)\n  let newInputs = []\n\n  for (let input of inputs) {\n    let inputFound = false\n\n    for (let i = 0; i < unfoundSources.length; i++) {\n      if (deepEquals(unfoundSources[i]._raw, input)) {\n        unfoundSources.splice(i, 1) // delete\n        inputFound = true\n        break\n      }\n    }\n\n    if (!inputFound) {\n      newInputs.push(input)\n    }\n  }\n\n  for (let unfoundSource of unfoundSources) {\n    calendar.dispatch({\n      type: 'REMOVE_EVENT_SOURCE',\n      sourceId: unfoundSource.sourceId\n    })\n  }\n\n  for (let newInput of newInputs) {\n    console.log('add new event source!!!', newInput)\n    calendar.addEventSource(newInput)\n  }\n}\n\n// shortcoming: won't remove plugins\nfunction handlePlugins(inputs, calendar: Calendar) {\n  calendar.addPluginInputs(inputs) // will gracefully handle duplicates\n}\n","import { mergeProps } from './util/object'\nimport { PluginDef } from './plugin-system'\nimport ArrayEventSourcePlugin from './event-sources/array-event-source'\nimport FuncEventSourcePlugin from './event-sources/func-event-source'\nimport JsonFeedEventSourcePlugin from './event-sources/json-feed-event-source'\nimport SimpleRecurrencePlugin from './structs/recurring-event-simple'\nimport { capitaliseFirstLetter } from './util/misc'\nimport DefaultOptionChangeHandlers from './option-change-handlers'\n\nexport const config = {} as any // TODO: make these options\n\nexport const globalDefaults = {\n\n  defaultRangeSeparator: ' - ',\n  titleRangeSeparator: ' \\u2013 ', // en dash\n\n  defaultTimedEventDuration: '01:00:00',\n  defaultAllDayEventDuration: { day: 1 },\n  forceEventDuration: false,\n  nextDayThreshold: '00:00:00',\n\n  // display\n  columnHeader: true,\n  defaultView: '',\n  aspectRatio: 1.35,\n  header: {\n    left: 'title',\n    center: '',\n    right: 'today prev,next'\n  },\n  weekends: true,\n  weekNumbers: false,\n  weekNumberCalculation: 'local',\n\n  editable: false,\n\n  // nowIndicator: false,\n\n  scrollTime: '06:00:00',\n  minTime: '00:00:00',\n  maxTime: '24:00:00',\n  showNonCurrentDates: true,\n\n  // event ajax\n  lazyFetching: true,\n  startParam: 'start',\n  endParam: 'end',\n  timeZoneParam: 'timeZone',\n\n  timeZone: 'local', // TODO: throw error if given falsy value?\n\n  // allDayDefault: undefined,\n\n  // locale\n  locales: [],\n  locale: '', // blank values means it will compute based off locales[]\n  // dir: will get this from the default locale\n  // buttonIcons: null,\n\n  // allows setting a min-height to the event segment to prevent short events overlapping each other\n  timeGridEventMinHeight: 0,\n\n  themeSystem: 'standard',\n\n  // eventResizableFromStart: false,\n  dragRevertDuration: 500,\n  dragScroll: true,\n\n  allDayMaintainDuration: false,\n\n  // selectable: false,\n  unselectAuto: true,\n  // selectMinDistance: 0,\n\n  dropAccept: '*',\n\n  eventOrder: 'start,-duration,allDay,title',\n  // ^ if start tie, longer events go before shorter. final tie-breaker is title text\n\n  // rerenderDelay: null,\n\n  eventLimit: false,\n  eventLimitClick: 'popover',\n  dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },\n\n  handleWindowResize: true,\n  windowResizeDelay: 100, // milliseconds before an updateSize happens\n\n  longPressDelay: 1000,\n  eventDragMinDistance: 5 // only applies to mouse\n\n}\n\n\nexport const rtlDefaults = { // right-to-left defaults\n  header: { // TODO: smarter solution (first/center/last ?)\n    left: 'next,prev today',\n    center: '',\n    right: 'title'\n  },\n  buttonIcons: {\n    // TODO: make RTL support the responibility of the theme\n    prev: 'fc-icon-chevron-right',\n    next: 'fc-icon-chevron-left',\n    prevYear: 'fc-icon-chevrons-right',\n    nextYear: 'fc-icon-chevrons-left'\n  }\n}\n\n\nlet complexOptions = [ // names of options that are objects whose properties should be combined\n  'header',\n  'footer',\n  'buttonText',\n  'buttonIcons'\n]\n\n\n// Merges an array of option objects into a single object\nexport function mergeOptions(optionObjs) {\n  return mergeProps(optionObjs, complexOptions)\n}\n\n\n\n// TODO: move this stuff to a \"plugin\"-related file...\n\nconst INTERNAL_PLUGINS: PluginDef[] = [\n  ArrayEventSourcePlugin,\n  FuncEventSourcePlugin,\n  JsonFeedEventSourcePlugin,\n  SimpleRecurrencePlugin,\n  DefaultOptionChangeHandlers\n]\n\nexport function refinePluginDefs(pluginInputs: any[]): PluginDef[] {\n  let plugins = []\n\n  for (let pluginInput of pluginInputs) {\n\n    if (typeof pluginInput === 'string') {\n      let globalName = 'FullCalendar' + capitaliseFirstLetter(pluginInput)\n\n      if (!window[globalName]) {\n        console.warn('Plugin file not loaded for ' + pluginInput)\n      } else {\n        plugins.push(window[globalName].default) // is an ES6 module\n      }\n\n    } else {\n      plugins.push(pluginInput)\n    }\n  }\n\n  return INTERNAL_PLUGINS.concat(plugins)\n}\n","import { mergeProps, hashValuesToArray } from '../util/object'\nimport { __assign } from 'tslib'\n\nexport type LocaleCodeArg = string | string[]\nexport type LocaleSingularArg = LocaleCodeArg | RawLocale\n\nexport interface Locale {\n  codeArg: LocaleCodeArg\n  codes: string[]\n  week: { dow: number, doy: number }\n  simpleNumberFormat: Intl.NumberFormat\n  options: any\n}\n\nexport interface RawLocale {\n  code: string\n  [otherProp: string]: any\n}\n\nexport type RawLocaleMap = { [code: string]: RawLocale }\n\nexport interface RawLocaleInfo {\n  map: RawLocaleMap\n  defaultCode: string\n}\n\nconst RAW_EN_LOCALE = {\n  code: 'en',\n  week: {\n    dow: 0, // Sunday is the first day of the week\n    doy: 4 // 4 days need to be within the year to be considered the first week\n  },\n  dir: 'ltr',\n  buttonText: {\n    prev: 'prev',\n    next: 'next',\n    prevYear: 'prev year',\n    nextYear: 'next year',\n    year: 'year',\n    today: 'today',\n    month: 'month',\n    week: 'week',\n    day: 'day',\n    list: 'list'\n  },\n  weekLabel: 'W',\n  allDayText: 'all-day',\n  eventLimitText: 'more',\n  noEventsMessage: 'No events to display'\n}\n\nexport function parseRawLocales(explicitRawLocales: RawLocale[]): RawLocaleInfo {\n  let defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en'\n  let globalArray = window['FullCalendarLocalesAll'] || [] // from locales-all.js\n  let globalObject = window['FullCalendarLocales'] || {} // from locales/*.js. keys are meaningless\n  let allRawLocales = globalArray.concat( // globalArray is low prio\n    hashValuesToArray(globalObject), // medium prio\n    explicitRawLocales // highest prio\n  )\n  let rawLocaleMap = {\n    en: RAW_EN_LOCALE // necessary?\n  }\n\n  for (let rawLocale of allRawLocales) {\n    rawLocaleMap[rawLocale.code] = rawLocale\n  }\n\n  return {\n    map: rawLocaleMap,\n    defaultCode\n  }\n}\n\nexport function buildLocale(inputSingular: LocaleSingularArg, available: RawLocaleMap) {\n  if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {\n    return parseLocale(\n      inputSingular.code,\n      [ inputSingular.code ],\n      inputSingular\n    )\n  } else {\n    return queryLocale(inputSingular, available)\n  }\n}\n\nfunction queryLocale(codeArg: LocaleCodeArg, available: RawLocaleMap): Locale {\n  let codes = [].concat(codeArg || []) // will convert to array\n  let raw = queryRawLocale(codes, available) || RAW_EN_LOCALE\n\n  return parseLocale(codeArg, codes, raw)\n}\n\nfunction queryRawLocale(codes: string[], available: RawLocaleMap): RawLocale {\n  for (let i = 0; i < codes.length; i++) {\n    let parts = codes[i].toLocaleLowerCase().split('-')\n\n    for (let j = parts.length; j > 0; j--) {\n      let simpleId = parts.slice(0, j).join('-')\n\n      if (available[simpleId]) {\n        return available[simpleId]\n      }\n    }\n  }\n  return null\n}\n\nfunction parseLocale(codeArg: LocaleCodeArg, codes: string[], raw: RawLocale): Locale {\n  let merged = mergeProps([ RAW_EN_LOCALE, raw ], [ 'buttonText' ])\n\n  delete merged.code // don't want this part of the options\n\n  let week = merged.week\n  delete merged.week\n\n  return {\n    codeArg,\n    codes,\n    week,\n    simpleNumberFormat: new Intl.NumberFormat(codeArg),\n    options: merged\n  }\n}\n","import { firstDefined } from './util/misc'\nimport { globalDefaults, rtlDefaults, mergeOptions } from './options'\nimport { parseRawLocales, buildLocale } from './datelib/locale'\nimport { __assign } from 'tslib'\n\n\nexport default class OptionsManager {\n\n  dirDefaults: any // option defaults related to LTR or RTL\n  localeDefaults: any // option defaults related to current locale\n  overrides: any // option overrides given to the fullCalendar constructor\n  dynamicOverrides: any // options set with dynamic setter method. higher precedence than view overrides.\n  computed: any\n\n\n  constructor(overrides) {\n    this.overrides = { ...overrides } // make a copy\n    this.dynamicOverrides = {}\n    this.compute()\n  }\n\n\n  mutate(updates, removals: string[], isDynamic?: boolean) {\n    let overrideHash = isDynamic ? this.dynamicOverrides : this.overrides\n\n    __assign(overrideHash, updates)\n\n    for (let propName of removals) {\n      delete overrideHash[propName]\n    }\n\n    this.compute()\n  }\n\n\n  // Computes the flattened options hash for the calendar and assigns to `this.options`.\n  // Assumes this.overrides and this.dynamicOverrides have already been initialized.\n  compute() {\n\n    // TODO: not a very efficient system\n    let locales = firstDefined( // explicit locale option given?\n      this.dynamicOverrides.locales,\n      this.overrides.locales,\n      globalDefaults.locales\n    )\n    let locale = firstDefined( // explicit locales option given?\n      this.dynamicOverrides.locale,\n      this.overrides.locale,\n      globalDefaults.locale\n    )\n    let available = parseRawLocales(locales)\n    let localeDefaults = buildLocale(locale || available.defaultCode, available.map).options\n\n    let dir = firstDefined( // based on options computed so far, is direction RTL?\n      this.dynamicOverrides.dir,\n      this.overrides.dir,\n      localeDefaults.dir\n    )\n\n    let dirDefaults = dir === 'rtl' ? rtlDefaults : {}\n\n    this.dirDefaults = dirDefaults\n    this.localeDefaults = localeDefaults\n\n    this.computed = mergeOptions([ // merge defaults and overrides. lowest to highest precedence\n      globalDefaults, // global defaults\n      dirDefaults,\n      localeDefaults,\n      this.overrides,\n      this.dynamicOverrides\n    ])\n  }\n\n}\n","import { DateMarker, arrayToUtcDate, dateToUtcArray } from './marker'\n\nexport interface CalendarSystem {\n  getMarkerYear(d: DateMarker): number\n  getMarkerMonth(d: DateMarker): number\n  getMarkerDay(d: DateMarker): number\n  arrayToMarker(arr: number[]): DateMarker\n  markerToArray(d: DateMarker): number[]\n}\n\n\nlet calendarSystemClassMap = {}\n\nexport function registerCalendarSystem(name, theClass) {\n  calendarSystemClassMap[name] = theClass\n}\n\nexport function createCalendarSystem(name) {\n  return new calendarSystemClassMap[name]()\n}\n\n\nclass GregorianCalendarSystem implements CalendarSystem {\n\n  getMarkerYear(d: DateMarker) {\n    return d.getUTCFullYear()\n  }\n\n  getMarkerMonth(d: DateMarker) {\n    return d.getUTCMonth()\n  }\n\n  getMarkerDay(d: DateMarker) {\n    return d.getUTCDate()\n  }\n\n  arrayToMarker(arr) {\n    return arrayToUtcDate(arr)\n  }\n\n  markerToArray(marker) {\n    return dateToUtcArray(marker)\n  }\n\n}\n\nregisterCalendarSystem('gregory', GregorianCalendarSystem)\n","import { isValidDate } from './marker'\n\n\nconst ISO_RE = /^\\s*(\\d{4})(-(\\d{2})(-(\\d{2})([T ](\\d{2}):(\\d{2})(:(\\d{2})(\\.(\\d+))?)?(Z|(([-+])(\\d{2})(:?(\\d{2}))?))?)?)?)?$/\n\nexport function parse(str) {\n  let m = ISO_RE.exec(str)\n\n  if (m) {\n    let marker = new Date(Date.UTC(\n      Number(m[1]),\n      m[3] ? Number(m[3]) - 1 : 0,\n      Number(m[5] || 1),\n      Number(m[7] || 0),\n      Number(m[8] || 0),\n      Number(m[10] || 0),\n      m[12] ? Number('0.' + m[12]) * 1000 : 0\n    ))\n\n    if (isValidDate(marker)) {\n      let timeZoneOffset = null\n\n      if (m[13]) {\n        timeZoneOffset = (m[15] === '-' ? -1 : 1) * (\n          Number(m[16] || 0) * 60 +\n          Number(m[18] || 0)\n        )\n      }\n\n      return {\n        marker,\n        isTimeUnspecified: !m[6],\n        timeZoneOffset\n      }\n    }\n  }\n\n  return null\n}\n","import {\n  DateMarker, addMs,\n  diffHours, diffMinutes, diffSeconds, diffWholeWeeks, diffWholeDays,\n  startOfDay, startOfHour, startOfMinute, startOfSecond,\n  weekOfYear, arrayToUtcDate, dateToUtcArray, dateToLocalArray, arrayToLocalDate, timeAsMs, isValidDate\n} from './marker'\nimport { CalendarSystem, createCalendarSystem } from './calendar-system'\nimport { Locale } from './locale'\nimport { NamedTimeZoneImpl, NamedTimeZoneImplClass } from './timezone'\nimport { Duration, asRoughYears, asRoughMonths, asRoughDays, asRoughMs } from './duration'\nimport { DateFormatter, buildIsoString } from './formatting'\nimport { parse } from './parsing'\nimport { isInt } from '../util/misc'\nimport { CmdFormatterFunc } from './formatting-cmd'\n\nexport interface DateEnvSettings {\n  timeZone: string\n  namedTimeZoneImpl?: NamedTimeZoneImplClass\n  calendarSystem: string\n  locale: Locale\n  weekNumberCalculation?: any\n  firstDay?: any,\n  weekLabel?: string,\n  cmdFormatter?: CmdFormatterFunc\n}\n\nexport type DateInput = Date | string | number | number[]\n\nexport interface DateMarkerMeta {\n  marker: DateMarker\n  isTimeUnspecified: boolean\n  forcedTzo: number | null\n}\n\n\nexport class DateEnv {\n\n  timeZone: string\n  namedTimeZoneImpl: NamedTimeZoneImpl\n  canComputeOffset: boolean\n\n  calendarSystem: CalendarSystem\n  locale: Locale\n  weekDow: number // which day begins the week\n  weekDoy: number // which day must be within the year, for computing the first week number\n  weekNumberFunc: any\n  weekLabel: string // DON'T LIKE how options are confused with local\n  cmdFormatter?: CmdFormatterFunc\n\n\n  constructor(settings: DateEnvSettings) {\n    let timeZone = this.timeZone = settings.timeZone\n    let isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC'\n\n    if (settings.namedTimeZoneImpl && isNamedTimeZone) {\n      this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone)\n    }\n\n    this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl)\n\n    this.calendarSystem = createCalendarSystem(settings.calendarSystem)\n    this.locale = settings.locale\n    this.weekDow = settings.locale.week.dow\n    this.weekDoy = settings.locale.week.doy\n\n    if (settings.weekNumberCalculation === 'ISO') {\n      this.weekDow = 1\n      this.weekDoy = 4\n    } else if (typeof settings.firstDay === 'number') {\n      this.weekDow = settings.firstDay\n    }\n\n    if (typeof settings.weekNumberCalculation === 'function') {\n      this.weekNumberFunc = settings.weekNumberCalculation\n    }\n\n    this.weekLabel = settings.weekLabel != null ? settings.weekLabel : settings.locale.options.weekLabel\n\n    this.cmdFormatter = settings.cmdFormatter\n  }\n\n\n  // Creating / Parsing\n\n  createMarker(input: DateInput): DateMarker {\n    let meta = this.createMarkerMeta(input)\n    if (meta === null) {\n      return null\n    }\n    return meta.marker\n  }\n\n  createNowMarker(): DateMarker {\n    if (this.canComputeOffset) {\n      return this.timestampToMarker(new Date().valueOf())\n    } else {\n      // if we can't compute the current date val for a timezone,\n      // better to give the current local date vals than UTC\n      return arrayToUtcDate(dateToLocalArray(new Date()))\n    }\n  }\n\n  createMarkerMeta(input: DateInput): DateMarkerMeta {\n\n    if (typeof input === 'string') {\n      return this.parse(input)\n    }\n\n    let marker = null\n\n    if (typeof input === 'number') {\n      marker = this.timestampToMarker(input)\n    } else if (input instanceof Date) {\n      input = input.valueOf()\n\n      if (!isNaN(input)) {\n        marker = this.timestampToMarker(input)\n      }\n    } else if (Array.isArray(input)) {\n      marker = arrayToUtcDate(input)\n    }\n\n    if (marker === null || !isValidDate(marker)) {\n      return null\n    }\n\n    return { marker, isTimeUnspecified: false, forcedTzo: null }\n  }\n\n  parse(s: string) {\n    let parts = parse(s)\n    if (parts === null) {\n      return null\n    }\n\n    let marker = parts.marker\n    let forcedTzo = null\n\n    if (parts.timeZoneOffset !== null) {\n      if (this.canComputeOffset) {\n        marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000)\n      } else {\n        forcedTzo = parts.timeZoneOffset\n      }\n    }\n\n    return { marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo }\n  }\n\n\n  // Accessors\n\n  getYear(marker: DateMarker): number {\n    return this.calendarSystem.getMarkerYear(marker)\n  }\n\n  getMonth(marker: DateMarker): number {\n    return this.calendarSystem.getMarkerMonth(marker)\n  }\n\n\n  // Adding / Subtracting\n\n  add(marker: DateMarker, dur: Duration): DateMarker {\n    let a = this.calendarSystem.markerToArray(marker)\n    a[0] += dur.years\n    a[1] += dur.months\n    a[2] += dur.days\n    a[6] += dur.milliseconds\n    return this.calendarSystem.arrayToMarker(a)\n  }\n\n  subtract(marker: DateMarker, dur: Duration): DateMarker {\n    let a = this.calendarSystem.markerToArray(marker)\n    a[0] -= dur.years\n    a[1] -= dur.months\n    a[2] -= dur.days\n    a[6] -= dur.milliseconds\n    return this.calendarSystem.arrayToMarker(a)\n  }\n\n  addYears(marker: DateMarker, n: number) {\n    let a = this.calendarSystem.markerToArray(marker)\n    a[0] += n\n    return this.calendarSystem.arrayToMarker(a)\n  }\n\n  addMonths(marker: DateMarker, n: number) {\n    let a = this.calendarSystem.markerToArray(marker)\n    a[1] += n\n    return this.calendarSystem.arrayToMarker(a)\n  }\n\n\n  // Diffing Whole Units\n\n  diffWholeYears(m0: DateMarker, m1: DateMarker): number {\n    let { calendarSystem } = this\n\n    if (\n      timeAsMs(m0) === timeAsMs(m1) &&\n      calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&\n      calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)\n    ) {\n      return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)\n    }\n    return null\n  }\n\n  diffWholeMonths(m0: DateMarker, m1: DateMarker): number {\n    let { calendarSystem } = this\n\n    if (\n      timeAsMs(m0) === timeAsMs(m1) &&\n      calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)\n    ) {\n      return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +\n          (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12\n    }\n    return null\n  }\n\n\n  // Range / Duration\n\n  greatestWholeUnit(m0: DateMarker, m1: DateMarker) {\n    let n = this.diffWholeYears(m0, m1)\n\n    if (n !== null) {\n      return { unit: 'year', value: n }\n    }\n\n    n = this.diffWholeMonths(m0, m1)\n\n    if (n !== null) {\n      return { unit: 'month', value: n }\n    }\n\n    n = diffWholeWeeks(m0, m1)\n\n    if (n !== null) {\n      return { unit: 'week', value: n }\n    }\n\n    n = diffWholeDays(m0, m1)\n\n    if (n !== null) {\n      return { unit: 'day', value: n }\n    }\n\n    n = diffHours(m0, m1)\n\n    if (isInt(n)) {\n      return { unit: 'hour', value: n }\n    }\n\n    n = diffMinutes(m0, m1)\n\n    if (isInt(n)) {\n      return { unit: 'minute', value: n }\n    }\n\n    n = diffSeconds(m0, m1)\n\n    if (isInt(n)) {\n      return { unit: 'second', value: n }\n    }\n\n    return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() }\n  }\n\n  countDurationsBetween(m0: DateMarker, m1: DateMarker, d: Duration) {\n    // TODO: can use greatestWholeUnit\n    let diff\n\n    if (d.years) {\n      diff = this.diffWholeYears(m0, m1)\n      if (diff !== null) {\n        return diff / asRoughYears(d)\n      }\n    }\n\n    if (d.months) {\n      diff = this.diffWholeMonths(m0, m1)\n      if (diff !== null) {\n        return diff / asRoughMonths(d)\n      }\n    }\n\n    if (d.days) {\n      diff = diffWholeDays(m0, m1)\n      if (diff !== null) {\n        return diff / asRoughDays(d)\n      }\n    }\n\n    return (m1.valueOf() - m0.valueOf()) / asRoughMs(d)\n  }\n\n\n  // Start-Of\n\n  startOf(m: DateMarker, unit: string) {\n    if (unit === 'year') {\n      return this.startOfYear(m)\n    } else if (unit === 'month') {\n      return this.startOfMonth(m)\n    } else if (unit === 'week') {\n      return this.startOfWeek(m)\n    } else if (unit === 'day') {\n      return startOfDay(m)\n    } else if (unit === 'hour') {\n      return startOfHour(m)\n    } else if (unit === 'minute') {\n      return startOfMinute(m)\n    } else if (unit === 'second') {\n      return startOfSecond(m)\n    }\n  }\n\n  startOfYear(m: DateMarker): DateMarker {\n    return this.calendarSystem.arrayToMarker([\n      this.calendarSystem.getMarkerYear(m)\n    ])\n  }\n\n  startOfMonth(m: DateMarker): DateMarker {\n    return this.calendarSystem.arrayToMarker([\n      this.calendarSystem.getMarkerYear(m),\n      this.calendarSystem.getMarkerMonth(m)\n    ])\n  }\n\n  startOfWeek(m: DateMarker): DateMarker {\n    return this.calendarSystem.arrayToMarker([\n      this.calendarSystem.getMarkerYear(m),\n      this.calendarSystem.getMarkerMonth(m),\n      m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7)\n    ])\n  }\n\n\n  // Week Number\n\n  computeWeekNumber(marker: DateMarker): number {\n    if (this.weekNumberFunc) {\n      return this.weekNumberFunc(this.toDate(marker))\n    } else {\n      return weekOfYear(marker, this.weekDow, this.weekDoy)\n    }\n  }\n\n  // TODO: choke on timeZoneName: long\n  format(marker: DateMarker, formatter: DateFormatter, dateOptions: { forcedTzo?: number } = {}) {\n    return formatter.format(\n      {\n        marker: marker,\n        timeZoneOffset: dateOptions.forcedTzo != null ?\n          dateOptions.forcedTzo :\n          this.offsetForMarker(marker)\n      },\n      this\n    )\n  }\n\n  formatRange(start: DateMarker, end: DateMarker, formatter: DateFormatter, dateOptions: { forcedStartTzo?: number, forcedEndTzo?: number, isEndExclusive?: boolean } = {}) {\n\n    if (dateOptions.isEndExclusive) {\n      end = addMs(end, -1)\n    }\n\n    return formatter.formatRange(\n      {\n        marker: start,\n        timeZoneOffset: dateOptions.forcedStartTzo != null ?\n          dateOptions.forcedStartTzo :\n          this.offsetForMarker(start)\n      },\n      {\n        marker: end,\n        timeZoneOffset: dateOptions.forcedEndTzo != null ?\n          dateOptions.forcedEndTzo :\n          this.offsetForMarker(end)\n      },\n      this\n    )\n  }\n\n  formatIso(marker: DateMarker, extraOptions: any = {}) {\n    let timeZoneOffset = null\n\n    if (!extraOptions.omitTimeZoneOffset) {\n      if (extraOptions.forcedTzo != null) {\n        timeZoneOffset = extraOptions.forcedTzo\n      } else {\n        timeZoneOffset = this.offsetForMarker(marker)\n      }\n    }\n\n    return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime)\n  }\n\n\n  // TimeZone\n\n  timestampToMarker(ms: number) {\n    if (this.timeZone === 'local') {\n      return arrayToUtcDate(dateToLocalArray(new Date(ms)))\n    } else if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {\n      return new Date(ms)\n    } else {\n      return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms))\n    }\n  }\n\n  offsetForMarker(m: DateMarker) {\n    if (this.timeZone === 'local') {\n      return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset() // convert \"inverse\" offset to \"normal\" offset\n    } else if (this.timeZone === 'UTC') {\n      return 0\n    } else if (this.namedTimeZoneImpl) {\n      return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m))\n    }\n    return null\n  }\n\n\n  // Conversion\n\n  toDate(m: DateMarker, forcedTzo?: number): Date {\n    if (this.timeZone === 'local') {\n      return arrayToLocalDate(dateToUtcArray(m))\n    } else if (this.timeZone === 'UTC') {\n      return new Date(m.valueOf()) // make sure it's a copy\n    } else if (!this.namedTimeZoneImpl) {\n      return new Date(m.valueOf() - (forcedTzo || 0))\n    } else {\n      return new Date(\n        m.valueOf() -\n        this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60 // convert minutes -> ms\n      )\n    }\n  }\n\n}\n","import { refineProps } from '../util/misc'\nimport { EventInput } from './event'\nimport Calendar from '../Calendar'\nimport { DateRange } from '../datelib/date-range'\nimport { EventSourceFunc } from '../event-sources/func-event-source'\nimport { EventUi, processUnscopedUiProps } from '../component/event-ui'\nimport { ConstraintInput, AllowFunc } from '../validation'\n\n/*\nParsing and normalization of the EventSource data type, which defines how event data is fetched.\nContains the plugin system for defining new types if event sources.\n\nTODO: \"EventSource\" is the same name as a built-in type in TypeScript. Rethink.\n*/\n\nexport type EventSourceError = {\n  message: string\n  response?: any // an XHR or something like it\n  [otherProp: string]: any\n}\n\nexport type EventInputTransformer = (eventInput: EventInput) => EventInput | null\nexport type EventSourceSuccessResponseHandler = (rawData: any, response: any) => EventInput[] | void\nexport type EventSourceErrorResponseHandler = (error: EventSourceError) => void\n\nexport interface ExtendedEventSourceInput {\n  id?: string | number // only accept number?\n  allDayDefault?: boolean\n  eventDataTransform?: EventInputTransformer\n\n  // array or function (TODO: move this to array-event-source/func-event-source?)\n  events?: EventInput[] | EventSourceFunc\n\n  // json feed (TODO: how to move this to json-feed-event-source?)\n  url?: string\n  method?: string\n  extraParams?: object | (() => object)\n  startParam?: string\n  endParam?: string\n  timeZoneParam?: string\n\n  // for any network-related sources\n  success?: EventSourceSuccessResponseHandler\n  failure?: EventSourceErrorResponseHandler\n\n  editable?: boolean\n  startEditable?: boolean\n  durationEditable?: boolean\n  constraint?: ConstraintInput\n  overlap?: boolean\n  allow?: AllowFunc\n  className?: string[] | string\n  classNames?: string[] | string\n  backgroundColor?: string\n  borderColor?: string\n  textColor?: string\n  color?: string\n\n  [otherProp: string]: any // in case plugins want more props\n}\n\nexport type EventSourceInput =\n  ExtendedEventSourceInput | // object in extended form\n  EventSourceFunc | // just a function\n  string // a URL for a JSON feed\n\nexport interface EventSource {\n  _raw: any\n  sourceId: string\n  sourceDefId: number // one of the few IDs that's a NUMBER not a string\n  meta: any\n  publicId: string\n  isFetching: boolean\n  latestFetchId: string\n  fetchRange: DateRange | null\n  allDayDefault: boolean | null\n  eventDataTransform: EventInputTransformer\n  ui: EventUi\n  success: EventSourceSuccessResponseHandler | null\n  failure: EventSourceErrorResponseHandler | null\n  extendedProps: any // undocumented\n}\n\nexport type EventSourceHash = { [sourceId: string]: EventSource }\n\nexport type EventSourceFetcher = (\n  arg: {\n    eventSource: EventSource\n    calendar: Calendar\n    range: DateRange\n  },\n  success: (res: { rawEvents: EventInput[], xhr?: XMLHttpRequest }) => void,\n  failure: (error: EventSourceError) => void\n) => (void | PromiseLike<EventInput[]>)\n\nexport interface EventSourceDef {\n  ignoreRange?: boolean\n  parseMeta: (raw: EventSourceInput) => object | null\n  fetch: EventSourceFetcher\n}\n\nconst SIMPLE_SOURCE_PROPS = {\n  id: String,\n  allDayDefault: Boolean,\n  eventDataTransform: Function,\n  success: Function,\n  failure: Function\n}\n\nlet uid = 0\n\nexport function doesSourceNeedRange(eventSource: EventSource, calendar: Calendar) {\n  let defs = calendar.pluginSystem.hooks.eventSourceDefs\n\n  return !defs[eventSource.sourceDefId].ignoreRange\n}\n\nexport function parseEventSource(raw: EventSourceInput, calendar: Calendar): EventSource | null {\n  let defs = calendar.pluginSystem.hooks.eventSourceDefs\n\n  for (let i = defs.length - 1; i >= 0; i--) { // later-added plugins take precedence\n    let def = defs[i]\n    let meta = def.parseMeta(raw)\n\n    if (meta) {\n      let res = parseEventSourceProps(\n        typeof raw === 'object' ? raw : {},\n        meta,\n        i,\n        calendar\n      )\n\n      res._raw = raw\n      return res\n    }\n  }\n\n  return null\n}\n\nfunction parseEventSourceProps(raw: ExtendedEventSourceInput, meta: object, sourceDefId: number, calendar: Calendar): EventSource {\n  let leftovers0 = {}\n  let props = refineProps(raw, SIMPLE_SOURCE_PROPS, {}, leftovers0)\n  let leftovers1 = {}\n  let ui = processUnscopedUiProps(leftovers0, calendar, leftovers1)\n\n  props.isFetching = false\n  props.latestFetchId = ''\n  props.fetchRange = null\n  props.publicId = String(raw.id || '')\n  props.sourceId = String(uid++)\n  props.sourceDefId = sourceDefId\n  props.meta = meta\n  props.ui = ui\n  props.extendedProps = leftovers1\n\n  return props as EventSource\n}\n","import { EventSource, EventSourceHash, doesSourceNeedRange } from '../structs/event-source'\nimport Calendar from '../Calendar'\nimport { arrayToHash, filterHash } from '../util/object'\nimport { DateRange } from '../datelib/date-range'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { Action } from './types'\n\nexport default function(eventSources: EventSourceHash, action: Action, dateProfile: DateProfile | null, calendar: Calendar): EventSourceHash {\n  switch (action.type) {\n\n    case 'ADD_EVENT_SOURCES': // already parsed\n      return addSources(eventSources, action.sources, dateProfile ? dateProfile.activeRange : null, calendar)\n\n    case 'REMOVE_EVENT_SOURCE':\n      return removeSource(eventSources, action.sourceId)\n\n    case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n    case 'NEXT':\n    case 'SET_DATE':\n    case 'SET_VIEW_TYPE':\n      if (dateProfile) {\n        return fetchDirtySources(eventSources, dateProfile.activeRange, calendar)\n      } else {\n        return eventSources\n      }\n\n    case 'FETCH_EVENT_SOURCES':\n    case 'CHANGE_TIMEZONE':\n      return fetchSourcesByIds(\n        eventSources,\n        (action as any).sourceIds ?\n          arrayToHash((action as any).sourceIds) :\n          excludeStaticSources(eventSources, calendar),\n        dateProfile ? dateProfile.activeRange : null,\n        calendar\n      )\n\n    case 'RECEIVE_EVENTS':\n    case 'RECEIVE_EVENT_ERROR':\n      return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange)\n\n    case 'REMOVE_ALL_EVENT_SOURCES':\n      return {}\n\n    default:\n      return eventSources\n  }\n}\n\n\nlet uid = 0\n\n\nfunction addSources(eventSourceHash: EventSourceHash, sources: EventSource[], fetchRange: DateRange | null, calendar: Calendar): EventSourceHash {\n  let hash: EventSourceHash = {}\n\n  for (let source of sources) {\n    hash[source.sourceId] = source\n  }\n\n  if (fetchRange) {\n    hash = fetchDirtySources(hash, fetchRange, calendar)\n  }\n\n  return { ...eventSourceHash, ...hash }\n}\n\n\nfunction removeSource(eventSourceHash: EventSourceHash, sourceId: string): EventSourceHash {\n  return filterHash(eventSourceHash, function(eventSource: EventSource) {\n    return eventSource.sourceId !== sourceId\n  })\n}\n\n\nfunction fetchDirtySources(sourceHash: EventSourceHash, fetchRange: DateRange, calendar: Calendar): EventSourceHash {\n  return fetchSourcesByIds(\n    sourceHash,\n    filterHash(sourceHash, function(eventSource) {\n      return isSourceDirty(eventSource, fetchRange, calendar)\n    }),\n    fetchRange,\n    calendar\n  )\n}\n\n\nfunction isSourceDirty(eventSource: EventSource, fetchRange: DateRange, calendar: Calendar) {\n\n  if (!doesSourceNeedRange(eventSource, calendar)) {\n    return !eventSource.latestFetchId\n  } else {\n    return !calendar.opt('lazyFetching') ||\n      !eventSource.fetchRange ||\n      fetchRange.start < eventSource.fetchRange.start ||\n      fetchRange.end > eventSource.fetchRange.end\n  }\n}\n\n\nfunction fetchSourcesByIds(\n  prevSources: EventSourceHash,\n  sourceIdHash: { [sourceId: string]: any },\n  fetchRange: DateRange,\n  calendar: Calendar\n): EventSourceHash {\n  let nextSources: EventSourceHash = {}\n\n  for (let sourceId in prevSources) {\n    let source = prevSources[sourceId]\n\n    if (sourceIdHash[sourceId]) {\n      nextSources[sourceId] = fetchSource(source, fetchRange, calendar)\n    } else {\n      nextSources[sourceId] = source\n    }\n  }\n\n  return nextSources\n}\n\n\nfunction fetchSource(eventSource: EventSource, fetchRange: DateRange, calendar: Calendar) {\n  let sourceDef = calendar.pluginSystem.hooks.eventSourceDefs[eventSource.sourceDefId]\n  let fetchId = String(uid++)\n\n  sourceDef.fetch(\n    {\n      eventSource,\n      calendar,\n      range: fetchRange\n    },\n    function(res) {\n      let { rawEvents } = res\n      let calSuccess = calendar.opt('eventSourceSuccess')\n      let calSuccessRes\n      let sourceSuccessRes\n\n      if (eventSource.success) {\n        sourceSuccessRes = eventSource.success(rawEvents, res.xhr)\n      }\n      if (calSuccess) {\n        calSuccessRes = calSuccess(rawEvents, res.xhr)\n      }\n\n      rawEvents = sourceSuccessRes || calSuccessRes || rawEvents\n\n      calendar.dispatch({\n        type: 'RECEIVE_EVENTS',\n        sourceId: eventSource.sourceId,\n        fetchId,\n        fetchRange,\n        rawEvents\n      })\n    },\n    function(error) {\n      let callFailure = calendar.opt('eventSourceFailure')\n\n      console.warn(error.message, error)\n\n      if (eventSource.failure) {\n        eventSource.failure(error)\n      }\n      if (callFailure) {\n        callFailure(error)\n      }\n\n      calendar.dispatch({\n        type: 'RECEIVE_EVENT_ERROR',\n        sourceId: eventSource.sourceId,\n        fetchId,\n        fetchRange,\n        error\n      })\n    }\n  )\n\n  return {\n    ...eventSource,\n    isFetching: true,\n    latestFetchId: fetchId\n  }\n}\n\n\nfunction receiveResponse(sourceHash: EventSourceHash, sourceId: string, fetchId: string, fetchRange: DateRange) {\n  let eventSource: EventSource = sourceHash[sourceId]\n\n  if (\n    eventSource && // not already removed\n    fetchId === eventSource.latestFetchId\n  ) {\n    return {\n      ...sourceHash,\n      [sourceId]: {\n        ...eventSource,\n        isFetching: false,\n        fetchRange\n      }\n    }\n  }\n\n  return sourceHash\n}\n\n\nfunction excludeStaticSources(eventSources: EventSourceHash, calendar: Calendar): EventSourceHash {\n  return filterHash(eventSources, function(eventSource) {\n    return doesSourceNeedRange(eventSource, calendar)\n  })\n}\n","import { DateMarker, startOfDay, addDays } from './datelib/marker'\nimport { Duration, createDuration, getWeeksFromInput, asRoughDays, asRoughMs, greatestDurationDenominator, durationsEqual } from './datelib/duration'\nimport { DateRange, OpenDateRange, constrainMarkerToRange, intersectRanges, rangesIntersect, parseRange, rangesEqual } from './datelib/date-range'\nimport { ViewSpec } from './structs/view-spec'\nimport { DateEnv } from './datelib/env'\nimport Calendar from './Calendar'\nimport { computeVisibleDayRange } from './util/misc'\n\n\nexport interface DateProfile {\n  currentRange: DateRange\n  currentRangeUnit: string\n  isRangeAllDay: boolean\n  validRange: OpenDateRange\n  activeRange: DateRange\n  renderRange: DateRange\n  minTime: Duration\n  maxTime: Duration\n  isValid: boolean\n  dateIncrement: Duration\n}\n\n\nexport default class DateProfileGenerator {\n\n  viewSpec: ViewSpec\n  options: any\n  dateEnv: DateEnv\n  calendar: Calendar // avoid\n  isHiddenDayHash: boolean[]\n\n\n  constructor(viewSpec: ViewSpec, calendar: Calendar) {\n    this.viewSpec = viewSpec\n    this.options = viewSpec.options\n    this.dateEnv = calendar.dateEnv\n    this.calendar = calendar\n\n    this.initHiddenDays()\n  }\n\n\n  /* Date Range Computation\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\n  buildPrev(currentDateProfile: DateProfile, currentDate: DateMarker): DateProfile {\n    let { dateEnv } = this\n\n    let prevDate = dateEnv.subtract(\n      dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n      currentDateProfile.dateIncrement\n    )\n\n    return this.build(prevDate, -1)\n  }\n\n\n  // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\n  buildNext(currentDateProfile: DateProfile, currentDate: DateMarker): DateProfile {\n    let { dateEnv } = this\n\n    let nextDate = dateEnv.add(\n      dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n      currentDateProfile.dateIncrement\n    )\n\n    return this.build(nextDate, 1)\n  }\n\n\n  // Builds a structure holding dates/ranges for rendering around the given date.\n  // Optional direction param indicates whether the date is being incremented/decremented\n  // from its previous value. decremented = -1, incremented = 1 (default).\n  build(currentDate: DateMarker, direction?, forceToValid = false): DateProfile {\n    let validRange: DateRange\n    let minTime = null\n    let maxTime = null\n    let currentInfo\n    let isRangeAllDay\n    let renderRange: DateRange\n    let activeRange: DateRange\n    let isValid\n\n    validRange = this.buildValidRange()\n    validRange = this.trimHiddenDays(validRange)\n\n    if (forceToValid) {\n      currentDate = constrainMarkerToRange(currentDate, validRange)\n    }\n\n    currentInfo = this.buildCurrentRangeInfo(currentDate, direction)\n    isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit)\n    renderRange = this.buildRenderRange(\n      this.trimHiddenDays(currentInfo.range),\n      currentInfo.unit,\n      isRangeAllDay\n    )\n    renderRange = this.trimHiddenDays(renderRange)\n    activeRange = renderRange\n\n    if (!this.options.showNonCurrentDates) {\n      activeRange = intersectRanges(activeRange, currentInfo.range)\n    }\n\n    minTime = createDuration(this.options.minTime)\n    maxTime = createDuration(this.options.maxTime)\n    activeRange = this.adjustActiveRange(activeRange, minTime, maxTime)\n    activeRange = intersectRanges(activeRange, validRange) // might return null\n\n    // it's invalid if the originally requested date is not contained,\n    // or if the range is completely outside of the valid range.\n    isValid = rangesIntersect(currentInfo.range, validRange)\n\n    return {\n      // constraint for where prev/next operations can go and where events can be dragged/resized to.\n      // an object with optional start and end properties.\n      validRange: validRange,\n\n      // range the view is formally responsible for.\n      // for example, a month view might have 1st-31st, excluding padded dates\n      currentRange: currentInfo.range,\n\n      // name of largest unit being displayed, like \"month\" or \"week\"\n      currentRangeUnit: currentInfo.unit,\n\n      isRangeAllDay,\n\n      // dates that display events and accept drag-n-drop\n      // will be `null` if no dates accept events\n      activeRange,\n\n      // date range with a rendered skeleton\n      // includes not-active days that need some sort of DOM\n      renderRange,\n\n      // Duration object that denotes the first visible time of any given day\n      minTime,\n\n      // Duration object that denotes the exclusive visible end time of any given day\n      maxTime,\n\n      isValid,\n\n      // how far the current date will move for a prev/next operation\n      dateIncrement: this.buildDateIncrement(currentInfo.duration)\n        // pass a fallback (might be null) ^\n    }\n  }\n\n\n  // Builds an object with optional start/end properties.\n  // Indicates the minimum/maximum dates to display.\n  // not responsible for trimming hidden days.\n  buildValidRange(): OpenDateRange {\n    return this.getRangeOption('validRange', this.calendar.getNow()) ||\n      { start: null, end: null } // completely open-ended\n  }\n\n\n  // Builds a structure with info about the \"current\" range, the range that is\n  // highlighted as being the current month for example.\n  // See build() for a description of `direction`.\n  // Guaranteed to have `range` and `unit` properties. `duration` is optional.\n  buildCurrentRangeInfo(date: DateMarker, direction) {\n    let { viewSpec, dateEnv } = this\n    let duration = null\n    let unit = null\n    let range = null\n    let dayCount\n\n    if (viewSpec.duration) {\n      duration = viewSpec.duration\n      unit = viewSpec.durationUnit\n      range = this.buildRangeFromDuration(date, direction, duration, unit)\n    } else if ((dayCount = this.options.dayCount)) {\n      unit = 'day'\n      range = this.buildRangeFromDayCount(date, direction, dayCount)\n    } else if ((range = this.buildCustomVisibleRange(date))) {\n      unit = dateEnv.greatestWholeUnit(range.start, range.end).unit\n    } else {\n      duration = this.getFallbackDuration()\n      unit = greatestDurationDenominator(duration).unit\n      range = this.buildRangeFromDuration(date, direction, duration, unit)\n    }\n\n    return { duration: duration, unit: unit, range }\n  }\n\n\n  getFallbackDuration(): Duration {\n    return createDuration({ day: 1 })\n  }\n\n\n  // Returns a new activeRange to have time values (un-ambiguate)\n  // minTime or maxTime causes the range to expand.\n  adjustActiveRange(range: DateRange, minTime: Duration, maxTime: Duration) {\n    let { dateEnv } = this\n    let start = range.start\n    let end = range.end\n\n    if ((this.viewSpec.class as any).prototype.usesMinMaxTime) {\n\n      // expand active range if minTime is negative (why not when positive?)\n      if (asRoughDays(minTime) < 0) {\n        start = startOfDay(start) // necessary?\n        start = dateEnv.add(start, minTime)\n      }\n\n      // expand active range if maxTime is beyond one day (why not when positive?)\n      if (asRoughDays(maxTime) > 1) {\n        end = startOfDay(end) // necessary?\n        end = addDays(end, -1)\n        end = dateEnv.add(end, maxTime)\n      }\n    }\n\n    return { start, end }\n  }\n\n\n  // Builds the \"current\" range when it is specified as an explicit duration.\n  // `unit` is the already-computed greatestDurationDenominator unit of duration.\n  buildRangeFromDuration(date: DateMarker, direction, duration: Duration, unit) {\n    let { dateEnv } = this\n    let alignment = this.options.dateAlignment\n    let dateIncrementInput\n    let dateIncrementDuration\n    let start: DateMarker\n    let end: DateMarker\n    let res\n\n    // compute what the alignment should be\n    if (!alignment) {\n      dateIncrementInput = this.options.dateIncrement\n\n      if (dateIncrementInput) {\n        dateIncrementDuration = createDuration(dateIncrementInput)\n\n        // use the smaller of the two units\n        if (asRoughMs(dateIncrementDuration) < asRoughMs(duration)) {\n          alignment = greatestDurationDenominator(\n            dateIncrementDuration,\n            !getWeeksFromInput(dateIncrementInput)\n          ).unit\n        } else {\n          alignment = unit\n        }\n      } else {\n        alignment = unit\n      }\n    }\n\n    // if the view displays a single day or smaller\n    if (asRoughDays(duration) <= 1) {\n      if (this.isHiddenDay(start)) {\n        start = this.skipHiddenDays(start, direction)\n        start = startOfDay(start)\n      }\n    }\n\n    function computeRes() {\n      start = dateEnv.startOf(date, alignment)\n      end = dateEnv.add(start, duration)\n      res = { start, end }\n    }\n\n    computeRes()\n\n    // if range is completely enveloped by hidden days, go past the hidden days\n    if (!this.trimHiddenDays(res)) {\n      date = this.skipHiddenDays(date, direction)\n      computeRes()\n    }\n\n    return res\n  }\n\n\n  // Builds the \"current\" range when a dayCount is specified.\n  buildRangeFromDayCount(date: DateMarker, direction, dayCount) {\n    let { dateEnv } = this\n    let customAlignment = this.options.dateAlignment\n    let runningCount = 0\n    let start: DateMarker = date\n    let end: DateMarker\n\n    if (customAlignment) {\n      start = dateEnv.startOf(start, customAlignment)\n    }\n\n    start = startOfDay(start)\n    start = this.skipHiddenDays(start, direction)\n\n    end = start\n    do {\n      end = addDays(end, 1)\n      if (!this.isHiddenDay(end)) {\n        runningCount++\n      }\n    } while (runningCount < dayCount)\n\n    return { start, end }\n  }\n\n\n  // Builds a normalized range object for the \"visible\" range,\n  // which is a way to define the currentRange and activeRange at the same time.\n  buildCustomVisibleRange(date: DateMarker) {\n    let { dateEnv } = this\n    let visibleRange = this.getRangeOption('visibleRange', dateEnv.toDate(date))\n\n    if (visibleRange && (visibleRange.start == null || visibleRange.end == null)) {\n      return null\n    }\n\n    return visibleRange\n  }\n\n\n  // Computes the range that will represent the element/cells for *rendering*,\n  // but which may have voided days/times.\n  // not responsible for trimming hidden days.\n  buildRenderRange(currentRange: DateRange, currentRangeUnit, isRangeAllDay) {\n    return currentRange\n  }\n\n\n  // Compute the duration value that should be added/substracted to the current date\n  // when a prev/next operation happens.\n  buildDateIncrement(fallback): Duration {\n    let dateIncrementInput = this.options.dateIncrement\n    let customAlignment\n\n    if (dateIncrementInput) {\n      return createDuration(dateIncrementInput)\n    } else if ((customAlignment = this.options.dateAlignment)) {\n      return createDuration(1, customAlignment)\n    } else if (fallback) {\n      return fallback\n    } else {\n      return createDuration({ days: 1 })\n    }\n  }\n\n\n  // Arguments after name will be forwarded to a hypothetical function value\n  // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\n  // Always clone your objects if you fear mutation.\n  getRangeOption(name, ...otherArgs): OpenDateRange {\n    let val = this.options[name]\n\n    if (typeof val === 'function') {\n      val = val.apply(null, otherArgs)\n    }\n\n    if (val) {\n      val = parseRange(val, this.dateEnv)\n    }\n\n    if (val) {\n      val = computeVisibleDayRange(val)\n    }\n\n    return val\n  }\n\n\n  /* Hidden Days\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Initializes internal variables related to calculating hidden days-of-week\n  initHiddenDays() {\n    let hiddenDays = this.options.hiddenDays || [] // array of day-of-week indices that are hidden\n    let isHiddenDayHash = [] // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n    let dayCnt = 0\n    let i\n\n    if (this.options.weekends === false) {\n      hiddenDays.push(0, 6) // 0=sunday, 6=saturday\n    }\n\n    for (i = 0; i < 7; i++) {\n      if (\n        !(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)\n      ) {\n        dayCnt++\n      }\n    }\n\n    if (!dayCnt) {\n      throw new Error('invalid hiddenDays') // all days were hidden? bad.\n    }\n\n    this.isHiddenDayHash = isHiddenDayHash\n  }\n\n\n  // Remove days from the beginning and end of the range that are computed as hidden.\n  // If the whole range is trimmed off, returns null\n  trimHiddenDays(range: DateRange): DateRange | null {\n    let start = range.start\n    let end = range.end\n\n    if (start) {\n      start = this.skipHiddenDays(start)\n    }\n\n    if (end) {\n      end = this.skipHiddenDays(end, -1, true)\n    }\n\n    if (start == null || end == null || start < end) {\n      return { start, end }\n    }\n\n    return null\n  }\n\n\n  // Is the current day hidden?\n  // `day` is a day-of-week index (0-6), or a Date (used for UTC)\n  isHiddenDay(day) {\n    if (day instanceof Date) {\n      day = day.getUTCDay()\n    }\n    return this.isHiddenDayHash[day]\n  }\n\n\n  // Incrementing the current day until it is no longer a hidden day, returning a copy.\n  // DOES NOT CONSIDER validRange!\n  // If the initial value of `date` is not a hidden day, don't do anything.\n  // Pass `isExclusive` as `true` if you are dealing with an end date.\n  // `inc` defaults to `1` (increment one day forward each time)\n  skipHiddenDays(date: DateMarker, inc = 1, isExclusive = false) {\n    while (\n      this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]\n    ) {\n      date = addDays(date, inc)\n    }\n    return date\n  }\n\n}\n\n// TODO: find a way to avoid comparing DateProfiles. it's tedious\nexport function isDateProfilesEqual(p0: DateProfile, p1: DateProfile) {\n  return rangesEqual(p0.activeRange, p1.activeRange) &&\n    rangesEqual(p0.validRange, p1.validRange) &&\n    durationsEqual(p0.minTime, p1.minTime) &&\n    durationsEqual(p0.maxTime, p1.maxTime)\n}\n","import Calendar from '../Calendar'\nimport reduceEventSources from './eventSources'\nimport reduceEventStore from './eventStore'\nimport { DateProfile, isDateProfilesEqual } from '../DateProfileGenerator'\nimport { DateSpan } from '../structs/date-span'\nimport { EventInteractionState } from '../interactions/event-interaction-state'\nimport { CalendarState, Action } from './types'\nimport { EventSourceHash } from '../structs/event-source'\nimport { DateMarker } from '../datelib/marker'\nimport { rangeContainsMarker } from '../datelib/date-range'\n\nexport default function(state: CalendarState, action: Action, calendar: Calendar): CalendarState {\n\n  let viewType = reduceViewType(state.viewType, action)\n  let dateProfile = reduceDateProfile(state.dateProfile, action, state.currentDate, viewType, calendar)\n  let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendar)\n\n  let nextState = {\n    ...state,\n    viewType,\n    dateProfile,\n    currentDate: reduceCurrentDate(state.currentDate, action, dateProfile),\n    eventSources,\n    eventStore: reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendar),\n    dateSelection: reduceDateSelection(state.dateSelection, action, calendar),\n    eventSelection: reduceSelectedEvent(state.eventSelection, action),\n    eventDrag: reduceEventDrag(state.eventDrag, action, eventSources, calendar),\n    eventResize: reduceEventResize(state.eventResize, action, eventSources, calendar),\n    eventSourceLoadingLevel: computeLoadingLevel(eventSources),\n    loadingLevel: computeLoadingLevel(eventSources)\n  }\n\n  for (let reducerFunc of calendar.pluginSystem.hooks.reducers) {\n    nextState = reducerFunc(nextState, action, calendar)\n  }\n\n  // console.log(action.type, nextState)\n\n  return nextState\n}\n\nfunction reduceViewType(currentViewType: string, action: Action): string {\n  switch (action.type) {\n    case 'SET_VIEW_TYPE':\n      return action.viewType\n    default:\n      return currentViewType\n  }\n}\n\nfunction reduceDateProfile(currentDateProfile: DateProfile | null, action: Action, currentDate: DateMarker, viewType: string, calendar: Calendar): DateProfile {\n  let newDateProfile: DateProfile\n\n  switch (action.type) {\n\n    case 'PREV':\n      newDateProfile = calendar.dateProfileGenerators[viewType].buildPrev(currentDateProfile, currentDate)\n      break\n\n    case 'NEXT':\n      newDateProfile = calendar.dateProfileGenerators[viewType].buildNext(currentDateProfile, currentDate)\n      break\n\n    case 'SET_DATE':\n      if (\n        !currentDateProfile.activeRange ||\n        !rangeContainsMarker(currentDateProfile.currentRange, action.dateMarker)\n      ) {\n        newDateProfile = calendar.dateProfileGenerators[viewType].build(\n          action.dateMarker,\n          undefined,\n          true // forceToValid\n        )\n      }\n      break\n\n    case 'SET_VIEW_TYPE':\n      let generator = calendar.dateProfileGenerators[viewType]\n\n      if (!generator) {\n        throw new Error(\n          viewType ?\n            'The FullCalendar view \"' + viewType + '\" does not exist. Make sure your plugins are loaded correctly.' :\n            'No available FullCalendar view plugins.'\n        )\n      }\n\n      newDateProfile = generator.build(\n        action.dateMarker || currentDate,\n        undefined,\n        true // forceToValid\n      )\n      break\n  }\n\n  if (\n    newDateProfile &&\n    newDateProfile.isValid &&\n    !(currentDateProfile && isDateProfilesEqual(currentDateProfile, newDateProfile))\n  ) {\n    return newDateProfile\n  } else {\n    return currentDateProfile\n  }\n}\n\nfunction reduceCurrentDate(currentDate: DateMarker, action: Action, dateProfile: DateProfile): DateMarker {\n  switch (action.type) {\n\n    case 'PREV':\n    case 'NEXT':\n      if (!rangeContainsMarker(dateProfile.currentRange, currentDate)) {\n        return dateProfile.currentRange.start\n      } else {\n        return currentDate\n      }\n\n    case 'SET_DATE':\n    case 'SET_VIEW_TYPE':\n      let newDate = action.dateMarker || currentDate\n      if (dateProfile.activeRange && !rangeContainsMarker(dateProfile.activeRange, newDate)) {\n        return dateProfile.currentRange.start\n      } else {\n        return newDate\n      }\n\n    default:\n      return currentDate\n  }\n}\n\nfunction reduceDateSelection(currentSelection: DateSpan | null, action: Action, calendar: Calendar) {\n  switch (action.type) {\n    case 'SELECT_DATES':\n      return action.selection\n    case 'UNSELECT_DATES':\n      return null\n    default:\n      return currentSelection\n  }\n}\n\nfunction reduceSelectedEvent(currentInstanceId: string, action: Action): string {\n  switch (action.type) {\n    case 'SELECT_EVENT':\n      return action.eventInstanceId\n    case 'UNSELECT_EVENT':\n      return ''\n    default:\n      return currentInstanceId\n  }\n}\n\nfunction reduceEventDrag(currentDrag: EventInteractionState | null, action: Action, sources: EventSourceHash, calendar: Calendar): EventInteractionState | null {\n  switch (action.type) {\n\n    case 'SET_EVENT_DRAG':\n      let newDrag = action.state\n\n      return {\n        affectedEvents: newDrag.affectedEvents,\n        mutatedEvents: newDrag.mutatedEvents,\n        isEvent: newDrag.isEvent,\n        origSeg: newDrag.origSeg\n      }\n\n    case 'UNSET_EVENT_DRAG':\n      return null\n\n    default:\n      return currentDrag\n  }\n}\n\nfunction reduceEventResize(currentResize: EventInteractionState | null, action: Action, sources: EventSourceHash, calendar: Calendar): EventInteractionState | null {\n  switch (action.type) {\n\n    case 'SET_EVENT_RESIZE':\n      let newResize = action.state\n\n      return {\n        affectedEvents: newResize.affectedEvents,\n        mutatedEvents: newResize.mutatedEvents,\n        isEvent: newResize.isEvent,\n        origSeg: newResize.origSeg\n      }\n\n    case 'UNSET_EVENT_RESIZE':\n      return null\n\n    default:\n      return currentResize\n  }\n}\n\nfunction computeLoadingLevel(eventSources: EventSourceHash): number {\n  let cnt = 0\n\n  for (let sourceId in eventSources) {\n    if (eventSources[sourceId].isFetching) {\n      cnt++\n    }\n  }\n\n  return cnt\n}\n","import { DateRange, rangesEqual, OpenDateRange } from '../datelib/date-range'\nimport { DateInput, DateEnv } from '../datelib/env'\nimport { refineProps } from '../util/misc'\nimport { Duration } from '../datelib/duration'\nimport { parseEventDef, createEventInstance } from './event'\nimport { EventRenderRange, compileEventUi } from '../component/event-rendering'\nimport { EventUiHash } from '../component/event-ui'\nimport Calendar from '../Calendar'\n\n/*\nA data-structure for a date-range that will be visually displayed.\nContains other metadata like allDay, and anything else Components might like to store.\n\nTODO: in future, put otherProps in own object.\n*/\n\nexport interface OpenDateSpanInput {\n  start?: DateInput\n  end?: DateInput\n  allDay?: boolean\n  [otherProp: string]: any\n}\n\nexport interface DateSpanInput extends OpenDateSpanInput {\n  start: DateInput\n  end: DateInput\n}\n\nexport interface OpenDateSpan {\n  range: OpenDateRange\n  allDay: boolean\n  [otherProp: string]: any\n}\n\nexport interface DateSpan extends OpenDateSpan {\n  range: DateRange\n}\n\nexport interface DateSpanApi {\n  start: Date\n  end: Date\n  startStr: string\n  endStr: string\n  allDay: boolean\n}\n\nexport interface DatePointApi {\n  date: Date\n  dateStr: string\n  allDay: boolean\n}\n\nconst STANDARD_PROPS = {\n  start: null,\n  end: null,\n  allDay: Boolean\n}\n\nexport function parseDateSpan(raw: DateSpanInput, dateEnv: DateEnv, defaultDuration?: Duration): DateSpan | null {\n  let span = parseOpenDateSpan(raw, dateEnv)\n  let { range } = span\n\n  if (!range.start) {\n    return null\n  }\n\n  if (!range.end) {\n    if (defaultDuration == null) {\n      return null\n    } else {\n      range.end = dateEnv.add(range.start, defaultDuration)\n    }\n  }\n\n  return span as DateSpan\n}\n\n/*\nTODO: somehow combine with parseRange?\nWill return null if the start/end props were present but parsed invalidly.\n*/\nexport function parseOpenDateSpan(raw: OpenDateSpanInput, dateEnv: DateEnv): OpenDateSpan | null {\n  let leftovers = {} as DateSpan\n  let standardProps = refineProps(raw, STANDARD_PROPS, {}, leftovers)\n  let startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null\n  let endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null\n  let allDay = standardProps.allDay\n\n  if (allDay == null) {\n    allDay = (startMeta && startMeta.isTimeUnspecified) &&\n      (!endMeta || endMeta.isTimeUnspecified)\n  }\n\n  // use this leftover object as the selection object\n  leftovers.range = {\n    start: startMeta ? startMeta.marker : null,\n    end: endMeta ? endMeta.marker : null\n  }\n  leftovers.allDay = allDay\n\n  return leftovers\n}\n\nexport function isDateSpansEqual(span0: DateSpan, span1: DateSpan): boolean {\n  return rangesEqual(span0.range, span1.range) &&\n    span0.allDay === span1.allDay &&\n    isSpanPropsEqual(span0, span1)\n}\n\n// the NON-DATE-RELATED props\nfunction isSpanPropsEqual(span0: DateSpan, span1: DateSpan): boolean {\n\n  for (let propName in span1) {\n    if (propName !== 'range' && propName !== 'allDay') {\n      if (span0[propName] !== span1[propName]) {\n        return false\n      }\n    }\n  }\n\n  // are there any props that span0 has that span1 DOESN'T have?\n  // both have range/allDay, so no need to special-case.\n  for (let propName in span0) {\n    if (!(propName in span1)) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function buildDateSpanApi(span: DateSpan, dateEnv: DateEnv): DateSpanApi {\n  return {\n    start: dateEnv.toDate(span.range.start),\n    end: dateEnv.toDate(span.range.end),\n    startStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),\n    endStr: dateEnv.formatIso(span.range.end, { omitTime: span.allDay }),\n    allDay: span.allDay\n  }\n}\n\nexport function buildDatePointApi(span: DateSpan, dateEnv: DateEnv): DatePointApi {\n  return {\n    date: dateEnv.toDate(span.range.start),\n    dateStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),\n    allDay: span.allDay\n  }\n}\n\nexport function fabricateEventRange(dateSpan: DateSpan, eventUiBases: EventUiHash, calendar: Calendar): EventRenderRange {\n  let def = parseEventDef(\n    { editable: false },\n    '', // sourceId\n    dateSpan.allDay,\n    true, // hasEnd\n    calendar\n  )\n\n  return {\n    def,\n    ui: compileEventUi(def, eventUiBases),\n    instance: createEventInstance(def.defId, dateSpan.range),\n    range: dateSpan.range,\n    isStart: true,\n    isEnd: true\n  }\n}\n","import { ViewClass, ViewConfigHash } from './view-config'\n\n/*\nRepresents information for an instantiatable View class along with settings\nthat are specific to that view. No other settings, like calendar-wide settings, are stored.\n*/\nexport interface ViewDef {\n  type: string\n  class: ViewClass\n  overrides: any\n  defaults: any\n}\n\nexport type ViewDefHash = { [viewType: string]: ViewDef }\n\nexport function compileViewDefs(defaultConfigs: ViewConfigHash, overrideConfigs: ViewConfigHash): ViewDefHash {\n  let hash: ViewDefHash = {}\n  let viewType: string\n\n  for (viewType in defaultConfigs) {\n    ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs)\n  }\n\n  for (viewType in overrideConfigs) {\n    ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs)\n  }\n\n  return hash\n}\n\nfunction ensureViewDef(viewType: string, hash: ViewDefHash, defaultConfigs: ViewConfigHash, overrideConfigs: ViewConfigHash): ViewDef | null {\n  if (hash[viewType]) {\n    return hash[viewType]\n  }\n\n  let viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs)\n\n  if (viewDef) {\n    hash[viewType] = viewDef\n  }\n\n  return viewDef\n}\n\nfunction buildViewDef(viewType: string, hash: ViewDefHash, defaultConfigs: ViewConfigHash, overrideConfigs: ViewConfigHash): ViewDef | null {\n  let defaultConfig = defaultConfigs[viewType]\n  let overrideConfig = overrideConfigs[viewType]\n\n  let queryProp = function(name) {\n    return (defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :\n      ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null)\n  }\n\n  let theClass = queryProp('class') as ViewClass\n  let superType = queryProp('superType') as string\n\n  if (!superType && theClass) {\n    superType =\n      findViewNameBySubclass(theClass, overrideConfigs) ||\n      findViewNameBySubclass(theClass, defaultConfigs)\n  }\n\n  let superDef = superType ? ensureViewDef(superType, hash, defaultConfigs, overrideConfigs) : null\n\n  if (!theClass && superDef) {\n    theClass = superDef.class\n  }\n\n  if (!theClass) {\n    return null // don't throw a warning, might be settings for a single-unit view\n  }\n\n  return {\n    type: viewType,\n    class: theClass,\n    defaults: {\n      ...(superDef ? superDef.defaults : {}),\n      ...(defaultConfig ? defaultConfig.options : {})\n    },\n    overrides: {\n      ...(superDef ? superDef.overrides : {}),\n      ...(overrideConfig ? overrideConfig.options : {})\n    }\n  }\n}\n\nfunction findViewNameBySubclass(viewSubclass: ViewClass, configs: ViewConfigHash): string {\n  let superProto = Object.getPrototypeOf(viewSubclass.prototype)\n\n  for (let viewType in configs) {\n    let parsed = configs[viewType]\n\n    // need DIRECT subclass, so instanceof won't do it\n    if (parsed.class && parsed.class.prototype === superProto) {\n      return viewType\n    }\n  }\n\n  return ''\n}\n","import View from '../View'\nimport { ViewSpec } from './view-spec'\nimport { refineProps } from '../util/misc'\nimport { mapHash } from '../util/object'\nimport { ComponentContext } from '../component/Component'\nimport DateProfileGenerator from '../DateProfileGenerator'\n\n/*\nA view-config represents information for either:\nA) creating a new instantiatable view class. in which case, supplied a class/type in addition to options, OR\nB) options to customize an existing view, in which case only provides options.\n*/\n\nexport type ViewClass = new(\n  context: ComponentContext,\n  viewSpec: ViewSpec,\n  dateProfileGenerator:\n  DateProfileGenerator,\n  parentEl: HTMLElement\n) => View\n\nexport interface ViewConfigObjectInput {\n  type?: string\n  class?: ViewClass\n  [optionName: string]: any\n}\n\nexport type ViewConfigInput = ViewClass | ViewConfigObjectInput\nexport type ViewConfigInputHash = { [viewType: string]: ViewConfigInput }\n\nexport interface ViewConfig {\n  superType: string\n  class: ViewClass | null\n  options: any\n}\n\nexport type ViewConfigHash = { [viewType: string]: ViewConfig }\n\nexport function parseViewConfigs(inputs: ViewConfigInputHash): ViewConfigHash {\n  return mapHash(inputs, parseViewConfig)\n}\n\nconst VIEW_DEF_PROPS = {\n  type: String,\n  class: null\n}\n\nfunction parseViewConfig(input: ViewConfigInput): ViewConfig {\n  if (typeof input === 'function') {\n    input = { class: input }\n  }\n\n  let options = {}\n  let props = refineProps(input, VIEW_DEF_PROPS, {}, options)\n\n  return {\n    superType: props.type,\n    class: props.class,\n    options\n  }\n}\n","import { ViewDef, compileViewDefs } from './view-def'\nimport { Duration, createDuration, greatestDurationDenominator, getWeeksFromInput } from '../datelib/duration'\nimport OptionsManager from '../OptionsManager'\nimport { mapHash } from '../util/object'\nimport { globalDefaults } from '../options'\nimport { ViewConfigInputHash, parseViewConfigs, ViewConfigHash, ViewClass } from './view-config'\n\n/*\nRepresents everything needed to instantiate a new view instance,\nincluding options that have been compiled from view-specific and calendar-wide options,\nas well as duration information.\n\nOverall flow:\nViewConfig -> ViewDef -> ViewSpec\n*/\nexport interface ViewSpec {\n  type: string\n  class: ViewClass\n  duration: Duration\n  durationUnit: string\n  singleUnit: string\n  options: any\n  buttonTextOverride: string\n  buttonTextDefault: string\n}\n\nexport type ViewSpecHash = { [viewType: string]: ViewSpec }\n\nexport function buildViewSpecs(defaultInputs: ViewConfigInputHash, optionsManager: OptionsManager): ViewSpecHash {\n  let defaultConfigs = parseViewConfigs(defaultInputs)\n  let overrideConfigs = parseViewConfigs(optionsManager.overrides.views)\n  let viewDefs = compileViewDefs(defaultConfigs, overrideConfigs)\n\n  return mapHash(viewDefs, function(viewDef) {\n    return buildViewSpec(viewDef, overrideConfigs, optionsManager)\n  })\n}\n\nfunction buildViewSpec(viewDef: ViewDef, overrideConfigs: ViewConfigHash, optionsManager: OptionsManager): ViewSpec {\n  let durationInput =\n    viewDef.overrides.duration ||\n    viewDef.defaults.duration ||\n    optionsManager.dynamicOverrides.duration ||\n    optionsManager.overrides.duration\n\n  let duration = null\n  let durationUnit = ''\n  let singleUnit = ''\n  let singleUnitOverrides = {}\n\n  if (durationInput) {\n    duration = createDuration(durationInput)\n\n    if (duration) { // valid?\n      let denom = greatestDurationDenominator(\n        duration,\n        !getWeeksFromInput(durationInput)\n      )\n\n      durationUnit = denom.unit\n\n      if (denom.value === 1) {\n        singleUnit = durationUnit\n        singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].options : {}\n      }\n    }\n  }\n\n  let queryButtonText = function(options) {\n    let buttonTextMap = options.buttonText || {}\n    let buttonTextKey = viewDef.defaults.buttonTextKey\n\n    if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {\n      return buttonTextMap[buttonTextKey]\n    }\n\n    if (buttonTextMap[viewDef.type] != null) {\n      return buttonTextMap[viewDef.type]\n    }\n\n    if (buttonTextMap[singleUnit] != null) {\n      return buttonTextMap[singleUnit]\n    }\n  }\n\n  return {\n    type: viewDef.type,\n    class: viewDef.class,\n    duration,\n    durationUnit,\n    singleUnit,\n\n    options: {\n      ...globalDefaults,\n      ...viewDef.defaults,\n      ...optionsManager.dirDefaults,\n      ...optionsManager.localeDefaults,\n      ...optionsManager.overrides,\n      ...singleUnitOverrides,\n      ...viewDef.overrides,\n      ...optionsManager.dynamicOverrides\n    },\n\n    buttonTextOverride:\n      queryButtonText(optionsManager.dynamicOverrides) ||\n      queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence\n      viewDef.overrides.buttonText, // `buttonText` for view-specific options is a string\n\n    buttonTextDefault:\n      queryButtonText(optionsManager.localeDefaults) ||\n      queryButtonText(optionsManager.dirDefaults) ||\n      viewDef.defaults.buttonText ||\n      queryButtonText(globalDefaults) ||\n      viewDef.type // fall back to given view name\n  }\n}\n","import { htmlEscape } from './util/html'\nimport { htmlToElement, appendToElement, findElements, createElement, removeElement } from './util/dom-manip'\nimport Component, { ComponentContext } from './component/Component'\nimport { ViewSpec } from './structs/view-spec'\nimport { memoizeRendering } from './component/memoized-rendering'\n\n/* Toolbar with buttons and title\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport interface ToolbarRenderProps {\n  layout: any\n  title: string\n  activeButton: string\n  isTodayEnabled: boolean\n  isPrevEnabled: boolean\n  isNextEnabled: boolean\n}\n\nexport default class Toolbar extends Component<ToolbarRenderProps> {\n\n  el: HTMLElement\n  viewsWithButtons: any\n\n  private _renderLayout = memoizeRendering(this.renderLayout, this.unrenderLayout)\n  private _updateTitle = memoizeRendering(this.updateTitle, null, [ this._renderLayout ])\n  private _updateActiveButton = memoizeRendering(this.updateActiveButton, null, [ this._renderLayout ])\n  private _updateToday = memoizeRendering(this.updateToday, null, [ this._renderLayout ])\n  private _updatePrev = memoizeRendering(this.updatePrev, null, [ this._renderLayout ])\n  private _updateNext = memoizeRendering(this.updateNext, null, [ this._renderLayout ])\n\n\n  constructor(context: ComponentContext, extraClassName) {\n    super(context)\n\n    this.el = createElement('div', { className: 'fc-toolbar ' + extraClassName })\n  }\n\n\n  destroy() {\n    super.destroy()\n\n    this._renderLayout.unrender() // should unrender everything else\n    removeElement(this.el)\n  }\n\n\n  render(props: ToolbarRenderProps) {\n    this._renderLayout(props.layout)\n    this._updateTitle(props.title)\n    this._updateActiveButton(props.activeButton)\n    this._updateToday(props.isTodayEnabled)\n    this._updatePrev(props.isPrevEnabled)\n    this._updateNext(props.isNextEnabled)\n  }\n\n\n  renderLayout(layout) {\n    let { el } = this\n\n    this.viewsWithButtons = []\n\n    appendToElement(el, this.renderSection('left', layout.left))\n    appendToElement(el, this.renderSection('center', layout.center))\n    appendToElement(el, this.renderSection('right', layout.right))\n  }\n\n\n  unrenderLayout() {\n    this.el.innerHTML = ''\n  }\n\n\n  renderSection(position, buttonStr) {\n    let { theme, calendar } = this\n    let optionsManager = calendar.optionsManager\n    let viewSpecs = calendar.viewSpecs\n    let sectionEl = createElement('div', { className: 'fc-' + position })\n    let calendarCustomButtons = optionsManager.computed.customButtons || {}\n    let calendarButtonTextOverrides = optionsManager.overrides.buttonText || {}\n    let calendarButtonText = optionsManager.computed.buttonText || {}\n\n    if (buttonStr) {\n      buttonStr.split(' ').forEach((buttonGroupStr, i) => {\n        let groupChildren = []\n        let isOnlyButtons = true\n        let groupEl\n\n        buttonGroupStr.split(',').forEach((buttonName, j) => {\n          let customButtonProps\n          let viewSpec: ViewSpec\n          let buttonClick\n          let buttonIcon // only one of these will be set\n          let buttonText // \"\n          let buttonInnerHtml\n          let buttonClasses\n          let buttonEl: HTMLElement\n          let buttonAriaAttr\n\n          if (buttonName === 'title') {\n            groupChildren.push(htmlToElement('<h2>&nbsp;</h2>')) // we always want it to take up height\n            isOnlyButtons = false\n          } else {\n\n            if ((customButtonProps = calendarCustomButtons[buttonName])) {\n              buttonClick = function(ev) {\n                if (customButtonProps.click) {\n                  customButtonProps.click.call(buttonEl, ev)\n                }\n              };\n              (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\n              (buttonIcon = theme.getIconClass(buttonName)) ||\n              (buttonText = customButtonProps.text)\n            } else if ((viewSpec = viewSpecs[buttonName])) {\n              this.viewsWithButtons.push(buttonName)\n              buttonClick = function() {\n                calendar.changeView(buttonName)\n              };\n              (buttonText = viewSpec.buttonTextOverride) ||\n              (buttonIcon = theme.getIconClass(buttonName)) ||\n              (buttonText = viewSpec.buttonTextDefault)\n            } else if (calendar[buttonName]) { // a calendar method\n              buttonClick = function() {\n                calendar[buttonName]()\n              };\n              (buttonText = calendarButtonTextOverrides[buttonName]) ||\n              (buttonIcon = theme.getIconClass(buttonName)) ||\n              (buttonText = calendarButtonText[buttonName])\n              //            ^ everything else is considered default\n            }\n\n            if (buttonClick) {\n\n              buttonClasses = [\n                'fc-' + buttonName + '-button',\n                theme.getClass('button')\n              ]\n\n              if (buttonText) {\n                buttonInnerHtml = htmlEscape(buttonText)\n                buttonAriaAttr = ''\n              } else if (buttonIcon) {\n                buttonInnerHtml = \"<span class='\" + buttonIcon + \"'></span>\"\n                buttonAriaAttr = ' aria-label=\"' + buttonName + '\"'\n              }\n\n              buttonEl = htmlToElement( // type=\"button\" so that it doesn't submit a form\n                '<button type=\"button\" class=\"' + buttonClasses.join(' ') + '\"' +\n                  buttonAriaAttr +\n                '>' + buttonInnerHtml + '</button>'\n              )\n\n              buttonEl.addEventListener('click', buttonClick)\n\n              groupChildren.push(buttonEl)\n            }\n          }\n        })\n\n        if (groupChildren.length > 1) {\n          groupEl = document.createElement('div')\n\n          let buttonGroupClassName = theme.getClass('buttonGroup')\n          if (isOnlyButtons && buttonGroupClassName) {\n            groupEl.classList.add(buttonGroupClassName)\n          }\n\n          appendToElement(groupEl, groupChildren)\n          sectionEl.appendChild(groupEl)\n        } else {\n          appendToElement(sectionEl, groupChildren) // 1 or 0 children\n        }\n      })\n    }\n\n    return sectionEl\n  }\n\n\n  updateToday(isTodayEnabled) {\n    this.toggleButtonEnabled('today', isTodayEnabled)\n  }\n\n\n  updatePrev(isPrevEnabled) {\n    this.toggleButtonEnabled('prev', isPrevEnabled)\n  }\n\n\n  updateNext(isNextEnabled) {\n    this.toggleButtonEnabled('next', isNextEnabled)\n  }\n\n\n  updateTitle(text) {\n    findElements(this.el, 'h2').forEach(function(titleEl) {\n      titleEl.innerText = text\n    })\n  }\n\n\n  updateActiveButton(buttonName?) {\n    let className = this.theme.getClass('buttonActive')\n\n    findElements(this.el, 'button').forEach((buttonEl) => { // fyi, themed buttons don't have .fc-button\n      if (buttonName && buttonEl.classList.contains('fc-' + buttonName + '-button')) {\n        buttonEl.classList.add(className)\n      } else {\n        buttonEl.classList.remove(className)\n      }\n    })\n  }\n\n\n  toggleButtonEnabled(buttonName, bool) {\n    findElements(this.el, '.fc-' + buttonName + '-button').forEach((buttonEl: HTMLButtonElement) => {\n      buttonEl.disabled = !bool\n    })\n  }\n\n}\n","import Component, { ComponentContext } from './component/Component'\nimport { ViewSpec } from './structs/view-spec'\nimport View from './View'\nimport Toolbar from './Toolbar'\nimport DateProfileGenerator, { DateProfile } from './DateProfileGenerator'\nimport { prependToElement, createElement, removeElement, appendToElement, applyStyle } from './util/dom-manip'\nimport { rangeContainsMarker, DateRange } from './datelib/date-range'\nimport { EventStore } from './structs/event-store'\nimport { EventUiHash } from './component/event-ui'\nimport { BusinessHoursInput, parseBusinessHours } from './structs/business-hours'\nimport { memoize } from './util/memoize'\nimport { computeHeightAndMargins } from './util/dom-geom'\nimport { createFormatter } from './datelib/formatting'\nimport { diffWholeDays, DateMarker } from './datelib/marker'\nimport { memoizeRendering } from './component/memoized-rendering'\nimport { CalendarState } from './reducers/types'\nimport { ViewPropsTransformerClass } from './plugin-system'\nimport { __assign } from 'tslib'\n\nexport interface CalendarComponentProps extends CalendarState {\n  viewSpec: ViewSpec\n  dateProfileGenerator: DateProfileGenerator // for the current view\n  eventUiBases: EventUiHash\n}\n\nexport default class CalendarComponent extends Component<CalendarComponentProps> {\n\n  view: View\n  header: Toolbar\n  footer: Toolbar\n\n  computeTitle: (dateProfile, viewOptions) => string\n  parseBusinessHours: (input: BusinessHoursInput) => EventStore\n\n  el: HTMLElement\n  contentEl: HTMLElement\n\n  isHeightAuto: boolean\n  viewHeight: number\n\n  private _renderToolbars = memoizeRendering(this.renderToolbars)\n  private buildViewPropTransformers = memoize(buildViewPropTransformers)\n\n\n  constructor(context: ComponentContext, el: HTMLElement) {\n    super(context)\n\n    this.el = el\n\n    prependToElement(\n      el,\n      this.contentEl = createElement('div', { className: 'fc-view-container' })\n    )\n\n    let { calendar } = this\n    for (let modifyViewContainer of calendar.pluginSystem.hooks.viewContainerModifiers) {\n      modifyViewContainer(this.contentEl, calendar)\n    }\n\n    this.toggleElClassNames(true)\n\n    this.computeTitle = memoize(computeTitle)\n\n    this.parseBusinessHours = memoize((input) => {\n      return parseBusinessHours(input, this.calendar)\n    })\n  }\n\n  destroy() {\n    if (this.header) {\n      this.header.destroy()\n    }\n\n    if (this.footer) {\n      this.footer.destroy()\n    }\n\n    if (this.view) {\n      this.view.destroy()\n    }\n\n    removeElement(this.contentEl)\n    this.toggleElClassNames(false)\n\n    super.destroy()\n  }\n\n  toggleElClassNames(bool: boolean) {\n    let classList = this.el.classList\n    let dirClassName = 'fc-' + this.opt('dir')\n    let themeClassName = this.theme.getClass('widget')\n\n    if (bool) {\n      classList.add('fc')\n      classList.add(dirClassName)\n      classList.add(themeClassName)\n    } else {\n      classList.remove('fc')\n      classList.remove(dirClassName)\n      classList.remove(themeClassName)\n    }\n  }\n\n  render(props: CalendarComponentProps) {\n    this.freezeHeight()\n\n    let title = this.computeTitle(props.dateProfile, props.viewSpec.options)\n    this._renderToolbars(props.viewSpec, props.dateProfile, props.currentDate, props.dateProfileGenerator, title)\n    this.renderView(props, title)\n\n    this.updateSize()\n    this.thawHeight()\n  }\n\n  renderToolbars(viewSpec: ViewSpec, dateProfile: DateProfile, currentDate: DateMarker, dateProfileGenerator: DateProfileGenerator, title: string) {\n    let headerLayout = this.opt('header')\n    let footerLayout = this.opt('footer')\n\n    let now = this.calendar.getNow()\n    let todayInfo = dateProfileGenerator.build(now)\n    let prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate)\n    let nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate)\n\n    let toolbarProps = {\n      title,\n      activeButton: viewSpec.type,\n      isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),\n      isPrevEnabled: prevInfo.isValid,\n      isNextEnabled: nextInfo.isValid\n    }\n\n    if (headerLayout) {\n      if (!this.header) {\n        this.header = new Toolbar(this.context, 'fc-header-toolbar')\n        prependToElement(this.el, this.header.el)\n      }\n      this.header.receiveProps({\n        layout: headerLayout,\n        ...toolbarProps\n      })\n    } else if (this.header) {\n      this.header.destroy()\n      this.header = null\n    }\n\n    if (footerLayout) {\n      if (!this.footer) {\n        this.footer = new Toolbar(this.context, 'fc-footer-toolbar')\n        appendToElement(this.el, this.footer.el)\n      }\n      this.footer.receiveProps({\n        layout: footerLayout,\n        ...toolbarProps\n      })\n    } else if (this.footer) {\n      this.footer.destroy()\n      this.footer = null\n    }\n  }\n\n  renderView(props: CalendarComponentProps, title: string) {\n    let { view } = this\n    let { viewSpec, dateProfileGenerator } = props\n\n    if (!view || view.viewSpec !== viewSpec) {\n\n      if (view) {\n        view.destroy()\n      }\n\n      view = this.view = new viewSpec['class'](\n        {\n          calendar: this.calendar,\n          view: null, // HACK. will get populated by Component\n          dateEnv: this.dateEnv,\n          theme: this.theme,\n          options: viewSpec.options\n        },\n        viewSpec,\n        dateProfileGenerator,\n        this.contentEl\n      )\n    } else {\n      view.addScroll(view.queryScroll())\n    }\n\n    view.title = title // for the API\n\n    let viewProps = {\n      dateProfile: props.dateProfile,\n      businessHours: this.parseBusinessHours(viewSpec.options.businessHours),\n      eventStore: props.eventStore,\n      eventUiBases: props.eventUiBases,\n      dateSelection: props.dateSelection,\n      eventSelection: props.eventSelection,\n      eventDrag: props.eventDrag,\n      eventResize: props.eventResize\n    }\n\n    let transformers = this.buildViewPropTransformers(this.calendar.pluginSystem.hooks.viewPropsTransformers)\n\n    for (let transformer of transformers) {\n      __assign(\n        viewProps,\n        transformer.transform(viewProps, viewSpec, props, view)\n      )\n    }\n\n    view.receiveProps(viewProps)\n  }\n\n\n  // Sizing\n  // -----------------------------------------------------------------------------------------------------------------\n\n  updateSize(isResize = false) {\n    let { view } = this\n\n    if (isResize) {\n      view.addScroll(view.queryScroll())\n    }\n\n    if (isResize || this.isHeightAuto == null) {\n      this.computeHeightVars()\n    }\n\n    view.updateSize(isResize, this.viewHeight, this.isHeightAuto)\n    view.updateNowIndicator() // we need to guarantee this will run after updateSize\n    view.popScroll(isResize)\n  }\n\n  computeHeightVars() {\n    let { calendar } = this // yuck. need to handle dynamic options\n    let heightInput = calendar.opt('height')\n    let contentHeightInput = calendar.opt('contentHeight')\n\n    this.isHeightAuto = heightInput === 'auto' || contentHeightInput === 'auto'\n\n    if (typeof contentHeightInput === 'number') { // exists and not 'auto'\n      this.viewHeight = contentHeightInput\n    } else if (typeof contentHeightInput === 'function') { // exists and is a function\n      this.viewHeight = contentHeightInput()\n    } else if (typeof heightInput === 'number') { // exists and not 'auto'\n      this.viewHeight = heightInput - this.queryToolbarsHeight()\n    } else if (typeof heightInput === 'function') { // exists and is a function\n      this.viewHeight = heightInput() - this.queryToolbarsHeight()\n    } else if (heightInput === 'parent') { // set to height of parent element\n      this.viewHeight = (this.el.parentNode as HTMLElement).offsetHeight - this.queryToolbarsHeight()\n    } else {\n      this.viewHeight = Math.round(\n        this.contentEl.offsetWidth /\n        Math.max(calendar.opt('aspectRatio'), .5)\n      )\n    }\n  }\n\n  queryToolbarsHeight() {\n    let height = 0\n\n    if (this.header) {\n      height += computeHeightAndMargins(this.header.el)\n    }\n\n    if (this.footer) {\n      height += computeHeightAndMargins(this.footer.el)\n    }\n\n    return height\n  }\n\n\n  // Height \"Freezing\"\n  // -----------------------------------------------------------------------------------------------------------------\n\n  freezeHeight() {\n    applyStyle(this.el, {\n      height: this.el.offsetHeight,\n      overflow: 'hidden'\n    })\n  }\n\n  thawHeight() {\n    applyStyle(this.el, {\n      height: '',\n      overflow: ''\n    })\n  }\n\n}\n\n\n// Title and Date Formatting\n// -----------------------------------------------------------------------------------------------------------------\n\n// Computes what the title at the top of the calendar should be for this view\nfunction computeTitle(dateProfile, viewOptions) {\n  let range: DateRange\n\n  // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\n  if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\n    range = dateProfile.currentRange\n  } else { // for day units or smaller, use the actual day range\n    range = dateProfile.activeRange\n  }\n\n  return this.dateEnv.formatRange(\n    range.start,\n    range.end,\n    createFormatter(\n      viewOptions.titleFormat || computeTitleFormat(dateProfile),\n      viewOptions.titleRangeSeparator\n    ),\n    { isEndExclusive: dateProfile.isRangeAllDay }\n  )\n}\n\n\n// Generates the format string that should be used to generate the title for the current date range.\n// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\nfunction computeTitleFormat(dateProfile) {\n  let currentRangeUnit = dateProfile.currentRangeUnit\n\n  if (currentRangeUnit === 'year') {\n    return { year: 'numeric' }\n  } else if (currentRangeUnit === 'month') {\n    return { year: 'numeric', month: 'long' } // like \"September 2014\"\n  } else {\n    let days = diffWholeDays(\n      dateProfile.currentRange.start,\n      dateProfile.currentRange.end\n    )\n    if (days !== null && days > 1) {\n      // multi-day range. shorter, like \"Sep 9 - 10 2014\"\n      return { year: 'numeric', month: 'short', day: 'numeric' }\n    } else {\n      // one day. longer, like \"September 9 2014\"\n      return { year: 'numeric', month: 'long', day: 'numeric' }\n    }\n  }\n}\n\n\n// Plugin\n// -----------------------------------------------------------------------------------------------------------------\n\nfunction buildViewPropTransformers(theClasses: ViewPropsTransformerClass[]) {\n  return theClasses.map(function(theClass) {\n    return new theClass()\n  })\n}\n","import DateComponent from '../component/DateComponent'\n\n\nexport abstract class Interaction {\n\n  component: DateComponent<any>\n\n  constructor(settings: InteractionSettings) {\n    this.component = settings.component\n  }\n\n  destroy() {\n  }\n\n}\n\nexport type InteractionClass = { new(settings: InteractionSettings): Interaction }\n\n\nexport interface InteractionSettingsInput {\n  el: HTMLElement\n  useEventCenter?: boolean\n  // TODO: add largeUnit\n}\n\nexport interface InteractionSettings {\n  component: DateComponent<any>\n  el: HTMLElement\n  useEventCenter: boolean\n}\n\nexport type InteractionSettingsStore = { [componenUid: string]: InteractionSettings }\n\nexport function parseInteractionSettings(component: DateComponent<any>, input: InteractionSettingsInput): InteractionSettings {\n  return {\n    component: component,\n    el: input.el,\n    useEventCenter: input.useEventCenter != null ? input.useEventCenter : true\n  }\n}\n\nexport function interactionSettingsToStore(settings: InteractionSettings) {\n  return {\n    [settings.component.uid]: settings\n  }\n}\n\n\n\n// global state\nexport let interactionSettingsStore: InteractionSettingsStore = {}\n","import { listenBySelector } from '../util/dom-event'\nimport EventApi from '../api/EventApi'\nimport { elementClosest } from '../util/dom-manip'\nimport { getElSeg } from '../component/event-rendering'\nimport { Interaction, InteractionSettings } from './interaction'\n\n/*\nDetects when the user clicks on an event within a DateComponent\n*/\nexport default class EventClicking extends Interaction {\n\n  constructor(settings: InteractionSettings) {\n    super(settings)\n    let { component } = settings\n\n    this.destroy = listenBySelector(\n      component.el,\n      'click',\n      component.fgSegSelector + ',' + component.bgSegSelector,\n      this.handleSegClick\n    )\n  }\n\n  handleSegClick = (ev: Event, segEl: HTMLElement) => {\n    let { component } = this\n    let seg = getElSeg(segEl)\n\n    if (\n      seg && // might be the <div> surrounding the more link\n      component.isValidSegDownEl(ev.target as HTMLElement)\n    ) {\n\n      // our way to simulate a link click for elements that can't be <a> tags\n      // grab before trigger fired in case trigger trashes DOM thru rerendering\n      let hasUrlContainer = elementClosest(ev.target as HTMLElement, '.fc-has-url')\n      let url = hasUrlContainer ? (hasUrlContainer.querySelector('a[href]') as any).href : ''\n\n      component.publiclyTrigger('eventClick', [\n        {\n          el: segEl,\n          event: new EventApi(\n            component.calendar,\n            seg.eventRange.def,\n            seg.eventRange.instance\n          ),\n          jsEvent: ev as MouseEvent, // Is this always a mouse event? See #4655\n          view: component.view\n        }\n      ])\n\n      if (url && !ev.defaultPrevented) {\n        window.location.href = url\n      }\n    }\n  }\n\n}\n","import { listenToHoverBySelector } from '../util/dom-event'\nimport EventApi from '../api/EventApi'\nimport { getElSeg } from '../component/event-rendering'\nimport { Interaction, InteractionSettings } from './interaction'\n\n/*\nTriggers events and adds/removes core classNames when the user's pointer\nenters/leaves event-elements of a component.\n*/\nexport default class EventHovering extends Interaction {\n\n  removeHoverListeners: () => void\n  currentSegEl: HTMLElement\n\n  constructor(settings: InteractionSettings) {\n    super(settings)\n    let { component } = settings\n\n    this.removeHoverListeners = listenToHoverBySelector(\n      component.el,\n      component.fgSegSelector + ',' + component.bgSegSelector,\n      this.handleSegEnter,\n      this.handleSegLeave\n    )\n\n    component.calendar.on('eventElRemove', this.handleEventElRemove)\n  }\n\n  destroy() {\n    this.removeHoverListeners()\n    this.component.calendar.off('eventElRemove', this.handleEventElRemove)\n  }\n\n  // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it\n  handleEventElRemove = (el: HTMLElement) => {\n    if (el === this.currentSegEl) {\n      this.handleSegLeave(null, this.currentSegEl)\n    }\n  }\n\n  handleSegEnter = (ev: Event, segEl: HTMLElement) => {\n    if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper\n      segEl.classList.add('fc-allow-mouse-resize')\n      this.currentSegEl = segEl\n      this.triggerEvent('eventMouseEnter', ev, segEl)\n    }\n  }\n\n  handleSegLeave = (ev: Event | null, segEl: HTMLElement) => {\n    if (this.currentSegEl) {\n      segEl.classList.remove('fc-allow-mouse-resize')\n      this.currentSegEl = null\n      this.triggerEvent('eventMouseLeave', ev, segEl)\n    }\n  }\n\n  triggerEvent(publicEvName: 'eventMouseEnter' | 'eventMouseLeave', ev: Event | null, segEl: HTMLElement) {\n    let { component } = this\n    let seg = getElSeg(segEl)!\n\n    if (!ev || component.isValidSegDownEl(ev.target as HTMLElement)) {\n      component.publiclyTrigger(publicEvName, [\n        {\n          el: segEl,\n          event: new EventApi(\n            this.component.calendar,\n            seg.eventRange.def,\n            seg.eventRange.instance\n          ),\n          jsEvent: ev as MouseEvent, // Is this always a mouse event? See #4655\n          view: component.view\n        }\n      ])\n    }\n  }\n\n}\n","import Theme from './Theme'\n\nexport default class StandardTheme extends Theme {\n}\n\nStandardTheme.prototype.classes = {\n  widget: 'fc-unthemed',\n  widgetHeader: 'fc-widget-header',\n  widgetContent: 'fc-widget-content',\n\n  buttonGroup: 'fc-button-group',\n  button: 'fc-button fc-button-primary',\n  buttonActive: 'fc-button-active',\n\n  popoverHeader: 'fc-widget-header',\n  popoverContent: 'fc-widget-content',\n\n  // day grid\n  headerRow: 'fc-widget-header',\n  dayRow: 'fc-widget-content',\n\n  // list view\n  listView: 'fc-widget-content'\n}\n\nStandardTheme.prototype.baseIconClass = 'fc-icon'\nStandardTheme.prototype.iconClasses = {\n  close: 'fc-icon-x',\n  prev: 'fc-icon-chevron-left',\n  next: 'fc-icon-chevron-right',\n  prevYear: 'fc-icon-chevrons-left',\n  nextYear: 'fc-icon-chevrons-right'\n}\n\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons'\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon'\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-'\n","import { listenBySelector } from './util/dom-event'\nimport { capitaliseFirstLetter, debounce } from './util/misc'\nimport { default as EmitterMixin, EmitterInterface } from './common/EmitterMixin'\nimport OptionsManager from './OptionsManager'\nimport View from './View'\nimport Theme from './theme/Theme'\nimport { OptionsInput, EventHandlerName, EventHandlerArgs } from './types/input-types'\nimport { Locale, buildLocale, parseRawLocales, RawLocaleMap } from './datelib/locale'\nimport { DateEnv, DateInput } from './datelib/env'\nimport { DateMarker, startOfDay } from './datelib/marker'\nimport { createFormatter } from './datelib/formatting'\nimport { Duration, createDuration, DurationInput } from './datelib/duration'\nimport reduce from './reducers/main'\nimport { parseDateSpan, DateSpanInput, DateSpan, buildDateSpanApi, DateSpanApi, buildDatePointApi, DatePointApi } from './structs/date-span'\nimport { memoize, memoizeOutput } from './util/memoize'\nimport { mapHash, isPropsEqual } from './util/object'\nimport { DateRangeInput } from './datelib/date-range'\nimport DateProfileGenerator from './DateProfileGenerator'\nimport { EventSourceInput, parseEventSource, EventSourceHash } from './structs/event-source'\nimport { EventInput, parseEvent, EventDefHash } from './structs/event'\nimport { CalendarState, Action } from './reducers/types'\nimport EventSourceApi from './api/EventSourceApi'\nimport EventApi from './api/EventApi'\nimport { createEmptyEventStore, EventStore, eventTupleToStore } from './structs/event-store'\nimport { processScopedUiProps, EventUiHash, EventUi } from './component/event-ui'\nimport { buildViewSpecs, ViewSpecHash, ViewSpec } from './structs/view-spec'\nimport { PluginSystem } from './plugin-system'\nimport CalendarComponent from './CalendarComponent'\nimport { __assign } from 'tslib'\nimport { refinePluginDefs } from './options'\nimport DateComponent from './component/DateComponent'\nimport { PointerDragEvent } from './interactions/pointer'\nimport { InteractionSettingsInput, parseInteractionSettings, Interaction, interactionSettingsStore, InteractionClass } from './interactions/interaction'\nimport EventClicking from './interactions/EventClicking'\nimport EventHovering from './interactions/EventHovering'\nimport StandardTheme from './theme/StandardTheme'\nimport { CmdFormatterFunc } from './datelib/formatting-cmd'\nimport { NamedTimeZoneImplClass } from './datelib/timezone'\n\nexport interface DateClickApi extends DatePointApi {\n  dayEl: HTMLElement\n  jsEvent: UIEvent\n  view: View\n}\n\nexport interface DateSelectionApi extends DateSpanApi {\n  jsEvent: UIEvent\n  view: View\n}\n\nexport type DatePointTransform = (dateSpan: DateSpan, calendar: Calendar) => any\nexport type DateSpanTransform = (dateSpan: DateSpan, calendar: Calendar) => any\n\nexport type CalendarInteraction = { destroy() }\nexport type CalendarInteractionClass = { new(calendar: Calendar): CalendarInteraction }\n\nexport type OptionChangeHandler = (propValue: any, calendar: Calendar, deepEquals) => void\nexport type OptionChangeHandlerMap = { [propName: string]: OptionChangeHandler }\n\nexport default class Calendar {\n\n  // global handler registry\n  static on: EmitterInterface['on']\n  static off: EmitterInterface['off']\n  static trigger: EmitterInterface['trigger']\n\n  on: EmitterInterface['on']\n  one: EmitterInterface['one']\n  off: EmitterInterface['off']\n  trigger: EmitterInterface['trigger']\n  triggerWith: EmitterInterface['triggerWith']\n  hasHandlers: EmitterInterface['hasHandlers']\n\n  private parseRawLocales = memoize(parseRawLocales)\n  private buildLocale = memoize(buildLocale)\n  private buildDateEnv = memoize(buildDateEnv)\n  private buildTheme = memoize(buildTheme)\n  private buildEventUiSingleBase = memoize(this._buildEventUiSingleBase)\n  private buildSelectionConfig = memoize(this._buildSelectionConfig)\n  private buildEventUiBySource = memoizeOutput(buildEventUiBySource, isPropsEqual)\n  private buildEventUiBases = memoize(buildEventUiBases)\n\n  eventUiBases: EventUiHash // solely for validation system\n  selectionConfig: EventUi // doesn't need all the info EventUi provides. only validation-related. TODO: separate data structs\n\n  optionsManager: OptionsManager\n  viewSpecs: ViewSpecHash\n  dateProfileGenerators: { [viewName: string]: DateProfileGenerator }\n  theme: Theme\n  dateEnv: DateEnv\n  availableRawLocales: RawLocaleMap\n  pluginSystem: PluginSystem\n  defaultAllDayEventDuration: Duration\n  defaultTimedEventDuration: Duration\n\n  calendarInteractions: CalendarInteraction[]\n  interactionsStore: { [componentUid: string]: Interaction[] } = {}\n  removeNavLinkListener: any\n\n  windowResizeProxy: any\n  isHandlingWindowResize: boolean\n\n  state: CalendarState\n  actionQueue = []\n  isReducing: boolean = false\n\n  // isDisplaying: boolean = false // installed in DOM? accepting renders?\n  needsRerender: boolean = false // needs a render?\n  needsFullRerender: boolean = false\n  isRendering: boolean = false // currently in the executeRender function?\n  renderingPauseDepth: number = 0\n  renderableEventStore: EventStore\n  buildDelayedRerender = memoize(buildDelayedRerender)\n  delayedRerender: any\n  afterSizingTriggers: any = {}\n  isViewUpdated: boolean = false\n  isDatesUpdated: boolean = false\n  isEventsUpdated: boolean = false\n\n  el: HTMLElement\n  component: CalendarComponent\n\n\n  constructor(el: HTMLElement, overrides?: OptionsInput) {\n    this.el = el\n\n    this.optionsManager = new OptionsManager(overrides || {})\n    this.pluginSystem = new PluginSystem()\n\n    // only do once. don't do in handleOptions. because can't remove plugins\n    this.addPluginInputs(this.optionsManager.computed.plugins || [])\n\n    this.handleOptions(this.optionsManager.computed)\n    this.publiclyTrigger('_init') // for tests\n    this.hydrate()\n\n    this.calendarInteractions = this.pluginSystem.hooks.calendarInteractions\n      .map((calendarInteractionClass) => {\n        return new calendarInteractionClass(this)\n      })\n  }\n\n\n  addPluginInputs(pluginInputs) {\n    let pluginDefs = refinePluginDefs(pluginInputs)\n\n    for (let pluginDef of pluginDefs) {\n      this.pluginSystem.add(pluginDef)\n    }\n  }\n\n\n  // public API\n  get view(): View {\n    return this.component ? this.component.view : null\n  }\n\n\n  // Public API for rendering\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  render() {\n    if (!this.component) {\n      this.renderableEventStore = createEmptyEventStore()\n      this.bindHandlers()\n      this.executeRender()\n    } else {\n      this.requestRerender(true)\n    }\n  }\n\n\n  destroy() {\n    if (this.component) {\n      this.unbindHandlers()\n      this.component.destroy() // don't null-out. in case API needs access\n      this.component = null // umm ???\n\n      for (let interaction of this.calendarInteractions) {\n        interaction.destroy()\n      }\n\n      this.publiclyTrigger('_destroyed')\n    }\n  }\n\n\n  // Handlers\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  bindHandlers() {\n\n    // event delegation for nav links\n    this.removeNavLinkListener = listenBySelector(this.el, 'click', 'a[data-goto]', (ev, anchorEl) => {\n      let gotoOptions: any = anchorEl.getAttribute('data-goto')\n      gotoOptions = gotoOptions ? JSON.parse(gotoOptions) : {}\n\n      let { dateEnv } = this\n      let dateMarker = dateEnv.createMarker(gotoOptions.date)\n      let viewType = gotoOptions.type\n\n      // property like \"navLinkDayClick\". might be a string or a function\n      let customAction = this.viewOpt('navLink' + capitaliseFirstLetter(viewType) + 'Click')\n\n      if (typeof customAction === 'function') {\n        customAction(dateEnv.toDate(dateMarker), ev)\n      } else {\n        if (typeof customAction === 'string') {\n          viewType = customAction\n        }\n        this.zoomTo(dateMarker, viewType)\n      }\n    })\n\n    if (this.opt('handleWindowResize')) {\n      window.addEventListener('resize',\n        this.windowResizeProxy = debounce( // prevents rapid calls\n          this.windowResize.bind(this),\n          this.opt('windowResizeDelay')\n        )\n      )\n    }\n  }\n\n  unbindHandlers() {\n    this.removeNavLinkListener()\n\n    if (this.windowResizeProxy) {\n      window.removeEventListener('resize', this.windowResizeProxy)\n      this.windowResizeProxy = null\n    }\n  }\n\n\n  // Dispatcher\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  hydrate() {\n    this.state = this.buildInitialState()\n\n    let rawSources = this.opt('eventSources') || []\n    let singleRawSource = this.opt('events')\n    let sources = [] // parsed\n\n    if (singleRawSource) {\n      rawSources.unshift(singleRawSource)\n    }\n\n    for (let rawSource of rawSources) {\n      let source = parseEventSource(rawSource, this)\n      if (source) {\n        sources.push(source)\n      }\n    }\n\n    this.batchRendering(() => {\n      this.dispatch({ type: 'INIT' }) // pass in sources here?\n      this.dispatch({ type: 'ADD_EVENT_SOURCES', sources })\n      this.dispatch({\n        type: 'SET_VIEW_TYPE',\n        viewType: this.opt('defaultView') || this.pluginSystem.hooks.defaultView\n      })\n    })\n  }\n\n\n  buildInitialState(): CalendarState {\n    return {\n      viewType: null,\n      loadingLevel: 0,\n      eventSourceLoadingLevel: 0,\n      currentDate: this.getInitialDate(),\n      dateProfile: null,\n      eventSources: {},\n      eventStore: createEmptyEventStore(),\n      dateSelection: null,\n      eventSelection: '',\n      eventDrag: null,\n      eventResize: null\n    }\n  }\n\n\n  dispatch(action: Action) {\n    this.actionQueue.push(action)\n\n    if (!this.isReducing) {\n      this.isReducing = true\n      let oldState = this.state\n\n      while (this.actionQueue.length) {\n        this.state = this.reduce(\n          this.state,\n          this.actionQueue.shift(),\n          this\n        )\n      }\n\n      let newState = this.state\n      this.isReducing = false\n\n      if (!oldState.loadingLevel && newState.loadingLevel) {\n        this.publiclyTrigger('loading', [ true ])\n      } else if (oldState.loadingLevel && !newState.loadingLevel) {\n        this.publiclyTrigger('loading', [ false ])\n      }\n\n      let view = this.component && this.component.view\n\n      if (oldState.eventStore !== newState.eventStore || this.needsFullRerender) {\n        if (oldState.eventStore) {\n          this.isEventsUpdated = true\n        }\n      }\n\n      if (oldState.dateProfile !== newState.dateProfile || this.needsFullRerender) {\n        if (oldState.dateProfile && view) { // why would view be null!?\n          this.publiclyTrigger('datesDestroy', [\n            {\n              view,\n              el: view.el\n            }\n          ])\n        }\n        this.isDatesUpdated = true\n      }\n\n      if (oldState.viewType !== newState.viewType || this.needsFullRerender) {\n        if (oldState.viewType && view) { // why would view be null!?\n          this.publiclyTrigger('viewSkeletonDestroy', [\n            {\n              view,\n              el: view.el\n            }\n          ])\n        }\n        this.isViewUpdated = true\n      }\n\n      this.requestRerender()\n    }\n  }\n\n\n  reduce(state: CalendarState, action: Action, calendar: Calendar): CalendarState {\n    return reduce(state, action, calendar)\n  }\n\n\n  // Render Queue\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  requestRerender(needsFull = false) {\n    this.needsRerender = true\n    this.needsFullRerender = this.needsFullRerender || needsFull\n    this.delayedRerender() // will call a debounced-version of tryRerender\n  }\n\n\n  tryRerender() {\n    if (\n      this.component && // must be accepting renders\n      this.needsRerender && // indicates that a rerender was requested\n      !this.renderingPauseDepth && // not paused\n      !this.isRendering // not currently in the render loop\n    ) {\n      this.executeRender()\n    }\n  }\n\n\n  batchRendering(func) {\n    this.renderingPauseDepth++\n    func()\n    this.renderingPauseDepth--\n\n    if (this.needsRerender) {\n      this.requestRerender()\n    }\n  }\n\n\n  // Rendering\n  // -----------------------------------------------------------------------------------------------------------------\n\n  executeRender() {\n    let { needsFullRerender } = this // save before clearing\n\n    // clear these BEFORE the render so that new values will accumulate during render\n    this.needsRerender = false\n    this.needsFullRerender = false\n\n    this.isRendering = true\n    this.renderComponent(needsFullRerender)\n    this.isRendering = false\n\n    // received a rerender request while rendering\n    if (this.needsRerender) {\n      this.delayedRerender()\n    }\n  }\n\n  /*\n  don't call this directly. use executeRender instead\n  */\n  renderComponent(needsFull) {\n    let { state, component } = this\n    let { viewType } = state\n    let viewSpec = this.viewSpecs[viewType]\n    let savedScroll = (needsFull && component) ? component.view.queryScroll() : null\n\n    if (!viewSpec) {\n      throw new Error(`View type \"${viewType}\" is not valid`)\n    }\n\n    // if event sources are still loading and progressive rendering hasn't been enabled,\n    // keep rendering the last fully loaded set of events\n    let renderableEventStore = this.renderableEventStore =\n      (state.eventSourceLoadingLevel && !this.opt('progressiveEventRendering')) ?\n        this.renderableEventStore :\n        state.eventStore\n\n    let eventUiSingleBase = this.buildEventUiSingleBase(viewSpec.options)\n    let eventUiBySource = this.buildEventUiBySource(state.eventSources)\n    let eventUiBases = this.eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource)\n\n    if (needsFull || !component) {\n\n      if (component) {\n        component.freezeHeight() // next component will unfreeze it\n        component.destroy()\n      }\n\n      component = this.component = new CalendarComponent({\n        calendar: this,\n        view: null, // HACK. will get populated by Component\n        dateEnv: this.dateEnv,\n        theme: this.theme,\n        options: this.optionsManager.computed\n      }, this.el)\n    }\n\n    component.receiveProps({\n      ...state,\n      viewSpec,\n      dateProfile: state.dateProfile,\n      dateProfileGenerator: this.dateProfileGenerators[viewType],\n      eventStore: renderableEventStore,\n      eventUiBases,\n      dateSelection: state.dateSelection,\n      eventSelection: state.eventSelection,\n      eventDrag: state.eventDrag,\n      eventResize: state.eventResize\n    })\n\n    if (savedScroll) {\n      component.view.applyScroll(savedScroll, false)\n    }\n\n    if (this.isViewUpdated) {\n      this.isViewUpdated = false\n      this.publiclyTrigger('viewSkeletonRender', [\n        {\n          view: component.view,\n          el: component.view.el\n        }\n      ])\n    }\n\n    if (this.isDatesUpdated) {\n      this.isDatesUpdated = false\n      this.publiclyTrigger('datesRender', [\n        {\n          view: component.view,\n          el: component.view.el\n        }\n      ])\n    }\n\n    if (this.isEventsUpdated) {\n      this.isEventsUpdated = false\n    }\n\n    this.releaseAfterSizingTriggers()\n  }\n\n\n  // Options\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  setOption(name: string, val) {\n    this.mutateOptions({ [name]: val }, [], true)\n  }\n\n\n  getOption(name: string) { // getter, used externally\n    return this.optionsManager.computed[name]\n  }\n\n\n  opt(name: string) { // getter, used internally\n    return this.optionsManager.computed[name]\n  }\n\n\n  viewOpt(name: string) { // getter, used internally\n    return this.viewOpts()[name]\n  }\n\n\n  viewOpts() {\n    return this.viewSpecs[this.state.viewType].options\n  }\n\n  /*\n  handles option changes (like a diff)\n  */\n  mutateOptions(updates, removals: string[], isDynamic?: boolean, deepEquals?) {\n    let changeHandlers = this.pluginSystem.hooks.optionChangeHandlers\n    let normalUpdates = {}\n    let specialUpdates = {}\n    let oldDateEnv = this.dateEnv // do this before handleOptions\n    let isTimeZoneDirty = false\n    let isSizeDirty = false\n    let anyDifficultOptions = Boolean(removals.length)\n\n    for (let name in updates) {\n      if (changeHandlers[name]) {\n        specialUpdates[name] = updates[name]\n      } else {\n        normalUpdates[name] = updates[name]\n      }\n    }\n\n    for (let name in normalUpdates) {\n      if (/^(height|contentHeight|aspectRatio)$/.test(name)) {\n        isSizeDirty = true\n      } else if (/^(defaultDate|defaultView)$/.test(name)) {\n        // can't change date this way. use gotoDate instead\n      } else {\n        anyDifficultOptions = true\n\n        if (name === 'timeZone') {\n          isTimeZoneDirty = true\n        }\n      }\n    }\n\n    this.optionsManager.mutate(normalUpdates, removals, isDynamic)\n\n    if (anyDifficultOptions) {\n      this.handleOptions(this.optionsManager.computed)\n      this.needsFullRerender = true\n    }\n\n    console.log('anyDifficultOptions', anyDifficultOptions)\n    this.batchRendering(() => {\n\n      if (anyDifficultOptions) {\n\n        if (isTimeZoneDirty) {\n          this.dispatch({\n            type: 'CHANGE_TIMEZONE',\n            oldDateEnv\n          })\n        }\n\n        /* HACK\n        has the same effect as calling this.requestRerender(true)\n        but recomputes the state's dateProfile\n        */\n        this.dispatch({\n          type: 'SET_VIEW_TYPE',\n          viewType: this.state.viewType\n        })\n\n      } else if (isSizeDirty) {\n        this.updateSize()\n      }\n\n      // special updates\n      if (deepEquals) {\n        for (let name in specialUpdates) {\n          changeHandlers[name](specialUpdates[name], this, deepEquals)\n        }\n      }\n\n    })\n  }\n\n  /*\n  rebuilds things based off of a complete set of refined options\n  */\n  handleOptions(options) {\n    let pluginHooks = this.pluginSystem.hooks\n\n    this.defaultAllDayEventDuration = createDuration(options.defaultAllDayEventDuration)\n    this.defaultTimedEventDuration = createDuration(options.defaultTimedEventDuration)\n    this.delayedRerender = this.buildDelayedRerender(options.rerenderDelay)\n    this.theme = this.buildTheme(options)\n\n    let available = this.parseRawLocales(options.locales)\n    this.availableRawLocales = available.map\n    let locale = this.buildLocale(options.locale || available.defaultCode, available.map)\n\n    this.dateEnv = this.buildDateEnv(\n      locale,\n      options.timeZone,\n      pluginHooks.namedTimeZonedImpl,\n      options.firstDay,\n      options.weekNumberCalculation,\n      options.weekLabel,\n      pluginHooks.cmdFormatter\n    )\n\n    this.selectionConfig = this.buildSelectionConfig(options) // needs dateEnv. do after :(\n\n    // ineffecient to do every time?\n    this.viewSpecs = buildViewSpecs(\n      pluginHooks.views,\n      this.optionsManager\n    )\n\n    // ineffecient to do every time?\n    this.dateProfileGenerators = mapHash(this.viewSpecs, (viewSpec) => {\n      return new viewSpec.class.prototype.dateProfileGeneratorClass(viewSpec, this)\n    })\n  }\n\n\n  getAvailableLocaleCodes() {\n    return Object.keys(this.availableRawLocales)\n  }\n\n\n  _buildSelectionConfig(rawOpts) {\n    return processScopedUiProps('select', rawOpts, this)\n  }\n\n\n  _buildEventUiSingleBase(rawOpts) {\n    if (rawOpts.editable) { // so 'editable' affected events\n      rawOpts = { ...rawOpts, eventEditable: true }\n    }\n    return processScopedUiProps('event', rawOpts, this)\n  }\n\n\n  // Trigger\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  hasPublicHandlers<T extends EventHandlerName>(name: T): boolean {\n    return this.hasHandlers(name) ||\n      this.opt(name) // handler specified in options\n  }\n\n\n  publiclyTrigger<T extends EventHandlerName>(name: T, args?: EventHandlerArgs<T>) {\n    let optHandler = this.opt(name)\n\n    this.triggerWith(name, this, args)\n\n    if (optHandler) {\n      return optHandler.apply(this, args)\n    }\n  }\n\n\n  publiclyTriggerAfterSizing<T extends EventHandlerName>(name: T, args: EventHandlerArgs<T>) {\n    let { afterSizingTriggers } = this;\n\n    (afterSizingTriggers[name] || (afterSizingTriggers[name] = [])).push(args)\n  }\n\n\n  releaseAfterSizingTriggers() {\n    let { afterSizingTriggers } = this\n\n    for (let name in afterSizingTriggers) {\n      for (let args of afterSizingTriggers[name]) {\n        this.publiclyTrigger(name as EventHandlerName, args)\n      }\n    }\n\n    this.afterSizingTriggers = {}\n  }\n\n\n  // View\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  // Returns a boolean about whether the view is okay to instantiate at some point\n  isValidViewType(viewType: string): boolean {\n    return Boolean(this.viewSpecs[viewType])\n  }\n\n\n  changeView(viewType: string, dateOrRange?: DateRangeInput | DateInput) {\n    let dateMarker = null\n\n    if (dateOrRange) {\n      if ((dateOrRange as DateRangeInput).start && (dateOrRange as DateRangeInput).end) { // a range\n        this.optionsManager.mutate({ visibleRange: dateOrRange }, []) // will not rerender\n        this.handleOptions(this.optionsManager.computed) // ...but yuck\n      } else { // a date\n        dateMarker = this.dateEnv.createMarker(dateOrRange as DateInput) // just like gotoDate\n      }\n    }\n\n    this.unselect()\n    this.dispatch({\n      type: 'SET_VIEW_TYPE',\n      viewType,\n      dateMarker\n    })\n  }\n\n\n  // Forces navigation to a view for the given date.\n  // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n  // needs to change\n  zoomTo(dateMarker: DateMarker, viewType?: string) {\n    let spec\n\n    viewType = viewType || 'day' // day is default zoom\n    spec = this.viewSpecs[viewType] ||\n      this.getUnitViewSpec(viewType)\n\n    this.unselect()\n\n    if (spec) {\n      this.dispatch({\n        type: 'SET_VIEW_TYPE',\n        viewType: spec.type,\n        dateMarker\n      })\n    } else {\n      this.dispatch({\n        type: 'SET_DATE',\n        dateMarker\n      })\n    }\n  }\n\n\n  // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\n  // Preference is given to views that have corresponding buttons.\n  getUnitViewSpec(unit: string): ViewSpec | null {\n    let { component } = this\n    let viewTypes = []\n    let i\n    let spec\n\n    // put views that have buttons first. there will be duplicates, but oh\n    if (component.header) {\n      viewTypes.push(...component.header.viewsWithButtons)\n    }\n    if (component.footer) {\n      viewTypes.push(...component.footer.viewsWithButtons)\n    }\n\n    for (let viewType in this.viewSpecs) {\n      viewTypes.push(viewType)\n    }\n\n    for (i = 0; i < viewTypes.length; i++) {\n      spec = this.viewSpecs[viewTypes[i]]\n      if (spec) {\n        if (spec.singleUnit === unit) {\n          return spec\n        }\n      }\n    }\n  }\n\n\n  // Current Date\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  getInitialDate() {\n    let defaultDateInput = this.opt('defaultDate')\n\n    // compute the initial ambig-timezone date\n    if (defaultDateInput != null) {\n      return this.dateEnv.createMarker(defaultDateInput)\n    } else {\n      return this.getNow() // getNow already returns unzoned\n    }\n  }\n\n\n  prev() {\n    this.unselect()\n    this.dispatch({ type: 'PREV' })\n  }\n\n\n  next() {\n    this.unselect()\n    this.dispatch({ type: 'NEXT' })\n  }\n\n\n  prevYear() {\n    this.unselect()\n    this.dispatch({\n      type: 'SET_DATE',\n      dateMarker: this.dateEnv.addYears(this.state.currentDate, -1)\n    })\n  }\n\n\n  nextYear() {\n    this.unselect()\n    this.dispatch({\n      type: 'SET_DATE',\n      dateMarker: this.dateEnv.addYears(this.state.currentDate, 1)\n    })\n  }\n\n\n  today() {\n    this.unselect()\n    this.dispatch({\n      type: 'SET_DATE',\n      dateMarker: this.getNow()\n    })\n  }\n\n\n  gotoDate(zonedDateInput) {\n    this.unselect()\n    this.dispatch({\n      type: 'SET_DATE',\n      dateMarker: this.dateEnv.createMarker(zonedDateInput)\n    })\n  }\n\n\n  incrementDate(deltaInput) { // is public facing\n    let delta = createDuration(deltaInput)\n\n    if (delta) { // else, warn about invalid input?\n      this.unselect()\n      this.dispatch({\n        type: 'SET_DATE',\n        dateMarker: this.dateEnv.add(this.state.currentDate, delta)\n      })\n    }\n  }\n\n\n  // for external API\n  getDate(): Date {\n    return this.dateEnv.toDate(this.state.currentDate)\n  }\n\n\n  // Date Formatting Utils\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  formatDate(d: DateInput, formatter): string {\n    const { dateEnv } = this\n    return dateEnv.format(\n      dateEnv.createMarker(d),\n      createFormatter(formatter)\n    )\n  }\n\n\n  // `settings` is for formatter AND isEndExclusive\n  formatRange(d0: DateInput, d1: DateInput, settings) {\n    const { dateEnv } = this\n    return dateEnv.formatRange(\n      dateEnv.createMarker(d0),\n      dateEnv.createMarker(d1),\n      createFormatter(settings, this.opt('defaultRangeSeparator')),\n      settings\n    )\n  }\n\n\n  formatIso(d: DateInput, omitTime?: boolean) {\n    const { dateEnv } = this\n    return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime })\n  }\n\n\n  // Sizing\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  windowResize(ev: Event) {\n    if (\n      !this.isHandlingWindowResize &&\n      this.component && // why?\n      (ev as any).target === window // not a jqui resize event\n    ) {\n      this.isHandlingWindowResize = true\n      this.updateSize()\n      this.publiclyTrigger('windowResize', [ this.view ])\n      this.isHandlingWindowResize = false\n    }\n  }\n\n\n  updateSize() { // public\n    if (this.component) { // when?\n      this.component.updateSize(true)\n    }\n  }\n\n\n  // Component Registration\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  registerInteractiveComponent(component: DateComponent<any>, settingsInput: InteractionSettingsInput) {\n    let settings = parseInteractionSettings(component, settingsInput)\n    let DEFAULT_INTERACTIONS: InteractionClass[] = [\n      EventClicking,\n      EventHovering\n    ]\n    let interactionClasses: InteractionClass[] = DEFAULT_INTERACTIONS.concat(\n      this.pluginSystem.hooks.componentInteractions\n    )\n    let interactions = interactionClasses.map((interactionClass) => {\n      return new interactionClass(settings)\n    })\n\n    this.interactionsStore[component.uid] = interactions\n    interactionSettingsStore[component.uid] = settings\n  }\n\n\n  unregisterInteractiveComponent(component: DateComponent<any>) {\n\n    for (let listener of this.interactionsStore[component.uid]) {\n      listener.destroy()\n    }\n\n    delete this.interactionsStore[component.uid]\n    delete interactionSettingsStore[component.uid]\n  }\n\n\n  // Date Selection / Event Selection / DayClick\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  // this public method receives start/end dates in any format, with any timezone\n  // NOTE: args were changed from v3\n  select(dateOrObj: DateInput | any, endDate?: DateInput) {\n    let selectionInput: DateSpanInput\n\n    if (endDate == null) {\n      if (dateOrObj.start != null) {\n        selectionInput = dateOrObj as DateSpanInput\n      } else {\n        selectionInput = {\n          start: dateOrObj,\n          end: null\n        }\n      }\n    } else {\n      selectionInput = {\n        start: dateOrObj,\n        end: endDate\n      } as DateSpanInput\n    }\n\n    let selection = parseDateSpan(\n      selectionInput,\n      this.dateEnv,\n      createDuration({ days: 1 }) // TODO: cache this?\n    )\n\n    if (selection) { // throw parse error otherwise?\n      this.dispatch({ type: 'SELECT_DATES', selection })\n      this.triggerDateSelect(selection)\n    }\n  }\n\n\n  // public method\n  unselect(pev?: PointerDragEvent) {\n    if (this.state.dateSelection) {\n      this.dispatch({ type: 'UNSELECT_DATES' })\n      this.triggerDateUnselect(pev)\n    }\n  }\n\n\n  triggerDateSelect(selection: DateSpan, pev?: PointerDragEvent) {\n    const arg = {\n      ...this.buildDateSpanApi(selection),\n      jsEvent: pev ? pev.origEvent as MouseEvent : null, // Is this always a mouse event? See #4655\n      view: this.view\n    }\n    this.publiclyTrigger('select', [ arg ])\n  }\n\n\n  triggerDateUnselect(pev?: PointerDragEvent) {\n    this.publiclyTrigger('unselect', [\n      {\n        jsEvent: pev ? pev.origEvent : null,\n        view: this.view\n      }\n    ])\n  }\n\n\n  // TODO: receive pev?\n  triggerDateClick(dateSpan: DateSpan, dayEl: HTMLElement, view: View, ev: UIEvent) {\n    const arg = {\n      ...this.buildDatePointApi(dateSpan),\n      dayEl,\n      jsEvent: ev as MouseEvent, // Is this always a mouse event? See #4655\n      view\n    }\n\n    this.publiclyTrigger('dateClick', [ arg ])\n  }\n\n\n  buildDatePointApi(dateSpan: DateSpan) {\n    let props = {} as DatePointApi\n\n    for (let transform of this.pluginSystem.hooks.datePointTransforms) {\n      __assign(props, transform(dateSpan, this))\n    }\n\n    __assign(props, buildDatePointApi(dateSpan, this.dateEnv))\n\n    return props\n  }\n\n\n  buildDateSpanApi(dateSpan: DateSpan) {\n    let props = {} as DateSpanApi\n\n    for (let transform of this.pluginSystem.hooks.dateSpanTransforms) {\n      __assign(props, transform(dateSpan, this))\n    }\n\n    __assign(props, buildDateSpanApi(dateSpan, this.dateEnv))\n\n    return props\n  }\n\n\n  // Date Utils\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  // Returns a DateMarker for the current date, as defined by the client's computer or from the `now` option\n  getNow(): DateMarker {\n    let now = this.opt('now')\n\n    if (typeof now === 'function') {\n      now = now()\n    }\n\n    if (now == null) {\n      return this.dateEnv.createNowMarker()\n    }\n\n    return this.dateEnv.createMarker(now)\n  }\n\n\n  // Event-Date Utilities\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  // Given an event's allDay status and start date, return what its fallback end date should be.\n  // TODO: rename to computeDefaultEventEnd\n  getDefaultEventEnd(allDay: boolean, marker: DateMarker): DateMarker {\n    let end = marker\n\n    if (allDay) {\n      end = startOfDay(end)\n      end = this.dateEnv.add(end, this.defaultAllDayEventDuration)\n    } else {\n      end = this.dateEnv.add(end, this.defaultTimedEventDuration)\n    }\n\n    return end\n  }\n\n\n  // Public Events API\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  addEvent(eventInput: EventInput, sourceInput?: EventSourceApi | string | number): EventApi | null {\n\n    if (eventInput instanceof EventApi) {\n      let def = eventInput._def\n      let instance = eventInput._instance\n\n      // not already present? don't want to add an old snapshot\n      if (!this.state.eventStore.defs[def.defId]) {\n        this.dispatch({\n          type: 'ADD_EVENTS',\n          eventStore: eventTupleToStore({ def, instance }) // TODO: better util for two args?\n        })\n      }\n\n      return eventInput\n    }\n\n    let sourceId\n    if (sourceInput instanceof EventSourceApi) {\n      sourceId = sourceInput.internalEventSource.sourceId\n    } else if (sourceInput != null) {\n      let sourceApi = this.getEventSourceById(sourceInput) // TODO: use an internal function\n\n      if (!sourceApi) {\n        console.warn('Could not find an event source with ID \"' + sourceInput + '\"') // TODO: test\n        return null\n      } else {\n        sourceId = sourceApi.internalEventSource.sourceId\n      }\n    }\n\n    let tuple = parseEvent(eventInput, sourceId, this)\n\n    if (tuple) {\n\n      this.dispatch({\n        type: 'ADD_EVENTS',\n        eventStore: eventTupleToStore(tuple)\n      })\n\n      return new EventApi(\n        this,\n        tuple.def,\n        tuple.def.recurringDef ? null : tuple.instance\n      )\n    }\n\n    return null\n  }\n\n\n  // TODO: optimize\n  getEventById(id: string): EventApi | null {\n    let { defs, instances } = this.state.eventStore\n\n    id = String(id)\n\n    for (let defId in defs) {\n      let def = defs[defId]\n\n      if (def.publicId === id) {\n\n        if (def.recurringDef) {\n          return new EventApi(this, def, null)\n        } else {\n\n          for (let instanceId in instances) {\n            let instance = instances[instanceId]\n\n            if (instance.defId === def.defId) {\n              return new EventApi(this, def, instance)\n            }\n          }\n        }\n      }\n    }\n\n    return null\n  }\n\n\n  getEvents(): EventApi[] {\n    let { defs, instances } = this.state.eventStore\n    let eventApis: EventApi[] = []\n\n    for (let id in instances) {\n      let instance = instances[id]\n      let def = defs[instance.defId]\n\n      eventApis.push(new EventApi(this, def, instance))\n    }\n\n    return eventApis\n  }\n\n\n  removeAllEvents() {\n    this.dispatch({ type: 'REMOVE_ALL_EVENTS' })\n  }\n\n\n  rerenderEvents() { // API method. destroys old events if previously rendered.\n    this.dispatch({ type: 'RESET_EVENTS' })\n  }\n\n\n  // Public Event Sources API\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  getEventSources(): EventSourceApi[] {\n    let sourceHash = this.state.eventSources\n    let sourceApis: EventSourceApi[] = []\n\n    for (let internalId in sourceHash) {\n      sourceApis.push(new EventSourceApi(this, sourceHash[internalId]))\n    }\n\n    return sourceApis\n  }\n\n\n  getEventSourceById(id: string | number): EventSourceApi | null {\n    let sourceHash = this.state.eventSources\n\n    id = String(id)\n\n    for (let sourceId in sourceHash) {\n      if (sourceHash[sourceId].publicId === id) {\n        return new EventSourceApi(this, sourceHash[sourceId])\n      }\n    }\n\n    return null\n  }\n\n\n  addEventSource(sourceInput: EventSourceInput): EventSourceApi {\n\n    if (sourceInput instanceof EventSourceApi) {\n\n      // not already present? don't want to add an old snapshot\n      if (!this.state.eventSources[sourceInput.internalEventSource.sourceId]) {\n        this.dispatch({\n          type: 'ADD_EVENT_SOURCES',\n          sources: [ sourceInput.internalEventSource ]\n        })\n      }\n\n      return sourceInput\n    }\n\n    let eventSource = parseEventSource(sourceInput, this)\n\n    if (eventSource) { // TODO: error otherwise?\n      this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [ eventSource ] })\n\n      return new EventSourceApi(this, eventSource)\n    }\n\n    return null\n  }\n\n\n  removeAllEventSources() {\n    this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' })\n  }\n\n\n  refetchEvents() {\n    this.dispatch({ type: 'FETCH_EVENT_SOURCES' })\n  }\n\n\n  // Scroll\n  // -----------------------------------------------------------------------------------------------------------------\n\n  scrollToTime(timeInput: DurationInput) {\n    let time = createDuration(timeInput)\n\n    if (time) {\n      this.component.view.scrollToTime(time)\n    }\n  }\n\n}\n\nEmitterMixin.mixInto(Calendar)\n\n\n// for memoizers\n// -----------------------------------------------------------------------------------------------------------------\n\n\nfunction buildDateEnv(locale: Locale, timeZone, namedTimeZoneImpl: NamedTimeZoneImplClass, firstDay, weekNumberCalculation, weekLabel, cmdFormatter: CmdFormatterFunc) {\n  return new DateEnv({\n    calendarSystem: 'gregory', // TODO: make this a setting\n    timeZone,\n    namedTimeZoneImpl,\n    locale,\n    weekNumberCalculation,\n    firstDay,\n    weekLabel,\n    cmdFormatter\n  })\n}\n\n\nfunction buildTheme(this: Calendar, calendarOptions) {\n  let themeClass = this.pluginSystem.hooks.themeClasses[calendarOptions.themeSystem] || StandardTheme\n  return new themeClass(calendarOptions)\n}\n\n\nfunction buildDelayedRerender(this: Calendar, wait) {\n  let func = this.tryRerender.bind(this)\n\n  if (wait != null) {\n    func = debounce(func, wait)\n  }\n\n  return func\n}\n\n\nfunction buildEventUiBySource(eventSources: EventSourceHash): EventUiHash {\n  return mapHash(eventSources, function(eventSource) {\n    return eventSource.ui\n  })\n}\n\n\nfunction buildEventUiBases(eventDefs: EventDefHash, eventUiSingleBase: EventUi, eventUiBySource: EventUiHash) {\n  let eventUiBases: EventUiHash = { '': eventUiSingleBase }\n\n  for (let defId in eventDefs) {\n    let def = eventDefs[defId]\n\n    if (def.sourceId && eventUiBySource[def.sourceId]) {\n      eventUiBases[defId] = eventUiBySource[def.sourceId]\n    }\n  }\n\n  return eventUiBases\n}\n","import { parseFieldSpecs } from './util/misc'\nimport DateProfileGenerator, { DateProfile } from './DateProfileGenerator'\nimport { DateMarker, addMs } from './datelib/marker'\nimport { createDuration, Duration } from './datelib/duration'\nimport { default as EmitterMixin, EmitterInterface } from './common/EmitterMixin'\nimport { ViewSpec } from './structs/view-spec'\nimport { createElement } from './util/dom-manip'\nimport { ComponentContext } from './component/Component'\nimport DateComponent from './component/DateComponent'\nimport { EventStore } from './structs/event-store'\nimport { EventUiHash } from './component/event-ui'\nimport { sliceEventStore, EventRenderRange } from './component/event-rendering'\nimport { DateSpan } from './structs/date-span'\nimport { EventInteractionState } from './interactions/event-interaction-state'\nimport { memoizeRendering } from './component/memoized-rendering'\nimport { __assign } from 'tslib'\n\nexport interface ViewProps {\n  dateProfile: DateProfile\n  businessHours: EventStore\n  eventStore: EventStore\n  eventUiBases: EventUiHash\n  dateSelection: DateSpan | null\n  eventSelection: string\n  eventDrag: EventInteractionState | null\n  eventResize: EventInteractionState | null\n}\n\nexport default abstract class View extends DateComponent<ViewProps> {\n\n  // config properties, initialized after class on prototype\n  usesMinMaxTime: boolean // whether minTime/maxTime will affect the activeRange. Views must opt-in.\n  dateProfileGeneratorClass: any // initialized after class. used by Calendar\n\n  on: EmitterInterface['on']\n  one: EmitterInterface['one']\n  off: EmitterInterface['off']\n  trigger: EmitterInterface['trigger']\n  triggerWith: EmitterInterface['triggerWith']\n  hasHandlers: EmitterInterface['hasHandlers']\n\n  viewSpec: ViewSpec\n  dateProfileGenerator: DateProfileGenerator\n  type: string // subclass' view name (string). for the API\n  title: string // the text that will be displayed in the header's title. SET BY CALLER for API\n\n  queuedScroll: any\n\n  eventOrderSpecs: any // criteria for ordering events when they have same date/time\n  nextDayThreshold: Duration\n\n  // now indicator\n  isNowIndicatorRendered: boolean\n  initialNowDate: DateMarker // result first getNow call\n  initialNowQueriedMs: number // ms time the getNow was called\n  nowIndicatorTimeoutID: any // for refresh timing of now indicator\n  nowIndicatorIntervalID: any // \"\n\n  private renderDatesMem = memoizeRendering(this.renderDatesWrap, this.unrenderDatesWrap)\n  private renderBusinessHoursMem = memoizeRendering(this.renderBusinessHours, this.unrenderBusinessHours, [ this.renderDatesMem ])\n  private renderDateSelectionMem = memoizeRendering(this.renderDateSelectionWrap, this.unrenderDateSelectionWrap, [ this.renderDatesMem ])\n  private renderEventsMem = memoizeRendering(this.renderEvents, this.unrenderEvents, [ this.renderDatesMem ])\n  private renderEventSelectionMem = memoizeRendering(this.renderEventSelectionWrap, this.unrenderEventSelectionWrap, [ this.renderEventsMem ])\n  private renderEventDragMem = memoizeRendering(this.renderEventDragWrap, this.unrenderEventDragWrap, [ this.renderDatesMem ])\n  private renderEventResizeMem = memoizeRendering(this.renderEventResizeWrap, this.unrenderEventResizeWrap, [ this.renderDatesMem ])\n\n\n  constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement) {\n    super(\n      context,\n      createElement('div', { className: 'fc-view fc-' + viewSpec.type + '-view' }),\n      true // isView (HACK)\n    )\n\n    this.viewSpec = viewSpec\n    this.dateProfileGenerator = dateProfileGenerator\n    this.type = viewSpec.type\n    this.eventOrderSpecs = parseFieldSpecs(this.opt('eventOrder'))\n    this.nextDayThreshold = createDuration(this.opt('nextDayThreshold'))\n\n    parentEl.appendChild(this.el)\n    this.initialize()\n  }\n\n\n  initialize() { // convenient for sublcasses\n  }\n\n\n  // Date Setting/Unsetting\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  get activeStart(): Date {\n    return this.dateEnv.toDate(this.props.dateProfile.activeRange.start)\n  }\n\n  get activeEnd(): Date {\n    return this.dateEnv.toDate(this.props.dateProfile.activeRange.end)\n  }\n\n  get currentStart(): Date {\n    return this.dateEnv.toDate(this.props.dateProfile.currentRange.start)\n  }\n\n  get currentEnd(): Date {\n    return this.dateEnv.toDate(this.props.dateProfile.currentRange.end)\n  }\n\n\n  // General Rendering\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  render(props: ViewProps) {\n    this.renderDatesMem(props.dateProfile)\n    this.renderBusinessHoursMem(props.businessHours)\n    this.renderDateSelectionMem(props.dateSelection)\n    this.renderEventsMem(props.eventStore)\n    this.renderEventSelectionMem(props.eventSelection)\n    this.renderEventDragMem(props.eventDrag)\n    this.renderEventResizeMem(props.eventResize)\n  }\n\n\n  destroy() {\n    super.destroy()\n\n    this.renderDatesMem.unrender() // should unrender everything else\n  }\n\n\n  // Sizing\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  updateSize(isResize: boolean, viewHeight: number, isAuto: boolean) {\n    let { calendar } = this\n\n    if (isResize || calendar.isViewUpdated || calendar.isDatesUpdated || calendar.isEventsUpdated) {\n      // sort of the catch-all sizing\n      // anything that might cause dimension changes\n      this.updateBaseSize(isResize, viewHeight, isAuto)\n    }\n  }\n\n\n  updateBaseSize(isResize: boolean, viewHeight: number, isAuto: boolean) {\n  }\n\n\n  // Date Rendering\n  // -----------------------------------------------------------------------------------------------------------------\n\n  renderDatesWrap(dateProfile: DateProfile) {\n    this.renderDates(dateProfile)\n    this.addScroll({\n      timeMs: createDuration(this.opt('scrollTime')).milliseconds\n    })\n    this.startNowIndicator(dateProfile) // shouldn't render yet because updateSize will be called soon\n  }\n\n  unrenderDatesWrap() {\n    this.stopNowIndicator()\n    this.unrenderDates()\n  }\n\n  renderDates(dateProfile: DateProfile) {}\n  unrenderDates() {}\n\n\n  // Business Hours\n  // -----------------------------------------------------------------------------------------------------------------\n\n  renderBusinessHours(businessHours: EventStore) {}\n  unrenderBusinessHours() {}\n\n\n  // Date Selection\n  // -----------------------------------------------------------------------------------------------------------------\n\n  renderDateSelectionWrap(selection: DateSpan) {\n    if (selection) {\n      this.renderDateSelection(selection)\n    }\n  }\n\n  unrenderDateSelectionWrap(selection: DateSpan) {\n    if (selection) {\n      this.unrenderDateSelection(selection)\n    }\n  }\n\n  renderDateSelection(selection: DateSpan) {}\n  unrenderDateSelection(selection: DateSpan) {}\n\n\n  // Event Rendering\n  // -----------------------------------------------------------------------------------------------------------------\n\n  renderEvents(eventStore: EventStore) {}\n  unrenderEvents() {}\n\n  // util for subclasses\n  sliceEvents(eventStore: EventStore, allDay: boolean): EventRenderRange[] {\n    let { props } = this\n\n    return sliceEventStore(\n      eventStore,\n      props.eventUiBases,\n      props.dateProfile.activeRange,\n      allDay ? this.nextDayThreshold : null\n    ).fg\n  }\n\n\n  // Event Selection\n  // -----------------------------------------------------------------------------------------------------------------\n\n  renderEventSelectionWrap(instanceId: string) {\n    if (instanceId) {\n      this.renderEventSelection(instanceId)\n    }\n  }\n\n  unrenderEventSelectionWrap(instanceId: string) {\n    if (instanceId) {\n      this.unrenderEventSelection(instanceId)\n    }\n  }\n\n  renderEventSelection(instanceId: string) {}\n  unrenderEventSelection(instanceId: string) {}\n\n\n  // Event Drag\n  // -----------------------------------------------------------------------------------------------------------------\n\n  renderEventDragWrap(state: EventInteractionState) {\n    if (state) {\n      this.renderEventDrag(state)\n    }\n  }\n\n  unrenderEventDragWrap(state: EventInteractionState) {\n    if (state) {\n      this.unrenderEventDrag(state)\n    }\n  }\n\n  renderEventDrag(state: EventInteractionState) {}\n  unrenderEventDrag(state: EventInteractionState) {}\n\n\n  // Event Resize\n  // -----------------------------------------------------------------------------------------------------------------\n\n  renderEventResizeWrap(state: EventInteractionState) {\n    if (state) {\n      this.renderEventResize(state)\n    }\n  }\n\n  unrenderEventResizeWrap(state: EventInteractionState) {\n    if (state) {\n      this.unrenderEventResize(state)\n    }\n  }\n\n  renderEventResize(state: EventInteractionState) {}\n  unrenderEventResize(state: EventInteractionState) {}\n\n\n  /* Now Indicator\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Immediately render the current time indicator and begins re-rendering it at an interval,\n  // which is defined by this.getNowIndicatorUnit().\n  // TODO: somehow do this for the current whole day's background too\n  startNowIndicator(dateProfile: DateProfile) {\n    let { dateEnv } = this\n    let unit\n    let update\n    let delay // ms wait value\n\n    if (this.opt('nowIndicator')) {\n      unit = this.getNowIndicatorUnit(dateProfile)\n      if (unit) {\n        update = this.updateNowIndicator.bind(this)\n\n        this.initialNowDate = this.calendar.getNow()\n        this.initialNowQueriedMs = new Date().valueOf()\n\n        // wait until the beginning of the next interval\n        delay = dateEnv.add(\n          dateEnv.startOf(this.initialNowDate, unit),\n          createDuration(1, unit)\n        ).valueOf() - this.initialNowDate.valueOf()\n\n        // TODO: maybe always use setTimeout, waiting until start of next unit\n        this.nowIndicatorTimeoutID = setTimeout(() => {\n          this.nowIndicatorTimeoutID = null\n          update()\n\n          if (unit === 'second') {\n            delay = 1000 // every second\n          } else {\n            delay = 1000 * 60 // otherwise, every minute\n          }\n\n          this.nowIndicatorIntervalID = setInterval(update, delay) // update every interval\n        }, delay)\n      }\n\n      // rendering will be initiated in updateSize\n    }\n  }\n\n\n  // rerenders the now indicator, computing the new current time from the amount of time that has passed\n  // since the initial getNow call.\n  updateNowIndicator() {\n    if (\n      this.props.dateProfile && // a way to determine if dates were rendered yet\n      this.initialNowDate // activated before?\n    ) {\n      this.unrenderNowIndicator() // won't unrender if unnecessary\n      this.renderNowIndicator(\n        addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs)\n      )\n      this.isNowIndicatorRendered = true\n    }\n  }\n\n\n  // Immediately unrenders the view's current time indicator and stops any re-rendering timers.\n  // Won't cause side effects if indicator isn't rendered.\n  stopNowIndicator() {\n    if (this.isNowIndicatorRendered) {\n\n      if (this.nowIndicatorTimeoutID) {\n        clearTimeout(this.nowIndicatorTimeoutID)\n        this.nowIndicatorTimeoutID = null\n      }\n      if (this.nowIndicatorIntervalID) {\n        clearInterval(this.nowIndicatorIntervalID)\n        this.nowIndicatorIntervalID = null\n      }\n\n      this.unrenderNowIndicator()\n      this.isNowIndicatorRendered = false\n    }\n  }\n\n\n  getNowIndicatorUnit(dateProfile: DateProfile) {\n    // subclasses should implement\n  }\n\n\n  // Renders a current time indicator at the given datetime\n  renderNowIndicator(date) {\n    // SUBCLASSES MUST PASS TO CHILDREN!\n  }\n\n\n  // Undoes the rendering actions from renderNowIndicator\n  unrenderNowIndicator() {\n    // SUBCLASSES MUST PASS TO CHILDREN!\n  }\n\n\n  /* Scroller\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  addScroll(scroll) {\n    let queuedScroll = this.queuedScroll || (this.queuedScroll = {})\n\n    __assign(queuedScroll, scroll)\n  }\n\n\n  popScroll(isResize: boolean) {\n    this.applyQueuedScroll(isResize)\n    this.queuedScroll = null\n  }\n\n\n  applyQueuedScroll(isResize: boolean) {\n    this.applyScroll(this.queuedScroll || {}, isResize)\n  }\n\n\n  queryScroll() {\n    let scroll = {} as any\n\n    if (this.props.dateProfile) { // dates rendered yet?\n      __assign(scroll, this.queryDateScroll())\n    }\n\n    return scroll\n  }\n\n\n  applyScroll(scroll, isResize: boolean) {\n    let { timeMs } = scroll\n\n    if (timeMs != null) {\n      delete scroll.timeMs\n\n      if (this.props.dateProfile) { // dates rendered yet?\n        __assign(scroll, this.computeDateScroll(timeMs))\n      }\n    }\n\n    if (this.props.dateProfile) { // dates rendered yet?\n      this.applyDateScroll(scroll)\n    }\n  }\n\n\n  computeDateScroll(timeMs: number) {\n    return {} // subclasses must implement\n  }\n\n\n  queryDateScroll() {\n    return {} // subclasses must implement\n  }\n\n\n  applyDateScroll(scroll) {\n     // subclasses must implement\n  }\n\n\n  // for API\n  scrollToTime(time: Duration) {\n    this.applyScroll({\n      timeMs: time.milliseconds\n    }, false)\n  }\n\n}\n\nEmitterMixin.mixInto(View)\n\nView.prototype.usesMinMaxTime = false\nView.prototype.dateProfileGeneratorClass = DateProfileGenerator\n","import { DateMarker } from '../../datelib/marker'\nimport { createFormatter, DateFormatter } from '../../datelib/formatting'\nimport { htmlToElements } from '../../util/dom-manip'\nimport { compareByFieldSpecs } from '../../util/misc'\nimport { EventUi } from '../event-ui'\nimport { EventRenderRange, filterSegsViaEls } from '../event-rendering'\nimport { Seg } from '../DateComponent'\nimport { ComponentContext } from '../Component'\n\n\nexport default abstract class FgEventRenderer {\n\n  context: ComponentContext\n\n  // derived from options\n  eventTimeFormat: DateFormatter\n  displayEventTime: boolean\n  displayEventEnd: boolean\n\n  segs: Seg[] = []\n  isSizeDirty: boolean = false\n\n\n  constructor(context: ComponentContext) {\n    this.context = context\n  }\n\n\n  renderSegs(segs: Seg[], mirrorInfo?) {\n    this.rangeUpdated() // called too frequently :(\n\n    // render an `.el` on each seg\n    // returns a subset of the segs. segs that were actually rendered\n    segs = this.renderSegEls(segs, mirrorInfo)\n\n    this.segs = segs\n    this.attachSegs(segs, mirrorInfo)\n\n    this.isSizeDirty = true\n    this.context.view.triggerRenderedSegs(this.segs, Boolean(mirrorInfo))\n  }\n\n\n  unrender(_segs: Seg[], mirrorInfo?) {\n    this.context.view.triggerWillRemoveSegs(this.segs, Boolean(mirrorInfo))\n    this.detachSegs(this.segs)\n    this.segs = []\n  }\n\n\n  abstract renderSegHtml(seg: Seg, mirrorInfo): string\n  abstract attachSegs(segs: Seg[], mirrorInfo)\n  abstract detachSegs(segs: Seg[])\n\n\n  // Updates values that rely on options and also relate to range\n  rangeUpdated() {\n    let { options } = this.context\n    let displayEventTime\n    let displayEventEnd\n\n    this.eventTimeFormat = createFormatter(\n      options.eventTimeFormat || this.computeEventTimeFormat(),\n      options.defaultRangeSeparator\n    )\n\n    displayEventTime = options.displayEventTime\n    if (displayEventTime == null) {\n      displayEventTime = this.computeDisplayEventTime() // might be based off of range\n    }\n\n    displayEventEnd = options.displayEventEnd\n    if (displayEventEnd == null) {\n      displayEventEnd = this.computeDisplayEventEnd() // might be based off of range\n    }\n\n    this.displayEventTime = displayEventTime\n    this.displayEventEnd = displayEventEnd\n  }\n\n\n  // Renders and assigns an `el` property for each foreground event segment.\n  // Only returns segments that successfully rendered.\n  renderSegEls(segs: Seg[], mirrorInfo) {\n    let html = ''\n    let i\n\n    if (segs.length) { // don't build an empty html string\n\n      // build a large concatenation of event segment HTML\n      for (i = 0; i < segs.length; i++) {\n        html += this.renderSegHtml(segs[i], mirrorInfo)\n      }\n\n      // Grab individual elements from the combined HTML string. Use each as the default rendering.\n      // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\n      htmlToElements(html).forEach((el, i) => {\n        let seg = segs[i]\n\n        if (el) {\n          seg.el = el\n        }\n      })\n\n      segs = filterSegsViaEls(this.context.view, segs, Boolean(mirrorInfo))\n    }\n\n    return segs\n  }\n\n\n  // Generic utility for generating the HTML classNames for an event segment's element\n  getSegClasses(seg: Seg, isDraggable, isResizable, mirrorInfo) {\n    let classes = [\n      'fc-event',\n      seg.isStart ? 'fc-start' : 'fc-not-start',\n      seg.isEnd ? 'fc-end' : 'fc-not-end'\n    ].concat(seg.eventRange.ui.classNames)\n\n    if (isDraggable) {\n      classes.push('fc-draggable')\n    }\n\n    if (isResizable) {\n      classes.push('fc-resizable')\n    }\n\n    if (mirrorInfo) {\n      classes.push('fc-mirror')\n\n      if (mirrorInfo.isDragging) {\n        classes.push('fc-dragging')\n      }\n\n      if (mirrorInfo.isResizing) {\n        classes.push('fc-resizing')\n      }\n    }\n\n    return classes\n  }\n\n\n  // Compute the text that should be displayed on an event's element.\n  // `range` can be the Event object itself, or something range-like, with at least a `start`.\n  // If event times are disabled, or the event has no time, will return a blank string.\n  // If not specified, formatter will default to the eventTimeFormat setting,\n  // and displayEnd will default to the displayEventEnd setting.\n  getTimeText(eventRange: EventRenderRange, formatter?, displayEnd?) {\n    let { def, instance } = eventRange\n\n    return this._getTimeText(\n      instance.range.start,\n      def.hasEnd ? instance.range.end : null,\n      def.allDay,\n      formatter,\n      displayEnd,\n      instance.forcedStartTzo,\n      instance.forcedEndTzo\n    )\n  }\n\n\n  _getTimeText(\n    start: DateMarker,\n    end: DateMarker,\n    allDay,\n    formatter?,\n    displayEnd?,\n    forcedStartTzo?: number,\n    forcedEndTzo?: number\n) {\n    let { dateEnv } = this.context\n\n    if (formatter == null) {\n      formatter = this.eventTimeFormat\n    }\n\n    if (displayEnd == null) {\n      displayEnd = this.displayEventEnd\n    }\n\n    if (this.displayEventTime && !allDay) {\n      if (displayEnd && end) {\n        return dateEnv.formatRange(start, end, formatter, {\n          forcedStartTzo,\n          forcedEndTzo\n        })\n      } else {\n        return dateEnv.format(start, formatter, {\n          forcedTzo: forcedStartTzo\n        })\n      }\n    }\n\n    return ''\n  }\n\n\n  computeEventTimeFormat(): any {\n    return {\n      hour: 'numeric',\n      minute: '2-digit',\n      omitZeroMinute: true\n    }\n  }\n\n\n  computeDisplayEventTime() {\n    return true\n  }\n\n\n  computeDisplayEventEnd() {\n    return true\n  }\n\n\n  // Utility for generating event skin-related CSS properties\n  getSkinCss(ui: EventUi) {\n    return {\n      'background-color': ui.backgroundColor,\n      'border-color': ui.borderColor,\n      color: ui.textColor\n    }\n  }\n\n\n  sortEventSegs(segs): Seg[] {\n    let specs = this.context.view.eventOrderSpecs\n    let objs = segs.map(buildSegCompareObj)\n\n    objs.sort(function(obj0, obj1) {\n      return compareByFieldSpecs(obj0, obj1, specs)\n    })\n\n    return objs.map(function(c) {\n      return c._seg\n    })\n  }\n\n\n  computeSizes(force: boolean) {\n    if (force || this.isSizeDirty) {\n      this.computeSegSizes(this.segs)\n    }\n  }\n\n\n  assignSizes(force: boolean) {\n    if (force || this.isSizeDirty) {\n      this.assignSegSizes(this.segs)\n      this.isSizeDirty = false\n    }\n  }\n\n\n  computeSegSizes(segs: Seg[]) {\n  }\n\n\n  assignSegSizes(segs: Seg[]) {\n  }\n\n\n  // Manipulation on rendered segs\n\n\n  hideByHash(hash) {\n    if (hash) {\n      for (let seg of this.segs) {\n        if (hash[seg.eventRange.instance.instanceId]) {\n          seg.el.style.visibility = 'hidden'\n        }\n      }\n    }\n  }\n\n\n  showByHash(hash) {\n    if (hash) {\n      for (let seg of this.segs) {\n        if (hash[seg.eventRange.instance.instanceId]) {\n          seg.el.style.visibility = ''\n        }\n      }\n    }\n  }\n\n\n  selectByInstanceId(instanceId: string) {\n    if (instanceId) {\n      for (let seg of this.segs) {\n        let eventInstance = seg.eventRange.instance\n        if (\n          eventInstance && eventInstance.instanceId === instanceId &&\n          seg.el // necessary?\n        ) {\n          seg.el.classList.add('fc-selected')\n        }\n      }\n    }\n  }\n\n\n  unselectByInstanceId(instanceId: string) {\n    if (instanceId) {\n      for (let seg of this.segs) {\n        if (seg.el) { // necessary?\n          seg.el.classList.remove('fc-selected')\n        }\n      }\n    }\n  }\n\n}\n\n\n// returns a object with all primitive props that can be compared\nexport function buildSegCompareObj(seg: Seg) {\n  let eventDef = seg.eventRange.def\n  let range = seg.eventRange.instance.range\n  let start = range.start ? range.start.valueOf() : 0 // TODO: better support for open-range events\n  let end = range.end ? range.end.valueOf() : 0 // \"\n\n  return {\n    ...eventDef.extendedProps,\n    ...eventDef,\n    id: eventDef.publicId,\n    start,\n    end,\n    duration: end - start,\n    allDay: Number(eventDef.allDay),\n    _seg: seg // for later retrieval\n  }\n}\n","import { cssToStr } from '../../util/html'\nimport { htmlToElements, removeElement, elementMatches } from '../../util/dom-manip'\nimport { Seg } from '../DateComponent'\nimport { filterSegsViaEls } from '../event-rendering'\nimport { ComponentContext } from '../Component'\n\n\nexport default abstract class FillRenderer { // use for highlight, background events, business hours\n\n  context: ComponentContext\n  fillSegTag: string = 'div'\n  containerElsByType: any // a hash of element sets used for rendering each fill. Keyed by fill name.\n  segsByType: any\n  dirtySizeFlags: any = {}\n\n\n  constructor(context: ComponentContext) {\n    this.context = context\n    this.containerElsByType = {}\n    this.segsByType = {}\n  }\n\n\n  getSegsByType(type: string) {\n    return this.segsByType[type] || []\n  }\n\n\n  renderSegs(type, segs: Seg[]) {\n    let renderedSegs = this.renderSegEls(type, segs) // assignes `.el` to each seg. returns successfully rendered segs\n    let containerEls = this.attachSegs(type, renderedSegs)\n\n    if (containerEls) {\n      (this.containerElsByType[type] || (this.containerElsByType[type] = []))\n        .push(...containerEls)\n    }\n\n    this.segsByType[type] = renderedSegs\n\n    if (type === 'bgEvent') {\n      this.context.view.triggerRenderedSegs(renderedSegs, false) // isMirror=false\n    }\n\n    this.dirtySizeFlags[type] = true\n  }\n\n\n  // Unrenders a specific type of fill that is currently rendered on the grid\n  unrender(type) {\n    let segs = this.segsByType[type]\n\n    if (segs) {\n\n      if (type === 'bgEvent') {\n        this.context.view.triggerWillRemoveSegs(segs, false) // isMirror=false\n      }\n\n      this.detachSegs(type, segs)\n    }\n  }\n\n\n  // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\n  // Only returns segments that successfully rendered.\n  renderSegEls(type, segs: Seg[]) {\n    let html = ''\n    let i\n\n    if (segs.length) {\n\n      // build a large concatenation of segment HTML\n      for (i = 0; i < segs.length; i++) {\n        html += this.renderSegHtml(type, segs[i])\n      }\n\n      // Grab individual elements from the combined HTML string. Use each as the default rendering.\n      // Then, compute the 'el' for each segment.\n      htmlToElements(html).forEach((el, i) => {\n        let seg = segs[i]\n\n        if (el) {\n          seg.el = el\n        }\n      })\n\n      if (type === 'bgEvent') {\n        segs = filterSegsViaEls(\n          this.context.view,\n          segs,\n          false // isMirror. background events can never be mirror elements\n        )\n      }\n\n      // correct element type? (would be bad if a non-TD were inserted into a table for example)\n      segs = segs.filter((seg) => {\n        return elementMatches(seg.el, this.fillSegTag)\n      })\n    }\n\n    return segs\n  }\n\n\n  // Builds the HTML needed for one fill segment. Generic enough to work with different types.\n  renderSegHtml(type, seg: Seg) {\n    let css = null\n    let classNames = []\n\n    if (type !== 'highlight' && type !== 'businessHours') {\n      css = {\n        'background-color': seg.eventRange.ui.backgroundColor\n      }\n    }\n\n    if (type !== 'highlight') {\n      classNames = classNames.concat(seg.eventRange.ui.classNames)\n    }\n\n    if (type === 'businessHours') {\n      classNames.push('fc-bgevent')\n    } else {\n      classNames.push('fc-' + type.toLowerCase())\n    }\n\n    return '<' + this.fillSegTag +\n      (classNames.length ? ' class=\"' + classNames.join(' ') + '\"' : '') +\n      (css ? ' style=\"' + cssToStr(css) + '\"' : '') +\n      '></' + this.fillSegTag + '>'\n  }\n\n\n  abstract attachSegs(type, segs: Seg[]): HTMLElement[] | void\n\n\n  detachSegs(type, segs: Seg[]) {\n    let containerEls = this.containerElsByType[type]\n\n    if (containerEls) {\n      containerEls.forEach(removeElement)\n      delete this.containerElsByType[type]\n    }\n  }\n\n\n  computeSizes(force: boolean) {\n    for (let type in this.segsByType) {\n      if (force || this.dirtySizeFlags[type]) {\n        this.computeSegSizes(this.segsByType[type])\n      }\n    }\n  }\n\n\n  assignSizes(force: boolean) {\n    for (let type in this.segsByType) {\n      if (force || this.dirtySizeFlags[type]) {\n        this.assignSegSizes(this.segsByType[type])\n      }\n    }\n\n    this.dirtySizeFlags = {}\n  }\n\n\n  computeSegSizes(segs: Seg[]) {\n  }\n\n\n  assignSegSizes(segs: Seg[]) {\n  }\n\n}\n","\nexport abstract class NamedTimeZoneImpl {\n\n  timeZoneName: string\n\n  constructor(timeZoneName: string) {\n    this.timeZoneName = timeZoneName\n  }\n\n  abstract offsetForArray(a: number[]): number\n  abstract timestampToArray(ms: number): number[]\n}\n\nexport type NamedTimeZoneImplClass = { new(timeZoneName: string): NamedTimeZoneImpl }\n","import EmitterMixin from '../common/EmitterMixin'\n\n/*\nAn abstraction for a dragging interaction originating on an event.\nDoes higher-level things than PointerDragger, such as possibly:\n- a \"mirror\" that moves with the pointer\n- a minimum number of pixels or other criteria for a true drag to begin\n\nsubclasses must emit:\n- pointerdown\n- dragstart\n- dragmove\n- pointerup\n- dragend\n*/\nexport default abstract class ElementDragging { // TODO: rename to *Interface?\n\n  emitter: EmitterMixin\n\n  constructor(el: HTMLElement) {\n    this.emitter = new EmitterMixin()\n  }\n\n  destroy() {\n  }\n\n  // if given true, should prevent dragstart+dragmove+dragend from firing\n  abstract setIgnoreMove(bool: boolean): void\n\n  setMirrorIsVisible(bool: boolean) {\n    // optional if subclass doesn't want to support a mirror\n  }\n\n  setMirrorNeedsRevert(bool: boolean) {\n    // optional if subclass doesn't want to support a mirror\n  }\n\n  setAutoScrollEnabled(bool: boolean) {\n    // optional\n  }\n\n}\n\nexport type ElementDraggingClass = { new(el: HTMLElement): ElementDragging }\n","import { DateEnv, DateInput } from './datelib/env'\nimport { createFormatter } from './datelib/formatting'\nimport { parseRawLocales, buildLocale } from './datelib/locale'\nimport { globalDefaults } from './options'\n\nexport function formatDate(dateInput: DateInput, settings = {}) {\n  let dateEnv = buildDateEnv(settings)\n  let formatter = createFormatter(settings)\n  let dateMeta = dateEnv.createMarkerMeta(dateInput)\n\n  if (!dateMeta) { // TODO: warning?\n    return ''\n  }\n\n  return dateEnv.format(dateMeta.marker, formatter, {\n    forcedTzo: dateMeta.forcedTzo\n  })\n}\n\nexport function formatRange(\n  startInput: DateInput,\n  endInput: DateInput,\n  settings // mixture of env and formatter settings\n) {\n  let dateEnv = buildDateEnv(typeof settings === 'object' && settings ? settings : {}) // pass in if non-null object\n  let formatter = createFormatter(settings, globalDefaults.defaultRangeSeparator)\n  let startMeta = dateEnv.createMarkerMeta(startInput)\n  let endMeta = dateEnv.createMarkerMeta(endInput)\n\n  if (!startMeta || !endMeta) { // TODO: warning?\n    return ''\n  }\n\n  return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {\n    forcedStartTzo: startMeta.forcedTzo,\n    forcedEndTzo: endMeta.forcedTzo,\n    isEndExclusive: settings.isEndExclusive\n  })\n}\n\n// TODO: more DRY and optimized\nfunction buildDateEnv(settings) {\n  let locale = buildLocale(settings.locale || 'en', parseRawLocales([]).map) // TODO: don't hardcode 'en' everywhere\n\n  // ensure required settings\n  settings = {\n    timeZone: globalDefaults.timeZone,\n    calendarSystem: 'gregory',\n    ...settings,\n    locale\n  }\n\n  return new DateEnv(settings)\n}\n","import { createDuration, Duration, DurationInput } from '../datelib/duration'\nimport { refineProps } from '../util/misc'\nimport { EventNonDateInput } from '../structs/event'\n\n/*\nInformation about what will happen when an external element is dragged-and-dropped\nonto a calendar. Contains information for creating an event.\n*/\n\nexport interface DragMetaInput extends EventNonDateInput {\n  startTime?: DurationInput\n  duration?: DurationInput\n  create?: boolean\n  sourceId?: string\n}\n\nexport interface DragMeta {\n  startTime: Duration | null\n  duration: Duration | null\n  create: boolean // create an event when dropped?\n  sourceId: string // similar to addEvent's parameter\n  leftoverProps: object\n}\n\nconst DRAG_META_PROPS = {\n  startTime: createDuration,\n  duration: createDuration,\n  create: Boolean,\n  sourceId: String\n}\n\nconst DRAG_META_DEFAULTS = {\n  create: true\n}\n\nexport function parseDragMeta(raw: DragMetaInput): DragMeta {\n  let leftoverProps = {}\n  let refined = refineProps(raw, DRAG_META_PROPS, DRAG_META_DEFAULTS, leftoverProps) as DragMeta\n\n  refined.leftoverProps = leftoverProps\n\n  return refined\n}\n","import { rangeContainsMarker } from '../datelib/date-range'\nimport { htmlEscape } from '../util/html'\nimport { buildGotoAnchorHtml, getDayClasses } from '../component/date-rendering'\nimport { DateMarker, DAY_IDS } from '../datelib/marker'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { ComponentContext } from '../component/Component'\n\n// Computes a default column header formatting string if `colFormat` is not explicitly defined\nexport function computeFallbackHeaderFormat(datesRepDistinctDays: boolean, dayCnt: number) {\n  // if more than one week row, or if there are a lot of columns with not much space,\n  // put just the day numbers will be in each cell\n  if (!datesRepDistinctDays || dayCnt > 10) {\n    return { weekday: 'short' } // \"Sat\"\n  } else if (dayCnt > 1) {\n    return { weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true } // \"Sat 11/12\"\n  } else {\n    return { weekday: 'long' } // \"Saturday\"\n  }\n}\n\nexport function renderDateCell(\n  dateMarker: DateMarker,\n  dateProfile: DateProfile,\n  datesRepDistinctDays,\n  colCnt,\n  colHeadFormat,\n  context: ComponentContext,\n  colspan?,\n  otherAttrs?\n): string {\n  let { view, dateEnv, theme, options } = context\n  let isDateValid = rangeContainsMarker(dateProfile.activeRange, dateMarker) // TODO: called too frequently. cache somehow.\n  let classNames = [\n    'fc-day-header',\n    theme.getClass('widgetHeader')\n  ]\n  let innerHtml\n\n  if (typeof options.columnHeaderHtml === 'function') {\n    innerHtml = options.columnHeaderHtml(\n      dateEnv.toDate(dateMarker)\n    )\n  } else if (typeof options.columnHeaderText === 'function') {\n    innerHtml = htmlEscape(\n      options.columnHeaderText(\n        dateEnv.toDate(dateMarker)\n      )\n    )\n  } else {\n    innerHtml = htmlEscape(dateEnv.format(dateMarker, colHeadFormat))\n  }\n\n  // if only one row of days, the classNames on the header can represent the specific days beneath\n  if (datesRepDistinctDays) {\n    classNames = classNames.concat(\n      // includes the day-of-week class\n      // noThemeHighlight=true (don't highlight the header)\n      getDayClasses(dateMarker, dateProfile, context, true)\n    )\n  } else {\n    classNames.push('fc-' + DAY_IDS[dateMarker.getUTCDay()]) // only add the day-of-week class\n  }\n\n  return '' +\n    '<th class=\"' + classNames.join(' ') + '\"' +\n      ((isDateValid && datesRepDistinctDays) ?\n        ' data-date=\"' + dateEnv.formatIso(dateMarker, { omitTime: true }) + '\"' :\n        '') +\n        (colspan > 1 ?\n          ' colspan=\"' + colspan + '\"' :\n          '') +\n        (otherAttrs ?\n          ' ' + otherAttrs :\n          '') +\n      '>' +\n      (isDateValid ?\n        // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\n        buildGotoAnchorHtml(\n          view,\n          { date: dateMarker, forceOff: !datesRepDistinctDays || colCnt === 1 },\n          innerHtml\n        ) :\n        // if not valid, display text, but no link\n        innerHtml\n      ) +\n    '</th>'\n}\n","import Component, { ComponentContext } from '../component/Component'\nimport { htmlToElement, removeElement } from '../util/dom-manip'\nimport { DateMarker } from '../datelib/marker'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { createFormatter } from '../datelib/formatting'\nimport { computeFallbackHeaderFormat, renderDateCell } from './table-utils'\n\nexport interface DayTableHeaderProps {\n  dates: DateMarker[]\n  dateProfile: DateProfile\n  datesRepDistinctDays: boolean\n  renderIntroHtml?: () => string\n}\n\nexport default class DayHeader extends Component<DayTableHeaderProps> {\n\n  el: HTMLElement\n  thead: HTMLElement\n\n  constructor(context: ComponentContext, parentEl: HTMLElement) {\n    super(context)\n\n    parentEl.innerHTML = '' // because might be nbsp\n    parentEl.appendChild(\n      this.el = htmlToElement(\n        '<div class=\"fc-row ' + this.theme.getClass('headerRow') + '\">' +\n          '<table class=\"' + this.theme.getClass('tableGrid') + '\">' +\n            '<thead></thead>' +\n          '</table>' +\n        '</div>'\n      )\n    )\n\n    this.thead = this.el.querySelector('thead')\n  }\n\n  destroy() {\n    removeElement(this.el)\n  }\n\n  render(props: DayTableHeaderProps) {\n    let { dates, datesRepDistinctDays } = props\n    let parts = []\n\n    if (props.renderIntroHtml) {\n      parts.push(props.renderIntroHtml())\n    }\n\n    let colHeadFormat = createFormatter(\n      this.opt('columnHeaderFormat') ||\n      computeFallbackHeaderFormat(datesRepDistinctDays, dates.length)\n    )\n\n    for (let date of dates) {\n      parts.push(\n        renderDateCell(\n          date,\n          props.dateProfile,\n          datesRepDistinctDays,\n          dates.length,\n          colHeadFormat,\n          this.context\n        )\n      )\n    }\n\n    if (this.isRtl) {\n      parts.reverse()\n    }\n\n    this.thead.innerHTML = '<tr>' + parts.join('') + '</tr>'\n  }\n\n}\n","import DateProfileGenerator from '../DateProfileGenerator'\nimport { DateMarker, addDays, diffDays } from '../datelib/marker'\nimport { DateRange } from '../datelib/date-range'\n\nexport interface DaySeriesSeg {\n  firstIndex: number\n  lastIndex: number\n  isStart: boolean\n  isEnd: boolean\n}\n\nexport default class DaySeries {\n\n  cnt: number\n  dates: DateMarker[] // whole-day dates for each column. left to right\n  indices: number[] // for each day from start, the offset\n\n  constructor(range: DateRange, dateProfileGenerator: DateProfileGenerator) {\n    let date: DateMarker = range.start\n    let end: DateMarker = range.end\n    let indices: number[] = []\n    let dates: DateMarker[] = []\n    let dayIndex = -1\n\n    while (date < end) { // loop each day from start to end\n      if (dateProfileGenerator.isHiddenDay(date)) {\n        indices.push(dayIndex + 0.5) // mark that it's between indices\n      } else {\n        dayIndex++\n        indices.push(dayIndex)\n        dates.push(date)\n      }\n      date = addDays(date, 1)\n    }\n\n    this.dates = dates\n    this.indices = indices\n    this.cnt = dates.length\n  }\n\n  sliceRange(range: DateRange): DaySeriesSeg | null {\n    let firstIndex = this.getDateDayIndex(range.start) // inclusive first index\n    let lastIndex = this.getDateDayIndex(addDays(range.end, -1)) // inclusive last index\n\n    let clippedFirstIndex = Math.max(0, firstIndex)\n    let clippedLastIndex = Math.min(this.cnt - 1, lastIndex)\n\n    // deal with in-between indices\n    clippedFirstIndex = Math.ceil(clippedFirstIndex) // in-between starts round to next cell\n    clippedLastIndex = Math.floor(clippedLastIndex) // in-between ends round to prev cell\n\n    if (clippedFirstIndex <= clippedLastIndex) {\n      return {\n        firstIndex: clippedFirstIndex,\n        lastIndex: clippedLastIndex,\n        isStart: firstIndex === clippedFirstIndex,\n        isEnd: lastIndex === clippedLastIndex\n      }\n    } else {\n      return null\n    }\n  }\n\n  // Given a date, returns its chronolocial cell-index from the first cell of the grid.\n  // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n  // If before the first offset, returns a negative number.\n  // If after the last offset, returns an offset past the last cell offset.\n  // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n  private getDateDayIndex(date: DateMarker) {\n    let indices = this.indices\n    let dayOffset = Math.floor(diffDays(this.dates[0], date))\n\n    if (dayOffset < 0) {\n      return indices[0] - 1\n    } else if (dayOffset >= indices.length) {\n      return indices[indices.length - 1] + 1\n    } else {\n      return indices[dayOffset]\n    }\n  }\n\n}\n","import DaySeries from './DaySeries'\nimport { DateRange } from '../datelib/date-range'\nimport { DateMarker } from '../datelib/marker'\nimport { Seg } from '../component/DateComponent'\n\nexport interface DayTableSeg extends Seg {\n  row: number\n  firstCol: number\n  lastCol: number\n}\n\nexport interface DayTableCell {\n  date: DateMarker\n  htmlAttrs?: string\n}\n\nexport default class DayTable {\n\n  rowCnt: number\n  colCnt: number\n  cells: DayTableCell[][]\n  headerDates: DateMarker[]\n\n  private daySeries: DaySeries\n\n  constructor(daySeries: DaySeries, breakOnWeeks: boolean) {\n    let { dates } = daySeries\n    let daysPerRow\n    let firstDay\n    let rowCnt\n\n    if (breakOnWeeks) {\n      // count columns until the day-of-week repeats\n      firstDay = dates[0].getUTCDay()\n      for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow++) {\n        if (dates[daysPerRow].getUTCDay() === firstDay) {\n          break\n        }\n      }\n      rowCnt = Math.ceil(dates.length / daysPerRow)\n    } else {\n      rowCnt = 1\n      daysPerRow = dates.length\n    }\n\n    this.rowCnt = rowCnt\n    this.colCnt = daysPerRow\n    this.daySeries = daySeries\n    this.cells = this.buildCells()\n    this.headerDates = this.buildHeaderDates()\n  }\n\n  private buildCells() {\n    let rows = []\n\n    for (let row = 0; row < this.rowCnt; row++) {\n      let cells = []\n\n      for (let col = 0; col < this.colCnt; col++) {\n        cells.push(\n          this.buildCell(row, col)\n        )\n      }\n\n      rows.push(cells)\n    }\n\n    return rows\n  }\n\n  private buildCell(row, col) {\n    return {\n      date: this.daySeries.dates[row * this.colCnt + col]\n    }\n  }\n\n  private buildHeaderDates() {\n    let dates = []\n\n    for (let col = 0; col < this.colCnt; col++) {\n      dates.push(this.cells[0][col].date)\n    }\n\n    return dates\n  }\n\n  sliceRange(range: DateRange): DayTableSeg[] {\n    let { colCnt } = this\n    let seriesSeg = this.daySeries.sliceRange(range)\n    let segs: DayTableSeg[] = []\n\n    if (seriesSeg) {\n      let { firstIndex, lastIndex } = seriesSeg\n      let index = firstIndex\n\n      while (index <= lastIndex) {\n        let row = Math.floor(index / colCnt)\n        let nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1)\n\n        segs.push({\n          row,\n          firstCol: index % colCnt,\n          lastCol: (nextIndex - 1) % colCnt,\n          isStart: seriesSeg.isStart && index === firstIndex,\n          isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex\n        })\n\n        index = nextIndex\n      }\n    }\n\n    return segs\n  }\n\n}\n","import { DateRange } from '../datelib/date-range'\nimport { EventStore, expandRecurring } from '../structs/event-store'\nimport { EventUiHash } from '../component/event-ui'\nimport { sliceEventStore, EventRenderRange } from '../component/event-rendering'\nimport { DateProfile } from '../DateProfileGenerator'\nimport DateComponent, { Seg, EventSegUiInteractionState } from '../component/DateComponent' // TODO: rename EventSegUiInteractionState, move here\nimport { DateSpan, fabricateEventRange } from '../structs/date-span'\nimport { EventInteractionState } from '../interactions/event-interaction-state'\nimport { Duration } from '../datelib/duration'\nimport { memoize } from '../util/memoize'\nimport { DateMarker, addMs } from '../datelib/marker'\n\nexport interface SliceableProps {\n  dateSelection: DateSpan\n  businessHours: EventStore\n  eventStore: EventStore\n  eventDrag: EventInteractionState | null\n  eventResize: EventInteractionState | null\n  eventSelection: string\n  eventUiBases: EventUiHash\n}\n\nexport interface SlicedProps<SegType extends Seg> {\n  dateSelectionSegs: SegType[]\n  businessHourSegs: SegType[]\n  fgEventSegs: SegType[]\n  bgEventSegs: SegType[]\n  eventDrag: EventSegUiInteractionState | null\n  eventResize: EventSegUiInteractionState | null\n  eventSelection: string\n}\n\nexport default abstract class Slicer<SegType extends Seg, ExtraArgs extends any[] = []> {\n\n  private sliceBusinessHours = memoize(this._sliceBusinessHours)\n  private sliceDateSelection = memoize(this._sliceDateSpan)\n  private sliceEventStore = memoize(this._sliceEventStore)\n  private sliceEventDrag = memoize(this._sliceInteraction)\n  private sliceEventResize = memoize(this._sliceInteraction)\n\n  abstract sliceRange(dateRange: DateRange, ...extraArgs: ExtraArgs): SegType[]\n\n  sliceProps(\n    props: SliceableProps,\n    dateProfile: DateProfile,\n    nextDayThreshold: Duration | null,\n    component: DateComponent<any>, // TODO: kill\n    ...extraArgs: ExtraArgs\n  ): SlicedProps<SegType> {\n    let { eventUiBases } = props\n    let eventSegs = this.sliceEventStore(props.eventStore, eventUiBases, dateProfile, nextDayThreshold, component, ...extraArgs)\n\n    return {\n      dateSelectionSegs: this.sliceDateSelection(props.dateSelection, eventUiBases, component, ...extraArgs),\n      businessHourSegs: this.sliceBusinessHours(props.businessHours, dateProfile, nextDayThreshold, component, ...extraArgs),\n      fgEventSegs: eventSegs.fg,\n      bgEventSegs: eventSegs.bg,\n      eventDrag: this.sliceEventDrag(props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, component, ...extraArgs),\n      eventResize: this.sliceEventResize(props.eventResize, eventUiBases, dateProfile, nextDayThreshold, component, ...extraArgs),\n      eventSelection: props.eventSelection\n    } // TODO: give interactionSegs?\n  }\n\n  sliceNowDate( // does not memoize\n    date: DateMarker,\n    component: DateComponent<any>, // TODO: kill\n    ...extraArgs: ExtraArgs\n  ): SegType[] {\n    return this._sliceDateSpan(\n      { range: { start: date, end: addMs(date, 1) }, allDay: false }, // add 1 ms, protect against null range\n      {},\n      component,\n      ...extraArgs\n    )\n  }\n\n  private _sliceBusinessHours(\n    businessHours: EventStore,\n    dateProfile: DateProfile,\n    nextDayThreshold: Duration | null,\n    component: DateComponent<any>, // TODO: kill\n    ...extraArgs: ExtraArgs\n  ): SegType[] {\n    if (!businessHours) {\n      return []\n    }\n\n    return this._sliceEventStore(\n      expandRecurring(\n        businessHours,\n        computeActiveRange(dateProfile, Boolean(nextDayThreshold)),\n        component.calendar\n      ),\n      {},\n      dateProfile,\n      nextDayThreshold,\n      component,\n      ...extraArgs\n    ).bg\n  }\n\n  private _sliceEventStore(\n    eventStore: EventStore,\n    eventUiBases: EventUiHash,\n    dateProfile: DateProfile,\n    nextDayThreshold: Duration | null,\n    component: DateComponent<any>, // TODO: kill\n    ...extraArgs: ExtraArgs\n  ): { bg: SegType[], fg: SegType[] } {\n    if (eventStore) {\n      let rangeRes = sliceEventStore(\n        eventStore,\n        eventUiBases,\n        computeActiveRange(dateProfile, Boolean(nextDayThreshold)),\n        nextDayThreshold\n      )\n\n      return {\n        bg: this.sliceEventRanges(rangeRes.bg, component, extraArgs),\n        fg: this.sliceEventRanges(rangeRes.fg, component, extraArgs)\n      }\n\n    } else {\n      return { bg: [], fg: [] }\n    }\n  }\n\n  private _sliceInteraction(\n    interaction: EventInteractionState,\n    eventUiBases: EventUiHash,\n    dateProfile: DateProfile,\n    nextDayThreshold: Duration | null,\n    component: DateComponent<any>, // TODO: kill\n    ...extraArgs: ExtraArgs\n  ): EventSegUiInteractionState {\n    if (!interaction) {\n      return null\n    }\n\n    let rangeRes = sliceEventStore(\n      interaction.mutatedEvents,\n      eventUiBases,\n      computeActiveRange(dateProfile, Boolean(nextDayThreshold)),\n      nextDayThreshold\n    )\n\n    return {\n      segs: this.sliceEventRanges(rangeRes.fg, component, extraArgs),\n      affectedInstances: interaction.affectedEvents.instances,\n      isEvent: interaction.isEvent,\n      sourceSeg: interaction.origSeg\n    }\n  }\n\n  private _sliceDateSpan(\n    dateSpan: DateSpan,\n    eventUiBases: EventUiHash,\n    component: DateComponent<any>, // TODO: kill\n    ...extraArgs: ExtraArgs\n  ): SegType[] {\n    if (!dateSpan) {\n      return []\n    }\n\n    let eventRange = fabricateEventRange(dateSpan, eventUiBases, component.calendar)\n    let segs = this.sliceRange(dateSpan.range, ...extraArgs)\n\n    for (let seg of segs) {\n      seg.component = component\n      seg.eventRange = eventRange\n    }\n\n    return segs\n  }\n\n  /*\n  \"complete\" seg means it has component and eventRange\n  */\n  private sliceEventRanges(\n    eventRanges: EventRenderRange[],\n    component: DateComponent<any>, // TODO: kill\n    extraArgs: ExtraArgs\n  ): SegType[] {\n    let segs: SegType[] = []\n\n    for (let eventRange of eventRanges) {\n      segs.push(...this.sliceEventRange(eventRange, component, extraArgs))\n    }\n\n    return segs\n  }\n\n  /*\n  \"complete\" seg means it has component and eventRange\n  */\n  private sliceEventRange(\n    eventRange: EventRenderRange,\n    component: DateComponent<any>, // TODO: kill\n    extraArgs: ExtraArgs\n  ): SegType[] {\n    let segs = this.sliceRange(eventRange.range, ...extraArgs)\n\n    for (let seg of segs) {\n      seg.component = component\n      seg.eventRange = eventRange\n      seg.isStart = eventRange.isStart && seg.isStart\n      seg.isEnd = eventRange.isEnd && seg.isEnd\n    }\n\n    return segs\n  }\n\n}\n\n/*\nfor incorporating minTime/maxTime if appropriate\nTODO: should be part of DateProfile!\nTimelineDateProfile already does this btw\n*/\nfunction computeActiveRange(dateProfile: DateProfile, isComponentAllDay: boolean): DateRange {\n  let range = dateProfile.activeRange\n\n  if (isComponentAllDay) {\n    return range\n  }\n\n  return {\n    start: addMs(range.start, dateProfile.minTime.milliseconds),\n    end: addMs(range.end, dateProfile.maxTime.milliseconds - 864e5) // 864e5 = ms in a day\n  }\n}\n","\n// exports\n// --------------------------------------------------------------------------------------------------\n\nexport const version = '<%= version %>'\n\n// types\nexport { OptionsInput } from './types/input-types'\nexport {\n  EventInput, EventDef, EventDefHash, EventInstance, EventInstanceHash,\n  parseEventDef, createEventInstance, EventTuple\n} from './structs/event'\nexport { BusinessHoursInput, parseBusinessHours } from './structs/business-hours'\n\nexport {\n  applyAll,\n  debounce,\n  padStart,\n  isInt,\n  capitaliseFirstLetter,\n  parseFieldSpecs,\n  compareByFieldSpecs,\n  compareByFieldSpec,\n  flexibleCompare,\n  computeVisibleDayRange,\n  refineProps,\n  matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight,\n  isMultiDayRange,\n  distributeHeight,\n  undistributeHeight,\n  preventSelection, allowSelection, preventContextMenu, allowContextMenu,\n  compareNumbers, enableCursor, disableCursor,\n  diffDates\n} from './util/misc'\n\nexport {\n  htmlEscape,\n  cssToStr\n} from './util/html'\n\nexport {\n  removeExact,\n  isArraysEqual\n} from './util/array'\n\nexport { memoize, memoizeOutput } from './util/memoize'\nexport { memoizeRendering, MemoizedRendering } from './component/memoized-rendering'\n\nexport {\n  intersectRects,\n  Rect, pointInsideRect,\n  constrainPoint,\n  getRectCenter, diffPoints, Point,\n  translateRect\n} from './util/geom'\n\nexport { mapHash, filterHash, isPropsEqual } from './util/object'\n\nexport {\n  findElements,\n  findChildren,\n  htmlToElement,\n  createElement,\n  insertAfterElement,\n  prependToElement,\n  removeElement,\n  appendToElement,\n  applyStyle,\n  applyStyleProp,\n  elementMatches,\n  elementClosest,\n  forceClassName\n} from './util/dom-manip'\n\nexport { EventStore, filterEventStoreDefs, createEmptyEventStore, mergeEventStores, getRelevantEvents, eventTupleToStore } from './structs/event-store'\nexport { EventUiHash, EventUi, processScopedUiProps, combineEventUis } from './component/event-ui'\nexport { default as Splitter, SplittableProps } from './component/event-splitting'\nexport { buildGotoAnchorHtml, getAllDayHtml, getDayClasses } from './component/date-rendering'\n\nexport {\n  preventDefault,\n  listenBySelector,\n  whenTransitionDone\n} from './util/dom-event'\n\nexport {\n  computeInnerRect,\n  computeEdges,\n  computeHeightAndMargins,\n  getClippingParents,\n  computeClippingRect,\n  computeRect\n} from './util/dom-geom'\n\nexport { unpromisify } from './util/promise'\n\nexport { default as EmitterMixin, EmitterInterface } from './common/EmitterMixin'\nexport { DateRange, rangeContainsMarker, intersectRanges, rangesEqual, rangesIntersect, rangeContainsRange } from './datelib/date-range'\nexport { default as Mixin } from './common/Mixin'\nexport { default as PositionCache } from './common/PositionCache'\nexport { default as ScrollComponent, ScrollbarWidths } from './common/ScrollComponent'\nexport { ScrollController, ElementScrollController, WindowScrollController } from './common/scroll-controller'\nexport { default as Theme } from './theme/Theme'\nexport { default as Component, ComponentContext } from './component/Component'\nexport { default as DateComponent, Seg, EventSegUiInteractionState } from './component/DateComponent'\nexport { default as Calendar, DatePointTransform, DateSpanTransform, DateSelectionApi } from './Calendar'\nexport { default as View, ViewProps } from './View'\nexport { default as FgEventRenderer, buildSegCompareObj } from './component/renderers/FgEventRenderer'\nexport { default as FillRenderer } from './component/renderers/FillRenderer'\n\nexport { default as DateProfileGenerator, DateProfile } from './DateProfileGenerator'\nexport { ViewDef } from './structs/view-def'\nexport { ViewSpec } from './structs/view-spec'\nexport { DateSpan, DateSpanApi, DatePointApi, isDateSpansEqual } from './structs/date-span'\n\nexport { DateMarker, addDays, startOfDay, addMs, addWeeks, diffWeeks, diffWholeWeeks, diffWholeDays, diffDayAndTime, diffDays, isValidDate } from './datelib/marker'\nexport {\n  Duration, createDuration,\n  isSingleDay, multiplyDuration, addDurations,\n  asRoughMinutes, asRoughSeconds, asRoughMs,\n  wholeDivideDurations, greatestDurationDenominator\n} from './datelib/duration'\nexport { DateEnv, DateMarkerMeta } from './datelib/env'\n\nexport {\n  DateFormatter,\n  createFormatter,\n  VerboseFormattingArg,\n  formatIsoTimeString\n} from './datelib/formatting'\nexport { NamedTimeZoneImpl } from './datelib/timezone'\nexport { parse as parseMarker } from './datelib/parsing'\n\nexport { EventSourceDef, EventSource, EventSourceHash } from './structs/event-source'\n\nexport { Interaction, InteractionSettings, interactionSettingsToStore, interactionSettingsStore, InteractionSettingsStore } from './interactions/interaction'\nexport { PointerDragEvent } from './interactions/pointer'\nexport { Hit } from './interactions/hit'\nexport { dateSelectionJoinTransformer } from './interactions/date-selecting'\nexport { eventDragMutationMassager } from './interactions/event-dragging'\nexport { EventResizeJoinTransforms } from './interactions/event-resizing'\nexport { default as ElementDragging } from './interactions/ElementDragging'\n\nexport { formatDate, formatRange } from './formatting-api'\n\nexport { globalDefaults, config } from './options'\n\nexport { RecurringType, ParsedRecurring } from './structs/recurring-event'\n\nexport { DragMetaInput, DragMeta, parseDragMeta } from './structs/drag-meta'\n\nexport { createPlugin, PluginDef, PluginDefInput, ViewPropsTransformer, ViewContainerModifier } from './plugin-system'\nexport { reducerFunc, Action, CalendarState } from './reducers/types'\nexport { CalendarComponentProps } from './CalendarComponent'\n\nexport { default as DayHeader } from './common/DayHeader'\nexport { computeFallbackHeaderFormat, renderDateCell } from './common/table-utils'\n\nexport { default as DaySeries } from './common/DaySeries'\n\nexport { EventInteractionState } from './interactions/event-interaction-state'\nexport { EventRenderRange, sliceEventStore, hasBgRendering, getElSeg } from './component/event-rendering'\n\nexport { default as DayTable, DayTableSeg, DayTableCell } from './common/DayTable'\n\nexport { default as Slicer, SlicedProps } from './common/slicing-utils'\n\nexport { EventMutation, applyMutationToEventStore } from './structs/event-mutation'\nexport { Constraint, ConstraintInput, AllowFunc, isPropsValid, isInteractionValid } from './validation'\nexport { default as EventApi } from './api/EventApi'\n\nexport { default as requestJson } from './util/requestJson'\n"],"names":["tslib_1.__assign","tslib_1.__extends","uid","eventSourceDef","buildDateEnv"],"mappings":"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"}