@zealicsolutions/web-ui 1.0.44 → 1.0.45-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/containers/types/moleculeTypes.d.ts +16 -10
- package/dist/cjs/index.js +1577 -1577
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/molecules/Calendar/CalendarMolecule.d.ts +54 -0
- package/dist/cjs/molecules/Calendar/CalendarMolecule.stories.d.ts +3 -0
- package/dist/cjs/molecules/Visit/VisitMolecule.d.ts +41 -0
- package/dist/esm/containers/types/moleculeTypes.d.ts +16 -10
- package/dist/esm/molecules/BaseMolecule.js +1 -1
- package/dist/esm/molecules/BaseMolecule.js.map +1 -1
- package/dist/esm/molecules/Calendar/CalendarMolecule.d.ts +54 -0
- package/dist/esm/molecules/Calendar/CalendarMolecule.js +2 -0
- package/dist/esm/molecules/Calendar/CalendarMolecule.js.map +1 -0
- package/dist/esm/molecules/Calendar/CalendarMolecule.stories.d.ts +3 -0
- package/dist/esm/molecules/Visit/VisitMolecule.d.ts +41 -0
- package/dist/esm/molecules/Visit/VisitMolecule.js +2 -0
- package/dist/esm/molecules/Visit/VisitMolecule.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/core/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/core/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/core/internal-common.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/core/internal-common.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/daygrid/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/daygrid/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/daygrid/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/daygrid/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/interaction/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/interaction/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/list/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/list/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/list/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/list/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/premium-common/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/premium-common/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/react/dist/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/react/dist/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource/internal-common.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource/internal-common.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource-daygrid/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource-daygrid/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timegrid/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timegrid/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timegrid/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timegrid/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timeline/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timeline/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timeline/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timeline/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/scrollgrid/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/scrollgrid/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/timegrid/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/timegrid/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/timegrid/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/timegrid/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/timeline/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/timeline/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/timeline/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/timeline/internal.js.map +1 -0
- package/dist/esm/node_modules/preact/compat/dist/compat.mjs.js +2 -0
- package/dist/esm/node_modules/preact/compat/dist/compat.mjs.js.map +1 -0
- package/dist/esm/node_modules/preact/dist/preact.mjs.js +2 -0
- package/dist/esm/node_modules/preact/dist/preact.mjs.js.map +1 -0
- package/dist/esm/node_modules/preact/hooks/dist/hooks.mjs.js +2 -0
- package/dist/esm/node_modules/preact/hooks/dist/hooks.mjs.js.map +1 -0
- package/dist/index.d.ts +105 -10
- package/package.json +11 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../node_modules/@fullcalendar/core/index.js"],"sourcesContent":["import { m as mergeProps, g as guid, i as isArraysEqual, T as Theme, a as mapHash, B as BaseComponent, V as ViewContextType, C as ContentContainer, b as buildViewClassNames, c as greatestDurationDenominator, d as createDuration, e as BASE_OPTION_DEFAULTS, f as arrayToHash, h as filterHash, j as buildEventSourceRefiners, p as parseEventSource, k as formatWithOrdinals, u as unpromisify, l as buildRangeApiWithTimeZone, n as identity, r as requestJson, s as subtractDurations, o as intersectRanges, q as startOfDay, t as addDays, v as hashValuesToArray, w as buildEventApis, D as DelayedRunner, x as createFormatter, y as diffWholeDays, z as memoize, A as memoizeObjArg, E as isPropsEqual, F as Emitter, G as rangeContainsMarker, H as createEmptyEventStore, I as reduceEventStore, J as rezoneEventStoreDates, K as mergeRawOptions, L as BASE_OPTION_REFINERS, M as CALENDAR_LISTENER_REFINERS, N as CALENDAR_OPTION_REFINERS, O as COMPLEX_OPTION_COMPARATORS, P as VIEW_OPTION_REFINERS, Q as DateEnv, R as DateProfileGenerator, S as createEventUi, U as parseBusinessHours, W as setRef, X as Interaction, Y as getElSeg, Z as elementClosest, _ as EventImpl, $ as listenBySelector, a0 as listenToHoverBySelector, a1 as PureComponent, a2 as buildViewContext, a3 as getUniqueDomId, a4 as parseInteractionSettings, a5 as interactionSettingsStore, a6 as NowTimer, a7 as CalendarImpl, a8 as flushSync, a9 as CalendarRoot, aa as RenderId, ab as ensureElHasStyles, ac as applyStyleProp, ad as sliceEventStore } from './internal-common.js';\nexport { ae as JsonRequestError } from './internal-common.js';\nimport { createElement, createRef, Fragment, render } from 'preact';\nimport 'preact/compat';\n\nconst globalLocales = [];\n\nconst MINIMAL_RAW_EN_LOCALE = {\n code: 'en',\n week: {\n dow: 0,\n doy: 4, // 4 days need to be within the year to be considered the first week\n },\n direction: 'ltr',\n buttonText: {\n prev: 'prev',\n next: 'next',\n prevYear: 'prev year',\n nextYear: 'next year',\n year: 'year',\n today: 'today',\n month: 'month',\n week: 'week',\n day: 'day',\n list: 'list',\n },\n 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};\nconst RAW_EN_LOCALE = Object.assign(Object.assign({}, 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 }, viewHint: '$0 view', navLinkHint: 'Go to $0', moreLinkHint(eventCnt) {\n return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;\n } });\nfunction organizeRawLocales(explicitRawLocales) {\n let defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';\n let allRawLocales = globalLocales.concat(explicitRawLocales);\n let rawLocaleMap = {\n en: RAW_EN_LOCALE,\n };\n for (let rawLocale of allRawLocales) {\n rawLocaleMap[rawLocale.code] = rawLocale;\n }\n return {\n map: rawLocaleMap,\n defaultCode,\n };\n}\nfunction buildLocale(inputSingular, available) {\n if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {\n return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);\n }\n return queryLocale(inputSingular, available);\n}\nfunction queryLocale(codeArg, available) {\n let codes = [].concat(codeArg || []); // will convert to array\n let raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;\n return parseLocale(codeArg, codes, raw);\n}\nfunction queryRawLocale(codes, available) {\n for (let i = 0; i < codes.length; i += 1) {\n let parts = codes[i].toLocaleLowerCase().split('-');\n for (let j = parts.length; j > 0; j -= 1) {\n let simpleId = parts.slice(0, j).join('-');\n if (available[simpleId]) {\n return available[simpleId];\n }\n }\n }\n return null;\n}\nfunction parseLocale(codeArg, codes, raw) {\n let merged = mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText']);\n delete merged.code; // don't want this part of the options\n let { week } = merged;\n delete merged.week;\n return {\n codeArg,\n codes,\n week,\n simpleNumberFormat: new Intl.NumberFormat(codeArg),\n options: merged,\n };\n}\n\n// TODO: easier way to add new hooks? need to update a million things\nfunction createPlugin(input) {\n return {\n id: guid(),\n name: input.name,\n premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : undefined,\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 listenerRefiners: input.listenerRefiners || {},\n optionRefiners: input.optionRefiners || {},\n propSetHandlers: input.propSetHandlers || {},\n };\n}\nfunction buildPluginHooks(pluginDefs, globalDefs) {\n let currentPluginIds = {};\n let hooks = {\n premiumReleaseDate: undefined,\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 listenerRefiners: {},\n optionRefiners: {},\n propSetHandlers: {},\n };\n function addDefs(defs) {\n for (let def of defs) {\n const pluginName = def.name;\n const currentId = currentPluginIds[pluginName];\n if (currentId === undefined) {\n currentPluginIds[pluginName] = def.id;\n addDefs(def.deps);\n hooks = combineHooks(hooks, def);\n }\n else if (currentId !== def.id) {\n // different ID than the one already added\n console.warn(`Duplicate plugin '${pluginName}'`);\n }\n }\n }\n if (pluginDefs) {\n addDefs(pluginDefs);\n }\n addDefs(globalDefs);\n return hooks;\n}\nfunction buildBuildPluginHooks() {\n let currentOverrideDefs = [];\n let currentGlobalDefs = [];\n let currentHooks;\n return (overrideDefs, globalDefs) => {\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}\nfunction combineHooks(hooks0, hooks1) {\n return {\n premiumReleaseDate: compareOptionalDates(hooks0.premiumReleaseDate, hooks1.premiumReleaseDate),\n reducers: hooks0.reducers.concat(hooks1.reducers),\n isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),\n contextInit: hooks0.contextInit.concat(hooks1.contextInit),\n eventRefiners: Object.assign(Object.assign({}, hooks0.eventRefiners), hooks1.eventRefiners),\n eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),\n eventSourceRefiners: Object.assign(Object.assign({}, 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: Object.assign(Object.assign({}, 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: Object.assign(Object.assign({}, 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,\n elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,\n optionChangeHandlers: Object.assign(Object.assign({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),\n scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,\n listenerRefiners: Object.assign(Object.assign({}, hooks0.listenerRefiners), hooks1.listenerRefiners),\n optionRefiners: Object.assign(Object.assign({}, hooks0.optionRefiners), hooks1.optionRefiners),\n propSetHandlers: Object.assign(Object.assign({}, hooks0.propSetHandlers), hooks1.propSetHandlers),\n };\n}\nfunction compareOptionalDates(date0, date1) {\n if (date0 === undefined) {\n return date1;\n }\n if (date1 === undefined) {\n return date0;\n }\n return new Date(Math.max(date0.valueOf(), date1.valueOf()));\n}\n\nclass StandardTheme extends Theme {\n}\nStandardTheme.prototype.classes = {\n root: 'fc-theme-standard',\n tableCellShaded: 'fc-cell-shaded',\n buttonGroup: 'fc-button-group',\n button: 'fc-button fc-button-primary',\n buttonActive: 'fc-button-active',\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};\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons'; // TODO: make TS-friendly\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\n\nfunction compileViewDefs(defaultConfigs, overrideConfigs) {\n let hash = {};\n let viewType;\n for (viewType in defaultConfigs) {\n ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n }\n for (viewType in overrideConfigs) {\n ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n }\n return hash;\n}\nfunction ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n if (hash[viewType]) {\n return hash[viewType];\n }\n let viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n if (viewDef) {\n hash[viewType] = viewDef;\n }\n return viewDef;\n}\nfunction buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n let defaultConfig = defaultConfigs[viewType];\n let overrideConfig = overrideConfigs[viewType];\n let queryProp = (name) => ((defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :\n ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null));\n let theComponent = queryProp('component');\n let superType = queryProp('superType');\n let superDef = null;\n if (superType) {\n if (superType === viewType) {\n throw new Error('Can\\'t have a custom view type that references itself');\n }\n superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);\n }\n if (!theComponent && superDef) {\n theComponent = superDef.component;\n }\n if (!theComponent) {\n return null; // don't throw a warning, might be settings for a single-unit view\n }\n return {\n type: viewType,\n component: theComponent,\n defaults: Object.assign(Object.assign({}, (superDef ? superDef.defaults : {})), (defaultConfig ? defaultConfig.rawOptions : {})),\n overrides: Object.assign(Object.assign({}, (superDef ? superDef.overrides : {})), (overrideConfig ? overrideConfig.rawOptions : {})),\n };\n}\n\nfunction parseViewConfigs(inputs) {\n return mapHash(inputs, parseViewConfig);\n}\nfunction parseViewConfig(input) {\n let rawOptions = typeof input === 'function' ?\n { component: input } :\n input;\n let { component } = rawOptions;\n if (rawOptions.content) {\n // TODO: remove content/classNames/didMount/etc from options?\n component = createViewHookComponent(rawOptions);\n }\n else if (component && !(component.prototype instanceof BaseComponent)) {\n // WHY?: people were using `component` property for `content`\n // TODO: converge on one setting name\n component = createViewHookComponent(Object.assign(Object.assign({}, rawOptions), { content: component }));\n }\n return {\n superType: rawOptions.type,\n component: component,\n rawOptions, // includes type and component too :(\n };\n}\nfunction createViewHookComponent(options) {\n return (viewProps) => (createElement(ViewContextType.Consumer, null, (context) => (createElement(ContentContainer, { elTag: \"div\", elClasses: buildViewClassNames(context.viewSpec), renderProps: Object.assign(Object.assign({}, viewProps), { nextDayThreshold: context.options.nextDayThreshold }), generatorName: undefined, customGenerator: options.content, classNameGenerator: options.classNames, didMount: options.didMount, willUnmount: options.willUnmount }))));\n}\n\nfunction buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {\n let defaultConfigs = parseViewConfigs(defaultInputs);\n let overrideConfigs = parseViewConfigs(optionOverrides.views);\n let viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);\n return mapHash(viewDefs, (viewDef) => buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults));\n}\nfunction buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults) {\n let durationInput = viewDef.overrides.duration ||\n viewDef.defaults.duration ||\n dynamicOptionOverrides.duration ||\n optionOverrides.duration;\n let duration = null;\n let durationUnit = '';\n let singleUnit = '';\n let singleUnitOverrides = {};\n if (durationInput) {\n duration = createDurationCached(durationInput);\n if (duration) { // valid?\n let denom = greatestDurationDenominator(duration);\n durationUnit = denom.unit;\n if (denom.value === 1) {\n singleUnit = durationUnit;\n singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].rawOptions : {};\n }\n }\n }\n let queryButtonText = (optionsSubset) => {\n let buttonTextMap = optionsSubset.buttonText || {};\n let buttonTextKey = viewDef.defaults.buttonTextKey;\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 let queryButtonTitle = (optionsSubset) => {\n let buttonHints = optionsSubset.buttonHints || {};\n let buttonKey = viewDef.defaults.buttonTextKey; // use same key as text\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 return {\n type: viewDef.type,\n component: viewDef.component,\n duration,\n durationUnit,\n singleUnit,\n optionDefaults: viewDef.defaults,\n optionOverrides: Object.assign(Object.assign({}, singleUnitOverrides), viewDef.overrides),\n buttonTextOverride: queryButtonText(dynamicOptionOverrides) ||\n queryButtonText(optionOverrides) || // constructor-specified buttonText lookup hash takes precedence\n viewDef.overrides.buttonText,\n buttonTextDefault: queryButtonText(localeDefaults) ||\n viewDef.defaults.buttonText ||\n queryButtonText(BASE_OPTION_DEFAULTS) ||\n viewDef.type,\n // not DRY\n buttonTitleOverride: queryButtonTitle(dynamicOptionOverrides) ||\n queryButtonTitle(optionOverrides) ||\n viewDef.overrides.buttonHint,\n buttonTitleDefault: queryButtonTitle(localeDefaults) ||\n viewDef.defaults.buttonHint ||\n queryButtonTitle(BASE_OPTION_DEFAULTS),\n // will eventually fall back to buttonText\n };\n}\n// hack to get memoization working\nlet durationInputMap = {};\nfunction createDurationCached(durationInput) {\n let json = JSON.stringify(durationInput);\n let res = durationInputMap[json];\n if (res === undefined) {\n res = createDuration(durationInput);\n durationInputMap[json] = res;\n }\n return res;\n}\n\nfunction reduceViewType(viewType, action) {\n switch (action.type) {\n case 'CHANGE_VIEW_TYPE':\n viewType = action.viewType;\n }\n return viewType;\n}\n\nfunction reduceCurrentDate(currentDate, action) {\n switch (action.type) {\n case 'CHANGE_DATE':\n return action.dateMarker;\n default:\n return currentDate;\n }\n}\n// should be initialized once and stay constant\n// this will change too\nfunction getInitialDate(options, dateEnv, nowManager) {\n let initialDateInput = options.initialDate;\n // compute the initial ambig-timezone date\n if (initialDateInput != null) {\n return dateEnv.createMarker(initialDateInput);\n }\n return nowManager.getDateMarker();\n}\n\nfunction reduceDynamicOptionOverrides(dynamicOptionOverrides, action) {\n switch (action.type) {\n case 'SET_OPTION':\n return Object.assign(Object.assign({}, dynamicOptionOverrides), { [action.optionName]: action.rawOptionValue });\n default:\n return dynamicOptionOverrides;\n }\n}\n\nfunction reduceDateProfile(currentDateProfile, action, currentDate, dateProfileGenerator) {\n let dp;\n switch (action.type) {\n case 'CHANGE_VIEW_TYPE':\n return dateProfileGenerator.build(action.dateMarker || currentDate);\n case 'CHANGE_DATE':\n return dateProfileGenerator.build(action.dateMarker);\n case 'PREV':\n dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);\n if (dp.isValid) {\n return dp;\n }\n break;\n case 'NEXT':\n dp = dateProfileGenerator.buildNext(currentDateProfile, currentDate);\n if (dp.isValid) {\n return dp;\n }\n break;\n }\n return currentDateProfile;\n}\n\nfunction initEventSources(calendarOptions, dateProfile, context) {\n let activeRange = dateProfile ? dateProfile.activeRange : null;\n return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);\n}\nfunction reduceEventSources(eventSources, action, dateProfile, context) {\n let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?\n switch (action.type) {\n case 'ADD_EVENT_SOURCES': // already parsed\n return addSources(eventSources, action.sources, activeRange, context);\n case 'REMOVE_EVENT_SOURCE':\n return removeSource(eventSources, action.sourceId);\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 case 'FETCH_EVENT_SOURCES':\n return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?\n arrayToHash(action.sourceIds) :\n excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);\n case 'RECEIVE_EVENTS':\n case 'RECEIVE_EVENT_ERROR':\n return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);\n case 'REMOVE_ALL_EVENT_SOURCES':\n return {};\n default:\n return eventSources;\n }\n}\nfunction reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {\n let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?\n return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);\n}\nfunction computeEventSourcesLoading(eventSources) {\n for (let sourceId in eventSources) {\n if (eventSources[sourceId].isFetching) {\n return true;\n }\n }\n return false;\n}\nfunction addSources(eventSourceHash, sources, fetchRange, context) {\n let hash = {};\n for (let source of sources) {\n hash[source.sourceId] = source;\n }\n if (fetchRange) {\n hash = fetchDirtySources(hash, fetchRange, context);\n }\n return Object.assign(Object.assign({}, eventSourceHash), hash);\n}\nfunction removeSource(eventSourceHash, sourceId) {\n return filterHash(eventSourceHash, (eventSource) => eventSource.sourceId !== sourceId);\n}\nfunction fetchDirtySources(sourceHash, fetchRange, context) {\n return fetchSourcesByIds(sourceHash, filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)), fetchRange, false, context);\n}\nfunction isSourceDirty(eventSource, fetchRange, context) {\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}\nfunction fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {\n let nextSources = {};\n for (let sourceId in prevSources) {\n let source = prevSources[sourceId];\n if (sourceIdHash[sourceId]) {\n nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);\n }\n else {\n nextSources[sourceId] = source;\n }\n }\n return nextSources;\n}\nfunction fetchSource(eventSource, fetchRange, isRefetch, context) {\n let { options, calendarApi } = context;\n let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];\n let fetchId = guid();\n sourceDef.fetch({\n eventSource,\n range: fetchRange,\n isRefetch,\n context,\n }, (res) => {\n let { rawEvents } = res;\n if (options.eventSourceSuccess) {\n rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.response) || rawEvents;\n }\n if (eventSource.success) {\n rawEvents = eventSource.success.call(calendarApi, rawEvents, res.response) || rawEvents;\n }\n context.dispatch({\n type: 'RECEIVE_EVENTS',\n sourceId: eventSource.sourceId,\n fetchId,\n fetchRange,\n rawEvents,\n });\n }, (error) => {\n let errorHandled = false;\n if (options.eventSourceFailure) {\n options.eventSourceFailure.call(calendarApi, error);\n errorHandled = true;\n }\n if (eventSource.failure) {\n eventSource.failure(error);\n errorHandled = true;\n }\n if (!errorHandled) {\n console.warn(error.message, error);\n }\n context.dispatch({\n type: 'RECEIVE_EVENT_ERROR',\n sourceId: eventSource.sourceId,\n fetchId,\n fetchRange,\n error,\n });\n });\n return Object.assign(Object.assign({}, eventSource), { isFetching: true, latestFetchId: fetchId });\n}\nfunction receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {\n let eventSource = sourceHash[sourceId];\n if (eventSource && // not already removed\n fetchId === eventSource.latestFetchId) {\n return Object.assign(Object.assign({}, sourceHash), { [sourceId]: Object.assign(Object.assign({}, eventSource), { isFetching: false, fetchRange }) });\n }\n return sourceHash;\n}\nfunction excludeStaticSources(eventSources, context) {\n return filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context));\n}\nfunction parseInitialSources(rawOptions, context) {\n let refiners = buildEventSourceRefiners(context);\n let rawSources = [].concat(rawOptions.eventSources || []);\n let sources = []; // parsed\n if (rawOptions.initialEvents) {\n rawSources.unshift(rawOptions.initialEvents);\n }\n if (rawOptions.events) {\n rawSources.unshift(rawOptions.events);\n }\n for (let rawSource of rawSources) {\n let source = parseEventSource(rawSource, context, refiners);\n if (source) {\n sources.push(source);\n }\n }\n return sources;\n}\nfunction doesSourceNeedRange(eventSource, context) {\n let defs = context.pluginHooks.eventSourceDefs;\n return !defs[eventSource.sourceDefId].ignoreRange;\n}\n\nfunction reduceDateSelection(currentSelection, action) {\n switch (action.type) {\n case 'UNSELECT_DATES':\n return null;\n case 'SELECT_DATES':\n return action.selection;\n default:\n return currentSelection;\n }\n}\n\nfunction reduceSelectedEvent(currentInstanceId, action) {\n switch (action.type) {\n case 'UNSELECT_EVENT':\n return '';\n case 'SELECT_EVENT':\n return action.eventInstanceId;\n default:\n return currentInstanceId;\n }\n}\n\nfunction reduceEventDrag(currentDrag, action) {\n let newDrag;\n switch (action.type) {\n case 'UNSET_EVENT_DRAG':\n return null;\n case 'SET_EVENT_DRAG':\n newDrag = action.state;\n return {\n affectedEvents: newDrag.affectedEvents,\n mutatedEvents: newDrag.mutatedEvents,\n isEvent: newDrag.isEvent,\n };\n default:\n return currentDrag;\n }\n}\n\nfunction reduceEventResize(currentResize, action) {\n let newResize;\n switch (action.type) {\n case 'UNSET_EVENT_RESIZE':\n return null;\n case 'SET_EVENT_RESIZE':\n newResize = action.state;\n return {\n affectedEvents: newResize.affectedEvents,\n mutatedEvents: newResize.mutatedEvents,\n isEvent: newResize.isEvent,\n };\n default:\n return currentResize;\n }\n}\n\nfunction parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {\n let header = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;\n let footer = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;\n return { header, footer };\n}\nfunction parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {\n let sectionWidgets = {};\n let viewsWithButtons = [];\n let hasTitle = false;\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 return { sectionWidgets, viewsWithButtons, hasTitle };\n}\n/*\nBAD: querying icons and text here. should be done at render time\n*/\nfunction parseSection(sectionStr, calendarOptions, // defaults+overrides, then refined\ncalendarOptionOverrides, // overrides only!, unrefined :(\ntheme, viewSpecs, calendarApi) {\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 = [];\n let hasTitle = false;\n let widgets = sectionSubstrs.map((buttonGroupStr) => (buttonGroupStr.split(',').map((buttonName) => {\n if (buttonName === 'title') {\n hasTitle = true;\n return { buttonName };\n }\n let customButtonProps;\n let viewSpec;\n let buttonClick;\n let buttonIcon; // only one of these will be set\n let buttonText; // \"\n let buttonHint;\n // ^ for the title=\"\" attribute, for accessibility\n if ((customButtonProps = calendarCustomButtons[buttonName])) {\n buttonClick = (ev) => {\n if (customButtonProps.click) {\n customButtonProps.click.call(ev.target, ev, ev.target); // TODO: use Calendar this context?\n }\n };\n (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\n (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n (buttonText = customButtonProps.text);\n buttonHint = customButtonProps.hint || customButtonProps.text;\n }\n else if ((viewSpec = viewSpecs[buttonName])) {\n viewsWithButtons.push(buttonName);\n buttonClick = () => {\n calendarApi.changeView(buttonName);\n };\n (buttonText = viewSpec.buttonTextOverride) ||\n (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n (buttonText = viewSpec.buttonTextDefault);\n let textFallback = viewSpec.buttonTextOverride ||\n viewSpec.buttonTextDefault;\n buttonHint = formatWithOrdinals(viewSpec.buttonTitleOverride ||\n viewSpec.buttonTitleDefault ||\n calendarOptions.viewHint, [textFallback, buttonName], // view-name = buttonName\n textFallback);\n }\n else if (calendarApi[buttonName]) { // a calendarApi method\n buttonClick = () => {\n calendarApi[buttonName]();\n };\n (buttonText = calendarButtonTextOverrides[buttonName]) ||\n (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n (buttonText = calendarButtonText[buttonName]); // everything else is considered default\n if (buttonName === 'prevYear' || buttonName === 'nextYear') {\n let prevOrNext = buttonName === 'prevYear' ? 'prev' : 'next';\n buttonHint = formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] ||\n calendarButtonHints[prevOrNext], [\n calendarButtonText.year || 'year',\n 'year',\n ], calendarButtonText[buttonName]);\n }\n else {\n buttonHint = (navUnit) => formatWithOrdinals(calendarButtonHintOverrides[buttonName] ||\n calendarButtonHints[buttonName], [\n calendarButtonText[navUnit] || navUnit,\n navUnit,\n ], calendarButtonText[buttonName]);\n }\n }\n return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint };\n })));\n return { widgets, viewsWithButtons, hasTitle };\n}\n\n// always represents the current view. otherwise, it'd need to change value every time date changes\nclass ViewImpl {\n constructor(type, getCurrentData, dateEnv) {\n this.type = type;\n this.getCurrentData = getCurrentData;\n this.dateEnv = dateEnv;\n }\n get calendar() {\n return this.getCurrentData().calendarApi;\n }\n get title() {\n return this.getCurrentData().viewTitle;\n }\n get activeStart() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start);\n }\n get activeEnd() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end);\n }\n get currentStart() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start);\n }\n get currentEnd() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end);\n }\n getOption(name) {\n return this.getCurrentData().options[name]; // are the view-specific options\n }\n}\n\nlet eventSourceDef$2 = {\n ignoreRange: true,\n parseMeta(refined) {\n if (Array.isArray(refined.events)) {\n return refined.events;\n }\n return null;\n },\n fetch(arg, successCallback) {\n successCallback({\n rawEvents: arg.eventSource.meta,\n });\n },\n};\nconst arrayEventSourcePlugin = createPlugin({\n name: 'array-event-source',\n eventSourceDefs: [eventSourceDef$2],\n});\n\nlet eventSourceDef$1 = {\n parseMeta(refined) {\n if (typeof refined.events === 'function') {\n return refined.events;\n }\n return null;\n },\n fetch(arg, successCallback, errorCallback) {\n const { dateEnv } = arg.context;\n const func = arg.eventSource.meta;\n unpromisify(func.bind(null, buildRangeApiWithTimeZone(arg.range, dateEnv)), (rawEvents) => successCallback({ rawEvents }), errorCallback);\n },\n};\nconst funcEventSourcePlugin = createPlugin({\n name: 'func-event-source',\n eventSourceDefs: [eventSourceDef$1],\n});\n\nconst JSON_FEED_EVENT_SOURCE_REFINERS = {\n method: String,\n extraParams: identity,\n startParam: String,\n endParam: String,\n timeZoneParam: String,\n};\n\nlet eventSourceDef = {\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 fetch(arg, successCallback, errorCallback) {\n const { meta } = arg.eventSource;\n const requestParams = buildRequestParams(meta, arg.range, arg.context);\n requestJson(meta.method, meta.url, requestParams).then(([rawEvents, response]) => {\n successCallback({ rawEvents, response });\n }, errorCallback);\n },\n};\nconst jsonFeedEventSourcePlugin = createPlugin({\n name: 'json-event-source',\n eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,\n eventSourceDefs: [eventSourceDef],\n});\nfunction buildRequestParams(meta, range, context) {\n let { dateEnv, options } = context;\n let startParam;\n let endParam;\n let timeZoneParam;\n let customRequestParams;\n let params = {};\n startParam = meta.startParam;\n if (startParam == null) {\n startParam = options.startParam;\n }\n endParam = meta.endParam;\n if (endParam == null) {\n endParam = options.endParam;\n }\n timeZoneParam = meta.timeZoneParam;\n if (timeZoneParam == null) {\n timeZoneParam = options.timeZoneParam;\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 }\n else {\n // probably supplied as a straight key/value object\n customRequestParams = meta.extraParams || {};\n }\n Object.assign(params, customRequestParams);\n params[startParam] = dateEnv.formatIso(range.start);\n params[endParam] = dateEnv.formatIso(range.end);\n if (dateEnv.timeZone !== 'local') {\n params[timeZoneParam] = dateEnv.timeZone;\n }\n return params;\n}\n\nconst SIMPLE_RECURRING_REFINERS = {\n daysOfWeek: identity,\n startTime: createDuration,\n endTime: createDuration,\n duration: createDuration,\n startRecur: identity,\n endRecur: identity,\n};\n\nlet recurring = {\n parse(refined, dateEnv) {\n if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {\n let recurringData = {\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 dateEnv,\n };\n let duration;\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 return {\n allDayGuess: Boolean(!refined.startTime && !refined.endTime),\n duration,\n typeData: recurringData, // doesn't need endTime anymore but oh well\n };\n }\n return null;\n },\n expand(typeData, framingRange, dateEnv) {\n let clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });\n if (clippedFramingRange) {\n return expandRanges(typeData.daysOfWeek, typeData.startTime, typeData.dateEnv, dateEnv, clippedFramingRange);\n }\n return [];\n },\n};\nconst simpleRecurringEventsPlugin = createPlugin({\n name: 'simple-recurring-event',\n recurringTypes: [recurring],\n eventRefiners: SIMPLE_RECURRING_REFINERS,\n});\nfunction expandRanges(daysOfWeek, startTime, eventDateEnv, calendarDateEnv, framingRange) {\n let dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;\n let dayMarker = startOfDay(framingRange.start);\n let endMarker = framingRange.end;\n let instanceStarts = [];\n while (dayMarker < endMarker) {\n let instanceStart;\n // if everyday, or this particular day-of-week\n if (!dowHash || dowHash[dayMarker.getUTCDay()]) {\n if (startTime) {\n instanceStart = calendarDateEnv.add(dayMarker, startTime);\n }\n else {\n instanceStart = dayMarker;\n }\n instanceStarts.push(calendarDateEnv.createMarker(eventDateEnv.toDate(instanceStart)));\n }\n dayMarker = addDays(dayMarker, 1);\n }\n return instanceStarts;\n}\n\nconst changeHandlerPlugin = createPlugin({\n name: 'change-handler',\n optionChangeHandlers: {\n events(events, context) {\n handleEventSources([events], context);\n },\n eventSources: handleEventSources,\n },\n});\n/*\nBUG: if `event` was supplied, all previously-given `eventSources` will be wiped out\n*/\nfunction handleEventSources(inputs, context) {\n let unfoundSources = hashValuesToArray(context.getCurrentData().eventSources);\n if (unfoundSources.length === 1 &&\n inputs.length === 1 &&\n Array.isArray(unfoundSources[0]._raw) &&\n Array.isArray(inputs[0])) {\n context.dispatch({\n type: 'RESET_RAW_EVENTS',\n sourceId: unfoundSources[0].sourceId,\n rawEvents: inputs[0],\n });\n return;\n }\n let newInputs = [];\n for (let input of inputs) {\n let inputFound = false;\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 if (!inputFound) {\n newInputs.push(input);\n }\n }\n for (let unfoundSource of unfoundSources) {\n context.dispatch({\n type: 'REMOVE_EVENT_SOURCE',\n sourceId: unfoundSource.sourceId,\n });\n }\n for (let newInput of newInputs) {\n context.calendarApi.addEventSource(newInput);\n }\n}\n\nfunction handleDateProfile(dateProfile, context) {\n context.emitter.trigger('datesSet', Object.assign(Object.assign({}, buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));\n}\n\nfunction handleEventStore(eventStore, context) {\n let { emitter } = context;\n if (emitter.hasHandlers('eventsSet')) {\n emitter.trigger('eventsSet', buildEventApis(eventStore, context));\n }\n}\n\n/*\nthis array is exposed on the root namespace so that UMD plugins can add to it.\nsee the rollup-bundles script.\n*/\nconst globalPlugins = [\n arrayEventSourcePlugin,\n funcEventSourcePlugin,\n jsonFeedEventSourcePlugin,\n simpleRecurringEventsPlugin,\n changeHandlerPlugin,\n createPlugin({\n name: 'misc',\n isLoadingFuncs: [\n (state) => computeEventSourcesLoading(state.eventSources),\n ],\n propSetHandlers: {\n dateProfile: handleDateProfile,\n eventStore: handleEventStore,\n },\n }),\n];\n\nclass TaskRunner {\n constructor(runTaskOption, drainedOption) {\n this.runTaskOption = runTaskOption;\n this.drainedOption = drainedOption;\n this.queue = [];\n this.delayedRunner = new DelayedRunner(this.drain.bind(this));\n }\n request(task, delay) {\n this.queue.push(task);\n this.delayedRunner.request(delay);\n }\n pause(scope) {\n this.delayedRunner.pause(scope);\n }\n resume(scope, force) {\n this.delayedRunner.resume(scope, force);\n }\n drain() {\n let { queue } = this;\n while (queue.length) {\n let completedTasks = [];\n let task;\n while ((task = queue.shift())) {\n this.runTask(task);\n completedTasks.push(task);\n }\n this.drained(completedTasks);\n } // keep going, in case new tasks were added in the drained handler\n }\n runTask(task) {\n if (this.runTaskOption) {\n this.runTaskOption(task);\n }\n }\n drained(completedTasks) {\n if (this.drainedOption) {\n this.drainedOption(completedTasks);\n }\n }\n}\n\n// Computes what the title at the top of the calendarApi should be for this view\nfunction buildTitle(dateProfile, viewOptions, dateEnv) {\n let range;\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 }\n else { // for day units or smaller, use the actual day range\n range = dateProfile.activeRange;\n }\n return dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {\n isEndExclusive: dateProfile.isRangeAllDay,\n defaultSeparator: viewOptions.titleRangeSeparator,\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) {\n let { currentRangeUnit } = dateProfile;\n if (currentRangeUnit === 'year') {\n return { year: 'numeric' };\n }\n if (currentRangeUnit === 'month') {\n return { year: 'numeric', month: 'long' }; // like \"September 2014\"\n }\n let days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);\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 // one day. longer, like \"September 9 2014\"\n return { year: 'numeric', month: 'long', day: 'numeric' };\n}\n\n/*\nTODO: test switching timezones when NO timezone plugin\n*/\nclass CalendarNowManager {\n constructor() {\n this.resetListeners = new Set();\n }\n handleInput(dateEnv, // will change if timezone setup changed\n nowInput) {\n const oldDateEnv = this.dateEnv;\n if (dateEnv !== oldDateEnv) {\n if (typeof nowInput === 'function') {\n this.nowFn = nowInput;\n }\n else if (!oldDateEnv) { // first time?\n this.nowAnchorDate = dateEnv.toDate(nowInput\n ? dateEnv.createMarker(nowInput)\n : dateEnv.createNowMarker());\n this.nowAnchorQueried = Date.now();\n }\n this.dateEnv = dateEnv;\n // not first time? fire reset handlers\n if (oldDateEnv) {\n for (const resetListener of this.resetListeners.values()) {\n resetListener();\n }\n }\n }\n }\n getDateMarker() {\n return this.nowAnchorDate\n ? this.dateEnv.timestampToMarker(this.nowAnchorDate.valueOf() +\n (Date.now() - this.nowAnchorQueried))\n : this.dateEnv.createMarker(this.nowFn());\n }\n addResetListener(handler) {\n this.resetListeners.add(handler);\n }\n removeResetListener(handler) {\n this.resetListeners.delete(handler);\n }\n}\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\nclass CalendarDataManager {\n constructor(props) {\n this.computeCurrentViewData = memoize(this._computeCurrentViewData);\n this.organizeRawLocales = memoize(organizeRawLocales);\n this.buildLocale = memoize(buildLocale);\n this.buildPluginHooks = buildBuildPluginHooks();\n this.buildDateEnv = memoize(buildDateEnv$1);\n this.buildTheme = memoize(buildTheme);\n this.parseToolbars = memoize(parseToolbars);\n this.buildViewSpecs = memoize(buildViewSpecs);\n this.buildDateProfileGenerator = memoizeObjArg(buildDateProfileGenerator);\n this.buildViewApi = memoize(buildViewApi);\n this.buildViewUiProps = memoizeObjArg(buildViewUiProps);\n this.buildEventUiBySource = memoize(buildEventUiBySource, isPropsEqual);\n this.buildEventUiBases = memoize(buildEventUiBases);\n this.parseContextBusinessHours = memoizeObjArg(parseContextBusinessHours);\n this.buildTitle = memoize(buildTitle);\n this.nowManager = new CalendarNowManager();\n this.emitter = new Emitter();\n this.actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this));\n this.currentCalendarOptionsInput = {};\n this.currentCalendarOptionsRefined = {};\n this.currentViewOptionsInput = {};\n this.currentViewOptionsRefined = {};\n this.currentCalendarOptionsRefiners = {};\n this.optionsForRefining = [];\n this.optionsForHandling = [];\n this.getCurrentData = () => this.data;\n this.dispatch = (action) => {\n this.actionRunner.request(action); // protects against recursive calls to _handleAction\n };\n this.props = props;\n this.actionRunner.pause();\n this.nowManager = new CalendarNowManager();\n let dynamicOptionOverrides = {};\n let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);\n let currentViewType = optionsData.calendarOptions.initialView || optionsData.pluginHooks.initialView;\n let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);\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 let calendarContext = {\n nowManager: this.nowManager,\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 let currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv, this.nowManager);\n let dateProfile = currentViewData.dateProfileGenerator.build(currentDate);\n if (!rangeContainsMarker(dateProfile.activeRange, currentDate)) {\n currentDate = dateProfile.currentRange.start;\n }\n // needs to be after setThisContext\n for (let callback of optionsData.pluginHooks.contextInit) {\n callback(calendarContext);\n }\n // NOT DRY\n let eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);\n let initialState = {\n dynamicOptionOverrides,\n currentViewType,\n currentDate,\n dateProfile,\n businessHours: this.parseContextBusinessHours(calendarContext),\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 = Object.assign(Object.assign({}, calendarContext), initialState);\n for (let reducer of optionsData.pluginHooks.reducers) {\n Object.assign(initialState, reducer(null, null, contextAndState));\n }\n if (computeIsLoading(initialState, calendarContext)) {\n this.emitter.trigger('loading', true); // NOT DRY\n }\n this.state = initialState;\n this.updateData();\n this.actionRunner.resume();\n }\n resetOptions(optionOverrides, changedOptionNames) {\n let { props } = this;\n if (changedOptionNames === undefined) {\n props.optionOverrides = optionOverrides;\n }\n else {\n props.optionOverrides = Object.assign(Object.assign({}, (props.optionOverrides || {})), optionOverrides);\n this.optionsForRefining.push(...changedOptionNames);\n }\n if (changedOptionNames === undefined || changedOptionNames.length) {\n this.actionRunner.request({\n type: 'NOTHING',\n });\n }\n }\n _handleAction(action) {\n let { props, state, emitter } = this;\n let dynamicOptionOverrides = reduceDynamicOptionOverrides(state.dynamicOptionOverrides, action);\n let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);\n let currentViewType = reduceViewType(state.currentViewType, action);\n let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);\n // wire things up\n // TODO: not DRY\n props.calendarApi.currentDataManager = this;\n emitter.setThisContext(props.calendarApi);\n emitter.setOptions(currentViewData.options);\n let calendarContext = {\n nowManager: this.nowManager,\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 let { currentDate, dateProfile } = state;\n if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) { // hack\n dateProfile = currentViewData.dateProfileGenerator.build(currentDate);\n }\n currentDate = reduceCurrentDate(currentDate, action);\n dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);\n if (action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator\n action.type === 'NEXT' || // \"\n !rangeContainsMarker(dateProfile.currentRange, currentDate)) {\n currentDate = dateProfile.currentRange.start;\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 let renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?\n (state.renderableEventStore || eventStore) : // try from previous state\n eventStore;\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 let newState = {\n dynamicOptionOverrides,\n currentViewType,\n currentDate,\n dateProfile,\n eventSources,\n eventStore,\n renderableEventStore,\n selectionConfig,\n eventUiBases,\n businessHours: this.parseContextBusinessHours(calendarContext),\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 = Object.assign(Object.assign({}, calendarContext), newState);\n for (let reducer of optionsData.pluginHooks.reducers) {\n Object.assign(newState, reducer(state, action, contextAndState)); // give the OLD state, for old value\n }\n let wasLoading = computeIsLoading(state, calendarContext);\n let isLoading = computeIsLoading(newState, calendarContext);\n // TODO: use propSetHandlers in plugin system\n if (!wasLoading && isLoading) {\n emitter.trigger('loading', true);\n }\n else if (wasLoading && !isLoading) {\n emitter.trigger('loading', false);\n }\n this.state = newState;\n if (props.onAction) {\n props.onAction(action);\n }\n }\n updateData() {\n let { props, state } = this;\n let oldData = this.data;\n let optionsData = this.computeOptionsData(props.optionOverrides, state.dynamicOptionOverrides, props.calendarApi);\n let currentViewData = this.computeCurrentViewData(state.currentViewType, optionsData, props.optionOverrides, state.dynamicOptionOverrides);\n let data = this.data = Object.assign(Object.assign(Object.assign({ nowManager: this.nowManager, viewTitle: this.buildTitle(state.dateProfile, currentViewData.options, optionsData.dateEnv), calendarApi: props.calendarApi, dispatch: this.dispatch, emitter: this.emitter, getCurrentData: this.getCurrentData }, optionsData), currentViewData), state);\n let changeHandlers = optionsData.pluginHooks.optionChangeHandlers;\n let oldCalendarOptions = oldData && oldData.calendarOptions;\n let newCalendarOptions = optionsData.calendarOptions;\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 state.renderableEventStore = data.renderableEventStore = rezoneEventStoreDates(data.renderableEventStore, oldData.dateEnv, data.dateEnv);\n }\n for (let optionName in changeHandlers) {\n if (this.optionsForHandling.indexOf(optionName) !== -1 ||\n oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {\n changeHandlers[optionName](newCalendarOptions[optionName], data);\n }\n }\n }\n this.optionsForHandling = [];\n if (props.onData) {\n props.onData(data);\n }\n }\n computeOptionsData(optionOverrides, dynamicOptionOverrides, calendarApi) {\n // TODO: blacklist options that are handled by optionChangeHandlers\n if (!this.optionsForRefining.length &&\n optionOverrides === this.stableOptionOverrides &&\n dynamicOptionOverrides === this.stableDynamicOptionOverrides) {\n return this.stableCalendarOptionsData;\n }\n let { refinedOptions, pluginHooks, localeDefaults, availableLocaleData, extra, } = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides);\n warnUnknownOptions(extra);\n let dateEnv = this.buildDateEnv(refinedOptions.timeZone, refinedOptions.locale, refinedOptions.weekNumberCalculation, refinedOptions.firstDay, refinedOptions.weekText, pluginHooks, availableLocaleData, refinedOptions.defaultRangeSeparator);\n let viewSpecs = this.buildViewSpecs(pluginHooks.views, this.stableOptionOverrides, this.stableDynamicOptionOverrides, localeDefaults);\n let theme = this.buildTheme(refinedOptions, pluginHooks);\n let toolbarConfig = this.parseToolbars(refinedOptions, this.stableOptionOverrides, theme, viewSpecs, calendarApi);\n return this.stableCalendarOptionsData = {\n calendarOptions: refinedOptions,\n pluginHooks,\n dateEnv,\n viewSpecs,\n theme,\n toolbarConfig,\n localeDefaults,\n availableRawLocales: availableLocaleData.map,\n };\n }\n // always called from behind a memoizer\n processRawCalendarOptions(optionOverrides, dynamicOptionOverrides) {\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 = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);\n let extra = {};\n let raw = mergeRawOptions([\n BASE_OPTION_DEFAULTS,\n localeDefaults,\n optionOverrides,\n dynamicOptionOverrides,\n ]);\n let refined = {};\n let currentRaw = this.currentCalendarOptionsInput;\n let currentRefined = this.currentCalendarOptionsRefined;\n let anyChanges = false;\n for (let optionName in raw) {\n if (this.optionsForRefining.indexOf(optionName) === -1 && (raw[optionName] === currentRaw[optionName] || (COMPLEX_OPTION_COMPARATORS[optionName] &&\n (optionName in currentRaw) &&\n COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName])))) {\n refined[optionName] = currentRefined[optionName];\n }\n else if (refiners[optionName]) {\n refined[optionName] = refiners[optionName](raw[optionName]);\n anyChanges = true;\n }\n else {\n extra[optionName] = currentRaw[optionName];\n }\n }\n if (anyChanges) {\n this.currentCalendarOptionsInput = raw;\n this.currentCalendarOptionsRefined = refined;\n this.stableOptionOverrides = optionOverrides;\n this.stableDynamicOptionOverrides = dynamicOptionOverrides;\n }\n this.optionsForHandling.push(...this.optionsForRefining);\n this.optionsForRefining = [];\n return {\n rawOptions: this.currentCalendarOptionsInput,\n refinedOptions: this.currentCalendarOptionsRefined,\n pluginHooks,\n availableLocaleData,\n localeDefaults,\n extra,\n };\n }\n _computeCurrentViewData(viewType, optionsData, optionOverrides, dynamicOptionOverrides) {\n let viewSpec = optionsData.viewSpecs[viewType];\n if (!viewSpec) {\n throw new Error(`viewType \"${viewType}\" is not available. Please make sure you've loaded all neccessary plugins`);\n }\n let { refinedOptions, extra } = this.processRawViewOptions(viewSpec, optionsData.pluginHooks, optionsData.localeDefaults, optionOverrides, dynamicOptionOverrides);\n warnUnknownOptions(extra);\n this.nowManager.handleInput(optionsData.dateEnv, refinedOptions.now);\n let dateProfileGenerator = this.buildDateProfileGenerator({\n dateProfileGeneratorClass: viewSpec.optionDefaults.dateProfileGeneratorClass,\n nowManager: this.nowManager,\n duration: viewSpec.duration,\n durationUnit: viewSpec.durationUnit,\n usesMinMaxTime: viewSpec.optionDefaults.usesMinMaxTime,\n dateEnv: optionsData.dateEnv,\n calendarApi: this.props.calendarApi,\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 validRangeInput: refinedOptions.validRange,\n visibleRangeInput: refinedOptions.visibleRange,\n fixedWeekCount: refinedOptions.fixedWeekCount,\n });\n let viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv);\n return { viewSpec, options: refinedOptions, dateProfileGenerator, viewApi };\n }\n processRawViewOptions(viewSpec, pluginHooks, localeDefaults, optionOverrides, dynamicOptionOverrides) {\n let raw = mergeRawOptions([\n BASE_OPTION_DEFAULTS,\n viewSpec.optionDefaults,\n localeDefaults,\n optionOverrides,\n viewSpec.optionOverrides,\n dynamicOptionOverrides,\n ]);\n let refiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), VIEW_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);\n let refined = {};\n let currentRaw = this.currentViewOptionsInput;\n let currentRefined = this.currentViewOptionsRefined;\n let anyChanges = false;\n let extra = {};\n for (let optionName in raw) {\n if (raw[optionName] === currentRaw[optionName] ||\n (COMPLEX_OPTION_COMPARATORS[optionName] &&\n COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], currentRaw[optionName]))) {\n refined[optionName] = currentRefined[optionName];\n }\n else {\n if (raw[optionName] === this.currentCalendarOptionsInput[optionName] ||\n (COMPLEX_OPTION_COMPARATORS[optionName] &&\n COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], this.currentCalendarOptionsInput[optionName]))) {\n if (optionName in this.currentCalendarOptionsRefined) { // might be an \"extra\" prop\n refined[optionName] = this.currentCalendarOptionsRefined[optionName];\n }\n }\n else if (refiners[optionName]) {\n refined[optionName] = refiners[optionName](raw[optionName]);\n }\n else {\n extra[optionName] = raw[optionName];\n }\n anyChanges = true;\n }\n }\n if (anyChanges) {\n this.currentViewOptionsInput = raw;\n this.currentViewOptionsRefined = refined;\n }\n return {\n rawOptions: this.currentViewOptionsInput,\n refinedOptions: this.currentViewOptionsRefined,\n extra,\n };\n }\n}\nfunction buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {\n let locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);\n return new DateEnv({\n calendarSystem: 'gregory',\n timeZone,\n namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,\n locale,\n weekNumberCalculation,\n firstDay,\n weekText,\n cmdFormatter: pluginHooks.cmdFormatter,\n defaultSeparator,\n });\n}\nfunction buildTheme(options, pluginHooks) {\n let ThemeClass = pluginHooks.themeClasses[options.themeSystem] || StandardTheme;\n return new ThemeClass(options);\n}\nfunction buildDateProfileGenerator(props) {\n let DateProfileGeneratorClass = props.dateProfileGeneratorClass || DateProfileGenerator;\n return new DateProfileGeneratorClass(props);\n}\nfunction buildViewApi(type, getCurrentData, dateEnv) {\n return new ViewImpl(type, getCurrentData, dateEnv);\n}\nfunction buildEventUiBySource(eventSources) {\n return mapHash(eventSources, (eventSource) => eventSource.ui);\n}\nfunction buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {\n let eventUiBases = { '': eventUiSingleBase };\n for (let defId in eventDefs) {\n let def = eventDefs[defId];\n if (def.sourceId && eventUiBySource[def.sourceId]) {\n eventUiBases[defId] = eventUiBySource[def.sourceId];\n }\n }\n return eventUiBases;\n}\nfunction buildViewUiProps(calendarContext) {\n let { options } = calendarContext;\n return {\n eventUiSingleBase: createEventUi({\n display: options.eventDisplay,\n editable: options.editable,\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 }, calendarContext),\n selectionConfig: createEventUi({\n constraint: options.selectConstraint,\n overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,\n allow: options.selectAllow,\n }, calendarContext),\n };\n}\nfunction computeIsLoading(state, context) {\n for (let isLoadingFunc of context.pluginHooks.isLoadingFuncs) {\n if (isLoadingFunc(state)) {\n return true;\n }\n }\n return false;\n}\nfunction parseContextBusinessHours(calendarContext) {\n return parseBusinessHours(calendarContext.options.businessHours, calendarContext);\n}\nfunction warnUnknownOptions(options, viewName) {\n for (let optionName in options) {\n console.warn(`Unknown option '${optionName}'` +\n (viewName ? ` for view '${viewName}'` : ''));\n }\n}\n\nclass ToolbarSection extends BaseComponent {\n render() {\n let children = this.props.widgetGroups.map((widgetGroup) => this.renderWidgetGroup(widgetGroup));\n return createElement('div', { className: 'fc-toolbar-chunk' }, ...children);\n }\n renderWidgetGroup(widgetGroup) {\n let { props } = this;\n let { theme } = this.context;\n let children = [];\n let isOnlyButtons = true;\n for (let widget of widgetGroup) {\n let { buttonName, buttonClick, buttonText, buttonIcon, buttonHint } = widget;\n if (buttonName === 'title') {\n isOnlyButtons = false;\n children.push(createElement(\"h2\", { className: \"fc-toolbar-title\", id: props.titleId }, props.title));\n }\n else {\n let isPressed = buttonName === props.activeButton;\n let isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||\n (!props.isPrevEnabled && buttonName === 'prev') ||\n (!props.isNextEnabled && buttonName === 'next');\n let buttonClasses = [`fc-${buttonName}-button`, theme.getClass('button')];\n if (isPressed) {\n buttonClasses.push(theme.getClass('buttonActive'));\n }\n children.push(createElement(\"button\", { type: \"button\", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, \"aria-pressed\": isPressed, className: buttonClasses.join(' '), onClick: buttonClick }, buttonText || (buttonIcon ? createElement(\"span\", { className: buttonIcon, role: \"img\" }) : '')));\n }\n }\n if (children.length > 1) {\n let groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || '';\n return createElement('div', { className: groupClassName }, ...children);\n }\n return children[0];\n }\n}\n\nclass Toolbar extends BaseComponent {\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 if (sectionWidgets.left) {\n forceLtr = true;\n startContent = sectionWidgets.left;\n }\n else {\n startContent = sectionWidgets.start;\n }\n if (sectionWidgets.right) {\n forceLtr = true;\n endContent = sectionWidgets.right;\n }\n else {\n endContent = sectionWidgets.end;\n }\n let classNames = [\n extraClassName || '',\n 'fc-toolbar',\n forceLtr ? 'fc-toolbar-ltr' : '',\n ];\n return (createElement(\"div\", { className: classNames.join(' ') },\n this.renderSection('start', startContent || []),\n this.renderSection('center', centerContent || []),\n this.renderSection('end', endContent || [])));\n }\n renderSection(key, widgetGroups) {\n let { props } = this;\n return (createElement(ToolbarSection, { key: key, widgetGroups: widgetGroups, title: props.title, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled, titleId: props.titleId }));\n }\n}\n\nclass ViewHarness extends BaseComponent {\n constructor() {\n super(...arguments);\n this.state = {\n availableWidth: null,\n };\n this.handleEl = (el) => {\n this.el = el;\n setRef(this.props.elRef, el);\n this.updateAvailableWidth();\n };\n this.handleResize = () => {\n this.updateAvailableWidth();\n };\n }\n render() {\n let { props, state } = this;\n let { aspectRatio } = props;\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 = '';\n let paddingBottom = '';\n if (aspectRatio) {\n if (state.availableWidth !== null) {\n height = state.availableWidth / aspectRatio;\n }\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 }\n else {\n height = props.height || '';\n }\n return (createElement(\"div\", { \"aria-labelledby\": props.labeledById, ref: this.handleEl, className: classNames.join(' '), style: { height, paddingBottom } }, props.children));\n }\n componentDidMount() {\n this.context.addResizeHandler(this.handleResize);\n }\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleResize);\n }\n updateAvailableWidth() {\n if (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\n/*\nDetects when the user clicks on an event within a DateComponent\n*/\nclass EventClicking extends Interaction {\n constructor(settings) {\n super(settings);\n this.handleSegClick = (ev, segEl) => {\n let { component } = this;\n let { context } = component;\n let seg = getElSeg(segEl);\n if (seg && // might be the <div> surrounding the more link\n component.isValidSegDownEl(ev.target)) {\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, '.fc-event-forced-url');\n let url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';\n context.emitter.trigger('eventClick', {\n el: segEl,\n event: new EventImpl(component.context, seg.eventRange.def, seg.eventRange.instance),\n jsEvent: ev,\n view: context.viewApi,\n });\n if (url && !ev.defaultPrevented) {\n window.location.href = url;\n }\n }\n };\n this.destroy = listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events\n this.handleSegClick);\n }\n}\n\n/*\nTriggers events and adds/removes core classNames when the user's pointer\nenters/leaves event-elements of a component.\n*/\nclass EventHovering extends Interaction {\n constructor(settings) {\n super(settings);\n // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it\n this.handleEventElRemove = (el) => {\n if (el === this.currentSegEl) {\n this.handleSegLeave(null, this.currentSegEl);\n }\n };\n this.handleSegEnter = (ev, segEl) => {\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 this.handleSegLeave = (ev, segEl) => {\n if (this.currentSegEl) {\n this.currentSegEl = null;\n this.triggerEvent('eventMouseLeave', ev, segEl);\n }\n };\n this.removeHoverListeners = listenToHoverBySelector(settings.el, '.fc-event', // on both fg and bg events\n this.handleSegEnter, this.handleSegLeave);\n }\n destroy() {\n this.removeHoverListeners();\n }\n triggerEvent(publicEvName, ev, segEl) {\n let { component } = this;\n let { context } = component;\n let seg = getElSeg(segEl);\n if (!ev || component.isValidSegDownEl(ev.target)) {\n context.emitter.trigger(publicEvName, {\n el: segEl,\n event: new EventImpl(context, seg.eventRange.def, seg.eventRange.instance),\n jsEvent: ev,\n view: context.viewApi,\n });\n }\n }\n}\n\nclass CalendarContent extends PureComponent {\n constructor() {\n super(...arguments);\n this.buildViewContext = memoize(buildViewContext);\n this.buildViewPropTransformers = memoize(buildViewPropTransformers);\n this.buildToolbarProps = memoize(buildToolbarProps);\n this.headerRef = createRef();\n this.footerRef = createRef();\n this.interactionsStore = {};\n // eslint-disable-next-line\n this.state = {\n viewLabelId: getUniqueDomId(),\n };\n // Component Registration\n // -----------------------------------------------------------------------------------------------------------------\n this.registerInteractiveComponent = (component, settingsInput) => {\n let settings = parseInteractionSettings(component, settingsInput);\n let DEFAULT_INTERACTIONS = [\n EventClicking,\n EventHovering,\n ];\n let interactionClasses = DEFAULT_INTERACTIONS.concat(this.props.pluginHooks.componentInteractions);\n let interactions = interactionClasses.map((TheInteractionClass) => new TheInteractionClass(settings));\n this.interactionsStore[component.uid] = interactions;\n interactionSettingsStore[component.uid] = settings;\n };\n this.unregisterInteractiveComponent = (component) => {\n let listeners = this.interactionsStore[component.uid];\n if (listeners) {\n for (let listener of listeners) {\n listener.destroy();\n }\n delete this.interactionsStore[component.uid];\n }\n delete interactionSettingsStore[component.uid];\n };\n // Resizing\n // -----------------------------------------------------------------------------------------------------------------\n this.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 this.handleWindowResize = (ev) => {\n let { options } = this.props;\n if (options.handleWindowResize &&\n ev.target === window // avoid jqui events\n ) {\n this.resizeRunner.request(options.windowResizeDelay);\n }\n };\n }\n /*\n renders INSIDE of an outer div\n */\n render() {\n let { props } = this;\n let { toolbarConfig, options } = props;\n let viewVGrow = false;\n let viewHeight = '';\n let viewAspectRatio;\n if (props.isHeightAuto || props.forPrint) {\n viewHeight = '';\n }\n else if (options.height != null) {\n viewVGrow = true;\n }\n else if (options.contentHeight != null) {\n viewHeight = options.contentHeight;\n }\n else {\n viewAspectRatio = Math.max(options.aspectRatio, 0.5); // prevent from getting too tall\n }\n let viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.nowManager, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);\n let viewLabelId = (toolbarConfig.header && toolbarConfig.header.hasTitle)\n ? this.state.viewLabelId\n : undefined;\n return (createElement(ViewContextType.Provider, { value: viewContext },\n createElement(NowTimer, { unit: \"day\" }, (nowDate) => {\n let toolbarProps = this.buildToolbarProps(props.viewSpec, props.dateProfile, props.dateProfileGenerator, props.currentDate, nowDate, props.viewTitle);\n return (createElement(Fragment, null,\n toolbarConfig.header && (createElement(Toolbar, Object.assign({ ref: this.headerRef, extraClassName: \"fc-header-toolbar\", model: toolbarConfig.header, titleId: viewLabelId }, toolbarProps))),\n createElement(ViewHarness, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, labeledById: viewLabelId },\n this.renderView(props),\n this.buildAppendContent()),\n toolbarConfig.footer && (createElement(Toolbar, Object.assign({ ref: this.footerRef, extraClassName: \"fc-footer-toolbar\", model: toolbarConfig.footer, titleId: \"\" }, toolbarProps)))));\n })));\n }\n componentDidMount() {\n let { props } = this;\n this.calendarInteractions = props.pluginHooks.calendarInteractions\n .map((CalendarInteractionClass) => new CalendarInteractionClass(props));\n window.addEventListener('resize', this.handleWindowResize);\n let { propSetHandlers } = props.pluginHooks;\n for (let propName in propSetHandlers) {\n propSetHandlers[propName](props[propName], props);\n }\n }\n componentDidUpdate(prevProps) {\n let { props } = this;\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 componentWillUnmount() {\n window.removeEventListener('resize', this.handleWindowResize);\n this.resizeRunner.clear();\n for (let interaction of this.calendarInteractions) {\n interaction.destroy();\n }\n this.props.emitter.trigger('_unmount');\n }\n buildAppendContent() {\n let { props } = this;\n let children = props.pluginHooks.viewContainerAppends.map((buildAppendContent) => buildAppendContent(props));\n return createElement(Fragment, {}, ...children);\n }\n renderView(props) {\n let { pluginHooks } = props;\n let { viewSpec } = props;\n let 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 let transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);\n for (let transformer of transformers) {\n Object.assign(viewProps, transformer.transform(viewProps, props));\n }\n let ViewComponent = viewSpec.component;\n return (createElement(ViewComponent, Object.assign({}, viewProps)));\n }\n}\nfunction buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentDate, now, title) {\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 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// Plugin\n// -----------------------------------------------------------------------------------------------------------------\nfunction buildViewPropTransformers(theClasses) {\n return theClasses.map((TheClass) => new TheClass());\n}\n\nclass Calendar extends CalendarImpl {\n constructor(el, optionOverrides = {}) {\n super();\n this.isRendering = false;\n this.isRendered = false;\n this.currentClassNames = [];\n this.customContentRenderId = 0;\n this.handleAction = (action) => {\n // actions we know we want to render immediately\n switch (action.type) {\n case 'SET_EVENT_DRAG':\n case 'SET_EVENT_RESIZE':\n this.renderRunner.tryDrain();\n }\n };\n this.handleData = (data) => {\n this.currentData = data;\n this.renderRunner.request(data.calendarOptions.rerenderDelay);\n };\n this.handleRenderRequest = () => {\n if (this.isRendering) {\n this.isRendered = true;\n let { currentData } = this;\n flushSync(() => {\n render(createElement(CalendarRoot, { options: currentData.calendarOptions, theme: currentData.theme, emitter: currentData.emitter }, (classNames, height, isHeightAuto, forPrint) => {\n this.setClassNames(classNames);\n this.setHeight(height);\n return (createElement(RenderId.Provider, { value: this.customContentRenderId },\n createElement(CalendarContent, Object.assign({ isHeightAuto: isHeightAuto, forPrint: forPrint }, currentData))));\n }), this.el);\n });\n }\n else if (this.isRendered) {\n this.isRendered = false;\n render(null, this.el);\n this.setClassNames([]);\n this.setHeight('');\n }\n };\n ensureElHasStyles(el);\n this.el = el;\n this.renderRunner = new DelayedRunner(this.handleRenderRequest);\n new CalendarDataManager({\n optionOverrides,\n calendarApi: this,\n onAction: this.handleAction,\n onData: this.handleData,\n });\n }\n render() {\n let wasRendering = this.isRendering;\n if (!wasRendering) {\n this.isRendering = true;\n }\n else {\n this.customContentRenderId += 1;\n }\n this.renderRunner.request();\n if (wasRendering) {\n this.updateSize();\n }\n }\n destroy() {\n if (this.isRendering) {\n this.isRendering = false;\n this.renderRunner.request();\n }\n }\n updateSize() {\n flushSync(() => {\n super.updateSize();\n });\n }\n batchRendering(func) {\n this.renderRunner.pause('batchRendering');\n func();\n this.renderRunner.resume('batchRendering');\n }\n pauseRendering() {\n this.renderRunner.pause('pauseRendering');\n }\n resumeRendering() {\n this.renderRunner.resume('pauseRendering', true);\n }\n resetOptions(optionOverrides, changedOptionNames) {\n this.currentDataManager.resetOptions(optionOverrides, changedOptionNames);\n }\n setClassNames(classNames) {\n if (!isArraysEqual(classNames, this.currentClassNames)) {\n let { classList } = this.el;\n for (let className of this.currentClassNames) {\n classList.remove(className);\n }\n for (let className of classNames) {\n classList.add(className);\n }\n this.currentClassNames = classNames;\n }\n }\n setHeight(height) {\n applyStyleProp(this.el, 'height', height);\n }\n}\n\nfunction formatDate(dateInput, options = {}) {\n let dateEnv = buildDateEnv(options);\n let formatter = createFormatter(options);\n let dateMeta = dateEnv.createMarkerMeta(dateInput);\n if (!dateMeta) { // TODO: warning?\n return '';\n }\n return dateEnv.format(dateMeta.marker, formatter, {\n forcedTzo: dateMeta.forcedTzo,\n });\n}\nfunction formatRange(startInput, endInput, options) {\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 if (!startMeta || !endMeta) { // TODO: warning?\n return '';\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// TODO: more DRY and optimized\nfunction buildDateEnv(settings) {\n let locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map); // TODO: don't hardcode 'en' everywhere\n return new DateEnv(Object.assign(Object.assign({ timeZone: BASE_OPTION_DEFAULTS.timeZone, calendarSystem: 'gregory' }, settings), { locale }));\n}\n\n// HELPERS\n/*\nif nextDayThreshold is specified, slicing is done in an all-day fashion.\nyou can get nextDayThreshold from context.nextDayThreshold\n*/\nfunction sliceEvents(props, allDay) {\n return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;\n}\n\nconst version = '6.1.17';\n\nexport { Calendar, createPlugin, formatDate, formatRange, globalLocales, globalPlugins, sliceEvents, version };\n"],"names":["globalLocales","MINIMAL_RAW_EN_LOCALE","code","week","dow","doy","direction","buttonText","prev","next","prevYear","nextYear","year","today","month","day","list","weekText","weekTextLong","closeHint","timeHint","eventHint","allDayText","moreLinkText","noEventsText","RAW_EN_LOCALE","Object","assign","buttonHints","unit","viewHint","navLinkHint","moreLinkHint","eventCnt","organizeRawLocales","explicitRawLocales","defaultCode","length","allRawLocales","concat","rawLocaleMap","en","rawLocale","map","buildLocale","inputSingular","available","Array","isArray","codeArg","codes","raw","i","parts","toLocaleLowerCase","split","j","simpleId","slice","join","queryRawLocale","parseLocale","queryLocale","merged","mergeProps","simpleNumberFormat","Intl","NumberFormat","options","createPlugin","input","id","guid","name","premiumReleaseDate","Date","undefined","deps","reducers","isLoadingFuncs","contextInit","eventRefiners","eventDefMemberAdders","eventSourceRefiners","isDraggableTransformers","eventDragMutationMassagers","eventDefMutationAppliers","dateSelectionTransformers","datePointTransforms","dateSpanTransforms","views","viewPropsTransformers","isPropsValid","externalDefTransforms","viewContainerAppends","eventDropTransformers","componentInteractions","calendarInteractions","themeClasses","eventSourceDefs","cmdFormatter","recurringTypes","namedTimeZonedImpl","initialView","elementDraggingImpl","optionChangeHandlers","scrollGridImpl","listenerRefiners","optionRefiners","propSetHandlers","buildBuildPluginHooks","currentHooks","currentOverrideDefs","currentGlobalDefs","overrideDefs","globalDefs","isArraysEqual","pluginDefs","currentPluginIds","hooks","addDefs","defs","def","pluginName","currentId","hooks1","compareOptionalDates","hooks0","console","warn","buildPluginHooks","date0","date1","Math","max","valueOf","StandardTheme","Theme","ensureViewDef","viewType","hash","defaultConfigs","overrideConfigs","viewDef","defaultConfig","overrideConfig","queryProp","theComponent","superType","superDef","Error","component","type","defaults","rawOptions","overrides","buildViewDef","parseViewConfigs","inputs","mapHash","parseViewConfig","content","createViewHookComponent","prototype","BaseComponent","viewProps","createElement","ViewContextType","Consumer","context","ContentContainer","elTag","elClasses","buildViewClassNames","viewSpec","renderProps","nextDayThreshold","generatorName","customGenerator","classNameGenerator","classNames","didMount","willUnmount","buildViewSpecs","defaultInputs","optionOverrides","dynamicOptionOverrides","localeDefaults","viewDefs","compileViewDefs","durationInput","duration","durationUnit","singleUnit","singleUnitOverrides","json","JSON","stringify","res","durationInputMap","createDuration","createDurationCached","denom","greatestDurationDenominator","value","queryButtonText","optionsSubset","buttonTextMap","buttonTextKey","queryButtonTitle","buttonKey","optionDefaults","buttonTextOverride","buttonTextDefault","BASE_OPTION_DEFAULTS","buttonTitleOverride","buttonHint","buttonTitleDefault","buildViewSpec","classes","root","tableCellShaded","buttonGroup","button","buttonActive","baseIconClass","iconClasses","close","rtlIconClasses","iconOverrideOption","iconOverrideCustomButtonOption","iconOverridePrefix","initEventSources","calendarOptions","dateProfile","activeRange","addSources","refiners","buildEventSourceRefiners","rawSources","eventSources","sources","initialEvents","unshift","events","rawSource","source","parseEventSource","push","parseInitialSources","reduceEventSources","action","eventSourceHash","sourceId","filterHash","eventSource","fetchDirtySources","fetchSourcesByIds","sourceIds","arrayToHash","excludeStaticSources","isRefetch","sourceHash","fetchId","fetchRange","latestFetchId","isFetching","receiveResponse","computeEventSourcesLoading","doesSourceNeedRange","lazyFetching","start","end","isSourceDirty","prevSources","sourceIdHash","nextSources","fetchSource","calendarApi","sourceDef","pluginHooks","sourceDefId","fetch","range","rawEvents","eventSourceSuccess","call","response","success","dispatch","error","errorHandled","eventSourceFailure","failure","message","ignoreRange","reduceDateSelection","currentSelection","selection","reduceSelectedEvent","currentInstanceId","eventInstanceId","reduceEventDrag","currentDrag","newDrag","state","affectedEvents","mutatedEvents","isEvent","reduceEventResize","currentResize","newResize","parseToolbars","calendarOptionOverrides","theme","viewSpecs","header","headerToolbar","parseToolbar","footer","footerToolbar","sectionStrHash","sectionWidgets","viewsWithButtons","hasTitle","sectionName","sectionRes","parseSection","widgets","sectionStr","isRtl","calendarCustomButtons","customButtons","calendarButtonTextOverrides","calendarButtonText","calendarButtonHintOverrides","calendarButtonHints","sectionSubstrs","buttonGroupStr","buttonName","customButtonProps","buttonClick","buttonIcon","ev","click","target","getCustomButtonIconClass","getIconClass","text","hint","changeView","textFallback","formatWithOrdinals","prevOrNext","navUnit","ViewImpl","constructor","getCurrentData","dateEnv","this","calendar","title","viewTitle","activeStart","toDate","activeEnd","currentStart","currentRange","currentEnd","getOption","arrayEventSourcePlugin","parseMeta","refined","arg","successCallback","meta","funcEventSourcePlugin","errorCallback","func","unpromisify","bind","buildRangeApiWithTimeZone","jsonFeedEventSourcePlugin","method","String","extraParams","identity","startParam","endParam","timeZoneParam","url","format","toUpperCase","requestParams","customRequestParams","params","formatIso","timeZone","buildRequestParams","requestJson","then","SIMPLE_RECURRING_REFINERS","daysOfWeek","startTime","endTime","startRecur","endRecur","handleEventSources","unfoundSources","hashValuesToArray","_raw","newInputs","inputFound","splice","unfoundSource","newInput","addEventSource","globalPlugins","parse","recurringData","createMarker","subtractDurations","allDayGuess","Boolean","typeData","expand","framingRange","clippedFramingRange","intersectRanges","eventDateEnv","calendarDateEnv","dowHash","dayMarker","startOfDay","endMarker","instanceStarts","instanceStart","getUTCDay","add","addDays","expandRanges","emitter","trigger","view","viewApi","eventStore","hasHandlers","buildEventApis","TaskRunner","runTaskOption","drainedOption","queue","delayedRunner","DelayedRunner","drain","request","task","delay","pause","scope","resume","force","completedTasks","shift","runTask","drained","buildTitle","viewOptions","test","currentRangeUnit","formatRange","createFormatter","titleFormat","days","diffWholeDays","buildTitleFormat","isEndExclusive","isRangeAllDay","defaultSeparator","titleRangeSeparator","CalendarNowManager","resetListeners","Set","handleInput","nowInput","oldDateEnv","nowFn","nowAnchorDate","createNowMarker","nowAnchorQueried","now","resetListener","values","getDateMarker","timestampToMarker","addResetListener","handler","removeResetListener","delete","CalendarDataManager","props","computeCurrentViewData","memoize","_computeCurrentViewData","buildDateEnv","buildDateEnv$1","buildTheme","buildDateProfileGenerator","memoizeObjArg","buildViewApi","buildViewUiProps","buildEventUiBySource","isPropsEqual","buildEventUiBases","parseContextBusinessHours","nowManager","Emitter","actionRunner","_handleAction","updateData","currentCalendarOptionsInput","currentCalendarOptionsRefined","currentViewOptionsInput","currentViewOptionsRefined","currentCalendarOptionsRefiners","optionsForRefining","optionsForHandling","data","optionsData","computeOptionsData","currentViewType","currentViewData","currentDataManager","setThisContext","setOptions","calendarContext","currentDate","initialDateInput","initialDate","getInitialDate","dateProfileGenerator","build","rangeContainsMarker","callback","initialState","businessHours","eventUiBases","createEmptyEventStore","renderableEventStore","dateSelection","eventSelection","eventDrag","eventResize","selectionConfig","contextAndState","reducer","computeIsLoading","resetOptions","changedOptionNames","optionName","rawOptionValue","reduceDynamicOptionOverrides","reduceViewType","dateMarker","reduceCurrentDate","currentDateProfile","dp","buildPrev","isValid","buildNext","reduceDateProfile","reduceEventStore","progressiveEventRendering","eventUiSingleBase","eventUiBySource","newState","wasLoading","isLoading","onAction","oldData","changeHandlers","oldCalendarOptions","newCalendarOptions","reduceEventSourcesNewTimeZone","rezoneEventStoreDates","indexOf","onData","stableOptionOverrides","stableDynamicOptionOverrides","stableCalendarOptionsData","refinedOptions","availableLocaleData","extra","processRawCalendarOptions","warnUnknownOptions","locale","weekNumberCalculation","firstDay","defaultRangeSeparator","toolbarConfig","availableRawLocales","locales","mergeRawOptions","plugins","BASE_OPTION_REFINERS","CALENDAR_LISTENER_REFINERS","CALENDAR_OPTION_REFINERS","currentRaw","currentRefined","anyChanges","COMPLEX_OPTION_COMPARATORS","processRawViewOptions","dateProfileGeneratorClass","usesMinMaxTime","slotMinTime","slotMaxTime","showNonCurrentDates","dayCount","dateAlignment","dateIncrement","hiddenDays","weekends","validRangeInput","validRange","visibleRangeInput","visibleRange","fixedWeekCount","VIEW_OPTION_REFINERS","explicitLocale","DateEnv","calendarSystem","namedTimeZoneImpl","themeSystem","DateProfileGenerator","ui","eventDefs","defId","createEventUi","display","eventDisplay","editable","startEditable","eventStartEditable","durationEditable","eventDurationEditable","constraint","eventConstraint","overlap","eventOverlap","allow","eventAllow","backgroundColor","eventBackgroundColor","borderColor","eventBorderColor","textColor","eventTextColor","color","eventColor","selectConstraint","selectOverlap","selectAllow","isLoadingFunc","parseBusinessHours","viewName","ToolbarSection","render","children","widgetGroups","widgetGroup","renderWidgetGroup","className","isOnlyButtons","widget","titleId","isPressed","activeButton","isDisabled","isTodayEnabled","isPrevEnabled","isNextEnabled","buttonClasses","getClass","disabled","onClick","role","groupClassName","Toolbar","startContent","endContent","model","extraClassName","forceLtr","centerContent","center","left","right","renderSection","key","ViewHarness","super","arguments","availableWidth","handleEl","el","setRef","elRef","updateAvailableWidth","handleResize","aspectRatio","liquid","height","paddingBottom","labeledById","ref","style","componentDidMount","addResizeHandler","componentWillUnmount","removeResizeHandler","setState","offsetWidth","EventClicking","Interaction","settings","handleSegClick","segEl","seg","getElSeg","isValidSegDownEl","hasUrlContainer","elementClosest","querySelector","href","event","EventImpl","eventRange","instance","jsEvent","defaultPrevented","window","location","destroy","listenBySelector","EventHovering","handleEventElRemove","currentSegEl","handleSegLeave","handleSegEnter","triggerEvent","removeHoverListeners","listenToHoverBySelector","publicEvName","CalendarContent","PureComponent","buildViewContext","buildViewPropTransformers","buildToolbarProps","headerRef","createRef","footerRef","interactionsStore","viewLabelId","getUniqueDomId","registerInteractiveComponent","settingsInput","parseInteractionSettings","interactions","TheInteractionClass","uid","interactionSettingsStore","unregisterInteractiveComponent","listeners","listener","resizeRunner","handleWindowResize","windowResizeDelay","viewAspectRatio","viewVGrow","viewHeight","isHeightAuto","forPrint","contentHeight","viewContext","Provider","NowTimer","nowDate","toolbarProps","Fragment","renderView","buildAppendContent","CalendarInteractionClass","addEventListener","propName","componentDidUpdate","prevProps","removeEventListener","clear","interaction","transformers","transformer","transform","ViewComponent","todayInfo","prevInfo","nextInfo","theClasses","TheClass","Calendar","CalendarImpl","isRendering","isRendered","currentClassNames","customContentRenderId","handleAction","renderRunner","tryDrain","handleData","currentData","rerenderDelay","handleRenderRequest","flushSync","CalendarRoot","setClassNames","setHeight","RenderId","ensureElHasStyles","wasRendering","updateSize","batchRendering","pauseRendering","resumeRendering","classList","remove","applyStyleProp"],"mappings":"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"}
|