katoikia-app/web-ui/web-react/node_modules/@fullcalendar/common/main.js.map

1 line
750 KiB
Plaintext

{"version":3,"file":"main.js","sources":["src/api/EventSourceApi.ts","src/util/dom-manip.ts","src/util/dom-event.ts","src/util/misc.ts","src/datelib/marker.ts","src/structs/event-instance.ts","src/util/object.ts","src/structs/recurring-event.ts","src/datelib/duration.ts","src/datelib/formatting-utils.ts","src/util/array.ts","src/util/memoize.ts","src/datelib/formatting-native.ts","src/datelib/zoned-marker.ts","src/datelib/DateFormatter.ts","src/datelib/formatting-cmd.ts","src/datelib/formatting-func.ts","src/datelib/formatting.ts","src/options.ts","src/structs/event-store.ts","src/structs/constraint.ts","src/util/html.ts","src/component/event-ui.ts","src/structs/event-parse.ts","src/util/date.ts","src/datelib/date-range.ts","src/component/event-rendering.ts","src/structs/date-span.ts","src/calendar-utils.ts","src/structs/event-mutation.ts","src/ViewApi.ts","src/structs/event-source-parse.ts","src/reducers/current-date.ts","src/CalendarApi.tsx","src/api/EventApi.ts","src/datelib/calendar-system.ts","src/datelib/parsing.ts","src/datelib/env.ts","src/global-locales.ts","src/datelib/locale.ts","src/formatting-api.ts","src/structs/business-hours.ts","src/util/geom.ts","src/util/table-styling.tsx","src/component/event-splitting.ts","src/component/date-rendering.tsx","src/common/nav-link.ts","src/util/scrollbar-side.ts","src/util/scrollbar-width.ts","src/util/dom-geom.ts","src/util/promise.ts","src/common/Emitter.ts","src/common/PositionCache.ts","src/common/scroll-controller.ts","src/theme/Theme.ts","src/ScrollResponder.ts","src/ViewContext.ts","src/vdom-util.tsx","src/component/DateComponent.ts","src/plugin-system.ts","src/theme/StandardTheme.ts","src/structs/view-def.ts","src/common/render-hook.tsx","src/common/ViewRoot.tsx","src/structs/view-config.tsx","src/structs/view-spec.ts","src/DateProfileGenerator.ts","src/reducers/view-type.ts","src/reducers/options.ts","src/reducers/date-profile.ts","src/reducers/eventSources.ts","src/reducers/eventStore.ts","src/reducers/date-selection.ts","src/reducers/selected-event.ts","src/reducers/event-drag.ts","src/reducers/event-resize.ts","src/toolbar-parse.ts","src/event-sources/array-event-source.ts","src/event-sources/func-event-source.ts","src/util/requestJson.ts","src/event-sources/json-feed-event-source-refiners.ts","src/event-sources/json-feed-event-source.ts","src/structs/recurring-event-simple-refiners.ts","src/structs/recurring-event-simple.ts","src/option-change-handlers.ts","src/dates-set.ts","src/event-crud.ts","src/global-plugins.ts","src/util/DelayedRunner.ts","src/util/TaskRunner.ts","src/reducers/title-formatting.ts","src/reducers/CalendarDataManager.ts","src/component/CalendarDataProvider.ts","src/View.ts","src/datelib/timezone.ts","src/seg-hierarchy.ts","src/interactions/interaction.ts","src/interactions/ElementDragging.ts","src/global-config.ts","src/structs/drag-meta.ts","src/ToolbarSection.tsx","src/Toolbar.tsx","src/ViewContainer.tsx","src/interactions/EventClicking.ts","src/interactions/EventHovering.ts","src/CalendarContent.tsx","src/CalendarRoot.tsx","src/common/table-utils.ts","src/common/table-cell-util.tsx","src/common/TableDateCell.tsx","src/common/TableDowCell.tsx","src/NowTimer.ts","src/common/DayHeader.tsx","src/common/DaySeriesModel.ts","src/common/DayTableModel.ts","src/common/slicing-utils.ts","src/validation.ts","src/scrollgrid/Scroller.tsx","src/util/RefMap.ts","src/scrollgrid/util.tsx","src/scrollgrid/SimpleScrollGrid.tsx","src/common/EventRoot.tsx","src/common/StandardEvent.tsx","src/common/NowIndicatorRoot.tsx","src/common/DayCellContent.tsx","src/common/DayCellRoot.tsx","src/common/bg-fill.tsx","src/common/WeekNumberRoot.tsx","src/common/Popover.tsx","src/common/MorePopover.tsx","src/common/MoreLinkRoot.tsx","src/main.ts"],"sourcesContent":["import { EventSource } from '../structs/event-source'\nimport { CalendarContext } from '../CalendarContext'\n\n// no public types yet. when there are, export from:\n// import {} from './api-type-deps'\n\nexport class EventSourceApi {\n constructor(\n private context: CalendarContext,\n public internalEventSource: EventSource<any>, // rename?\n ) {\n }\n\n remove() {\n this.context.dispatch({\n type: 'REMOVE_EVENT_SOURCE',\n sourceId: this.internalEventSource.sourceId,\n })\n }\n\n refetch() {\n this.context.dispatch({\n type: 'FETCH_EVENT_SOURCES',\n sourceIds: [this.internalEventSource.sourceId],\n isRefetch: true,\n })\n }\n\n get id(): string {\n return this.internalEventSource.publicId\n }\n\n get url(): string {\n return this.internalEventSource.meta.url\n }\n\n get format(): string {\n return this.internalEventSource.meta.format // TODO: bad. not guaranteed\n }\n}\n","import { Dictionary } from '../options'\n\nexport function removeElement(el: HTMLElement) { // removes nodes in addition to elements. bad name\n if (el.parentNode) {\n el.parentNode.removeChild(el)\n }\n}\n\n// Querying\n// ----------------------------------------------------------------------------------------------------------------\n\nexport function elementClosest(el: HTMLElement, selector: string): HTMLElement {\n if (el.closest) {\n return el.closest(selector)\n\n // really bad fallback for IE\n // from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n }\n if (!document.documentElement.contains(el)) {\n return null\n }\n do {\n if (elementMatches(el, selector)) {\n return el\n }\n el = (el.parentElement || el.parentNode) as HTMLElement\n } while (el !== null && el.nodeType === 1)\n return null\n}\n\nexport function elementMatches(el: HTMLElement, selector: string): HTMLElement {\n let method = el.matches || (el as any).matchesSelector || (el as any).msMatchesSelector\n\n return method.call(el, selector)\n}\n\n// accepts multiple subject els\n// returns a real array. good for methods like forEach\n// TODO: accept the document\nexport function findElements(container: HTMLElement[] | HTMLElement | NodeListOf<HTMLElement>, selector: string): HTMLElement[] {\n let containers = container instanceof HTMLElement ? [container] : container\n let allMatches: HTMLElement[] = []\n\n for (let i = 0; i < containers.length; i += 1) {\n let matches = containers[i].querySelectorAll(selector)\n\n for (let j = 0; j < matches.length; j += 1) {\n allMatches.push(matches[j] as HTMLElement)\n }\n }\n\n return allMatches\n}\n\n// accepts multiple subject els\n// only queries direct child elements // TODO: rename to findDirectChildren!\nexport function findDirectChildren(parent: HTMLElement[] | HTMLElement, selector?: string): HTMLElement[] {\n let parents = parent instanceof HTMLElement ? [parent] : parent\n let allMatches = []\n\n for (let i = 0; i < parents.length; i += 1) {\n let childNodes = parents[i].children // only ever elements\n\n for (let j = 0; j < childNodes.length; j += 1) {\n let childNode = childNodes[j]\n\n if (!selector || elementMatches(childNode as HTMLElement, selector)) {\n allMatches.push(childNode)\n }\n }\n }\n\n return allMatches\n}\n\n// Style\n// ----------------------------------------------------------------------------------------------------------------\n\nconst PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i\n\nexport function applyStyle(el: HTMLElement, props: Dictionary) {\n for (let propName in props) {\n applyStyleProp(el, propName, props[propName])\n }\n}\n\nexport function applyStyleProp(el: HTMLElement, name: string, val) {\n if (val == null) {\n el.style[name] = ''\n } else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {\n el.style[name] = `${val}px`\n } else {\n el.style[name] = val\n }\n}\n\n// Event Handling\n// ----------------------------------------------------------------------------------------------------------------\n\n// if intercepting bubbled events at the document/window/body level,\n// and want to see originating element (the 'target'), use this util instead\n// of `ev.target` because it goes within web-component boundaries.\nexport function getEventTargetViaRoot(ev: Event) {\n return ev.composedPath?.()[0] ?? ev.target\n}\n\n// Shadow DOM consuderations\n// ----------------------------------------------------------------------------------------------------------------\n\nexport function getElRoot(el: HTMLElement): ShadowRoot | Document {\n return el.getRootNode ? el.getRootNode() as ShadowRoot : document\n}\n\n// Unique ID for DOM attribute\n\nlet guid = 0\n\nexport function getUniqueDomId() {\n guid += 1\n return 'fc-dom-' + guid\n}\n","import { elementClosest } from './dom-manip'\nimport { VUIEvent } from '../vdom'\n\n// Stops a mouse/touch event from doing it's native browser action\nexport function preventDefault(ev) {\n ev.preventDefault()\n}\n\n// Event Delegation\n// ----------------------------------------------------------------------------------------------------------------\n\nexport function buildDelegationHandler<EventType extends (Event | VUIEvent)>(\n selector: string,\n handler: (ev: EventType, matchedTarget: HTMLElement) => void,\n) {\n return (ev: EventType) => {\n let matchedChild = elementClosest(ev.target as HTMLElement, selector)\n\n if (matchedChild) {\n handler.call(matchedChild, ev, matchedChild)\n }\n }\n}\n\nexport function listenBySelector(\n container: HTMLElement,\n eventType: string,\n selector: string,\n handler: (ev: Event, matchedTarget: HTMLElement) => void,\n) {\n let attachedHandler = buildDelegationHandler(selector, handler)\n\n container.addEventListener(eventType, attachedHandler)\n\n return () => {\n container.removeEventListener(eventType, attachedHandler)\n }\n}\n\nexport function listenToHoverBySelector(\n container: HTMLElement,\n selector: string,\n onMouseEnter: (ev: Event, matchedTarget: HTMLElement) => void,\n onMouseLeave: (ev: Event, matchedTarget: HTMLElement) => void,\n) {\n let currentMatchedChild\n\n return listenBySelector(container, 'mouseover', selector, (mouseOverEv, matchedChild) => {\n if (matchedChild !== currentMatchedChild) {\n currentMatchedChild = matchedChild\n onMouseEnter(mouseOverEv, matchedChild)\n\n let realOnMouseLeave = (mouseLeaveEv) => {\n currentMatchedChild = null\n onMouseLeave(mouseLeaveEv, matchedChild)\n matchedChild.removeEventListener('mouseleave', realOnMouseLeave)\n }\n\n // listen to the next mouseleave, and then unattach\n matchedChild.addEventListener('mouseleave', realOnMouseLeave)\n }\n })\n}\n\n// Animation\n// ----------------------------------------------------------------------------------------------------------------\n\nconst transitionEventNames = [\n 'webkitTransitionEnd',\n 'otransitionend',\n 'oTransitionEnd',\n 'msTransitionEnd',\n 'transitionend',\n]\n\n// triggered only when the next single subsequent transition finishes\nexport function whenTransitionDone(el: HTMLElement, callback: (ev: Event) => void) {\n let realCallback = (ev) => {\n callback(ev)\n transitionEventNames.forEach((eventName) => {\n el.removeEventListener(eventName, realCallback)\n })\n }\n\n transitionEventNames.forEach((eventName) => {\n el.addEventListener(eventName, realCallback) // cross-browser way to determine when the transition finishes\n })\n}\n\n// ARIA workarounds\n// ----------------------------------------------------------------------------------------------------------------\n\nexport function createAriaClickAttrs(handler: ((ev: UIEvent) => void)) {\n return {\n onClick: handler,\n ...createAriaKeyboardAttrs(handler),\n }\n}\n\nexport function createAriaKeyboardAttrs(handler: ((ev: UIEvent) => void)) {\n return {\n tabIndex: 0,\n onKeyDown(ev: KeyboardEvent) {\n if (ev.key === 'Enter' || ev.key === ' ') {\n handler(ev)\n ev.preventDefault() // if space, don't scroll down page\n }\n },\n }\n}\n","import { preventDefault } from './dom-event'\n\nexport type GenericHash = { [key: string]: any } // already did this somewhere\n\nlet guidNumber = 0\n\nexport function guid() {\n guidNumber += 1\n return String(guidNumber)\n}\n\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n// Make the mouse cursor express that an event is not allowed in the current area\nexport function disableCursor() {\n document.body.classList.add('fc-not-allowed')\n}\n\n// Returns the mouse cursor to its original look\nexport function enableCursor() {\n document.body.classList.remove('fc-not-allowed')\n}\n\n/* Selection\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function preventSelection(el: HTMLElement) {\n el.classList.add('fc-unselectable')\n el.addEventListener('selectstart', preventDefault)\n}\n\nexport function allowSelection(el: HTMLElement) {\n el.classList.remove('fc-unselectable')\n el.removeEventListener('selectstart', preventDefault)\n}\n\n/* Context Menu\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function preventContextMenu(el: HTMLElement) {\n el.addEventListener('contextmenu', preventDefault)\n}\n\nexport function allowContextMenu(el: HTMLElement) {\n el.removeEventListener('contextmenu', preventDefault)\n}\n\n/* Object Ordering by Field\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport interface OrderSpec<Subject> {\n field?: string\n order?: number\n func?: FieldSpecInputFunc<Subject>\n}\n\nexport type FieldSpecInput<Subject> = string | string[] | FieldSpecInputFunc<Subject> | FieldSpecInputFunc<Subject>[]\nexport type FieldSpecInputFunc<Subject> = (a: Subject, b: Subject) => number\n\nexport function parseFieldSpecs<Subject>(input: FieldSpecInput<Subject>): OrderSpec<Subject>[] {\n let specs: OrderSpec<Subject>[] = []\n let tokens = []\n let i\n let token\n\n if (typeof input === 'string') {\n tokens = input.split(/\\s*,\\s*/)\n } else if (typeof input === 'function') {\n tokens = [input]\n } else if (Array.isArray(input)) {\n tokens = input\n }\n\n for (i = 0; i < tokens.length; i += 1) {\n token = tokens[i]\n\n if (typeof token === 'string') {\n specs.push(\n token.charAt(0) === '-' ?\n { field: token.substring(1), order: -1 } :\n { field: token, order: 1 },\n )\n } else if (typeof token === 'function') {\n specs.push({ func: token })\n }\n }\n\n return specs\n}\n\nexport function compareByFieldSpecs<Subject>(obj0: Subject, obj1: Subject, fieldSpecs: OrderSpec<Subject>[]): number {\n let i\n let cmp\n\n for (i = 0; i < fieldSpecs.length; i += 1) {\n cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i])\n if (cmp) {\n return cmp\n }\n }\n\n return 0\n}\n\nexport function compareByFieldSpec<Subject>(obj0: Subject, obj1: Subject, fieldSpec: OrderSpec<Subject>): number {\n if (fieldSpec.func) {\n return fieldSpec.func(obj0, obj1)\n }\n\n return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])\n * (fieldSpec.order || 1)\n}\n\nexport function flexibleCompare(a, b) {\n if (!a && !b) {\n return 0\n }\n if (b == null) {\n return -1\n }\n if (a == null) {\n return 1\n }\n if (typeof a === 'string' || typeof b === 'string') {\n return String(a).localeCompare(String(b))\n }\n return a - b\n}\n\n/* String Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function padStart(val, len) { // doesn't work with total length more than 3\n let s = String(val)\n return '000'.substr(0, len - s.length) + s\n}\n\nexport function formatWithOrdinals<Args extends any[]>(\n formatter: string | ((...formatterArgs: Args) => string),\n args: Args,\n fallbackText: string,\n) {\n if (typeof formatter === 'function') {\n return formatter(...args)\n }\n if (typeof formatter === 'string') { // non-blank string\n return args.reduce((str, arg, index) => (\n str.replace('$' + index, arg || '')\n ), formatter)\n }\n return fallbackText\n}\n\n/* Number Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function compareNumbers(a, b) { // for .sort()\n return a - b\n}\n\nexport function isInt(n) {\n return n % 1 === 0\n}\n\n/* Weird Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function firstDefined(...args) {\n for (let i = 0; i < args.length; i += 1) {\n if (args[i] !== undefined) {\n return args[i]\n }\n }\n return undefined\n}\n\n/* FC-specific DOM dimension stuff\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function computeSmallestCellWidth(cellEl: HTMLElement) {\n let allWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-frame')\n let contentWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-cushion')\n\n if (!allWidthEl) {\n throw new Error('needs fc-scrollgrid-shrink-frame className') // TODO: use const\n }\n if (!contentWidthEl) {\n throw new Error('needs fc-scrollgrid-shrink-cushion className')\n }\n\n return cellEl.getBoundingClientRect().width - allWidthEl.getBoundingClientRect().width + // the cell padding+border\n contentWidthEl.getBoundingClientRect().width\n}\n","import { Duration } from './duration'\n\nexport type DateMarker = Date\n\nexport const DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']\n\n// Adding\n\nexport function addWeeks(m: DateMarker, n: number) {\n let a = dateToUtcArray(m)\n a[2] += n * 7\n return arrayToUtcDate(a)\n}\n\nexport function addDays(m: DateMarker, n: number) {\n let a = dateToUtcArray(m)\n a[2] += n\n return arrayToUtcDate(a)\n}\n\nexport function addMs(m: DateMarker, n: number) {\n let a = dateToUtcArray(m)\n a[6] += n\n return arrayToUtcDate(a)\n}\n\n// Diffing (all return floats)\n// TODO: why not use ranges?\n\nexport function diffWeeks(m0, m1) {\n return diffDays(m0, m1) / 7\n}\n\nexport function diffDays(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24)\n}\n\nexport function diffHours(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60)\n}\n\nexport function diffMinutes(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60)\n}\n\nexport function diffSeconds(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / 1000\n}\n\nexport function diffDayAndTime(m0: DateMarker, m1: DateMarker): Duration {\n let m0day = startOfDay(m0)\n let m1day = startOfDay(m1)\n\n return {\n years: 0,\n months: 0,\n days: Math.round(diffDays(m0day, m1day)),\n milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf()),\n }\n}\n\n// Diffing Whole Units\n\nexport function diffWholeWeeks(m0: DateMarker, m1: DateMarker): number {\n let d = diffWholeDays(m0, m1)\n\n if (d !== null && d % 7 === 0) {\n return d / 7\n }\n\n return null\n}\n\nexport function diffWholeDays(m0: DateMarker, m1: DateMarker): number {\n if (timeAsMs(m0) === timeAsMs(m1)) {\n return Math.round(diffDays(m0, m1))\n }\n return null\n}\n\n// Start-Of\n\nexport function startOfDay(m: DateMarker): DateMarker {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n ])\n}\n\nexport function startOfHour(m: DateMarker) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n ])\n}\n\nexport function startOfMinute(m: DateMarker) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n m.getUTCMinutes(),\n ])\n}\n\nexport function startOfSecond(m: DateMarker) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n m.getUTCMinutes(),\n m.getUTCSeconds(),\n ])\n}\n\n// Week Computation\n\nexport function weekOfYear(marker, dow, doy) {\n let y = marker.getUTCFullYear()\n let w = weekOfGivenYear(marker, y, dow, doy)\n\n if (w < 1) {\n return weekOfGivenYear(marker, y - 1, dow, doy)\n }\n\n let nextW = weekOfGivenYear(marker, y + 1, dow, doy)\n if (nextW >= 1) {\n return Math.min(w, nextW)\n }\n\n return w\n}\n\nfunction weekOfGivenYear(marker, year, dow, doy) {\n let firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)])\n let dayStart = startOfDay(marker)\n let days = Math.round(diffDays(firstWeekStart, dayStart))\n\n return Math.floor(days / 7) + 1 // zero-indexed\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n let fwd = 7 + dow - doy\n\n // first-week day local weekday -- which local weekday is fwd\n let fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7\n\n return -fwdlw + fwd - 1\n}\n\n// Array Conversion\n\nexport function dateToLocalArray(date) {\n return [\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n ]\n}\n\nexport function arrayToLocalDate(a) {\n return new Date(\n a[0],\n a[1] || 0,\n a[2] == null ? 1 : a[2], // day of month\n a[3] || 0,\n a[4] || 0,\n a[5] || 0,\n )\n}\n\nexport function dateToUtcArray(date) {\n return [\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds(),\n date.getUTCMilliseconds(),\n ]\n}\n\nexport function arrayToUtcDate(a) {\n // according to web standards (and Safari), a month index is required.\n // massage if only given a year.\n if (a.length === 1) {\n a = a.concat([0])\n }\n\n return new Date(Date.UTC(...(a as [any, any])))\n}\n\n// Other Utils\n\nexport function isValidDate(m: DateMarker) {\n return !isNaN(m.valueOf())\n}\n\nexport function timeAsMs(m: DateMarker) {\n return m.getUTCHours() * 1000 * 60 * 60 +\n m.getUTCMinutes() * 1000 * 60 +\n m.getUTCSeconds() * 1000 +\n m.getUTCMilliseconds()\n}\n","import { DateRange } from '../datelib/date-range'\nimport { guid } from '../util/misc'\n\nexport interface EventInstance {\n instanceId: string\n defId: string\n range: DateRange\n forcedStartTzo: number | null\n forcedEndTzo: number | null\n}\n\nexport type EventInstanceHash = { [instanceId: string]: EventInstance }\n\nexport function createEventInstance(\n defId: string,\n range: DateRange,\n forcedStartTzo?: number,\n forcedEndTzo?: number,\n): EventInstance {\n return {\n instanceId: guid(),\n defId,\n range,\n forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,\n forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo,\n }\n}\n","const { hasOwnProperty } = Object.prototype\n\n// Merges an array of objects into a single object.\n// The second argument allows for an array of property names who's object values will be merged together.\nexport function mergeProps(propObjs, complexPropsMap?): any {\n let dest = {}\n\n if (complexPropsMap) {\n for (let name in complexPropsMap) {\n let complexObjs = []\n\n // collect the trailing object values, stopping when a non-object is discovered\n for (let i = propObjs.length - 1; i >= 0; i -= 1) {\n let val = propObjs[i][name]\n\n if (typeof val === 'object' && val) { // non-null object\n complexObjs.unshift(val)\n } else if (val !== undefined) {\n dest[name] = val // if there were no objects, this value will be used\n break\n }\n }\n\n // if the trailing values were objects, use the merged value\n if (complexObjs.length) {\n dest[name] = mergeProps(complexObjs)\n }\n }\n }\n\n // copy values into the destination, going from last to first\n for (let i = propObjs.length - 1; i >= 0; i -= 1) {\n let props = propObjs[i]\n\n for (let name in props) {\n if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\n dest[name] = props[name]\n }\n }\n }\n\n return dest\n}\n\nexport function filterHash(hash, func) {\n let filtered = {}\n\n for (let key in hash) {\n if (func(hash[key], key)) {\n filtered[key] = hash[key]\n }\n }\n\n return filtered\n}\n\nexport function mapHash<InputItem, OutputItem>(\n hash: { [key: string]: InputItem },\n func: (input: InputItem, key: string) => OutputItem,\n): { [key: string]: OutputItem } {\n let newHash = {}\n\n for (let key in hash) {\n newHash[key] = func(hash[key], key)\n }\n\n return newHash\n}\n\nexport function arrayToHash(a): { [key: string]: true } { // TODO: rename to strinArrayToHash or something\n let hash = {}\n\n for (let item of a) {\n hash[item] = true\n }\n\n return hash\n}\n\nexport function buildHashFromArray<Item, ItemRes>(a: Item[], func: (item: Item, index: number) => [ string, ItemRes ]) {\n let hash: { [key: string]: ItemRes } = {}\n\n for (let i = 0; i < a.length; i += 1) {\n let tuple = func(a[i], i)\n\n hash[tuple[0]] = tuple[1]\n }\n\n return hash\n}\n\nexport function hashValuesToArray(obj) { // can't use Object.values yet because of no IE support\n let a = []\n\n for (let key in obj) {\n a.push(obj[key])\n }\n\n return a\n}\n\nexport function isPropsEqual(obj0, obj1) { // TODO: merge with compareObjs\n if (obj0 === obj1) {\n return true\n }\n\n for (let key in obj0) {\n if (hasOwnProperty.call(obj0, key)) {\n if (!(key in obj1)) {\n return false\n }\n }\n }\n\n for (let key in obj1) {\n if (hasOwnProperty.call(obj1, key)) {\n if (obj0[key] !== obj1[key]) {\n return false\n }\n }\n }\n\n return true\n}\n\nexport function getUnequalProps(obj0, obj1) {\n let keys: string[] = []\n\n for (let key in obj0) {\n if (hasOwnProperty.call(obj0, key)) {\n if (!(key in obj1)) {\n keys.push(key)\n }\n }\n }\n\n for (let key in obj1) {\n if (hasOwnProperty.call(obj1, key)) {\n if (obj0[key] !== obj1[key]) {\n keys.push(key)\n }\n }\n }\n\n return keys\n}\n\nexport type EqualityFunc<T> = (a: T, b: T) => boolean\nexport type EqualityThing<T> = EqualityFunc<T> | true\n\nexport type EqualityFuncs<ObjType> = { // not really just a \"func\" anymore\n [K in keyof ObjType]?: EqualityThing<ObjType[K]>\n}\n\nexport function compareObjs(oldProps, newProps, equalityFuncs: EqualityFuncs<any> = {}) {\n if (oldProps === newProps) {\n return true\n }\n\n for (let key in newProps) {\n if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key])) {\n // equal\n } else {\n return false\n }\n }\n\n // check for props that were omitted in the new\n for (let key in oldProps) {\n if (!(key in newProps)) {\n return false\n }\n }\n\n return true\n}\n\n/*\nassumed \"true\" equality for handler names like \"onReceiveSomething\"\n*/\nfunction isObjValsEqual<T>(val0: T, val1: T, comparator: EqualityThing<T>) {\n if (val0 === val1 || comparator === true) {\n return true\n }\n if (comparator) {\n return comparator(val0, val1)\n }\n return false\n}\n\nexport function collectFromHash<Item>(\n hash: { [key: string]: Item },\n startIndex = 0,\n endIndex?: number,\n step = 1,\n) {\n let res: Item[] = []\n\n if (endIndex == null) {\n endIndex = Object.keys(hash).length\n }\n\n for (let i = startIndex; i < endIndex; i += step) {\n let val = hash[i]\n\n if (val !== undefined) { // will disregard undefined for sparse arrays\n res.push(val)\n }\n }\n\n return res\n}\n","import { EventDef } from './event-def'\nimport { EventInstance, createEventInstance } from './event-instance'\nimport { DateRange } from '../datelib/date-range'\nimport { DateEnv } from '../datelib/env'\nimport { Duration } from '../datelib/duration'\nimport { DateMarker, startOfDay } from '../datelib/marker'\nimport { EventStore } from './event-store'\nimport { CalendarContext } from '../CalendarContext'\nimport { filterHash } from '../util/object'\nimport { EventRefined } from './event-parse'\n\n/*\nThe plugin system for defining how a recurring event is expanded into individual instances.\n*/\n\nexport interface ParsedRecurring<RecurringData> {\n typeData: RecurringData\n allDayGuess: boolean | null\n duration: Duration | null // signals hasEnd\n}\n\nexport interface RecurringType<RecurringData> {\n parse: (refined: EventRefined, dateEnv: DateEnv) => ParsedRecurring<RecurringData> | null // TODO: rename to post-process or something\n expand: (typeData: any, framingRange: DateRange, dateEnv: DateEnv) => DateMarker[]\n}\n\nexport function parseRecurring(\n refined: EventRefined,\n defaultAllDay: boolean | null,\n dateEnv: DateEnv,\n recurringTypes: RecurringType<any>[],\n) {\n for (let i = 0; i < recurringTypes.length; i += 1) {\n let parsed = recurringTypes[i].parse(refined, dateEnv)\n\n if (parsed) {\n let { allDay } = refined\n if (allDay == null) {\n allDay = defaultAllDay\n if (allDay == null) {\n allDay = parsed.allDayGuess\n if (allDay == null) {\n allDay = false\n }\n }\n }\n\n return {\n allDay,\n duration: parsed.duration,\n typeData: parsed.typeData,\n typeId: i,\n }\n }\n }\n\n return null\n}\n\nexport function expandRecurring(eventStore: EventStore, framingRange: DateRange, context: CalendarContext): EventStore {\n let { dateEnv, pluginHooks, options } = context\n let { defs, instances } = eventStore\n\n // remove existing recurring instances\n // TODO: bad. always expand events as a second step\n instances = filterHash(instances, (instance: EventInstance) => !defs[instance.defId].recurringDef)\n\n for (let defId in defs) {\n let def = defs[defId]\n\n if (def.recurringDef) {\n let { duration } = def.recurringDef\n\n if (!duration) {\n duration = def.allDay ?\n options.defaultAllDayEventDuration :\n options.defaultTimedEventDuration\n }\n\n let starts = expandRecurringRanges(def, duration, framingRange, dateEnv, pluginHooks.recurringTypes)\n\n for (let start of starts) {\n let instance = createEventInstance(defId, {\n start,\n end: dateEnv.add(start, duration),\n })\n instances[instance.instanceId] = instance\n }\n }\n }\n\n return { defs, instances }\n}\n\n/*\nEvent MUST have a recurringDef\n*/\nfunction expandRecurringRanges(\n eventDef: EventDef,\n duration: Duration,\n framingRange: DateRange,\n dateEnv: DateEnv,\n recurringTypes: RecurringType<any>[],\n): DateMarker[] {\n let typeDef = recurringTypes[eventDef.recurringDef.typeId]\n let markers = typeDef.expand(\n eventDef.recurringDef.typeData,\n {\n start: dateEnv.subtract(framingRange.start, duration), // for when event starts before framing range and goes into\n end: framingRange.end,\n },\n dateEnv,\n )\n\n // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to\n if (eventDef.allDay) {\n markers = markers.map(startOfDay)\n }\n\n return markers\n}\n","import { isInt } from '../util/misc'\n\nexport type DurationInput = DurationObjectInput | string | number\n\nexport interface DurationObjectInput {\n years?: number\n year?: number\n months?: number\n month?: number\n weeks?: number\n week?: number\n days?: number\n day?: number\n hours?: number\n hour?: number\n minutes?: number\n minute?: number\n seconds?: number\n second?: number\n milliseconds?: number\n millisecond?: number\n ms?: number\n}\n\nexport interface Duration {\n years: number\n months: number\n days: number\n milliseconds: number\n specifiedWeeks?: boolean\n}\n\nconst INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds']\nconst PARSE_RE = /^(-?)(?:(\\d+)\\.)?(\\d+):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?/\n\n// Parsing and Creation\n\nexport function createDuration(input: DurationInput, unit?: string): Duration | null {\n if (typeof input === 'string') {\n return parseString(input)\n }\n\n if (typeof input === 'object' && input) { // non-null object\n return parseObject(input)\n }\n\n if (typeof input === 'number') {\n return parseObject({ [unit || 'milliseconds']: input })\n }\n return null\n}\n\nfunction parseString(s: string): Duration {\n let m = PARSE_RE.exec(s)\n if (m) {\n let sign = m[1] ? -1 : 1\n return {\n years: 0,\n months: 0,\n days: sign * (m[2] ? parseInt(m[2], 10) : 0),\n milliseconds: sign * (\n (m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours\n (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes\n (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds\n (m[6] ? parseInt(m[6], 10) : 0) // ms\n ),\n }\n }\n return null\n}\n\nfunction parseObject(obj: DurationObjectInput): Duration {\n let duration: Duration = {\n years: obj.years || obj.year || 0,\n months: obj.months || obj.month || 0,\n days: obj.days || obj.day || 0,\n milliseconds:\n (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours\n (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes\n (obj.seconds || obj.second || 0) * 1000 + // seconds\n (obj.milliseconds || obj.millisecond || obj.ms || 0), // ms\n }\n\n let weeks = obj.weeks || obj.week\n if (weeks) {\n duration.days += weeks * 7\n duration.specifiedWeeks = true\n }\n\n return duration\n}\n\n// Equality\n\nexport function durationsEqual(d0: Duration, d1: Duration): boolean {\n return d0.years === d1.years &&\n d0.months === d1.months &&\n d0.days === d1.days &&\n d0.milliseconds === d1.milliseconds\n}\n\nexport function asCleanDays(dur: Duration) {\n if (!dur.years && !dur.months && !dur.milliseconds) {\n return dur.days\n }\n return 0\n}\n\n// Simple Math\n\nexport function addDurations(d0: Duration, d1: Duration) {\n return {\n years: d0.years + d1.years,\n months: d0.months + d1.months,\n days: d0.days + d1.days,\n milliseconds: d0.milliseconds + d1.milliseconds,\n }\n}\n\nexport function subtractDurations(d1: Duration, d0: Duration): Duration {\n return {\n years: d1.years - d0.years,\n months: d1.months - d0.months,\n days: d1.days - d0.days,\n milliseconds: d1.milliseconds - d0.milliseconds,\n }\n}\n\nexport function multiplyDuration(d: Duration, n: number) {\n return {\n years: d.years * n,\n months: d.months * n,\n days: d.days * n,\n milliseconds: d.milliseconds * n,\n }\n}\n\n// Conversions\n// \"Rough\" because they are based on average-case Gregorian months/years\n\nexport function asRoughYears(dur: Duration) {\n return asRoughDays(dur) / 365\n}\n\nexport function asRoughMonths(dur: Duration) {\n return asRoughDays(dur) / 30\n}\n\nexport function asRoughDays(dur: Duration) {\n return asRoughMs(dur) / 864e5\n}\n\nexport function asRoughHours(dur: Duration) {\n return asRoughMs(dur) / (1000 * 60 * 60)\n}\n\nexport function asRoughMinutes(dur: Duration) {\n return asRoughMs(dur) / (1000 * 60)\n}\n\nexport function asRoughSeconds(dur: Duration) {\n return asRoughMs(dur) / 1000\n}\n\nexport function asRoughMs(dur: Duration) {\n return dur.years * (365 * 864e5) +\n dur.months * (30 * 864e5) +\n dur.days * 864e5 +\n dur.milliseconds\n}\n\n// Advanced Math\n\nexport function wholeDivideDurations(numerator: Duration, denominator: Duration): number {\n let res = null\n\n for (let i = 0; i < INTERNAL_UNITS.length; i += 1) {\n let unit = INTERNAL_UNITS[i]\n\n if (denominator[unit]) {\n let localRes = numerator[unit] / denominator[unit]\n\n if (!isInt(localRes) || (res !== null && res !== localRes)) {\n return null\n }\n\n res = localRes\n } else if (numerator[unit]) {\n // needs to divide by something but can't!\n return null\n }\n }\n\n return res\n}\n\nexport function greatestDurationDenominator(dur: Duration) {\n let ms = dur.milliseconds\n if (ms) {\n if (ms % 1000 !== 0) {\n return { unit: 'millisecond', value: ms }\n }\n if (ms % (1000 * 60) !== 0) {\n return { unit: 'second', value: ms / 1000 }\n }\n if (ms % (1000 * 60 * 60) !== 0) {\n return { unit: 'minute', value: ms / (1000 * 60) }\n }\n if (ms) {\n return { unit: 'hour', value: ms / (1000 * 60 * 60) }\n }\n }\n if (dur.days) {\n if (dur.specifiedWeeks && dur.days % 7 === 0) {\n return { unit: 'week', value: dur.days / 7 }\n }\n return { unit: 'day', value: dur.days }\n }\n if (dur.months) {\n return { unit: 'month', value: dur.months }\n }\n if (dur.years) {\n return { unit: 'year', value: dur.years }\n }\n return { unit: 'millisecond', value: 0 }\n}\n","import { DateMarker } from './marker'\nimport { padStart } from '../util/misc'\n\n// timeZoneOffset is in minutes\nexport function buildIsoString(marker: DateMarker, timeZoneOffset?: number, stripZeroTime: boolean = false) {\n let s = marker.toISOString()\n\n s = s.replace('.000', '')\n\n if (stripZeroTime) {\n s = s.replace('T00:00:00Z', '')\n }\n\n if (s.length > 10) { // time part wasn't stripped, can add timezone info\n if (timeZoneOffset == null) {\n s = s.replace('Z', '')\n } else if (timeZoneOffset !== 0) {\n s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true))\n }\n // otherwise, its UTC-0 and we want to keep the Z\n }\n\n return s\n}\n\n// formats the date, but with no time part\n// TODO: somehow merge with buildIsoString and stripZeroTime\n// TODO: rename. omit \"string\"\nexport function formatDayString(marker: DateMarker) {\n return marker.toISOString().replace(/T.*$/, '')\n}\n\n// TODO: use Date::toISOString and use everything after the T?\nexport function formatIsoTimeString(marker: DateMarker) {\n return padStart(marker.getUTCHours(), 2) + ':' +\n padStart(marker.getUTCMinutes(), 2) + ':' +\n padStart(marker.getUTCSeconds(), 2)\n}\n\nexport function formatTimeZoneOffset(minutes: number, doIso = false) {\n let sign = minutes < 0 ? '-' : '+'\n let abs = Math.abs(minutes)\n let hours = Math.floor(abs / 60)\n let mins = Math.round(abs % 60)\n\n if (doIso) {\n return `${sign + padStart(hours, 2)}:${padStart(mins, 2)}`\n }\n return `GMT${sign}${hours}${mins ? `:${padStart(mins, 2)}` : ''}`\n}\n","// TODO: new util arrayify?\n// Array.prototype.slice.call(\n\nexport function removeMatching(array, testFunc) {\n let removeCnt = 0\n let i = 0\n\n while (i < array.length) {\n if (testFunc(array[i])) { // truthy value means *remove*\n array.splice(i, 1)\n removeCnt += 1\n } else {\n i += 1\n }\n }\n\n return removeCnt\n}\n\nexport function removeExact(array, exactVal) {\n let removeCnt = 0\n let i = 0\n\n while (i < array.length) {\n if (array[i] === exactVal) {\n array.splice(i, 1)\n removeCnt += 1\n } else {\n i += 1\n }\n }\n\n return removeCnt\n}\n\nexport function isArraysEqual(a0, a1, equalityFunc?: (v0, v1) => boolean) { // TODO: better typing\n if (a0 === a1) {\n return true\n }\n\n let len = a0.length\n let i\n\n if (len !== a1.length) { // not array? or not same length?\n return false\n }\n\n for (i = 0; i < len; i += 1) {\n if (!(equalityFunc ? equalityFunc(a0[i], a1[i]) : a0[i] === a1[i])) {\n return false\n }\n }\n\n return true\n}\n","import { isArraysEqual } from './array'\nimport { isPropsEqual } from './object'\nimport { Dictionary } from '../options'\n\nexport function memoize<Args extends any[], Res>(\n workerFunc: (...args: Args) => Res,\n resEquality?: (res0: Res, res1: Res) => boolean,\n teardownFunc?: (res: Res) => void,\n): (...args: Args) => Res {\n let currentArgs: Args | undefined\n let currentRes: Res | undefined\n\n return function (...newArgs: Args) { // eslint-disable-line func-names\n if (!currentArgs) {\n currentRes = workerFunc.apply(this, newArgs)\n } else if (!isArraysEqual(currentArgs, newArgs)) {\n if (teardownFunc) {\n teardownFunc(currentRes)\n }\n\n let res = workerFunc.apply(this, newArgs)\n\n if (!resEquality || !resEquality(res, currentRes)) {\n currentRes = res\n }\n }\n\n currentArgs = newArgs\n\n return currentRes\n }\n}\n\nexport function memoizeObjArg<Arg extends Dictionary, Res>(\n workerFunc: (arg: Arg) => Res,\n resEquality?: (res0: Res, res1: Res) => boolean,\n teardownFunc?: (res: Res) => void,\n): (arg: Arg) => Res {\n let currentArg: Arg | undefined\n let currentRes: Res | undefined\n\n return (newArg: Arg) => {\n if (!currentArg) {\n currentRes = workerFunc.call(this, newArg)\n } else if (!isPropsEqual(currentArg, newArg)) {\n if (teardownFunc) {\n teardownFunc(currentRes)\n }\n\n let res = workerFunc.call(this, newArg)\n\n if (!resEquality || !resEquality(res, currentRes)) {\n currentRes = res\n }\n }\n\n currentArg = newArg\n\n return currentRes\n }\n}\n\nexport function memoizeArraylike<Args extends any[], Res>( // used at all?\n workerFunc: (...args: Args) => Res,\n resEquality?: (res0: Res, res1: Res) => boolean,\n teardownFunc?: (res: Res) => void,\n): (argSets: Args[]) => Res[] {\n let currentArgSets: Args[] = []\n let currentResults: Res[] = []\n\n return (newArgSets: Args[]) => {\n let currentLen = currentArgSets.length\n let newLen = newArgSets.length\n let i = 0\n\n for (; i < currentLen; i += 1) {\n if (!newArgSets[i]) { // one of the old sets no longer exists\n if (teardownFunc) {\n teardownFunc(currentResults[i])\n }\n } else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {\n if (teardownFunc) {\n teardownFunc(currentResults[i])\n }\n\n let res = workerFunc.apply(this, newArgSets[i])\n\n if (!resEquality || !resEquality(res, currentResults[i])) {\n currentResults[i] = res\n }\n }\n }\n\n for (; i < newLen; i += 1) {\n currentResults[i] = workerFunc.apply(this, newArgSets[i])\n }\n\n currentArgSets = newArgSets\n currentResults.splice(newLen) // remove excess\n\n return currentResults\n }\n}\n\nexport function memoizeHashlike<Args extends any[], Res>( // used?\n workerFunc: (...args: Args) => Res,\n resEquality?: (res0: Res, res1: Res) => boolean,\n teardownFunc?: (res: Res) => void, // TODO: change arg order\n): (argHash: { [key: string]: Args }) => { [key: string]: Res } {\n let currentArgHash: { [key: string]: Args } = {}\n let currentResHash: { [key: string]: Res } = {}\n\n return (newArgHash: { [key: string]: Args }) => {\n let newResHash: { [key: string]: Res } = {}\n\n for (let key in newArgHash) {\n if (!currentResHash[key]) {\n newResHash[key] = workerFunc.apply(this, newArgHash[key])\n } else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {\n if (teardownFunc) {\n teardownFunc(currentResHash[key])\n }\n\n let res = workerFunc.apply(this, newArgHash[key])\n\n newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))\n ? currentResHash[key]\n : res\n } else {\n newResHash[key] = currentResHash[key]\n }\n }\n\n currentArgHash = newArgHash\n currentResHash = newResHash\n\n return newResHash\n }\n}\n","import { DateMarker, timeAsMs } from './marker'\nimport { CalendarSystem } from './calendar-system'\nimport { Locale } from './locale'\nimport { DateFormatter, DateFormattingContext } from './DateFormatter'\nimport { ZonedMarker } from './zoned-marker'\nimport { formatTimeZoneOffset } from './formatting-utils'\nimport { memoize } from '../util/memoize'\n\nconst EXTENDED_SETTINGS_AND_SEVERITIES = {\n week: 3,\n separator: 0, // 0 = not applicable\n omitZeroMinute: 0,\n meridiem: 0, // like am/pm\n omitCommas: 0,\n}\n\nconst STANDARD_DATE_PROP_SEVERITIES = {\n timeZoneName: 7,\n era: 6,\n year: 5,\n month: 4,\n day: 2,\n weekday: 2,\n hour: 1,\n minute: 1,\n second: 1,\n}\n\nconst MERIDIEM_RE = /\\s*([ap])\\.?m\\.?/i // eats up leading spaces too\nconst COMMA_RE = /,/g // we need re for globalness\nconst MULTI_SPACE_RE = /\\s+/g\nconst LTR_RE = /\\u200e/g // control character\nconst UTC_RE = /UTC|GMT/\n\nexport interface NativeFormatterOptions extends Intl.DateTimeFormatOptions {\n week?: 'long' | 'short' | 'narrow' | 'numeric'\n meridiem?: 'lowercase' | 'short' | 'narrow' | boolean\n omitZeroMinute?: boolean\n omitCommas?: boolean\n separator?: string\n}\n\nexport class NativeFormatter implements DateFormatter {\n standardDateProps: any\n extendedSettings: any\n severity: number\n private buildFormattingFunc: typeof buildFormattingFunc // caching for efficiency with same date env\n\n constructor(formatSettings: NativeFormatterOptions) {\n let standardDateProps: any = {}\n let extendedSettings: any = {}\n let severity = 0\n\n for (let name in formatSettings) {\n if (name in EXTENDED_SETTINGS_AND_SEVERITIES) {\n extendedSettings[name] = formatSettings[name]\n severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name], severity)\n } else {\n standardDateProps[name] = formatSettings[name]\n\n if (name in STANDARD_DATE_PROP_SEVERITIES) { // TODO: what about hour12? no severity\n severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name], severity)\n }\n }\n }\n\n this.standardDateProps = standardDateProps\n this.extendedSettings = extendedSettings\n this.severity = severity\n\n this.buildFormattingFunc = memoize(buildFormattingFunc)\n }\n\n format(date: ZonedMarker, context: DateFormattingContext) {\n return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date)\n }\n\n formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string) {\n let { standardDateProps, extendedSettings } = this\n\n let diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem)\n if (!diffSeverity) {\n return this.format(start, context)\n }\n\n let biggestUnitForPartial = diffSeverity\n if (\n biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time\n (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&\n (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&\n (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')\n ) {\n biggestUnitForPartial = 1 // make it look like the dates are only different in terms of time\n }\n\n let full0 = this.format(start, context)\n let full1 = this.format(end, context)\n\n if (full0 === full1) {\n return full0\n }\n\n let partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial)\n let partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context)\n let partial0 = partialFormattingFunc(start)\n let partial1 = partialFormattingFunc(end)\n\n let insertion = findCommonInsertion(full0, partial0, full1, partial1)\n let separator = extendedSettings.separator || betterDefaultSeparator || context.defaultSeparator || ''\n\n if (insertion) {\n return insertion.before + partial0 + separator + partial1 + insertion.after\n }\n\n return full0 + separator + full1\n }\n\n getLargestUnit() {\n switch (this.severity) {\n case 7:\n case 6:\n case 5:\n return 'year'\n case 4:\n return 'month'\n case 3:\n return 'week'\n case 2:\n return 'day'\n default:\n return 'time' // really?\n }\n }\n}\n\nfunction buildFormattingFunc(\n standardDateProps,\n extendedSettings,\n context: DateFormattingContext,\n): (date: ZonedMarker) => string {\n let standardDatePropCnt = Object.keys(standardDateProps).length\n\n if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {\n return (date: ZonedMarker) => (\n formatTimeZoneOffset(date.timeZoneOffset)\n )\n }\n\n if (standardDatePropCnt === 0 && extendedSettings.week) {\n return (date: ZonedMarker) => (\n formatWeekNumber(\n context.computeWeekNumber(date.marker),\n context.weekText,\n context.weekTextLong,\n context.locale,\n extendedSettings.week,\n )\n )\n }\n\n return buildNativeFormattingFunc(standardDateProps, extendedSettings, context)\n}\n\nfunction buildNativeFormattingFunc(\n standardDateProps,\n extendedSettings,\n context: DateFormattingContext,\n): (date: ZonedMarker) => string {\n standardDateProps = { ...standardDateProps } // copy\n extendedSettings = { ...extendedSettings } // copy\n\n sanitizeSettings(standardDateProps, extendedSettings)\n\n standardDateProps.timeZone = 'UTC' // we leverage the only guaranteed timeZone for our UTC markers\n\n let normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps)\n let zeroFormat // needed?\n\n if (extendedSettings.omitZeroMinute) {\n let zeroProps = { ...standardDateProps }\n delete zeroProps.minute // seconds and ms were already considered in sanitizeSettings\n zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps)\n }\n\n return (date: ZonedMarker) => {\n let { marker } = date\n let format\n\n if (zeroFormat && !marker.getUTCMinutes()) {\n format = zeroFormat\n } else {\n format = normalFormat\n }\n\n let s = format.format(marker)\n\n return postProcess(s, date, standardDateProps, extendedSettings, context)\n }\n}\n\nfunction sanitizeSettings(standardDateProps, extendedSettings) {\n // deal with a browser inconsistency where formatting the timezone\n // requires that the hour/minute be present.\n if (standardDateProps.timeZoneName) {\n if (!standardDateProps.hour) {\n standardDateProps.hour = '2-digit'\n }\n if (!standardDateProps.minute) {\n standardDateProps.minute = '2-digit'\n }\n }\n\n // only support short timezone names\n if (standardDateProps.timeZoneName === 'long') {\n standardDateProps.timeZoneName = 'short'\n }\n\n // if requesting to display seconds, MUST display minutes\n if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {\n delete extendedSettings.omitZeroMinute\n }\n}\n\nfunction postProcess(s: string, date: ZonedMarker, standardDateProps, extendedSettings, context: DateFormattingContext): string {\n s = s.replace(LTR_RE, '') // remove left-to-right control chars. do first. good for other regexes\n\n if (standardDateProps.timeZoneName === 'short') {\n s = injectTzoStr(\n s,\n (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?\n 'UTC' : // important to normalize for IE, which does \"GMT\"\n formatTimeZoneOffset(date.timeZoneOffset),\n )\n }\n\n if (extendedSettings.omitCommas) {\n s = s.replace(COMMA_RE, '').trim()\n }\n\n if (extendedSettings.omitZeroMinute) {\n s = s.replace(':00', '') // zeroFormat doesn't always achieve this\n }\n\n // ^ do anything that might create adjacent spaces before this point,\n // because MERIDIEM_RE likes to eat up loading spaces\n\n if (extendedSettings.meridiem === false) {\n s = s.replace(MERIDIEM_RE, '').trim()\n } else if (extendedSettings.meridiem === 'narrow') { // a/p\n s = s.replace(MERIDIEM_RE, (m0, m1) => m1.toLocaleLowerCase())\n } else if (extendedSettings.meridiem === 'short') { // am/pm\n s = s.replace(MERIDIEM_RE, (m0, m1) => `${m1.toLocaleLowerCase()}m`)\n } else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase\n s = s.replace(MERIDIEM_RE, (m0) => m0.toLocaleLowerCase())\n }\n\n s = s.replace(MULTI_SPACE_RE, ' ')\n s = s.trim()\n\n return s\n}\n\nfunction injectTzoStr(s: string, tzoStr: string): string {\n let replaced = false\n\n s = s.replace(UTC_RE, () => {\n replaced = true\n return tzoStr\n })\n\n // IE11 doesn't include UTC/GMT in the original string, so append to end\n if (!replaced) {\n s += ` ${tzoStr}`\n }\n\n return s\n}\n\nfunction formatWeekNumber(\n num: number,\n weekText: string,\n weekTextLong: string,\n locale: Locale,\n display?: 'numeric' | 'narrow' | 'short' | 'long',\n): string {\n let parts = []\n\n if (display === 'long') {\n parts.push(weekTextLong)\n } else if (display === 'short' || display === 'narrow') {\n parts.push(weekText)\n }\n\n if (display === 'long' || display === 'short') {\n parts.push(' ')\n }\n\n parts.push(locale.simpleNumberFormat.format(num))\n\n if (locale.options.direction === 'rtl') { // TODO: use control characters instead?\n parts.reverse()\n }\n\n return parts.join('')\n}\n\n// Range Formatting Utils\n\n// 0 = exactly the same\n// 1 = different by time\n// and bigger\nfunction computeMarkerDiffSeverity(d0: DateMarker, d1: DateMarker, ca: CalendarSystem) {\n if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {\n return 5\n }\n if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {\n return 4\n }\n if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {\n return 2\n }\n if (timeAsMs(d0) !== timeAsMs(d1)) {\n return 1\n }\n return 0\n}\n\nfunction computePartialFormattingOptions(options, biggestUnit) {\n let partialOptions = {}\n\n for (let name in options) {\n if (\n !(name in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)\n STANDARD_DATE_PROP_SEVERITIES[name] <= biggestUnit\n ) {\n partialOptions[name] = options[name]\n }\n }\n\n return partialOptions\n}\n\nfunction findCommonInsertion(full0, partial0, full1, partial1) {\n let i0 = 0\n while (i0 < full0.length) {\n let found0 = full0.indexOf(partial0, i0)\n if (found0 === -1) {\n break\n }\n\n let before0 = full0.substr(0, found0)\n i0 = found0 + partial0.length\n let after0 = full0.substr(i0)\n\n let i1 = 0\n while (i1 < full1.length) {\n let found1 = full1.indexOf(partial1, i1)\n if (found1 === -1) {\n break\n }\n\n let before1 = full1.substr(0, found1)\n i1 = found1 + partial1.length\n let after1 = full1.substr(i1)\n\n if (before0 === before1 && after0 === after1) {\n return {\n before: before0,\n after: after0,\n }\n }\n }\n }\n\n return null\n}\n","import { DateMarker } from './marker'\nimport { CalendarSystem } from './calendar-system'\n\nexport interface ZonedMarker {\n marker: DateMarker,\n timeZoneOffset: number\n}\n\nexport interface ExpandedZonedMarker extends ZonedMarker {\n array: number[],\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number,\n millisecond: number\n}\n\nexport function expandZonedMarker(dateInfo: ZonedMarker, calendarSystem: CalendarSystem): ExpandedZonedMarker {\n let a = calendarSystem.markerToArray(dateInfo.marker)\n\n return {\n marker: dateInfo.marker,\n timeZoneOffset: dateInfo.timeZoneOffset,\n array: a,\n year: a[0],\n month: a[1],\n day: a[2],\n hour: a[3],\n minute: a[4],\n second: a[5],\n millisecond: a[6],\n }\n}\n","import { DateMarker } from './marker'\nimport { CalendarSystem } from './calendar-system'\nimport { Locale } from './locale'\nimport { ZonedMarker, ExpandedZonedMarker, expandZonedMarker } from './zoned-marker'\n\nexport interface VerboseFormattingArg { // TODO: kill this\n date: ExpandedZonedMarker\n start: ExpandedZonedMarker\n end?: ExpandedZonedMarker\n timeZone: string\n localeCodes: string[],\n defaultSeparator: string\n}\n\nexport function createVerboseFormattingArg(\n start: ZonedMarker,\n end: ZonedMarker,\n context: DateFormattingContext,\n betterDefaultSeparator?: string,\n): VerboseFormattingArg {\n let startInfo = expandZonedMarker(start, context.calendarSystem)\n let endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null\n\n return {\n date: startInfo,\n start: startInfo,\n end: endInfo,\n timeZone: context.timeZone,\n localeCodes: context.locale.codes,\n defaultSeparator: betterDefaultSeparator || context.defaultSeparator,\n }\n}\n\nexport type CmdFormatterFunc = (cmd: string, arg: VerboseFormattingArg) => string\n\nexport interface DateFormattingContext {\n timeZone: string,\n locale: Locale,\n calendarSystem: CalendarSystem\n computeWeekNumber: (d: DateMarker) => number\n weekText: string\n weekTextLong: string\n cmdFormatter?: CmdFormatterFunc\n defaultSeparator: string\n}\n\nexport interface DateFormatter {\n format(date: ZonedMarker, context: DateFormattingContext): string\n formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string): string\n}\n","import { DateFormatter, DateFormattingContext, createVerboseFormattingArg } from './DateFormatter'\nimport { ZonedMarker } from './zoned-marker'\n\n/*\nTODO: fix the terminology of \"formatter\" vs \"formatting func\"\n*/\n\n/*\nAt the time of instantiation, this object does not know which cmd-formatting system it will use.\nIt receives this at the time of formatting, as a setting.\n*/\nexport class CmdFormatter implements DateFormatter {\n cmdStr: string\n\n constructor(cmdStr: string) {\n this.cmdStr = cmdStr\n }\n\n format(date: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string) {\n return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, betterDefaultSeparator))\n }\n\n formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string) {\n return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, betterDefaultSeparator))\n }\n}\n","import { DateFormatter, DateFormattingContext, createVerboseFormattingArg, VerboseFormattingArg } from './DateFormatter'\nimport { ZonedMarker } from './zoned-marker'\n\nexport type FuncFormatterFunc = (arg: VerboseFormattingArg) => string\n\nexport class FuncFormatter implements DateFormatter {\n func: FuncFormatterFunc\n\n constructor(func: FuncFormatterFunc) {\n this.func = func\n }\n\n format(date: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string) {\n return this.func(createVerboseFormattingArg(date, null, context, betterDefaultSeparator))\n }\n\n formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string) {\n return this.func(createVerboseFormattingArg(start, end, context, betterDefaultSeparator))\n }\n}\n","import { NativeFormatter, NativeFormatterOptions } from './formatting-native'\nimport { CmdFormatter } from './formatting-cmd'\nimport { FuncFormatter, FuncFormatterFunc } from './formatting-func'\nimport { DateFormatter } from './DateFormatter'\n\nexport type FormatterInput = NativeFormatterOptions | string | FuncFormatterFunc\n\nexport function createFormatter(input: FormatterInput): DateFormatter {\n if (typeof input === 'object' && input) { // non-null object\n return new NativeFormatter(input)\n }\n\n if (typeof input === 'string') {\n return new CmdFormatter(input)\n }\n\n if (typeof input === 'function') {\n return new FuncFormatter(input as FuncFormatterFunc)\n }\n\n return null\n}\n","import { createDuration } from './datelib/duration'\nimport { mergeProps, isPropsEqual } from './util/object'\nimport { createFormatter } from './datelib/formatting'\nimport { parseFieldSpecs } from './util/misc'\nimport { DateProfileGeneratorClass } from './DateProfileGenerator'\n\n// public\nimport {\n CssDimValue,\n DateInput,\n DateRangeInput,\n BusinessHoursInput,\n EventSourceInput,\n ViewApi,\n LocaleSingularArg, LocaleInput,\n EventInput, EventInputTransformer,\n OverlapFunc, ConstraintInput, AllowFunc,\n PluginDef,\n ViewComponentType,\n SpecificViewContentArg, SpecificViewMountArg,\n ClassNamesGenerator, CustomContentGenerator, DidMountHandler, WillUnmountHandler,\n NowIndicatorContentArg, NowIndicatorMountArg,\n WeekNumberContentArg, WeekNumberMountArg,\n SlotLaneContentArg, SlotLaneMountArg,\n SlotLabelContentArg, SlotLabelMountArg,\n AllDayContentArg, AllDayMountArg,\n DayHeaderContentArg, DayHeaderMountArg,\n DayCellContentArg, DayCellMountArg,\n ViewContentArg, ViewMountArg,\n EventClickArg,\n EventHoveringArg,\n DateSelectArg, DateUnselectArg,\n CalendarApi,\n VUIEvent,\n WeekNumberCalculation,\n FormatterInput,\n ToolbarInput, CustomButtonInput, ButtonIconsInput, ButtonTextCompoundInput,\n EventContentArg, EventMountArg,\n DatesSetArg,\n EventApi, EventAddArg, EventChangeArg, EventRemoveArg,\n MoreLinkContentArg,\n MoreLinkMountArg,\n MoreLinkAction,\n ButtonHintCompoundInput,\n} from './api-type-deps'\n\n// base options\n// ------------\n\nexport const BASE_OPTION_REFINERS = {\n navLinkDayClick: identity as Identity<string | ((this: CalendarApi, date: Date, jsEvent: VUIEvent) => void)>,\n navLinkWeekClick: identity as Identity<string | ((this: CalendarApi, weekStart: Date, jsEvent: VUIEvent) => void)>,\n duration: createDuration,\n bootstrapFontAwesome: identity as Identity<ButtonIconsInput | false>, // TODO: move to bootstrap plugin\n buttonIcons: identity as Identity<ButtonIconsInput | false>,\n customButtons: identity as Identity<{ [name: string]: CustomButtonInput }>,\n defaultAllDayEventDuration: createDuration,\n defaultTimedEventDuration: createDuration,\n nextDayThreshold: createDuration,\n scrollTime: createDuration,\n scrollTimeReset: Boolean,\n slotMinTime: createDuration,\n slotMaxTime: createDuration,\n dayPopoverFormat: createFormatter,\n slotDuration: createDuration,\n snapDuration: createDuration,\n headerToolbar: identity as Identity<ToolbarInput | false>,\n footerToolbar: identity as Identity<ToolbarInput | false>,\n defaultRangeSeparator: String,\n titleRangeSeparator: String,\n forceEventDuration: Boolean,\n\n dayHeaders: Boolean,\n dayHeaderFormat: createFormatter,\n dayHeaderClassNames: identity as Identity<ClassNamesGenerator<DayHeaderContentArg>>,\n dayHeaderContent: identity as Identity<CustomContentGenerator<DayHeaderContentArg>>,\n dayHeaderDidMount: identity as Identity<DidMountHandler<DayHeaderMountArg>>,\n dayHeaderWillUnmount: identity as Identity<WillUnmountHandler<DayHeaderMountArg>>,\n\n dayCellClassNames: identity as Identity<ClassNamesGenerator<DayCellContentArg>>,\n dayCellContent: identity as Identity<CustomContentGenerator<DayCellContentArg>>,\n dayCellDidMount: identity as Identity<DidMountHandler<DayCellMountArg>>,\n dayCellWillUnmount: identity as Identity<WillUnmountHandler<DayCellMountArg>>,\n\n initialView: String,\n aspectRatio: Number,\n weekends: Boolean,\n\n weekNumberCalculation: identity as Identity<WeekNumberCalculation>,\n weekNumbers: Boolean,\n weekNumberClassNames: identity as Identity<ClassNamesGenerator<WeekNumberContentArg>>,\n weekNumberContent: identity as Identity<CustomContentGenerator<WeekNumberContentArg>>,\n weekNumberDidMount: identity as Identity<DidMountHandler<WeekNumberMountArg>>,\n weekNumberWillUnmount: identity as Identity<WillUnmountHandler<WeekNumberMountArg>>,\n\n editable: Boolean,\n\n viewClassNames: identity as Identity<ClassNamesGenerator<ViewContentArg>>,\n viewDidMount: identity as Identity<DidMountHandler<ViewMountArg>>,\n viewWillUnmount: identity as Identity<WillUnmountHandler<ViewMountArg>>,\n\n nowIndicator: Boolean,\n nowIndicatorClassNames: identity as Identity<ClassNamesGenerator<NowIndicatorContentArg>>,\n nowIndicatorContent: identity as Identity<CustomContentGenerator<NowIndicatorContentArg>>,\n nowIndicatorDidMount: identity as Identity<DidMountHandler<NowIndicatorMountArg>>,\n nowIndicatorWillUnmount: identity as Identity<WillUnmountHandler<NowIndicatorMountArg>>,\n\n showNonCurrentDates: Boolean,\n lazyFetching: Boolean,\n startParam: String,\n endParam: String,\n timeZoneParam: String,\n timeZone: String,\n locales: identity as Identity<LocaleInput[]>,\n locale: identity as Identity<LocaleSingularArg>,\n themeSystem: String as Identity<'standard' | string>,\n dragRevertDuration: Number,\n dragScroll: Boolean,\n allDayMaintainDuration: Boolean,\n unselectAuto: Boolean,\n dropAccept: identity as Identity<string | ((this: CalendarApi, draggable: any) => boolean)>, // TODO: type draggable\n eventOrder: parseFieldSpecs,\n eventOrderStrict: Boolean,\n\n handleWindowResize: Boolean,\n windowResizeDelay: Number,\n longPressDelay: Number,\n eventDragMinDistance: Number,\n expandRows: Boolean,\n height: identity as Identity<CssDimValue>,\n contentHeight: identity as Identity<CssDimValue>,\n direction: String as Identity<'ltr' | 'rtl'>,\n weekNumberFormat: createFormatter,\n eventResizableFromStart: Boolean,\n displayEventTime: Boolean,\n displayEventEnd: Boolean,\n weekText: String, // the short version\n weekTextLong: String, // falls back to weekText\n progressiveEventRendering: Boolean,\n businessHours: identity as Identity<BusinessHoursInput>,\n initialDate: identity as Identity<DateInput>,\n now: identity as Identity<DateInput | ((this: CalendarApi) => DateInput)>,\n eventDataTransform: identity as Identity<EventInputTransformer>,\n stickyHeaderDates: identity as Identity<boolean | 'auto'>,\n stickyFooterScrollbar: identity as Identity<boolean | 'auto'>,\n viewHeight: identity as Identity<CssDimValue>,\n defaultAllDay: Boolean,\n eventSourceFailure: identity as Identity<(this: CalendarApi, error: any) => void>,\n eventSourceSuccess: identity as Identity<(this: CalendarApi, eventsInput: EventInput[], xhr?: XMLHttpRequest) => EventInput[] | void>,\n\n eventDisplay: String, // TODO: give more specific\n eventStartEditable: Boolean,\n eventDurationEditable: Boolean,\n eventOverlap: identity as Identity<boolean | OverlapFunc>,\n eventConstraint: identity as Identity<ConstraintInput>,\n eventAllow: identity as Identity<AllowFunc>,\n eventBackgroundColor: String,\n eventBorderColor: String,\n eventTextColor: String,\n eventColor: String,\n eventClassNames: identity as Identity<ClassNamesGenerator<EventContentArg>>,\n eventContent: identity as Identity<CustomContentGenerator<EventContentArg>>,\n eventDidMount: identity as Identity<DidMountHandler<EventMountArg>>,\n eventWillUnmount: identity as Identity<WillUnmountHandler<EventMountArg>>,\n\n selectConstraint: identity as Identity<ConstraintInput>,\n selectOverlap: identity as Identity<boolean | OverlapFunc>,\n selectAllow: identity as Identity<AllowFunc>,\n\n droppable: Boolean,\n unselectCancel: String,\n\n slotLabelFormat: identity as Identity<FormatterInput | FormatterInput[]>,\n\n slotLaneClassNames: identity as Identity<ClassNamesGenerator<SlotLaneContentArg>>,\n slotLaneContent: identity as Identity<CustomContentGenerator<SlotLaneContentArg>>,\n slotLaneDidMount: identity as Identity<DidMountHandler<SlotLaneMountArg>>,\n slotLaneWillUnmount: identity as Identity<WillUnmountHandler<SlotLaneMountArg>>,\n\n slotLabelClassNames: identity as Identity<ClassNamesGenerator<SlotLabelContentArg>>,\n slotLabelContent: identity as Identity<CustomContentGenerator<SlotLabelContentArg>>,\n slotLabelDidMount: identity as Identity<DidMountHandler<SlotLabelMountArg>>,\n slotLabelWillUnmount: identity as Identity<WillUnmountHandler<SlotLabelMountArg>>,\n\n dayMaxEvents: identity as Identity<boolean | number>,\n dayMaxEventRows: identity as Identity<boolean | number>,\n dayMinWidth: Number,\n slotLabelInterval: createDuration,\n\n allDayText: String,\n allDayClassNames: identity as Identity<ClassNamesGenerator<AllDayContentArg>>,\n allDayContent: identity as Identity<CustomContentGenerator<AllDayContentArg>>,\n allDayDidMount: identity as Identity<DidMountHandler<AllDayMountArg>>,\n allDayWillUnmount: identity as Identity<WillUnmountHandler<AllDayMountArg>>,\n\n slotMinWidth: Number, // move to timeline?\n navLinks: Boolean,\n eventTimeFormat: createFormatter,\n rerenderDelay: Number, // TODO: move to @fullcalendar/core right? nah keep here\n moreLinkText: identity as Identity<string | ((this: CalendarApi, num: number) => string)>, // this not enforced :( check others too\n moreLinkHint: identity as Identity<string | ((this: CalendarApi, num: number) => string)>,\n selectMinDistance: Number,\n selectable: Boolean,\n selectLongPressDelay: Number,\n eventLongPressDelay: Number,\n\n selectMirror: Boolean,\n eventMaxStack: Number,\n eventMinHeight: Number,\n eventMinWidth: Number,\n eventShortHeight: Number,\n slotEventOverlap: Boolean,\n plugins: identity as Identity<PluginDef[]>,\n firstDay: Number,\n dayCount: Number,\n dateAlignment: String,\n dateIncrement: createDuration,\n hiddenDays: identity as Identity<number[]>,\n monthMode: Boolean,\n fixedWeekCount: Boolean,\n validRange: identity as Identity<DateRangeInput | ((this: CalendarApi, nowDate: Date) => DateRangeInput)>, // `this` works?\n visibleRange: identity as Identity<DateRangeInput | ((this: CalendarApi, currentDate: Date) => DateRangeInput)>, // `this` works?\n titleFormat: identity as Identity<FormatterInput>, // DONT parse just yet. we need to inject titleSeparator\n\n eventInteractive: Boolean,\n\n // only used by list-view, but languages define the value, so we need it in base options\n noEventsText: String,\n\n viewHint: identity as Identity<string | ((...args: any[]) => string)>,\n navLinkHint: identity as Identity<string | ((...args: any[]) => string)>,\n closeHint: String,\n timeHint: String,\n eventHint: String,\n\n moreLinkClick: identity as Identity<MoreLinkAction>,\n moreLinkClassNames: identity as Identity<ClassNamesGenerator<MoreLinkContentArg>>,\n moreLinkContent: identity as Identity<CustomContentGenerator<MoreLinkContentArg>>,\n moreLinkDidMount: identity as Identity<DidMountHandler<MoreLinkMountArg>>,\n moreLinkWillUnmount: identity as Identity<WillUnmountHandler<MoreLinkMountArg>>,\n}\n\ntype BuiltInBaseOptionRefiners = typeof BASE_OPTION_REFINERS\n\nexport interface BaseOptionRefiners extends BuiltInBaseOptionRefiners {\n // for ambient-extending\n}\n\nexport type BaseOptions = RawOptionsFromRefiners< // as RawOptions\n Required<BaseOptionRefiners> // Required is a hack for \"Index signature is missing\"\n>\n\n// do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.\n// raw values.\nexport const BASE_OPTION_DEFAULTS = {\n eventDisplay: 'auto',\n defaultRangeSeparator: ' - ',\n titleRangeSeparator: ' \\u2013 ', // en dash\n defaultTimedEventDuration: '01:00:00',\n defaultAllDayEventDuration: { day: 1 },\n forceEventDuration: false,\n nextDayThreshold: '00:00:00',\n dayHeaders: true,\n initialView: '',\n aspectRatio: 1.35,\n headerToolbar: {\n start: 'title',\n center: '',\n end: 'today prev,next',\n },\n weekends: true,\n weekNumbers: false,\n weekNumberCalculation: 'local' as WeekNumberCalculation,\n editable: false,\n nowIndicator: false,\n scrollTime: '06:00:00',\n scrollTimeReset: true,\n slotMinTime: '00:00:00',\n slotMaxTime: '24:00:00',\n showNonCurrentDates: true,\n lazyFetching: true,\n startParam: 'start',\n endParam: 'end',\n timeZoneParam: 'timeZone',\n timeZone: 'local', // TODO: throw error if given falsy value?\n locales: [],\n locale: '', // blank values means it will compute based off locales[]\n themeSystem: 'standard',\n dragRevertDuration: 500,\n dragScroll: true,\n allDayMaintainDuration: false,\n unselectAuto: true,\n dropAccept: '*',\n eventOrder: 'start,-duration,allDay,title',\n dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },\n handleWindowResize: true,\n windowResizeDelay: 100, // milliseconds before an updateSize happens\n longPressDelay: 1000,\n eventDragMinDistance: 5, // only applies to mouse\n expandRows: false,\n navLinks: false,\n selectable: false,\n eventMinHeight: 15,\n eventMinWidth: 30,\n eventShortHeight: 30,\n}\n\nexport type BaseOptionsRefined = DefaultedRefinedOptions<\n RefinedOptionsFromRefiners<Required<BaseOptionRefiners>>, // Required is a hack for \"Index signature is missing\"\n keyof typeof BASE_OPTION_DEFAULTS\n>\n\n// calendar listeners\n// ------------------\n\nexport const CALENDAR_LISTENER_REFINERS = {\n datesSet: identity as Identity<(arg: DatesSetArg) => void>,\n eventsSet: identity as Identity<(events: EventApi[]) => void>,\n eventAdd: identity as Identity<(arg: EventAddArg) => void>,\n eventChange: identity as Identity<(arg: EventChangeArg) => void>,\n eventRemove: identity as Identity<(arg: EventRemoveArg) => void>,\n windowResize: identity as Identity<(arg: { view: ViewApi }) => void>,\n eventClick: identity as Identity<(arg: EventClickArg) => void>, // TODO: resource for scheduler????\n eventMouseEnter: identity as Identity<(arg: EventHoveringArg) => void>,\n eventMouseLeave: identity as Identity<(arg: EventHoveringArg) => void>,\n select: identity as Identity<(arg: DateSelectArg) => void>, // resource for scheduler????\n unselect: identity as Identity<(arg: DateUnselectArg) => void>,\n loading: identity as Identity<(isLoading: boolean) => void>,\n\n // internal\n _unmount: identity as Identity<() => void>,\n _beforeprint: identity as Identity<() => void>,\n _afterprint: identity as Identity<() => void>,\n _noEventDrop: identity as Identity<() => void>,\n _noEventResize: identity as Identity<() => void>,\n _resize: identity as Identity<(forced: boolean) => void>,\n _scrollRequest: identity as Identity<(arg: any) => void>,\n}\n\ntype BuiltInCalendarListenerRefiners = typeof CALENDAR_LISTENER_REFINERS\n\nexport interface CalendarListenerRefiners extends BuiltInCalendarListenerRefiners {\n // for ambient extending\n}\n\ntype CalendarListenersLoose = RefinedOptionsFromRefiners<Required<CalendarListenerRefiners>> // Required hack\nexport type CalendarListeners = Required<CalendarListenersLoose> // much more convenient for Emitters and whatnot\n\n// calendar-specific options\n// -------------------------\n\nexport const CALENDAR_OPTION_REFINERS = { // does not include base nor calendar listeners\n buttonText: identity as Identity<ButtonTextCompoundInput>,\n buttonHints: identity as Identity<ButtonHintCompoundInput>,\n views: identity as Identity<{ [viewId: string]: ViewOptions }>,\n plugins: identity as Identity<PluginDef[]>,\n initialEvents: identity as Identity<EventSourceInput>,\n events: identity as Identity<EventSourceInput>,\n eventSources: identity as Identity<EventSourceInput[]>,\n}\n\ntype BuiltInCalendarOptionRefiners = typeof CALENDAR_OPTION_REFINERS\n\nexport interface CalendarOptionRefiners extends BuiltInCalendarOptionRefiners {\n // for ambient-extending\n}\n\nexport type CalendarOptions =\n BaseOptions &\n CalendarListenersLoose &\n RawOptionsFromRefiners<Required<CalendarOptionRefiners>> // Required hack https://github.com/microsoft/TypeScript/issues/15300\n\nexport type CalendarOptionsRefined =\n BaseOptionsRefined &\n CalendarListenersLoose &\n RefinedOptionsFromRefiners<Required<CalendarOptionRefiners>> // Required hack\n\nexport const COMPLEX_OPTION_COMPARATORS: {\n [optionName in keyof CalendarOptions]: (a: CalendarOptions[optionName], b: CalendarOptions[optionName]) => boolean\n} = {\n headerToolbar: isBoolComplexEqual,\n footerToolbar: isBoolComplexEqual,\n buttonText: isBoolComplexEqual,\n buttonHints: isBoolComplexEqual,\n buttonIcons: isBoolComplexEqual,\n}\n\nfunction isBoolComplexEqual(a, b) {\n if (typeof a === 'object' && typeof b === 'object' && a && b) { // both non-null objects\n return isPropsEqual(a, b)\n }\n return a === b\n}\n\n// view-specific options\n// ---------------------\n\nexport const VIEW_OPTION_REFINERS: {\n [name: string]: any\n} = {\n type: String,\n component: identity as Identity<ViewComponentType>,\n buttonText: String,\n buttonTextKey: String, // internal only\n dateProfileGeneratorClass: identity as Identity<DateProfileGeneratorClass>,\n usesMinMaxTime: Boolean, // internal only\n classNames: identity as Identity<ClassNamesGenerator<SpecificViewContentArg>>,\n content: identity as Identity<CustomContentGenerator<SpecificViewContentArg>>,\n didMount: identity as Identity<DidMountHandler<SpecificViewMountArg>>,\n willUnmount: identity as Identity<WillUnmountHandler<SpecificViewMountArg>>,\n}\n\ntype BuiltInViewOptionRefiners = typeof VIEW_OPTION_REFINERS\n\nexport interface ViewOptionRefiners extends BuiltInViewOptionRefiners {\n // for ambient-extending\n}\n\nexport type ViewOptions =\n BaseOptions &\n CalendarListenersLoose &\n RawOptionsFromRefiners<Required<ViewOptionRefiners>> // Required hack\n\nexport type ViewOptionsRefined =\n BaseOptionsRefined &\n CalendarListenersLoose &\n RefinedOptionsFromRefiners<Required<ViewOptionRefiners>> // Required hack\n\n// util funcs\n// ----------------------------------------------------------------------------------------------------\n\nexport function mergeRawOptions(optionSets: Dictionary[]) {\n return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS)\n}\n\nexport function refineProps<Refiners extends GenericRefiners, Raw extends RawOptionsFromRefiners<Refiners>>(\n input: Raw,\n refiners: Refiners,\n): {\n refined: RefinedOptionsFromRefiners<Refiners>,\n extra: Dictionary,\n} {\n let refined = {} as any\n let extra = {} as any\n\n for (let propName in refiners) {\n if (propName in input) {\n refined[propName] = refiners[propName](input[propName])\n }\n }\n\n for (let propName in input) {\n if (!(propName in refiners)) {\n extra[propName] = input[propName]\n }\n }\n\n return { refined, extra }\n}\n\n// definition utils\n// ----------------------------------------------------------------------------------------------------\n\nexport type GenericRefiners = {\n [propName: string]: (input: any) => any\n}\n\nexport type GenericListenerRefiners = {\n [listenerName: string]: Identity<(this: CalendarApi, ...args: any[]) => void>\n}\n\nexport type RawOptionsFromRefiners<Refiners extends GenericRefiners> = {\n [Prop in keyof Refiners]?: // all optional\n Refiners[Prop] extends ((input: infer RawType) => infer RefinedType)\n ? (any extends RawType ? RefinedType : RawType) // if input type `any`, use output (for Boolean/Number/String)\n : never\n}\n\nexport type RefinedOptionsFromRefiners<Refiners extends GenericRefiners> = {\n [Prop in keyof Refiners]?: // all optional\n Refiners[Prop] extends ((input: any) => infer RefinedType) ? RefinedType : never\n}\n\nexport type DefaultedRefinedOptions<RefinedOptions extends Dictionary, DefaultKey extends keyof RefinedOptions> =\n Required<Pick<RefinedOptions, DefaultKey>> &\n Partial<Omit<RefinedOptions, DefaultKey>>\n\nexport type Dictionary = Record<string, any>\n\nexport type Identity<T = any> = (raw: T) => T\n\nexport function identity<T>(raw: T): T {\n return raw\n}\n","import { EventDef, EventDefHash } from './event-def'\nimport { EventInstance, EventInstanceHash } from './event-instance'\nimport { EventInput, parseEvent, EventTuple, buildEventRefiners } from './event-parse'\nimport { filterHash } from '../util/object'\nimport { CalendarContext } from '../CalendarContext'\nimport { EventSource } from './event-source'\n\n/*\nA data structure that encapsulates EventDefs and EventInstances.\nUtils for parsing this data from raw EventInputs.\nUtils for manipulating an EventStore.\n*/\n\nexport interface EventStore {\n defs: EventDefHash\n instances: EventInstanceHash\n}\n\nexport function parseEvents(\n rawEvents: EventInput[],\n eventSource: EventSource<any> | null,\n context: CalendarContext,\n allowOpenRange?: boolean,\n): EventStore {\n let eventStore = createEmptyEventStore()\n let eventRefiners = buildEventRefiners(context)\n\n for (let rawEvent of rawEvents) {\n let tuple = parseEvent(rawEvent, eventSource, context, allowOpenRange, eventRefiners)\n\n if (tuple) {\n eventTupleToStore(tuple, eventStore)\n }\n }\n\n return eventStore\n}\n\nexport function eventTupleToStore(tuple: EventTuple, eventStore: EventStore = createEmptyEventStore()) {\n eventStore.defs[tuple.def.defId] = tuple.def\n\n if (tuple.instance) {\n eventStore.instances[tuple.instance.instanceId] = tuple.instance\n }\n\n return eventStore\n}\n\n// retrieves events that have the same groupId as the instance specified by `instanceId`\n// or they are the same as the instance.\n// why might instanceId not be in the store? an event from another calendar?\nexport function getRelevantEvents(eventStore: EventStore, instanceId: string): EventStore {\n let instance = eventStore.instances[instanceId]\n\n if (instance) {\n let def = eventStore.defs[instance.defId]\n\n // get events/instances with same group\n let newStore = filterEventStoreDefs(eventStore, (lookDef) => isEventDefsGrouped(def, lookDef))\n\n // add the original\n // TODO: wish we could use eventTupleToStore or something like it\n newStore.defs[def.defId] = def\n newStore.instances[instance.instanceId] = instance\n\n return newStore\n }\n\n return createEmptyEventStore()\n}\n\nfunction isEventDefsGrouped(def0: EventDef, def1: EventDef): boolean {\n return Boolean(def0.groupId && def0.groupId === def1.groupId)\n}\n\nexport function createEmptyEventStore(): EventStore {\n return { defs: {}, instances: {} }\n}\n\nexport function mergeEventStores(store0: EventStore, store1: EventStore): EventStore {\n return {\n defs: { ...store0.defs, ...store1.defs },\n instances: { ...store0.instances, ...store1.instances },\n }\n}\n\nexport function filterEventStoreDefs(eventStore: EventStore, filterFunc: (eventDef: EventDef) => boolean): EventStore {\n let defs = filterHash(eventStore.defs, filterFunc)\n let instances = filterHash(eventStore.instances, (instance: EventInstance) => (\n defs[instance.defId] // still exists?\n ))\n return { defs, instances }\n}\n\nexport function excludeSubEventStore(master: EventStore, sub: EventStore): EventStore {\n let { defs, instances } = master\n let filteredDefs: { [defId: string]: EventDef } = {}\n let filteredInstances: { [instanceId: string]: EventInstance } = {}\n\n for (let defId in defs) {\n if (!sub.defs[defId]) { // not explicitly excluded\n filteredDefs[defId] = defs[defId]\n }\n }\n\n for (let instanceId in instances) {\n if (\n !sub.instances[instanceId] && // not explicitly excluded\n filteredDefs[instances[instanceId].defId] // def wasn't filtered away\n ) {\n filteredInstances[instanceId] = instances[instanceId]\n }\n }\n\n return {\n defs: filteredDefs,\n instances: filteredInstances,\n }\n}\n","import { EventStore, parseEvents } from './event-store'\nimport { EventInput } from './event-parse'\nimport { DateSpanApi } from './date-span'\nimport { EventApi } from '../api/EventApi'\nimport { SplittableProps } from '../component/event-splitting'\nimport { CalendarContext } from '../CalendarContext'\n\n// TODO: rename to \"criteria\" ?\nexport type ConstraintInput = 'businessHours' | string | EventInput | EventInput[]\nexport type Constraint = 'businessHours' | string | EventStore | false // false means won't pass at all\nexport type OverlapFunc = ((stillEvent: EventApi, movingEvent: EventApi | null) => boolean)\nexport type AllowFunc = (span: DateSpanApi, movingEvent: EventApi | null) => boolean\nexport type isPropsValidTester = (props: SplittableProps, context: CalendarContext) => boolean\n\nexport function normalizeConstraint(input: ConstraintInput, context: CalendarContext): Constraint | null {\n if (Array.isArray(input)) {\n return parseEvents(input, null, context, true) // allowOpenRange=true\n } if (typeof input === 'object' && input) { // non-null object\n return parseEvents([input], null, context, true) // allowOpenRange=true\n } if (input != null) {\n return String(input)\n }\n return null\n}\n","export type ClassNamesInput = string | string[]\n\nexport function parseClassNames(raw: ClassNamesInput) {\n if (Array.isArray(raw)) {\n return raw\n }\n\n if (typeof raw === 'string') {\n return raw.split(/\\s+/)\n }\n\n return []\n}\n","import { Constraint, AllowFunc, normalizeConstraint } from '../structs/constraint'\nimport { parseClassNames } from '../util/html'\nimport { CalendarContext } from '../CalendarContext'\nimport { RawOptionsFromRefiners, RefinedOptionsFromRefiners, identity, Identity } from '../options'\n\n// TODO: better called \"EventSettings\" or \"EventConfig\"\n// TODO: move this file into structs\n// TODO: separate constraint/overlap/allow, because selection uses only that, not other props\n\nexport const EVENT_UI_REFINERS = {\n display: String,\n editable: Boolean,\n startEditable: Boolean,\n durationEditable: Boolean,\n constraint: identity as Identity<any>, // Identity<ConstraintInput>, // circular reference. ts dies. event->constraint->event\n overlap: identity as Identity<boolean>,\n allow: identity as Identity<AllowFunc>,\n className: parseClassNames, // will both end up as array of strings\n classNames: parseClassNames, // \"\n color: String,\n backgroundColor: String,\n borderColor: String,\n textColor: String,\n}\n\nconst EMPTY_EVENT_UI: EventUi = {\n display: null,\n startEditable: null,\n durationEditable: null,\n constraints: [],\n overlap: null,\n allows: [],\n backgroundColor: '',\n borderColor: '',\n textColor: '',\n classNames: [],\n}\n\ntype BuiltInEventUiRefiners = typeof EVENT_UI_REFINERS\n\ninterface EventUiRefiners extends BuiltInEventUiRefiners {\n // to prevent circular reference (and give is the option for ambient modification for later)\n}\n\nexport type EventUiInput = RawOptionsFromRefiners<Required<EventUiRefiners>> // Required hack\nexport type EventUiRefined = RefinedOptionsFromRefiners<Required<EventUiRefiners>> // Required hack\n\nexport interface EventUi {\n display: string | null\n startEditable: boolean | null\n durationEditable: boolean | null\n constraints: Constraint[]\n overlap: boolean | null\n allows: AllowFunc[] // crappy name to indicate plural\n backgroundColor: string\n borderColor: string\n textColor: string,\n classNames: string[]\n}\n\nexport type EventUiHash = { [defId: string]: EventUi }\n\nexport function createEventUi(refined: EventUiRefined, context: CalendarContext): EventUi {\n let constraint = normalizeConstraint(refined.constraint, context)\n\n return {\n display: refined.display || null,\n startEditable: refined.startEditable != null ? refined.startEditable : refined.editable,\n durationEditable: refined.durationEditable != null ? refined.durationEditable : refined.editable,\n constraints: constraint != null ? [constraint] : [],\n overlap: refined.overlap != null ? refined.overlap : null,\n allows: refined.allow != null ? [refined.allow] : [],\n backgroundColor: refined.backgroundColor || refined.color || '',\n borderColor: refined.borderColor || refined.color || '',\n textColor: refined.textColor || '',\n classNames: (refined.className || []).concat(refined.classNames || []), // join singular and plural\n }\n}\n\n// TODO: prevent against problems with <2 args!\nexport function combineEventUis(uis: EventUi[]): EventUi {\n return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI)\n}\n\nfunction combineTwoEventUis(item0: EventUi, item1: EventUi): EventUi { // hash1 has higher precedence\n return {\n display: item1.display != null ? item1.display : item0.display,\n startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,\n durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,\n constraints: item0.constraints.concat(item1.constraints),\n overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,\n allows: item0.allows.concat(item1.allows),\n backgroundColor: item1.backgroundColor || item0.backgroundColor,\n borderColor: item1.borderColor || item0.borderColor,\n textColor: item1.textColor || item0.textColor,\n classNames: item0.classNames.concat(item1.classNames),\n }\n}\n","import { __assign } from 'tslib'\nimport { guid } from '../util/misc'\nimport { DateInput } from '../datelib/env'\nimport { startOfDay } from '../datelib/marker'\nimport { parseRecurring } from './recurring-event'\nimport { CalendarContext } from '../CalendarContext'\nimport { EventDef } from './event-def'\nimport { createEventInstance, EventInstance } from './event-instance'\nimport { EventSource } from './event-source'\nimport { RefinedOptionsFromRefiners, RawOptionsFromRefiners, identity, Identity, Dictionary, refineProps } from '../options'\nimport { EVENT_UI_REFINERS, createEventUi, EventUiInput, EventUiRefined } from '../component/event-ui'\n\nexport const EVENT_NON_DATE_REFINERS = {\n id: String,\n groupId: String,\n title: String,\n url: String,\n interactive: Boolean,\n}\n\nexport const EVENT_DATE_REFINERS = {\n start: identity as Identity<DateInput>,\n end: identity as Identity<DateInput>,\n date: identity as Identity<DateInput>,\n allDay: Boolean,\n}\n\nconst EVENT_REFINERS = { // does NOT include EVENT_UI_REFINERS\n ...EVENT_NON_DATE_REFINERS,\n ...EVENT_DATE_REFINERS,\n extendedProps: identity as Identity<Dictionary>,\n}\n\ntype BuiltInEventRefiners = typeof EVENT_REFINERS\n\nexport interface EventRefiners extends BuiltInEventRefiners {\n // for ambient\n}\n\nexport type EventInput =\n EventUiInput &\n RawOptionsFromRefiners<Required<EventRefiners>> & // Required hack\n { [extendedProp: string]: any }\n\nexport type EventRefined =\n EventUiRefined &\n RefinedOptionsFromRefiners<Required<EventRefiners>> // Required hack\n\nexport interface EventTuple {\n def: EventDef\n instance: EventInstance | null\n}\n\nexport type EventInputTransformer = (input: EventInput) => EventInput\nexport type EventDefMemberAdder = (refined: EventRefined) => Partial<EventDef>\n\nexport function parseEvent(\n raw: EventInput,\n eventSource: EventSource<any> | null,\n context: CalendarContext,\n allowOpenRange: boolean,\n refiners = buildEventRefiners(context),\n): EventTuple | null {\n let { refined, extra } = refineEventDef(raw, context, refiners)\n\n let defaultAllDay = computeIsDefaultAllDay(eventSource, context)\n let recurringRes = parseRecurring(\n refined,\n defaultAllDay,\n context.dateEnv,\n context.pluginHooks.recurringTypes,\n )\n\n if (recurringRes) {\n let def = parseEventDef(\n refined,\n extra,\n eventSource ? eventSource.sourceId : '',\n recurringRes.allDay,\n Boolean(recurringRes.duration),\n context,\n )\n\n def.recurringDef = { // don't want all the props from recurringRes. TODO: more efficient way to do this\n typeId: recurringRes.typeId,\n typeData: recurringRes.typeData,\n duration: recurringRes.duration,\n }\n\n return { def, instance: null }\n }\n let singleRes = parseSingle(refined, defaultAllDay, context, allowOpenRange)\n\n if (singleRes) {\n let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', singleRes.allDay, singleRes.hasEnd, context)\n let instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo)\n\n return { def, instance }\n }\n\n return null\n}\n\nexport function refineEventDef(raw: EventInput, context: CalendarContext, refiners = buildEventRefiners(context)) {\n return refineProps(raw, refiners)\n}\n\nexport function buildEventRefiners(context: CalendarContext) {\n return { ...EVENT_UI_REFINERS, ...EVENT_REFINERS, ...context.pluginHooks.eventRefiners }\n}\n\n/*\nWill NOT populate extendedProps with the leftover properties.\nWill NOT populate date-related props.\n*/\nexport function parseEventDef(\n refined: EventRefined,\n extra: Dictionary,\n sourceId: string,\n allDay: boolean,\n hasEnd: boolean,\n context: CalendarContext,\n): EventDef {\n let def: EventDef = {\n title: refined.title || '',\n groupId: refined.groupId || '',\n publicId: refined.id || '',\n url: refined.url || '',\n recurringDef: null,\n defId: guid(),\n sourceId,\n allDay,\n hasEnd,\n interactive: refined.interactive,\n ui: createEventUi(refined, context),\n extendedProps: {\n ...(refined.extendedProps || {}),\n ...extra,\n },\n }\n\n for (let memberAdder of context.pluginHooks.eventDefMemberAdders) {\n __assign(def, memberAdder(refined))\n }\n\n // help out EventApi from having user modify props\n Object.freeze(def.ui.classNames)\n Object.freeze(def.extendedProps)\n\n return def\n}\n\nfunction parseSingle(refined: EventRefined, defaultAllDay: boolean | null, context: CalendarContext, allowOpenRange?: boolean) {\n let { allDay } = refined\n let startMeta\n let startMarker = null\n let hasEnd = false\n let endMeta\n let endMarker = null\n\n let startInput = refined.start != null ? refined.start : refined.date\n startMeta = context.dateEnv.createMarkerMeta(startInput)\n\n if (startMeta) {\n startMarker = startMeta.marker\n } else if (!allowOpenRange) {\n return null\n }\n\n if (refined.end != null) {\n endMeta = context.dateEnv.createMarkerMeta(refined.end)\n }\n\n if (allDay == null) {\n if (defaultAllDay != null) {\n allDay = defaultAllDay\n } else {\n // fall back to the date props LAST\n allDay = (!startMeta || startMeta.isTimeUnspecified) &&\n (!endMeta || endMeta.isTimeUnspecified)\n }\n }\n\n if (allDay && startMarker) {\n startMarker = startOfDay(startMarker)\n }\n\n if (endMeta) {\n endMarker = endMeta.marker\n\n if (allDay) {\n endMarker = startOfDay(endMarker)\n }\n\n if (startMarker && endMarker <= startMarker) {\n endMarker = null\n }\n }\n\n if (endMarker) {\n hasEnd = true\n } else if (!allowOpenRange) {\n hasEnd = context.options.forceEventDuration || false\n\n endMarker = context.dateEnv.add(\n startMarker,\n allDay ?\n context.options.defaultAllDayEventDuration :\n context.options.defaultTimedEventDuration,\n )\n }\n\n return {\n allDay,\n hasEnd,\n range: { start: startMarker, end: endMarker },\n forcedStartTzo: startMeta ? startMeta.forcedTzo : null,\n forcedEndTzo: endMeta ? endMeta.forcedTzo : null,\n }\n}\n\nfunction computeIsDefaultAllDay(eventSource: EventSource<any> | null, context: CalendarContext): boolean | null {\n let res = null\n\n if (eventSource) {\n res = eventSource.defaultAllDay\n }\n\n if (res == null) {\n res = context.options.defaultAllDay\n }\n\n return res\n}\n","import { DateMarker, startOfDay, addDays, diffDays, diffDayAndTime } from '../datelib/marker'\nimport { Duration, asRoughMs, createDuration } from '../datelib/duration'\nimport { DateEnv } from '../datelib/env'\nimport { DateRange, OpenDateRange } from '../datelib/date-range'\n\n/* Date stuff that doesn't belong in datelib core\n----------------------------------------------------------------------------------------------------------------------*/\n\n// given a timed range, computes an all-day range that has the same exact duration,\n// but whose start time is aligned with the start of the day.\nexport function computeAlignedDayRange(timedRange: DateRange): DateRange {\n let dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1\n let start = startOfDay(timedRange.start)\n let end = addDays(start, dayCnt)\n return { start, end }\n}\n\n// given a timed range, computes an all-day range based on how for the end date bleeds into the next day\n// TODO: give nextDayThreshold a default arg\nexport function computeVisibleDayRange(timedRange: OpenDateRange, nextDayThreshold: Duration = createDuration(0)): OpenDateRange {\n let startDay: DateMarker = null\n let endDay: DateMarker = null\n\n if (timedRange.end) {\n endDay = startOfDay(timedRange.end)\n\n let endTimeMS: number = timedRange.end.valueOf() - endDay.valueOf() // # of milliseconds into `endDay`\n\n // If the end time is actually inclusively part of the next day and is equal to or\n // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {\n endDay = addDays(endDay, 1)\n }\n }\n\n if (timedRange.start) {\n startDay = startOfDay(timedRange.start) // the beginning of the day the range starts\n\n // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\n if (endDay && endDay <= startDay) {\n endDay = addDays(startDay, 1)\n }\n }\n\n return { start: startDay, end: endDay }\n}\n\n// spans from one day into another?\nexport function isMultiDayRange(range: DateRange) {\n let visibleRange = computeVisibleDayRange(range)\n\n return diffDays(visibleRange.start, visibleRange.end) > 1\n}\n\nexport function diffDates(date0: DateMarker, date1: DateMarker, dateEnv: DateEnv, largeUnit?: string) {\n if (largeUnit === 'year') {\n return createDuration(dateEnv.diffWholeYears(date0, date1), 'year')!\n }\n\n if (largeUnit === 'month') {\n return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month')!\n }\n\n return diffDayAndTime(date0, date1) // returns a duration\n}\n","import { DateMarker } from './marker'\nimport { DateEnv, DateInput } from './env'\n\nexport interface DateRangeInput {\n start?: DateInput\n end?: DateInput\n}\n\nexport interface OpenDateRange {\n start: DateMarker | null\n end: DateMarker | null\n}\n\nexport interface DateRange {\n start: DateMarker\n end: DateMarker\n}\n\nexport function parseRange(input: DateRangeInput, dateEnv: DateEnv): OpenDateRange {\n let start = null\n let end = null\n\n if (input.start) {\n start = dateEnv.createMarker(input.start)\n }\n\n if (input.end) {\n end = dateEnv.createMarker(input.end)\n }\n\n if (!start && !end) {\n return null\n }\n\n if (start && end && end < start) {\n return null\n }\n\n return { start, end }\n}\n\n// SIDE-EFFECT: will mutate ranges.\n// Will return a new array result.\nexport function invertRanges(ranges: DateRange[], constraintRange: DateRange): DateRange[] {\n let invertedRanges: DateRange[] = []\n let { start } = constraintRange // the end of the previous range. the start of the new range\n let i\n let dateRange\n\n // ranges need to be in order. required for our date-walking algorithm\n ranges.sort(compareRanges)\n\n for (i = 0; i < ranges.length; i += 1) {\n dateRange = ranges[i]\n\n // add the span of time before the event (if there is any)\n if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)\n invertedRanges.push({ start, end: dateRange.start })\n }\n\n if (dateRange.end > start) {\n start = dateRange.end\n }\n }\n\n // add the span of time after the last event (if there is any)\n if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)\n invertedRanges.push({ start, end: constraintRange.end })\n }\n\n return invertedRanges\n}\n\nfunction compareRanges(range0: DateRange, range1: DateRange) {\n return range0.start.valueOf() - range1.start.valueOf() // earlier ranges go first\n}\n\nexport function intersectRanges(range0: OpenDateRange, range1: OpenDateRange): OpenDateRange {\n let { start, end } = range0\n let newRange = null\n\n if (range1.start !== null) {\n if (start === null) {\n start = range1.start\n } else {\n start = new Date(Math.max(start.valueOf(), range1.start.valueOf()))\n }\n }\n\n if (range1.end != null) {\n if (end === null) {\n end = range1.end\n } else {\n end = new Date(Math.min(end.valueOf(), range1.end.valueOf()))\n }\n }\n\n if (start === null || end === null || start < end) {\n newRange = { start, end }\n }\n\n return newRange\n}\n\nexport function rangesEqual(range0: OpenDateRange, range1: OpenDateRange): boolean {\n return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&\n (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf())\n}\n\nexport function rangesIntersect(range0: OpenDateRange, range1: OpenDateRange): boolean {\n return (range0.end === null || range1.start === null || range0.end > range1.start) &&\n (range0.start === null || range1.end === null || range0.start < range1.end)\n}\n\nexport function rangeContainsRange(outerRange: OpenDateRange, innerRange: OpenDateRange): boolean {\n return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&\n (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end))\n}\n\nexport function rangeContainsMarker(range: OpenDateRange, date: DateMarker | number): boolean { // date can be a millisecond time\n return (range.start === null || date >= range.start) &&\n (range.end === null || date < range.end)\n}\n\n// If the given date is not within the given range, move it inside.\n// (If it's past the end, make it one millisecond before the end).\nexport function constrainMarkerToRange(date: DateMarker, range: DateRange): DateMarker {\n if (range.start != null && date < range.start) {\n return range.start\n }\n\n if (range.end != null && date >= range.end) {\n return new Date(range.end.valueOf() - 1)\n }\n\n return date\n}\n","import { EventDef, EventDefHash } from '../structs/event-def'\nimport { EventTuple } from '../structs/event-parse'\nimport { EventStore } from '../structs/event-store'\nimport { DateRange, invertRanges, intersectRanges, rangeContainsMarker } from '../datelib/date-range'\nimport { Duration } from '../datelib/duration'\nimport { compareByFieldSpecs, OrderSpec } from '../util/misc'\nimport { computeVisibleDayRange } from '../util/date'\nimport { Seg } from './DateComponent'\nimport { EventApi } from '../api/EventApi'\nimport { EventUi, EventUiHash, combineEventUis } from './event-ui'\nimport { mapHash } from '../util/object'\nimport { ViewContext } from '../ViewContext'\nimport { DateFormatter } from '../datelib/DateFormatter'\nimport { addMs, DateMarker, startOfDay } from '../datelib/marker'\nimport { ViewApi } from '../ViewApi'\nimport { MountArg } from '../common/render-hook'\nimport { createAriaKeyboardAttrs } from '../util/dom-event'\n\nexport interface EventRenderRange extends EventTuple {\n ui: EventUi\n range: DateRange\n isStart: boolean\n isEnd: boolean\n}\n\n/*\nSpecifying nextDayThreshold signals that all-day ranges should be sliced.\n*/\nexport function sliceEventStore(eventStore: EventStore, eventUiBases: EventUiHash, framingRange: DateRange, nextDayThreshold?: Duration) {\n let inverseBgByGroupId: { [groupId: string]: DateRange[] } = {}\n let inverseBgByDefId: { [defId: string]: DateRange[] } = {}\n let defByGroupId: { [groupId: string]: EventDef } = {}\n let bgRanges: EventRenderRange[] = []\n let fgRanges: EventRenderRange[] = []\n let eventUis = compileEventUis(eventStore.defs, eventUiBases)\n\n for (let defId in eventStore.defs) {\n let def = eventStore.defs[defId]\n let ui = eventUis[def.defId]\n\n if (ui.display === 'inverse-background') {\n if (def.groupId) {\n inverseBgByGroupId[def.groupId] = []\n\n if (!defByGroupId[def.groupId]) {\n defByGroupId[def.groupId] = def\n }\n } else {\n inverseBgByDefId[defId] = []\n }\n }\n }\n\n for (let instanceId in eventStore.instances) {\n let instance = eventStore.instances[instanceId]\n let def = eventStore.defs[instance.defId]\n let ui = eventUis[def.defId]\n let origRange = instance.range\n\n let normalRange = (!def.allDay && nextDayThreshold) ?\n computeVisibleDayRange(origRange, nextDayThreshold) :\n origRange\n\n let slicedRange = intersectRanges(normalRange, framingRange)\n\n if (slicedRange) {\n if (ui.display === 'inverse-background') {\n if (def.groupId) {\n inverseBgByGroupId[def.groupId].push(slicedRange)\n } else {\n inverseBgByDefId[instance.defId].push(slicedRange)\n }\n } else if (ui.display !== 'none') {\n (ui.display === 'background' ? bgRanges : fgRanges).push({\n def,\n ui,\n instance,\n range: slicedRange,\n isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),\n isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf(),\n })\n }\n }\n }\n\n for (let groupId in inverseBgByGroupId) { // BY GROUP\n let ranges = inverseBgByGroupId[groupId]\n let invertedRanges = invertRanges(ranges, framingRange)\n\n for (let invertedRange of invertedRanges) {\n let def = defByGroupId[groupId]\n let ui = eventUis[def.defId]\n\n bgRanges.push({\n def,\n ui,\n instance: null,\n range: invertedRange,\n isStart: false,\n isEnd: false,\n })\n }\n }\n\n for (let defId in inverseBgByDefId) {\n let ranges = inverseBgByDefId[defId]\n let invertedRanges = invertRanges(ranges, framingRange)\n\n for (let invertedRange of invertedRanges) {\n bgRanges.push({\n def: eventStore.defs[defId],\n ui: eventUis[defId],\n instance: null,\n range: invertedRange,\n isStart: false,\n isEnd: false,\n })\n }\n }\n\n return { bg: bgRanges, fg: fgRanges }\n}\n\nexport function hasBgRendering(def: EventDef) {\n return def.ui.display === 'background' || def.ui.display === 'inverse-background'\n}\n\nexport function setElSeg(el: HTMLElement, seg: Seg) {\n (el as any).fcSeg = seg\n}\n\nexport function getElSeg(el: HTMLElement): Seg | null {\n return (el as any).fcSeg ||\n (el.parentNode as any).fcSeg || // for the harness\n null\n}\n\n// event ui computation\n\nexport function compileEventUis(eventDefs: EventDefHash, eventUiBases: EventUiHash) {\n return mapHash(eventDefs, (eventDef: EventDef) => compileEventUi(eventDef, eventUiBases))\n}\n\nexport function compileEventUi(eventDef: EventDef, eventUiBases: EventUiHash) {\n let uis = []\n\n if (eventUiBases['']) {\n uis.push(eventUiBases[''])\n }\n\n if (eventUiBases[eventDef.defId]) {\n uis.push(eventUiBases[eventDef.defId])\n }\n\n uis.push(eventDef.ui)\n\n return combineEventUis(uis)\n}\n\nexport function sortEventSegs(segs, eventOrderSpecs: OrderSpec<EventApi>[]): Seg[] {\n let objs = segs.map(buildSegCompareObj)\n\n objs.sort((obj0, obj1) => compareByFieldSpecs(obj0, obj1, eventOrderSpecs))\n\n return objs.map((c) => c._seg)\n}\n\n// returns a object with all primitive props that can be compared\nexport function buildSegCompareObj(seg: Seg) {\n let { eventRange } = seg\n let eventDef = eventRange.def\n let range = eventRange.instance ? eventRange.instance.range : eventRange.range\n let start = range.start ? range.start.valueOf() : 0 // TODO: better support for open-range events\n let end = range.end ? range.end.valueOf() : 0 // \"\n\n return {\n ...eventDef.extendedProps,\n ...eventDef,\n id: eventDef.publicId,\n start,\n end,\n duration: end - start,\n allDay: Number(eventDef.allDay),\n _seg: seg, // for later retrieval\n }\n}\n\n// other stuff\n\nexport interface EventContentArg { // for *Content handlers\n event: EventApi\n timeText: string\n backgroundColor: string // TODO: add other EventUi props?\n borderColor: string //\n textColor: string //\n isDraggable: boolean\n isStartResizable: boolean\n isEndResizable: boolean\n isMirror: boolean\n isStart: boolean\n isEnd: boolean\n isPast: boolean\n isFuture: boolean\n isToday: boolean\n isSelected: boolean\n isDragging: boolean\n isResizing: boolean\n view: ViewApi // specifically for the API\n}\n\nexport type EventMountArg = MountArg<EventContentArg>\n\nexport function computeSegDraggable(seg: Seg, context: ViewContext) {\n let { pluginHooks } = context\n let transformers = pluginHooks.isDraggableTransformers\n let { def, ui } = seg.eventRange\n let val = ui.startEditable\n\n for (let transformer of transformers) {\n val = transformer(val, def, ui, context)\n }\n\n return val\n}\n\nexport function computeSegStartResizable(seg: Seg, context: ViewContext) {\n return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart\n}\n\nexport function computeSegEndResizable(seg: Seg, context: ViewContext) {\n return seg.isEnd && seg.eventRange.ui.durationEditable\n}\n\nexport function buildSegTimeText(\n seg: Seg,\n timeFormat: DateFormatter,\n context: ViewContext,\n defaultDisplayEventTime?: boolean, // defaults to true\n defaultDisplayEventEnd?: boolean, // defaults to true\n startOverride?: DateMarker,\n endOverride?: DateMarker,\n) {\n let { dateEnv, options } = context\n let { displayEventTime, displayEventEnd } = options\n let eventDef = seg.eventRange.def\n let eventInstance = seg.eventRange.instance\n\n if (displayEventTime == null) { displayEventTime = defaultDisplayEventTime !== false }\n if (displayEventEnd == null) { displayEventEnd = defaultDisplayEventEnd !== false }\n\n let wholeEventStart = eventInstance.range.start\n let wholeEventEnd = eventInstance.range.end\n let segStart = startOverride || seg.start || seg.eventRange.range.start\n let segEnd = endOverride || seg.end || seg.eventRange.range.end\n let isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf()\n let isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf()\n\n if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {\n segStart = isStartDay ? wholeEventStart : segStart\n segEnd = isEndDay ? wholeEventEnd : segEnd\n\n if (displayEventEnd && eventDef.hasEnd) {\n return dateEnv.formatRange(segStart, segEnd, timeFormat, {\n forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooooooooooo, give tzo if same date\n forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo,\n })\n }\n return dateEnv.format(segStart, timeFormat, {\n forcedTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooo, same\n })\n }\n\n return ''\n}\n\nexport function getSegMeta(seg: Seg, todayRange: DateRange, nowDate?: DateMarker) { // TODO: make arg order consistent with date util\n let segRange = seg.eventRange.range\n\n return {\n isPast: segRange.end < (nowDate || todayRange.start),\n isFuture: segRange.start >= (nowDate || todayRange.end),\n isToday: todayRange && rangeContainsMarker(todayRange, segRange.start),\n }\n}\n\nexport function getEventClassNames(props: EventContentArg) { // weird that we use this interface, but convenient\n let classNames: string[] = ['fc-event']\n\n if (props.isMirror) {\n classNames.push('fc-event-mirror')\n }\n\n if (props.isDraggable) {\n classNames.push('fc-event-draggable')\n }\n\n if (props.isStartResizable || props.isEndResizable) {\n classNames.push('fc-event-resizable')\n }\n\n if (props.isDragging) {\n classNames.push('fc-event-dragging')\n }\n\n if (props.isResizing) {\n classNames.push('fc-event-resizing')\n }\n\n if (props.isSelected) {\n classNames.push('fc-event-selected')\n }\n\n if (props.isStart) {\n classNames.push('fc-event-start')\n }\n\n if (props.isEnd) {\n classNames.push('fc-event-end')\n }\n\n if (props.isPast) {\n classNames.push('fc-event-past')\n }\n\n if (props.isToday) {\n classNames.push('fc-event-today')\n }\n\n if (props.isFuture) {\n classNames.push('fc-event-future')\n }\n\n return classNames\n}\n\nexport function buildEventRangeKey(eventRange: EventRenderRange) {\n return eventRange.instance\n ? eventRange.instance.instanceId\n : `${eventRange.def.defId}:${eventRange.range.start.toISOString()}`\n // inverse-background events don't have specific instances. TODO: better solution\n}\n\nexport function getSegAnchorAttrs(seg: Seg, context: ViewContext) {\n let { def, instance } = seg.eventRange\n let { url } = def\n\n if (url) {\n return { href: url }\n }\n\n let { emitter, options } = context\n let { eventInteractive } = options\n\n if (eventInteractive == null) {\n eventInteractive = def.interactive\n if (eventInteractive == null) {\n eventInteractive = Boolean(emitter.hasHandlers('eventClick'))\n }\n }\n\n // mock what happens in EventClicking\n if (eventInteractive) {\n // only attach keyboard-related handlers because click handler is already done in EventClicking\n return createAriaKeyboardAttrs((ev: UIEvent) => {\n emitter.trigger('eventClick', {\n el: ev.target as HTMLElement,\n event: new EventApi(context, def, instance),\n jsEvent: ev as MouseEvent,\n view: context.viewApi,\n })\n })\n }\n\n return {}\n}\n","import { DateRange, rangesEqual, OpenDateRange } from '../datelib/date-range'\nimport { DateInput, DateEnv } from '../datelib/env'\nimport { Duration } from '../datelib/duration'\nimport { createEventInstance } from './event-instance'\nimport { parseEventDef, refineEventDef } from './event-parse'\nimport { EventRenderRange, compileEventUi } from '../component/event-rendering'\nimport { EventUiHash } from '../component/event-ui'\nimport { CalendarContext } from '../CalendarContext'\nimport { refineProps, identity, Identity } from '../options'\n\n/*\nA data-structure for a date-range that will be visually displayed.\nContains other metadata like allDay, and anything else Components might like to store.\n\nTODO: in future, put otherProps in own object.\n*/\n\nexport interface OpenDateSpanInput {\n start?: DateInput\n end?: DateInput\n allDay?: boolean\n [otherProp: string]: any\n}\n\nexport interface DateSpanInput extends OpenDateSpanInput {\n start: DateInput\n end: DateInput\n}\n\nexport interface OpenDateSpan {\n range: OpenDateRange\n allDay: boolean\n [otherProp: string]: any\n}\n\nexport interface DateSpan extends OpenDateSpan {\n range: DateRange\n}\n\nexport interface RangeApi {\n start: Date\n end: Date\n startStr: string\n endStr: string\n}\n\nexport interface DateSpanApi extends RangeApi {\n allDay: boolean\n}\n\nexport interface RangeApiWithTimeZone extends RangeApi {\n timeZone: string\n}\n\nexport interface DatePointApi {\n date: Date\n dateStr: string\n allDay: boolean\n}\n\nconst STANDARD_PROPS = {\n start: identity as Identity<DateInput>,\n end: identity as Identity<DateInput>,\n allDay: Boolean,\n}\n\nexport function parseDateSpan(raw: DateSpanInput, dateEnv: DateEnv, defaultDuration?: Duration): DateSpan | null {\n let span = parseOpenDateSpan(raw, dateEnv)\n let { range } = span\n\n if (!range.start) {\n return null\n }\n\n if (!range.end) {\n if (defaultDuration == null) {\n return null\n }\n range.end = dateEnv.add(range.start, defaultDuration)\n }\n\n return span as DateSpan\n}\n\n/*\nTODO: somehow combine with parseRange?\nWill return null if the start/end props were present but parsed invalidly.\n*/\nexport function parseOpenDateSpan(raw: OpenDateSpanInput, dateEnv: DateEnv): OpenDateSpan | null {\n let { refined: standardProps, extra } = refineProps(raw, STANDARD_PROPS)\n let startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null\n let endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null\n let { allDay } = standardProps\n\n if (allDay == null) {\n allDay = (startMeta && startMeta.isTimeUnspecified) &&\n (!endMeta || endMeta.isTimeUnspecified)\n }\n\n return {\n range: {\n start: startMeta ? startMeta.marker : null,\n end: endMeta ? endMeta.marker : null,\n },\n allDay,\n ...extra,\n }\n}\n\nexport function isDateSpansEqual(span0: DateSpan, span1: DateSpan): boolean {\n return rangesEqual(span0.range, span1.range) &&\n span0.allDay === span1.allDay &&\n isSpanPropsEqual(span0, span1)\n}\n\n// the NON-DATE-RELATED props\nfunction isSpanPropsEqual(span0: DateSpan, span1: DateSpan): boolean {\n for (let propName in span1) {\n if (propName !== 'range' && propName !== 'allDay') {\n if (span0[propName] !== span1[propName]) {\n return false\n }\n }\n }\n\n // are there any props that span0 has that span1 DOESN'T have?\n // both have range/allDay, so no need to special-case.\n for (let propName in span0) {\n if (!(propName in span1)) {\n return false\n }\n }\n\n return true\n}\n\nexport function buildDateSpanApi(span: DateSpan, dateEnv: DateEnv): DateSpanApi {\n return {\n ...buildRangeApi(span.range, dateEnv, span.allDay),\n allDay: span.allDay,\n }\n}\n\nexport function buildRangeApiWithTimeZone(range: DateRange, dateEnv: DateEnv, omitTime?: boolean): RangeApiWithTimeZone {\n return {\n ...buildRangeApi(range, dateEnv, omitTime),\n timeZone: dateEnv.timeZone,\n }\n}\n\nexport function buildRangeApi(range: DateRange, dateEnv: DateEnv, omitTime?: boolean): RangeApi {\n return {\n start: dateEnv.toDate(range.start),\n end: dateEnv.toDate(range.end),\n startStr: dateEnv.formatIso(range.start, { omitTime }),\n endStr: dateEnv.formatIso(range.end, { omitTime }),\n }\n}\n\nexport function fabricateEventRange(dateSpan: DateSpan, eventUiBases: EventUiHash, context: CalendarContext): EventRenderRange {\n let res = refineEventDef({ editable: false }, context)\n let def = parseEventDef(\n res.refined,\n res.extra,\n '', // sourceId\n dateSpan.allDay,\n true, // hasEnd\n context,\n )\n\n return {\n def,\n ui: compileEventUi(def, eventUiBases),\n instance: createEventInstance(def.defId, dateSpan.range),\n range: dateSpan.range,\n isStart: true,\n isEnd: true,\n }\n}\n","import { __assign } from 'tslib'\nimport { PointerDragEvent } from './interactions/pointer'\nimport { buildDateSpanApi, DateSpanApi, DatePointApi, DateSpan } from './structs/date-span'\nimport { CalendarContext } from './CalendarContext'\nimport { ViewApi } from './ViewApi'\nimport { DateMarker, startOfDay } from './datelib/marker'\n\nexport interface DateClickApi extends DatePointApi {\n dayEl: HTMLElement\n jsEvent: UIEvent\n view: ViewApi\n}\n\nexport interface DateSelectionApi extends DateSpanApi {\n jsEvent: UIEvent\n view: ViewApi\n}\n\nexport type DatePointTransform = (dateSpan: DateSpan, context: CalendarContext) => any\nexport type DateSpanTransform = (dateSpan: DateSpan, context: CalendarContext) => any\n\nexport type CalendarInteraction = { destroy: () => void }\nexport type CalendarInteractionClass = { new(context: CalendarContext): CalendarInteraction }\n\nexport type OptionChangeHandler = (propValue: any, context: CalendarContext) => void\nexport type OptionChangeHandlerMap = { [propName: string]: OptionChangeHandler }\n\nexport interface DateSelectArg extends DateSpanApi {\n jsEvent: MouseEvent | null\n view: ViewApi\n}\n\nexport function triggerDateSelect(selection: DateSpan, pev: PointerDragEvent | null, context: CalendarContext & { viewApi?: ViewApi }) {\n context.emitter.trigger('select', {\n ...buildDateSpanApiWithContext(selection, context),\n jsEvent: pev ? pev.origEvent as MouseEvent : null, // Is this always a mouse event? See #4655\n view: context.viewApi || context.calendarApi.view,\n } as DateSelectArg)\n}\n\nexport interface DateUnselectArg {\n jsEvent: MouseEvent\n view: ViewApi\n}\n\nexport function triggerDateUnselect(pev: PointerDragEvent | null, context: CalendarContext & { viewApi?: ViewApi }) {\n context.emitter.trigger('unselect', {\n jsEvent: pev ? pev.origEvent : null,\n view: context.viewApi || context.calendarApi.view,\n } as DateUnselectArg)\n}\n\nexport function buildDateSpanApiWithContext(dateSpan: DateSpan, context: CalendarContext) {\n let props = {} as DateSpanApi\n\n for (let transform of context.pluginHooks.dateSpanTransforms) {\n __assign(props, transform(dateSpan, context))\n }\n\n __assign(props, buildDateSpanApi(dateSpan, context.dateEnv))\n\n return props\n}\n\n// Given an event's allDay status and start date, return what its fallback end date should be.\n// TODO: rename to computeDefaultEventEnd\nexport function getDefaultEventEnd(allDay: boolean, marker: DateMarker, context: CalendarContext): DateMarker {\n let { dateEnv, options } = context\n let end = marker\n\n if (allDay) {\n end = startOfDay(end)\n end = dateEnv.add(end, options.defaultAllDayEventDuration)\n } else {\n end = dateEnv.add(end, options.defaultTimedEventDuration)\n }\n\n return end\n}\n","import { Duration } from '../datelib/duration'\nimport { EventStore, createEmptyEventStore } from './event-store'\nimport { EventDef } from './event-def'\nimport { EventInstance } from './event-instance'\nimport { computeAlignedDayRange } from '../util/date'\nimport { startOfDay } from '../datelib/marker'\nimport { EventUiHash, EventUi } from '../component/event-ui'\nimport { compileEventUis } from '../component/event-rendering'\nimport { CalendarContext } from '../CalendarContext'\nimport { getDefaultEventEnd } from '../calendar-utils'\n\n/*\nA data structure for how to modify an EventDef/EventInstance within an EventStore\n*/\n\nexport interface EventMutation {\n datesDelta?: Duration // body start+end moving together. for dragging\n startDelta?: Duration // for resizing\n endDelta?: Duration // for resizing\n standardProps?: any // for the def. should not include extendedProps\n extendedProps?: any // for the def\n}\n\n// applies the mutation to ALL defs/instances within the event store\nexport function applyMutationToEventStore(\n eventStore: EventStore,\n eventConfigBase: EventUiHash,\n mutation: EventMutation,\n context: CalendarContext,\n): EventStore {\n let eventConfigs = compileEventUis(eventStore.defs, eventConfigBase)\n let dest = createEmptyEventStore()\n\n for (let defId in eventStore.defs) {\n let def = eventStore.defs[defId]\n\n dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, context)\n }\n\n for (let instanceId in eventStore.instances) {\n let instance = eventStore.instances[instanceId]\n let def = dest.defs[instance.defId] // important to grab the newly modified def\n\n dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, context)\n }\n\n return dest\n}\n\nexport type eventDefMutationApplier = (eventDef: EventDef, mutation: EventMutation, context: CalendarContext) => void\n\nfunction applyMutationToEventDef(eventDef: EventDef, eventConfig: EventUi, mutation: EventMutation, context: CalendarContext): EventDef {\n let standardProps = mutation.standardProps || {}\n\n // if hasEnd has not been specified, guess a good value based on deltas.\n // if duration will change, there's no way the default duration will persist,\n // and thus, we need to mark the event as having a real end\n if (\n standardProps.hasEnd == null &&\n eventConfig.durationEditable &&\n (mutation.startDelta || mutation.endDelta)\n ) {\n standardProps.hasEnd = true // TODO: is this mutation okay?\n }\n\n let copy: EventDef = {\n ...eventDef,\n ...standardProps,\n ui: { ...eventDef.ui, ...standardProps.ui }, // the only prop we want to recursively overlay\n }\n\n if (mutation.extendedProps) {\n copy.extendedProps = { ...copy.extendedProps, ...mutation.extendedProps }\n }\n\n for (let applier of context.pluginHooks.eventDefMutationAppliers) {\n applier(copy, mutation, context)\n }\n\n if (!copy.hasEnd && context.options.forceEventDuration) {\n copy.hasEnd = true\n }\n\n return copy\n}\n\nfunction applyMutationToEventInstance(\n eventInstance: EventInstance,\n eventDef: EventDef, // must first be modified by applyMutationToEventDef\n eventConfig: EventUi,\n mutation: EventMutation,\n context: CalendarContext,\n): EventInstance {\n let { dateEnv } = context\n let forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true\n let clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false\n let copy = { ...eventInstance } as EventInstance\n\n if (forceAllDay) {\n copy.range = computeAlignedDayRange(copy.range)\n }\n\n if (mutation.datesDelta && eventConfig.startEditable) {\n copy.range = {\n start: dateEnv.add(copy.range.start, mutation.datesDelta),\n end: dateEnv.add(copy.range.end, mutation.datesDelta),\n }\n }\n\n if (mutation.startDelta && eventConfig.durationEditable) {\n copy.range = {\n start: dateEnv.add(copy.range.start, mutation.startDelta),\n end: copy.range.end,\n }\n }\n\n if (mutation.endDelta && eventConfig.durationEditable) {\n copy.range = {\n start: copy.range.start,\n end: dateEnv.add(copy.range.end, mutation.endDelta),\n }\n }\n\n if (clearEnd) {\n copy.range = {\n start: copy.range.start,\n end: getDefaultEventEnd(eventDef.allDay, copy.range.start, context),\n }\n }\n\n // in case event was all-day but the supplied deltas were not\n // better util for this?\n if (eventDef.allDay) {\n copy.range = {\n start: startOfDay(copy.range.start),\n end: startOfDay(copy.range.end),\n }\n }\n\n // handle invalid durations\n if (copy.range.end < copy.range.start) {\n copy.range.end = getDefaultEventEnd(eventDef.allDay, copy.range.start, context)\n }\n\n return copy\n}\n","import { DateEnv } from './datelib/env'\nimport { CalendarData } from './reducers/data-types'\n\n// no public types yet. when there are, export from:\n// import {} from './api-type-deps'\n\nexport class ViewApi { // always represents the current view. otherwise, it'd need to change value every time date changes\n constructor(\n public type: string,\n private getCurrentData: () => CalendarData,\n private dateEnv: DateEnv,\n ) {\n }\n\n get calendar() {\n return this.getCurrentData().calendarApi\n }\n\n get title() {\n return this.getCurrentData().viewTitle\n }\n\n get activeStart() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start)\n }\n\n get activeEnd() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end)\n }\n\n get currentStart() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start)\n }\n\n get currentEnd() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end)\n }\n\n getOption(name: string) {\n return this.getCurrentData().options[name] // are the view-specific options\n }\n}\n","import { EventInput, EventInputTransformer } from './event-parse'\nimport { EventSourceFunc } from '../event-sources/func-event-source'\nimport { EventSource, EventSourceSuccessResponseHandler, EventSourceErrorResponseHandler } from './event-source'\nimport { JSON_FEED_EVENT_SOURCE_REFINERS } from '../event-sources/json-feed-event-source-refiners'\nimport { CalendarContext } from '../CalendarContext'\nimport { guid } from '../util/misc'\nimport { EVENT_UI_REFINERS, createEventUi, EventUiInput, EventUiRefined } from '../component/event-ui'\nimport { identity, Identity, RawOptionsFromRefiners, refineProps, RefinedOptionsFromRefiners } from '../options'\n\nconst EVENT_SOURCE_REFINERS = { // does NOT include EVENT_UI_REFINERS\n id: String,\n defaultAllDay: Boolean,\n url: String,\n format: String,\n events: identity as Identity<EventInput[] | EventSourceFunc>, // array or function\n eventDataTransform: identity as Identity<EventInputTransformer>,\n\n // for any network-related sources\n success: identity as Identity<EventSourceSuccessResponseHandler>,\n failure: identity as Identity<EventSourceErrorResponseHandler>,\n}\n\ntype BuiltInEventSourceRefiners = typeof EVENT_SOURCE_REFINERS &\n typeof JSON_FEED_EVENT_SOURCE_REFINERS\n\nexport interface EventSourceRefiners extends BuiltInEventSourceRefiners {\n // for extending\n}\n\nexport type EventSourceInputObject =\n EventUiInput &\n RawOptionsFromRefiners<Required<EventSourceRefiners>> // Required hack\n\nexport type EventSourceInput =\n EventSourceInputObject | // object in extended form\n EventInput[] |\n EventSourceFunc | // just a function\n string // a URL for a JSON feed\n\nexport type EventSourceRefined =\n EventUiRefined &\n RefinedOptionsFromRefiners<Required<EventSourceRefiners>> // Required hack\n\nexport function parseEventSource(\n raw: EventSourceInput,\n context: CalendarContext,\n refiners = buildEventSourceRefiners(context),\n): EventSource<any> | null {\n let rawObj: EventSourceInputObject\n\n if (typeof raw === 'string') {\n rawObj = { url: raw }\n } else if (typeof raw === 'function' || Array.isArray(raw)) {\n rawObj = { events: raw }\n } else if (typeof raw === 'object' && raw) { // not null\n rawObj = raw\n }\n\n if (rawObj) {\n let { refined, extra } = refineProps(rawObj, refiners)\n let metaRes = buildEventSourceMeta(refined, context)\n\n if (metaRes) {\n return {\n _raw: raw,\n isFetching: false,\n latestFetchId: '',\n fetchRange: null,\n defaultAllDay: refined.defaultAllDay,\n eventDataTransform: refined.eventDataTransform,\n success: refined.success,\n failure: refined.failure,\n publicId: refined.id || '',\n sourceId: guid(),\n sourceDefId: metaRes.sourceDefId,\n meta: metaRes.meta,\n ui: createEventUi(refined, context),\n extendedProps: extra,\n }\n }\n }\n\n return null\n}\n\nexport function buildEventSourceRefiners(context: CalendarContext) {\n return { ...EVENT_UI_REFINERS, ...EVENT_SOURCE_REFINERS, ...context.pluginHooks.eventSourceRefiners }\n}\n\nfunction buildEventSourceMeta(raw: EventSourceRefined, context: CalendarContext) {\n let defs = context.pluginHooks.eventSourceDefs\n\n for (let i = defs.length - 1; i >= 0; i -= 1) { // later-added plugins take precedence\n let def = defs[i]\n let meta = def.parseMeta(raw)\n\n if (meta) {\n return { sourceDefId: i, meta }\n }\n }\n\n return null\n}\n","import { DateEnv, DateInput } from '../datelib/env'\nimport { DateMarker } from '../datelib/marker'\nimport { Action } from './Action'\nimport { BaseOptionsRefined } from '../options'\n\nexport function reduceCurrentDate(currentDate: DateMarker, action: Action) {\n switch (action.type) {\n case 'CHANGE_DATE':\n return action.dateMarker\n default:\n return currentDate\n }\n}\n\nexport function getInitialDate(options: BaseOptionsRefined, dateEnv: DateEnv) {\n let initialDateInput = options.initialDate\n\n // compute the initial ambig-timezone date\n if (initialDateInput != null) {\n return dateEnv.createMarker(initialDateInput)\n }\n return getNow(options.now, dateEnv) // getNow already returns unzoned\n}\n\nexport function getNow(nowInput: DateInput | (() => DateInput), dateEnv: DateEnv) {\n if (typeof nowInput === 'function') {\n nowInput = nowInput()\n }\n\n if (nowInput == null) {\n return dateEnv.createNowMarker()\n }\n\n return dateEnv.createMarker(nowInput)\n}\n","import { DateMarker } from './datelib/marker'\nimport { createFormatter } from './datelib/formatting'\nimport { createDuration } from './datelib/duration'\nimport { parseDateSpan } from './structs/date-span'\nimport { parseEventSource } from './structs/event-source-parse'\nimport { parseEvent } from './structs/event-parse'\nimport { eventTupleToStore } from './structs/event-store'\nimport { ViewSpec } from './structs/view-spec'\nimport { PointerDragEvent } from './interactions/pointer'\nimport { getNow } from './reducers/current-date'\nimport { triggerDateSelect, triggerDateUnselect } from './calendar-utils'\nimport { hashValuesToArray } from './util/object'\nimport { CalendarDataManager } from './reducers/CalendarDataManager'\nimport { Action } from './reducers/Action'\nimport { EventSource } from './structs/event-source'\nimport { eventApiToStore, buildEventApis } from './api/EventApi'\n\n// public\nimport {\n CalendarOptions,\n CalendarListeners,\n DateInput,\n DurationInput,\n DateSpanInput,\n DateRangeInput,\n EventSourceInput,\n EventInput,\n EventSourceApi,\n EventApi,\n ViewApi,\n} from './api-type-deps'\n\nexport class CalendarApi {\n currentDataManager?: CalendarDataManager // will be set by CalendarDataManager\n\n getCurrentData() {\n return this.currentDataManager!.getCurrentData()\n }\n\n dispatch(action: Action) {\n return this.currentDataManager!.dispatch(action)\n }\n\n get view(): ViewApi { return this.getCurrentData().viewApi } // for public API\n\n batchRendering(callback: () => void) { // subclasses should implement\n callback()\n }\n\n updateSize() { // public\n this.trigger('_resize', true)\n }\n\n // Options\n // -----------------------------------------------------------------------------------------------------------------\n\n setOption<OptionName extends keyof CalendarOptions>(name: OptionName, val: CalendarOptions[OptionName]) {\n this.dispatch({\n type: 'SET_OPTION',\n optionName: name,\n rawOptionValue: val,\n })\n }\n\n getOption<OptionName extends keyof CalendarOptions>(name: OptionName): CalendarOptions[OptionName] { // getter, used externally. WTF TS\n return this.currentDataManager!.currentCalendarOptionsInput[name]\n }\n\n getAvailableLocaleCodes() {\n return Object.keys(this.getCurrentData().availableRawLocales)\n }\n\n // Trigger\n // -----------------------------------------------------------------------------------------------------------------\n\n on<ListenerName extends keyof CalendarListeners>(handlerName: ListenerName, handler: CalendarListeners[ListenerName]) {\n let { currentDataManager } = this\n\n if (currentDataManager.currentCalendarOptionsRefiners[handlerName]) {\n currentDataManager.emitter.on(handlerName, handler)\n } else {\n console.warn(`Unknown listener name '${handlerName}'`)\n }\n }\n\n off<ListenerName extends keyof CalendarListeners>(handlerName: ListenerName, handler: CalendarListeners[ListenerName]) {\n this.currentDataManager!.emitter.off(handlerName, handler)\n }\n\n // not meant for public use\n trigger<ListenerName extends keyof CalendarListeners>(handlerName: ListenerName, ...args: Parameters<CalendarListeners[ListenerName]>) {\n this.currentDataManager!.emitter.trigger(handlerName, ...args)\n }\n\n // View\n // -----------------------------------------------------------------------------------------------------------------\n\n changeView(viewType: string, dateOrRange?: DateRangeInput | DateInput) {\n this.batchRendering(() => {\n this.unselect()\n\n if (dateOrRange) {\n if ((dateOrRange as DateRangeInput).start && (dateOrRange as DateRangeInput).end) { // a range\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType,\n })\n this.dispatch({ // not very efficient to do two dispatches\n type: 'SET_OPTION',\n optionName: 'visibleRange',\n rawOptionValue: dateOrRange,\n })\n } else {\n let { dateEnv } = this.getCurrentData()\n\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType,\n dateMarker: dateEnv.createMarker(dateOrRange as DateInput),\n })\n }\n } else {\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType,\n })\n }\n })\n }\n\n // Forces navigation to a view for the given date.\n // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n // needs to change\n zoomTo(dateMarker: DateMarker, viewType?: string) {\n let state = this.getCurrentData()\n let spec\n\n viewType = viewType || 'day' // day is default zoom\n spec = state.viewSpecs[viewType] || this.getUnitViewSpec(viewType)\n\n this.unselect()\n\n if (spec) {\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType: spec.type,\n dateMarker,\n })\n } else {\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker,\n })\n }\n }\n\n // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\n // Preference is given to views that have corresponding buttons.\n private getUnitViewSpec(unit: string): ViewSpec | null {\n let { viewSpecs, toolbarConfig } = this.getCurrentData()\n let viewTypes = [].concat(\n toolbarConfig.header ? toolbarConfig.header.viewsWithButtons : [],\n toolbarConfig.footer ? toolbarConfig.footer.viewsWithButtons : [],\n )\n let i\n let spec\n\n for (let viewType in viewSpecs) {\n viewTypes.push(viewType)\n }\n\n for (i = 0; i < viewTypes.length; i += 1) {\n spec = viewSpecs[viewTypes[i]]\n if (spec) {\n if (spec.singleUnit === unit) {\n return spec\n }\n }\n }\n\n return null\n }\n\n // Current Date\n // -----------------------------------------------------------------------------------------------------------------\n\n prev() {\n this.unselect()\n this.dispatch({ type: 'PREV' })\n }\n\n next() {\n this.unselect()\n this.dispatch({ type: 'NEXT' })\n }\n\n prevYear() {\n let state = this.getCurrentData()\n this.unselect()\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.addYears(state.currentDate, -1),\n })\n }\n\n nextYear() {\n let state = this.getCurrentData()\n\n this.unselect()\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.addYears(state.currentDate, 1),\n })\n }\n\n today() {\n let state = this.getCurrentData()\n\n this.unselect()\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: getNow(state.calendarOptions.now, state.dateEnv),\n })\n }\n\n gotoDate(zonedDateInput) {\n let state = this.getCurrentData()\n\n this.unselect()\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.createMarker(zonedDateInput),\n })\n }\n\n incrementDate(deltaInput) { // is public facing\n let state = this.getCurrentData()\n let delta = createDuration(deltaInput)\n\n if (delta) { // else, warn about invalid input?\n this.unselect()\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.add(state.currentDate, delta),\n })\n }\n }\n\n // for external API\n getDate(): Date {\n let state = this.getCurrentData()\n return state.dateEnv.toDate(state.currentDate)\n }\n\n // Date Formatting Utils\n // -----------------------------------------------------------------------------------------------------------------\n\n formatDate(d: DateInput, formatter): string {\n let { dateEnv } = this.getCurrentData()\n\n return dateEnv.format(\n dateEnv.createMarker(d),\n createFormatter(formatter),\n )\n }\n\n // `settings` is for formatter AND isEndExclusive\n formatRange(d0: DateInput, d1: DateInput, settings) {\n let { dateEnv } = this.getCurrentData()\n\n return dateEnv.formatRange(\n dateEnv.createMarker(d0),\n dateEnv.createMarker(d1),\n createFormatter(settings),\n settings,\n )\n }\n\n formatIso(d: DateInput, omitTime?: boolean) {\n let { dateEnv } = this.getCurrentData()\n\n return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime })\n }\n\n // Date Selection / Event Selection / DayClick\n // -----------------------------------------------------------------------------------------------------------------\n\n // this public method receives start/end dates in any format, with any timezone\n // NOTE: args were changed from v3\n select(dateOrObj: DateInput | any, endDate?: DateInput) {\n let selectionInput: DateSpanInput\n\n if (endDate == null) {\n if (dateOrObj.start != null) {\n selectionInput = dateOrObj as DateSpanInput\n } else {\n selectionInput = {\n start: dateOrObj,\n end: null,\n }\n }\n } else {\n selectionInput = {\n start: dateOrObj,\n end: endDate,\n } as DateSpanInput\n }\n\n let state = this.getCurrentData()\n let selection = parseDateSpan(\n selectionInput,\n state.dateEnv,\n createDuration({ days: 1 }), // TODO: cache this?\n )\n\n if (selection) { // throw parse error otherwise?\n this.dispatch({ type: 'SELECT_DATES', selection })\n triggerDateSelect(selection, null, state)\n }\n }\n\n // public method\n unselect(pev?: PointerDragEvent) {\n let state = this.getCurrentData()\n\n if (state.dateSelection) {\n this.dispatch({ type: 'UNSELECT_DATES' })\n triggerDateUnselect(pev, state)\n }\n }\n\n // Public Events API\n // -----------------------------------------------------------------------------------------------------------------\n\n addEvent(eventInput: EventInput, sourceInput?: EventSourceApi | string | boolean): EventApi | null {\n if (eventInput instanceof EventApi) {\n let def = eventInput._def\n let instance = eventInput._instance\n let currentData = this.getCurrentData()\n\n // not already present? don't want to add an old snapshot\n if (!currentData.eventStore.defs[def.defId]) {\n this.dispatch({\n type: 'ADD_EVENTS',\n eventStore: eventTupleToStore({ def, instance }), // TODO: better util for two args?\n })\n this.triggerEventAdd(eventInput)\n }\n\n return eventInput\n }\n\n let state = this.getCurrentData()\n let eventSource: EventSource<any>\n\n if (sourceInput instanceof EventSourceApi) {\n eventSource = sourceInput.internalEventSource\n } else if (typeof sourceInput === 'boolean') {\n if (sourceInput) { // true. part of the first event source\n [eventSource] = hashValuesToArray(state.eventSources)\n }\n } else if (sourceInput != null) { // an ID. accepts a number too\n let sourceApi = this.getEventSourceById(sourceInput) // TODO: use an internal function\n\n if (!sourceApi) {\n console.warn(`Could not find an event source with ID \"${sourceInput}\"`) // TODO: test\n return null\n }\n eventSource = sourceApi.internalEventSource\n }\n\n let tuple = parseEvent(eventInput, eventSource, state, false)\n\n if (tuple) {\n let newEventApi = new EventApi(\n state,\n tuple.def,\n tuple.def.recurringDef ? null : tuple.instance,\n )\n this.dispatch({\n type: 'ADD_EVENTS',\n eventStore: eventTupleToStore(tuple),\n })\n this.triggerEventAdd(newEventApi)\n\n return newEventApi\n }\n\n return null\n }\n\n private triggerEventAdd(eventApi: EventApi) {\n let { emitter } = this.getCurrentData()\n\n emitter.trigger('eventAdd', {\n event: eventApi,\n relatedEvents: [],\n revert: () => {\n this.dispatch({\n type: 'REMOVE_EVENTS',\n eventStore: eventApiToStore(eventApi),\n })\n },\n })\n }\n\n // TODO: optimize\n getEventById(id: string): EventApi | null {\n let state = this.getCurrentData()\n let { defs, instances } = state.eventStore\n id = String(id)\n\n for (let defId in defs) {\n let def = defs[defId]\n\n if (def.publicId === id) {\n if (def.recurringDef) {\n return new EventApi(state, def, null)\n }\n\n for (let instanceId in instances) {\n let instance = instances[instanceId]\n\n if (instance.defId === def.defId) {\n return new EventApi(state, def, instance)\n }\n }\n }\n }\n\n return null\n }\n\n getEvents(): EventApi[] {\n let currentData = this.getCurrentData()\n\n return buildEventApis(currentData.eventStore, currentData)\n }\n\n removeAllEvents() {\n this.dispatch({ type: 'REMOVE_ALL_EVENTS' })\n }\n\n // Public Event Sources API\n // -----------------------------------------------------------------------------------------------------------------\n\n getEventSources(): EventSourceApi[] {\n let state = this.getCurrentData()\n let sourceHash = state.eventSources\n let sourceApis: EventSourceApi[] = []\n\n for (let internalId in sourceHash) {\n sourceApis.push(new EventSourceApi(state, sourceHash[internalId]))\n }\n\n return sourceApis\n }\n\n getEventSourceById(id: string): EventSourceApi | null {\n let state = this.getCurrentData()\n let sourceHash = state.eventSources\n id = String(id)\n\n for (let sourceId in sourceHash) {\n if (sourceHash[sourceId].publicId === id) {\n return new EventSourceApi(state, sourceHash[sourceId])\n }\n }\n\n return null\n }\n\n addEventSource(sourceInput: EventSourceInput): EventSourceApi {\n let state = this.getCurrentData()\n\n if (sourceInput instanceof EventSourceApi) {\n // not already present? don't want to add an old snapshot\n if (!state.eventSources[sourceInput.internalEventSource.sourceId]) {\n this.dispatch({\n type: 'ADD_EVENT_SOURCES',\n sources: [sourceInput.internalEventSource],\n })\n }\n\n return sourceInput\n }\n\n let eventSource = parseEventSource(sourceInput, state)\n\n if (eventSource) { // TODO: error otherwise?\n this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] })\n\n return new EventSourceApi(state, eventSource)\n }\n\n return null\n }\n\n removeAllEventSources() {\n this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' })\n }\n\n refetchEvents() {\n this.dispatch({ type: 'FETCH_EVENT_SOURCES', isRefetch: true })\n }\n\n // Scroll\n // -----------------------------------------------------------------------------------------------------------------\n\n scrollToTime(timeInput: DurationInput) {\n let time = createDuration(timeInput)\n\n if (time) {\n this.trigger('_scrollRequest', { time })\n }\n }\n}\n","import { __assign } from 'tslib'\nimport { EventDef } from '../structs/event-def'\nimport { EVENT_NON_DATE_REFINERS, EVENT_DATE_REFINERS } from '../structs/event-parse'\nimport { EventInstance } from '../structs/event-instance'\nimport { EVENT_UI_REFINERS, EventUiHash } from '../component/event-ui'\nimport { EventMutation, applyMutationToEventStore } from '../structs/event-mutation'\nimport { diffDates, computeAlignedDayRange } from '../util/date'\nimport { createDuration, durationsEqual } from '../datelib/duration'\nimport { createFormatter } from '../datelib/formatting'\nimport { CalendarContext } from '../CalendarContext'\nimport { getRelevantEvents, EventStore } from '../structs/event-store'\nimport { Dictionary } from '../options'\n\n// public\nimport {\n DateInput,\n DurationInput,\n FormatterInput,\n EventSourceApi,\n} from '../api-type-deps'\n\nexport class EventApi {\n _context: CalendarContext\n _def: EventDef\n _instance: EventInstance | null\n // instance will be null if expressing a recurring event that has no current instances,\n // OR if trying to validate an incoming external event that has no dates assigned\n\n constructor(context: CalendarContext, def: EventDef, instance?: EventInstance) {\n this._context = context\n this._def = def\n this._instance = instance || null\n }\n\n /*\n TODO: make event struct more responsible for this\n */\n setProp(name: string, val: any) {\n if (name in EVENT_DATE_REFINERS) {\n console.warn('Could not set date-related prop \\'name\\'. Use one of the date-related methods instead.')\n // TODO: make proper aliasing system?\n } else if (name === 'id') {\n val = EVENT_NON_DATE_REFINERS[name](val)\n\n this.mutate({\n standardProps: { publicId: val }, // hardcoded internal name\n })\n } else if (name in EVENT_NON_DATE_REFINERS) {\n val = EVENT_NON_DATE_REFINERS[name](val)\n\n this.mutate({\n standardProps: { [name]: val },\n })\n } else if (name in EVENT_UI_REFINERS) {\n let ui = EVENT_UI_REFINERS[name](val)\n\n if (name === 'color') {\n ui = { backgroundColor: val, borderColor: val }\n } else if (name === 'editable') {\n ui = { startEditable: val, durationEditable: val }\n } else {\n ui = { [name]: val }\n }\n\n this.mutate({\n standardProps: { ui },\n })\n } else {\n console.warn(`Could not set prop '${name}'. Use setExtendedProp instead.`)\n }\n }\n\n setExtendedProp(name: string, val: any) {\n this.mutate({\n extendedProps: { [name]: val },\n })\n }\n\n setStart(startInput: DateInput, options: { granularity?: string, maintainDuration?: boolean } = {}) {\n let { dateEnv } = this._context\n let start = dateEnv.createMarker(startInput)\n\n if (start && this._instance) { // TODO: warning if parsed bad\n let instanceRange = this._instance.range\n let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity) // what if parsed bad!?\n\n if (options.maintainDuration) {\n this.mutate({ datesDelta: startDelta })\n } else {\n this.mutate({ startDelta })\n }\n }\n }\n\n setEnd(endInput: DateInput | null, options: { granularity?: string } = {}) {\n let { dateEnv } = this._context\n let end\n\n if (endInput != null) {\n end = dateEnv.createMarker(endInput)\n\n if (!end) {\n return // TODO: warning if parsed bad\n }\n }\n\n if (this._instance) {\n if (end) {\n let endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity)\n this.mutate({ endDelta })\n } else {\n this.mutate({ standardProps: { hasEnd: false } })\n }\n }\n }\n\n setDates(startInput: DateInput, endInput: DateInput | null, options: { allDay?: boolean, granularity?: string } = {}) {\n let { dateEnv } = this._context\n let standardProps = { allDay: options.allDay } as any\n let start = dateEnv.createMarker(startInput)\n let end\n\n if (!start) {\n return // TODO: warning if parsed bad\n }\n\n if (endInput != null) {\n end = dateEnv.createMarker(endInput)\n\n if (!end) { // TODO: warning if parsed bad\n return\n }\n }\n\n if (this._instance) {\n let instanceRange = this._instance.range\n\n // when computing the diff for an event being converted to all-day,\n // compute diff off of the all-day values the way event-mutation does.\n if (options.allDay === true) {\n instanceRange = computeAlignedDayRange(instanceRange)\n }\n\n let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity)\n\n if (end) {\n let endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity)\n\n if (durationsEqual(startDelta, endDelta)) {\n this.mutate({ datesDelta: startDelta, standardProps })\n } else {\n this.mutate({ startDelta, endDelta, standardProps })\n }\n } else { // means \"clear the end\"\n standardProps.hasEnd = false\n this.mutate({ datesDelta: startDelta, standardProps })\n }\n }\n }\n\n moveStart(deltaInput: DurationInput) {\n let delta = createDuration(deltaInput)\n\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ startDelta: delta })\n }\n }\n\n moveEnd(deltaInput: DurationInput) {\n let delta = createDuration(deltaInput)\n\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ endDelta: delta })\n }\n }\n\n moveDates(deltaInput: DurationInput) {\n let delta = createDuration(deltaInput)\n\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ datesDelta: delta })\n }\n }\n\n setAllDay(allDay: boolean, options: { maintainDuration?: boolean } = {}) {\n let standardProps = { allDay } as any\n let { maintainDuration } = options\n\n if (maintainDuration == null) {\n maintainDuration = this._context.options.allDayMaintainDuration\n }\n\n if (this._def.allDay !== allDay) {\n standardProps.hasEnd = maintainDuration\n }\n\n this.mutate({ standardProps })\n }\n\n formatRange(formatInput: FormatterInput) {\n let { dateEnv } = this._context\n let instance = this._instance\n let formatter = createFormatter(formatInput)\n\n if (this._def.hasEnd) {\n return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {\n forcedStartTzo: instance.forcedStartTzo,\n forcedEndTzo: instance.forcedEndTzo,\n })\n }\n return dateEnv.format(instance.range.start, formatter, {\n forcedTzo: instance.forcedStartTzo,\n })\n }\n\n mutate(mutation: EventMutation) { // meant to be private. but plugins need access\n let instance = this._instance\n\n if (instance) {\n let def = this._def\n let context = this._context\n let { eventStore } = context.getCurrentData()\n let relevantEvents = getRelevantEvents(eventStore, instance.instanceId)\n let eventConfigBase = {\n '': { // HACK. always allow API to mutate events\n display: '',\n startEditable: true,\n durationEditable: true,\n constraints: [],\n overlap: null,\n allows: [],\n backgroundColor: '',\n borderColor: '',\n textColor: '',\n classNames: [],\n },\n } as EventUiHash\n\n relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context)\n\n let oldEvent = new EventApi(context, def, instance) // snapshot\n this._def = relevantEvents.defs[def.defId]\n this._instance = relevantEvents.instances[instance.instanceId]\n\n context.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: relevantEvents,\n })\n\n context.emitter.trigger('eventChange', {\n oldEvent,\n event: this,\n relatedEvents: buildEventApis(relevantEvents, context, instance),\n revert() {\n context.dispatch({\n type: 'RESET_EVENTS',\n eventStore, // the ORIGINAL store\n })\n },\n })\n }\n }\n\n remove() {\n let context = this._context\n let asStore = eventApiToStore(this)\n\n context.dispatch({\n type: 'REMOVE_EVENTS',\n eventStore: asStore,\n })\n\n context.emitter.trigger('eventRemove', {\n event: this,\n relatedEvents: [],\n revert() {\n context.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: asStore,\n })\n },\n })\n }\n\n get source(): EventSourceApi | null {\n let { sourceId } = this._def\n\n if (sourceId) {\n return new EventSourceApi(\n this._context,\n this._context.getCurrentData().eventSources[sourceId],\n )\n }\n return null\n }\n\n get start(): Date | null {\n return this._instance ?\n this._context.dateEnv.toDate(this._instance.range.start) :\n null\n }\n\n get end(): Date | null {\n return (this._instance && this._def.hasEnd) ?\n this._context.dateEnv.toDate(this._instance.range.end) :\n null\n }\n\n get startStr(): string {\n let instance = this._instance\n if (instance) {\n return this._context.dateEnv.formatIso(instance.range.start, {\n omitTime: this._def.allDay,\n forcedTzo: instance.forcedStartTzo,\n })\n }\n return ''\n }\n\n get endStr(): string {\n let instance = this._instance\n if (instance && this._def.hasEnd) {\n return this._context.dateEnv.formatIso(instance.range.end, {\n omitTime: this._def.allDay,\n forcedTzo: instance.forcedEndTzo,\n })\n }\n return ''\n }\n\n // computable props that all access the def\n // TODO: find a TypeScript-compatible way to do this at scale\n get id() { return this._def.publicId }\n get groupId() { return this._def.groupId }\n get allDay() { return this._def.allDay }\n get title() { return this._def.title }\n get url() { return this._def.url }\n get display() { return this._def.ui.display || 'auto' } // bad. just normalize the type earlier\n get startEditable() { return this._def.ui.startEditable }\n get durationEditable() { return this._def.ui.durationEditable }\n get constraint() { return this._def.ui.constraints[0] || null }\n get overlap() { return this._def.ui.overlap }\n get allow() { return this._def.ui.allows[0] || null }\n get backgroundColor() { return this._def.ui.backgroundColor }\n get borderColor() { return this._def.ui.borderColor }\n get textColor() { return this._def.ui.textColor }\n\n // NOTE: user can't modify these because Object.freeze was called in event-def parsing\n get classNames() { return this._def.ui.classNames }\n get extendedProps() { return this._def.extendedProps }\n\n toPlainObject(settings: { collapseExtendedProps?: boolean, collapseColor?: boolean } = {}): Dictionary {\n let def = this._def\n let { ui } = def\n let { startStr, endStr } = this\n let res: Dictionary = {}\n\n if (def.title) {\n res.title = def.title\n }\n\n if (startStr) {\n res.start = startStr\n }\n\n if (endStr) {\n res.end = endStr\n }\n\n if (def.publicId) {\n res.id = def.publicId\n }\n\n if (def.groupId) {\n res.groupId = def.groupId\n }\n\n if (def.url) {\n res.url = def.url\n }\n\n if (ui.display && ui.display !== 'auto') {\n res.display = ui.display\n }\n\n // TODO: what about recurring-event properties???\n // TODO: include startEditable/durationEditable/constraint/overlap/allow\n\n if (settings.collapseColor && ui.backgroundColor && ui.backgroundColor === ui.borderColor) {\n res.color = ui.backgroundColor\n } else {\n if (ui.backgroundColor) {\n res.backgroundColor = ui.backgroundColor\n }\n if (ui.borderColor) {\n res.borderColor = ui.borderColor\n }\n }\n\n if (ui.textColor) {\n res.textColor = ui.textColor\n }\n\n if (ui.classNames.length) {\n res.classNames = ui.classNames\n }\n\n if (Object.keys(def.extendedProps).length) {\n if (settings.collapseExtendedProps) {\n __assign(res, def.extendedProps)\n } else {\n res.extendedProps = def.extendedProps\n }\n }\n\n return res\n }\n\n toJSON() {\n return this.toPlainObject()\n }\n}\n\nexport function eventApiToStore(eventApi: EventApi): EventStore {\n let def = eventApi._def\n let instance = eventApi._instance\n\n return {\n defs: { [def.defId]: def },\n instances: instance\n ? { [instance.instanceId]: instance }\n : {},\n }\n}\n\nexport function buildEventApis(eventStore: EventStore, context: CalendarContext, excludeInstance?: EventInstance): EventApi[] {\n let { defs, instances } = eventStore\n let eventApis: EventApi[] = []\n let excludeInstanceId = excludeInstance ? excludeInstance.instanceId : ''\n\n for (let id in instances) {\n let instance = instances[id]\n let def = defs[instance.defId]\n\n if (instance.instanceId !== excludeInstanceId) {\n eventApis.push(new EventApi(context, def, instance))\n }\n }\n\n return eventApis\n}\n","import { DateMarker, arrayToUtcDate, dateToUtcArray } from './marker'\n\nexport interface CalendarSystem {\n getMarkerYear(d: DateMarker): number\n getMarkerMonth(d: DateMarker): number\n getMarkerDay(d: DateMarker): number\n arrayToMarker(arr: number[]): DateMarker\n markerToArray(d: DateMarker): number[]\n}\n\nlet calendarSystemClassMap = {}\n\nexport function registerCalendarSystem(name, theClass) {\n calendarSystemClassMap[name] = theClass\n}\n\nexport function createCalendarSystem(name) {\n return new calendarSystemClassMap[name]()\n}\n\nclass GregorianCalendarSystem implements CalendarSystem {\n getMarkerYear(d: DateMarker) {\n return d.getUTCFullYear()\n }\n\n getMarkerMonth(d: DateMarker) {\n return d.getUTCMonth()\n }\n\n getMarkerDay(d: DateMarker) {\n return d.getUTCDate()\n }\n\n arrayToMarker(arr) {\n return arrayToUtcDate(arr)\n }\n\n markerToArray(marker) {\n return dateToUtcArray(marker)\n }\n}\n\nregisterCalendarSystem('gregory', GregorianCalendarSystem)\n","import { isValidDate } from './marker'\n\nconst ISO_RE = /^\\s*(\\d{4})(-?(\\d{2})(-?(\\d{2})([T ](\\d{2}):?(\\d{2})(:?(\\d{2})(\\.(\\d+))?)?(Z|(([-+])(\\d{2})(:?(\\d{2}))?))?)?)?)?$/\n\nexport function parse(str) {\n let m = ISO_RE.exec(str)\n\n if (m) {\n let marker = new Date(Date.UTC(\n Number(m[1]),\n m[3] ? Number(m[3]) - 1 : 0,\n Number(m[5] || 1),\n Number(m[7] || 0),\n Number(m[8] || 0),\n Number(m[10] || 0),\n m[12] ? Number(`0.${m[12]}`) * 1000 : 0,\n ))\n\n if (isValidDate(marker)) {\n let timeZoneOffset = null\n\n if (m[13]) {\n timeZoneOffset = (m[15] === '-' ? -1 : 1) * (\n Number(m[16] || 0) * 60 +\n Number(m[18] || 0)\n )\n }\n\n return {\n marker,\n isTimeUnspecified: !m[6],\n timeZoneOffset,\n }\n }\n }\n\n return null\n}\n","import {\n DateMarker, addMs,\n diffHours, diffMinutes, diffSeconds, diffWholeWeeks, diffWholeDays,\n startOfDay, startOfHour, startOfMinute, startOfSecond,\n weekOfYear, arrayToUtcDate, dateToUtcArray, dateToLocalArray, arrayToLocalDate, timeAsMs, isValidDate,\n} from './marker'\nimport { CalendarSystem, createCalendarSystem } from './calendar-system'\nimport { Locale } from './locale'\nimport { NamedTimeZoneImpl, NamedTimeZoneImplClass } from './timezone'\nimport { Duration, asRoughYears, asRoughMonths, asRoughDays, asRoughMs } from './duration'\nimport { DateFormatter, CmdFormatterFunc } from './DateFormatter'\nimport { buildIsoString } from './formatting-utils'\nimport { parse } from './parsing'\nimport { isInt } from '../util/misc'\n\nexport type WeekNumberCalculation = 'local' | 'ISO' | ((m: Date) => number)\n\nexport interface DateEnvSettings {\n timeZone: string\n namedTimeZoneImpl?: NamedTimeZoneImplClass\n calendarSystem: string\n locale: Locale\n weekNumberCalculation?: WeekNumberCalculation\n firstDay?: number, // will override what the locale wants\n weekText?: string,\n weekTextLong?: string\n cmdFormatter?: CmdFormatterFunc\n defaultSeparator?: string\n}\n\nexport type DateInput = Date | string | number | number[]\n\nexport interface DateMarkerMeta {\n marker: DateMarker\n isTimeUnspecified: boolean\n forcedTzo: number | null\n}\n\nexport class DateEnv {\n timeZone: string\n namedTimeZoneImpl: NamedTimeZoneImpl\n canComputeOffset: boolean\n\n calendarSystem: CalendarSystem\n locale: Locale\n weekDow: number // which day begins the week\n weekDoy: number // which day must be within the year, for computing the first week number\n weekNumberFunc: any\n weekText: string // DON'T LIKE how options are confused with local\n weekTextLong: string\n cmdFormatter?: CmdFormatterFunc\n defaultSeparator: string\n\n constructor(settings: DateEnvSettings) {\n let timeZone = this.timeZone = settings.timeZone\n let isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC'\n\n if (settings.namedTimeZoneImpl && isNamedTimeZone) {\n this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone)\n }\n\n this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl)\n\n this.calendarSystem = createCalendarSystem(settings.calendarSystem)\n this.locale = settings.locale\n this.weekDow = settings.locale.week.dow\n this.weekDoy = settings.locale.week.doy\n\n if (settings.weekNumberCalculation === 'ISO') {\n this.weekDow = 1\n this.weekDoy = 4\n }\n\n if (typeof settings.firstDay === 'number') {\n this.weekDow = settings.firstDay\n }\n\n if (typeof settings.weekNumberCalculation === 'function') {\n this.weekNumberFunc = settings.weekNumberCalculation\n }\n\n this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText\n this.weekTextLong = (settings.weekTextLong != null ? settings.weekTextLong : settings.locale.options.weekTextLong) || this.weekText\n\n this.cmdFormatter = settings.cmdFormatter\n this.defaultSeparator = settings.defaultSeparator\n }\n\n // Creating / Parsing\n\n createMarker(input: DateInput): DateMarker {\n let meta = this.createMarkerMeta(input)\n if (meta === null) {\n return null\n }\n return meta.marker\n }\n\n createNowMarker(): DateMarker {\n if (this.canComputeOffset) {\n return this.timestampToMarker(new Date().valueOf())\n }\n // if we can't compute the current date val for a timezone,\n // better to give the current local date vals than UTC\n return arrayToUtcDate(dateToLocalArray(new Date()))\n }\n\n createMarkerMeta(input: DateInput): DateMarkerMeta {\n if (typeof input === 'string') {\n return this.parse(input)\n }\n\n let marker = null\n\n if (typeof input === 'number') {\n marker = this.timestampToMarker(input)\n } else if (input instanceof Date) {\n input = input.valueOf()\n\n if (!isNaN(input)) {\n marker = this.timestampToMarker(input)\n }\n } else if (Array.isArray(input)) {\n marker = arrayToUtcDate(input)\n }\n\n if (marker === null || !isValidDate(marker)) {\n return null\n }\n\n return { marker, isTimeUnspecified: false, forcedTzo: null }\n }\n\n parse(s: string) {\n let parts = parse(s)\n if (parts === null) {\n return null\n }\n\n let { marker } = parts\n let forcedTzo = null\n\n if (parts.timeZoneOffset !== null) {\n if (this.canComputeOffset) {\n marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000)\n } else {\n forcedTzo = parts.timeZoneOffset\n }\n }\n\n return { marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo }\n }\n\n // Accessors\n\n getYear(marker: DateMarker): number {\n return this.calendarSystem.getMarkerYear(marker)\n }\n\n getMonth(marker: DateMarker): number {\n return this.calendarSystem.getMarkerMonth(marker)\n }\n\n // Adding / Subtracting\n\n add(marker: DateMarker, dur: Duration): DateMarker {\n let a = this.calendarSystem.markerToArray(marker)\n a[0] += dur.years\n a[1] += dur.months\n a[2] += dur.days\n a[6] += dur.milliseconds\n return this.calendarSystem.arrayToMarker(a)\n }\n\n subtract(marker: DateMarker, dur: Duration): DateMarker {\n let a = this.calendarSystem.markerToArray(marker)\n a[0] -= dur.years\n a[1] -= dur.months\n a[2] -= dur.days\n a[6] -= dur.milliseconds\n return this.calendarSystem.arrayToMarker(a)\n }\n\n addYears(marker: DateMarker, n: number) {\n let a = this.calendarSystem.markerToArray(marker)\n a[0] += n\n return this.calendarSystem.arrayToMarker(a)\n }\n\n addMonths(marker: DateMarker, n: number) {\n let a = this.calendarSystem.markerToArray(marker)\n a[1] += n\n return this.calendarSystem.arrayToMarker(a)\n }\n\n // Diffing Whole Units\n\n diffWholeYears(m0: DateMarker, m1: DateMarker): number {\n let { calendarSystem } = this\n\n if (\n timeAsMs(m0) === timeAsMs(m1) &&\n calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&\n calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)\n ) {\n return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)\n }\n return null\n }\n\n diffWholeMonths(m0: DateMarker, m1: DateMarker): number {\n let { calendarSystem } = this\n\n if (\n timeAsMs(m0) === timeAsMs(m1) &&\n calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)\n ) {\n return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +\n (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12\n }\n return null\n }\n\n // Range / Duration\n\n greatestWholeUnit(m0: DateMarker, m1: DateMarker) {\n let n = this.diffWholeYears(m0, m1)\n\n if (n !== null) {\n return { unit: 'year', value: n }\n }\n\n n = this.diffWholeMonths(m0, m1)\n\n if (n !== null) {\n return { unit: 'month', value: n }\n }\n\n n = diffWholeWeeks(m0, m1)\n\n if (n !== null) {\n return { unit: 'week', value: n }\n }\n\n n = diffWholeDays(m0, m1)\n\n if (n !== null) {\n return { unit: 'day', value: n }\n }\n\n n = diffHours(m0, m1)\n\n if (isInt(n)) {\n return { unit: 'hour', value: n }\n }\n\n n = diffMinutes(m0, m1)\n\n if (isInt(n)) {\n return { unit: 'minute', value: n }\n }\n\n n = diffSeconds(m0, m1)\n\n if (isInt(n)) {\n return { unit: 'second', value: n }\n }\n\n return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() }\n }\n\n countDurationsBetween(m0: DateMarker, m1: DateMarker, d: Duration) {\n // TODO: can use greatestWholeUnit\n let diff\n\n if (d.years) {\n diff = this.diffWholeYears(m0, m1)\n if (diff !== null) {\n return diff / asRoughYears(d)\n }\n }\n\n if (d.months) {\n diff = this.diffWholeMonths(m0, m1)\n if (diff !== null) {\n return diff / asRoughMonths(d)\n }\n }\n\n if (d.days) {\n diff = diffWholeDays(m0, m1)\n if (diff !== null) {\n return diff / asRoughDays(d)\n }\n }\n\n return (m1.valueOf() - m0.valueOf()) / asRoughMs(d)\n }\n\n // Start-Of\n // these DON'T return zoned-dates. only UTC start-of dates\n\n startOf(m: DateMarker, unit: string) {\n if (unit === 'year') {\n return this.startOfYear(m)\n }\n if (unit === 'month') {\n return this.startOfMonth(m)\n }\n if (unit === 'week') {\n return this.startOfWeek(m)\n }\n if (unit === 'day') {\n return startOfDay(m)\n }\n if (unit === 'hour') {\n return startOfHour(m)\n }\n if (unit === 'minute') {\n return startOfMinute(m)\n }\n if (unit === 'second') {\n return startOfSecond(m)\n }\n return null\n }\n\n startOfYear(m: DateMarker): DateMarker {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n ])\n }\n\n startOfMonth(m: DateMarker): DateMarker {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n this.calendarSystem.getMarkerMonth(m),\n ])\n }\n\n startOfWeek(m: DateMarker): DateMarker {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n this.calendarSystem.getMarkerMonth(m),\n m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7),\n ])\n }\n\n // Week Number\n\n computeWeekNumber(marker: DateMarker): number {\n if (this.weekNumberFunc) {\n return this.weekNumberFunc(this.toDate(marker))\n }\n return weekOfYear(marker, this.weekDow, this.weekDoy)\n }\n\n // TODO: choke on timeZoneName: long\n format(marker: DateMarker, formatter: DateFormatter, dateOptions: { forcedTzo?: number } = {}) {\n return formatter.format(\n {\n marker,\n timeZoneOffset: dateOptions.forcedTzo != null ?\n dateOptions.forcedTzo :\n this.offsetForMarker(marker),\n },\n this,\n )\n }\n\n formatRange(\n start: DateMarker,\n end: DateMarker,\n formatter: DateFormatter,\n dateOptions: { forcedStartTzo?: number, forcedEndTzo?: number, isEndExclusive?: boolean, defaultSeparator?: string } = {},\n ) {\n if (dateOptions.isEndExclusive) {\n end = addMs(end, -1)\n }\n\n return formatter.formatRange(\n {\n marker: start,\n timeZoneOffset: dateOptions.forcedStartTzo != null ?\n dateOptions.forcedStartTzo :\n this.offsetForMarker(start),\n },\n {\n marker: end,\n timeZoneOffset: dateOptions.forcedEndTzo != null ?\n dateOptions.forcedEndTzo :\n this.offsetForMarker(end),\n },\n this,\n dateOptions.defaultSeparator,\n )\n }\n\n /*\n DUMB: the omitTime arg is dumb. if we omit the time, we want to omit the timezone offset. and if we do that,\n might as well use buildIsoString or some other util directly\n */\n formatIso(marker: DateMarker, extraOptions: any = {}) {\n let timeZoneOffset = null\n\n if (!extraOptions.omitTimeZoneOffset) {\n if (extraOptions.forcedTzo != null) {\n timeZoneOffset = extraOptions.forcedTzo\n } else {\n timeZoneOffset = this.offsetForMarker(marker)\n }\n }\n\n return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime)\n }\n\n // TimeZone\n\n timestampToMarker(ms: number) {\n if (this.timeZone === 'local') {\n return arrayToUtcDate(dateToLocalArray(new Date(ms)))\n } if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {\n return new Date(ms)\n }\n return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms))\n }\n\n offsetForMarker(m: DateMarker) {\n if (this.timeZone === 'local') {\n return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset() // convert \"inverse\" offset to \"normal\" offset\n } if (this.timeZone === 'UTC') {\n return 0\n } if (this.namedTimeZoneImpl) {\n return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m))\n }\n return null\n }\n\n // Conversion\n\n toDate(m: DateMarker, forcedTzo?: number): Date {\n if (this.timeZone === 'local') {\n return arrayToLocalDate(dateToUtcArray(m))\n }\n\n if (this.timeZone === 'UTC') {\n return new Date(m.valueOf()) // make sure it's a copy\n }\n\n if (!this.namedTimeZoneImpl) {\n return new Date(m.valueOf() - (forcedTzo || 0))\n }\n\n return new Date(\n m.valueOf() -\n this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60, // convert minutes -> ms\n )\n }\n}\n","import { LocaleInput } from './datelib/locale'\n\nexport const globalLocales: LocaleInput[] = []\n","import { mergeProps } from '../util/object'\nimport { globalLocales } from '../global-locales' // weird to be importing this\nimport { CalendarOptions, CalendarOptionsRefined } from '../options'\n\nexport type LocaleCodeArg = string | string[]\nexport type LocaleSingularArg = LocaleCodeArg | LocaleInput\n\nexport interface Locale {\n codeArg: LocaleCodeArg\n codes: string[]\n week: { dow: number, doy: number }\n simpleNumberFormat: Intl.NumberFormat\n options: CalendarOptionsRefined\n}\n\nexport interface LocaleInput extends CalendarOptions {\n code: string\n}\n\nexport type LocaleInputMap = { [code: string]: LocaleInput }\n\nexport interface RawLocaleInfo {\n map: LocaleInputMap\n defaultCode: string\n}\n\nconst MINIMAL_RAW_EN_LOCALE = {\n code: 'en',\n week: {\n dow: 0, // Sunday is the first day of the week\n doy: 4, // 4 days need to be within the year to be considered the first week\n },\n direction: 'ltr' as ('ltr' | 'rtl'), // TODO: make a real type for this\n buttonText: {\n prev: 'prev',\n next: 'next',\n prevYear: 'prev year',\n nextYear: 'next year',\n year: 'year',\n today: 'today',\n month: 'month',\n week: 'week',\n day: 'day',\n list: 'list',\n },\n weekText: 'W',\n weekTextLong: 'Week',\n closeHint: 'Close',\n timeHint: 'Time',\n eventHint: 'Event',\n allDayText: 'all-day',\n moreLinkText: 'more',\n noEventsText: 'No events to display',\n}\n\nconst RAW_EN_LOCALE = {\n ...MINIMAL_RAW_EN_LOCALE,\n // Includes things we don't want other locales to inherit,\n // things that derive from other translatable strings.\n buttonHints: {\n prev: 'Previous $0',\n next: 'Next $0',\n today(buttonText, unit) {\n return (unit === 'day')\n ? 'Today'\n : `This ${buttonText}`\n },\n },\n viewHint: '$0 view',\n navLinkHint: 'Go to $0',\n moreLinkHint(eventCnt: number) {\n return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`\n },\n}\n\nexport function organizeRawLocales(explicitRawLocales: LocaleInput[]): RawLocaleInfo {\n let defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en'\n let allRawLocales = globalLocales.concat(explicitRawLocales)\n let rawLocaleMap: LocaleInputMap = {\n en: RAW_EN_LOCALE,\n }\n\n for (let rawLocale of allRawLocales) {\n rawLocaleMap[rawLocale.code] = rawLocale\n }\n\n return {\n map: rawLocaleMap,\n defaultCode,\n }\n}\n\nexport function buildLocale(inputSingular: LocaleSingularArg, available: LocaleInputMap) {\n if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {\n return parseLocale(\n inputSingular.code,\n [inputSingular.code],\n inputSingular,\n )\n }\n return queryLocale(inputSingular, available)\n}\n\nfunction queryLocale(codeArg: LocaleCodeArg, available: LocaleInputMap): Locale {\n let codes = [].concat(codeArg || []) // will convert to array\n let raw = queryRawLocale(codes, available) || RAW_EN_LOCALE\n\n return parseLocale(codeArg, codes, raw)\n}\n\nfunction queryRawLocale(codes: string[], available: LocaleInputMap): LocaleInput {\n for (let i = 0; i < codes.length; i += 1) {\n let parts = codes[i].toLocaleLowerCase().split('-')\n\n for (let j = parts.length; j > 0; j -= 1) {\n let simpleId = parts.slice(0, j).join('-')\n\n if (available[simpleId]) {\n return available[simpleId]\n }\n }\n }\n return null\n}\n\nfunction parseLocale(codeArg: LocaleCodeArg, codes: string[], raw: LocaleInput): Locale {\n let merged = mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText'])\n\n delete merged.code // don't want this part of the options\n let { week } = merged\n delete merged.week\n\n return {\n codeArg,\n codes,\n week,\n simpleNumberFormat: new Intl.NumberFormat(codeArg),\n options: merged,\n }\n}\n","import { DateEnv } from './datelib/env'\nimport { createFormatter } from './datelib/formatting'\nimport { NativeFormatterOptions } from './datelib/formatting-native'\nimport { organizeRawLocales, buildLocale } from './datelib/locale'\nimport { BASE_OPTION_DEFAULTS } from './options'\n\n// public\nimport { DateInput } from './api-type-deps'\n\nexport interface FormatDateOptions extends NativeFormatterOptions {\n locale?: string\n}\n\nexport interface FormatRangeOptions extends FormatDateOptions {\n separator?: string\n isEndExclusive?: boolean\n}\n\nexport function formatDate(dateInput: DateInput, options: FormatDateOptions = {}) {\n let dateEnv = buildDateEnv(options)\n let formatter = createFormatter(options)\n let dateMeta = dateEnv.createMarkerMeta(dateInput)\n\n if (!dateMeta) { // TODO: warning?\n return ''\n }\n\n return dateEnv.format(dateMeta.marker, formatter, {\n forcedTzo: dateMeta.forcedTzo,\n })\n}\n\nexport function formatRange(\n startInput: DateInput,\n endInput: DateInput,\n options: FormatRangeOptions, // mixture of env and formatter settings\n) {\n let dateEnv = buildDateEnv(typeof options === 'object' && options ? options : {}) // pass in if non-null object\n let formatter = createFormatter(options)\n let startMeta = dateEnv.createMarkerMeta(startInput)\n let endMeta = dateEnv.createMarkerMeta(endInput)\n\n if (!startMeta || !endMeta) { // TODO: warning?\n return ''\n }\n\n return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {\n forcedStartTzo: startMeta.forcedTzo,\n forcedEndTzo: endMeta.forcedTzo,\n isEndExclusive: options.isEndExclusive,\n defaultSeparator: BASE_OPTION_DEFAULTS.defaultRangeSeparator,\n })\n}\n\n// TODO: more DRY and optimized\nfunction buildDateEnv(settings: FormatRangeOptions) {\n let locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map) // TODO: don't hardcode 'en' everywhere\n\n return new DateEnv({\n timeZone: BASE_OPTION_DEFAULTS.timeZone,\n calendarSystem: 'gregory',\n ...settings,\n locale,\n })\n}\n","import { EventInput } from './event-parse'\nimport { EventStore, parseEvents } from './event-store'\nimport { CalendarContext } from '../CalendarContext'\n\n/*\nUtils for converting raw business hour input into an EventStore,\nfor both rendering and the constraint system.\n*/\n\nexport type BusinessHoursInput = boolean | EventInput | EventInput[]\n\nconst DEF_DEFAULTS = {\n startTime: '09:00',\n endTime: '17:00',\n daysOfWeek: [1, 2, 3, 4, 5], // monday - friday\n display: 'inverse-background',\n classNames: 'fc-non-business',\n groupId: '_businessHours', // so multiple defs get grouped\n}\n\n/*\nTODO: pass around as EventDefHash!!!\n*/\nexport function parseBusinessHours(input: BusinessHoursInput, context: CalendarContext): EventStore {\n return parseEvents(\n refineInputs(input),\n null,\n context,\n )\n}\n\nfunction refineInputs(input: BusinessHoursInput) {\n let rawDefs\n\n if (input === true) {\n rawDefs = [{}] // will get DEF_DEFAULTS verbatim\n } else if (Array.isArray(input)) {\n // if specifying an array, every sub-definition NEEDS a day-of-week\n rawDefs = input.filter((rawDef) => rawDef.daysOfWeek)\n } else if (typeof input === 'object' && input) { // non-null object\n rawDefs = [input]\n } else { // is probably false\n rawDefs = []\n }\n\n rawDefs = rawDefs.map((rawDef) => ({ ...DEF_DEFAULTS, ...rawDef }))\n\n return rawDefs\n}\n","export interface Point {\n left: number\n top: number\n}\n\nexport interface Rect {\n left: number\n right: number\n top: number\n bottom: number\n}\n\nexport function pointInsideRect(point: Point, rect: Rect): boolean {\n return point.left >= rect.left &&\n point.left < rect.right &&\n point.top >= rect.top &&\n point.top < rect.bottom\n}\n\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\nexport function intersectRects(rect1: Rect, rect2: Rect): Rect | false {\n let res = {\n left: Math.max(rect1.left, rect2.left),\n right: Math.min(rect1.right, rect2.right),\n top: Math.max(rect1.top, rect2.top),\n bottom: Math.min(rect1.bottom, rect2.bottom),\n }\n\n if (res.left < res.right && res.top < res.bottom) {\n return res\n }\n\n return false\n}\n\nexport function translateRect(rect: Rect, deltaX: number, deltaY: number): Rect {\n return {\n left: rect.left + deltaX,\n right: rect.right + deltaX,\n top: rect.top + deltaY,\n bottom: rect.bottom + deltaY,\n }\n}\n\n// Returns a new point that will have been moved to reside within the given rectangle\nexport function constrainPoint(point: Point, rect: Rect): Point {\n return {\n left: Math.min(Math.max(point.left, rect.left), rect.right),\n top: Math.min(Math.max(point.top, rect.top), rect.bottom),\n }\n}\n\n// Returns a point that is the center of the given rectangle\nexport function getRectCenter(rect: Rect): Point {\n return {\n left: (rect.left + rect.right) / 2,\n top: (rect.top + rect.bottom) / 2,\n }\n}\n\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\nexport function diffPoints(point1: Point, point2: Point): Point {\n return {\n left: point1.left - point2.left,\n top: point1.top - point2.top,\n }\n}\n","let canVGrowWithinCell: boolean\n\nexport function getCanVGrowWithinCell() {\n if (canVGrowWithinCell == null) {\n canVGrowWithinCell = computeCanVGrowWithinCell()\n }\n return canVGrowWithinCell\n}\n\nfunction computeCanVGrowWithinCell() {\n // for SSR, because this function is call immediately at top-level\n // TODO: just make this logic execute top-level, immediately, instead of doing lazily\n if (typeof document === 'undefined') {\n return true\n }\n\n let el = document.createElement('div')\n el.style.position = 'absolute'\n el.style.top = '0px'\n el.style.left = '0px'\n el.innerHTML = '<table><tr><td><div></div></td></tr></table>'\n el.querySelector('table').style.height = '100px'\n el.querySelector('div').style.height = '100%'\n\n document.body.appendChild(el)\n\n let div = el.querySelector('div')\n let possible = div.offsetHeight > 0\n document.body.removeChild(el)\n return possible\n}\n","import { __assign } from 'tslib'\nimport { EventStore, createEmptyEventStore } from '../structs/event-store'\nimport { EventDef } from '../structs/event-def'\nimport { EventInteractionState } from '../interactions/event-interaction-state'\nimport { mapHash } from '../util/object'\nimport { memoize } from '../util/memoize'\nimport { EventUiHash, EventUi, combineEventUis } from './event-ui'\nimport { DateSpan } from '../structs/date-span'\n\nexport interface SplittableProps {\n businessHours: EventStore | null // is this really allowed to be null?\n dateSelection: DateSpan | null\n eventStore: EventStore\n eventUiBases: EventUiHash\n eventSelection: string\n eventDrag: EventInteractionState | null\n eventResize: EventInteractionState | null\n}\n\nconst EMPTY_EVENT_STORE = createEmptyEventStore() // for purecomponents. TODO: keep elsewhere\n\nexport abstract class Splitter<PropsType extends SplittableProps = SplittableProps> {\n private getKeysForEventDefs = memoize(this._getKeysForEventDefs)\n private splitDateSelection = memoize(this._splitDateSpan)\n private splitEventStore = memoize(this._splitEventStore)\n private splitIndividualUi = memoize(this._splitIndividualUi)\n private splitEventDrag = memoize(this._splitInteraction)\n private splitEventResize = memoize(this._splitInteraction)\n private eventUiBuilders = {} // TODO: typescript protection\n\n abstract getKeyInfo(props: PropsType): { [key: string]: { ui?: EventUi, businessHours?: EventStore } }\n abstract getKeysForDateSpan(dateSpan: DateSpan): string[]\n abstract getKeysForEventDef(eventDef: EventDef): string[]\n\n splitProps(props: PropsType): { [key: string]: SplittableProps } {\n let keyInfos = this.getKeyInfo(props)\n let defKeys = this.getKeysForEventDefs(props.eventStore)\n let dateSelections = this.splitDateSelection(props.dateSelection)\n let individualUi = this.splitIndividualUi(props.eventUiBases, defKeys) // the individual *bases*\n let eventStores = this.splitEventStore(props.eventStore, defKeys)\n let eventDrags = this.splitEventDrag(props.eventDrag)\n let eventResizes = this.splitEventResize(props.eventResize)\n let splitProps: { [key: string]: SplittableProps } = {}\n\n this.eventUiBuilders = mapHash(keyInfos, (info, key) => this.eventUiBuilders[key] || memoize(buildEventUiForKey))\n\n for (let key in keyInfos) {\n let keyInfo = keyInfos[key]\n let eventStore = eventStores[key] || EMPTY_EVENT_STORE\n let buildEventUi = this.eventUiBuilders[key]\n\n splitProps[key] = {\n businessHours: keyInfo.businessHours || props.businessHours,\n dateSelection: dateSelections[key] || null,\n eventStore,\n eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),\n eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',\n eventDrag: eventDrags[key] || null,\n eventResize: eventResizes[key] || null,\n }\n }\n\n return splitProps\n }\n\n private _splitDateSpan(dateSpan: DateSpan | null) {\n let dateSpans = {}\n\n if (dateSpan) {\n let keys = this.getKeysForDateSpan(dateSpan)\n\n for (let key of keys) {\n dateSpans[key] = dateSpan\n }\n }\n\n return dateSpans\n }\n\n private _getKeysForEventDefs(eventStore: EventStore) {\n return mapHash(eventStore.defs, (eventDef: EventDef) => this.getKeysForEventDef(eventDef))\n }\n\n private _splitEventStore(eventStore: EventStore, defKeys): { [key: string]: EventStore } {\n let { defs, instances } = eventStore\n let splitStores = {}\n\n for (let defId in defs) {\n for (let key of defKeys[defId]) {\n if (!splitStores[key]) {\n splitStores[key] = createEmptyEventStore()\n }\n\n splitStores[key].defs[defId] = defs[defId]\n }\n }\n\n for (let instanceId in instances) {\n let instance = instances[instanceId]\n\n for (let key of defKeys[instance.defId]) {\n if (splitStores[key]) { // must have already been created\n splitStores[key].instances[instanceId] = instance\n }\n }\n }\n\n return splitStores\n }\n\n private _splitIndividualUi(eventUiBases: EventUiHash, defKeys): { [key: string]: EventUiHash } {\n let splitHashes: { [key: string]: EventUiHash } = {}\n\n for (let defId in eventUiBases) {\n if (defId) { // not the '' key\n for (let key of defKeys[defId]) {\n if (!splitHashes[key]) {\n splitHashes[key] = {}\n }\n\n splitHashes[key][defId] = eventUiBases[defId]\n }\n }\n }\n\n return splitHashes\n }\n\n private _splitInteraction(interaction: EventInteractionState | null): { [key: string]: EventInteractionState } {\n let splitStates: { [key: string]: EventInteractionState } = {}\n\n if (interaction) {\n let affectedStores = this._splitEventStore(\n interaction.affectedEvents,\n this._getKeysForEventDefs(interaction.affectedEvents), // can't use cached. might be events from other calendar\n )\n\n // can't rely on defKeys because event data is mutated\n let mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents)\n let mutatedStores = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId)\n\n let populate = (key) => {\n if (!splitStates[key]) {\n splitStates[key] = {\n affectedEvents: affectedStores[key] || EMPTY_EVENT_STORE,\n mutatedEvents: mutatedStores[key] || EMPTY_EVENT_STORE,\n isEvent: interaction.isEvent,\n }\n }\n }\n\n for (let key in affectedStores) {\n populate(key)\n }\n\n for (let key in mutatedStores) {\n populate(key)\n }\n }\n\n return splitStates\n }\n}\n\nfunction buildEventUiForKey(allUi: EventUi | null, eventUiForKey: EventUi | null, individualUi: EventUiHash | null) {\n let baseParts = []\n\n if (allUi) {\n baseParts.push(allUi)\n }\n\n if (eventUiForKey) {\n baseParts.push(eventUiForKey)\n }\n\n let stuff = {\n '': combineEventUis(baseParts),\n }\n\n if (individualUi) {\n __assign(stuff, individualUi)\n }\n\n return stuff\n}\n","import { DateMarker, DAY_IDS } from '../datelib/marker'\nimport { rangeContainsMarker, DateRange } from '../datelib/date-range'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { Theme } from '../theme/Theme'\n\nexport interface DateMeta {\n dow: number\n isDisabled: boolean\n isOther: boolean // like, is it in the non-current \"other\" month\n isToday: boolean\n isPast: boolean\n isFuture: boolean\n}\n\nexport function getDateMeta(date: DateMarker, todayRange?: DateRange, nowDate?: DateMarker, dateProfile?: DateProfile): DateMeta {\n return {\n dow: date.getUTCDay(),\n isDisabled: Boolean(dateProfile && !rangeContainsMarker(dateProfile.activeRange, date)),\n isOther: Boolean(dateProfile && !rangeContainsMarker(dateProfile.currentRange, date)),\n isToday: Boolean(todayRange && rangeContainsMarker(todayRange, date)),\n isPast: Boolean(nowDate ? (date < nowDate) : todayRange ? (date < todayRange.start) : false),\n isFuture: Boolean(nowDate ? (date > nowDate) : todayRange ? (date >= todayRange.end) : false),\n }\n}\n\nexport function getDayClassNames(meta: DateMeta, theme: Theme) {\n let classNames: string[] = [\n 'fc-day',\n `fc-day-${DAY_IDS[meta.dow]}`,\n ]\n\n if (meta.isDisabled) {\n classNames.push('fc-day-disabled')\n } else {\n if (meta.isToday) {\n classNames.push('fc-day-today')\n classNames.push(theme.getClass('today'))\n }\n\n if (meta.isPast) {\n classNames.push('fc-day-past')\n }\n\n if (meta.isFuture) {\n classNames.push('fc-day-future')\n }\n\n if (meta.isOther) {\n classNames.push('fc-day-other')\n }\n }\n\n return classNames\n}\n\nexport function getSlotClassNames(meta: DateMeta, theme: Theme) {\n let classNames: string[] = [\n 'fc-slot',\n `fc-slot-${DAY_IDS[meta.dow]}`,\n ]\n\n if (meta.isDisabled) {\n classNames.push('fc-slot-disabled')\n } else {\n if (meta.isToday) {\n classNames.push('fc-slot-today')\n classNames.push(theme.getClass('today'))\n }\n\n if (meta.isPast) {\n classNames.push('fc-slot-past')\n }\n\n if (meta.isFuture) {\n classNames.push('fc-slot-future')\n }\n }\n\n return classNames\n}\n","import { createFormatter } from '../datelib/formatting'\nimport { DateMarker } from '../datelib/marker'\nimport { createAriaClickAttrs } from '../util/dom-event'\nimport { formatWithOrdinals } from '../util/misc'\nimport { ViewContext } from '../ViewContext'\n\nconst DAY_FORMAT = createFormatter({ year: 'numeric', month: 'long', day: 'numeric' })\nconst WEEK_FORMAT = createFormatter({ week: 'long' })\n\nexport function buildNavLinkAttrs(\n context: ViewContext,\n dateMarker: DateMarker,\n viewType = 'day',\n isTabbable = true,\n) {\n const { dateEnv, options, calendarApi } = context\n let dateStr = dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT)\n\n if (options.navLinks) {\n let zonedDate = dateEnv.toDate(dateMarker)\n\n const handleInteraction = (ev: UIEvent) => {\n let customAction =\n viewType === 'day' ? options.navLinkDayClick :\n viewType === 'week' ? options.navLinkWeekClick : null\n\n if (typeof customAction === 'function') {\n customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev)\n } else {\n if (typeof customAction === 'string') {\n viewType = customAction\n }\n calendarApi.zoomTo(dateMarker, viewType)\n }\n }\n\n return {\n title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr),\n 'data-navlink': '', // for legacy selectors. TODO: use className?\n ...(isTabbable\n ? createAriaClickAttrs(handleInteraction)\n : { onClick: handleInteraction }\n ),\n }\n }\n\n return { 'aria-label': dateStr }\n}\n","import { removeElement, applyStyle } from './dom-manip'\n\nlet _isRtlScrollbarOnLeft: boolean | null = null\n\nexport function getIsRtlScrollbarOnLeft() { // responsible for caching the computation\n if (_isRtlScrollbarOnLeft === null) {\n _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft()\n }\n return _isRtlScrollbarOnLeft\n}\n\nfunction computeIsRtlScrollbarOnLeft() { // creates an offscreen test element, then removes it\n let outerEl = document.createElement('div')\n applyStyle(outerEl, {\n position: 'absolute',\n top: -1000,\n left: 0,\n border: 0,\n padding: 0,\n overflow: 'scroll',\n direction: 'rtl',\n })\n outerEl.innerHTML = '<div></div>'\n\n document.body.appendChild(outerEl)\n let innerEl = outerEl.firstChild as HTMLElement\n let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left\n\n removeElement(outerEl)\n return res\n}\n","export interface ScrollbarWidths {\n x: number\n y: number // TODO: rename to vertical. less confusing when dealing with width/height verbage\n}\n\nlet _scrollbarWidths: ScrollbarWidths | undefined\n\nexport function getScrollbarWidths() { // TODO: way to force recompute?\n if (!_scrollbarWidths) {\n _scrollbarWidths = computeScrollbarWidths()\n }\n\n return _scrollbarWidths\n}\n\nfunction computeScrollbarWidths(): ScrollbarWidths {\n let el = document.createElement('div')\n el.style.overflow = 'scroll'\n el.style.position = 'absolute'\n el.style.top = '-9999px'\n el.style.left = '-9999px'\n document.body.appendChild(el)\n let res = computeScrollbarWidthsForEl(el)\n document.body.removeChild(el)\n return res\n}\n\n// WARNING: will include border\nexport function computeScrollbarWidthsForEl(el: HTMLElement): ScrollbarWidths {\n return {\n x: el.offsetHeight - el.clientHeight,\n y: el.offsetWidth - el.clientWidth,\n }\n}\n","import { intersectRects, Rect } from './geom'\nimport { getIsRtlScrollbarOnLeft } from './scrollbar-side'\nimport { computeScrollbarWidthsForEl } from './scrollbar-width'\n\nexport interface EdgeInfo {\n borderLeft: number\n borderRight: number\n borderTop: number\n borderBottom: number\n scrollbarLeft: number\n scrollbarRight: number\n scrollbarBottom: number\n paddingLeft?: number\n paddingRight?: number\n paddingTop?: number\n paddingBottom?: number\n}\n\nexport function computeEdges(el: HTMLElement, getPadding = false): EdgeInfo { // cache somehow?\n let computedStyle = window.getComputedStyle(el)\n let borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0\n let borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0\n let borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0\n let borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0\n let badScrollbarWidths = computeScrollbarWidthsForEl(el) // includes border!\n let scrollbarLeftRight = badScrollbarWidths.y - borderLeft - borderRight\n let scrollbarBottom = badScrollbarWidths.x - borderTop - borderBottom\n\n let res: EdgeInfo = {\n borderLeft,\n borderRight,\n borderTop,\n borderBottom,\n scrollbarBottom,\n scrollbarLeft: 0,\n scrollbarRight: 0,\n }\n\n if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?\n res.scrollbarLeft = scrollbarLeftRight\n } else {\n res.scrollbarRight = scrollbarLeftRight\n }\n\n if (getPadding) {\n res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0\n res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0\n res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0\n res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0\n }\n\n return res\n}\n\nexport function computeInnerRect(el, goWithinPadding = false, doFromWindowViewport?: boolean) {\n let outerRect = doFromWindowViewport ? el.getBoundingClientRect() : computeRect(el)\n let edges = computeEdges(el, goWithinPadding)\n let res = {\n left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,\n right: outerRect.right - edges.borderRight - edges.scrollbarRight,\n top: outerRect.top + edges.borderTop,\n bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom,\n }\n\n if (goWithinPadding) {\n res.left += edges.paddingLeft\n res.right -= edges.paddingRight\n res.top += edges.paddingTop\n res.bottom -= edges.paddingBottom\n }\n\n return res\n}\n\nexport function computeRect(el): Rect {\n let rect = el.getBoundingClientRect()\n\n return {\n left: rect.left + window.pageXOffset,\n top: rect.top + window.pageYOffset,\n right: rect.right + window.pageXOffset,\n bottom: rect.bottom + window.pageYOffset,\n }\n}\n\nexport function computeClippedClientRect(el: HTMLElement): Rect | null {\n let clippingParents = getClippingParents(el)\n let rect: Rect = el.getBoundingClientRect()\n\n for (let clippingParent of clippingParents) {\n let intersection = intersectRects(rect, clippingParent.getBoundingClientRect())\n if (intersection) {\n rect = intersection\n } else {\n return null\n }\n }\n\n return rect\n}\n\nexport function computeHeightAndMargins(el: HTMLElement) {\n return el.getBoundingClientRect().height + computeVMargins(el)\n}\n\nexport function computeVMargins(el: HTMLElement) {\n let computed = window.getComputedStyle(el)\n\n return parseInt(computed.marginTop, 10) +\n parseInt(computed.marginBottom, 10)\n}\n\n// does not return window\nexport function getClippingParents(el: HTMLElement): HTMLElement[] {\n let parents: HTMLElement[] = []\n\n while (el instanceof HTMLElement) { // will stop when gets to document or null\n let computedStyle = window.getComputedStyle(el)\n\n if (computedStyle.position === 'fixed') {\n break\n }\n\n if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {\n parents.push(el)\n }\n\n el = el.parentNode as HTMLElement\n }\n\n return parents\n}\n","// given a function that resolves a result asynchronously.\n// the function can either call passed-in success and failure callbacks,\n// or it can return a promise.\n// if you need to pass additional params to func, bind them first.\nexport function unpromisify(func, success, failure?) {\n // guard against success/failure callbacks being called more than once\n // and guard against a promise AND callback being used together.\n let isResolved = false\n let wrappedSuccess = function () { // eslint-disable-line func-names\n if (!isResolved) {\n isResolved = true\n success.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n }\n let wrappedFailure = function () { // eslint-disable-line func-names\n if (!isResolved) {\n isResolved = true\n if (failure) {\n failure.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n }\n }\n\n let res = func(wrappedSuccess, wrappedFailure)\n if (res && typeof res.then === 'function') {\n res.then(wrappedSuccess, wrappedFailure)\n }\n}\n","export interface HandlerFuncTypeHash {\n [eventName: string]: (...args: any[]) => any // with all properties required\n}\n\nexport class Emitter<HandlerFuncs extends HandlerFuncTypeHash> {\n private handlers: { [Prop in keyof HandlerFuncs]?: HandlerFuncs[Prop][] } = {}\n\n private options: Partial<HandlerFuncs>\n\n private thisContext: any = null\n\n setThisContext(thisContext) {\n this.thisContext = thisContext\n }\n\n setOptions(options: Partial<HandlerFuncs>) {\n this.options = options\n }\n\n on<Prop extends keyof HandlerFuncs>(type: Prop, handler: HandlerFuncs[Prop]) {\n addToHash(this.handlers, type, handler)\n }\n\n off<Prop extends keyof HandlerFuncs>(type: Prop, handler?: HandlerFuncs[Prop]) {\n removeFromHash(this.handlers, type, handler)\n }\n\n trigger<Prop extends keyof HandlerFuncs>(type: Prop, ...args: Parameters<HandlerFuncs[Prop]>) {\n let attachedHandlers = this.handlers[type] || []\n let optionHandler = this.options && this.options[type]\n let handlers = [].concat(optionHandler || [], attachedHandlers)\n\n for (let handler of handlers) {\n handler.apply(this.thisContext, args)\n }\n }\n\n hasHandlers(type: keyof HandlerFuncs): boolean {\n return Boolean(\n (this.handlers[type] && this.handlers[type].length) ||\n (this.options && this.options[type]),\n )\n }\n}\n\nfunction addToHash(hash, type, handler) {\n (hash[type] || (hash[type] = []))\n .push(handler)\n}\n\nfunction removeFromHash(hash, type, handler?) {\n if (handler) {\n if (hash[type]) {\n hash[type] = hash[type].filter((func) => func !== handler)\n }\n } else {\n delete hash[type] // remove all handler funcs for this type\n }\n}\n","/*\nRecords offset information for a set of elements, relative to an origin element.\nCan record the left/right OR the top/bottom OR both.\nProvides methods for querying the cache by position.\n*/\nexport class PositionCache {\n els: HTMLElement[] // assumed to be siblings\n originClientRect: ClientRect\n\n // arrays of coordinates (from topleft of originEl)\n // caller can access these directly\n lefts: any\n rights: any\n tops: any\n bottoms: any\n\n constructor(originEl: HTMLElement, els: HTMLElement[], isHorizontal: boolean, isVertical: boolean) {\n this.els = els\n\n let originClientRect = this.originClientRect = originEl.getBoundingClientRect() // relative to viewport top-left\n\n if (isHorizontal) {\n this.buildElHorizontals(originClientRect.left)\n }\n\n if (isVertical) {\n this.buildElVerticals(originClientRect.top)\n }\n }\n\n // Populates the left/right internal coordinate arrays\n buildElHorizontals(originClientLeft: number) {\n let lefts = []\n let rights = []\n\n for (let el of this.els) {\n let rect = el.getBoundingClientRect()\n lefts.push(rect.left - originClientLeft)\n rights.push(rect.right - originClientLeft)\n }\n\n this.lefts = lefts\n this.rights = rights\n }\n\n // Populates the top/bottom internal coordinate arrays\n buildElVerticals(originClientTop: number) {\n let tops = []\n let bottoms = []\n\n for (let el of this.els) {\n let rect = el.getBoundingClientRect()\n tops.push(rect.top - originClientTop)\n bottoms.push(rect.bottom - originClientTop)\n }\n\n this.tops = tops\n this.bottoms = bottoms\n }\n\n // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n // If no intersection is made, returns undefined.\n leftToIndex(leftPosition: number) {\n let { lefts, rights } = this\n let len = lefts.length\n let i\n\n for (i = 0; i < len; i += 1) {\n if (leftPosition >= lefts[i] && leftPosition < rights[i]) {\n return i\n }\n }\n\n return undefined // TODO: better\n }\n\n // Given a top offset (from document top), returns the index of the el that it vertically intersects.\n // If no intersection is made, returns undefined.\n topToIndex(topPosition: number) {\n let { tops, bottoms } = this\n let len = tops.length\n let i\n\n for (i = 0; i < len; i += 1) {\n if (topPosition >= tops[i] && topPosition < bottoms[i]) {\n return i\n }\n }\n\n return undefined // TODO: better\n }\n\n // Gets the width of the element at the given index\n getWidth(leftIndex: number) {\n return this.rights[leftIndex] - this.lefts[leftIndex]\n }\n\n // Gets the height of the element at the given index\n getHeight(topIndex: number) {\n return this.bottoms[topIndex] - this.tops[topIndex]\n }\n}\n","/* eslint max-classes-per-file: \"off\" */\n\n/*\nAn object for getting/setting scroll-related information for an element.\nInternally, this is done very differently for window versus DOM element,\nso this object serves as a common interface.\n*/\nexport abstract class ScrollController {\n abstract getScrollTop(): number\n abstract getScrollLeft(): number\n abstract setScrollTop(top: number): void\n abstract setScrollLeft(left: number): void\n abstract getClientWidth(): number\n abstract getClientHeight(): number\n abstract getScrollWidth(): number\n abstract getScrollHeight(): number\n\n getMaxScrollTop() {\n return this.getScrollHeight() - this.getClientHeight()\n }\n\n getMaxScrollLeft() {\n return this.getScrollWidth() - this.getClientWidth()\n }\n\n canScrollVertically() {\n return this.getMaxScrollTop() > 0\n }\n\n canScrollHorizontally() {\n return this.getMaxScrollLeft() > 0\n }\n\n canScrollUp() {\n return this.getScrollTop() > 0\n }\n\n canScrollDown() {\n return this.getScrollTop() < this.getMaxScrollTop()\n }\n\n canScrollLeft() {\n return this.getScrollLeft() > 0\n }\n\n canScrollRight() {\n return this.getScrollLeft() < this.getMaxScrollLeft()\n }\n}\n\nexport class ElementScrollController extends ScrollController {\n el: HTMLElement\n\n constructor(el: HTMLElement) {\n super()\n this.el = el\n }\n\n getScrollTop() {\n return this.el.scrollTop\n }\n\n getScrollLeft() {\n return this.el.scrollLeft\n }\n\n setScrollTop(top: number) {\n this.el.scrollTop = top\n }\n\n setScrollLeft(left: number) {\n this.el.scrollLeft = left\n }\n\n getScrollWidth() {\n return this.el.scrollWidth\n }\n\n getScrollHeight() {\n return this.el.scrollHeight\n }\n\n getClientHeight() {\n return this.el.clientHeight\n }\n\n getClientWidth() {\n return this.el.clientWidth\n }\n}\n\nexport class WindowScrollController extends ScrollController {\n getScrollTop() {\n return window.pageYOffset\n }\n\n getScrollLeft() {\n return window.pageXOffset\n }\n\n setScrollTop(n: number) {\n window.scroll(window.pageXOffset, n)\n }\n\n setScrollLeft(n: number) {\n window.scroll(n, window.pageYOffset)\n }\n\n getScrollWidth() {\n return document.documentElement.scrollWidth\n }\n\n getScrollHeight() {\n return document.documentElement.scrollHeight\n }\n\n getClientHeight() {\n return document.documentElement.clientHeight\n }\n\n getClientWidth() {\n return document.documentElement.clientWidth\n }\n}\n","import { CalendarOptionsRefined } from '../options'\n\nexport class Theme {\n // settings. default values are set after the class\n classes: any\n iconClasses: any\n rtlIconClasses: any\n baseIconClass: string // className that ALL icon elements for this theme should have\n iconOverrideOption: any // the name of the setting to use for icons. the subclass must set this.\n iconOverrideCustomButtonOption: any // the name of the setting, *within* each customButtons object, to use for icons\n iconOverridePrefix: string\n\n constructor(calendarOptions: CalendarOptionsRefined) {\n if (this.iconOverrideOption) {\n this.setIconOverride(\n calendarOptions[this.iconOverrideOption],\n )\n }\n }\n\n setIconOverride(iconOverrideHash) {\n let iconClassesCopy\n let buttonName\n\n if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object\n iconClassesCopy = { ...this.iconClasses }\n\n for (buttonName in iconOverrideHash) {\n iconClassesCopy[buttonName] = this.applyIconOverridePrefix(\n iconOverrideHash[buttonName],\n )\n }\n\n this.iconClasses = iconClassesCopy\n } else if (iconOverrideHash === false) {\n this.iconClasses = {}\n }\n }\n\n applyIconOverridePrefix(className) {\n let prefix = this.iconOverridePrefix\n\n if (prefix && className.indexOf(prefix) !== 0) { // if not already present\n className = prefix + className\n }\n\n return className\n }\n\n getClass(key) {\n return this.classes[key] || ''\n }\n\n getIconClass(buttonName, isRtl?: boolean) {\n let className\n\n if (isRtl && this.rtlIconClasses) {\n className = this.rtlIconClasses[buttonName] || this.iconClasses[buttonName]\n } else {\n className = this.iconClasses[buttonName]\n }\n\n if (className) {\n return `${this.baseIconClass} ${className}`\n }\n\n return ''\n }\n\n getCustomButtonIconClass(customButtonProps) {\n let className\n\n if (this.iconOverrideCustomButtonOption) {\n className = customButtonProps[this.iconOverrideCustomButtonOption]\n\n if (className) {\n return `${this.baseIconClass} ${this.applyIconOverridePrefix(className)}`\n }\n }\n\n return ''\n }\n}\n\nTheme.prototype.classes = {}\nTheme.prototype.iconClasses = {}\nTheme.prototype.baseIconClass = ''\nTheme.prototype.iconOverridePrefix = ''\n\nexport type ThemeClass = { new(calendarOptions: any): Theme }\n","import { __assign } from 'tslib'\nimport { Duration } from './datelib/duration'\nimport { Emitter } from './common/Emitter'\nimport { CalendarListeners } from './options'\n\nexport interface ScrollRequest {\n time?: Duration\n [otherProp: string]: any\n}\n\nexport type ScrollRequestHandler = (request: ScrollRequest) => boolean\n\nexport class ScrollResponder {\n queuedRequest: ScrollRequest\n\n constructor(\n private execFunc: ScrollRequestHandler,\n private emitter: Emitter<CalendarListeners>,\n private scrollTime: Duration,\n private scrollTimeReset: boolean,\n ) {\n emitter.on('_scrollRequest', this.handleScrollRequest)\n this.fireInitialScroll()\n }\n\n detach() {\n this.emitter.off('_scrollRequest', this.handleScrollRequest)\n }\n\n update(isDatesNew: boolean) {\n if (isDatesNew && this.scrollTimeReset) {\n this.fireInitialScroll() // will drain\n } else {\n this.drain()\n }\n }\n\n private fireInitialScroll() {\n this.handleScrollRequest({\n time: this.scrollTime,\n })\n }\n\n private handleScrollRequest = (request: ScrollRequest) => {\n this.queuedRequest = __assign({}, this.queuedRequest || {}, request)\n this.drain()\n }\n\n private drain() {\n if (this.queuedRequest && this.execFunc(this.queuedRequest)) {\n this.queuedRequest = null\n }\n }\n}\n","import { CalendarApi } from './CalendarApi'\nimport { ViewApi } from './ViewApi'\nimport { Theme } from './theme/Theme'\nimport { DateEnv } from './datelib/env'\nimport { PluginHooks } from './plugin-system-struct'\nimport { createContext, Context } from './vdom'\nimport { ScrollResponder, ScrollRequestHandler } from './ScrollResponder'\nimport { DateProfileGenerator } from './DateProfileGenerator'\nimport { ViewSpec } from './structs/view-spec'\nimport { CalendarData } from './reducers/data-types'\nimport { Action } from './reducers/Action'\nimport { Emitter } from './common/Emitter'\nimport { InteractionSettingsInput } from './interactions/interaction'\nimport { DateComponent } from './component/DateComponent'\nimport { CalendarContext } from './CalendarContext'\nimport { createDuration } from './datelib/duration'\nimport { ViewOptionsRefined, CalendarListeners } from './options'\n\nexport const ViewContextType: Context<any> = createContext<ViewContext>({} as any) // for Components\nexport type ResizeHandler = (force: boolean) => void\n\n/*\nit's important that ViewContext extends CalendarContext so that components that subscribe to ViewContext\ncan pass in their ViewContext to util functions that accept CalendarContext.\n*/\nexport interface ViewContext extends CalendarContext {\n options: ViewOptionsRefined // more specific than BaseOptionsRefined\n theme: Theme\n isRtl: boolean\n dateProfileGenerator: DateProfileGenerator\n viewSpec: ViewSpec\n viewApi: ViewApi\n addResizeHandler: (handler: ResizeHandler) => void\n removeResizeHandler: (handler: ResizeHandler) => void\n createScrollResponder: (execFunc: ScrollRequestHandler) => ScrollResponder\n registerInteractiveComponent: (component: DateComponent<any>, settingsInput: InteractionSettingsInput) => void\n unregisterInteractiveComponent: (component: DateComponent<any>) => void\n}\n\nexport function buildViewContext(\n viewSpec: ViewSpec,\n viewApi: ViewApi,\n viewOptions: ViewOptionsRefined,\n dateProfileGenerator: DateProfileGenerator,\n dateEnv: DateEnv,\n theme: Theme,\n pluginHooks: PluginHooks,\n dispatch: (action: Action) => void,\n getCurrentData: () => CalendarData,\n emitter: Emitter<CalendarListeners>,\n calendarApi: CalendarApi,\n registerInteractiveComponent: (component: DateComponent<any>, settingsInput: InteractionSettingsInput) => void,\n unregisterInteractiveComponent: (component: DateComponent<any>) => void,\n): ViewContext {\n return {\n dateEnv,\n options: viewOptions,\n pluginHooks,\n emitter,\n dispatch,\n getCurrentData,\n calendarApi,\n viewSpec,\n viewApi,\n dateProfileGenerator,\n theme,\n isRtl: viewOptions.direction === 'rtl',\n addResizeHandler(handler: ResizeHandler) {\n emitter.on('_resize', handler)\n },\n removeResizeHandler(handler: ResizeHandler) {\n emitter.off('_resize', handler)\n },\n createScrollResponder(execFunc: ScrollRequestHandler) {\n return new ScrollResponder(\n execFunc,\n emitter,\n createDuration(viewOptions.scrollTime),\n viewOptions.scrollTimeReset,\n )\n },\n registerInteractiveComponent,\n unregisterInteractiveComponent,\n }\n}\n","/* eslint max-classes-per-file: off */\n\nimport { __assign } from 'tslib'\nimport { Component, Ref } from './vdom'\nimport { ViewContextType, ViewContext } from './ViewContext'\nimport { compareObjs, EqualityFuncs, getUnequalProps } from './util/object'\nimport { Dictionary } from './options'\n\nexport abstract class PureComponent<Props=Dictionary, State=Dictionary> extends Component<Props, State> {\n static addPropsEquality = addPropsEquality\n static addStateEquality = addStateEquality\n static contextType: any = ViewContextType\n\n context: ViewContext\n propEquality: EqualityFuncs<Props>\n stateEquality: EqualityFuncs<State>\n\n debug: boolean\n\n shouldComponentUpdate(nextProps: Props, nextState: State) {\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(getUnequalProps(nextProps, this.props), getUnequalProps(nextState, this.state))\n }\n\n return !compareObjs(this.props, nextProps, this.propEquality) ||\n !compareObjs(this.state, nextState, this.stateEquality)\n }\n}\n\nPureComponent.prototype.propEquality = {}\nPureComponent.prototype.stateEquality = {}\n\nexport abstract class BaseComponent<Props=Dictionary, State=Dictionary> extends PureComponent<Props, State> {\n static contextType: any = ViewContextType\n\n context: ViewContext\n}\n\nfunction addPropsEquality(this: { prototype: { propEquality: any } }, propEquality) {\n let hash = Object.create(this.prototype.propEquality)\n __assign(hash, propEquality)\n this.prototype.propEquality = hash\n}\n\nfunction addStateEquality(this: { prototype: { stateEquality: any } }, stateEquality) {\n let hash = Object.create(this.prototype.stateEquality)\n __assign(hash, stateEquality)\n this.prototype.stateEquality = hash\n}\n\n// use other one\nexport function setRef<RefType>(ref: Ref<RefType> | void, current: RefType) {\n if (typeof ref === 'function') {\n ref(current)\n } else if (ref) {\n // see https://github.com/facebook/react/issues/13029\n (ref as any).current = current\n }\n}\n","import { BaseComponent } from '../vdom-util'\nimport { EventRenderRange } from './event-rendering'\nimport { EventInstanceHash } from '../structs/event-instance'\nimport { Hit } from '../interactions/hit'\nimport { elementClosest } from '../util/dom-manip'\nimport { guid } from '../util/misc'\nimport { Dictionary } from '../options'\n\nexport type DateComponentHash = { [uid: string]: DateComponent<any, any> }\n\n// NOTE: for fg-events, eventRange.range is NOT sliced,\n// thus, we need isStart/isEnd\nexport interface Seg {\n component?: DateComponent<any, any>\n isStart: boolean\n isEnd: boolean\n eventRange?: EventRenderRange\n [otherProp: string]: any // TODO: remove this. extending Seg will handle this\n el?: never\n // NOTE: can sometimes have start/end, which are important values :(\n}\n\nexport interface EventSegUiInteractionState {\n affectedInstances: EventInstanceHash\n segs: Seg[]\n isEvent: boolean\n}\n\n/*\nan INTERACTABLE date component\n\nPURPOSES:\n- hook up to fg, fill, and mirror renderers\n- interface for dragging and hits\n*/\nexport abstract class DateComponent<Props=Dictionary, State=Dictionary> extends BaseComponent<Props, State> {\n uid = guid()\n\n // Hit System\n // -----------------------------------------------------------------------------------------------------------------\n\n prepareHits() {\n }\n\n queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit | null {\n return null // this should be abstract\n }\n\n // Pointer Interaction Utils\n // -----------------------------------------------------------------------------------------------------------------\n\n isValidSegDownEl(el: HTMLElement) {\n return !(this.props as any).eventDrag && // HACK\n !(this.props as any).eventResize && // HACK\n !elementClosest(el, '.fc-event-mirror')\n }\n\n isValidDateDownEl(el: HTMLElement) {\n return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&\n !elementClosest(el, '.fc-more-link') && // a \"more..\" link\n !elementClosest(el, 'a[data-navlink]') && // a clickable nav link\n !elementClosest(el, '.fc-popover') // hack\n }\n}\n","import { guid } from './util/misc'\nimport { PluginDefInput, PluginDef, PluginHooks } from './plugin-system-struct'\nimport { isArraysEqual } from './util/array'\n\n// TODO: easier way to add new hooks? need to update a million things\n\nexport function createPlugin(input: PluginDefInput): PluginDef {\n return {\n id: guid(),\n deps: input.deps || [],\n reducers: input.reducers || [],\n isLoadingFuncs: input.isLoadingFuncs || [],\n contextInit: [].concat(input.contextInit || []),\n eventRefiners: input.eventRefiners || {},\n eventDefMemberAdders: input.eventDefMemberAdders || [],\n eventSourceRefiners: input.eventSourceRefiners || {},\n isDraggableTransformers: input.isDraggableTransformers || [],\n eventDragMutationMassagers: input.eventDragMutationMassagers || [],\n eventDefMutationAppliers: input.eventDefMutationAppliers || [],\n dateSelectionTransformers: input.dateSelectionTransformers || [],\n datePointTransforms: input.datePointTransforms || [],\n dateSpanTransforms: input.dateSpanTransforms || [],\n views: input.views || {},\n viewPropsTransformers: input.viewPropsTransformers || [],\n isPropsValid: input.isPropsValid || null,\n externalDefTransforms: input.externalDefTransforms || [],\n viewContainerAppends: input.viewContainerAppends || [],\n eventDropTransformers: input.eventDropTransformers || [],\n componentInteractions: input.componentInteractions || [],\n calendarInteractions: input.calendarInteractions || [],\n themeClasses: input.themeClasses || {},\n eventSourceDefs: input.eventSourceDefs || [],\n cmdFormatter: input.cmdFormatter,\n recurringTypes: input.recurringTypes || [],\n namedTimeZonedImpl: input.namedTimeZonedImpl,\n initialView: input.initialView || '',\n elementDraggingImpl: input.elementDraggingImpl,\n optionChangeHandlers: input.optionChangeHandlers || {},\n scrollGridImpl: input.scrollGridImpl || null,\n contentTypeHandlers: input.contentTypeHandlers || {},\n listenerRefiners: input.listenerRefiners || {},\n optionRefiners: input.optionRefiners || {},\n propSetHandlers: input.propSetHandlers || {},\n }\n}\n\nfunction buildPluginHooks(pluginDefs: PluginDef[], globalDefs: PluginDef[]): PluginHooks {\n let isAdded: { [pluginId: string]: boolean } = {}\n let hooks: PluginHooks = {\n reducers: [],\n isLoadingFuncs: [],\n contextInit: [],\n eventRefiners: {},\n eventDefMemberAdders: [],\n eventSourceRefiners: {},\n isDraggableTransformers: [],\n eventDragMutationMassagers: [],\n eventDefMutationAppliers: [],\n dateSelectionTransformers: [],\n datePointTransforms: [],\n dateSpanTransforms: [],\n views: {},\n viewPropsTransformers: [],\n isPropsValid: null,\n externalDefTransforms: [],\n viewContainerAppends: [],\n eventDropTransformers: [],\n componentInteractions: [],\n calendarInteractions: [],\n themeClasses: {},\n eventSourceDefs: [],\n cmdFormatter: null,\n recurringTypes: [],\n namedTimeZonedImpl: null,\n initialView: '',\n elementDraggingImpl: null,\n optionChangeHandlers: {},\n scrollGridImpl: null,\n contentTypeHandlers: {},\n listenerRefiners: {},\n optionRefiners: {},\n propSetHandlers: {},\n }\n\n function addDefs(defs: PluginDef[]) {\n for (let def of defs) {\n if (!isAdded[def.id]) {\n isAdded[def.id] = true\n addDefs(def.deps)\n hooks = combineHooks(hooks, def)\n }\n }\n }\n\n if (pluginDefs) {\n addDefs(pluginDefs)\n }\n\n addDefs(globalDefs)\n\n return hooks\n}\n\nexport function buildBuildPluginHooks() { // memoizes\n let currentOverrideDefs: PluginDef[] = []\n let currentGlobalDefs: PluginDef[] = []\n let currentHooks: PluginHooks\n\n return (overrideDefs: PluginDef[], globalDefs: PluginDef[]) => {\n if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {\n currentHooks = buildPluginHooks(overrideDefs, globalDefs)\n }\n currentOverrideDefs = overrideDefs\n currentGlobalDefs = globalDefs\n return currentHooks\n }\n}\n\nfunction combineHooks(hooks0: PluginHooks, hooks1: PluginHooks): PluginHooks {\n return {\n reducers: hooks0.reducers.concat(hooks1.reducers),\n isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),\n contextInit: hooks0.contextInit.concat(hooks1.contextInit),\n eventRefiners: { ...hooks0.eventRefiners, ...hooks1.eventRefiners },\n eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),\n eventSourceRefiners: { ...hooks0.eventSourceRefiners, ...hooks1.eventSourceRefiners },\n isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),\n eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),\n eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),\n dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),\n datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),\n dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),\n views: { ...hooks0.views, ...hooks1.views },\n viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),\n isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,\n externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),\n viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),\n eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),\n calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),\n componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),\n themeClasses: { ...hooks0.themeClasses, ...hooks1.themeClasses },\n eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),\n cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,\n recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),\n namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,\n initialView: hooks0.initialView || hooks1.initialView, // put earlier plugins FIRST\n elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl, // \"\n optionChangeHandlers: { ...hooks0.optionChangeHandlers, ...hooks1.optionChangeHandlers },\n scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,\n contentTypeHandlers: { ...hooks0.contentTypeHandlers, ...hooks1.contentTypeHandlers },\n listenerRefiners: { ...hooks0.listenerRefiners, ...hooks1.listenerRefiners },\n optionRefiners: { ...hooks0.optionRefiners, ...hooks1.optionRefiners },\n propSetHandlers: { ...hooks0.propSetHandlers, ...hooks1.propSetHandlers },\n }\n}\n","import { Theme } from './Theme'\n\nexport class StandardTheme extends Theme {\n}\n\nStandardTheme.prototype.classes = {\n root: 'fc-theme-standard', // TODO: compute this off of registered theme name\n tableCellShaded: 'fc-cell-shaded',\n buttonGroup: 'fc-button-group',\n button: 'fc-button fc-button-primary',\n buttonActive: 'fc-button-active',\n}\n\nStandardTheme.prototype.baseIconClass = 'fc-icon'\nStandardTheme.prototype.iconClasses = {\n close: 'fc-icon-x',\n prev: 'fc-icon-chevron-left',\n next: 'fc-icon-chevron-right',\n prevYear: 'fc-icon-chevrons-left',\n nextYear: 'fc-icon-chevrons-right',\n}\nStandardTheme.prototype.rtlIconClasses = {\n prev: 'fc-icon-chevron-right',\n next: 'fc-icon-chevron-left',\n prevYear: 'fc-icon-chevrons-right',\n nextYear: 'fc-icon-chevrons-left',\n}\n\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons' // TODO: make TS-friendly\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon'\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-'\n","import { ViewConfigHash, ViewComponentType } from './view-config'\nimport { ViewOptions } from '../options'\n\n/*\nRepresents information for an instantiatable View class along with settings\nthat are specific to that view. No other settings, like calendar-wide settings, are stored.\n*/\nexport interface ViewDef {\n type: string\n component: ViewComponentType\n overrides: ViewOptions\n defaults: ViewOptions\n}\n\nexport type ViewDefHash = { [viewType: string]: ViewDef }\n\nexport function compileViewDefs(defaultConfigs: ViewConfigHash, overrideConfigs: ViewConfigHash): ViewDefHash {\n let hash: ViewDefHash = {}\n let viewType: string\n\n for (viewType in defaultConfigs) {\n ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs)\n }\n\n for (viewType in overrideConfigs) {\n ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs)\n }\n\n return hash\n}\n\nfunction ensureViewDef(\n viewType: string,\n hash: ViewDefHash,\n defaultConfigs: ViewConfigHash,\n overrideConfigs: ViewConfigHash,\n): ViewDef | null {\n if (hash[viewType]) {\n return hash[viewType]\n }\n\n let viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs)\n\n if (viewDef) {\n hash[viewType] = viewDef\n }\n\n return viewDef\n}\n\nfunction buildViewDef(\n viewType: string,\n hash: ViewDefHash,\n defaultConfigs: ViewConfigHash,\n overrideConfigs: ViewConfigHash,\n): ViewDef | null {\n let defaultConfig = defaultConfigs[viewType]\n let overrideConfig = overrideConfigs[viewType]\n\n let queryProp = (name) => (\n (defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :\n ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null)\n )\n\n let theComponent = queryProp('component') as ViewComponentType\n let superType = queryProp('superType') as string\n let superDef: ViewDef | null = null\n\n if (superType) {\n if (superType === viewType) {\n throw new Error('Can\\'t have a custom view type that references itself')\n }\n\n superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs)\n }\n\n if (!theComponent && superDef) {\n theComponent = superDef.component\n }\n\n if (!theComponent) {\n return null // don't throw a warning, might be settings for a single-unit view\n }\n\n return {\n type: viewType,\n component: theComponent,\n defaults: {\n ...(superDef ? superDef.defaults : {}),\n ...(defaultConfig ? defaultConfig.rawOptions : {}),\n },\n overrides: {\n ...(superDef ? superDef.overrides : {}),\n ...(overrideConfig ? overrideConfig.rawOptions : {}),\n },\n }\n}\n","/* eslint max-classes-per-file: off */\n\nimport { Ref, createRef, ComponentChildren, createElement, RefObject, createContext, Context } from '../vdom'\nimport { setRef, BaseComponent } from '../vdom-util'\nimport { isPropsEqual } from '../util/object'\nimport { parseClassNames, ClassNamesInput } from '../util/html'\n\nexport type MountArg<ContentArg> = ContentArg & { el: HTMLElement }\nexport type DidMountHandler<TheMountArg extends { el: HTMLElement }> = (mountArg: TheMountArg) => void\nexport type WillUnmountHandler<TheMountArg extends { el: HTMLElement }> = (mountArg: TheMountArg) => void\n\nexport interface RenderHookProps<ContentArg> {\n hookProps: ContentArg\n classNames: ClassNamesGenerator<ContentArg>\n content: CustomContentGenerator<ContentArg>\n defaultContent?: DefaultContentGenerator<ContentArg>\n didMount: DidMountHandler<MountArg<ContentArg>>\n willUnmount: WillUnmountHandler<MountArg<ContentArg>>\n children: RenderHookPropsChildren\n elRef?: Ref<any>\n}\n\nexport type RenderHookPropsChildren = (\n rootElRef: Ref<any>,\n classNames: string[],\n innerElRef: Ref<any>,\n innerContent: ComponentChildren // if falsy, means it wasn't specified\n) => ComponentChildren\n\nexport interface ContentTypeHandlers {\n [contentKey: string]: () => ({\n render: (el: HTMLElement, contentVal: any) => void\n destroy?: () => void\n })\n}\n\n// NOTE: in JSX, you should always use this class with <HookProps> arg. otherwise, will default to any???\nexport class RenderHook<HookProps> extends BaseComponent<RenderHookProps<HookProps>> {\n private rootElRef = createRef()\n\n render() {\n let { props } = this\n let { hookProps } = props\n\n return (\n <MountHook hookProps={hookProps} didMount={props.didMount} willUnmount={props.willUnmount} elRef={this.handleRootEl}>\n {(rootElRef) => (\n <ContentHook hookProps={hookProps} content={props.content} defaultContent={props.defaultContent} backupElRef={this.rootElRef}>\n {(innerElRef, innerContent) => props.children(\n rootElRef,\n normalizeClassNames(props.classNames, hookProps),\n innerElRef,\n innerContent,\n )}\n </ContentHook>\n )}\n </MountHook>\n )\n }\n\n handleRootEl = (el: HTMLElement | null) => {\n setRef(this.rootElRef, el)\n\n if (this.props.elRef) {\n setRef(this.props.elRef, el)\n }\n }\n}\n\nexport interface ObjCustomContent {\n html: string\n domNodes: any[]\n [custom: string]: any // TODO: expose hook for plugins to add!\n}\n\nexport type CustomContent = ComponentChildren | ObjCustomContent\nexport type CustomContentGenerator<HookProps> = CustomContent | ((hookProps: HookProps) => CustomContent)\n\nexport type DefaultContentGenerator<HookProps> = (hookProps: HookProps) => ComponentChildren\n// TODO: rename to be about function, not default. use in above type\n\n// for forcing rerender of components that use the ContentHook\nexport const CustomContentRenderContext: Context<number> = createContext<number>(0)\n\nexport interface ContentHookProps<HookProps> {\n hookProps: HookProps // produced by FullCalendar internally, for rendering an entity/whatever\n content: CustomContentGenerator<HookProps> // the value of a user-hook, like `eventContent`\n defaultContent?: DefaultContentGenerator<HookProps> // if content not specified (TODO: just use content?)\n children: ( // for producing a wrapper around the content\n innerElRef: Ref<any>,\n innerContent: ComponentChildren // if falsy, means it wasn't specified\n ) => ComponentChildren\n backupElRef?: RefObject<any>\n}\n\ninterface ContentHookInnerProps<HookProps> extends ContentHookProps<HookProps> {\n renderId: number\n}\n\nexport function ContentHook<HookProps>(props: ContentHookProps<HookProps>) { // TODO: rename to CustomContentHook?\n return (\n <CustomContentRenderContext.Consumer>\n {(renderId) => (\n <ContentHookInner renderId={renderId} {...props} />\n )}\n </CustomContentRenderContext.Consumer>\n )\n}\n\nclass ContentHookInner<HookProps> extends BaseComponent<ContentHookInnerProps<HookProps>> {\n private innerElRef = createRef()\n\n private customContentInfo: {\n contentKey: string\n contentVal: any\n render: (el: HTMLElement, contentVal: any) => void\n destroy?: () => void\n }\n\n render() {\n return this.props.children(this.innerElRef, this.renderInnerContent())\n }\n\n componentDidMount() {\n this.updateCustomContent()\n }\n\n componentDidUpdate() {\n this.updateCustomContent()\n }\n\n componentWillUnmount() {\n if (this.customContentInfo && this.customContentInfo.destroy) {\n this.customContentInfo.destroy()\n }\n }\n\n private renderInnerContent() {\n let { customContentInfo } = this // only populated if using non-[p]react node(s)\n let innerContent = this.getInnerContent()\n let meta = this.getContentMeta(innerContent)\n\n // initial run, or content-type changing? (from vue -> react for example)\n if (!customContentInfo || customContentInfo.contentKey !== meta.contentKey) {\n // clearing old value\n if (customContentInfo) {\n if (customContentInfo.destroy) {\n customContentInfo.destroy()\n }\n customContentInfo = this.customContentInfo = null\n }\n // assigning new value\n if (meta.contentKey) {\n customContentInfo = this.customContentInfo = { // for non-[p]react\n contentKey: meta.contentKey,\n contentVal: innerContent[meta.contentKey],\n ...meta.buildLifecycleFuncs(),\n }\n }\n // updating\n } else if (customContentInfo) {\n customContentInfo.contentVal = innerContent[meta.contentKey]\n }\n\n return customContentInfo\n ? [] // signal that something was specified\n : innerContent // assume a [p]react vdom node. use it\n }\n\n private getInnerContent() {\n let { props } = this\n let innerContent = normalizeContent(props.content, props.hookProps)\n\n if (innerContent === undefined) { // use the default\n innerContent = normalizeContent(props.defaultContent, props.hookProps)\n }\n\n return innerContent == null ? null : innerContent // convert undefined to null (better for React)\n }\n\n private getContentMeta(innerContent: any) {\n let { contentTypeHandlers } = this.context.pluginHooks\n let contentKey = ''\n let buildLifecycleFuncs = null\n\n if (innerContent) { // allowed to be null, for convenience to caller\n for (let searchKey in contentTypeHandlers) {\n if (innerContent[searchKey] !== undefined) {\n contentKey = searchKey\n buildLifecycleFuncs = contentTypeHandlers[searchKey]\n break\n }\n }\n }\n\n return { contentKey, buildLifecycleFuncs }\n }\n\n private updateCustomContent() {\n if (this.customContentInfo) { // for non-[p]react\n this.customContentInfo.render(\n this.innerElRef.current || this.props.backupElRef.current, // the element to render into\n this.customContentInfo.contentVal,\n )\n }\n }\n}\n\nexport interface MountHookProps<ContentArg> {\n hookProps: ContentArg\n didMount: DidMountHandler<MountArg<ContentArg>>\n willUnmount: WillUnmountHandler<MountArg<ContentArg>>\n children: (rootElRef: Ref<any>) => ComponentChildren\n elRef?: Ref<any> // maybe get rid of once we have better API for caller to combine refs\n}\n\nexport class MountHook<ContentArg> extends BaseComponent<MountHookProps<ContentArg>> {\n rootEl: HTMLElement\n\n render() {\n return this.props.children(this.handleRootEl)\n }\n\n componentDidMount() {\n let callback = this.props.didMount\n\n if (callback) {\n callback({ ...this.props.hookProps, el: this.rootEl })\n }\n }\n\n componentWillUnmount() {\n let callback = this.props.willUnmount\n\n if (callback) {\n callback({ ...this.props.hookProps, el: this.rootEl })\n }\n }\n\n private handleRootEl = (rootEl: HTMLElement) => {\n this.rootEl = rootEl\n\n if (this.props.elRef) {\n setRef(this.props.elRef, rootEl)\n }\n }\n}\n\nexport function buildClassNameNormalizer<HookProps>() { // TODO: general deep-memoizer?\n let currentGenerator: ClassNamesGenerator<HookProps>\n let currentHookProps: HookProps\n let currentClassNames: string[] = []\n\n return (generator: ClassNamesGenerator<HookProps>, hookProps: HookProps) => {\n if (!currentHookProps || !isPropsEqual(currentHookProps, hookProps) || generator !== currentGenerator) {\n currentGenerator = generator\n currentHookProps = hookProps\n currentClassNames = normalizeClassNames(generator, hookProps)\n }\n\n return currentClassNames\n }\n}\n\nexport type ClassNamesGenerator<HookProps> = ClassNamesInput | ((hookProps: HookProps) => ClassNamesInput)\n\nfunction normalizeClassNames<HookProps>(classNames: ClassNamesGenerator<HookProps>, hookProps: HookProps): string[] {\n if (typeof classNames === 'function') {\n classNames = classNames(hookProps)\n }\n\n return parseClassNames(classNames)\n}\n\nfunction normalizeContent(input, hookProps) {\n if (typeof input === 'function') {\n return input(hookProps, createElement) // give the function the vdom-creation func\n }\n return input\n}\n","import { ViewSpec } from '../structs/view-spec'\nimport { MountHook, buildClassNameNormalizer, MountArg } from './render-hook'\nimport { ComponentChildren, createElement, Ref } from '../vdom'\nimport { BaseComponent } from '../vdom-util'\nimport { ViewApi } from '../ViewApi'\n\nexport interface ViewRootProps {\n viewSpec: ViewSpec\n children: (rootElRef: Ref<any>, classNames: string[]) => ComponentChildren\n elRef?: Ref<any>\n}\n\nexport interface ViewContentArg {\n view: ViewApi\n}\n\nexport type ViewMountArg = MountArg<ViewContentArg>\n\nexport class ViewRoot extends BaseComponent<ViewRootProps> {\n normalizeClassNames = buildClassNameNormalizer<ViewContentArg>()\n\n render() {\n let { props, context } = this\n let { options } = context\n let hookProps: ViewContentArg = { view: context.viewApi }\n let customClassNames = this.normalizeClassNames(options.viewClassNames, hookProps)\n\n return (\n <MountHook\n hookProps={hookProps}\n didMount={options.viewDidMount}\n willUnmount={options.viewWillUnmount}\n elRef={props.elRef}\n >\n {(rootElRef) => props.children(\n rootElRef,\n [`fc-${props.viewSpec.type}-view`, 'fc-view'].concat(customClassNames),\n )}\n </MountHook>\n )\n }\n}\n","import { ViewProps } from '../View'\nimport { mapHash } from '../util/object'\nimport { ComponentType, Component, createElement } from '../vdom'\nimport { ViewRoot } from '../common/ViewRoot'\nimport { RenderHook, MountArg } from '../common/render-hook'\nimport { ViewContext, ViewContextType } from '../ViewContext'\nimport { ViewOptions } from '../options'\nimport { Duration } from '../datelib/duration'\n\n/*\nA view-config represents information for either:\nA) creating a new instantiatable view class. in which case, supplied a class/type in addition to options, OR\nB) options to customize an existing view, in which case only provides options.\n*/\n\nexport type ViewComponent = Component<ViewProps> // an instance\nexport type ViewComponentType = ComponentType<ViewProps>\n\nexport type ViewConfigInput = ViewComponentType | ViewOptions\nexport type ViewConfigInputHash = { [viewType: string]: ViewConfigInput }\n\nexport interface ViewConfig {\n superType: string\n component: ViewComponentType | null\n rawOptions: ViewOptions\n}\n\nexport type ViewConfigHash = { [viewType: string]: ViewConfig }\n\nexport function parseViewConfigs(inputs: ViewConfigInputHash): ViewConfigHash {\n return mapHash(inputs, parseViewConfig)\n}\n\nfunction parseViewConfig(input: ViewConfigInput): ViewConfig {\n let rawOptions: ViewOptions = typeof input === 'function' ?\n { component: input } :\n input\n let { component } = rawOptions\n\n if (rawOptions.content) {\n component = createViewHookComponent(rawOptions)\n // TODO: remove content/classNames/didMount/etc from options?\n }\n\n return {\n superType: rawOptions.type as any,\n component: component as any,\n rawOptions, // includes type and component too :(\n }\n}\n\nexport interface SpecificViewContentArg extends ViewProps {\n nextDayThreshold: Duration\n}\n\nexport type SpecificViewMountArg = MountArg<SpecificViewContentArg>\n\nfunction createViewHookComponent(options: ViewOptions) {\n return (viewProps: ViewProps) => (\n <ViewContextType.Consumer>\n {(context: ViewContext) => (\n <ViewRoot viewSpec={context.viewSpec}>\n {(viewElRef, viewClassNames) => {\n let hookProps: SpecificViewContentArg = {\n ...viewProps,\n nextDayThreshold: context.options.nextDayThreshold,\n }\n return (\n <RenderHook\n hookProps={hookProps}\n classNames={options.classNames as any}\n content={options.content as any}\n didMount={options.didMount as any}\n willUnmount={options.willUnmount as any}\n elRef={viewElRef}\n >\n {(rootElRef, customClassNames, innerElRef, innerContent) => (\n <div className={viewClassNames.concat(customClassNames).join(' ')} ref={rootElRef}>\n {innerContent}\n </div>\n )}\n </RenderHook>\n )\n }}\n </ViewRoot>\n )}\n </ViewContextType.Consumer>\n )\n}\n","import { ViewDef, compileViewDefs } from './view-def'\nimport { Duration, createDuration, greatestDurationDenominator, DurationInput } from '../datelib/duration'\nimport { mapHash } from '../util/object'\nimport { ViewOptions, CalendarOptions, BASE_OPTION_DEFAULTS } from '../options'\nimport { ViewConfigInputHash, parseViewConfigs, ViewConfigHash, ViewComponentType } from './view-config'\n\n/*\nRepresents everything needed to instantiate a new view instance,\nincluding options that have been compiled from view-specific and calendar-wide options,\nas well as duration information.\n\nOverall flow:\nViewConfig -> ViewDef -> ViewSpec\n*/\nexport interface ViewSpec {\n type: string\n component: ViewComponentType\n duration: Duration\n durationUnit: string\n singleUnit: string\n optionDefaults: ViewOptions\n optionOverrides: ViewOptions\n buttonTextOverride: string\n buttonTextDefault: string\n buttonTitleOverride: string | ((...args: any[]) => string)\n buttonTitleDefault: string | ((...args: any[]) => string)\n}\n\nexport type ViewSpecHash = { [viewType: string]: ViewSpec }\n\nexport function buildViewSpecs(\n defaultInputs: ViewConfigInputHash,\n optionOverrides: CalendarOptions,\n dynamicOptionOverrides: CalendarOptions,\n localeDefaults,\n): ViewSpecHash {\n let defaultConfigs = parseViewConfigs(defaultInputs)\n let overrideConfigs = parseViewConfigs(optionOverrides.views)\n let viewDefs = compileViewDefs(defaultConfigs, overrideConfigs)\n\n return mapHash(viewDefs, (viewDef) => buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults))\n}\n\nfunction buildViewSpec(\n viewDef: ViewDef,\n overrideConfigs: ViewConfigHash,\n optionOverrides: CalendarOptions,\n dynamicOptionOverrides: CalendarOptions,\n localeDefaults,\n): ViewSpec {\n let durationInput =\n viewDef.overrides.duration ||\n viewDef.defaults.duration ||\n dynamicOptionOverrides.duration ||\n optionOverrides.duration\n\n let duration = null\n let durationUnit = ''\n let singleUnit = ''\n let singleUnitOverrides: ViewOptions = {}\n\n if (durationInput) {\n duration = createDurationCached(durationInput)\n\n if (duration) { // valid?\n let denom = greatestDurationDenominator(duration)\n durationUnit = denom.unit\n\n if (denom.value === 1) {\n singleUnit = durationUnit\n singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].rawOptions : {}\n }\n }\n }\n\n let queryButtonText = (optionsSubset) => {\n let buttonTextMap = optionsSubset.buttonText || {}\n let buttonTextKey = viewDef.defaults.buttonTextKey as string\n\n if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {\n return buttonTextMap[buttonTextKey]\n }\n if (buttonTextMap[viewDef.type] != null) {\n return buttonTextMap[viewDef.type]\n }\n if (buttonTextMap[singleUnit] != null) {\n return buttonTextMap[singleUnit]\n }\n return null\n }\n\n let queryButtonTitle = (optionsSubset) => { // TODO: more DRY with queryButtonText\n let buttonHints = optionsSubset.buttonHints || {}\n let buttonKey = viewDef.defaults.buttonTextKey as string // use same key as text\n\n if (buttonKey != null && buttonHints[buttonKey] != null) {\n return buttonHints[buttonKey]\n }\n if (buttonHints[viewDef.type] != null) {\n return buttonHints[viewDef.type]\n }\n if (buttonHints[singleUnit] != null) {\n return buttonHints[singleUnit]\n }\n return null\n }\n\n return {\n type: viewDef.type,\n component: viewDef.component,\n duration,\n durationUnit,\n singleUnit,\n optionDefaults: viewDef.defaults,\n optionOverrides: { ...singleUnitOverrides, ...viewDef.overrides },\n\n buttonTextOverride:\n queryButtonText(dynamicOptionOverrides) ||\n queryButtonText(optionOverrides) || // constructor-specified buttonText lookup hash takes precedence\n viewDef.overrides.buttonText, // `buttonText` for view-specific options is a string\n buttonTextDefault:\n queryButtonText(localeDefaults) ||\n viewDef.defaults.buttonText ||\n queryButtonText(BASE_OPTION_DEFAULTS) ||\n viewDef.type, // fall back to given view name\n\n // not DRY\n buttonTitleOverride:\n queryButtonTitle(dynamicOptionOverrides) ||\n queryButtonTitle(optionOverrides) ||\n viewDef.overrides.buttonHint,\n buttonTitleDefault:\n queryButtonTitle(localeDefaults) ||\n viewDef.defaults.buttonHint ||\n queryButtonTitle(BASE_OPTION_DEFAULTS),\n // will eventually fall back to buttonText\n }\n}\n\n// hack to get memoization working\n\nlet durationInputMap: { [json: string]: Duration } = {}\n\nfunction createDurationCached(durationInput: DurationInput) {\n let json = JSON.stringify(durationInput)\n let res = durationInputMap[json]\n\n if (res === undefined) {\n res = createDuration(durationInput)\n durationInputMap[json] = res\n }\n\n return res\n}\n","import { DateMarker, startOfDay, addDays } from './datelib/marker'\nimport { Duration, createDuration, asRoughDays, asRoughMs, greatestDurationDenominator } from './datelib/duration'\nimport {\n DateRange,\n OpenDateRange,\n constrainMarkerToRange,\n intersectRanges,\n rangesIntersect,\n parseRange,\n DateRangeInput,\n} from './datelib/date-range'\nimport { DateEnv, DateInput } from './datelib/env'\nimport { computeVisibleDayRange } from './util/date'\nimport { getNow } from './reducers/current-date'\nimport { CalendarApi } from './CalendarApi'\n\nexport interface DateProfile {\n currentRange: DateRange // TODO: does this include slotMinTime/slotMaxTime?\n currentRangeUnit: string\n isRangeAllDay: boolean\n validRange: OpenDateRange\n activeRange: DateRange | null\n renderRange: DateRange\n slotMinTime: Duration\n slotMaxTime: Duration\n isValid: boolean\n dateIncrement: Duration\n}\n\nexport interface DateProfileGeneratorProps extends DateProfileOptions {\n dateProfileGeneratorClass: DateProfileGeneratorClass // not used by DateProfileGenerator itself\n duration: Duration\n durationUnit: string\n usesMinMaxTime: boolean\n dateEnv: DateEnv\n calendarApi: CalendarApi\n}\n\nexport interface DateProfileOptions {\n slotMinTime: Duration\n slotMaxTime: Duration\n showNonCurrentDates?: boolean\n dayCount?: number\n dateAlignment?: string\n dateIncrement?: Duration\n hiddenDays?: number[]\n weekends?: boolean\n nowInput?: DateInput | (() => DateInput)\n validRangeInput?: DateRangeInput | ((this: CalendarApi, nowDate: Date) => DateRangeInput)\n visibleRangeInput?: DateRangeInput | ((this: CalendarApi, nowDate: Date) => DateRangeInput)\n monthMode?: boolean\n fixedWeekCount?: boolean\n}\n\nexport type DateProfileGeneratorClass = {\n new(props: DateProfileGeneratorProps): DateProfileGenerator\n}\n\nexport class DateProfileGenerator { // only publicly used for isHiddenDay :(\n nowDate: DateMarker\n\n isHiddenDayHash: boolean[]\n\n constructor(protected props: DateProfileGeneratorProps) {\n this.nowDate = getNow(props.nowInput, props.dateEnv)\n this.initHiddenDays()\n }\n\n /* Date Range Computation\n ------------------------------------------------------------------------------------------------------------------*/\n\n // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\n buildPrev(currentDateProfile: DateProfile, currentDate: DateMarker, forceToValid?: boolean): DateProfile {\n let { dateEnv } = this.props\n\n let prevDate = dateEnv.subtract(\n dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n currentDateProfile.dateIncrement,\n )\n\n return this.build(prevDate, -1, forceToValid)\n }\n\n // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\n buildNext(currentDateProfile: DateProfile, currentDate: DateMarker, forceToValid?: boolean): DateProfile {\n let { dateEnv } = this.props\n\n let nextDate = dateEnv.add(\n dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n currentDateProfile.dateIncrement,\n )\n\n return this.build(nextDate, 1, forceToValid)\n }\n\n // Builds a structure holding dates/ranges for rendering around the given date.\n // Optional direction param indicates whether the date is being incremented/decremented\n // from its previous value. decremented = -1, incremented = 1 (default).\n build(currentDate: DateMarker, direction?, forceToValid = true): DateProfile {\n let { props } = this\n let validRange: DateRange\n let currentInfo\n let isRangeAllDay\n let renderRange: DateRange\n let activeRange: DateRange\n let isValid\n\n validRange = this.buildValidRange()\n validRange = this.trimHiddenDays(validRange)\n\n if (forceToValid) {\n currentDate = constrainMarkerToRange(currentDate, validRange)\n }\n\n currentInfo = this.buildCurrentRangeInfo(currentDate, direction)\n isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit)\n renderRange = this.buildRenderRange(\n this.trimHiddenDays(currentInfo.range),\n currentInfo.unit,\n isRangeAllDay,\n )\n renderRange = this.trimHiddenDays(renderRange)\n activeRange = renderRange\n\n if (!props.showNonCurrentDates) {\n activeRange = intersectRanges(activeRange, currentInfo.range)\n }\n\n activeRange = this.adjustActiveRange(activeRange)\n activeRange = intersectRanges(activeRange, validRange) // might return null\n\n // it's invalid if the originally requested date is not contained,\n // or if the range is completely outside of the valid range.\n isValid = rangesIntersect(currentInfo.range, validRange)\n\n return {\n // constraint for where prev/next operations can go and where events can be dragged/resized to.\n // an object with optional start and end properties.\n validRange,\n\n // range the view is formally responsible for.\n // for example, a month view might have 1st-31st, excluding padded dates\n currentRange: currentInfo.range,\n\n // name of largest unit being displayed, like \"month\" or \"week\"\n currentRangeUnit: currentInfo.unit,\n\n isRangeAllDay,\n\n // dates that display events and accept drag-n-drop\n // will be `null` if no dates accept events\n activeRange,\n\n // date range with a rendered skeleton\n // includes not-active days that need some sort of DOM\n renderRange,\n\n // Duration object that denotes the first visible time of any given day\n slotMinTime: props.slotMinTime,\n\n // Duration object that denotes the exclusive visible end time of any given day\n slotMaxTime: props.slotMaxTime,\n\n isValid,\n\n // how far the current date will move for a prev/next operation\n dateIncrement: this.buildDateIncrement(currentInfo.duration),\n // pass a fallback (might be null) ^\n }\n }\n\n // Builds an object with optional start/end properties.\n // Indicates the minimum/maximum dates to display.\n // not responsible for trimming hidden days.\n buildValidRange(): OpenDateRange {\n let input = this.props.validRangeInput\n let simpleInput = typeof input === 'function'\n ? input.call(this.props.calendarApi, this.nowDate)\n : input\n\n return this.refineRange(simpleInput) ||\n { start: null, end: null } // completely open-ended\n }\n\n // Builds a structure with info about the \"current\" range, the range that is\n // highlighted as being the current month for example.\n // See build() for a description of `direction`.\n // Guaranteed to have `range` and `unit` properties. `duration` is optional.\n buildCurrentRangeInfo(date: DateMarker, direction) {\n let { props } = this\n let duration = null\n let unit = null\n let range = null\n let dayCount\n\n if (props.duration) {\n duration = props.duration\n unit = props.durationUnit\n range = this.buildRangeFromDuration(date, direction, duration, unit)\n } else if ((dayCount = this.props.dayCount)) {\n unit = 'day'\n range = this.buildRangeFromDayCount(date, direction, dayCount)\n } else if ((range = this.buildCustomVisibleRange(date))) {\n unit = props.dateEnv.greatestWholeUnit(range.start, range.end).unit\n } else {\n duration = this.getFallbackDuration()\n unit = greatestDurationDenominator(duration).unit\n range = this.buildRangeFromDuration(date, direction, duration, unit)\n }\n\n return { duration, unit, range }\n }\n\n getFallbackDuration(): Duration {\n return createDuration({ day: 1 })\n }\n\n // Returns a new activeRange to have time values (un-ambiguate)\n // slotMinTime or slotMaxTime causes the range to expand.\n adjustActiveRange(range: DateRange) {\n let { dateEnv, usesMinMaxTime, slotMinTime, slotMaxTime } = this.props\n let { start, end } = range\n\n if (usesMinMaxTime) {\n // expand active range if slotMinTime is negative (why not when positive?)\n if (asRoughDays(slotMinTime) < 0) {\n start = startOfDay(start) // necessary?\n start = dateEnv.add(start, slotMinTime)\n }\n\n // expand active range if slotMaxTime is beyond one day (why not when negative?)\n if (asRoughDays(slotMaxTime) > 1) {\n end = startOfDay(end) // necessary?\n end = addDays(end, -1)\n end = dateEnv.add(end, slotMaxTime)\n }\n }\n\n return { start, end }\n }\n\n // Builds the \"current\" range when it is specified as an explicit duration.\n // `unit` is the already-computed greatestDurationDenominator unit of duration.\n buildRangeFromDuration(date: DateMarker, direction, duration: Duration, unit) {\n let { dateEnv, dateAlignment } = this.props\n let start: DateMarker\n let end: DateMarker\n let res\n\n // compute what the alignment should be\n if (!dateAlignment) {\n let { dateIncrement } = this.props\n\n if (dateIncrement) {\n // use the smaller of the two units\n if (asRoughMs(dateIncrement) < asRoughMs(duration)) {\n dateAlignment = greatestDurationDenominator(dateIncrement).unit\n } else {\n dateAlignment = unit\n }\n } else {\n dateAlignment = unit\n }\n }\n\n // if the view displays a single day or smaller\n if (asRoughDays(duration) <= 1) {\n if (this.isHiddenDay(start)) {\n start = this.skipHiddenDays(start, direction)\n start = startOfDay(start)\n }\n }\n\n function computeRes() {\n start = dateEnv.startOf(date, dateAlignment)\n end = dateEnv.add(start, duration)\n res = { start, end }\n }\n\n computeRes()\n\n // if range is completely enveloped by hidden days, go past the hidden days\n if (!this.trimHiddenDays(res)) {\n date = this.skipHiddenDays(date, direction)\n computeRes()\n }\n\n return res\n }\n\n // Builds the \"current\" range when a dayCount is specified.\n buildRangeFromDayCount(date: DateMarker, direction, dayCount) {\n let { dateEnv, dateAlignment } = this.props\n let runningCount = 0\n let start: DateMarker = date\n let end: DateMarker\n\n if (dateAlignment) {\n start = dateEnv.startOf(start, dateAlignment)\n }\n\n start = startOfDay(start)\n start = this.skipHiddenDays(start, direction)\n\n end = start\n do {\n end = addDays(end, 1)\n if (!this.isHiddenDay(end)) {\n runningCount += 1\n }\n } while (runningCount < dayCount)\n\n return { start, end }\n }\n\n // Builds a normalized range object for the \"visible\" range,\n // which is a way to define the currentRange and activeRange at the same time.\n buildCustomVisibleRange(date: DateMarker) {\n let { props } = this\n let input = props.visibleRangeInput\n let simpleInput = typeof input === 'function'\n ? input.call(props.calendarApi, props.dateEnv.toDate(date))\n : input\n\n let range = this.refineRange(simpleInput)\n\n if (range && (range.start == null || range.end == null)) {\n return null\n }\n\n return range\n }\n\n // Computes the range that will represent the element/cells for *rendering*,\n // but which may have voided days/times.\n // not responsible for trimming hidden days.\n buildRenderRange(currentRange: DateRange, currentRangeUnit, isRangeAllDay) {\n return currentRange\n }\n\n // Compute the duration value that should be added/substracted to the current date\n // when a prev/next operation happens.\n buildDateIncrement(fallback): Duration {\n let { dateIncrement } = this.props\n let customAlignment\n\n if (dateIncrement) {\n return dateIncrement\n }\n\n if ((customAlignment = this.props.dateAlignment)) {\n return createDuration(1, customAlignment)\n }\n\n if (fallback) {\n return fallback\n }\n\n return createDuration({ days: 1 })\n }\n\n refineRange(rangeInput: DateRangeInput | undefined): DateRange | null {\n if (rangeInput) {\n let range = parseRange(rangeInput, this.props.dateEnv)\n\n if (range) {\n range = computeVisibleDayRange(range)\n }\n\n return range\n }\n\n return null\n }\n\n /* Hidden Days\n ------------------------------------------------------------------------------------------------------------------*/\n\n // Initializes internal variables related to calculating hidden days-of-week\n initHiddenDays() {\n let hiddenDays = this.props.hiddenDays || [] // array of day-of-week indices that are hidden\n let isHiddenDayHash = [] // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n let dayCnt = 0\n let i\n\n if (this.props.weekends === false) {\n hiddenDays.push(0, 6) // 0=sunday, 6=saturday\n }\n\n for (i = 0; i < 7; i += 1) {\n if (\n !(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)\n ) {\n dayCnt += 1\n }\n }\n\n if (!dayCnt) {\n throw new Error('invalid hiddenDays') // all days were hidden? bad.\n }\n\n this.isHiddenDayHash = isHiddenDayHash\n }\n\n // Remove days from the beginning and end of the range that are computed as hidden.\n // If the whole range is trimmed off, returns null\n trimHiddenDays(range: DateRange): DateRange | null {\n let { start, end } = range\n\n if (start) {\n start = this.skipHiddenDays(start)\n }\n\n if (end) {\n end = this.skipHiddenDays(end, -1, true)\n }\n\n if (start == null || end == null || start < end) {\n return { start, end }\n }\n\n return null\n }\n\n // Is the current day hidden?\n // `day` is a day-of-week index (0-6), or a Date (used for UTC)\n isHiddenDay(day) {\n if (day instanceof Date) {\n day = day.getUTCDay()\n }\n return this.isHiddenDayHash[day]\n }\n\n // Incrementing the current day until it is no longer a hidden day, returning a copy.\n // DOES NOT CONSIDER validRange!\n // If the initial value of `date` is not a hidden day, don't do anything.\n // Pass `isExclusive` as `true` if you are dealing with an end date.\n // `inc` defaults to `1` (increment one day forward each time)\n skipHiddenDays(date: DateMarker, inc = 1, isExclusive = false) {\n while (\n this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]\n ) {\n date = addDays(date, inc)\n }\n return date\n }\n}\n","import { Action } from './Action'\n\nexport function reduceViewType(viewType: string, action: Action): string {\n switch (action.type) {\n case 'CHANGE_VIEW_TYPE':\n viewType = action.viewType\n }\n\n return viewType\n}\n","import { Action } from './Action'\n\nexport function reduceDynamicOptionOverrides(dynamicOptionOverrides, action: Action) {\n switch (action.type) {\n case 'SET_OPTION':\n return { ...dynamicOptionOverrides, [action.optionName]: action.rawOptionValue }\n default:\n return dynamicOptionOverrides\n }\n}\n","import { DateProfile, DateProfileGenerator } from '../DateProfileGenerator'\nimport { Action } from './Action'\nimport { DateMarker } from '../datelib/marker'\n\nexport function reduceDateProfile(\n currentDateProfile: DateProfile | null,\n action: Action,\n currentDate: DateMarker,\n dateProfileGenerator: DateProfileGenerator,\n): DateProfile {\n let dp: DateProfile\n\n switch (action.type) {\n case 'CHANGE_VIEW_TYPE':\n return dateProfileGenerator.build(action.dateMarker || currentDate)\n\n case 'CHANGE_DATE':\n return dateProfileGenerator.build(action.dateMarker)\n\n case 'PREV':\n dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate)\n if (dp.isValid) {\n return dp\n }\n break\n\n case 'NEXT':\n dp = dateProfileGenerator.buildNext(currentDateProfile, currentDate)\n if (dp.isValid) {\n return dp\n }\n break\n }\n\n return currentDateProfile\n}\n","import { EventSource, EventSourceHash } from '../structs/event-source'\nimport { parseEventSource, buildEventSourceRefiners } from '../structs/event-source-parse'\nimport { arrayToHash, filterHash } from '../util/object'\nimport { DateRange } from '../datelib/date-range'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { Action } from './Action'\nimport { guid } from '../util/misc'\nimport { CalendarContext } from '../CalendarContext'\nimport { CalendarOptions } from '../options'\n\nexport function initEventSources(calendarOptions, dateProfile: DateProfile, context: CalendarContext) {\n let activeRange = dateProfile ? dateProfile.activeRange : null\n\n return addSources(\n {},\n parseInitialSources(calendarOptions, context),\n activeRange,\n context,\n )\n}\n\nexport function reduceEventSources(\n eventSources: EventSourceHash,\n action: Action,\n dateProfile: DateProfile,\n context: CalendarContext,\n): EventSourceHash {\n let activeRange = dateProfile ? dateProfile.activeRange : null // need this check?\n\n switch (action.type) {\n case 'ADD_EVENT_SOURCES': // already parsed\n return addSources(eventSources, action.sources, activeRange, context)\n\n case 'REMOVE_EVENT_SOURCE':\n return removeSource(eventSources, action.sourceId)\n\n case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n case 'NEXT':\n case 'CHANGE_DATE':\n case 'CHANGE_VIEW_TYPE':\n if (dateProfile) {\n return fetchDirtySources(eventSources, activeRange, context)\n }\n return eventSources\n\n case 'FETCH_EVENT_SOURCES':\n return fetchSourcesByIds(\n eventSources,\n (action as any).sourceIds ? // why no type?\n arrayToHash((action as any).sourceIds) :\n excludeStaticSources(eventSources, context),\n activeRange,\n action.isRefetch || false,\n context,\n )\n\n case 'RECEIVE_EVENTS':\n case 'RECEIVE_EVENT_ERROR':\n return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange)\n\n case 'REMOVE_ALL_EVENT_SOURCES':\n return {}\n\n default:\n return eventSources\n }\n}\n\nexport function reduceEventSourcesNewTimeZone(eventSources: EventSourceHash, dateProfile: DateProfile, context: CalendarContext) {\n let activeRange = dateProfile ? dateProfile.activeRange : null // need this check?\n\n return fetchSourcesByIds(\n eventSources,\n excludeStaticSources(eventSources, context),\n activeRange,\n true,\n context,\n )\n}\n\nexport function computeEventSourcesLoading(eventSources: EventSourceHash): boolean {\n for (let sourceId in eventSources) {\n if (eventSources[sourceId].isFetching) {\n return true\n }\n }\n\n return false\n}\n\nfunction addSources(\n eventSourceHash: EventSourceHash,\n sources: EventSource<any>[],\n fetchRange: DateRange | null,\n context: CalendarContext,\n): EventSourceHash {\n let hash: EventSourceHash = {}\n\n for (let source of sources) {\n hash[source.sourceId] = source\n }\n\n if (fetchRange) {\n hash = fetchDirtySources(hash, fetchRange, context)\n }\n\n return { ...eventSourceHash, ...hash }\n}\n\nfunction removeSource(eventSourceHash: EventSourceHash, sourceId: string): EventSourceHash {\n return filterHash(eventSourceHash, (eventSource: EventSource<any>) => eventSource.sourceId !== sourceId)\n}\n\nfunction fetchDirtySources(sourceHash: EventSourceHash, fetchRange: DateRange, context: CalendarContext): EventSourceHash {\n return fetchSourcesByIds(\n sourceHash,\n filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)),\n fetchRange,\n false,\n context,\n )\n}\n\nfunction isSourceDirty(eventSource: EventSource<any>, fetchRange: DateRange, context: CalendarContext) {\n if (!doesSourceNeedRange(eventSource, context)) {\n return !eventSource.latestFetchId\n }\n return !context.options.lazyFetching ||\n !eventSource.fetchRange ||\n eventSource.isFetching || // always cancel outdated in-progress fetches\n fetchRange.start < eventSource.fetchRange.start ||\n fetchRange.end > eventSource.fetchRange.end\n}\n\nfunction fetchSourcesByIds(\n prevSources: EventSourceHash,\n sourceIdHash: { [sourceId: string]: any },\n fetchRange: DateRange,\n isRefetch: boolean,\n context: CalendarContext,\n): EventSourceHash {\n let nextSources: EventSourceHash = {}\n\n for (let sourceId in prevSources) {\n let source = prevSources[sourceId]\n\n if (sourceIdHash[sourceId]) {\n nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context)\n } else {\n nextSources[sourceId] = source\n }\n }\n\n return nextSources\n}\n\nfunction fetchSource(eventSource: EventSource<any>, fetchRange: DateRange, isRefetch: boolean, context: CalendarContext) {\n let { options, calendarApi } = context\n let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId]\n let fetchId = guid()\n\n sourceDef.fetch(\n {\n eventSource,\n range: fetchRange,\n isRefetch,\n context,\n },\n (res) => { // success callback\n let { rawEvents } = res\n\n if (options.eventSourceSuccess) {\n rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.xhr) || rawEvents\n }\n\n if (eventSource.success) {\n rawEvents = eventSource.success.call(calendarApi, rawEvents, res.xhr) || rawEvents\n }\n\n context.dispatch({\n type: 'RECEIVE_EVENTS',\n sourceId: eventSource.sourceId,\n fetchId,\n fetchRange,\n rawEvents,\n })\n },\n (error) => { // failure callback\n console.warn(error.message, error)\n\n if (options.eventSourceFailure) {\n options.eventSourceFailure.call(calendarApi, error)\n }\n\n if (eventSource.failure) {\n eventSource.failure(error)\n }\n\n context.dispatch({\n type: 'RECEIVE_EVENT_ERROR',\n sourceId: eventSource.sourceId,\n fetchId,\n fetchRange,\n error,\n })\n },\n )\n\n return {\n ...eventSource,\n isFetching: true,\n latestFetchId: fetchId,\n }\n}\n\nfunction receiveResponse(sourceHash: EventSourceHash, sourceId: string, fetchId: string, fetchRange: DateRange) {\n let eventSource: EventSource<any> = sourceHash[sourceId]\n\n if (\n eventSource && // not already removed\n fetchId === eventSource.latestFetchId\n ) {\n return {\n ...sourceHash,\n [sourceId]: {\n ...eventSource,\n isFetching: false,\n fetchRange, // also serves as a marker that at least one fetch has completed\n },\n }\n }\n\n return sourceHash\n}\n\nfunction excludeStaticSources(eventSources: EventSourceHash, context: CalendarContext): EventSourceHash {\n return filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context))\n}\n\nfunction parseInitialSources(rawOptions: CalendarOptions, context: CalendarContext) {\n let refiners = buildEventSourceRefiners(context)\n let rawSources = [].concat(rawOptions.eventSources || [])\n let sources = [] // parsed\n\n if (rawOptions.initialEvents) {\n rawSources.unshift(rawOptions.initialEvents)\n }\n\n if (rawOptions.events) {\n rawSources.unshift(rawOptions.events)\n }\n\n for (let rawSource of rawSources) {\n let source = parseEventSource(rawSource, context, refiners)\n if (source) {\n sources.push(source)\n }\n }\n\n return sources\n}\n\nfunction doesSourceNeedRange(eventSource: EventSource<any>, context: CalendarContext) {\n let defs = context.pluginHooks.eventSourceDefs\n\n return !defs[eventSource.sourceDefId].ignoreRange\n}\n","import { filterHash, mapHash } from '../util/object'\nimport { EventDef } from '../structs/event-def'\nimport { EventInstance, EventInstanceHash } from '../structs/event-instance'\nimport { EventInput } from '../structs/event-parse'\nimport {\n EventStore,\n mergeEventStores,\n createEmptyEventStore,\n filterEventStoreDefs,\n excludeSubEventStore,\n parseEvents,\n} from '../structs/event-store'\nimport { Action } from './Action'\nimport { EventSourceHash, EventSource } from '../structs/event-source'\nimport { DateRange } from '../datelib/date-range'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { DateEnv } from '../datelib/env'\nimport { CalendarContext } from '../CalendarContext'\nimport { expandRecurring } from '../structs/recurring-event'\n\nexport function reduceEventStore(\n eventStore: EventStore,\n action: Action,\n eventSources: EventSourceHash,\n dateProfile: DateProfile,\n context: CalendarContext,\n): EventStore {\n switch (action.type) {\n case 'RECEIVE_EVENTS': // raw\n return receiveRawEvents(\n eventStore,\n eventSources[action.sourceId],\n action.fetchId,\n action.fetchRange,\n action.rawEvents,\n context,\n )\n\n case 'ADD_EVENTS': // already parsed, but not expanded\n return addEvent(\n eventStore,\n action.eventStore, // new ones\n dateProfile ? dateProfile.activeRange : null,\n context,\n )\n\n case 'RESET_EVENTS':\n return action.eventStore\n\n case 'MERGE_EVENTS': // already parsed and expanded\n return mergeEventStores(eventStore, action.eventStore)\n\n case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n case 'NEXT':\n case 'CHANGE_DATE':\n case 'CHANGE_VIEW_TYPE':\n if (dateProfile) {\n return expandRecurring(eventStore, dateProfile.activeRange, context)\n }\n return eventStore\n\n case 'REMOVE_EVENTS':\n return excludeSubEventStore(eventStore, action.eventStore)\n\n case 'REMOVE_EVENT_SOURCE':\n return excludeEventsBySourceId(eventStore, action.sourceId)\n\n case 'REMOVE_ALL_EVENT_SOURCES':\n return filterEventStoreDefs(eventStore, (eventDef: EventDef) => (\n !eventDef.sourceId // only keep events with no source id\n ))\n\n case 'REMOVE_ALL_EVENTS':\n return createEmptyEventStore()\n\n default:\n return eventStore\n }\n}\n\nfunction receiveRawEvents(\n eventStore: EventStore,\n eventSource: EventSource<any>,\n fetchId: string,\n fetchRange: DateRange | null,\n rawEvents: EventInput[],\n context: CalendarContext,\n): EventStore {\n if (\n eventSource && // not already removed\n fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources\n ) {\n let subset = parseEvents(\n transformRawEvents(rawEvents, eventSource, context),\n eventSource,\n context,\n )\n\n if (fetchRange) {\n subset = expandRecurring(subset, fetchRange, context)\n }\n\n return mergeEventStores(\n excludeEventsBySourceId(eventStore, eventSource.sourceId),\n subset,\n )\n }\n\n return eventStore\n}\n\nfunction transformRawEvents(rawEvents, eventSource: EventSource<any>, context: CalendarContext) {\n let calEachTransform = context.options.eventDataTransform\n let sourceEachTransform = eventSource ? eventSource.eventDataTransform : null\n\n if (sourceEachTransform) {\n rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform)\n }\n\n if (calEachTransform) {\n rawEvents = transformEachRawEvent(rawEvents, calEachTransform)\n }\n\n return rawEvents\n}\n\nfunction transformEachRawEvent(rawEvents, func) {\n let refinedEvents\n\n if (!func) {\n refinedEvents = rawEvents\n } else {\n refinedEvents = []\n\n for (let rawEvent of rawEvents) {\n let refinedEvent = func(rawEvent)\n\n if (refinedEvent) {\n refinedEvents.push(refinedEvent)\n } else if (refinedEvent == null) {\n refinedEvents.push(rawEvent)\n } // if a different falsy value, do nothing\n }\n }\n\n return refinedEvents\n}\n\nfunction addEvent(eventStore: EventStore, subset: EventStore, expandRange: DateRange | null, context: CalendarContext): EventStore {\n if (expandRange) {\n subset = expandRecurring(subset, expandRange, context)\n }\n\n return mergeEventStores(eventStore, subset)\n}\n\nexport function rezoneEventStoreDates(eventStore: EventStore, oldDateEnv: DateEnv, newDateEnv: DateEnv): EventStore {\n let { defs } = eventStore\n\n let instances = mapHash(eventStore.instances, (instance: EventInstance): EventInstance => {\n let def = defs[instance.defId]\n\n if (def.allDay || def.recurringDef) {\n return instance // isn't dependent on timezone\n }\n return {\n ...instance,\n range: {\n start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),\n end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),\n },\n forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo,\n forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo,\n }\n })\n\n return { defs, instances }\n}\n\nfunction excludeEventsBySourceId(eventStore: EventStore, sourceId: string) {\n return filterEventStoreDefs(eventStore, (eventDef: EventDef) => eventDef.sourceId !== sourceId)\n}\n\n// QUESTION: why not just return instances? do a general object-property-exclusion util\nexport function excludeInstances(eventStore: EventStore, removals: EventInstanceHash): EventStore {\n return {\n defs: eventStore.defs,\n instances: filterHash(eventStore.instances, (instance: EventInstance) => !removals[instance.instanceId]),\n }\n}\n","import { DateSpan } from '../structs/date-span'\nimport { Action } from './Action'\n\nexport function reduceDateSelection(currentSelection: DateSpan | null, action: Action) {\n switch (action.type) {\n case 'UNSELECT_DATES':\n return null\n\n case 'SELECT_DATES':\n return action.selection\n\n default:\n return currentSelection\n }\n}\n","import { Action } from './Action'\n\nexport function reduceSelectedEvent(currentInstanceId: string, action: Action): string {\n switch (action.type) {\n case 'UNSELECT_EVENT':\n return ''\n\n case 'SELECT_EVENT':\n return action.eventInstanceId\n\n default:\n return currentInstanceId\n }\n}\n","import { Action } from './Action'\nimport { EventInteractionState } from '../interactions/event-interaction-state'\n\nexport function reduceEventDrag(currentDrag: EventInteractionState | null, action: Action): EventInteractionState | null {\n let newDrag: EventInteractionState\n\n switch (action.type) {\n case 'UNSET_EVENT_DRAG':\n return null\n\n case 'SET_EVENT_DRAG':\n newDrag = action.state\n\n return {\n affectedEvents: newDrag.affectedEvents,\n mutatedEvents: newDrag.mutatedEvents,\n isEvent: newDrag.isEvent,\n }\n\n default:\n return currentDrag\n }\n}\n","import { EventInteractionState } from '../interactions/event-interaction-state'\nimport { Action } from './Action'\n\nexport function reduceEventResize(currentResize: EventInteractionState | null, action: Action): EventInteractionState | null {\n let newResize: EventInteractionState\n\n switch (action.type) {\n case 'UNSET_EVENT_RESIZE':\n return null\n\n case 'SET_EVENT_RESIZE':\n newResize = action.state\n\n return {\n affectedEvents: newResize.affectedEvents,\n mutatedEvents: newResize.mutatedEvents,\n isEvent: newResize.isEvent,\n }\n\n default:\n return currentResize\n }\n}\n","import { ViewSpec, ViewSpecHash } from './structs/view-spec'\nimport { Theme } from './theme/Theme'\nimport { CalendarApi } from './CalendarApi'\nimport { CalendarOptionsRefined, CalendarOptions } from './options'\nimport { ToolbarInput, ToolbarModel, ToolbarWidget, CustomButtonInput } from './toolbar-struct'\nimport { formatWithOrdinals } from './util/misc'\n\nexport function parseToolbars(\n calendarOptions: CalendarOptionsRefined,\n calendarOptionOverrides: CalendarOptions,\n theme: Theme,\n viewSpecs: ViewSpecHash,\n calendarApi: CalendarApi,\n) {\n let header = calendarOptions.headerToolbar ? parseToolbar(\n calendarOptions.headerToolbar,\n calendarOptions,\n calendarOptionOverrides,\n theme,\n viewSpecs,\n calendarApi,\n ) : null\n let footer = calendarOptions.footerToolbar ? parseToolbar(\n calendarOptions.footerToolbar,\n calendarOptions,\n calendarOptionOverrides,\n theme,\n viewSpecs,\n calendarApi,\n ) : null\n\n return { header, footer }\n}\n\nfunction parseToolbar(\n sectionStrHash: ToolbarInput,\n calendarOptions: CalendarOptionsRefined,\n calendarOptionOverrides: CalendarOptions,\n theme: Theme,\n viewSpecs: ViewSpecHash,\n calendarApi: CalendarApi,\n) : ToolbarModel {\n let sectionWidgets: { [sectionName: string]: ToolbarWidget[][] } = {}\n let viewsWithButtons: string[] = []\n let hasTitle = false\n\n for (let sectionName in sectionStrHash) {\n let sectionStr = sectionStrHash[sectionName]\n let sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi)\n sectionWidgets[sectionName] = sectionRes.widgets\n viewsWithButtons.push(...sectionRes.viewsWithButtons)\n hasTitle = hasTitle || sectionRes.hasTitle\n }\n\n return { sectionWidgets, viewsWithButtons, hasTitle }\n}\n\n/*\nBAD: querying icons and text here. should be done at render time\n*/\nfunction parseSection(\n sectionStr: string,\n calendarOptions: CalendarOptionsRefined, // defaults+overrides, then refined\n calendarOptionOverrides: CalendarOptions, // overrides only!, unrefined :(\n theme: Theme,\n viewSpecs: ViewSpecHash,\n calendarApi: CalendarApi,\n): { widgets: ToolbarWidget[][], viewsWithButtons: string[], hasTitle: boolean } {\n let isRtl = calendarOptions.direction === 'rtl'\n let calendarCustomButtons = calendarOptions.customButtons || {}\n let calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {}\n let calendarButtonText = calendarOptions.buttonText || {}\n let calendarButtonHintOverrides = calendarOptionOverrides.buttonHints || {}\n let calendarButtonHints = calendarOptions.buttonHints || {}\n let sectionSubstrs = sectionStr ? sectionStr.split(' ') : []\n let viewsWithButtons: string[] = []\n let hasTitle = false\n\n let widgets = sectionSubstrs.map(\n (buttonGroupStr): ToolbarWidget[] => (\n buttonGroupStr.split(',').map((buttonName): ToolbarWidget => {\n if (buttonName === 'title') {\n hasTitle = true\n return { buttonName }\n }\n\n let customButtonProps: CustomButtonInput\n let viewSpec: ViewSpec\n let buttonClick\n let buttonIcon // only one of these will be set\n let buttonText // \"\n let buttonHint: string | ((navUnit: string) => string)\n // ^ for the title=\"\" attribute, for accessibility\n\n if ((customButtonProps = calendarCustomButtons[buttonName])) {\n buttonClick = (ev: UIEvent) => {\n if (customButtonProps.click) {\n customButtonProps.click.call(ev.target, ev, ev.target) // TODO: use Calendar this context?\n }\n };\n\n (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\n (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n (buttonText = customButtonProps.text)\n\n buttonHint = customButtonProps.hint || customButtonProps.text\n } else if ((viewSpec = viewSpecs[buttonName])) {\n viewsWithButtons.push(buttonName)\n\n buttonClick = () => {\n calendarApi.changeView(buttonName)\n };\n\n (buttonText = viewSpec.buttonTextOverride) ||\n (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n (buttonText = viewSpec.buttonTextDefault)\n\n let textFallback =\n viewSpec.buttonTextOverride ||\n viewSpec.buttonTextDefault\n\n buttonHint = formatWithOrdinals(\n viewSpec.buttonTitleOverride ||\n viewSpec.buttonTitleDefault ||\n calendarOptions.viewHint,\n [textFallback, buttonName], // view-name = buttonName\n textFallback,\n )\n } else if (calendarApi[buttonName]) { // a calendarApi method\n buttonClick = () => {\n calendarApi[buttonName]()\n };\n\n (buttonText = calendarButtonTextOverrides[buttonName]) ||\n (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n (buttonText = calendarButtonText[buttonName]) // everything else is considered default\n\n if (buttonName === 'prevYear' || buttonName === 'nextYear') {\n let prevOrNext = buttonName === 'prevYear' ? 'prev' : 'next'\n buttonHint = formatWithOrdinals(\n calendarButtonHintOverrides[prevOrNext] ||\n calendarButtonHints[prevOrNext],\n [\n calendarButtonText.year || 'year', // localize unit\n 'year',\n ],\n calendarButtonText[buttonName],\n )\n } else {\n buttonHint = (navUnit: string) => formatWithOrdinals(\n calendarButtonHintOverrides[buttonName] ||\n calendarButtonHints[buttonName],\n [\n calendarButtonText[navUnit] || navUnit, // localized unit\n navUnit,\n ],\n calendarButtonText[buttonName],\n )\n }\n }\n\n return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint }\n })\n ),\n )\n\n return { widgets, viewsWithButtons, hasTitle }\n}\n","import { createPlugin } from '../plugin-system'\nimport { EventSourceDef } from '../structs/event-source-def'\nimport { EventInput } from '../structs/event-parse'\n\nlet eventSourceDef: EventSourceDef<EventInput[]> = {\n ignoreRange: true,\n\n parseMeta(refined) {\n if (Array.isArray(refined.events)) {\n return refined.events\n }\n return null\n },\n\n fetch(arg, success) {\n success({\n rawEvents: arg.eventSource.meta,\n })\n },\n}\n\nexport const arrayEventSourcePlugin = createPlugin({\n eventSourceDefs: [eventSourceDef],\n})\n","import { unpromisify } from '../util/promise'\nimport { EventSourceDef } from '../structs/event-source-def'\nimport { EventSourceError } from '../structs/event-source'\nimport { EventInput } from '../structs/event-parse'\nimport { createPlugin } from '../plugin-system'\nimport { buildRangeApiWithTimeZone } from '../structs/date-span'\n\nexport type EventSourceFunc = (\n arg: {\n start: Date\n end: Date\n startStr: string\n endStr: string\n timeZone: string\n },\n successCallback: (events: EventInput[]) => void,\n failureCallback: (error: EventSourceError) => void\n) => (void | PromiseLike<EventInput[]>)\n\nlet eventSourceDef: EventSourceDef<EventSourceFunc> = {\n\n parseMeta(refined) {\n if (typeof refined.events === 'function') {\n return refined.events\n }\n return null\n },\n\n fetch(arg, success, failure) {\n let { dateEnv } = arg.context\n let func = arg.eventSource.meta\n\n unpromisify(\n func.bind(null, buildRangeApiWithTimeZone(arg.range, dateEnv)),\n (rawEvents) => { // success\n success({ rawEvents }) // needs an object response\n },\n failure, // send errorObj directly to failure callback\n )\n },\n\n}\n\nexport const funcEventSourcePlugin = createPlugin({\n eventSourceDefs: [eventSourceDef],\n})\n","import { Dictionary } from '../options'\n\nexport function requestJson(method: string, url: string, params: Dictionary, successCallback, failureCallback) {\n method = method.toUpperCase()\n\n let body = null\n\n if (method === 'GET') {\n url = injectQueryStringParams(url, params)\n } else {\n body = encodeParams(params)\n }\n\n let xhr = new XMLHttpRequest()\n xhr.open(method, url, true)\n\n if (method !== 'GET') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')\n }\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 400) {\n let parsed = false\n let res\n\n try {\n res = JSON.parse(xhr.responseText)\n parsed = true\n } catch (err) {\n // will handle parsed=false\n }\n\n if (parsed) {\n successCallback(res, xhr)\n } else {\n failureCallback('Failure parsing JSON', xhr)\n }\n } else {\n failureCallback('Request failed', xhr)\n }\n }\n\n xhr.onerror = () => {\n failureCallback('Request failed', xhr)\n }\n\n xhr.send(body)\n}\n\nfunction injectQueryStringParams(url: string, params) {\n return url +\n (url.indexOf('?') === -1 ? '?' : '&') +\n encodeParams(params)\n}\n\nfunction encodeParams(params) {\n let parts = []\n\n for (let key in params) {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)\n }\n\n return parts.join('&')\n}\n","import { identity, Identity, Dictionary } from '../options'\n\nexport const JSON_FEED_EVENT_SOURCE_REFINERS = {\n method: String,\n extraParams: identity as Identity<Dictionary | (() => Dictionary)>,\n startParam: String,\n endParam: String,\n timeZoneParam: String,\n}\n","import { __assign } from 'tslib'\nimport { requestJson } from '../util/requestJson'\nimport { CalendarContext } from '../CalendarContext'\nimport { EventSourceDef } from '../structs/event-source-def'\nimport { DateRange } from '../datelib/date-range'\nimport { createPlugin } from '../plugin-system'\nimport { JSON_FEED_EVENT_SOURCE_REFINERS } from './json-feed-event-source-refiners'\n\ninterface JsonFeedMeta {\n url: string\n format: 'json' // for EventSourceApi\n method: string\n extraParams?: any\n startParam?: string\n endParam?: string\n timeZoneParam?: string\n}\n\nlet eventSourceDef: EventSourceDef<JsonFeedMeta> = {\n\n parseMeta(refined) {\n if (refined.url && (refined.format === 'json' || !refined.format)) {\n return {\n url: refined.url,\n format: 'json',\n method: (refined.method || 'GET').toUpperCase(),\n extraParams: refined.extraParams,\n startParam: refined.startParam,\n endParam: refined.endParam,\n timeZoneParam: refined.timeZoneParam,\n }\n }\n return null\n },\n\n fetch(arg, success, failure) {\n let { meta } = arg.eventSource\n let requestParams = buildRequestParams(meta, arg.range, arg.context)\n\n requestJson(\n meta.method, meta.url, requestParams,\n (rawEvents, xhr) => {\n success({ rawEvents, xhr })\n },\n (errorMessage, xhr) => {\n failure({ message: errorMessage, xhr })\n },\n )\n },\n\n}\n\nexport const jsonFeedEventSourcePlugin = createPlugin({\n eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,\n eventSourceDefs: [eventSourceDef],\n})\n\nfunction buildRequestParams(meta: JsonFeedMeta, range: DateRange, context: CalendarContext) {\n let { dateEnv, options } = context\n let startParam\n let endParam\n let timeZoneParam\n let customRequestParams\n let params = {}\n\n startParam = meta.startParam\n if (startParam == null) {\n startParam = options.startParam\n }\n\n endParam = meta.endParam\n if (endParam == null) {\n endParam = options.endParam\n }\n\n timeZoneParam = meta.timeZoneParam\n if (timeZoneParam == null) {\n timeZoneParam = options.timeZoneParam\n }\n\n // retrieve any outbound GET/POST data from the options\n if (typeof meta.extraParams === 'function') {\n // supplied as a function that returns a key/value object\n customRequestParams = meta.extraParams()\n } else {\n // probably supplied as a straight key/value object\n customRequestParams = meta.extraParams || {}\n }\n\n __assign(params, customRequestParams)\n\n params[startParam] = dateEnv.formatIso(range.start)\n params[endParam] = dateEnv.formatIso(range.end)\n\n if (dateEnv.timeZone !== 'local') {\n params[timeZoneParam] = dateEnv.timeZone\n }\n\n return params\n}\n","import { createDuration } from '../datelib/duration'\nimport { DateInput } from '../datelib/env'\nimport { identity, Identity } from '../options'\n\nexport const SIMPLE_RECURRING_REFINERS = {\n daysOfWeek: identity as Identity<number[]>,\n startTime: createDuration,\n endTime: createDuration,\n duration: createDuration,\n startRecur: identity as Identity<DateInput>,\n endRecur: identity as Identity<DateInput>,\n}\n","import { startOfDay, addDays, DateMarker } from '../datelib/marker'\nimport { Duration, subtractDurations } from '../datelib/duration'\nimport { arrayToHash } from '../util/object'\nimport { RecurringType } from './recurring-event'\nimport { EventRefined } from './event-parse'\nimport { DateRange, intersectRanges } from '../datelib/date-range'\nimport { DateEnv } from '../datelib/env'\nimport { createPlugin } from '../plugin-system'\nimport { SIMPLE_RECURRING_REFINERS } from './recurring-event-simple-refiners'\nimport './recurring-event-simple-declare'\n\n/*\nAn implementation of recurring events that only supports every-day or weekly recurrences.\n*/\n\ninterface SimpleRecurringData {\n daysOfWeek: number[] | null\n startTime: Duration | null\n endTime: Duration | null\n startRecur: DateMarker | null\n endRecur: DateMarker | null\n}\n\nlet recurring: RecurringType<SimpleRecurringData> = {\n\n parse(refined: EventRefined, dateEnv: DateEnv) {\n if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {\n let recurringData: SimpleRecurringData = {\n daysOfWeek: refined.daysOfWeek || null,\n startTime: refined.startTime || null,\n endTime: refined.endTime || null,\n startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,\n endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null,\n }\n\n let duration: Duration\n\n if (refined.duration) {\n duration = refined.duration\n }\n if (!duration && refined.startTime && refined.endTime) {\n duration = subtractDurations(refined.endTime, refined.startTime)\n }\n\n return {\n allDayGuess: Boolean(!refined.startTime && !refined.endTime),\n duration,\n typeData: recurringData, // doesn't need endTime anymore but oh well\n }\n }\n\n return null\n },\n\n expand(typeData: SimpleRecurringData, framingRange: DateRange, dateEnv: DateEnv): DateMarker[] {\n let clippedFramingRange = intersectRanges(\n framingRange,\n { start: typeData.startRecur, end: typeData.endRecur },\n )\n\n if (clippedFramingRange) {\n return expandRanges(\n typeData.daysOfWeek,\n typeData.startTime,\n clippedFramingRange,\n dateEnv,\n )\n }\n return []\n },\n\n}\n\nexport const simpleRecurringEventsPlugin = createPlugin({\n recurringTypes: [recurring],\n eventRefiners: SIMPLE_RECURRING_REFINERS,\n})\n\nfunction expandRanges(\n daysOfWeek: number[] | null,\n startTime: Duration | null,\n framingRange: DateRange,\n dateEnv: DateEnv,\n): DateMarker[] {\n let dowHash: { [num: string]: true } | null = daysOfWeek ? arrayToHash(daysOfWeek) : null\n let dayMarker = startOfDay(framingRange.start)\n let endMarker = framingRange.end\n let instanceStarts: DateMarker[] = []\n\n while (dayMarker < endMarker) {\n let instanceStart\n\n // if everyday, or this particular day-of-week\n if (!dowHash || dowHash[dayMarker.getUTCDay()]) {\n if (startTime) {\n instanceStart = dateEnv.add(dayMarker, startTime)\n } else {\n instanceStart = dayMarker\n }\n\n instanceStarts.push(instanceStart)\n }\n\n dayMarker = addDays(dayMarker, 1)\n }\n\n return instanceStarts\n}\n","import { createPlugin } from './plugin-system'\nimport { hashValuesToArray } from './util/object'\nimport { EventSource } from './structs/event-source'\nimport { CalendarContext } from './CalendarContext'\n\nexport const changeHandlerPlugin = createPlugin({\n optionChangeHandlers: {\n events(events, context) {\n handleEventSources([events], context)\n },\n eventSources: handleEventSources,\n },\n})\n\n/*\nBUG: if `event` was supplied, all previously-given `eventSources` will be wiped out\n*/\nfunction handleEventSources(inputs, context: CalendarContext) {\n let unfoundSources: EventSource<any>[] = hashValuesToArray(context.getCurrentData().eventSources)\n let newInputs = []\n\n for (let input of inputs) {\n let inputFound = false\n\n for (let i = 0; i < unfoundSources.length; i += 1) {\n if (unfoundSources[i]._raw === input) {\n unfoundSources.splice(i, 1) // delete\n inputFound = true\n break\n }\n }\n\n if (!inputFound) {\n newInputs.push(input)\n }\n }\n\n for (let unfoundSource of unfoundSources) {\n context.dispatch({\n type: 'REMOVE_EVENT_SOURCE',\n sourceId: unfoundSource.sourceId,\n })\n }\n\n for (let newInput of newInputs) {\n context.calendarApi.addEventSource(newInput)\n }\n}\n","import { DateProfile } from './DateProfileGenerator'\nimport { CalendarData } from './reducers/data-types'\nimport { RangeApiWithTimeZone, buildRangeApiWithTimeZone } from './structs/date-span'\nimport { ViewApi } from './ViewApi'\n\nexport type DatesSetArg = RangeApiWithTimeZone & { view: ViewApi }\n\nexport function handleDateProfile(dateProfile: DateProfile, context: CalendarData) {\n context.emitter.trigger('datesSet', {\n ...buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv),\n view: context.viewApi,\n })\n}\n","import { EventStore } from './structs/event-store'\nimport { CalendarData } from './reducers/data-types'\nimport { EventApi, buildEventApis } from './api/EventApi'\nimport { Duration } from './datelib/duration'\nimport { ViewApi } from './ViewApi'\n\nexport interface EventAddArg {\n event: EventApi\n relatedEvents: EventApi[]\n revert: () => void\n}\n\nexport interface EventChangeArg {\n oldEvent: EventApi\n event: EventApi\n relatedEvents: EventApi[]\n revert: () => void\n}\n\nexport interface EventDropArg extends EventChangeArg { // not best place. deals w/ UI\n el: HTMLElement\n delta: Duration\n jsEvent: MouseEvent\n view: ViewApi\n // and other \"transformed\" things\n}\n\nexport interface EventRemoveArg {\n event: EventApi\n relatedEvents: EventApi[]\n revert: () => void\n}\n\nexport function handleEventStore(eventStore: EventStore, context: CalendarData) {\n let { emitter } = context\n\n if (emitter.hasHandlers('eventsSet')) {\n emitter.trigger('eventsSet', buildEventApis(eventStore, context))\n }\n}\n","import { PluginDef } from './plugin-system-struct'\nimport { createPlugin } from './plugin-system'\nimport { arrayEventSourcePlugin } from './event-sources/array-event-source'\nimport { funcEventSourcePlugin } from './event-sources/func-event-source'\nimport { jsonFeedEventSourcePlugin } from './event-sources/json-feed-event-source'\nimport { simpleRecurringEventsPlugin } from './structs/recurring-event-simple'\nimport { changeHandlerPlugin } from './option-change-handlers'\nimport { handleDateProfile } from './dates-set'\nimport { handleEventStore } from './event-crud'\nimport { isArraysEqual } from './util/array'\nimport { removeElement } from './util/dom-manip'\nimport { computeEventSourcesLoading } from './reducers/eventSources'\nimport { CalendarDataManagerState } from './reducers/data-types'\n\n/*\nthis array is exposed on the root namespace so that UMD plugins can add to it.\nsee the rollup-bundles script.\n*/\nexport const globalPlugins: PluginDef[] = [ // TODO: make a const?\n arrayEventSourcePlugin,\n funcEventSourcePlugin,\n jsonFeedEventSourcePlugin,\n simpleRecurringEventsPlugin,\n changeHandlerPlugin,\n createPlugin({ // misc...\n isLoadingFuncs: [\n (state: CalendarDataManagerState) => computeEventSourcesLoading(state.eventSources),\n ],\n contentTypeHandlers: {\n html: buildHtmlRenderer,\n domNodes: buildDomNodeRenderer,\n },\n propSetHandlers: {\n dateProfile: handleDateProfile,\n eventStore: handleEventStore,\n },\n }),\n]\n\nfunction buildHtmlRenderer() {\n let currentEl: HTMLElement | null = null\n let currentHtml: string = ''\n\n function render(el: HTMLElement, html: string) {\n if (el !== currentEl || html !== currentHtml) {\n el.innerHTML = html\n }\n currentEl = el\n currentHtml = html\n }\n\n function destroy() {\n currentEl.innerHTML = ''\n currentEl = null\n currentHtml = ''\n }\n\n return { render, destroy }\n}\n\nfunction buildDomNodeRenderer() {\n let currentEl: HTMLElement | null = null\n let currentDomNodes: Node[] = []\n\n function render(el: HTMLElement, domNodes: Node[] | NodeList) {\n let newDomNodes = Array.prototype.slice.call(domNodes)\n\n if (el !== currentEl || !isArraysEqual(currentDomNodes, newDomNodes)) {\n // append first, remove second (for scroll resetting)\n for (let newNode of newDomNodes) {\n el.appendChild(newNode)\n }\n destroy()\n }\n\n currentEl = el\n currentDomNodes = newDomNodes\n }\n\n function destroy() {\n currentDomNodes.forEach(removeElement)\n currentDomNodes = []\n currentEl = null\n }\n\n return { render, destroy }\n}\n","export class DelayedRunner {\n private isRunning = false\n private isDirty = false\n private pauseDepths: { [scope: string]: number } = {}\n private timeoutId: number = 0\n\n constructor(\n private drainedOption?: () => void,\n ) {\n }\n\n request(delay?: number) {\n this.isDirty = true\n\n if (!this.isPaused()) {\n this.clearTimeout()\n\n if (delay == null) {\n this.tryDrain()\n } else {\n this.timeoutId = setTimeout( // NOT OPTIMAL! TODO: look at debounce\n this.tryDrain.bind(this),\n delay,\n ) as unknown as number\n }\n }\n }\n\n pause(scope = '') {\n let { pauseDepths } = this\n\n pauseDepths[scope] = (pauseDepths[scope] || 0) + 1\n\n this.clearTimeout()\n }\n\n resume(scope = '', force?: boolean) {\n let { pauseDepths } = this\n\n if (scope in pauseDepths) {\n if (force) {\n delete pauseDepths[scope]\n } else {\n pauseDepths[scope] -= 1\n let depth = pauseDepths[scope]\n\n if (depth <= 0) {\n delete pauseDepths[scope]\n }\n }\n\n this.tryDrain()\n }\n }\n\n isPaused() {\n return Object.keys(this.pauseDepths).length\n }\n\n tryDrain() {\n if (!this.isRunning && !this.isPaused()) {\n this.isRunning = true\n\n while (this.isDirty) {\n this.isDirty = false\n this.drained() // might set isDirty to true again\n }\n\n this.isRunning = false\n }\n }\n\n clear() {\n this.clearTimeout()\n this.isDirty = false\n this.pauseDepths = {}\n }\n\n private clearTimeout() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId)\n this.timeoutId = 0\n }\n }\n\n protected drained() { // subclasses can implement\n if (this.drainedOption) {\n this.drainedOption()\n }\n }\n}\n","import { DelayedRunner } from './DelayedRunner'\n\nexport class TaskRunner<Task> { // this class USES the DelayedRunner\n private queue: Task[] = []\n\n private delayedRunner: DelayedRunner // will most likely be used WITHOUT any delay\n\n constructor(\n private runTaskOption?: (task: Task) => void,\n private drainedOption?: (completedTasks: Task[]) => void,\n ) {\n this.delayedRunner = new DelayedRunner(this.drain.bind(this))\n }\n\n request(task: Task, delay?: number) {\n this.queue.push(task)\n this.delayedRunner.request(delay)\n }\n\n pause(scope?: string) {\n this.delayedRunner.pause(scope)\n }\n\n resume(scope?: string, force?: boolean) {\n this.delayedRunner.resume(scope, force)\n }\n\n drain() {\n let { queue } = this\n\n while (queue.length) {\n let completedTasks: Task[] = []\n let task: Task\n\n while ((task = queue.shift())) {\n this.runTask(task)\n completedTasks.push(task)\n }\n\n this.drained(completedTasks)\n } // keep going, in case new tasks were added in the drained handler\n }\n\n protected runTask(task: Task) { // subclasses can implement\n if (this.runTaskOption) {\n this.runTaskOption(task)\n }\n }\n\n protected drained(completedTasks: Task[]) { // subclasses can implement\n if (this.drainedOption) {\n this.drainedOption(completedTasks)\n }\n }\n}\n","import { DateProfile } from '../DateProfileGenerator'\nimport { diffWholeDays } from '../datelib/marker'\nimport { createFormatter, FormatterInput } from '../datelib/formatting'\nimport { DateRange } from '../datelib/date-range'\nimport { DateEnv } from '../datelib/env'\nimport { BaseOptions } from '../options'\n\n// Computes what the title at the top of the calendarApi should be for this view\nexport function buildTitle(dateProfile: DateProfile, viewOptions: BaseOptions, dateEnv: DateEnv) {\n let range: DateRange\n\n // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\n if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\n range = dateProfile.currentRange\n } else { // for day units or smaller, use the actual day range\n range = dateProfile.activeRange\n }\n\n return dateEnv.formatRange(\n range.start,\n range.end,\n createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)),\n {\n isEndExclusive: dateProfile.isRangeAllDay,\n defaultSeparator: viewOptions.titleRangeSeparator,\n },\n )\n}\n\n// Generates the format string that should be used to generate the title for the current date range.\n// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\nfunction buildTitleFormat(dateProfile: DateProfile): FormatterInput {\n let { currentRangeUnit } = dateProfile\n\n if (currentRangeUnit === 'year') {\n return { year: 'numeric' }\n }\n\n if (currentRangeUnit === 'month') {\n return { year: 'numeric', month: 'long' } // like \"September 2014\"\n }\n\n let days = diffWholeDays(\n dateProfile.currentRange.start,\n dateProfile.currentRange.end,\n )\n\n if (days !== null && days > 1) {\n // multi-day range. shorter, like \"Sep 9 - 10 2014\"\n return { year: 'numeric', month: 'short', day: 'numeric' }\n }\n\n // one day. longer, like \"September 9 2014\"\n return { year: 'numeric', month: 'long', day: 'numeric' }\n}\n","import { __assign } from 'tslib'\nimport { buildLocale, RawLocaleInfo, organizeRawLocales, LocaleSingularArg } from '../datelib/locale'\nimport { memoize, memoizeObjArg } from '../util/memoize'\nimport { Action } from './Action'\nimport { buildBuildPluginHooks } from '../plugin-system'\nimport { PluginHooks } from '../plugin-system-struct'\nimport { DateEnv } from '../datelib/env'\nimport { CalendarApi } from '../CalendarApi'\nimport { StandardTheme } from '../theme/StandardTheme'\nimport { EventSourceHash } from '../structs/event-source'\nimport { buildViewSpecs, ViewSpec } from '../structs/view-spec'\nimport { mapHash, isPropsEqual } from '../util/object'\nimport { DateProfileGenerator, DateProfileGeneratorProps } from '../DateProfileGenerator'\nimport { reduceViewType } from './view-type'\nimport { getInitialDate, reduceCurrentDate } from './current-date'\nimport { reduceDynamicOptionOverrides } from './options'\nimport { reduceDateProfile } from './date-profile'\nimport { reduceEventSources, initEventSources, reduceEventSourcesNewTimeZone, computeEventSourcesLoading } from './eventSources'\nimport { reduceEventStore, rezoneEventStoreDates } from './eventStore'\nimport { reduceDateSelection } from './date-selection'\nimport { reduceSelectedEvent } from './selected-event'\nimport { reduceEventDrag } from './event-drag'\nimport { reduceEventResize } from './event-resize'\nimport { Emitter } from '../common/Emitter'\nimport { EventUiHash, EventUi, createEventUi } from '../component/event-ui'\nimport { EventDefHash } from '../structs/event-def'\nimport { parseToolbars } from '../toolbar-parse'\nimport {\n CalendarOptionsRefined, CalendarOptions,\n CALENDAR_OPTION_REFINERS, COMPLEX_OPTION_COMPARATORS,\n ViewOptions, ViewOptionsRefined,\n BASE_OPTION_DEFAULTS, mergeRawOptions,\n BASE_OPTION_REFINERS, VIEW_OPTION_REFINERS,\n CalendarListeners, CALENDAR_LISTENER_REFINERS, Dictionary,\n} from '../options'\nimport { rangeContainsMarker } from '../datelib/date-range'\nimport { ViewApi } from '../ViewApi'\nimport { parseBusinessHours } from '../structs/business-hours'\nimport { globalPlugins } from '../global-plugins'\nimport { createEmptyEventStore } from '../structs/event-store'\nimport { CalendarContext } from '../CalendarContext'\nimport { CalendarDataManagerState, CalendarOptionsData, CalendarCurrentViewData, CalendarData } from './data-types'\nimport { TaskRunner } from '../util/TaskRunner'\nimport { buildTitle } from './title-formatting'\n\nexport interface CalendarDataManagerProps {\n optionOverrides: CalendarOptions\n calendarApi: CalendarApi\n onAction?: (action: Action) => void\n onData?: (data: CalendarData) => void\n}\n\nexport type ReducerFunc = ( // TODO: rename to CalendarDataInjector. move view-props-manip hook here as well?\n currentState: Dictionary | null,\n action: Action | null,\n context: CalendarContext & CalendarDataManagerState // more than just context\n) => Dictionary\n\n// in future refactor, do the redux-style function(state=initial) for initial-state\n// also, whatever is happening in constructor, have it happen in action queue too\n\nexport class CalendarDataManager {\n private computeOptionsData = memoize(this._computeOptionsData)\n private computeCurrentViewData = memoize(this._computeCurrentViewData)\n private organizeRawLocales = memoize(organizeRawLocales)\n private buildLocale = memoize(buildLocale)\n private buildPluginHooks = buildBuildPluginHooks()\n private buildDateEnv = memoize(buildDateEnv)\n private buildTheme = memoize(buildTheme)\n private parseToolbars = memoize(parseToolbars)\n private buildViewSpecs = memoize(buildViewSpecs)\n private buildDateProfileGenerator = memoizeObjArg(buildDateProfileGenerator)\n private buildViewApi = memoize(buildViewApi)\n private buildViewUiProps = memoizeObjArg(buildViewUiProps)\n private buildEventUiBySource = memoize(buildEventUiBySource, isPropsEqual)\n private buildEventUiBases = memoize(buildEventUiBases)\n private parseContextBusinessHours = memoizeObjArg(parseContextBusinessHours)\n private buildTitle = memoize(buildTitle)\n\n public emitter = new Emitter<CalendarListeners>()\n private actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this))\n private props: CalendarDataManagerProps\n private state: CalendarDataManagerState\n private data: CalendarData\n\n public currentCalendarOptionsInput: CalendarOptions = {}\n private currentCalendarOptionsRefined: CalendarOptionsRefined = ({} as any)\n private currentViewOptionsInput: ViewOptions = {}\n private currentViewOptionsRefined: ViewOptionsRefined = ({} as any)\n public currentCalendarOptionsRefiners: any = {}\n\n constructor(props: CalendarDataManagerProps) {\n this.props = props\n this.actionRunner.pause()\n\n let dynamicOptionOverrides: CalendarOptions = {}\n let optionsData = this.computeOptionsData(\n props.optionOverrides,\n dynamicOptionOverrides,\n props.calendarApi,\n )\n\n let currentViewType = optionsData.calendarOptions.initialView || optionsData.pluginHooks.initialView\n let currentViewData = this.computeCurrentViewData(\n currentViewType,\n optionsData,\n props.optionOverrides,\n dynamicOptionOverrides,\n )\n\n // wire things up\n // TODO: not DRY\n props.calendarApi.currentDataManager = this\n this.emitter.setThisContext(props.calendarApi)\n this.emitter.setOptions(currentViewData.options)\n\n let currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv)\n let dateProfile = currentViewData.dateProfileGenerator.build(currentDate)\n\n if (!rangeContainsMarker(dateProfile.activeRange, currentDate)) {\n currentDate = dateProfile.currentRange.start\n }\n\n let calendarContext: CalendarContext = {\n dateEnv: optionsData.dateEnv,\n options: optionsData.calendarOptions,\n pluginHooks: optionsData.pluginHooks,\n calendarApi: props.calendarApi,\n dispatch: this.dispatch,\n emitter: this.emitter,\n getCurrentData: this.getCurrentData,\n }\n\n // needs to be after setThisContext\n for (let callback of optionsData.pluginHooks.contextInit) {\n callback(calendarContext)\n }\n\n // NOT DRY\n let eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext)\n\n let initialState: CalendarDataManagerState = {\n dynamicOptionOverrides,\n currentViewType,\n currentDate,\n dateProfile,\n businessHours: this.parseContextBusinessHours(calendarContext), // weird to have this in state\n eventSources,\n eventUiBases: {},\n eventStore: createEmptyEventStore(),\n renderableEventStore: createEmptyEventStore(),\n dateSelection: null,\n eventSelection: '',\n eventDrag: null,\n eventResize: null,\n selectionConfig: this.buildViewUiProps(calendarContext).selectionConfig,\n }\n let contextAndState = { ...calendarContext, ...initialState }\n\n for (let reducer of optionsData.pluginHooks.reducers) {\n __assign(initialState, reducer(null, null, contextAndState))\n }\n\n if (computeIsLoading(initialState, calendarContext)) {\n this.emitter.trigger('loading', true) // NOT DRY\n }\n\n this.state = initialState\n this.updateData()\n this.actionRunner.resume()\n }\n\n getCurrentData = () => this.data\n\n dispatch = (action: Action) => {\n this.actionRunner.request(action) // protects against recursive calls to _handleAction\n }\n\n resetOptions(optionOverrides: CalendarOptions, append?: boolean) {\n let { props } = this\n\n props.optionOverrides = append\n ? { ...props.optionOverrides, ...optionOverrides }\n : optionOverrides\n\n this.actionRunner.request({ // hack. will cause updateData\n type: 'NOTHING',\n })\n }\n\n _handleAction(action: Action) {\n let { props, state, emitter } = this\n\n let dynamicOptionOverrides = reduceDynamicOptionOverrides(state.dynamicOptionOverrides, action)\n let optionsData = this.computeOptionsData(\n props.optionOverrides,\n dynamicOptionOverrides,\n props.calendarApi,\n )\n\n let currentViewType = reduceViewType(state.currentViewType, action)\n let currentViewData = this.computeCurrentViewData(\n currentViewType,\n optionsData,\n props.optionOverrides,\n dynamicOptionOverrides,\n )\n\n // wire things up\n // TODO: not DRY\n props.calendarApi.currentDataManager = this\n emitter.setThisContext(props.calendarApi)\n emitter.setOptions(currentViewData.options)\n\n let calendarContext: CalendarContext = {\n dateEnv: optionsData.dateEnv,\n options: optionsData.calendarOptions,\n pluginHooks: optionsData.pluginHooks,\n calendarApi: props.calendarApi,\n dispatch: this.dispatch,\n emitter,\n getCurrentData: this.getCurrentData,\n }\n\n let { currentDate, dateProfile } = state\n\n if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) { // hack\n dateProfile = currentViewData.dateProfileGenerator.build(currentDate)\n }\n\n currentDate = reduceCurrentDate(currentDate, action)\n dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator)\n\n if (\n action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator\n action.type === 'NEXT' || // \"\n !rangeContainsMarker(dateProfile.currentRange, currentDate)\n ) {\n currentDate = dateProfile.currentRange.start\n }\n\n let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext)\n let eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext)\n let isEventsLoading = computeEventSourcesLoading(eventSources) // BAD. also called in this func in computeIsLoading\n\n let renderableEventStore =\n (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?\n (state.renderableEventStore || eventStore) : // try from previous state\n eventStore\n\n let { eventUiSingleBase, selectionConfig } = this.buildViewUiProps(calendarContext) // will memoize obj\n let eventUiBySource = this.buildEventUiBySource(eventSources)\n let eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource)\n\n let newState: CalendarDataManagerState = {\n dynamicOptionOverrides,\n currentViewType,\n currentDate,\n dateProfile,\n eventSources,\n eventStore,\n renderableEventStore,\n selectionConfig,\n eventUiBases,\n businessHours: this.parseContextBusinessHours(calendarContext), // will memoize obj\n dateSelection: reduceDateSelection(state.dateSelection, action),\n eventSelection: reduceSelectedEvent(state.eventSelection, action),\n eventDrag: reduceEventDrag(state.eventDrag, action),\n eventResize: reduceEventResize(state.eventResize, action),\n }\n let contextAndState = { ...calendarContext, ...newState }\n\n for (let reducer of optionsData.pluginHooks.reducers) {\n __assign(newState, reducer(state, action, contextAndState)) // give the OLD state, for old value\n }\n\n let wasLoading = computeIsLoading(state, calendarContext)\n let isLoading = computeIsLoading(newState, calendarContext)\n\n // TODO: use propSetHandlers in plugin system\n if (!wasLoading && isLoading) {\n emitter.trigger('loading', true)\n } else if (wasLoading && !isLoading) {\n emitter.trigger('loading', false)\n }\n\n this.state = newState\n\n if (props.onAction) {\n props.onAction(action)\n }\n }\n\n updateData() {\n let { props, state } = this\n let oldData = this.data\n\n let optionsData = this.computeOptionsData(\n props.optionOverrides,\n state.dynamicOptionOverrides,\n props.calendarApi,\n )\n\n let currentViewData = this.computeCurrentViewData(\n state.currentViewType,\n optionsData,\n props.optionOverrides,\n state.dynamicOptionOverrides,\n )\n\n let data: CalendarData = this.data = {\n viewTitle: this.buildTitle(state.dateProfile, currentViewData.options, optionsData.dateEnv),\n calendarApi: props.calendarApi,\n dispatch: this.dispatch,\n emitter: this.emitter,\n getCurrentData: this.getCurrentData,\n ...optionsData,\n ...currentViewData,\n ...state,\n }\n\n let changeHandlers = optionsData.pluginHooks.optionChangeHandlers\n let oldCalendarOptions = oldData && oldData.calendarOptions\n let newCalendarOptions = optionsData.calendarOptions\n\n if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {\n if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {\n // hack\n state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data)\n state.eventStore = data.eventStore = rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv)\n }\n\n for (let optionName in changeHandlers) {\n if (oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {\n changeHandlers[optionName](newCalendarOptions[optionName], data)\n }\n }\n }\n\n if (props.onData) {\n props.onData(data)\n }\n }\n\n _computeOptionsData(\n optionOverrides: CalendarOptions,\n dynamicOptionOverrides: CalendarOptions,\n calendarApi: CalendarApi,\n ): CalendarOptionsData {\n // TODO: blacklist options that are handled by optionChangeHandlers\n\n let {\n refinedOptions, pluginHooks, localeDefaults, availableLocaleData, extra,\n } = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides)\n\n warnUnknownOptions(extra)\n\n let dateEnv = this.buildDateEnv(\n refinedOptions.timeZone,\n refinedOptions.locale,\n refinedOptions.weekNumberCalculation,\n refinedOptions.firstDay,\n refinedOptions.weekText,\n pluginHooks,\n availableLocaleData,\n refinedOptions.defaultRangeSeparator,\n )\n\n let viewSpecs = this.buildViewSpecs(pluginHooks.views, optionOverrides, dynamicOptionOverrides, localeDefaults)\n let theme = this.buildTheme(refinedOptions, pluginHooks)\n let toolbarConfig = this.parseToolbars(refinedOptions, optionOverrides, theme, viewSpecs, calendarApi)\n\n return {\n calendarOptions: refinedOptions,\n pluginHooks,\n dateEnv,\n viewSpecs,\n theme,\n toolbarConfig,\n localeDefaults,\n availableRawLocales: availableLocaleData.map,\n }\n }\n\n // always called from behind a memoizer\n processRawCalendarOptions(optionOverrides: CalendarOptions, dynamicOptionOverrides: CalendarOptions) {\n let { locales, locale } = mergeRawOptions([\n BASE_OPTION_DEFAULTS,\n optionOverrides,\n dynamicOptionOverrides,\n ])\n let availableLocaleData = this.organizeRawLocales(locales)\n let availableRawLocales = availableLocaleData.map\n let localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options\n let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins)\n let refiners = this.currentCalendarOptionsRefiners = {\n ...BASE_OPTION_REFINERS,\n ...CALENDAR_LISTENER_REFINERS,\n ...CALENDAR_OPTION_REFINERS,\n ...pluginHooks.listenerRefiners,\n ...pluginHooks.optionRefiners,\n }\n let extra = {}\n\n let raw = mergeRawOptions([\n BASE_OPTION_DEFAULTS,\n localeDefaults,\n optionOverrides,\n dynamicOptionOverrides,\n ])\n let refined: Partial<CalendarOptionsRefined> = {}\n let currentRaw = this.currentCalendarOptionsInput\n let currentRefined = this.currentCalendarOptionsRefined\n let anyChanges = false\n\n for (let optionName in raw) {\n if (optionName !== 'plugins') { // because plugins is special-cased\n if (\n raw[optionName] === currentRaw[optionName] ||\n (\n COMPLEX_OPTION_COMPARATORS[optionName] &&\n (optionName in currentRaw) &&\n COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName])\n )\n ) {\n refined[optionName] = currentRefined[optionName]\n } else if (refiners[optionName]) {\n refined[optionName] = refiners[optionName](raw[optionName])\n anyChanges = true\n } else {\n extra[optionName] = currentRaw[optionName]\n }\n }\n }\n\n if (anyChanges) {\n this.currentCalendarOptionsInput = raw\n this.currentCalendarOptionsRefined = refined as CalendarOptionsRefined\n }\n\n return {\n rawOptions: this.currentCalendarOptionsInput,\n refinedOptions: this.currentCalendarOptionsRefined,\n pluginHooks,\n availableLocaleData,\n localeDefaults,\n extra,\n }\n }\n\n _computeCurrentViewData(\n viewType: string,\n optionsData: CalendarOptionsData,\n optionOverrides: CalendarOptions,\n dynamicOptionOverrides: CalendarOptions,\n ): CalendarCurrentViewData {\n let viewSpec = optionsData.viewSpecs[viewType]\n\n if (!viewSpec) {\n throw new Error(`viewType \"${viewType}\" is not available. Please make sure you've loaded all neccessary plugins`)\n }\n\n let { refinedOptions, extra } = this.processRawViewOptions(\n viewSpec,\n optionsData.pluginHooks,\n optionsData.localeDefaults,\n optionOverrides,\n dynamicOptionOverrides,\n )\n\n warnUnknownOptions(extra)\n\n let dateProfileGenerator = this.buildDateProfileGenerator({\n dateProfileGeneratorClass: viewSpec.optionDefaults.dateProfileGeneratorClass as any,\n duration: viewSpec.duration,\n durationUnit: viewSpec.durationUnit,\n usesMinMaxTime: viewSpec.optionDefaults.usesMinMaxTime as any,\n dateEnv: optionsData.dateEnv,\n calendarApi: this.props.calendarApi, // should come from elsewhere?\n slotMinTime: refinedOptions.slotMinTime,\n slotMaxTime: refinedOptions.slotMaxTime,\n showNonCurrentDates: refinedOptions.showNonCurrentDates,\n dayCount: refinedOptions.dayCount,\n dateAlignment: refinedOptions.dateAlignment,\n dateIncrement: refinedOptions.dateIncrement,\n hiddenDays: refinedOptions.hiddenDays,\n weekends: refinedOptions.weekends,\n nowInput: refinedOptions.now,\n validRangeInput: refinedOptions.validRange,\n visibleRangeInput: refinedOptions.visibleRange,\n monthMode: refinedOptions.monthMode,\n fixedWeekCount: refinedOptions.fixedWeekCount,\n })\n\n let viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv)\n\n return { viewSpec, options: refinedOptions, dateProfileGenerator, viewApi }\n }\n\n processRawViewOptions(\n viewSpec: ViewSpec,\n pluginHooks: PluginHooks,\n localeDefaults: CalendarOptions,\n optionOverrides: CalendarOptions,\n dynamicOptionOverrides: CalendarOptions,\n ) {\n let raw = mergeRawOptions([\n BASE_OPTION_DEFAULTS,\n viewSpec.optionDefaults,\n localeDefaults,\n optionOverrides,\n viewSpec.optionOverrides,\n dynamicOptionOverrides,\n ])\n let refiners = {\n ...BASE_OPTION_REFINERS,\n ...CALENDAR_LISTENER_REFINERS,\n ...CALENDAR_OPTION_REFINERS,\n ...VIEW_OPTION_REFINERS,\n ...pluginHooks.listenerRefiners,\n ...pluginHooks.optionRefiners,\n }\n let refined: Partial<ViewOptionsRefined> = {}\n let currentRaw = this.currentViewOptionsInput\n let currentRefined = this.currentViewOptionsRefined\n let anyChanges = false\n let extra = {}\n\n for (let optionName in raw) {\n if (raw[optionName] === currentRaw[optionName]) {\n refined[optionName] = currentRefined[optionName]\n } else {\n if (raw[optionName] === this.currentCalendarOptionsInput[optionName]) {\n if (optionName in this.currentCalendarOptionsRefined) { // might be an \"extra\" prop\n refined[optionName] = this.currentCalendarOptionsRefined[optionName]\n }\n } else if (refiners[optionName]) {\n refined[optionName] = refiners[optionName](raw[optionName])\n } else {\n extra[optionName] = raw[optionName]\n }\n\n anyChanges = true\n }\n }\n\n if (anyChanges) {\n this.currentViewOptionsInput = raw\n this.currentViewOptionsRefined = refined as ViewOptionsRefined\n }\n\n return {\n rawOptions: this.currentViewOptionsInput,\n refinedOptions: this.currentViewOptionsRefined,\n extra,\n }\n }\n}\n\nfunction buildDateEnv(\n timeZone: string,\n explicitLocale: LocaleSingularArg,\n weekNumberCalculation,\n firstDay: number | undefined,\n weekText,\n pluginHooks: PluginHooks,\n availableLocaleData: RawLocaleInfo,\n defaultSeparator: string,\n) {\n let locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map)\n\n return new DateEnv({\n calendarSystem: 'gregory', // TODO: make this a setting\n timeZone,\n namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,\n locale,\n weekNumberCalculation,\n firstDay,\n weekText,\n cmdFormatter: pluginHooks.cmdFormatter,\n defaultSeparator,\n })\n}\n\nfunction buildTheme(options: CalendarOptionsRefined, pluginHooks: PluginHooks) {\n let ThemeClass = pluginHooks.themeClasses[options.themeSystem] || StandardTheme\n\n return new ThemeClass(options)\n}\n\nfunction buildDateProfileGenerator(props: DateProfileGeneratorProps): DateProfileGenerator {\n let DateProfileGeneratorClass = props.dateProfileGeneratorClass || DateProfileGenerator\n\n return new DateProfileGeneratorClass(props)\n}\n\nfunction buildViewApi(type: string, getCurrentData: () => CalendarData, dateEnv: DateEnv) {\n return new ViewApi(type, getCurrentData, dateEnv)\n}\n\nfunction buildEventUiBySource(eventSources: EventSourceHash): EventUiHash {\n return mapHash(eventSources, (eventSource) => eventSource.ui)\n}\n\nfunction buildEventUiBases(eventDefs: EventDefHash, eventUiSingleBase: EventUi, eventUiBySource: EventUiHash) {\n let eventUiBases: EventUiHash = { '': eventUiSingleBase }\n\n for (let defId in eventDefs) {\n let def = eventDefs[defId]\n\n if (def.sourceId && eventUiBySource[def.sourceId]) {\n eventUiBases[defId] = eventUiBySource[def.sourceId]\n }\n }\n\n return eventUiBases\n}\n\nfunction buildViewUiProps(calendarContext: CalendarContext) {\n let { options } = calendarContext\n\n return {\n eventUiSingleBase: createEventUi(\n {\n display: options.eventDisplay,\n editable: options.editable, // without \"event\" at start\n startEditable: options.eventStartEditable,\n durationEditable: options.eventDurationEditable,\n constraint: options.eventConstraint,\n overlap: typeof options.eventOverlap === 'boolean' ? options.eventOverlap : undefined,\n allow: options.eventAllow,\n backgroundColor: options.eventBackgroundColor,\n borderColor: options.eventBorderColor,\n textColor: options.eventTextColor,\n color: options.eventColor,\n // classNames: options.eventClassNames // render hook will handle this\n },\n calendarContext,\n ),\n selectionConfig: createEventUi(\n {\n constraint: options.selectConstraint,\n overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,\n allow: options.selectAllow,\n },\n calendarContext,\n ),\n }\n}\n\nfunction computeIsLoading(state: CalendarDataManagerState, context: CalendarContext) {\n for (let isLoadingFunc of context.pluginHooks.isLoadingFuncs) {\n if (isLoadingFunc(state)) {\n return true\n }\n }\n\n return false\n}\n\nfunction parseContextBusinessHours(calendarContext: CalendarContext) {\n return parseBusinessHours(calendarContext.options.businessHours, calendarContext)\n}\n\nfunction warnUnknownOptions(options: any, viewName?: string) {\n for (let optionName in options) {\n console.warn(\n `Unknown option '${optionName}'` +\n (viewName ? ` for view '${viewName}'` : ''),\n )\n }\n}\n","import { Component, ComponentChildren } from '../vdom'\nimport { CalendarDataManager } from '../reducers/CalendarDataManager'\nimport { CalendarApi } from '../CalendarApi'\nimport { CalendarData } from '../reducers/data-types'\n\nexport interface CalendarDataProviderProps {\n optionOverrides: any\n calendarApi: CalendarApi\n children?: (data: CalendarData) => ComponentChildren\n}\n\n// TODO: move this to react plugin?\nexport class CalendarDataProvider extends Component<CalendarDataProviderProps, CalendarData> {\n dataManager: CalendarDataManager\n\n constructor(props: CalendarDataProviderProps) {\n super(props)\n\n this.dataManager = new CalendarDataManager({\n optionOverrides: props.optionOverrides,\n calendarApi: props.calendarApi,\n onData: this.handleData,\n })\n }\n\n handleData = (data: CalendarData) => {\n if (!this.dataManager) { // still within initial run, before assignment in constructor\n // eslint-disable-next-line react/no-direct-mutation-state\n this.state = data // can't use setState yet\n } else {\n this.setState(data)\n }\n }\n\n render() {\n return this.props.children(this.state)\n }\n\n componentDidUpdate(prevProps: CalendarDataProviderProps) {\n let newOptionOverrides = this.props.optionOverrides\n\n if (newOptionOverrides !== prevProps.optionOverrides) { // prevent recursive handleData\n this.dataManager.resetOptions(newOptionOverrides)\n }\n }\n}\n","import { DateProfile } from './DateProfileGenerator'\nimport { EventStore } from './structs/event-store'\nimport { EventUiHash } from './component/event-ui'\nimport { sliceEventStore, EventRenderRange } from './component/event-rendering'\nimport { DateSpan } from './structs/date-span'\nimport { EventInteractionState } from './interactions/event-interaction-state'\nimport { Duration } from './datelib/duration'\n\nexport interface ViewProps {\n dateProfile: DateProfile\n businessHours: EventStore\n eventStore: EventStore\n eventUiBases: EventUiHash\n dateSelection: DateSpan | null\n eventSelection: string\n eventDrag: EventInteractionState | null\n eventResize: EventInteractionState | null\n isHeightAuto: boolean\n forPrint: boolean\n}\n\n// HELPERS\n\n/*\nif nextDayThreshold is specified, slicing is done in an all-day fashion.\nyou can get nextDayThreshold from context.nextDayThreshold\n*/\nexport function sliceEvents(\n props: ViewProps & { dateProfile: DateProfile, nextDayThreshold: Duration },\n allDay?: boolean,\n): EventRenderRange[] {\n return sliceEventStore(\n props.eventStore,\n props.eventUiBases,\n props.dateProfile.activeRange,\n allDay ? props.nextDayThreshold : null,\n ).fg\n}\n","export abstract class NamedTimeZoneImpl {\n timeZoneName: string\n\n constructor(timeZoneName: string) {\n this.timeZoneName = timeZoneName\n }\n\n abstract offsetForArray(a: number[]): number\n\n abstract timestampToArray(ms: number): number[]\n}\n\nexport type NamedTimeZoneImplClass = { new(timeZoneName: string): NamedTimeZoneImpl }\n","export interface SegSpan {\n start: number\n end: number\n}\n\nexport interface SegEntry {\n index: number\n thickness: number // should be an integer\n span: SegSpan\n}\n\n// used internally. exposed for subclasses of SegHierarchy\nexport interface SegInsertion {\n level: number // will have an equal coord, or slightly before, entries in existing level\n levelCoord: number\n lateral: number // where to insert in the existing level. -1 if creating a new level\n touchingLevel: number // -1 if no touching\n touchingLateral: number // -1 if no touching\n touchingEntry: SegEntry // the last touching entry in the level\n stackCnt: number\n}\n\nexport interface SegRect extends SegEntry {\n levelCoord: number\n}\n\nexport interface SegEntryGroup {\n entries: SegEntry[]\n span: SegSpan\n}\n\nexport class SegHierarchy {\n // settings\n strictOrder: boolean = false\n allowReslicing: boolean = false\n maxCoord: number = -1 // -1 means no max\n maxStackCnt: number = -1 // -1 means no max\n\n levelCoords: number[] = [] // ordered\n entriesByLevel: SegEntry[][] = [] // parallel with levelCoords\n stackCnts: { [entryId: string]: number } = {} // TODO: use better technique!?\n\n addSegs(inputs: SegEntry[]): SegEntry[] {\n let hiddenEntries: SegEntry[] = []\n\n for (let input of inputs) {\n this.insertEntry(input, hiddenEntries)\n }\n\n return hiddenEntries\n }\n\n insertEntry(entry: SegEntry, hiddenEntries: SegEntry[]): number {\n let insertion = this.findInsertion(entry)\n\n if (this.isInsertionValid(insertion, entry)) {\n this.insertEntryAt(entry, insertion)\n return 1\n }\n\n return this.handleInvalidInsertion(insertion, entry, hiddenEntries)\n }\n\n isInsertionValid(insertion: SegInsertion, entry: SegEntry): boolean {\n return (this.maxCoord === -1 || insertion.levelCoord + entry.thickness <= this.maxCoord) &&\n (this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt)\n }\n\n // returns number of new entries inserted\n handleInvalidInsertion(insertion: SegInsertion, entry: SegEntry, hiddenEntries: SegEntry[]): number {\n if (this.allowReslicing && insertion.touchingEntry) {\n return this.splitEntry(entry, insertion.touchingEntry, hiddenEntries)\n }\n\n hiddenEntries.push(entry)\n return 0\n }\n\n splitEntry(entry: SegEntry, barrier: SegEntry, hiddenEntries: SegEntry[]): number {\n let partCnt = 0\n let splitHiddenEntries: SegEntry[] = []\n let entrySpan = entry.span\n let barrierSpan = barrier.span\n\n if (entrySpan.start < barrierSpan.start) {\n partCnt += this.insertEntry({\n index: entry.index,\n thickness: entry.thickness,\n span: { start: entrySpan.start, end: barrierSpan.start },\n }, splitHiddenEntries)\n }\n\n if (entrySpan.end > barrierSpan.end) {\n partCnt += this.insertEntry({\n index: entry.index,\n thickness: entry.thickness,\n span: { start: barrierSpan.end, end: entrySpan.end },\n }, splitHiddenEntries)\n }\n\n if (partCnt) {\n hiddenEntries.push({\n index: entry.index,\n thickness: entry.thickness,\n span: intersectSpans(barrierSpan, entrySpan), // guaranteed to intersect\n }, ...splitHiddenEntries)\n return partCnt\n }\n\n hiddenEntries.push(entry)\n return 0\n }\n\n insertEntryAt(entry: SegEntry, insertion: SegInsertion): void {\n let { entriesByLevel, levelCoords } = this\n\n if (insertion.lateral === -1) {\n // create a new level\n insertAt(levelCoords, insertion.level, insertion.levelCoord)\n insertAt(entriesByLevel, insertion.level, [entry])\n } else {\n // insert into existing level\n insertAt(entriesByLevel[insertion.level], insertion.lateral, entry)\n }\n\n this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt\n }\n\n findInsertion(newEntry: SegEntry): SegInsertion {\n let { levelCoords, entriesByLevel, strictOrder, stackCnts } = this\n let levelCnt = levelCoords.length\n let candidateCoord = 0\n let touchingLevel: number = -1\n let touchingLateral: number = -1\n let touchingEntry: SegEntry = null\n let stackCnt = 0\n\n for (let trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {\n let trackingCoord = levelCoords[trackingLevel]\n\n // if the current level is past the placed entry, we have found a good empty space and can stop.\n // if strictOrder, keep finding more lateral intersections.\n if (!strictOrder && trackingCoord >= candidateCoord + newEntry.thickness) {\n break\n }\n\n let trackingEntries = entriesByLevel[trackingLevel]\n let trackingEntry: SegEntry\n let searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd) // find first entry after newEntry's end\n let lateralIndex = searchRes[0] + searchRes[1] // if exact match (which doesn't collide), go to next one\n\n while ( // loop through entries that horizontally intersect\n (trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list\n trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry\n ) {\n let trackingEntryBottom = trackingCoord + trackingEntry.thickness\n // intersects into the top of the candidate?\n if (trackingEntryBottom > candidateCoord) {\n candidateCoord = trackingEntryBottom\n touchingEntry = trackingEntry\n touchingLevel = trackingLevel\n touchingLateral = lateralIndex\n }\n // butts up against top of candidate? (will happen if just intersected as well)\n if (trackingEntryBottom === candidateCoord) {\n // accumulate the highest possible stackCnt of the trackingEntries that butt up\n stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1)\n }\n lateralIndex += 1\n }\n }\n\n // the destination level will be after touchingEntry's level. find it\n let destLevel = 0\n if (touchingEntry) {\n destLevel = touchingLevel + 1\n while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {\n destLevel += 1\n }\n }\n\n // if adding to an existing level, find where to insert\n let destLateral = -1\n if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {\n destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0]\n }\n\n return {\n touchingLevel,\n touchingLateral,\n touchingEntry,\n stackCnt,\n levelCoord: candidateCoord,\n level: destLevel,\n lateral: destLateral,\n }\n }\n\n // sorted by levelCoord (lowest to highest)\n toRects(): SegRect[] {\n let { entriesByLevel, levelCoords } = this\n let levelCnt = entriesByLevel.length\n let rects: SegRect[] = []\n\n for (let level = 0; level < levelCnt; level += 1) {\n let entries = entriesByLevel[level]\n let levelCoord = levelCoords[level]\n\n for (let entry of entries) {\n rects.push({ ...entry, levelCoord })\n }\n }\n\n return rects\n }\n}\n\nexport function getEntrySpanEnd(entry: SegEntry) {\n return entry.span.end\n}\n\nexport function buildEntryKey(entry: SegEntry) { // TODO: use Map instead?\n return entry.index + ':' + entry.span.start\n}\n\n// returns groups with entries sorted by input order\nexport function groupIntersectingEntries(entries: SegEntry[]): SegEntryGroup[] {\n let merges: SegEntryGroup[] = []\n\n for (let entry of entries) {\n let filteredMerges: SegEntryGroup[] = []\n let hungryMerge: SegEntryGroup = { // the merge that will eat what it collides with\n span: entry.span,\n entries: [entry],\n }\n\n for (let merge of merges) {\n if (intersectSpans(merge.span, hungryMerge.span)) {\n hungryMerge = {\n entries: merge.entries.concat(hungryMerge.entries), // keep preexisting merge's items first. maintains order\n span: joinSpans(merge.span, hungryMerge.span),\n }\n } else {\n filteredMerges.push(merge)\n }\n }\n\n filteredMerges.push(hungryMerge)\n merges = filteredMerges\n }\n\n return merges\n}\n\nexport function joinSpans(span0: SegSpan, span1: SegSpan): SegSpan {\n return {\n start: Math.min(span0.start, span1.start),\n end: Math.max(span0.end, span1.end),\n }\n}\n\nexport function intersectSpans(span0: SegSpan, span1: SegSpan): SegSpan | null {\n let start = Math.max(span0.start, span1.start)\n let end = Math.min(span0.end, span1.end)\n\n if (start < end) {\n return { start, end }\n }\n\n return null\n}\n\n// general util\n// ---------------------------------------------------------------------------------------------------------------------\n\nfunction insertAt<Item>(arr: Item[], index: number, item: Item) {\n arr.splice(index, 0, item)\n}\n\nexport function binarySearch<Item>(\n a: Item[],\n searchVal: number,\n getItemVal: (item: Item) => number,\n): [number, number] { // returns [level, isExactMatch ? 1 : 0]\n let startIndex = 0\n let endIndex = a.length // exclusive\n\n if (!endIndex || searchVal < getItemVal(a[startIndex])) { // no items OR before first item\n return [0, 0]\n }\n if (searchVal > getItemVal(a[endIndex - 1])) { // after last item\n return [endIndex, 0]\n }\n\n while (startIndex < endIndex) {\n let middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2)\n let middleVal = getItemVal(a[middleIndex])\n\n if (searchVal < middleVal) {\n endIndex = middleIndex\n } else if (searchVal > middleVal) {\n startIndex = middleIndex + 1\n } else { // equal!\n return [middleIndex, 1]\n }\n }\n\n return [startIndex, 0]\n}\n","import { DateComponent } from '../component/DateComponent'\nimport { Hit } from './hit'\n\nexport abstract class Interaction {\n component: DateComponent<any>\n isHitComboAllowed: ((hit0: Hit, hit1: Hit) => boolean) | null\n\n constructor(settings: InteractionSettings) {\n this.component = settings.component\n this.isHitComboAllowed = settings.isHitComboAllowed || null\n }\n\n destroy() {\n }\n}\n\nexport type InteractionClass = { new(settings: InteractionSettings): Interaction }\n\nexport interface InteractionSettingsInput {\n el: HTMLElement\n useEventCenter?: boolean\n isHitComboAllowed?: (hit0: Hit, hit1: Hit) => boolean\n}\n\nexport interface InteractionSettings {\n component: DateComponent<any>\n el: HTMLElement\n useEventCenter: boolean\n isHitComboAllowed: ((hit0: Hit, hit1: Hit) => boolean) | null\n}\n\nexport type InteractionSettingsStore = { [componenUid: string]: InteractionSettings }\n\nexport function parseInteractionSettings(component: DateComponent<any>, input: InteractionSettingsInput): InteractionSettings {\n return {\n component,\n el: input.el,\n useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,\n isHitComboAllowed: input.isHitComboAllowed || null,\n }\n}\n\nexport function interactionSettingsToStore(settings: InteractionSettings) {\n return {\n [settings.component.uid]: settings,\n }\n}\n\n// global state\nexport const interactionSettingsStore: InteractionSettingsStore = {}\n","import { Emitter } from '../common/Emitter'\n\n/*\nAn abstraction for a dragging interaction originating on an event.\nDoes higher-level things than PointerDragger, such as possibly:\n- a \"mirror\" that moves with the pointer\n- a minimum number of pixels or other criteria for a true drag to begin\n\nsubclasses must emit:\n- pointerdown\n- dragstart\n- dragmove\n- pointerup\n- dragend\n*/\nexport abstract class ElementDragging { // TODO: rename to *Interface?\n emitter: Emitter<any>\n\n constructor(el: HTMLElement, selector?: string) {\n this.emitter = new Emitter()\n }\n\n destroy() {\n }\n\n // if given true, should prevent dragstart+dragmove+dragend from firing\n abstract setIgnoreMove(bool: boolean): void\n\n setMirrorIsVisible(bool: boolean) {\n // optional if subclass doesn't want to support a mirror\n }\n\n setMirrorNeedsRevert(bool: boolean) {\n // optional if subclass doesn't want to support a mirror\n }\n\n setAutoScrollEnabled(bool: boolean) {\n // optional\n }\n}\n\nexport type ElementDraggingClass = { new(el: HTMLElement, selector?: string): ElementDragging }\n","// TODO: get rid of this in favor of options system,\n// tho it's really easy to access this globally rather than pass thru options.\nexport const config = {} as any\n","import { createDuration, Duration } from '../datelib/duration'\nimport { refineProps, RawOptionsFromRefiners, Dictionary } from '../options'\n\n/*\nInformation about what will happen when an external element is dragged-and-dropped\nonto a calendar. Contains information for creating an event.\n*/\n\nconst DRAG_META_REFINERS = {\n startTime: createDuration,\n duration: createDuration,\n create: Boolean,\n sourceId: String,\n}\n\nexport type DragMetaInput =\n RawOptionsFromRefiners<typeof DRAG_META_REFINERS> &\n { [otherProp: string]: any } // for leftoverProps\n\nexport interface DragMeta {\n startTime: Duration | null\n duration: Duration | null\n create: boolean // create an event when dropped?\n sourceId: string // similar to addEvent's parameter\n leftoverProps: Dictionary\n}\n\nexport function parseDragMeta(raw: DragMetaInput): DragMeta {\n let { refined, extra } = refineProps(raw, DRAG_META_REFINERS)\n\n return {\n startTime: refined.startTime || null,\n duration: refined.duration || null,\n create: refined.create != null ? refined.create : true,\n sourceId: refined.sourceId,\n leftoverProps: extra,\n }\n}\n","import { createElement, VNode } from './vdom'\nimport { BaseComponent } from './vdom-util'\nimport { ToolbarWidget } from './toolbar-struct'\n\nexport interface ToolbarContent {\n title: string\n titleId: string\n navUnit: string\n activeButton: string\n isTodayEnabled: boolean\n isPrevEnabled: boolean\n isNextEnabled: boolean\n}\n\nexport interface ToolbarSectionProps extends ToolbarContent {\n widgetGroups: ToolbarWidget[][]\n}\n\nexport class ToolbarSection extends BaseComponent<ToolbarSectionProps> {\n render() {\n let children = this.props.widgetGroups.map((widgetGroup) => this.renderWidgetGroup(widgetGroup))\n\n return createElement('div', { className: 'fc-toolbar-chunk' }, ...children)\n }\n\n renderWidgetGroup(widgetGroup: ToolbarWidget[]) {\n let { props } = this\n let { theme } = this.context\n let children: VNode[] = []\n let isOnlyButtons = true\n\n for (let widget of widgetGroup) {\n let { buttonName, buttonClick, buttonText, buttonIcon, buttonHint } = widget\n\n if (buttonName === 'title') {\n isOnlyButtons = false\n children.push(\n <h2 className=\"fc-toolbar-title\" id={props.titleId}>{props.title}</h2>,\n )\n } else {\n let isPressed = buttonName === props.activeButton\n let isDisabled =\n (!props.isTodayEnabled && buttonName === 'today') ||\n (!props.isPrevEnabled && buttonName === 'prev') ||\n (!props.isNextEnabled && buttonName === 'next')\n\n let buttonClasses = [`fc-${buttonName}-button`, theme.getClass('button')]\n if (isPressed) {\n buttonClasses.push(theme.getClass('buttonActive'))\n }\n\n children.push(\n <button\n type=\"button\"\n title={typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint}\n disabled={isDisabled}\n aria-pressed={isPressed}\n className={buttonClasses.join(' ')}\n onClick={buttonClick}\n >\n {buttonText || (buttonIcon ? <span className={buttonIcon} /> : '')}\n </button>,\n )\n }\n }\n\n if (children.length > 1) {\n let groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || ''\n\n return createElement('div', { className: groupClassName }, ...children)\n }\n return children[0]\n }\n}\n","import { createElement } from './vdom'\nimport { BaseComponent } from './vdom-util'\nimport { ToolbarModel, ToolbarWidget } from './toolbar-struct'\nimport { ToolbarSection, ToolbarContent } from './ToolbarSection'\n\nexport interface ToolbarProps extends ToolbarContent {\n extraClassName: string // wish this could be array, but easier for pureness\n model: ToolbarModel\n titleId: string\n}\n\nexport class Toolbar extends BaseComponent<ToolbarProps> {\n render() {\n let { model, extraClassName } = this.props\n let forceLtr = false\n let startContent\n let endContent\n let sectionWidgets = model.sectionWidgets\n let centerContent = sectionWidgets.center\n\n if (sectionWidgets.left) {\n forceLtr = true\n startContent = sectionWidgets.left\n } else {\n startContent = sectionWidgets.start\n }\n\n if (sectionWidgets.right) {\n forceLtr = true\n endContent = sectionWidgets.right\n } else {\n endContent = sectionWidgets.end\n }\n\n let classNames = [\n extraClassName || '',\n 'fc-toolbar',\n forceLtr ? 'fc-toolbar-ltr' : '',\n ]\n\n return (\n <div className={classNames.join(' ')}>\n {this.renderSection('start', startContent || [])}\n {this.renderSection('center', centerContent || [])}\n {this.renderSection('end', endContent || [])}\n </div>\n )\n }\n\n renderSection(key: string, widgetGroups: ToolbarWidget[][]) {\n let { props } = this\n\n return (\n <ToolbarSection\n key={key}\n widgetGroups={widgetGroups}\n title={props.title}\n navUnit={props.navUnit}\n activeButton={props.activeButton}\n isTodayEnabled={props.isTodayEnabled}\n isPrevEnabled={props.isPrevEnabled}\n isNextEnabled={props.isNextEnabled}\n titleId={props.titleId}\n />\n )\n }\n}\n","import { BaseComponent, setRef } from './vdom-util'\nimport { ComponentChildren, Ref, createElement } from './vdom'\nimport { CssDimValue } from './scrollgrid/util'\n\nexport interface ViewContainerProps {\n labeledById: string\n liquid?: boolean\n height?: CssDimValue\n aspectRatio?: number\n elRef?: Ref<HTMLDivElement>\n children?: ComponentChildren\n}\n\ninterface ViewContainerState {\n availableWidth: number | null\n}\n\n// TODO: do function component?\nexport class ViewContainer extends BaseComponent<ViewContainerProps, ViewContainerState> {\n el: HTMLElement\n\n state: ViewContainerState = {\n availableWidth: null,\n }\n\n render() {\n let { props, state } = this\n let { aspectRatio } = props\n\n let classNames = [\n 'fc-view-harness',\n (aspectRatio || props.liquid || props.height)\n ? 'fc-view-harness-active' // harness controls the height\n : 'fc-view-harness-passive', // let the view do the height\n ]\n let height: CssDimValue = ''\n let paddingBottom: CssDimValue = ''\n\n if (aspectRatio) {\n if (state.availableWidth !== null) {\n height = state.availableWidth / aspectRatio\n } else {\n // while waiting to know availableWidth, we can't set height to *zero*\n // because will cause lots of unnecessary scrollbars within scrollgrid.\n // BETTER: don't start rendering ANYTHING yet until we know container width\n // NOTE: why not always use paddingBottom? Causes height oscillation (issue 5606)\n paddingBottom = `${(1 / aspectRatio) * 100}%`\n }\n } else {\n height = props.height || ''\n }\n\n return (\n <div\n aria-labelledby={props.labeledById}\n ref={this.handleEl}\n className={classNames.join(' ')}\n style={{ height, paddingBottom }}\n >\n {props.children}\n </div>\n )\n }\n\n componentDidMount() {\n this.context.addResizeHandler(this.handleResize)\n }\n\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleResize)\n }\n\n handleEl = (el: HTMLElement | null) => {\n this.el = el\n setRef(this.props.elRef, el)\n this.updateAvailableWidth()\n }\n\n handleResize = () => {\n this.updateAvailableWidth()\n }\n\n updateAvailableWidth() {\n if (\n this.el && // needed. but why?\n this.props.aspectRatio // aspectRatio is the only height setting that needs availableWidth\n ) {\n this.setState({ availableWidth: this.el.offsetWidth })\n }\n }\n}\n","import { listenBySelector } from '../util/dom-event'\nimport { EventApi } from '../api/EventApi'\nimport { elementClosest } from '../util/dom-manip'\nimport { getElSeg } from '../component/event-rendering'\nimport { Interaction, InteractionSettings } from './interaction'\nimport { ViewApi } from '../ViewApi'\n\nexport interface EventClickArg {\n el: HTMLElement\n event: EventApi\n jsEvent: MouseEvent\n view: ViewApi\n}\n\n/*\nDetects when the user clicks on an event within a DateComponent\n*/\nexport class EventClicking extends Interaction {\n constructor(settings: InteractionSettings) {\n super(settings)\n\n this.destroy = listenBySelector(\n settings.el,\n 'click',\n '.fc-event', // on both fg and bg events\n this.handleSegClick,\n )\n }\n\n handleSegClick = (ev: Event, segEl: HTMLElement) => {\n let { component } = this\n let { context } = component\n let seg = getElSeg(segEl)\n\n if (\n seg && // might be the <div> surrounding the more link\n component.isValidSegDownEl(ev.target as HTMLElement)\n ) {\n // our way to simulate a link click for elements that can't be <a> tags\n // grab before trigger fired in case trigger trashes DOM thru rerendering\n let hasUrlContainer = elementClosest(ev.target as HTMLElement, '.fc-event-forced-url')\n let url = hasUrlContainer ? (hasUrlContainer.querySelector('a[href]') as any).href : ''\n\n context.emitter.trigger('eventClick', {\n el: segEl,\n event: new EventApi(\n component.context,\n seg.eventRange.def,\n seg.eventRange.instance,\n ),\n jsEvent: ev as MouseEvent, // Is this always a mouse event? See #4655\n view: context.viewApi,\n } as EventClickArg)\n\n if (url && !ev.defaultPrevented) {\n window.location.href = url\n }\n }\n }\n}\n","import { listenToHoverBySelector } from '../util/dom-event'\nimport { EventApi } from '../api/EventApi'\nimport { getElSeg } from '../component/event-rendering'\nimport { Interaction, InteractionSettings } from './interaction'\nimport { ViewApi } from '../ViewApi'\n\nexport interface EventHoveringArg {\n el: HTMLElement\n event: EventApi\n jsEvent: MouseEvent\n view: ViewApi\n}\n\n/*\nTriggers events and adds/removes core classNames when the user's pointer\nenters/leaves event-elements of a component.\n*/\nexport class EventHovering extends Interaction {\n removeHoverListeners: () => void\n\n currentSegEl: HTMLElement\n\n constructor(settings: InteractionSettings) {\n super(settings)\n\n this.removeHoverListeners = listenToHoverBySelector(\n settings.el,\n '.fc-event', // on both fg and bg events\n this.handleSegEnter,\n this.handleSegLeave,\n )\n }\n\n destroy() {\n this.removeHoverListeners()\n }\n\n // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it\n handleEventElRemove = (el: HTMLElement) => {\n if (el === this.currentSegEl) {\n this.handleSegLeave(null, this.currentSegEl)\n }\n }\n\n handleSegEnter = (ev: Event, segEl: HTMLElement) => {\n if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper\n this.currentSegEl = segEl\n this.triggerEvent('eventMouseEnter', ev, segEl)\n }\n }\n\n handleSegLeave = (ev: Event | null, segEl: HTMLElement) => {\n if (this.currentSegEl) {\n this.currentSegEl = null\n this.triggerEvent('eventMouseLeave', ev, segEl)\n }\n }\n\n triggerEvent(publicEvName: 'eventMouseEnter' | 'eventMouseLeave', ev: Event | null, segEl: HTMLElement) {\n let { component } = this\n let { context } = component\n let seg = getElSeg(segEl)!\n\n if (!ev || component.isValidSegDownEl(ev.target as HTMLElement)) {\n context.emitter.trigger(publicEvName, {\n el: segEl,\n event: new EventApi(\n context,\n seg.eventRange.def,\n seg.eventRange.instance,\n ),\n jsEvent: ev as MouseEvent, // Is this always a mouse event? See #4655\n view: context.viewApi,\n } as EventHoveringArg)\n }\n }\n}\n","import { __assign } from 'tslib'\nimport { ViewContextType, buildViewContext } from './ViewContext'\nimport { ViewSpec } from './structs/view-spec'\nimport { ViewProps } from './View'\nimport { Toolbar } from './Toolbar'\nimport { DateProfileGenerator, DateProfile } from './DateProfileGenerator'\nimport { rangeContainsMarker } from './datelib/date-range'\nimport { memoize } from './util/memoize'\nimport { DateMarker } from './datelib/marker'\nimport { CalendarData } from './reducers/data-types'\nimport { ViewPropsTransformerClass } from './plugin-system-struct'\nimport { createElement, createRef, Fragment, VNode } from './vdom'\nimport { ViewContainer } from './ViewContainer'\nimport {\n Interaction,\n InteractionSettingsInput,\n InteractionClass,\n parseInteractionSettings,\n interactionSettingsStore,\n} from './interactions/interaction'\nimport { DateComponent } from './component/DateComponent'\nimport { EventClicking } from './interactions/EventClicking'\nimport { EventHovering } from './interactions/EventHovering'\nimport { getNow } from './reducers/current-date'\nimport { CalendarInteraction } from './calendar-utils'\nimport { DelayedRunner } from './util/DelayedRunner'\nimport { PureComponent } from './vdom-util'\nimport { getUniqueDomId } from './util/dom-manip'\n\nexport interface CalendarContentProps extends CalendarData {\n forPrint: boolean\n isHeightAuto: boolean\n}\n\nexport class CalendarContent extends PureComponent<CalendarContentProps> {\n private buildViewContext = memoize(buildViewContext)\n private buildViewPropTransformers = memoize(buildViewPropTransformers)\n private buildToolbarProps = memoize(buildToolbarProps)\n private headerRef = createRef<Toolbar>()\n private footerRef = createRef<Toolbar>()\n private interactionsStore: { [componentUid: string]: Interaction[] } = {}\n private calendarInteractions: CalendarInteraction[]\n\n // eslint-disable-next-line\n state = {\n viewLabelId: getUniqueDomId(),\n }\n\n /*\n renders INSIDE of an outer div\n */\n render() {\n let { props } = this\n let { toolbarConfig, options } = props\n\n let toolbarProps = this.buildToolbarProps(\n props.viewSpec,\n props.dateProfile,\n props.dateProfileGenerator,\n props.currentDate,\n getNow(props.options.now, props.dateEnv), // TODO: use NowTimer????\n props.viewTitle,\n )\n\n let viewVGrow = false\n let viewHeight: string | number = ''\n let viewAspectRatio: number | undefined\n\n if (props.isHeightAuto || props.forPrint) {\n viewHeight = ''\n } else if (options.height != null) {\n viewVGrow = true\n } else if (options.contentHeight != null) {\n viewHeight = options.contentHeight\n } else {\n viewAspectRatio = Math.max(options.aspectRatio, 0.5) // prevent from getting too tall\n }\n\n let viewContext = this.buildViewContext(\n props.viewSpec,\n props.viewApi,\n props.options,\n props.dateProfileGenerator,\n props.dateEnv,\n props.theme,\n props.pluginHooks,\n props.dispatch,\n props.getCurrentData,\n props.emitter,\n props.calendarApi,\n this.registerInteractiveComponent,\n this.unregisterInteractiveComponent,\n )\n\n let viewLabelId = (toolbarConfig.header && toolbarConfig.header.hasTitle)\n ? this.state.viewLabelId\n : ''\n\n return (\n <ViewContextType.Provider value={viewContext}>\n {toolbarConfig.header && (\n <Toolbar\n ref={this.headerRef}\n extraClassName=\"fc-header-toolbar\"\n model={toolbarConfig.header}\n titleId={viewLabelId}\n {...toolbarProps}\n />\n )}\n <ViewContainer\n liquid={viewVGrow}\n height={viewHeight}\n aspectRatio={viewAspectRatio}\n labeledById={viewLabelId}\n >\n {this.renderView(props)}\n {this.buildAppendContent()}\n </ViewContainer>\n {toolbarConfig.footer && (\n <Toolbar\n ref={this.footerRef}\n extraClassName=\"fc-footer-toolbar\"\n model={toolbarConfig.footer}\n titleId=\"\"\n {...toolbarProps}\n />\n )}\n </ViewContextType.Provider>\n )\n }\n\n componentDidMount() {\n let { props } = this\n\n this.calendarInteractions = props.pluginHooks.calendarInteractions\n .map((CalendarInteractionClass) => new CalendarInteractionClass(props))\n\n window.addEventListener('resize', this.handleWindowResize)\n\n let { propSetHandlers } = props.pluginHooks\n for (let propName in propSetHandlers) {\n propSetHandlers[propName](props[propName], props)\n }\n }\n\n componentDidUpdate(prevProps: CalendarContentProps) {\n let { props } = this\n\n let { propSetHandlers } = props.pluginHooks\n for (let propName in propSetHandlers) {\n if (props[propName] !== prevProps[propName]) {\n propSetHandlers[propName](props[propName], props)\n }\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleWindowResize)\n this.resizeRunner.clear()\n\n for (let interaction of this.calendarInteractions) {\n interaction.destroy()\n }\n\n this.props.emitter.trigger('_unmount')\n }\n\n buildAppendContent(): VNode {\n let { props } = this\n\n let children = props.pluginHooks.viewContainerAppends.map(\n (buildAppendContent) => buildAppendContent(props),\n )\n\n return createElement(Fragment, {}, ...children)\n }\n\n renderView(props: CalendarContentProps) {\n let { pluginHooks } = props\n let { viewSpec } = props\n\n let viewProps: ViewProps = {\n dateProfile: props.dateProfile,\n businessHours: props.businessHours,\n eventStore: props.renderableEventStore, // !\n eventUiBases: props.eventUiBases,\n dateSelection: props.dateSelection,\n eventSelection: props.eventSelection,\n eventDrag: props.eventDrag,\n eventResize: props.eventResize,\n isHeightAuto: props.isHeightAuto,\n forPrint: props.forPrint,\n }\n\n let transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers)\n\n for (let transformer of transformers) {\n __assign(\n viewProps,\n transformer.transform(viewProps, props),\n )\n }\n\n let ViewComponent = viewSpec.component\n\n return (\n <ViewComponent {...viewProps} />\n )\n }\n\n // Component Registration\n // -----------------------------------------------------------------------------------------------------------------\n\n registerInteractiveComponent = (component: DateComponent<any>, settingsInput: InteractionSettingsInput) => {\n let settings = parseInteractionSettings(component, settingsInput)\n let DEFAULT_INTERACTIONS: InteractionClass[] = [\n EventClicking,\n EventHovering,\n ]\n let interactionClasses: InteractionClass[] = DEFAULT_INTERACTIONS.concat(\n this.props.pluginHooks.componentInteractions,\n )\n let interactions = interactionClasses.map((TheInteractionClass) => new TheInteractionClass(settings))\n\n this.interactionsStore[component.uid] = interactions\n interactionSettingsStore[component.uid] = settings\n }\n\n unregisterInteractiveComponent = (component: DateComponent<any>) => {\n let listeners = this.interactionsStore[component.uid]\n\n if (listeners) {\n for (let listener of listeners) {\n listener.destroy()\n }\n delete this.interactionsStore[component.uid]\n }\n\n delete interactionSettingsStore[component.uid]\n }\n\n // Resizing\n // -----------------------------------------------------------------------------------------------------------------\n\n resizeRunner = new DelayedRunner(() => {\n this.props.emitter.trigger('_resize', true) // should window resizes be considered \"forced\" ?\n this.props.emitter.trigger('windowResize', { view: this.props.viewApi })\n })\n\n handleWindowResize = (ev: UIEvent) => {\n let { options } = this.props\n\n if (\n options.handleWindowResize &&\n ev.target === window // avoid jqui events\n ) {\n this.resizeRunner.request(options.windowResizeDelay)\n }\n }\n}\n\nfunction buildToolbarProps(\n viewSpec: ViewSpec,\n dateProfile: DateProfile,\n dateProfileGenerator: DateProfileGenerator,\n currentDate: DateMarker,\n now: DateMarker,\n title: string,\n) {\n // don't force any date-profiles to valid date profiles (the `false`) so that we can tell if it's invalid\n let todayInfo = dateProfileGenerator.build(now, undefined, false) // TODO: need `undefined` or else INFINITE LOOP for some reason\n let prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate, false)\n let nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate, false)\n\n return {\n title,\n activeButton: viewSpec.type,\n navUnit: viewSpec.singleUnit,\n isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),\n isPrevEnabled: prevInfo.isValid,\n isNextEnabled: nextInfo.isValid,\n }\n}\n\n// Plugin\n// -----------------------------------------------------------------------------------------------------------------\n\nfunction buildViewPropTransformers(theClasses: ViewPropsTransformerClass[]) {\n return theClasses.map((TheClass) => new TheClass())\n}\n","import { ComponentChildren } from './vdom'\nimport { BaseComponent } from './vdom-util'\nimport { CssDimValue } from './scrollgrid/util'\nimport { CalendarOptions, CalendarListeners } from './options'\nimport { Theme } from './theme/Theme'\nimport { getCanVGrowWithinCell } from './util/table-styling'\nimport { Emitter } from './common/Emitter'\n\nexport interface CalendarRootProps {\n options: CalendarOptions\n theme: Theme\n emitter: Emitter<CalendarListeners>\n children: (classNames: string[], height: CssDimValue, isHeightAuto: boolean, forPrint: boolean) => ComponentChildren\n}\n\ninterface CalendarRootState {\n forPrint: boolean\n}\n\nexport class CalendarRoot extends BaseComponent<CalendarRootProps, CalendarRootState> {\n state = {\n forPrint: false,\n }\n\n render() {\n let { props } = this\n let { options } = props\n let { forPrint } = this.state\n\n let isHeightAuto = forPrint || options.height === 'auto' || options.contentHeight === 'auto'\n let height = (!isHeightAuto && options.height != null) ? options.height : ''\n\n let classNames: string[] = [\n 'fc',\n forPrint ? 'fc-media-print' : 'fc-media-screen',\n `fc-direction-${options.direction}`,\n props.theme.getClass('root'),\n ]\n\n if (!getCanVGrowWithinCell()) {\n classNames.push('fc-liquid-hack')\n }\n\n return props.children(classNames, height, isHeightAuto, forPrint)\n }\n\n componentDidMount() {\n let { emitter } = this.props\n emitter.on('_beforeprint', this.handleBeforePrint)\n emitter.on('_afterprint', this.handleAfterPrint)\n }\n\n componentWillUnmount() {\n let { emitter } = this.props\n emitter.off('_beforeprint', this.handleBeforePrint)\n emitter.off('_afterprint', this.handleAfterPrint)\n }\n\n handleBeforePrint = () => {\n this.setState({ forPrint: true })\n }\n\n handleAfterPrint = () => {\n this.setState({ forPrint: false })\n }\n}\n","import { createFormatter } from '../datelib/formatting'\n\n// Computes a default column header formatting string if `colFormat` is not explicitly defined\nexport function computeFallbackHeaderFormat(datesRepDistinctDays: boolean, dayCnt: number) {\n // if more than one week row, or if there are a lot of columns with not much space,\n // put just the day numbers will be in each cell\n if (!datesRepDistinctDays || dayCnt > 10) {\n return createFormatter({ weekday: 'short' }) // \"Sat\"\n }\n\n if (dayCnt > 1) {\n return createFormatter({ weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }) // \"Sat 11/12\"\n }\n\n return createFormatter({ weekday: 'long' }) // \"Saturday\"\n}\n","import { DayHeaderContentArg } from '../render-hook-misc'\n\nexport const CLASS_NAME = 'fc-col-header-cell' // do the cushion too? no\n\nexport function renderInner(hookProps: DayHeaderContentArg) {\n return hookProps.text\n}\n","import { DateRange } from '../datelib/date-range'\nimport { getDayClassNames, getDateMeta } from '../component/date-rendering'\nimport { DateMarker } from '../datelib/marker'\nimport { createElement } from '../vdom'\nimport { DateFormatter } from '../datelib/DateFormatter'\nimport { formatDayString } from '../datelib/formatting-utils'\nimport { BaseComponent } from '../vdom-util'\nimport { RenderHook } from './render-hook'\nimport { buildNavLinkAttrs } from './nav-link'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { DayHeaderContentArg } from '../render-hook-misc'\nimport { Dictionary } from '../options'\nimport { CLASS_NAME, renderInner } from './table-cell-util'\n\nexport interface TableDateCellProps {\n date: DateMarker\n dateProfile: DateProfile\n todayRange: DateRange\n colCnt: number\n dayHeaderFormat: DateFormatter\n colSpan?: number\n isSticky?: boolean // TODO: get this outta here somehow\n extraDataAttrs?: Dictionary\n extraHookProps?: Dictionary\n}\n\nexport class TableDateCell extends BaseComponent<TableDateCellProps> { // BAD name for this class now. used in the Header\n render() {\n let { dateEnv, options, theme, viewApi } = this.context\n let { props } = this\n let { date, dateProfile } = props\n let dayMeta = getDateMeta(date, props.todayRange, null, dateProfile)\n\n let classNames = [CLASS_NAME].concat(\n getDayClassNames(dayMeta, theme),\n )\n let text = dateEnv.format(date, props.dayHeaderFormat)\n\n // if colCnt is 1, we are already in a day-view and don't need a navlink\n let navLinkAttrs = (!dayMeta.isDisabled && props.colCnt > 1)\n ? buildNavLinkAttrs(this.context, date)\n : {}\n\n let hookProps: DayHeaderContentArg = {\n date: dateEnv.toDate(date),\n view: viewApi,\n ...props.extraHookProps,\n text,\n ...dayMeta,\n }\n\n return (\n <RenderHook\n hookProps={hookProps}\n classNames={options.dayHeaderClassNames}\n content={options.dayHeaderContent}\n defaultContent={renderInner}\n didMount={options.dayHeaderDidMount}\n willUnmount={options.dayHeaderWillUnmount}\n >\n {(rootElRef, customClassNames, innerElRef, innerContent) => (\n <th\n ref={rootElRef}\n role=\"columnheader\"\n className={classNames.concat(customClassNames).join(' ')}\n data-date={!dayMeta.isDisabled ? formatDayString(date) : undefined}\n colSpan={props.colSpan}\n {...props.extraDataAttrs}\n >\n <div className=\"fc-scrollgrid-sync-inner\">\n {!dayMeta.isDisabled && (\n <a\n ref={innerElRef}\n className={[\n 'fc-col-header-cell-cushion',\n props.isSticky ? 'fc-sticky' : '',\n ].join(' ')}\n {...navLinkAttrs}\n >\n {innerContent}\n </a>\n )}\n </div>\n </th>\n )}\n </RenderHook>\n )\n }\n}\n","import { getDayClassNames, DateMeta } from '../component/date-rendering'\nimport { addDays } from '../datelib/marker'\nimport { createElement } from '../vdom'\nimport { DateFormatter } from '../datelib/DateFormatter'\nimport { BaseComponent } from '../vdom-util'\nimport { RenderHook } from './render-hook'\nimport { Dictionary } from '../options'\nimport { CLASS_NAME, renderInner } from './table-cell-util'\nimport { DayHeaderContentArg } from '../render-hook-misc'\nimport { createFormatter } from '../datelib/formatting'\n\nexport interface TableDowCellProps {\n dow: number\n dayHeaderFormat: DateFormatter\n colSpan?: number\n isSticky?: boolean // TODO: get this outta here somehow\n extraHookProps?: Dictionary\n extraDataAttrs?: Dictionary\n extraClassNames?: string[]\n}\n\nconst WEEKDAY_FORMAT = createFormatter({ weekday: 'long' })\n\nexport class TableDowCell extends BaseComponent<TableDowCellProps> {\n render() {\n let { props } = this\n let { dateEnv, theme, viewApi, options } = this.context\n let date = addDays(new Date(259200000), props.dow) // start with Sun, 04 Jan 1970 00:00:00 GMT\n let dateMeta: DateMeta = {\n dow: props.dow,\n isDisabled: false,\n isFuture: false,\n isPast: false,\n isToday: false,\n isOther: false,\n }\n let classNames = [CLASS_NAME].concat(\n getDayClassNames(dateMeta, theme),\n props.extraClassNames || [],\n )\n let text = dateEnv.format(date, props.dayHeaderFormat)\n let hookProps: DayHeaderContentArg = { // TODO: make this public?\n date,\n ...dateMeta,\n view: viewApi,\n ...props.extraHookProps,\n text,\n }\n\n return (\n <RenderHook\n hookProps={hookProps}\n classNames={options.dayHeaderClassNames}\n content={options.dayHeaderContent}\n defaultContent={renderInner}\n didMount={options.dayHeaderDidMount}\n willUnmount={options.dayHeaderWillUnmount}\n >\n {(rootElRef, customClassNames, innerElRef, innerContent) => (\n <th\n ref={rootElRef}\n role=\"columnheader\"\n className={classNames.concat(customClassNames).join(' ')}\n colSpan={props.colSpan}\n {...props.extraDataAttrs}\n >\n <div className=\"fc-scrollgrid-sync-inner\">\n <a\n aria-label={dateEnv.format(date, WEEKDAY_FORMAT)}\n className={[\n 'fc-col-header-cell-cushion',\n props.isSticky ? 'fc-sticky' : '',\n ].join(' ')}\n ref={innerElRef}\n >\n {innerContent}\n </a>\n </div>\n </th>\n )}\n </RenderHook>\n )\n }\n}\n","import { DateMarker, addMs, startOfDay, addDays } from './datelib/marker'\nimport { createDuration } from './datelib/duration'\nimport { ViewContext, ViewContextType } from './ViewContext'\nimport { ComponentChildren, Component } from './vdom'\nimport { DateRange } from './datelib/date-range'\nimport { getNow } from './reducers/current-date'\n\nexport interface NowTimerProps {\n unit: string // TODO: add type of unit\n children: (now: DateMarker, todayRange: DateRange) => ComponentChildren\n}\n\ninterface NowTimerState {\n nowDate: DateMarker\n todayRange: DateRange\n}\n\nexport class NowTimer extends Component<NowTimerProps, NowTimerState> {\n static contextType: any = ViewContextType\n context: ViewContext // do this for all components that use the context!!!\n initialNowDate: DateMarker\n initialNowQueriedMs: number\n timeoutId: any\n\n constructor(props: NowTimerProps, context: ViewContext) {\n super(props, context)\n\n this.initialNowDate = getNow(context.options.now, context.dateEnv)\n this.initialNowQueriedMs = new Date().valueOf()\n\n this.state = this.computeTiming().currentState\n }\n\n render() {\n let { props, state } = this\n return props.children(state.nowDate, state.todayRange)\n }\n\n componentDidMount() {\n this.setTimeout()\n }\n\n componentDidUpdate(prevProps: NowTimerProps) {\n if (prevProps.unit !== this.props.unit) {\n this.clearTimeout()\n this.setTimeout()\n }\n }\n\n componentWillUnmount() {\n this.clearTimeout()\n }\n\n private computeTiming() {\n let { props, context } = this\n let unroundedNow = addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs)\n let currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit)\n let nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit))\n let waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf()\n\n // there is a max setTimeout ms value (https://stackoverflow.com/a/3468650/96342)\n // ensure no longer than a day\n waitMs = Math.min(1000 * 60 * 60 * 24, waitMs)\n\n return {\n currentState: { nowDate: currentUnitStart, todayRange: buildDayRange(currentUnitStart) } as NowTimerState,\n nextState: { nowDate: nextUnitStart, todayRange: buildDayRange(nextUnitStart) } as NowTimerState,\n waitMs,\n }\n }\n\n private setTimeout() {\n let { nextState, waitMs } = this.computeTiming()\n\n this.timeoutId = setTimeout(() => {\n this.setState(nextState, () => {\n this.setTimeout()\n })\n }, waitMs)\n }\n\n private clearTimeout() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId)\n }\n }\n}\n\nfunction buildDayRange(date: DateMarker): DateRange { // TODO: make this a general util\n let start = startOfDay(date)\n let end = addDays(start, 1)\n\n return { start, end }\n}\n","import { BaseComponent } from '../vdom-util'\nimport { DateMarker } from '../datelib/marker'\nimport { computeFallbackHeaderFormat } from './table-utils'\nimport { VNode, createElement } from '../vdom'\nimport { TableDateCell } from './TableDateCell'\nimport { TableDowCell } from './TableDowCell'\nimport { NowTimer } from '../NowTimer'\nimport { DateRange } from '../datelib/date-range'\nimport { memoize } from '../util/memoize'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { DateFormatter } from '../datelib/DateFormatter'\n\nexport interface DayHeaderProps {\n dateProfile: DateProfile\n dates: DateMarker[]\n datesRepDistinctDays: boolean\n renderIntro?: (rowKey: string) => VNode\n}\n\nexport class DayHeader extends BaseComponent<DayHeaderProps> { // TODO: rename to DayHeaderTr?\n createDayHeaderFormatter = memoize(createDayHeaderFormatter)\n\n render() {\n let { context } = this\n let { dates, dateProfile, datesRepDistinctDays, renderIntro } = this.props\n\n let dayHeaderFormat = this.createDayHeaderFormatter(\n context.options.dayHeaderFormat,\n datesRepDistinctDays,\n dates.length,\n )\n\n return (\n <NowTimer unit=\"day\">\n {(nowDate: DateMarker, todayRange: DateRange) => (\n <tr role=\"row\">\n {renderIntro && renderIntro('day')}\n {dates.map((date) => (\n datesRepDistinctDays ? (\n <TableDateCell\n key={date.toISOString()}\n date={date}\n dateProfile={dateProfile}\n todayRange={todayRange}\n colCnt={dates.length}\n dayHeaderFormat={dayHeaderFormat}\n />\n ) : (\n <TableDowCell\n key={date.getUTCDay()}\n dow={date.getUTCDay()}\n dayHeaderFormat={dayHeaderFormat}\n />\n )\n ))}\n </tr>\n )}\n </NowTimer>\n )\n }\n}\n\nfunction createDayHeaderFormatter(explicitFormat: DateFormatter, datesRepDistinctDays, dateCnt) {\n return explicitFormat || computeFallbackHeaderFormat(datesRepDistinctDays, dateCnt)\n}\n","import { DateProfileGenerator } from '../DateProfileGenerator'\nimport { DateMarker, addDays, diffDays } from '../datelib/marker'\nimport { DateRange } from '../datelib/date-range'\n\nexport interface DaySeriesSeg {\n firstIndex: number\n lastIndex: number\n isStart: boolean\n isEnd: boolean\n}\n\nexport class DaySeriesModel {\n cnt: number\n dates: DateMarker[] // whole-day dates for each column. left to right\n indices: number[] // for each day from start, the offset\n\n constructor(range: DateRange, dateProfileGenerator: DateProfileGenerator) {\n let date: DateMarker = range.start\n let { end } = range\n let indices: number[] = []\n let dates: DateMarker[] = []\n let dayIndex = -1\n\n while (date < end) { // loop each day from start to end\n if (dateProfileGenerator.isHiddenDay(date)) {\n indices.push(dayIndex + 0.5) // mark that it's between indices\n } else {\n dayIndex += 1\n indices.push(dayIndex)\n dates.push(date)\n }\n date = addDays(date, 1)\n }\n\n this.dates = dates\n this.indices = indices\n this.cnt = dates.length\n }\n\n sliceRange(range: DateRange): DaySeriesSeg | null {\n let firstIndex = this.getDateDayIndex(range.start) // inclusive first index\n let lastIndex = this.getDateDayIndex(addDays(range.end, -1)) // inclusive last index\n\n let clippedFirstIndex = Math.max(0, firstIndex)\n let clippedLastIndex = Math.min(this.cnt - 1, lastIndex)\n\n // deal with in-between indices\n clippedFirstIndex = Math.ceil(clippedFirstIndex) // in-between starts round to next cell\n clippedLastIndex = Math.floor(clippedLastIndex) // in-between ends round to prev cell\n\n if (clippedFirstIndex <= clippedLastIndex) {\n return {\n firstIndex: clippedFirstIndex,\n lastIndex: clippedLastIndex,\n isStart: firstIndex === clippedFirstIndex,\n isEnd: lastIndex === clippedLastIndex,\n }\n }\n return null\n }\n\n // Given a date, returns its chronolocial cell-index from the first cell of the grid.\n // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n // If before the first offset, returns a negative number.\n // If after the last offset, returns an offset past the last cell offset.\n // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n private getDateDayIndex(date: DateMarker) {\n let { indices } = this\n let dayOffset = Math.floor(diffDays(this.dates[0], date))\n\n if (dayOffset < 0) {\n return indices[0] - 1\n }\n\n if (dayOffset >= indices.length) {\n return indices[indices.length - 1] + 1\n }\n\n return indices[dayOffset]\n }\n}\n","import { DaySeriesModel } from './DaySeriesModel'\nimport { DateRange } from '../datelib/date-range'\nimport { DateMarker } from '../datelib/marker'\nimport { Seg } from '../component/DateComponent'\nimport { Dictionary } from '../options'\n\nexport interface DayTableSeg extends Seg {\n row: number\n firstCol: number\n lastCol: number\n}\n\nexport interface DayTableCell {\n key: string // probably just the serialized date, but could be other metadata if this col is specific to another entity\n date: DateMarker\n extraHookProps?: Dictionary\n extraDataAttrs?: Dictionary\n extraClassNames?: string[]\n extraDateSpan?: Dictionary\n}\n\nexport class DayTableModel {\n rowCnt: number\n colCnt: number\n cells: DayTableCell[][]\n headerDates: DateMarker[]\n\n private daySeries: DaySeriesModel\n\n constructor(daySeries: DaySeriesModel, breakOnWeeks: boolean) {\n let { dates } = daySeries\n let daysPerRow\n let firstDay\n let rowCnt\n\n if (breakOnWeeks) {\n // count columns until the day-of-week repeats\n firstDay = dates[0].getUTCDay()\n for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow += 1) {\n if (dates[daysPerRow].getUTCDay() === firstDay) {\n break\n }\n }\n rowCnt = Math.ceil(dates.length / daysPerRow)\n } else {\n rowCnt = 1\n daysPerRow = dates.length\n }\n\n this.rowCnt = rowCnt\n this.colCnt = daysPerRow\n this.daySeries = daySeries\n this.cells = this.buildCells()\n this.headerDates = this.buildHeaderDates()\n }\n\n private buildCells() {\n let rows = []\n\n for (let row = 0; row < this.rowCnt; row += 1) {\n let cells = []\n\n for (let col = 0; col < this.colCnt; col += 1) {\n cells.push(\n this.buildCell(row, col),\n )\n }\n\n rows.push(cells)\n }\n\n return rows\n }\n\n private buildCell(row, col): DayTableCell {\n let date = this.daySeries.dates[row * this.colCnt + col]\n return {\n key: date.toISOString(),\n date,\n }\n }\n\n private buildHeaderDates() {\n let dates = []\n\n for (let col = 0; col < this.colCnt; col += 1) {\n dates.push(this.cells[0][col].date)\n }\n\n return dates\n }\n\n sliceRange(range: DateRange): DayTableSeg[] {\n let { colCnt } = this\n let seriesSeg = this.daySeries.sliceRange(range)\n let segs: DayTableSeg[] = []\n\n if (seriesSeg) {\n let { firstIndex, lastIndex } = seriesSeg\n let index = firstIndex\n\n while (index <= lastIndex) {\n let row = Math.floor(index / colCnt)\n let nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1)\n\n segs.push({\n row,\n firstCol: index % colCnt,\n lastCol: (nextIndex - 1) % colCnt,\n isStart: seriesSeg.isStart && index === firstIndex,\n isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex,\n })\n\n index = nextIndex\n }\n }\n\n return segs\n }\n}\n","import { DateRange } from '../datelib/date-range'\nimport { EventStore } from '../structs/event-store'\nimport { EventUiHash } from '../component/event-ui'\nimport { sliceEventStore, EventRenderRange } from '../component/event-rendering'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { Seg, EventSegUiInteractionState } from '../component/DateComponent' // TODO: rename EventSegUiInteractionState, move here\nimport { DateSpan, fabricateEventRange } from '../structs/date-span'\nimport { EventInteractionState } from '../interactions/event-interaction-state'\nimport { Duration } from '../datelib/duration'\nimport { memoize } from '../util/memoize'\nimport { DateMarker, addMs, addDays } from '../datelib/marker'\nimport { CalendarContext } from '../CalendarContext'\nimport { expandRecurring } from '../structs/recurring-event'\n\nexport interface SliceableProps {\n dateSelection: DateSpan\n businessHours: EventStore\n eventStore: EventStore\n eventDrag: EventInteractionState | null\n eventResize: EventInteractionState | null\n eventSelection: string\n eventUiBases: EventUiHash\n}\n\nexport interface SlicedProps<SegType extends Seg> {\n dateSelectionSegs: SegType[]\n businessHourSegs: SegType[]\n fgEventSegs: SegType[]\n bgEventSegs: SegType[]\n eventDrag: EventSegUiInteractionState | null\n eventResize: EventSegUiInteractionState | null\n eventSelection: string\n}\n\nexport abstract class Slicer<SegType extends Seg, ExtraArgs extends any[] = []> {\n private sliceBusinessHours = memoize(this._sliceBusinessHours)\n private sliceDateSelection = memoize(this._sliceDateSpan)\n private sliceEventStore = memoize(this._sliceEventStore)\n private sliceEventDrag = memoize(this._sliceInteraction)\n private sliceEventResize = memoize(this._sliceInteraction)\n\n abstract sliceRange(dateRange: DateRange, ...extraArgs: ExtraArgs): SegType[]\n protected forceDayIfListItem = false // hack\n\n sliceProps(\n props: SliceableProps,\n dateProfile: DateProfile,\n nextDayThreshold: Duration | null,\n context: CalendarContext,\n ...extraArgs: ExtraArgs\n ): SlicedProps<SegType> {\n let { eventUiBases } = props\n let eventSegs = this.sliceEventStore(props.eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs)\n\n return {\n dateSelectionSegs: this.sliceDateSelection(props.dateSelection, eventUiBases, context, ...extraArgs),\n businessHourSegs: this.sliceBusinessHours(props.businessHours, dateProfile, nextDayThreshold, context, ...extraArgs),\n fgEventSegs: eventSegs.fg,\n bgEventSegs: eventSegs.bg,\n eventDrag: this.sliceEventDrag(props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),\n eventResize: this.sliceEventResize(props.eventResize, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),\n eventSelection: props.eventSelection,\n } // TODO: give interactionSegs?\n }\n\n sliceNowDate( // does not memoize\n date: DateMarker,\n context: CalendarContext,\n ...extraArgs: ExtraArgs\n ): SegType[] {\n return this._sliceDateSpan(\n { range: { start: date, end: addMs(date, 1) }, allDay: false }, // add 1 ms, protect against null range\n {},\n context,\n ...extraArgs,\n )\n }\n\n private _sliceBusinessHours(\n businessHours: EventStore,\n dateProfile: DateProfile,\n nextDayThreshold: Duration | null,\n context: CalendarContext,\n ...extraArgs: ExtraArgs\n ): SegType[] {\n if (!businessHours) {\n return []\n }\n\n return this._sliceEventStore(\n expandRecurring(\n businessHours,\n computeActiveRange(dateProfile, Boolean(nextDayThreshold)),\n context,\n ),\n {},\n dateProfile,\n nextDayThreshold,\n ...extraArgs,\n ).bg\n }\n\n private _sliceEventStore(\n eventStore: EventStore,\n eventUiBases: EventUiHash,\n dateProfile: DateProfile,\n nextDayThreshold: Duration | null,\n ...extraArgs: ExtraArgs\n ): { bg: SegType[], fg: SegType[] } {\n if (eventStore) {\n let rangeRes = sliceEventStore(\n eventStore,\n eventUiBases,\n computeActiveRange(dateProfile, Boolean(nextDayThreshold)),\n nextDayThreshold,\n )\n\n return {\n bg: this.sliceEventRanges(rangeRes.bg, extraArgs),\n fg: this.sliceEventRanges(rangeRes.fg, extraArgs),\n }\n }\n return { bg: [], fg: [] }\n }\n\n private _sliceInteraction(\n interaction: EventInteractionState,\n eventUiBases: EventUiHash,\n dateProfile: DateProfile,\n nextDayThreshold: Duration | null,\n ...extraArgs: ExtraArgs\n ): EventSegUiInteractionState {\n if (!interaction) {\n return null\n }\n\n let rangeRes = sliceEventStore(\n interaction.mutatedEvents,\n eventUiBases,\n computeActiveRange(dateProfile, Boolean(nextDayThreshold)),\n nextDayThreshold,\n )\n\n return {\n segs: this.sliceEventRanges(rangeRes.fg, extraArgs),\n affectedInstances: interaction.affectedEvents.instances,\n isEvent: interaction.isEvent,\n }\n }\n\n private _sliceDateSpan(\n dateSpan: DateSpan,\n eventUiBases: EventUiHash,\n context: CalendarContext,\n ...extraArgs: ExtraArgs\n ): SegType[] {\n if (!dateSpan) {\n return []\n }\n\n let eventRange = fabricateEventRange(dateSpan, eventUiBases, context)\n let segs = this.sliceRange(dateSpan.range, ...extraArgs)\n\n for (let seg of segs) {\n seg.eventRange = eventRange\n }\n\n return segs\n }\n\n /*\n \"complete\" seg means it has component and eventRange\n */\n private sliceEventRanges(\n eventRanges: EventRenderRange[],\n extraArgs: ExtraArgs,\n ): SegType[] {\n let segs: SegType[] = []\n\n for (let eventRange of eventRanges) {\n segs.push(...this.sliceEventRange(eventRange, extraArgs))\n }\n\n return segs\n }\n\n /*\n \"complete\" seg means it has component and eventRange\n */\n private sliceEventRange(\n eventRange: EventRenderRange,\n extraArgs: ExtraArgs,\n ): SegType[] {\n let dateRange = eventRange.range\n\n // hack to make multi-day events that are being force-displayed as list-items to take up only one day\n if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {\n dateRange = {\n start: dateRange.start,\n end: addDays(dateRange.start, 1),\n }\n }\n\n let segs = this.sliceRange(dateRange, ...extraArgs)\n\n for (let seg of segs) {\n seg.eventRange = eventRange\n seg.isStart = eventRange.isStart && seg.isStart\n seg.isEnd = eventRange.isEnd && seg.isEnd\n }\n\n return segs\n }\n}\n\n/*\nfor incorporating slotMinTime/slotMaxTime if appropriate\nTODO: should be part of DateProfile!\nTimelineDateProfile already does this btw\n*/\nfunction computeActiveRange(dateProfile: DateProfile, isComponentAllDay: boolean): DateRange {\n let range = dateProfile.activeRange\n\n if (isComponentAllDay) {\n return range\n }\n\n return {\n start: addMs(range.start, dateProfile.slotMinTime.milliseconds),\n end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5), // 864e5 = ms in a day\n }\n}\n","import { EventStore, filterEventStoreDefs } from './structs/event-store'\nimport { DateSpan } from './structs/date-span'\nimport { rangeContainsRange, rangesIntersect, DateRange, OpenDateRange } from './datelib/date-range'\nimport { EventApi } from './api/EventApi'\nimport { compileEventUis } from './component/event-rendering'\nimport { excludeInstances } from './reducers/eventStore'\nimport { EventInteractionState } from './interactions/event-interaction-state'\nimport { SplittableProps } from './component/event-splitting'\nimport { mapHash } from './util/object'\nimport { CalendarContext } from './CalendarContext'\nimport { buildDateSpanApiWithContext } from './calendar-utils'\nimport { Constraint } from './structs/constraint'\nimport { expandRecurring } from './structs/recurring-event'\nimport { DateProfile } from './DateProfileGenerator'\n\n// high-level segmenting-aware tester functions\n// ------------------------------------------------------------------------------------------------------------------------\n\nexport function isInteractionValid(\n interaction: EventInteractionState,\n dateProfile: DateProfile,\n context: CalendarContext,\n) {\n let { instances } = interaction.mutatedEvents\n for (let instanceId in instances) {\n if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {\n return false\n }\n }\n return isNewPropsValid({ eventDrag: interaction }, context) // HACK: the eventDrag props is used for ALL interactions\n}\n\nexport function isDateSelectionValid(\n dateSelection: DateSpan,\n dateProfile: DateProfile,\n context: CalendarContext,\n) {\n if (!rangeContainsRange(dateProfile.validRange, dateSelection.range)) {\n return false\n }\n return isNewPropsValid({ dateSelection }, context)\n}\n\nfunction isNewPropsValid(newProps, context: CalendarContext) {\n let calendarState = context.getCurrentData()\n\n let props = {\n businessHours: calendarState.businessHours,\n dateSelection: '',\n eventStore: calendarState.eventStore,\n eventUiBases: calendarState.eventUiBases,\n eventSelection: '',\n eventDrag: null,\n eventResize: null,\n ...newProps,\n }\n\n return (context.pluginHooks.isPropsValid || isPropsValid)(props, context)\n}\n\nexport function isPropsValid(state: SplittableProps, context: CalendarContext, dateSpanMeta = {}, filterConfig?): boolean {\n if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {\n return false\n }\n\n if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {\n return false\n }\n\n return true\n}\n\n// Moving Event Validation\n// ------------------------------------------------------------------------------------------------------------------------\n\nfunction isInteractionPropsValid(state: SplittableProps, context: CalendarContext, dateSpanMeta: any, filterConfig): boolean {\n let currentState = context.getCurrentData()\n let interaction = state.eventDrag // HACK: the eventDrag props is used for ALL interactions\n\n let subjectEventStore = interaction.mutatedEvents\n let subjectDefs = subjectEventStore.defs\n let subjectInstances = subjectEventStore.instances\n let subjectConfigs = compileEventUis(\n subjectDefs,\n interaction.isEvent ?\n state.eventUiBases :\n { '': currentState.selectionConfig }, // if not a real event, validate as a selection\n )\n\n if (filterConfig) {\n subjectConfigs = mapHash(subjectConfigs, filterConfig)\n }\n\n // exclude the subject events. TODO: exclude defs too?\n let otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances)\n\n let otherDefs = otherEventStore.defs\n let otherInstances = otherEventStore.instances\n let otherConfigs = compileEventUis(otherDefs, state.eventUiBases)\n\n for (let subjectInstanceId in subjectInstances) {\n let subjectInstance = subjectInstances[subjectInstanceId]\n let subjectRange = subjectInstance.range\n let subjectConfig = subjectConfigs[subjectInstance.defId]\n let subjectDef = subjectDefs[subjectInstance.defId]\n\n // constraint\n if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {\n return false\n }\n\n // overlap\n\n let { eventOverlap } = context.options\n let eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null\n\n for (let otherInstanceId in otherInstances) {\n let otherInstance = otherInstances[otherInstanceId]\n\n // intersect! evaluate\n if (rangesIntersect(subjectRange, otherInstance.range)) {\n let otherOverlap = otherConfigs[otherInstance.defId].overlap\n\n // consider the other event's overlap. only do this if the subject event is a \"real\" event\n if (otherOverlap === false && interaction.isEvent) {\n return false\n }\n\n if (subjectConfig.overlap === false) {\n return false\n }\n\n if (eventOverlapFunc && !eventOverlapFunc(\n new EventApi(context, otherDefs[otherInstance.defId], otherInstance), // still event\n new EventApi(context, subjectDef, subjectInstance), // moving event\n )) {\n return false\n }\n }\n }\n\n // allow (a function)\n\n let calendarEventStore = currentState.eventStore // need global-to-calendar, not local to component (splittable)state\n\n for (let subjectAllow of subjectConfig.allows) {\n let subjectDateSpan: DateSpan = {\n ...dateSpanMeta,\n range: subjectInstance.range,\n allDay: subjectDef.allDay,\n }\n\n let origDef = calendarEventStore.defs[subjectDef.defId]\n let origInstance = calendarEventStore.instances[subjectInstanceId]\n let eventApi\n\n if (origDef) { // was previously in the calendar\n eventApi = new EventApi(context, origDef, origInstance)\n } else { // was an external event\n eventApi = new EventApi(context, subjectDef) // no instance, because had no dates\n }\n\n if (!subjectAllow(\n buildDateSpanApiWithContext(subjectDateSpan, context),\n eventApi,\n )) {\n return false\n }\n }\n }\n\n return true\n}\n\n// Date Selection Validation\n// ------------------------------------------------------------------------------------------------------------------------\n\nfunction isDateSelectionPropsValid(state: SplittableProps, context: CalendarContext, dateSpanMeta: any, filterConfig): boolean {\n let relevantEventStore = state.eventStore\n let relevantDefs = relevantEventStore.defs\n let relevantInstances = relevantEventStore.instances\n\n let selection = state.dateSelection\n let selectionRange = selection.range\n let { selectionConfig } = context.getCurrentData()\n\n if (filterConfig) {\n selectionConfig = filterConfig(selectionConfig)\n }\n\n // constraint\n if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {\n return false\n }\n\n // overlap\n\n let { selectOverlap } = context.options\n let selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null\n\n for (let relevantInstanceId in relevantInstances) {\n let relevantInstance = relevantInstances[relevantInstanceId]\n\n // intersect! evaluate\n if (rangesIntersect(selectionRange, relevantInstance.range)) {\n if (selectionConfig.overlap === false) {\n return false\n }\n\n if (selectOverlapFunc && !selectOverlapFunc(\n new EventApi(context, relevantDefs[relevantInstance.defId], relevantInstance),\n null,\n )) {\n return false\n }\n }\n }\n\n // allow (a function)\n for (let selectionAllow of selectionConfig.allows) {\n let fullDateSpan = { ...dateSpanMeta, ...selection }\n\n if (!selectionAllow(\n buildDateSpanApiWithContext(fullDateSpan, context),\n null,\n )) {\n return false\n }\n }\n\n return true\n}\n\n// Constraint Utils\n// ------------------------------------------------------------------------------------------------------------------------\n\nfunction allConstraintsPass(\n constraints: Constraint[],\n subjectRange: DateRange,\n otherEventStore: EventStore,\n businessHoursUnexpanded: EventStore,\n context: CalendarContext,\n): boolean {\n for (let constraint of constraints) {\n if (!anyRangesContainRange(\n constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context),\n subjectRange,\n )) {\n return false\n }\n }\n\n return true\n}\n\nfunction constraintToRanges(\n constraint: Constraint,\n subjectRange: DateRange, // for expanding a recurring constraint, or expanding business hours\n otherEventStore: EventStore, // for if constraint is an even group ID\n businessHoursUnexpanded: EventStore, // for if constraint is 'businessHours'\n context: CalendarContext, // for expanding businesshours\n): OpenDateRange[] {\n if (constraint === 'businessHours') {\n return eventStoreToRanges(\n expandRecurring(businessHoursUnexpanded, subjectRange, context),\n )\n }\n\n if (typeof constraint === 'string') { // an group ID\n return eventStoreToRanges(\n filterEventStoreDefs(otherEventStore, (eventDef) => eventDef.groupId === constraint),\n )\n }\n\n if (typeof constraint === 'object' && constraint) { // non-null object\n return eventStoreToRanges(\n expandRecurring(constraint, subjectRange, context),\n )\n }\n\n return [] // if it's false\n}\n\n// TODO: move to event-store file?\nfunction eventStoreToRanges(eventStore: EventStore): DateRange[] {\n let { instances } = eventStore\n let ranges: DateRange[] = []\n\n for (let instanceId in instances) {\n ranges.push(instances[instanceId].range)\n }\n\n return ranges\n}\n\n// TODO: move to geom file?\nfunction anyRangesContainRange(outerRanges: DateRange[], innerRange: DateRange): boolean {\n for (let outerRange of outerRanges) {\n if (rangeContainsRange(outerRange, innerRange)) {\n return true\n }\n }\n\n return false\n}\n","import { createElement, ComponentChildren, Ref } from '../vdom'\nimport { BaseComponent, setRef } from '../vdom-util'\nimport { CssDimValue, ScrollerLike } from './util'\n\nexport type OverflowValue = 'auto' | 'hidden' | 'scroll' | 'visible'\n\nexport interface ScrollerProps {\n overflowX: OverflowValue\n overflowY: OverflowValue\n overcomeLeft?: number\n overcomeRight?: number\n overcomeBottom?: number\n maxHeight?: CssDimValue\n liquid?: boolean\n liquidIsAbsolute?: boolean\n children?: ComponentChildren\n elRef?: Ref<HTMLElement>\n}\n\nconst VISIBLE_HIDDEN_RE = /^(visible|hidden)$/\n\nexport class Scroller extends BaseComponent<ScrollerProps> implements ScrollerLike {\n private el: HTMLElement // TODO: just use this.base?\n\n render() {\n let { props } = this\n let { liquid, liquidIsAbsolute } = props\n let isAbsolute = liquid && liquidIsAbsolute\n let className = ['fc-scroller']\n\n if (liquid) {\n if (liquidIsAbsolute) {\n className.push('fc-scroller-liquid-absolute')\n } else {\n className.push('fc-scroller-liquid')\n }\n }\n\n return (\n <div\n ref={this.handleEl}\n className={className.join(' ')}\n style={{\n overflowX: props.overflowX,\n overflowY: props.overflowY,\n left: (isAbsolute && -(props.overcomeLeft || 0)) || '',\n right: (isAbsolute && -(props.overcomeRight || 0)) || '',\n bottom: (isAbsolute && -(props.overcomeBottom || 0)) || '',\n marginLeft: (!isAbsolute && -(props.overcomeLeft || 0)) || '',\n marginRight: (!isAbsolute && -(props.overcomeRight || 0)) || '',\n marginBottom: (!isAbsolute && -(props.overcomeBottom || 0)) || '',\n maxHeight: props.maxHeight || '',\n }}\n >\n {props.children}\n </div>\n )\n }\n\n handleEl = (el: HTMLElement) => {\n this.el = el\n setRef(this.props.elRef, el)\n }\n\n needsXScrolling() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {\n return false\n }\n\n // testing scrollWidth>clientWidth is unreliable cross-browser when pixel heights aren't integers.\n // much more reliable to see if children are taller than the scroller, even tho doesn't account for\n // inner-child margins and absolute positioning\n\n let { el } = this\n let realClientWidth = this.el.getBoundingClientRect().width - this.getYScrollbarWidth()\n let { children } = el\n\n for (let i = 0; i < children.length; i += 1) {\n let childEl = children[i]\n\n if (childEl.getBoundingClientRect().width > realClientWidth) {\n return true\n }\n }\n\n return false\n }\n\n needsYScrolling() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {\n return false\n }\n\n // testing scrollHeight>clientHeight is unreliable cross-browser when pixel heights aren't integers.\n // much more reliable to see if children are taller than the scroller, even tho doesn't account for\n // inner-child margins and absolute positioning\n\n let { el } = this\n let realClientHeight = this.el.getBoundingClientRect().height - this.getXScrollbarWidth()\n let { children } = el\n\n for (let i = 0; i < children.length; i += 1) {\n let childEl = children[i]\n\n if (childEl.getBoundingClientRect().height > realClientHeight) {\n return true\n }\n }\n\n return false\n }\n\n getXScrollbarWidth() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {\n return 0\n }\n return this.el.offsetHeight - this.el.clientHeight // only works because we guarantee no borders. TODO: add to CSS with important?\n }\n\n getYScrollbarWidth() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {\n return 0\n }\n return this.el.offsetWidth - this.el.clientWidth // only works because we guarantee no borders. TODO: add to CSS with important?\n }\n}\n","import { hashValuesToArray, collectFromHash } from './object'\n\n/*\nTODO: somehow infer OtherArgs from masterCallback?\nTODO: infer RefType from masterCallback if provided\n*/\nexport class RefMap<RefType> {\n public currentMap: { [key: string]: RefType } = {}\n private depths: { [key: string]: number } = {}\n private callbackMap: { [key: string]: (val: RefType | null) => void } = {}\n\n constructor(public masterCallback?: (val: RefType | null, key: string) => void) {\n }\n\n createRef(key: string | number) {\n let refCallback = this.callbackMap[key]\n\n if (!refCallback) {\n refCallback = this.callbackMap[key] = (val: RefType | null) => {\n this.handleValue(val, String(key))\n }\n }\n\n return refCallback\n }\n\n handleValue = (val: RefType | null, key: string) => { // bind in case users want to pass it around\n let { depths, currentMap } = this\n let removed = false\n let added = false\n\n if (val !== null) {\n // for bug... ACTUALLY: can probably do away with this now that callers don't share numeric indices anymore\n removed = (key in currentMap)\n\n currentMap[key] = val\n depths[key] = (depths[key] || 0) + 1\n added = true\n } else {\n depths[key] -= 1\n\n if (!depths[key]) {\n delete currentMap[key]\n delete this.callbackMap[key]\n removed = true\n }\n }\n\n if (this.masterCallback) {\n if (removed) {\n this.masterCallback(null, String(key))\n }\n if (added) {\n this.masterCallback(val, String(key))\n }\n }\n }\n\n // TODO: check callers that don't care about order. should use getAll instead\n // NOTE: this method has become less valuable now that we are encouraged to map order by some other index\n // TODO: provide ONE array-export function, buildArray, which fails on non-numeric indexes. caller can manipulate and \"collect\"\n collect(\n startIndex?: number,\n endIndex?: number,\n step?: number,\n ) {\n return collectFromHash(this.currentMap, startIndex, endIndex, step)\n }\n\n getAll(): RefType[] { // returns in no partical order!\n return hashValuesToArray(this.currentMap)\n }\n}\n","import { VNode, createElement, Ref } from '../vdom'\nimport { findElements } from '../util/dom-manip'\nimport { ViewContext } from '../ViewContext'\nimport { computeSmallestCellWidth } from '../util/misc'\nimport { isPropsEqual } from '../util/object'\nimport { isArraysEqual } from '../util/array'\nimport { BaseOptionsRefined } from '../options'\n\nexport type CssDimValue = string | number // TODO: move to more general file\n\nexport interface ColProps {\n width?: CssDimValue\n minWidth?: CssDimValue\n span?: number\n}\n\nexport interface SectionConfig {\n outerContent?: VNode\n type: 'body' | 'header' | 'footer'\n className?: string\n maxHeight?: number\n liquid?: boolean\n expandRows?: boolean // TODO: how to get a bottom rule?\n syncRowHeights?: boolean // yuck\n isSticky?: boolean\n}\n\nexport type ChunkConfigContent = (contentProps: ChunkContentCallbackArgs) => VNode\nexport type ChunkConfigRowContent = VNode | ChunkConfigContent\n\nexport interface ChunkConfig {\n outerContent?: VNode\n content?: ChunkConfigContent\n rowContent?: ChunkConfigRowContent\n scrollerElRef?: Ref<HTMLDivElement>\n elRef?: Ref<HTMLTableCellElement>\n tableClassName?: string\n}\n\nexport interface ChunkContentCallbackArgs { // TODO: util for wrapping tables!?\n tableColGroupNode: VNode\n tableMinWidth: CssDimValue\n clientWidth: number | null // important to know whether 0 or not-yet-determined. for headless testing\n clientHeight: number | null //\n expandRows: boolean\n syncRowHeights: boolean\n rowSyncHeights: number[]\n reportRowHeightChange: (rowEl: HTMLElement, isStable: boolean) => void\n}\n\nexport function computeShrinkWidth(chunkEls: HTMLElement[]) { // all in same COL!\n let shrinkCells = findElements(chunkEls, '.fc-scrollgrid-shrink')\n let largestWidth = 0\n\n for (let shrinkCell of shrinkCells) {\n largestWidth = Math.max(\n largestWidth,\n computeSmallestCellWidth(shrinkCell),\n )\n }\n\n return Math.ceil(largestWidth) // <table> elements work best with integers. round up to ensure contents fits\n}\n\nexport interface ScrollerLike { // have scrollers implement?\n needsYScrolling(): boolean\n needsXScrolling(): boolean\n}\n\nexport function getSectionHasLiquidHeight(props: { liquid: boolean }, sectionConfig: SectionConfig) {\n return props.liquid && sectionConfig.liquid // does the section do liquid-height? (need to have whole scrollgrid liquid-height as well)\n}\n\nexport function getAllowYScrolling(props: { liquid: boolean }, sectionConfig: SectionConfig) {\n return sectionConfig.maxHeight != null || // if its possible for the height to max out, we might need scrollbars\n getSectionHasLiquidHeight(props, sectionConfig) // if the section is liquid height, it might condense enough to require scrollbars\n}\n\n// TODO: ONLY use `arg`. force out internal function to use same API\nexport function renderChunkContent(\n sectionConfig: SectionConfig,\n chunkConfig: ChunkConfig,\n arg: ChunkContentCallbackArgs,\n isHeader: boolean,\n) {\n let { expandRows } = arg\n\n let content: VNode = typeof chunkConfig.content === 'function' ?\n chunkConfig.content(arg) :\n createElement(\n 'table',\n {\n role: 'presentation',\n className: [\n chunkConfig.tableClassName,\n sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : '',\n ].join(' '),\n style: {\n minWidth: arg.tableMinWidth, // because colMinWidths arent enough\n width: arg.clientWidth,\n height: expandRows ? arg.clientHeight : '', // css `height` on a <table> serves as a min-height\n },\n },\n arg.tableColGroupNode,\n createElement(\n isHeader ? 'thead' : 'tbody',\n {\n role: 'presentation',\n },\n typeof chunkConfig.rowContent === 'function'\n ? chunkConfig.rowContent(arg)\n : chunkConfig.rowContent,\n ),\n )\n\n return content\n}\n\nexport function isColPropsEqual(cols0: ColProps[], cols1: ColProps[]) {\n return isArraysEqual(cols0, cols1, isPropsEqual)\n}\n\nexport function renderMicroColGroup(cols: ColProps[], shrinkWidth?: number): VNode {\n let colNodes: VNode[] = []\n\n /*\n for ColProps with spans, it would have been great to make a single <col span=\"\">\n HOWEVER, Chrome was getting messing up distributing the width to <td>/<th> elements with colspans.\n SOLUTION: making individual <col> elements makes Chrome behave.\n */\n for (let colProps of cols) {\n let span = colProps.span || 1\n\n for (let i = 0; i < span; i += 1) {\n colNodes.push(\n <col\n style={{\n width: colProps.width === 'shrink' ? sanitizeShrinkWidth(shrinkWidth) : (colProps.width || ''),\n minWidth: colProps.minWidth || '',\n }}\n />,\n )\n }\n }\n\n return createElement('colgroup', {}, ...colNodes)\n}\n\nexport function sanitizeShrinkWidth(shrinkWidth?: number) {\n /* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth\n 4 accounts for 2 2-pixel borders. TODO: better solution? */\n return shrinkWidth == null ? 4 : shrinkWidth\n}\n\nexport function hasShrinkWidth(cols: ColProps[]) {\n for (let col of cols) {\n if (col.width === 'shrink') {\n return true\n }\n }\n\n return false\n}\n\nexport function getScrollGridClassNames(liquid: boolean, context: ViewContext) {\n let classNames = [\n 'fc-scrollgrid',\n context.theme.getClass('table'),\n ]\n\n if (liquid) {\n classNames.push('fc-scrollgrid-liquid')\n }\n\n return classNames\n}\n\nexport function getSectionClassNames(sectionConfig: SectionConfig, wholeTableVGrow: boolean) {\n let classNames = [\n 'fc-scrollgrid-section',\n `fc-scrollgrid-section-${sectionConfig.type}`,\n sectionConfig.className, // used?\n ]\n\n if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {\n classNames.push('fc-scrollgrid-section-liquid')\n }\n\n if (sectionConfig.isSticky) {\n classNames.push('fc-scrollgrid-section-sticky')\n }\n\n return classNames\n}\n\nexport function renderScrollShim(arg: ChunkContentCallbackArgs) {\n return (\n <div\n className=\"fc-scrollgrid-sticky-shim\"\n style={{\n width: arg.clientWidth,\n minWidth: arg.tableMinWidth,\n }}\n />\n )\n}\n\nexport function getStickyHeaderDates(options: BaseOptionsRefined) {\n let { stickyHeaderDates } = options\n\n if (stickyHeaderDates == null || stickyHeaderDates === 'auto') {\n stickyHeaderDates = options.height === 'auto' || options.viewHeight === 'auto'\n }\n\n return stickyHeaderDates\n}\n\nexport function getStickyFooterScrollbar(options: BaseOptionsRefined) {\n let { stickyFooterScrollbar } = options\n\n if (stickyFooterScrollbar == null || stickyFooterScrollbar === 'auto') {\n stickyFooterScrollbar = options.height === 'auto' || options.viewHeight === 'auto'\n }\n\n return stickyFooterScrollbar\n}\n","import { VNode, createElement, Fragment } from '../vdom'\nimport { BaseComponent, setRef } from '../vdom-util'\nimport { Scroller, OverflowValue } from './Scroller'\nimport { RefMap } from '../util/RefMap'\nimport {\n ColProps, SectionConfig, renderMicroColGroup, computeShrinkWidth, getScrollGridClassNames, getSectionClassNames, getAllowYScrolling,\n renderChunkContent, getSectionHasLiquidHeight, ChunkConfig, hasShrinkWidth, CssDimValue,\n isColPropsEqual,\n} from './util'\nimport { getCanVGrowWithinCell } from '../util/table-styling'\nimport { memoize } from '../util/memoize'\nimport { isPropsEqual } from '../util/object'\nimport { getScrollbarWidths } from '../util/scrollbar-width'\n\nexport interface SimpleScrollGridProps {\n cols: ColProps[]\n sections: SimpleScrollGridSection[]\n liquid: boolean // liquid *height*\n collapsibleWidth: boolean // can ALL sections be fully collapsed in width?\n height?: CssDimValue // TODO: give to real ScrollGrid\n}\n\nexport interface SimpleScrollGridSection extends SectionConfig {\n key: string\n chunk?: ChunkConfig\n}\n\ninterface SimpleScrollGridState {\n shrinkWidth: number | null\n forceYScrollbars: boolean\n scrollerClientWidths: { [key: string]: number }\n scrollerClientHeights: { [key: string]: number }\n}\n\nexport class SimpleScrollGrid extends BaseComponent<SimpleScrollGridProps, SimpleScrollGridState> {\n processCols = memoize((a) => a, isColPropsEqual) // so we get same `cols` props every time\n\n // yucky to memoize VNodes, but much more efficient for consumers\n renderMicroColGroup: typeof renderMicroColGroup = memoize(renderMicroColGroup)\n\n scrollerRefs = new RefMap<Scroller>()\n scrollerElRefs = new RefMap<HTMLElement>(this._handleScrollerEl.bind(this))\n\n state: SimpleScrollGridState = {\n shrinkWidth: null,\n forceYScrollbars: false,\n scrollerClientWidths: {},\n scrollerClientHeights: {},\n }\n\n render(): VNode {\n let { props, state, context } = this\n let sectionConfigs = props.sections || []\n let cols = this.processCols(props.cols)\n\n let microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth)\n let classNames = getScrollGridClassNames(props.liquid, context)\n\n if (props.collapsibleWidth) {\n classNames.push('fc-scrollgrid-collapsible')\n }\n\n // TODO: make DRY\n let configCnt = sectionConfigs.length\n let configI = 0\n let currentConfig: SimpleScrollGridSection\n let headSectionNodes: VNode[] = []\n let bodySectionNodes: VNode[] = []\n let footSectionNodes: VNode[] = []\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {\n headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true))\n configI += 1\n }\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {\n bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode, false))\n configI += 1\n }\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {\n footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true))\n configI += 1\n }\n\n // firefox bug: when setting height on table and there is a thead or tfoot,\n // the necessary height:100% on the liquid-height body section forces the *whole* table to be taller. (bug #5524)\n // use getCanVGrowWithinCell as a way to detect table-stupid firefox.\n // if so, use a simpler dom structure, jam everything into a lone tbody.\n let isBuggy = !getCanVGrowWithinCell()\n\n const roleAttrs = { role: 'rowgroup' }\n\n return createElement(\n 'table',\n {\n role: 'grid',\n className: classNames.join(' '),\n style: { height: props.height },\n },\n Boolean(!isBuggy && headSectionNodes.length) && createElement('thead', roleAttrs, ...headSectionNodes),\n Boolean(!isBuggy && bodySectionNodes.length) && createElement('tbody', roleAttrs, ...bodySectionNodes),\n Boolean(!isBuggy && footSectionNodes.length) && createElement('tfoot', roleAttrs, ...footSectionNodes),\n isBuggy && createElement('tbody', roleAttrs, ...headSectionNodes, ...bodySectionNodes, ...footSectionNodes),\n )\n }\n\n renderSection(sectionConfig: SimpleScrollGridSection, microColGroupNode: VNode, isHeader: boolean) {\n if ('outerContent' in sectionConfig) {\n return (\n <Fragment key={sectionConfig.key}>\n {sectionConfig.outerContent}\n </Fragment>\n )\n }\n\n return (\n <tr\n key={sectionConfig.key}\n role=\"presentation\"\n className={getSectionClassNames(sectionConfig, this.props.liquid).join(' ')}\n >\n {this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk, isHeader)}\n </tr>\n )\n }\n\n renderChunkTd(\n sectionConfig: SimpleScrollGridSection,\n microColGroupNode: VNode,\n chunkConfig: ChunkConfig,\n isHeader: boolean,\n ): createElement.JSX.Element {\n if ('outerContent' in chunkConfig) {\n return chunkConfig.outerContent\n }\n\n let { props } = this\n let { forceYScrollbars, scrollerClientWidths, scrollerClientHeights } = this.state\n\n let needsYScrolling = getAllowYScrolling(props, sectionConfig) // TODO: do lazily. do in section config?\n let isLiquid = getSectionHasLiquidHeight(props, sectionConfig)\n\n // for `!props.liquid` - is WHOLE scrollgrid natural height?\n // TODO: do same thing in advanced scrollgrid? prolly not b/c always has horizontal scrollbars\n let overflowY: OverflowValue =\n !props.liquid ? 'visible' :\n forceYScrollbars ? 'scroll' :\n !needsYScrolling ? 'hidden' :\n 'auto'\n\n let sectionKey = sectionConfig.key\n let content = renderChunkContent(sectionConfig, chunkConfig, {\n tableColGroupNode: microColGroupNode,\n tableMinWidth: '',\n clientWidth: (!props.collapsibleWidth && scrollerClientWidths[sectionKey] !== undefined) ? scrollerClientWidths[sectionKey] : null,\n clientHeight: scrollerClientHeights[sectionKey] !== undefined ? scrollerClientHeights[sectionKey] : null,\n expandRows: sectionConfig.expandRows,\n syncRowHeights: false,\n rowSyncHeights: [],\n reportRowHeightChange: () => {},\n }, isHeader)\n\n return createElement(\n isHeader ? 'th' : 'td',\n {\n ref: chunkConfig.elRef as any,\n role: 'presentation',\n },\n <div className={`fc-scroller-harness${isLiquid ? ' fc-scroller-harness-liquid' : ''}`}>\n <Scroller\n ref={this.scrollerRefs.createRef(sectionKey)}\n elRef={this.scrollerElRefs.createRef(sectionKey)}\n overflowY={overflowY}\n overflowX={!props.liquid ? 'visible' : 'hidden' /* natural height? */}\n maxHeight={sectionConfig.maxHeight}\n liquid={isLiquid}\n liquidIsAbsolute // because its within a harness\n >\n {content}\n </Scroller>\n </div>,\n )\n }\n\n _handleScrollerEl(scrollerEl: HTMLElement | null, key: string) {\n let section = getSectionByKey(this.props.sections, key)\n\n if (section) {\n setRef(section.chunk.scrollerElRef, scrollerEl)\n }\n }\n\n // TODO: can do a really simple print-view. dont need to join rows\n handleSizing = () => {\n this.setState({\n shrinkWidth: this.computeShrinkWidth(), // will create each chunk's <colgroup>. TODO: precompute hasShrinkWidth\n ...this.computeScrollerDims(),\n })\n }\n\n componentDidMount() {\n this.handleSizing()\n this.context.addResizeHandler(this.handleSizing)\n }\n\n componentDidUpdate() {\n // TODO: need better solution when state contains non-sizing things\n this.handleSizing()\n }\n\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleSizing)\n }\n\n computeShrinkWidth() {\n return hasShrinkWidth(this.props.cols)\n ? computeShrinkWidth(this.scrollerElRefs.getAll())\n : 0\n }\n\n computeScrollerDims() {\n let scrollbarWidth = getScrollbarWidths()\n let { scrollerRefs, scrollerElRefs } = this\n\n let forceYScrollbars = false\n let scrollerClientWidths: { [index: string]: number } = {}\n let scrollerClientHeights: { [index: string]: number } = {}\n\n for (let sectionKey in scrollerRefs.currentMap) {\n let scroller = scrollerRefs.currentMap[sectionKey]\n\n if (scroller && scroller.needsYScrolling()) {\n forceYScrollbars = true\n break\n }\n }\n\n for (let section of this.props.sections) {\n let sectionKey = section.key\n let scrollerEl = scrollerElRefs.currentMap[sectionKey]\n\n if (scrollerEl) {\n let harnessEl = scrollerEl.parentNode as HTMLElement // TODO: weird way to get this. need harness b/c doesn't include table borders\n\n scrollerClientWidths[sectionKey] = Math.floor(\n harnessEl.getBoundingClientRect().width - (\n forceYScrollbars\n ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future\n : 0\n ),\n )\n\n scrollerClientHeights[sectionKey] = Math.floor(\n harnessEl.getBoundingClientRect().height, // never has horizontal scrollbars\n )\n }\n }\n\n return { forceYScrollbars, scrollerClientWidths, scrollerClientHeights }\n }\n}\n\nSimpleScrollGrid.addStateEquality({\n scrollerClientWidths: isPropsEqual,\n scrollerClientHeights: isPropsEqual,\n})\n\nfunction getSectionByKey(sections: SimpleScrollGridSection[], key: string): SimpleScrollGridSection | null {\n for (let section of sections) {\n if (section.key === key) {\n return section\n }\n }\n\n return null\n}\n","import { Seg } from '../component/DateComponent'\nimport { ComponentChildren, createElement, Ref, createRef, RefObject } from '../vdom'\nimport { EventApi } from '../api/EventApi'\nimport {\n computeSegDraggable,\n computeSegStartResizable,\n computeSegEndResizable,\n setElSeg,\n EventContentArg,\n getEventClassNames,\n} from '../component/event-rendering'\nimport { RenderHook } from './render-hook'\nimport { BaseComponent } from '../vdom-util'\n\nexport interface MinimalEventProps {\n seg: Seg\n isDragging: boolean // rename to isMirrorDragging? make optional?\n isResizing: boolean // rename to isMirrorResizing? make optional?\n isDateSelecting: boolean // rename to isMirrorDateSelecting? make optional?\n isSelected: boolean\n isPast: boolean\n isFuture: boolean\n isToday: boolean\n}\n\nexport interface EventRootProps extends MinimalEventProps {\n timeText: string\n disableDragging?: boolean\n disableResizing?: boolean\n defaultContent: (hookProps: EventContentArg) => ComponentChildren\n children: (\n rootElRef: Ref<any>,\n classNames: string[],\n innerElRef: Ref<any>,\n innerContent: ComponentChildren,\n hookProps: EventContentArg\n ) => ComponentChildren\n}\n\nexport class EventRoot extends BaseComponent<EventRootProps> {\n elRef: RefObject<HTMLElement> = createRef<HTMLElement>()\n\n render() {\n let { props, context } = this\n let { options } = context\n let { seg } = props\n let { eventRange } = seg\n let { ui } = eventRange\n\n let hookProps: EventContentArg = {\n event: new EventApi(context, eventRange.def, eventRange.instance),\n view: context.viewApi,\n timeText: props.timeText,\n textColor: ui.textColor,\n backgroundColor: ui.backgroundColor,\n borderColor: ui.borderColor,\n isDraggable: !props.disableDragging && computeSegDraggable(seg, context),\n isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),\n isEndResizable: !props.disableResizing && computeSegEndResizable(seg, context),\n isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),\n isStart: Boolean(seg.isStart),\n isEnd: Boolean(seg.isEnd),\n isPast: Boolean(props.isPast), // TODO: don't cast. getDateMeta does it\n isFuture: Boolean(props.isFuture), // TODO: don't cast. getDateMeta does it\n isToday: Boolean(props.isToday), // TODO: don't cast. getDateMeta does it\n isSelected: Boolean(props.isSelected),\n isDragging: Boolean(props.isDragging),\n isResizing: Boolean(props.isResizing),\n }\n\n let standardClassNames = getEventClassNames(hookProps).concat(ui.classNames)\n\n return (\n <RenderHook\n hookProps={hookProps}\n classNames={options.eventClassNames}\n content={options.eventContent}\n defaultContent={props.defaultContent}\n didMount={options.eventDidMount}\n willUnmount={options.eventWillUnmount}\n elRef={this.elRef}\n >\n {(rootElRef, customClassNames, innerElRef, innerContent) => props.children(\n rootElRef, standardClassNames.concat(customClassNames), innerElRef, innerContent, hookProps,\n )}\n </RenderHook>\n )\n }\n\n componentDidMount() {\n setElSeg(this.elRef.current, this.props.seg)\n }\n\n /*\n need to re-assign seg to the element if seg changes, even if the element is the same\n */\n componentDidUpdate(prevProps: EventRootProps) {\n let { seg } = this.props\n\n if (seg !== prevProps.seg) {\n setElSeg(this.elRef.current, seg)\n }\n }\n}\n","import { ComponentChildren, createElement, Fragment } from '../vdom'\nimport { BaseComponent } from '../vdom-util'\nimport { buildSegTimeText, EventContentArg, getSegAnchorAttrs } from '../component/event-rendering'\nimport { EventRoot, MinimalEventProps } from './EventRoot'\nimport { DateFormatter } from '../datelib/DateFormatter'\n\nexport interface StandardEventProps extends MinimalEventProps {\n extraClassNames: string[]\n defaultTimeFormat: DateFormatter\n defaultDisplayEventTime?: boolean // default true\n defaultDisplayEventEnd?: boolean // default true\n disableDragging?: boolean // default false\n disableResizing?: boolean // default false\n defaultContent?: (hookProps: EventContentArg) => ComponentChildren // not used by anyone yet\n}\n\n// should not be a purecomponent\nexport class StandardEvent extends BaseComponent<StandardEventProps> {\n render() {\n let { props, context } = this\n let { seg } = props\n let timeFormat = context.options.eventTimeFormat || props.defaultTimeFormat\n let timeText = buildSegTimeText(\n seg,\n timeFormat,\n context,\n props.defaultDisplayEventTime,\n props.defaultDisplayEventEnd,\n )\n\n return (\n <EventRoot\n seg={seg}\n timeText={timeText}\n disableDragging={props.disableDragging}\n disableResizing={props.disableResizing}\n defaultContent={props.defaultContent || renderInnerContent}\n isDragging={props.isDragging}\n isResizing={props.isResizing}\n isDateSelecting={props.isDateSelecting}\n isSelected={props.isSelected}\n isPast={props.isPast}\n isFuture={props.isFuture}\n isToday={props.isToday}\n >\n {(rootElRef, classNames, innerElRef, innerContent, hookProps) => (\n <a\n className={props.extraClassNames.concat(classNames).join(' ')}\n style={{\n borderColor: hookProps.borderColor,\n backgroundColor: hookProps.backgroundColor,\n }}\n ref={rootElRef}\n {...getSegAnchorAttrs(seg, context)}\n >\n <div className=\"fc-event-main\" ref={innerElRef} style={{ color: hookProps.textColor }}>\n {innerContent}\n </div>\n {hookProps.isStartResizable &&\n <div className=\"fc-event-resizer fc-event-resizer-start\" />}\n {hookProps.isEndResizable &&\n <div className=\"fc-event-resizer fc-event-resizer-end\" />}\n </a>\n )}\n </EventRoot>\n )\n }\n}\n\nfunction renderInnerContent(innerProps: EventContentArg) {\n return (\n <div className=\"fc-event-main-frame\">\n {innerProps.timeText && (\n <div className=\"fc-event-time\">{innerProps.timeText}</div>\n )}\n <div className=\"fc-event-title-container\">\n <div className=\"fc-event-title fc-sticky\">\n {innerProps.event.title || <Fragment>&nbsp;</Fragment>}\n </div>\n </div>\n </div>\n )\n}\n","import { RenderHook, RenderHookPropsChildren, MountArg } from './render-hook'\nimport { DateMarker } from '../datelib/marker'\nimport { ViewContext, ViewContextType } from '../ViewContext'\nimport { createElement } from '../vdom'\nimport { ViewApi } from '../ViewApi'\n\nexport interface NowIndicatorRootProps {\n isAxis: boolean\n date: DateMarker\n children: RenderHookPropsChildren\n}\n\nexport interface NowIndicatorContentArg {\n isAxis: boolean\n date: Date\n view: ViewApi\n}\n\nexport type NowIndicatorMountArg = MountArg<NowIndicatorContentArg>\n\nexport const NowIndicatorRoot = (props: NowIndicatorRootProps) => (\n <ViewContextType.Consumer>\n {(context: ViewContext) => {\n let { options } = context\n let hookProps: NowIndicatorContentArg = {\n isAxis: props.isAxis,\n date: context.dateEnv.toDate(props.date),\n view: context.viewApi,\n }\n\n return (\n <RenderHook\n hookProps={hookProps}\n classNames={options.nowIndicatorClassNames}\n content={options.nowIndicatorContent}\n didMount={options.nowIndicatorDidMount}\n willUnmount={options.nowIndicatorWillUnmount}\n >\n {props.children}\n </RenderHook>\n )\n }}\n </ViewContextType.Consumer>\n)\n","import { Ref, ComponentChildren, createElement } from '../vdom'\nimport { DateMarker } from '../datelib/marker'\nimport { DateRange } from '../datelib/date-range'\nimport { getDateMeta, DateMeta } from '../component/date-rendering'\nimport { createFormatter } from '../datelib/formatting'\nimport { ContentHook } from './render-hook'\nimport { ViewApi } from '../ViewApi'\nimport { BaseComponent } from '../vdom-util'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { Dictionary } from '../options'\nimport { DateEnv } from '../datelib/env'\n\nconst DAY_NUM_FORMAT = createFormatter({ day: 'numeric' })\n\nexport interface DayCellContentProps {\n date: DateMarker\n dateProfile: DateProfile\n todayRange: DateRange\n showDayNumber?: boolean // defaults to false\n extraHookProps?: Dictionary\n defaultContent?: (hookProps: DayCellContentArg) => ComponentChildren\n children: (\n innerElRef: Ref<any>,\n innerContent: ComponentChildren\n ) => ComponentChildren\n}\n\nexport interface DayCellContentArg extends DateMeta {\n date: DateMarker // localized\n view: ViewApi\n dayNumberText: string\n [extraProp: string]: any // so can include a resource\n}\n\nexport interface DayCellHookPropsInput {\n date: DateMarker // generic\n dateProfile: DateProfile\n todayRange: DateRange\n dateEnv: DateEnv\n viewApi: ViewApi\n showDayNumber?: boolean // defaults to false\n extraProps?: Dictionary // so can include a resource\n}\n\nexport class DayCellContent extends BaseComponent<DayCellContentProps> {\n render() {\n let { props, context } = this\n let { options } = context\n let hookProps = refineDayCellHookProps({\n date: props.date,\n dateProfile: props.dateProfile,\n todayRange: props.todayRange,\n showDayNumber: props.showDayNumber,\n extraProps: props.extraHookProps,\n viewApi: context.viewApi,\n dateEnv: context.dateEnv,\n })\n\n return (\n <ContentHook\n hookProps={hookProps}\n content={options.dayCellContent}\n defaultContent={props.defaultContent}\n >\n {props.children}\n </ContentHook>\n )\n }\n}\n\nexport function refineDayCellHookProps(raw: DayCellHookPropsInput): DayCellContentArg {\n let { date, dateEnv } = raw\n let dayMeta = getDateMeta(date, raw.todayRange, null, raw.dateProfile)\n\n return {\n date: dateEnv.toDate(date),\n view: raw.viewApi,\n ...dayMeta,\n dayNumberText: raw.showDayNumber ? dateEnv.format(date, DAY_NUM_FORMAT) : '',\n ...raw.extraProps,\n }\n}\n","import { Ref, ComponentChildren, createElement } from '../vdom'\nimport { DateMarker } from '../datelib/marker'\nimport { DateRange } from '../datelib/date-range'\nimport { getDayClassNames, DateMeta } from '../component/date-rendering'\nimport { formatDayString } from '../datelib/formatting-utils'\nimport { buildClassNameNormalizer, MountHook, MountArg } from './render-hook'\nimport { ViewApi } from '../ViewApi'\nimport { BaseComponent } from '../vdom-util'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { memoizeObjArg } from '../util/memoize'\nimport { Dictionary } from '../options'\nimport { refineDayCellHookProps } from './DayCellContent'\n\nexport interface DayCellContentArg extends DateMeta {\n date: DateMarker // localized\n view: ViewApi\n dayNumberText: string\n [extraProp: string]: any // so can include a resource\n}\nexport type DayCellMountArg = MountArg<DayCellContentArg>\n\nexport interface DayCellRootProps {\n elRef?: Ref<any>\n date: DateMarker\n dateProfile: DateProfile\n todayRange: DateRange\n showDayNumber?: boolean // defaults to false\n extraHookProps?: Dictionary\n children: (\n rootElRef: Ref<any>,\n classNames: string[],\n rootDataAttrs,\n isDisabled: boolean\n ) => ComponentChildren\n}\n\nexport class DayCellRoot extends BaseComponent<DayCellRootProps> {\n refineHookProps = memoizeObjArg(refineDayCellHookProps)\n normalizeClassNames = buildClassNameNormalizer<DayCellContentArg>()\n\n render() {\n let { props, context } = this\n let { options } = context\n let hookProps = this.refineHookProps({\n date: props.date,\n dateProfile: props.dateProfile,\n todayRange: props.todayRange,\n showDayNumber: props.showDayNumber,\n extraProps: props.extraHookProps,\n viewApi: context.viewApi,\n dateEnv: context.dateEnv,\n })\n\n let classNames = getDayClassNames(hookProps, context.theme).concat(\n hookProps.isDisabled\n ? [] // don't use custom classNames if disabled\n : this.normalizeClassNames(options.dayCellClassNames, hookProps),\n )\n\n let dataAttrs = hookProps.isDisabled ? {} : {\n 'data-date': formatDayString(props.date),\n }\n\n return (\n <MountHook\n hookProps={hookProps}\n didMount={options.dayCellDidMount}\n willUnmount={options.dayCellWillUnmount}\n elRef={props.elRef}\n >\n {(rootElRef) => props.children(rootElRef, classNames, dataAttrs, hookProps.isDisabled)}\n </MountHook>\n )\n }\n}\n","import { createElement } from '../vdom'\nimport { EventRoot } from './EventRoot'\nimport { Seg } from '../component/DateComponent'\nimport { EventContentArg } from '../component/event-rendering'\n\nexport function renderFill(fillType: string) {\n return (\n <div className={`fc-${fillType}`} />\n )\n}\n\nexport interface BgEventProps {\n seg: Seg\n isPast: boolean\n isFuture: boolean\n isToday: boolean\n}\n\nexport const BgEvent = (props: BgEventProps) => (\n <EventRoot\n defaultContent={renderInnerContent}\n seg={props.seg /* uselesss i think */}\n timeText=\"\"\n disableDragging\n disableResizing\n isDragging={false}\n isResizing={false}\n isDateSelecting={false}\n isSelected={false}\n isPast={props.isPast}\n isFuture={props.isFuture}\n isToday={props.isToday}\n >\n {(rootElRef, classNames, innerElRef, innerContent, hookProps) => (\n <div\n ref={rootElRef}\n className={['fc-bg-event'].concat(classNames).join(' ')}\n style={{\n backgroundColor: hookProps.backgroundColor,\n }}\n >\n {innerContent}\n </div>\n )}\n </EventRoot>\n)\n\nfunction renderInnerContent(props: EventContentArg) {\n let { title } = props.event\n\n return title && (\n <div className=\"fc-event-title\">{props.event.title}</div>\n )\n}\n","import { ViewContext, ViewContextType } from '../ViewContext'\nimport { DateMarker } from '../datelib/marker'\nimport { RenderHook, RenderHookPropsChildren, MountArg } from './render-hook'\nimport { createElement } from '../vdom'\nimport { DateFormatter } from '../datelib/DateFormatter'\n\nexport interface WeekNumberRootProps {\n date: DateMarker\n defaultFormat: DateFormatter\n children: RenderHookPropsChildren\n}\n\nexport interface WeekNumberContentArg {\n num: number\n text: string\n date: Date\n}\nexport type WeekNumberMountArg = MountArg<WeekNumberContentArg>\n\nexport const WeekNumberRoot = (props: WeekNumberRootProps) => (\n <ViewContextType.Consumer>\n {(context: ViewContext) => {\n let { dateEnv, options } = context\n let { date } = props\n let format = options.weekNumberFormat || props.defaultFormat\n let num = dateEnv.computeWeekNumber(date) // TODO: somehow use for formatting as well?\n let text = dateEnv.format(date, format)\n let hookProps: WeekNumberContentArg = { num, text, date }\n\n return (\n <RenderHook<WeekNumberContentArg> // why isn't WeekNumberContentArg being auto-detected?\n hookProps={hookProps}\n classNames={options.weekNumberClassNames}\n content={options.weekNumberContent}\n defaultContent={renderInner}\n didMount={options.weekNumberDidMount}\n willUnmount={options.weekNumberWillUnmount}\n >\n {props.children}\n </RenderHook>\n )\n }}\n </ViewContextType.Consumer>\n)\n\nfunction renderInner(innerProps) {\n return innerProps.text\n}\n","import { Dictionary } from '../options'\nimport { computeClippedClientRect } from '../util/dom-geom'\nimport { applyStyle, elementClosest, getEventTargetViaRoot, getUniqueDomId } from '../util/dom-manip'\nimport { createElement, ComponentChildren, Ref, createPortal } from '../vdom'\nimport { BaseComponent, setRef } from '../vdom-util'\n\nexport interface PopoverProps {\n elRef?: Ref<HTMLElement>\n id: string\n title: string\n extraClassNames?: string[]\n extraAttrs?: Dictionary\n parentEl: HTMLElement\n alignmentEl: HTMLElement\n alignGridTop?: boolean\n children?: ComponentChildren\n onClose?: () => void\n}\n\nconst PADDING_FROM_VIEWPORT = 10\n\nexport class Popover extends BaseComponent<PopoverProps> {\n private rootEl: HTMLElement\n state = {\n titleId: getUniqueDomId(),\n }\n\n render() {\n let { theme, options } = this.context\n let { props, state } = this\n let classNames = [\n 'fc-popover',\n theme.getClass('popover'),\n ].concat(\n props.extraClassNames || [],\n )\n\n return createPortal(\n <div\n id={props.id}\n className={classNames.join(' ')}\n aria-labelledby={state.titleId}\n {...props.extraAttrs}\n ref={this.handleRootEl}\n >\n <div className={'fc-popover-header ' + theme.getClass('popoverHeader')}>\n <span className=\"fc-popover-title\" id={state.titleId}>\n {props.title}\n </span>\n <span\n className={'fc-popover-close ' + theme.getIconClass('close')}\n title={options.closeHint}\n onClick={this.handleCloseClick}\n />\n </div>\n <div className={'fc-popover-body ' + theme.getClass('popoverContent')}>\n {props.children}\n </div>\n </div>,\n props.parentEl,\n )\n }\n\n componentDidMount() {\n document.addEventListener('mousedown', this.handleDocumentMouseDown)\n document.addEventListener('keydown', this.handleDocumentKeyDown)\n this.updateSize()\n }\n\n componentWillUnmount() {\n document.removeEventListener('mousedown', this.handleDocumentMouseDown)\n document.removeEventListener('keydown', this.handleDocumentKeyDown)\n }\n\n handleRootEl = (el: HTMLElement | null) => {\n this.rootEl = el\n\n if (this.props.elRef) {\n setRef(this.props.elRef, el)\n }\n }\n\n // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n handleDocumentMouseDown = (ev) => {\n // only hide the popover if the click happened outside the popover\n const target = getEventTargetViaRoot(ev) as HTMLElement\n if (!this.rootEl.contains(target)) {\n this.handleCloseClick()\n }\n }\n\n handleDocumentKeyDown = (ev) => {\n if (ev.key === 'Escape') {\n this.handleCloseClick()\n }\n }\n\n handleCloseClick = () => {\n let { onClose } = this.props\n if (onClose) {\n onClose()\n }\n }\n\n private updateSize() {\n let { isRtl } = this.context\n let { alignmentEl, alignGridTop } = this.props\n let { rootEl } = this\n\n let alignmentRect = computeClippedClientRect(alignmentEl)\n if (alignmentRect) {\n let popoverDims = rootEl.getBoundingClientRect()\n\n // position relative to viewport\n let popoverTop = alignGridTop\n ? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top\n : alignmentRect.top\n let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left\n\n // constrain\n popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT)\n popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width)\n popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT)\n\n let origin = rootEl.offsetParent.getBoundingClientRect()\n applyStyle(rootEl, {\n top: popoverTop - origin.top,\n left: popoverLeft - origin.left,\n })\n }\n }\n}\n","import { DateComponent } from '../component/DateComponent'\nimport { DateRange } from '../datelib/date-range'\nimport { DateMarker } from '../datelib/marker'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { Hit } from '../interactions/hit'\nimport { Dictionary } from '../options'\nimport { createElement, ComponentChildren } from '../vdom'\nimport { DayCellContent } from './DayCellContent'\nimport { DayCellRoot } from './DayCellRoot'\nimport { Popover } from './Popover'\n\nexport interface MorePopoverProps {\n id: string\n startDate: DateMarker\n endDate: DateMarker\n dateProfile: DateProfile\n parentEl: HTMLElement\n alignmentEl: HTMLElement\n alignGridTop?: boolean\n todayRange: DateRange\n extraDateSpan: Dictionary\n children: ComponentChildren\n onClose?: () => void\n}\n\nexport class MorePopover extends DateComponent<MorePopoverProps> {\n rootEl: HTMLElement\n\n render() {\n let { options, dateEnv } = this.context\n let { props } = this\n let { startDate, todayRange, dateProfile } = props\n let title = dateEnv.format(startDate, options.dayPopoverFormat)\n return (\n <DayCellRoot date={startDate} dateProfile={dateProfile} todayRange={todayRange} elRef={this.handleRootEl}>\n {(rootElRef, dayClassNames, dataAttrs) => (\n <Popover\n elRef={rootElRef}\n id={props.id}\n title={title}\n extraClassNames={['fc-more-popover'].concat(dayClassNames)}\n extraAttrs={dataAttrs /* TODO: make these time-based when not whole-day? */}\n parentEl={props.parentEl}\n alignmentEl={props.alignmentEl}\n alignGridTop={props.alignGridTop}\n onClose={props.onClose}\n >\n <DayCellContent date={startDate} dateProfile={dateProfile} todayRange={todayRange}>\n {(innerElRef, innerContent) => (\n innerContent &&\n <div className=\"fc-more-popover-misc\" ref={innerElRef}>{innerContent}</div>\n )}\n </DayCellContent>\n {props.children}\n </Popover>\n )}\n </DayCellRoot>\n )\n }\n\n handleRootEl = (rootEl: HTMLDivElement | null) => {\n this.rootEl = rootEl\n if (rootEl) {\n this.context.registerInteractiveComponent(this, {\n el: rootEl,\n useEventCenter: false,\n })\n } else {\n this.context.unregisterInteractiveComponent(this)\n }\n }\n\n queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit {\n let { rootEl, props } = this\n\n if (\n positionLeft >= 0 && positionLeft < elWidth &&\n positionTop >= 0 && positionTop < elHeight\n ) {\n return {\n dateProfile: props.dateProfile,\n dateSpan: {\n allDay: true,\n range: {\n start: props.startDate,\n end: props.endDate,\n },\n ...props.extraDateSpan,\n },\n dayEl: rootEl,\n rect: {\n left: 0,\n top: 0,\n right: elWidth,\n bottom: elHeight,\n },\n layer: 1, // important when comparing with hits from other components\n }\n }\n\n return null\n }\n}\n","import { EventApi } from '../api/EventApi'\nimport { Seg } from '../component/DateComponent'\nimport { DateRange } from '../datelib/date-range'\nimport { addDays, DateMarker } from '../datelib/marker'\nimport { DateProfile } from '../DateProfileGenerator'\nimport { Dictionary } from '../options'\nimport { elementClosest, getUniqueDomId } from '../util/dom-manip'\nimport { formatWithOrdinals } from '../util/misc'\nimport { ComponentChildren, createElement, createRef, Fragment, Ref, RefObject, VNode } from '../vdom'\nimport { BaseComponent } from '../vdom-util'\nimport { ViewApi } from '../ViewApi'\nimport { ViewContext, ViewContextType } from '../ViewContext'\nimport { MorePopover } from './MorePopover'\nimport { MountArg, RenderHook } from './render-hook'\n\nexport type MoreLinkChildren = (\n rootElRef: Ref<any>,\n classNames: string[],\n innerElRef: Ref<any>,\n innerContent: ComponentChildren,\n handleClick: (ev: MouseEvent) => void,\n title: string, // for a11y\n isExpanded: boolean,\n popoverId: string,\n) => ComponentChildren\n\nexport interface MoreLinkRootProps { // what the MoreLinkRoot component receives\n dateProfile: DateProfile\n todayRange: DateRange\n allDayDate: DateMarker | null\n moreCnt: number // can't always derive from hiddenSegs. some hiddenSegs might be due to lack of dimensions\n allSegs: Seg[]\n hiddenSegs: Seg[]\n extraDateSpan?: Dictionary\n alignmentElRef: RefObject<HTMLElement> // for popover\n alignGridTop?: boolean // for popover\n topAlignmentElRef?: RefObject<HTMLElement>\n defaultContent?: (hookProps: MoreLinkContentArg) => ComponentChildren\n popoverContent: () => VNode\n children: MoreLinkChildren\n}\n\nexport interface MoreLinkContentArg { // what the render-hooks receive\n num: number\n text: string\n shortText: string\n view: ViewApi\n}\n\nexport type MoreLinkMountArg = MountArg<MoreLinkContentArg>\n\ninterface MoreLinkRootState {\n isPopoverOpen: boolean\n popoverId: string\n}\n\nexport class MoreLinkRoot extends BaseComponent<MoreLinkRootProps, MoreLinkRootState> {\n private linkElRef = createRef<HTMLElement>()\n private parentEl: HTMLElement\n\n state = {\n isPopoverOpen: false,\n popoverId: getUniqueDomId(),\n }\n\n render() {\n let { props, state } = this\n return (\n <ViewContextType.Consumer>\n {(context: ViewContext) => {\n let { viewApi, options, calendarApi } = context\n let { moreLinkText } = options\n let { moreCnt } = props\n let range = computeRange(props)\n\n let text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals\n ? moreLinkText.call(calendarApi, moreCnt)\n : `+${moreCnt} ${moreLinkText}`\n let title = formatWithOrdinals(options.moreLinkHint, [moreCnt], text)\n let hookProps: MoreLinkContentArg = {\n num: moreCnt,\n shortText: `+${moreCnt}`, // TODO: offer hook or i18n?\n text,\n view: viewApi,\n }\n\n return (\n <Fragment>\n {Boolean(props.moreCnt) && (\n <RenderHook<MoreLinkContentArg>\n elRef={this.linkElRef}\n hookProps={hookProps}\n classNames={options.moreLinkClassNames}\n content={options.moreLinkContent}\n defaultContent={props.defaultContent || renderMoreLinkInner}\n didMount={options.moreLinkDidMount}\n willUnmount={options.moreLinkWillUnmount}\n >\n {(rootElRef, customClassNames, innerElRef, innerContent) => props.children(\n rootElRef,\n ['fc-more-link'].concat(customClassNames),\n innerElRef,\n innerContent,\n this.handleClick,\n title,\n state.isPopoverOpen,\n state.isPopoverOpen ? state.popoverId : '',\n )}\n </RenderHook>\n )}\n {state.isPopoverOpen && (\n <MorePopover\n id={state.popoverId}\n startDate={range.start}\n endDate={range.end}\n dateProfile={props.dateProfile}\n todayRange={props.todayRange}\n extraDateSpan={props.extraDateSpan}\n parentEl={this.parentEl}\n alignmentEl={props.alignmentElRef.current}\n alignGridTop={props.alignGridTop}\n onClose={this.handlePopoverClose}\n >\n {props.popoverContent()}\n </MorePopover>\n )}\n </Fragment>\n )\n }}\n </ViewContextType.Consumer>\n )\n }\n\n componentDidMount() {\n this.updateParentEl()\n }\n\n componentDidUpdate() {\n this.updateParentEl()\n }\n\n updateParentEl() {\n if (this.linkElRef.current) {\n this.parentEl = elementClosest(this.linkElRef.current, '.fc-view-harness')\n }\n }\n\n handleClick = (ev: MouseEvent) => {\n let { props, context } = this\n let { moreLinkClick } = context.options\n let date = computeRange(props).start\n\n function buildPublicSeg(seg: Seg) {\n let { def, instance, range } = seg.eventRange\n return {\n event: new EventApi(context, def, instance),\n start: context.dateEnv.toDate(range.start),\n end: context.dateEnv.toDate(range.end),\n isStart: seg.isStart,\n isEnd: seg.isEnd,\n }\n }\n\n if (typeof moreLinkClick === 'function') {\n moreLinkClick = moreLinkClick({\n date,\n allDay: Boolean(props.allDayDate),\n allSegs: props.allSegs.map(buildPublicSeg),\n hiddenSegs: props.hiddenSegs.map(buildPublicSeg),\n jsEvent: ev,\n view: context.viewApi,\n }) as string | undefined\n }\n\n if (!moreLinkClick || moreLinkClick === 'popover') {\n this.setState({ isPopoverOpen: true })\n } else if (typeof moreLinkClick === 'string') { // a view name\n context.calendarApi.zoomTo(date, moreLinkClick)\n }\n }\n\n handlePopoverClose = () => {\n this.setState({ isPopoverOpen: false })\n }\n}\n\nfunction renderMoreLinkInner(props: MoreLinkContentArg) {\n return props.text\n}\n\nfunction computeRange(props: MoreLinkRootProps): DateRange {\n if (props.allDayDate) {\n return {\n start: props.allDayDate,\n end: addDays(props.allDayDate, 1),\n }\n }\n\n let { hiddenSegs } = props\n return {\n start: computeEarliestSegStart(hiddenSegs),\n end: computeLatestSegEnd(hiddenSegs),\n }\n}\n\nexport function computeEarliestSegStart(segs: Seg[]): DateMarker {\n return segs.reduce(pickEarliestStart).eventRange.range.start\n}\n\nfunction pickEarliestStart(seg0: Seg, seg1: Seg): Seg {\n return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1\n}\n\nfunction computeLatestSegEnd(segs: Seg[]): DateMarker {\n return segs.reduce(pickLatestEnd).eventRange.range.end\n}\n\nfunction pickLatestEnd(seg0: Seg, seg1: Seg): Seg {\n return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1\n}\n","import './main.css'\n\n// exports\n// --------------------------------------------------------------------------------------------------\n\nexport const version: string = '<%= version %>' // important to type it, so .d.ts has generic string\n\n// explicit API\nexport { EventSourceApi } from './api/EventSourceApi'\nexport { EventApi, buildEventApis } from './api/EventApi'\nexport { CalendarApi } from './CalendarApi'\nexport { formatDate, formatRange, FormatDateOptions, FormatRangeOptions } from './formatting-api'\nexport { ViewApi } from './ViewApi'\nexport * from './api-type-deps'\n\nexport { // things for plugins. everything else is exported in api-type-deps\n BASE_OPTION_DEFAULTS, BASE_OPTION_REFINERS, identity, Identity, Dictionary, refineProps,\n BaseOptionRefiners, BaseOptionsRefined, CalendarOptionRefiners, CalendarOptionsRefined,\n ViewOptionRefiners, ViewOptionsRefined, RawOptionsFromRefiners, RefinedOptionsFromRefiners,\n CalendarListenerRefiners,\n} from './options'\n\nexport { EventDef, EventDefHash } from './structs/event-def'\nexport { EventInstance, EventInstanceHash, createEventInstance } from './structs/event-instance'\nexport { EventInput, EventRefined, parseEventDef, EventTuple, EventRefiners, refineEventDef } from './structs/event-parse'\nexport { BusinessHoursInput, parseBusinessHours } from './structs/business-hours'\n\nexport {\n padStart,\n isInt,\n parseFieldSpecs,\n compareByFieldSpecs,\n compareByFieldSpec,\n flexibleCompare,\n preventSelection, allowSelection, preventContextMenu, allowContextMenu,\n compareNumbers, enableCursor, disableCursor,\n guid,\n computeSmallestCellWidth,\n OrderSpec,\n} from './util/misc'\n\nexport {\n computeVisibleDayRange,\n isMultiDayRange,\n diffDates,\n} from './util/date'\n\nexport {\n removeExact,\n isArraysEqual,\n} from './util/array'\n\nexport { memoize, memoizeObjArg, memoizeArraylike, memoizeHashlike } from './util/memoize'\n\nexport {\n intersectRects,\n Rect, pointInsideRect,\n constrainPoint,\n getRectCenter, diffPoints, Point,\n translateRect,\n} from './util/geom'\n\nexport { mapHash, filterHash, isPropsEqual, compareObjs, buildHashFromArray, collectFromHash, getUnequalProps } from './util/object'\n\nexport {\n findElements,\n findDirectChildren,\n removeElement,\n applyStyle,\n applyStyleProp,\n elementMatches,\n elementClosest,\n getElRoot,\n getEventTargetViaRoot,\n getUniqueDomId,\n} from './util/dom-manip'\nexport { parseClassNames } from './util/html'\n\nexport { getCanVGrowWithinCell } from './util/table-styling'\n\nexport {\n EventStore,\n filterEventStoreDefs,\n createEmptyEventStore,\n mergeEventStores,\n getRelevantEvents,\n eventTupleToStore,\n} from './structs/event-store'\nexport { EventUiHash, EventUi, combineEventUis, createEventUi } from './component/event-ui'\nexport { Splitter, SplittableProps } from './component/event-splitting'\nexport { getDayClassNames, getDateMeta, DateMeta, getSlotClassNames } from './component/date-rendering'\nexport { buildNavLinkAttrs } from './common/nav-link'\n\nexport {\n preventDefault,\n listenBySelector,\n whenTransitionDone,\n createAriaClickAttrs,\n} from './util/dom-event'\n\nexport {\n computeInnerRect,\n computeEdges,\n computeHeightAndMargins,\n getClippingParents,\n computeRect,\n} from './util/dom-geom'\n\nexport { unpromisify } from './util/promise'\n\nexport { Emitter } from './common/Emitter'\nexport { DateRange, rangeContainsMarker, intersectRanges, rangesEqual, rangesIntersect, rangeContainsRange } from './datelib/date-range'\nexport { PositionCache } from './common/PositionCache'\nexport { ScrollController, ElementScrollController, WindowScrollController } from './common/scroll-controller'\nexport { Theme } from './theme/Theme'\nexport { ViewContext, ViewContextType } from './ViewContext'\nexport { DateComponent, Seg, EventSegUiInteractionState } from './component/DateComponent'\nexport { CalendarData } from './reducers/data-types'\nexport { CalendarDataManager } from './reducers/CalendarDataManager'\nexport { CalendarDataProvider, CalendarDataProviderProps } from './component/CalendarDataProvider'\nexport { ViewProps, sliceEvents } from './View'\n\nexport { DateProfileGenerator, DateProfile } from './DateProfileGenerator'\nexport { ViewDef } from './structs/view-def'\nexport { ViewSpec } from './structs/view-spec'\nexport { DateSpan, DateSpanApi, DatePointApi, isDateSpansEqual } from './structs/date-span'\n\nexport {\n DateMarker,\n addDays,\n startOfDay,\n addMs,\n addWeeks,\n diffWeeks,\n diffWholeWeeks,\n diffWholeDays,\n diffDayAndTime,\n diffDays,\n isValidDate,\n} from './datelib/marker'\nexport {\n Duration, createDuration,\n asCleanDays, multiplyDuration, addDurations,\n asRoughMinutes, asRoughSeconds, asRoughMs,\n wholeDivideDurations, greatestDurationDenominator,\n} from './datelib/duration'\nexport { DateEnv, DateMarkerMeta } from './datelib/env'\n\nexport {\n createFormatter,\n FormatterInput,\n} from './datelib/formatting'\nexport {\n DateFormatter,\n VerboseFormattingArg,\n} from './datelib/DateFormatter'\nexport {\n formatIsoTimeString,\n formatDayString,\n buildIsoString,\n} from './datelib/formatting-utils'\nexport { NamedTimeZoneImpl } from './datelib/timezone'\nexport { parse as parseMarker } from './datelib/parsing'\nexport { LocaleInput } from './datelib/locale'\n\nexport { EventSourceDef } from './structs/event-source-def'\nexport { EventSource, EventSourceHash } from './structs/event-source'\nexport { EventSourceRefiners, EventSourceRefined } from './structs/event-source-parse'\n\nexport {\n SegSpan, SegRect, SegHierarchy, SegEntry, SegInsertion, buildEntryKey,\n getEntrySpanEnd, binarySearch, SegEntryGroup, groupIntersectingEntries,\n joinSpans, intersectSpans,\n} from './seg-hierarchy'\n\nexport {\n Interaction,\n InteractionSettings,\n interactionSettingsToStore,\n interactionSettingsStore,\n InteractionSettingsStore,\n} from './interactions/interaction'\nexport { PointerDragEvent } from './interactions/pointer'\nexport { Hit } from './interactions/hit'\nexport { dateSelectionJoinTransformer } from './interactions/date-selecting'\nexport { eventDragMutationMassager, EventDropTransformers } from './interactions/event-dragging'\nexport { ElementDragging } from './interactions/ElementDragging'\n\nexport { config } from './global-config'\nexport { globalLocales } from './global-locales'\n\nexport { RecurringType, ParsedRecurring } from './structs/recurring-event'\n\nexport { DragMetaInput, DragMeta, parseDragMeta } from './structs/drag-meta'\n\nexport { PluginDef, PluginDefInput, ViewPropsTransformer, ViewContainerAppend } from './plugin-system-struct'\nexport { createPlugin } from './plugin-system'\nexport { Action } from './reducers/Action'\nexport { CalendarContext } from './CalendarContext'\nexport { CalendarContentProps, CalendarContent } from './CalendarContent'\nexport { CalendarRoot } from './CalendarRoot'\n\nexport { DayHeader } from './common/DayHeader'\nexport { computeFallbackHeaderFormat } from './common/table-utils'\nexport { TableDateCell } from './common/TableDateCell'\nexport { TableDowCell } from './common/TableDowCell'\n\nexport { DaySeriesModel } from './common/DaySeriesModel'\n\nexport { EventInteractionState } from './interactions/event-interaction-state'\nexport {\n EventRenderRange, sliceEventStore, hasBgRendering, setElSeg, getElSeg,\n computeSegDraggable, computeSegStartResizable, computeSegEndResizable,\n getEventClassNames, buildSegTimeText,\n buildSegCompareObj, sortEventSegs,\n getSegMeta, EventContentArg, buildEventRangeKey,\n getSegAnchorAttrs,\n} from './component/event-rendering'\n\nexport { DayTableModel, DayTableSeg, DayTableCell } from './common/DayTableModel'\n\nexport { Slicer, SlicedProps } from './common/slicing-utils'\n\nexport { EventMutation, applyMutationToEventStore } from './structs/event-mutation'\nexport { Constraint, ConstraintInput, AllowFunc } from './structs/constraint'\nexport { isPropsValid, isInteractionValid, isDateSelectionValid } from './validation'\n\nexport { requestJson } from './util/requestJson'\n\nexport * from './vdom'\nexport { BaseComponent, setRef } from './vdom-util'\nexport { DelayedRunner } from './util/DelayedRunner'\n\nexport {\n ScrollGridProps,\n ScrollGridSectionConfig,\n ColGroupConfig,\n ScrollGridImpl,\n ScrollGridChunkConfig,\n} from './scrollgrid/ScrollGridImpl'\nexport { SimpleScrollGrid, SimpleScrollGridSection } from './scrollgrid/SimpleScrollGrid'\nexport {\n CssDimValue, ScrollerLike, SectionConfig, ColProps, ChunkConfig, hasShrinkWidth, renderMicroColGroup,\n getScrollGridClassNames, getSectionClassNames, getSectionHasLiquidHeight, getAllowYScrolling, renderChunkContent, computeShrinkWidth,\n ChunkContentCallbackArgs,\n sanitizeShrinkWidth,\n ChunkConfigRowContent, ChunkConfigContent,\n isColPropsEqual,\n renderScrollShim,\n getStickyFooterScrollbar,\n getStickyHeaderDates,\n} from './scrollgrid/util'\nexport { Scroller, ScrollerProps, OverflowValue } from './scrollgrid/Scroller'\nexport { getScrollbarWidths } from './util/scrollbar-width'\nexport { RefMap } from './util/RefMap'\nexport { getIsRtlScrollbarOnLeft } from './util/scrollbar-side'\n\nexport { NowTimer } from './NowTimer'\nexport { ScrollResponder, ScrollRequest } from './ScrollResponder'\nexport { globalPlugins } from './global-plugins'\nexport {\n RenderHook, RenderHookProps, RenderHookPropsChildren, MountHook, MountHookProps, buildClassNameNormalizer, ContentHook,\n CustomContentRenderContext, ClassNamesGenerator, CustomContentGenerator, DidMountHandler, WillUnmountHandler, MountArg,\n} from './common/render-hook'\nexport { StandardEvent, StandardEventProps } from './common/StandardEvent'\nexport { NowIndicatorRoot, NowIndicatorRootProps } from './common/NowIndicatorRoot'\n\nexport { DayCellRoot, DayCellRootProps, DayCellContentArg } from './common/DayCellRoot'\nexport { DayCellContent, DayCellContentProps } from './common/DayCellContent'\nexport { EventRoot, MinimalEventProps } from './common/EventRoot'\nexport { renderFill, BgEvent, BgEventProps } from './common/bg-fill'\nexport { WeekNumberRoot, WeekNumberRootProps } from './common/WeekNumberRoot'\nexport { MoreLinkRoot, MoreLinkRootProps, MoreLinkContentArg, MoreLinkMountArg, computeEarliestSegStart } from './common/MoreLinkRoot'\n\nexport { ViewRoot, ViewRootProps } from './common/ViewRoot'\nexport { triggerDateSelect, DatePointTransform, DateSpanTransform, DateSelectionApi, getDefaultEventEnd } from './calendar-utils'\n"],"names":["guid","__assign_1","buildDateEnv","eventSourceDef","renderInner","renderInnerContent"],"mappings":"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"}