@fullcalendar/core 6.0.3 → 6.1.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.
Files changed (342) hide show
  1. package/{index.esm.js → index.cjs} +210 -174
  2. package/index.d.ts +1 -1
  3. package/index.global.js +294 -151
  4. package/index.global.min.js +3 -3
  5. package/index.js +199 -185
  6. package/{internal-common.esm.js → internal-common.cjs} +5143 -4788
  7. package/internal-common.d.ts +45 -25
  8. package/internal-common.js +4918 -5036
  9. package/internal.cjs +196 -0
  10. package/internal.d.ts +1 -1
  11. package/internal.js +3 -196
  12. package/locales/{af.esm.js → af.cjs} +5 -1
  13. package/locales/af.global.js +2 -2
  14. package/locales/af.global.min.js +2 -2
  15. package/locales/af.js +1 -5
  16. package/locales/{ar-dz.esm.js → ar-dz.cjs} +6 -1
  17. package/locales/ar-dz.global.js +3 -2
  18. package/locales/ar-dz.global.min.js +3 -3
  19. package/locales/ar-dz.js +2 -5
  20. package/locales/{ar-kw.esm.js → ar-kw.cjs} +6 -1
  21. package/locales/ar-kw.global.js +3 -2
  22. package/locales/ar-kw.global.min.js +3 -3
  23. package/locales/ar-kw.js +2 -5
  24. package/locales/{ar-ly.esm.js → ar-ly.cjs} +6 -1
  25. package/locales/ar-ly.global.js +3 -2
  26. package/locales/ar-ly.global.min.js +3 -3
  27. package/locales/ar-ly.js +2 -5
  28. package/locales/{ar-ma.esm.js → ar-ma.cjs} +6 -1
  29. package/locales/ar-ma.global.js +3 -2
  30. package/locales/ar-ma.global.min.js +3 -3
  31. package/locales/ar-ma.js +2 -5
  32. package/locales/{ar-sa.esm.js → ar-sa.cjs} +6 -1
  33. package/locales/ar-sa.global.js +3 -2
  34. package/locales/ar-sa.global.min.js +3 -3
  35. package/locales/ar-sa.js +2 -5
  36. package/locales/{ar-tn.esm.js → ar-tn.cjs} +6 -1
  37. package/locales/ar-tn.global.js +3 -2
  38. package/locales/ar-tn.global.min.js +3 -3
  39. package/locales/ar-tn.js +2 -5
  40. package/locales/{ar.esm.js → ar.cjs} +6 -1
  41. package/locales/ar.global.js +3 -2
  42. package/locales/ar.global.min.js +3 -3
  43. package/locales/ar.js +2 -5
  44. package/locales/{az.esm.js → az.cjs} +6 -1
  45. package/locales/az.global.js +3 -2
  46. package/locales/az.global.min.js +3 -3
  47. package/locales/az.js +2 -5
  48. package/locales/{bg.esm.js → bg.cjs} +6 -1
  49. package/locales/bg.global.js +3 -2
  50. package/locales/bg.global.min.js +3 -3
  51. package/locales/bg.js +2 -5
  52. package/locales/{bn.esm.js → bn.cjs} +6 -1
  53. package/locales/bn.global.js +3 -2
  54. package/locales/bn.global.min.js +3 -3
  55. package/locales/bn.js +2 -5
  56. package/locales/{bs.esm.js → bs.cjs} +6 -1
  57. package/locales/bs.global.js +3 -2
  58. package/locales/bs.global.min.js +3 -3
  59. package/locales/bs.js +2 -5
  60. package/locales/{ca.esm.js → ca.cjs} +6 -1
  61. package/locales/ca.global.js +3 -2
  62. package/locales/ca.global.min.js +3 -3
  63. package/locales/ca.js +2 -5
  64. package/locales/{cs.esm.js → cs.cjs} +6 -1
  65. package/locales/cs.global.js +3 -2
  66. package/locales/cs.global.min.js +3 -3
  67. package/locales/cs.js +2 -5
  68. package/locales/{cy.esm.js → cy.cjs} +5 -1
  69. package/locales/cy.global.js +2 -2
  70. package/locales/cy.global.min.js +2 -2
  71. package/locales/cy.js +1 -5
  72. package/locales/{da.esm.js → da.cjs} +6 -1
  73. package/locales/da.global.js +3 -2
  74. package/locales/da.global.min.js +3 -3
  75. package/locales/da.js +2 -5
  76. package/locales/{de-at.esm.js → de-at.cjs} +5 -1
  77. package/locales/de-at.global.js +2 -2
  78. package/locales/de-at.global.min.js +2 -2
  79. package/locales/de-at.js +1 -5
  80. package/locales/{de.esm.js → de.cjs} +5 -1
  81. package/locales/de.global.js +2 -2
  82. package/locales/de.global.min.js +2 -2
  83. package/locales/de.js +1 -5
  84. package/locales/{el.esm.js → el.cjs} +6 -1
  85. package/locales/el.global.js +3 -2
  86. package/locales/el.global.min.js +3 -3
  87. package/locales/el.js +2 -5
  88. package/locales/{en-au.esm.js → en-au.cjs} +5 -1
  89. package/locales/en-au.global.js +2 -2
  90. package/locales/en-au.global.min.js +2 -2
  91. package/locales/en-au.js +1 -5
  92. package/locales/{en-gb.esm.js → en-gb.cjs} +5 -1
  93. package/locales/en-gb.global.js +2 -2
  94. package/locales/en-gb.global.min.js +2 -2
  95. package/locales/en-gb.js +1 -5
  96. package/locales/{en-nz.esm.js → en-nz.cjs} +5 -1
  97. package/locales/en-nz.global.js +2 -2
  98. package/locales/en-nz.global.min.js +2 -2
  99. package/locales/en-nz.js +1 -5
  100. package/locales/{eo.esm.js → eo.cjs} +6 -1
  101. package/locales/eo.global.js +3 -2
  102. package/locales/eo.global.min.js +3 -3
  103. package/locales/eo.js +2 -5
  104. package/locales/{es-us.esm.js → es-us.cjs} +6 -1
  105. package/locales/es-us.global.js +3 -2
  106. package/locales/es-us.global.min.js +3 -3
  107. package/locales/es-us.js +2 -5
  108. package/locales/{es.esm.js → es.cjs} +6 -1
  109. package/locales/es.global.js +3 -2
  110. package/locales/es.global.min.js +3 -3
  111. package/locales/es.js +2 -5
  112. package/locales/{et.esm.js → et.cjs} +6 -1
  113. package/locales/et.global.js +3 -2
  114. package/locales/et.global.min.js +3 -3
  115. package/locales/et.js +2 -5
  116. package/locales/{eu.esm.js → eu.cjs} +6 -1
  117. package/locales/eu.global.js +3 -2
  118. package/locales/eu.global.min.js +3 -3
  119. package/locales/eu.js +2 -5
  120. package/locales/{fa.esm.js → fa.cjs} +6 -1
  121. package/locales/fa.global.js +3 -2
  122. package/locales/fa.global.min.js +3 -3
  123. package/locales/fa.js +2 -5
  124. package/locales/{fi.esm.js → fi.cjs} +6 -1
  125. package/locales/fi.global.js +3 -2
  126. package/locales/fi.global.min.js +3 -3
  127. package/locales/fi.js +2 -5
  128. package/locales/{fr-ca.esm.js → fr-ca.cjs} +6 -2
  129. package/locales/fr-ca.global.js +3 -3
  130. package/locales/fr-ca.global.min.js +3 -3
  131. package/locales/fr-ca.js +2 -6
  132. package/locales/{fr-ch.esm.js → fr-ch.cjs} +6 -2
  133. package/locales/fr-ch.global.js +3 -3
  134. package/locales/fr-ch.global.min.js +3 -3
  135. package/locales/fr-ch.js +2 -6
  136. package/locales/{fr.esm.js → fr.cjs} +7 -2
  137. package/locales/fr.global.js +4 -3
  138. package/locales/fr.global.min.js +3 -3
  139. package/locales/fr.js +3 -6
  140. package/locales/gl.cjs +46 -0
  141. package/locales/gl.global.js +22 -2
  142. package/locales/gl.global.min.js +3 -3
  143. package/locales/gl.js +21 -5
  144. package/locales/{he.esm.js → he.cjs} +6 -1
  145. package/locales/he.global.js +3 -2
  146. package/locales/he.global.min.js +3 -3
  147. package/locales/he.js +2 -5
  148. package/locales/{hi.esm.js → hi.cjs} +6 -1
  149. package/locales/hi.global.js +3 -2
  150. package/locales/hi.global.min.js +3 -3
  151. package/locales/hi.js +2 -5
  152. package/locales/{hr.esm.js → hr.cjs} +6 -1
  153. package/locales/hr.global.js +3 -2
  154. package/locales/hr.global.min.js +3 -3
  155. package/locales/hr.js +2 -5
  156. package/locales/{hu.esm.js → hu.cjs} +6 -1
  157. package/locales/hu.global.js +3 -2
  158. package/locales/hu.global.min.js +3 -3
  159. package/locales/hu.js +2 -5
  160. package/locales/{hy-am.esm.js → hy-am.cjs} +6 -1
  161. package/locales/hy-am.global.js +3 -2
  162. package/locales/hy-am.global.min.js +3 -3
  163. package/locales/hy-am.js +2 -5
  164. package/locales/{id.esm.js → id.cjs} +6 -1
  165. package/locales/id.global.js +3 -2
  166. package/locales/id.global.min.js +3 -3
  167. package/locales/id.js +2 -5
  168. package/locales/{is.esm.js → is.cjs} +6 -1
  169. package/locales/is.global.js +3 -2
  170. package/locales/is.global.min.js +3 -3
  171. package/locales/is.js +2 -5
  172. package/locales/{it.esm.js → it.cjs} +6 -1
  173. package/locales/it.global.js +3 -2
  174. package/locales/it.global.min.js +3 -3
  175. package/locales/it.js +2 -5
  176. package/locales/{ja.esm.js → ja.cjs} +6 -1
  177. package/locales/ja.global.js +3 -2
  178. package/locales/ja.global.min.js +3 -3
  179. package/locales/ja.js +2 -5
  180. package/locales/{ka.esm.js → ka.cjs} +6 -1
  181. package/locales/ka.global.js +3 -2
  182. package/locales/ka.global.min.js +3 -3
  183. package/locales/ka.js +2 -5
  184. package/locales/{kk.esm.js → kk.cjs} +6 -1
  185. package/locales/kk.global.js +3 -2
  186. package/locales/kk.global.min.js +3 -3
  187. package/locales/kk.js +2 -5
  188. package/locales/{km.esm.js → km.cjs} +5 -1
  189. package/locales/km.global.js +2 -2
  190. package/locales/km.global.min.js +2 -2
  191. package/locales/km.js +1 -5
  192. package/locales/{ko.esm.js → ko.cjs} +6 -1
  193. package/locales/ko.global.js +3 -2
  194. package/locales/ko.global.min.js +3 -3
  195. package/locales/ko.js +2 -5
  196. package/locales/{ku.esm.js → ku.cjs} +6 -1
  197. package/locales/ku.global.js +3 -2
  198. package/locales/ku.global.min.js +3 -3
  199. package/locales/ku.js +2 -5
  200. package/locales/{lb.esm.js → lb.cjs} +6 -1
  201. package/locales/lb.global.js +3 -2
  202. package/locales/lb.global.min.js +3 -3
  203. package/locales/lb.js +2 -5
  204. package/locales/{lt.esm.js → lt.cjs} +6 -1
  205. package/locales/lt.global.js +3 -2
  206. package/locales/lt.global.min.js +3 -3
  207. package/locales/lt.js +2 -5
  208. package/locales/{lv.esm.js → lv.cjs} +6 -1
  209. package/locales/lv.global.js +3 -2
  210. package/locales/lv.global.min.js +3 -3
  211. package/locales/lv.js +2 -5
  212. package/locales/{mk.esm.js → mk.cjs} +6 -1
  213. package/locales/mk.global.js +3 -2
  214. package/locales/mk.global.min.js +3 -3
  215. package/locales/mk.js +2 -5
  216. package/locales/{ms.esm.js → ms.cjs} +6 -1
  217. package/locales/ms.global.js +3 -2
  218. package/locales/ms.global.min.js +3 -3
  219. package/locales/ms.js +2 -5
  220. package/locales/{nb.esm.js → nb.cjs} +6 -1
  221. package/locales/nb.global.js +3 -2
  222. package/locales/nb.global.min.js +3 -3
  223. package/locales/nb.js +2 -5
  224. package/locales/{ne.esm.js → ne.cjs} +6 -1
  225. package/locales/ne.global.js +3 -2
  226. package/locales/ne.global.min.js +3 -3
  227. package/locales/ne.js +2 -5
  228. package/locales/{nl.esm.js → nl.cjs} +5 -1
  229. package/locales/nl.global.js +2 -2
  230. package/locales/nl.global.min.js +2 -2
  231. package/locales/nl.js +1 -5
  232. package/locales/{nn.esm.js → nn.cjs} +6 -1
  233. package/locales/nn.global.js +3 -2
  234. package/locales/nn.global.min.js +3 -3
  235. package/locales/nn.js +2 -5
  236. package/locales/{pl.esm.js → pl.cjs} +6 -1
  237. package/locales/pl.global.js +3 -2
  238. package/locales/pl.global.min.js +3 -3
  239. package/locales/pl.js +2 -5
  240. package/locales/pt-br.cjs +46 -0
  241. package/locales/pt-br.global.js +24 -2
  242. package/locales/pt-br.global.min.js +3 -3
  243. package/locales/pt-br.js +23 -5
  244. package/locales/{pt.esm.js → pt.cjs} +6 -1
  245. package/locales/pt.global.js +3 -2
  246. package/locales/pt.global.min.js +3 -3
  247. package/locales/pt.js +2 -5
  248. package/locales/{ro.esm.js → ro.cjs} +6 -1
  249. package/locales/ro.global.js +3 -2
  250. package/locales/ro.global.min.js +3 -3
  251. package/locales/ro.js +2 -5
  252. package/locales/{ru.esm.js → ru.cjs} +6 -1
  253. package/locales/ru.global.js +3 -2
  254. package/locales/ru.global.min.js +3 -3
  255. package/locales/ru.js +2 -5
  256. package/locales/{si-lk.esm.js → si-lk.cjs} +6 -1
  257. package/locales/si-lk.global.js +3 -2
  258. package/locales/si-lk.global.min.js +3 -3
  259. package/locales/si-lk.js +2 -5
  260. package/locales/{sk.esm.js → sk.cjs} +6 -1
  261. package/locales/sk.global.js +3 -2
  262. package/locales/sk.global.min.js +3 -3
  263. package/locales/sk.js +2 -5
  264. package/locales/{sl.esm.js → sl.cjs} +6 -1
  265. package/locales/sl.global.js +3 -2
  266. package/locales/sl.global.min.js +3 -3
  267. package/locales/sl.js +2 -5
  268. package/locales/{sm.esm.js → sm.cjs} +6 -1
  269. package/locales/sm.global.js +3 -2
  270. package/locales/sm.global.min.js +3 -3
  271. package/locales/sm.js +2 -5
  272. package/locales/{sq.esm.js → sq.cjs} +7 -2
  273. package/locales/sq.global.js +4 -3
  274. package/locales/sq.global.min.js +3 -3
  275. package/locales/sq.js +3 -6
  276. package/locales/{sr-cyrl.esm.js → sr-cyrl.cjs} +6 -1
  277. package/locales/sr-cyrl.global.js +3 -2
  278. package/locales/sr-cyrl.global.min.js +3 -3
  279. package/locales/sr-cyrl.js +2 -5
  280. package/locales/{sr.esm.js → sr.cjs} +6 -1
  281. package/locales/sr.global.js +3 -2
  282. package/locales/sr.global.min.js +3 -3
  283. package/locales/sr.js +2 -5
  284. package/locales/{sv.esm.js → sv.cjs} +6 -1
  285. package/locales/sv.global.js +3 -2
  286. package/locales/sv.global.min.js +3 -3
  287. package/locales/sv.js +2 -5
  288. package/locales/{ta-in.esm.js → ta-in.cjs} +6 -1
  289. package/locales/ta-in.global.js +3 -2
  290. package/locales/ta-in.global.min.js +3 -3
  291. package/locales/ta-in.js +2 -5
  292. package/locales/{th.esm.js → th.cjs} +5 -1
  293. package/locales/th.global.js +2 -2
  294. package/locales/th.global.min.js +2 -2
  295. package/locales/th.js +1 -5
  296. package/locales/{tr.esm.js → tr.cjs} +6 -1
  297. package/locales/tr.global.js +3 -2
  298. package/locales/tr.global.min.js +3 -3
  299. package/locales/tr.js +2 -5
  300. package/locales/ug.cjs +20 -0
  301. package/locales/ug.global.js +6 -2
  302. package/locales/ug.global.min.js +3 -3
  303. package/locales/ug.js +5 -5
  304. package/locales/{uk.esm.js → uk.cjs} +6 -1
  305. package/locales/uk.global.js +3 -2
  306. package/locales/uk.global.min.js +3 -3
  307. package/locales/uk.js +2 -5
  308. package/locales/uz-cy.cjs +28 -0
  309. package/locales/uz-cy.d.ts +6 -0
  310. package/locales/uz-cy.global.js +34 -0
  311. package/locales/uz-cy.global.min.js +6 -0
  312. package/locales/uz-cy.js +24 -0
  313. package/locales/uz.cjs +28 -0
  314. package/locales/uz.global.js +10 -2
  315. package/locales/uz.global.min.js +3 -3
  316. package/locales/uz.js +10 -6
  317. package/locales/{vi.esm.js → vi.cjs} +7 -2
  318. package/locales/vi.global.js +3 -2
  319. package/locales/vi.global.min.js +3 -3
  320. package/locales/vi.js +3 -6
  321. package/locales/{zh-cn.esm.js → zh-cn.cjs} +7 -2
  322. package/locales/zh-cn.global.js +3 -2
  323. package/locales/zh-cn.global.min.js +3 -3
  324. package/locales/zh-cn.js +3 -6
  325. package/locales/{zh-tw.esm.js → zh-tw.cjs} +7 -2
  326. package/locales/zh-tw.global.js +3 -2
  327. package/locales/zh-tw.global.min.js +3 -3
  328. package/locales/zh-tw.js +3 -6
  329. package/locales-all.cjs +89 -0
  330. package/locales-all.global.js +149 -10
  331. package/locales-all.global.min.js +3 -3
  332. package/locales-all.js +81 -84
  333. package/package.json +19 -14
  334. package/preact.cjs +22 -0
  335. package/preact.js +3 -22
  336. package/internal.esm.js +0 -3
  337. package/locales/gl.esm.js +0 -22
  338. package/locales/pt-br.esm.js +0 -20
  339. package/locales/ug.esm.js +0 -12
  340. package/locales/uz.esm.js +0 -16
  341. package/locales-all.esm.js +0 -84
  342. package/preact.esm.js +0 -3
