{"version":3,"file":"main.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/timegrid/TimeGridEventRenderer.ts","../../src/timegrid/TimeGridMirrorRenderer.ts","../../src/timegrid/TimeGridFillRenderer.ts","../../src/timegrid/TimeGrid.ts","../../src/timegrid/AllDaySplitter.ts","../../src/timegrid/AbstractTimeGridView.ts","../../src/timegrid/SimpleTimeGrid.ts","../../src/timegrid/TimeGridView.ts","../../src/timegrid/main.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import {\n  htmlEscape, cssToStr,\n  removeElement, applyStyle,\n  createFormatter, DateFormatter,\n  FgEventRenderer, buildSegCompareObj,\n  Seg, isMultiDayRange, compareByFieldSpecs\n} from '@fullcalendar/core'\nimport TimeGrid from './TimeGrid'\n\n/*\nOnly handles foreground segs.\nDoes not own rendering. Use for low-level util methods by TimeGrid.\n*/\nexport default class TimeGridEventRenderer extends FgEventRenderer {\n\n  timeGrid: TimeGrid\n  segsByCol: any // within each col, events are ordered\n  fullTimeFormat: DateFormatter\n\n\n  constructor(timeGrid: TimeGrid) {\n    super(timeGrid.context)\n\n    this.timeGrid = timeGrid\n\n    this.fullTimeFormat = createFormatter({\n      hour: 'numeric',\n      minute: '2-digit',\n      separator: this.context.options.defaultRangeSeparator\n    })\n  }\n\n\n  // Given an array of foreground segments, render a DOM element for each, computes position,\n  // and attaches to the column inner-container elements.\n  attachSegs(segs: Seg[], mirrorInfo) {\n    let segsByCol = this.timeGrid.groupSegsByCol(segs)\n\n    // order the segs within each column\n    // TODO: have groupSegsByCol do this?\n    for (let col = 0; col < segsByCol.length; col++) {\n      segsByCol[col] = this.sortEventSegs(segsByCol[col])\n    }\n\n    this.segsByCol = segsByCol\n    this.timeGrid.attachSegsByCol(segsByCol, this.timeGrid.fgContainerEls)\n  }\n\n\n  detachSegs(segs: Seg[]) {\n    segs.forEach(function(seg) {\n      removeElement(seg.el)\n    })\n\n    this.segsByCol = null\n  }\n\n\n  computeSegSizes(allSegs: Seg[]) {\n    let { timeGrid, segsByCol } = this\n    let colCnt = timeGrid.colCnt\n\n    timeGrid.computeSegVerticals(allSegs) // horizontals relies on this\n\n    if (segsByCol) {\n      for (let col = 0; col < colCnt; col++) {\n        this.computeSegHorizontals(segsByCol[col]) // compute horizontal coordinates, z-index's, and reorder the array\n      }\n    }\n  }\n\n\n  assignSegSizes(allSegs: Seg[]) {\n    let { timeGrid, segsByCol } = this\n    let colCnt = timeGrid.colCnt\n\n    timeGrid.assignSegVerticals(allSegs) // horizontals relies on this\n\n    if (segsByCol) {\n      for (let col = 0; col < colCnt; col++) {\n        this.assignSegCss(segsByCol[col])\n      }\n    }\n  }\n\n\n  // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined\n  computeEventTimeFormat() {\n    return {\n      hour: 'numeric',\n      minute: '2-digit',\n      meridiem: false\n    }\n  }\n\n\n  // Computes a default `displayEventEnd` value if one is not expliclty defined\n  computeDisplayEventEnd() {\n    return true\n  }\n\n\n  // Renders the HTML for a single event segment's default rendering\n  renderSegHtml(seg: Seg, mirrorInfo) {\n    let eventRange = seg.eventRange\n    let eventDef = eventRange.def\n    let eventUi = eventRange.ui\n    let allDay = eventDef.allDay\n    let isDraggable = eventUi.startEditable\n    let isResizableFromStart = seg.isStart && eventUi.durationEditable && this.context.options.eventResizableFromStart\n    let isResizableFromEnd = seg.isEnd && eventUi.durationEditable\n    let classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo)\n    let skinCss = cssToStr(this.getSkinCss(eventUi))\n    let timeText\n    let fullTimeText // more verbose time text. for the print stylesheet\n    let startTimeText // just the start time text\n\n    classes.unshift('fc-time-grid-event')\n\n    // if the event appears to span more than one day...\n    if (isMultiDayRange(eventRange.range)) {\n      // Don't display time text on segments that run entirely through a day.\n      // That would appear as midnight-midnight and would look dumb.\n      // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\n      if (seg.isStart || seg.isEnd) {\n        let unzonedStart = seg.start\n        let unzonedEnd = seg.end\n        timeText = this._getTimeText(unzonedStart, unzonedEnd, allDay) // TODO: give the timezones\n        fullTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, this.fullTimeFormat)\n        startTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, null, false) // displayEnd=false\n      }\n    } else {\n      // Display the normal time text for the *event's* times\n      timeText = this.getTimeText(eventRange)\n      fullTimeText = this.getTimeText(eventRange, this.fullTimeFormat)\n      startTimeText = this.getTimeText(eventRange, null, false) // displayEnd=false\n    }\n\n    return '<a class=\"' + classes.join(' ') + '\"' +\n      (eventDef.url ?\n        ' href=\"' + htmlEscape(eventDef.url) + '\"' :\n        ''\n        ) +\n      (skinCss ?\n        ' style=\"' + skinCss + '\"' :\n        ''\n        ) +\n      '>' +\n        '<div class=\"fc-content\">' +\n          (timeText ?\n            '<div class=\"fc-time\"' +\n            ' data-start=\"' + htmlEscape(startTimeText) + '\"' +\n            ' data-full=\"' + htmlEscape(fullTimeText) + '\"' +\n            '>' +\n              '<span>' + htmlEscape(timeText) + '</span>' +\n            '</div>' :\n            ''\n            ) +\n          (eventDef.title ?\n            '<div class=\"fc-title\">' +\n              htmlEscape(eventDef.title) +\n            '</div>' :\n            ''\n            ) +\n        '</div>' +\n        /* TODO: write CSS for this\n        (isResizableFromStart ?\n          '<div class=\"fc-resizer fc-start-resizer\"></div>' :\n          ''\n          ) +\n        */\n        (isResizableFromEnd ?\n          '<div class=\"fc-resizer fc-end-resizer\"></div>' :\n          ''\n          ) +\n      '</a>'\n  }\n\n\n  // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\n  // Assumed the segs are already ordered.\n  // NOTE: Also reorders the given array by date!\n  computeSegHorizontals(segs: Seg[]) {\n    let levels\n    let level0\n    let i\n\n    levels = buildSlotSegLevels(segs)\n    computeForwardSlotSegs(levels)\n\n    if ((level0 = levels[0])) {\n\n      for (i = 0; i < level0.length; i++) {\n        computeSlotSegPressures(level0[i])\n      }\n\n      for (i = 0; i < level0.length; i++) {\n        this.computeSegForwardBack(level0[i], 0, 0)\n      }\n    }\n  }\n\n\n  // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\n  // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\n  // seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\n  //\n  // The segment might be part of a \"series\", which means consecutive segments with the same pressure\n  // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\n  // segments behind this one in the current series, and `seriesBackwardCoord` is the starting\n  // coordinate of the first segment in the series.\n  computeSegForwardBack(seg: Seg, seriesBackwardPressure, seriesBackwardCoord) {\n    let forwardSegs = seg.forwardSegs\n    let i\n\n    if (seg.forwardCoord === undefined) { // not already computed\n\n      if (!forwardSegs.length) {\n\n        // if there are no forward segments, this segment should butt up against the edge\n        seg.forwardCoord = 1\n      } else {\n\n        // sort highest pressure first\n        this.sortForwardSegs(forwardSegs)\n\n        // this segment's forwardCoord will be calculated from the backwardCoord of the\n        // highest-pressure forward segment.\n        this.computeSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord)\n        seg.forwardCoord = forwardSegs[0].backwardCoord\n      }\n\n      // calculate the backwardCoord from the forwardCoord. consider the series\n      seg.backwardCoord = seg.forwardCoord -\n        (seg.forwardCoord - seriesBackwardCoord) / // available width for series\n        (seriesBackwardPressure + 1) // # of segments in the series\n\n      // use this segment's coordinates to computed the coordinates of the less-pressurized\n      // forward segments\n      for (i = 0; i < forwardSegs.length; i++) {\n        this.computeSegForwardBack(forwardSegs[i], 0, seg.forwardCoord)\n      }\n    }\n  }\n\n\n  sortForwardSegs(forwardSegs: Seg[]) {\n    let objs = forwardSegs.map(buildTimeGridSegCompareObj)\n\n    let specs = [\n      // put higher-pressure first\n      { field: 'forwardPressure', order: -1 },\n      // put segments that are closer to initial edge first (and favor ones with no coords yet)\n      { field: 'backwardCoord', order: 1 }\n    ].concat(\n      this.context.view.eventOrderSpecs\n    )\n\n    objs.sort(function(obj0, obj1) {\n      return compareByFieldSpecs(obj0, obj1, specs)\n    })\n\n    return objs.map(function(c) {\n      return c._seg\n    })\n  }\n\n\n  // Given foreground event segments that have already had their position coordinates computed,\n  // assigns position-related CSS values to their elements.\n  assignSegCss(segs: Seg[]) {\n\n    for (let seg of segs) {\n      applyStyle(seg.el, this.generateSegCss(seg))\n\n      if (seg.level > 0) {\n        seg.el.classList.add('fc-time-grid-event-inset')\n      }\n\n      // if the event is short that the title will be cut off,\n      // attach a className that condenses the title into the time area.\n      if (seg.eventRange.def.title && seg.bottom - seg.top < 30) {\n        seg.el.classList.add('fc-short') // TODO: \"condensed\" is a better name\n      }\n    }\n  }\n\n\n  // Generates an object with CSS properties/values that should be applied to an event segment element.\n  // Contains important positioning-related properties that should be applied to any event element, customized or not.\n  generateSegCss(seg: Seg) {\n    let shouldOverlap = this.context.options.slotEventOverlap\n    let backwardCoord = seg.backwardCoord // the left side if LTR. the right side if RTL. floating-point\n    let forwardCoord = seg.forwardCoord // the right side if LTR. the left side if RTL. floating-point\n    let props = this.timeGrid.generateSegVerticalCss(seg) as any // get top/bottom first\n    let isRtl = this.timeGrid.isRtl\n    let left // amount of space from left edge, a fraction of the total width\n    let right // amount of space from right edge, a fraction of the total width\n\n    if (shouldOverlap) {\n      // double the width, but don't go beyond the maximum forward coordinate (1.0)\n      forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2)\n    }\n\n    if (isRtl) {\n      left = 1 - forwardCoord\n      right = backwardCoord\n    } else {\n      left = backwardCoord\n      right = 1 - forwardCoord\n    }\n\n    props.zIndex = seg.level + 1 // convert from 0-base to 1-based\n    props.left = left * 100 + '%'\n    props.right = right * 100 + '%'\n\n    if (shouldOverlap && seg.forwardPressure) {\n      // add padding to the edge so that forward stacked events don't cover the resizer's icon\n      props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2 // 10 is a guesstimate of the icon's width\n    }\n\n    return props\n  }\n\n}\n\n\n// Builds an array of segments \"levels\". The first level will be the leftmost tier of segments if the calendar is\n// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\nfunction buildSlotSegLevels(segs: Seg[]) {\n  let levels = []\n  let i\n  let seg\n  let j\n\n  for (i = 0; i < segs.length; i++) {\n    seg = segs[i]\n\n    // go through all the levels and stop on the first level where there are no collisions\n    for (j = 0; j < levels.length; j++) {\n      if (!computeSlotSegCollisions(seg, levels[j]).length) {\n        break\n      }\n    }\n\n    seg.level = j;\n\n    (levels[j] || (levels[j] = [])).push(seg)\n  }\n\n  return levels\n}\n\n\n// For every segment, figure out the other segments that are in subsequent\n// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\nfunction computeForwardSlotSegs(levels) {\n  let i\n  let level\n  let j\n  let seg\n  let k\n\n  for (i = 0; i < levels.length; i++) {\n    level = levels[i]\n\n    for (j = 0; j < level.length; j++) {\n      seg = level[j]\n\n      seg.forwardSegs = []\n      for (k = i + 1; k < levels.length; k++) {\n        computeSlotSegCollisions(seg, levels[k], seg.forwardSegs)\n      }\n    }\n  }\n}\n\n\n// Figure out which path forward (via seg.forwardSegs) results in the longest path until\n// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\nfunction computeSlotSegPressures(seg: Seg) {\n  let forwardSegs = seg.forwardSegs\n  let forwardPressure = 0\n  let i\n  let forwardSeg\n\n  if (seg.forwardPressure === undefined) { // not already computed\n\n    for (i = 0; i < forwardSegs.length; i++) {\n      forwardSeg = forwardSegs[i]\n\n      // figure out the child's maximum forward path\n      computeSlotSegPressures(forwardSeg)\n\n      // either use the existing maximum, or use the child's forward pressure\n      // plus one (for the forwardSeg itself)\n      forwardPressure = Math.max(\n        forwardPressure,\n        1 + forwardSeg.forwardPressure\n      )\n    }\n\n    seg.forwardPressure = forwardPressure\n  }\n}\n\n\n// Find all the segments in `otherSegs` that vertically collide with `seg`.\n// Append into an optionally-supplied `results` array and return.\nfunction computeSlotSegCollisions(seg: Seg, otherSegs: Seg[], results= []) {\n\n  for (let i = 0; i < otherSegs.length; i++) {\n    if (isSlotSegCollision(seg, otherSegs[i])) {\n      results.push(otherSegs[i])\n    }\n  }\n\n  return results\n}\n\n\n// Do these segments occupy the same vertical space?\nfunction isSlotSegCollision(seg1: Seg, seg2: Seg) {\n  return seg1.bottom > seg2.top && seg1.top < seg2.bottom\n}\n\n\nfunction buildTimeGridSegCompareObj(seg: Seg) {\n  let obj = buildSegCompareObj(seg)\n\n  obj.forwardPressure = seg.forwardPressure\n  obj.backwardCoord = seg.backwardCoord\n\n  return obj\n}\n","import { Seg } from '@fullcalendar/core'\nimport TimeGridEventRenderer from './TimeGridEventRenderer'\n\n\nexport default class TimeGridMirrorRenderer extends TimeGridEventRenderer {\n\n  sourceSeg: Seg\n\n  attachSegs(segs: Seg[], mirrorInfo) {\n    this.segsByCol = this.timeGrid.groupSegsByCol(segs)\n    this.timeGrid.attachSegsByCol(this.segsByCol, this.timeGrid.mirrorContainerEls)\n\n    this.sourceSeg = mirrorInfo.sourceSeg\n  }\n\n  generateSegCss(seg: Seg) {\n    let props = super.generateSegCss(seg)\n    let { sourceSeg } = this\n\n    if (sourceSeg && sourceSeg.col === seg.col) {\n      let sourceSegProps = super.generateSegCss(sourceSeg)\n\n      props.left = sourceSegProps.left\n      props.right = sourceSegProps.right\n      props.marginLeft = sourceSegProps.marginLeft\n      props.marginRight = sourceSegProps.marginRight\n    }\n\n    return props\n  }\n\n}\n","import {\n  FillRenderer, Seg\n} from '@fullcalendar/core'\nimport TimeGrid from './TimeGrid'\n\n\nexport default class TimeGridFillRenderer extends FillRenderer {\n\n  timeGrid: TimeGrid\n\n  constructor(timeGrid: TimeGrid) {\n    super(timeGrid.context)\n\n    this.timeGrid = timeGrid\n  }\n\n  attachSegs(type, segs: Seg[]) {\n    let { timeGrid } = this\n    let containerEls\n\n    // TODO: more efficient lookup\n    if (type === 'bgEvent') {\n      containerEls = timeGrid.bgContainerEls\n    } else if (type === 'businessHours') {\n      containerEls = timeGrid.businessContainerEls\n    } else if (type === 'highlight') {\n      containerEls = timeGrid.highlightContainerEls\n    }\n\n    timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls)\n\n    return segs.map(function(seg) {\n      return seg.el\n    })\n  }\n\n  computeSegSizes(segs: Seg[]) {\n    this.timeGrid.computeSegVerticals(segs)\n  }\n\n  assignSegSizes(segs: Seg[]) {\n    this.timeGrid.assignSegVerticals(segs)\n  }\n\n}\n","import {\n  htmlEscape,\n  htmlToElement,\n  findElements,\n  removeElement,\n  applyStyle,\n  createElement,\n  PositionCache,\n  Duration,\n  createDuration,\n  addDurations,\n  multiplyDuration,\n  wholeDivideDurations,\n  asRoughMs,\n  startOfDay,\n  DateMarker,\n  DateFormatter,\n  createFormatter,\n  formatIsoTimeString,\n  ComponentContext,\n  DateComponent,\n  Seg,\n  EventSegUiInteractionState,\n  DateProfile,\n  memoizeRendering,\n  MemoizedRendering\n} from '@fullcalendar/core'\nimport { DayBgRow } from '@fullcalendar/daygrid'\nimport TimeGridEventRenderer from './TimeGridEventRenderer'\nimport TimeGridMirrorRenderer from './TimeGridMirrorRenderer'\nimport TimeGridFillRenderer from './TimeGridFillRenderer'\n\n\n/* A component that renders one or more columns of vertical time slots\n----------------------------------------------------------------------------------------------------------------------*/\n\n// potential nice values for the slot-duration and interval-duration\n// from largest to smallest\nconst AGENDA_STOCK_SUB_DURATIONS = [\n  { hours: 1 },\n  { minutes: 30 },\n  { minutes: 15 },\n  { seconds: 30 },\n  { seconds: 15 }\n]\n\nexport interface RenderProps {\n  renderBgIntroHtml: () => string\n  renderIntroHtml: () => string\n}\n\nexport interface TimeGridSeg extends Seg {\n  col: number\n  start: DateMarker\n  end: DateMarker\n}\n\nexport interface TimeGridCell {\n  date: DateMarker\n  htmlAttrs?: string\n}\n\nexport interface TimeGridProps {\n  dateProfile: DateProfile\n  cells: TimeGridCell[]\n  businessHourSegs: TimeGridSeg[]\n  bgEventSegs: TimeGridSeg[]\n  fgEventSegs: TimeGridSeg[]\n  dateSelectionSegs: TimeGridSeg[]\n  eventSelection: string\n  eventDrag: EventSegUiInteractionState | null\n  eventResize: EventSegUiInteractionState | null\n}\n\nexport default class TimeGrid extends DateComponent<TimeGridProps> {\n\n  renderProps: RenderProps\n\n  slotDuration: Duration // duration of a \"slot\", a distinct time segment on given day, visualized by lines\n  snapDuration: Duration // granularity of time for dragging and selecting\n  snapsPerSlot: any\n  labelFormat: DateFormatter // formatting string for times running along vertical axis\n  labelInterval: Duration // duration of how often a label should be displayed for a slot\n\n  colCnt: number\n  colEls: HTMLElement[] // cells elements in the day-row background\n  slatContainerEl: HTMLElement // div that wraps all the slat rows\n  slatEls: HTMLElement[] // elements running horizontally across all columns\n  nowIndicatorEls: HTMLElement[]\n\n  colPositions: PositionCache\n  slatPositions: PositionCache\n  isSlatSizesDirty: boolean = false\n  isColSizesDirty: boolean = false\n\n  rootBgContainerEl: HTMLElement\n  bottomRuleEl: HTMLElement // hidden by default\n  contentSkeletonEl: HTMLElement\n  colContainerEls: HTMLElement[] // containers for each column\n\n  // inner-containers for each column where different types of segs live\n  fgContainerEls: HTMLElement[]\n  bgContainerEls: HTMLElement[]\n  mirrorContainerEls: HTMLElement[]\n  highlightContainerEls: HTMLElement[]\n  businessContainerEls: HTMLElement[]\n\n  private renderSlats = memoizeRendering(this._renderSlats)\n  private renderColumns: MemoizedRendering<[TimeGridCell[], DateProfile]>\n  private renderBusinessHours: MemoizedRendering<[TimeGridSeg[]]>\n  private renderDateSelection: MemoizedRendering<[TimeGridSeg[]]>\n  private renderBgEvents: MemoizedRendering<[TimeGridSeg[]]>\n  private renderFgEvents: MemoizedRendering<[TimeGridSeg[]]>\n  private renderEventSelection: MemoizedRendering<[string]>\n  private renderEventDrag: MemoizedRendering<[EventSegUiInteractionState]>\n  private renderEventResize: MemoizedRendering<[EventSegUiInteractionState]>\n\n\n  constructor(context: ComponentContext, el: HTMLElement, renderProps: RenderProps) {\n    super(context, el)\n\n    let eventRenderer = this.eventRenderer = new TimeGridEventRenderer(this)\n    let fillRenderer = this.fillRenderer = new TimeGridFillRenderer(this)\n    this.mirrorRenderer = new TimeGridMirrorRenderer(this)\n\n    let renderColumns = this.renderColumns = memoizeRendering(\n      this._renderColumns,\n      this._unrenderColumns\n    )\n\n    this.renderBusinessHours = memoizeRendering(\n      fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'),\n      fillRenderer.unrender.bind(fillRenderer, 'businessHours'),\n      [ renderColumns ]\n    )\n\n    this.renderDateSelection = memoizeRendering(\n      this._renderDateSelection,\n      this._unrenderDateSelection,\n      [ renderColumns ]\n    )\n\n    this.renderFgEvents = memoizeRendering(\n      eventRenderer.renderSegs.bind(eventRenderer),\n      eventRenderer.unrender.bind(eventRenderer),\n      [ renderColumns ]\n    )\n\n    this.renderBgEvents = memoizeRendering(\n      fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'),\n      fillRenderer.unrender.bind(fillRenderer, 'bgEvent'),\n      [ renderColumns ]\n    )\n\n    this.renderEventSelection = memoizeRendering(\n      eventRenderer.selectByInstanceId.bind(eventRenderer),\n      eventRenderer.unselectByInstanceId.bind(eventRenderer),\n      [ this.renderFgEvents ]\n    )\n\n    this.renderEventDrag = memoizeRendering(\n      this._renderEventDrag,\n      this._unrenderEventDrag,\n      [ renderColumns ]\n    )\n\n    this.renderEventResize = memoizeRendering(\n      this._renderEventResize,\n      this._unrenderEventResize,\n      [ renderColumns ]\n    )\n\n    this.processOptions()\n\n    el.innerHTML =\n      '<div class=\"fc-bg\"></div>' +\n      '<div class=\"fc-slats\"></div>' +\n      '<hr class=\"fc-divider ' + this.theme.getClass('widgetHeader') + '\" style=\"display:none\" />'\n\n    this.rootBgContainerEl = el.querySelector('.fc-bg')\n    this.slatContainerEl = el.querySelector('.fc-slats')\n    this.bottomRuleEl = el.querySelector('.fc-divider')\n\n    this.renderProps = renderProps\n  }\n\n\n  /* Options\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Parses various options into properties of this object\n  processOptions() {\n    let slotDuration = this.opt('slotDuration')\n    let snapDuration = this.opt('snapDuration')\n    let snapsPerSlot\n    let input\n\n    slotDuration = createDuration(slotDuration)\n    snapDuration = snapDuration ? createDuration(snapDuration) : slotDuration\n    snapsPerSlot = wholeDivideDurations(slotDuration, snapDuration)\n\n    if (snapsPerSlot === null) {\n      snapDuration = slotDuration\n      snapsPerSlot = 1\n      // TODO: say warning?\n    }\n\n    this.slotDuration = slotDuration\n    this.snapDuration = snapDuration\n    this.snapsPerSlot = snapsPerSlot\n\n    // might be an array value (for TimelineView).\n    // if so, getting the most granular entry (the last one probably).\n    input = this.opt('slotLabelFormat')\n    if (Array.isArray(input)) {\n      input = input[input.length - 1]\n    }\n\n    this.labelFormat = createFormatter(input || {\n      hour: 'numeric',\n      minute: '2-digit',\n      omitZeroMinute: true,\n      meridiem: 'short'\n    })\n\n    input = this.opt('slotLabelInterval')\n    this.labelInterval = input ?\n      createDuration(input) :\n      this.computeLabelInterval(slotDuration)\n  }\n\n\n  // Computes an automatic value for slotLabelInterval\n  computeLabelInterval(slotDuration) {\n    let i\n    let labelInterval\n    let slotsPerLabel\n\n    // find the smallest stock label interval that results in more than one slots-per-label\n    for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\n      labelInterval = createDuration(AGENDA_STOCK_SUB_DURATIONS[i])\n      slotsPerLabel = wholeDivideDurations(labelInterval, slotDuration)\n      if (slotsPerLabel !== null && slotsPerLabel > 1) {\n        return labelInterval\n      }\n    }\n\n    return slotDuration // fall back\n  }\n\n\n  /* Rendering\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  render(props: TimeGridProps) {\n    let cells = props.cells\n    this.colCnt = cells.length\n\n    this.renderSlats(props.dateProfile)\n    this.renderColumns(props.cells, props.dateProfile)\n    this.renderBusinessHours(props.businessHourSegs)\n    this.renderDateSelection(props.dateSelectionSegs)\n    this.renderFgEvents(props.fgEventSegs)\n    this.renderBgEvents(props.bgEventSegs)\n    this.renderEventSelection(props.eventSelection)\n    this.renderEventDrag(props.eventDrag)\n    this.renderEventResize(props.eventResize)\n  }\n\n\n  destroy() {\n    super.destroy()\n\n    // should unrender everything else too\n    this.renderSlats.unrender()\n    this.renderColumns.unrender()\n  }\n\n\n  updateSize(isResize: boolean) {\n    let { fillRenderer, eventRenderer, mirrorRenderer } = this\n\n    if (isResize || this.isSlatSizesDirty) {\n      this.buildSlatPositions()\n      this.isSlatSizesDirty = false\n    }\n\n    if (isResize || this.isColSizesDirty) {\n      this.buildColPositions()\n      this.isColSizesDirty = false\n    }\n\n    fillRenderer.computeSizes(isResize)\n    eventRenderer.computeSizes(isResize)\n    mirrorRenderer.computeSizes(isResize)\n\n    fillRenderer.assignSizes(isResize)\n    eventRenderer.assignSizes(isResize)\n    mirrorRenderer.assignSizes(isResize)\n  }\n\n\n  _renderSlats(dateProfile: DateProfile) {\n    let { theme } = this\n\n    this.slatContainerEl.innerHTML =\n      '<table class=\"' + theme.getClass('tableGrid') + '\">' +\n        this.renderSlatRowHtml(dateProfile) +\n      '</table>'\n\n    this.slatEls = findElements(this.slatContainerEl, 'tr')\n\n    this.slatPositions = new PositionCache(\n      this.el,\n      this.slatEls,\n      false,\n      true // vertical\n    )\n\n    this.isSlatSizesDirty = true\n  }\n\n\n  // Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\n  renderSlatRowHtml(dateProfile: DateProfile) {\n    let { dateEnv, theme, isRtl } = this\n    let html = ''\n    let dayStart = startOfDay(dateProfile.renderRange.start)\n    let slotTime = dateProfile.minTime\n    let slotIterator = createDuration(0)\n    let slotDate // will be on the view's first day, but we only care about its time\n    let isLabeled\n    let axisHtml\n\n    // Calculate the time for each slot\n    while (asRoughMs(slotTime) < asRoughMs(dateProfile.maxTime)) {\n      slotDate = dateEnv.add(dayStart, slotTime)\n      isLabeled = wholeDivideDurations(slotIterator, this.labelInterval) !== null\n\n      axisHtml =\n        '<td class=\"fc-axis fc-time ' + theme.getClass('widgetContent') + '\">' +\n          (isLabeled ?\n            '<span>' + // for matchCellWidths\n              htmlEscape(dateEnv.format(slotDate, this.labelFormat)) +\n            '</span>' :\n            ''\n            ) +\n        '</td>'\n\n      html +=\n        '<tr data-time=\"' + formatIsoTimeString(slotDate) + '\"' +\n          (isLabeled ? '' : ' class=\"fc-minor\"') +\n          '>' +\n          (!isRtl ? axisHtml : '') +\n          '<td class=\"' + theme.getClass('widgetContent') + '\"></td>' +\n          (isRtl ? axisHtml : '') +\n        '</tr>'\n\n      slotTime = addDurations(slotTime, this.slotDuration)\n      slotIterator = addDurations(slotIterator, this.slotDuration)\n    }\n\n    return html\n  }\n\n\n  _renderColumns(cells: TimeGridCell[], dateProfile: DateProfile) {\n    let { theme, dateEnv, view } = this\n\n    let bgRow = new DayBgRow(this.context)\n    this.rootBgContainerEl.innerHTML =\n      '<table class=\"' + theme.getClass('tableGrid') + '\">' +\n        bgRow.renderHtml({\n          cells,\n          dateProfile,\n          renderIntroHtml: this.renderProps.renderBgIntroHtml\n        }) +\n      '</table>'\n\n    this.colEls = findElements(this.el, '.fc-day, .fc-disabled-day')\n\n    for (let col = 0; col < this.colCnt; col++) {\n      this.publiclyTrigger('dayRender', [\n        {\n          date: dateEnv.toDate(cells[col].date),\n          el: this.colEls[col],\n          view\n        }\n      ])\n    }\n\n    if (this.isRtl) {\n      this.colEls.reverse()\n    }\n\n    this.colPositions = new PositionCache(\n      this.el,\n      this.colEls,\n      true, // horizontal\n      false\n    )\n\n    this.renderContentSkeleton()\n    this.isColSizesDirty = true\n  }\n\n\n  _unrenderColumns() {\n    this.unrenderContentSkeleton()\n  }\n\n\n  /* Content Skeleton\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Renders the DOM that the view's content will live in\n  renderContentSkeleton() {\n    let parts = []\n    let skeletonEl: HTMLElement\n\n    parts.push(\n      this.renderProps.renderIntroHtml()\n    )\n\n    for (let i = 0; i < this.colCnt; i++) {\n      parts.push(\n        '<td>' +\n          '<div class=\"fc-content-col\">' +\n            '<div class=\"fc-event-container fc-mirror-container\"></div>' +\n            '<div class=\"fc-event-container\"></div>' +\n            '<div class=\"fc-highlight-container\"></div>' +\n            '<div class=\"fc-bgevent-container\"></div>' +\n            '<div class=\"fc-business-container\"></div>' +\n          '</div>' +\n        '</td>'\n      )\n    }\n\n    if (this.isRtl) {\n      parts.reverse()\n    }\n\n    skeletonEl = this.contentSkeletonEl = htmlToElement(\n      '<div class=\"fc-content-skeleton\">' +\n        '<table>' +\n          '<tr>' + parts.join('') + '</tr>' +\n        '</table>' +\n      '</div>'\n    )\n\n    this.colContainerEls = findElements(skeletonEl, '.fc-content-col')\n    this.mirrorContainerEls = findElements(skeletonEl, '.fc-mirror-container')\n    this.fgContainerEls = findElements(skeletonEl, '.fc-event-container:not(.fc-mirror-container)')\n    this.bgContainerEls = findElements(skeletonEl, '.fc-bgevent-container')\n    this.highlightContainerEls = findElements(skeletonEl, '.fc-highlight-container')\n    this.businessContainerEls = findElements(skeletonEl, '.fc-business-container')\n\n    if (this.isRtl) {\n      this.colContainerEls.reverse()\n      this.mirrorContainerEls.reverse()\n      this.fgContainerEls.reverse()\n      this.bgContainerEls.reverse()\n      this.highlightContainerEls.reverse()\n      this.businessContainerEls.reverse()\n    }\n\n    this.el.appendChild(skeletonEl)\n  }\n\n\n  unrenderContentSkeleton() {\n    removeElement(this.contentSkeletonEl)\n  }\n\n\n  // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\n  groupSegsByCol(segs) {\n    let segsByCol = []\n    let i\n\n    for (i = 0; i < this.colCnt; i++) {\n      segsByCol.push([])\n    }\n\n    for (i = 0; i < segs.length; i++) {\n      segsByCol[segs[i].col].push(segs[i])\n    }\n\n    return segsByCol\n  }\n\n\n  // Given segments grouped by column, insert the segments' elements into a parallel array of container\n  // elements, each living within a column.\n  attachSegsByCol(segsByCol, containerEls: HTMLElement[]) {\n    let col\n    let segs\n    let i\n\n    for (col = 0; col < this.colCnt; col++) { // iterate each column grouping\n      segs = segsByCol[col]\n\n      for (i = 0; i < segs.length; i++) {\n        containerEls[col].appendChild(segs[i].el)\n      }\n    }\n  }\n\n\n  /* Now Indicator\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  getNowIndicatorUnit() {\n    return 'minute' // will refresh on the minute\n  }\n\n\n  renderNowIndicator(segs: TimeGridSeg[], date) {\n\n    // HACK: if date columns not ready for some reason (scheduler)\n    if (!this.colContainerEls) {\n      return\n    }\n\n    let top = this.computeDateTop(date)\n    let nodes = []\n    let i\n\n    // render lines within the columns\n    for (i = 0; i < segs.length; i++) {\n      let lineEl = createElement('div', { className: 'fc-now-indicator fc-now-indicator-line' })\n      lineEl.style.top = top + 'px'\n      this.colContainerEls[segs[i].col].appendChild(lineEl)\n      nodes.push(lineEl)\n    }\n\n    // render an arrow over the axis\n    if (segs.length > 0) { // is the current time in view?\n      let arrowEl = createElement('div', { className: 'fc-now-indicator fc-now-indicator-arrow' })\n      arrowEl.style.top = top + 'px'\n      this.contentSkeletonEl.appendChild(arrowEl)\n      nodes.push(arrowEl)\n    }\n\n    this.nowIndicatorEls = nodes\n  }\n\n\n  unrenderNowIndicator() {\n    if (this.nowIndicatorEls) {\n      this.nowIndicatorEls.forEach(removeElement)\n      this.nowIndicatorEls = null\n    }\n  }\n\n\n  /* Coordinates\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  getTotalSlatHeight() {\n    return this.slatContainerEl.offsetHeight\n  }\n\n\n  // Computes the top coordinate, relative to the bounds of the grid, of the given date.\n  // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\n  computeDateTop(when: DateMarker, startOfDayDate?: DateMarker) {\n    if (!startOfDayDate) {\n      startOfDayDate = startOfDay(when)\n    }\n    return this.computeTimeTop(when.valueOf() - startOfDayDate.valueOf())\n  }\n\n\n  // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\n  computeTimeTop(timeMs: number) {\n    let len = this.slatEls.length\n    let dateProfile = this.props.dateProfile\n    let slatCoverage = (timeMs - asRoughMs(dateProfile.minTime)) / asRoughMs(this.slotDuration) // floating-point value of # of slots covered\n    let slatIndex\n    let slatRemainder\n\n    // compute a floating-point number for how many slats should be progressed through.\n    // from 0 to number of slats (inclusive)\n    // constrained because minTime/maxTime might be customized.\n    slatCoverage = Math.max(0, slatCoverage)\n    slatCoverage = Math.min(len, slatCoverage)\n\n    // an integer index of the furthest whole slat\n    // from 0 to number slats (*exclusive*, so len-1)\n    slatIndex = Math.floor(slatCoverage)\n    slatIndex = Math.min(slatIndex, len - 1)\n\n    // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\n    // could be 1.0 if slatCoverage is covering *all* the slots\n    slatRemainder = slatCoverage - slatIndex\n\n    return this.slatPositions.tops[slatIndex] +\n      this.slatPositions.getHeight(slatIndex) * slatRemainder\n  }\n\n\n  // For each segment in an array, computes and assigns its top and bottom properties\n  computeSegVerticals(segs) {\n    let eventMinHeight = this.opt('timeGridEventMinHeight')\n    let i\n    let seg\n    let dayDate\n\n    for (i = 0; i < segs.length; i++) {\n      seg = segs[i]\n      dayDate = this.props.cells[seg.col].date\n\n      seg.top = this.computeDateTop(seg.start, dayDate)\n      seg.bottom = Math.max(\n        seg.top + eventMinHeight,\n        this.computeDateTop(seg.end, dayDate)\n      )\n    }\n  }\n\n\n  // Given segments that already have their top/bottom properties computed, applies those values to\n  // the segments' elements.\n  assignSegVerticals(segs) {\n    let i\n    let seg\n\n    for (i = 0; i < segs.length; i++) {\n      seg = segs[i]\n      applyStyle(seg.el, this.generateSegVerticalCss(seg))\n    }\n  }\n\n\n  // Generates an object with CSS properties for the top/bottom coordinates of a segment element\n  generateSegVerticalCss(seg) {\n    return {\n      top: seg.top,\n      bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\n    }\n  }\n\n\n  /* Sizing\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  buildPositionCaches() {\n    this.buildColPositions()\n    this.buildSlatPositions()\n  }\n\n\n  buildColPositions() {\n    this.colPositions.build()\n  }\n\n\n  buildSlatPositions() {\n    this.slatPositions.build()\n  }\n\n\n  /* Hit System\n  ------------------------------------------------------------------------------------------------------------------*/\n\n  positionToHit(positionLeft, positionTop) {\n    let { dateEnv, snapsPerSlot, slatPositions, colPositions } = this\n\n    let colIndex = colPositions.leftToIndex(positionLeft)\n    let slatIndex = slatPositions.topToIndex(positionTop)\n\n    if (colIndex != null && slatIndex != null) {\n      let slatTop = slatPositions.tops[slatIndex]\n      let slatHeight = slatPositions.getHeight(slatIndex)\n      let partial = (positionTop - slatTop) / slatHeight // floating point number between 0 and 1\n      let localSnapIndex = Math.floor(partial * snapsPerSlot) // the snap # relative to start of slat\n      let snapIndex = slatIndex * snapsPerSlot + localSnapIndex\n\n      let dayDate = this.props.cells[colIndex].date\n      let time = addDurations(\n        this.props.dateProfile.minTime,\n        multiplyDuration(this.snapDuration, snapIndex)\n      )\n\n      let start = dateEnv.add(dayDate, time)\n      let end = dateEnv.add(start, this.snapDuration)\n\n      return {\n        col: colIndex,\n        dateSpan: {\n          range: { start, end },\n          allDay: false\n        },\n        dayEl: this.colEls[colIndex],\n        relativeRect: {\n          left: colPositions.lefts[colIndex],\n          right: colPositions.rights[colIndex],\n          top: slatTop,\n          bottom: slatTop + slatHeight\n        }\n      }\n    }\n  }\n\n\n  /* Event Drag Visualization\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  _renderEventDrag(state: EventSegUiInteractionState) {\n    if (state) {\n      this.eventRenderer.hideByHash(state.affectedInstances)\n\n      if (state.isEvent) {\n        this.mirrorRenderer.renderSegs(state.segs, { isDragging: true, sourceSeg: state.sourceSeg })\n      } else {\n        this.fillRenderer.renderSegs('highlight', state.segs)\n      }\n    }\n  }\n\n\n  _unrenderEventDrag(state: EventSegUiInteractionState) {\n    if (state) {\n      this.eventRenderer.showByHash(state.affectedInstances)\n      this.mirrorRenderer.unrender(state.segs, { isDragging: true, sourceSeg: state.sourceSeg })\n      this.fillRenderer.unrender('highlight')\n    }\n  }\n\n\n  /* Event Resize Visualization\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  _renderEventResize(state: EventSegUiInteractionState) {\n    if (state) {\n      this.eventRenderer.hideByHash(state.affectedInstances)\n      this.mirrorRenderer.renderSegs(state.segs, { isResizing: true, sourceSeg: state.sourceSeg })\n    }\n  }\n\n\n  _unrenderEventResize(state: EventSegUiInteractionState) {\n    if (state) {\n      this.eventRenderer.showByHash(state.affectedInstances)\n      this.mirrorRenderer.unrender(state.segs, { isResizing: true, sourceSeg: state.sourceSeg })\n    }\n  }\n\n\n  /* Selection\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\n  _renderDateSelection(segs: Seg[]) {\n    if (segs) {\n      if (this.opt('selectMirror')) {\n        this.mirrorRenderer.renderSegs(segs, { isSelecting: true })\n      } else {\n        this.fillRenderer.renderSegs('highlight', segs)\n      }\n    }\n  }\n\n\n  _unrenderDateSelection(segs: Seg[]) {\n    this.mirrorRenderer.unrender(segs, { isSelecting: true })\n    this.fillRenderer.unrender('highlight')\n  }\n\n}\n","import {\n  Splitter,\n  hasBgRendering,\n  EventDef,\n  DateSpan\n} from '@fullcalendar/core'\n\nexport default class AllDaySplitter extends Splitter {\n\n  getKeyInfo() {\n    return {\n      allDay: {},\n      timed: {}\n    }\n  }\n\n  getKeysForDateSpan(dateSpan: DateSpan): string[] {\n    if (dateSpan.allDay) {\n      return [ 'allDay' ]\n    } else {\n      return [ 'timed' ]\n    }\n  }\n\n  getKeysForEventDef(eventDef: EventDef): string[] {\n    if (!eventDef.allDay) {\n      return [ 'timed' ]\n    } else if (hasBgRendering(eventDef)) {\n      return [ 'timed', 'allDay' ]\n    } else {\n      return [ 'allDay' ]\n    }\n  }\n\n}\n","import {\n  findElements, createElement, htmlEscape,\n  matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight,\n  ScrollComponent,\n  View, ViewSpec, DateProfileGenerator,\n  ComponentContext,\n  createFormatter, diffDays,\n  buildGotoAnchorHtml, getAllDayHtml\n} from '@fullcalendar/core'\nimport { DayGrid } from '@fullcalendar/daygrid'\nimport TimeGrid from './TimeGrid'\nimport AllDaySplitter from './AllDaySplitter'\n\nconst TIMEGRID_ALL_DAY_EVENT_LIMIT = 5\nconst WEEK_HEADER_FORMAT = createFormatter({ week: 'short' })\n\n\n/* An abstract class for all timegrid-related views. Displays one more columns with time slots running vertically.\n----------------------------------------------------------------------------------------------------------------------*/\n// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\n// Responsible for managing width/height.\n\nexport default abstract class TimeGridView extends View {\n\n  timeGrid: TimeGrid // the main time-grid subcomponent of this view\n  dayGrid: DayGrid // the \"all-day\" subcomponent. if all-day is turned off, this will be null\n\n  scroller: ScrollComponent\n  axisWidth: any // the width of the time axis running down the side\n\n  protected splitter = new AllDaySplitter()\n\n\n  constructor(\n    context: ComponentContext,\n    viewSpec: ViewSpec,\n    dateProfileGenerator: DateProfileGenerator,\n    parentEl: HTMLElement\n  ) {\n    super(context, viewSpec, dateProfileGenerator, parentEl)\n\n    this.el.classList.add('fc-timeGrid-view')\n    this.el.innerHTML = this.renderSkeletonHtml()\n\n    this.scroller = new ScrollComponent(\n      'hidden', // overflow x\n      'auto' // overflow y\n    )\n\n    let timeGridWrapEl = this.scroller.el\n    this.el.querySelector('.fc-body > tr > td').appendChild(timeGridWrapEl)\n    timeGridWrapEl.classList.add('fc-time-grid-container')\n    let timeGridEl = createElement('div', { className: 'fc-time-grid' })\n    timeGridWrapEl.appendChild(timeGridEl)\n\n    this.timeGrid = new TimeGrid(\n      this.context,\n      timeGridEl,\n      {\n        renderBgIntroHtml: this.renderTimeGridBgIntroHtml,\n        renderIntroHtml: this.renderTimeGridIntroHtml\n      }\n    )\n\n    if (this.opt('allDaySlot')) { // should we display the \"all-day\" area?\n\n      this.dayGrid = new DayGrid( // the all-day subcomponent of this view\n        this.context,\n        this.el.querySelector('.fc-day-grid'),\n        {\n          renderNumberIntroHtml: this.renderDayGridIntroHtml, // don't want numbers\n          renderBgIntroHtml: this.renderDayGridBgIntroHtml,\n          renderIntroHtml: this.renderDayGridIntroHtml,\n          colWeekNumbersVisible: false,\n          cellWeekNumbersVisible: false\n        }\n      )\n\n      // have the day-grid extend it's coordinate area over the <hr> dividing the two grids\n      this.dayGrid.bottomCoordPadding = (this.el.querySelector('.fc-divider') as HTMLElement).offsetHeight\n    }\n  }\n\n\n  destroy() {\n    super.destroy()\n\n    this.timeGrid.destroy()\n\n    if (this.dayGrid) {\n      this.dayGrid.destroy()\n    }\n\n    this.scroller.destroy()\n  }\n\n\n  /* Rendering\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Builds the HTML skeleton for the view.\n  // The day-grid and time-grid components will render inside containers defined by this HTML.\n  renderSkeletonHtml() {\n    let { theme } = this\n\n    return '' +\n      '<table class=\"' + theme.getClass('tableGrid') + '\">' +\n        (this.opt('columnHeader') ?\n          '<thead class=\"fc-head\">' +\n            '<tr>' +\n              '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' +\n            '</tr>' +\n          '</thead>' :\n          ''\n          ) +\n        '<tbody class=\"fc-body\">' +\n          '<tr>' +\n            '<td class=\"' + theme.getClass('widgetContent') + '\">' +\n              (this.opt('allDaySlot') ?\n                '<div class=\"fc-day-grid\"></div>' +\n                '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\" />' :\n                ''\n                ) +\n            '</td>' +\n          '</tr>' +\n        '</tbody>' +\n      '</table>'\n  }\n\n\n  /* Now Indicator\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  getNowIndicatorUnit() {\n    return this.timeGrid.getNowIndicatorUnit()\n  }\n\n\n  // subclasses should implement\n  // renderNowIndicator(date: DateMarker) {\n  // }\n\n\n  unrenderNowIndicator() {\n    this.timeGrid.unrenderNowIndicator()\n  }\n\n\n  /* Dimensions\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  updateSize(isResize: boolean, viewHeight: number, isAuto: boolean) {\n    super.updateSize(isResize, viewHeight, isAuto) // will call updateBaseSize. important that executes first\n\n    this.timeGrid.updateSize(isResize)\n\n    if (this.dayGrid) {\n      this.dayGrid.updateSize(isResize)\n    }\n  }\n\n\n  // Adjusts the vertical dimensions of the view to the specified values\n  updateBaseSize(isResize, viewHeight, isAuto) {\n    let eventLimit\n    let scrollerHeight\n    let scrollbarWidths\n\n    // make all axis cells line up\n    this.axisWidth = matchCellWidths(findElements(this.el, '.fc-axis'))\n\n    // hack to give the view some height prior to timeGrid's columns being rendered\n    // TODO: separate setting height from scroller VS timeGrid.\n    if (!this.timeGrid.colEls) {\n      if (!isAuto) {\n        scrollerHeight = this.computeScrollerHeight(viewHeight)\n        this.scroller.setHeight(scrollerHeight)\n      }\n      return\n    }\n\n    // set of fake row elements that must compensate when scroller has scrollbars\n    let noScrollRowEls: HTMLElement[] = findElements(this.el, '.fc-row').filter((node) => {\n      return !this.scroller.el.contains(node)\n    })\n\n    // reset all dimensions back to the original state\n    this.timeGrid.bottomRuleEl.style.display = 'none' // will be shown later if this <hr> is necessary\n    this.scroller.clear() // sets height to 'auto' and clears overflow\n    noScrollRowEls.forEach(uncompensateScroll)\n\n    // limit number of events in the all-day area\n    if (this.dayGrid) {\n      this.dayGrid.removeSegPopover() // kill the \"more\" popover if displayed\n\n      eventLimit = this.opt('eventLimit')\n      if (eventLimit && typeof eventLimit !== 'number') {\n        eventLimit = TIMEGRID_ALL_DAY_EVENT_LIMIT // make sure \"auto\" goes to a real number\n      }\n      if (eventLimit) {\n        this.dayGrid.limitRows(eventLimit)\n      }\n    }\n\n    if (!isAuto) { // should we force dimensions of the scroll container?\n\n      scrollerHeight = this.computeScrollerHeight(viewHeight)\n      this.scroller.setHeight(scrollerHeight)\n      scrollbarWidths = this.scroller.getScrollbarWidths()\n\n      if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\n\n        // make the all-day and header rows lines up\n        noScrollRowEls.forEach(function(rowEl) {\n          compensateScroll(rowEl, scrollbarWidths)\n        })\n\n        // the scrollbar compensation might have changed text flow, which might affect height, so recalculate\n        // and reapply the desired height to the scroller.\n        scrollerHeight = this.computeScrollerHeight(viewHeight)\n        this.scroller.setHeight(scrollerHeight)\n      }\n\n      // guarantees the same scrollbar widths\n      this.scroller.lockOverflow(scrollbarWidths)\n\n      // if there's any space below the slats, show the horizontal rule.\n      // this won't cause any new overflow, because lockOverflow already called.\n      if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\n        this.timeGrid.bottomRuleEl.style.display = ''\n      }\n    }\n  }\n\n\n  // given a desired total height of the view, returns what the height of the scroller should be\n  computeScrollerHeight(viewHeight) {\n    return viewHeight -\n      subtractInnerElHeight(this.el, this.scroller.el) // everything that's NOT the scroller\n  }\n\n\n  /* Scroll\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Computes the initial pre-configured scroll state prior to allowing the user to change it\n  computeDateScroll(timeMs: number) {\n    let top = this.timeGrid.computeTimeTop(timeMs)\n\n    // zoom can give weird floating-point values. rather scroll a little bit further\n    top = Math.ceil(top)\n\n    if (top) {\n      top++ // to overcome top border that slots beyond the first have. looks better\n    }\n\n    return { top }\n  }\n\n\n  queryDateScroll() {\n    return { top: this.scroller.getScrollTop() }\n  }\n\n\n  applyDateScroll(scroll) {\n    if (scroll.top !== undefined) {\n      this.scroller.setScrollTop(scroll.top)\n    }\n  }\n\n\n  /* Header Render Methods\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Generates the HTML that will go before the day-of week header cells\n  renderHeadIntroHtml = () => {\n    let { theme, dateEnv } = this\n    let range = this.props.dateProfile.renderRange\n    let dayCnt = diffDays(range.start, range.end)\n    let weekText\n\n    if (this.opt('weekNumbers')) {\n      weekText = dateEnv.format(range.start, WEEK_HEADER_FORMAT)\n\n      return '' +\n        '<th class=\"fc-axis fc-week-number ' + theme.getClass('widgetHeader') + '\" ' + this.axisStyleAttr() + '>' +\n          buildGotoAnchorHtml( // aside from link, important for matchCellWidths\n            this,\n            { date: range.start, type: 'week', forceOff: dayCnt > 1 },\n            htmlEscape(weekText) // inner HTML\n          ) +\n        '</th>'\n    } else {\n      return '<th class=\"fc-axis ' + theme.getClass('widgetHeader') + '\" ' + this.axisStyleAttr() + '></th>'\n    }\n  }\n\n\n  // Generates an HTML attribute string for setting the width of the axis, if it is known\n  axisStyleAttr() {\n    if (this.axisWidth != null) {\n      return 'style=\"width:' + this.axisWidth + 'px\"'\n    }\n    return ''\n  }\n\n\n  /* Time Grid Render Methods\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\n  renderTimeGridBgIntroHtml = () => {\n    let { theme } = this\n\n    return '<td class=\"fc-axis ' + theme.getClass('widgetContent') + '\" ' + this.axisStyleAttr() + '></td>'\n  }\n\n\n  // Generates the HTML that goes before all other types of cells.\n  // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.\n  renderTimeGridIntroHtml = () => {\n    return '<td class=\"fc-axis\" ' + this.axisStyleAttr() + '></td>'\n  }\n\n\n  /* Day Grid Render Methods\n  ------------------------------------------------------------------------------------------------------------------*/\n\n\n  // Generates the HTML that goes before the all-day cells\n  renderDayGridBgIntroHtml = () => {\n    let { theme } = this\n\n    return '' +\n      '<td class=\"fc-axis ' + theme.getClass('widgetContent') + '\" ' + this.axisStyleAttr() + '>' +\n        '<span>' + // needed for matchCellWidths\n          getAllDayHtml(this) +\n        '</span>' +\n      '</td>'\n  }\n\n\n  // Generates the HTML that goes before all other types of cells.\n  // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.\n  renderDayGridIntroHtml = () => {\n    return '<td class=\"fc-axis\" ' + this.axisStyleAttr() + '></td>'\n  }\n\n}\n\nTimeGridView.prototype.usesMinMaxTime = true // indicates that minTime/maxTime affects rendering\n","import {\n  DateComponent,\n  DateProfile,\n  EventStore,\n  EventUiHash,\n  EventInteractionState,\n  DateSpan,\n  memoize,\n  intersectRanges, DateRange,\n  DayTable,\n  DateEnv,\n  DateMarker,\n  Slicer,\n  Hit,\n  ComponentContext\n} from '@fullcalendar/core'\nimport TimeGrid, { TimeGridSeg } from './TimeGrid'\n\nexport interface SimpleTimeGridProps {\n  dateProfile: DateProfile | null\n  dayTable: DayTable\n  businessHours: EventStore\n  eventStore: EventStore\n  eventUiBases: EventUiHash\n  dateSelection: DateSpan | null\n  eventSelection: string\n  eventDrag: EventInteractionState | null\n  eventResize: EventInteractionState | null\n}\n\nexport default class SimpleTimeGrid extends DateComponent<SimpleTimeGridProps> {\n\n  timeGrid: TimeGrid\n\n  private buildDayRanges = memoize(buildDayRanges)\n  private dayRanges: DateRange[] // for now indicator\n  private slicer = new TimeGridSlicer()\n\n  constructor(context: ComponentContext, timeGrid: TimeGrid) {\n    super(context, timeGrid.el)\n\n    this.timeGrid = timeGrid\n\n    context.calendar.registerInteractiveComponent(this, {\n      el: this.timeGrid.el\n    })\n  }\n\n  destroy() {\n    super.destroy()\n\n    this.calendar.unregisterInteractiveComponent(this)\n  }\n\n  render(props: SimpleTimeGridProps) {\n    let { dateProfile, dayTable } = props\n    let dayRanges = this.dayRanges = this.buildDayRanges(dayTable, dateProfile, this.dateEnv)\n\n    this.timeGrid.receiveProps({\n      ...this.slicer.sliceProps(props, dateProfile, null, this.timeGrid, dayRanges),\n      dateProfile,\n      cells: dayTable.cells[0]\n    })\n  }\n\n  renderNowIndicator(date: DateMarker) {\n    this.timeGrid.renderNowIndicator(\n      this.slicer.sliceNowDate(date, this.timeGrid, this.dayRanges),\n      date\n    )\n  }\n\n  buildPositionCaches() {\n    this.timeGrid.buildPositionCaches()\n  }\n\n  queryHit(positionLeft: number, positionTop: number): Hit {\n    let rawHit = this.timeGrid.positionToHit(positionLeft, positionTop)\n\n    if (rawHit) {\n      return {\n        component: this.timeGrid,\n        dateSpan: rawHit.dateSpan,\n        dayEl: rawHit.dayEl,\n        rect: {\n          left: rawHit.relativeRect.left,\n          right: rawHit.relativeRect.right,\n          top: rawHit.relativeRect.top,\n          bottom: rawHit.relativeRect.bottom\n        },\n        layer: 0\n      }\n    }\n  }\n\n}\n\n\nexport function buildDayRanges(dayTable: DayTable, dateProfile: DateProfile, dateEnv: DateEnv): DateRange[] {\n  let ranges: DateRange[] = []\n\n  for (let date of dayTable.headerDates) {\n    ranges.push({\n      start: dateEnv.add(date, dateProfile.minTime),\n      end: dateEnv.add(date, dateProfile.maxTime)\n    })\n  }\n\n  return ranges\n}\n\n\nexport class TimeGridSlicer extends Slicer<TimeGridSeg, [DateRange[]]> {\n\n  sliceRange(range: DateRange, dayRanges: DateRange[]): TimeGridSeg[] {\n    let segs: TimeGridSeg[] = []\n\n    for (let col = 0; col < dayRanges.length; col++) {\n      let segRange = intersectRanges(range, dayRanges[col])\n\n      if (segRange) {\n        segs.push({\n          start: segRange.start,\n          end: segRange.end,\n          isStart: segRange.start.valueOf() === range.start.valueOf(),\n          isEnd: segRange.end.valueOf() === range.end.valueOf(),\n          col\n        })\n      }\n    }\n\n    return segs\n  }\n\n}\n","import {\n  DateProfileGenerator, DateProfile,\n  ComponentContext,\n  ViewSpec,\n  DayHeader,\n  DaySeries,\n  DayTable,\n  memoize,\n  ViewProps\n} from '@fullcalendar/core'\nimport { SimpleDayGrid } from '@fullcalendar/daygrid'\nimport SimpleTimeGrid from './SimpleTimeGrid'\nimport AbstractTimeGridView from './AbstractTimeGridView'\n\n\nexport default class TimeGridView extends AbstractTimeGridView {\n\n  header: DayHeader\n  simpleDayGrid: SimpleDayGrid\n  simpleTimeGrid: SimpleTimeGrid\n\n  private buildDayTable = memoize(buildDayTable)\n\n  constructor(\n    _context: ComponentContext,\n    viewSpec: ViewSpec,\n    dateProfileGenerator: DateProfileGenerator,\n    parentEl: HTMLElement\n  ) {\n    super(_context, viewSpec, dateProfileGenerator, parentEl)\n\n    if (this.opt('columnHeader')) {\n      this.header = new DayHeader(\n        this.context,\n        this.el.querySelector('.fc-head-container')\n      )\n    }\n\n    this.simpleTimeGrid = new SimpleTimeGrid(this.context, this.timeGrid)\n\n    if (this.dayGrid) {\n      this.simpleDayGrid = new SimpleDayGrid(this.context, this.dayGrid)\n    }\n  }\n\n  destroy() {\n    super.destroy()\n\n    if (this.header) {\n      this.header.destroy()\n    }\n\n    this.simpleTimeGrid.destroy()\n\n    if (this.simpleDayGrid) {\n      this.simpleDayGrid.destroy()\n    }\n  }\n\n  render(props: ViewProps) {\n    super.render(props) // for flags for updateSize\n\n    let { dateProfile } = this.props\n    let dayTable = this.buildDayTable(dateProfile, this.dateProfileGenerator)\n    let splitProps = this.splitter.splitProps(props)\n\n    if (this.header) {\n      this.header.receiveProps({\n        dateProfile,\n        dates: dayTable.headerDates,\n        datesRepDistinctDays: true,\n        renderIntroHtml: this.renderHeadIntroHtml\n      })\n    }\n\n    this.simpleTimeGrid.receiveProps({\n      ...splitProps['timed'],\n      dateProfile,\n      dayTable\n    })\n\n    if (this.simpleDayGrid) {\n      this.simpleDayGrid.receiveProps({\n        ...splitProps['allDay'],\n        dateProfile,\n        dayTable,\n        nextDayThreshold: this.nextDayThreshold,\n        isRigid: false\n      })\n    }\n  }\n\n  renderNowIndicator(date) {\n    this.simpleTimeGrid.renderNowIndicator(date)\n  }\n\n}\n\nexport function buildDayTable(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): DayTable {\n  let daySeries = new DaySeries(dateProfile.renderRange, dateProfileGenerator)\n\n  return new DayTable(daySeries, false)\n}\n","import { createPlugin } from '@fullcalendar/core'\nimport AbstractTimeGridView from './AbstractTimeGridView'\nimport TimeGridView, { buildDayTable } from './TimeGridView'\nimport { TimeGridSeg } from './TimeGrid'\nimport { TimeGridSlicer, buildDayRanges } from './SimpleTimeGrid'\n\nexport { TimeGridView, AbstractTimeGridView, buildDayTable, buildDayRanges, TimeGridSlicer, TimeGridSeg }\nexport { default as TimeGrid } from './TimeGrid'\n\nexport default createPlugin({\n  defaultView: 'timeGridWeek',\n  views: {\n\n    timeGrid: {\n      class: TimeGridView,\n      allDaySlot: true,\n      slotDuration: '00:30:00',\n      slotEventOverlap: true // a bad name. confused with overlap/constraint system\n    },\n\n    timeGridDay: {\n      type: 'timeGrid',\n      duration: { days: 1 }\n    },\n\n    timeGridWeek: {\n      type: 'timeGrid',\n      duration: { weeks: 1 }\n    }\n\n  }\n})\n"],"names":["tslib_1.__extends","createFormatter","removeElement","cssToStr","isMultiDayRange","htmlEscape","compareByFieldSpecs","applyStyle","FgEventRenderer","buildSegCompareObj","FillRenderer","memoizeRendering","createDuration","wholeDivideDurations","findElements","PositionCache","startOfDay","asRoughMs","formatIsoTimeString","addDurations","DayBgRow","htmlToElement","createElement","multiplyDuration","DateComponent","hasBgRendering","Splitter","diffDays","buildGotoAnchorHtml","getAllDayHtml","ScrollComponent","DayGrid","matchCellWidths","uncompensateScroll","compensateScroll","subtractInnerElHeight","View","memoize","intersectRanges","Slicer","DayHeader","SimpleDayGrid","AbstractTimeGridView","DaySeries","DayTable","createPlugin","TimeGridView"],"mappings":"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"}