{"version":3,"sources":["jsdelivr-header.js","/wp/plugins/fooevents-calendar/trunk/js/fullcalendar.js"],"names":[],"mappings":"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CzB,IAAf,EAAO,KACP,KAAK,SAAS,aAAa,EAAO,IAE1C,EACO,CACX,CAjK8B,CAiK5B,EAAO,SACT,EAAQ,QAAU,EAClB,EAAU,UAAU,0BAA4B,EAAgC,QAChF,EAAU,UAAU,aAAe,EAAU,OA+DtC,EAED,SAAU,EAAQ,EAAS,GAEjC,OAAO,eAAe,EAAS,aAAc,CAAE,OAAO,IACtD,IAAI,EAAU,EAAoB,GAC9B,EAAiB,EAAoB,GAErC,EAA+C,SAAU,GAEzD,SAAS,IACL,OAAkB,OAAX,GAAmB,EAAO,MAAM,KAAM,YAAc,IAC/D,CAgBA,OAnBA,EAAQ,UAAU,EAA+B,GAKjD,EAA8B,UAAU,iBAAmB,SAAU,EAAqB,EAAkB,GACxG,IAAI,EAAqB,EAAO,UAAU,iBAAiB,KAAK,KAAM,EAAqB,EAAkB,GACzG,EAAQ,KAAK,cAAc,EAAmB,QAAS,GACvD,EAAM,KAAK,cAAc,EAAmB,MAAO,GASvD,MAPI,iBAAiB,KAAK,KACtB,EAAM,QAAQ,QAEV,EAAI,WACJ,EAAI,IAAI,EAAG,QAAQ,QAAQ,SAG5B,IAAI,EAAe,QAAQ,EAAO,EAC7C,EACO,CACX,CArBkD,CADrB,EAAoB,IAsBxB,SACzB,EAAQ,QAAU,CAGX,EACC,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACC,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,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","file":"/wp/plugins/fooevents-calendar/trunk/js/fullcalendar.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.48.0.\n * Original file: /wp/plugins/fooevents-calendar/trunk/js/fullcalendar.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*!\n * FullCalendar v3.10.0\n * Docs & License: https://fullcalendar.io/\n * (c) 2018 Adam Shaw\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"moment\"), require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"moment\", \"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FullCalendar\"] = factory(require(\"moment\"), require(\"jquery\"));\n\telse\n\t\troot[\"FullCalendar\"] = factory(root[\"moment\"], root[\"jQuery\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 256);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports) {\n\n/*\r\nderived from:\r\nhttps://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js\r\n\nonly include the helpers we need, to keep down filesize\r\n*/\r\nvar extendStatics = Object.setPrototypeOf ||\r\n    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n    function (d, b) { for (var p in b)\r\n        if (b.hasOwnProperty(p))\r\n            d[p] = b[p]; };\r\nexports.__extends = function (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\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\n/* FullCalendar-specific DOM Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\r\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\r\nfunction compensateScroll(rowEls, scrollbarWidths) {\r\n    if (scrollbarWidths.left) {\r\n        rowEls.css({\r\n            'border-left-width': 1,\r\n            'margin-left': scrollbarWidths.left - 1\r\n        });\r\n    }\r\n    if (scrollbarWidths.right) {\r\n        rowEls.css({\r\n            'border-right-width': 1,\r\n            'margin-right': scrollbarWidths.right - 1\r\n        });\r\n    }\r\n}\r\nexports.compensateScroll = compensateScroll;\r\n// Undoes compensateScroll and restores all borders/margins\r\nfunction uncompensateScroll(rowEls) {\r\n    rowEls.css({\r\n        'margin-left': '',\r\n        'margin-right': '',\r\n        'border-left-width': '',\r\n        'border-right-width': ''\r\n    });\r\n}\r\nexports.uncompensateScroll = uncompensateScroll;\r\n// Make the mouse cursor express that an event is not allowed in the current area\r\nfunction disableCursor() {\r\n    $('body').addClass('fc-not-allowed');\r\n}\r\nexports.disableCursor = disableCursor;\r\n// Returns the mouse cursor to its original look\r\nfunction enableCursor() {\r\n    $('body').removeClass('fc-not-allowed');\r\n}\r\nexports.enableCursor = enableCursor;\r\n// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\r\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\r\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and\r\n// reduces the available height.\r\nfunction distributeHeight(els, availableHeight, shouldRedistribute) {\r\n    // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\r\n    // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\r\n    var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\r\n    var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\r\n    var flexEls = []; // elements that are allowed to expand. array of DOM nodes\r\n    var flexOffsets = []; // amount of vertical space it takes up\r\n    var flexHeights = []; // actual css height\r\n    var usedHeight = 0;\r\n    undistributeHeight(els); // give all elements their natural height\r\n    // find elements that are below the recommended height (expandable).\r\n    // important to query for heights in a single first pass (to avoid reflow oscillation).\r\n    els.each(function (i, el) {\r\n        var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\r\n        var naturalOffset = $(el).outerHeight(true);\r\n        if (naturalOffset < minOffset) {\r\n            flexEls.push(el);\r\n            flexOffsets.push(naturalOffset);\r\n            flexHeights.push($(el).height());\r\n        }\r\n        else {\r\n            // this element stretches past recommended height (non-expandable). mark the space as occupied.\r\n            usedHeight += naturalOffset;\r\n        }\r\n    });\r\n    // readjust the recommended height to only consider the height available to non-maxed-out rows.\r\n    if (shouldRedistribute) {\r\n        availableHeight -= usedHeight;\r\n        minOffset1 = Math.floor(availableHeight / flexEls.length);\r\n        minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\r\n    }\r\n    // assign heights to all expandable elements\r\n    $(flexEls).each(function (i, el) {\r\n        var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\r\n        var naturalOffset = flexOffsets[i];\r\n        var naturalHeight = flexHeights[i];\r\n        var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\r\n        if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things\r\n            $(el).height(newHeight);\r\n        }\r\n    });\r\n}\r\nexports.distributeHeight = distributeHeight;\r\n// Undoes distrubuteHeight, restoring all els to their natural height\r\nfunction undistributeHeight(els) {\r\n    els.height('');\r\n}\r\nexports.undistributeHeight = undistributeHeight;\r\n// Given `els`, a jQuery set of <td> cells, find the cell with the largest natural width and set the widths of all the\r\n// cells to be that width.\r\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\r\nfunction matchCellWidths(els) {\r\n    var maxInnerWidth = 0;\r\n    els.find('> *').each(function (i, innerEl) {\r\n        var innerWidth = $(innerEl).outerWidth();\r\n        if (innerWidth > maxInnerWidth) {\r\n            maxInnerWidth = innerWidth;\r\n        }\r\n    });\r\n    maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\r\n    els.width(maxInnerWidth);\r\n    return maxInnerWidth;\r\n}\r\nexports.matchCellWidths = matchCellWidths;\r\n// Given one element that resides inside another,\r\n// Subtracts the height of the inner element from the outer element.\r\nfunction subtractInnerElHeight(outerEl, innerEl) {\r\n    var both = outerEl.add(innerEl);\r\n    var diff;\r\n    // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\r\n    both.css({\r\n        position: 'relative',\r\n        left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\r\n    });\r\n    diff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions\r\n    both.css({ position: '', left: '' }); // undo hack\r\n    return diff;\r\n}\r\nexports.subtractInnerElHeight = subtractInnerElHeight;\r\n/* Element Geom Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51\r\nfunction getScrollParent(el) {\r\n    var position = el.css('position');\r\n    var scrollParent = el.parents().filter(function () {\r\n        var parent = $(this);\r\n        return (/(auto|scroll)/).test(parent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x'));\r\n    }).eq(0);\r\n    return position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;\r\n}\r\nexports.getScrollParent = getScrollParent;\r\n// Queries the outer bounding area of a jQuery element.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getOuterRect(el, origin) {\r\n    var offset = el.offset();\r\n    var left = offset.left - (origin ? origin.left : 0);\r\n    var top = offset.top - (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el.outerWidth(),\r\n        top: top,\r\n        bottom: top + el.outerHeight()\r\n    };\r\n}\r\nexports.getOuterRect = getOuterRect;\r\n// Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\n// WARNING: given element can't have borders\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getClientRect(el, origin) {\r\n    var offset = el.offset();\r\n    var scrollbarWidths = getScrollbarWidths(el);\r\n    var left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);\r\n    var top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el[0].clientWidth,\r\n        top: top,\r\n        bottom: top + el[0].clientHeight // clientHeight includes padding but NOT scrollbars\r\n    };\r\n}\r\nexports.getClientRect = getClientRect;\r\n// Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getContentRect(el, origin) {\r\n    var offset = el.offset(); // just outside of border, margin not included\r\n    var left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') -\r\n        (origin ? origin.left : 0);\r\n    var top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') -\r\n        (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el.width(),\r\n        top: top,\r\n        bottom: top + el.height()\r\n    };\r\n}\r\nexports.getContentRect = getContentRect;\r\n// Returns the computed left/right/top/bottom scrollbar widths for the given jQuery element.\r\n// WARNING: given element can't have borders (which will cause offsetWidth/offsetHeight to be larger).\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getScrollbarWidths(el) {\r\n    var leftRightWidth = el[0].offsetWidth - el[0].clientWidth;\r\n    var bottomWidth = el[0].offsetHeight - el[0].clientHeight;\r\n    var widths;\r\n    leftRightWidth = sanitizeScrollbarWidth(leftRightWidth);\r\n    bottomWidth = sanitizeScrollbarWidth(bottomWidth);\r\n    widths = { left: 0, right: 0, top: 0, bottom: bottomWidth };\r\n    if (getIsLeftRtlScrollbars() && el.css('direction') === 'rtl') { // is the scrollbar on the left side?\r\n        widths.left = leftRightWidth;\r\n    }\r\n    else {\r\n        widths.right = leftRightWidth;\r\n    }\r\n    return widths;\r\n}\r\nexports.getScrollbarWidths = getScrollbarWidths;\r\n// The scrollbar width computations in getScrollbarWidths are sometimes flawed when it comes to\r\n// retina displays, rounding, and IE11. Massage them into a usable value.\r\nfunction sanitizeScrollbarWidth(width) {\r\n    width = Math.max(0, width); // no negatives\r\n    width = Math.round(width);\r\n    return width;\r\n}\r\n// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\r\nvar _isLeftRtlScrollbars = null;\r\nfunction getIsLeftRtlScrollbars() {\r\n    if (_isLeftRtlScrollbars === null) {\r\n        _isLeftRtlScrollbars = computeIsLeftRtlScrollbars();\r\n    }\r\n    return _isLeftRtlScrollbars;\r\n}\r\nfunction computeIsLeftRtlScrollbars() {\r\n    var el = $('<div><div/></div>')\r\n        .css({\r\n        position: 'absolute',\r\n        top: -1000,\r\n        left: 0,\r\n        border: 0,\r\n        padding: 0,\r\n        overflow: 'scroll',\r\n        direction: 'rtl'\r\n    })\r\n        .appendTo('body');\r\n    var innerEl = el.children();\r\n    var res = innerEl.offset().left > el.offset().left; // is the inner div shifted to accommodate a left scrollbar?\r\n    el.remove();\r\n    return res;\r\n}\r\n// Retrieves a jQuery element's computed CSS value as a floating-point number.\r\n// If the queried value is non-numeric (ex: IE can return \"medium\" for border width), will just return zero.\r\nfunction getCssFloat(el, prop) {\r\n    return parseFloat(el.css(prop)) || 0;\r\n}\r\n/* Mouse / Touch Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\r\nfunction isPrimaryMouseButton(ev) {\r\n    return ev.which === 1 && !ev.ctrlKey;\r\n}\r\nexports.isPrimaryMouseButton = isPrimaryMouseButton;\r\nfunction getEvX(ev) {\r\n    var touches = ev.originalEvent.touches;\r\n    // on mobile FF, pageX for touch events is present, but incorrect,\r\n    // so, look at touch coordinates first.\r\n    if (touches && touches.length) {\r\n        return touches[0].pageX;\r\n    }\r\n    return ev.pageX;\r\n}\r\nexports.getEvX = getEvX;\r\nfunction getEvY(ev) {\r\n    var touches = ev.originalEvent.touches;\r\n    // on mobile FF, pageX for touch events is present, but incorrect,\r\n    // so, look at touch coordinates first.\r\n    if (touches && touches.length) {\r\n        return touches[0].pageY;\r\n    }\r\n    return ev.pageY;\r\n}\r\nexports.getEvY = getEvY;\r\nfunction getEvIsTouch(ev) {\r\n    return /^touch/.test(ev.type);\r\n}\r\nexports.getEvIsTouch = getEvIsTouch;\r\nfunction preventSelection(el) {\r\n    el.addClass('fc-unselectable')\r\n        .on('selectstart', preventDefault);\r\n}\r\nexports.preventSelection = preventSelection;\r\nfunction allowSelection(el) {\r\n    el.removeClass('fc-unselectable')\r\n        .off('selectstart', preventDefault);\r\n}\r\nexports.allowSelection = allowSelection;\r\n// Stops a mouse/touch event from doing it's native browser action\r\nfunction preventDefault(ev) {\r\n    ev.preventDefault();\r\n}\r\nexports.preventDefault = preventDefault;\r\n/* General Geometry Utils\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\r\nfunction intersectRects(rect1, rect2) {\r\n    var res = {\r\n        left: Math.max(rect1.left, rect2.left),\r\n        right: Math.min(rect1.right, rect2.right),\r\n        top: Math.max(rect1.top, rect2.top),\r\n        bottom: Math.min(rect1.bottom, rect2.bottom)\r\n    };\r\n    if (res.left < res.right && res.top < res.bottom) {\r\n        return res;\r\n    }\r\n    return false;\r\n}\r\nexports.intersectRects = intersectRects;\r\n// Returns a new point that will have been moved to reside within the given rectangle\r\nfunction constrainPoint(point, rect) {\r\n    return {\r\n        left: Math.min(Math.max(point.left, rect.left), rect.right),\r\n        top: Math.min(Math.max(point.top, rect.top), rect.bottom)\r\n    };\r\n}\r\nexports.constrainPoint = constrainPoint;\r\n// Returns a point that is the center of the given rectangle\r\nfunction getRectCenter(rect) {\r\n    return {\r\n        left: (rect.left + rect.right) / 2,\r\n        top: (rect.top + rect.bottom) / 2\r\n    };\r\n}\r\nexports.getRectCenter = getRectCenter;\r\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\r\nfunction diffPoints(point1, point2) {\r\n    return {\r\n        left: point1.left - point2.left,\r\n        top: point1.top - point2.top\r\n    };\r\n}\r\nexports.diffPoints = diffPoints;\r\n/* Object Ordering by Field\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction parseFieldSpecs(input) {\r\n    var specs = [];\r\n    var tokens = [];\r\n    var i;\r\n    var token;\r\n    if (typeof input === 'string') {\r\n        tokens = input.split(/\\s*,\\s*/);\r\n    }\r\n    else if (typeof input === 'function') {\r\n        tokens = [input];\r\n    }\r\n    else if ($.isArray(input)) {\r\n        tokens = input;\r\n    }\r\n    for (i = 0; i < tokens.length; i++) {\r\n        token = tokens[i];\r\n        if (typeof token === 'string') {\r\n            specs.push(token.charAt(0) === '-' ?\r\n                { field: token.substring(1), order: -1 } :\r\n                { field: token, order: 1 });\r\n        }\r\n        else if (typeof token === 'function') {\r\n            specs.push({ func: token });\r\n        }\r\n    }\r\n    return specs;\r\n}\r\nexports.parseFieldSpecs = parseFieldSpecs;\r\nfunction compareByFieldSpecs(obj1, obj2, fieldSpecs, obj1fallback, obj2fallback) {\r\n    var i;\r\n    var cmp;\r\n    for (i = 0; i < fieldSpecs.length; i++) {\r\n        cmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i], obj1fallback, obj2fallback);\r\n        if (cmp) {\r\n            return cmp;\r\n        }\r\n    }\r\n    return 0;\r\n}\r\nexports.compareByFieldSpecs = compareByFieldSpecs;\r\nfunction compareByFieldSpec(obj1, obj2, fieldSpec, obj1fallback, obj2fallback) {\r\n    if (fieldSpec.func) {\r\n        return fieldSpec.func(obj1, obj2);\r\n    }\r\n    var val1 = obj1[fieldSpec.field];\r\n    var val2 = obj2[fieldSpec.field];\r\n    if (val1 == null && obj1fallback) {\r\n        val1 = obj1fallback[fieldSpec.field];\r\n    }\r\n    if (val2 == null && obj2fallback) {\r\n        val2 = obj2fallback[fieldSpec.field];\r\n    }\r\n    return flexibleCompare(val1, val2) * (fieldSpec.order || 1);\r\n}\r\nexports.compareByFieldSpec = compareByFieldSpec;\r\nfunction flexibleCompare(a, b) {\r\n    if (!a && !b) {\r\n        return 0;\r\n    }\r\n    if (b == null) {\r\n        return -1;\r\n    }\r\n    if (a == null) {\r\n        return 1;\r\n    }\r\n    if ($.type(a) === 'string' || $.type(b) === 'string') {\r\n        return String(a).localeCompare(String(b));\r\n    }\r\n    return a - b;\r\n}\r\nexports.flexibleCompare = flexibleCompare;\r\n/* Date Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nexports.dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\r\nexports.unitsDesc = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; // descending\r\n// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.\r\n// Moments will have their timezones normalized.\r\nfunction diffDayTime(a, b) {\r\n    return moment.duration({\r\n        days: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),\r\n        ms: a.time() - b.time() // time-of-day from day start. disregards timezone\r\n    });\r\n}\r\nexports.diffDayTime = diffDayTime;\r\n// Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.\r\nfunction diffDay(a, b) {\r\n    return moment.duration({\r\n        days: a.clone().stripTime().diff(b.clone().stripTime(), 'days')\r\n    });\r\n}\r\nexports.diffDay = diffDay;\r\n// Diffs two moments, producing a duration, made of a whole-unit-increment of the given unit. Uses rounding.\r\nfunction diffByUnit(a, b, unit) {\r\n    return moment.duration(Math.round(a.diff(b, unit, true)), // returnFloat=true\r\n    unit);\r\n}\r\nexports.diffByUnit = diffByUnit;\r\n// Computes the unit name of the largest whole-unit period of time.\r\n// For example, 48 hours will be \"days\" whereas 49 hours will be \"hours\".\r\n// Accepts start/end, a range object, or an original duration object.\r\nfunction computeGreatestUnit(start, end) {\r\n    var i;\r\n    var unit;\r\n    var val;\r\n    for (i = 0; i < exports.unitsDesc.length; i++) {\r\n        unit = exports.unitsDesc[i];\r\n        val = computeRangeAs(unit, start, end);\r\n        if (val >= 1 && isInt(val)) {\r\n            break;\r\n        }\r\n    }\r\n    return unit; // will be \"milliseconds\" if nothing else matches\r\n}\r\nexports.computeGreatestUnit = computeGreatestUnit;\r\n// like computeGreatestUnit, but has special abilities to interpret the source input for clues\r\nfunction computeDurationGreatestUnit(duration, durationInput) {\r\n    var unit = computeGreatestUnit(duration);\r\n    // prevent days:7 from being interpreted as a week\r\n    if (unit === 'week' && typeof durationInput === 'object' && durationInput.days) {\r\n        unit = 'day';\r\n    }\r\n    return unit;\r\n}\r\nexports.computeDurationGreatestUnit = computeDurationGreatestUnit;\r\n// Computes the number of units (like \"hours\") in the given range.\r\n// Range can be a {start,end} object, separate start/end args, or a Duration.\r\n// Results are based on Moment's .as() and .diff() methods, so results can depend on internal handling\r\n// of month-diffing logic (which tends to vary from version to version).\r\nfunction computeRangeAs(unit, start, end) {\r\n    if (end != null) { // given start, end\r\n        return end.diff(start, unit, true);\r\n    }\r\n    else if (moment.isDuration(start)) { // given duration\r\n        return start.as(unit);\r\n    }\r\n    else { // given { start, end } range object\r\n        return start.end.diff(start.start, unit, true);\r\n    }\r\n}\r\n// Intelligently divides a range (specified by a start/end params) by a duration\r\nfunction divideRangeByDuration(start, end, dur) {\r\n    var months;\r\n    if (durationHasTime(dur)) {\r\n        return (end - start) / dur;\r\n    }\r\n    months = dur.asMonths();\r\n    if (Math.abs(months) >= 1 && isInt(months)) {\r\n        return end.diff(start, 'months', true) / months;\r\n    }\r\n    return end.diff(start, 'days', true) / dur.asDays();\r\n}\r\nexports.divideRangeByDuration = divideRangeByDuration;\r\n// Intelligently divides one duration by another\r\nfunction divideDurationByDuration(dur1, dur2) {\r\n    var months1;\r\n    var months2;\r\n    if (durationHasTime(dur1) || durationHasTime(dur2)) {\r\n        return dur1 / dur2;\r\n    }\r\n    months1 = dur1.asMonths();\r\n    months2 = dur2.asMonths();\r\n    if (Math.abs(months1) >= 1 && isInt(months1) &&\r\n        Math.abs(months2) >= 1 && isInt(months2)) {\r\n        return months1 / months2;\r\n    }\r\n    return dur1.asDays() / dur2.asDays();\r\n}\r\nexports.divideDurationByDuration = divideDurationByDuration;\r\n// Intelligently multiplies a duration by a number\r\nfunction multiplyDuration(dur, n) {\r\n    var months;\r\n    if (durationHasTime(dur)) {\r\n        return moment.duration(dur * n);\r\n    }\r\n    months = dur.asMonths();\r\n    if (Math.abs(months) >= 1 && isInt(months)) {\r\n        return moment.duration({ months: months * n });\r\n    }\r\n    return moment.duration({ days: dur.asDays() * n });\r\n}\r\nexports.multiplyDuration = multiplyDuration;\r\n// Returns a boolean about whether the given duration has any time parts (hours/minutes/seconds/ms)\r\nfunction durationHasTime(dur) {\r\n    return Boolean(dur.hours() || dur.minutes() || dur.seconds() || dur.milliseconds());\r\n}\r\nexports.durationHasTime = durationHasTime;\r\nfunction isNativeDate(input) {\r\n    return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\r\n}\r\nexports.isNativeDate = isNativeDate;\r\n// Returns a boolean about whether the given input is a time string, like \"06:40:00\" or \"06:00\"\r\nfunction isTimeString(str) {\r\n    return typeof str === 'string' &&\r\n        /^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(str);\r\n}\r\nexports.isTimeString = isTimeString;\r\n/* Logging and Debug\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction log() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    var console = window.console;\r\n    if (console && console.log) {\r\n        return console.log.apply(console, args);\r\n    }\r\n}\r\nexports.log = log;\r\nfunction warn() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    var console = window.console;\r\n    if (console && console.warn) {\r\n        return console.warn.apply(console, args);\r\n    }\r\n    else {\r\n        return log.apply(null, args);\r\n    }\r\n}\r\nexports.warn = warn;\r\n/* General Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar hasOwnPropMethod = {}.hasOwnProperty;\r\n// Merges an array of objects into a single object.\r\n// The second argument allows for an array of property names who's object values will be merged together.\r\nfunction mergeProps(propObjs, complexProps) {\r\n    var dest = {};\r\n    var i;\r\n    var name;\r\n    var complexObjs;\r\n    var j;\r\n    var val;\r\n    var props;\r\n    if (complexProps) {\r\n        for (i = 0; i < complexProps.length; i++) {\r\n            name = complexProps[i];\r\n            complexObjs = [];\r\n            // collect the trailing object values, stopping when a non-object is discovered\r\n            for (j = propObjs.length - 1; j >= 0; j--) {\r\n                val = propObjs[j][name];\r\n                if (typeof val === 'object') {\r\n                    complexObjs.unshift(val);\r\n                }\r\n                else if (val !== undefined) {\r\n                    dest[name] = val; // if there were no objects, this value will be used\r\n                    break;\r\n                }\r\n            }\r\n            // if the trailing values were objects, use the merged value\r\n            if (complexObjs.length) {\r\n                dest[name] = mergeProps(complexObjs);\r\n            }\r\n        }\r\n    }\r\n    // copy values into the destination, going from last to first\r\n    for (i = propObjs.length - 1; i >= 0; i--) {\r\n        props = propObjs[i];\r\n        for (name in props) {\r\n            if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\r\n                dest[name] = props[name];\r\n            }\r\n        }\r\n    }\r\n    return dest;\r\n}\r\nexports.mergeProps = mergeProps;\r\nfunction copyOwnProps(src, dest) {\r\n    for (var name_1 in src) {\r\n        if (hasOwnProp(src, name_1)) {\r\n            dest[name_1] = src[name_1];\r\n        }\r\n    }\r\n}\r\nexports.copyOwnProps = copyOwnProps;\r\nfunction hasOwnProp(obj, name) {\r\n    return hasOwnPropMethod.call(obj, name);\r\n}\r\nexports.hasOwnProp = hasOwnProp;\r\nfunction applyAll(functions, thisObj, args) {\r\n    if ($.isFunction(functions)) {\r\n        functions = [functions];\r\n    }\r\n    if (functions) {\r\n        var i = void 0;\r\n        var ret = void 0;\r\n        for (i = 0; i < functions.length; i++) {\r\n            ret = functions[i].apply(thisObj, args) || ret;\r\n        }\r\n        return ret;\r\n    }\r\n}\r\nexports.applyAll = applyAll;\r\nfunction removeMatching(array, testFunc) {\r\n    var removeCnt = 0;\r\n    var i = 0;\r\n    while (i < array.length) {\r\n        if (testFunc(array[i])) { // truthy value means *remove*\r\n            array.splice(i, 1);\r\n            removeCnt++;\r\n        }\r\n        else {\r\n            i++;\r\n        }\r\n    }\r\n    return removeCnt;\r\n}\r\nexports.removeMatching = removeMatching;\r\nfunction removeExact(array, exactVal) {\r\n    var removeCnt = 0;\r\n    var i = 0;\r\n    while (i < array.length) {\r\n        if (array[i] === exactVal) {\r\n            array.splice(i, 1);\r\n            removeCnt++;\r\n        }\r\n        else {\r\n            i++;\r\n        }\r\n    }\r\n    return removeCnt;\r\n}\r\nexports.removeExact = removeExact;\r\nfunction isArraysEqual(a0, a1) {\r\n    var len = a0.length;\r\n    var i;\r\n    if (len == null || len !== a1.length) { // not array? or not same length?\r\n        return false;\r\n    }\r\n    for (i = 0; i < len; i++) {\r\n        if (a0[i] !== a1[i]) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nexports.isArraysEqual = isArraysEqual;\r\nfunction firstDefined() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    for (var i = 0; i < args.length; i++) {\r\n        if (args[i] !== undefined) {\r\n            return args[i];\r\n        }\r\n    }\r\n}\r\nexports.firstDefined = firstDefined;\r\nfunction htmlEscape(s) {\r\n    return (s + '').replace(/&/g, '&amp;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;')\r\n        .replace(/'/g, '&#039;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/\\n/g, '<br />');\r\n}\r\nexports.htmlEscape = htmlEscape;\r\nfunction stripHtmlEntities(text) {\r\n    return text.replace(/&.*?;/g, '');\r\n}\r\nexports.stripHtmlEntities = stripHtmlEntities;\r\n// Given a hash of CSS properties, returns a string of CSS.\r\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\r\nfunction cssToStr(cssProps) {\r\n    var statements = [];\r\n    $.each(cssProps, function (name, val) {\r\n        if (val != null) {\r\n            statements.push(name + ':' + val);\r\n        }\r\n    });\r\n    return statements.join(';');\r\n}\r\nexports.cssToStr = cssToStr;\r\n// Given an object hash of HTML attribute names to values,\r\n// generates a string that can be injected between < > in HTML\r\nfunction attrsToStr(attrs) {\r\n    var parts = [];\r\n    $.each(attrs, function (name, val) {\r\n        if (val != null) {\r\n            parts.push(name + '=\"' + htmlEscape(val) + '\"');\r\n        }\r\n    });\r\n    return parts.join(' ');\r\n}\r\nexports.attrsToStr = attrsToStr;\r\nfunction capitaliseFirstLetter(str) {\r\n    return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\nexports.capitaliseFirstLetter = capitaliseFirstLetter;\r\nfunction compareNumbers(a, b) {\r\n    return a - b;\r\n}\r\nexports.compareNumbers = compareNumbers;\r\nfunction isInt(n) {\r\n    return n % 1 === 0;\r\n}\r\nexports.isInt = isInt;\r\n// Returns a method bound to the given object context.\r\n// Just like one of the jQuery.proxy signatures, but without the undesired behavior of treating the same method with\r\n// different contexts as identical when binding/unbinding events.\r\nfunction proxy(obj, methodName) {\r\n    var method = obj[methodName];\r\n    return function () {\r\n        return method.apply(obj, arguments);\r\n    };\r\n}\r\nexports.proxy = proxy;\r\n// Returns a function, that, as long as it continues to be invoked, will not\r\n// be triggered. The function will be called after it stops being called for\r\n// N milliseconds. If `immediate` is passed, trigger the function on the\r\n// leading edge, instead of the trailing.\r\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\r\nfunction debounce(func, wait, immediate) {\r\n    if (immediate === void 0) { immediate = false; }\r\n    var timeout;\r\n    var args;\r\n    var context;\r\n    var timestamp;\r\n    var result;\r\n    var later = function () {\r\n        var last = +new Date() - timestamp;\r\n        if (last < wait) {\r\n            timeout = setTimeout(later, wait - last);\r\n        }\r\n        else {\r\n            timeout = null;\r\n            if (!immediate) {\r\n                result = func.apply(context, args);\r\n                context = args = null;\r\n            }\r\n        }\r\n    };\r\n    return function () {\r\n        context = this;\r\n        args = arguments;\r\n        timestamp = +new Date();\r\n        var callNow = immediate && !timeout;\r\n        if (!timeout) {\r\n            timeout = setTimeout(later, wait);\r\n        }\r\n        if (callNow) {\r\n            result = func.apply(context, args);\r\n            context = args = null;\r\n        }\r\n        return result;\r\n    };\r\n}\r\nexports.debounce = debounce;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange = /** @class */ (function () {\r\n    function UnzonedRange(startInput, endInput) {\r\n        // TODO: move these into footprint.\r\n        // Especially, doesn't make sense for null startMs/endMs.\r\n        this.isStart = true;\r\n        this.isEnd = true;\r\n        if (moment.isMoment(startInput)) {\r\n            startInput = startInput.clone().stripZone();\r\n        }\r\n        if (moment.isMoment(endInput)) {\r\n            endInput = endInput.clone().stripZone();\r\n        }\r\n        if (startInput) {\r\n            this.startMs = startInput.valueOf();\r\n        }\r\n        if (endInput) {\r\n            this.endMs = endInput.valueOf();\r\n        }\r\n    }\r\n    /*\r\n    SIDEEFFECT: will mutate eventRanges.\r\n    Will return a new array result.\r\n    Only works for non-open-ended ranges.\r\n    */\r\n    UnzonedRange.invertRanges = function (ranges, constraintRange) {\r\n        var invertedRanges = [];\r\n        var startMs = constraintRange.startMs; // the end of the previous range. the start of the new range\r\n        var i;\r\n        var dateRange;\r\n        // ranges need to be in order. required for our date-walking algorithm\r\n        ranges.sort(compareUnzonedRanges);\r\n        for (i = 0; i < ranges.length; i++) {\r\n            dateRange = ranges[i];\r\n            // add the span of time before the event (if there is any)\r\n            if (dateRange.startMs > startMs) { // compare millisecond time (skip any ambig logic)\r\n                invertedRanges.push(new UnzonedRange(startMs, dateRange.startMs));\r\n            }\r\n            if (dateRange.endMs > startMs) {\r\n                startMs = dateRange.endMs;\r\n            }\r\n        }\r\n        // add the span of time after the last event (if there is any)\r\n        if (startMs < constraintRange.endMs) { // compare millisecond time (skip any ambig logic)\r\n            invertedRanges.push(new UnzonedRange(startMs, constraintRange.endMs));\r\n        }\r\n        return invertedRanges;\r\n    };\r\n    UnzonedRange.prototype.intersect = function (otherRange) {\r\n        var startMs = this.startMs;\r\n        var endMs = this.endMs;\r\n        var newRange = null;\r\n        if (otherRange.startMs != null) {\r\n            if (startMs == null) {\r\n                startMs = otherRange.startMs;\r\n            }\r\n            else {\r\n                startMs = Math.max(startMs, otherRange.startMs);\r\n            }\r\n        }\r\n        if (otherRange.endMs != null) {\r\n            if (endMs == null) {\r\n                endMs = otherRange.endMs;\r\n            }\r\n            else {\r\n                endMs = Math.min(endMs, otherRange.endMs);\r\n            }\r\n        }\r\n        if (startMs == null || endMs == null || startMs < endMs) {\r\n            newRange = new UnzonedRange(startMs, endMs);\r\n            newRange.isStart = this.isStart && startMs === this.startMs;\r\n            newRange.isEnd = this.isEnd && endMs === this.endMs;\r\n        }\r\n        return newRange;\r\n    };\r\n    UnzonedRange.prototype.intersectsWith = function (otherRange) {\r\n        return (this.endMs == null || otherRange.startMs == null || this.endMs > otherRange.startMs) &&\r\n            (this.startMs == null || otherRange.endMs == null || this.startMs < otherRange.endMs);\r\n    };\r\n    UnzonedRange.prototype.containsRange = function (innerRange) {\r\n        return (this.startMs == null || (innerRange.startMs != null && innerRange.startMs >= this.startMs)) &&\r\n            (this.endMs == null || (innerRange.endMs != null && innerRange.endMs <= this.endMs));\r\n    };\r\n    // `date` can be a moment, a Date, or a millisecond time.\r\n    UnzonedRange.prototype.containsDate = function (date) {\r\n        var ms = date.valueOf();\r\n        return (this.startMs == null || ms >= this.startMs) &&\r\n            (this.endMs == null || ms < this.endMs);\r\n    };\r\n    // If the given date is not within the given range, move it inside.\r\n    // (If it's past the end, make it one millisecond before the end).\r\n    // `date` can be a moment, a Date, or a millisecond time.\r\n    // Returns a MS-time.\r\n    UnzonedRange.prototype.constrainDate = function (date) {\r\n        var ms = date.valueOf();\r\n        if (this.startMs != null && ms < this.startMs) {\r\n            ms = this.startMs;\r\n        }\r\n        if (this.endMs != null && ms >= this.endMs) {\r\n            ms = this.endMs - 1;\r\n        }\r\n        return ms;\r\n    };\r\n    UnzonedRange.prototype.equals = function (otherRange) {\r\n        return this.startMs === otherRange.startMs && this.endMs === otherRange.endMs;\r\n    };\r\n    UnzonedRange.prototype.clone = function () {\r\n        var range = new UnzonedRange(this.startMs, this.endMs);\r\n        range.isStart = this.isStart;\r\n        range.isEnd = this.isEnd;\r\n        return range;\r\n    };\r\n    // Returns an ambig-zoned moment from startMs.\r\n    // BEWARE: returned moment is not localized.\r\n    // Formatting and start-of-week will be default.\r\n    UnzonedRange.prototype.getStart = function () {\r\n        if (this.startMs != null) {\r\n            return moment_ext_1.default.utc(this.startMs).stripZone();\r\n        }\r\n        return null;\r\n    };\r\n    // Returns an ambig-zoned moment from startMs.\r\n    // BEWARE: returned moment is not localized.\r\n    // Formatting and start-of-week will be default.\r\n    UnzonedRange.prototype.getEnd = function () {\r\n        if (this.endMs != null) {\r\n            return moment_ext_1.default.utc(this.endMs).stripZone();\r\n        }\r\n        return null;\r\n    };\r\n    UnzonedRange.prototype.as = function (unit) {\r\n        return moment.utc(this.endMs).diff(moment.utc(this.startMs), unit, true);\r\n    };\r\n    return UnzonedRange;\r\n}());\r\nexports.default = UnzonedRange;\r\n/*\r\nOnly works for non-open-ended ranges.\r\n*/\r\nfunction compareUnzonedRanges(range1, range2) {\r\n    return range1.startMs - range2.startMs; // earlier ranges go first\r\n}\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventSource, _super);\r\n    // can we do away with calendar? at least for the abstract?\r\n    // useful for buildEventDef\r\n    function EventSource(calendar) {\r\n        var _this = _super.call(this) || this;\r\n        _this.calendar = calendar;\r\n        _this.className = [];\r\n        _this.uid = String(EventSource.uuid++);\r\n        return _this;\r\n    }\r\n    /*\r\n    rawInput can be any data type!\r\n    */\r\n    EventSource.parse = function (rawInput, calendar) {\r\n        var source = new this(calendar);\r\n        if (typeof rawInput === 'object') {\r\n            if (source.applyProps(rawInput)) {\r\n                return source;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    EventSource.normalizeId = function (id) {\r\n        if (id) {\r\n            return String(id);\r\n        }\r\n        return null;\r\n    };\r\n    EventSource.prototype.fetch = function (start, end, timezone) {\r\n        // subclasses must implement. must return a promise.\r\n    };\r\n    EventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n        // optional for subclasses to implement\r\n    };\r\n    EventSource.prototype.removeAllEventDefs = function () {\r\n        // optional for subclasses to implement\r\n    };\r\n    /*\r\n    For compairing/matching\r\n    */\r\n    EventSource.prototype.getPrimitive = function (otherSource) {\r\n        // subclasses must implement\r\n    };\r\n    EventSource.prototype.parseEventDefs = function (rawEventDefs) {\r\n        var i;\r\n        var eventDef;\r\n        var eventDefs = [];\r\n        for (i = 0; i < rawEventDefs.length; i++) {\r\n            eventDef = this.parseEventDef(rawEventDefs[i]);\r\n            if (eventDef) {\r\n                eventDefs.push(eventDef);\r\n            }\r\n        }\r\n        return eventDefs;\r\n    };\r\n    EventSource.prototype.parseEventDef = function (rawInput) {\r\n        var calendarTransform = this.calendar.opt('eventDataTransform');\r\n        var sourceTransform = this.eventDataTransform;\r\n        if (calendarTransform) {\r\n            rawInput = calendarTransform(rawInput, this.calendar);\r\n        }\r\n        if (sourceTransform) {\r\n            rawInput = sourceTransform(rawInput, this.calendar);\r\n        }\r\n        return EventDefParser_1.default.parse(rawInput, this);\r\n    };\r\n    EventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        if (rawProps.id != null) {\r\n            this.id = EventSource.normalizeId(rawProps.id);\r\n        }\r\n        // TODO: converge with EventDef\r\n        if ($.isArray(rawProps.className)) {\r\n            this.className = rawProps.className;\r\n        }\r\n        else if (typeof rawProps.className === 'string') {\r\n            this.className = rawProps.className.split(/\\s+/);\r\n        }\r\n        return true;\r\n    };\r\n    EventSource.uuid = 0;\r\n    EventSource.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n    EventSource.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n    return EventSource;\r\n}(Class_1.default));\r\nexports.default = EventSource;\r\nParsableModelMixin_1.default.mixInto(EventSource);\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nEventSource.defineStandardProps({\r\n    // manually process...\r\n    id: false,\r\n    className: false,\r\n    // automatically transfer...\r\n    color: true,\r\n    backgroundColor: true,\r\n    borderColor: true,\r\n    textColor: true,\r\n    editable: true,\r\n    startEditable: true,\r\n    durationEditable: true,\r\n    rendering: true,\r\n    overlap: true,\r\n    constraint: true,\r\n    allDayDefault: true,\r\n    eventDataTransform: true\r\n});\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUtility methods for easily listening to events on another object,\r\nand more importantly, easily unlistening from them.\r\n\nUSAGE:\r\n  import { default as ListenerMixin, ListenerInterface } from './ListenerMixin'\r\nin class:\r\n  listenTo: ListenerInterface['listenTo']\r\n  stopListeningTo: ListenerInterface['stopListeningTo']\r\nafter class:\r\n  ListenerMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar guid = 0;\r\nvar ListenerMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListenerMixin, _super);\r\n    function ListenerMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    Given an `other` object that has on/off methods, bind the given `callback` to an event by the given name.\r\n    The `callback` will be called with the `this` context of the object that .listenTo is being called on.\r\n    Can be called:\r\n      .listenTo(other, eventName, callback)\r\n    OR\r\n      .listenTo(other, {\r\n        eventName1: callback1,\r\n        eventName2: callback2\r\n      })\r\n    */\r\n    ListenerMixin.prototype.listenTo = function (other, arg, callback) {\r\n        if (typeof arg === 'object') { // given dictionary of callbacks\r\n            for (var eventName in arg) {\r\n                if (arg.hasOwnProperty(eventName)) {\r\n                    this.listenTo(other, eventName, arg[eventName]);\r\n                }\r\n            }\r\n        }\r\n        else if (typeof arg === 'string') {\r\n            other.on(arg + '.' + this.getListenerNamespace(), // use event namespacing to identify this object\r\n            $.proxy(callback, this) // always use `this` context\r\n            // the usually-undesired jQuery guid behavior doesn't matter,\r\n            // because we always unbind via namespace\r\n            );\r\n        }\r\n    };\r\n    /*\r\n    Causes the current object to stop listening to events on the `other` object.\r\n    `eventName` is optional. If omitted, will stop listening to ALL events on `other`.\r\n    */\r\n    ListenerMixin.prototype.stopListeningTo = function (other, eventName) {\r\n        other.off((eventName || '') + '.' + this.getListenerNamespace());\r\n    };\r\n    /*\r\n    Returns a string, unique to this object, to be used for event namespacing\r\n    */\r\n    ListenerMixin.prototype.getListenerNamespace = function () {\r\n        if (this.listenerId == null) {\r\n            this.listenerId = guid++;\r\n        }\r\n        return '_listener' + this.listenerId;\r\n    };\r\n    return ListenerMixin;\r\n}(Mixin_1.default));\r\nexports.default = ListenerMixin;\r\n\n\n/***/ }),\n/* 8 */,\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar SingleEventDef = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SingleEventDef, _super);\r\n    function SingleEventDef() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    Will receive start/end params, but will be ignored.\r\n    */\r\n    SingleEventDef.prototype.buildInstances = function () {\r\n        return [this.buildInstance()];\r\n    };\r\n    SingleEventDef.prototype.buildInstance = function () {\r\n        return new EventInstance_1.default(this, // definition\r\n        this.dateProfile);\r\n    };\r\n    SingleEventDef.prototype.isAllDay = function () {\r\n        return this.dateProfile.isAllDay();\r\n    };\r\n    SingleEventDef.prototype.clone = function () {\r\n        var def = _super.prototype.clone.call(this);\r\n        def.dateProfile = this.dateProfile;\r\n        return def;\r\n    };\r\n    SingleEventDef.prototype.rezone = function () {\r\n        var calendar = this.source.calendar;\r\n        var dateProfile = this.dateProfile;\r\n        this.dateProfile = new EventDateProfile_1.default(calendar.moment(dateProfile.start), dateProfile.end ? calendar.moment(dateProfile.end) : null, calendar);\r\n    };\r\n    /*\r\n    NOTE: if super-method fails, should still attempt to apply\r\n    */\r\n    SingleEventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        var dateProfile = EventDateProfile_1.default.parse(rawProps, this.source); // returns null on failure\r\n        if (dateProfile) {\r\n            this.dateProfile = dateProfile;\r\n            // make sure `date` shows up in the legacy event objects as-is\r\n            if (rawProps.date != null) {\r\n                this.miscProps.date = rawProps.date;\r\n            }\r\n            return superSuccess;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    };\r\n    return SingleEventDef;\r\n}(EventDef_1.default));\r\nexports.default = SingleEventDef;\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nSingleEventDef.defineStandardProps({\r\n    start: false,\r\n    date: false,\r\n    end: false,\r\n    allDay: false\r\n});\r\n\n\n/***/ }),\n/* 10 */,\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ambigDateOfMonthRegex = /^\\s*\\d{4}-\\d\\d$/;\r\nvar ambigTimeOrZoneRegex = /^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/;\r\nvar newMomentProto = moment.fn; // where we will attach our new methods\r\nexports.newMomentProto = newMomentProto;\r\nvar oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods\r\nexports.oldMomentProto = oldMomentProto;\r\n// tell momentjs to transfer these properties upon clone\r\nvar momentProperties = moment.momentProperties;\r\nmomentProperties.push('_fullCalendar');\r\nmomentProperties.push('_ambigTime');\r\nmomentProperties.push('_ambigZone');\r\n/*\r\nCall this if you want Moment's original format method to be used\r\n*/\r\nfunction oldMomentFormat(mom, formatStr) {\r\n    return oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js\r\n}\r\nexports.oldMomentFormat = oldMomentFormat;\r\n// Creating\r\n// -------------------------------------------------------------------------------------------------\r\n// Creates a new moment, similar to the vanilla moment(...) constructor, but with\r\n// extra features (ambiguous time, enhanced formatting). When given an existing moment,\r\n// it will function as a clone (and retain the zone of the moment). Anything else will\r\n// result in a moment in the local zone.\r\nvar momentExt = function () {\r\n    return makeMoment(arguments);\r\n};\r\nexports.default = momentExt;\r\n// Sames as momentExt, but forces the resulting moment to be in the UTC timezone.\r\nmomentExt.utc = function () {\r\n    var mom = makeMoment(arguments, true);\r\n    // Force it into UTC because makeMoment doesn't guarantee it\r\n    // (if given a pre-existing moment for example)\r\n    if (mom.hasTime()) { // don't give ambiguously-timed moments a UTC zone\r\n        mom.utc();\r\n    }\r\n    return mom;\r\n};\r\n// Same as momentExt, but when given an ISO8601 string, the timezone offset is preserved.\r\n// ISO8601 strings with no timezone offset will become ambiguously zoned.\r\nmomentExt.parseZone = function () {\r\n    return makeMoment(arguments, true, true);\r\n};\r\n// Builds an enhanced moment from args. When given an existing moment, it clones. When given a\r\n// native Date, or called with no arguments (the current time), the resulting moment will be local.\r\n// Anything else needs to be \"parsed\" (a string or an array), and will be affected by:\r\n//    parseAsUTC - if there is no zone information, should we parse the input in UTC?\r\n//    parseZone - if there is zone information, should we force the zone of the moment?\r\nfunction makeMoment(args, parseAsUTC, parseZone) {\r\n    if (parseAsUTC === void 0) { parseAsUTC = false; }\r\n    if (parseZone === void 0) { parseZone = false; }\r\n    var input = args[0];\r\n    var isSingleString = args.length === 1 && typeof input === 'string';\r\n    var isAmbigTime;\r\n    var isAmbigZone;\r\n    var ambigMatch;\r\n    var mom;\r\n    if (moment.isMoment(input) || util_1.isNativeDate(input) || input === undefined) {\r\n        mom = moment.apply(null, args);\r\n    }\r\n    else { // \"parsing\" is required\r\n        isAmbigTime = false;\r\n        isAmbigZone = false;\r\n        if (isSingleString) {\r\n            if (ambigDateOfMonthRegex.test(input)) {\r\n                // accept strings like '2014-05', but convert to the first of the month\r\n                input += '-01';\r\n                args = [input]; // for when we pass it on to moment's constructor\r\n                isAmbigTime = true;\r\n                isAmbigZone = true;\r\n            }\r\n            else if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) {\r\n                isAmbigTime = !ambigMatch[5]; // no time part?\r\n                isAmbigZone = true;\r\n            }\r\n        }\r\n        else if ($.isArray(input)) {\r\n            // arrays have no timezone information, so assume ambiguous zone\r\n            isAmbigZone = true;\r\n        }\r\n        // otherwise, probably a string with a format\r\n        if (parseAsUTC || isAmbigTime) {\r\n            mom = moment.utc.apply(moment, args);\r\n        }\r\n        else {\r\n            mom = moment.apply(null, args);\r\n        }\r\n        if (isAmbigTime) {\r\n            mom._ambigTime = true;\r\n            mom._ambigZone = true; // ambiguous time always means ambiguous zone\r\n        }\r\n        else if (parseZone) { // let's record the inputted zone somehow\r\n            if (isAmbigZone) {\r\n                mom._ambigZone = true;\r\n            }\r\n            else if (isSingleString) {\r\n                mom.utcOffset(input); // if not a valid zone, will assign UTC\r\n            }\r\n        }\r\n    }\r\n    mom._fullCalendar = true; // flag for extended functionality\r\n    return mom;\r\n}\r\n// Week Number\r\n// -------------------------------------------------------------------------------------------------\r\n// Returns the week number, considering the locale's custom week number calcuation\r\n// `weeks` is an alias for `week`\r\nnewMomentProto.week = newMomentProto.weeks = function (input) {\r\n    var weekCalc = this._locale._fullCalendar_weekCalc;\r\n    if (input == null && typeof weekCalc === 'function') { // custom function only works for getter\r\n        return weekCalc(this);\r\n    }\r\n    else if (weekCalc === 'ISO') {\r\n        return oldMomentProto.isoWeek.apply(this, arguments); // ISO getter/setter\r\n    }\r\n    return oldMomentProto.week.apply(this, arguments); // local getter/setter\r\n};\r\n// Time-of-day\r\n// -------------------------------------------------------------------------------------------------\r\n// GETTER\r\n// Returns a Duration with the hours/minutes/seconds/ms values of the moment.\r\n// If the moment has an ambiguous time, a duration of 00:00 will be returned.\r\n//\r\n// SETTER\r\n// You can supply a Duration, a Moment, or a Duration-like argument.\r\n// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.\r\nnewMomentProto.time = function (time) {\r\n    // Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.\r\n    // `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.\r\n    if (!this._fullCalendar) {\r\n        return oldMomentProto.time.apply(this, arguments);\r\n    }\r\n    if (time == null) { // getter\r\n        return moment.duration({\r\n            hours: this.hours(),\r\n            minutes: this.minutes(),\r\n            seconds: this.seconds(),\r\n            milliseconds: this.milliseconds()\r\n        });\r\n    }\r\n    else { // setter\r\n        this._ambigTime = false; // mark that the moment now has a time\r\n        if (!moment.isDuration(time) && !moment.isMoment(time)) {\r\n            time = moment.duration(time);\r\n        }\r\n        // The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).\r\n        // Only for Duration times, not Moment times.\r\n        var dayHours = 0;\r\n        if (moment.isDuration(time)) {\r\n            dayHours = Math.floor(time.asDays()) * 24;\r\n        }\r\n        // We need to set the individual fields.\r\n        // Can't use startOf('day') then add duration. In case of DST at start of day.\r\n        return this.hours(dayHours + time.hours())\r\n            .minutes(time.minutes())\r\n            .seconds(time.seconds())\r\n            .milliseconds(time.milliseconds());\r\n    }\r\n};\r\n// Converts the moment to UTC, stripping out its time-of-day and timezone offset,\r\n// but preserving its YMD. A moment with a stripped time will display no time\r\n// nor timezone offset when .format() is called.\r\nnewMomentProto.stripTime = function () {\r\n    if (!this._ambigTime) {\r\n        this.utc(true); // keepLocalTime=true (for keeping *date* value)\r\n        // set time to zero\r\n        this.set({\r\n            hours: 0,\r\n            minutes: 0,\r\n            seconds: 0,\r\n            ms: 0\r\n        });\r\n        // Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n        // which clears all ambig flags.\r\n        this._ambigTime = true;\r\n        this._ambigZone = true; // if ambiguous time, also ambiguous timezone offset\r\n    }\r\n    return this; // for chaining\r\n};\r\n// Returns if the moment has a non-ambiguous time (boolean)\r\nnewMomentProto.hasTime = function () {\r\n    return !this._ambigTime;\r\n};\r\n// Timezone\r\n// -------------------------------------------------------------------------------------------------\r\n// Converts the moment to UTC, stripping out its timezone offset, but preserving its\r\n// YMD and time-of-day. A moment with a stripped timezone offset will display no\r\n// timezone offset when .format() is called.\r\nnewMomentProto.stripZone = function () {\r\n    var wasAmbigTime;\r\n    if (!this._ambigZone) {\r\n        wasAmbigTime = this._ambigTime;\r\n        this.utc(true); // keepLocalTime=true (for keeping date and time values)\r\n        // the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore\r\n        this._ambigTime = wasAmbigTime || false;\r\n        // Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n        // which clears the ambig flags.\r\n        this._ambigZone = true;\r\n    }\r\n    return this; // for chaining\r\n};\r\n// Returns of the moment has a non-ambiguous timezone offset (boolean)\r\nnewMomentProto.hasZone = function () {\r\n    return !this._ambigZone;\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.local = function (keepLocalTime) {\r\n    // for when converting from ambiguously-zoned to local,\r\n    // keep the time values when converting from UTC -> local\r\n    oldMomentProto.local.call(this, this._ambigZone || keepLocalTime);\r\n    // ensure non-ambiguous\r\n    // this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals\r\n    this._ambigTime = false;\r\n    this._ambigZone = false;\r\n    return this; // for chaining\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.utc = function (keepLocalTime) {\r\n    oldMomentProto.utc.call(this, keepLocalTime);\r\n    // ensure non-ambiguous\r\n    // this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals\r\n    this._ambigTime = false;\r\n    this._ambigZone = false;\r\n    return this;\r\n};\r\n// implicitly marks a zone (will probably get called upon .utc() and .local())\r\nnewMomentProto.utcOffset = function (tzo) {\r\n    if (tzo != null) { // setter\r\n        // these assignments needs to happen before the original zone method is called.\r\n        // I forget why, something to do with a browser crash.\r\n        this._ambigTime = false;\r\n        this._ambigZone = false;\r\n    }\r\n    return oldMomentProto.utcOffset.apply(this, arguments);\r\n};\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar ComponentFootprint = /** @class */ (function () {\r\n    function ComponentFootprint(unzonedRange, isAllDay) {\r\n        this.isAllDay = false; // component can choose to ignore this\r\n        this.unzonedRange = unzonedRange;\r\n        this.isAllDay = isAllDay;\r\n    }\r\n    /*\r\n    Only works for non-open-ended ranges.\r\n    */\r\n    ComponentFootprint.prototype.toLegacy = function (calendar) {\r\n        return {\r\n            start: calendar.msToMoment(this.unzonedRange.startMs, this.isAllDay),\r\n            end: calendar.msToMoment(this.unzonedRange.endMs, this.isAllDay)\r\n        };\r\n    };\r\n    return ComponentFootprint;\r\n}());\r\nexports.default = ComponentFootprint;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n  import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'\r\nin class:\r\n  on: EmitterInterface['on']\r\n  one: EmitterInterface['one']\r\n  off: EmitterInterface['off']\r\n  trigger: EmitterInterface['trigger']\r\n  triggerWith: EmitterInterface['triggerWith']\r\n  hasHandlers: EmitterInterface['hasHandlers']\r\nafter class:\r\n  EmitterMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar EmitterMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EmitterMixin, _super);\r\n    function EmitterMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // jQuery-ification via $(this) allows a non-DOM object to have\r\n    // the same event handling capabilities (including namespaces).\r\n    EmitterMixin.prototype.on = function (types, handler) {\r\n        $(this).on(types, this._prepareIntercept(handler));\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.one = function (types, handler) {\r\n        $(this).one(types, this._prepareIntercept(handler));\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype._prepareIntercept = function (handler) {\r\n        // handlers are always called with an \"event\" object as their first param.\r\n        // sneak the `this` context and arguments into the extra parameter object\r\n        // and forward them on to the original handler.\r\n        var intercept = function (ev, extra) {\r\n            return handler.apply(extra.context || this, extra.args || []);\r\n        };\r\n        // mimick jQuery's internal \"proxy\" system (risky, I know)\r\n        // causing all functions with the same .guid to appear to be the same.\r\n        // https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448\r\n        // this is needed for calling .off with the original non-intercept handler.\r\n        if (!handler.guid) {\r\n            handler.guid = $.guid++;\r\n        }\r\n        intercept.guid = handler.guid;\r\n        return intercept;\r\n    };\r\n    EmitterMixin.prototype.off = function (types, handler) {\r\n        $(this).off(types, handler);\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.trigger = function (types) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        // pass in \"extra\" info to the intercept\r\n        $(this).triggerHandler(types, { args: args });\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.triggerWith = function (types, context, args) {\r\n        // `triggerHandler` is less reliant on the DOM compared to `trigger`.\r\n        // pass in \"extra\" info to the intercept.\r\n        $(this).triggerHandler(types, { context: context, args: args });\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.hasHandlers = function (type) {\r\n        var hash = $._data(this, 'events'); // http://blog.jquery.com/2012/08/09/jquery-1-8-released/\r\n        return hash && hash[type] && hash[type].length > 0;\r\n    };\r\n    return EmitterMixin;\r\n}(Mixin_1.default));\r\nexports.default = EmitterMixin;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Interaction = /** @class */ (function () {\r\n    function Interaction(component) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n    }\r\n    Interaction.prototype.opt = function (name) {\r\n        return this.view.opt(name);\r\n    };\r\n    Interaction.prototype.end = function () {\r\n        // subclasses can implement\r\n    };\r\n    return Interaction;\r\n}());\r\nexports.default = Interaction;\r\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Mixin = /** @class */ (function () {\r\n    function Mixin() {\r\n    }\r\n    Mixin.mixInto = function (destClass) {\r\n        var _this = this;\r\n        Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n            if (!destClass.prototype[name]) { // if destination class doesn't already define it\r\n                destClass.prototype[name] = _this.prototype[name];\r\n            }\r\n        });\r\n    };\r\n    /*\r\n    will override existing methods\r\n    TODO: remove! not used anymore\r\n    */\r\n    Mixin.mixOver = function (destClass) {\r\n        var _this = this;\r\n        Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n            destClass.prototype[name] = _this.prototype[name];\r\n        });\r\n    };\r\n    return Mixin;\r\n}());\r\nexports.default = Mixin;\r\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar EventDateProfile = /** @class */ (function () {\r\n    function EventDateProfile(start, end, calendar) {\r\n        this.start = start;\r\n        this.end = end || null;\r\n        this.unzonedRange = this.buildUnzonedRange(calendar);\r\n    }\r\n    /*\r\n    Needs an EventSource object\r\n    */\r\n    EventDateProfile.parse = function (rawProps, source) {\r\n        var startInput = rawProps.start || rawProps.date;\r\n        var endInput = rawProps.end;\r\n        if (!startInput) {\r\n            return false;\r\n        }\r\n        var calendar = source.calendar;\r\n        var start = calendar.moment(startInput);\r\n        var end = endInput ? calendar.moment(endInput) : null;\r\n        var forcedAllDay = rawProps.allDay;\r\n        var forceEventDuration = calendar.opt('forceEventDuration');\r\n        if (!start.isValid()) {\r\n            return false;\r\n        }\r\n        if (forcedAllDay == null) {\r\n            forcedAllDay = source.allDayDefault;\r\n            if (forcedAllDay == null) {\r\n                forcedAllDay = calendar.opt('allDayDefault');\r\n            }\r\n        }\r\n        if (forcedAllDay === true) {\r\n            start.stripTime();\r\n            if (end) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        else if (forcedAllDay === false) {\r\n            if (!start.hasTime()) {\r\n                start.time(0);\r\n            }\r\n            if (end && !end.hasTime()) {\r\n                end.time(0);\r\n            }\r\n        }\r\n        if (end && (!end.isValid() || !end.isAfter(start))) {\r\n            end = null;\r\n        }\r\n        if (!end && forceEventDuration) {\r\n            end = calendar.getDefaultEventEnd(!start.hasTime(), start);\r\n        }\r\n        return new EventDateProfile(start, end, calendar);\r\n    };\r\n    EventDateProfile.isStandardProp = function (propName) {\r\n        return propName === 'start' || propName === 'date' || propName === 'end' || propName === 'allDay';\r\n    };\r\n    EventDateProfile.prototype.isAllDay = function () {\r\n        return !(this.start.hasTime() || (this.end && this.end.hasTime()));\r\n    };\r\n    /*\r\n    Needs a Calendar object\r\n    */\r\n    EventDateProfile.prototype.buildUnzonedRange = function (calendar) {\r\n        var startMs = this.start.clone().stripZone().valueOf();\r\n        var endMs = this.getEnd(calendar).stripZone().valueOf();\r\n        return new UnzonedRange_1.default(startMs, endMs);\r\n    };\r\n    /*\r\n    Needs a Calendar object\r\n    */\r\n    EventDateProfile.prototype.getEnd = function (calendar) {\r\n        return this.end ?\r\n            this.end.clone() :\r\n            // derive the end from the start and allDay. compute allDay if necessary\r\n            calendar.getDefaultEventEnd(this.isAllDay(), this.start);\r\n    };\r\n    return EventDateProfile;\r\n}());\r\nexports.default = EventDateProfile;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar DragListener_1 = __webpack_require__(59);\r\n/* Tracks mouse movements over a component and raises events about which hit the mouse is over.\r\n------------------------------------------------------------------------------------------------------------------------\r\noptions:\r\n- subjectEl\r\n- subjectCenter\r\n*/\r\nvar HitDragListener = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HitDragListener, _super);\r\n    function HitDragListener(component, options) {\r\n        var _this = _super.call(this, options) || this;\r\n        _this.component = component;\r\n        return _this;\r\n    }\r\n    // Called when drag listening starts (but a real drag has not necessarily began).\r\n    // ev might be undefined if dragging was started manually.\r\n    HitDragListener.prototype.handleInteractionStart = function (ev) {\r\n        var subjectEl = this.subjectEl;\r\n        var subjectRect;\r\n        var origPoint;\r\n        var point;\r\n        this.component.hitsNeeded();\r\n        this.computeScrollBounds(); // for autoscroll\r\n        if (ev) {\r\n            origPoint = { left: util_1.getEvX(ev), top: util_1.getEvY(ev) };\r\n            point = origPoint;\r\n            // constrain the point to bounds of the element being dragged\r\n            if (subjectEl) {\r\n                subjectRect = util_1.getOuterRect(subjectEl); // used for centering as well\r\n                point = util_1.constrainPoint(point, subjectRect);\r\n            }\r\n            this.origHit = this.queryHit(point.left, point.top);\r\n            // treat the center of the subject as the collision point?\r\n            if (subjectEl && this.options.subjectCenter) {\r\n                // only consider the area the subject overlaps the hit. best for large subjects.\r\n                // TODO: skip this if hit didn't supply left/right/top/bottom\r\n                if (this.origHit) {\r\n                    subjectRect = util_1.intersectRects(this.origHit, subjectRect) ||\r\n                        subjectRect; // in case there is no intersection\r\n                }\r\n                point = util_1.getRectCenter(subjectRect);\r\n            }\r\n            this.coordAdjust = util_1.diffPoints(point, origPoint); // point - origPoint\r\n        }\r\n        else {\r\n            this.origHit = null;\r\n            this.coordAdjust = null;\r\n        }\r\n        // call the super-method. do it after origHit has been computed\r\n        _super.prototype.handleInteractionStart.call(this, ev);\r\n    };\r\n    // Called when the actual drag has started\r\n    HitDragListener.prototype.handleDragStart = function (ev) {\r\n        var hit;\r\n        _super.prototype.handleDragStart.call(this, ev);\r\n        // might be different from this.origHit if the min-distance is large\r\n        hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n        // report the initial hit the mouse is over\r\n        // especially important if no min-distance and drag starts immediately\r\n        if (hit) {\r\n            this.handleHitOver(hit);\r\n        }\r\n    };\r\n    // Called when the drag moves\r\n    HitDragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n        var hit;\r\n        _super.prototype.handleDrag.call(this, dx, dy, ev);\r\n        hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n        if (!isHitsEqual(hit, this.hit)) { // a different hit than before?\r\n            if (this.hit) {\r\n                this.handleHitOut();\r\n            }\r\n            if (hit) {\r\n                this.handleHitOver(hit);\r\n            }\r\n        }\r\n    };\r\n    // Called when dragging has been stopped\r\n    HitDragListener.prototype.handleDragEnd = function (ev) {\r\n        this.handleHitDone();\r\n        _super.prototype.handleDragEnd.call(this, ev);\r\n    };\r\n    // Called when a the mouse has just moved over a new hit\r\n    HitDragListener.prototype.handleHitOver = function (hit) {\r\n        var isOrig = isHitsEqual(hit, this.origHit);\r\n        this.hit = hit;\r\n        this.trigger('hitOver', this.hit, isOrig, this.origHit);\r\n    };\r\n    // Called when the mouse has just moved out of a hit\r\n    HitDragListener.prototype.handleHitOut = function () {\r\n        if (this.hit) {\r\n            this.trigger('hitOut', this.hit);\r\n            this.handleHitDone();\r\n            this.hit = null;\r\n        }\r\n    };\r\n    // Called after a hitOut. Also called before a dragStop\r\n    HitDragListener.prototype.handleHitDone = function () {\r\n        if (this.hit) {\r\n            this.trigger('hitDone', this.hit);\r\n        }\r\n    };\r\n    // Called when the interaction ends, whether there was a real drag or not\r\n    HitDragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n        _super.prototype.handleInteractionEnd.call(this, ev, isCancelled);\r\n        this.origHit = null;\r\n        this.hit = null;\r\n        this.component.hitsNotNeeded();\r\n    };\r\n    // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n    HitDragListener.prototype.handleScrollEnd = function () {\r\n        _super.prototype.handleScrollEnd.call(this);\r\n        // hits' absolute positions will be in new places after a user's scroll.\r\n        // HACK for recomputing.\r\n        if (this.isDragging) {\r\n            this.component.releaseHits();\r\n            this.component.prepareHits();\r\n        }\r\n    };\r\n    // Gets the hit underneath the coordinates for the given mouse event\r\n    HitDragListener.prototype.queryHit = function (left, top) {\r\n        if (this.coordAdjust) {\r\n            left += this.coordAdjust.left;\r\n            top += this.coordAdjust.top;\r\n        }\r\n        return this.component.queryHit(left, top);\r\n    };\r\n    return HitDragListener;\r\n}(DragListener_1.default));\r\nexports.default = HitDragListener;\r\n// Returns `true` if the hits are identically equal. `false` otherwise. Must be from the same component.\r\n// Two null values will be considered equal, as two \"out of the component\" states are the same.\r\nfunction isHitsEqual(hit0, hit1) {\r\n    if (!hit0 && !hit1) {\r\n        return true;\r\n    }\r\n    if (hit0 && hit1) {\r\n        return hit0.component === hit1.component &&\r\n            isHitPropsWithin(hit0, hit1) &&\r\n            isHitPropsWithin(hit1, hit0); // ensures all props are identical\r\n    }\r\n    return false;\r\n}\r\n// Returns true if all of subHit's non-standard properties are within superHit\r\nfunction isHitPropsWithin(subHit, superHit) {\r\n    for (var propName in subHit) {\r\n        if (!/^(component|left|right|top|bottom)$/.test(propName)) {\r\n            if (subHit[propName] !== superHit[propName]) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.version = '3.10.0';\r\n// When introducing internal API incompatibilities (where fullcalendar plugins would break),\r\n// the minor version of the calendar should be upped (ex: 2.7.2 -> 2.8.0)\r\n// and the below integer should be incremented.\r\nexports.internalApiVersion = 12;\r\nvar util_1 = __webpack_require__(4);\r\nexports.applyAll = util_1.applyAll;\r\nexports.debounce = util_1.debounce;\r\nexports.isInt = util_1.isInt;\r\nexports.htmlEscape = util_1.htmlEscape;\r\nexports.cssToStr = util_1.cssToStr;\r\nexports.proxy = util_1.proxy;\r\nexports.capitaliseFirstLetter = util_1.capitaliseFirstLetter;\r\nexports.getOuterRect = util_1.getOuterRect;\r\nexports.getClientRect = util_1.getClientRect;\r\nexports.getContentRect = util_1.getContentRect;\r\nexports.getScrollbarWidths = util_1.getScrollbarWidths;\r\nexports.preventDefault = util_1.preventDefault;\r\nexports.parseFieldSpecs = util_1.parseFieldSpecs;\r\nexports.compareByFieldSpecs = util_1.compareByFieldSpecs;\r\nexports.compareByFieldSpec = util_1.compareByFieldSpec;\r\nexports.flexibleCompare = util_1.flexibleCompare;\r\nexports.computeGreatestUnit = util_1.computeGreatestUnit;\r\nexports.divideRangeByDuration = util_1.divideRangeByDuration;\r\nexports.divideDurationByDuration = util_1.divideDurationByDuration;\r\nexports.multiplyDuration = util_1.multiplyDuration;\r\nexports.durationHasTime = util_1.durationHasTime;\r\nexports.log = util_1.log;\r\nexports.warn = util_1.warn;\r\nexports.removeExact = util_1.removeExact;\r\nexports.intersectRects = util_1.intersectRects;\r\nexports.allowSelection = util_1.allowSelection;\r\nexports.attrsToStr = util_1.attrsToStr;\r\nexports.compareNumbers = util_1.compareNumbers;\r\nexports.compensateScroll = util_1.compensateScroll;\r\nexports.computeDurationGreatestUnit = util_1.computeDurationGreatestUnit;\r\nexports.constrainPoint = util_1.constrainPoint;\r\nexports.copyOwnProps = util_1.copyOwnProps;\r\nexports.diffByUnit = util_1.diffByUnit;\r\nexports.diffDay = util_1.diffDay;\r\nexports.diffDayTime = util_1.diffDayTime;\r\nexports.diffPoints = util_1.diffPoints;\r\nexports.disableCursor = util_1.disableCursor;\r\nexports.distributeHeight = util_1.distributeHeight;\r\nexports.enableCursor = util_1.enableCursor;\r\nexports.firstDefined = util_1.firstDefined;\r\nexports.getEvIsTouch = util_1.getEvIsTouch;\r\nexports.getEvX = util_1.getEvX;\r\nexports.getEvY = util_1.getEvY;\r\nexports.getRectCenter = util_1.getRectCenter;\r\nexports.getScrollParent = util_1.getScrollParent;\r\nexports.hasOwnProp = util_1.hasOwnProp;\r\nexports.isArraysEqual = util_1.isArraysEqual;\r\nexports.isNativeDate = util_1.isNativeDate;\r\nexports.isPrimaryMouseButton = util_1.isPrimaryMouseButton;\r\nexports.isTimeString = util_1.isTimeString;\r\nexports.matchCellWidths = util_1.matchCellWidths;\r\nexports.mergeProps = util_1.mergeProps;\r\nexports.preventSelection = util_1.preventSelection;\r\nexports.removeMatching = util_1.removeMatching;\r\nexports.stripHtmlEntities = util_1.stripHtmlEntities;\r\nexports.subtractInnerElHeight = util_1.subtractInnerElHeight;\r\nexports.uncompensateScroll = util_1.uncompensateScroll;\r\nexports.undistributeHeight = util_1.undistributeHeight;\r\nexports.dayIDs = util_1.dayIDs;\r\nexports.unitsDesc = util_1.unitsDesc;\r\nvar date_formatting_1 = __webpack_require__(49);\r\nexports.formatDate = date_formatting_1.formatDate;\r\nexports.formatRange = date_formatting_1.formatRange;\r\nexports.queryMostGranularFormatUnit = date_formatting_1.queryMostGranularFormatUnit;\r\nvar locale_1 = __webpack_require__(32);\r\nexports.datepickerLocale = locale_1.datepickerLocale;\r\nexports.locale = locale_1.locale;\r\nexports.getMomentLocaleData = locale_1.getMomentLocaleData;\r\nexports.populateInstanceComputableOptions = locale_1.populateInstanceComputableOptions;\r\nvar util_2 = __webpack_require__(19);\r\nexports.eventDefsToEventInstances = util_2.eventDefsToEventInstances;\r\nexports.eventFootprintToComponentFootprint = util_2.eventFootprintToComponentFootprint;\r\nexports.eventInstanceToEventRange = util_2.eventInstanceToEventRange;\r\nexports.eventInstanceToUnzonedRange = util_2.eventInstanceToUnzonedRange;\r\nexports.eventRangeToEventFootprint = util_2.eventRangeToEventFootprint;\r\nvar moment_ext_1 = __webpack_require__(11);\r\nexports.moment = moment_ext_1.default;\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nexports.EmitterMixin = EmitterMixin_1.default;\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexports.ListenerMixin = ListenerMixin_1.default;\r\nvar Model_1 = __webpack_require__(51);\r\nexports.Model = Model_1.default;\r\nvar Constraints_1 = __webpack_require__(217);\r\nexports.Constraints = Constraints_1.default;\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nexports.DateProfileGenerator = DateProfileGenerator_1.default;\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nexports.UnzonedRange = UnzonedRange_1.default;\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nexports.ComponentFootprint = ComponentFootprint_1.default;\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nexports.BusinessHourGenerator = BusinessHourGenerator_1.default;\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nexports.EventPeriod = EventPeriod_1.default;\r\nvar EventManager_1 = __webpack_require__(220);\r\nexports.EventManager = EventManager_1.default;\r\nvar EventDef_1 = __webpack_require__(37);\r\nexports.EventDef = EventDef_1.default;\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nexports.EventDefMutation = EventDefMutation_1.default;\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nexports.EventDefParser = EventDefParser_1.default;\r\nvar EventInstance_1 = __webpack_require__(53);\r\nexports.EventInstance = EventInstance_1.default;\r\nvar EventRange_1 = __webpack_require__(50);\r\nexports.EventRange = EventRange_1.default;\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.RecurringEventDef = RecurringEventDef_1.default;\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nexports.SingleEventDef = SingleEventDef_1.default;\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nexports.EventDefDateMutation = EventDefDateMutation_1.default;\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nexports.EventDateProfile = EventDateProfile_1.default;\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nexports.EventSourceParser = EventSourceParser_1.default;\r\nvar EventSource_1 = __webpack_require__(6);\r\nexports.EventSource = EventSource_1.default;\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nexports.defineThemeSystem = ThemeRegistry_1.defineThemeSystem;\r\nexports.getThemeSystemClass = ThemeRegistry_1.getThemeSystemClass;\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nexports.EventInstanceGroup = EventInstanceGroup_1.default;\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nexports.ArrayEventSource = ArrayEventSource_1.default;\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nexports.FuncEventSource = FuncEventSource_1.default;\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nexports.JsonFeedEventSource = JsonFeedEventSource_1.default;\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nexports.EventFootprint = EventFootprint_1.default;\r\nvar Class_1 = __webpack_require__(35);\r\nexports.Class = Class_1.default;\r\nvar Mixin_1 = __webpack_require__(15);\r\nexports.Mixin = Mixin_1.default;\r\nvar CoordCache_1 = __webpack_require__(58);\r\nexports.CoordCache = CoordCache_1.default;\r\nvar Iterator_1 = __webpack_require__(225);\r\nexports.Iterator = Iterator_1.default;\r\nvar DragListener_1 = __webpack_require__(59);\r\nexports.DragListener = DragListener_1.default;\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nexports.HitDragListener = HitDragListener_1.default;\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nexports.MouseFollower = MouseFollower_1.default;\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nexports.ParsableModelMixin = ParsableModelMixin_1.default;\r\nvar Popover_1 = __webpack_require__(227);\r\nexports.Popover = Popover_1.default;\r\nvar Promise_1 = __webpack_require__(21);\r\nexports.Promise = Promise_1.default;\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nexports.TaskQueue = TaskQueue_1.default;\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nexports.RenderQueue = RenderQueue_1.default;\r\nvar Scroller_1 = __webpack_require__(41);\r\nexports.Scroller = Scroller_1.default;\r\nvar Theme_1 = __webpack_require__(22);\r\nexports.Theme = Theme_1.default;\r\nvar Component_1 = __webpack_require__(230);\r\nexports.Component = Component_1.default;\r\nvar DateComponent_1 = __webpack_require__(231);\r\nexports.DateComponent = DateComponent_1.default;\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nexports.InteractiveDateComponent = InteractiveDateComponent_1.default;\r\nvar Calendar_1 = __webpack_require__(232);\r\nexports.Calendar = Calendar_1.default;\r\nvar View_1 = __webpack_require__(43);\r\nexports.View = View_1.default;\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nexports.defineView = ViewRegistry_1.defineView;\r\nexports.getViewConfig = ViewRegistry_1.getViewConfig;\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nexports.DayTableMixin = DayTableMixin_1.default;\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nexports.BusinessHourRenderer = BusinessHourRenderer_1.default;\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nexports.EventRenderer = EventRenderer_1.default;\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nexports.FillRenderer = FillRenderer_1.default;\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nexports.HelperRenderer = HelperRenderer_1.default;\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nexports.ExternalDropping = ExternalDropping_1.default;\r\nvar EventResizing_1 = __webpack_require__(234);\r\nexports.EventResizing = EventResizing_1.default;\r\nvar EventPointing_1 = __webpack_require__(64);\r\nexports.EventPointing = EventPointing_1.default;\r\nvar EventDragging_1 = __webpack_require__(235);\r\nexports.EventDragging = EventDragging_1.default;\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nexports.DateSelecting = DateSelecting_1.default;\r\nvar DateClicking_1 = __webpack_require__(237);\r\nexports.DateClicking = DateClicking_1.default;\r\nvar Interaction_1 = __webpack_require__(14);\r\nexports.Interaction = Interaction_1.default;\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nexports.StandardInteractionsMixin = StandardInteractionsMixin_1.default;\r\nvar AgendaView_1 = __webpack_require__(238);\r\nexports.AgendaView = AgendaView_1.default;\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nexports.TimeGrid = TimeGrid_1.default;\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nexports.TimeGridEventRenderer = TimeGridEventRenderer_1.default;\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\nexports.TimeGridFillRenderer = TimeGridFillRenderer_1.default;\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nexports.TimeGridHelperRenderer = TimeGridHelperRenderer_1.default;\r\nvar DayGrid_1 = __webpack_require__(66);\r\nexports.DayGrid = DayGrid_1.default;\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nexports.DayGridEventRenderer = DayGridEventRenderer_1.default;\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\nexports.DayGridFillRenderer = DayGridFillRenderer_1.default;\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nexports.DayGridHelperRenderer = DayGridHelperRenderer_1.default;\r\nvar BasicView_1 = __webpack_require__(67);\r\nexports.BasicView = BasicView_1.default;\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nexports.BasicViewDateProfileGenerator = BasicViewDateProfileGenerator_1.default;\r\nvar MonthView_1 = __webpack_require__(246);\r\nexports.MonthView = MonthView_1.default;\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\nexports.MonthViewDateProfileGenerator = MonthViewDateProfileGenerator_1.default;\r\nvar ListView_1 = __webpack_require__(248);\r\nexports.ListView = ListView_1.default;\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\nexports.ListEventPointing = ListEventPointing_1.default;\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nexports.ListEventRenderer = ListEventRenderer_1.default;\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange_1 = __webpack_require__(50);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nfunction eventDefsToEventInstances(eventDefs, unzonedRange) {\r\n    var eventInstances = [];\r\n    var i;\r\n    for (i = 0; i < eventDefs.length; i++) {\r\n        eventInstances.push.apply(eventInstances, // append\r\n        eventDefs[i].buildInstances(unzonedRange));\r\n    }\r\n    return eventInstances;\r\n}\r\nexports.eventDefsToEventInstances = eventDefsToEventInstances;\r\nfunction eventInstanceToEventRange(eventInstance) {\r\n    return new EventRange_1.default(eventInstance.dateProfile.unzonedRange, eventInstance.def, eventInstance);\r\n}\r\nexports.eventInstanceToEventRange = eventInstanceToEventRange;\r\nfunction eventRangeToEventFootprint(eventRange) {\r\n    return new EventFootprint_1.default(new ComponentFootprint_1.default(eventRange.unzonedRange, eventRange.eventDef.isAllDay()), eventRange.eventDef, eventRange.eventInstance // might not exist\r\n    );\r\n}\r\nexports.eventRangeToEventFootprint = eventRangeToEventFootprint;\r\nfunction eventInstanceToUnzonedRange(eventInstance) {\r\n    return eventInstance.dateProfile.unzonedRange;\r\n}\r\nexports.eventInstanceToUnzonedRange = eventInstanceToUnzonedRange;\r\nfunction eventFootprintToComponentFootprint(eventFootprint) {\r\n    return eventFootprint.componentFootprint;\r\n}\r\nexports.eventFootprintToComponentFootprint = eventFootprintToComponentFootprint;\r\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventRange_1 = __webpack_require__(50);\r\n/*\r\nIt's expected that there will be at least one EventInstance,\r\nOR that an explicitEventDef is assigned.\r\n*/\r\nvar EventInstanceGroup = /** @class */ (function () {\r\n    function EventInstanceGroup(eventInstances) {\r\n        this.eventInstances = eventInstances || [];\r\n    }\r\n    EventInstanceGroup.prototype.getAllEventRanges = function (constraintRange) {\r\n        if (constraintRange) {\r\n            return this.sliceNormalRenderRanges(constraintRange);\r\n        }\r\n        else {\r\n            return this.eventInstances.map(util_1.eventInstanceToEventRange);\r\n        }\r\n    };\r\n    EventInstanceGroup.prototype.sliceRenderRanges = function (constraintRange) {\r\n        if (this.isInverse()) {\r\n            return this.sliceInverseRenderRanges(constraintRange);\r\n        }\r\n        else {\r\n            return this.sliceNormalRenderRanges(constraintRange);\r\n        }\r\n    };\r\n    EventInstanceGroup.prototype.sliceNormalRenderRanges = function (constraintRange) {\r\n        var eventInstances = this.eventInstances;\r\n        var i;\r\n        var eventInstance;\r\n        var slicedRange;\r\n        var slicedEventRanges = [];\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            eventInstance = eventInstances[i];\r\n            slicedRange = eventInstance.dateProfile.unzonedRange.intersect(constraintRange);\r\n            if (slicedRange) {\r\n                slicedEventRanges.push(new EventRange_1.default(slicedRange, eventInstance.def, eventInstance));\r\n            }\r\n        }\r\n        return slicedEventRanges;\r\n    };\r\n    EventInstanceGroup.prototype.sliceInverseRenderRanges = function (constraintRange) {\r\n        var unzonedRanges = this.eventInstances.map(util_1.eventInstanceToUnzonedRange);\r\n        var ownerDef = this.getEventDef();\r\n        unzonedRanges = UnzonedRange_1.default.invertRanges(unzonedRanges, constraintRange);\r\n        return unzonedRanges.map(function (unzonedRange) {\r\n            return new EventRange_1.default(unzonedRange, ownerDef); // don't give an EventInstance\r\n        });\r\n    };\r\n    EventInstanceGroup.prototype.isInverse = function () {\r\n        return this.getEventDef().hasInverseRendering();\r\n    };\r\n    EventInstanceGroup.prototype.getEventDef = function () {\r\n        return this.explicitEventDef || this.eventInstances[0].def;\r\n    };\r\n    return EventInstanceGroup;\r\n}());\r\nexports.default = EventInstanceGroup;\r\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar PromiseStub = {\r\n    construct: function (executor) {\r\n        var deferred = $.Deferred();\r\n        var promise = deferred.promise();\r\n        if (typeof executor === 'function') {\r\n            executor(function (val) {\r\n                deferred.resolve(val);\r\n                attachImmediatelyResolvingThen(promise, val);\r\n            }, function () {\r\n                deferred.reject();\r\n                attachImmediatelyRejectingThen(promise);\r\n            });\r\n        }\r\n        return promise;\r\n    },\r\n    resolve: function (val) {\r\n        var deferred = $.Deferred().resolve(val);\r\n        var promise = deferred.promise();\r\n        attachImmediatelyResolvingThen(promise, val);\r\n        return promise;\r\n    },\r\n    reject: function () {\r\n        var deferred = $.Deferred().reject();\r\n        var promise = deferred.promise();\r\n        attachImmediatelyRejectingThen(promise);\r\n        return promise;\r\n    }\r\n};\r\nexports.default = PromiseStub;\r\nfunction attachImmediatelyResolvingThen(promise, val) {\r\n    promise.then = function (onResolve) {\r\n        if (typeof onResolve === 'function') {\r\n            return PromiseStub.resolve(onResolve(val));\r\n        }\r\n        return promise;\r\n    };\r\n}\r\nfunction attachImmediatelyRejectingThen(promise) {\r\n    promise.then = function (onResolve, onReject) {\r\n        if (typeof onReject === 'function') {\r\n            onReject();\r\n        }\r\n        return promise;\r\n    };\r\n}\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar Theme = /** @class */ (function () {\r\n    function Theme(optionsManager) {\r\n        this.optionsManager = optionsManager;\r\n        this.processIconOverride();\r\n    }\r\n    Theme.prototype.processIconOverride = function () {\r\n        if (this.iconOverrideOption) {\r\n            this.setIconOverride(this.optionsManager.get(this.iconOverrideOption));\r\n        }\r\n    };\r\n    Theme.prototype.setIconOverride = function (iconOverrideHash) {\r\n        var iconClassesCopy;\r\n        var buttonName;\r\n        if ($.isPlainObject(iconOverrideHash)) {\r\n            iconClassesCopy = $.extend({}, this.iconClasses);\r\n            for (buttonName in iconOverrideHash) {\r\n                iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\r\n            }\r\n            this.iconClasses = iconClassesCopy;\r\n        }\r\n        else if (iconOverrideHash === false) {\r\n            this.iconClasses = {};\r\n        }\r\n    };\r\n    Theme.prototype.applyIconOverridePrefix = function (className) {\r\n        var prefix = this.iconOverridePrefix;\r\n        if (prefix && className.indexOf(prefix) !== 0) { // if not already present\r\n            className = prefix + className;\r\n        }\r\n        return className;\r\n    };\r\n    Theme.prototype.getClass = function (key) {\r\n        return this.classes[key] || '';\r\n    };\r\n    Theme.prototype.getIconClass = function (buttonName) {\r\n        var className = this.iconClasses[buttonName];\r\n        if (className) {\r\n            return this.baseIconClass + ' ' + className;\r\n        }\r\n        return '';\r\n    };\r\n    Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {\r\n        var className;\r\n        if (this.iconOverrideCustomButtonOption) {\r\n            className = customButtonProps[this.iconOverrideCustomButtonOption];\r\n            if (className) {\r\n                return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);\r\n            }\r\n        }\r\n        return '';\r\n    };\r\n    return Theme;\r\n}());\r\nexports.default = Theme;\r\nTheme.prototype.classes = {};\r\nTheme.prototype.iconClasses = {};\r\nTheme.prototype.baseIconClass = '';\r\nTheme.prototype.iconOverridePrefix = '';\r\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexportHooks.touchMouseIgnoreWait = 500;\r\nvar globalEmitter = null;\r\nvar neededCount = 0;\r\n/*\r\nListens to document and window-level user-interaction events, like touch events and mouse events,\r\nand fires these events as-is to whoever is observing a GlobalEmitter.\r\nBest when used as a singleton via GlobalEmitter.get()\r\n\nNormalizes mouse/touch events. For examples:\r\n- ignores the the simulated mouse events that happen after a quick tap: mousemove+mousedown+mouseup+click\r\n- compensates for various buggy scenarios where a touchend does not fire\r\n*/\r\nvar GlobalEmitter = /** @class */ (function () {\r\n    function GlobalEmitter() {\r\n        this.isTouching = false;\r\n        this.mouseIgnoreDepth = 0;\r\n    }\r\n    // gets the singleton\r\n    GlobalEmitter.get = function () {\r\n        if (!globalEmitter) {\r\n            globalEmitter = new GlobalEmitter();\r\n            globalEmitter.bind();\r\n        }\r\n        return globalEmitter;\r\n    };\r\n    // called when an object knows it will need a GlobalEmitter in the near future.\r\n    GlobalEmitter.needed = function () {\r\n        GlobalEmitter.get(); // ensures globalEmitter\r\n        neededCount++;\r\n    };\r\n    // called when the object that originally called needed() doesn't need a GlobalEmitter anymore.\r\n    GlobalEmitter.unneeded = function () {\r\n        neededCount--;\r\n        if (!neededCount) { // nobody else needs it\r\n            globalEmitter.unbind();\r\n            globalEmitter = null;\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.bind = function () {\r\n        var _this = this;\r\n        this.listenTo($(document), {\r\n            touchstart: this.handleTouchStart,\r\n            touchcancel: this.handleTouchCancel,\r\n            touchend: this.handleTouchEnd,\r\n            mousedown: this.handleMouseDown,\r\n            mousemove: this.handleMouseMove,\r\n            mouseup: this.handleMouseUp,\r\n            click: this.handleClick,\r\n            selectstart: this.handleSelectStart,\r\n            contextmenu: this.handleContextMenu\r\n        });\r\n        // because we need to call preventDefault\r\n        // because https://www.chromestatus.com/features/5093566007214080\r\n        // TODO: investigate performance because this is a global handler\r\n        window.addEventListener('touchmove', this.handleTouchMoveProxy = function (ev) {\r\n            _this.handleTouchMove($.Event(ev));\r\n        }, { passive: false } // allows preventDefault()\r\n        );\r\n        // attach a handler to get called when ANY scroll action happens on the page.\r\n        // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\r\n        // http://stackoverflow.com/a/32954565/96342\r\n        window.addEventListener('scroll', this.handleScrollProxy = function (ev) {\r\n            _this.handleScroll($.Event(ev));\r\n        }, true // useCapture\r\n        );\r\n    };\r\n    GlobalEmitter.prototype.unbind = function () {\r\n        this.stopListeningTo($(document));\r\n        window.removeEventListener('touchmove', this.handleTouchMoveProxy, { passive: false } // use same options as addEventListener\r\n        );\r\n        window.removeEventListener('scroll', this.handleScrollProxy, true // useCapture\r\n        );\r\n    };\r\n    // Touch Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleTouchStart = function (ev) {\r\n        // if a previous touch interaction never ended with a touchend, then implicitly end it,\r\n        // but since a new touch interaction is about to begin, don't start the mouse ignore period.\r\n        this.stopTouch(ev, true); // skipMouseIgnore=true\r\n        this.isTouching = true;\r\n        this.trigger('touchstart', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleTouchMove = function (ev) {\r\n        if (this.isTouching) {\r\n            this.trigger('touchmove', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleTouchCancel = function (ev) {\r\n        if (this.isTouching) {\r\n            this.trigger('touchcancel', ev);\r\n            // Have touchcancel fire an artificial touchend. That way, handlers won't need to listen to both.\r\n            // If touchend fires later, it won't have any effect b/c isTouching will be false.\r\n            this.stopTouch(ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleTouchEnd = function (ev) {\r\n        this.stopTouch(ev);\r\n    };\r\n    // Mouse Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleMouseDown = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mousedown', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleMouseMove = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mousemove', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleMouseUp = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mouseup', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleClick = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('click', ev);\r\n        }\r\n    };\r\n    // Misc Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleSelectStart = function (ev) {\r\n        this.trigger('selectstart', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleContextMenu = function (ev) {\r\n        this.trigger('contextmenu', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleScroll = function (ev) {\r\n        this.trigger('scroll', ev);\r\n    };\r\n    // Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.stopTouch = function (ev, skipMouseIgnore) {\r\n        if (skipMouseIgnore === void 0) { skipMouseIgnore = false; }\r\n        if (this.isTouching) {\r\n            this.isTouching = false;\r\n            this.trigger('touchend', ev);\r\n            if (!skipMouseIgnore) {\r\n                this.startTouchMouseIgnore();\r\n            }\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.startTouchMouseIgnore = function () {\r\n        var _this = this;\r\n        var wait = exportHooks.touchMouseIgnoreWait;\r\n        if (wait) {\r\n            this.mouseIgnoreDepth++;\r\n            setTimeout(function () {\r\n                _this.mouseIgnoreDepth--;\r\n            }, wait);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.shouldIgnoreMouse = function () {\r\n        return this.isTouching || Boolean(this.mouseIgnoreDepth);\r\n    };\r\n    return GlobalEmitter;\r\n}());\r\nexports.default = GlobalEmitter;\r\nListenerMixin_1.default.mixInto(GlobalEmitter);\r\nEmitterMixin_1.default.mixInto(GlobalEmitter);\r\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar exportHooks = __webpack_require__(18);\r\nexports.viewHash = {};\r\nexportHooks.views = exports.viewHash;\r\nfunction defineView(viewName, viewConfig) {\r\n    exports.viewHash[viewName] = viewConfig;\r\n}\r\nexports.defineView = defineView;\r\nfunction getViewConfig(viewName) {\r\n    return exports.viewHash[viewName];\r\n}\r\nexports.getViewConfig = getViewConfig;\r\n\n\n/***/ }),\n/* 25 */,\n/* 26 */,\n/* 27 */,\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar options_1 = __webpack_require__(33);\r\nvar util_1 = __webpack_require__(4);\r\nexports.localeOptionHash = {};\r\nexportHooks.locales = exports.localeOptionHash;\r\n// NOTE: can't guarantee any of these computations will run because not every locale has datepicker\r\n// configs, so make sure there are English fallbacks for these in the defaults file.\r\nvar dpComputableOptions = {\r\n    buttonText: function (dpOptions) {\r\n        return {\r\n            // the translations sometimes wrongly contain HTML entities\r\n            prev: util_1.stripHtmlEntities(dpOptions.prevText),\r\n            next: util_1.stripHtmlEntities(dpOptions.nextText),\r\n            today: util_1.stripHtmlEntities(dpOptions.currentText)\r\n        };\r\n    },\r\n    // Produces format strings like \"MMMM YYYY\" -> \"September 2014\"\r\n    monthYearFormat: function (dpOptions) {\r\n        return dpOptions.showMonthAfterYear ?\r\n            'YYYY[' + dpOptions.yearSuffix + '] MMMM' :\r\n            'MMMM YYYY[' + dpOptions.yearSuffix + ']';\r\n    }\r\n};\r\nvar momComputableOptions = {\r\n    // Produces format strings like \"ddd M/D\" -> \"Fri 9/15\"\r\n    dayOfMonthFormat: function (momOptions, fcOptions) {\r\n        var format = momOptions.longDateFormat('l'); // for the format like \"M/D/YYYY\"\r\n        // strip the year off the edge, as well as other misc non-whitespace chars\r\n        format = format.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, '');\r\n        if (fcOptions.isRTL) {\r\n            format += ' ddd'; // for RTL, add day-of-week to end\r\n        }\r\n        else {\r\n            format = 'ddd ' + format; // for LTR, add day-of-week to beginning\r\n        }\r\n        return format;\r\n    },\r\n    // Produces format strings like \"h:mma\" -> \"6:00pm\"\r\n    mediumTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h(:mm)a\" -> \"6pm\" / \"6:30pm\"\r\n    smallTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '(:mm)')\r\n            .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h(:mm)t\" -> \"6p\" / \"6:30p\"\r\n    extraSmallTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '(:mm)')\r\n            .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"ha\" / \"H\" -> \"6pm\" / \"18\"\r\n    hourFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '')\r\n            .replace(/(\\Wmm)$/, '') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h:mm\" -> \"6:30\" (with no AM/PM)\r\n    noMeridiemTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(/\\s*a$/i, ''); // remove trailing AM/PM\r\n    }\r\n};\r\n// options that should be computed off live calendar options (considers override options)\r\n// TODO: best place for this? related to locale?\r\n// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it\r\nvar instanceComputableOptions = {\r\n    // Produces format strings for results like \"Mo 16\"\r\n    smallDayDateFormat: function (options) {\r\n        return options.isRTL ?\r\n            'D dd' :\r\n            'dd D';\r\n    },\r\n    // Produces format strings for results like \"Wk 5\"\r\n    weekFormat: function (options) {\r\n        return options.isRTL ?\r\n            'w[ ' + options.weekNumberTitle + ']' :\r\n            '[' + options.weekNumberTitle + ' ]w';\r\n    },\r\n    // Produces format strings for results like \"Wk5\"\r\n    smallWeekFormat: function (options) {\r\n        return options.isRTL ?\r\n            'w[' + options.weekNumberTitle + ']' :\r\n            '[' + options.weekNumberTitle + ']w';\r\n    }\r\n};\r\n// TODO: make these computable properties in optionsManager\r\nfunction populateInstanceComputableOptions(options) {\r\n    $.each(instanceComputableOptions, function (name, func) {\r\n        if (options[name] == null) {\r\n            options[name] = func(options);\r\n        }\r\n    });\r\n}\r\nexports.populateInstanceComputableOptions = populateInstanceComputableOptions;\r\n// Initialize jQuery UI datepicker translations while using some of the translations\r\n// Will set this as the default locales for datepicker.\r\nfunction datepickerLocale(localeCode, dpLocaleCode, dpOptions) {\r\n    // get the FullCalendar internal option hash for this locale. create if necessary\r\n    var fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n    // transfer some simple options from datepicker to fc\r\n    fcOptions.isRTL = dpOptions.isRTL;\r\n    fcOptions.weekNumberTitle = dpOptions.weekHeader;\r\n    // compute some more complex options from datepicker\r\n    $.each(dpComputableOptions, function (name, func) {\r\n        fcOptions[name] = func(dpOptions);\r\n    });\r\n    var jqDatePicker = $.datepicker;\r\n    // is jQuery UI Datepicker is on the page?\r\n    if (jqDatePicker) {\r\n        // Register the locale data.\r\n        // FullCalendar and MomentJS use locale codes like \"pt-br\" but Datepicker\r\n        // does it like \"pt-BR\" or if it doesn't have the locale, maybe just \"pt\".\r\n        // Make an alias so the locale can be referenced either way.\r\n        jqDatePicker.regional[dpLocaleCode] =\r\n            jqDatePicker.regional[localeCode] = // alias\r\n                dpOptions;\r\n        // Alias 'en' to the default locale data. Do this every time.\r\n        jqDatePicker.regional.en = jqDatePicker.regional[''];\r\n        // Set as Datepicker's global defaults.\r\n        jqDatePicker.setDefaults(dpOptions);\r\n    }\r\n}\r\nexports.datepickerLocale = datepickerLocale;\r\n// Sets FullCalendar-specific translations. Will set the locales as the global default.\r\nfunction locale(localeCode, newFcOptions) {\r\n    var fcOptions;\r\n    var momOptions;\r\n    // get the FullCalendar internal option hash for this locale. create if necessary\r\n    fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n    // provided new options for this locales? merge them in\r\n    if (newFcOptions) {\r\n        fcOptions = exports.localeOptionHash[localeCode] = options_1.mergeOptions([fcOptions, newFcOptions]);\r\n    }\r\n    // compute locale options that weren't defined.\r\n    // always do this. newFcOptions can be undefined when initializing from i18n file,\r\n    // so no way to tell if this is an initialization or a default-setting.\r\n    momOptions = getMomentLocaleData(localeCode); // will fall back to en\r\n    $.each(momComputableOptions, function (name, func) {\r\n        if (fcOptions[name] == null) {\r\n            fcOptions[name] = (func)(momOptions, fcOptions);\r\n        }\r\n    });\r\n    // set it as the default locale for FullCalendar\r\n    options_1.globalDefaults.locale = localeCode;\r\n}\r\nexports.locale = locale;\r\n// Returns moment's internal locale data. If doesn't exist, returns English.\r\nfunction getMomentLocaleData(localeCode) {\r\n    return moment.localeData(localeCode) || moment.localeData('en');\r\n}\r\nexports.getMomentLocaleData = getMomentLocaleData;\r\n// Initialize English by forcing computation of moment-derived options.\r\n// Also, sets it as the default.\r\nlocale('en', options_1.englishDefaults);\r\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nexports.globalDefaults = {\r\n    titleRangeSeparator: ' \\u2013 ',\r\n    monthYearFormat: 'MMMM YYYY',\r\n    defaultTimedEventDuration: '02:00:00',\r\n    defaultAllDayEventDuration: { days: 1 },\r\n    forceEventDuration: false,\r\n    nextDayThreshold: '09:00:00',\r\n    // display\r\n    columnHeader: true,\r\n    defaultView: 'month',\r\n    aspectRatio: 1.35,\r\n    header: {\r\n        left: 'title',\r\n        center: '',\r\n        right: 'today prev,next'\r\n    },\r\n    weekends: true,\r\n    weekNumbers: false,\r\n    weekNumberTitle: 'W',\r\n    weekNumberCalculation: 'local',\r\n    // editable: false,\r\n    // nowIndicator: false,\r\n    scrollTime: '06:00:00',\r\n    minTime: '00:00:00',\r\n    maxTime: '24:00:00',\r\n    showNonCurrentDates: true,\r\n    // event ajax\r\n    lazyFetching: true,\r\n    startParam: 'start',\r\n    endParam: 'end',\r\n    timezoneParam: 'timezone',\r\n    timezone: false,\r\n    // allDayDefault: undefined,\r\n    // locale\r\n    locale: null,\r\n    isRTL: false,\r\n    buttonText: {\r\n        prev: 'prev',\r\n        next: 'next',\r\n        prevYear: 'prev year',\r\n        nextYear: 'next year',\r\n        year: 'year',\r\n        today: 'today',\r\n        month: 'month',\r\n        week: 'week',\r\n        day: 'day'\r\n    },\r\n    // buttonIcons: null,\r\n    allDayText: 'all-day',\r\n    // allows setting a min-height to the event segment to prevent short events overlapping each other\r\n    agendaEventMinHeight: 0,\r\n    // jquery-ui theming\r\n    theme: false,\r\n    // themeButtonIcons: null,\r\n    // eventResizableFromStart: false,\r\n    dragOpacity: .75,\r\n    dragRevertDuration: 500,\r\n    dragScroll: true,\r\n    // selectable: false,\r\n    unselectAuto: true,\r\n    // selectMinDistance: 0,\r\n    dropAccept: '*',\r\n    eventOrder: 'title',\r\n    // eventRenderWait: null,\r\n    eventLimit: false,\r\n    eventLimitText: 'more',\r\n    eventLimitClick: 'popover',\r\n    dayPopoverFormat: 'LL',\r\n    handleWindowResize: true,\r\n    windowResizeDelay: 100,\r\n    longPressDelay: 1000\r\n};\r\nexports.englishDefaults = {\r\n    dayPopoverFormat: 'dddd, MMMM D'\r\n};\r\nexports.rtlDefaults = {\r\n    header: {\r\n        left: 'next,prev today',\r\n        center: '',\r\n        right: 'title'\r\n    },\r\n    buttonIcons: {\r\n        prev: 'right-single-arrow',\r\n        next: 'left-single-arrow',\r\n        prevYear: 'right-double-arrow',\r\n        nextYear: 'left-double-arrow'\r\n    },\r\n    themeButtonIcons: {\r\n        prev: 'circle-triangle-e',\r\n        next: 'circle-triangle-w',\r\n        nextYear: 'seek-prev',\r\n        prevYear: 'seek-next'\r\n    }\r\n};\r\nvar complexOptions = [\r\n    'header',\r\n    'footer',\r\n    'buttonText',\r\n    'buttonIcons',\r\n    'themeButtonIcons'\r\n];\r\n// Merges an array of option objects into a single object\r\nfunction mergeOptions(optionObjs) {\r\n    return util_1.mergeProps(optionObjs, complexOptions);\r\n}\r\nexports.mergeOptions = mergeOptions;\r\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventFootprint = /** @class */ (function () {\r\n    function EventFootprint(componentFootprint, eventDef, eventInstance) {\r\n        this.componentFootprint = componentFootprint;\r\n        this.eventDef = eventDef;\r\n        if (eventInstance) {\r\n            this.eventInstance = eventInstance;\r\n        }\r\n    }\r\n    EventFootprint.prototype.getEventLegacy = function () {\r\n        return (this.eventInstance || this.eventDef).toLegacy();\r\n    };\r\n    return EventFootprint;\r\n}());\r\nexports.default = EventFootprint;\r\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\n// Class that all other classes will inherit from\r\nvar Class = /** @class */ (function () {\r\n    function Class() {\r\n    }\r\n    // Called on a class to create a subclass.\r\n    // LIMITATION: cannot provide a constructor!\r\n    Class.extend = function (members) {\r\n        var SubClass = /** @class */ (function (_super) {\r\n            tslib_1.__extends(SubClass, _super);\r\n            function SubClass() {\r\n                return _super !== null && _super.apply(this, arguments) || this;\r\n            }\r\n            return SubClass;\r\n        }(this));\r\n        util_1.copyOwnProps(members, SubClass.prototype);\r\n        return SubClass;\r\n    };\r\n    // Adds new member variables/methods to the class's prototype.\r\n    // Can be called with another class, or a plain object hash containing new members.\r\n    Class.mixin = function (members) {\r\n        util_1.copyOwnProps(members, this.prototype);\r\n    };\r\n    return Class;\r\n}());\r\nexports.default = Class;\r\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.default = {\r\n    parse: function (eventInput, source) {\r\n        if (util_1.isTimeString(eventInput.start) || moment.isDuration(eventInput.start) ||\r\n            util_1.isTimeString(eventInput.end) || moment.isDuration(eventInput.end)) {\r\n            return RecurringEventDef_1.default.parse(eventInput, source);\r\n        }\r\n        else {\r\n            return SingleEventDef_1.default.parse(eventInput, source);\r\n        }\r\n    }\r\n};\r\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar EventDef = /** @class */ (function () {\r\n    function EventDef(source) {\r\n        this.source = source;\r\n        this.className = [];\r\n        this.miscProps = {};\r\n    }\r\n    EventDef.parse = function (rawInput, source) {\r\n        var def = new this(source);\r\n        if (def.applyProps(rawInput)) {\r\n            return def;\r\n        }\r\n        return false;\r\n    };\r\n    EventDef.normalizeId = function (id) {\r\n        return String(id);\r\n    };\r\n    EventDef.generateId = function () {\r\n        return '_fc' + (EventDef.uuid++);\r\n    };\r\n    EventDef.prototype.clone = function () {\r\n        var copy = new this.constructor(this.source);\r\n        copy.id = this.id;\r\n        copy.rawId = this.rawId;\r\n        copy.uid = this.uid; // not really unique anymore :(\r\n        EventDef.copyVerbatimStandardProps(this, copy);\r\n        copy.className = this.className.slice(); // copy\r\n        copy.miscProps = $.extend({}, this.miscProps);\r\n        return copy;\r\n    };\r\n    EventDef.prototype.hasInverseRendering = function () {\r\n        return this.getRendering() === 'inverse-background';\r\n    };\r\n    EventDef.prototype.hasBgRendering = function () {\r\n        var rendering = this.getRendering();\r\n        return rendering === 'inverse-background' || rendering === 'background';\r\n    };\r\n    EventDef.prototype.getRendering = function () {\r\n        if (this.rendering != null) {\r\n            return this.rendering;\r\n        }\r\n        return this.source.rendering;\r\n    };\r\n    EventDef.prototype.getConstraint = function () {\r\n        if (this.constraint != null) {\r\n            return this.constraint;\r\n        }\r\n        if (this.source.constraint != null) {\r\n            return this.source.constraint;\r\n        }\r\n        return this.source.calendar.opt('eventConstraint'); // what about View option?\r\n    };\r\n    EventDef.prototype.getOverlap = function () {\r\n        if (this.overlap != null) {\r\n            return this.overlap;\r\n        }\r\n        if (this.source.overlap != null) {\r\n            return this.source.overlap;\r\n        }\r\n        return this.source.calendar.opt('eventOverlap'); // what about View option?\r\n    };\r\n    EventDef.prototype.isStartExplicitlyEditable = function () {\r\n        if (this.startEditable != null) {\r\n            return this.startEditable;\r\n        }\r\n        return this.source.startEditable;\r\n    };\r\n    EventDef.prototype.isDurationExplicitlyEditable = function () {\r\n        if (this.durationEditable != null) {\r\n            return this.durationEditable;\r\n        }\r\n        return this.source.durationEditable;\r\n    };\r\n    EventDef.prototype.isExplicitlyEditable = function () {\r\n        if (this.editable != null) {\r\n            return this.editable;\r\n        }\r\n        return this.source.editable;\r\n    };\r\n    EventDef.prototype.toLegacy = function () {\r\n        var obj = $.extend({}, this.miscProps);\r\n        obj._id = this.uid;\r\n        obj.source = this.source;\r\n        obj.className = this.className.slice(); // copy\r\n        obj.allDay = this.isAllDay();\r\n        if (this.rawId != null) {\r\n            obj.id = this.rawId;\r\n        }\r\n        EventDef.copyVerbatimStandardProps(this, obj);\r\n        return obj;\r\n    };\r\n    EventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n        if (rawProps.id != null) {\r\n            this.id = EventDef.normalizeId((this.rawId = rawProps.id));\r\n        }\r\n        else {\r\n            this.id = EventDef.generateId();\r\n        }\r\n        if (rawProps._id != null) { // accept this prop, even tho somewhat internal\r\n            this.uid = String(rawProps._id);\r\n        }\r\n        else {\r\n            this.uid = EventDef.generateId();\r\n        }\r\n        // TODO: converge with EventSource\r\n        if ($.isArray(rawProps.className)) {\r\n            this.className = rawProps.className;\r\n        }\r\n        if (typeof rawProps.className === 'string') {\r\n            this.className = rawProps.className.split(/\\s+/);\r\n        }\r\n        return true;\r\n    };\r\n    EventDef.prototype.applyMiscProps = function (rawProps) {\r\n        $.extend(this.miscProps, rawProps);\r\n    };\r\n    EventDef.uuid = 0;\r\n    EventDef.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n    EventDef.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n    return EventDef;\r\n}());\r\nexports.default = EventDef;\r\nParsableModelMixin_1.default.mixInto(EventDef);\r\nEventDef.defineStandardProps({\r\n    // not automatically assigned (`false`)\r\n    _id: false,\r\n    id: false,\r\n    className: false,\r\n    source: false,\r\n    // automatically assigned (`true`)\r\n    title: true,\r\n    url: true,\r\n    rendering: true,\r\n    constraint: true,\r\n    overlap: true,\r\n    editable: true,\r\n    startEditable: true,\r\n    durationEditable: true,\r\n    color: true,\r\n    backgroundColor: true,\r\n    borderColor: true,\r\n    textColor: true\r\n});\r\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.default = {\r\n    sourceClasses: [],\r\n    registerClass: function (EventSourceClass) {\r\n        this.sourceClasses.unshift(EventSourceClass); // give highest priority\r\n    },\r\n    parse: function (rawInput, calendar) {\r\n        var sourceClasses = this.sourceClasses;\r\n        var i;\r\n        var eventSource;\r\n        for (i = 0; i < sourceClasses.length; i++) {\r\n            eventSource = sourceClasses[i].parse(rawInput, calendar);\r\n            if (eventSource) {\r\n                return eventSource;\r\n            }\r\n        }\r\n    }\r\n};\r\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation = /** @class */ (function () {\r\n    function EventDefMutation() {\r\n    }\r\n    EventDefMutation.createFromRawProps = function (eventInstance, rawProps, largeUnit) {\r\n        var eventDef = eventInstance.def;\r\n        var dateProps = {};\r\n        var standardProps = {};\r\n        var miscProps = {};\r\n        var verbatimStandardProps = {};\r\n        var eventDefId = null;\r\n        var className = null;\r\n        var propName;\r\n        var dateProfile;\r\n        var dateMutation;\r\n        var defMutation;\r\n        for (propName in rawProps) {\r\n            if (EventDateProfile_1.default.isStandardProp(propName)) {\r\n                dateProps[propName] = rawProps[propName];\r\n            }\r\n            else if (eventDef.isStandardProp(propName)) {\r\n                standardProps[propName] = rawProps[propName];\r\n            }\r\n            else if (eventDef.miscProps[propName] !== rawProps[propName]) { // only if changed\r\n                miscProps[propName] = rawProps[propName];\r\n            }\r\n        }\r\n        dateProfile = EventDateProfile_1.default.parse(dateProps, eventDef.source);\r\n        if (dateProfile) { // no failure?\r\n            dateMutation = EventDefDateMutation_1.default.createFromDiff(eventInstance.dateProfile, dateProfile, largeUnit);\r\n        }\r\n        if (standardProps.id !== eventDef.id) {\r\n            eventDefId = standardProps.id; // only apply if there's a change\r\n        }\r\n        if (!util_1.isArraysEqual(standardProps.className, eventDef.className)) {\r\n            className = standardProps.className; // only apply if there's a change\r\n        }\r\n        EventDef_1.default.copyVerbatimStandardProps(standardProps, // src\r\n        verbatimStandardProps // dest\r\n        );\r\n        defMutation = new EventDefMutation();\r\n        defMutation.eventDefId = eventDefId;\r\n        defMutation.className = className;\r\n        defMutation.verbatimStandardProps = verbatimStandardProps;\r\n        defMutation.miscProps = miscProps;\r\n        if (dateMutation) {\r\n            defMutation.dateMutation = dateMutation;\r\n        }\r\n        return defMutation;\r\n    };\r\n    /*\r\n    eventDef assumed to be a SingleEventDef.\r\n    returns an undo function.\r\n    */\r\n    EventDefMutation.prototype.mutateSingle = function (eventDef) {\r\n        var origDateProfile;\r\n        if (this.dateMutation) {\r\n            origDateProfile = eventDef.dateProfile;\r\n            eventDef.dateProfile = this.dateMutation.buildNewDateProfile(origDateProfile, eventDef.source.calendar);\r\n        }\r\n        // can't undo\r\n        // TODO: more DRY with EventDef::applyManualStandardProps\r\n        if (this.eventDefId != null) {\r\n            eventDef.id = EventDef_1.default.normalizeId((eventDef.rawId = this.eventDefId));\r\n        }\r\n        // can't undo\r\n        // TODO: more DRY with EventDef::applyManualStandardProps\r\n        if (this.className) {\r\n            eventDef.className = this.className;\r\n        }\r\n        // can't undo\r\n        if (this.verbatimStandardProps) {\r\n            SingleEventDef_1.default.copyVerbatimStandardProps(this.verbatimStandardProps, // src\r\n            eventDef // dest\r\n            );\r\n        }\r\n        // can't undo\r\n        if (this.miscProps) {\r\n            eventDef.applyMiscProps(this.miscProps);\r\n        }\r\n        if (origDateProfile) {\r\n            return function () {\r\n                eventDef.dateProfile = origDateProfile;\r\n            };\r\n        }\r\n        else {\r\n            return function () { };\r\n        }\r\n    };\r\n    EventDefMutation.prototype.setDateMutation = function (dateMutation) {\r\n        if (dateMutation && !dateMutation.isEmpty()) {\r\n            this.dateMutation = dateMutation;\r\n        }\r\n        else {\r\n            this.dateMutation = null;\r\n        }\r\n    };\r\n    EventDefMutation.prototype.isEmpty = function () {\r\n        return !this.dateMutation;\r\n    };\r\n    return EventDefMutation;\r\n}());\r\nexports.default = EventDefMutation;\r\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDefDateMutation = /** @class */ (function () {\r\n    function EventDefDateMutation() {\r\n        this.clearEnd = false;\r\n        this.forceTimed = false;\r\n        this.forceAllDay = false;\r\n    }\r\n    EventDefDateMutation.createFromDiff = function (dateProfile0, dateProfile1, largeUnit) {\r\n        var clearEnd = dateProfile0.end && !dateProfile1.end;\r\n        var forceTimed = dateProfile0.isAllDay() && !dateProfile1.isAllDay();\r\n        var forceAllDay = !dateProfile0.isAllDay() && dateProfile1.isAllDay();\r\n        var dateDelta;\r\n        var endDiff;\r\n        var endDelta;\r\n        var mutation;\r\n        // subtracts the dates in the appropriate way, returning a duration\r\n        function subtractDates(date1, date0) {\r\n            if (largeUnit) {\r\n                return util_1.diffByUnit(date1, date0, largeUnit); // poorly named\r\n            }\r\n            else if (dateProfile1.isAllDay()) {\r\n                return util_1.diffDay(date1, date0); // poorly named\r\n            }\r\n            else {\r\n                return util_1.diffDayTime(date1, date0); // poorly named\r\n            }\r\n        }\r\n        dateDelta = subtractDates(dateProfile1.start, dateProfile0.start);\r\n        if (dateProfile1.end) {\r\n            // use unzonedRanges because dateProfile0.end might be null\r\n            endDiff = subtractDates(dateProfile1.unzonedRange.getEnd(), dateProfile0.unzonedRange.getEnd());\r\n            endDelta = endDiff.subtract(dateDelta);\r\n        }\r\n        mutation = new EventDefDateMutation();\r\n        mutation.clearEnd = clearEnd;\r\n        mutation.forceTimed = forceTimed;\r\n        mutation.forceAllDay = forceAllDay;\r\n        mutation.setDateDelta(dateDelta);\r\n        mutation.setEndDelta(endDelta);\r\n        return mutation;\r\n    };\r\n    /*\r\n    returns an undo function.\r\n    */\r\n    EventDefDateMutation.prototype.buildNewDateProfile = function (eventDateProfile, calendar) {\r\n        var start = eventDateProfile.start.clone();\r\n        var end = null;\r\n        var shouldRezone = false;\r\n        if (eventDateProfile.end && !this.clearEnd) {\r\n            end = eventDateProfile.end.clone();\r\n        }\r\n        else if (this.endDelta && !end) {\r\n            end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n        }\r\n        if (this.forceTimed) {\r\n            shouldRezone = true;\r\n            if (!start.hasTime()) {\r\n                start.time(0);\r\n            }\r\n            if (end && !end.hasTime()) {\r\n                end.time(0);\r\n            }\r\n        }\r\n        else if (this.forceAllDay) {\r\n            if (start.hasTime()) {\r\n                start.stripTime();\r\n            }\r\n            if (end && end.hasTime()) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        if (this.dateDelta) {\r\n            shouldRezone = true;\r\n            start.add(this.dateDelta);\r\n            if (end) {\r\n                end.add(this.dateDelta);\r\n            }\r\n        }\r\n        // do this before adding startDelta to start, so we can work off of start\r\n        if (this.endDelta) {\r\n            shouldRezone = true;\r\n            end.add(this.endDelta);\r\n        }\r\n        if (this.startDelta) {\r\n            shouldRezone = true;\r\n            start.add(this.startDelta);\r\n        }\r\n        if (shouldRezone) {\r\n            start = calendar.applyTimezone(start);\r\n            if (end) {\r\n                end = calendar.applyTimezone(end);\r\n            }\r\n        }\r\n        // TODO: okay to access calendar option?\r\n        if (!end && calendar.opt('forceEventDuration')) {\r\n            end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n        }\r\n        return new EventDateProfile_1.default(start, end, calendar);\r\n    };\r\n    EventDefDateMutation.prototype.setDateDelta = function (dateDelta) {\r\n        if (dateDelta && dateDelta.valueOf()) {\r\n            this.dateDelta = dateDelta;\r\n        }\r\n        else {\r\n            this.dateDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.setStartDelta = function (startDelta) {\r\n        if (startDelta && startDelta.valueOf()) {\r\n            this.startDelta = startDelta;\r\n        }\r\n        else {\r\n            this.startDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.setEndDelta = function (endDelta) {\r\n        if (endDelta && endDelta.valueOf()) {\r\n            this.endDelta = endDelta;\r\n        }\r\n        else {\r\n            this.endDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.isEmpty = function () {\r\n        return !this.clearEnd && !this.forceTimed && !this.forceAllDay &&\r\n            !this.dateDelta && !this.startDelta && !this.endDelta;\r\n    };\r\n    return EventDefDateMutation;\r\n}());\r\nexports.default = EventDefDateMutation;\r\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Class_1 = __webpack_require__(35);\r\n/*\r\nEmbodies a div that has potential scrollbars\r\n*/\r\nvar Scroller = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Scroller, _super);\r\n    function Scroller(options) {\r\n        var _this = _super.call(this) || this;\r\n        options = options || {};\r\n        _this.overflowX = options.overflowX || options.overflow || 'auto';\r\n        _this.overflowY = options.overflowY || options.overflow || 'auto';\r\n        return _this;\r\n    }\r\n    Scroller.prototype.render = function () {\r\n        this.el = this.renderEl();\r\n        this.applyOverflow();\r\n    };\r\n    Scroller.prototype.renderEl = function () {\r\n        return (this.scrollEl = $('<div class=\"fc-scroller\"></div>'));\r\n    };\r\n    // sets to natural height, unlocks overflow\r\n    Scroller.prototype.clear = function () {\r\n        this.setHeight('auto');\r\n        this.applyOverflow();\r\n    };\r\n    Scroller.prototype.destroy = function () {\r\n        this.el.remove();\r\n    };\r\n    // Overflow\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Scroller.prototype.applyOverflow = function () {\r\n        this.scrollEl.css({\r\n            'overflow-x': this.overflowX,\r\n            'overflow-y': this.overflowY\r\n        });\r\n    };\r\n    // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\r\n    // Useful for preserving scrollbar widths regardless of future resizes.\r\n    // Can pass in scrollbarWidths for optimization.\r\n    Scroller.prototype.lockOverflow = function (scrollbarWidths) {\r\n        var overflowX = this.overflowX;\r\n        var overflowY = this.overflowY;\r\n        scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\r\n        if (overflowX === 'auto') {\r\n            overflowX = (scrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?\r\n                // OR scrolling pane with massless scrollbars?\r\n                this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth\r\n            // subtract 1 because of IE off-by-one issue\r\n            ) ? 'scroll' : 'hidden';\r\n        }\r\n        if (overflowY === 'auto') {\r\n            overflowY = (scrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?\r\n                // OR scrolling pane with massless scrollbars?\r\n                this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight\r\n            // subtract 1 because of IE off-by-one issue\r\n            ) ? 'scroll' : 'hidden';\r\n        }\r\n        this.scrollEl.css({ 'overflow-x': overflowX, 'overflow-y': overflowY });\r\n    };\r\n    // Getters / Setters\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Scroller.prototype.setHeight = function (height) {\r\n        this.scrollEl.height(height);\r\n    };\r\n    Scroller.prototype.getScrollTop = function () {\r\n        return this.scrollEl.scrollTop();\r\n    };\r\n    Scroller.prototype.setScrollTop = function (top) {\r\n        this.scrollEl.scrollTop(top);\r\n    };\r\n    Scroller.prototype.getClientWidth = function () {\r\n        return this.scrollEl[0].clientWidth;\r\n    };\r\n    Scroller.prototype.getClientHeight = function () {\r\n        return this.scrollEl[0].clientHeight;\r\n    };\r\n    Scroller.prototype.getScrollbarWidths = function () {\r\n        return util_1.getScrollbarWidths(this.scrollEl);\r\n    };\r\n    return Scroller;\r\n}(Class_1.default));\r\nexports.default = Scroller;\r\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar DateComponent_1 = __webpack_require__(231);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar InteractiveDateComponent = /** @class */ (function (_super) {\r\n    tslib_1.__extends(InteractiveDateComponent, _super);\r\n    function InteractiveDateComponent(_view, _options) {\r\n        var _this = _super.call(this, _view, _options) || this;\r\n        // self-config, overridable by subclasses\r\n        _this.segSelector = '.fc-event-container > *'; // what constitutes an event element?\r\n        if (_this.dateSelectingClass) {\r\n            _this.dateClicking = new _this.dateClickingClass(_this);\r\n        }\r\n        if (_this.dateSelectingClass) {\r\n            _this.dateSelecting = new _this.dateSelectingClass(_this);\r\n        }\r\n        if (_this.eventPointingClass) {\r\n            _this.eventPointing = new _this.eventPointingClass(_this);\r\n        }\r\n        if (_this.eventDraggingClass && _this.eventPointing) {\r\n            _this.eventDragging = new _this.eventDraggingClass(_this, _this.eventPointing);\r\n        }\r\n        if (_this.eventResizingClass && _this.eventPointing) {\r\n            _this.eventResizing = new _this.eventResizingClass(_this, _this.eventPointing);\r\n        }\r\n        if (_this.externalDroppingClass) {\r\n            _this.externalDropping = new _this.externalDroppingClass(_this);\r\n        }\r\n        return _this;\r\n    }\r\n    // Sets the container element that the view should render inside of, does global DOM-related initializations,\r\n    // and renders all the non-date-related content inside.\r\n    InteractiveDateComponent.prototype.setElement = function (el) {\r\n        _super.prototype.setElement.call(this, el);\r\n        if (this.dateClicking) {\r\n            this.dateClicking.bindToEl(el);\r\n        }\r\n        if (this.dateSelecting) {\r\n            this.dateSelecting.bindToEl(el);\r\n        }\r\n        this.bindAllSegHandlersToEl(el);\r\n    };\r\n    InteractiveDateComponent.prototype.removeElement = function () {\r\n        this.endInteractions();\r\n        _super.prototype.removeElement.call(this);\r\n    };\r\n    InteractiveDateComponent.prototype.executeEventUnrender = function () {\r\n        this.endInteractions();\r\n        _super.prototype.executeEventUnrender.call(this);\r\n    };\r\n    InteractiveDateComponent.prototype.bindGlobalHandlers = function () {\r\n        _super.prototype.bindGlobalHandlers.call(this);\r\n        if (this.externalDropping) {\r\n            this.externalDropping.bindToDocument();\r\n        }\r\n    };\r\n    InteractiveDateComponent.prototype.unbindGlobalHandlers = function () {\r\n        _super.prototype.unbindGlobalHandlers.call(this);\r\n        if (this.externalDropping) {\r\n            this.externalDropping.unbindFromDocument();\r\n        }\r\n    };\r\n    InteractiveDateComponent.prototype.bindDateHandlerToEl = function (el, name, handler) {\r\n        var _this = this;\r\n        // attach a handler to the grid's root element.\r\n        // jQuery will take care of unregistering them when removeElement gets called.\r\n        this.el.on(name, function (ev) {\r\n            if (!$(ev.target).is(_this.segSelector + ':not(.fc-helper),' + // directly on an event element\r\n                _this.segSelector + ':not(.fc-helper) *,' + // within an event element\r\n                '.fc-more,' + // a \"more..\" link\r\n                'a[data-goto]' // a clickable nav link\r\n            )) {\r\n                return handler.call(_this, ev);\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.bindAllSegHandlersToEl = function (el) {\r\n        [\r\n            this.eventPointing,\r\n            this.eventDragging,\r\n            this.eventResizing\r\n        ].forEach(function (eventInteraction) {\r\n            if (eventInteraction) {\r\n                eventInteraction.bindToEl(el);\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.bindSegHandlerToEl = function (el, name, handler) {\r\n        var _this = this;\r\n        el.on(name, this.segSelector, function (ev) {\r\n            var segEl = $(ev.currentTarget);\r\n            if (!segEl.is('.fc-helper')) {\r\n                var seg = segEl.data('fc-seg'); // grab segment data. put there by View::renderEventsPayload\r\n                if (seg && !_this.shouldIgnoreEventPointing()) {\r\n                    return handler.call(_this, seg, ev); // context will be the Grid\r\n                }\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreMouse = function () {\r\n        // HACK\r\n        // This will still work even though bindDateHandlerToEl doesn't use GlobalEmitter.\r\n        return GlobalEmitter_1.default.get().shouldIgnoreMouse();\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreTouch = function () {\r\n        var view = this._getView();\r\n        // On iOS (and Android?) when a new selection is initiated overtop another selection,\r\n        // the touchend never fires because the elements gets removed mid-touch-interaction (my theory).\r\n        // HACK: simply don't allow this to happen.\r\n        // ALSO: prevent selection when an *event* is already raised.\r\n        return view.isSelected || view.selectedEvent;\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreEventPointing = function () {\r\n        // only call the handlers if there is not a drag/resize in progress\r\n        return (this.eventDragging && this.eventDragging.isDragging) ||\r\n            (this.eventResizing && this.eventResizing.isResizing);\r\n    };\r\n    InteractiveDateComponent.prototype.canStartSelection = function (seg, ev) {\r\n        return util_1.getEvIsTouch(ev) &&\r\n            !this.canStartResize(seg, ev) &&\r\n            (this.isEventDefDraggable(seg.footprint.eventDef) ||\r\n                this.isEventDefResizable(seg.footprint.eventDef));\r\n    };\r\n    InteractiveDateComponent.prototype.canStartDrag = function (seg, ev) {\r\n        return !this.canStartResize(seg, ev) &&\r\n            this.isEventDefDraggable(seg.footprint.eventDef);\r\n    };\r\n    InteractiveDateComponent.prototype.canStartResize = function (seg, ev) {\r\n        var view = this._getView();\r\n        var eventDef = seg.footprint.eventDef;\r\n        return (!util_1.getEvIsTouch(ev) || view.isEventDefSelected(eventDef)) &&\r\n            this.isEventDefResizable(eventDef) &&\r\n            $(ev.target).is('.fc-resizer');\r\n    };\r\n    // Kills all in-progress dragging.\r\n    // Useful for when public API methods that result in re-rendering are invoked during a drag.\r\n    // Also useful for when touch devices misbehave and don't fire their touchend.\r\n    InteractiveDateComponent.prototype.endInteractions = function () {\r\n        [\r\n            this.dateClicking,\r\n            this.dateSelecting,\r\n            this.eventPointing,\r\n            this.eventDragging,\r\n            this.eventResizing\r\n        ].forEach(function (interaction) {\r\n            if (interaction) {\r\n                interaction.end();\r\n            }\r\n        });\r\n    };\r\n    // Event Drag-n-Drop\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Computes if the given event is allowed to be dragged by the user\r\n    InteractiveDateComponent.prototype.isEventDefDraggable = function (eventDef) {\r\n        return this.isEventDefStartEditable(eventDef);\r\n    };\r\n    InteractiveDateComponent.prototype.isEventDefStartEditable = function (eventDef) {\r\n        var isEditable = eventDef.isStartExplicitlyEditable();\r\n        if (isEditable == null) {\r\n            isEditable = this.opt('eventStartEditable');\r\n            if (isEditable == null) {\r\n                isEditable = this.isEventDefGenerallyEditable(eventDef);\r\n            }\r\n        }\r\n        return isEditable;\r\n    };\r\n    InteractiveDateComponent.prototype.isEventDefGenerallyEditable = function (eventDef) {\r\n        var isEditable = eventDef.isExplicitlyEditable();\r\n        if (isEditable == null) {\r\n            isEditable = this.opt('editable');\r\n        }\r\n        return isEditable;\r\n    };\r\n    // Event Resizing\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Computes if the given event is allowed to be resized from its starting edge\r\n    InteractiveDateComponent.prototype.isEventDefResizableFromStart = function (eventDef) {\r\n        return this.opt('eventResizableFromStart') && this.isEventDefResizable(eventDef);\r\n    };\r\n    // Computes if the given event is allowed to be resized from its ending edge\r\n    InteractiveDateComponent.prototype.isEventDefResizableFromEnd = function (eventDef) {\r\n        return this.isEventDefResizable(eventDef);\r\n    };\r\n    // Computes if the given event is allowed to be resized by the user at all\r\n    InteractiveDateComponent.prototype.isEventDefResizable = function (eventDef) {\r\n        var isResizable = eventDef.isDurationExplicitlyEditable();\r\n        if (isResizable == null) {\r\n            isResizable = this.opt('eventDurationEditable');\r\n            if (isResizable == null) {\r\n                isResizable = this.isEventDefGenerallyEditable(eventDef);\r\n            }\r\n        }\r\n        return isResizable;\r\n    };\r\n    // Event Mutation / Constraints\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Diffs the two dates, returning a duration, based on granularity of the grid\r\n    // TODO: port isTimeScale into this system?\r\n    InteractiveDateComponent.prototype.diffDates = function (a, b) {\r\n        if (this.largeUnit) {\r\n            return util_1.diffByUnit(a, b, this.largeUnit);\r\n        }\r\n        else {\r\n            return util_1.diffDayTime(a, b);\r\n        }\r\n    };\r\n    // is it allowed, in relation to the view's validRange?\r\n    // NOTE: very similar to isExternalInstanceGroupAllowed\r\n    InteractiveDateComponent.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var view = this._getView();\r\n        var dateProfile = this.dateProfile;\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            // TODO: just use getAllEventRanges directly\r\n            if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n                return false;\r\n            }\r\n        }\r\n        return view.calendar.constraints.isEventInstanceGroupAllowed(eventInstanceGroup);\r\n    };\r\n    // NOTE: very similar to isEventInstanceGroupAllowed\r\n    // when it's a completely anonymous external drag, no event.\r\n    InteractiveDateComponent.prototype.isExternalInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var view = this._getView();\r\n        var dateProfile = this.dateProfile;\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n                return false;\r\n            }\r\n        }\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            // treat it as a selection\r\n            // TODO: pass in eventInstanceGroup instead\r\n            //  because we don't want calendar's constraint system to depend on a component's\r\n            //  determination of footprints.\r\n            if (!view.calendar.constraints.isSelectionFootprintAllowed(eventFootprints[i].componentFootprint)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    return InteractiveDateComponent;\r\n}(DateComponent_1.default));\r\nexports.default = InteractiveDateComponent;\r\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/* An abstract class from which other views inherit from\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar View = /** @class */ (function (_super) {\r\n    tslib_1.__extends(View, _super);\r\n    function View(calendar, viewSpec) {\r\n        var _this = _super.call(this, null, viewSpec.options) || this;\r\n        _this.batchRenderDepth = 0;\r\n        _this.isSelected = false; // boolean whether a range of time is user-selected or not\r\n        _this.calendar = calendar;\r\n        _this.viewSpec = viewSpec;\r\n        // shortcuts\r\n        _this.type = viewSpec.type;\r\n        // .name is deprecated\r\n        _this.name = _this.type;\r\n        _this.initRenderQueue();\r\n        _this.initHiddenDays();\r\n        _this.dateProfileGenerator = new _this.dateProfileGeneratorClass(_this);\r\n        _this.bindBaseRenderHandlers();\r\n        _this.eventOrderSpecs = util_1.parseFieldSpecs(_this.opt('eventOrder'));\r\n        // legacy\r\n        if (_this['initialize']) {\r\n            _this['initialize']();\r\n        }\r\n        return _this;\r\n    }\r\n    View.prototype._getView = function () {\r\n        return this;\r\n    };\r\n    // Retrieves an option with the given name\r\n    View.prototype.opt = function (name) {\r\n        return this.options[name];\r\n    };\r\n    /* Render Queue\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.initRenderQueue = function () {\r\n        this.renderQueue = new RenderQueue_1.default({\r\n            event: this.opt('eventRenderWait')\r\n        });\r\n        this.renderQueue.on('start', this.onRenderQueueStart.bind(this));\r\n        this.renderQueue.on('stop', this.onRenderQueueStop.bind(this));\r\n        this.on('before:change', this.startBatchRender);\r\n        this.on('change', this.stopBatchRender);\r\n    };\r\n    View.prototype.onRenderQueueStart = function () {\r\n        this.calendar.freezeContentHeight();\r\n        this.addScroll(this.queryScroll());\r\n    };\r\n    View.prototype.onRenderQueueStop = function () {\r\n        if (this.calendar.updateViewSize()) { // success?\r\n            this.popScroll();\r\n        }\r\n        this.calendar.thawContentHeight();\r\n    };\r\n    View.prototype.startBatchRender = function () {\r\n        if (!(this.batchRenderDepth++)) {\r\n            this.renderQueue.pause();\r\n        }\r\n    };\r\n    View.prototype.stopBatchRender = function () {\r\n        if (!(--this.batchRenderDepth)) {\r\n            this.renderQueue.resume();\r\n        }\r\n    };\r\n    View.prototype.requestRender = function (func, namespace, actionType) {\r\n        this.renderQueue.queue(func, namespace, actionType);\r\n    };\r\n    // given func will auto-bind to `this`\r\n    View.prototype.whenSizeUpdated = function (func) {\r\n        if (this.renderQueue.isRunning) {\r\n            this.renderQueue.one('stop', func.bind(this));\r\n        }\r\n        else {\r\n            func.call(this);\r\n        }\r\n    };\r\n    /* Title and Date Formatting\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes what the title at the top of the calendar should be for this view\r\n    View.prototype.computeTitle = function (dateProfile) {\r\n        var unzonedRange;\r\n        // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\r\n        if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\r\n            unzonedRange = dateProfile.currentUnzonedRange;\r\n        }\r\n        else { // for day units or smaller, use the actual day range\r\n            unzonedRange = dateProfile.activeUnzonedRange;\r\n        }\r\n        return this.formatRange({\r\n            start: this.calendar.msToMoment(unzonedRange.startMs, dateProfile.isRangeAllDay),\r\n            end: this.calendar.msToMoment(unzonedRange.endMs, dateProfile.isRangeAllDay)\r\n        }, dateProfile.isRangeAllDay, this.opt('titleFormat') || this.computeTitleFormat(dateProfile), this.opt('titleRangeSeparator'));\r\n    };\r\n    // Generates the format string that should be used to generate the title for the current date range.\r\n    // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\r\n    View.prototype.computeTitleFormat = function (dateProfile) {\r\n        var currentRangeUnit = dateProfile.currentRangeUnit;\r\n        if (currentRangeUnit === 'year') {\r\n            return 'YYYY';\r\n        }\r\n        else if (currentRangeUnit === 'month') {\r\n            return this.opt('monthYearFormat'); // like \"September 2014\"\r\n        }\r\n        else if (dateProfile.currentUnzonedRange.as('days') > 1) {\r\n            return 'll'; // multi-day range. shorter, like \"Sep 9 - 10 2014\"\r\n        }\r\n        else {\r\n            return 'LL'; // one day. longer, like \"September 9 2014\"\r\n        }\r\n    };\r\n    // Date Setting/Unsetting\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.setDate = function (date) {\r\n        var currentDateProfile = this.get('dateProfile');\r\n        var newDateProfile = this.dateProfileGenerator.build(date, undefined, true); // forceToValid=true\r\n        if (!currentDateProfile ||\r\n            !currentDateProfile.activeUnzonedRange.equals(newDateProfile.activeUnzonedRange)) {\r\n            this.set('dateProfile', newDateProfile);\r\n        }\r\n    };\r\n    View.prototype.unsetDate = function () {\r\n        this.unset('dateProfile');\r\n    };\r\n    // Event Data\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.fetchInitialEvents = function (dateProfile) {\r\n        var calendar = this.calendar;\r\n        var forceAllDay = dateProfile.isRangeAllDay && !this.usesMinMaxTime;\r\n        return calendar.requestEvents(calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, forceAllDay), calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, forceAllDay));\r\n    };\r\n    View.prototype.bindEventChanges = function () {\r\n        this.listenTo(this.calendar, 'eventsReset', this.resetEvents); // TODO: make this a real event\r\n    };\r\n    View.prototype.unbindEventChanges = function () {\r\n        this.stopListeningTo(this.calendar, 'eventsReset');\r\n    };\r\n    View.prototype.setEvents = function (eventsPayload) {\r\n        this.set('currentEvents', eventsPayload);\r\n        this.set('hasEvents', true);\r\n    };\r\n    View.prototype.unsetEvents = function () {\r\n        this.unset('currentEvents');\r\n        this.unset('hasEvents');\r\n    };\r\n    View.prototype.resetEvents = function (eventsPayload) {\r\n        this.startBatchRender();\r\n        this.unsetEvents();\r\n        this.setEvents(eventsPayload);\r\n        this.stopBatchRender();\r\n    };\r\n    // Date High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestDateRender = function (dateProfile) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeDateRender(dateProfile);\r\n        }, 'date', 'init');\r\n    };\r\n    View.prototype.requestDateUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeDateUnrender();\r\n        }, 'date', 'destroy');\r\n    };\r\n    // if dateProfile not specified, uses current\r\n    View.prototype.executeDateRender = function (dateProfile) {\r\n        _super.prototype.executeDateRender.call(this, dateProfile);\r\n        if (this['render']) {\r\n            this['render'](); // TODO: deprecate\r\n        }\r\n        this.trigger('datesRendered');\r\n        this.addScroll({ isDateInit: true });\r\n        this.startNowIndicator(); // shouldn't render yet because updateSize will be called soon\r\n    };\r\n    View.prototype.executeDateUnrender = function () {\r\n        this.unselect();\r\n        this.stopNowIndicator();\r\n        this.trigger('before:datesUnrendered');\r\n        if (this['destroy']) {\r\n            this['destroy'](); // TODO: deprecate\r\n        }\r\n        _super.prototype.executeDateUnrender.call(this);\r\n    };\r\n    // \"Base\" rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.bindBaseRenderHandlers = function () {\r\n        var _this = this;\r\n        this.on('datesRendered', function () {\r\n            _this.whenSizeUpdated(_this.triggerViewRender);\r\n        });\r\n        this.on('before:datesUnrendered', function () {\r\n            _this.triggerViewDestroy();\r\n        });\r\n    };\r\n    View.prototype.triggerViewRender = function () {\r\n        this.publiclyTrigger('viewRender', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    View.prototype.triggerViewDestroy = function () {\r\n        this.publiclyTrigger('viewDestroy', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    // Event High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestEventsRender = function (eventsPayload) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeEventRender(eventsPayload);\r\n            _this.whenSizeUpdated(_this.triggerAfterEventsRendered);\r\n        }, 'event', 'init');\r\n    };\r\n    View.prototype.requestEventsUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.triggerBeforeEventsDestroyed();\r\n            _this.executeEventUnrender();\r\n        }, 'event', 'destroy');\r\n    };\r\n    // Business Hour High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestBusinessHoursRender = function (businessHourGenerator) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.renderBusinessHours(businessHourGenerator);\r\n        }, 'businessHours', 'init');\r\n    };\r\n    View.prototype.requestBusinessHoursUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.unrenderBusinessHours();\r\n        }, 'businessHours', 'destroy');\r\n    };\r\n    // Misc view rendering utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Binds DOM handlers to elements that reside outside the view container, such as the document\r\n    View.prototype.bindGlobalHandlers = function () {\r\n        _super.prototype.bindGlobalHandlers.call(this);\r\n        this.listenTo(GlobalEmitter_1.default.get(), {\r\n            touchstart: this.processUnselect,\r\n            mousedown: this.handleDocumentMousedown\r\n        });\r\n    };\r\n    // Unbinds DOM handlers from elements that reside outside the view container\r\n    View.prototype.unbindGlobalHandlers = function () {\r\n        _super.prototype.unbindGlobalHandlers.call(this);\r\n        this.stopListeningTo(GlobalEmitter_1.default.get());\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Immediately render the current time indicator and begins re-rendering it at an interval,\r\n    // which is defined by this.getNowIndicatorUnit().\r\n    // TODO: somehow do this for the current whole day's background too\r\n    View.prototype.startNowIndicator = function () {\r\n        var _this = this;\r\n        var unit;\r\n        var update;\r\n        var delay; // ms wait value\r\n        if (this.opt('nowIndicator')) {\r\n            unit = this.getNowIndicatorUnit();\r\n            if (unit) {\r\n                update = util_1.proxy(this, 'updateNowIndicator'); // bind to `this`\r\n                this.initialNowDate = this.calendar.getNow();\r\n                this.initialNowQueriedMs = new Date().valueOf();\r\n                // wait until the beginning of the next interval\r\n                delay = this.initialNowDate.clone().startOf(unit).add(1, unit).valueOf() - this.initialNowDate.valueOf();\r\n                this.nowIndicatorTimeoutID = setTimeout(function () {\r\n                    _this.nowIndicatorTimeoutID = null;\r\n                    update();\r\n                    delay = +moment.duration(1, unit);\r\n                    delay = Math.max(100, delay); // prevent too frequent\r\n                    _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\r\n                }, delay);\r\n            }\r\n            // rendering will be initiated in updateSize\r\n        }\r\n    };\r\n    // rerenders the now indicator, computing the new current time from the amount of time that has passed\r\n    // since the initial getNow call.\r\n    View.prototype.updateNowIndicator = function () {\r\n        if (this.isDatesRendered &&\r\n            this.initialNowDate // activated before?\r\n        ) {\r\n            this.unrenderNowIndicator(); // won't unrender if unnecessary\r\n            this.renderNowIndicator(this.initialNowDate.clone().add(new Date().valueOf() - this.initialNowQueriedMs) // add ms\r\n            );\r\n            this.isNowIndicatorRendered = true;\r\n        }\r\n    };\r\n    // Immediately unrenders the view's current time indicator and stops any re-rendering timers.\r\n    // Won't cause side effects if indicator isn't rendered.\r\n    View.prototype.stopNowIndicator = function () {\r\n        if (this.isNowIndicatorRendered) {\r\n            if (this.nowIndicatorTimeoutID) {\r\n                clearTimeout(this.nowIndicatorTimeoutID);\r\n                this.nowIndicatorTimeoutID = null;\r\n            }\r\n            if (this.nowIndicatorIntervalID) {\r\n                clearInterval(this.nowIndicatorIntervalID);\r\n                this.nowIndicatorIntervalID = null;\r\n            }\r\n            this.unrenderNowIndicator();\r\n            this.isNowIndicatorRendered = false;\r\n        }\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        if (this['setHeight']) { // for legacy API\r\n            this['setHeight'](totalHeight, isAuto);\r\n        }\r\n        else {\r\n            _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        }\r\n        this.updateNowIndicator();\r\n    };\r\n    /* Scroller\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.addScroll = function (scroll) {\r\n        var queuedScroll = this.queuedScroll || (this.queuedScroll = {});\r\n        $.extend(queuedScroll, scroll);\r\n    };\r\n    View.prototype.popScroll = function () {\r\n        this.applyQueuedScroll();\r\n        this.queuedScroll = null;\r\n    };\r\n    View.prototype.applyQueuedScroll = function () {\r\n        if (this.queuedScroll) {\r\n            this.applyScroll(this.queuedScroll);\r\n        }\r\n    };\r\n    View.prototype.queryScroll = function () {\r\n        var scroll = {};\r\n        if (this.isDatesRendered) {\r\n            $.extend(scroll, this.queryDateScroll());\r\n        }\r\n        return scroll;\r\n    };\r\n    View.prototype.applyScroll = function (scroll) {\r\n        if (scroll.isDateInit && this.isDatesRendered) {\r\n            $.extend(scroll, this.computeInitialDateScroll());\r\n        }\r\n        if (this.isDatesRendered) {\r\n            this.applyDateScroll(scroll);\r\n        }\r\n    };\r\n    View.prototype.computeInitialDateScroll = function () {\r\n        return {}; // subclasses must implement\r\n    };\r\n    View.prototype.queryDateScroll = function () {\r\n        return {}; // subclasses must implement\r\n    };\r\n    View.prototype.applyDateScroll = function (scroll) {\r\n        // subclasses must implement\r\n    };\r\n    /* Event Drag-n-Drop\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.reportEventDrop = function (eventInstance, eventMutation, el, ev) {\r\n        var eventManager = this.calendar.eventManager;\r\n        var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n        var dateMutation = eventMutation.dateMutation;\r\n        // update the EventInstance, for handlers\r\n        if (dateMutation) {\r\n            eventInstance.dateProfile = dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n        }\r\n        this.triggerEventDrop(eventInstance, \r\n        // a drop doesn't necessarily mean a date mutation (ex: resource change)\r\n        (dateMutation && dateMutation.dateDelta) || moment.duration(), undoFunc, el, ev);\r\n    };\r\n    // Triggers event-drop handlers that have subscribed via the API\r\n    View.prototype.triggerEventDrop = function (eventInstance, dateDelta, undoFunc, el, ev) {\r\n        this.publiclyTrigger('eventDrop', {\r\n            context: el[0],\r\n            args: [\r\n                eventInstance.toLegacy(),\r\n                dateDelta,\r\n                undoFunc,\r\n                ev,\r\n                {},\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    /* External Element Drag-n-Drop\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Must be called when an external element, via jQuery UI, has been dropped onto the calendar.\r\n    // `meta` is the parsed data that has been embedded into the dragging event.\r\n    // `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.\r\n    View.prototype.reportExternalDrop = function (singleEventDef, isEvent, isSticky, el, ev, ui) {\r\n        if (isEvent) {\r\n            this.calendar.eventManager.addEventDef(singleEventDef, isSticky);\r\n        }\r\n        this.triggerExternalDrop(singleEventDef, isEvent, el, ev, ui);\r\n    };\r\n    // Triggers external-drop handlers that have subscribed via the API\r\n    View.prototype.triggerExternalDrop = function (singleEventDef, isEvent, el, ev, ui) {\r\n        // trigger 'drop' regardless of whether element represents an event\r\n        this.publiclyTrigger('drop', {\r\n            context: el[0],\r\n            args: [\r\n                singleEventDef.dateProfile.start.clone(),\r\n                ev,\r\n                ui,\r\n                this\r\n            ]\r\n        });\r\n        if (isEvent) {\r\n            // signal an external event landed\r\n            this.publiclyTrigger('eventReceive', {\r\n                context: this,\r\n                args: [\r\n                    singleEventDef.buildInstance().toLegacy(),\r\n                    this\r\n                ]\r\n            });\r\n        }\r\n    };\r\n    /* Event Resizing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Must be called when an event in the view has been resized to a new length\r\n    View.prototype.reportEventResize = function (eventInstance, eventMutation, el, ev) {\r\n        var eventManager = this.calendar.eventManager;\r\n        var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n        // update the EventInstance, for handlers\r\n        eventInstance.dateProfile = eventMutation.dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n        var resizeDelta = eventMutation.dateMutation.endDelta || eventMutation.dateMutation.startDelta;\r\n        this.triggerEventResize(eventInstance, resizeDelta, undoFunc, el, ev);\r\n    };\r\n    // Triggers event-resize handlers that have subscribed via the API\r\n    View.prototype.triggerEventResize = function (eventInstance, resizeDelta, undoFunc, el, ev) {\r\n        this.publiclyTrigger('eventResize', {\r\n            context: el[0],\r\n            args: [\r\n                eventInstance.toLegacy(),\r\n                resizeDelta,\r\n                undoFunc,\r\n                ev,\r\n                {},\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    /* Selection (time range)\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Selects a date span on the view. `start` and `end` are both Moments.\r\n    // `ev` is the native mouse event that begin the interaction.\r\n    View.prototype.select = function (footprint, ev) {\r\n        this.unselect(ev);\r\n        this.renderSelectionFootprint(footprint);\r\n        this.reportSelection(footprint, ev);\r\n    };\r\n    View.prototype.renderSelectionFootprint = function (footprint) {\r\n        if (this['renderSelection']) { // legacy method in custom view classes\r\n            this['renderSelection'](footprint.toLegacy(this.calendar));\r\n        }\r\n        else {\r\n            _super.prototype.renderSelectionFootprint.call(this, footprint);\r\n        }\r\n    };\r\n    // Called when a new selection is made. Updates internal state and triggers handlers.\r\n    View.prototype.reportSelection = function (footprint, ev) {\r\n        this.isSelected = true;\r\n        this.triggerSelect(footprint, ev);\r\n    };\r\n    // Triggers handlers to 'select'\r\n    View.prototype.triggerSelect = function (footprint, ev) {\r\n        var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n        this.publiclyTrigger('select', {\r\n            context: this,\r\n            args: [\r\n                dateProfile.start,\r\n                dateProfile.end,\r\n                ev,\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    // Undoes a selection. updates in the internal state and triggers handlers.\r\n    // `ev` is the native mouse event that began the interaction.\r\n    View.prototype.unselect = function (ev) {\r\n        if (this.isSelected) {\r\n            this.isSelected = false;\r\n            if (this['destroySelection']) {\r\n                this['destroySelection'](); // TODO: deprecate\r\n            }\r\n            this.unrenderSelection();\r\n            this.publiclyTrigger('unselect', {\r\n                context: this,\r\n                args: [ev, this]\r\n            });\r\n        }\r\n    };\r\n    /* Event Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.selectEventInstance = function (eventInstance) {\r\n        if (!this.selectedEventInstance ||\r\n            this.selectedEventInstance !== eventInstance) {\r\n            this.unselectEventInstance();\r\n            this.getEventSegs().forEach(function (seg) {\r\n                if (seg.footprint.eventInstance === eventInstance &&\r\n                    seg.el // necessary?\r\n                ) {\r\n                    seg.el.addClass('fc-selected');\r\n                }\r\n            });\r\n            this.selectedEventInstance = eventInstance;\r\n        }\r\n    };\r\n    View.prototype.unselectEventInstance = function () {\r\n        if (this.selectedEventInstance) {\r\n            this.getEventSegs().forEach(function (seg) {\r\n                if (seg.el) { // necessary?\r\n                    seg.el.removeClass('fc-selected');\r\n                }\r\n            });\r\n            this.selectedEventInstance = null;\r\n        }\r\n    };\r\n    View.prototype.isEventDefSelected = function (eventDef) {\r\n        // event references might change on refetchEvents(), while selectedEventInstance doesn't,\r\n        // so compare IDs\r\n        return this.selectedEventInstance && this.selectedEventInstance.def.id === eventDef.id;\r\n    };\r\n    /* Mouse / Touch Unselecting (time range & event unselection)\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // TODO: move consistently to down/start or up/end?\r\n    // TODO: don't kill previous selection if touch scrolling\r\n    View.prototype.handleDocumentMousedown = function (ev) {\r\n        if (util_1.isPrimaryMouseButton(ev)) {\r\n            this.processUnselect(ev);\r\n        }\r\n    };\r\n    View.prototype.processUnselect = function (ev) {\r\n        this.processRangeUnselect(ev);\r\n        this.processEventUnselect(ev);\r\n    };\r\n    View.prototype.processRangeUnselect = function (ev) {\r\n        var ignore;\r\n        // is there a time-range selection?\r\n        if (this.isSelected && this.opt('unselectAuto')) {\r\n            // only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element\r\n            ignore = this.opt('unselectCancel');\r\n            if (!ignore || !$(ev.target).closest(ignore).length) {\r\n                this.unselect(ev);\r\n            }\r\n        }\r\n    };\r\n    View.prototype.processEventUnselect = function (ev) {\r\n        if (this.selectedEventInstance) {\r\n            if (!$(ev.target).closest('.fc-selected').length) {\r\n                this.unselectEventInstance();\r\n            }\r\n        }\r\n    };\r\n    /* Triggers\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.triggerBaseRendered = function () {\r\n        this.publiclyTrigger('viewRender', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    View.prototype.triggerBaseUnrendered = function () {\r\n        this.publiclyTrigger('viewDestroy', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    // Triggers handlers to 'dayClick'\r\n    // Span has start/end of the clicked area. Only the start is useful.\r\n    View.prototype.triggerDayClick = function (footprint, dayEl, ev) {\r\n        var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n        this.publiclyTrigger('dayClick', {\r\n            context: dayEl,\r\n            args: [dateProfile.start, ev, this]\r\n        });\r\n    };\r\n    /* Date Utils\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // For DateComponent::getDayClasses\r\n    View.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n        return false;\r\n    };\r\n    // Arguments after name will be forwarded to a hypothetical function value\r\n    // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\r\n    // Always clone your objects if you fear mutation.\r\n    View.prototype.getUnzonedRangeOption = function (name) {\r\n        var val = this.opt(name);\r\n        if (typeof val === 'function') {\r\n            val = val.apply(null, Array.prototype.slice.call(arguments, 1));\r\n        }\r\n        if (val) {\r\n            return this.calendar.parseUnzonedRange(val);\r\n        }\r\n    };\r\n    /* Hidden Days\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Initializes internal variables related to calculating hidden days-of-week\r\n    View.prototype.initHiddenDays = function () {\r\n        var hiddenDays = this.opt('hiddenDays') || []; // array of day-of-week indices that are hidden\r\n        var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\r\n        var dayCnt = 0;\r\n        var i;\r\n        if (this.opt('weekends') === false) {\r\n            hiddenDays.push(0, 6); // 0=sunday, 6=saturday\r\n        }\r\n        for (i = 0; i < 7; i++) {\r\n            if (!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -1)) {\r\n                dayCnt++;\r\n            }\r\n        }\r\n        if (!dayCnt) {\r\n            throw new Error('invalid hiddenDays'); // all days were hidden? bad.\r\n        }\r\n        this.isHiddenDayHash = isHiddenDayHash;\r\n    };\r\n    // Remove days from the beginning and end of the range that are computed as hidden.\r\n    // If the whole range is trimmed off, returns null\r\n    View.prototype.trimHiddenDays = function (inputUnzonedRange) {\r\n        var start = inputUnzonedRange.getStart();\r\n        var end = inputUnzonedRange.getEnd();\r\n        if (start) {\r\n            start = this.skipHiddenDays(start);\r\n        }\r\n        if (end) {\r\n            end = this.skipHiddenDays(end, -1, true);\r\n        }\r\n        if (start === null || end === null || start < end) {\r\n            return new UnzonedRange_1.default(start, end);\r\n        }\r\n        return null;\r\n    };\r\n    // Is the current day hidden?\r\n    // `day` is a day-of-week index (0-6), or a Moment\r\n    View.prototype.isHiddenDay = function (day) {\r\n        if (moment.isMoment(day)) {\r\n            day = day.day();\r\n        }\r\n        return this.isHiddenDayHash[day];\r\n    };\r\n    // Incrementing the current day until it is no longer a hidden day, returning a copy.\r\n    // DOES NOT CONSIDER validUnzonedRange!\r\n    // If the initial value of `date` is not a hidden day, don't do anything.\r\n    // Pass `isExclusive` as `true` if you are dealing with an end date.\r\n    // `inc` defaults to `1` (increment one day forward each time)\r\n    View.prototype.skipHiddenDays = function (date, inc, isExclusive) {\r\n        if (inc === void 0) { inc = 1; }\r\n        if (isExclusive === void 0) { isExclusive = false; }\r\n        var out = date.clone();\r\n        while (this.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]) {\r\n            out.add(inc, 'days');\r\n        }\r\n        return out;\r\n    };\r\n    return View;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = View;\r\nView.prototype.usesMinMaxTime = false;\r\nView.prototype.dateProfileGeneratorClass = DateProfileGenerator_1.default;\r\nView.watch('displayingDates', ['isInDom', 'dateProfile'], function (deps) {\r\n    this.requestDateRender(deps.dateProfile);\r\n}, function () {\r\n    this.requestDateUnrender();\r\n});\r\nView.watch('displayingBusinessHours', ['displayingDates', 'businessHourGenerator'], function (deps) {\r\n    this.requestBusinessHoursRender(deps.businessHourGenerator);\r\n}, function () {\r\n    this.requestBusinessHoursUnrender();\r\n});\r\nView.watch('initialEvents', ['dateProfile'], function (deps) {\r\n    return this.fetchInitialEvents(deps.dateProfile);\r\n});\r\nView.watch('bindingEvents', ['initialEvents'], function (deps) {\r\n    this.setEvents(deps.initialEvents);\r\n    this.bindEventChanges();\r\n}, function () {\r\n    this.unbindEventChanges();\r\n    this.unsetEvents();\r\n});\r\nView.watch('displayingEvents', ['displayingDates', 'hasEvents'], function () {\r\n    this.requestEventsRender(this.get('currentEvents'));\r\n}, function () {\r\n    this.requestEventsUnrender();\r\n});\r\nView.watch('title', ['dateProfile'], function (deps) {\r\n    return (this.title = this.computeTitle(deps.dateProfile)); // assign to View for legacy reasons\r\n});\r\nView.watch('legacyDateProps', ['dateProfile'], function (deps) {\r\n    var calendar = this.calendar;\r\n    var dateProfile = deps.dateProfile;\r\n    // DEPRECATED, but we need to keep it updated...\r\n    this.start = calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n    this.end = calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n    this.intervalStart = calendar.msToMoment(dateProfile.currentUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n    this.intervalEnd = calendar.msToMoment(dateProfile.currentUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n});\r\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer = /** @class */ (function () {\r\n    function EventRenderer(component, fillRenderer) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n        this.fillRenderer = fillRenderer;\r\n    }\r\n    EventRenderer.prototype.opt = function (name) {\r\n        return this.view.opt(name);\r\n    };\r\n    // Updates values that rely on options and also relate to range\r\n    EventRenderer.prototype.rangeUpdated = function () {\r\n        var displayEventTime;\r\n        var displayEventEnd;\r\n        this.eventTimeFormat =\r\n            this.opt('eventTimeFormat') ||\r\n                this.opt('timeFormat') || // deprecated\r\n                this.computeEventTimeFormat();\r\n        displayEventTime = this.opt('displayEventTime');\r\n        if (displayEventTime == null) {\r\n            displayEventTime = this.computeDisplayEventTime(); // might be based off of range\r\n        }\r\n        displayEventEnd = this.opt('displayEventEnd');\r\n        if (displayEventEnd == null) {\r\n            displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\r\n        }\r\n        this.displayEventTime = displayEventTime;\r\n        this.displayEventEnd = displayEventEnd;\r\n    };\r\n    EventRenderer.prototype.render = function (eventsPayload) {\r\n        var dateProfile = this.component._getDateProfile();\r\n        var eventDefId;\r\n        var instanceGroup;\r\n        var eventRanges;\r\n        var bgRanges = [];\r\n        var fgRanges = [];\r\n        for (eventDefId in eventsPayload) {\r\n            instanceGroup = eventsPayload[eventDefId];\r\n            eventRanges = instanceGroup.sliceRenderRanges(dateProfile.activeUnzonedRange);\r\n            if (instanceGroup.getEventDef().hasBgRendering()) {\r\n                bgRanges.push.apply(bgRanges, eventRanges);\r\n            }\r\n            else {\r\n                fgRanges.push.apply(fgRanges, eventRanges);\r\n            }\r\n        }\r\n        this.renderBgRanges(bgRanges);\r\n        this.renderFgRanges(fgRanges);\r\n    };\r\n    EventRenderer.prototype.unrender = function () {\r\n        this.unrenderBgRanges();\r\n        this.unrenderFgRanges();\r\n    };\r\n    EventRenderer.prototype.renderFgRanges = function (eventRanges) {\r\n        var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        // render an `.el` on each seg\r\n        // returns a subset of the segs. segs that were actually rendered\r\n        segs = this.renderFgSegEls(segs);\r\n        if (this.renderFgSegs(segs) !== false) { // no failure?\r\n            this.fgSegs = segs;\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderFgRanges = function () {\r\n        this.unrenderFgSegs(this.fgSegs || []);\r\n        this.fgSegs = null;\r\n    };\r\n    EventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n        var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        if (this.renderBgSegs(segs) !== false) { // no failure?\r\n            this.bgSegs = segs;\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderBgRanges = function () {\r\n        this.unrenderBgSegs();\r\n        this.bgSegs = null;\r\n    };\r\n    EventRenderer.prototype.getSegs = function () {\r\n        return (this.bgSegs || []).concat(this.fgSegs || []);\r\n    };\r\n    // Renders foreground event segments onto the grid\r\n    EventRenderer.prototype.renderFgSegs = function (segs) {\r\n        // subclasses must implement\r\n        // segs already has rendered els, and has been filtered.\r\n        return false; // signal failure if not implemented\r\n    };\r\n    // Unrenders all currently rendered foreground segments\r\n    EventRenderer.prototype.unrenderFgSegs = function (segs) {\r\n        // subclasses must implement\r\n    };\r\n    EventRenderer.prototype.renderBgSegs = function (segs) {\r\n        var _this = this;\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderSegs('bgEvent', segs, {\r\n                getClasses: function (seg) {\r\n                    return _this.getBgClasses(seg.footprint.eventDef);\r\n                },\r\n                getCss: function (seg) {\r\n                    return {\r\n                        'background-color': _this.getBgColor(seg.footprint.eventDef)\r\n                    };\r\n                },\r\n                filterEl: function (seg, el) {\r\n                    return _this.filterEventRenderEl(seg.footprint, el);\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            return false; // signal failure if no fillRenderer\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderBgSegs = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('bgEvent');\r\n        }\r\n    };\r\n    // Renders and assigns an `el` property for each foreground event segment.\r\n    // Only returns segments that successfully rendered.\r\n    EventRenderer.prototype.renderFgSegEls = function (segs, disableResizing) {\r\n        var _this = this;\r\n        if (disableResizing === void 0) { disableResizing = false; }\r\n        var hasEventRenderHandlers = this.view.hasPublicHandlers('eventRender');\r\n        var html = '';\r\n        var renderedSegs = [];\r\n        var i;\r\n        if (segs.length) { // don't build an empty html string\r\n            // build a large concatenation of event segment HTML\r\n            for (i = 0; i < segs.length; i++) {\r\n                this.beforeFgSegHtml(segs[i]);\r\n                html += this.fgSegHtml(segs[i], disableResizing);\r\n            }\r\n            // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n            // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\r\n            $(html).each(function (i, node) {\r\n                var seg = segs[i];\r\n                var el = $(node);\r\n                if (hasEventRenderHandlers) { // optimization\r\n                    el = _this.filterEventRenderEl(seg.footprint, el);\r\n                }\r\n                if (el) {\r\n                    el.data('fc-seg', seg); // used by handlers\r\n                    seg.el = el;\r\n                    renderedSegs.push(seg);\r\n                }\r\n            });\r\n        }\r\n        return renderedSegs;\r\n    };\r\n    EventRenderer.prototype.beforeFgSegHtml = function (seg) {\r\n    };\r\n    // Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()\r\n    EventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        // subclasses should implement\r\n    };\r\n    // Generic utility for generating the HTML classNames for an event segment's element\r\n    EventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable) {\r\n        var classes = [\r\n            'fc-event',\r\n            seg.isStart ? 'fc-start' : 'fc-not-start',\r\n            seg.isEnd ? 'fc-end' : 'fc-not-end'\r\n        ].concat(this.getClasses(seg.footprint.eventDef));\r\n        if (isDraggable) {\r\n            classes.push('fc-draggable');\r\n        }\r\n        if (isResizable) {\r\n            classes.push('fc-resizable');\r\n        }\r\n        // event is currently selected? attach a className.\r\n        if (this.view.isEventDefSelected(seg.footprint.eventDef)) {\r\n            classes.push('fc-selected');\r\n        }\r\n        return classes;\r\n    };\r\n    // Given an event and the default element used for rendering, returns the element that should actually be used.\r\n    // Basically runs events and elements through the eventRender hook.\r\n    EventRenderer.prototype.filterEventRenderEl = function (eventFootprint, el) {\r\n        var legacy = eventFootprint.getEventLegacy();\r\n        var custom = this.view.publiclyTrigger('eventRender', {\r\n            context: legacy,\r\n            args: [legacy, el, this.view]\r\n        });\r\n        if (custom === false) { // means don't render at all\r\n            el = null;\r\n        }\r\n        else if (custom && custom !== true) {\r\n            el = $(custom);\r\n        }\r\n        return el;\r\n    };\r\n    // Compute the text that should be displayed on an event's element.\r\n    // `range` can be the Event object itself, or something range-like, with at least a `start`.\r\n    // If event times are disabled, or the event has no time, will return a blank string.\r\n    // If not specified, formatStr will default to the eventTimeFormat setting,\r\n    // and displayEnd will default to the displayEventEnd setting.\r\n    EventRenderer.prototype.getTimeText = function (eventFootprint, formatStr, displayEnd) {\r\n        return this._getTimeText(eventFootprint.eventInstance.dateProfile.start, eventFootprint.eventInstance.dateProfile.end, eventFootprint.componentFootprint.isAllDay, formatStr, displayEnd);\r\n    };\r\n    EventRenderer.prototype._getTimeText = function (start, end, isAllDay, formatStr, displayEnd) {\r\n        if (formatStr == null) {\r\n            formatStr = this.eventTimeFormat;\r\n        }\r\n        if (displayEnd == null) {\r\n            displayEnd = this.displayEventEnd;\r\n        }\r\n        if (this.displayEventTime && !isAllDay) {\r\n            if (displayEnd && end) {\r\n                return this.view.formatRange({ start: start, end: end }, false, // allDay\r\n                formatStr);\r\n            }\r\n            else {\r\n                return start.format(formatStr);\r\n            }\r\n        }\r\n        return '';\r\n    };\r\n    EventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('smallTimeFormat');\r\n    };\r\n    EventRenderer.prototype.computeDisplayEventTime = function () {\r\n        return true;\r\n    };\r\n    EventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return true;\r\n    };\r\n    EventRenderer.prototype.getBgClasses = function (eventDef) {\r\n        var classNames = this.getClasses(eventDef);\r\n        classNames.push('fc-bgevent');\r\n        return classNames;\r\n    };\r\n    EventRenderer.prototype.getClasses = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var classNames = [];\r\n        for (i = 0; i < objs.length; i++) {\r\n            classNames.push.apply(// append\r\n            classNames, objs[i].eventClassName || objs[i].className || []);\r\n        }\r\n        return classNames;\r\n    };\r\n    // Utility for generating event skin-related CSS properties\r\n    EventRenderer.prototype.getSkinCss = function (eventDef) {\r\n        return {\r\n            'background-color': this.getBgColor(eventDef),\r\n            'border-color': this.getBorderColor(eventDef),\r\n            color: this.getTextColor(eventDef)\r\n        };\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getBgColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventBackgroundColor || objs[i].eventColor ||\r\n                objs[i].backgroundColor || objs[i].color;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventBackgroundColor') || this.opt('eventColor');\r\n        }\r\n        return val;\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getBorderColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventBorderColor || objs[i].eventColor ||\r\n                objs[i].borderColor || objs[i].color;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventBorderColor') || this.opt('eventColor');\r\n        }\r\n        return val;\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getTextColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventTextColor ||\r\n                objs[i].textColor;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventTextColor');\r\n        }\r\n        return val;\r\n    };\r\n    EventRenderer.prototype.getStylingObjs = function (eventDef) {\r\n        var objs = this.getFallbackStylingObjs(eventDef);\r\n        objs.unshift(eventDef);\r\n        return objs;\r\n    };\r\n    EventRenderer.prototype.getFallbackStylingObjs = function (eventDef) {\r\n        return [eventDef.source];\r\n    };\r\n    EventRenderer.prototype.sortEventSegs = function (segs) {\r\n        segs.sort(util_1.proxy(this, 'compareEventSegs'));\r\n    };\r\n    // A cmp function for determining which segments should take visual priority\r\n    EventRenderer.prototype.compareEventSegs = function (seg1, seg2) {\r\n        var f1 = seg1.footprint;\r\n        var f2 = seg2.footprint;\r\n        var cf1 = f1.componentFootprint;\r\n        var cf2 = f2.componentFootprint;\r\n        var r1 = cf1.unzonedRange;\r\n        var r2 = cf2.unzonedRange;\r\n        return r1.startMs - r2.startMs || // earlier events go first\r\n            (r2.endMs - r2.startMs) - (r1.endMs - r1.startMs) || // tie? longer events go first\r\n            cf2.isAllDay - cf1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)\r\n            util_1.compareByFieldSpecs(f1.eventDef, f2.eventDef, this.view.eventOrderSpecs, f1.eventDef.miscProps, f2.eventDef.miscProps);\r\n    };\r\n    return EventRenderer;\r\n}());\r\nexports.default = EventRenderer;\r\n\n\n/***/ }),\n/* 45 */,\n/* 46 */,\n/* 47 */,\n/* 48 */,\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment_ext_1 = __webpack_require__(11);\r\n// Plugin\r\n// -------------------------------------------------------------------------------------------------\r\nmoment_ext_1.newMomentProto.format = function () {\r\n    if (this._fullCalendar && arguments[0]) { // an enhanced moment? and a format string provided?\r\n        return formatDate(this, arguments[0]); // our extended formatting\r\n    }\r\n    if (this._ambigTime) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n    }\r\n    if (this._ambigZone) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n    }\r\n    if (this._fullCalendar) { // enhanced non-ambig moment?\r\n        // moment.format() doesn't ensure english, but we want to.\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this));\r\n    }\r\n    return moment_ext_1.oldMomentProto.format.apply(this, arguments);\r\n};\r\nmoment_ext_1.newMomentProto.toISOString = function () {\r\n    if (this._ambigTime) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n    }\r\n    if (this._ambigZone) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n    }\r\n    if (this._fullCalendar) { // enhanced non-ambig moment?\r\n        // depending on browser, moment might not output english. ensure english.\r\n        // https://github.com/moment/moment/blob/2.18.1/src/lib/moment/format.js#L22\r\n        return moment_ext_1.oldMomentProto.toISOString.apply(englishMoment(this), arguments);\r\n    }\r\n    return moment_ext_1.oldMomentProto.toISOString.apply(this, arguments);\r\n};\r\nfunction englishMoment(mom) {\r\n    if (mom.locale() !== 'en') {\r\n        return mom.clone().locale('en');\r\n    }\r\n    return mom;\r\n}\r\n// Config\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nInserted between chunks in the fake (\"intermediate\") formatting string.\r\nImportant that it passes as whitespace (\\s) because moment often identifies non-standalone months\r\nvia a regexp with an \\s.\r\n*/\r\nvar PART_SEPARATOR = '\\u000b'; // vertical tab\r\n/*\r\nInserted as the first character of a literal-text chunk to indicate that the literal text is not actually literal text,\r\nbut rather, a \"special\" token that has custom rendering (see specialTokens map).\r\n*/\r\nvar SPECIAL_TOKEN_MARKER = '\\u001f'; // information separator 1\r\n/*\r\nInserted at the beginning and end of a span of text that must have non-zero numeric characters.\r\nHandling of these markers is done in a post-processing step at the very end of text rendering.\r\n*/\r\nvar MAYBE_MARKER = '\\u001e'; // information separator 2\r\nvar MAYBE_REGEXP = new RegExp(MAYBE_MARKER + '([^' + MAYBE_MARKER + ']*)' + MAYBE_MARKER, 'g'); // must be global\r\n/*\r\nAddition formatting tokens we want recognized\r\n*/\r\nvar specialTokens = {\r\n    t: function (date) {\r\n        return moment_ext_1.oldMomentFormat(date, 'a').charAt(0);\r\n    },\r\n    T: function (date) {\r\n        return moment_ext_1.oldMomentFormat(date, 'A').charAt(0);\r\n    }\r\n};\r\n/*\r\nThe first characters of formatting tokens for units that are 1 day or larger.\r\n`value` is for ranking relative size (lower means bigger).\r\n`unit` is a normalized unit, used for comparing moments.\r\n*/\r\nvar largeTokenMap = {\r\n    Y: { value: 1, unit: 'year' },\r\n    M: { value: 2, unit: 'month' },\r\n    W: { value: 3, unit: 'week' },\r\n    w: { value: 3, unit: 'week' },\r\n    D: { value: 4, unit: 'day' },\r\n    d: { value: 4, unit: 'day' } // day of week\r\n};\r\n// Single Date Formatting\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats `date` with a Moment formatting string, but allow our non-zero areas and special token\r\n*/\r\nfunction formatDate(date, formatStr) {\r\n    return renderFakeFormatString(getParsedFormatString(formatStr).fakeFormatString, date);\r\n}\r\nexports.formatDate = formatDate;\r\n// Date Range Formatting\r\n// -------------------------------------------------------------------------------------------------\r\n// TODO: make it work with timezone offset\r\n/*\r\nUsing a formatting string meant for a single date, generate a range string, like\r\n\"Sep 2 - 9 2013\", that intelligently inserts a separator where the dates differ.\r\nIf the dates are the same as far as the format string is concerned, just return a single\r\nrendering of one date, without any separator.\r\n*/\r\nfunction formatRange(date1, date2, formatStr, separator, isRTL) {\r\n    var localeData;\r\n    date1 = moment_ext_1.default.parseZone(date1);\r\n    date2 = moment_ext_1.default.parseZone(date2);\r\n    localeData = date1.localeData();\r\n    // Expand localized format strings, like \"LL\" -> \"MMMM D YYYY\".\r\n    // BTW, this is not important for `formatDate` because it is impossible to put custom tokens\r\n    // or non-zero areas in Moment's localized format strings.\r\n    formatStr = localeData.longDateFormat(formatStr) || formatStr;\r\n    return renderParsedFormat(getParsedFormatString(formatStr), date1, date2, separator || ' - ', isRTL);\r\n}\r\nexports.formatRange = formatRange;\r\n/*\r\nRenders a range with an already-parsed format string.\r\n*/\r\nfunction renderParsedFormat(parsedFormat, date1, date2, separator, isRTL) {\r\n    var sameUnits = parsedFormat.sameUnits;\r\n    var unzonedDate1 = date1.clone().stripZone(); // for same-unit comparisons\r\n    var unzonedDate2 = date2.clone().stripZone(); // \"\r\n    var renderedParts1 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date1);\r\n    var renderedParts2 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date2);\r\n    var leftI;\r\n    var leftStr = '';\r\n    var rightI;\r\n    var rightStr = '';\r\n    var middleI;\r\n    var middleStr1 = '';\r\n    var middleStr2 = '';\r\n    var middleStr = '';\r\n    // Start at the leftmost side of the formatting string and continue until you hit a token\r\n    // that is not the same between dates.\r\n    for (leftI = 0; leftI < sameUnits.length && (!sameUnits[leftI] || unzonedDate1.isSame(unzonedDate2, sameUnits[leftI])); leftI++) {\r\n        leftStr += renderedParts1[leftI];\r\n    }\r\n    // Similarly, start at the rightmost side of the formatting string and move left\r\n    for (rightI = sameUnits.length - 1; rightI > leftI && (!sameUnits[rightI] || unzonedDate1.isSame(unzonedDate2, sameUnits[rightI])); rightI--) {\r\n        // If current chunk is on the boundary of unique date-content, and is a special-case\r\n        // date-formatting postfix character, then don't consume it. Consider it unique date-content.\r\n        // TODO: make configurable\r\n        if (rightI - 1 === leftI && renderedParts1[rightI] === '.') {\r\n            break;\r\n        }\r\n        rightStr = renderedParts1[rightI] + rightStr;\r\n    }\r\n    // The area in the middle is different for both of the dates.\r\n    // Collect them distinctly so we can jam them together later.\r\n    for (middleI = leftI; middleI <= rightI; middleI++) {\r\n        middleStr1 += renderedParts1[middleI];\r\n        middleStr2 += renderedParts2[middleI];\r\n    }\r\n    if (middleStr1 || middleStr2) {\r\n        if (isRTL) {\r\n            middleStr = middleStr2 + separator + middleStr1;\r\n        }\r\n        else {\r\n            middleStr = middleStr1 + separator + middleStr2;\r\n        }\r\n    }\r\n    return processMaybeMarkers(leftStr + middleStr + rightStr);\r\n}\r\n// Format String Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nvar parsedFormatStrCache = {};\r\n/*\r\nReturns a parsed format string, leveraging a cache.\r\n*/\r\nfunction getParsedFormatString(formatStr) {\r\n    return parsedFormatStrCache[formatStr] ||\r\n        (parsedFormatStrCache[formatStr] = parseFormatString(formatStr));\r\n}\r\n/*\r\nParses a format string into the following:\r\n- fakeFormatString: a momentJS formatting string, littered with special control characters that get post-processed.\r\n- sameUnits: for every part in fakeFormatString, if the part is a token, the value will be a unit string (like \"day\"),\r\n  that indicates how similar a range's start & end must be in order to share the same formatted text.\r\n  If not a token, then the value is null.\r\n  Always a flat array (not nested liked \"chunks\").\r\n*/\r\nfunction parseFormatString(formatStr) {\r\n    var chunks = chunkFormatString(formatStr);\r\n    return {\r\n        fakeFormatString: buildFakeFormatString(chunks),\r\n        sameUnits: buildSameUnits(chunks)\r\n    };\r\n}\r\n/*\r\nBreak the formatting string into an array of chunks.\r\nA 'maybe' chunk will have nested chunks.\r\n*/\r\nfunction chunkFormatString(formatStr) {\r\n    var chunks = [];\r\n    var match;\r\n    // TODO: more descrimination\r\n    // \\4 is a backreference to the first character of a multi-character set.\r\n    var chunker = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LTS|LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g;\r\n    while ((match = chunker.exec(formatStr))) {\r\n        if (match[1]) { // a literal string inside [ ... ]\r\n            chunks.push.apply(chunks, // append\r\n            splitStringLiteral(match[1]));\r\n        }\r\n        else if (match[2]) { // non-zero formatting inside ( ... )\r\n            chunks.push({ maybe: chunkFormatString(match[2]) });\r\n        }\r\n        else if (match[3]) { // a formatting token\r\n            chunks.push({ token: match[3] });\r\n        }\r\n        else if (match[5]) { // an unenclosed literal string\r\n            chunks.push.apply(chunks, // append\r\n            splitStringLiteral(match[5]));\r\n        }\r\n    }\r\n    return chunks;\r\n}\r\n/*\r\nPotentially splits a literal-text string into multiple parts. For special cases.\r\n*/\r\nfunction splitStringLiteral(s) {\r\n    if (s === '. ') {\r\n        return ['.', ' ']; // for locales with periods bound to the end of each year/month/date\r\n    }\r\n    else {\r\n        return [s];\r\n    }\r\n}\r\n/*\r\nGiven chunks parsed from a real format string, generate a fake (aka \"intermediate\") format string with special control\r\ncharacters that will eventually be given to moment for formatting, and then post-processed.\r\n*/\r\nfunction buildFakeFormatString(chunks) {\r\n    var parts = [];\r\n    var i;\r\n    var chunk;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (typeof chunk === 'string') {\r\n            parts.push('[' + chunk + ']');\r\n        }\r\n        else if (chunk.token) {\r\n            if (chunk.token in specialTokens) {\r\n                parts.push(SPECIAL_TOKEN_MARKER + // useful during post-processing\r\n                    '[' + chunk.token + ']' // preserve as literal text\r\n                );\r\n            }\r\n            else {\r\n                parts.push(chunk.token); // unprotected text implies a format string\r\n            }\r\n        }\r\n        else if (chunk.maybe) {\r\n            parts.push(MAYBE_MARKER + // useful during post-processing\r\n                buildFakeFormatString(chunk.maybe) +\r\n                MAYBE_MARKER);\r\n        }\r\n    }\r\n    return parts.join(PART_SEPARATOR);\r\n}\r\n/*\r\nGiven parsed chunks from a real formatting string, generates an array of unit strings (like \"day\") that indicate\r\nin which regard two dates must be similar in order to share range formatting text.\r\nThe `chunks` can be nested (because of \"maybe\" chunks), however, the returned array will be flat.\r\n*/\r\nfunction buildSameUnits(chunks) {\r\n    var units = [];\r\n    var i;\r\n    var chunk;\r\n    var tokenInfo;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (chunk.token) {\r\n            tokenInfo = largeTokenMap[chunk.token.charAt(0)];\r\n            units.push(tokenInfo ? tokenInfo.unit : 'second'); // default to a very strict same-second\r\n        }\r\n        else if (chunk.maybe) {\r\n            units.push.apply(units, // append\r\n            buildSameUnits(chunk.maybe));\r\n        }\r\n        else {\r\n            units.push(null);\r\n        }\r\n    }\r\n    return units;\r\n}\r\n// Rendering to text\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats a date with a fake format string, post-processes the control characters, then returns.\r\n*/\r\nfunction renderFakeFormatString(fakeFormatString, date) {\r\n    return processMaybeMarkers(renderFakeFormatStringParts(fakeFormatString, date).join(''));\r\n}\r\n/*\r\nFormats a date into parts that will have been post-processed, EXCEPT for the \"maybe\" markers.\r\n*/\r\nfunction renderFakeFormatStringParts(fakeFormatString, date) {\r\n    var parts = [];\r\n    var fakeRender = moment_ext_1.oldMomentFormat(date, fakeFormatString);\r\n    var fakeParts = fakeRender.split(PART_SEPARATOR);\r\n    var i;\r\n    var fakePart;\r\n    for (i = 0; i < fakeParts.length; i++) {\r\n        fakePart = fakeParts[i];\r\n        if (fakePart.charAt(0) === SPECIAL_TOKEN_MARKER) {\r\n            parts.push(\r\n            // the literal string IS the token's name.\r\n            // call special token's registered function.\r\n            specialTokens[fakePart.substring(1)](date));\r\n        }\r\n        else {\r\n            parts.push(fakePart);\r\n        }\r\n    }\r\n    return parts;\r\n}\r\n/*\r\nAccepts an almost-finally-formatted string and processes the \"maybe\" control characters, returning a new string.\r\n*/\r\nfunction processMaybeMarkers(s) {\r\n    return s.replace(MAYBE_REGEXP, function (m0, m1) {\r\n        if (m1.match(/[1-9]/)) { // any non-zero numeric characters?\r\n            return m1;\r\n        }\r\n        else {\r\n            return '';\r\n        }\r\n    });\r\n}\r\n// Misc Utils\r\n// -------------------------------------------------------------------------------------------------\r\n/*\r\nReturns a unit string, either 'year', 'month', 'day', or null for the most granular formatting token in the string.\r\n*/\r\nfunction queryMostGranularFormatUnit(formatStr) {\r\n    var chunks = chunkFormatString(formatStr);\r\n    var i;\r\n    var chunk;\r\n    var candidate;\r\n    var best;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (chunk.token) {\r\n            candidate = largeTokenMap[chunk.token.charAt(0)];\r\n            if (candidate) {\r\n                if (!best || candidate.value > best.value) {\r\n                    best = candidate;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (best) {\r\n        return best.unit;\r\n    }\r\n    return null;\r\n}\r\nexports.queryMostGranularFormatUnit = queryMostGranularFormatUnit;\r\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange = /** @class */ (function () {\r\n    function EventRange(unzonedRange, eventDef, eventInstance) {\r\n        this.unzonedRange = unzonedRange;\r\n        this.eventDef = eventDef;\r\n        if (eventInstance) {\r\n            this.eventInstance = eventInstance;\r\n        }\r\n    }\r\n    return EventRange;\r\n}());\r\nexports.default = EventRange;\r\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Model = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Model, _super);\r\n    function Model() {\r\n        var _this = _super.call(this) || this;\r\n        _this._watchers = {};\r\n        _this._props = {};\r\n        _this.applyGlobalWatchers();\r\n        _this.constructed();\r\n        return _this;\r\n    }\r\n    Model.watch = function (name) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        // subclasses should make a masked-copy of the superclass's map\r\n        // TODO: write test\r\n        if (!this.prototype.hasOwnProperty('_globalWatchArgs')) {\r\n            this.prototype._globalWatchArgs = Object.create(this.prototype._globalWatchArgs);\r\n        }\r\n        this.prototype._globalWatchArgs[name] = args;\r\n    };\r\n    Model.prototype.constructed = function () {\r\n        // useful for monkeypatching. TODO: BaseClass?\r\n    };\r\n    Model.prototype.applyGlobalWatchers = function () {\r\n        var map = this._globalWatchArgs;\r\n        var name;\r\n        for (name in map) {\r\n            this.watch.apply(this, [name].concat(map[name]));\r\n        }\r\n    };\r\n    Model.prototype.has = function (name) {\r\n        return name in this._props;\r\n    };\r\n    Model.prototype.get = function (name) {\r\n        if (name === undefined) {\r\n            return this._props;\r\n        }\r\n        return this._props[name];\r\n    };\r\n    Model.prototype.set = function (name, val) {\r\n        var newProps;\r\n        if (typeof name === 'string') {\r\n            newProps = {};\r\n            newProps[name] = val === undefined ? null : val;\r\n        }\r\n        else {\r\n            newProps = name;\r\n        }\r\n        this.setProps(newProps);\r\n    };\r\n    Model.prototype.reset = function (newProps) {\r\n        var oldProps = this._props;\r\n        var changeset = {}; // will have undefined's to signal unsets\r\n        var name;\r\n        for (name in oldProps) {\r\n            changeset[name] = undefined;\r\n        }\r\n        for (name in newProps) {\r\n            changeset[name] = newProps[name];\r\n        }\r\n        this.setProps(changeset);\r\n    };\r\n    Model.prototype.unset = function (name) {\r\n        var newProps = {};\r\n        var names;\r\n        var i;\r\n        if (typeof name === 'string') {\r\n            names = [name];\r\n        }\r\n        else {\r\n            names = name;\r\n        }\r\n        for (i = 0; i < names.length; i++) {\r\n            newProps[names[i]] = undefined;\r\n        }\r\n        this.setProps(newProps);\r\n    };\r\n    Model.prototype.setProps = function (newProps) {\r\n        var changedProps = {};\r\n        var changedCnt = 0;\r\n        var name;\r\n        var val;\r\n        for (name in newProps) {\r\n            val = newProps[name];\r\n            // a change in value?\r\n            // if an object, don't check equality, because might have been mutated internally.\r\n            // TODO: eventually enforce immutability.\r\n            if (typeof val === 'object' ||\r\n                val !== this._props[name]) {\r\n                changedProps[name] = val;\r\n                changedCnt++;\r\n            }\r\n        }\r\n        if (changedCnt) {\r\n            this.trigger('before:batchChange', changedProps);\r\n            for (name in changedProps) {\r\n                val = changedProps[name];\r\n                this.trigger('before:change', name, val);\r\n                this.trigger('before:change:' + name, val);\r\n            }\r\n            for (name in changedProps) {\r\n                val = changedProps[name];\r\n                if (val === undefined) {\r\n                    delete this._props[name];\r\n                }\r\n                else {\r\n                    this._props[name] = val;\r\n                }\r\n                this.trigger('change:' + name, val);\r\n                this.trigger('change', name, val);\r\n            }\r\n            this.trigger('batchChange', changedProps);\r\n        }\r\n    };\r\n    Model.prototype.watch = function (name, depList, startFunc, stopFunc) {\r\n        var _this = this;\r\n        this.unwatch(name);\r\n        this._watchers[name] = this._watchDeps(depList, function (deps) {\r\n            var res = startFunc.call(_this, deps);\r\n            if (res && res.then) {\r\n                _this.unset(name); // put in an unset state while resolving\r\n                res.then(function (val) {\r\n                    _this.set(name, val);\r\n                });\r\n            }\r\n            else {\r\n                _this.set(name, res);\r\n            }\r\n        }, function (deps) {\r\n            _this.unset(name);\r\n            if (stopFunc) {\r\n                stopFunc.call(_this, deps);\r\n            }\r\n        });\r\n    };\r\n    Model.prototype.unwatch = function (name) {\r\n        var watcher = this._watchers[name];\r\n        if (watcher) {\r\n            delete this._watchers[name];\r\n            watcher.teardown();\r\n        }\r\n    };\r\n    Model.prototype._watchDeps = function (depList, startFunc, stopFunc) {\r\n        var _this = this;\r\n        var queuedChangeCnt = 0;\r\n        var depCnt = depList.length;\r\n        var satisfyCnt = 0;\r\n        var values = {}; // what's passed as the `deps` arguments\r\n        var bindTuples = []; // array of [ eventName, handlerFunc ] arrays\r\n        var isCallingStop = false;\r\n        var onBeforeDepChange = function (depName, val, isOptional) {\r\n            queuedChangeCnt++;\r\n            if (queuedChangeCnt === 1) { // first change to cause a \"stop\" ?\r\n                if (satisfyCnt === depCnt) { // all deps previously satisfied?\r\n                    isCallingStop = true;\r\n                    stopFunc(values);\r\n                    isCallingStop = false;\r\n                }\r\n            }\r\n        };\r\n        var onDepChange = function (depName, val, isOptional) {\r\n            if (val === undefined) { // unsetting a value?\r\n                // required dependency that was previously set?\r\n                if (!isOptional && values[depName] !== undefined) {\r\n                    satisfyCnt--;\r\n                }\r\n                delete values[depName];\r\n            }\r\n            else { // setting a value?\r\n                // required dependency that was previously unset?\r\n                if (!isOptional && values[depName] === undefined) {\r\n                    satisfyCnt++;\r\n                }\r\n                values[depName] = val;\r\n            }\r\n            queuedChangeCnt--;\r\n            if (!queuedChangeCnt) { // last change to cause a \"start\"?\r\n                // now finally satisfied or satisfied all along?\r\n                if (satisfyCnt === depCnt) {\r\n                    // if the stopFunc initiated another value change, ignore it.\r\n                    // it will be processed by another change event anyway.\r\n                    if (!isCallingStop) {\r\n                        startFunc(values);\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        // intercept for .on() that remembers handlers\r\n        var bind = function (eventName, handler) {\r\n            _this.on(eventName, handler);\r\n            bindTuples.push([eventName, handler]);\r\n        };\r\n        // listen to dependency changes\r\n        depList.forEach(function (depName) {\r\n            var isOptional = false;\r\n            if (depName.charAt(0) === '?') { // TODO: more DRY\r\n                depName = depName.substring(1);\r\n                isOptional = true;\r\n            }\r\n            bind('before:change:' + depName, function (val) {\r\n                onBeforeDepChange(depName, val, isOptional);\r\n            });\r\n            bind('change:' + depName, function (val) {\r\n                onDepChange(depName, val, isOptional);\r\n            });\r\n        });\r\n        // process current dependency values\r\n        depList.forEach(function (depName) {\r\n            var isOptional = false;\r\n            if (depName.charAt(0) === '?') { // TODO: more DRY\r\n                depName = depName.substring(1);\r\n                isOptional = true;\r\n            }\r\n            if (_this.has(depName)) {\r\n                values[depName] = _this.get(depName);\r\n                satisfyCnt++;\r\n            }\r\n            else if (isOptional) {\r\n                satisfyCnt++;\r\n            }\r\n        });\r\n        // initially satisfied\r\n        if (satisfyCnt === depCnt) {\r\n            startFunc(values);\r\n        }\r\n        return {\r\n            teardown: function () {\r\n                // remove all handlers\r\n                for (var i = 0; i < bindTuples.length; i++) {\r\n                    _this.off(bindTuples[i][0], bindTuples[i][1]);\r\n                }\r\n                bindTuples = null;\r\n                // was satisfied, so call stopFunc\r\n                if (satisfyCnt === depCnt) {\r\n                    stopFunc();\r\n                }\r\n            },\r\n            flash: function () {\r\n                if (satisfyCnt === depCnt) {\r\n                    stopFunc();\r\n                    startFunc(values);\r\n                }\r\n            }\r\n        };\r\n    };\r\n    Model.prototype.flash = function (name) {\r\n        var watcher = this._watchers[name];\r\n        if (watcher) {\r\n            watcher.flash();\r\n        }\r\n    };\r\n    return Model;\r\n}(Class_1.default));\r\nexports.default = Model;\r\nModel.prototype._globalWatchArgs = {}; // mutation protection in Model.watch\r\nEmitterMixin_1.default.mixInto(Model);\r\nListenerMixin_1.default.mixInto(Model);\r\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n  import { default as ParsableModelMixin, ParsableModelInterface } from './ParsableModelMixin'\r\nin class:\r\n  applyProps: ParsableModelInterface['applyProps']\r\n  applyManualStandardProps: ParsableModelInterface['applyManualStandardProps']\r\n  applyMiscProps: ParsableModelInterface['applyMiscProps']\r\n  isStandardProp: ParsableModelInterface['isStandardProp']\r\n  static defineStandardProps = ParsableModelMixin.defineStandardProps\r\n  static copyVerbatimStandardProps = ParsableModelMixin.copyVerbatimStandardProps\r\nafter class:\r\n  ParsableModelMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar ParsableModelMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ParsableModelMixin, _super);\r\n    function ParsableModelMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ParsableModelMixin.defineStandardProps = function (propDefs) {\r\n        var proto = this.prototype;\r\n        if (!proto.hasOwnProperty('standardPropMap')) {\r\n            proto.standardPropMap = Object.create(proto.standardPropMap);\r\n        }\r\n        util_1.copyOwnProps(propDefs, proto.standardPropMap);\r\n    };\r\n    ParsableModelMixin.copyVerbatimStandardProps = function (src, dest) {\r\n        var map = this.prototype.standardPropMap;\r\n        var propName;\r\n        for (propName in map) {\r\n            if (src[propName] != null && // in the src object?\r\n                map[propName] === true // false means \"copy verbatim\"\r\n            ) {\r\n                dest[propName] = src[propName];\r\n            }\r\n        }\r\n    };\r\n    /*\r\n    Returns true/false for success.\r\n    Meant to be only called ONCE, at object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyProps = function (rawProps) {\r\n        var standardPropMap = this.standardPropMap;\r\n        var manualProps = {};\r\n        var miscProps = {};\r\n        var propName;\r\n        for (propName in rawProps) {\r\n            if (standardPropMap[propName] === true) { // copy verbatim\r\n                this[propName] = rawProps[propName];\r\n            }\r\n            else if (standardPropMap[propName] === false) {\r\n                manualProps[propName] = rawProps[propName];\r\n            }\r\n            else {\r\n                miscProps[propName] = rawProps[propName];\r\n            }\r\n        }\r\n        this.applyMiscProps(miscProps);\r\n        return this.applyManualStandardProps(manualProps);\r\n    };\r\n    /*\r\n    If subclasses override, they must call this supermethod and return the boolean response.\r\n    Meant to be only called ONCE, at object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyManualStandardProps = function (rawProps) {\r\n        return true;\r\n    };\r\n    /*\r\n    Can be called even after initial object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyMiscProps = function (rawProps) {\r\n        // subclasses can implement\r\n    };\r\n    /*\r\n    TODO: why is this a method when defineStandardProps is static\r\n    */\r\n    ParsableModelMixin.prototype.isStandardProp = function (propName) {\r\n        return propName in this.standardPropMap;\r\n    };\r\n    return ParsableModelMixin;\r\n}(Mixin_1.default));\r\nexports.default = ParsableModelMixin;\r\nParsableModelMixin.prototype.standardPropMap = {}; // will be cloned by defineStandardProps\r\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventInstance = /** @class */ (function () {\r\n    function EventInstance(def, dateProfile) {\r\n        this.def = def;\r\n        this.dateProfile = dateProfile;\r\n    }\r\n    EventInstance.prototype.toLegacy = function () {\r\n        var dateProfile = this.dateProfile;\r\n        var obj = this.def.toLegacy();\r\n        obj.start = dateProfile.start.clone();\r\n        obj.end = dateProfile.end ? dateProfile.end.clone() : null;\r\n        return obj;\r\n    };\r\n    return EventInstance;\r\n}());\r\nexports.default = EventInstance;\r\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar RecurringEventDef = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RecurringEventDef, _super);\r\n    function RecurringEventDef() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    RecurringEventDef.prototype.isAllDay = function () {\r\n        return !this.startTime && !this.endTime;\r\n    };\r\n    RecurringEventDef.prototype.buildInstances = function (unzonedRange) {\r\n        var calendar = this.source.calendar;\r\n        var unzonedDate = unzonedRange.getStart();\r\n        var unzonedEnd = unzonedRange.getEnd();\r\n        var zonedDayStart;\r\n        var instanceStart;\r\n        var instanceEnd;\r\n        var instances = [];\r\n        while (unzonedDate.isBefore(unzonedEnd)) {\r\n            // if everyday, or this particular day-of-week\r\n            if (!this.dowHash || this.dowHash[unzonedDate.day()]) {\r\n                zonedDayStart = calendar.applyTimezone(unzonedDate);\r\n                instanceStart = zonedDayStart.clone();\r\n                instanceEnd = null;\r\n                if (this.startTime) {\r\n                    instanceStart.time(this.startTime);\r\n                }\r\n                else {\r\n                    instanceStart.stripTime();\r\n                }\r\n                if (this.endTime) {\r\n                    instanceEnd = zonedDayStart.clone().time(this.endTime);\r\n                }\r\n                instances.push(new EventInstance_1.default(this, // definition\r\n                new EventDateProfile_1.default(instanceStart, instanceEnd, calendar)));\r\n            }\r\n            unzonedDate.add(1, 'days');\r\n        }\r\n        return instances;\r\n    };\r\n    RecurringEventDef.prototype.setDow = function (dowNumbers) {\r\n        if (!this.dowHash) {\r\n            this.dowHash = {};\r\n        }\r\n        for (var i = 0; i < dowNumbers.length; i++) {\r\n            this.dowHash[dowNumbers[i]] = true;\r\n        }\r\n    };\r\n    RecurringEventDef.prototype.clone = function () {\r\n        var def = _super.prototype.clone.call(this);\r\n        if (def.startTime) {\r\n            def.startTime = moment.duration(this.startTime);\r\n        }\r\n        if (def.endTime) {\r\n            def.endTime = moment.duration(this.endTime);\r\n        }\r\n        if (this.dowHash) {\r\n            def.dowHash = $.extend({}, this.dowHash);\r\n        }\r\n        return def;\r\n    };\r\n    return RecurringEventDef;\r\n}(EventDef_1.default));\r\nexports.default = RecurringEventDef;\r\n/*\r\nHACK to work with TypeScript mixins\r\nNOTE: if super-method fails, should still attempt to apply\r\n*/\r\nRecurringEventDef.prototype.applyProps = function (rawProps) {\r\n    var superSuccess = EventDef_1.default.prototype.applyProps.call(this, rawProps);\r\n    if (rawProps.start) {\r\n        this.startTime = moment.duration(rawProps.start);\r\n    }\r\n    if (rawProps.end) {\r\n        this.endTime = moment.duration(rawProps.end);\r\n    }\r\n    if (rawProps.dow) {\r\n        this.setDow(rawProps.dow);\r\n    }\r\n    return superSuccess;\r\n};\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nRecurringEventDef.defineStandardProps({\r\n    start: false,\r\n    end: false,\r\n    dow: false\r\n});\r\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator = /** @class */ (function () {\r\n    function DateProfileGenerator(_view) {\r\n        this._view = _view;\r\n    }\r\n    DateProfileGenerator.prototype.opt = function (name) {\r\n        return this._view.opt(name);\r\n    };\r\n    DateProfileGenerator.prototype.trimHiddenDays = function (unzonedRange) {\r\n        return this._view.trimHiddenDays(unzonedRange);\r\n    };\r\n    DateProfileGenerator.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n        return this._view.calendar.msToUtcMoment(ms, forceAllDay);\r\n    };\r\n    /* Date Range Computation\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\r\n    DateProfileGenerator.prototype.buildPrev = function (currentDateProfile) {\r\n        var prevDate = currentDateProfile.date.clone()\r\n            .startOf(currentDateProfile.currentRangeUnit)\r\n            .subtract(currentDateProfile.dateIncrement);\r\n        return this.build(prevDate, -1);\r\n    };\r\n    // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\r\n    DateProfileGenerator.prototype.buildNext = function (currentDateProfile) {\r\n        var nextDate = currentDateProfile.date.clone()\r\n            .startOf(currentDateProfile.currentRangeUnit)\r\n            .add(currentDateProfile.dateIncrement);\r\n        return this.build(nextDate, 1);\r\n    };\r\n    // Builds a structure holding dates/ranges for rendering around the given date.\r\n    // Optional direction param indicates whether the date is being incremented/decremented\r\n    // from its previous value. decremented = -1, incremented = 1 (default).\r\n    DateProfileGenerator.prototype.build = function (date, direction, forceToValid) {\r\n        if (forceToValid === void 0) { forceToValid = false; }\r\n        var isDateAllDay = !date.hasTime();\r\n        var validUnzonedRange;\r\n        var minTime = null;\r\n        var maxTime = null;\r\n        var currentInfo;\r\n        var isRangeAllDay;\r\n        var renderUnzonedRange;\r\n        var activeUnzonedRange;\r\n        var isValid;\r\n        validUnzonedRange = this.buildValidRange();\r\n        validUnzonedRange = this.trimHiddenDays(validUnzonedRange);\r\n        if (forceToValid) {\r\n            date = this.msToUtcMoment(validUnzonedRange.constrainDate(date), // returns MS\r\n            isDateAllDay);\r\n        }\r\n        currentInfo = this.buildCurrentRangeInfo(date, direction);\r\n        isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\r\n        renderUnzonedRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.unzonedRange), currentInfo.unit, isRangeAllDay);\r\n        renderUnzonedRange = this.trimHiddenDays(renderUnzonedRange);\r\n        activeUnzonedRange = renderUnzonedRange.clone();\r\n        if (!this.opt('showNonCurrentDates')) {\r\n            activeUnzonedRange = activeUnzonedRange.intersect(currentInfo.unzonedRange);\r\n        }\r\n        minTime = moment.duration(this.opt('minTime'));\r\n        maxTime = moment.duration(this.opt('maxTime'));\r\n        activeUnzonedRange = this.adjustActiveRange(activeUnzonedRange, minTime, maxTime);\r\n        activeUnzonedRange = activeUnzonedRange.intersect(validUnzonedRange); // might return null\r\n        if (activeUnzonedRange) {\r\n            date = this.msToUtcMoment(activeUnzonedRange.constrainDate(date), // returns MS\r\n            isDateAllDay);\r\n        }\r\n        // it's invalid if the originally requested date is not contained,\r\n        // or if the range is completely outside of the valid range.\r\n        isValid = currentInfo.unzonedRange.intersectsWith(validUnzonedRange);\r\n        return {\r\n            // constraint for where prev/next operations can go and where events can be dragged/resized to.\r\n            // an object with optional start and end properties.\r\n            validUnzonedRange: validUnzonedRange,\r\n            // range the view is formally responsible for.\r\n            // for example, a month view might have 1st-31st, excluding padded dates\r\n            currentUnzonedRange: currentInfo.unzonedRange,\r\n            // name of largest unit being displayed, like \"month\" or \"week\"\r\n            currentRangeUnit: currentInfo.unit,\r\n            isRangeAllDay: isRangeAllDay,\r\n            // dates that display events and accept drag-n-drop\r\n            // will be `null` if no dates accept events\r\n            activeUnzonedRange: activeUnzonedRange,\r\n            // date range with a rendered skeleton\r\n            // includes not-active days that need some sort of DOM\r\n            renderUnzonedRange: renderUnzonedRange,\r\n            // Duration object that denotes the first visible time of any given day\r\n            minTime: minTime,\r\n            // Duration object that denotes the exclusive visible end time of any given day\r\n            maxTime: maxTime,\r\n            isValid: isValid,\r\n            date: date,\r\n            // how far the current date will move for a prev/next operation\r\n            dateIncrement: this.buildDateIncrement(currentInfo.duration)\r\n            // pass a fallback (might be null) ^\r\n        };\r\n    };\r\n    // Builds an object with optional start/end properties.\r\n    // Indicates the minimum/maximum dates to display.\r\n    // not responsible for trimming hidden days.\r\n    DateProfileGenerator.prototype.buildValidRange = function () {\r\n        return this._view.getUnzonedRangeOption('validRange', this._view.calendar.getNow()) ||\r\n            new UnzonedRange_1.default(); // completely open-ended\r\n    };\r\n    // Builds a structure with info about the \"current\" range, the range that is\r\n    // highlighted as being the current month for example.\r\n    // See build() for a description of `direction`.\r\n    // Guaranteed to have `range` and `unit` properties. `duration` is optional.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {\r\n        var viewSpec = this._view.viewSpec;\r\n        var duration = null;\r\n        var unit = null;\r\n        var unzonedRange = null;\r\n        var dayCount;\r\n        if (viewSpec.duration) {\r\n            duration = viewSpec.duration;\r\n            unit = viewSpec.durationUnit;\r\n            unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n        }\r\n        else if ((dayCount = this.opt('dayCount'))) {\r\n            unit = 'day';\r\n            unzonedRange = this.buildRangeFromDayCount(date, direction, dayCount);\r\n        }\r\n        else if ((unzonedRange = this.buildCustomVisibleRange(date))) {\r\n            unit = util_1.computeGreatestUnit(unzonedRange.getStart(), unzonedRange.getEnd());\r\n        }\r\n        else {\r\n            duration = this.getFallbackDuration();\r\n            unit = util_1.computeGreatestUnit(duration);\r\n            unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n        }\r\n        return { duration: duration, unit: unit, unzonedRange: unzonedRange };\r\n    };\r\n    DateProfileGenerator.prototype.getFallbackDuration = function () {\r\n        return moment.duration({ days: 1 });\r\n    };\r\n    // Returns a new activeUnzonedRange to have time values (un-ambiguate)\r\n    // minTime or maxTime causes the range to expand.\r\n    DateProfileGenerator.prototype.adjustActiveRange = function (unzonedRange, minTime, maxTime) {\r\n        var start = unzonedRange.getStart();\r\n        var end = unzonedRange.getEnd();\r\n        if (this._view.usesMinMaxTime) {\r\n            if (minTime < 0) {\r\n                start.time(0).add(minTime);\r\n            }\r\n            if (maxTime > 24 * 60 * 60 * 1000) { // beyond 24 hours?\r\n                end.time(maxTime - (24 * 60 * 60 * 1000));\r\n            }\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Builds the \"current\" range when it is specified as an explicit duration.\r\n    // `unit` is the already-computed computeGreatestUnit value of duration.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {\r\n        var alignment = this.opt('dateAlignment');\r\n        var dateIncrementInput;\r\n        var dateIncrementDuration;\r\n        var start;\r\n        var end;\r\n        var res;\r\n        // compute what the alignment should be\r\n        if (!alignment) {\r\n            dateIncrementInput = this.opt('dateIncrement');\r\n            if (dateIncrementInput) {\r\n                dateIncrementDuration = moment.duration(dateIncrementInput);\r\n                // use the smaller of the two units\r\n                if (dateIncrementDuration < duration) {\r\n                    alignment = util_1.computeDurationGreatestUnit(dateIncrementDuration, dateIncrementInput);\r\n                }\r\n                else {\r\n                    alignment = unit;\r\n                }\r\n            }\r\n            else {\r\n                alignment = unit;\r\n            }\r\n        }\r\n        // if the view displays a single day or smaller\r\n        if (duration.as('days') <= 1) {\r\n            if (this._view.isHiddenDay(start)) {\r\n                start = this._view.skipHiddenDays(start, direction);\r\n                start.startOf('day');\r\n            }\r\n        }\r\n        function computeRes() {\r\n            start = date.clone().startOf(alignment);\r\n            end = start.clone().add(duration);\r\n            res = new UnzonedRange_1.default(start, end);\r\n        }\r\n        computeRes();\r\n        // if range is completely enveloped by hidden days, go past the hidden days\r\n        if (!this.trimHiddenDays(res)) {\r\n            date = this._view.skipHiddenDays(date, direction);\r\n            computeRes();\r\n        }\r\n        return res;\r\n    };\r\n    // Builds the \"current\" range when a dayCount is specified.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {\r\n        var customAlignment = this.opt('dateAlignment');\r\n        var runningCount = 0;\r\n        var start;\r\n        var end;\r\n        if (customAlignment || direction !== -1) {\r\n            start = date.clone();\r\n            if (customAlignment) {\r\n                start.startOf(customAlignment);\r\n            }\r\n            start.startOf('day');\r\n            start = this._view.skipHiddenDays(start);\r\n            end = start.clone();\r\n            do {\r\n                end.add(1, 'day');\r\n                if (!this._view.isHiddenDay(end)) {\r\n                    runningCount++;\r\n                }\r\n            } while (runningCount < dayCount);\r\n        }\r\n        else {\r\n            end = date.clone().startOf('day').add(1, 'day');\r\n            end = this._view.skipHiddenDays(end, -1, true);\r\n            start = end.clone();\r\n            do {\r\n                start.add(-1, 'day');\r\n                if (!this._view.isHiddenDay(start)) {\r\n                    runningCount++;\r\n                }\r\n            } while (runningCount < dayCount);\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Builds a normalized range object for the \"visible\" range,\r\n    // which is a way to define the currentUnzonedRange and activeUnzonedRange at the same time.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {\r\n        var visibleUnzonedRange = this._view.getUnzonedRangeOption('visibleRange', this._view.calendar.applyTimezone(date) // correct zone. also generates new obj that avoids mutations\r\n        );\r\n        if (visibleUnzonedRange && (visibleUnzonedRange.startMs == null || visibleUnzonedRange.endMs == null)) {\r\n            return null;\r\n        }\r\n        return visibleUnzonedRange;\r\n    };\r\n    // Computes the range that will represent the element/cells for *rendering*,\r\n    // but which may have voided days/times.\r\n    // not responsible for trimming hidden days.\r\n    DateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        return currentUnzonedRange.clone();\r\n    };\r\n    // Compute the duration value that should be added/substracted to the current date\r\n    // when a prev/next operation happens.\r\n    DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {\r\n        var dateIncrementInput = this.opt('dateIncrement');\r\n        var customAlignment;\r\n        if (dateIncrementInput) {\r\n            return moment.duration(dateIncrementInput);\r\n        }\r\n        else if ((customAlignment = this.opt('dateAlignment'))) {\r\n            return moment.duration(1, customAlignment);\r\n        }\r\n        else if (fallback) {\r\n            return fallback;\r\n        }\r\n        else {\r\n            return moment.duration({ days: 1 });\r\n        }\r\n    };\r\n    return DateProfileGenerator;\r\n}());\r\nexports.default = DateProfileGenerator;\r\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar ArrayEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ArrayEventSource, _super);\r\n    function ArrayEventSource(calendar) {\r\n        var _this = _super.call(this, calendar) || this;\r\n        _this.eventDefs = []; // for if setRawEventDefs is never called\r\n        return _this;\r\n    }\r\n    ArrayEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if ($.isArray(rawInput.events)) { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if ($.isArray(rawInput)) { // short form\r\n            rawProps = { events: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    ArrayEventSource.prototype.setRawEventDefs = function (rawEventDefs) {\r\n        this.rawEventDefs = rawEventDefs;\r\n        this.eventDefs = this.parseEventDefs(rawEventDefs);\r\n    };\r\n    ArrayEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var eventDefs = this.eventDefs;\r\n        var i;\r\n        if (this.currentTimezone != null &&\r\n            this.currentTimezone !== timezone) {\r\n            for (i = 0; i < eventDefs.length; i++) {\r\n                if (eventDefs[i] instanceof SingleEventDef_1.default) {\r\n                    eventDefs[i].rezone();\r\n                }\r\n            }\r\n        }\r\n        this.currentTimezone = timezone;\r\n        return Promise_1.default.resolve(eventDefs);\r\n    };\r\n    ArrayEventSource.prototype.addEventDef = function (eventDef) {\r\n        this.eventDefs.push(eventDef);\r\n    };\r\n    /*\r\n    eventDefId already normalized to a string\r\n    */\r\n    ArrayEventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n        return util_1.removeMatching(this.eventDefs, function (eventDef) {\r\n            return eventDef.id === eventDefId;\r\n        });\r\n    };\r\n    ArrayEventSource.prototype.removeAllEventDefs = function () {\r\n        this.eventDefs = [];\r\n    };\r\n    ArrayEventSource.prototype.getPrimitive = function () {\r\n        return this.rawEventDefs;\r\n    };\r\n    ArrayEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        this.setRawEventDefs(rawProps.events);\r\n        return superSuccess;\r\n    };\r\n    return ArrayEventSource;\r\n}(EventSource_1.default));\r\nexports.default = ArrayEventSource;\r\nArrayEventSource.defineStandardProps({\r\n    events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar themeClassHash = {};\r\nfunction defineThemeSystem(themeName, themeClass) {\r\n    themeClassHash[themeName] = themeClass;\r\n}\r\nexports.defineThemeSystem = defineThemeSystem;\r\nfunction getThemeSystemClass(themeSetting) {\r\n    if (!themeSetting) {\r\n        return StandardTheme_1.default;\r\n    }\r\n    else if (themeSetting === true) {\r\n        return JqueryUiTheme_1.default;\r\n    }\r\n    else {\r\n        return themeClassHash[themeSetting];\r\n    }\r\n}\r\nexports.getThemeSystemClass = getThemeSystemClass;\r\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/*\r\nA cache for the left/right/top/bottom/width/height values for one or more elements.\r\nWorks with both offset (from topleft document) and position (from offsetParent).\r\n\noptions:\r\n- els\r\n- isHorizontal\r\n- isVertical\r\n*/\r\nvar CoordCache = /** @class */ (function () {\r\n    function CoordCache(options) {\r\n        this.isHorizontal = false; // whether to query for left/right/width\r\n        this.isVertical = false; // whether to query for top/bottom/height\r\n        this.els = $(options.els);\r\n        this.isHorizontal = options.isHorizontal;\r\n        this.isVertical = options.isVertical;\r\n        this.forcedOffsetParentEl = options.offsetParent ? $(options.offsetParent) : null;\r\n    }\r\n    // Queries the els for coordinates and stores them.\r\n    // Call this method before using and of the get* methods below.\r\n    CoordCache.prototype.build = function () {\r\n        var offsetParentEl = this.forcedOffsetParentEl;\r\n        if (!offsetParentEl && this.els.length > 0) {\r\n            offsetParentEl = this.els.eq(0).offsetParent();\r\n        }\r\n        this.origin = offsetParentEl ?\r\n            offsetParentEl.offset() :\r\n            null;\r\n        this.boundingRect = this.queryBoundingRect();\r\n        if (this.isHorizontal) {\r\n            this.buildElHorizontals();\r\n        }\r\n        if (this.isVertical) {\r\n            this.buildElVerticals();\r\n        }\r\n    };\r\n    // Destroys all internal data about coordinates, freeing memory\r\n    CoordCache.prototype.clear = function () {\r\n        this.origin = null;\r\n        this.boundingRect = null;\r\n        this.lefts = null;\r\n        this.rights = null;\r\n        this.tops = null;\r\n        this.bottoms = null;\r\n    };\r\n    // When called, if coord caches aren't built, builds them\r\n    CoordCache.prototype.ensureBuilt = function () {\r\n        if (!this.origin) {\r\n            this.build();\r\n        }\r\n    };\r\n    // Populates the left/right internal coordinate arrays\r\n    CoordCache.prototype.buildElHorizontals = function () {\r\n        var lefts = [];\r\n        var rights = [];\r\n        this.els.each(function (i, node) {\r\n            var el = $(node);\r\n            var left = el.offset().left;\r\n            var width = el.outerWidth();\r\n            lefts.push(left);\r\n            rights.push(left + width);\r\n        });\r\n        this.lefts = lefts;\r\n        this.rights = rights;\r\n    };\r\n    // Populates the top/bottom internal coordinate arrays\r\n    CoordCache.prototype.buildElVerticals = function () {\r\n        var tops = [];\r\n        var bottoms = [];\r\n        this.els.each(function (i, node) {\r\n            var el = $(node);\r\n            var top = el.offset().top;\r\n            var height = el.outerHeight();\r\n            tops.push(top);\r\n            bottoms.push(top + height);\r\n        });\r\n        this.tops = tops;\r\n        this.bottoms = bottoms;\r\n    };\r\n    // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\r\n    // If no intersection is made, returns undefined.\r\n    CoordCache.prototype.getHorizontalIndex = function (leftOffset) {\r\n        this.ensureBuilt();\r\n        var lefts = this.lefts;\r\n        var rights = this.rights;\r\n        var len = lefts.length;\r\n        var i;\r\n        for (i = 0; i < len; i++) {\r\n            if (leftOffset >= lefts[i] && leftOffset < rights[i]) {\r\n                return i;\r\n            }\r\n        }\r\n    };\r\n    // Given a top offset (from document top), returns the index of the el that it vertically intersects.\r\n    // If no intersection is made, returns undefined.\r\n    CoordCache.prototype.getVerticalIndex = function (topOffset) {\r\n        this.ensureBuilt();\r\n        var tops = this.tops;\r\n        var bottoms = this.bottoms;\r\n        var len = tops.length;\r\n        var i;\r\n        for (i = 0; i < len; i++) {\r\n            if (topOffset >= tops[i] && topOffset < bottoms[i]) {\r\n                return i;\r\n            }\r\n        }\r\n    };\r\n    // Gets the left offset (from document left) of the element at the given index\r\n    CoordCache.prototype.getLeftOffset = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.lefts[leftIndex];\r\n    };\r\n    // Gets the left position (from offsetParent left) of the element at the given index\r\n    CoordCache.prototype.getLeftPosition = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.lefts[leftIndex] - this.origin.left;\r\n    };\r\n    // Gets the right offset (from document left) of the element at the given index.\r\n    // This value is NOT relative to the document's right edge, like the CSS concept of \"right\" would be.\r\n    CoordCache.prototype.getRightOffset = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex];\r\n    };\r\n    // Gets the right position (from offsetParent left) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's right edge, like the CSS concept of \"right\" would be.\r\n    CoordCache.prototype.getRightPosition = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex] - this.origin.left;\r\n    };\r\n    // Gets the width of the element at the given index\r\n    CoordCache.prototype.getWidth = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex] - this.lefts[leftIndex];\r\n    };\r\n    // Gets the top offset (from document top) of the element at the given index\r\n    CoordCache.prototype.getTopOffset = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.tops[topIndex];\r\n    };\r\n    // Gets the top position (from offsetParent top) of the element at the given position\r\n    CoordCache.prototype.getTopPosition = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.tops[topIndex] - this.origin.top;\r\n    };\r\n    // Gets the bottom offset (from the document top) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n    CoordCache.prototype.getBottomOffset = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex];\r\n    };\r\n    // Gets the bottom position (from the offsetParent top) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n    CoordCache.prototype.getBottomPosition = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex] - this.origin.top;\r\n    };\r\n    // Gets the height of the element at the given index\r\n    CoordCache.prototype.getHeight = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex] - this.tops[topIndex];\r\n    };\r\n    // Bounding Rect\r\n    // TODO: decouple this from CoordCache\r\n    // Compute and return what the elements' bounding rectangle is, from the user's perspective.\r\n    // Right now, only returns a rectangle if constrained by an overflow:scroll element.\r\n    // Returns null if there are no elements\r\n    CoordCache.prototype.queryBoundingRect = function () {\r\n        var scrollParentEl;\r\n        if (this.els.length > 0) {\r\n            scrollParentEl = util_1.getScrollParent(this.els.eq(0));\r\n            if (!scrollParentEl.is(document) &&\r\n                !scrollParentEl.is('html,body') // don't consider these bounding rects. solves issue 3615\r\n            ) {\r\n                return util_1.getClientRect(scrollParentEl);\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    CoordCache.prototype.isPointInBounds = function (leftOffset, topOffset) {\r\n        return this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset);\r\n    };\r\n    CoordCache.prototype.isLeftInBounds = function (leftOffset) {\r\n        return !this.boundingRect || (leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right);\r\n    };\r\n    CoordCache.prototype.isTopInBounds = function (topOffset) {\r\n        return !this.boundingRect || (topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom);\r\n    };\r\n    return CoordCache;\r\n}());\r\nexports.default = CoordCache;\r\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\n/* Tracks a drag's mouse movement, firing various handlers\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// TODO: use Emitter\r\nvar DragListener = /** @class */ (function () {\r\n    function DragListener(options) {\r\n        this.isInteracting = false;\r\n        this.isDistanceSurpassed = false;\r\n        this.isDelayEnded = false;\r\n        this.isDragging = false;\r\n        this.isTouch = false;\r\n        this.isGeneric = false; // initiated by 'dragstart' (jqui)\r\n        this.shouldCancelTouchScroll = true;\r\n        this.scrollAlwaysKills = false;\r\n        this.isAutoScroll = false;\r\n        // defaults\r\n        this.scrollSensitivity = 30; // pixels from edge for scrolling to start\r\n        this.scrollSpeed = 200; // pixels per second, at maximum speed\r\n        this.scrollIntervalMs = 50; // millisecond wait between scroll increment\r\n        this.options = options || {};\r\n    }\r\n    // Interaction (high-level)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.startInteraction = function (ev, extraOptions) {\r\n        if (extraOptions === void 0) { extraOptions = {}; }\r\n        if (ev.type === 'mousedown') {\r\n            if (GlobalEmitter_1.default.get().shouldIgnoreMouse()) {\r\n                return;\r\n            }\r\n            else if (!util_1.isPrimaryMouseButton(ev)) {\r\n                return;\r\n            }\r\n            else {\r\n                ev.preventDefault(); // prevents native selection in most browsers\r\n            }\r\n        }\r\n        if (!this.isInteracting) {\r\n            // process options\r\n            this.delay = util_1.firstDefined(extraOptions.delay, this.options.delay, 0);\r\n            this.minDistance = util_1.firstDefined(extraOptions.distance, this.options.distance, 0);\r\n            this.subjectEl = this.options.subjectEl;\r\n            util_1.preventSelection($('body'));\r\n            this.isInteracting = true;\r\n            this.isTouch = util_1.getEvIsTouch(ev);\r\n            this.isGeneric = ev.type === 'dragstart';\r\n            this.isDelayEnded = false;\r\n            this.isDistanceSurpassed = false;\r\n            this.originX = util_1.getEvX(ev);\r\n            this.originY = util_1.getEvY(ev);\r\n            this.scrollEl = util_1.getScrollParent($(ev.target));\r\n            this.bindHandlers();\r\n            this.initAutoScroll();\r\n            this.handleInteractionStart(ev);\r\n            this.startDelay(ev);\r\n            if (!this.minDistance) {\r\n                this.handleDistanceSurpassed(ev);\r\n            }\r\n        }\r\n    };\r\n    DragListener.prototype.handleInteractionStart = function (ev) {\r\n        this.trigger('interactionStart', ev);\r\n    };\r\n    DragListener.prototype.endInteraction = function (ev, isCancelled) {\r\n        if (this.isInteracting) {\r\n            this.endDrag(ev);\r\n            if (this.delayTimeoutId) {\r\n                clearTimeout(this.delayTimeoutId);\r\n                this.delayTimeoutId = null;\r\n            }\r\n            this.destroyAutoScroll();\r\n            this.unbindHandlers();\r\n            this.isInteracting = false;\r\n            this.handleInteractionEnd(ev, isCancelled);\r\n            util_1.allowSelection($('body'));\r\n        }\r\n    };\r\n    DragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n        this.trigger('interactionEnd', ev, isCancelled || false);\r\n    };\r\n    // Binding To DOM\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.bindHandlers = function () {\r\n        // some browsers (Safari in iOS 10) don't allow preventDefault on touch events that are bound after touchstart,\r\n        // so listen to the GlobalEmitter singleton, which is always bound, instead of the document directly.\r\n        var globalEmitter = GlobalEmitter_1.default.get();\r\n        if (this.isGeneric) {\r\n            this.listenTo($(document), {\r\n                drag: this.handleMove,\r\n                dragstop: this.endInteraction\r\n            });\r\n        }\r\n        else if (this.isTouch) {\r\n            this.listenTo(globalEmitter, {\r\n                touchmove: this.handleTouchMove,\r\n                touchend: this.endInteraction,\r\n                scroll: this.handleTouchScroll\r\n            });\r\n        }\r\n        else {\r\n            this.listenTo(globalEmitter, {\r\n                mousemove: this.handleMouseMove,\r\n                mouseup: this.endInteraction\r\n            });\r\n        }\r\n        this.listenTo(globalEmitter, {\r\n            selectstart: util_1.preventDefault,\r\n            contextmenu: util_1.preventDefault // long taps would open menu on Chrome dev tools\r\n        });\r\n    };\r\n    DragListener.prototype.unbindHandlers = function () {\r\n        this.stopListeningTo(GlobalEmitter_1.default.get());\r\n        this.stopListeningTo($(document)); // for isGeneric\r\n    };\r\n    // Drag (high-level)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // extraOptions ignored if drag already started\r\n    DragListener.prototype.startDrag = function (ev, extraOptions) {\r\n        this.startInteraction(ev, extraOptions); // ensure interaction began\r\n        if (!this.isDragging) {\r\n            this.isDragging = true;\r\n            this.handleDragStart(ev);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDragStart = function (ev) {\r\n        this.trigger('dragStart', ev);\r\n    };\r\n    DragListener.prototype.handleMove = function (ev) {\r\n        var dx = util_1.getEvX(ev) - this.originX;\r\n        var dy = util_1.getEvY(ev) - this.originY;\r\n        var minDistance = this.minDistance;\r\n        var distanceSq; // current distance from the origin, squared\r\n        if (!this.isDistanceSurpassed) {\r\n            distanceSq = dx * dx + dy * dy;\r\n            if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\r\n                this.handleDistanceSurpassed(ev);\r\n            }\r\n        }\r\n        if (this.isDragging) {\r\n            this.handleDrag(dx, dy, ev);\r\n        }\r\n    };\r\n    // Called while the mouse is being moved and when we know a legitimate drag is taking place\r\n    DragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n        this.trigger('drag', dx, dy, ev);\r\n        this.updateAutoScroll(ev); // will possibly cause scrolling\r\n    };\r\n    DragListener.prototype.endDrag = function (ev) {\r\n        if (this.isDragging) {\r\n            this.isDragging = false;\r\n            this.handleDragEnd(ev);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDragEnd = function (ev) {\r\n        this.trigger('dragEnd', ev);\r\n    };\r\n    // Delay\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.startDelay = function (initialEv) {\r\n        var _this = this;\r\n        if (this.delay) {\r\n            this.delayTimeoutId = setTimeout(function () {\r\n                _this.handleDelayEnd(initialEv);\r\n            }, this.delay);\r\n        }\r\n        else {\r\n            this.handleDelayEnd(initialEv);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDelayEnd = function (initialEv) {\r\n        this.isDelayEnded = true;\r\n        if (this.isDistanceSurpassed) {\r\n            this.startDrag(initialEv);\r\n        }\r\n    };\r\n    // Distance\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleDistanceSurpassed = function (ev) {\r\n        this.isDistanceSurpassed = true;\r\n        if (this.isDelayEnded) {\r\n            this.startDrag(ev);\r\n        }\r\n    };\r\n    // Mouse / Touch\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleTouchMove = function (ev) {\r\n        // prevent inertia and touchmove-scrolling while dragging\r\n        if (this.isDragging && this.shouldCancelTouchScroll) {\r\n            ev.preventDefault();\r\n        }\r\n        this.handleMove(ev);\r\n    };\r\n    DragListener.prototype.handleMouseMove = function (ev) {\r\n        this.handleMove(ev);\r\n    };\r\n    // Scrolling (unrelated to auto-scroll)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleTouchScroll = function (ev) {\r\n        // if the drag is being initiated by touch, but a scroll happens before\r\n        // the drag-initiating delay is over, cancel the drag\r\n        if (!this.isDragging || this.scrollAlwaysKills) {\r\n            this.endInteraction(ev, true); // isCancelled=true\r\n        }\r\n    };\r\n    // Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Triggers a callback. Calls a function in the option hash of the same name.\r\n    // Arguments beyond the first `name` are forwarded on.\r\n    DragListener.prototype.trigger = function (name) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        if (this.options[name]) {\r\n            this.options[name].apply(this, args);\r\n        }\r\n        // makes _methods callable by event name. TODO: kill this\r\n        if (this['_' + name]) {\r\n            this['_' + name].apply(this, args);\r\n        }\r\n    };\r\n    // Auto-scroll\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.initAutoScroll = function () {\r\n        var scrollEl = this.scrollEl;\r\n        this.isAutoScroll =\r\n            this.options.scroll &&\r\n                scrollEl &&\r\n                !scrollEl.is(window) &&\r\n                !scrollEl.is(document);\r\n        if (this.isAutoScroll) {\r\n            // debounce makes sure rapid calls don't happen\r\n            this.listenTo(scrollEl, 'scroll', util_1.debounce(this.handleDebouncedScroll, 100));\r\n        }\r\n    };\r\n    DragListener.prototype.destroyAutoScroll = function () {\r\n        this.endAutoScroll(); // kill any animation loop\r\n        // remove the scroll handler if there is a scrollEl\r\n        if (this.isAutoScroll) {\r\n            this.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(\r\n        }\r\n    };\r\n    // Computes and stores the bounding rectangle of scrollEl\r\n    DragListener.prototype.computeScrollBounds = function () {\r\n        if (this.isAutoScroll) {\r\n            this.scrollBounds = util_1.getOuterRect(this.scrollEl);\r\n            // TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars\r\n        }\r\n    };\r\n    // Called when the dragging is in progress and scrolling should be updated\r\n    DragListener.prototype.updateAutoScroll = function (ev) {\r\n        var sensitivity = this.scrollSensitivity;\r\n        var bounds = this.scrollBounds;\r\n        var topCloseness;\r\n        var bottomCloseness;\r\n        var leftCloseness;\r\n        var rightCloseness;\r\n        var topVel = 0;\r\n        var leftVel = 0;\r\n        if (bounds) { // only scroll if scrollEl exists\r\n            // compute closeness to edges. valid range is from 0.0 - 1.0\r\n            topCloseness = (sensitivity - (util_1.getEvY(ev) - bounds.top)) / sensitivity;\r\n            bottomCloseness = (sensitivity - (bounds.bottom - util_1.getEvY(ev))) / sensitivity;\r\n            leftCloseness = (sensitivity - (util_1.getEvX(ev) - bounds.left)) / sensitivity;\r\n            rightCloseness = (sensitivity - (bounds.right - util_1.getEvX(ev))) / sensitivity;\r\n            // translate vertical closeness into velocity.\r\n            // mouse must be completely in bounds for velocity to happen.\r\n            if (topCloseness >= 0 && topCloseness <= 1) {\r\n                topVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up\r\n            }\r\n            else if (bottomCloseness >= 0 && bottomCloseness <= 1) {\r\n                topVel = bottomCloseness * this.scrollSpeed;\r\n            }\r\n            // translate horizontal closeness into velocity\r\n            if (leftCloseness >= 0 && leftCloseness <= 1) {\r\n                leftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left\r\n            }\r\n            else if (rightCloseness >= 0 && rightCloseness <= 1) {\r\n                leftVel = rightCloseness * this.scrollSpeed;\r\n            }\r\n        }\r\n        this.setScrollVel(topVel, leftVel);\r\n    };\r\n    // Sets the speed-of-scrolling for the scrollEl\r\n    DragListener.prototype.setScrollVel = function (topVel, leftVel) {\r\n        this.scrollTopVel = topVel;\r\n        this.scrollLeftVel = leftVel;\r\n        this.constrainScrollVel(); // massages into realistic values\r\n        // if there is non-zero velocity, and an animation loop hasn't already started, then START\r\n        if ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {\r\n            this.scrollIntervalId = setInterval(util_1.proxy(this, 'scrollIntervalFunc'), // scope to `this`\r\n            this.scrollIntervalMs);\r\n        }\r\n    };\r\n    // Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way\r\n    DragListener.prototype.constrainScrollVel = function () {\r\n        var el = this.scrollEl;\r\n        if (this.scrollTopVel < 0) { // scrolling up?\r\n            if (el.scrollTop() <= 0) { // already scrolled all the way up?\r\n                this.scrollTopVel = 0;\r\n            }\r\n        }\r\n        else if (this.scrollTopVel > 0) { // scrolling down?\r\n            if (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) { // already scrolled all the way down?\r\n                this.scrollTopVel = 0;\r\n            }\r\n        }\r\n        if (this.scrollLeftVel < 0) { // scrolling left?\r\n            if (el.scrollLeft() <= 0) { // already scrolled all the left?\r\n                this.scrollLeftVel = 0;\r\n            }\r\n        }\r\n        else if (this.scrollLeftVel > 0) { // scrolling right?\r\n            if (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) { // already scrolled all the way right?\r\n                this.scrollLeftVel = 0;\r\n            }\r\n        }\r\n    };\r\n    // This function gets called during every iteration of the scrolling animation loop\r\n    DragListener.prototype.scrollIntervalFunc = function () {\r\n        var el = this.scrollEl;\r\n        var frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by\r\n        // change the value of scrollEl's scroll\r\n        if (this.scrollTopVel) {\r\n            el.scrollTop(el.scrollTop() + this.scrollTopVel * frac);\r\n        }\r\n        if (this.scrollLeftVel) {\r\n            el.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);\r\n        }\r\n        this.constrainScrollVel(); // since the scroll values changed, recompute the velocities\r\n        // if scrolled all the way, which causes the vels to be zero, stop the animation loop\r\n        if (!this.scrollTopVel && !this.scrollLeftVel) {\r\n            this.endAutoScroll();\r\n        }\r\n    };\r\n    // Kills any existing scrolling animation loop\r\n    DragListener.prototype.endAutoScroll = function () {\r\n        if (this.scrollIntervalId) {\r\n            clearInterval(this.scrollIntervalId);\r\n            this.scrollIntervalId = null;\r\n            this.handleScrollEnd();\r\n        }\r\n    };\r\n    // Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)\r\n    DragListener.prototype.handleDebouncedScroll = function () {\r\n        // recompute all coordinates, but *only* if this is *not* part of our scrolling animation\r\n        if (!this.scrollIntervalId) {\r\n            this.handleScrollEnd();\r\n        }\r\n    };\r\n    DragListener.prototype.handleScrollEnd = function () {\r\n        // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n    };\r\n    return DragListener;\r\n}());\r\nexports.default = DragListener;\r\nListenerMixin_1.default.mixInto(DragListener);\r\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\n/*\r\nA set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.\r\nPrerequisite: the object being mixed into needs to be a *Grid*\r\n*/\r\nvar DayTableMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayTableMixin, _super);\r\n    function DayTableMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Populates internal variables used for date calculation and rendering\r\n    DayTableMixin.prototype.updateDayTable = function () {\r\n        var t = this;\r\n        var view = t.view;\r\n        var calendar = view.calendar;\r\n        var date = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.startMs, true);\r\n        var end = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.endMs, true);\r\n        var dayIndex = -1;\r\n        var dayIndices = [];\r\n        var dayDates = [];\r\n        var daysPerRow;\r\n        var firstDay;\r\n        var rowCnt;\r\n        while (date.isBefore(end)) { // loop each day from start to end\r\n            if (view.isHiddenDay(date)) {\r\n                dayIndices.push(dayIndex + 0.5); // mark that it's between indices\r\n            }\r\n            else {\r\n                dayIndex++;\r\n                dayIndices.push(dayIndex);\r\n                dayDates.push(date.clone());\r\n            }\r\n            date.add(1, 'days');\r\n        }\r\n        if (this.breakOnWeeks) {\r\n            // count columns until the day-of-week repeats\r\n            firstDay = dayDates[0].day();\r\n            for (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {\r\n                if (dayDates[daysPerRow].day() === firstDay) {\r\n                    break;\r\n                }\r\n            }\r\n            rowCnt = Math.ceil(dayDates.length / daysPerRow);\r\n        }\r\n        else {\r\n            rowCnt = 1;\r\n            daysPerRow = dayDates.length;\r\n        }\r\n        this.dayDates = dayDates;\r\n        this.dayIndices = dayIndices;\r\n        this.daysPerRow = daysPerRow;\r\n        this.rowCnt = rowCnt;\r\n        this.updateDayTableCols();\r\n    };\r\n    // Computes and assigned the colCnt property and updates any options that may be computed from it\r\n    DayTableMixin.prototype.updateDayTableCols = function () {\r\n        this.colCnt = this.computeColCnt();\r\n        this.colHeadFormat =\r\n            this.opt('columnHeaderFormat') ||\r\n                this.opt('columnFormat') || // deprecated\r\n                this.computeColHeadFormat();\r\n    };\r\n    // Determines how many columns there should be in the table\r\n    DayTableMixin.prototype.computeColCnt = function () {\r\n        return this.daysPerRow;\r\n    };\r\n    // Computes the ambiguously-timed moment for the given cell\r\n    DayTableMixin.prototype.getCellDate = function (row, col) {\r\n        return this.dayDates[this.getCellDayIndex(row, col)].clone();\r\n    };\r\n    // Computes the ambiguously-timed date range for the given cell\r\n    DayTableMixin.prototype.getCellRange = function (row, col) {\r\n        var start = this.getCellDate(row, col);\r\n        var end = start.clone().add(1, 'days');\r\n        return { start: start, end: end };\r\n    };\r\n    // Returns the number of day cells, chronologically, from the first of the grid (0-based)\r\n    DayTableMixin.prototype.getCellDayIndex = function (row, col) {\r\n        return row * this.daysPerRow + this.getColDayIndex(col);\r\n    };\r\n    // Returns the numner of day cells, chronologically, from the first cell in *any given row*\r\n    DayTableMixin.prototype.getColDayIndex = function (col) {\r\n        if (this.isRTL) {\r\n            return this.colCnt - 1 - col;\r\n        }\r\n        else {\r\n            return col;\r\n        }\r\n    };\r\n    // Given a date, returns its chronolocial cell-index from the first cell of the grid.\r\n    // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\r\n    // If before the first offset, returns a negative number.\r\n    // If after the last offset, returns an offset past the last cell offset.\r\n    // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\r\n    DayTableMixin.prototype.getDateDayIndex = function (date) {\r\n        var dayIndices = this.dayIndices;\r\n        var dayOffset = date.diff(this.dayDates[0], 'days');\r\n        if (dayOffset < 0) {\r\n            return dayIndices[0] - 1;\r\n        }\r\n        else if (dayOffset >= dayIndices.length) {\r\n            return dayIndices[dayIndices.length - 1] + 1;\r\n        }\r\n        else {\r\n            return dayIndices[dayOffset];\r\n        }\r\n    };\r\n    /* Options\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes a default column header formatting string if `colFormat` is not explicitly defined\r\n    DayTableMixin.prototype.computeColHeadFormat = function () {\r\n        // if more than one week row, or if there are a lot of columns with not much space,\r\n        // put just the day numbers will be in each cell\r\n        if (this.rowCnt > 1 || this.colCnt > 10) {\r\n            return 'ddd'; // \"Sat\"\r\n        }\r\n        else if (this.colCnt > 1) {\r\n            return this.opt('dayOfMonthFormat'); // \"Sat 12/10\"\r\n        }\r\n        else {\r\n            return 'dddd'; // \"Saturday\"\r\n        }\r\n    };\r\n    /* Slicing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Slices up a date range into a segment for every week-row it intersects with\r\n    DayTableMixin.prototype.sliceRangeByRow = function (unzonedRange) {\r\n        var daysPerRow = this.daysPerRow;\r\n        var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n        var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n        var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n        var segs = [];\r\n        var row;\r\n        var rowFirst;\r\n        var rowLast; // inclusive day-index range for current row\r\n        var segFirst;\r\n        var segLast; // inclusive day-index range for segment\r\n        for (row = 0; row < this.rowCnt; row++) {\r\n            rowFirst = row * daysPerRow;\r\n            rowLast = rowFirst + daysPerRow - 1;\r\n            // intersect segment's offset range with the row's\r\n            segFirst = Math.max(rangeFirst, rowFirst);\r\n            segLast = Math.min(rangeLast, rowLast);\r\n            // deal with in-between indices\r\n            segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n            segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n            if (segFirst <= segLast) { // was there any intersection with the current row?\r\n                segs.push({\r\n                    row: row,\r\n                    // normalize to start of row\r\n                    firstRowDayIndex: segFirst - rowFirst,\r\n                    lastRowDayIndex: segLast - rowFirst,\r\n                    // must be matching integers to be the segment's start/end\r\n                    isStart: segFirst === rangeFirst,\r\n                    isEnd: segLast === rangeLast\r\n                });\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    // Slices up a date range into a segment for every day-cell it intersects with.\r\n    // TODO: make more DRY with sliceRangeByRow somehow.\r\n    DayTableMixin.prototype.sliceRangeByDay = function (unzonedRange) {\r\n        var daysPerRow = this.daysPerRow;\r\n        var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n        var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n        var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n        var segs = [];\r\n        var row;\r\n        var rowFirst;\r\n        var rowLast; // inclusive day-index range for current row\r\n        var i;\r\n        var segFirst;\r\n        var segLast; // inclusive day-index range for segment\r\n        for (row = 0; row < this.rowCnt; row++) {\r\n            rowFirst = row * daysPerRow;\r\n            rowLast = rowFirst + daysPerRow - 1;\r\n            for (i = rowFirst; i <= rowLast; i++) {\r\n                // intersect segment's offset range with the row's\r\n                segFirst = Math.max(rangeFirst, i);\r\n                segLast = Math.min(rangeLast, i);\r\n                // deal with in-between indices\r\n                segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n                segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n                if (segFirst <= segLast) { // was there any intersection with the current row?\r\n                    segs.push({\r\n                        row: row,\r\n                        // normalize to start of row\r\n                        firstRowDayIndex: segFirst - rowFirst,\r\n                        lastRowDayIndex: segLast - rowFirst,\r\n                        // must be matching integers to be the segment's start/end\r\n                        isStart: segFirst === rangeFirst,\r\n                        isEnd: segLast === rangeLast\r\n                    });\r\n                }\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Header Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderHeadHtml = function () {\r\n        var theme = this.view.calendar.theme;\r\n        return '' +\r\n            '<div class=\"fc-row ' + theme.getClass('headerRow') + '\">' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            '<thead>' +\r\n            this.renderHeadTrHtml() +\r\n            '</thead>' +\r\n            '</table>' +\r\n            '</div>';\r\n    };\r\n    DayTableMixin.prototype.renderHeadIntroHtml = function () {\r\n        return this.renderIntroHtml(); // fall back to generic\r\n    };\r\n    DayTableMixin.prototype.renderHeadTrHtml = function () {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderHeadIntroHtml()) +\r\n            this.renderHeadDateCellsHtml() +\r\n            (this.isRTL ? this.renderHeadIntroHtml() : '') +\r\n            '</tr>';\r\n    };\r\n    DayTableMixin.prototype.renderHeadDateCellsHtml = function () {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(0, col);\r\n            htmls.push(this.renderHeadDateCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    // TODO: when internalApiVersion, accept an object for HTML attributes\r\n    // (colspan should be no different)\r\n    DayTableMixin.prototype.renderHeadDateCellHtml = function (date, colspan, otherAttrs) {\r\n        var t = this;\r\n        var view = t.view;\r\n        var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var classNames = [\r\n            'fc-day-header',\r\n            view.calendar.theme.getClass('widgetHeader')\r\n        ];\r\n        var innerHtml;\r\n        if (typeof t.opt('columnHeaderHtml') === 'function') {\r\n            innerHtml = t.opt('columnHeaderHtml')(date);\r\n        }\r\n        else if (typeof t.opt('columnHeaderText') === 'function') {\r\n            innerHtml = util_1.htmlEscape(t.opt('columnHeaderText')(date));\r\n        }\r\n        else {\r\n            innerHtml = util_1.htmlEscape(date.format(t.colHeadFormat));\r\n        }\r\n        // if only one row of days, the classNames on the header can represent the specific days beneath\r\n        if (t.rowCnt === 1) {\r\n            classNames = classNames.concat(\r\n            // includes the day-of-week class\r\n            // noThemeHighlight=true (don't highlight the header)\r\n            t.getDayClasses(date, true));\r\n        }\r\n        else {\r\n            classNames.push('fc-' + util_1.dayIDs[date.day()]); // only add the day-of-week class\r\n        }\r\n        return '' +\r\n            '<th class=\"' + classNames.join(' ') + '\"' +\r\n            ((isDateValid && t.rowCnt) === 1 ?\r\n                ' data-date=\"' + date.format('YYYY-MM-DD') + '\"' :\r\n                '') +\r\n            (colspan > 1 ?\r\n                ' colspan=\"' + colspan + '\"' :\r\n                '') +\r\n            (otherAttrs ?\r\n                ' ' + otherAttrs :\r\n                '') +\r\n            '>' +\r\n            (isDateValid ?\r\n                // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\r\n                view.buildGotoAnchorHtml({ date: date, forceOff: t.rowCnt > 1 || t.colCnt === 1 }, innerHtml) :\r\n                // if not valid, display text, but no link\r\n                innerHtml) +\r\n            '</th>';\r\n    };\r\n    /* Background Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderBgTrHtml = function (row) {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderBgIntroHtml(row)) +\r\n            this.renderBgCellsHtml(row) +\r\n            (this.isRTL ? this.renderBgIntroHtml(row) : '') +\r\n            '</tr>';\r\n    };\r\n    DayTableMixin.prototype.renderBgIntroHtml = function (row) {\r\n        return this.renderIntroHtml(); // fall back to generic\r\n    };\r\n    DayTableMixin.prototype.renderBgCellsHtml = function (row) {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(row, col);\r\n            htmls.push(this.renderBgCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    DayTableMixin.prototype.renderBgCellHtml = function (date, otherAttrs) {\r\n        var t = this;\r\n        var view = t.view;\r\n        var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var classes = t.getDayClasses(date);\r\n        classes.unshift('fc-day', view.calendar.theme.getClass('widgetContent'));\r\n        return '<td class=\"' + classes.join(' ') + '\"' +\r\n            (isDateValid ?\r\n                ' data-date=\"' + date.format('YYYY-MM-DD') + '\"' : // if date has a time, won't format it\r\n                '') +\r\n            (otherAttrs ?\r\n                ' ' + otherAttrs :\r\n                '') +\r\n            '></td>';\r\n    };\r\n    /* Generic\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderIntroHtml = function () {\r\n        // Generates the default HTML intro for any row. User classes should override\r\n    };\r\n    // TODO: a generic method for dealing with <tr>, RTL, intro\r\n    // when increment internalApiVersion\r\n    // wrapTr (scheduler)\r\n    /* Utils\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Applies the generic \"intro\" and \"outro\" HTML to the given cells.\r\n    // Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.\r\n    DayTableMixin.prototype.bookendCells = function (trEl) {\r\n        var introHtml = this.renderIntroHtml();\r\n        if (introHtml) {\r\n            if (this.isRTL) {\r\n                trEl.append(introHtml);\r\n            }\r\n            else {\r\n                trEl.prepend(introHtml);\r\n            }\r\n        }\r\n    };\r\n    return DayTableMixin;\r\n}(Mixin_1.default));\r\nexports.default = DayTableMixin;\r\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar BusinessHourRenderer = /** @class */ (function () {\r\n    /*\r\n    component implements:\r\n      - eventRangesToEventFootprints\r\n      - eventFootprintsToSegs\r\n    */\r\n    function BusinessHourRenderer(component, fillRenderer) {\r\n        this.component = component;\r\n        this.fillRenderer = fillRenderer;\r\n    }\r\n    BusinessHourRenderer.prototype.render = function (businessHourGenerator) {\r\n        var component = this.component;\r\n        var unzonedRange = component._getDateProfile().activeUnzonedRange;\r\n        var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(component.hasAllDayBusinessHours, unzonedRange);\r\n        var eventFootprints = eventInstanceGroup ?\r\n            component.eventRangesToEventFootprints(eventInstanceGroup.sliceRenderRanges(unzonedRange)) :\r\n            [];\r\n        this.renderEventFootprints(eventFootprints);\r\n    };\r\n    BusinessHourRenderer.prototype.renderEventFootprints = function (eventFootprints) {\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        this.renderSegs(segs);\r\n        this.segs = segs;\r\n    };\r\n    BusinessHourRenderer.prototype.renderSegs = function (segs) {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderSegs('businessHours', segs, {\r\n                getClasses: function (seg) {\r\n                    return ['fc-nonbusiness', 'fc-bgevent'];\r\n                }\r\n            });\r\n        }\r\n    };\r\n    BusinessHourRenderer.prototype.unrender = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('businessHours');\r\n        }\r\n        this.segs = null;\r\n    };\r\n    BusinessHourRenderer.prototype.getSegs = function () {\r\n        return this.segs || [];\r\n    };\r\n    return BusinessHourRenderer;\r\n}());\r\nexports.default = BusinessHourRenderer;\r\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar FillRenderer = /** @class */ (function () {\r\n    function FillRenderer(component) {\r\n        this.fillSegTag = 'div';\r\n        this.component = component;\r\n        this.elsByFill = {};\r\n    }\r\n    FillRenderer.prototype.renderFootprint = function (type, componentFootprint, props) {\r\n        this.renderSegs(type, this.component.componentFootprintToSegs(componentFootprint), props);\r\n    };\r\n    FillRenderer.prototype.renderSegs = function (type, segs, props) {\r\n        var els;\r\n        segs = this.buildSegEls(type, segs, props); // assignes `.el` to each seg. returns successfully rendered segs\r\n        els = this.attachSegEls(type, segs);\r\n        if (els) {\r\n            this.reportEls(type, els);\r\n        }\r\n        return segs;\r\n    };\r\n    // Unrenders a specific type of fill that is currently rendered on the grid\r\n    FillRenderer.prototype.unrender = function (type) {\r\n        var el = this.elsByFill[type];\r\n        if (el) {\r\n            el.remove();\r\n            delete this.elsByFill[type];\r\n        }\r\n    };\r\n    // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\r\n    // Only returns segments that successfully rendered.\r\n    FillRenderer.prototype.buildSegEls = function (type, segs, props) {\r\n        var _this = this;\r\n        var html = '';\r\n        var renderedSegs = [];\r\n        var i;\r\n        if (segs.length) {\r\n            // build a large concatenation of segment HTML\r\n            for (i = 0; i < segs.length; i++) {\r\n                html += this.buildSegHtml(type, segs[i], props);\r\n            }\r\n            // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n            // Then, compute the 'el' for each segment.\r\n            $(html).each(function (i, node) {\r\n                var seg = segs[i];\r\n                var el = $(node);\r\n                // allow custom filter methods per-type\r\n                if (props.filterEl) {\r\n                    el = props.filterEl(seg, el);\r\n                }\r\n                if (el) { // custom filters did not cancel the render\r\n                    el = $(el); // allow custom filter to return raw DOM node\r\n                    // correct element type? (would be bad if a non-TD were inserted into a table for example)\r\n                    if (el.is(_this.fillSegTag)) {\r\n                        seg.el = el;\r\n                        renderedSegs.push(seg);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n        return renderedSegs;\r\n    };\r\n    // Builds the HTML needed for one fill segment. Generic enough to work with different types.\r\n    FillRenderer.prototype.buildSegHtml = function (type, seg, props) {\r\n        // custom hooks per-type\r\n        var classes = props.getClasses ? props.getClasses(seg) : [];\r\n        var css = util_1.cssToStr(props.getCss ? props.getCss(seg) : {});\r\n        return '<' + this.fillSegTag +\r\n            (classes.length ? ' class=\"' + classes.join(' ') + '\"' : '') +\r\n            (css ? ' style=\"' + css + '\"' : '') +\r\n            ' />';\r\n    };\r\n    // Should return wrapping DOM structure\r\n    FillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        // subclasses must implement\r\n    };\r\n    FillRenderer.prototype.reportEls = function (type, nodes) {\r\n        if (this.elsByFill[type]) {\r\n            this.elsByFill[type] = this.elsByFill[type].add(nodes);\r\n        }\r\n        else {\r\n            this.elsByFill[type] = $(nodes);\r\n        }\r\n    };\r\n    return FillRenderer;\r\n}());\r\nexports.default = FillRenderer;\r\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar HelperRenderer = /** @class */ (function () {\r\n    function HelperRenderer(component, eventRenderer) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n        this.eventRenderer = eventRenderer;\r\n    }\r\n    HelperRenderer.prototype.renderComponentFootprint = function (componentFootprint) {\r\n        this.renderEventFootprints([\r\n            this.fabricateEventFootprint(componentFootprint)\r\n        ]);\r\n    };\r\n    HelperRenderer.prototype.renderEventDraggingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n        this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-dragging', isTouch ? null : this.view.opt('dragOpacity'));\r\n    };\r\n    HelperRenderer.prototype.renderEventResizingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n        this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-resizing');\r\n    };\r\n    HelperRenderer.prototype.renderEventFootprints = function (eventFootprints, sourceSeg, extraClassNames, opacity) {\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        var classNames = 'fc-helper ' + (extraClassNames || '');\r\n        var i;\r\n        // assigns each seg's el and returns a subset of segs that were rendered\r\n        segs = this.eventRenderer.renderFgSegEls(segs);\r\n        for (i = 0; i < segs.length; i++) {\r\n            segs[i].el.addClass(classNames);\r\n        }\r\n        if (opacity != null) {\r\n            for (i = 0; i < segs.length; i++) {\r\n                segs[i].el.css('opacity', opacity);\r\n            }\r\n        }\r\n        this.helperEls = this.renderSegs(segs, sourceSeg);\r\n    };\r\n    /*\r\n    Must return all mock event elements\r\n    */\r\n    HelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        // Subclasses must implement\r\n    };\r\n    HelperRenderer.prototype.unrender = function () {\r\n        if (this.helperEls) {\r\n            this.helperEls.remove();\r\n            this.helperEls = null;\r\n        }\r\n    };\r\n    HelperRenderer.prototype.fabricateEventFootprint = function (componentFootprint) {\r\n        var calendar = this.view.calendar;\r\n        var eventDateProfile = calendar.footprintToDateProfile(componentFootprint);\r\n        var dummyEvent = new SingleEventDef_1.default(new EventSource_1.default(calendar));\r\n        var dummyInstance;\r\n        dummyEvent.dateProfile = eventDateProfile;\r\n        dummyInstance = dummyEvent.buildInstance();\r\n        return new EventFootprint_1.default(componentFootprint, dummyEvent, dummyInstance);\r\n    };\r\n    return HelperRenderer;\r\n}());\r\nexports.default = HelperRenderer;\r\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventPointing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventPointing, _super);\r\n    function EventPointing() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    component must implement:\r\n      - publiclyTrigger\r\n    */\r\n    EventPointing.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'click', this.handleClick.bind(this));\r\n        component.bindSegHandlerToEl(el, 'mouseenter', this.handleMouseover.bind(this));\r\n        component.bindSegHandlerToEl(el, 'mouseleave', this.handleMouseout.bind(this));\r\n    };\r\n    EventPointing.prototype.handleClick = function (seg, ev) {\r\n        var res = this.component.publiclyTrigger('eventClick', {\r\n            context: seg.el[0],\r\n            args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n        });\r\n        if (res === false) {\r\n            ev.preventDefault();\r\n        }\r\n    };\r\n    // Updates internal state and triggers handlers for when an event element is moused over\r\n    EventPointing.prototype.handleMouseover = function (seg, ev) {\r\n        if (!GlobalEmitter_1.default.get().shouldIgnoreMouse() &&\r\n            !this.mousedOverSeg) {\r\n            this.mousedOverSeg = seg;\r\n            // TODO: move to EventSelecting's responsibility\r\n            if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n                seg.el.addClass('fc-allow-mouse-resize');\r\n            }\r\n            this.component.publiclyTrigger('eventMouseover', {\r\n                context: seg.el[0],\r\n                args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n            });\r\n        }\r\n    };\r\n    // Updates internal state and triggers handlers for when an event element is moused out.\r\n    // Can be given no arguments, in which case it will mouseout the segment that was previously moused over.\r\n    EventPointing.prototype.handleMouseout = function (seg, ev) {\r\n        if (this.mousedOverSeg) {\r\n            this.mousedOverSeg = null;\r\n            // TODO: move to EventSelecting's responsibility\r\n            if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n                seg.el.removeClass('fc-allow-mouse-resize');\r\n            }\r\n            this.component.publiclyTrigger('eventMouseout', {\r\n                context: seg.el[0],\r\n                args: [\r\n                    seg.footprint.getEventLegacy(),\r\n                    ev || {},\r\n                    this.view\r\n                ]\r\n            });\r\n        }\r\n    };\r\n    EventPointing.prototype.end = function () {\r\n        if (this.mousedOverSeg) {\r\n            this.handleMouseout(this.mousedOverSeg);\r\n        }\r\n    };\r\n    return EventPointing;\r\n}(Interaction_1.default));\r\nexports.default = EventPointing;\r\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar DateClicking_1 = __webpack_require__(237);\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar EventDragging_1 = __webpack_require__(235);\r\nvar EventResizing_1 = __webpack_require__(234);\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nvar StandardInteractionsMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(StandardInteractionsMixin, _super);\r\n    function StandardInteractionsMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return StandardInteractionsMixin;\r\n}(Mixin_1.default));\r\nexports.default = StandardInteractionsMixin;\r\nStandardInteractionsMixin.prototype.dateClickingClass = DateClicking_1.default;\r\nStandardInteractionsMixin.prototype.dateSelectingClass = DateSelecting_1.default;\r\nStandardInteractionsMixin.prototype.eventPointingClass = EventPointing_1.default;\r\nStandardInteractionsMixin.prototype.eventDraggingClass = EventDragging_1.default;\r\nStandardInteractionsMixin.prototype.eventResizingClass = EventResizing_1.default;\r\nStandardInteractionsMixin.prototype.externalDroppingClass = ExternalDropping_1.default;\r\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar Popover_1 = __webpack_require__(227);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\n/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGrid = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGrid, _super);\r\n    function DayGrid(view) {\r\n        var _this = _super.call(this, view) || this;\r\n        _this.cellWeekNumbersVisible = false; // display week numbers in day cell?\r\n        _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid\r\n        // isRigid determines whether the individual rows should ignore the contents and be a constant height.\r\n        // Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.\r\n        _this.isRigid = false;\r\n        _this.hasAllDayBusinessHours = true;\r\n        return _this;\r\n    }\r\n    // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n    DayGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        var segs = this.sliceRangeByRow(componentFootprint.unzonedRange);\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (this.isRTL) {\r\n                seg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex;\r\n                seg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex;\r\n            }\r\n            else {\r\n                seg.leftCol = seg.firstRowDayIndex;\r\n                seg.rightCol = seg.lastRowDayIndex;\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Date Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.renderDates = function (dateProfile) {\r\n        this.dateProfile = dateProfile;\r\n        this.updateDayTable();\r\n        this.renderGrid();\r\n    };\r\n    DayGrid.prototype.unrenderDates = function () {\r\n        this.removeSegPopover();\r\n    };\r\n    // Renders the rows and columns into the component's `this.el`, which should already be assigned.\r\n    DayGrid.prototype.renderGrid = function () {\r\n        var view = this.view;\r\n        var rowCnt = this.rowCnt;\r\n        var colCnt = this.colCnt;\r\n        var html = '';\r\n        var row;\r\n        var col;\r\n        if (this.headContainerEl) {\r\n            this.headContainerEl.html(this.renderHeadHtml());\r\n        }\r\n        for (row = 0; row < rowCnt; row++) {\r\n            html += this.renderDayRowHtml(row, this.isRigid);\r\n        }\r\n        this.el.html(html);\r\n        this.rowEls = this.el.find('.fc-row');\r\n        this.cellEls = this.el.find('.fc-day, .fc-disabled-day');\r\n        this.rowCoordCache = new CoordCache_1.default({\r\n            els: this.rowEls,\r\n            isVertical: true\r\n        });\r\n        this.colCoordCache = new CoordCache_1.default({\r\n            els: this.cellEls.slice(0, this.colCnt),\r\n            isHorizontal: true\r\n        });\r\n        // trigger dayRender with each cell's element\r\n        for (row = 0; row < rowCnt; row++) {\r\n            for (col = 0; col < colCnt; col++) {\r\n                this.publiclyTrigger('dayRender', {\r\n                    context: view,\r\n                    args: [\r\n                        this.getCellDate(row, col),\r\n                        this.getCellEl(row, col),\r\n                        view\r\n                    ]\r\n                });\r\n            }\r\n        }\r\n    };\r\n    // Generates the HTML for a single row, which is a div that wraps a table.\r\n    // `row` is the row number.\r\n    DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {\r\n        var theme = this.view.calendar.theme;\r\n        var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];\r\n        if (isRigid) {\r\n            classes.push('fc-rigid');\r\n        }\r\n        return '' +\r\n            '<div class=\"' + classes.join(' ') + '\">' +\r\n            '<div class=\"fc-bg\">' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderBgTrHtml(row) +\r\n            '</table>' +\r\n            '</div>' +\r\n            '<div class=\"fc-content-skeleton\">' +\r\n            '<table>' +\r\n            (this.getIsNumbersVisible() ?\r\n                '<thead>' +\r\n                    this.renderNumberTrHtml(row) +\r\n                    '</thead>' :\r\n                '') +\r\n            '</table>' +\r\n            '</div>' +\r\n            '</div>';\r\n    };\r\n    DayGrid.prototype.getIsNumbersVisible = function () {\r\n        return this.getIsDayNumbersVisible() || this.cellWeekNumbersVisible;\r\n    };\r\n    DayGrid.prototype.getIsDayNumbersVisible = function () {\r\n        return this.rowCnt > 1;\r\n    };\r\n    /* Grid Number Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.renderNumberTrHtml = function (row) {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderNumberIntroHtml(row)) +\r\n            this.renderNumberCellsHtml(row) +\r\n            (this.isRTL ? this.renderNumberIntroHtml(row) : '') +\r\n            '</tr>';\r\n    };\r\n    DayGrid.prototype.renderNumberIntroHtml = function (row) {\r\n        return this.renderIntroHtml();\r\n    };\r\n    DayGrid.prototype.renderNumberCellsHtml = function (row) {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(row, col);\r\n            htmls.push(this.renderNumberCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    // Generates the HTML for the <td>s of the \"number\" row in the DayGrid's content skeleton.\r\n    // The number row will only exist if either day numbers or week numbers are turned on.\r\n    DayGrid.prototype.renderNumberCellHtml = function (date) {\r\n        var view = this.view;\r\n        var html = '';\r\n        var isDateValid = this.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;\r\n        var classes;\r\n        var weekCalcFirstDoW;\r\n        if (!isDayNumberVisible && !this.cellWeekNumbersVisible) {\r\n            // no numbers in day cell (week number must be along the side)\r\n            return '<td/>'; //  will create an empty space above events :(\r\n        }\r\n        classes = this.getDayClasses(date);\r\n        classes.unshift('fc-day-top');\r\n        if (this.cellWeekNumbersVisible) {\r\n            // To determine the day of week number change under ISO, we cannot\r\n            // rely on moment.js methods such as firstDayOfWeek() or weekday(),\r\n            // because they rely on the locale's dow (possibly overridden by\r\n            // our firstDay option), which may not be Monday. We cannot change\r\n            // dow, because that would affect the calendar start day as well.\r\n            if (date._locale._fullCalendar_weekCalc === 'ISO') {\r\n                weekCalcFirstDoW = 1; // Monday by ISO 8601 definition\r\n            }\r\n            else {\r\n                weekCalcFirstDoW = date._locale.firstDayOfWeek();\r\n            }\r\n        }\r\n        html += '<td class=\"' + classes.join(' ') + '\"' +\r\n            (isDateValid ?\r\n                ' data-date=\"' + date.format() + '\"' :\r\n                '') +\r\n            '>';\r\n        if (this.cellWeekNumbersVisible && (date.day() === weekCalcFirstDoW)) {\r\n            html += view.buildGotoAnchorHtml({ date: date, type: 'week' }, { 'class': 'fc-week-number' }, date.format('w') // inner HTML\r\n            );\r\n        }\r\n        if (isDayNumberVisible) {\r\n            html += view.buildGotoAnchorHtml(date, { 'class': 'fc-day-number' }, date.format('D') // inner HTML\r\n            );\r\n        }\r\n        html += '</td>';\r\n        return html;\r\n    };\r\n    /* Hit System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.prepareHits = function () {\r\n        this.colCoordCache.build();\r\n        this.rowCoordCache.build();\r\n        this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\r\n    };\r\n    DayGrid.prototype.releaseHits = function () {\r\n        this.colCoordCache.clear();\r\n        this.rowCoordCache.clear();\r\n    };\r\n    DayGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n        if (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) {\r\n            var col = this.colCoordCache.getHorizontalIndex(leftOffset);\r\n            var row = this.rowCoordCache.getVerticalIndex(topOffset);\r\n            if (row != null && col != null) {\r\n                return this.getCellHit(row, col);\r\n            }\r\n        }\r\n    };\r\n    DayGrid.prototype.getHitFootprint = function (hit) {\r\n        var range = this.getCellRange(hit.row, hit.col);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(range.start, range.end), true // all-day?\r\n        );\r\n    };\r\n    DayGrid.prototype.getHitEl = function (hit) {\r\n        return this.getCellEl(hit.row, hit.col);\r\n    };\r\n    /* Cell System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // FYI: the first column is the leftmost column, regardless of date\r\n    DayGrid.prototype.getCellHit = function (row, col) {\r\n        return {\r\n            row: row,\r\n            col: col,\r\n            component: this,\r\n            left: this.colCoordCache.getLeftOffset(col),\r\n            right: this.colCoordCache.getRightOffset(col),\r\n            top: this.rowCoordCache.getTopOffset(row),\r\n            bottom: this.rowCoordCache.getBottomOffset(row)\r\n        };\r\n    };\r\n    DayGrid.prototype.getCellEl = function (row, col) {\r\n        return this.cellEls.eq(row * this.colCnt + col);\r\n    };\r\n    /* Event Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Unrenders all events currently rendered on the grid\r\n    DayGrid.prototype.executeEventUnrender = function () {\r\n        this.removeSegPopover(); // removes the \"more..\" events popover\r\n        _super.prototype.executeEventUnrender.call(this);\r\n    };\r\n    // Retrieves all rendered segment objects currently rendered on the grid\r\n    DayGrid.prototype.getOwnEventSegs = function () {\r\n        // append the segments from the \"more...\" popover\r\n        return _super.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs || []);\r\n    };\r\n    /* Event Drag Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event or external element being dragged.\r\n    // `eventLocation` has zoned start and end (optional)\r\n    DayGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            this.renderHighlight(eventFootprints[i].componentFootprint);\r\n        }\r\n        // render drags from OTHER components as helpers\r\n        if (eventFootprints.length && seg && seg.component !== this) {\r\n            this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n            return true; // signal helpers rendered\r\n        }\r\n    };\r\n    // Unrenders any visual indication of a hovering event\r\n    DayGrid.prototype.unrenderDrag = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Event Resize Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being resized\r\n    DayGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            this.renderHighlight(eventFootprints[i].componentFootprint);\r\n        }\r\n        this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n    };\r\n    // Unrenders a visual indication of an event being resized\r\n    DayGrid.prototype.unrenderEventResize = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* More+ Link Popover\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.removeSegPopover = function () {\r\n        if (this.segPopover) {\r\n            this.segPopover.hide(); // in handler, will call segPopover's removeElement\r\n        }\r\n    };\r\n    // Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\r\n    // `levelLimit` can be false (don't limit), a number, or true (should be computed).\r\n    DayGrid.prototype.limitRows = function (levelLimit) {\r\n        var rowStructs = this.eventRenderer.rowStructs || [];\r\n        var row; // row #\r\n        var rowLevelLimit;\r\n        for (row = 0; row < rowStructs.length; row++) {\r\n            this.unlimitRow(row);\r\n            if (!levelLimit) {\r\n                rowLevelLimit = false;\r\n            }\r\n            else if (typeof levelLimit === 'number') {\r\n                rowLevelLimit = levelLimit;\r\n            }\r\n            else {\r\n                rowLevelLimit = this.computeRowLevelLimit(row);\r\n            }\r\n            if (rowLevelLimit !== false) {\r\n                this.limitRow(row, rowLevelLimit);\r\n            }\r\n        }\r\n    };\r\n    // Computes the number of levels a row will accomodate without going outside its bounds.\r\n    // Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\r\n    // `row` is the row number.\r\n    DayGrid.prototype.computeRowLevelLimit = function (row) {\r\n        var rowEl = this.rowEls.eq(row); // the containing \"fake\" row div\r\n        var rowHeight = rowEl.height(); // TODO: cache somehow?\r\n        var trEls = this.eventRenderer.rowStructs[row].tbodyEl.children();\r\n        var i;\r\n        var trEl;\r\n        var trHeight;\r\n        function iterInnerHeights(i, childNode) {\r\n            trHeight = Math.max(trHeight, $(childNode).outerHeight());\r\n        }\r\n        // Reveal one level <tr> at a time and stop when we find one out of bounds\r\n        for (i = 0; i < trEls.length; i++) {\r\n            trEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal)\r\n            // with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell,\r\n            // so instead, find the tallest inner content element.\r\n            trHeight = 0;\r\n            trEl.find('> td > :first-child').each(iterInnerHeights);\r\n            if (trEl.position().top + trHeight > rowHeight) {\r\n                return i;\r\n            }\r\n        }\r\n        return false; // should not limit at all\r\n    };\r\n    // Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\r\n    // `row` is the row number.\r\n    // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\r\n    DayGrid.prototype.limitRow = function (row, levelLimit) {\r\n        var _this = this;\r\n        var rowStruct = this.eventRenderer.rowStructs[row];\r\n        var moreNodes = []; // array of \"more\" <a> links and <td> DOM nodes\r\n        var col = 0; // col #, left-to-right (not chronologically)\r\n        var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\r\n        var cellMatrix; // a matrix (by level, then column) of all <td> jQuery elements in the row\r\n        var limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes\r\n        var i;\r\n        var seg;\r\n        var segsBelow; // array of segment objects below `seg` in the current `col`\r\n        var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\r\n        var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\r\n        var td;\r\n        var rowspan;\r\n        var segMoreNodes; // array of \"more\" <td> cells that will stand-in for the current seg's cell\r\n        var j;\r\n        var moreTd;\r\n        var moreWrap;\r\n        var moreLink;\r\n        // Iterates through empty level cells and places \"more\" links inside if need be\r\n        var emptyCellsUntil = function (endCol) {\r\n            while (col < endCol) {\r\n                segsBelow = _this.getCellSegs(row, col, levelLimit);\r\n                if (segsBelow.length) {\r\n                    td = cellMatrix[levelLimit - 1][col];\r\n                    moreLink = _this.renderMoreLink(row, col, segsBelow);\r\n                    moreWrap = $('<div/>').append(moreLink);\r\n                    td.append(moreWrap);\r\n                    moreNodes.push(moreWrap[0]);\r\n                }\r\n                col++;\r\n            }\r\n        };\r\n        if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\r\n            levelSegs = rowStruct.segLevels[levelLimit - 1];\r\n            cellMatrix = rowStruct.cellMatrix;\r\n            limitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level <tr> elements past the limit\r\n                .addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array\r\n            // iterate though segments in the last allowable level\r\n            for (i = 0; i < levelSegs.length; i++) {\r\n                seg = levelSegs[i];\r\n                emptyCellsUntil(seg.leftCol); // process empty cells before the segment\r\n                // determine *all* segments below `seg` that occupy the same columns\r\n                colSegsBelow = [];\r\n                totalSegsBelow = 0;\r\n                while (col <= seg.rightCol) {\r\n                    segsBelow = this.getCellSegs(row, col, levelLimit);\r\n                    colSegsBelow.push(segsBelow);\r\n                    totalSegsBelow += segsBelow.length;\r\n                    col++;\r\n                }\r\n                if (totalSegsBelow) { // do we need to replace this segment with one or many \"more\" links?\r\n                    td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell\r\n                    rowspan = td.attr('rowspan') || 1;\r\n                    segMoreNodes = [];\r\n                    // make a replacement <td> for each column the segment occupies. will be one for each colspan\r\n                    for (j = 0; j < colSegsBelow.length; j++) {\r\n                        moreTd = $('<td class=\"fc-more-cell\"/>').attr('rowspan', rowspan);\r\n                        segsBelow = colSegsBelow[j];\r\n                        moreLink = this.renderMoreLink(row, seg.leftCol + j, [seg].concat(segsBelow) // count seg as hidden too\r\n                        );\r\n                        moreWrap = $('<div/>').append(moreLink);\r\n                        moreTd.append(moreWrap);\r\n                        segMoreNodes.push(moreTd[0]);\r\n                        moreNodes.push(moreTd[0]);\r\n                    }\r\n                    td.addClass('fc-limited').after($(segMoreNodes)); // hide original <td> and inject replacements\r\n                    limitedNodes.push(td[0]);\r\n                }\r\n            }\r\n            emptyCellsUntil(this.colCnt); // finish off the level\r\n            rowStruct.moreEls = $(moreNodes); // for easy undoing later\r\n            rowStruct.limitedEls = $(limitedNodes); // for easy undoing later\r\n        }\r\n    };\r\n    // Reveals all levels and removes all \"more\"-related elements for a grid's row.\r\n    // `row` is a row number.\r\n    DayGrid.prototype.unlimitRow = function (row) {\r\n        var rowStruct = this.eventRenderer.rowStructs[row];\r\n        if (rowStruct.moreEls) {\r\n            rowStruct.moreEls.remove();\r\n            rowStruct.moreEls = null;\r\n        }\r\n        if (rowStruct.limitedEls) {\r\n            rowStruct.limitedEls.removeClass('fc-limited');\r\n            rowStruct.limitedEls = null;\r\n        }\r\n    };\r\n    // Renders an <a> element that represents hidden event element for a cell.\r\n    // Responsible for attaching click handler as well.\r\n    DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        return $('<a class=\"fc-more\"/>')\r\n            .text(this.getMoreLinkText(hiddenSegs.length))\r\n            .on('click', function (ev) {\r\n            var clickOption = _this.opt('eventLimitClick');\r\n            var date = _this.getCellDate(row, col);\r\n            var moreEl = $(ev.currentTarget);\r\n            var dayEl = _this.getCellEl(row, col);\r\n            var allSegs = _this.getCellSegs(row, col);\r\n            // rescope the segments to be within the cell's date\r\n            var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\r\n            var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\r\n            if (typeof clickOption === 'function') {\r\n                // the returned value can be an atomic option\r\n                clickOption = _this.publiclyTrigger('eventLimitClick', {\r\n                    context: view,\r\n                    args: [\r\n                        {\r\n                            date: date.clone(),\r\n                            dayEl: dayEl,\r\n                            moreEl: moreEl,\r\n                            segs: reslicedAllSegs,\r\n                            hiddenSegs: reslicedHiddenSegs\r\n                        },\r\n                        ev,\r\n                        view\r\n                    ]\r\n                });\r\n            }\r\n            if (clickOption === 'popover') {\r\n                _this.showSegPopover(row, col, moreEl, reslicedAllSegs);\r\n            }\r\n            else if (typeof clickOption === 'string') { // a view name\r\n                view.calendar.zoomTo(date, clickOption);\r\n            }\r\n        });\r\n    };\r\n    // Reveals the popover that displays all events within a cell\r\n    DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        var moreWrap = moreLink.parent(); // the <div> wrapper around the <a>\r\n        var topEl; // the element we want to match the top coordinate of\r\n        var options;\r\n        if (this.rowCnt === 1) {\r\n            topEl = view.el; // will cause the popover to cover any sort of header\r\n        }\r\n        else {\r\n            topEl = this.rowEls.eq(row); // will align with top of row\r\n        }\r\n        options = {\r\n            className: 'fc-more-popover ' + view.calendar.theme.getClass('popover'),\r\n            content: this.renderSegPopoverContent(row, col, segs),\r\n            parentEl: view.el,\r\n            top: topEl.offset().top,\r\n            autoHide: true,\r\n            viewportConstrain: this.opt('popoverViewportConstrain'),\r\n            hide: function () {\r\n                // kill everything when the popover is hidden\r\n                // notify events to be removed\r\n                if (_this.popoverSegs) {\r\n                    _this.triggerBeforeEventSegsDestroyed(_this.popoverSegs);\r\n                }\r\n                _this.segPopover.removeElement();\r\n                _this.segPopover = null;\r\n                _this.popoverSegs = null;\r\n            }\r\n        };\r\n        // Determine horizontal coordinate.\r\n        // We use the moreWrap instead of the <td> to avoid border confusion.\r\n        if (this.isRTL) {\r\n            options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border\r\n        }\r\n        else {\r\n            options.left = moreWrap.offset().left - 1; // -1 to be over cell border\r\n        }\r\n        this.segPopover = new Popover_1.default(options);\r\n        this.segPopover.show();\r\n        // the popover doesn't live within the grid's container element, and thus won't get the event\r\n        // delegated-handlers for free. attach event-related handlers to the popover.\r\n        this.bindAllSegHandlersToEl(this.segPopover.el);\r\n        this.triggerAfterEventSegsRendered(segs);\r\n    };\r\n    // Builds the inner DOM contents of the segment popover\r\n    DayGrid.prototype.renderSegPopoverContent = function (row, col, segs) {\r\n        var view = this.view;\r\n        var theme = view.calendar.theme;\r\n        var title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat'));\r\n        var content = $('<div class=\"fc-header ' + theme.getClass('popoverHeader') + '\">' +\r\n            '<span class=\"fc-close ' + theme.getIconClass('close') + '\"></span>' +\r\n            '<span class=\"fc-title\">' +\r\n            util_1.htmlEscape(title) +\r\n            '</span>' +\r\n            '<div class=\"fc-clear\"/>' +\r\n            '</div>' +\r\n            '<div class=\"fc-body ' + theme.getClass('popoverContent') + '\">' +\r\n            '<div class=\"fc-event-container\"></div>' +\r\n            '</div>');\r\n        var segContainer = content.find('.fc-event-container');\r\n        var i;\r\n        // render each seg's `el` and only return the visible segs\r\n        segs = this.eventRenderer.renderFgSegEls(segs, true); // disableResizing=true\r\n        this.popoverSegs = segs;\r\n        for (i = 0; i < segs.length; i++) {\r\n            // because segments in the popover are not part of a grid coordinate system, provide a hint to any\r\n            // grids that want to do drag-n-drop about which cell it came from\r\n            this.hitsNeeded();\r\n            segs[i].hit = this.getCellHit(row, col);\r\n            this.hitsNotNeeded();\r\n            segContainer.append(segs[i].el);\r\n        }\r\n        return content;\r\n    };\r\n    // Given the events within an array of segment objects, reslice them to be in a single day\r\n    DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {\r\n        var dayStart = dayDate.clone();\r\n        var dayEnd = dayStart.clone().add(1, 'days');\r\n        var dayRange = new UnzonedRange_1.default(dayStart, dayEnd);\r\n        var newSegs = [];\r\n        var i;\r\n        var seg;\r\n        var slicedRange;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            slicedRange = seg.footprint.componentFootprint.unzonedRange.intersect(dayRange);\r\n            if (slicedRange) {\r\n                newSegs.push($.extend({}, seg, {\r\n                    footprint: new EventFootprint_1.default(new ComponentFootprint_1.default(slicedRange, seg.footprint.componentFootprint.isAllDay), seg.footprint.eventDef, seg.footprint.eventInstance),\r\n                    isStart: seg.isStart && slicedRange.isStart,\r\n                    isEnd: seg.isEnd && slicedRange.isEnd\r\n                }));\r\n            }\r\n        }\r\n        // force an order because eventsToSegs doesn't guarantee one\r\n        // TODO: research if still needed\r\n        this.eventRenderer.sortEventSegs(newSegs);\r\n        return newSegs;\r\n    };\r\n    // Generates the text that should be inside a \"more\" link, given the number of events it represents\r\n    DayGrid.prototype.getMoreLinkText = function (num) {\r\n        var opt = this.opt('eventLimitText');\r\n        if (typeof opt === 'function') {\r\n            return opt(num);\r\n        }\r\n        else {\r\n            return '+' + num + ' ' + opt;\r\n        }\r\n    };\r\n    // Returns segments within a given cell.\r\n    // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\r\n    DayGrid.prototype.getCellSegs = function (row, col, startLevel) {\r\n        var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;\r\n        var level = startLevel || 0;\r\n        var segs = [];\r\n        var seg;\r\n        while (level < segMatrix.length) {\r\n            seg = segMatrix[level][col];\r\n            if (seg) {\r\n                segs.push(seg);\r\n            }\r\n            level++;\r\n        }\r\n        return segs;\r\n    };\r\n    return DayGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = DayGrid;\r\nDayGrid.prototype.eventRendererClass = DayGridEventRenderer_1.default;\r\nDayGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nDayGrid.prototype.helperRendererClass = DayGridHelperRenderer_1.default;\r\nDayGrid.prototype.fillRendererClass = DayGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(DayGrid);\r\nDayTableMixin_1.default.mixInto(DayGrid);\r\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar DayGrid_1 = __webpack_require__(66);\r\n/* An abstract class for the \"basic\" views, as well as month view. Renders one or more rows of day cells.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\r\n// It is responsible for managing width/height.\r\nvar BasicView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BasicView, _super);\r\n    function BasicView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.dayGrid = _this.instantiateDayGrid();\r\n        _this.dayGrid.isRigid = _this.hasRigidRows();\r\n        if (_this.opt('weekNumbers')) {\r\n            if (_this.opt('weekNumbersWithinDays')) {\r\n                _this.dayGrid.cellWeekNumbersVisible = true;\r\n                _this.dayGrid.colWeekNumbersVisible = false;\r\n            }\r\n            else {\r\n                _this.dayGrid.cellWeekNumbersVisible = false;\r\n                _this.dayGrid.colWeekNumbersVisible = true;\r\n            }\r\n        }\r\n        _this.addChild(_this.dayGrid);\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    // Generates the DayGrid object this view needs. Draws from this.dayGridClass\r\n    BasicView.prototype.instantiateDayGrid = function () {\r\n        // generate a subclass on the fly with BasicView-specific behavior\r\n        // TODO: cache this subclass\r\n        var subclass = makeDayGridSubclass(this.dayGridClass);\r\n        return new subclass(this);\r\n    };\r\n    BasicView.prototype.executeDateRender = function (dateProfile) {\r\n        this.dayGrid.breakOnWeeks = /year|month|week/.test(dateProfile.currentRangeUnit);\r\n        _super.prototype.executeDateRender.call(this, dateProfile);\r\n    };\r\n    BasicView.prototype.renderSkeleton = function () {\r\n        var dayGridContainerEl;\r\n        var dayGridEl;\r\n        this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());\r\n        this.scroller.render();\r\n        dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');\r\n        dayGridEl = $('<div class=\"fc-day-grid\" />').appendTo(dayGridContainerEl);\r\n        this.el.find('.fc-body > tr > td').append(dayGridContainerEl);\r\n        this.dayGrid.headContainerEl = this.el.find('.fc-head-container');\r\n        this.dayGrid.setElement(dayGridEl);\r\n    };\r\n    BasicView.prototype.unrenderSkeleton = function () {\r\n        this.dayGrid.removeElement();\r\n        this.scroller.destroy();\r\n    };\r\n    // Builds the HTML skeleton for the view.\r\n    // The day-grid component will render inside of a container defined by this HTML.\r\n    BasicView.prototype.renderSkeletonHtml = function () {\r\n        var theme = this.calendar.theme;\r\n        return '' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            (this.opt('columnHeader') ?\r\n                '<thead class=\"fc-head\">' +\r\n                    '<tr>' +\r\n                    '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' +\r\n                    '</tr>' +\r\n                    '</thead>' :\r\n                '') +\r\n            '<tbody class=\"fc-body\">' +\r\n            '<tr>' +\r\n            '<td class=\"' + theme.getClass('widgetContent') + '\"></td>' +\r\n            '</tr>' +\r\n            '</tbody>' +\r\n            '</table>';\r\n    };\r\n    // Generates an HTML attribute string for setting the width of the week number column, if it is known\r\n    BasicView.prototype.weekNumberStyleAttr = function () {\r\n        if (this.weekNumberWidth != null) {\r\n            return 'style=\"width:' + this.weekNumberWidth + 'px\"';\r\n        }\r\n        return '';\r\n    };\r\n    // Determines whether each row should have a constant height\r\n    BasicView.prototype.hasRigidRows = function () {\r\n        var eventLimit = this.opt('eventLimit');\r\n        return eventLimit && typeof eventLimit !== 'number';\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Refreshes the horizontal dimensions of the view\r\n    BasicView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        var eventLimit = this.opt('eventLimit');\r\n        var headRowEl = this.dayGrid.headContainerEl.find('.fc-row');\r\n        var scrollerHeight;\r\n        var scrollbarWidths;\r\n        // hack to give the view some height prior to dayGrid's columns being rendered\r\n        // TODO: separate setting height from scroller VS dayGrid.\r\n        if (!this.dayGrid.rowEls) {\r\n            if (!isAuto) {\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            return;\r\n        }\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        if (this.dayGrid.colWeekNumbersVisible) {\r\n            // Make sure all week number cells running down the side have the same width.\r\n            // Record the width for cells created later.\r\n            this.weekNumberWidth = util_1.matchCellWidths(this.el.find('.fc-week-number'));\r\n        }\r\n        // reset all heights to be natural\r\n        this.scroller.clear();\r\n        util_1.uncompensateScroll(headRowEl);\r\n        this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n        // is the event limit a constant level number?\r\n        if (eventLimit && typeof eventLimit === 'number') {\r\n            this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\r\n        }\r\n        // distribute the height to the rows\r\n        // (totalHeight is a \"recommended\" value if isAuto)\r\n        scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n        this.setGridHeight(scrollerHeight, isAuto);\r\n        // is the event limit dynamically calculated?\r\n        if (eventLimit && typeof eventLimit !== 'number') {\r\n            this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\r\n        }\r\n        if (!isAuto) { // should we force dimensions of the scroll container?\r\n            this.scroller.setHeight(scrollerHeight);\r\n            scrollbarWidths = this.scroller.getScrollbarWidths();\r\n            if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n                util_1.compensateScroll(headRowEl, scrollbarWidths);\r\n                // doing the scrollbar compensation might have created text overflow which created more height. redo\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            // guarantees the same scrollbar widths\r\n            this.scroller.lockOverflow(scrollbarWidths);\r\n        }\r\n    };\r\n    // given a desired total height of the view, returns what the height of the scroller should be\r\n    BasicView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    // Sets the height of just the DayGrid component in this view\r\n    BasicView.prototype.setGridHeight = function (height, isAuto) {\r\n        if (isAuto) {\r\n            util_1.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\r\n        }\r\n        else {\r\n            util_1.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\r\n        }\r\n    };\r\n    /* Scroll\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    BasicView.prototype.computeInitialDateScroll = function () {\r\n        return { top: 0 };\r\n    };\r\n    BasicView.prototype.queryDateScroll = function () {\r\n        return { top: this.scroller.getScrollTop() };\r\n    };\r\n    BasicView.prototype.applyDateScroll = function (scroll) {\r\n        if (scroll.top !== undefined) {\r\n            this.scroller.setScrollTop(scroll.top);\r\n        }\r\n    };\r\n    return BasicView;\r\n}(View_1.default));\r\nexports.default = BasicView;\r\nBasicView.prototype.dateProfileGeneratorClass = BasicViewDateProfileGenerator_1.default;\r\nBasicView.prototype.dayGridClass = DayGrid_1.default;\r\n// customize the rendering behavior of BasicView's dayGrid\r\nfunction makeDayGridSubclass(SuperClass) {\r\n    return /** @class */ (function (_super) {\r\n        tslib_1.__extends(SubClass, _super);\r\n        function SubClass() {\r\n            var _this = _super !== null && _super.apply(this, arguments) || this;\r\n            _this.colWeekNumbersVisible = false; // display week numbers along the side?\r\n            return _this;\r\n        }\r\n        // Generates the HTML that will go before the day-of week header cells\r\n        SubClass.prototype.renderHeadIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '' +\r\n                    '<th class=\"fc-week-number ' + view.calendar.theme.getClass('widgetHeader') + '\" ' + view.weekNumberStyleAttr() + '>' +\r\n                    '<span>' + // needed for matchCellWidths\r\n                    util_1.htmlEscape(this.opt('weekNumberTitle')) +\r\n                    '</span>' +\r\n                    '</th>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that will go before content-skeleton cells that display the day/week numbers\r\n        SubClass.prototype.renderNumberIntroHtml = function (row) {\r\n            var view = this.view;\r\n            var weekStart = this.getCellDate(row, 0);\r\n            if (this.colWeekNumbersVisible) {\r\n                return '' +\r\n                    '<td class=\"fc-week-number\" ' + view.weekNumberStyleAttr() + '>' +\r\n                    view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n                    { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, weekStart.format('w') // inner HTML\r\n                    ) +\r\n                    '</td>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that goes before the day bg cells for each day-row\r\n        SubClass.prototype.renderBgIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '<td class=\"fc-week-number ' + view.calendar.theme.getClass('widgetContent') + '\" ' +\r\n                    view.weekNumberStyleAttr() + '></td>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that goes before every other type of row generated by DayGrid.\r\n        // Affects helper-skeleton and highlight-skeleton rows.\r\n        SubClass.prototype.renderIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '<td class=\"fc-week-number\" ' + view.weekNumberStyleAttr() + '></td>';\r\n            }\r\n            return '';\r\n        };\r\n        SubClass.prototype.getIsNumbersVisible = function () {\r\n            return DayGrid_1.default.prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible;\r\n        };\r\n        return SubClass;\r\n    }(SuperClass));\r\n}\r\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar BasicViewDateProfileGenerator = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BasicViewDateProfileGenerator, _super);\r\n    function BasicViewDateProfileGenerator() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Computes the date range that will be rendered.\r\n    BasicViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay); // an UnzonedRange\r\n        var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n        var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n        // year and month views should be aligned with weeks. this is already done for week\r\n        if (/^(year|month)$/.test(currentRangeUnit)) {\r\n            start.startOf('week');\r\n            // make end-of-week if not already\r\n            if (end.weekday()) {\r\n                end.add(1, 'week').startOf('week'); // exclusively move backwards\r\n            }\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    return BasicViewDateProfileGenerator;\r\n}(DateProfileGenerator_1.default));\r\nexports.default = BasicViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 69 */,\n/* 70 */,\n/* 71 */,\n/* 72 */,\n/* 73 */,\n/* 74 */,\n/* 75 */,\n/* 76 */,\n/* 77 */,\n/* 78 */,\n/* 79 */,\n/* 80 */,\n/* 81 */,\n/* 82 */,\n/* 83 */,\n/* 84 */,\n/* 85 */,\n/* 86 */,\n/* 87 */,\n/* 88 */,\n/* 89 */,\n/* 90 */,\n/* 91 */,\n/* 92 */,\n/* 93 */,\n/* 94 */,\n/* 95 */,\n/* 96 */,\n/* 97 */,\n/* 98 */,\n/* 99 */,\n/* 100 */,\n/* 101 */,\n/* 102 */,\n/* 103 */,\n/* 104 */,\n/* 105 */,\n/* 106 */,\n/* 107 */,\n/* 108 */,\n/* 109 */,\n/* 110 */,\n/* 111 */,\n/* 112 */,\n/* 113 */,\n/* 114 */,\n/* 115 */,\n/* 116 */,\n/* 117 */,\n/* 118 */,\n/* 119 */,\n/* 120 */,\n/* 121 */,\n/* 122 */,\n/* 123 */,\n/* 124 */,\n/* 125 */,\n/* 126 */,\n/* 127 */,\n/* 128 */,\n/* 129 */,\n/* 130 */,\n/* 131 */,\n/* 132 */,\n/* 133 */,\n/* 134 */,\n/* 135 */,\n/* 136 */,\n/* 137 */,\n/* 138 */,\n/* 139 */,\n/* 140 */,\n/* 141 */,\n/* 142 */,\n/* 143 */,\n/* 144 */,\n/* 145 */,\n/* 146 */,\n/* 147 */,\n/* 148 */,\n/* 149 */,\n/* 150 */,\n/* 151 */,\n/* 152 */,\n/* 153 */,\n/* 154 */,\n/* 155 */,\n/* 156 */,\n/* 157 */,\n/* 158 */,\n/* 159 */,\n/* 160 */,\n/* 161 */,\n/* 162 */,\n/* 163 */,\n/* 164 */,\n/* 165 */,\n/* 166 */,\n/* 167 */,\n/* 168 */,\n/* 169 */,\n/* 170 */,\n/* 171 */,\n/* 172 */,\n/* 173 */,\n/* 174 */,\n/* 175 */,\n/* 176 */,\n/* 177 */,\n/* 178 */,\n/* 179 */,\n/* 180 */,\n/* 181 */,\n/* 182 */,\n/* 183 */,\n/* 184 */,\n/* 185 */,\n/* 186 */,\n/* 187 */,\n/* 188 */,\n/* 189 */,\n/* 190 */,\n/* 191 */,\n/* 192 */,\n/* 193 */,\n/* 194 */,\n/* 195 */,\n/* 196 */,\n/* 197 */,\n/* 198 */,\n/* 199 */,\n/* 200 */,\n/* 201 */,\n/* 202 */,\n/* 203 */,\n/* 204 */,\n/* 205 */,\n/* 206 */,\n/* 207 */,\n/* 208 */,\n/* 209 */,\n/* 210 */,\n/* 211 */,\n/* 212 */,\n/* 213 */,\n/* 214 */,\n/* 215 */,\n/* 216 */,\n/* 217 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar util_1 = __webpack_require__(19);\r\nvar Constraints = /** @class */ (function () {\r\n    function Constraints(eventManager, _calendar) {\r\n        this.eventManager = eventManager;\r\n        this._calendar = _calendar;\r\n    }\r\n    Constraints.prototype.opt = function (name) {\r\n        return this._calendar.opt(name);\r\n    };\r\n    /*\r\n    determines if eventInstanceGroup is allowed,\r\n    in relation to other EVENTS and business hours.\r\n    */\r\n    Constraints.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var eventDef = eventInstanceGroup.getEventDef();\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        var peerEventInstances = this.getPeerEventInstances(eventDef);\r\n        var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n        var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n        var constraintVal = eventDef.getConstraint();\r\n        var overlapVal = eventDef.getOverlap();\r\n        var eventAllowFunc = this.opt('eventAllow');\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            if (!this.isFootprintAllowed(eventFootprints[i].componentFootprint, peerEventFootprints, constraintVal, overlapVal, eventFootprints[i].eventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        if (eventAllowFunc) {\r\n            for (i = 0; i < eventFootprints.length; i++) {\r\n                if (eventAllowFunc(eventFootprints[i].componentFootprint.toLegacy(this._calendar), eventFootprints[i].getEventLegacy()) === false) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    Constraints.prototype.getPeerEventInstances = function (eventDef) {\r\n        return this.eventManager.getEventInstancesWithoutId(eventDef.id);\r\n    };\r\n    Constraints.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n        var peerEventInstances = this.eventManager.getEventInstances();\r\n        var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n        var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n        var selectAllowFunc;\r\n        if (this.isFootprintAllowed(componentFootprint, peerEventFootprints, this.opt('selectConstraint'), this.opt('selectOverlap'))) {\r\n            selectAllowFunc = this.opt('selectAllow');\r\n            if (selectAllowFunc) {\r\n                return selectAllowFunc(componentFootprint.toLegacy(this._calendar)) !== false;\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    Constraints.prototype.isFootprintAllowed = function (componentFootprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance // optional\r\n    ) {\r\n        var constraintFootprints; // ComponentFootprint[]\r\n        var overlapEventFootprints; // EventFootprint[]\r\n        if (constraintVal != null) {\r\n            constraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay);\r\n            if (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) {\r\n                return false;\r\n            }\r\n        }\r\n        overlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint);\r\n        if (overlapVal === false) {\r\n            if (overlapEventFootprints.length) {\r\n                return false;\r\n            }\r\n        }\r\n        else if (typeof overlapVal === 'function') {\r\n            if (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        if (subjectEventInstance) {\r\n            if (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    // Constraint\r\n    // ------------------------------------------------------------------------------------------------\r\n    Constraints.prototype.isFootprintWithinConstraints = function (componentFootprint, constraintFootprints) {\r\n        var i;\r\n        for (i = 0; i < constraintFootprints.length; i++) {\r\n            if (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    Constraints.prototype.constraintValToFootprints = function (constraintVal, isAllDay) {\r\n        var eventInstances;\r\n        if (constraintVal === 'businessHours') {\r\n            return this.buildCurrentBusinessFootprints(isAllDay);\r\n        }\r\n        else if (typeof constraintVal === 'object') {\r\n            eventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events\r\n            if (!eventInstances) { // invalid input. fallback to parsing footprint directly\r\n                return this.parseFootprints(constraintVal);\r\n            }\r\n            else {\r\n                return this.eventInstancesToFootprints(eventInstances);\r\n            }\r\n        }\r\n        else if (constraintVal != null) { // an ID\r\n            eventInstances = this.eventManager.getEventInstancesWithId(constraintVal);\r\n            return this.eventInstancesToFootprints(eventInstances);\r\n        }\r\n    };\r\n    // returns ComponentFootprint[]\r\n    // uses current view's range\r\n    Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {\r\n        var view = this._calendar.view;\r\n        var businessHourGenerator = view.get('businessHourGenerator');\r\n        var unzonedRange = view.dateProfile.activeUnzonedRange;\r\n        var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);\r\n        if (eventInstanceGroup) {\r\n            return this.eventInstancesToFootprints(eventInstanceGroup.eventInstances);\r\n        }\r\n        else {\r\n            return [];\r\n        }\r\n    };\r\n    // conversion util\r\n    Constraints.prototype.eventInstancesToFootprints = function (eventInstances) {\r\n        var eventRanges = eventInstances.map(util_1.eventInstanceToEventRange);\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventRanges);\r\n        return eventFootprints.map(util_1.eventFootprintToComponentFootprint);\r\n    };\r\n    // Overlap\r\n    // ------------------------------------------------------------------------------------------------\r\n    Constraints.prototype.collectOverlapEventFootprints = function (peerEventFootprints, targetFootprint) {\r\n        var overlapEventFootprints = [];\r\n        var i;\r\n        for (i = 0; i < peerEventFootprints.length; i++) {\r\n            if (this.footprintsIntersect(targetFootprint, peerEventFootprints[i].componentFootprint)) {\r\n                overlapEventFootprints.push(peerEventFootprints[i]);\r\n            }\r\n        }\r\n        return overlapEventFootprints;\r\n    };\r\n    // Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints\r\n    // ------------------------------------------------------------------------------------------------\r\n    // NOTE: this might seem like repetitive code with the Grid class, however, this code is related to\r\n    // constraints whereas the Grid code is related to rendering. Each approach might want to convert\r\n    // eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make\r\n    // this more DRY.\r\n    /*\r\n    Returns false on invalid input.\r\n    */\r\n    Constraints.prototype.parseEventDefToInstances = function (eventInput) {\r\n        var eventManager = this.eventManager;\r\n        var eventDef = EventDefParser_1.default.parse(eventInput, new EventSource_1.default(this._calendar));\r\n        if (!eventDef) { // invalid\r\n            return false;\r\n        }\r\n        return eventDef.buildInstances(eventManager.currentPeriod.unzonedRange);\r\n    };\r\n    Constraints.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n        var i;\r\n        var eventFootprints = [];\r\n        for (i = 0; i < eventRanges.length; i++) {\r\n            eventFootprints.push.apply(// footprints\r\n            eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n        }\r\n        return eventFootprints;\r\n    };\r\n    Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n        return [util_1.eventRangeToEventFootprint(eventRange)];\r\n    };\r\n    /*\r\n    Parses footprints directly.\r\n    Very similar to EventDateProfile::parse :(\r\n    */\r\n    Constraints.prototype.parseFootprints = function (rawInput) {\r\n        var start;\r\n        var end;\r\n        if (rawInput.start) {\r\n            start = this._calendar.moment(rawInput.start);\r\n            if (!start.isValid()) {\r\n                start = null;\r\n            }\r\n        }\r\n        if (rawInput.end) {\r\n            end = this._calendar.moment(rawInput.end);\r\n            if (!end.isValid()) {\r\n                end = null;\r\n            }\r\n        }\r\n        return [\r\n            new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), (start && !start.hasTime()) || (end && !end.hasTime()) // isAllDay\r\n            )\r\n        ];\r\n    };\r\n    // Footprint Utils\r\n    // ----------------------------------------------------------------------------------------\r\n    Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {\r\n        return outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange);\r\n    };\r\n    Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {\r\n        return footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange);\r\n    };\r\n    return Constraints;\r\n}());\r\nexports.default = Constraints;\r\n// optional subjectEventInstance\r\nfunction isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) {\r\n    var i;\r\n    for (i = 0; i < overlapEventFootprints.length; i++) {\r\n        if (!overlapFunc(overlapEventFootprints[i].eventInstance.toLegacy(), subjectEventInstance ? subjectEventInstance.toLegacy() : null)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) {\r\n    var subjectLegacyInstance = subjectEventInstance.toLegacy();\r\n    var i;\r\n    var overlapEventInstance;\r\n    var overlapEventDef;\r\n    var overlapVal;\r\n    for (i = 0; i < overlapEventFootprints.length; i++) {\r\n        overlapEventInstance = overlapEventFootprints[i].eventInstance;\r\n        overlapEventDef = overlapEventInstance.def;\r\n        // don't need to pass in calendar, because don't want to consider global eventOverlap property,\r\n        // because we already considered that earlier in the process.\r\n        overlapVal = overlapEventDef.getOverlap();\r\n        if (overlapVal === false) {\r\n            return false;\r\n        }\r\n        else if (typeof overlapVal === 'function') {\r\n            if (!overlapVal(overlapEventInstance.toLegacy(), subjectLegacyInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\n\n/***/ }),\n/* 218 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar BUSINESS_HOUR_EVENT_DEFAULTS = {\r\n    start: '09:00',\r\n    end: '17:00',\r\n    dow: [1, 2, 3, 4, 5],\r\n    rendering: 'inverse-background'\r\n    // classNames are defined in businessHoursSegClasses\r\n};\r\nvar BusinessHourGenerator = /** @class */ (function () {\r\n    function BusinessHourGenerator(rawComplexDef, calendar) {\r\n        this.rawComplexDef = rawComplexDef;\r\n        this.calendar = calendar;\r\n    }\r\n    BusinessHourGenerator.prototype.buildEventInstanceGroup = function (isAllDay, unzonedRange) {\r\n        var eventDefs = this.buildEventDefs(isAllDay);\r\n        var eventInstanceGroup;\r\n        if (eventDefs.length) {\r\n            eventInstanceGroup = new EventInstanceGroup_1.default(util_1.eventDefsToEventInstances(eventDefs, unzonedRange));\r\n            // so that inverse-background rendering can happen even when no eventRanges in view\r\n            eventInstanceGroup.explicitEventDef = eventDefs[0];\r\n            return eventInstanceGroup;\r\n        }\r\n    };\r\n    BusinessHourGenerator.prototype.buildEventDefs = function (isAllDay) {\r\n        var rawComplexDef = this.rawComplexDef;\r\n        var rawDefs = [];\r\n        var requireDow = false;\r\n        var i;\r\n        var defs = [];\r\n        if (rawComplexDef === true) {\r\n            rawDefs = [{}]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim\r\n        }\r\n        else if ($.isPlainObject(rawComplexDef)) {\r\n            rawDefs = [rawComplexDef];\r\n        }\r\n        else if ($.isArray(rawComplexDef)) {\r\n            rawDefs = rawComplexDef;\r\n            requireDow = true; // every sub-definition NEEDS a day-of-week\r\n        }\r\n        for (i = 0; i < rawDefs.length; i++) {\r\n            if (!requireDow || rawDefs[i].dow) {\r\n                defs.push(this.buildEventDef(isAllDay, rawDefs[i]));\r\n            }\r\n        }\r\n        return defs;\r\n    };\r\n    BusinessHourGenerator.prototype.buildEventDef = function (isAllDay, rawDef) {\r\n        var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);\r\n        if (isAllDay) {\r\n            fullRawDef.start = null;\r\n            fullRawDef.end = null;\r\n        }\r\n        return RecurringEventDef_1.default.parse(fullRawDef, new EventSource_1.default(this.calendar) // dummy source\r\n        );\r\n    };\r\n    return BusinessHourGenerator;\r\n}());\r\nexports.default = BusinessHourGenerator;\r\n\n\n/***/ }),\n/* 219 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventPeriod = /** @class */ (function () {\r\n    function EventPeriod(start, end, timezone) {\r\n        this.pendingCnt = 0;\r\n        this.freezeDepth = 0;\r\n        this.stuntedReleaseCnt = 0;\r\n        this.releaseCnt = 0;\r\n        this.start = start;\r\n        this.end = end;\r\n        this.timezone = timezone;\r\n        this.unzonedRange = new UnzonedRange_1.default(start.clone().stripZone(), end.clone().stripZone());\r\n        this.requestsByUid = {};\r\n        this.eventDefsByUid = {};\r\n        this.eventDefsById = {};\r\n        this.eventInstanceGroupsById = {};\r\n    }\r\n    EventPeriod.prototype.isWithinRange = function (start, end) {\r\n        // TODO: use a range util function?\r\n        return !start.isBefore(this.start) && !end.isAfter(this.end);\r\n    };\r\n    // Requesting and Purging\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.requestSources = function (sources) {\r\n        this.freeze();\r\n        for (var i = 0; i < sources.length; i++) {\r\n            this.requestSource(sources[i]);\r\n        }\r\n        this.thaw();\r\n    };\r\n    EventPeriod.prototype.requestSource = function (source) {\r\n        var _this = this;\r\n        var request = { source: source, status: 'pending', eventDefs: null };\r\n        this.requestsByUid[source.uid] = request;\r\n        this.pendingCnt += 1;\r\n        source.fetch(this.start, this.end, this.timezone).then(function (eventDefs) {\r\n            if (request.status !== 'cancelled') {\r\n                request.status = 'completed';\r\n                request.eventDefs = eventDefs;\r\n                _this.addEventDefs(eventDefs);\r\n                _this.pendingCnt--;\r\n                _this.tryRelease();\r\n            }\r\n        }, function () {\r\n            if (request.status !== 'cancelled') {\r\n                request.status = 'failed';\r\n                _this.pendingCnt--;\r\n                _this.tryRelease();\r\n            }\r\n        });\r\n    };\r\n    EventPeriod.prototype.purgeSource = function (source) {\r\n        var request = this.requestsByUid[source.uid];\r\n        if (request) {\r\n            delete this.requestsByUid[source.uid];\r\n            if (request.status === 'pending') {\r\n                request.status = 'cancelled';\r\n                this.pendingCnt--;\r\n                this.tryRelease();\r\n            }\r\n            else if (request.status === 'completed') {\r\n                request.eventDefs.forEach(this.removeEventDef.bind(this));\r\n            }\r\n        }\r\n    };\r\n    EventPeriod.prototype.purgeAllSources = function () {\r\n        var requestsByUid = this.requestsByUid;\r\n        var uid;\r\n        var request;\r\n        var completedCnt = 0;\r\n        for (uid in requestsByUid) {\r\n            request = requestsByUid[uid];\r\n            if (request.status === 'pending') {\r\n                request.status = 'cancelled';\r\n            }\r\n            else if (request.status === 'completed') {\r\n                completedCnt++;\r\n            }\r\n        }\r\n        this.requestsByUid = {};\r\n        this.pendingCnt = 0;\r\n        if (completedCnt) {\r\n            this.removeAllEventDefs(); // might release\r\n        }\r\n    };\r\n    // Event Definitions\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.getEventDefByUid = function (eventDefUid) {\r\n        return this.eventDefsByUid[eventDefUid];\r\n    };\r\n    EventPeriod.prototype.getEventDefsById = function (eventDefId) {\r\n        var a = this.eventDefsById[eventDefId];\r\n        if (a) {\r\n            return a.slice(); // clone\r\n        }\r\n        return [];\r\n    };\r\n    EventPeriod.prototype.addEventDefs = function (eventDefs) {\r\n        for (var i = 0; i < eventDefs.length; i++) {\r\n            this.addEventDef(eventDefs[i]);\r\n        }\r\n    };\r\n    EventPeriod.prototype.addEventDef = function (eventDef) {\r\n        var eventDefsById = this.eventDefsById;\r\n        var eventDefId = eventDef.id;\r\n        var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []);\r\n        var eventInstances = eventDef.buildInstances(this.unzonedRange);\r\n        var i;\r\n        eventDefs.push(eventDef);\r\n        this.eventDefsByUid[eventDef.uid] = eventDef;\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            this.addEventInstance(eventInstances[i], eventDefId);\r\n        }\r\n    };\r\n    EventPeriod.prototype.removeEventDefsById = function (eventDefId) {\r\n        var _this = this;\r\n        this.getEventDefsById(eventDefId).forEach(function (eventDef) {\r\n            _this.removeEventDef(eventDef);\r\n        });\r\n    };\r\n    EventPeriod.prototype.removeAllEventDefs = function () {\r\n        var isEmpty = $.isEmptyObject(this.eventDefsByUid);\r\n        this.eventDefsByUid = {};\r\n        this.eventDefsById = {};\r\n        this.eventInstanceGroupsById = {};\r\n        if (!isEmpty) {\r\n            this.tryRelease();\r\n        }\r\n    };\r\n    EventPeriod.prototype.removeEventDef = function (eventDef) {\r\n        var eventDefsById = this.eventDefsById;\r\n        var eventDefs = eventDefsById[eventDef.id];\r\n        delete this.eventDefsByUid[eventDef.uid];\r\n        if (eventDefs) {\r\n            util_1.removeExact(eventDefs, eventDef);\r\n            if (!eventDefs.length) {\r\n                delete eventDefsById[eventDef.id];\r\n            }\r\n            this.removeEventInstancesForDef(eventDef);\r\n        }\r\n    };\r\n    // Event Instances\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.getEventInstances = function () {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstances = [];\r\n        var id;\r\n        for (id in eventInstanceGroupsById) {\r\n            eventInstances.push.apply(eventInstances, // append\r\n            eventInstanceGroupsById[id].eventInstances);\r\n        }\r\n        return eventInstances;\r\n    };\r\n    EventPeriod.prototype.getEventInstancesWithId = function (eventDefId) {\r\n        var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId];\r\n        if (eventInstanceGroup) {\r\n            return eventInstanceGroup.eventInstances.slice(); // clone\r\n        }\r\n        return [];\r\n    };\r\n    EventPeriod.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var matchingInstances = [];\r\n        var id;\r\n        for (id in eventInstanceGroupsById) {\r\n            if (id !== eventDefId) {\r\n                matchingInstances.push.apply(matchingInstances, // append\r\n                eventInstanceGroupsById[id].eventInstances);\r\n            }\r\n        }\r\n        return matchingInstances;\r\n    };\r\n    EventPeriod.prototype.addEventInstance = function (eventInstance, eventDefId) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstanceGroup = eventInstanceGroupsById[eventDefId] ||\r\n            (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup_1.default());\r\n        eventInstanceGroup.eventInstances.push(eventInstance);\r\n        this.tryRelease();\r\n    };\r\n    EventPeriod.prototype.removeEventInstancesForDef = function (eventDef) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstanceGroup = eventInstanceGroupsById[eventDef.id];\r\n        var removeCnt;\r\n        if (eventInstanceGroup) {\r\n            removeCnt = util_1.removeMatching(eventInstanceGroup.eventInstances, function (currentEventInstance) {\r\n                return currentEventInstance.def === eventDef;\r\n            });\r\n            if (!eventInstanceGroup.eventInstances.length) {\r\n                delete eventInstanceGroupsById[eventDef.id];\r\n            }\r\n            if (removeCnt) {\r\n                this.tryRelease();\r\n            }\r\n        }\r\n    };\r\n    // Releasing and Freezing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.tryRelease = function () {\r\n        if (!this.pendingCnt) {\r\n            if (!this.freezeDepth) {\r\n                this.release();\r\n            }\r\n            else {\r\n                this.stuntedReleaseCnt++;\r\n            }\r\n        }\r\n    };\r\n    EventPeriod.prototype.release = function () {\r\n        this.releaseCnt++;\r\n        this.trigger('release', this.eventInstanceGroupsById);\r\n    };\r\n    EventPeriod.prototype.whenReleased = function () {\r\n        var _this = this;\r\n        if (this.releaseCnt) {\r\n            return Promise_1.default.resolve(this.eventInstanceGroupsById);\r\n        }\r\n        else {\r\n            return Promise_1.default.construct(function (onResolve) {\r\n                _this.one('release', onResolve);\r\n            });\r\n        }\r\n    };\r\n    EventPeriod.prototype.freeze = function () {\r\n        if (!(this.freezeDepth++)) {\r\n            this.stuntedReleaseCnt = 0;\r\n        }\r\n    };\r\n    EventPeriod.prototype.thaw = function () {\r\n        if (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) {\r\n            this.release();\r\n        }\r\n    };\r\n    return EventPeriod;\r\n}());\r\nexports.default = EventPeriod;\r\nEmitterMixin_1.default.mixInto(EventPeriod);\r\n\n\n/***/ }),\n/* 220 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar EventManager = /** @class */ (function () {\r\n    function EventManager(calendar) {\r\n        this.calendar = calendar;\r\n        this.stickySource = new ArrayEventSource_1.default(calendar);\r\n        this.otherSources = [];\r\n    }\r\n    EventManager.prototype.requestEvents = function (start, end, timezone, force) {\r\n        if (force ||\r\n            !this.currentPeriod ||\r\n            !this.currentPeriod.isWithinRange(start, end) ||\r\n            timezone !== this.currentPeriod.timezone) {\r\n            this.setPeriod(// will change this.currentPeriod\r\n            new EventPeriod_1.default(start, end, timezone));\r\n        }\r\n        return this.currentPeriod.whenReleased();\r\n    };\r\n    // Source Adding/Removing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.addSource = function (eventSource) {\r\n        this.otherSources.push(eventSource);\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.requestSource(eventSource); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeSource = function (doomedSource) {\r\n        util_1.removeExact(this.otherSources, doomedSource);\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.purgeSource(doomedSource); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeAllSources = function () {\r\n        this.otherSources = [];\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.purgeAllSources(); // might release\r\n        }\r\n    };\r\n    // Source Refetching\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.refetchSource = function (eventSource) {\r\n        var currentPeriod = this.currentPeriod;\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            currentPeriod.purgeSource(eventSource);\r\n            currentPeriod.requestSource(eventSource);\r\n            currentPeriod.thaw();\r\n        }\r\n    };\r\n    EventManager.prototype.refetchAllSources = function () {\r\n        var currentPeriod = this.currentPeriod;\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            currentPeriod.purgeAllSources();\r\n            currentPeriod.requestSources(this.getSources());\r\n            currentPeriod.thaw();\r\n        }\r\n    };\r\n    // Source Querying\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.getSources = function () {\r\n        return [this.stickySource].concat(this.otherSources);\r\n    };\r\n    // like querySources, but accepts multple match criteria (like multiple IDs)\r\n    EventManager.prototype.multiQuerySources = function (matchInputs) {\r\n        // coerce into an array\r\n        if (!matchInputs) {\r\n            matchInputs = [];\r\n        }\r\n        else if (!$.isArray(matchInputs)) {\r\n            matchInputs = [matchInputs];\r\n        }\r\n        var matchingSources = [];\r\n        var i;\r\n        // resolve raw inputs to real event source objects\r\n        for (i = 0; i < matchInputs.length; i++) {\r\n            matchingSources.push.apply(// append\r\n            matchingSources, this.querySources(matchInputs[i]));\r\n        }\r\n        return matchingSources;\r\n    };\r\n    // matchInput can either by a real event source object, an ID, or the function/URL for the source.\r\n    // returns an array of matching source objects.\r\n    EventManager.prototype.querySources = function (matchInput) {\r\n        var sources = this.otherSources;\r\n        var i;\r\n        var source;\r\n        // given a proper event source object\r\n        for (i = 0; i < sources.length; i++) {\r\n            source = sources[i];\r\n            if (source === matchInput) {\r\n                return [source];\r\n            }\r\n        }\r\n        // an ID match\r\n        source = this.getSourceById(EventSource_1.default.normalizeId(matchInput));\r\n        if (source) {\r\n            return [source];\r\n        }\r\n        // parse as an event source\r\n        matchInput = EventSourceParser_1.default.parse(matchInput, this.calendar);\r\n        if (matchInput) {\r\n            return $.grep(sources, function (source) {\r\n                return isSourcesEquivalent(matchInput, source);\r\n            });\r\n        }\r\n    };\r\n    /*\r\n    ID assumed to already be normalized\r\n    */\r\n    EventManager.prototype.getSourceById = function (id) {\r\n        return $.grep(this.otherSources, function (source) {\r\n            return source.id && source.id === id;\r\n        })[0];\r\n    };\r\n    // Event-Period\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.setPeriod = function (eventPeriod) {\r\n        if (this.currentPeriod) {\r\n            this.unbindPeriod(this.currentPeriod);\r\n            this.currentPeriod = null;\r\n        }\r\n        this.currentPeriod = eventPeriod;\r\n        this.bindPeriod(eventPeriod);\r\n        eventPeriod.requestSources(this.getSources());\r\n    };\r\n    EventManager.prototype.bindPeriod = function (eventPeriod) {\r\n        this.listenTo(eventPeriod, 'release', function (eventsPayload) {\r\n            this.trigger('release', eventsPayload);\r\n        });\r\n    };\r\n    EventManager.prototype.unbindPeriod = function (eventPeriod) {\r\n        this.stopListeningTo(eventPeriod);\r\n    };\r\n    // Event Getting/Adding/Removing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.getEventDefByUid = function (uid) {\r\n        if (this.currentPeriod) {\r\n            return this.currentPeriod.getEventDefByUid(uid);\r\n        }\r\n    };\r\n    EventManager.prototype.addEventDef = function (eventDef, isSticky) {\r\n        if (isSticky) {\r\n            this.stickySource.addEventDef(eventDef);\r\n        }\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.addEventDef(eventDef); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeEventDefsById = function (eventId) {\r\n        this.getSources().forEach(function (eventSource) {\r\n            eventSource.removeEventDefsById(eventId);\r\n        });\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.removeEventDefsById(eventId); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeAllEventDefs = function () {\r\n        this.getSources().forEach(function (eventSource) {\r\n            eventSource.removeAllEventDefs();\r\n        });\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.removeAllEventDefs();\r\n        }\r\n    };\r\n    // Event Mutating\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    /*\r\n    Returns an undo function.\r\n    */\r\n    EventManager.prototype.mutateEventsWithId = function (eventDefId, eventDefMutation) {\r\n        var currentPeriod = this.currentPeriod;\r\n        var eventDefs;\r\n        var undoFuncs = [];\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            eventDefs = currentPeriod.getEventDefsById(eventDefId);\r\n            eventDefs.forEach(function (eventDef) {\r\n                // add/remove esp because id might change\r\n                currentPeriod.removeEventDef(eventDef);\r\n                undoFuncs.push(eventDefMutation.mutateSingle(eventDef));\r\n                currentPeriod.addEventDef(eventDef);\r\n            });\r\n            currentPeriod.thaw();\r\n            return function () {\r\n                currentPeriod.freeze();\r\n                for (var i = 0; i < eventDefs.length; i++) {\r\n                    currentPeriod.removeEventDef(eventDefs[i]);\r\n                    undoFuncs[i]();\r\n                    currentPeriod.addEventDef(eventDefs[i]);\r\n                }\r\n                currentPeriod.thaw();\r\n            };\r\n        }\r\n        return function () { };\r\n    };\r\n    /*\r\n    copies and then mutates\r\n    */\r\n    EventManager.prototype.buildMutatedEventInstanceGroup = function (eventDefId, eventDefMutation) {\r\n        var eventDefs = this.getEventDefsById(eventDefId);\r\n        var i;\r\n        var defCopy;\r\n        var allInstances = [];\r\n        for (i = 0; i < eventDefs.length; i++) {\r\n            defCopy = eventDefs[i].clone();\r\n            if (defCopy instanceof SingleEventDef_1.default) {\r\n                eventDefMutation.mutateSingle(defCopy);\r\n                allInstances.push.apply(allInstances, // append\r\n                defCopy.buildInstances());\r\n            }\r\n        }\r\n        return new EventInstanceGroup_1.default(allInstances);\r\n    };\r\n    // Freezing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.freeze = function () {\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.freeze();\r\n        }\r\n    };\r\n    EventManager.prototype.thaw = function () {\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.thaw();\r\n        }\r\n    };\r\n    // methods that simply forward to EventPeriod\r\n    EventManager.prototype.getEventDefsById = function (eventDefId) {\r\n        return this.currentPeriod.getEventDefsById(eventDefId);\r\n    };\r\n    EventManager.prototype.getEventInstances = function () {\r\n        return this.currentPeriod.getEventInstances();\r\n    };\r\n    EventManager.prototype.getEventInstancesWithId = function (eventDefId) {\r\n        return this.currentPeriod.getEventInstancesWithId(eventDefId);\r\n    };\r\n    EventManager.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n        return this.currentPeriod.getEventInstancesWithoutId(eventDefId);\r\n    };\r\n    return EventManager;\r\n}());\r\nexports.default = EventManager;\r\nEmitterMixin_1.default.mixInto(EventManager);\r\nListenerMixin_1.default.mixInto(EventManager);\r\nfunction isSourcesEquivalent(source0, source1) {\r\n    return source0.getPrimitive() === source1.getPrimitive();\r\n}\r\n\n\n/***/ }),\n/* 221 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar StandardTheme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(StandardTheme, _super);\r\n    function StandardTheme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return StandardTheme;\r\n}(Theme_1.default));\r\nexports.default = StandardTheme;\r\nStandardTheme.prototype.classes = {\r\n    widget: 'fc-unthemed',\r\n    widgetHeader: 'fc-widget-header',\r\n    widgetContent: 'fc-widget-content',\r\n    buttonGroup: 'fc-button-group',\r\n    button: 'fc-button',\r\n    cornerLeft: 'fc-corner-left',\r\n    cornerRight: 'fc-corner-right',\r\n    stateDefault: 'fc-state-default',\r\n    stateActive: 'fc-state-active',\r\n    stateDisabled: 'fc-state-disabled',\r\n    stateHover: 'fc-state-hover',\r\n    stateDown: 'fc-state-down',\r\n    popoverHeader: 'fc-widget-header',\r\n    popoverContent: 'fc-widget-content',\r\n    // day grid\r\n    headerRow: 'fc-widget-header',\r\n    dayRow: 'fc-widget-content',\r\n    // list view\r\n    listView: 'fc-widget-content'\r\n};\r\nStandardTheme.prototype.baseIconClass = 'fc-icon';\r\nStandardTheme.prototype.iconClasses = {\r\n    close: 'fc-icon-x',\r\n    prev: 'fc-icon-left-single-arrow',\r\n    next: 'fc-icon-right-single-arrow',\r\n    prevYear: 'fc-icon-left-double-arrow',\r\n    nextYear: 'fc-icon-right-double-arrow'\r\n};\r\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons';\r\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\r\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\r\n\n\n/***/ }),\n/* 222 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar JqueryUiTheme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JqueryUiTheme, _super);\r\n    function JqueryUiTheme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return JqueryUiTheme;\r\n}(Theme_1.default));\r\nexports.default = JqueryUiTheme;\r\nJqueryUiTheme.prototype.classes = {\r\n    widget: 'ui-widget',\r\n    widgetHeader: 'ui-widget-header',\r\n    widgetContent: 'ui-widget-content',\r\n    buttonGroup: 'fc-button-group',\r\n    button: 'ui-button',\r\n    cornerLeft: 'ui-corner-left',\r\n    cornerRight: 'ui-corner-right',\r\n    stateDefault: 'ui-state-default',\r\n    stateActive: 'ui-state-active',\r\n    stateDisabled: 'ui-state-disabled',\r\n    stateHover: 'ui-state-hover',\r\n    stateDown: 'ui-state-down',\r\n    today: 'ui-state-highlight',\r\n    popoverHeader: 'ui-widget-header',\r\n    popoverContent: 'ui-widget-content',\r\n    // day grid\r\n    headerRow: 'ui-widget-header',\r\n    dayRow: 'ui-widget-content',\r\n    // list view\r\n    listView: 'ui-widget-content'\r\n};\r\nJqueryUiTheme.prototype.baseIconClass = 'ui-icon';\r\nJqueryUiTheme.prototype.iconClasses = {\r\n    close: 'ui-icon-closethick',\r\n    prev: 'ui-icon-circle-triangle-w',\r\n    next: 'ui-icon-circle-triangle-e',\r\n    prevYear: 'ui-icon-seek-prev',\r\n    nextYear: 'ui-icon-seek-next'\r\n};\r\nJqueryUiTheme.prototype.iconOverrideOption = 'themeButtonIcons';\r\nJqueryUiTheme.prototype.iconOverrideCustomButtonOption = 'themeIcon';\r\nJqueryUiTheme.prototype.iconOverridePrefix = 'ui-icon-';\r\n\n\n/***/ }),\n/* 223 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar FuncEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FuncEventSource, _super);\r\n    function FuncEventSource() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    FuncEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if ($.isFunction(rawInput.events)) { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if ($.isFunction(rawInput)) { // short form\r\n            rawProps = { events: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    FuncEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var _this = this;\r\n        this.calendar.pushLoading();\r\n        return Promise_1.default.construct(function (onResolve) {\r\n            _this.func.call(_this.calendar, start.clone(), end.clone(), timezone, function (rawEventDefs) {\r\n                _this.calendar.popLoading();\r\n                onResolve(_this.parseEventDefs(rawEventDefs));\r\n            });\r\n        });\r\n    };\r\n    FuncEventSource.prototype.getPrimitive = function () {\r\n        return this.func;\r\n    };\r\n    FuncEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        this.func = rawProps.events;\r\n        return superSuccess;\r\n    };\r\n    return FuncEventSource;\r\n}(EventSource_1.default));\r\nexports.default = FuncEventSource;\r\nFuncEventSource.defineStandardProps({\r\n    events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 224 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar JsonFeedEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JsonFeedEventSource, _super);\r\n    function JsonFeedEventSource() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    JsonFeedEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if (typeof rawInput.url === 'string') { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if (typeof rawInput === 'string') { // short form\r\n            rawProps = { url: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    JsonFeedEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var _this = this;\r\n        var ajaxSettings = this.ajaxSettings;\r\n        var onSuccess = ajaxSettings.success;\r\n        var onError = ajaxSettings.error;\r\n        var requestParams = this.buildRequestParams(start, end, timezone);\r\n        // todo: eventually handle the promise's then,\r\n        // don't intercept success/error\r\n        // tho will be a breaking API change\r\n        this.calendar.pushLoading();\r\n        return Promise_1.default.construct(function (onResolve, onReject) {\r\n            $.ajax($.extend({}, // destination\r\n            JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {\r\n                url: _this.url,\r\n                data: requestParams,\r\n                success: function (rawEventDefs, status, xhr) {\r\n                    var callbackRes;\r\n                    _this.calendar.popLoading();\r\n                    if (rawEventDefs) {\r\n                        callbackRes = util_1.applyAll(onSuccess, _this, [rawEventDefs, status, xhr]); // redirect `this`\r\n                        if ($.isArray(callbackRes)) {\r\n                            rawEventDefs = callbackRes;\r\n                        }\r\n                        onResolve(_this.parseEventDefs(rawEventDefs));\r\n                    }\r\n                    else {\r\n                        onReject();\r\n                    }\r\n                },\r\n                error: function (xhr, statusText, errorThrown) {\r\n                    _this.calendar.popLoading();\r\n                    util_1.applyAll(onError, _this, [xhr, statusText, errorThrown]); // redirect `this`\r\n                    onReject();\r\n                }\r\n            }));\r\n        });\r\n    };\r\n    JsonFeedEventSource.prototype.buildRequestParams = function (start, end, timezone) {\r\n        var calendar = this.calendar;\r\n        var ajaxSettings = this.ajaxSettings;\r\n        var startParam;\r\n        var endParam;\r\n        var timezoneParam;\r\n        var customRequestParams;\r\n        var params = {};\r\n        startParam = this.startParam;\r\n        if (startParam == null) {\r\n            startParam = calendar.opt('startParam');\r\n        }\r\n        endParam = this.endParam;\r\n        if (endParam == null) {\r\n            endParam = calendar.opt('endParam');\r\n        }\r\n        timezoneParam = this.timezoneParam;\r\n        if (timezoneParam == null) {\r\n            timezoneParam = calendar.opt('timezoneParam');\r\n        }\r\n        // retrieve any outbound GET/POST $.ajax data from the options\r\n        if ($.isFunction(ajaxSettings.data)) {\r\n            // supplied as a function that returns a key/value object\r\n            customRequestParams = ajaxSettings.data();\r\n        }\r\n        else {\r\n            // probably supplied as a straight key/value object\r\n            customRequestParams = ajaxSettings.data || {};\r\n        }\r\n        $.extend(params, customRequestParams);\r\n        params[startParam] = start.format();\r\n        params[endParam] = end.format();\r\n        if (timezone && timezone !== 'local') {\r\n            params[timezoneParam] = timezone;\r\n        }\r\n        return params;\r\n    };\r\n    JsonFeedEventSource.prototype.getPrimitive = function () {\r\n        return this.url;\r\n    };\r\n    JsonFeedEventSource.prototype.applyMiscProps = function (rawProps) {\r\n        this.ajaxSettings = rawProps;\r\n    };\r\n    JsonFeedEventSource.AJAX_DEFAULTS = {\r\n        dataType: 'json',\r\n        cache: false\r\n    };\r\n    return JsonFeedEventSource;\r\n}(EventSource_1.default));\r\nexports.default = JsonFeedEventSource;\r\nJsonFeedEventSource.defineStandardProps({\r\n    // automatically transfer (true)...\r\n    url: true,\r\n    startParam: true,\r\n    endParam: true,\r\n    timezoneParam: true\r\n});\r\n\n\n/***/ }),\n/* 225 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Iterator = /** @class */ (function () {\r\n    function Iterator(items) {\r\n        this.items = items || [];\r\n    }\r\n    /* Calls a method on every item passing the arguments through */\r\n    Iterator.prototype.proxyCall = function (methodName) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var results = [];\r\n        this.items.forEach(function (item) {\r\n            results.push(item[methodName].apply(item, args));\r\n        });\r\n        return results;\r\n    };\r\n    return Iterator;\r\n}());\r\nexports.default = Iterator;\r\n\n\n/***/ }),\n/* 226 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\n/* Creates a clone of an element and lets it track the mouse as it moves\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MouseFollower = /** @class */ (function () {\r\n    function MouseFollower(sourceEl, options) {\r\n        this.isFollowing = false;\r\n        this.isHidden = false;\r\n        this.isAnimating = false; // doing the revert animation?\r\n        this.options = options = options || {};\r\n        this.sourceEl = sourceEl;\r\n        this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent\r\n    }\r\n    // Causes the element to start following the mouse\r\n    MouseFollower.prototype.start = function (ev) {\r\n        if (!this.isFollowing) {\r\n            this.isFollowing = true;\r\n            this.y0 = util_1.getEvY(ev);\r\n            this.x0 = util_1.getEvX(ev);\r\n            this.topDelta = 0;\r\n            this.leftDelta = 0;\r\n            if (!this.isHidden) {\r\n                this.updatePosition();\r\n            }\r\n            if (util_1.getEvIsTouch(ev)) {\r\n                this.listenTo($(document), 'touchmove', this.handleMove);\r\n            }\r\n            else {\r\n                this.listenTo($(document), 'mousemove', this.handleMove);\r\n            }\r\n        }\r\n    };\r\n    // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.\r\n    // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.\r\n    MouseFollower.prototype.stop = function (shouldRevert, callback) {\r\n        var _this = this;\r\n        var revertDuration = this.options.revertDuration;\r\n        var complete = function () {\r\n            _this.isAnimating = false;\r\n            _this.removeElement();\r\n            _this.top0 = _this.left0 = null; // reset state for future updatePosition calls\r\n            if (callback) {\r\n                callback();\r\n            }\r\n        };\r\n        if (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time\r\n            this.isFollowing = false;\r\n            this.stopListeningTo($(document));\r\n            if (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?\r\n                this.isAnimating = true;\r\n                this.el.animate({\r\n                    top: this.top0,\r\n                    left: this.left0\r\n                }, {\r\n                    duration: revertDuration,\r\n                    complete: complete\r\n                });\r\n            }\r\n            else {\r\n                complete();\r\n            }\r\n        }\r\n    };\r\n    // Gets the tracking element. Create it if necessary\r\n    MouseFollower.prototype.getEl = function () {\r\n        var el = this.el;\r\n        if (!el) {\r\n            el = this.el = this.sourceEl.clone()\r\n                .addClass(this.options.additionalClass || '')\r\n                .css({\r\n                position: 'absolute',\r\n                visibility: '',\r\n                display: this.isHidden ? 'none' : '',\r\n                margin: 0,\r\n                right: 'auto',\r\n                bottom: 'auto',\r\n                width: this.sourceEl.width(),\r\n                height: this.sourceEl.height(),\r\n                opacity: this.options.opacity || '',\r\n                zIndex: this.options.zIndex\r\n            });\r\n            // we don't want long taps or any mouse interaction causing selection/menus.\r\n            // would use preventSelection(), but that prevents selectstart, causing problems.\r\n            el.addClass('fc-unselectable');\r\n            el.appendTo(this.parentEl);\r\n        }\r\n        return el;\r\n    };\r\n    // Removes the tracking element if it has already been created\r\n    MouseFollower.prototype.removeElement = function () {\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n    };\r\n    // Update the CSS position of the tracking element\r\n    MouseFollower.prototype.updatePosition = function () {\r\n        var sourceOffset;\r\n        var origin;\r\n        this.getEl(); // ensure this.el\r\n        // make sure origin info was computed\r\n        if (this.top0 == null) {\r\n            sourceOffset = this.sourceEl.offset();\r\n            origin = this.el.offsetParent().offset();\r\n            this.top0 = sourceOffset.top - origin.top;\r\n            this.left0 = sourceOffset.left - origin.left;\r\n        }\r\n        this.el.css({\r\n            top: this.top0 + this.topDelta,\r\n            left: this.left0 + this.leftDelta\r\n        });\r\n    };\r\n    // Gets called when the user moves the mouse\r\n    MouseFollower.prototype.handleMove = function (ev) {\r\n        this.topDelta = util_1.getEvY(ev) - this.y0;\r\n        this.leftDelta = util_1.getEvX(ev) - this.x0;\r\n        if (!this.isHidden) {\r\n            this.updatePosition();\r\n        }\r\n    };\r\n    // Temporarily makes the tracking element invisible. Can be called before following starts\r\n    MouseFollower.prototype.hide = function () {\r\n        if (!this.isHidden) {\r\n            this.isHidden = true;\r\n            if (this.el) {\r\n                this.el.hide();\r\n            }\r\n        }\r\n    };\r\n    // Show the tracking element after it has been temporarily hidden\r\n    MouseFollower.prototype.show = function () {\r\n        if (this.isHidden) {\r\n            this.isHidden = false;\r\n            this.updatePosition();\r\n            this.getEl().show();\r\n        }\r\n    };\r\n    return MouseFollower;\r\n}());\r\nexports.default = MouseFollower;\r\nListenerMixin_1.default.mixInto(MouseFollower);\r\n\n\n/***/ }),\n/* 227 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* A rectangular panel that is absolutely positioned over other content\r\n------------------------------------------------------------------------------------------------------------------------\r\nOptions:\r\n  - className (string)\r\n  - content (HTML string or jQuery element set)\r\n  - parentEl\r\n  - top\r\n  - left\r\n  - right (the x coord of where the right edge should be. not a \"CSS\" right)\r\n  - autoHide (boolean)\r\n  - show (callback)\r\n  - hide (callback)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Popover = /** @class */ (function () {\r\n    function Popover(options) {\r\n        this.isHidden = true;\r\n        this.margin = 10; // the space required between the popover and the edges of the scroll container\r\n        this.options = options || {};\r\n    }\r\n    // Shows the popover on the specified position. Renders it if not already\r\n    Popover.prototype.show = function () {\r\n        if (this.isHidden) {\r\n            if (!this.el) {\r\n                this.render();\r\n            }\r\n            this.el.show();\r\n            this.position();\r\n            this.isHidden = false;\r\n            this.trigger('show');\r\n        }\r\n    };\r\n    // Hides the popover, through CSS, but does not remove it from the DOM\r\n    Popover.prototype.hide = function () {\r\n        if (!this.isHidden) {\r\n            this.el.hide();\r\n            this.isHidden = true;\r\n            this.trigger('hide');\r\n        }\r\n    };\r\n    // Creates `this.el` and renders content inside of it\r\n    Popover.prototype.render = function () {\r\n        var _this = this;\r\n        var options = this.options;\r\n        this.el = $('<div class=\"fc-popover\"/>')\r\n            .addClass(options.className || '')\r\n            .css({\r\n            // position initially to the top left to avoid creating scrollbars\r\n            top: 0,\r\n            left: 0\r\n        })\r\n            .append(options.content)\r\n            .appendTo(options.parentEl);\r\n        // when a click happens on anything inside with a 'fc-close' className, hide the popover\r\n        this.el.on('click', '.fc-close', function () {\r\n            _this.hide();\r\n        });\r\n        if (options.autoHide) {\r\n            this.listenTo($(document), 'mousedown', this.documentMousedown);\r\n        }\r\n    };\r\n    // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\r\n    Popover.prototype.documentMousedown = function (ev) {\r\n        // only hide the popover if the click happened outside the popover\r\n        if (this.el && !$(ev.target).closest(this.el).length) {\r\n            this.hide();\r\n        }\r\n    };\r\n    // Hides and unregisters any handlers\r\n    Popover.prototype.removeElement = function () {\r\n        this.hide();\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n        this.stopListeningTo($(document), 'mousedown');\r\n    };\r\n    // Positions the popover optimally, using the top/left/right options\r\n    Popover.prototype.position = function () {\r\n        var options = this.options;\r\n        var origin = this.el.offsetParent().offset();\r\n        var width = this.el.outerWidth();\r\n        var height = this.el.outerHeight();\r\n        var windowEl = $(window);\r\n        var viewportEl = util_1.getScrollParent(this.el);\r\n        var viewportTop;\r\n        var viewportLeft;\r\n        var viewportOffset;\r\n        var top; // the \"position\" (not \"offset\") values for the popover\r\n        var left; //\r\n        // compute top and left\r\n        top = options.top || 0;\r\n        if (options.left !== undefined) {\r\n            left = options.left;\r\n        }\r\n        else if (options.right !== undefined) {\r\n            left = options.right - width; // derive the left value from the right value\r\n        }\r\n        else {\r\n            left = 0;\r\n        }\r\n        if (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result\r\n            viewportEl = windowEl;\r\n            viewportTop = 0; // the window is always at the top left\r\n            viewportLeft = 0; // (and .offset() won't work if called here)\r\n        }\r\n        else {\r\n            viewportOffset = viewportEl.offset();\r\n            viewportTop = viewportOffset.top;\r\n            viewportLeft = viewportOffset.left;\r\n        }\r\n        // if the window is scrolled, it causes the visible area to be further down\r\n        viewportTop += windowEl.scrollTop();\r\n        viewportLeft += windowEl.scrollLeft();\r\n        // constrain to the view port. if constrained by two edges, give precedence to top/left\r\n        if (options.viewportConstrain !== false) {\r\n            top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);\r\n            top = Math.max(top, viewportTop + this.margin);\r\n            left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);\r\n            left = Math.max(left, viewportLeft + this.margin);\r\n        }\r\n        this.el.css({\r\n            top: top - origin.top,\r\n            left: left - origin.left\r\n        });\r\n    };\r\n    // Triggers a callback. Calls a function in the option hash of the same name.\r\n    // Arguments beyond the first `name` are forwarded on.\r\n    // TODO: better code reuse for this. Repeat code\r\n    Popover.prototype.trigger = function (name) {\r\n        if (this.options[name]) {\r\n            this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\r\n        }\r\n    };\r\n    return Popover;\r\n}());\r\nexports.default = Popover;\r\nListenerMixin_1.default.mixInto(Popover);\r\n\n\n/***/ }),\n/* 228 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar TaskQueue = /** @class */ (function () {\r\n    function TaskQueue() {\r\n        this.q = [];\r\n        this.isPaused = false;\r\n        this.isRunning = false;\r\n    }\r\n    TaskQueue.prototype.queue = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        this.q.push.apply(this.q, args); // append\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.pause = function () {\r\n        this.isPaused = true;\r\n    };\r\n    TaskQueue.prototype.resume = function () {\r\n        this.isPaused = false;\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.getIsIdle = function () {\r\n        return !this.isRunning && !this.isPaused;\r\n    };\r\n    TaskQueue.prototype.tryStart = function () {\r\n        if (!this.isRunning && this.canRunNext()) {\r\n            this.isRunning = true;\r\n            this.trigger('start');\r\n            this.runRemaining();\r\n        }\r\n    };\r\n    TaskQueue.prototype.canRunNext = function () {\r\n        return !this.isPaused && this.q.length;\r\n    };\r\n    TaskQueue.prototype.runRemaining = function () {\r\n        var _this = this;\r\n        var task;\r\n        var res;\r\n        do {\r\n            task = this.q.shift(); // always freshly reference q. might have been reassigned.\r\n            res = this.runTask(task);\r\n            if (res && res.then) {\r\n                res.then(function () {\r\n                    if (_this.canRunNext()) {\r\n                        _this.runRemaining();\r\n                    }\r\n                });\r\n                return; // prevent marking as stopped\r\n            }\r\n        } while (this.canRunNext());\r\n        this.trigger('stop'); // not really a 'stop' ... more of a 'drained'\r\n        this.isRunning = false;\r\n        // if 'stop' handler added more tasks.... TODO: write test for this\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.runTask = function (task) {\r\n        return task(); // task *is* the function, but subclasses can change the format of a task\r\n    };\r\n    return TaskQueue;\r\n}());\r\nexports.default = TaskQueue;\r\nEmitterMixin_1.default.mixInto(TaskQueue);\r\n\n\n/***/ }),\n/* 229 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nvar RenderQueue = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RenderQueue, _super);\r\n    function RenderQueue(waitsByNamespace) {\r\n        var _this = _super.call(this) || this;\r\n        _this.waitsByNamespace = waitsByNamespace || {};\r\n        return _this;\r\n    }\r\n    RenderQueue.prototype.queue = function (taskFunc, namespace, type) {\r\n        var task = {\r\n            func: taskFunc,\r\n            namespace: namespace,\r\n            type: type\r\n        };\r\n        var waitMs;\r\n        if (namespace) {\r\n            waitMs = this.waitsByNamespace[namespace];\r\n        }\r\n        if (this.waitNamespace) {\r\n            if (namespace === this.waitNamespace && waitMs != null) {\r\n                this.delayWait(waitMs);\r\n            }\r\n            else {\r\n                this.clearWait();\r\n                this.tryStart();\r\n            }\r\n        }\r\n        if (this.compoundTask(task)) { // appended to queue?\r\n            if (!this.waitNamespace && waitMs != null) {\r\n                this.startWait(namespace, waitMs);\r\n            }\r\n            else {\r\n                this.tryStart();\r\n            }\r\n        }\r\n    };\r\n    RenderQueue.prototype.startWait = function (namespace, waitMs) {\r\n        this.waitNamespace = namespace;\r\n        this.spawnWait(waitMs);\r\n    };\r\n    RenderQueue.prototype.delayWait = function (waitMs) {\r\n        clearTimeout(this.waitId);\r\n        this.spawnWait(waitMs);\r\n    };\r\n    RenderQueue.prototype.spawnWait = function (waitMs) {\r\n        var _this = this;\r\n        this.waitId = setTimeout(function () {\r\n            _this.waitNamespace = null;\r\n            _this.tryStart();\r\n        }, waitMs);\r\n    };\r\n    RenderQueue.prototype.clearWait = function () {\r\n        if (this.waitNamespace) {\r\n            clearTimeout(this.waitId);\r\n            this.waitId = null;\r\n            this.waitNamespace = null;\r\n        }\r\n    };\r\n    RenderQueue.prototype.canRunNext = function () {\r\n        if (!_super.prototype.canRunNext.call(this)) {\r\n            return false;\r\n        }\r\n        // waiting for a certain namespace to stop receiving tasks?\r\n        if (this.waitNamespace) {\r\n            var q = this.q;\r\n            // if there was a different namespace task in the meantime,\r\n            // that forces all previously-waiting tasks to suddenly execute.\r\n            // TODO: find a way to do this in constant time.\r\n            for (var i = 0; i < q.length; i++) {\r\n                if (q[i].namespace !== this.waitNamespace) {\r\n                    return true; // allow execution\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n        return true;\r\n    };\r\n    RenderQueue.prototype.runTask = function (task) {\r\n        task.func();\r\n    };\r\n    RenderQueue.prototype.compoundTask = function (newTask) {\r\n        var q = this.q;\r\n        var shouldAppend = true;\r\n        var i;\r\n        var task;\r\n        if (newTask.namespace && newTask.type === 'destroy') {\r\n            // remove all init/add/remove ops with same namespace, regardless of order\r\n            for (i = q.length - 1; i >= 0; i--) {\r\n                task = q[i];\r\n                if (task.namespace === newTask.namespace) {\r\n                    switch (task.type) {\r\n                        case 'init':\r\n                            shouldAppend = false;\r\n                        // the latest destroy is cancelled out by not doing the init\r\n                        /* falls through */\r\n                        case 'add':\r\n                        /* falls through */\r\n                        case 'remove':\r\n                            q.splice(i, 1); // remove task\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (shouldAppend) {\r\n            q.push(newTask);\r\n        }\r\n        return shouldAppend;\r\n    };\r\n    return RenderQueue;\r\n}(TaskQueue_1.default));\r\nexports.default = RenderQueue;\r\n\n\n/***/ }),\n/* 230 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Model_1 = __webpack_require__(51);\r\nvar Component = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Component, _super);\r\n    function Component() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Component.prototype.setElement = function (el) {\r\n        this.el = el;\r\n        this.bindGlobalHandlers();\r\n        this.renderSkeleton();\r\n        this.set('isInDom', true);\r\n    };\r\n    Component.prototype.removeElement = function () {\r\n        this.unset('isInDom');\r\n        this.unrenderSkeleton();\r\n        this.unbindGlobalHandlers();\r\n        this.el.remove();\r\n        // NOTE: don't null-out this.el in case the View was destroyed within an API callback.\r\n        // We don't null-out the View's other jQuery element references upon destroy,\r\n        //  so we shouldn't kill this.el either.\r\n    };\r\n    Component.prototype.bindGlobalHandlers = function () {\r\n        // subclasses can override\r\n    };\r\n    Component.prototype.unbindGlobalHandlers = function () {\r\n        // subclasses can override\r\n    };\r\n    /*\r\n    NOTE: Can't have a `render` method. Read the deprecation notice in View::executeDateRender\r\n    */\r\n    // Renders the basic structure of the view before any content is rendered\r\n    Component.prototype.renderSkeleton = function () {\r\n        // subclasses should implement\r\n    };\r\n    // Unrenders the basic structure of the view\r\n    Component.prototype.unrenderSkeleton = function () {\r\n        // subclasses should implement\r\n    };\r\n    return Component;\r\n}(Model_1.default));\r\nexports.default = Component;\r\n\n\n/***/ }),\n/* 231 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar date_formatting_1 = __webpack_require__(49);\r\nvar Component_1 = __webpack_require__(230);\r\nvar util_2 = __webpack_require__(19);\r\nvar DateComponent = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateComponent, _super);\r\n    function DateComponent(_view, _options) {\r\n        var _this = _super.call(this) || this;\r\n        _this.isRTL = false; // frequently accessed options\r\n        _this.hitsNeededDepth = 0; // necessary because multiple callers might need the same hits\r\n        _this.hasAllDayBusinessHours = false; // TODO: unify with largeUnit and isTimeScale?\r\n        _this.isDatesRendered = false;\r\n        // hack to set options prior to the this.opt calls\r\n        if (_view) {\r\n            _this['view'] = _view;\r\n        }\r\n        if (_options) {\r\n            _this['options'] = _options;\r\n        }\r\n        _this.uid = String(DateComponent.guid++);\r\n        _this.childrenByUid = {};\r\n        _this.nextDayThreshold = moment.duration(_this.opt('nextDayThreshold'));\r\n        _this.isRTL = _this.opt('isRTL');\r\n        if (_this.fillRendererClass) {\r\n            _this.fillRenderer = new _this.fillRendererClass(_this);\r\n        }\r\n        if (_this.eventRendererClass) { // fillRenderer is optional -----v\r\n            _this.eventRenderer = new _this.eventRendererClass(_this, _this.fillRenderer);\r\n        }\r\n        if (_this.helperRendererClass && _this.eventRenderer) {\r\n            _this.helperRenderer = new _this.helperRendererClass(_this, _this.eventRenderer);\r\n        }\r\n        if (_this.businessHourRendererClass && _this.fillRenderer) {\r\n            _this.businessHourRenderer = new _this.businessHourRendererClass(_this, _this.fillRenderer);\r\n        }\r\n        return _this;\r\n    }\r\n    DateComponent.prototype.addChild = function (child) {\r\n        if (!this.childrenByUid[child.uid]) {\r\n            this.childrenByUid[child.uid] = child;\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    DateComponent.prototype.removeChild = function (child) {\r\n        if (this.childrenByUid[child.uid]) {\r\n            delete this.childrenByUid[child.uid];\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    // TODO: only do if isInDom?\r\n    // TODO: make part of Component, along with children/batch-render system?\r\n    DateComponent.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        this.callChildren('updateSize', arguments);\r\n    };\r\n    // Options\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.opt = function (name) {\r\n        return this._getView().opt(name); // default implementation\r\n    };\r\n    DateComponent.prototype.publiclyTrigger = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var calendar = this._getCalendar();\r\n        return calendar.publiclyTrigger.apply(calendar, args);\r\n    };\r\n    DateComponent.prototype.hasPublicHandlers = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var calendar = this._getCalendar();\r\n        return calendar.hasPublicHandlers.apply(calendar, args);\r\n    };\r\n    // Date\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.executeDateRender = function (dateProfile) {\r\n        this.dateProfile = dateProfile; // for rendering\r\n        this.renderDates(dateProfile);\r\n        this.isDatesRendered = true;\r\n        this.callChildren('executeDateRender', arguments);\r\n    };\r\n    DateComponent.prototype.executeDateUnrender = function () {\r\n        this.callChildren('executeDateUnrender', arguments);\r\n        this.dateProfile = null;\r\n        this.unrenderDates();\r\n        this.isDatesRendered = false;\r\n    };\r\n    // date-cell content only\r\n    DateComponent.prototype.renderDates = function (dateProfile) {\r\n        // subclasses should implement\r\n    };\r\n    // date-cell content only\r\n    DateComponent.prototype.unrenderDates = function () {\r\n        // subclasses should override\r\n    };\r\n    // Now-Indicator\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator\r\n    // should be refreshed. If something falsy is returned, no time indicator is rendered at all.\r\n    DateComponent.prototype.getNowIndicatorUnit = function () {\r\n        // subclasses should implement\r\n    };\r\n    // Renders a current time indicator at the given datetime\r\n    DateComponent.prototype.renderNowIndicator = function (date) {\r\n        this.callChildren('renderNowIndicator', arguments);\r\n    };\r\n    // Undoes the rendering actions from renderNowIndicator\r\n    DateComponent.prototype.unrenderNowIndicator = function () {\r\n        this.callChildren('unrenderNowIndicator', arguments);\r\n    };\r\n    // Business Hours\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.renderBusinessHours = function (businessHourGenerator) {\r\n        if (this.businessHourRenderer) {\r\n            this.businessHourRenderer.render(businessHourGenerator);\r\n        }\r\n        this.callChildren('renderBusinessHours', arguments);\r\n    };\r\n    // Unrenders previously-rendered business-hours\r\n    DateComponent.prototype.unrenderBusinessHours = function () {\r\n        this.callChildren('unrenderBusinessHours', arguments);\r\n        if (this.businessHourRenderer) {\r\n            this.businessHourRenderer.unrender();\r\n        }\r\n    };\r\n    // Event Displaying\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.executeEventRender = function (eventsPayload) {\r\n        if (this.eventRenderer) {\r\n            this.eventRenderer.rangeUpdated(); // poorly named now\r\n            this.eventRenderer.render(eventsPayload);\r\n        }\r\n        else if (this['renderEvents']) { // legacy\r\n            this['renderEvents'](convertEventsPayloadToLegacyArray(eventsPayload));\r\n        }\r\n        this.callChildren('executeEventRender', arguments);\r\n    };\r\n    DateComponent.prototype.executeEventUnrender = function () {\r\n        this.callChildren('executeEventUnrender', arguments);\r\n        if (this.eventRenderer) {\r\n            this.eventRenderer.unrender();\r\n        }\r\n        else if (this['destroyEvents']) { // legacy\r\n            this['destroyEvents']();\r\n        }\r\n    };\r\n    DateComponent.prototype.getBusinessHourSegs = function () {\r\n        var segs = this.getOwnBusinessHourSegs();\r\n        this.iterChildren(function (child) {\r\n            segs.push.apply(segs, child.getBusinessHourSegs());\r\n        });\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.getOwnBusinessHourSegs = function () {\r\n        if (this.businessHourRenderer) {\r\n            return this.businessHourRenderer.getSegs();\r\n        }\r\n        return [];\r\n    };\r\n    DateComponent.prototype.getEventSegs = function () {\r\n        var segs = this.getOwnEventSegs();\r\n        this.iterChildren(function (child) {\r\n            segs.push.apply(segs, child.getEventSegs());\r\n        });\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.getOwnEventSegs = function () {\r\n        if (this.eventRenderer) {\r\n            return this.eventRenderer.getSegs();\r\n        }\r\n        return [];\r\n    };\r\n    // Event Rendering Triggering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.triggerAfterEventsRendered = function () {\r\n        this.triggerAfterEventSegsRendered(this.getEventSegs());\r\n        this.publiclyTrigger('eventAfterAllRender', {\r\n            context: this,\r\n            args: [this]\r\n        });\r\n    };\r\n    DateComponent.prototype.triggerAfterEventSegsRendered = function (segs) {\r\n        var _this = this;\r\n        // an optimization, because getEventLegacy is expensive\r\n        if (this.hasPublicHandlers('eventAfterRender')) {\r\n            segs.forEach(function (seg) {\r\n                var legacy;\r\n                if (seg.el) { // necessary?\r\n                    legacy = seg.footprint.getEventLegacy();\r\n                    _this.publiclyTrigger('eventAfterRender', {\r\n                        context: legacy,\r\n                        args: [legacy, seg.el, _this]\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    };\r\n    DateComponent.prototype.triggerBeforeEventsDestroyed = function () {\r\n        this.triggerBeforeEventSegsDestroyed(this.getEventSegs());\r\n    };\r\n    DateComponent.prototype.triggerBeforeEventSegsDestroyed = function (segs) {\r\n        var _this = this;\r\n        if (this.hasPublicHandlers('eventDestroy')) {\r\n            segs.forEach(function (seg) {\r\n                var legacy;\r\n                if (seg.el) { // necessary?\r\n                    legacy = seg.footprint.getEventLegacy();\r\n                    _this.publiclyTrigger('eventDestroy', {\r\n                        context: legacy,\r\n                        args: [legacy, seg.el, _this]\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    };\r\n    // Event Rendering Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Hides all rendered event segments linked to the given event\r\n    // RECURSIVE with subcomponents\r\n    DateComponent.prototype.showEventsWithId = function (eventDefId) {\r\n        this.getEventSegs().forEach(function (seg) {\r\n            if (seg.footprint.eventDef.id === eventDefId &&\r\n                seg.el // necessary?\r\n            ) {\r\n                seg.el.css('visibility', '');\r\n            }\r\n        });\r\n        this.callChildren('showEventsWithId', arguments);\r\n    };\r\n    // Shows all rendered event segments linked to the given event\r\n    // RECURSIVE with subcomponents\r\n    DateComponent.prototype.hideEventsWithId = function (eventDefId) {\r\n        this.getEventSegs().forEach(function (seg) {\r\n            if (seg.footprint.eventDef.id === eventDefId &&\r\n                seg.el // necessary?\r\n            ) {\r\n                seg.el.css('visibility', 'hidden');\r\n            }\r\n        });\r\n        this.callChildren('hideEventsWithId', arguments);\r\n    };\r\n    // Drag-n-Drop Rendering (for both events and external elements)\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of a event or external-element drag over the given drop zone.\r\n    // If an external-element, seg will be `null`.\r\n    // Must return elements used for any mock events.\r\n    DateComponent.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var renderedHelper = false;\r\n        this.iterChildren(function (child) {\r\n            if (child.renderDrag(eventFootprints, seg, isTouch)) {\r\n                renderedHelper = true;\r\n            }\r\n        });\r\n        return renderedHelper;\r\n    };\r\n    // Unrenders a visual indication of an event or external-element being dragged.\r\n    DateComponent.prototype.unrenderDrag = function () {\r\n        this.callChildren('unrenderDrag', arguments);\r\n    };\r\n    // Event Resizing\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of an event being resized.\r\n    DateComponent.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        this.callChildren('renderEventResize', arguments);\r\n    };\r\n    // Unrenders a visual indication of an event being resized.\r\n    DateComponent.prototype.unrenderEventResize = function () {\r\n        this.callChildren('unrenderEventResize', arguments);\r\n    };\r\n    // Selection\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of the selection\r\n    // TODO: rename to `renderSelection` after legacy is gone\r\n    DateComponent.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        this.renderHighlight(componentFootprint);\r\n        this.callChildren('renderSelectionFootprint', arguments);\r\n    };\r\n    // Unrenders a visual indication of selection\r\n    DateComponent.prototype.unrenderSelection = function () {\r\n        this.unrenderHighlight();\r\n        this.callChildren('unrenderSelection', arguments);\r\n    };\r\n    // Highlight\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)\r\n    DateComponent.prototype.renderHighlight = function (componentFootprint) {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderFootprint('highlight', componentFootprint, {\r\n                getClasses: function () {\r\n                    return ['fc-highlight'];\r\n                }\r\n            });\r\n        }\r\n        this.callChildren('renderHighlight', arguments);\r\n    };\r\n    // Unrenders the emphasis on a date range\r\n    DateComponent.prototype.unrenderHighlight = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('highlight');\r\n        }\r\n        this.callChildren('unrenderHighlight', arguments);\r\n    };\r\n    // Hit Areas\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // just because all DateComponents support this interface\r\n    // doesn't mean they need to have their own internal coord system. they can defer to sub-components.\r\n    DateComponent.prototype.hitsNeeded = function () {\r\n        if (!(this.hitsNeededDepth++)) {\r\n            this.prepareHits();\r\n        }\r\n        this.callChildren('hitsNeeded', arguments);\r\n    };\r\n    DateComponent.prototype.hitsNotNeeded = function () {\r\n        if (this.hitsNeededDepth && !(--this.hitsNeededDepth)) {\r\n            this.releaseHits();\r\n        }\r\n        this.callChildren('hitsNotNeeded', arguments);\r\n    };\r\n    DateComponent.prototype.prepareHits = function () {\r\n        // subclasses can implement\r\n    };\r\n    DateComponent.prototype.releaseHits = function () {\r\n        // subclasses can implement\r\n    };\r\n    // Given coordinates from the topleft of the document, return data about the date-related area underneath.\r\n    // Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).\r\n    // Must have a `grid` property, a reference to this current grid. TODO: avoid this\r\n    // The returned object will be processed by getHitFootprint and getHitEl.\r\n    DateComponent.prototype.queryHit = function (leftOffset, topOffset) {\r\n        var childrenByUid = this.childrenByUid;\r\n        var uid;\r\n        var hit;\r\n        for (uid in childrenByUid) {\r\n            hit = childrenByUid[uid].queryHit(leftOffset, topOffset);\r\n            if (hit) {\r\n                break;\r\n            }\r\n        }\r\n        return hit;\r\n    };\r\n    DateComponent.prototype.getSafeHitFootprint = function (hit) {\r\n        var footprint = this.getHitFootprint(hit);\r\n        if (!this.dateProfile.activeUnzonedRange.containsRange(footprint.unzonedRange)) {\r\n            return null;\r\n        }\r\n        return footprint;\r\n    };\r\n    DateComponent.prototype.getHitFootprint = function (hit) {\r\n        // what about being abstract!?\r\n    };\r\n    // Given position-level information about a date-related area within the grid,\r\n    // should return a jQuery element that best represents it. passed to dayClick callback.\r\n    DateComponent.prototype.getHitEl = function (hit) {\r\n        // what about being abstract!?\r\n    };\r\n    /* Converting eventRange -> eventFootprint\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DateComponent.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n        var eventFootprints = [];\r\n        var i;\r\n        for (i = 0; i < eventRanges.length; i++) {\r\n            eventFootprints.push.apply(// append\r\n            eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n        }\r\n        return eventFootprints;\r\n    };\r\n    DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n        return [util_2.eventRangeToEventFootprint(eventRange)];\r\n    };\r\n    /* Converting componentFootprint/eventFootprint -> segs\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DateComponent.prototype.eventFootprintsToSegs = function (eventFootprints) {\r\n        var segs = [];\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            segs.push.apply(segs, this.eventFootprintToSegs(eventFootprints[i]));\r\n        }\r\n        return segs;\r\n    };\r\n    // Given an event's span (unzoned start/end and other misc data), and the event itself,\r\n    // slices into segments and attaches event-derived properties to them.\r\n    // eventSpan - { start, end, isStart, isEnd, otherthings... }\r\n    DateComponent.prototype.eventFootprintToSegs = function (eventFootprint) {\r\n        var unzonedRange = eventFootprint.componentFootprint.unzonedRange;\r\n        var segs;\r\n        var i;\r\n        var seg;\r\n        segs = this.componentFootprintToSegs(eventFootprint.componentFootprint);\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (!unzonedRange.isStart) {\r\n                seg.isStart = false;\r\n            }\r\n            if (!unzonedRange.isEnd) {\r\n                seg.isEnd = false;\r\n            }\r\n            seg.footprint = eventFootprint;\r\n            // TODO: rename to seg.eventFootprint\r\n        }\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        return [];\r\n    };\r\n    // Utils\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.callChildren = function (methodName, args) {\r\n        this.iterChildren(function (child) {\r\n            child[methodName].apply(child, args);\r\n        });\r\n    };\r\n    DateComponent.prototype.iterChildren = function (func) {\r\n        var childrenByUid = this.childrenByUid;\r\n        var uid;\r\n        for (uid in childrenByUid) {\r\n            func(childrenByUid[uid]);\r\n        }\r\n    };\r\n    DateComponent.prototype._getCalendar = function () {\r\n        var t = this;\r\n        return t.calendar || t.view.calendar;\r\n    };\r\n    DateComponent.prototype._getView = function () {\r\n        return this.view;\r\n    };\r\n    DateComponent.prototype._getDateProfile = function () {\r\n        return this._getView().get('dateProfile');\r\n    };\r\n    // Generates HTML for an anchor to another view into the calendar.\r\n    // Will either generate an <a> tag or a non-clickable <span> tag, depending on enabled settings.\r\n    // `gotoOptions` can either be a moment input, or an object with the form:\r\n    // { date, type, forceOff }\r\n    // `type` is a view-type like \"day\" or \"week\". default value is \"day\".\r\n    // `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\r\n    DateComponent.prototype.buildGotoAnchorHtml = function (gotoOptions, attrs, innerHtml) {\r\n        var date;\r\n        var type;\r\n        var forceOff;\r\n        var finalOptions;\r\n        if ($.isPlainObject(gotoOptions)) {\r\n            date = gotoOptions.date;\r\n            type = gotoOptions.type;\r\n            forceOff = gotoOptions.forceOff;\r\n        }\r\n        else {\r\n            date = gotoOptions; // a single moment input\r\n        }\r\n        date = moment_ext_1.default(date); // if a string, parse it\r\n        finalOptions = {\r\n            date: date.format('YYYY-MM-DD'),\r\n            type: type || 'day'\r\n        };\r\n        if (typeof attrs === 'string') {\r\n            innerHtml = attrs;\r\n            attrs = null;\r\n        }\r\n        attrs = attrs ? ' ' + util_1.attrsToStr(attrs) : ''; // will have a leading space\r\n        innerHtml = innerHtml || '';\r\n        if (!forceOff && this.opt('navLinks')) {\r\n            return '<a' + attrs +\r\n                ' data-goto=\"' + util_1.htmlEscape(JSON.stringify(finalOptions)) + '\">' +\r\n                innerHtml +\r\n                '</a>';\r\n        }\r\n        else {\r\n            return '<span' + attrs + '>' +\r\n                innerHtml +\r\n                '</span>';\r\n        }\r\n    };\r\n    DateComponent.prototype.getAllDayHtml = function () {\r\n        return this.opt('allDayHtml') || util_1.htmlEscape(this.opt('allDayText'));\r\n    };\r\n    // Computes HTML classNames for a single-day element\r\n    DateComponent.prototype.getDayClasses = function (date, noThemeHighlight) {\r\n        var view = this._getView();\r\n        var classes = [];\r\n        var today;\r\n        if (!this.dateProfile.activeUnzonedRange.containsDate(date)) {\r\n            classes.push('fc-disabled-day'); // TODO: jQuery UI theme?\r\n        }\r\n        else {\r\n            classes.push('fc-' + util_1.dayIDs[date.day()]);\r\n            if (view.isDateInOtherMonth(date, this.dateProfile)) { // TODO: use DateComponent subclass somehow\r\n                classes.push('fc-other-month');\r\n            }\r\n            today = view.calendar.getNow();\r\n            if (date.isSame(today, 'day')) {\r\n                classes.push('fc-today');\r\n                if (noThemeHighlight !== true) {\r\n                    classes.push(view.calendar.theme.getClass('today'));\r\n                }\r\n            }\r\n            else if (date < today) {\r\n                classes.push('fc-past');\r\n            }\r\n            else {\r\n                classes.push('fc-future');\r\n            }\r\n        }\r\n        return classes;\r\n    };\r\n    // Utility for formatting a range. Accepts a range object, formatting string, and optional separator.\r\n    // Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.\r\n    // The timezones of the dates within `range` will be respected.\r\n    DateComponent.prototype.formatRange = function (range, isAllDay, formatStr, separator) {\r\n        var end = range.end;\r\n        if (isAllDay) {\r\n            end = end.clone().subtract(1); // convert to inclusive. last ms of previous day\r\n        }\r\n        return date_formatting_1.formatRange(range.start, end, formatStr, separator, this.isRTL);\r\n    };\r\n    // Compute the number of the give units in the \"current\" range.\r\n    // Will return a floating-point number. Won't round.\r\n    DateComponent.prototype.currentRangeAs = function (unit) {\r\n        return this._getDateProfile().currentUnzonedRange.as(unit);\r\n    };\r\n    // Returns the date range of the full days the given range visually appears to occupy.\r\n    // Returns a plain object with start/end, NOT an UnzonedRange!\r\n    DateComponent.prototype.computeDayRange = function (unzonedRange) {\r\n        var calendar = this._getCalendar();\r\n        var startDay = calendar.msToUtcMoment(unzonedRange.startMs, true); // the beginning of the day the range starts\r\n        var end = calendar.msToUtcMoment(unzonedRange.endMs);\r\n        var endTimeMS = +end.time(); // # of milliseconds into `endDay`\r\n        var endDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends\r\n        // If the end time is actually inclusively part of the next day and is equal to or\r\n        // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\r\n        // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\r\n        if (endTimeMS && endTimeMS >= this.nextDayThreshold) {\r\n            endDay.add(1, 'days');\r\n        }\r\n        // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\r\n        if (endDay <= startDay) {\r\n            endDay = startDay.clone().add(1, 'days');\r\n        }\r\n        return { start: startDay, end: endDay };\r\n    };\r\n    // Does the given range visually appear to occupy more than one day?\r\n    DateComponent.prototype.isMultiDayRange = function (unzonedRange) {\r\n        var dayRange = this.computeDayRange(unzonedRange);\r\n        return dayRange.end.diff(dayRange.start, 'days') > 1;\r\n    };\r\n    DateComponent.guid = 0; // TODO: better system for this?\r\n    return DateComponent;\r\n}(Component_1.default));\r\nexports.default = DateComponent;\r\n// legacy\r\nfunction convertEventsPayloadToLegacyArray(eventsPayload) {\r\n    var eventDefId;\r\n    var eventInstances;\r\n    var legacyEvents = [];\r\n    var i;\r\n    for (eventDefId in eventsPayload) {\r\n        eventInstances = eventsPayload[eventDefId].eventInstances;\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            legacyEvents.push(eventInstances[i].toLegacy());\r\n        }\r\n    }\r\n    return legacyEvents;\r\n}\r\n\n\n/***/ }),\n/* 232 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar Iterator_1 = __webpack_require__(225);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Toolbar_1 = __webpack_require__(257);\r\nvar OptionsManager_1 = __webpack_require__(258);\r\nvar ViewSpecManager_1 = __webpack_require__(259);\r\nvar Constraints_1 = __webpack_require__(217);\r\nvar locale_1 = __webpack_require__(32);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventManager_1 = __webpack_require__(220);\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar Calendar = /** @class */ (function () {\r\n    function Calendar(el, overrides) {\r\n        this.loadingLevel = 0; // number of simultaneous loading tasks\r\n        this.ignoreUpdateViewSize = 0;\r\n        this.freezeContentHeightDepth = 0;\r\n        // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.\r\n        // unneeded() is called in destroy.\r\n        GlobalEmitter_1.default.needed();\r\n        this.el = el;\r\n        this.viewsByType = {};\r\n        this.optionsManager = new OptionsManager_1.default(this, overrides);\r\n        this.viewSpecManager = new ViewSpecManager_1.default(this.optionsManager, this);\r\n        this.initMomentInternals(); // needs to happen after options hash initialized\r\n        this.initCurrentDate();\r\n        this.initEventManager();\r\n        this.constraints = new Constraints_1.default(this.eventManager, this);\r\n        this.constructed();\r\n    }\r\n    Calendar.prototype.constructed = function () {\r\n        // useful for monkeypatching. used?\r\n    };\r\n    Calendar.prototype.getView = function () {\r\n        return this.view;\r\n    };\r\n    Calendar.prototype.publiclyTrigger = function (name, triggerInfo) {\r\n        var optHandler = this.opt(name);\r\n        var context;\r\n        var args;\r\n        if ($.isPlainObject(triggerInfo)) {\r\n            context = triggerInfo.context;\r\n            args = triggerInfo.args;\r\n        }\r\n        else if ($.isArray(triggerInfo)) {\r\n            args = triggerInfo;\r\n        }\r\n        if (context == null) {\r\n            context = this.el[0]; // fallback context\r\n        }\r\n        if (!args) {\r\n            args = [];\r\n        }\r\n        this.triggerWith(name, context, args); // Emitter's method\r\n        if (optHandler) {\r\n            return optHandler.apply(context, args);\r\n        }\r\n    };\r\n    Calendar.prototype.hasPublicHandlers = function (name) {\r\n        return this.hasHandlers(name) ||\r\n            this.opt(name); // handler specified in options\r\n    };\r\n    // Options Public API\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // public getter/setter\r\n    Calendar.prototype.option = function (name, value) {\r\n        var newOptionHash;\r\n        if (typeof name === 'string') {\r\n            if (value === undefined) { // getter\r\n                return this.optionsManager.get(name);\r\n            }\r\n            else { // setter for individual option\r\n                newOptionHash = {};\r\n                newOptionHash[name] = value;\r\n                this.optionsManager.add(newOptionHash);\r\n            }\r\n        }\r\n        else if (typeof name === 'object') { // compound setter with object input\r\n            this.optionsManager.add(name);\r\n        }\r\n    };\r\n    // private getter\r\n    Calendar.prototype.opt = function (name) {\r\n        return this.optionsManager.get(name);\r\n    };\r\n    // View\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Given a view name for a custom view or a standard view, creates a ready-to-go View object\r\n    Calendar.prototype.instantiateView = function (viewType) {\r\n        var spec = this.viewSpecManager.getViewSpec(viewType);\r\n        if (!spec) {\r\n            throw new Error(\"View type \\\"\" + viewType + \"\\\" is not valid\");\r\n        }\r\n        return new spec['class'](this, spec);\r\n    };\r\n    // Returns a boolean about whether the view is okay to instantiate at some point\r\n    Calendar.prototype.isValidViewType = function (viewType) {\r\n        return Boolean(this.viewSpecManager.getViewSpec(viewType));\r\n    };\r\n    Calendar.prototype.changeView = function (viewName, dateOrRange) {\r\n        if (dateOrRange) {\r\n            if (dateOrRange.start && dateOrRange.end) { // a range\r\n                this.optionsManager.recordOverrides({\r\n                    visibleRange: dateOrRange\r\n                });\r\n            }\r\n            else { // a date\r\n                this.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate\r\n            }\r\n        }\r\n        this.renderView(viewName);\r\n    };\r\n    // Forces navigation to a view for the given date.\r\n    // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\r\n    Calendar.prototype.zoomTo = function (newDate, viewType) {\r\n        var spec;\r\n        viewType = viewType || 'day'; // day is default zoom\r\n        spec = this.viewSpecManager.getViewSpec(viewType) ||\r\n            this.viewSpecManager.getUnitViewSpec(viewType);\r\n        this.currentDate = newDate.clone();\r\n        this.renderView(spec ? spec.type : null);\r\n    };\r\n    // Current Date\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initCurrentDate = function () {\r\n        var defaultDateInput = this.opt('defaultDate');\r\n        // compute the initial ambig-timezone date\r\n        if (defaultDateInput != null) {\r\n            this.currentDate = this.moment(defaultDateInput).stripZone();\r\n        }\r\n        else {\r\n            this.currentDate = this.getNow(); // getNow already returns unzoned\r\n        }\r\n    };\r\n    Calendar.prototype.prev = function () {\r\n        var view = this.view;\r\n        var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n        if (prevInfo.isValid) {\r\n            this.currentDate = prevInfo.date;\r\n            this.renderView();\r\n        }\r\n    };\r\n    Calendar.prototype.next = function () {\r\n        var view = this.view;\r\n        var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n        if (nextInfo.isValid) {\r\n            this.currentDate = nextInfo.date;\r\n            this.renderView();\r\n        }\r\n    };\r\n    Calendar.prototype.prevYear = function () {\r\n        this.currentDate.add(-1, 'years');\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.nextYear = function () {\r\n        this.currentDate.add(1, 'years');\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.today = function () {\r\n        this.currentDate = this.getNow(); // should deny like prev/next?\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.gotoDate = function (zonedDateInput) {\r\n        this.currentDate = this.moment(zonedDateInput).stripZone();\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.incrementDate = function (delta) {\r\n        this.currentDate.add(moment.duration(delta));\r\n        this.renderView();\r\n    };\r\n    // for external API\r\n    Calendar.prototype.getDate = function () {\r\n        return this.applyTimezone(this.currentDate); // infuse the calendar's timezone\r\n    };\r\n    // Loading Triggering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Should be called when any type of async data fetching begins\r\n    Calendar.prototype.pushLoading = function () {\r\n        if (!(this.loadingLevel++)) {\r\n            this.publiclyTrigger('loading', [true, this.view]);\r\n        }\r\n    };\r\n    // Should be called when any type of async data fetching completes\r\n    Calendar.prototype.popLoading = function () {\r\n        if (!(--this.loadingLevel)) {\r\n            this.publiclyTrigger('loading', [false, this.view]);\r\n        }\r\n    };\r\n    // High-level Rendering\r\n    // -----------------------------------------------------------------------------------\r\n    Calendar.prototype.render = function () {\r\n        if (!this.contentEl) {\r\n            this.initialRender();\r\n        }\r\n        else if (this.elementVisible()) {\r\n            // mainly for the public API\r\n            this.calcSize();\r\n            this.updateViewSize();\r\n        }\r\n    };\r\n    Calendar.prototype.initialRender = function () {\r\n        var _this = this;\r\n        var el = this.el;\r\n        el.addClass('fc');\r\n        // event delegation for nav links\r\n        el.on('click.fc', 'a[data-goto]', function (ev) {\r\n            var anchorEl = $(ev.currentTarget);\r\n            var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON\r\n            var date = _this.moment(gotoOptions.date);\r\n            var viewType = gotoOptions.type;\r\n            // property like \"navLinkDayClick\". might be a string or a function\r\n            var customAction = _this.view.opt('navLink' + util_1.capitaliseFirstLetter(viewType) + 'Click');\r\n            if (typeof customAction === 'function') {\r\n                customAction(date, ev);\r\n            }\r\n            else {\r\n                if (typeof customAction === 'string') {\r\n                    viewType = customAction;\r\n                }\r\n                _this.zoomTo(date, viewType);\r\n            }\r\n        });\r\n        // called immediately, and upon option change\r\n        this.optionsManager.watch('settingTheme', ['?theme', '?themeSystem'], function (opts) {\r\n            var themeClass = ThemeRegistry_1.getThemeSystemClass(opts.themeSystem || opts.theme);\r\n            var theme = new themeClass(_this.optionsManager);\r\n            var widgetClass = theme.getClass('widget');\r\n            _this.theme = theme;\r\n            if (widgetClass) {\r\n                el.addClass(widgetClass);\r\n            }\r\n        }, function () {\r\n            var widgetClass = _this.theme.getClass('widget');\r\n            _this.theme = null;\r\n            if (widgetClass) {\r\n                el.removeClass(widgetClass);\r\n            }\r\n        });\r\n        this.optionsManager.watch('settingBusinessHourGenerator', ['?businessHours'], function (deps) {\r\n            _this.businessHourGenerator = new BusinessHourGenerator_1.default(deps.businessHours, _this);\r\n            if (_this.view) {\r\n                _this.view.set('businessHourGenerator', _this.businessHourGenerator);\r\n            }\r\n        }, function () {\r\n            _this.businessHourGenerator = null;\r\n        });\r\n        // called immediately, and upon option change.\r\n        // HACK: locale often affects isRTL, so we explicitly listen to that too.\r\n        this.optionsManager.watch('applyingDirClasses', ['?isRTL', '?locale'], function (opts) {\r\n            el.toggleClass('fc-ltr', !opts.isRTL);\r\n            el.toggleClass('fc-rtl', opts.isRTL);\r\n        });\r\n        this.contentEl = $(\"<div class='fc-view-container'/>\").prependTo(el);\r\n        this.initToolbars();\r\n        this.renderHeader();\r\n        this.renderFooter();\r\n        this.renderView(this.opt('defaultView'));\r\n        if (this.opt('handleWindowResize')) {\r\n            $(window).resize(this.windowResizeProxy = util_1.debounce(// prevents rapid calls\r\n            this.windowResize.bind(this), this.opt('windowResizeDelay')));\r\n        }\r\n    };\r\n    Calendar.prototype.destroy = function () {\r\n        if (this.view) {\r\n            this.clearView();\r\n        }\r\n        this.toolbarsManager.proxyCall('removeElement');\r\n        this.contentEl.remove();\r\n        this.el.removeClass('fc fc-ltr fc-rtl');\r\n        // removes theme-related root className\r\n        this.optionsManager.unwatch('settingTheme');\r\n        this.optionsManager.unwatch('settingBusinessHourGenerator');\r\n        this.el.off('.fc'); // unbind nav link handlers\r\n        if (this.windowResizeProxy) {\r\n            $(window).unbind('resize', this.windowResizeProxy);\r\n            this.windowResizeProxy = null;\r\n        }\r\n        GlobalEmitter_1.default.unneeded();\r\n    };\r\n    Calendar.prototype.elementVisible = function () {\r\n        return this.el.is(':visible');\r\n    };\r\n    // Render Queue\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.bindViewHandlers = function (view) {\r\n        var _this = this;\r\n        view.watch('titleForCalendar', ['title'], function (deps) {\r\n            if (view === _this.view) { // hack\r\n                _this.setToolbarsTitle(deps.title);\r\n            }\r\n        });\r\n        view.watch('dateProfileForCalendar', ['dateProfile'], function (deps) {\r\n            if (view === _this.view) { // hack\r\n                _this.currentDate = deps.dateProfile.date; // might have been constrained by view dates\r\n                _this.updateToolbarButtons(deps.dateProfile);\r\n            }\r\n        });\r\n    };\r\n    Calendar.prototype.unbindViewHandlers = function (view) {\r\n        view.unwatch('titleForCalendar');\r\n        view.unwatch('dateProfileForCalendar');\r\n    };\r\n    // View Rendering\r\n    // -----------------------------------------------------------------------------------\r\n    // Renders a view because of a date change, view-type change, or for the first time.\r\n    // If not given a viewType, keep the current view but render different dates.\r\n    // Accepts an optional scroll state to restore to.\r\n    Calendar.prototype.renderView = function (viewType) {\r\n        var oldView = this.view;\r\n        var newView;\r\n        this.freezeContentHeight();\r\n        if (oldView && viewType && oldView.type !== viewType) {\r\n            this.clearView();\r\n        }\r\n        // if viewType changed, or the view was never created, create a fresh view\r\n        if (!this.view && viewType) {\r\n            newView = this.view =\r\n                this.viewsByType[viewType] ||\r\n                    (this.viewsByType[viewType] = this.instantiateView(viewType));\r\n            this.bindViewHandlers(newView);\r\n            newView.startBatchRender(); // so that setElement+setDate rendering are joined\r\n            newView.setElement($(\"<div class='fc-view fc-\" + viewType + \"-view' />\").appendTo(this.contentEl));\r\n            this.toolbarsManager.proxyCall('activateButton', viewType);\r\n        }\r\n        if (this.view) {\r\n            // prevent unnecessary change firing\r\n            if (this.view.get('businessHourGenerator') !== this.businessHourGenerator) {\r\n                this.view.set('businessHourGenerator', this.businessHourGenerator);\r\n            }\r\n            this.view.setDate(this.currentDate);\r\n            if (newView) {\r\n                newView.stopBatchRender();\r\n            }\r\n        }\r\n        this.thawContentHeight();\r\n    };\r\n    // Unrenders the current view and reflects this change in the Header.\r\n    // Unregsiters the `view`, but does not remove from viewByType hash.\r\n    Calendar.prototype.clearView = function () {\r\n        var currentView = this.view;\r\n        this.toolbarsManager.proxyCall('deactivateButton', currentView.type);\r\n        this.unbindViewHandlers(currentView);\r\n        currentView.removeElement();\r\n        currentView.unsetDate(); // so bindViewHandlers doesn't fire with old values next time\r\n        this.view = null;\r\n    };\r\n    // Destroys the view, including the view object. Then, re-instantiates it and renders it.\r\n    // Maintains the same scroll state.\r\n    // TODO: maintain any other user-manipulated state.\r\n    Calendar.prototype.reinitView = function () {\r\n        var oldView = this.view;\r\n        var scroll = oldView.queryScroll(); // wouldn't be so complicated if Calendar owned the scroll\r\n        this.freezeContentHeight();\r\n        this.clearView();\r\n        this.calcSize();\r\n        this.renderView(oldView.type); // needs the type to freshly render\r\n        this.view.applyScroll(scroll);\r\n        this.thawContentHeight();\r\n    };\r\n    // Resizing\r\n    // -----------------------------------------------------------------------------------\r\n    Calendar.prototype.getSuggestedViewHeight = function () {\r\n        if (this.suggestedViewHeight == null) {\r\n            this.calcSize();\r\n        }\r\n        return this.suggestedViewHeight;\r\n    };\r\n    Calendar.prototype.isHeightAuto = function () {\r\n        return this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';\r\n    };\r\n    Calendar.prototype.updateViewSize = function (isResize) {\r\n        if (isResize === void 0) { isResize = false; }\r\n        var view = this.view;\r\n        var scroll;\r\n        if (!this.ignoreUpdateViewSize && view) {\r\n            if (isResize) {\r\n                this.calcSize();\r\n                scroll = view.queryScroll();\r\n            }\r\n            this.ignoreUpdateViewSize++;\r\n            view.updateSize(this.getSuggestedViewHeight(), this.isHeightAuto(), isResize);\r\n            this.ignoreUpdateViewSize--;\r\n            if (isResize) {\r\n                view.applyScroll(scroll);\r\n            }\r\n            return true; // signal success\r\n        }\r\n    };\r\n    Calendar.prototype.calcSize = function () {\r\n        if (this.elementVisible()) {\r\n            this._calcSize();\r\n        }\r\n    };\r\n    Calendar.prototype._calcSize = function () {\r\n        var contentHeightInput = this.opt('contentHeight');\r\n        var heightInput = this.opt('height');\r\n        if (typeof contentHeightInput === 'number') { // exists and not 'auto'\r\n            this.suggestedViewHeight = contentHeightInput;\r\n        }\r\n        else if (typeof contentHeightInput === 'function') { // exists and is a function\r\n            this.suggestedViewHeight = contentHeightInput();\r\n        }\r\n        else if (typeof heightInput === 'number') { // exists and not 'auto'\r\n            this.suggestedViewHeight = heightInput - this.queryToolbarsHeight();\r\n        }\r\n        else if (typeof heightInput === 'function') { // exists and is a function\r\n            this.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();\r\n        }\r\n        else if (heightInput === 'parent') { // set to height of parent element\r\n            this.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();\r\n        }\r\n        else {\r\n            this.suggestedViewHeight = Math.round(this.contentEl.width() /\r\n                Math.max(this.opt('aspectRatio'), .5));\r\n        }\r\n    };\r\n    Calendar.prototype.windowResize = function (ev) {\r\n        if (\r\n        // the purpose: so we don't process jqui \"resize\" events that have bubbled up\r\n        // cast to any because .target, which is Element, can't be compared to window for some reason.\r\n        ev.target === window &&\r\n            this.view &&\r\n            this.view.isDatesRendered) {\r\n            if (this.updateViewSize(true)) { // isResize=true, returns true on success\r\n                this.publiclyTrigger('windowResize', [this.view]);\r\n            }\r\n        }\r\n    };\r\n    /* Height \"Freezing\"\r\n    -----------------------------------------------------------------------------*/\r\n    Calendar.prototype.freezeContentHeight = function () {\r\n        if (!(this.freezeContentHeightDepth++)) {\r\n            this.forceFreezeContentHeight();\r\n        }\r\n    };\r\n    Calendar.prototype.forceFreezeContentHeight = function () {\r\n        this.contentEl.css({\r\n            width: '100%',\r\n            height: this.contentEl.height(),\r\n            overflow: 'hidden'\r\n        });\r\n    };\r\n    Calendar.prototype.thawContentHeight = function () {\r\n        this.freezeContentHeightDepth--;\r\n        // always bring back to natural height\r\n        this.contentEl.css({\r\n            width: '',\r\n            height: '',\r\n            overflow: ''\r\n        });\r\n        // but if there are future thaws, re-freeze\r\n        if (this.freezeContentHeightDepth) {\r\n            this.forceFreezeContentHeight();\r\n        }\r\n    };\r\n    // Toolbar\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initToolbars = function () {\r\n        this.header = new Toolbar_1.default(this, this.computeHeaderOptions());\r\n        this.footer = new Toolbar_1.default(this, this.computeFooterOptions());\r\n        this.toolbarsManager = new Iterator_1.default([this.header, this.footer]);\r\n    };\r\n    Calendar.prototype.computeHeaderOptions = function () {\r\n        return {\r\n            extraClasses: 'fc-header-toolbar',\r\n            layout: this.opt('header')\r\n        };\r\n    };\r\n    Calendar.prototype.computeFooterOptions = function () {\r\n        return {\r\n            extraClasses: 'fc-footer-toolbar',\r\n            layout: this.opt('footer')\r\n        };\r\n    };\r\n    // can be called repeatedly and Header will rerender\r\n    Calendar.prototype.renderHeader = function () {\r\n        var header = this.header;\r\n        header.setToolbarOptions(this.computeHeaderOptions());\r\n        header.render();\r\n        if (header.el) {\r\n            this.el.prepend(header.el);\r\n        }\r\n    };\r\n    // can be called repeatedly and Footer will rerender\r\n    Calendar.prototype.renderFooter = function () {\r\n        var footer = this.footer;\r\n        footer.setToolbarOptions(this.computeFooterOptions());\r\n        footer.render();\r\n        if (footer.el) {\r\n            this.el.append(footer.el);\r\n        }\r\n    };\r\n    Calendar.prototype.setToolbarsTitle = function (title) {\r\n        this.toolbarsManager.proxyCall('updateTitle', title);\r\n    };\r\n    Calendar.prototype.updateToolbarButtons = function (dateProfile) {\r\n        var now = this.getNow();\r\n        var view = this.view;\r\n        var todayInfo = view.dateProfileGenerator.build(now);\r\n        var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n        var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n        this.toolbarsManager.proxyCall((todayInfo.isValid && !dateProfile.currentUnzonedRange.containsDate(now)) ?\r\n            'enableButton' :\r\n            'disableButton', 'today');\r\n        this.toolbarsManager.proxyCall(prevInfo.isValid ?\r\n            'enableButton' :\r\n            'disableButton', 'prev');\r\n        this.toolbarsManager.proxyCall(nextInfo.isValid ?\r\n            'enableButton' :\r\n            'disableButton', 'next');\r\n    };\r\n    Calendar.prototype.queryToolbarsHeight = function () {\r\n        return this.toolbarsManager.items.reduce(function (accumulator, toolbar) {\r\n            var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin\r\n            return accumulator + toolbarHeight;\r\n        }, 0);\r\n    };\r\n    // Selection\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // this public method receives start/end dates in any format, with any timezone\r\n    Calendar.prototype.select = function (zonedStartInput, zonedEndInput) {\r\n        this.view.select(this.buildSelectFootprint.apply(this, arguments));\r\n    };\r\n    Calendar.prototype.unselect = function () {\r\n        if (this.view) {\r\n            this.view.unselect();\r\n        }\r\n    };\r\n    // Given arguments to the select method in the API, returns a span (unzoned start/end and other info)\r\n    Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput) {\r\n        var start = this.moment(zonedStartInput).stripZone();\r\n        var end;\r\n        if (zonedEndInput) {\r\n            end = this.moment(zonedEndInput).stripZone();\r\n        }\r\n        else if (start.hasTime()) {\r\n            end = start.clone().add(this.defaultTimedEventDuration);\r\n        }\r\n        else {\r\n            end = start.clone().add(this.defaultAllDayEventDuration);\r\n        }\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), !start.hasTime());\r\n    };\r\n    // Date Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initMomentInternals = function () {\r\n        var _this = this;\r\n        this.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));\r\n        this.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration'));\r\n        // Called immediately, and when any of the options change.\r\n        // Happens before any internal objects rebuild or rerender, because this is very core.\r\n        this.optionsManager.watch('buildingMomentLocale', [\r\n            '?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort',\r\n            '?firstDay', '?weekNumberCalculation'\r\n        ], function (opts) {\r\n            var weekNumberCalculation = opts.weekNumberCalculation;\r\n            var firstDay = opts.firstDay;\r\n            var _week;\r\n            // normalize\r\n            if (weekNumberCalculation === 'iso') {\r\n                weekNumberCalculation = 'ISO'; // normalize\r\n            }\r\n            var localeData = Object.create(// make a cheap copy\r\n            locale_1.getMomentLocaleData(opts.locale) // will fall back to en\r\n            );\r\n            if (opts.monthNames) {\r\n                localeData._months = opts.monthNames;\r\n            }\r\n            if (opts.monthNamesShort) {\r\n                localeData._monthsShort = opts.monthNamesShort;\r\n            }\r\n            if (opts.dayNames) {\r\n                localeData._weekdays = opts.dayNames;\r\n            }\r\n            if (opts.dayNamesShort) {\r\n                localeData._weekdaysShort = opts.dayNamesShort;\r\n            }\r\n            if (firstDay == null && weekNumberCalculation === 'ISO') {\r\n                firstDay = 1;\r\n            }\r\n            if (firstDay != null) {\r\n                _week = Object.create(localeData._week); // _week: { dow: # }\r\n                _week.dow = firstDay;\r\n                localeData._week = _week;\r\n            }\r\n            if ( // whitelist certain kinds of input\r\n            weekNumberCalculation === 'ISO' ||\r\n                weekNumberCalculation === 'local' ||\r\n                typeof weekNumberCalculation === 'function') {\r\n                localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it\r\n            }\r\n            _this.localeData = localeData;\r\n            // If the internal current date object already exists, move to new locale.\r\n            // We do NOT need to do this technique for event dates, because this happens when converting to \"segments\".\r\n            if (_this.currentDate) {\r\n                _this.localizeMoment(_this.currentDate); // sets to localeData\r\n            }\r\n        });\r\n    };\r\n    // Builds a moment using the settings of the current calendar: timezone and locale.\r\n    // Accepts anything the vanilla moment() constructor accepts.\r\n    Calendar.prototype.moment = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var mom;\r\n        if (this.opt('timezone') === 'local') {\r\n            mom = moment_ext_1.default.apply(null, args);\r\n            // Force the moment to be local, because momentExt doesn't guarantee it.\r\n            if (mom.hasTime()) { // don't give ambiguously-timed moments a local zone\r\n                mom.local();\r\n            }\r\n        }\r\n        else if (this.opt('timezone') === 'UTC') {\r\n            mom = moment_ext_1.default.utc.apply(null, args); // process as UTC\r\n        }\r\n        else {\r\n            mom = moment_ext_1.default.parseZone.apply(null, args); // let the input decide the zone\r\n        }\r\n        this.localizeMoment(mom); // TODO\r\n        return mom;\r\n    };\r\n    Calendar.prototype.msToMoment = function (ms, forceAllDay) {\r\n        var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n        if (forceAllDay) {\r\n            mom.stripTime();\r\n        }\r\n        else {\r\n            mom = this.applyTimezone(mom); // may or may not apply locale\r\n        }\r\n        this.localizeMoment(mom);\r\n        return mom;\r\n    };\r\n    Calendar.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n        var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n        if (forceAllDay) {\r\n            mom.stripTime();\r\n        }\r\n        this.localizeMoment(mom);\r\n        return mom;\r\n    };\r\n    // Updates the given moment's locale settings to the current calendar locale settings.\r\n    Calendar.prototype.localizeMoment = function (mom) {\r\n        mom._locale = this.localeData;\r\n    };\r\n    // Returns a boolean about whether or not the calendar knows how to calculate\r\n    // the timezone offset of arbitrary dates in the current timezone.\r\n    Calendar.prototype.getIsAmbigTimezone = function () {\r\n        return this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';\r\n    };\r\n    // Returns a copy of the given date in the current timezone. Has no effect on dates without times.\r\n    Calendar.prototype.applyTimezone = function (date) {\r\n        if (!date.hasTime()) {\r\n            return date.clone();\r\n        }\r\n        var zonedDate = this.moment(date.toArray());\r\n        var timeAdjust = date.time().asMilliseconds() - zonedDate.time().asMilliseconds();\r\n        var adjustedZonedDate;\r\n        // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)\r\n        if (timeAdjust) { // is the time result different than expected?\r\n            adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds\r\n            if (date.time().asMilliseconds() - adjustedZonedDate.time().asMilliseconds() === 0) { // does it match perfectly now?\r\n                zonedDate = adjustedZonedDate;\r\n            }\r\n        }\r\n        return zonedDate;\r\n    };\r\n    /*\r\n    Assumes the footprint is non-open-ended.\r\n    */\r\n    Calendar.prototype.footprintToDateProfile = function (componentFootprint, ignoreEnd) {\r\n        if (ignoreEnd === void 0) { ignoreEnd = false; }\r\n        var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs);\r\n        var end;\r\n        if (!ignoreEnd) {\r\n            end = moment_ext_1.default.utc(componentFootprint.unzonedRange.endMs);\r\n        }\r\n        if (componentFootprint.isAllDay) {\r\n            start.stripTime();\r\n            if (end) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        else {\r\n            start = this.applyTimezone(start);\r\n            if (end) {\r\n                end = this.applyTimezone(end);\r\n            }\r\n        }\r\n        this.localizeMoment(start);\r\n        if (end) {\r\n            this.localizeMoment(end);\r\n        }\r\n        return new EventDateProfile_1.default(start, end, this);\r\n    };\r\n    // Returns a moment for the current date, as defined by the client's computer or from the `now` option.\r\n    // Will return an moment with an ambiguous timezone.\r\n    Calendar.prototype.getNow = function () {\r\n        var now = this.opt('now');\r\n        if (typeof now === 'function') {\r\n            now = now();\r\n        }\r\n        return this.moment(now).stripZone();\r\n    };\r\n    // Produces a human-readable string for the given duration.\r\n    // Side-effect: changes the locale of the given duration.\r\n    Calendar.prototype.humanizeDuration = function (duration) {\r\n        return duration.locale(this.opt('locale')).humanize();\r\n    };\r\n    // will return `null` if invalid range\r\n    Calendar.prototype.parseUnzonedRange = function (rangeInput) {\r\n        var start = null;\r\n        var end = null;\r\n        if (rangeInput.start) {\r\n            start = this.moment(rangeInput.start).stripZone();\r\n        }\r\n        if (rangeInput.end) {\r\n            end = this.moment(rangeInput.end).stripZone();\r\n        }\r\n        if (!start && !end) {\r\n            return null;\r\n        }\r\n        if (start && end && end.isBefore(start)) {\r\n            return null;\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Event-Date Utilities\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initEventManager = function () {\r\n        var _this = this;\r\n        var eventManager = new EventManager_1.default(this);\r\n        var rawSources = this.opt('eventSources') || [];\r\n        var singleRawSource = this.opt('events');\r\n        this.eventManager = eventManager;\r\n        if (singleRawSource) {\r\n            rawSources.unshift(singleRawSource);\r\n        }\r\n        eventManager.on('release', function (eventsPayload) {\r\n            _this.trigger('eventsReset', eventsPayload);\r\n        });\r\n        eventManager.freeze();\r\n        rawSources.forEach(function (rawSource) {\r\n            var source = EventSourceParser_1.default.parse(rawSource, _this);\r\n            if (source) {\r\n                eventManager.addSource(source);\r\n            }\r\n        });\r\n        eventManager.thaw();\r\n    };\r\n    Calendar.prototype.requestEvents = function (start, end) {\r\n        return this.eventManager.requestEvents(start, end, this.opt('timezone'), !this.opt('lazyFetching'));\r\n    };\r\n    // Get an event's normalized end date. If not present, calculate it from the defaults.\r\n    Calendar.prototype.getEventEnd = function (event) {\r\n        if (event.end) {\r\n            return event.end.clone();\r\n        }\r\n        else {\r\n            return this.getDefaultEventEnd(event.allDay, event.start);\r\n        }\r\n    };\r\n    // Given an event's allDay status and start date, return what its fallback end date should be.\r\n    // TODO: rename to computeDefaultEventEnd\r\n    Calendar.prototype.getDefaultEventEnd = function (allDay, zonedStart) {\r\n        var end = zonedStart.clone();\r\n        if (allDay) {\r\n            end.stripTime().add(this.defaultAllDayEventDuration);\r\n        }\r\n        else {\r\n            end.add(this.defaultTimedEventDuration);\r\n        }\r\n        if (this.getIsAmbigTimezone()) {\r\n            end.stripZone(); // we don't know what the tzo should be\r\n        }\r\n        return end;\r\n    };\r\n    // Public Events API\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.rerenderEvents = function () {\r\n        this.view.flash('displayingEvents');\r\n    };\r\n    Calendar.prototype.refetchEvents = function () {\r\n        this.eventManager.refetchAllSources();\r\n    };\r\n    Calendar.prototype.renderEvents = function (eventInputs, isSticky) {\r\n        this.eventManager.freeze();\r\n        for (var i = 0; i < eventInputs.length; i++) {\r\n            this.renderEvent(eventInputs[i], isSticky);\r\n        }\r\n        this.eventManager.thaw();\r\n    };\r\n    Calendar.prototype.renderEvent = function (eventInput, isSticky) {\r\n        if (isSticky === void 0) { isSticky = false; }\r\n        var eventManager = this.eventManager;\r\n        var eventDef = EventDefParser_1.default.parse(eventInput, eventInput.source || eventManager.stickySource);\r\n        if (eventDef) {\r\n            eventManager.addEventDef(eventDef, isSticky);\r\n        }\r\n    };\r\n    // legacyQuery operates on legacy event instance objects\r\n    Calendar.prototype.removeEvents = function (legacyQuery) {\r\n        var eventManager = this.eventManager;\r\n        var legacyInstances = [];\r\n        var idMap = {};\r\n        var eventDef;\r\n        var i;\r\n        if (legacyQuery == null) { // shortcut for removing all\r\n            eventManager.removeAllEventDefs(); // persist=true\r\n        }\r\n        else {\r\n            eventManager.getEventInstances().forEach(function (eventInstance) {\r\n                legacyInstances.push(eventInstance.toLegacy());\r\n            });\r\n            legacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery);\r\n            // compute unique IDs\r\n            for (i = 0; i < legacyInstances.length; i++) {\r\n                eventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id);\r\n                idMap[eventDef.id] = true;\r\n            }\r\n            eventManager.freeze();\r\n            for (i in idMap) { // reuse `i` as an \"id\"\r\n                eventManager.removeEventDefsById(i); // persist=true\r\n            }\r\n            eventManager.thaw();\r\n        }\r\n    };\r\n    // legacyQuery operates on legacy event instance objects\r\n    Calendar.prototype.clientEvents = function (legacyQuery) {\r\n        var legacyEventInstances = [];\r\n        this.eventManager.getEventInstances().forEach(function (eventInstance) {\r\n            legacyEventInstances.push(eventInstance.toLegacy());\r\n        });\r\n        return filterLegacyEventInstances(legacyEventInstances, legacyQuery);\r\n    };\r\n    Calendar.prototype.updateEvents = function (eventPropsArray) {\r\n        this.eventManager.freeze();\r\n        for (var i = 0; i < eventPropsArray.length; i++) {\r\n            this.updateEvent(eventPropsArray[i]);\r\n        }\r\n        this.eventManager.thaw();\r\n    };\r\n    Calendar.prototype.updateEvent = function (eventProps) {\r\n        var eventDef = this.eventManager.getEventDefByUid(eventProps._id);\r\n        var eventInstance;\r\n        var eventDefMutation;\r\n        if (eventDef instanceof SingleEventDef_1.default) {\r\n            eventInstance = eventDef.buildInstance();\r\n            eventDefMutation = EventDefMutation_1.default.createFromRawProps(eventInstance, eventProps, // raw props\r\n            null // largeUnit -- who uses it?\r\n            );\r\n            this.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release\r\n        }\r\n    };\r\n    // Public Event Sources API\r\n    // ------------------------------------------------------------------------------------\r\n    Calendar.prototype.getEventSources = function () {\r\n        return this.eventManager.otherSources.slice(); // clone\r\n    };\r\n    Calendar.prototype.getEventSourceById = function (id) {\r\n        return this.eventManager.getSourceById(EventSource_1.default.normalizeId(id));\r\n    };\r\n    Calendar.prototype.addEventSource = function (sourceInput) {\r\n        var source = EventSourceParser_1.default.parse(sourceInput, this);\r\n        if (source) {\r\n            this.eventManager.addSource(source);\r\n        }\r\n    };\r\n    Calendar.prototype.removeEventSources = function (sourceMultiQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources;\r\n        var i;\r\n        if (sourceMultiQuery == null) {\r\n            this.eventManager.removeAllSources();\r\n        }\r\n        else {\r\n            sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n            eventManager.freeze();\r\n            for (i = 0; i < sources.length; i++) {\r\n                eventManager.removeSource(sources[i]);\r\n            }\r\n            eventManager.thaw();\r\n        }\r\n    };\r\n    Calendar.prototype.removeEventSource = function (sourceQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources = eventManager.querySources(sourceQuery);\r\n        var i;\r\n        eventManager.freeze();\r\n        for (i = 0; i < sources.length; i++) {\r\n            eventManager.removeSource(sources[i]);\r\n        }\r\n        eventManager.thaw();\r\n    };\r\n    Calendar.prototype.refetchEventSources = function (sourceMultiQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n        var i;\r\n        eventManager.freeze();\r\n        for (i = 0; i < sources.length; i++) {\r\n            eventManager.refetchSource(sources[i]);\r\n        }\r\n        eventManager.thaw();\r\n    };\r\n    // not for internal use. use options module directly instead.\r\n    Calendar.defaults = options_1.globalDefaults;\r\n    Calendar.englishDefaults = options_1.englishDefaults;\r\n    Calendar.rtlDefaults = options_1.rtlDefaults;\r\n    return Calendar;\r\n}());\r\nexports.default = Calendar;\r\nEmitterMixin_1.default.mixInto(Calendar);\r\nListenerMixin_1.default.mixInto(Calendar);\r\nfunction filterLegacyEventInstances(legacyEventInstances, legacyQuery) {\r\n    if (legacyQuery == null) {\r\n        return legacyEventInstances;\r\n    }\r\n    else if ($.isFunction(legacyQuery)) {\r\n        return legacyEventInstances.filter(legacyQuery);\r\n    }\r\n    else { // an event ID\r\n        legacyQuery += ''; // normalize to string\r\n        return legacyEventInstances.filter(function (legacyEventInstance) {\r\n            // soft comparison because id not be normalized to string\r\n            // tslint:disable-next-line\r\n            return legacyEventInstance.id == legacyQuery ||\r\n                legacyEventInstance._id === legacyQuery; // can specify internal id, but must exactly match\r\n        });\r\n    }\r\n}\r\n\n\n/***/ }),\n/* 233 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar ExternalDropping = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ExternalDropping, _super);\r\n    function ExternalDropping() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.isDragging = false; // jqui-dragging an external element? boolean\r\n        return _this;\r\n    }\r\n    /*\r\n    component impements:\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n      - isExternalInstanceGroupAllowed\r\n      - renderDrag\r\n      - unrenderDrag\r\n    */\r\n    ExternalDropping.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    ExternalDropping.prototype.bindToDocument = function () {\r\n        this.listenTo($(document), {\r\n            dragstart: this.handleDragStart,\r\n            sortstart: this.handleDragStart // jqui\r\n        });\r\n    };\r\n    ExternalDropping.prototype.unbindFromDocument = function () {\r\n        this.stopListeningTo($(document));\r\n    };\r\n    // Called when a jQuery UI drag is initiated anywhere in the DOM\r\n    ExternalDropping.prototype.handleDragStart = function (ev, ui) {\r\n        var el;\r\n        var accept;\r\n        if (this.opt('droppable')) { // only listen if this setting is on\r\n            el = $((ui ? ui.item : null) || ev.target);\r\n            // Test that the dragged element passes the dropAccept selector or filter function.\r\n            // FYI, the default is \"*\" (matches all)\r\n            accept = this.opt('dropAccept');\r\n            if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {\r\n                if (!this.isDragging) { // prevent double-listening if fired twice\r\n                    this.listenToExternalDrag(el, ev, ui);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    // Called when a jQuery UI drag starts and it needs to be monitored for dropping\r\n    ExternalDropping.prototype.listenToExternalDrag = function (el, ev, ui) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create\r\n        var singleEventDef; // a null value signals an unsuccessful drag\r\n        // listener that tracks mouse movement over date-associated pixel regions\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n            interactionStart: function () {\r\n                _this.isDragging = true;\r\n            },\r\n            hitOver: function (hit) {\r\n                var isAllowed = true;\r\n                var hitFootprint = hit.component.getSafeHitFootprint(hit); // hit might not belong to this grid\r\n                var mutatedEventInstanceGroup;\r\n                if (hitFootprint) {\r\n                    singleEventDef = _this.computeExternalDrop(hitFootprint, meta);\r\n                    if (singleEventDef) {\r\n                        mutatedEventInstanceGroup = new EventInstanceGroup_1.default(singleEventDef.buildInstances());\r\n                        isAllowed = meta.eventProps ? // isEvent?\r\n                            component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :\r\n                            component.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    singleEventDef = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                if (singleEventDef) {\r\n                    component.renderDrag(// called without a seg parameter\r\n                    component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, view.calendar)));\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                singleEventDef = null; // signal unsuccessful\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n                component.unrenderDrag();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                if (singleEventDef) { // element was dropped on a valid hit\r\n                    view.reportExternalDrop(singleEventDef, Boolean(meta.eventProps), // isEvent\r\n                    Boolean(meta.stick), // isSticky\r\n                    el, ev, ui);\r\n                }\r\n                _this.isDragging = false;\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        dragListener.startDrag(ev); // start listening immediately\r\n    };\r\n    // Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),\r\n    // returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.\r\n    // Returning a null value signals an invalid drop hit.\r\n    // DOES NOT consider overlap/constraint.\r\n    // Assumes both footprints are non-open-ended.\r\n    ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {\r\n        var calendar = this.view.calendar;\r\n        var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs).stripZone();\r\n        var end;\r\n        var eventDef;\r\n        if (componentFootprint.isAllDay) {\r\n            // if dropped on an all-day span, and element's metadata specified a time, set it\r\n            if (meta.startTime) {\r\n                start.time(meta.startTime);\r\n            }\r\n            else {\r\n                start.stripTime();\r\n            }\r\n        }\r\n        if (meta.duration) {\r\n            end = start.clone().add(meta.duration);\r\n        }\r\n        start = calendar.applyTimezone(start);\r\n        if (end) {\r\n            end = calendar.applyTimezone(end);\r\n        }\r\n        eventDef = SingleEventDef_1.default.parse($.extend({}, meta.eventProps, {\r\n            start: start,\r\n            end: end\r\n        }), new EventSource_1.default(calendar));\r\n        return eventDef;\r\n    };\r\n    return ExternalDropping;\r\n}(Interaction_1.default));\r\nexports.default = ExternalDropping;\r\nListenerMixin_1.default.mixInto(ExternalDropping);\r\n/* External-Dragging-Element Data\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.\r\n// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.\r\nexportHooks.dataAttrPrefix = '';\r\n// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure\r\n// to be used for Event Object creation.\r\n// A defined `.eventProps`, even when empty, indicates that an event should be created.\r\nfunction getDraggedElMeta(el) {\r\n    var prefix = exportHooks.dataAttrPrefix;\r\n    var eventProps; // properties for creating the event, not related to date/time\r\n    var startTime; // a Duration\r\n    var duration;\r\n    var stick;\r\n    if (prefix) {\r\n        prefix += '-';\r\n    }\r\n    eventProps = el.data(prefix + 'event') || null;\r\n    if (eventProps) {\r\n        if (typeof eventProps === 'object') {\r\n            eventProps = $.extend({}, eventProps); // make a copy\r\n        }\r\n        else { // something like 1 or true. still signal event creation\r\n            eventProps = {};\r\n        }\r\n        // pluck special-cased date/time properties\r\n        startTime = eventProps.start;\r\n        if (startTime == null) {\r\n            startTime = eventProps.time;\r\n        } // accept 'time' as well\r\n        duration = eventProps.duration;\r\n        stick = eventProps.stick;\r\n        delete eventProps.start;\r\n        delete eventProps.time;\r\n        delete eventProps.duration;\r\n        delete eventProps.stick;\r\n    }\r\n    // fallback to standalone attribute values for each of the date/time properties\r\n    if (startTime == null) {\r\n        startTime = el.data(prefix + 'start');\r\n    }\r\n    if (startTime == null) {\r\n        startTime = el.data(prefix + 'time');\r\n    } // accept 'time' as well\r\n    if (duration == null) {\r\n        duration = el.data(prefix + 'duration');\r\n    }\r\n    if (stick == null) {\r\n        stick = el.data(prefix + 'stick');\r\n    }\r\n    // massage into correct data types\r\n    startTime = startTime != null ? moment.duration(startTime) : null;\r\n    duration = duration != null ? moment.duration(duration) : null;\r\n    stick = Boolean(stick);\r\n    return { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };\r\n}\r\n\n\n/***/ }),\n/* 234 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventResizing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventResizing, _super);\r\n    /*\r\n    component impements:\r\n      - bindSegHandlerToEl\r\n      - publiclyTrigger\r\n      - diffDates\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n      - getSafeHitFootprint\r\n    */\r\n    function EventResizing(component, eventPointing) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.isResizing = false;\r\n        _this.eventPointing = eventPointing;\r\n        return _this;\r\n    }\r\n    EventResizing.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    EventResizing.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'mousedown', this.handleMouseDown.bind(this));\r\n        component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n    };\r\n    EventResizing.prototype.handleMouseDown = function (seg, ev) {\r\n        if (this.component.canStartResize(seg, ev)) {\r\n            this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n                .startInteraction(ev, { distance: 5 });\r\n        }\r\n    };\r\n    EventResizing.prototype.handleTouchStart = function (seg, ev) {\r\n        if (this.component.canStartResize(seg, ev)) {\r\n            this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n                .startInteraction(ev);\r\n        }\r\n    };\r\n    // Creates a listener that tracks the user as they resize an event segment.\r\n    // Generic enough to work with any type of Grid.\r\n    EventResizing.prototype.buildDragListener = function (seg, isStart) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var eventManager = calendar.eventManager;\r\n        var el = seg.el;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance;\r\n        var isDragging;\r\n        var resizeMutation; // zoned event date properties. falsy if invalid resize\r\n        // Tracks mouse movement over the *grid's* coordinate map\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            subjectEl: el,\r\n            interactionStart: function () {\r\n                isDragging = false;\r\n            },\r\n            dragStart: function (ev) {\r\n                isDragging = true;\r\n                // ensure a mouseout on the manipulated event has been reported\r\n                _this.eventPointing.handleMouseout(seg, ev);\r\n                _this.segResizeStart(seg, ev);\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var isAllowed = true;\r\n                var origHitFootprint = component.getSafeHitFootprint(origHit);\r\n                var hitFootprint = component.getSafeHitFootprint(hit);\r\n                var mutatedEventInstanceGroup;\r\n                if (origHitFootprint && hitFootprint) {\r\n                    resizeMutation = isStart ?\r\n                        _this.computeEventStartResizeMutation(origHitFootprint, hitFootprint, seg.footprint) :\r\n                        _this.computeEventEndResizeMutation(origHitFootprint, hitFootprint, seg.footprint);\r\n                    if (resizeMutation) {\r\n                        mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, resizeMutation);\r\n                        isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    resizeMutation = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                else if (resizeMutation.isEmpty()) {\r\n                    // no change. (FYI, event dates might have zones)\r\n                    resizeMutation = null;\r\n                }\r\n                if (resizeMutation) {\r\n                    view.hideEventsWithId(seg.footprint.eventDef.id);\r\n                    view.renderEventResize(component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg);\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                resizeMutation = null;\r\n            },\r\n            hitDone: function () {\r\n                view.unrenderEventResize(seg);\r\n                view.showEventsWithId(seg.footprint.eventDef.id);\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                if (isDragging) {\r\n                    _this.segResizeStop(seg, ev);\r\n                }\r\n                if (resizeMutation) { // valid date to resize to?\r\n                    // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n                    view.reportEventResize(eventInstance, resizeMutation, el, ev);\r\n                }\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Called before event segment resizing starts\r\n    EventResizing.prototype.segResizeStart = function (seg, ev) {\r\n        this.isResizing = true;\r\n        this.component.publiclyTrigger('eventResizeStart', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Called after event segment resizing stops\r\n    EventResizing.prototype.segResizeStop = function (seg, ev) {\r\n        this.isResizing = false;\r\n        this.component.publiclyTrigger('eventResizeStop', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Returns new date-information for an event segment being resized from its start\r\n    EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n        var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n        var startDelta = this.component.diffDates(endFootprint.unzonedRange.getStart(), startFootprint.unzonedRange.getStart());\r\n        var dateMutation;\r\n        var eventDefMutation;\r\n        if (origRange.getStart().add(startDelta) < origRange.getEnd()) {\r\n            dateMutation = new EventDefDateMutation_1.default();\r\n            dateMutation.setStartDelta(startDelta);\r\n            eventDefMutation = new EventDefMutation_1.default();\r\n            eventDefMutation.setDateMutation(dateMutation);\r\n            return eventDefMutation;\r\n        }\r\n        return false;\r\n    };\r\n    // Returns new date-information for an event segment being resized from its end\r\n    EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n        var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n        var endDelta = this.component.diffDates(endFootprint.unzonedRange.getEnd(), startFootprint.unzonedRange.getEnd());\r\n        var dateMutation;\r\n        var eventDefMutation;\r\n        if (origRange.getEnd().add(endDelta) > origRange.getStart()) {\r\n            dateMutation = new EventDefDateMutation_1.default();\r\n            dateMutation.setEndDelta(endDelta);\r\n            eventDefMutation = new EventDefMutation_1.default();\r\n            eventDefMutation.setDateMutation(dateMutation);\r\n            return eventDefMutation;\r\n        }\r\n        return false;\r\n    };\r\n    return EventResizing;\r\n}(Interaction_1.default));\r\nexports.default = EventResizing;\r\n\n\n/***/ }),\n/* 235 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar DragListener_1 = __webpack_require__(59);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventDragging = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventDragging, _super);\r\n    /*\r\n    component implements:\r\n      - bindSegHandlerToEl\r\n      - publiclyTrigger\r\n      - diffDates\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n    */\r\n    function EventDragging(component, eventPointing) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.isDragging = false;\r\n        _this.eventPointing = eventPointing;\r\n        return _this;\r\n    }\r\n    EventDragging.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    EventDragging.prototype.getSelectionDelay = function () {\r\n        var delay = this.opt('eventLongPressDelay');\r\n        if (delay == null) {\r\n            delay = this.opt('longPressDelay'); // fallback\r\n        }\r\n        return delay;\r\n    };\r\n    EventDragging.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'mousedown', this.handleMousedown.bind(this));\r\n        component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n    };\r\n    EventDragging.prototype.handleMousedown = function (seg, ev) {\r\n        if (!this.component.shouldIgnoreMouse() &&\r\n            this.component.canStartDrag(seg, ev)) {\r\n            this.buildDragListener(seg).startInteraction(ev, { distance: 5 });\r\n        }\r\n    };\r\n    EventDragging.prototype.handleTouchStart = function (seg, ev) {\r\n        var component = this.component;\r\n        var settings = {\r\n            delay: this.view.isEventDefSelected(seg.footprint.eventDef) ? // already selected?\r\n                0 : this.getSelectionDelay()\r\n        };\r\n        if (component.canStartDrag(seg, ev)) {\r\n            this.buildDragListener(seg).startInteraction(ev, settings);\r\n        }\r\n        else if (component.canStartSelection(seg, ev)) {\r\n            this.buildSelectListener(seg).startInteraction(ev, settings);\r\n        }\r\n    };\r\n    // seg isn't draggable, but let's use a generic DragListener\r\n    // simply for the delay, so it can be selected.\r\n    // Has side effect of setting/unsetting `dragListener`\r\n    EventDragging.prototype.buildSelectListener = function (seg) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n        if (this.dragListener) {\r\n            return this.dragListener;\r\n        }\r\n        var dragListener = this.dragListener = new DragListener_1.default({\r\n            dragStart: function (ev) {\r\n                if (dragListener.isTouch &&\r\n                    !view.isEventDefSelected(eventDef) &&\r\n                    eventInstance) {\r\n                    // if not previously selected, will fire after a delay. then, select the event\r\n                    view.selectEventInstance(eventInstance);\r\n                }\r\n            },\r\n            interactionEnd: function (ev) {\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Builds a listener that will track user-dragging on an event segment.\r\n    // Generic enough to work with any type of Grid.\r\n    // Has side effect of setting/unsetting `dragListener`\r\n    EventDragging.prototype.buildDragListener = function (seg) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var eventManager = calendar.eventManager;\r\n        var el = seg.el;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n        var isDragging;\r\n        var mouseFollower; // A clone of the original element that will move with the mouse\r\n        var eventDefMutation;\r\n        if (this.dragListener) {\r\n            return this.dragListener;\r\n        }\r\n        // Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents\r\n        // of the view.\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(view, {\r\n            scroll: this.opt('dragScroll'),\r\n            subjectEl: el,\r\n            subjectCenter: true,\r\n            interactionStart: function (ev) {\r\n                seg.component = component; // for renderDrag\r\n                isDragging = false;\r\n                mouseFollower = new MouseFollower_1.default(seg.el, {\r\n                    additionalClass: 'fc-dragging',\r\n                    parentEl: view.el,\r\n                    opacity: dragListener.isTouch ? null : _this.opt('dragOpacity'),\r\n                    revertDuration: _this.opt('dragRevertDuration'),\r\n                    zIndex: 2 // one above the .fc-view\r\n                });\r\n                mouseFollower.hide(); // don't show until we know this is a real drag\r\n                mouseFollower.start(ev);\r\n            },\r\n            dragStart: function (ev) {\r\n                if (dragListener.isTouch &&\r\n                    !view.isEventDefSelected(eventDef) &&\r\n                    eventInstance) {\r\n                    // if not previously selected, will fire after a delay. then, select the event\r\n                    view.selectEventInstance(eventInstance);\r\n                }\r\n                isDragging = true;\r\n                // ensure a mouseout on the manipulated event has been reported\r\n                _this.eventPointing.handleMouseout(seg, ev);\r\n                _this.segDragStart(seg, ev);\r\n                view.hideEventsWithId(seg.footprint.eventDef.id);\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var isAllowed = true;\r\n                var origFootprint;\r\n                var footprint;\r\n                var mutatedEventInstanceGroup;\r\n                // starting hit could be forced (DayGrid.limit)\r\n                if (seg.hit) {\r\n                    origHit = seg.hit;\r\n                }\r\n                // hit might not belong to this grid, so query origin grid\r\n                origFootprint = origHit.component.getSafeHitFootprint(origHit);\r\n                footprint = hit.component.getSafeHitFootprint(hit);\r\n                if (origFootprint && footprint) {\r\n                    eventDefMutation = _this.computeEventDropMutation(origFootprint, footprint, eventDef);\r\n                    if (eventDefMutation) {\r\n                        mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, eventDefMutation);\r\n                        isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    eventDefMutation = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                // if a valid drop location, have the subclass render a visual indication\r\n                if (eventDefMutation &&\r\n                    view.renderDrag(// truthy if rendered something\r\n                    component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg, dragListener.isTouch)) {\r\n                    mouseFollower.hide(); // if the subclass is already using a mock event \"helper\", hide our own\r\n                }\r\n                else {\r\n                    mouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)\r\n                }\r\n                if (isOrig) {\r\n                    // needs to have moved hits to be a valid drop\r\n                    eventDefMutation = null;\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                view.unrenderDrag(seg); // unrender whatever was done in renderDrag\r\n                mouseFollower.show(); // show in case we are moving out of all hits\r\n                eventDefMutation = null;\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                delete seg.component; // prevent side effects\r\n                // do revert animation if hasn't changed. calls a callback when finished (whether animation or not)\r\n                mouseFollower.stop(!eventDefMutation, function () {\r\n                    if (isDragging) {\r\n                        view.unrenderDrag(seg);\r\n                        _this.segDragStop(seg, ev);\r\n                    }\r\n                    view.showEventsWithId(seg.footprint.eventDef.id);\r\n                    if (eventDefMutation) {\r\n                        // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n                        view.reportEventDrop(eventInstance, eventDefMutation, el, ev);\r\n                    }\r\n                });\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Called before event segment dragging starts\r\n    EventDragging.prototype.segDragStart = function (seg, ev) {\r\n        this.isDragging = true;\r\n        this.component.publiclyTrigger('eventDragStart', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Called after event segment dragging stops\r\n    EventDragging.prototype.segDragStop = function (seg, ev) {\r\n        this.isDragging = false;\r\n        this.component.publiclyTrigger('eventDragStop', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // DOES NOT consider overlap/constraint\r\n    EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {\r\n        var eventDefMutation = new EventDefMutation_1.default();\r\n        eventDefMutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));\r\n        return eventDefMutation;\r\n    };\r\n    EventDragging.prototype.computeEventDateMutation = function (startFootprint, endFootprint) {\r\n        var date0 = startFootprint.unzonedRange.getStart();\r\n        var date1 = endFootprint.unzonedRange.getStart();\r\n        var clearEnd = false;\r\n        var forceTimed = false;\r\n        var forceAllDay = false;\r\n        var dateDelta;\r\n        var dateMutation;\r\n        if (startFootprint.isAllDay !== endFootprint.isAllDay) {\r\n            clearEnd = true;\r\n            if (endFootprint.isAllDay) {\r\n                forceAllDay = true;\r\n                date0.stripTime();\r\n            }\r\n            else {\r\n                forceTimed = true;\r\n            }\r\n        }\r\n        dateDelta = this.component.diffDates(date1, date0);\r\n        dateMutation = new EventDefDateMutation_1.default();\r\n        dateMutation.clearEnd = clearEnd;\r\n        dateMutation.forceTimed = forceTimed;\r\n        dateMutation.forceAllDay = forceAllDay;\r\n        dateMutation.setDateDelta(dateDelta);\r\n        return dateMutation;\r\n    };\r\n    return EventDragging;\r\n}(Interaction_1.default));\r\nexports.default = EventDragging;\r\n\n\n/***/ }),\n/* 236 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateSelecting = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateSelecting, _super);\r\n    /*\r\n    component must implement:\r\n      - bindDateHandlerToEl\r\n      - getSafeHitFootprint\r\n      - renderHighlight\r\n      - unrenderHighlight\r\n    */\r\n    function DateSelecting(component) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.dragListener = _this.buildDragListener();\r\n        return _this;\r\n    }\r\n    DateSelecting.prototype.end = function () {\r\n        this.dragListener.endInteraction();\r\n    };\r\n    DateSelecting.prototype.getDelay = function () {\r\n        var delay = this.opt('selectLongPressDelay');\r\n        if (delay == null) {\r\n            delay = this.opt('longPressDelay'); // fallback\r\n        }\r\n        return delay;\r\n    };\r\n    DateSelecting.prototype.bindToEl = function (el) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var dragListener = this.dragListener;\r\n        component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n            if (_this.opt('selectable') && !component.shouldIgnoreMouse()) {\r\n                dragListener.startInteraction(ev, {\r\n                    distance: _this.opt('selectMinDistance')\r\n                });\r\n            }\r\n        });\r\n        component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n            if (_this.opt('selectable') && !component.shouldIgnoreTouch()) {\r\n                dragListener.startInteraction(ev, {\r\n                    delay: _this.getDelay()\r\n                });\r\n            }\r\n        });\r\n        util_1.preventSelection(el);\r\n    };\r\n    // Creates a listener that tracks the user's drag across day elements, for day selecting.\r\n    DateSelecting.prototype.buildDragListener = function () {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var selectionFootprint; // null if invalid selection\r\n        var dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            interactionStart: function () {\r\n                selectionFootprint = null;\r\n            },\r\n            dragStart: function (ev) {\r\n                _this.view.unselect(ev); // since we could be rendering a new selection, we want to clear any old one\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var origHitFootprint;\r\n                var hitFootprint;\r\n                if (origHit) { // click needs to have started on a hit\r\n                    origHitFootprint = component.getSafeHitFootprint(origHit);\r\n                    hitFootprint = component.getSafeHitFootprint(hit);\r\n                    if (origHitFootprint && hitFootprint) {\r\n                        selectionFootprint = _this.computeSelection(origHitFootprint, hitFootprint);\r\n                    }\r\n                    else {\r\n                        selectionFootprint = null;\r\n                    }\r\n                    if (selectionFootprint) {\r\n                        component.renderSelectionFootprint(selectionFootprint);\r\n                    }\r\n                    else if (selectionFootprint === false) {\r\n                        util_1.disableCursor();\r\n                    }\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                selectionFootprint = null;\r\n                component.unrenderSelection();\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev, isCancelled) {\r\n                if (!isCancelled && selectionFootprint) {\r\n                    // the selection will already have been rendered. just report it\r\n                    _this.view.reportSelection(selectionFootprint, ev);\r\n                }\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Given the first and last date-spans of a selection, returns another date-span object.\r\n    // Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().\r\n    // Will return false if the selection is invalid and this should be indicated to the user.\r\n    // Will return null/undefined if a selection invalid but no error should be reported.\r\n    DateSelecting.prototype.computeSelection = function (footprint0, footprint1) {\r\n        var wholeFootprint = this.computeSelectionFootprint(footprint0, footprint1);\r\n        if (wholeFootprint && !this.isSelectionFootprintAllowed(wholeFootprint)) {\r\n            return false;\r\n        }\r\n        return wholeFootprint;\r\n    };\r\n    // Given two spans, must return the combination of the two.\r\n    // TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.\r\n    // Assumes both footprints are non-open-ended.\r\n    DateSelecting.prototype.computeSelectionFootprint = function (footprint0, footprint1) {\r\n        var ms = [\r\n            footprint0.unzonedRange.startMs,\r\n            footprint0.unzonedRange.endMs,\r\n            footprint1.unzonedRange.startMs,\r\n            footprint1.unzonedRange.endMs\r\n        ];\r\n        ms.sort(util_1.compareNumbers);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(ms[0], ms[3]), footprint0.isAllDay);\r\n    };\r\n    DateSelecting.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n        return this.component.dateProfile.validUnzonedRange.containsRange(componentFootprint.unzonedRange) &&\r\n            this.view.calendar.constraints.isSelectionFootprintAllowed(componentFootprint);\r\n    };\r\n    return DateSelecting;\r\n}(Interaction_1.default));\r\nexports.default = DateSelecting;\r\n\n\n/***/ }),\n/* 237 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateClicking = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateClicking, _super);\r\n    /*\r\n    component must implement:\r\n      - bindDateHandlerToEl\r\n      - getSafeHitFootprint\r\n      - getHitEl\r\n    */\r\n    function DateClicking(component) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.dragListener = _this.buildDragListener();\r\n        return _this;\r\n    }\r\n    DateClicking.prototype.end = function () {\r\n        this.dragListener.endInteraction();\r\n    };\r\n    DateClicking.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        var dragListener = this.dragListener;\r\n        component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n            if (!component.shouldIgnoreMouse()) {\r\n                dragListener.startInteraction(ev);\r\n            }\r\n        });\r\n        component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n            if (!component.shouldIgnoreTouch()) {\r\n                dragListener.startInteraction(ev);\r\n            }\r\n        });\r\n    };\r\n    // Creates a listener that tracks the user's drag across day elements, for day clicking.\r\n    DateClicking.prototype.buildDragListener = function () {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var dayClickHit; // null if invalid dayClick\r\n        var dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            interactionStart: function () {\r\n                dayClickHit = dragListener.origHit;\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                // if user dragged to another cell at any point, it can no longer be a dayClick\r\n                if (!isOrig) {\r\n                    dayClickHit = null;\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                dayClickHit = null;\r\n            },\r\n            interactionEnd: function (ev, isCancelled) {\r\n                var componentFootprint;\r\n                if (!isCancelled && dayClickHit) {\r\n                    componentFootprint = component.getSafeHitFootprint(dayClickHit);\r\n                    if (componentFootprint) {\r\n                        _this.view.triggerDayClick(componentFootprint, component.getHitEl(dayClickHit), ev);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        // because dragListener won't be called with any time delay, \"dragging\" will begin immediately,\r\n        // which will kill any touchmoving/scrolling. Prevent this.\r\n        dragListener.shouldCancelTouchScroll = false;\r\n        dragListener.scrollAlwaysKills = true;\r\n        return dragListener;\r\n    };\r\n    return DateClicking;\r\n}(Interaction_1.default));\r\nexports.default = DateClicking;\r\n\n\n/***/ }),\n/* 238 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nvar DayGrid_1 = __webpack_require__(66);\r\nvar AGENDA_ALL_DAY_EVENT_LIMIT = 5;\r\nvar agendaTimeGridMethods;\r\nvar agendaDayGridMethods;\r\n/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\r\n// Responsible for managing width/height.\r\nvar AgendaView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AgendaView, _super);\r\n    function AgendaView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering\r\n        _this.timeGrid = _this.instantiateTimeGrid();\r\n        _this.addChild(_this.timeGrid);\r\n        if (_this.opt('allDaySlot')) { // should we display the \"all-day\" area?\r\n            _this.dayGrid = _this.instantiateDayGrid(); // the all-day subcomponent of this view\r\n            _this.addChild(_this.dayGrid);\r\n        }\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass\r\n    AgendaView.prototype.instantiateTimeGrid = function () {\r\n        var timeGrid = new this.timeGridClass(this);\r\n        util_1.copyOwnProps(agendaTimeGridMethods, timeGrid);\r\n        return timeGrid;\r\n    };\r\n    // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass\r\n    AgendaView.prototype.instantiateDayGrid = function () {\r\n        var dayGrid = new this.dayGridClass(this);\r\n        util_1.copyOwnProps(agendaDayGridMethods, dayGrid);\r\n        return dayGrid;\r\n    };\r\n    /* Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.renderSkeleton = function () {\r\n        var timeGridWrapEl;\r\n        var timeGridEl;\r\n        this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());\r\n        this.scroller.render();\r\n        timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');\r\n        timeGridEl = $('<div class=\"fc-time-grid\" />').appendTo(timeGridWrapEl);\r\n        this.el.find('.fc-body > tr > td').append(timeGridWrapEl);\r\n        this.timeGrid.headContainerEl = this.el.find('.fc-head-container');\r\n        this.timeGrid.setElement(timeGridEl);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.setElement(this.el.find('.fc-day-grid'));\r\n            // have the day-grid extend it's coordinate area over the <hr> dividing the two grids\r\n            this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();\r\n        }\r\n    };\r\n    AgendaView.prototype.unrenderSkeleton = function () {\r\n        this.timeGrid.removeElement();\r\n        if (this.dayGrid) {\r\n            this.dayGrid.removeElement();\r\n        }\r\n        this.scroller.destroy();\r\n    };\r\n    // Builds the HTML skeleton for the view.\r\n    // The day-grid and time-grid components will render inside containers defined by this HTML.\r\n    AgendaView.prototype.renderSkeletonHtml = function () {\r\n        var theme = this.calendar.theme;\r\n        return '' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            (this.opt('columnHeader') ?\r\n                '<thead class=\"fc-head\">' +\r\n                    '<tr>' +\r\n                    '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' +\r\n                    '</tr>' +\r\n                    '</thead>' :\r\n                '') +\r\n            '<tbody class=\"fc-body\">' +\r\n            '<tr>' +\r\n            '<td class=\"' + theme.getClass('widgetContent') + '\">' +\r\n            (this.dayGrid ?\r\n                '<div class=\"fc-day-grid\"/>' +\r\n                    '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\"/>' :\r\n                '') +\r\n            '</td>' +\r\n            '</tr>' +\r\n            '</tbody>' +\r\n            '</table>';\r\n    };\r\n    // Generates an HTML attribute string for setting the width of the axis, if it is known\r\n    AgendaView.prototype.axisStyleAttr = function () {\r\n        if (this.axisWidth != null) {\r\n            return 'style=\"width:' + this.axisWidth + 'px\"';\r\n        }\r\n        return '';\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.getNowIndicatorUnit = function () {\r\n        return this.timeGrid.getNowIndicatorUnit();\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Adjusts the vertical dimensions of the view to the specified values\r\n    AgendaView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        var eventLimit;\r\n        var scrollerHeight;\r\n        var scrollbarWidths;\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        // make all axis cells line up, and record the width so newly created axis cells will have it\r\n        this.axisWidth = util_1.matchCellWidths(this.el.find('.fc-axis'));\r\n        // hack to give the view some height prior to timeGrid's columns being rendered\r\n        // TODO: separate setting height from scroller VS timeGrid.\r\n        if (!this.timeGrid.colEls) {\r\n            if (!isAuto) {\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            return;\r\n        }\r\n        // set of fake row elements that must compensate when scroller has scrollbars\r\n        var noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)');\r\n        // reset all dimensions back to the original state\r\n        this.timeGrid.bottomRuleEl.hide(); // .show() will be called later if this <hr> is necessary\r\n        this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n        util_1.uncompensateScroll(noScrollRowEls);\r\n        // limit number of events in the all-day area\r\n        if (this.dayGrid) {\r\n            this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n            eventLimit = this.opt('eventLimit');\r\n            if (eventLimit && typeof eventLimit !== 'number') {\r\n                eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure \"auto\" goes to a real number\r\n            }\r\n            if (eventLimit) {\r\n                this.dayGrid.limitRows(eventLimit);\r\n            }\r\n        }\r\n        if (!isAuto) { // should we force dimensions of the scroll container?\r\n            scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n            this.scroller.setHeight(scrollerHeight);\r\n            scrollbarWidths = this.scroller.getScrollbarWidths();\r\n            if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n                // make the all-day and header rows lines up\r\n                util_1.compensateScroll(noScrollRowEls, scrollbarWidths);\r\n                // the scrollbar compensation might have changed text flow, which might affect height, so recalculate\r\n                // and reapply the desired height to the scroller.\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            // guarantees the same scrollbar widths\r\n            this.scroller.lockOverflow(scrollbarWidths);\r\n            // if there's any space below the slats, show the horizontal rule.\r\n            // this won't cause any new overflow, because lockOverflow already called.\r\n            if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\r\n                this.timeGrid.bottomRuleEl.show();\r\n            }\r\n        }\r\n    };\r\n    // given a desired total height of the view, returns what the height of the scroller should be\r\n    AgendaView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    /* Scroll\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes the initial pre-configured scroll state prior to allowing the user to change it\r\n    AgendaView.prototype.computeInitialDateScroll = function () {\r\n        var scrollTime = moment.duration(this.opt('scrollTime'));\r\n        var top = this.timeGrid.computeTimeTop(scrollTime);\r\n        // zoom can give weird floating-point values. rather scroll a little bit further\r\n        top = Math.ceil(top);\r\n        if (top) {\r\n            top++; // to overcome top border that slots beyond the first have. looks better\r\n        }\r\n        return { top: top };\r\n    };\r\n    AgendaView.prototype.queryDateScroll = function () {\r\n        return { top: this.scroller.getScrollTop() };\r\n    };\r\n    AgendaView.prototype.applyDateScroll = function (scroll) {\r\n        if (scroll.top !== undefined) {\r\n            this.scroller.setScrollTop(scroll.top);\r\n        }\r\n    };\r\n    /* Hit Areas\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // forward all hit-related method calls to the grids (dayGrid might not be defined)\r\n    AgendaView.prototype.getHitFootprint = function (hit) {\r\n        // TODO: hit.component is set as a hack to identify where the hit came from\r\n        return hit.component.getHitFootprint(hit);\r\n    };\r\n    AgendaView.prototype.getHitEl = function (hit) {\r\n        // TODO: hit.component is set as a hack to identify where the hit came from\r\n        return hit.component.getHitEl(hit);\r\n    };\r\n    /* Event Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.executeEventRender = function (eventsPayload) {\r\n        var dayEventsPayload = {};\r\n        var timedEventsPayload = {};\r\n        var id;\r\n        var eventInstanceGroup;\r\n        // separate the events into all-day and timed\r\n        for (id in eventsPayload) {\r\n            eventInstanceGroup = eventsPayload[id];\r\n            if (eventInstanceGroup.getEventDef().isAllDay()) {\r\n                dayEventsPayload[id] = eventInstanceGroup;\r\n            }\r\n            else {\r\n                timedEventsPayload[id] = eventInstanceGroup;\r\n            }\r\n        }\r\n        this.timeGrid.executeEventRender(timedEventsPayload);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.executeEventRender(dayEventsPayload);\r\n        }\r\n    };\r\n    /* Dragging/Resizing Routing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n    AgendaView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n        var renderedHelper = false;\r\n        renderedHelper = this.timeGrid.renderDrag(groups.timed, seg, isTouch);\r\n        if (this.dayGrid) {\r\n            renderedHelper = this.dayGrid.renderDrag(groups.allDay, seg, isTouch) || renderedHelper;\r\n        }\r\n        return renderedHelper;\r\n    };\r\n    AgendaView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n        this.timeGrid.renderEventResize(groups.timed, seg, isTouch);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.renderEventResize(groups.allDay, seg, isTouch);\r\n        }\r\n    };\r\n    /* Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of a selection\r\n    AgendaView.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        if (!componentFootprint.isAllDay) {\r\n            this.timeGrid.renderSelectionFootprint(componentFootprint);\r\n        }\r\n        else if (this.dayGrid) {\r\n            this.dayGrid.renderSelectionFootprint(componentFootprint);\r\n        }\r\n    };\r\n    return AgendaView;\r\n}(View_1.default));\r\nexports.default = AgendaView;\r\nAgendaView.prototype.timeGridClass = TimeGrid_1.default;\r\nAgendaView.prototype.dayGridClass = DayGrid_1.default;\r\n// Will customize the rendering behavior of the AgendaView's timeGrid\r\nagendaTimeGridMethods = {\r\n    // Generates the HTML that will go before the day-of week header cells\r\n    renderHeadIntroHtml: function () {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var weekStart = calendar.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, true);\r\n        var weekText;\r\n        if (this.opt('weekNumbers')) {\r\n            weekText = weekStart.format(this.opt('smallWeekFormat'));\r\n            return '' +\r\n                '<th class=\"fc-axis fc-week-number ' + calendar.theme.getClass('widgetHeader') + '\" ' + view.axisStyleAttr() + '>' +\r\n                view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n                { date: weekStart, type: 'week', forceOff: this.colCnt > 1 }, util_1.htmlEscape(weekText) // inner HTML\r\n                ) +\r\n                '</th>';\r\n        }\r\n        else {\r\n            return '<th class=\"fc-axis ' + calendar.theme.getClass('widgetHeader') + '\" ' + view.axisStyleAttr() + '></th>';\r\n        }\r\n    },\r\n    // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\r\n    renderBgIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '></td>';\r\n    },\r\n    // Generates the HTML that goes before all other types of cells.\r\n    // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n    renderIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis\" ' + view.axisStyleAttr() + '></td>';\r\n    }\r\n};\r\n// Will customize the rendering behavior of the AgendaView's dayGrid\r\nagendaDayGridMethods = {\r\n    // Generates the HTML that goes before the all-day cells\r\n    renderBgIntroHtml: function () {\r\n        var view = this.view;\r\n        return '' +\r\n            '<td class=\"fc-axis ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '>' +\r\n            '<span>' + // needed for matchCellWidths\r\n            view.getAllDayHtml() +\r\n            '</span>' +\r\n            '</td>';\r\n    },\r\n    // Generates the HTML that goes before all other types of cells.\r\n    // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n    renderIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis\" ' + view.axisStyleAttr() + '></td>';\r\n    }\r\n};\r\nfunction groupEventFootprintsByAllDay(eventFootprints) {\r\n    var allDay = [];\r\n    var timed = [];\r\n    var i;\r\n    for (i = 0; i < eventFootprints.length; i++) {\r\n        if (eventFootprints[i].componentFootprint.isAllDay) {\r\n            allDay.push(eventFootprints[i]);\r\n        }\r\n        else {\r\n            timed.push(eventFootprints[i]);\r\n        }\r\n    }\r\n    return { allDay: allDay, timed: timed };\r\n}\r\n\n\n/***/ }),\n/* 239 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\n/* A component that renders one or more columns of vertical time slots\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// We mixin DayTable, even though there is only a single row of days\r\n// potential nice values for the slot-duration and interval-duration\r\n// from largest to smallest\r\nvar AGENDA_STOCK_SUB_DURATIONS = [\r\n    { hours: 1 },\r\n    { minutes: 30 },\r\n    { minutes: 15 },\r\n    { seconds: 30 },\r\n    { seconds: 15 }\r\n];\r\nvar TimeGrid = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGrid, _super);\r\n    function TimeGrid(view) {\r\n        var _this = _super.call(this, view) || this;\r\n        _this.processOptions();\r\n        return _this;\r\n    }\r\n    // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n    TimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);\r\n        var i;\r\n        for (i = 0; i < segs.length; i++) {\r\n            if (this.isRTL) {\r\n                segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;\r\n            }\r\n            else {\r\n                segs[i].col = segs[i].dayIndex;\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Date Handling\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.sliceRangeByTimes = function (unzonedRange) {\r\n        var segs = [];\r\n        var segRange;\r\n        var dayIndex;\r\n        for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {\r\n            segRange = unzonedRange.intersect(this.dayRanges[dayIndex]);\r\n            if (segRange) {\r\n                segs.push({\r\n                    startMs: segRange.startMs,\r\n                    endMs: segRange.endMs,\r\n                    isStart: segRange.isStart,\r\n                    isEnd: segRange.isEnd,\r\n                    dayIndex: dayIndex\r\n                });\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Options\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Parses various options into properties of this object\r\n    TimeGrid.prototype.processOptions = function () {\r\n        var slotDuration = this.opt('slotDuration');\r\n        var snapDuration = this.opt('snapDuration');\r\n        var input;\r\n        slotDuration = moment.duration(slotDuration);\r\n        snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;\r\n        this.slotDuration = slotDuration;\r\n        this.snapDuration = snapDuration;\r\n        this.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?\r\n        // might be an array value (for TimelineView).\r\n        // if so, getting the most granular entry (the last one probably).\r\n        input = this.opt('slotLabelFormat');\r\n        if ($.isArray(input)) {\r\n            input = input[input.length - 1];\r\n        }\r\n        this.labelFormat = input ||\r\n            this.opt('smallTimeFormat'); // the computed default\r\n        input = this.opt('slotLabelInterval');\r\n        this.labelInterval = input ?\r\n            moment.duration(input) :\r\n            this.computeLabelInterval(slotDuration);\r\n    };\r\n    // Computes an automatic value for slotLabelInterval\r\n    TimeGrid.prototype.computeLabelInterval = function (slotDuration) {\r\n        var i;\r\n        var labelInterval;\r\n        var slotsPerLabel;\r\n        // find the smallest stock label interval that results in more than one slots-per-label\r\n        for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\r\n            labelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);\r\n            slotsPerLabel = util_1.divideDurationByDuration(labelInterval, slotDuration);\r\n            if (util_1.isInt(slotsPerLabel) && slotsPerLabel > 1) {\r\n                return labelInterval;\r\n            }\r\n        }\r\n        return moment.duration(slotDuration); // fall back. clone\r\n    };\r\n    /* Date Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.renderDates = function (dateProfile) {\r\n        this.dateProfile = dateProfile;\r\n        this.updateDayTable();\r\n        this.renderSlats();\r\n        this.renderColumns();\r\n    };\r\n    TimeGrid.prototype.unrenderDates = function () {\r\n        // this.unrenderSlats(); // don't need this because repeated .html() calls clear\r\n        this.unrenderColumns();\r\n    };\r\n    TimeGrid.prototype.renderSkeleton = function () {\r\n        var theme = this.view.calendar.theme;\r\n        this.el.html('<div class=\"fc-bg\"></div>' +\r\n            '<div class=\"fc-slats\"></div>' +\r\n            '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\" style=\"display:none\" />');\r\n        this.bottomRuleEl = this.el.find('hr');\r\n    };\r\n    TimeGrid.prototype.renderSlats = function () {\r\n        var theme = this.view.calendar.theme;\r\n        this.slatContainerEl = this.el.find('> .fc-slats')\r\n            .html(// avoids needing ::unrenderSlats()\r\n        '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderSlatRowHtml() +\r\n            '</table>');\r\n        this.slatEls = this.slatContainerEl.find('tr');\r\n        this.slatCoordCache = new CoordCache_1.default({\r\n            els: this.slatEls,\r\n            isVertical: true\r\n        });\r\n    };\r\n    // Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\r\n    TimeGrid.prototype.renderSlatRowHtml = function () {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var theme = calendar.theme;\r\n        var isRTL = this.isRTL;\r\n        var dateProfile = this.dateProfile;\r\n        var html = '';\r\n        var slotTime = moment.duration(+dateProfile.minTime); // wish there was .clone() for durations\r\n        var slotIterator = moment.duration(0);\r\n        var slotDate; // will be on the view's first day, but we only care about its time\r\n        var isLabeled;\r\n        var axisHtml;\r\n        // Calculate the time for each slot\r\n        while (slotTime < dateProfile.maxTime) {\r\n            slotDate = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs).time(slotTime);\r\n            isLabeled = util_1.isInt(util_1.divideDurationByDuration(slotIterator, this.labelInterval));\r\n            axisHtml =\r\n                '<td class=\"fc-axis fc-time ' + theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '>' +\r\n                    (isLabeled ?\r\n                        '<span>' + // for matchCellWidths\r\n                            util_1.htmlEscape(slotDate.format(this.labelFormat)) +\r\n                            '</span>' :\r\n                        '') +\r\n                    '</td>';\r\n            html +=\r\n                '<tr data-time=\"' + slotDate.format('HH:mm:ss') + '\"' +\r\n                    (isLabeled ? '' : ' class=\"fc-minor\"') +\r\n                    '>' +\r\n                    (!isRTL ? axisHtml : '') +\r\n                    '<td class=\"' + theme.getClass('widgetContent') + '\"/>' +\r\n                    (isRTL ? axisHtml : '') +\r\n                    '</tr>';\r\n            slotTime.add(this.slotDuration);\r\n            slotIterator.add(this.slotDuration);\r\n        }\r\n        return html;\r\n    };\r\n    TimeGrid.prototype.renderColumns = function () {\r\n        var dateProfile = this.dateProfile;\r\n        var theme = this.view.calendar.theme;\r\n        this.dayRanges = this.dayDates.map(function (dayDate) {\r\n            return new UnzonedRange_1.default(dayDate.clone().add(dateProfile.minTime), dayDate.clone().add(dateProfile.maxTime));\r\n        });\r\n        if (this.headContainerEl) {\r\n            this.headContainerEl.html(this.renderHeadHtml());\r\n        }\r\n        this.el.find('> .fc-bg').html('<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderBgTrHtml(0) + // row=0\r\n            '</table>');\r\n        this.colEls = this.el.find('.fc-day, .fc-disabled-day');\r\n        this.colCoordCache = new CoordCache_1.default({\r\n            els: this.colEls,\r\n            isHorizontal: true\r\n        });\r\n        this.renderContentSkeleton();\r\n    };\r\n    TimeGrid.prototype.unrenderColumns = function () {\r\n        this.unrenderContentSkeleton();\r\n    };\r\n    /* Content Skeleton\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders the DOM that the view's content will live in\r\n    TimeGrid.prototype.renderContentSkeleton = function () {\r\n        var cellHtml = '';\r\n        var i;\r\n        var skeletonEl;\r\n        for (i = 0; i < this.colCnt; i++) {\r\n            cellHtml +=\r\n                '<td>' +\r\n                    '<div class=\"fc-content-col\">' +\r\n                    '<div class=\"fc-event-container fc-helper-container\"></div>' +\r\n                    '<div class=\"fc-event-container\"></div>' +\r\n                    '<div class=\"fc-highlight-container\"></div>' +\r\n                    '<div class=\"fc-bgevent-container\"></div>' +\r\n                    '<div class=\"fc-business-container\"></div>' +\r\n                    '</div>' +\r\n                    '</td>';\r\n        }\r\n        skeletonEl = this.contentSkeletonEl = $('<div class=\"fc-content-skeleton\">' +\r\n            '<table>' +\r\n            '<tr>' + cellHtml + '</tr>' +\r\n            '</table>' +\r\n            '</div>');\r\n        this.colContainerEls = skeletonEl.find('.fc-content-col');\r\n        this.helperContainerEls = skeletonEl.find('.fc-helper-container');\r\n        this.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');\r\n        this.bgContainerEls = skeletonEl.find('.fc-bgevent-container');\r\n        this.highlightContainerEls = skeletonEl.find('.fc-highlight-container');\r\n        this.businessContainerEls = skeletonEl.find('.fc-business-container');\r\n        this.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level\r\n        this.el.append(skeletonEl);\r\n    };\r\n    TimeGrid.prototype.unrenderContentSkeleton = function () {\r\n        if (this.contentSkeletonEl) { // defensive :(\r\n            this.contentSkeletonEl.remove();\r\n            this.contentSkeletonEl = null;\r\n            this.colContainerEls = null;\r\n            this.helperContainerEls = null;\r\n            this.fgContainerEls = null;\r\n            this.bgContainerEls = null;\r\n            this.highlightContainerEls = null;\r\n            this.businessContainerEls = null;\r\n        }\r\n    };\r\n    // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\r\n    TimeGrid.prototype.groupSegsByCol = function (segs) {\r\n        var segsByCol = [];\r\n        var i;\r\n        for (i = 0; i < this.colCnt; i++) {\r\n            segsByCol.push([]);\r\n        }\r\n        for (i = 0; i < segs.length; i++) {\r\n            segsByCol[segs[i].col].push(segs[i]);\r\n        }\r\n        return segsByCol;\r\n    };\r\n    // Given segments grouped by column, insert the segments' elements into a parallel array of container\r\n    // elements, each living within a column.\r\n    TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {\r\n        var col;\r\n        var segs;\r\n        var i;\r\n        for (col = 0; col < this.colCnt; col++) { // iterate each column grouping\r\n            segs = segsByCol[col];\r\n            for (i = 0; i < segs.length; i++) {\r\n                containerEls.eq(col).append(segs[i].el);\r\n            }\r\n        }\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.getNowIndicatorUnit = function () {\r\n        return 'minute'; // will refresh on the minute\r\n    };\r\n    TimeGrid.prototype.renderNowIndicator = function (date) {\r\n        // HACK: if date columns not ready for some reason (scheduler)\r\n        if (!this.colContainerEls) {\r\n            return;\r\n        }\r\n        // seg system might be overkill, but it handles scenario where line needs to be rendered\r\n        //  more than once because of columns with the same date (resources columns for example)\r\n        var segs = this.componentFootprintToSegs(new ComponentFootprint_1.default(new UnzonedRange_1.default(date, date.valueOf() + 1), // protect against null range\r\n        false // all-day\r\n        ));\r\n        var top = this.computeDateTop(date, date);\r\n        var nodes = [];\r\n        var i;\r\n        // render lines within the columns\r\n        for (i = 0; i < segs.length; i++) {\r\n            nodes.push($('<div class=\"fc-now-indicator fc-now-indicator-line\"></div>')\r\n                .css('top', top)\r\n                .appendTo(this.colContainerEls.eq(segs[i].col))[0]);\r\n        }\r\n        // render an arrow over the axis\r\n        if (segs.length > 0) { // is the current time in view?\r\n            nodes.push($('<div class=\"fc-now-indicator fc-now-indicator-arrow\"></div>')\r\n                .css('top', top)\r\n                .appendTo(this.el.find('.fc-content-skeleton'))[0]);\r\n        }\r\n        this.nowIndicatorEls = $(nodes);\r\n    };\r\n    TimeGrid.prototype.unrenderNowIndicator = function () {\r\n        if (this.nowIndicatorEls) {\r\n            this.nowIndicatorEls.remove();\r\n            this.nowIndicatorEls = null;\r\n        }\r\n    };\r\n    /* Coordinates\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        this.slatCoordCache.build();\r\n        if (isResize) {\r\n            this.updateSegVerticals([].concat(this.eventRenderer.getSegs(), this.businessSegs || []));\r\n        }\r\n    };\r\n    TimeGrid.prototype.getTotalSlatHeight = function () {\r\n        return this.slatContainerEl.outerHeight();\r\n    };\r\n    // Computes the top coordinate, relative to the bounds of the grid, of the given date.\r\n    // `ms` can be a millisecond UTC time OR a UTC moment.\r\n    // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\r\n    TimeGrid.prototype.computeDateTop = function (ms, startOfDayDate) {\r\n        return this.computeTimeTop(moment.duration(ms - startOfDayDate.clone().stripTime()));\r\n    };\r\n    // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\r\n    TimeGrid.prototype.computeTimeTop = function (time) {\r\n        var len = this.slatEls.length;\r\n        var dateProfile = this.dateProfile;\r\n        var slatCoverage = (time - dateProfile.minTime) / this.slotDuration; // floating-point value of # of slots covered\r\n        var slatIndex;\r\n        var slatRemainder;\r\n        // compute a floating-point number for how many slats should be progressed through.\r\n        // from 0 to number of slats (inclusive)\r\n        // constrained because minTime/maxTime might be customized.\r\n        slatCoverage = Math.max(0, slatCoverage);\r\n        slatCoverage = Math.min(len, slatCoverage);\r\n        // an integer index of the furthest whole slat\r\n        // from 0 to number slats (*exclusive*, so len-1)\r\n        slatIndex = Math.floor(slatCoverage);\r\n        slatIndex = Math.min(slatIndex, len - 1);\r\n        // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\r\n        // could be 1.0 if slatCoverage is covering *all* the slots\r\n        slatRemainder = slatCoverage - slatIndex;\r\n        return this.slatCoordCache.getTopPosition(slatIndex) +\r\n            this.slatCoordCache.getHeight(slatIndex) * slatRemainder;\r\n    };\r\n    // Refreshes the CSS top/bottom coordinates for each segment element.\r\n    // Works when called after initial render, after a window resize/zoom for example.\r\n    TimeGrid.prototype.updateSegVerticals = function (segs) {\r\n        this.computeSegVerticals(segs);\r\n        this.assignSegVerticals(segs);\r\n    };\r\n    // For each segment in an array, computes and assigns its top and bottom properties\r\n    TimeGrid.prototype.computeSegVerticals = function (segs) {\r\n        var eventMinHeight = this.opt('agendaEventMinHeight');\r\n        var i;\r\n        var seg;\r\n        var dayDate;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            dayDate = this.dayDates[seg.dayIndex];\r\n            seg.top = this.computeDateTop(seg.startMs, dayDate);\r\n            seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.endMs, dayDate));\r\n        }\r\n    };\r\n    // Given segments that already have their top/bottom properties computed, applies those values to\r\n    // the segments' elements.\r\n    TimeGrid.prototype.assignSegVerticals = function (segs) {\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            seg.el.css(this.generateSegVerticalCss(seg));\r\n        }\r\n    };\r\n    // Generates an object with CSS properties for the top/bottom coordinates of a segment element\r\n    TimeGrid.prototype.generateSegVerticalCss = function (seg) {\r\n        return {\r\n            top: seg.top,\r\n            bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\r\n        };\r\n    };\r\n    /* Hit System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.prepareHits = function () {\r\n        this.colCoordCache.build();\r\n        this.slatCoordCache.build();\r\n    };\r\n    TimeGrid.prototype.releaseHits = function () {\r\n        this.colCoordCache.clear();\r\n        // NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop\r\n    };\r\n    TimeGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n        var snapsPerSlot = this.snapsPerSlot;\r\n        var colCoordCache = this.colCoordCache;\r\n        var slatCoordCache = this.slatCoordCache;\r\n        if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {\r\n            var colIndex = colCoordCache.getHorizontalIndex(leftOffset);\r\n            var slatIndex = slatCoordCache.getVerticalIndex(topOffset);\r\n            if (colIndex != null && slatIndex != null) {\r\n                var slatTop = slatCoordCache.getTopOffset(slatIndex);\r\n                var slatHeight = slatCoordCache.getHeight(slatIndex);\r\n                var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1\r\n                var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\r\n                var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\r\n                var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight;\r\n                var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight;\r\n                return {\r\n                    col: colIndex,\r\n                    snap: snapIndex,\r\n                    component: this,\r\n                    left: colCoordCache.getLeftOffset(colIndex),\r\n                    right: colCoordCache.getRightOffset(colIndex),\r\n                    top: snapTop,\r\n                    bottom: snapBottom\r\n                };\r\n            }\r\n        }\r\n    };\r\n    TimeGrid.prototype.getHitFootprint = function (hit) {\r\n        var start = this.getCellDate(0, hit.col); // row=0\r\n        var time = this.computeSnapTime(hit.snap); // pass in the snap-index\r\n        var end;\r\n        start.time(time);\r\n        end = start.clone().add(this.snapDuration);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), false // all-day?\r\n        );\r\n    };\r\n    // Given a row number of the grid, representing a \"snap\", returns a time (Duration) from its start-of-day\r\n    TimeGrid.prototype.computeSnapTime = function (snapIndex) {\r\n        return moment.duration(this.dateProfile.minTime + this.snapDuration * snapIndex);\r\n    };\r\n    TimeGrid.prototype.getHitEl = function (hit) {\r\n        return this.colEls.eq(hit.col);\r\n    };\r\n    /* Event Drag Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being dragged over the specified date(s).\r\n    // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n    TimeGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        if (seg) { // if there is event information for this drag, render a helper event\r\n            if (eventFootprints.length) {\r\n                this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n                // signal that a helper has been rendered\r\n                return true;\r\n            }\r\n        }\r\n        else { // otherwise, just render a highlight\r\n            for (i = 0; i < eventFootprints.length; i++) {\r\n                this.renderHighlight(eventFootprints[i].componentFootprint);\r\n            }\r\n        }\r\n    };\r\n    // Unrenders any visual indication of an event being dragged\r\n    TimeGrid.prototype.unrenderDrag = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Event Resize Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being resized\r\n    TimeGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n    };\r\n    // Unrenders any visual indication of an event being resized\r\n    TimeGrid.prototype.unrenderEventResize = function () {\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\r\n    TimeGrid.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        if (this.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered\r\n            this.helperRenderer.renderComponentFootprint(componentFootprint);\r\n        }\r\n        else {\r\n            this.renderHighlight(componentFootprint);\r\n        }\r\n    };\r\n    // Unrenders any visual indication of a selection\r\n    TimeGrid.prototype.unrenderSelection = function () {\r\n        this.helperRenderer.unrender();\r\n        this.unrenderHighlight();\r\n    };\r\n    return TimeGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = TimeGrid;\r\nTimeGrid.prototype.eventRendererClass = TimeGridEventRenderer_1.default;\r\nTimeGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nTimeGrid.prototype.helperRendererClass = TimeGridHelperRenderer_1.default;\r\nTimeGrid.prototype.fillRendererClass = TimeGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(TimeGrid);\r\nDayTableMixin_1.default.mixInto(TimeGrid);\r\n\n\n/***/ }),\n/* 240 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/*\r\nOnly handles foreground segs.\r\nDoes not own rendering. Use for low-level util methods by TimeGrid.\r\n*/\r\nvar TimeGridEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridEventRenderer, _super);\r\n    function TimeGridEventRenderer(timeGrid, fillRenderer) {\r\n        var _this = _super.call(this, timeGrid, fillRenderer) || this;\r\n        _this.timeGrid = timeGrid;\r\n        return _this;\r\n    }\r\n    TimeGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls);\r\n    };\r\n    // Given an array of foreground segments, render a DOM element for each, computes position,\r\n    // and attaches to the column inner-container elements.\r\n    TimeGridEventRenderer.prototype.renderFgSegsIntoContainers = function (segs, containerEls) {\r\n        var segsByCol;\r\n        var col;\r\n        segsByCol = this.timeGrid.groupSegsByCol(segs);\r\n        for (col = 0; col < this.timeGrid.colCnt; col++) {\r\n            this.updateFgSegCoords(segsByCol[col]);\r\n        }\r\n        this.timeGrid.attachSegsByCol(segsByCol, containerEls);\r\n    };\r\n    TimeGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n        if (this.fgSegs) { // hack\r\n            this.fgSegs.forEach(function (seg) {\r\n                seg.el.remove();\r\n            });\r\n        }\r\n    };\r\n    // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n    TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('noMeridiemTimeFormat'); // like \"6:30\" (no AM/PM)\r\n    };\r\n    // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n    TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return true;\r\n    };\r\n    // Renders the HTML for a single event segment's default rendering\r\n    TimeGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var componentFootprint = seg.footprint.componentFootprint;\r\n        var isAllDay = componentFootprint.isAllDay;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var isDraggable = view.isEventDefDraggable(eventDef);\r\n        var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n        var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n        var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n        var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n        var timeText;\r\n        var fullTimeText; // more verbose time text. for the print stylesheet\r\n        var startTimeText; // just the start time text\r\n        classes.unshift('fc-time-grid-event', 'fc-v-event');\r\n        // if the event appears to span more than one day...\r\n        if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n            // Don't display time text on segments that run entirely through a day.\r\n            // That would appear as midnight-midnight and would look dumb.\r\n            // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\r\n            if (seg.isStart || seg.isEnd) {\r\n                var zonedStart = calendar.msToMoment(seg.startMs);\r\n                var zonedEnd = calendar.msToMoment(seg.endMs);\r\n                timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay);\r\n                fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT');\r\n                startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false\r\n            }\r\n        }\r\n        else {\r\n            // Display the normal time text for the *event's* times\r\n            timeText = this.getTimeText(seg.footprint);\r\n            fullTimeText = this.getTimeText(seg.footprint, 'LT');\r\n            startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false\r\n        }\r\n        return '<a class=\"' + classes.join(' ') + '\"' +\r\n            (eventDef.url ?\r\n                ' href=\"' + util_1.htmlEscape(eventDef.url) + '\"' :\r\n                '') +\r\n            (skinCss ?\r\n                ' style=\"' + skinCss + '\"' :\r\n                '') +\r\n            '>' +\r\n            '<div class=\"fc-content\">' +\r\n            (timeText ?\r\n                '<div class=\"fc-time\"' +\r\n                    ' data-start=\"' + util_1.htmlEscape(startTimeText) + '\"' +\r\n                    ' data-full=\"' + util_1.htmlEscape(fullTimeText) + '\"' +\r\n                    '>' +\r\n                    '<span>' + util_1.htmlEscape(timeText) + '</span>' +\r\n                    '</div>' :\r\n                '') +\r\n            (eventDef.title ?\r\n                '<div class=\"fc-title\">' +\r\n                    util_1.htmlEscape(eventDef.title) +\r\n                    '</div>' :\r\n                '') +\r\n            '</div>' +\r\n            '<div class=\"fc-bg\"/>' +\r\n            /* TODO: write CSS for this\r\n            (isResizableFromStart ?\r\n              '<div class=\"fc-resizer fc-start-resizer\" />' :\r\n              ''\r\n              ) +\r\n            */\r\n            (isResizableFromEnd ?\r\n                '<div class=\"fc-resizer fc-end-resizer\" />' :\r\n                '') +\r\n            '</a>';\r\n    };\r\n    // Given segments that are assumed to all live in the *same column*,\r\n    // compute their verical/horizontal coordinates and assign to their elements.\r\n    TimeGridEventRenderer.prototype.updateFgSegCoords = function (segs) {\r\n        this.timeGrid.computeSegVerticals(segs); // horizontals relies on this\r\n        this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array\r\n        this.timeGrid.assignSegVerticals(segs);\r\n        this.assignFgSegHorizontals(segs);\r\n    };\r\n    // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\r\n    // NOTE: Also reorders the given array by date!\r\n    TimeGridEventRenderer.prototype.computeFgSegHorizontals = function (segs) {\r\n        var levels;\r\n        var level0;\r\n        var i;\r\n        this.sortEventSegs(segs); // order by certain criteria\r\n        levels = buildSlotSegLevels(segs);\r\n        computeForwardSlotSegs(levels);\r\n        if ((level0 = levels[0])) {\r\n            for (i = 0; i < level0.length; i++) {\r\n                computeSlotSegPressures(level0[i]);\r\n            }\r\n            for (i = 0; i < level0.length; i++) {\r\n                this.computeFgSegForwardBack(level0[i], 0, 0);\r\n            }\r\n        }\r\n    };\r\n    // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\r\n    // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\r\n    // seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\r\n    //\r\n    // The segment might be part of a \"series\", which means consecutive segments with the same pressure\r\n    // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\r\n    // segments behind this one in the current series, and `seriesBackwardCoord` is the starting\r\n    // coordinate of the first segment in the series.\r\n    TimeGridEventRenderer.prototype.computeFgSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {\r\n        var forwardSegs = seg.forwardSegs;\r\n        var i;\r\n        if (seg.forwardCoord === undefined) { // not already computed\r\n            if (!forwardSegs.length) {\r\n                // if there are no forward segments, this segment should butt up against the edge\r\n                seg.forwardCoord = 1;\r\n            }\r\n            else {\r\n                // sort highest pressure first\r\n                this.sortForwardSegs(forwardSegs);\r\n                // this segment's forwardCoord will be calculated from the backwardCoord of the\r\n                // highest-pressure forward segment.\r\n                this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\r\n                seg.forwardCoord = forwardSegs[0].backwardCoord;\r\n            }\r\n            // calculate the backwardCoord from the forwardCoord. consider the series\r\n            seg.backwardCoord = seg.forwardCoord -\r\n                (seg.forwardCoord - seriesBackwardCoord) / // available width for series\r\n                    (seriesBackwardPressure + 1); // # of segments in the series\r\n            // use this segment's coordinates to computed the coordinates of the less-pressurized\r\n            // forward segments\r\n            for (i = 0; i < forwardSegs.length; i++) {\r\n                this.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);\r\n            }\r\n        }\r\n    };\r\n    TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {\r\n        forwardSegs.sort(util_1.proxy(this, 'compareForwardSegs'));\r\n    };\r\n    // A cmp function for determining which forward segment to rely on more when computing coordinates.\r\n    TimeGridEventRenderer.prototype.compareForwardSegs = function (seg1, seg2) {\r\n        // put higher-pressure first\r\n        return seg2.forwardPressure - seg1.forwardPressure ||\r\n            // put segments that are closer to initial edge first (and favor ones with no coords yet)\r\n            (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) ||\r\n            // do normal sorting...\r\n            this.compareEventSegs(seg1, seg2);\r\n    };\r\n    // Given foreground event segments that have already had their position coordinates computed,\r\n    // assigns position-related CSS values to their elements.\r\n    TimeGridEventRenderer.prototype.assignFgSegHorizontals = function (segs) {\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            seg.el.css(this.generateFgSegHorizontalCss(seg));\r\n            // if the event is short that the title will be cut off,\r\n            // attach a className that condenses the title into the time area.\r\n            if (seg.footprint.eventDef.title && seg.bottom - seg.top < 30) {\r\n                seg.el.addClass('fc-short'); // TODO: \"condensed\" is a better name\r\n            }\r\n        }\r\n    };\r\n    // Generates an object with CSS properties/values that should be applied to an event segment element.\r\n    // Contains important positioning-related properties that should be applied to any event element, customized or not.\r\n    TimeGridEventRenderer.prototype.generateFgSegHorizontalCss = function (seg) {\r\n        var shouldOverlap = this.opt('slotEventOverlap');\r\n        var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point\r\n        var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point\r\n        var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first\r\n        var isRTL = this.timeGrid.isRTL;\r\n        var left; // amount of space from left edge, a fraction of the total width\r\n        var right; // amount of space from right edge, a fraction of the total width\r\n        if (shouldOverlap) {\r\n            // double the width, but don't go beyond the maximum forward coordinate (1.0)\r\n            forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);\r\n        }\r\n        if (isRTL) {\r\n            left = 1 - forwardCoord;\r\n            right = backwardCoord;\r\n        }\r\n        else {\r\n            left = backwardCoord;\r\n            right = 1 - forwardCoord;\r\n        }\r\n        props.zIndex = seg.level + 1; // convert from 0-base to 1-based\r\n        props.left = left * 100 + '%';\r\n        props.right = right * 100 + '%';\r\n        if (shouldOverlap && seg.forwardPressure) {\r\n            // add padding to the edge so that forward stacked events don't cover the resizer's icon\r\n            props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\r\n        }\r\n        return props;\r\n    };\r\n    return TimeGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = TimeGridEventRenderer;\r\n// Builds an array of segments \"levels\". The first level will be the leftmost tier of segments if the calendar is\r\n// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\r\nfunction buildSlotSegLevels(segs) {\r\n    var levels = [];\r\n    var i;\r\n    var seg;\r\n    var j;\r\n    for (i = 0; i < segs.length; i++) {\r\n        seg = segs[i];\r\n        // go through all the levels and stop on the first level where there are no collisions\r\n        for (j = 0; j < levels.length; j++) {\r\n            if (!computeSlotSegCollisions(seg, levels[j]).length) {\r\n                break;\r\n            }\r\n        }\r\n        seg.level = j;\r\n        (levels[j] || (levels[j] = [])).push(seg);\r\n    }\r\n    return levels;\r\n}\r\n// For every segment, figure out the other segments that are in subsequent\r\n// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\r\nfunction computeForwardSlotSegs(levels) {\r\n    var i;\r\n    var level;\r\n    var j;\r\n    var seg;\r\n    var k;\r\n    for (i = 0; i < levels.length; i++) {\r\n        level = levels[i];\r\n        for (j = 0; j < level.length; j++) {\r\n            seg = level[j];\r\n            seg.forwardSegs = [];\r\n            for (k = i + 1; k < levels.length; k++) {\r\n                computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);\r\n            }\r\n        }\r\n    }\r\n}\r\n// Figure out which path forward (via seg.forwardSegs) results in the longest path until\r\n// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\r\nfunction computeSlotSegPressures(seg) {\r\n    var forwardSegs = seg.forwardSegs;\r\n    var forwardPressure = 0;\r\n    var i;\r\n    var forwardSeg;\r\n    if (seg.forwardPressure === undefined) { // not already computed\r\n        for (i = 0; i < forwardSegs.length; i++) {\r\n            forwardSeg = forwardSegs[i];\r\n            // figure out the child's maximum forward path\r\n            computeSlotSegPressures(forwardSeg);\r\n            // either use the existing maximum, or use the child's forward pressure\r\n            // plus one (for the forwardSeg itself)\r\n            forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);\r\n        }\r\n        seg.forwardPressure = forwardPressure;\r\n    }\r\n}\r\n// Find all the segments in `otherSegs` that vertically collide with `seg`.\r\n// Append into an optionally-supplied `results` array and return.\r\nfunction computeSlotSegCollisions(seg, otherSegs, results) {\r\n    if (results === void 0) { results = []; }\r\n    for (var i = 0; i < otherSegs.length; i++) {\r\n        if (isSlotSegCollision(seg, otherSegs[i])) {\r\n            results.push(otherSegs[i]);\r\n        }\r\n    }\r\n    return results;\r\n}\r\n// Do these segments occupy the same vertical space?\r\nfunction isSlotSegCollision(seg1, seg2) {\r\n    return seg1.bottom > seg2.top && seg1.top < seg2.bottom;\r\n}\r\n\n\n/***/ }),\n/* 241 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar TimeGridHelperRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridHelperRenderer, _super);\r\n    function TimeGridHelperRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        var helperNodes = [];\r\n        var i;\r\n        var seg;\r\n        var sourceEl;\r\n        // TODO: not good to call eventRenderer this way\r\n        this.eventRenderer.renderFgSegsIntoContainers(segs, this.component.helperContainerEls);\r\n        // Try to make the segment that is in the same row as sourceSeg look the same\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (sourceSeg && sourceSeg.col === seg.col) {\r\n                sourceEl = sourceSeg.el;\r\n                seg.el.css({\r\n                    left: sourceEl.css('left'),\r\n                    right: sourceEl.css('right'),\r\n                    'margin-left': sourceEl.css('margin-left'),\r\n                    'margin-right': sourceEl.css('margin-right')\r\n                });\r\n            }\r\n            helperNodes.push(seg.el[0]);\r\n        }\r\n        return $(helperNodes); // must return the elements rendered\r\n    };\r\n    return TimeGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = TimeGridHelperRenderer;\r\n\n\n/***/ }),\n/* 242 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar TimeGridFillRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridFillRenderer, _super);\r\n    function TimeGridFillRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        var timeGrid = this.component;\r\n        var containerEls;\r\n        // TODO: more efficient lookup\r\n        if (type === 'bgEvent') {\r\n            containerEls = timeGrid.bgContainerEls;\r\n        }\r\n        else if (type === 'businessHours') {\r\n            containerEls = timeGrid.businessContainerEls;\r\n        }\r\n        else if (type === 'highlight') {\r\n            containerEls = timeGrid.highlightContainerEls;\r\n        }\r\n        timeGrid.updateSegVerticals(segs);\r\n        timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);\r\n        return segs.map(function (seg) {\r\n            return seg.el[0];\r\n        });\r\n    };\r\n    return TimeGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = TimeGridFillRenderer;\r\n\n\n/***/ }),\n/* 243 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/* Event-rendering methods for the DayGrid class\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGridEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridEventRenderer, _super);\r\n    function DayGridEventRenderer(dayGrid, fillRenderer) {\r\n        var _this = _super.call(this, dayGrid, fillRenderer) || this;\r\n        _this.dayGrid = dayGrid;\r\n        return _this;\r\n    }\r\n    DayGridEventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n        // don't render timed background events\r\n        eventRanges = $.grep(eventRanges, function (eventRange) {\r\n            return eventRange.eventDef.isAllDay();\r\n        });\r\n        _super.prototype.renderBgRanges.call(this, eventRanges);\r\n    };\r\n    // Renders the given foreground event segments onto the grid\r\n    DayGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        var rowStructs = this.rowStructs = this.renderSegRows(segs);\r\n        // append to each row's content skeleton\r\n        this.dayGrid.rowEls.each(function (i, rowNode) {\r\n            $(rowNode).find('.fc-content-skeleton > table').append(rowStructs[i].tbodyEl);\r\n        });\r\n    };\r\n    // Unrenders all currently rendered foreground event segments\r\n    DayGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n        var rowStructs = this.rowStructs || [];\r\n        var rowStruct;\r\n        while ((rowStruct = rowStructs.pop())) {\r\n            rowStruct.tbodyEl.remove();\r\n        }\r\n        this.rowStructs = null;\r\n    };\r\n    // Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.\r\n    // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\r\n    // PRECONDITION: each segment shoud already have a rendered and assigned `.el`\r\n    DayGridEventRenderer.prototype.renderSegRows = function (segs) {\r\n        var rowStructs = [];\r\n        var segRows;\r\n        var row;\r\n        segRows = this.groupSegRows(segs); // group into nested arrays\r\n        // iterate each row of segment groupings\r\n        for (row = 0; row < segRows.length; row++) {\r\n            rowStructs.push(this.renderSegRow(row, segRows[row]));\r\n        }\r\n        return rowStructs;\r\n    };\r\n    // Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains\r\n    // the segments. Returns object with a bunch of internal data about how the render was calculated.\r\n    // NOTE: modifies rowSegs\r\n    DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {\r\n        var colCnt = this.dayGrid.colCnt;\r\n        var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\r\n        var levelCnt = Math.max(1, segLevels.length); // ensure at least one level\r\n        var tbody = $('<tbody/>');\r\n        var segMatrix = []; // lookup for which segments are rendered into which level+col cells\r\n        var cellMatrix = []; // lookup for all <td> elements of the level+col matrix\r\n        var loneCellMatrix = []; // lookup for <td> elements that only take up a single column\r\n        var i;\r\n        var levelSegs;\r\n        var col;\r\n        var tr;\r\n        var j;\r\n        var seg;\r\n        var td;\r\n        // populates empty cells from the current column (`col`) to `endCol`\r\n        function emptyCellsUntil(endCol) {\r\n            while (col < endCol) {\r\n                // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\r\n                td = (loneCellMatrix[i - 1] || [])[col];\r\n                if (td) {\r\n                    td.attr('rowspan', parseInt(td.attr('rowspan') || 1, 10) + 1);\r\n                }\r\n                else {\r\n                    td = $('<td/>');\r\n                    tr.append(td);\r\n                }\r\n                cellMatrix[i][col] = td;\r\n                loneCellMatrix[i][col] = td;\r\n                col++;\r\n            }\r\n        }\r\n        for (i = 0; i < levelCnt; i++) { // iterate through all levels\r\n            levelSegs = segLevels[i];\r\n            col = 0;\r\n            tr = $('<tr/>');\r\n            segMatrix.push([]);\r\n            cellMatrix.push([]);\r\n            loneCellMatrix.push([]);\r\n            // levelCnt might be 1 even though there are no actual levels. protect against this.\r\n            // this single empty row is useful for styling.\r\n            if (levelSegs) {\r\n                for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\r\n                    seg = levelSegs[j];\r\n                    emptyCellsUntil(seg.leftCol);\r\n                    // create a container that occupies or more columns. append the event element.\r\n                    td = $('<td class=\"fc-event-container\"/>').append(seg.el);\r\n                    if (seg.leftCol !== seg.rightCol) {\r\n                        td.attr('colspan', seg.rightCol - seg.leftCol + 1);\r\n                    }\r\n                    else { // a single-column segment\r\n                        loneCellMatrix[i][col] = td;\r\n                    }\r\n                    while (col <= seg.rightCol) {\r\n                        cellMatrix[i][col] = td;\r\n                        segMatrix[i][col] = seg;\r\n                        col++;\r\n                    }\r\n                    tr.append(td);\r\n                }\r\n            }\r\n            emptyCellsUntil(colCnt); // finish off the row\r\n            this.dayGrid.bookendCells(tr);\r\n            tbody.append(tr);\r\n        }\r\n        return {\r\n            row: row,\r\n            tbodyEl: tbody,\r\n            cellMatrix: cellMatrix,\r\n            segMatrix: segMatrix,\r\n            segLevels: segLevels,\r\n            segs: rowSegs\r\n        };\r\n    };\r\n    // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\r\n    // NOTE: modifies segs\r\n    DayGridEventRenderer.prototype.buildSegLevels = function (segs) {\r\n        var levels = [];\r\n        var i;\r\n        var seg;\r\n        var j;\r\n        // Give preference to elements with certain criteria, so they have\r\n        // a chance to be closer to the top.\r\n        this.sortEventSegs(segs);\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            // loop through levels, starting with the topmost, until the segment doesn't collide with other segments\r\n            for (j = 0; j < levels.length; j++) {\r\n                if (!isDaySegCollision(seg, levels[j])) {\r\n                    break;\r\n                }\r\n            }\r\n            // `j` now holds the desired subrow index\r\n            seg.level = j;\r\n            // create new level array if needed and append segment\r\n            (levels[j] || (levels[j] = [])).push(seg);\r\n        }\r\n        // order segments left-to-right. very important if calendar is RTL\r\n        for (j = 0; j < levels.length; j++) {\r\n            levels[j].sort(compareDaySegCols);\r\n        }\r\n        return levels;\r\n    };\r\n    // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\r\n    DayGridEventRenderer.prototype.groupSegRows = function (segs) {\r\n        var segRows = [];\r\n        var i;\r\n        for (i = 0; i < this.dayGrid.rowCnt; i++) {\r\n            segRows.push([]);\r\n        }\r\n        for (i = 0; i < segs.length; i++) {\r\n            segRows[segs[i].row].push(segs[i]);\r\n        }\r\n        return segRows;\r\n    };\r\n    // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n    DayGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('extraSmallTimeFormat'); // like \"6p\" or \"6:30p\"\r\n    };\r\n    // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n    DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day\r\n    };\r\n    // Builds the HTML to be used for the default element for an individual segment\r\n    DayGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        var view = this.view;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var isAllDay = seg.footprint.componentFootprint.isAllDay;\r\n        var isDraggable = view.isEventDefDraggable(eventDef);\r\n        var isResizableFromStart = !disableResizing && isAllDay &&\r\n            seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n        var isResizableFromEnd = !disableResizing && isAllDay &&\r\n            seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n        var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n        var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n        var timeHtml = '';\r\n        var timeText;\r\n        var titleHtml;\r\n        classes.unshift('fc-day-grid-event', 'fc-h-event');\r\n        // Only display a timed events time if it is the starting segment\r\n        if (seg.isStart) {\r\n            timeText = this.getTimeText(seg.footprint);\r\n            if (timeText) {\r\n                timeHtml = '<span class=\"fc-time\">' + util_1.htmlEscape(timeText) + '</span>';\r\n            }\r\n        }\r\n        titleHtml =\r\n            '<span class=\"fc-title\">' +\r\n                (util_1.htmlEscape(eventDef.title || '') || '&nbsp;') + // we always want one line of height\r\n                '</span>';\r\n        return '<a class=\"' + classes.join(' ') + '\"' +\r\n            (eventDef.url ?\r\n                ' href=\"' + util_1.htmlEscape(eventDef.url) + '\"' :\r\n                '') +\r\n            (skinCss ?\r\n                ' style=\"' + skinCss + '\"' :\r\n                '') +\r\n            '>' +\r\n            '<div class=\"fc-content\">' +\r\n            (this.dayGrid.isRTL ?\r\n                titleHtml + ' ' + timeHtml : // put a natural space in between\r\n                timeHtml + ' ' + titleHtml //\r\n            ) +\r\n            '</div>' +\r\n            (isResizableFromStart ?\r\n                '<div class=\"fc-resizer fc-start-resizer\" />' :\r\n                '') +\r\n            (isResizableFromEnd ?\r\n                '<div class=\"fc-resizer fc-end-resizer\" />' :\r\n                '') +\r\n            '</a>';\r\n    };\r\n    return DayGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = DayGridEventRenderer;\r\n// Computes whether two segments' columns collide. They are assumed to be in the same row.\r\nfunction isDaySegCollision(seg, otherSegs) {\r\n    var i;\r\n    var otherSeg;\r\n    for (i = 0; i < otherSegs.length; i++) {\r\n        otherSeg = otherSegs[i];\r\n        if (otherSeg.leftCol <= seg.rightCol &&\r\n            otherSeg.rightCol >= seg.leftCol) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n// A cmp function for determining the leftmost event\r\nfunction compareDaySegCols(a, b) {\r\n    return a.leftCol - b.leftCol;\r\n}\r\n\n\n/***/ }),\n/* 244 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar DayGridHelperRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridHelperRenderer, _super);\r\n    function DayGridHelperRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Renders a mock \"helper\" event. `sourceSeg` is the associated internal segment object. It can be null.\r\n    DayGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        var helperNodes = [];\r\n        var rowStructs;\r\n        // TODO: not good to call eventRenderer this way\r\n        rowStructs = this.eventRenderer.renderSegRows(segs);\r\n        // inject each new event skeleton into each associated row\r\n        this.component.rowEls.each(function (row, rowNode) {\r\n            var rowEl = $(rowNode); // the .fc-row\r\n            var skeletonEl = $('<div class=\"fc-helper-skeleton\"><table/></div>'); // will be absolutely positioned\r\n            var skeletonTopEl;\r\n            var skeletonTop;\r\n            // If there is an original segment, match the top position. Otherwise, put it at the row's top level\r\n            if (sourceSeg && sourceSeg.row === row) {\r\n                skeletonTop = sourceSeg.el.position().top;\r\n            }\r\n            else {\r\n                skeletonTopEl = rowEl.find('.fc-content-skeleton tbody');\r\n                if (!skeletonTopEl.length) { // when no events\r\n                    skeletonTopEl = rowEl.find('.fc-content-skeleton table');\r\n                }\r\n                skeletonTop = skeletonTopEl.position().top;\r\n            }\r\n            skeletonEl.css('top', skeletonTop)\r\n                .find('table')\r\n                .append(rowStructs[row].tbodyEl);\r\n            rowEl.append(skeletonEl);\r\n            helperNodes.push(skeletonEl[0]);\r\n        });\r\n        return $(helperNodes); // must return the elements rendered\r\n    };\r\n    return DayGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = DayGridHelperRenderer;\r\n\n\n/***/ }),\n/* 245 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar DayGridFillRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridFillRenderer, _super);\r\n    function DayGridFillRenderer() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.fillSegTag = 'td'; // override the default tag name\r\n        return _this;\r\n    }\r\n    DayGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        var nodes = [];\r\n        var i;\r\n        var seg;\r\n        var skeletonEl;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            skeletonEl = this.renderFillRow(type, seg);\r\n            this.component.rowEls.eq(seg.row).append(skeletonEl);\r\n            nodes.push(skeletonEl[0]);\r\n        }\r\n        return nodes;\r\n    };\r\n    // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\r\n    DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {\r\n        var colCnt = this.component.colCnt;\r\n        var startCol = seg.leftCol;\r\n        var endCol = seg.rightCol + 1;\r\n        var className;\r\n        var skeletonEl;\r\n        var trEl;\r\n        if (type === 'businessHours') {\r\n            className = 'bgevent';\r\n        }\r\n        else {\r\n            className = type.toLowerCase();\r\n        }\r\n        skeletonEl = $('<div class=\"fc-' + className + '-skeleton\">' +\r\n            '<table><tr/></table>' +\r\n            '</div>');\r\n        trEl = skeletonEl.find('tr');\r\n        if (startCol > 0) {\r\n            trEl.append(\r\n            // will create (startCol + 1) td's\r\n            new Array(startCol + 1).join('<td/>'));\r\n        }\r\n        trEl.append(seg.el.attr('colspan', endCol - startCol));\r\n        if (endCol < colCnt) {\r\n            trEl.append(\r\n            // will create (colCnt - endCol) td's\r\n            new Array(colCnt - endCol + 1).join('<td/>'));\r\n        }\r\n        this.component.bookendCells(trEl);\r\n        return skeletonEl;\r\n    };\r\n    return DayGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = DayGridFillRenderer;\r\n\n\n/***/ }),\n/* 246 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\n/* A month view with day cells running in rows (one-per-week) and columns\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MonthView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MonthView, _super);\r\n    function MonthView() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Overrides the default BasicView behavior to have special multi-week auto-height logic\r\n    MonthView.prototype.setGridHeight = function (height, isAuto) {\r\n        // if auto, make the height of each row the height that it would be if there were 6 weeks\r\n        if (isAuto) {\r\n            height *= this.dayGrid.rowCnt / 6;\r\n        }\r\n        util_1.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\r\n    };\r\n    MonthView.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n        return date.month() !== moment.utc(dateProfile.currentUnzonedRange.startMs).month(); // TODO: optimize\r\n    };\r\n    return MonthView;\r\n}(BasicView_1.default));\r\nexports.default = MonthView;\r\nMonthView.prototype.dateProfileGeneratorClass = MonthViewDateProfileGenerator_1.default;\r\n\n\n/***/ }),\n/* 247 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar MonthViewDateProfileGenerator = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MonthViewDateProfileGenerator, _super);\r\n    function MonthViewDateProfileGenerator() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Computes the date range that will be rendered.\r\n    MonthViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay);\r\n        var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n        var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n        var rowCnt;\r\n        // ensure 6 weeks\r\n        if (this.opt('fixedWeekCount')) {\r\n            rowCnt = Math.ceil(// could be partial weeks due to hiddenDays\r\n            end.diff(start, 'weeks', true) // dontRound=true\r\n            );\r\n            end.add(6 - rowCnt, 'weeks');\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    return MonthViewDateProfileGenerator;\r\n}(BasicViewDateProfileGenerator_1.default));\r\nexports.default = MonthViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 248 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar View_1 = __webpack_require__(43);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\n/*\r\nResponsible for the scroller, and forwarding event-related actions into the \"grid\".\r\n*/\r\nvar ListView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListView, _super);\r\n    function ListView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.segSelector = '.fc-list-item'; // which elements accept event actions\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    ListView.prototype.renderSkeleton = function () {\r\n        this.el.addClass('fc-list-view ' +\r\n            this.calendar.theme.getClass('listView'));\r\n        this.scroller.render();\r\n        this.scroller.el.appendTo(this.el);\r\n        this.contentEl = this.scroller.scrollEl; // shortcut\r\n    };\r\n    ListView.prototype.unrenderSkeleton = function () {\r\n        this.scroller.destroy(); // will remove the Grid too\r\n    };\r\n    ListView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n        if (!isAuto) {\r\n            this.scroller.setHeight(this.computeScrollerHeight(totalHeight));\r\n        }\r\n    };\r\n    ListView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    ListView.prototype.renderDates = function (dateProfile) {\r\n        var calendar = this.calendar;\r\n        var dayStart = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs, true);\r\n        var viewEnd = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.endMs, true);\r\n        var dayDates = [];\r\n        var dayRanges = [];\r\n        while (dayStart < viewEnd) {\r\n            dayDates.push(dayStart.clone());\r\n            dayRanges.push(new UnzonedRange_1.default(dayStart, dayStart.clone().add(1, 'day')));\r\n            dayStart.add(1, 'day');\r\n        }\r\n        this.dayDates = dayDates;\r\n        this.dayRanges = dayRanges;\r\n        // all real rendering happens in EventRenderer\r\n    };\r\n    // slices by day\r\n    ListView.prototype.componentFootprintToSegs = function (footprint) {\r\n        var dayRanges = this.dayRanges;\r\n        var dayIndex;\r\n        var segRange;\r\n        var seg;\r\n        var segs = [];\r\n        for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {\r\n            segRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]);\r\n            if (segRange) {\r\n                seg = {\r\n                    startMs: segRange.startMs,\r\n                    endMs: segRange.endMs,\r\n                    isStart: segRange.isStart,\r\n                    isEnd: segRange.isEnd,\r\n                    dayIndex: dayIndex\r\n                };\r\n                segs.push(seg);\r\n                // detect when footprint won't go fully into the next day,\r\n                // and mutate the latest seg to the be the end.\r\n                if (!seg.isEnd && !footprint.isAllDay &&\r\n                    dayIndex + 1 < dayRanges.length &&\r\n                    footprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + this.nextDayThreshold) {\r\n                    seg.endMs = footprint.unzonedRange.endMs;\r\n                    seg.isEnd = true;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    ListView.prototype.renderEmptyMessage = function () {\r\n        this.contentEl.html('<div class=\"fc-list-empty-wrap2\">' + // TODO: try less wraps\r\n            '<div class=\"fc-list-empty-wrap1\">' +\r\n            '<div class=\"fc-list-empty\">' +\r\n            util_1.htmlEscape(this.opt('noEventsMessage')) +\r\n            '</div>' +\r\n            '</div>' +\r\n            '</div>');\r\n    };\r\n    // render the event segments in the view\r\n    ListView.prototype.renderSegList = function (allSegs) {\r\n        var segsByDay = this.groupSegsByDay(allSegs); // sparse array\r\n        var dayIndex;\r\n        var daySegs;\r\n        var i;\r\n        var tableEl = $('<table class=\"fc-list-table ' + this.calendar.theme.getClass('tableList') + '\"><tbody/></table>');\r\n        var tbodyEl = tableEl.find('tbody');\r\n        for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\r\n            daySegs = segsByDay[dayIndex];\r\n            if (daySegs) { // sparse array, so might be undefined\r\n                // append a day header\r\n                tbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex]));\r\n                this.eventRenderer.sortEventSegs(daySegs);\r\n                for (i = 0; i < daySegs.length; i++) {\r\n                    tbodyEl.append(daySegs[i].el); // append event row\r\n                }\r\n            }\r\n        }\r\n        this.contentEl.empty().append(tableEl);\r\n    };\r\n    // Returns a sparse array of arrays, segs grouped by their dayIndex\r\n    ListView.prototype.groupSegsByDay = function (segs) {\r\n        var segsByDay = []; // sparse array\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\r\n                .push(seg);\r\n        }\r\n        return segsByDay;\r\n    };\r\n    // generates the HTML for the day headers that live amongst the event rows\r\n    ListView.prototype.dayHeaderHtml = function (dayDate) {\r\n        var mainFormat = this.opt('listDayFormat');\r\n        var altFormat = this.opt('listDayAltFormat');\r\n        return '<tr class=\"fc-list-heading\" data-date=\"' + dayDate.format('YYYY-MM-DD') + '\">' +\r\n            '<td class=\"' + (this.calendar.theme.getClass('tableListHeading') ||\r\n            this.calendar.theme.getClass('widgetHeader')) + '\" colspan=\"3\">' +\r\n            (mainFormat ?\r\n                this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-main' }, util_1.htmlEscape(dayDate.format(mainFormat)) // inner HTML\r\n                ) :\r\n                '') +\r\n            (altFormat ?\r\n                this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-alt' }, util_1.htmlEscape(dayDate.format(altFormat)) // inner HTML\r\n                ) :\r\n                '') +\r\n            '</td>' +\r\n            '</tr>';\r\n    };\r\n    return ListView;\r\n}(View_1.default));\r\nexports.default = ListView;\r\nListView.prototype.eventRendererClass = ListEventRenderer_1.default;\r\nListView.prototype.eventPointingClass = ListEventPointing_1.default;\r\n\n\n/***/ }),\n/* 249 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nvar ListEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListEventRenderer, _super);\r\n    function ListEventRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ListEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        if (!segs.length) {\r\n            this.component.renderEmptyMessage();\r\n        }\r\n        else {\r\n            this.component.renderSegList(segs);\r\n        }\r\n    };\r\n    // generates the HTML for a single event row\r\n    ListEventRenderer.prototype.fgSegHtml = function (seg) {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var theme = calendar.theme;\r\n        var eventFootprint = seg.footprint;\r\n        var eventDef = eventFootprint.eventDef;\r\n        var componentFootprint = eventFootprint.componentFootprint;\r\n        var url = eventDef.url;\r\n        var classes = ['fc-list-item'].concat(this.getClasses(eventDef));\r\n        var bgColor = this.getBgColor(eventDef);\r\n        var timeHtml;\r\n        if (componentFootprint.isAllDay) {\r\n            timeHtml = view.getAllDayHtml();\r\n        }\r\n        else if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n            if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day\r\n                timeHtml = util_1.htmlEscape(this._getTimeText(calendar.msToMoment(seg.startMs), calendar.msToMoment(seg.endMs), componentFootprint.isAllDay));\r\n            }\r\n            else { // inner segment that lasts the whole day\r\n                timeHtml = view.getAllDayHtml();\r\n            }\r\n        }\r\n        else {\r\n            // Display the normal time text for the *event's* times\r\n            timeHtml = util_1.htmlEscape(this.getTimeText(eventFootprint));\r\n        }\r\n        if (url) {\r\n            classes.push('fc-has-url');\r\n        }\r\n        return '<tr class=\"' + classes.join(' ') + '\">' +\r\n            (this.displayEventTime ?\r\n                '<td class=\"fc-list-item-time ' + theme.getClass('widgetContent') + '\">' +\r\n                    (timeHtml || '') +\r\n                    '</td>' :\r\n                '') +\r\n            '<td class=\"fc-list-item-marker ' + theme.getClass('widgetContent') + '\">' +\r\n            '<span class=\"fc-event-dot\"' +\r\n            (bgColor ?\r\n                ' style=\"background-color:' + bgColor + '\"' :\r\n                '') +\r\n            '></span>' +\r\n            '</td>' +\r\n            '<td class=\"fc-list-item-title ' + theme.getClass('widgetContent') + '\">' +\r\n            '<a' + (url ? ' href=\"' + util_1.htmlEscape(url) + '\"' : '') + '>' +\r\n            util_1.htmlEscape(eventDef.title || '') +\r\n            '</a>' +\r\n            '</td>' +\r\n            '</tr>';\r\n    };\r\n    // like \"4:00am\"\r\n    ListEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('mediumTimeFormat');\r\n    };\r\n    return ListEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = ListEventRenderer;\r\n\n\n/***/ }),\n/* 250 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar ListEventPointing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListEventPointing, _super);\r\n    function ListEventPointing() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // for events with a url, the whole <tr> should be clickable,\r\n    // but it's impossible to wrap with an <a> tag. simulate this.\r\n    ListEventPointing.prototype.handleClick = function (seg, ev) {\r\n        var url;\r\n        _super.prototype.handleClick.call(this, seg, ev); // might prevent the default action\r\n        // not clicking on or within an <a> with an href\r\n        if (!$(ev.target).closest('a[href]').length) {\r\n            url = seg.footprint.eventDef.url;\r\n            if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler\r\n                window.location.href = url; // simulate link click\r\n            }\r\n        }\r\n    };\r\n    return ListEventPointing;\r\n}(EventPointing_1.default));\r\nexports.default = ListEventPointing;\r\n\n\n/***/ }),\n/* 251 */,\n/* 252 */,\n/* 253 */,\n/* 254 */,\n/* 255 */,\n/* 256 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar Calendar_1 = __webpack_require__(232);\r\n// for intentional side-effects\r\n__webpack_require__(11);\r\n__webpack_require__(49);\r\n__webpack_require__(260);\r\n__webpack_require__(261);\r\n__webpack_require__(264);\r\n__webpack_require__(265);\r\n__webpack_require__(266);\r\n__webpack_require__(267);\r\n$.fullCalendar = exportHooks;\r\n$.fn.fullCalendar = function (options) {\r\n    var args = Array.prototype.slice.call(arguments, 1); // for a possible method call\r\n    var res = this; // what this function will return (this jQuery object by default)\r\n    this.each(function (i, _element) {\r\n        var element = $(_element);\r\n        var calendar = element.data('fullCalendar'); // get the existing calendar object (if any)\r\n        var singleRes; // the returned value of this single method call\r\n        // a method call\r\n        if (typeof options === 'string') {\r\n            if (options === 'getCalendar') {\r\n                if (!i) { // first element only\r\n                    res = calendar;\r\n                }\r\n            }\r\n            else if (options === 'destroy') { // don't warn if no calendar object\r\n                if (calendar) {\r\n                    calendar.destroy();\r\n                    element.removeData('fullCalendar');\r\n                }\r\n            }\r\n            else if (!calendar) {\r\n                util_1.warn('Attempting to call a FullCalendar method on an element with no calendar.');\r\n            }\r\n            else if ($.isFunction(calendar[options])) {\r\n                singleRes = calendar[options].apply(calendar, args);\r\n                if (!i) {\r\n                    res = singleRes; // record the first method call result\r\n                }\r\n                if (options === 'destroy') { // for the destroy method, must remove Calendar object data\r\n                    element.removeData('fullCalendar');\r\n                }\r\n            }\r\n            else {\r\n                util_1.warn(\"'\" + options + \"' is an unknown FullCalendar method.\");\r\n            }\r\n        }\r\n        else if (!calendar) { // don't initialize twice\r\n            calendar = new Calendar_1.default(element, options);\r\n            element.data('fullCalendar', calendar);\r\n            calendar.render();\r\n        }\r\n    });\r\n    return res;\r\n};\r\nmodule.exports = exportHooks;\r\n\n\n/***/ }),\n/* 257 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/* Toolbar with buttons and title\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar Toolbar = /** @class */ (function () {\r\n    function Toolbar(calendar, toolbarOptions) {\r\n        this.el = null; // mirrors local `el`\r\n        this.viewsWithButtons = [];\r\n        this.calendar = calendar;\r\n        this.toolbarOptions = toolbarOptions;\r\n    }\r\n    // method to update toolbar-specific options, not calendar-wide options\r\n    Toolbar.prototype.setToolbarOptions = function (newToolbarOptions) {\r\n        this.toolbarOptions = newToolbarOptions;\r\n    };\r\n    // can be called repeatedly and will rerender\r\n    Toolbar.prototype.render = function () {\r\n        var sections = this.toolbarOptions.layout;\r\n        var el = this.el;\r\n        if (sections) {\r\n            if (!el) {\r\n                el = this.el = $(\"<div class='fc-toolbar \" + this.toolbarOptions.extraClasses + \"'/>\");\r\n            }\r\n            else {\r\n                el.empty();\r\n            }\r\n            el.append(this.renderSection('left'))\r\n                .append(this.renderSection('right'))\r\n                .append(this.renderSection('center'))\r\n                .append('<div class=\"fc-clear\"/>');\r\n        }\r\n        else {\r\n            this.removeElement();\r\n        }\r\n    };\r\n    Toolbar.prototype.removeElement = function () {\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n    };\r\n    Toolbar.prototype.renderSection = function (position) {\r\n        var _this = this;\r\n        var calendar = this.calendar;\r\n        var theme = calendar.theme;\r\n        var optionsManager = calendar.optionsManager;\r\n        var viewSpecManager = calendar.viewSpecManager;\r\n        var sectionEl = $('<div class=\"fc-' + position + '\"/>');\r\n        var buttonStr = this.toolbarOptions.layout[position];\r\n        var calendarCustomButtons = optionsManager.get('customButtons') || {};\r\n        var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};\r\n        var calendarButtonText = optionsManager.get('buttonText') || {};\r\n        if (buttonStr) {\r\n            $.each(buttonStr.split(' '), function (i, buttonGroupStr) {\r\n                var groupChildren = $();\r\n                var isOnlyButtons = true;\r\n                var groupEl;\r\n                $.each(buttonGroupStr.split(','), function (j, buttonName) {\r\n                    var customButtonProps;\r\n                    var viewSpec;\r\n                    var buttonClick;\r\n                    var buttonIcon; // only one of these will be set\r\n                    var buttonText; // \"\r\n                    var buttonInnerHtml;\r\n                    var buttonClasses;\r\n                    var buttonEl;\r\n                    var buttonAriaAttr;\r\n                    if (buttonName === 'title') {\r\n                        groupChildren = groupChildren.add($('<h2>&nbsp;</h2>')); // we always want it to take up height\r\n                        isOnlyButtons = false;\r\n                    }\r\n                    else {\r\n                        if ((customButtonProps = calendarCustomButtons[buttonName])) {\r\n                            buttonClick = function (ev) {\r\n                                if (customButtonProps.click) {\r\n                                    customButtonProps.click.call(buttonEl[0], ev);\r\n                                }\r\n                            };\r\n                            (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = customButtonProps.text);\r\n                        }\r\n                        else if ((viewSpec = viewSpecManager.getViewSpec(buttonName))) {\r\n                            _this.viewsWithButtons.push(buttonName);\r\n                            buttonClick = function () {\r\n                                calendar.changeView(buttonName);\r\n                            };\r\n                            (buttonText = viewSpec.buttonTextOverride) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = viewSpec.buttonTextDefault);\r\n                        }\r\n                        else if (calendar[buttonName]) { // a calendar method\r\n                            buttonClick = function () {\r\n                                calendar[buttonName]();\r\n                            };\r\n                            (buttonText = calendarButtonTextOverrides[buttonName]) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = calendarButtonText[buttonName]);\r\n                            //            ^ everything else is considered default\r\n                        }\r\n                        if (buttonClick) {\r\n                            buttonClasses = [\r\n                                'fc-' + buttonName + '-button',\r\n                                theme.getClass('button'),\r\n                                theme.getClass('stateDefault')\r\n                            ];\r\n                            if (buttonText) {\r\n                                buttonInnerHtml = util_1.htmlEscape(buttonText);\r\n                                buttonAriaAttr = '';\r\n                            }\r\n                            else if (buttonIcon) {\r\n                                buttonInnerHtml = \"<span class='\" + buttonIcon + \"'></span>\";\r\n                                buttonAriaAttr = ' aria-label=\"' + buttonName + '\"';\r\n                            }\r\n                            buttonEl = $(// type=\"button\" so that it doesn't submit a form\r\n                            '<button type=\"button\" class=\"' + buttonClasses.join(' ') + '\"' +\r\n                                buttonAriaAttr +\r\n                                '>' + buttonInnerHtml + '</button>')\r\n                                .click(function (ev) {\r\n                                // don't process clicks for disabled buttons\r\n                                if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n                                    buttonClick(ev);\r\n                                    // after the click action, if the button becomes the \"active\" tab, or disabled,\r\n                                    // it should never have a hover class, so remove it now.\r\n                                    if (buttonEl.hasClass(theme.getClass('stateActive')) ||\r\n                                        buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n                                        buttonEl.removeClass(theme.getClass('stateHover'));\r\n                                    }\r\n                                }\r\n                            })\r\n                                .mousedown(function () {\r\n                                // the *down* effect (mouse pressed in).\r\n                                // only on buttons that are not the \"active\" tab, or disabled\r\n                                buttonEl\r\n                                    .not('.' + theme.getClass('stateActive'))\r\n                                    .not('.' + theme.getClass('stateDisabled'))\r\n                                    .addClass(theme.getClass('stateDown'));\r\n                            })\r\n                                .mouseup(function () {\r\n                                // undo the *down* effect\r\n                                buttonEl.removeClass(theme.getClass('stateDown'));\r\n                            })\r\n                                .hover(function () {\r\n                                // the *hover* effect.\r\n                                // only on buttons that are not the \"active\" tab, or disabled\r\n                                buttonEl\r\n                                    .not('.' + theme.getClass('stateActive'))\r\n                                    .not('.' + theme.getClass('stateDisabled'))\r\n                                    .addClass(theme.getClass('stateHover'));\r\n                            }, function () {\r\n                                // undo the *hover* effect\r\n                                buttonEl\r\n                                    .removeClass(theme.getClass('stateHover'))\r\n                                    .removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup\r\n                            });\r\n                            groupChildren = groupChildren.add(buttonEl);\r\n                        }\r\n                    }\r\n                });\r\n                if (isOnlyButtons) {\r\n                    groupChildren\r\n                        .first().addClass(theme.getClass('cornerLeft')).end()\r\n                        .last().addClass(theme.getClass('cornerRight')).end();\r\n                }\r\n                if (groupChildren.length > 1) {\r\n                    groupEl = $('<div/>');\r\n                    if (isOnlyButtons) {\r\n                        groupEl.addClass(theme.getClass('buttonGroup'));\r\n                    }\r\n                    groupEl.append(groupChildren);\r\n                    sectionEl.append(groupEl);\r\n                }\r\n                else {\r\n                    sectionEl.append(groupChildren); // 1 or 0 children\r\n                }\r\n            });\r\n        }\r\n        return sectionEl;\r\n    };\r\n    Toolbar.prototype.updateTitle = function (text) {\r\n        if (this.el) {\r\n            this.el.find('h2').text(text);\r\n        }\r\n    };\r\n    Toolbar.prototype.activateButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .addClass(this.calendar.theme.getClass('stateActive'));\r\n        }\r\n    };\r\n    Toolbar.prototype.deactivateButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .removeClass(this.calendar.theme.getClass('stateActive'));\r\n        }\r\n    };\r\n    Toolbar.prototype.disableButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .prop('disabled', true)\r\n                .addClass(this.calendar.theme.getClass('stateDisabled'));\r\n        }\r\n    };\r\n    Toolbar.prototype.enableButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .prop('disabled', false)\r\n                .removeClass(this.calendar.theme.getClass('stateDisabled'));\r\n        }\r\n    };\r\n    Toolbar.prototype.getViewsWithButtons = function () {\r\n        return this.viewsWithButtons;\r\n    };\r\n    return Toolbar;\r\n}());\r\nexports.default = Toolbar;\r\n\n\n/***/ }),\n/* 258 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar Model_1 = __webpack_require__(51);\r\nvar OptionsManager = /** @class */ (function (_super) {\r\n    tslib_1.__extends(OptionsManager, _super);\r\n    function OptionsManager(_calendar, overrides) {\r\n        var _this = _super.call(this) || this;\r\n        _this._calendar = _calendar;\r\n        _this.overrides = $.extend({}, overrides); // make a copy\r\n        _this.dynamicOverrides = {};\r\n        _this.compute();\r\n        return _this;\r\n    }\r\n    OptionsManager.prototype.add = function (newOptionHash) {\r\n        var optionCnt = 0;\r\n        var optionName;\r\n        this.recordOverrides(newOptionHash); // will trigger this model's watchers\r\n        for (optionName in newOptionHash) {\r\n            optionCnt++;\r\n        }\r\n        // special-case handling of single option change.\r\n        // if only one option change, `optionName` will be its name.\r\n        if (optionCnt === 1) {\r\n            if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {\r\n                this._calendar.updateViewSize(true); // isResize=true\r\n                return;\r\n            }\r\n            else if (optionName === 'defaultDate') {\r\n                return; // can't change date this way. use gotoDate instead\r\n            }\r\n            else if (optionName === 'businessHours') {\r\n                return; // this model already reacts to this\r\n            }\r\n            else if (/^(event|select)(Overlap|Constraint|Allow)$/.test(optionName)) {\r\n                return; // doesn't affect rendering. only interactions.\r\n            }\r\n            else if (optionName === 'timezone') {\r\n                this._calendar.view.flash('initialEvents');\r\n                return;\r\n            }\r\n        }\r\n        // catch-all. rerender the header and footer and rebuild/rerender the current view\r\n        this._calendar.renderHeader();\r\n        this._calendar.renderFooter();\r\n        // even non-current views will be affected by this option change. do before rerender\r\n        // TODO: detangle\r\n        this._calendar.viewsByType = {};\r\n        this._calendar.reinitView();\r\n    };\r\n    // Computes the flattened options hash for the calendar and assigns to `this.options`.\r\n    // Assumes this.overrides and this.dynamicOverrides have already been initialized.\r\n    OptionsManager.prototype.compute = function () {\r\n        var locale;\r\n        var localeDefaults;\r\n        var isRTL;\r\n        var dirDefaults;\r\n        var rawOptions;\r\n        locale = util_1.firstDefined(// explicit locale option given?\r\n        this.dynamicOverrides.locale, this.overrides.locale);\r\n        localeDefaults = locale_1.localeOptionHash[locale];\r\n        if (!localeDefaults) { // explicit locale option not given or invalid?\r\n            locale = options_1.globalDefaults.locale;\r\n            localeDefaults = locale_1.localeOptionHash[locale] || {};\r\n        }\r\n        isRTL = util_1.firstDefined(// based on options computed so far, is direction RTL?\r\n        this.dynamicOverrides.isRTL, this.overrides.isRTL, localeDefaults.isRTL, options_1.globalDefaults.isRTL);\r\n        dirDefaults = isRTL ? options_1.rtlDefaults : {};\r\n        this.dirDefaults = dirDefaults;\r\n        this.localeDefaults = localeDefaults;\r\n        rawOptions = options_1.mergeOptions([\r\n            options_1.globalDefaults,\r\n            dirDefaults,\r\n            localeDefaults,\r\n            this.overrides,\r\n            this.dynamicOverrides\r\n        ]);\r\n        locale_1.populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options\r\n        this.reset(rawOptions);\r\n    };\r\n    // stores the new options internally, but does not rerender anything.\r\n    OptionsManager.prototype.recordOverrides = function (newOptionHash) {\r\n        var optionName;\r\n        for (optionName in newOptionHash) {\r\n            this.dynamicOverrides[optionName] = newOptionHash[optionName];\r\n        }\r\n        this._calendar.viewSpecManager.clearCache(); // the dynamic override invalidates the options in this cache, so just clear it\r\n        this.compute(); // this.options needs to be recomputed after the dynamic override\r\n    };\r\n    return OptionsManager;\r\n}(Model_1.default));\r\nexports.default = OptionsManager;\r\n\n\n/***/ }),\n/* 259 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar ViewSpecManager = /** @class */ (function () {\r\n    function ViewSpecManager(optionsManager, _calendar) {\r\n        this.optionsManager = optionsManager;\r\n        this._calendar = _calendar;\r\n        this.clearCache();\r\n    }\r\n    ViewSpecManager.prototype.clearCache = function () {\r\n        this.viewSpecCache = {};\r\n    };\r\n    // Gets information about how to create a view. Will use a cache.\r\n    ViewSpecManager.prototype.getViewSpec = function (viewType) {\r\n        var cache = this.viewSpecCache;\r\n        return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));\r\n    };\r\n    // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\r\n    // Preference is given to views that have corresponding buttons.\r\n    ViewSpecManager.prototype.getUnitViewSpec = function (unit) {\r\n        var viewTypes;\r\n        var i;\r\n        var spec;\r\n        if ($.inArray(unit, util_1.unitsDesc) !== -1) {\r\n            // put views that have buttons first. there will be duplicates, but oh well\r\n            viewTypes = this._calendar.header.getViewsWithButtons(); // TODO: include footer as well?\r\n            $.each(ViewRegistry_1.viewHash, function (viewType) {\r\n                viewTypes.push(viewType);\r\n            });\r\n            for (i = 0; i < viewTypes.length; i++) {\r\n                spec = this.getViewSpec(viewTypes[i]);\r\n                if (spec) {\r\n                    if (spec.singleUnit === unit) {\r\n                        return spec;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    // Builds an object with information on how to create a given view\r\n    ViewSpecManager.prototype.buildViewSpec = function (requestedViewType) {\r\n        var viewOverrides = this.optionsManager.overrides.views || {};\r\n        var specChain = []; // for the view. lowest to highest priority\r\n        var defaultsChain = []; // for the view. lowest to highest priority\r\n        var overridesChain = []; // for the view. lowest to highest priority\r\n        var viewType = requestedViewType;\r\n        var spec; // for the view\r\n        var overrides; // for the view\r\n        var durationInput;\r\n        var duration;\r\n        var unit;\r\n        // iterate from the specific view definition to a more general one until we hit an actual View class\r\n        while (viewType) {\r\n            spec = ViewRegistry_1.viewHash[viewType];\r\n            overrides = viewOverrides[viewType];\r\n            viewType = null; // clear. might repopulate for another iteration\r\n            if (typeof spec === 'function') { // TODO: deprecate\r\n                spec = { 'class': spec };\r\n            }\r\n            if (spec) {\r\n                specChain.unshift(spec);\r\n                defaultsChain.unshift(spec.defaults || {});\r\n                durationInput = durationInput || spec.duration;\r\n                viewType = viewType || spec.type;\r\n            }\r\n            if (overrides) {\r\n                overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level\r\n                durationInput = durationInput || overrides.duration;\r\n                viewType = viewType || overrides.type;\r\n            }\r\n        }\r\n        spec = util_1.mergeProps(specChain);\r\n        spec.type = requestedViewType;\r\n        if (!spec['class']) {\r\n            return false;\r\n        }\r\n        // fall back to top-level `duration` option\r\n        durationInput = durationInput ||\r\n            this.optionsManager.dynamicOverrides.duration ||\r\n            this.optionsManager.overrides.duration;\r\n        if (durationInput) {\r\n            duration = moment.duration(durationInput);\r\n            if (duration.valueOf()) { // valid?\r\n                unit = util_1.computeDurationGreatestUnit(duration, durationInput);\r\n                spec.duration = duration;\r\n                spec.durationUnit = unit;\r\n                // view is a single-unit duration, like \"week\" or \"day\"\r\n                // incorporate options for this. lowest priority\r\n                if (duration.as(unit) === 1) {\r\n                    spec.singleUnit = unit;\r\n                    overridesChain.unshift(viewOverrides[unit] || {});\r\n                }\r\n            }\r\n        }\r\n        spec.defaults = options_1.mergeOptions(defaultsChain);\r\n        spec.overrides = options_1.mergeOptions(overridesChain);\r\n        this.buildViewSpecOptions(spec);\r\n        this.buildViewSpecButtonText(spec, requestedViewType);\r\n        return spec;\r\n    };\r\n    // Builds and assigns a view spec's options object from its already-assigned defaults and overrides\r\n    ViewSpecManager.prototype.buildViewSpecOptions = function (spec) {\r\n        var optionsManager = this.optionsManager;\r\n        spec.options = options_1.mergeOptions([\r\n            options_1.globalDefaults,\r\n            spec.defaults,\r\n            optionsManager.dirDefaults,\r\n            optionsManager.localeDefaults,\r\n            optionsManager.overrides,\r\n            spec.overrides,\r\n            optionsManager.dynamicOverrides // dynamically set via setter. highest precedence\r\n        ]);\r\n        locale_1.populateInstanceComputableOptions(spec.options);\r\n    };\r\n    // Computes and assigns a view spec's buttonText-related options\r\n    ViewSpecManager.prototype.buildViewSpecButtonText = function (spec, requestedViewType) {\r\n        var optionsManager = this.optionsManager;\r\n        // given an options object with a possible `buttonText` hash, lookup the buttonText for the\r\n        // requested view, falling back to a generic unit entry like \"week\" or \"day\"\r\n        function queryButtonText(options) {\r\n            var buttonText = options.buttonText || {};\r\n            return buttonText[requestedViewType] ||\r\n                // view can decide to look up a certain key\r\n                (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||\r\n                // a key like \"month\"\r\n                (spec.singleUnit ? buttonText[spec.singleUnit] : null);\r\n        }\r\n        // highest to lowest priority\r\n        spec.buttonTextOverride =\r\n            queryButtonText(optionsManager.dynamicOverrides) ||\r\n                queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence\r\n                spec.overrides.buttonText; // `buttonText` for view-specific options is a string\r\n        // highest to lowest priority. mirrors buildViewSpecOptions\r\n        spec.buttonTextDefault =\r\n            queryButtonText(optionsManager.localeDefaults) ||\r\n                queryButtonText(optionsManager.dirDefaults) ||\r\n                spec.defaults.buttonText || // a single string. from ViewSubclass.defaults\r\n                queryButtonText(options_1.globalDefaults) ||\r\n                (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like \"3 days\"\r\n                requestedViewType; // fall back to given view name\r\n    };\r\n    return ViewSpecManager;\r\n}());\r\nexports.default = ViewSpecManager;\r\n\n\n/***/ }),\n/* 260 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nEventSourceParser_1.default.registerClass(ArrayEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(FuncEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(JsonFeedEventSource_1.default);\r\n\n\n/***/ }),\n/* 261 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar Bootstrap3Theme_1 = __webpack_require__(262);\r\nvar Bootstrap4Theme_1 = __webpack_require__(263);\r\nThemeRegistry_1.defineThemeSystem('standard', StandardTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('jquery-ui', JqueryUiTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap3', Bootstrap3Theme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap4', Bootstrap4Theme_1.default);\r\n\n\n/***/ }),\n/* 262 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap3Theme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Bootstrap3Theme, _super);\r\n    function Bootstrap3Theme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Bootstrap3Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap3Theme;\r\nBootstrap3Theme.prototype.classes = {\r\n    widget: 'fc-bootstrap3',\r\n    tableGrid: 'table-bordered',\r\n    tableList: 'table',\r\n    tableListHeading: 'active',\r\n    buttonGroup: 'btn-group',\r\n    button: 'btn btn-default',\r\n    stateActive: 'active',\r\n    stateDisabled: 'disabled',\r\n    today: 'alert alert-info',\r\n    popover: 'panel panel-default',\r\n    popoverHeader: 'panel-heading',\r\n    popoverContent: 'panel-body',\r\n    // day grid\r\n    // for left/right border color when border is inset from edges (all-day in agenda view)\r\n    // avoid `panel` class b/c don't want margins/radius. only border color.\r\n    headerRow: 'panel-default',\r\n    dayRow: 'panel-default',\r\n    // list view\r\n    listView: 'panel panel-default'\r\n};\r\nBootstrap3Theme.prototype.baseIconClass = 'glyphicon';\r\nBootstrap3Theme.prototype.iconClasses = {\r\n    close: 'glyphicon-remove',\r\n    prev: 'glyphicon-chevron-left',\r\n    next: 'glyphicon-chevron-right',\r\n    prevYear: 'glyphicon-backward',\r\n    nextYear: 'glyphicon-forward'\r\n};\r\nBootstrap3Theme.prototype.iconOverrideOption = 'bootstrapGlyphicons';\r\nBootstrap3Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapGlyphicon';\r\nBootstrap3Theme.prototype.iconOverridePrefix = 'glyphicon-';\r\n\n\n/***/ }),\n/* 263 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap4Theme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Bootstrap4Theme, _super);\r\n    function Bootstrap4Theme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Bootstrap4Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap4Theme;\r\nBootstrap4Theme.prototype.classes = {\r\n    widget: 'fc-bootstrap4',\r\n    tableGrid: 'table-bordered',\r\n    tableList: 'table',\r\n    tableListHeading: 'table-active',\r\n    buttonGroup: 'btn-group',\r\n    button: 'btn btn-primary',\r\n    stateActive: 'active',\r\n    stateDisabled: 'disabled',\r\n    today: 'alert alert-info',\r\n    popover: 'card card-primary',\r\n    popoverHeader: 'card-header',\r\n    popoverContent: 'card-body',\r\n    // day grid\r\n    // for left/right border color when border is inset from edges (all-day in agenda view)\r\n    // avoid `table` class b/c don't want margins/padding/structure. only border color.\r\n    headerRow: 'table-bordered',\r\n    dayRow: 'table-bordered',\r\n    // list view\r\n    listView: 'card card-primary'\r\n};\r\nBootstrap4Theme.prototype.baseIconClass = 'fa';\r\nBootstrap4Theme.prototype.iconClasses = {\r\n    close: 'fa-times',\r\n    prev: 'fa-chevron-left',\r\n    next: 'fa-chevron-right',\r\n    prevYear: 'fa-angle-double-left',\r\n    nextYear: 'fa-angle-double-right'\r\n};\r\nBootstrap4Theme.prototype.iconOverrideOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverridePrefix = 'fa-';\r\n\n\n/***/ }),\n/* 264 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthView_1 = __webpack_require__(246);\r\nViewRegistry_1.defineView('basic', {\r\n    'class': BasicView_1.default\r\n});\r\nViewRegistry_1.defineView('basicDay', {\r\n    type: 'basic',\r\n    duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('basicWeek', {\r\n    type: 'basic',\r\n    duration: { weeks: 1 }\r\n});\r\nViewRegistry_1.defineView('month', {\r\n    'class': MonthView_1.default,\r\n    duration: { months: 1 },\r\n    defaults: {\r\n        fixedWeekCount: true\r\n    }\r\n});\r\n\n\n/***/ }),\n/* 265 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar AgendaView_1 = __webpack_require__(238);\r\nViewRegistry_1.defineView('agenda', {\r\n    'class': AgendaView_1.default,\r\n    defaults: {\r\n        allDaySlot: true,\r\n        slotDuration: '00:30:00',\r\n        slotEventOverlap: true // a bad name. confused with overlap/constraint system\r\n    }\r\n});\r\nViewRegistry_1.defineView('agendaDay', {\r\n    type: 'agenda',\r\n    duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('agendaWeek', {\r\n    type: 'agenda',\r\n    duration: { weeks: 1 }\r\n});\r\n\n\n/***/ }),\n/* 266 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar ListView_1 = __webpack_require__(248);\r\nViewRegistry_1.defineView('list', {\r\n    'class': ListView_1.default,\r\n    buttonTextKey: 'list',\r\n    defaults: {\r\n        buttonText: 'list',\r\n        listDayFormat: 'LL',\r\n        noEventsMessage: 'No events to display'\r\n    }\r\n});\r\nViewRegistry_1.defineView('listDay', {\r\n    type: 'list',\r\n    duration: { days: 1 },\r\n    defaults: {\r\n        listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header\r\n    }\r\n});\r\nViewRegistry_1.defineView('listWeek', {\r\n    type: 'list',\r\n    duration: { weeks: 1 },\r\n    defaults: {\r\n        listDayFormat: 'dddd',\r\n        listDayAltFormat: 'LL'\r\n    }\r\n});\r\nViewRegistry_1.defineView('listMonth', {\r\n    type: 'list',\r\n    duration: { month: 1 },\r\n    defaults: {\r\n        listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n    }\r\n});\r\nViewRegistry_1.defineView('listYear', {\r\n    type: 'list',\r\n    duration: { year: 1 },\r\n    defaults: {\r\n        listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n    }\r\n});\r\n\n\n/***/ }),\n/* 267 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\n\n/***/ })\n/******/ ]);\n});"]}