@@ -1,10 +1,13 @@
1
- import { i as injectStyles, m as mergeProps, g as guid, a as isArraysEqual, T as Theme, b as mapHash, V as ViewContextType, C as ContentContainer, c as buildViewClassNames, d as greatestDurationDenominator, e as createDuration, B 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 getInitialDate, H as rangeContainsMarker, I as createEmptyEventStore, J as reduceCurrentDate, K as reduceEventStore, L as rezoneEventStoreDates, M as mergeRawOptions, N as BASE_OPTION_REFINERS, O as CALENDAR_LISTENER_REFINERS, P as CALENDAR_OPTION_REFINERS, Q as COMPLEX_OPTION_COMPARATORS, R as VIEW_OPTION_REFINERS, S as DateEnv, U as DateProfileGenerator, W as createEventUi, X as parseBusinessHours, Y as BaseComponent, Z as setRef, _ as Interaction, $ as getElSeg, a0 as elementClosest, a1 as EventImpl, a2 as listenBySelector, a3 as listenToHoverBySelector, a4 as PureComponent, a5 as buildViewContext, a6 as getUniqueDomId, a7 as parseInteractionSettings, a8 as interactionSettingsStore, a9 as getNow, aa as CalendarImpl, ab as flushSync, ac as CalendarRoot, ad as RenderId, ae as applyStyleProp, af as sliceEventStore } from './internal-common.esm.js';
2
- export { ag as JsonRequestError } from './internal-common.esm.js';
3
- import { createElement, createRef, Fragment, render } from 'preact';
4
- import 'preact/compat';
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var internalCommon = require('./internal-common.cjs');
6
+ var preact = require('preact');
7
+ require('preact/compat');
5
8
 
6
9
  var css_248z = ":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-unselectable{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;user-select:none}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\") format(\"truetype\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\"\\e900\"}.fc-icon-chevron-right:before{content:\"\\e901\"}.fc-icon-chevrons-left:before{content:\"\\e902\"}.fc-icon-chevrons-right:before{content:\"\\e903\"}.fc-icon-minus-square:before{content:\"\\e904\"}.fc-icon-plus-square:before{content:\"\\e905\"}.fc-icon-x:before{content:\"\\e906\"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button::-moz-focus-inner{border-style:none;padding:0}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\"\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\"\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}";
7
- injectStyles(css_248z);
10
+ internalCommon.injectStyles(css_248z);
8
11
 
9
12
  const globalLocales = [];
10
13
 
@@ -88,7 +91,7 @@ function queryRawLocale(codes, available) {
88
91
  return null;
89
92
  }
90
93
  function parseLocale(codeArg, codes, raw) {
91
- let merged = mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText']);
94
+ let merged = internalCommon.mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText']);
92
95
  delete merged.code; // don't want this part of the options
93
96
  let { week } = merged;
94
97
  delete merged.week;
@@ -104,7 +107,7 @@ function parseLocale(codeArg, codes, raw) {
104
107
  // TODO: easier way to add new hooks? need to update a million things
105
108
  function createPlugin(input) {
106
109
  return {
107
- id: guid(),
110
+ id: internalCommon.guid(),
108
111
  name: input.name,
109
112
  premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : undefined,
110
113
  deps: input.deps || [],
@@ -205,7 +208,7 @@ function buildBuildPluginHooks() {
205
208
  let currentGlobalDefs = [];
206
209
  let currentHooks;
207
210
  return (overrideDefs, globalDefs) => {
208
- if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
211
+ if (!currentHooks || !internalCommon.isArraysEqual(overrideDefs, currentOverrideDefs) || !internalCommon.isArraysEqual(globalDefs, currentGlobalDefs)) {
209
212
  currentHooks = buildPluginHooks(overrideDefs, globalDefs);
210
213
  }
211
214
  currentOverrideDefs = overrideDefs;
@@ -260,7 +263,7 @@ function compareOptionalDates(date0, date1) {
260
263
  return new Date(Math.max(date0.valueOf(), date1.valueOf()));
261
264
  }
262
265
 
263
- class StandardTheme extends Theme {
266
+ class StandardTheme extends internalCommon.Theme {
264
267
  }
265
268
  StandardTheme.prototype.classes = {
266
269
  root: 'fc-theme-standard',
@@ -337,7 +340,7 @@ function buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
337
340
  }
338
341
 
339
342
  function parseViewConfigs(inputs) {
340
- return mapHash(inputs, parseViewConfig);
343
+ return internalCommon.mapHash(inputs, parseViewConfig);
341
344
  }
342
345
  function parseViewConfig(input) {
343
346
  let rawOptions = typeof input === 'function' ?
@@ -355,14 +358,14 @@ function parseViewConfig(input) {
355
358
  };
356
359
  }
357
360
  function createViewHookComponent(options) {
358
- 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, generator: options.content, classNameGenerator: options.classNames, didMount: options.didMount, willUnmount: options.willUnmount }))));
361
+ return (viewProps) => (preact.createElement(internalCommon.ViewContextType.Consumer, null, (context) => (preact.createElement(internalCommon.ContentContainer, { elTag: "div", elClasses: internalCommon.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 }))));
359
362
  }
360
363
 
361
364
  function buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
362
365
  let defaultConfigs = parseViewConfigs(defaultInputs);
363
366
  let overrideConfigs = parseViewConfigs(optionOverrides.views);
364
367
  let viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);
365
- return mapHash(viewDefs, (viewDef) => buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults));
368
+ return internalCommon.mapHash(viewDefs, (viewDef) => buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults));
366
369
  }
367
370
  function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
368
371
  let durationInput = viewDef.overrides.duration ||
@@ -376,7 +379,7 @@ function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionO
376
379
  if (durationInput) {
377
380
  duration = createDurationCached(durationInput);
378
381
  if (duration) { // valid?
379
- let denom = greatestDurationDenominator(duration);
382
+ let denom = internalCommon.greatestDurationDenominator(duration);
380
383
  durationUnit = denom.unit;
381
384
  if (denom.value === 1) {
382
385
  singleUnit = durationUnit;
@@ -425,7 +428,7 @@ function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionO
425
428
  viewDef.overrides.buttonText,
426
429
  buttonTextDefault: queryButtonText(localeDefaults) ||
427
430
  viewDef.defaults.buttonText ||
428
- queryButtonText(BASE_OPTION_DEFAULTS) ||
431
+ queryButtonText(internalCommon.BASE_OPTION_DEFAULTS) ||
429
432
  viewDef.type,
430
433
  // not DRY
431
434
  buttonTitleOverride: queryButtonTitle(dynamicOptionOverrides) ||
@@ -433,7 +436,7 @@ function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionO
433
436
  viewDef.overrides.buttonHint,
434
437
  buttonTitleDefault: queryButtonTitle(localeDefaults) ||
435
438
  viewDef.defaults.buttonHint ||
436
- queryButtonTitle(BASE_OPTION_DEFAULTS),
439
+ queryButtonTitle(internalCommon.BASE_OPTION_DEFAULTS),
437
440
  // will eventually fall back to buttonText
438
441
  };
439
442
  }
@@ -443,7 +446,7 @@ function createDurationCached(durationInput) {
443
446
  let json = JSON.stringify(durationInput);
444
447
  let res = durationInputMap[json];
445
448
  if (res === undefined) {
446
- res = createDuration(durationInput);
449
+ res = internalCommon.createDuration(durationInput);
447
450
  durationInputMap[json] = res;
448
451
  }
449
452
  return res;
@@ -510,7 +513,7 @@ function reduceEventSources(eventSources, action, dateProfile, context) {
510
513
  return eventSources;
511
514
  case 'FETCH_EVENT_SOURCES':
512
515
  return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?
513
- arrayToHash(action.sourceIds) :
516
+ internalCommon.arrayToHash(action.sourceIds) :
514
517
  excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);
515
518
  case 'RECEIVE_EVENTS':
516
519
  case 'RECEIVE_EVENT_ERROR':
@@ -544,10 +547,10 @@ function addSources(eventSourceHash, sources, fetchRange, context) {
544
547
  return Object.assign(Object.assign({}, eventSourceHash), hash);
545
548
  }
546
549
  function removeSource(eventSourceHash, sourceId) {
547
- return filterHash(eventSourceHash, (eventSource) => eventSource.sourceId !== sourceId);
550
+ return internalCommon.filterHash(eventSourceHash, (eventSource) => eventSource.sourceId !== sourceId);
548
551
  }
549
552
  function fetchDirtySources(sourceHash, fetchRange, context) {
550
- return fetchSourcesByIds(sourceHash, filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)), fetchRange, false, context);
553
+ return fetchSourcesByIds(sourceHash, internalCommon.filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)), fetchRange, false, context);
551
554
  }
552
555
  function isSourceDirty(eventSource, fetchRange, context) {
553
556
  if (!doesSourceNeedRange(eventSource, context)) {
@@ -575,7 +578,7 @@ function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, con
575
578
  function fetchSource(eventSource, fetchRange, isRefetch, context) {
576
579
  let { options, calendarApi } = context;
577
580
  let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
578
- let fetchId = guid();
581
+ let fetchId = internalCommon.guid();
579
582
  sourceDef.fetch({
580
583
  eventSource,
581
584
  range: fetchRange,
@@ -628,10 +631,10 @@ function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
628
631
  return sourceHash;
629
632
  }
630
633
  function excludeStaticSources(eventSources, context) {
631
- return filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context));
634
+ return internalCommon.filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context));
632
635
  }
633
636
  function parseInitialSources(rawOptions, context) {
634
- let refiners = buildEventSourceRefiners(context);
637
+ let refiners = internalCommon.buildEventSourceRefiners(context);
635
638
  let rawSources = [].concat(rawOptions.eventSources || []);
636
639
  let sources = []; // parsed
637
640
  if (rawOptions.initialEvents) {
@@ -641,7 +644,7 @@ function parseInitialSources(rawOptions, context) {
641
644
  rawSources.unshift(rawOptions.events);
642
645
  }
643
646
  for (let rawSource of rawSources) {
644
- let source = parseEventSource(rawSource, context, refiners);
647
+ let source = internalCommon.parseEventSource(rawSource, context, refiners);
645
648
  if (source) {
646
649
  sources.push(source);
647
650
  }
@@ -775,7 +778,7 @@ theme, viewSpecs, calendarApi) {
775
778
  (buttonText = viewSpec.buttonTextDefault);
776
779
  let textFallback = viewSpec.buttonTextOverride ||
777
780
  viewSpec.buttonTextDefault;
778
- buttonHint = formatWithOrdinals(viewSpec.buttonTitleOverride ||
781
+ buttonHint = internalCommon.formatWithOrdinals(viewSpec.buttonTitleOverride ||
779
782
  viewSpec.buttonTitleDefault ||
780
783
  calendarOptions.viewHint, [textFallback, buttonName], // view-name = buttonName
781
784
  textFallback);
@@ -789,14 +792,14 @@ theme, viewSpecs, calendarApi) {
789
792
  (buttonText = calendarButtonText[buttonName]); // everything else is considered default
790
793
  if (buttonName === 'prevYear' || buttonName === 'nextYear') {
791
794
  let prevOrNext = buttonName === 'prevYear' ? 'prev' : 'next';
792
- buttonHint = formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] ||
795
+ buttonHint = internalCommon.formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] ||
793
796
  calendarButtonHints[prevOrNext], [
794
797
  calendarButtonText.year || 'year',
795
798
  'year',
796
799
  ], calendarButtonText[buttonName]);
797
800
  }
798
801
  else {
799
- buttonHint = (navUnit) => formatWithOrdinals(calendarButtonHintOverrides[buttonName] ||
802
+ buttonHint = (navUnit) => internalCommon.formatWithOrdinals(calendarButtonHintOverrides[buttonName] ||
800
803
  calendarButtonHints[buttonName], [
801
804
  calendarButtonText[navUnit] || navUnit,
802
805
  navUnit,
@@ -867,7 +870,7 @@ let eventSourceDef$1 = {
867
870
  fetch(arg, successCallback, errorCallback) {
868
871
  const { dateEnv } = arg.context;
869
872
  const func = arg.eventSource.meta;
870
- unpromisify(func.bind(null, buildRangeApiWithTimeZone(arg.range, dateEnv)), (rawEvents) => successCallback({ rawEvents }), errorCallback);
873
+ internalCommon.unpromisify(func.bind(null, internalCommon.buildRangeApiWithTimeZone(arg.range, dateEnv)), (rawEvents) => successCallback({ rawEvents }), errorCallback);
871
874
  },
872
875
  };
873
876
  const funcEventSourcePlugin = createPlugin({
@@ -877,7 +880,7 @@ const funcEventSourcePlugin = createPlugin({
877
880
 
878
881
  const JSON_FEED_EVENT_SOURCE_REFINERS = {
879
882
  method: String,
880
- extraParams: identity,
883
+ extraParams: internalCommon.identity,
881
884
  startParam: String,
882
885
  endParam: String,
883
886
  timeZoneParam: String,
@@ -901,7 +904,7 @@ let eventSourceDef = {
901
904
  fetch(arg, successCallback, errorCallback) {
902
905
  const { meta } = arg.eventSource;
903
906
  const requestParams = buildRequestParams(meta, arg.range, arg.context);
904
- requestJson(meta.method, meta.url, requestParams).then(([rawEvents, response]) => {
907
+ internalCommon.requestJson(meta.method, meta.url, requestParams).then(([rawEvents, response]) => {
905
908
  successCallback({ rawEvents, response });
906
909
  }, errorCallback);
907
910
  },
@@ -949,12 +952,12 @@ function buildRequestParams(meta, range, context) {
949
952
  }
950
953
 
951
954
  const SIMPLE_RECURRING_REFINERS = {
952
- daysOfWeek: identity,
953
- startTime: createDuration,
954
- endTime: createDuration,
955
- duration: createDuration,
956
- startRecur: identity,
957
- endRecur: identity,
955
+ daysOfWeek: internalCommon.identity,
956
+ startTime: internalCommon.createDuration,
957
+ endTime: internalCommon.createDuration,
958
+ duration: internalCommon.createDuration,
959
+ startRecur: internalCommon.identity,
960
+ endRecur: internalCommon.identity,
958
961
  };
959
962
 
960
963
  let recurring = {
@@ -972,7 +975,7 @@ let recurring = {
972
975
  duration = refined.duration;
973
976
  }
974
977
  if (!duration && refined.startTime && refined.endTime) {
975
- duration = subtractDurations(refined.endTime, refined.startTime);
978
+ duration = internalCommon.subtractDurations(refined.endTime, refined.startTime);
976
979
  }
977
980
  return {
978
981
  allDayGuess: Boolean(!refined.startTime && !refined.endTime),
@@ -983,7 +986,7 @@ let recurring = {
983
986
  return null;
984
987
  },
985
988
  expand(typeData, framingRange, dateEnv) {
986
- let clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
989
+ let clippedFramingRange = internalCommon.intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
987
990
  if (clippedFramingRange) {
988
991
  return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);
989
992
  }
@@ -996,8 +999,8 @@ const simpleRecurringEventsPlugin = createPlugin({
996
999
  eventRefiners: SIMPLE_RECURRING_REFINERS,
997
1000
  });
998
1001
  function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
999
- let dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;
1000
- let dayMarker = startOfDay(framingRange.start);
1002
+ let dowHash = daysOfWeek ? internalCommon.arrayToHash(daysOfWeek) : null;
1003
+ let dayMarker = internalCommon.startOfDay(framingRange.start);
1001
1004
  let endMarker = framingRange.end;
1002
1005
  let instanceStarts = [];
1003
1006
  while (dayMarker < endMarker) {
@@ -1012,7 +1015,7 @@ function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
1012
1015
  }
1013
1016
  instanceStarts.push(instanceStart);
1014
1017
  }
1015
- dayMarker = addDays(dayMarker, 1);
1018
+ dayMarker = internalCommon.addDays(dayMarker, 1);
1016
1019
  }
1017
1020
  return instanceStarts;
1018
1021
  }
@@ -1030,7 +1033,17 @@ const changeHandlerPlugin = createPlugin({
1030
1033
  BUG: if `event` was supplied, all previously-given `eventSources` will be wiped out
1031
1034
  */
1032
1035
  function handleEventSources(inputs, context) {
1033
- let unfoundSources = hashValuesToArray(context.getCurrentData().eventSources);
1036
+ let unfoundSources = internalCommon.hashValuesToArray(context.getCurrentData().eventSources);
1037
+ if (unfoundSources.length === 1 &&
1038
+ inputs.length === 1 &&
1039
+ Array.isArray(unfoundSources[0]._raw) &&
1040
+ Array.isArray(inputs[0])) {
1041
+ context.dispatch({
1042
+ type: 'RESET_RAW_EVENTS',
1043
+ sourceId: unfoundSources[0].sourceId,
1044
+ rawEvents: inputs[0],
1045
+ });
1046
+ }
1034
1047
  let newInputs = [];
1035
1048
  for (let input of inputs) {
1036
1049
  let inputFound = false;
@@ -1057,13 +1070,13 @@ function handleEventSources(inputs, context) {
1057
1070
  }
1058
1071
 
1059
1072
  function handleDateProfile(dateProfile, context) {
1060
- context.emitter.trigger('datesSet', Object.assign(Object.assign({}, buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));
1073
+ context.emitter.trigger('datesSet', Object.assign(Object.assign({}, internalCommon.buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));
1061
1074
  }
1062
1075
 
1063
1076
  function handleEventStore(eventStore, context) {
1064
1077
  let { emitter } = context;
1065
1078
  if (emitter.hasHandlers('eventsSet')) {
1066
- emitter.trigger('eventsSet', buildEventApis(eventStore, context));
1079
+ emitter.trigger('eventsSet', internalCommon.buildEventApis(eventStore, context));
1067
1080
  }
1068
1081
  }
1069
1082
 
@@ -1094,7 +1107,7 @@ class TaskRunner {
1094
1107
  this.runTaskOption = runTaskOption;
1095
1108
  this.drainedOption = drainedOption;
1096
1109
  this.queue = [];
1097
- this.delayedRunner = new DelayedRunner(this.drain.bind(this));
1110
+ this.delayedRunner = new internalCommon.DelayedRunner(this.drain.bind(this));
1098
1111
  }
1099
1112
  request(task, delay) {
1100
1113
  this.queue.push(task);
@@ -1140,7 +1153,7 @@ function buildTitle(dateProfile, viewOptions, dateEnv) {
1140
1153
  else { // for day units or smaller, use the actual day range
1141
1154
  range = dateProfile.activeRange;
1142
1155
  }
1143
- return dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {
1156
+ return dateEnv.formatRange(range.start, range.end, internalCommon.createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {
1144
1157
  isEndExclusive: dateProfile.isRangeAllDay,
1145
1158
  defaultSeparator: viewOptions.titleRangeSeparator,
1146
1159
  });
@@ -1155,7 +1168,7 @@ function buildTitleFormat(dateProfile) {
1155
1168
  if (currentRangeUnit === 'month') {
1156
1169
  return { year: 'numeric', month: 'long' }; // like "September 2014"
1157
1170
  }
1158
- let days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);
1171
+ let days = internalCommon.diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);
1159
1172
  if (days !== null && days > 1) {
1160
1173
  // multi-day range. shorter, like "Sep 9 - 10 2014"
1161
1174
  return { year: 'numeric', month: 'short', day: 'numeric' };
@@ -1168,29 +1181,30 @@ function buildTitleFormat(dateProfile) {
1168
1181
  // also, whatever is happening in constructor, have it happen in action queue too
1169
1182
  class CalendarDataManager {
1170
1183
  constructor(props) {
1171
- this.computeOptionsData = memoize(this._computeOptionsData);
1172
- this.computeCurrentViewData = memoize(this._computeCurrentViewData);
1173
- this.organizeRawLocales = memoize(organizeRawLocales);
1174
- this.buildLocale = memoize(buildLocale);
1184
+ this.computeCurrentViewData = internalCommon.memoize(this._computeCurrentViewData);
1185
+ this.organizeRawLocales = internalCommon.memoize(organizeRawLocales);
1186
+ this.buildLocale = internalCommon.memoize(buildLocale);
1175
1187
  this.buildPluginHooks = buildBuildPluginHooks();
1176
- this.buildDateEnv = memoize(buildDateEnv$1);
1177
- this.buildTheme = memoize(buildTheme);
1178
- this.parseToolbars = memoize(parseToolbars);
1179
- this.buildViewSpecs = memoize(buildViewSpecs);
1180
- this.buildDateProfileGenerator = memoizeObjArg(buildDateProfileGenerator);
1181
- this.buildViewApi = memoize(buildViewApi);
1182
- this.buildViewUiProps = memoizeObjArg(buildViewUiProps);
1183
- this.buildEventUiBySource = memoize(buildEventUiBySource, isPropsEqual);
1184
- this.buildEventUiBases = memoize(buildEventUiBases);
1185
- this.parseContextBusinessHours = memoizeObjArg(parseContextBusinessHours);
1186
- this.buildTitle = memoize(buildTitle);
1187
- this.emitter = new Emitter();
1188
+ this.buildDateEnv = internalCommon.memoize(buildDateEnv$1);
1189
+ this.buildTheme = internalCommon.memoize(buildTheme);
1190
+ this.parseToolbars = internalCommon.memoize(parseToolbars);
1191
+ this.buildViewSpecs = internalCommon.memoize(buildViewSpecs);
1192
+ this.buildDateProfileGenerator = internalCommon.memoizeObjArg(buildDateProfileGenerator);
1193
+ this.buildViewApi = internalCommon.memoize(buildViewApi);
1194
+ this.buildViewUiProps = internalCommon.memoizeObjArg(buildViewUiProps);
1195
+ this.buildEventUiBySource = internalCommon.memoize(buildEventUiBySource, internalCommon.isPropsEqual);
1196
+ this.buildEventUiBases = internalCommon.memoize(buildEventUiBases);
1197
+ this.parseContextBusinessHours = internalCommon.memoizeObjArg(parseContextBusinessHours);
1198
+ this.buildTitle = internalCommon.memoize(buildTitle);
1199
+ this.emitter = new internalCommon.Emitter();
1188
1200
  this.actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this));
1189
1201
  this.currentCalendarOptionsInput = {};
1190
1202
  this.currentCalendarOptionsRefined = {};
1191
1203
  this.currentViewOptionsInput = {};
1192
1204
  this.currentViewOptionsRefined = {};
1193
1205
  this.currentCalendarOptionsRefiners = {};
1206
+ this.optionsForRefining = [];
1207
+ this.optionsForHandling = [];
1194
1208
  this.getCurrentData = () => this.data;
1195
1209
  this.dispatch = (action) => {
1196
1210
  this.actionRunner.request(action); // protects against recursive calls to _handleAction
@@ -1206,9 +1220,9 @@ class CalendarDataManager {
1206
1220
  props.calendarApi.currentDataManager = this;
1207
1221
  this.emitter.setThisContext(props.calendarApi);
1208
1222
  this.emitter.setOptions(currentViewData.options);
1209
- let currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv);
1223
+ let currentDate = internalCommon.getInitialDate(optionsData.calendarOptions, optionsData.dateEnv);
1210
1224
  let dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
1211
- if (!rangeContainsMarker(dateProfile.activeRange, currentDate)) {
1225
+ if (!internalCommon.rangeContainsMarker(dateProfile.activeRange, currentDate)) {
1212
1226
  currentDate = dateProfile.currentRange.start;
1213
1227
  }
1214
1228
  let calendarContext = {
@@ -1234,8 +1248,8 @@ class CalendarDataManager {
1234
1248
  businessHours: this.parseContextBusinessHours(calendarContext),
1235
1249
  eventSources,
1236
1250
  eventUiBases: {},
1237
- eventStore: createEmptyEventStore(),
1238
- renderableEventStore: createEmptyEventStore(),
1251
+ eventStore: internalCommon.createEmptyEventStore(),
1252
+ renderableEventStore: internalCommon.createEmptyEventStore(),
1239
1253
  dateSelection: null,
1240
1254
  eventSelection: '',
1241
1255
  eventDrag: null,
@@ -1253,13 +1267,20 @@ class CalendarDataManager {
1253
1267
  this.updateData();
1254
1268
  this.actionRunner.resume();
1255
1269
  }
1256
- resetOptions(optionOverrides, append) {
1270
+ resetOptions(optionOverrides, changedOptionNames) {
1257
1271
  let { props } = this;
1258
- props.optionOverrides = append
1259
- ? Object.assign(Object.assign({}, props.optionOverrides), optionOverrides) : optionOverrides;
1260
- this.actionRunner.request({
1261
- type: 'NOTHING',
1262
- });
1272
+ if (changedOptionNames === undefined) {
1273
+ props.optionOverrides = optionOverrides;
1274
+ }
1275
+ else {
1276
+ props.optionOverrides = Object.assign(Object.assign({}, (props.optionOverrides || {})), optionOverrides);
1277
+ this.optionsForRefining.push(...changedOptionNames);
1278
+ }
1279
+ if (changedOptionNames === undefined || changedOptionNames.length) {
1280
+ this.actionRunner.request({
1281
+ type: 'NOTHING',
1282
+ });
1283
+ }
1263
1284
  }
1264
1285
  _handleAction(action) {
1265
1286
  let { props, state, emitter } = this;
@@ -1285,15 +1306,15 @@ class CalendarDataManager {
1285
1306
  if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) { // hack
1286
1307
  dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
1287
1308
  }
1288
- currentDate = reduceCurrentDate(currentDate, action);
1309
+ currentDate = internalCommon.reduceCurrentDate(currentDate, action);
1289
1310
  dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);
1290
1311
  if (action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator
1291
1312
  action.type === 'NEXT' || // "
1292
- !rangeContainsMarker(dateProfile.currentRange, currentDate)) {
1313
+ !internalCommon.rangeContainsMarker(dateProfile.currentRange, currentDate)) {
1293
1314
  currentDate = dateProfile.currentRange.start;
1294
1315
  }
1295
1316
  let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
1296
- let eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
1317
+ let eventStore = internalCommon.reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
1297
1318
  let isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading
1298
1319
  let renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?
1299
1320
  (state.renderableEventStore || eventStore) : // try from previous state
@@ -1348,27 +1369,34 @@ class CalendarDataManager {
1348
1369
  if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {
1349
1370
  // hack
1350
1371
  state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);
1351
- state.eventStore = data.eventStore = rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);
1372
+ state.eventStore = data.eventStore = internalCommon.rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);
1352
1373
  }
1353
1374
  for (let optionName in changeHandlers) {
1354
- if (oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {
1375
+ if (this.optionsForHandling.indexOf(optionName) !== -1 ||
1376
+ oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {
1355
1377
  changeHandlers[optionName](newCalendarOptions[optionName], data);
1356
1378
  }
1357
1379
  }
1358
1380
  }
1381
+ this.optionsForHandling = [];
1359
1382
  if (props.onData) {
1360
1383
  props.onData(data);
1361
1384
  }
1362
1385
  }
1363
- _computeOptionsData(optionOverrides, dynamicOptionOverrides, calendarApi) {
1386
+ computeOptionsData(optionOverrides, dynamicOptionOverrides, calendarApi) {
1364
1387
  // TODO: blacklist options that are handled by optionChangeHandlers
1388
+ if (!this.optionsForRefining.length &&
1389
+ optionOverrides === this.stableOptionOverrides &&
1390
+ dynamicOptionOverrides === this.stableDynamicOptionOverrides) {
1391
+ return this.stableCalendarOptionsData;
1392
+ }
1365
1393
  let { refinedOptions, pluginHooks, localeDefaults, availableLocaleData, extra, } = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides);
1366
1394
  warnUnknownOptions(extra);
1367
1395
  let dateEnv = this.buildDateEnv(refinedOptions.timeZone, refinedOptions.locale, refinedOptions.weekNumberCalculation, refinedOptions.firstDay, refinedOptions.weekText, pluginHooks, availableLocaleData, refinedOptions.defaultRangeSeparator);
1368
- let viewSpecs = this.buildViewSpecs(pluginHooks.views, optionOverrides, dynamicOptionOverrides, localeDefaults);
1396
+ let viewSpecs = this.buildViewSpecs(pluginHooks.views, this.stableOptionOverrides, this.stableDynamicOptionOverrides, localeDefaults);
1369
1397
  let theme = this.buildTheme(refinedOptions, pluginHooks);
1370
- let toolbarConfig = this.parseToolbars(refinedOptions, optionOverrides, theme, viewSpecs, calendarApi);
1371
- return {
1398
+ let toolbarConfig = this.parseToolbars(refinedOptions, this.stableOptionOverrides, theme, viewSpecs, calendarApi);
1399
+ return this.stableCalendarOptionsData = {
1372
1400
  calendarOptions: refinedOptions,
1373
1401
  pluginHooks,
1374
1402
  dateEnv,
@@ -1381,8 +1409,8 @@ class CalendarDataManager {
1381
1409
  }
1382
1410
  // always called from behind a memoizer
1383
1411
  processRawCalendarOptions(optionOverrides, dynamicOptionOverrides) {
1384
- let { locales, locale } = mergeRawOptions([
1385
- BASE_OPTION_DEFAULTS,
1412
+ let { locales, locale } = internalCommon.mergeRawOptions([
1413
+ internalCommon.BASE_OPTION_DEFAULTS,
1386
1414
  optionOverrides,
1387
1415
  dynamicOptionOverrides,
1388
1416
  ]);
@@ -1390,10 +1418,10 @@ class CalendarDataManager {
1390
1418
  let availableRawLocales = availableLocaleData.map;
1391
1419
  let localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;
1392
1420
  let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);
1393
- 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);
1421
+ let refiners = this.currentCalendarOptionsRefiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, internalCommon.BASE_OPTION_REFINERS), internalCommon.CALENDAR_LISTENER_REFINERS), internalCommon.CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
1394
1422
  let extra = {};
1395
- let raw = mergeRawOptions([
1396
- BASE_OPTION_DEFAULTS,
1423
+ let raw = internalCommon.mergeRawOptions([
1424
+ internalCommon.BASE_OPTION_DEFAULTS,
1397
1425
  localeDefaults,
1398
1426
  optionOverrides,
1399
1427
  dynamicOptionOverrides,
@@ -1403,26 +1431,27 @@ class CalendarDataManager {
1403
1431
  let currentRefined = this.currentCalendarOptionsRefined;
1404
1432
  let anyChanges = false;
1405
1433
  for (let optionName in raw) {
1406
- if (optionName !== 'plugins') { // because plugins is special-cased
1407
- if (raw[optionName] === currentRaw[optionName] ||
1408
- (COMPLEX_OPTION_COMPARATORS[optionName] &&
1409
- (optionName in currentRaw) &&
1410
- COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName]))) {
1411
- refined[optionName] = currentRefined[optionName];
1412
- }
1413
- else if (refiners[optionName]) {
1414
- refined[optionName] = refiners[optionName](raw[optionName]);
1415
- anyChanges = true;
1416
- }
1417
- else {
1418
- extra[optionName] = currentRaw[optionName];
1419
- }
1434
+ if (this.optionsForRefining.indexOf(optionName) === -1 && (raw[optionName] === currentRaw[optionName] || (internalCommon.COMPLEX_OPTION_COMPARATORS[optionName] &&
1435
+ (optionName in currentRaw) &&
1436
+ internalCommon.COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName])))) {
1437
+ refined[optionName] = currentRefined[optionName];
1438
+ }
1439
+ else if (refiners[optionName]) {
1440
+ refined[optionName] = refiners[optionName](raw[optionName]);
1441
+ anyChanges = true;
1442
+ }
1443
+ else {
1444
+ extra[optionName] = currentRaw[optionName];
1420
1445
  }
1421
1446
  }
1422
1447
  if (anyChanges) {
1423
1448
  this.currentCalendarOptionsInput = raw;
1424
1449
  this.currentCalendarOptionsRefined = refined;
1450
+ this.stableOptionOverrides = optionOverrides;
1451
+ this.stableDynamicOptionOverrides = dynamicOptionOverrides;
1425
1452
  }
1453
+ this.optionsForHandling.push(...this.optionsForRefining);
1454
+ this.optionsForRefining = [];
1426
1455
  return {
1427
1456
  rawOptions: this.currentCalendarOptionsInput,
1428
1457
  refinedOptions: this.currentCalendarOptionsRefined,
@@ -1457,22 +1486,21 @@ class CalendarDataManager {
1457
1486
  nowInput: refinedOptions.now,
1458
1487
  validRangeInput: refinedOptions.validRange,
1459
1488
  visibleRangeInput: refinedOptions.visibleRange,
1460
- monthMode: refinedOptions.monthMode,
1461
1489
  fixedWeekCount: refinedOptions.fixedWeekCount,
1462
1490
  });
1463
1491
  let viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv);
1464
1492
  return { viewSpec, options: refinedOptions, dateProfileGenerator, viewApi };
1465
1493
  }
1466
1494
  processRawViewOptions(viewSpec, pluginHooks, localeDefaults, optionOverrides, dynamicOptionOverrides) {
1467
- let raw = mergeRawOptions([
1468
- BASE_OPTION_DEFAULTS,
1495
+ let raw = internalCommon.mergeRawOptions([
1496
+ internalCommon.BASE_OPTION_DEFAULTS,
1469
1497
  viewSpec.optionDefaults,
1470
1498
  localeDefaults,
1471
1499
  optionOverrides,
1472
1500
  viewSpec.optionOverrides,
1473
1501
  dynamicOptionOverrides,
1474
1502
  ]);
1475
- 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);
1503
+ let refiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, internalCommon.BASE_OPTION_REFINERS), internalCommon.CALENDAR_LISTENER_REFINERS), internalCommon.CALENDAR_OPTION_REFINERS), internalCommon.VIEW_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
1476
1504
  let refined = {};
1477
1505
  let currentRaw = this.currentViewOptionsInput;
1478
1506
  let currentRefined = this.currentViewOptionsRefined;
@@ -1480,14 +1508,14 @@ class CalendarDataManager {
1480
1508
  let extra = {};
1481
1509
  for (let optionName in raw) {
1482
1510
  if (raw[optionName] === currentRaw[optionName] ||
1483
- (COMPLEX_OPTION_COMPARATORS[optionName] &&
1484
- COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], currentRaw[optionName]))) {
1511
+ (internalCommon.COMPLEX_OPTION_COMPARATORS[optionName] &&
1512
+ internalCommon.COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], currentRaw[optionName]))) {
1485
1513
  refined[optionName] = currentRefined[optionName];
1486
1514
  }
1487
1515
  else {
1488
1516
  if (raw[optionName] === this.currentCalendarOptionsInput[optionName] ||
1489
- (COMPLEX_OPTION_COMPARATORS[optionName] &&
1490
- COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], this.currentCalendarOptionsInput[optionName]))) {
1517
+ (internalCommon.COMPLEX_OPTION_COMPARATORS[optionName] &&
1518
+ internalCommon.COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], this.currentCalendarOptionsInput[optionName]))) {
1491
1519
  if (optionName in this.currentCalendarOptionsRefined) { // might be an "extra" prop
1492
1520
  refined[optionName] = this.currentCalendarOptionsRefined[optionName];
1493
1521
  }
@@ -1514,7 +1542,7 @@ class CalendarDataManager {
1514
1542
  }
1515
1543
  function buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {
1516
1544
  let locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);
1517
- return new DateEnv({
1545
+ return new internalCommon.DateEnv({
1518
1546
  calendarSystem: 'gregory',
1519
1547
  timeZone,
1520
1548
  namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,
@@ -1531,14 +1559,14 @@ function buildTheme(options, pluginHooks) {
1531
1559
  return new ThemeClass(options);
1532
1560
  }
1533
1561
  function buildDateProfileGenerator(props) {
1534
- let DateProfileGeneratorClass = props.dateProfileGeneratorClass || DateProfileGenerator;
1562
+ let DateProfileGeneratorClass = props.dateProfileGeneratorClass || internalCommon.DateProfileGenerator;
1535
1563
  return new DateProfileGeneratorClass(props);
1536
1564
  }
1537
1565
  function buildViewApi(type, getCurrentData, dateEnv) {
1538
1566
  return new ViewImpl(type, getCurrentData, dateEnv);
1539
1567
  }
1540
1568
  function buildEventUiBySource(eventSources) {
1541
- return mapHash(eventSources, (eventSource) => eventSource.ui);
1569
+ return internalCommon.mapHash(eventSources, (eventSource) => eventSource.ui);
1542
1570
  }
1543
1571
  function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {
1544
1572
  let eventUiBases = { '': eventUiSingleBase };
@@ -1553,7 +1581,7 @@ function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {
1553
1581
  function buildViewUiProps(calendarContext) {
1554
1582
  let { options } = calendarContext;
1555
1583
  return {
1556
- eventUiSingleBase: createEventUi({
1584
+ eventUiSingleBase: internalCommon.createEventUi({
1557
1585
  display: options.eventDisplay,
1558
1586
  editable: options.editable,
1559
1587
  startEditable: options.eventStartEditable,
@@ -1567,7 +1595,7 @@ function buildViewUiProps(calendarContext) {
1567
1595
  color: options.eventColor,
1568
1596
  // classNames: options.eventClassNames // render hook will handle this
1569
1597
  }, calendarContext),
1570
- selectionConfig: createEventUi({
1598
+ selectionConfig: internalCommon.createEventUi({
1571
1599
  constraint: options.selectConstraint,
1572
1600
  overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,
1573
1601
  allow: options.selectAllow,
@@ -1583,7 +1611,7 @@ function computeIsLoading(state, context) {
1583
1611
  return false;
1584
1612
  }
1585
1613
  function parseContextBusinessHours(calendarContext) {
1586
- return parseBusinessHours(calendarContext.options.businessHours, calendarContext);
1614
+ return internalCommon.parseBusinessHours(calendarContext.options.businessHours, calendarContext);
1587
1615
  }
1588
1616
  function warnUnknownOptions(options, viewName) {
1589
1617
  for (let optionName in options) {
@@ -1592,10 +1620,10 @@ function warnUnknownOptions(options, viewName) {
1592
1620
  }
1593
1621
  }
1594
1622
 
1595
- class ToolbarSection extends BaseComponent {
1623
+ class ToolbarSection extends internalCommon.BaseComponent {
1596
1624
  render() {
1597
1625
  let children = this.props.widgetGroups.map((widgetGroup) => this.renderWidgetGroup(widgetGroup));
1598
- return createElement('div', { className: 'fc-toolbar-chunk' }, ...children);
1626
+ return preact.createElement('div', { className: 'fc-toolbar-chunk' }, ...children);
1599
1627
  }
1600
1628
  renderWidgetGroup(widgetGroup) {
1601
1629
  let { props } = this;
@@ -1606,7 +1634,7 @@ class ToolbarSection extends BaseComponent {
1606
1634
  let { buttonName, buttonClick, buttonText, buttonIcon, buttonHint } = widget;
1607
1635
  if (buttonName === 'title') {
1608
1636
  isOnlyButtons = false;
1609
- children.push(createElement("h2", { className: "fc-toolbar-title", id: props.titleId }, props.title));
1637
+ children.push(preact.createElement("h2", { className: "fc-toolbar-title", id: props.titleId }, props.title));
1610
1638
  }
1611
1639
  else {
1612
1640
  let isPressed = buttonName === props.activeButton;
@@ -1617,18 +1645,18 @@ class ToolbarSection extends BaseComponent {
1617
1645
  if (isPressed) {
1618
1646
  buttonClasses.push(theme.getClass('buttonActive'));
1619
1647
  }
1620
- 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 }) : '')));
1648
+ children.push(preact.createElement("button", { type: "button", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, "aria-pressed": isPressed, className: buttonClasses.join(' '), onClick: buttonClick }, buttonText || (buttonIcon ? preact.createElement("span", { className: buttonIcon }) : '')));
1621
1649
  }
1622
1650
  }
1623
1651
  if (children.length > 1) {
1624
1652
  let groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || '';
1625
- return createElement('div', { className: groupClassName }, ...children);
1653
+ return preact.createElement('div', { className: groupClassName }, ...children);
1626
1654
  }
1627
1655
  return children[0];
1628
1656
  }
1629
1657
  }
1630
1658
 
1631
- class Toolbar extends BaseComponent {
1659
+ class Toolbar extends internalCommon.BaseComponent {
1632
1660
  render() {
1633
1661
  let { model, extraClassName } = this.props;
1634
1662
  let forceLtr = false;
@@ -1655,19 +1683,18 @@ class Toolbar extends BaseComponent {
1655
1683
  'fc-toolbar',
1656
1684
  forceLtr ? 'fc-toolbar-ltr' : '',
1657
1685
  ];
1658
- return (createElement("div", { className: classNames.join(' ') },
1686
+ return (preact.createElement("div", { className: classNames.join(' ') },
1659
1687
  this.renderSection('start', startContent || []),
1660
1688
  this.renderSection('center', centerContent || []),
1661
1689
  this.renderSection('end', endContent || [])));
1662
1690
  }
1663
1691
  renderSection(key, widgetGroups) {
1664
1692
  let { props } = this;
1665
- 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 }));
1693
+ return (preact.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 }));
1666
1694
  }
1667
1695
  }
1668
1696
 
1669
- // TODO: do function component?
1670
- class ViewContainer extends BaseComponent {
1697
+ class ViewHarness extends internalCommon.BaseComponent {
1671
1698
  constructor() {
1672
1699
  super(...arguments);
1673
1700
  this.state = {
@@ -1675,7 +1702,7 @@ class ViewContainer extends BaseComponent {
1675
1702
  };
1676
1703
  this.handleEl = (el) => {
1677
1704
  this.el = el;
1678
- setRef(this.props.elRef, el);
1705
+ internalCommon.setRef(this.props.elRef, el);
1679
1706
  this.updateAvailableWidth();
1680
1707
  };
1681
1708
  this.handleResize = () => {
@@ -1708,7 +1735,7 @@ class ViewContainer extends BaseComponent {
1708
1735
  else {
1709
1736
  height = props.height || '';
1710
1737
  }
1711
- return (createElement("div", { "aria-labelledby": props.labeledById, ref: this.handleEl, className: classNames.join(' '), style: { height, paddingBottom } }, props.children));
1738
+ return (preact.createElement("div", { "aria-labelledby": props.labeledById, ref: this.handleEl, className: classNames.join(' '), style: { height, paddingBottom } }, props.children));
1712
1739
  }
1713
1740
  componentDidMount() {
1714
1741
  this.context.addResizeHandler(this.handleResize);
@@ -1728,22 +1755,22 @@ class ViewContainer extends BaseComponent {
1728
1755
  /*
1729
1756
  Detects when the user clicks on an event within a DateComponent
1730
1757
  */
1731
- class EventClicking extends Interaction {
1758
+ class EventClicking extends internalCommon.Interaction {
1732
1759
  constructor(settings) {
1733
1760
  super(settings);
1734
1761
  this.handleSegClick = (ev, segEl) => {
1735
1762
  let { component } = this;
1736
1763
  let { context } = component;
1737
- let seg = getElSeg(segEl);
1764
+ let seg = internalCommon.getElSeg(segEl);
1738
1765
  if (seg && // might be the <div> surrounding the more link
1739
1766
  component.isValidSegDownEl(ev.target)) {
1740
1767
  // our way to simulate a link click for elements that can't be <a> tags
1741
1768
  // grab before trigger fired in case trigger trashes DOM thru rerendering
1742
- let hasUrlContainer = elementClosest(ev.target, '.fc-event-forced-url');
1769
+ let hasUrlContainer = internalCommon.elementClosest(ev.target, '.fc-event-forced-url');
1743
1770
  let url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';
1744
1771
  context.emitter.trigger('eventClick', {
1745
1772
  el: segEl,
1746
- event: new EventImpl(component.context, seg.eventRange.def, seg.eventRange.instance),
1773
+ event: new internalCommon.EventImpl(component.context, seg.eventRange.def, seg.eventRange.instance),
1747
1774
  jsEvent: ev,
1748
1775
  view: context.viewApi,
1749
1776
  });
@@ -1752,7 +1779,7 @@ class EventClicking extends Interaction {
1752
1779
  }
1753
1780
  }
1754
1781
  };
1755
- this.destroy = listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events
1782
+ this.destroy = internalCommon.listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events
1756
1783
  this.handleSegClick);
1757
1784
  }
1758
1785
  }
@@ -1761,7 +1788,7 @@ class EventClicking extends Interaction {
1761
1788
  Triggers events and adds/removes core classNames when the user's pointer
1762
1789
  enters/leaves event-elements of a component.
1763
1790
  */
1764
- class EventHovering extends Interaction {
1791
+ class EventHovering extends internalCommon.Interaction {
1765
1792
  constructor(settings) {
1766
1793
  super(settings);
1767
1794
  // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it
@@ -1771,7 +1798,7 @@ class EventHovering extends Interaction {
1771
1798
  }
1772
1799
  };
1773
1800
  this.handleSegEnter = (ev, segEl) => {
1774
- if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper
1801
+ if (internalCommon.getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper
1775
1802
  this.currentSegEl = segEl;
1776
1803
  this.triggerEvent('eventMouseEnter', ev, segEl);
1777
1804
  }
@@ -1782,7 +1809,7 @@ class EventHovering extends Interaction {
1782
1809
  this.triggerEvent('eventMouseLeave', ev, segEl);
1783
1810
  }
1784
1811
  };
1785
- this.removeHoverListeners = listenToHoverBySelector(settings.el, '.fc-event', // on both fg and bg events
1812
+ this.removeHoverListeners = internalCommon.listenToHoverBySelector(settings.el, '.fc-event', // on both fg and bg events
1786
1813
  this.handleSegEnter, this.handleSegLeave);
1787
1814
  }
1788
1815
  destroy() {
@@ -1791,11 +1818,11 @@ class EventHovering extends Interaction {
1791
1818
  triggerEvent(publicEvName, ev, segEl) {
1792
1819
  let { component } = this;
1793
1820
  let { context } = component;
1794
- let seg = getElSeg(segEl);
1821
+ let seg = internalCommon.getElSeg(segEl);
1795
1822
  if (!ev || component.isValidSegDownEl(ev.target)) {
1796
1823
  context.emitter.trigger(publicEvName, {
1797
1824
  el: segEl,
1798
- event: new EventImpl(context, seg.eventRange.def, seg.eventRange.instance),
1825
+ event: new internalCommon.EventImpl(context, seg.eventRange.def, seg.eventRange.instance),
1799
1826
  jsEvent: ev,
1800
1827
  view: context.viewApi,
1801
1828
  });
@@ -1803,23 +1830,23 @@ class EventHovering extends Interaction {
1803
1830
  }
1804
1831
  }
1805
1832
 
1806
- class CalendarContent extends PureComponent {
1833
+ class CalendarContent extends internalCommon.PureComponent {
1807
1834
  constructor() {
1808
1835
  super(...arguments);
1809
- this.buildViewContext = memoize(buildViewContext);
1810
- this.buildViewPropTransformers = memoize(buildViewPropTransformers);
1811
- this.buildToolbarProps = memoize(buildToolbarProps);
1812
- this.headerRef = createRef();
1813
- this.footerRef = createRef();
1836
+ this.buildViewContext = internalCommon.memoize(internalCommon.buildViewContext);
1837
+ this.buildViewPropTransformers = internalCommon.memoize(buildViewPropTransformers);
1838
+ this.buildToolbarProps = internalCommon.memoize(buildToolbarProps);
1839
+ this.headerRef = preact.createRef();
1840
+ this.footerRef = preact.createRef();
1814
1841
  this.interactionsStore = {};
1815
1842
  // eslint-disable-next-line
1816
1843
  this.state = {
1817
- viewLabelId: getUniqueDomId(),
1844
+ viewLabelId: internalCommon.getUniqueDomId(),
1818
1845
  };
1819
1846
  // Component Registration
1820
1847
  // -----------------------------------------------------------------------------------------------------------------
1821
1848
  this.registerInteractiveComponent = (component, settingsInput) => {
1822
- let settings = parseInteractionSettings(component, settingsInput);
1849
+ let settings = internalCommon.parseInteractionSettings(component, settingsInput);
1823
1850
  let DEFAULT_INTERACTIONS = [
1824
1851
  EventClicking,
1825
1852
  EventHovering,
@@ -1827,7 +1854,7 @@ class CalendarContent extends PureComponent {
1827
1854
  let interactionClasses = DEFAULT_INTERACTIONS.concat(this.props.pluginHooks.componentInteractions);
1828
1855
  let interactions = interactionClasses.map((TheInteractionClass) => new TheInteractionClass(settings));
1829
1856
  this.interactionsStore[component.uid] = interactions;
1830
- interactionSettingsStore[component.uid] = settings;
1857
+ internalCommon.interactionSettingsStore[component.uid] = settings;
1831
1858
  };
1832
1859
  this.unregisterInteractiveComponent = (component) => {
1833
1860
  let listeners = this.interactionsStore[component.uid];
@@ -1837,11 +1864,11 @@ class CalendarContent extends PureComponent {
1837
1864
  }
1838
1865
  delete this.interactionsStore[component.uid];
1839
1866
  }
1840
- delete interactionSettingsStore[component.uid];
1867
+ delete internalCommon.interactionSettingsStore[component.uid];
1841
1868
  };
1842
1869
  // Resizing
1843
1870
  // -----------------------------------------------------------------------------------------------------------------
1844
- this.resizeRunner = new DelayedRunner(() => {
1871
+ this.resizeRunner = new internalCommon.DelayedRunner(() => {
1845
1872
  this.props.emitter.trigger('_resize', true); // should window resizes be considered "forced" ?
1846
1873
  this.props.emitter.trigger('windowResize', { view: this.props.viewApi });
1847
1874
  });
@@ -1860,7 +1887,7 @@ class CalendarContent extends PureComponent {
1860
1887
  render() {
1861
1888
  let { props } = this;
1862
1889
  let { toolbarConfig, options } = props;
1863
- let toolbarProps = this.buildToolbarProps(props.viewSpec, props.dateProfile, props.dateProfileGenerator, props.currentDate, getNow(props.options.now, props.dateEnv), // TODO: use NowTimer????
1890
+ let toolbarProps = this.buildToolbarProps(props.viewSpec, props.dateProfile, props.dateProfileGenerator, props.currentDate, internalCommon.getNow(props.options.now, props.dateEnv), // TODO: use NowTimer????
1864
1891
  props.viewTitle);
1865
1892
  let viewVGrow = false;
1866
1893
  let viewHeight = '';
@@ -1881,12 +1908,12 @@ class CalendarContent extends PureComponent {
1881
1908
  let viewLabelId = (toolbarConfig.header && toolbarConfig.header.hasTitle)
1882
1909
  ? this.state.viewLabelId
1883
1910
  : '';
1884
- return (createElement(ViewContextType.Provider, { value: viewContext },
1885
- toolbarConfig.header && (createElement(Toolbar, Object.assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: toolbarConfig.header, titleId: viewLabelId }, toolbarProps))),
1886
- createElement(ViewContainer, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, labeledById: viewLabelId },
1911
+ return (preact.createElement(internalCommon.ViewContextType.Provider, { value: viewContext },
1912
+ toolbarConfig.header && (preact.createElement(Toolbar, Object.assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: toolbarConfig.header, titleId: viewLabelId }, toolbarProps))),
1913
+ preact.createElement(ViewHarness, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, labeledById: viewLabelId },
1887
1914
  this.renderView(props),
1888
1915
  this.buildAppendContent()),
1889
- toolbarConfig.footer && (createElement(Toolbar, Object.assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: toolbarConfig.footer, titleId: "" }, toolbarProps)))));
1916
+ toolbarConfig.footer && (preact.createElement(Toolbar, Object.assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: toolbarConfig.footer, titleId: "" }, toolbarProps)))));
1890
1917
  }
1891
1918
  componentDidMount() {
1892
1919
  let { props } = this;
@@ -1918,7 +1945,7 @@ class CalendarContent extends PureComponent {
1918
1945
  buildAppendContent() {
1919
1946
  let { props } = this;
1920
1947
  let children = props.pluginHooks.viewContainerAppends.map((buildAppendContent) => buildAppendContent(props));
1921
- return createElement(Fragment, {}, ...children);
1948
+ return preact.createElement(preact.Fragment, {}, ...children);
1922
1949
  }
1923
1950
  renderView(props) {
1924
1951
  let { pluginHooks } = props;
@@ -1940,7 +1967,7 @@ class CalendarContent extends PureComponent {
1940
1967
  Object.assign(viewProps, transformer.transform(viewProps, props));
1941
1968
  }
1942
1969
  let ViewComponent = viewSpec.component;
1943
- return (createElement(ViewComponent, Object.assign({}, viewProps)));
1970
+ return (preact.createElement(ViewComponent, Object.assign({}, viewProps)));
1944
1971
  }
1945
1972
  }
1946
1973
  function buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentDate, now, title) {
@@ -1952,7 +1979,7 @@ function buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentD
1952
1979
  title,
1953
1980
  activeButton: viewSpec.type,
1954
1981
  navUnit: viewSpec.singleUnit,
1955
- isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
1982
+ isTodayEnabled: todayInfo.isValid && !internalCommon.rangeContainsMarker(dateProfile.currentRange, now),
1956
1983
  isPrevEnabled: prevInfo.isValid,
1957
1984
  isNextEnabled: nextInfo.isValid,
1958
1985
  };
@@ -1963,7 +1990,7 @@ function buildViewPropTransformers(theClasses) {
1963
1990
  return theClasses.map((TheClass) => new TheClass());
1964
1991
  }
1965
1992
 
1966
- class Calendar extends CalendarImpl {
1993
+ class Calendar extends internalCommon.CalendarImpl {
1967
1994
  constructor(el, optionOverrides = {}) {
1968
1995
  super();
1969
1996
  this.isRendering = false;
@@ -1986,24 +2013,25 @@ class Calendar extends CalendarImpl {
1986
2013
  if (this.isRendering) {
1987
2014
  this.isRendered = true;
1988
2015
  let { currentData } = this;
1989
- flushSync(() => {
1990
- render(createElement(CalendarRoot, { options: currentData.calendarOptions, theme: currentData.theme, emitter: currentData.emitter }, (classNames, height, isHeightAuto, forPrint) => {
2016
+ internalCommon.flushSync(() => {
2017
+ preact.render(preact.createElement(internalCommon.CalendarRoot, { options: currentData.calendarOptions, theme: currentData.theme, emitter: currentData.emitter }, (classNames, height, isHeightAuto, forPrint) => {
1991
2018
  this.setClassNames(classNames);
1992
2019
  this.setHeight(height);
1993
- return (createElement(RenderId.Provider, { value: this.customContentRenderId },
1994
- createElement(CalendarContent, Object.assign({ isHeightAuto: isHeightAuto, forPrint: forPrint }, currentData))));
2020
+ return (preact.createElement(internalCommon.RenderId.Provider, { value: this.customContentRenderId },
2021
+ preact.createElement(CalendarContent, Object.assign({ isHeightAuto: isHeightAuto, forPrint: forPrint }, currentData))));
1995
2022
  }), this.el);
1996
2023
  });
1997
2024
  }
1998
2025
  else if (this.isRendered) {
1999
2026
  this.isRendered = false;
2000
- render(null, this.el);
2027
+ preact.render(null, this.el);
2001
2028
  this.setClassNames([]);
2002
2029
  this.setHeight('');
2003
2030
  }
2004
2031
  };
2032
+ internalCommon.ensureElHasStyles(el);
2005
2033
  this.el = el;
2006
- this.renderRunner = new DelayedRunner(this.handleRenderRequest);
2034
+ this.renderRunner = new internalCommon.DelayedRunner(this.handleRenderRequest);
2007
2035
  new CalendarDataManager({
2008
2036
  optionOverrides,
2009
2037
  calendarApi: this,
@@ -2031,7 +2059,7 @@ class Calendar extends CalendarImpl {
2031
2059
  }
2032
2060
  }
2033
2061
  updateSize() {
2034
- flushSync(() => {
2062
+ internalCommon.flushSync(() => {
2035
2063
  super.updateSize();
2036
2064
  });
2037
2065
  }
@@ -2046,11 +2074,11 @@ class Calendar extends CalendarImpl {
2046
2074
  resumeRendering() {
2047
2075
  this.renderRunner.resume('pauseRendering', true);
2048
2076
  }
2049
- resetOptions(optionOverrides, append) {
2050
- this.currentDataManager.resetOptions(optionOverrides, append);
2077
+ resetOptions(optionOverrides, changedOptionNames) {
2078
+ this.currentDataManager.resetOptions(optionOverrides, changedOptionNames);
2051
2079
  }
2052
2080
  setClassNames(classNames) {
2053
- if (!isArraysEqual(classNames, this.currentClassNames)) {
2081
+ if (!internalCommon.isArraysEqual(classNames, this.currentClassNames)) {
2054
2082
  let { classList } = this.el;
2055
2083
  for (let className of this.currentClassNames) {
2056
2084
  classList.remove(className);
@@ -2062,13 +2090,13 @@ class Calendar extends CalendarImpl {
2062
2090
  }
2063
2091
  }
2064
2092
  setHeight(height) {
2065
- applyStyleProp(this.el, 'height', height);
2093
+ internalCommon.applyStyleProp(this.el, 'height', height);
2066
2094
  }
2067
2095
  }
2068
2096
 
2069
2097
  function formatDate(dateInput, options = {}) {
2070
2098
  let dateEnv = buildDateEnv(options);
2071
- let formatter = createFormatter(options);
2099
+ let formatter = internalCommon.createFormatter(options);
2072
2100
  let dateMeta = dateEnv.createMarkerMeta(dateInput);
2073
2101
  if (!dateMeta) { // TODO: warning?
2074
2102
  return '';
@@ -2079,7 +2107,7 @@ function formatDate(dateInput, options = {}) {
2079
2107
  }
2080
2108
  function formatRange(startInput, endInput, options) {
2081
2109
  let dateEnv = buildDateEnv(typeof options === 'object' && options ? options : {}); // pass in if non-null object
2082
- let formatter = createFormatter(options);
2110
+ let formatter = internalCommon.createFormatter(options);
2083
2111
  let startMeta = dateEnv.createMarkerMeta(startInput);
2084
2112
  let endMeta = dateEnv.createMarkerMeta(endInput);
2085
2113
  if (!startMeta || !endMeta) { // TODO: warning?
@@ -2089,13 +2117,13 @@ function formatRange(startInput, endInput, options) {
2089
2117
  forcedStartTzo: startMeta.forcedTzo,
2090
2118
  forcedEndTzo: endMeta.forcedTzo,
2091
2119
  isEndExclusive: options.isEndExclusive,
2092
- defaultSeparator: BASE_OPTION_DEFAULTS.defaultRangeSeparator,
2120
+ defaultSeparator: internalCommon.BASE_OPTION_DEFAULTS.defaultRangeSeparator,
2093
2121
  });
2094
2122
  }
2095
2123
  // TODO: more DRY and optimized
2096
2124
  function buildDateEnv(settings) {
2097
2125
  let locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map); // TODO: don't hardcode 'en' everywhere
2098
- return new DateEnv(Object.assign(Object.assign({ timeZone: BASE_OPTION_DEFAULTS.timeZone, calendarSystem: 'gregory' }, settings), { locale }));
2126
+ return new internalCommon.DateEnv(Object.assign(Object.assign({ timeZone: internalCommon.BASE_OPTION_DEFAULTS.timeZone, calendarSystem: 'gregory' }, settings), { locale }));
2099
2127
  }
2100
2128
 
2101
2129
  // HELPERS
@@ -2104,9 +2132,17 @@ if nextDayThreshold is specified, slicing is done in an all-day fashion.
2104
2132
  you can get nextDayThreshold from context.nextDayThreshold
2105
2133
  */
2106
2134
  function sliceEvents(props, allDay) {
2107
- return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
2135
+ return internalCommon.sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
2108
2136
  }
2109
2137
 
2110
- const version = '6.0.3';
2138
+ const version = '6.1.1';
2111
2139
 
2112
- export { Calendar, createPlugin, formatDate, formatRange, globalLocales, globalPlugins, sliceEvents, version };
2140
+ exports.JsonRequestError = internalCommon.JsonRequestError;
2141
+ exports.Calendar = Calendar;
2142
+ exports.createPlugin = createPlugin;
2143
+ exports.formatDate = formatDate;
2144
+ exports.formatRange = formatRange;
2145
+ exports.globalLocales = globalLocales;
2146
+ exports.globalPlugins = globalPlugins;
2147
+ exports.sliceEvents = sliceEvents;
2148
+ exports.version = version;