@fullcalendar/core 6.0.0 → 6.0.2

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 (254) hide show
  1. package/index.cjs +587 -9
  2. package/index.d.ts +7 -3
  3. package/index.global.js +786 -771
  4. package/index.global.min.js +2 -2
  5. package/index.js +580 -4
  6. package/index.js.map +1 -0
  7. package/internal-common.cjs +23 -586
  8. package/internal-common.d.ts +4 -5
  9. package/internal-common.js +18 -579
  10. package/internal-common.js.map +1 -0
  11. package/internal.cjs +0 -2
  12. package/internal.d.ts +1 -1
  13. package/internal.js +1 -1
  14. package/internal.js.map +1 -0
  15. package/locales/af.global.js +4 -4
  16. package/locales/af.global.min.js +2 -2
  17. package/locales/af.js.map +1 -0
  18. package/locales/ar-dz.global.js +4 -4
  19. package/locales/ar-dz.global.min.js +2 -2
  20. package/locales/ar-dz.js.map +1 -0
  21. package/locales/ar-kw.global.js +4 -4
  22. package/locales/ar-kw.global.min.js +2 -2
  23. package/locales/ar-kw.js.map +1 -0
  24. package/locales/ar-ly.global.js +4 -4
  25. package/locales/ar-ly.global.min.js +2 -2
  26. package/locales/ar-ly.js.map +1 -0
  27. package/locales/ar-ma.global.js +4 -4
  28. package/locales/ar-ma.global.min.js +2 -2
  29. package/locales/ar-ma.js.map +1 -0
  30. package/locales/ar-sa.global.js +4 -4
  31. package/locales/ar-sa.global.min.js +2 -2
  32. package/locales/ar-sa.js.map +1 -0
  33. package/locales/ar-tn.global.js +4 -4
  34. package/locales/ar-tn.global.min.js +2 -2
  35. package/locales/ar-tn.js.map +1 -0
  36. package/locales/ar.global.js +4 -4
  37. package/locales/ar.global.min.js +2 -2
  38. package/locales/ar.js.map +1 -0
  39. package/locales/az.global.js +4 -4
  40. package/locales/az.global.min.js +2 -2
  41. package/locales/az.js.map +1 -0
  42. package/locales/bg.global.js +4 -4
  43. package/locales/bg.global.min.js +2 -2
  44. package/locales/bg.js.map +1 -0
  45. package/locales/bn.global.js +4 -4
  46. package/locales/bn.global.min.js +2 -2
  47. package/locales/bn.js.map +1 -0
  48. package/locales/bs.global.js +4 -4
  49. package/locales/bs.global.min.js +2 -2
  50. package/locales/bs.js.map +1 -0
  51. package/locales/ca.global.js +4 -4
  52. package/locales/ca.global.min.js +2 -2
  53. package/locales/ca.js.map +1 -0
  54. package/locales/cs.global.js +4 -4
  55. package/locales/cs.global.min.js +2 -2
  56. package/locales/cs.js.map +1 -0
  57. package/locales/cy.global.js +4 -4
  58. package/locales/cy.global.min.js +2 -2
  59. package/locales/cy.js.map +1 -0
  60. package/locales/da.global.js +4 -4
  61. package/locales/da.global.min.js +2 -2
  62. package/locales/da.js.map +1 -0
  63. package/locales/de-at.global.js +4 -4
  64. package/locales/de-at.global.min.js +2 -2
  65. package/locales/de-at.js.map +1 -0
  66. package/locales/de.global.js +4 -4
  67. package/locales/de.global.min.js +2 -2
  68. package/locales/de.js.map +1 -0
  69. package/locales/el.global.js +4 -4
  70. package/locales/el.global.min.js +2 -2
  71. package/locales/el.js.map +1 -0
  72. package/locales/en-au.global.js +4 -4
  73. package/locales/en-au.global.min.js +2 -2
  74. package/locales/en-au.js.map +1 -0
  75. package/locales/en-gb.global.js +4 -4
  76. package/locales/en-gb.global.min.js +2 -2
  77. package/locales/en-gb.js.map +1 -0
  78. package/locales/en-nz.global.js +4 -4
  79. package/locales/en-nz.global.min.js +2 -2
  80. package/locales/en-nz.js.map +1 -0
  81. package/locales/eo.global.js +4 -4
  82. package/locales/eo.global.min.js +2 -2
  83. package/locales/eo.js.map +1 -0
  84. package/locales/es-us.global.js +4 -4
  85. package/locales/es-us.global.min.js +2 -2
  86. package/locales/es-us.js.map +1 -0
  87. package/locales/es.global.js +4 -4
  88. package/locales/es.global.min.js +2 -2
  89. package/locales/es.js.map +1 -0
  90. package/locales/et.global.js +4 -4
  91. package/locales/et.global.min.js +2 -2
  92. package/locales/et.js.map +1 -0
  93. package/locales/eu.global.js +4 -4
  94. package/locales/eu.global.min.js +2 -2
  95. package/locales/eu.js.map +1 -0
  96. package/locales/fa.global.js +4 -4
  97. package/locales/fa.global.min.js +2 -2
  98. package/locales/fa.js.map +1 -0
  99. package/locales/fi.global.js +4 -4
  100. package/locales/fi.global.min.js +2 -2
  101. package/locales/fi.js.map +1 -0
  102. package/locales/fr-ca.global.js +4 -4
  103. package/locales/fr-ca.global.min.js +2 -2
  104. package/locales/fr-ca.js.map +1 -0
  105. package/locales/fr-ch.global.js +4 -4
  106. package/locales/fr-ch.global.min.js +2 -2
  107. package/locales/fr-ch.js.map +1 -0
  108. package/locales/fr.global.js +4 -4
  109. package/locales/fr.global.min.js +2 -2
  110. package/locales/fr.js.map +1 -0
  111. package/locales/gl.global.js +4 -4
  112. package/locales/gl.global.min.js +2 -2
  113. package/locales/gl.js.map +1 -0
  114. package/locales/he.global.js +4 -4
  115. package/locales/he.global.min.js +2 -2
  116. package/locales/he.js.map +1 -0
  117. package/locales/hi.global.js +4 -4
  118. package/locales/hi.global.min.js +2 -2
  119. package/locales/hi.js.map +1 -0
  120. package/locales/hr.global.js +4 -4
  121. package/locales/hr.global.min.js +2 -2
  122. package/locales/hr.js.map +1 -0
  123. package/locales/hu.global.js +4 -4
  124. package/locales/hu.global.min.js +2 -2
  125. package/locales/hu.js.map +1 -0
  126. package/locales/hy-am.global.js +4 -4
  127. package/locales/hy-am.global.min.js +2 -2
  128. package/locales/hy-am.js.map +1 -0
  129. package/locales/id.global.js +4 -4
  130. package/locales/id.global.min.js +2 -2
  131. package/locales/id.js.map +1 -0
  132. package/locales/is.global.js +4 -4
  133. package/locales/is.global.min.js +2 -2
  134. package/locales/is.js.map +1 -0
  135. package/locales/it.global.js +4 -4
  136. package/locales/it.global.min.js +2 -2
  137. package/locales/it.js.map +1 -0
  138. package/locales/ja.global.js +4 -4
  139. package/locales/ja.global.min.js +2 -2
  140. package/locales/ja.js.map +1 -0
  141. package/locales/ka.global.js +4 -4
  142. package/locales/ka.global.min.js +2 -2
  143. package/locales/ka.js.map +1 -0
  144. package/locales/kk.global.js +4 -4
  145. package/locales/kk.global.min.js +2 -2
  146. package/locales/kk.js.map +1 -0
  147. package/locales/km.global.js +4 -4
  148. package/locales/km.global.min.js +2 -2
  149. package/locales/km.js.map +1 -0
  150. package/locales/ko.global.js +4 -4
  151. package/locales/ko.global.min.js +2 -2
  152. package/locales/ko.js.map +1 -0
  153. package/locales/ku.global.js +4 -4
  154. package/locales/ku.global.min.js +2 -2
  155. package/locales/ku.js.map +1 -0
  156. package/locales/lb.global.js +4 -4
  157. package/locales/lb.global.min.js +2 -2
  158. package/locales/lb.js.map +1 -0
  159. package/locales/lt.global.js +4 -4
  160. package/locales/lt.global.min.js +2 -2
  161. package/locales/lt.js.map +1 -0
  162. package/locales/lv.global.js +4 -4
  163. package/locales/lv.global.min.js +2 -2
  164. package/locales/lv.js.map +1 -0
  165. package/locales/mk.global.js +4 -4
  166. package/locales/mk.global.min.js +2 -2
  167. package/locales/mk.js.map +1 -0
  168. package/locales/ms.global.js +4 -4
  169. package/locales/ms.global.min.js +2 -2
  170. package/locales/ms.js.map +1 -0
  171. package/locales/nb.global.js +4 -4
  172. package/locales/nb.global.min.js +2 -2
  173. package/locales/nb.js.map +1 -0
  174. package/locales/ne.global.js +4 -4
  175. package/locales/ne.global.min.js +2 -2
  176. package/locales/ne.js.map +1 -0
  177. package/locales/nl.global.js +4 -4
  178. package/locales/nl.global.min.js +2 -2
  179. package/locales/nl.js.map +1 -0
  180. package/locales/nn.global.js +4 -4
  181. package/locales/nn.global.min.js +2 -2
  182. package/locales/nn.js.map +1 -0
  183. package/locales/pl.global.js +4 -4
  184. package/locales/pl.global.min.js +2 -2
  185. package/locales/pl.js.map +1 -0
  186. package/locales/pt-br.global.js +4 -4
  187. package/locales/pt-br.global.min.js +2 -2
  188. package/locales/pt-br.js.map +1 -0
  189. package/locales/pt.global.js +4 -4
  190. package/locales/pt.global.min.js +2 -2
  191. package/locales/pt.js.map +1 -0
  192. package/locales/ro.global.js +4 -4
  193. package/locales/ro.global.min.js +2 -2
  194. package/locales/ro.js.map +1 -0
  195. package/locales/ru.global.js +4 -4
  196. package/locales/ru.global.min.js +2 -2
  197. package/locales/ru.js.map +1 -0
  198. package/locales/si-lk.global.js +4 -4
  199. package/locales/si-lk.global.min.js +2 -2
  200. package/locales/si-lk.js.map +1 -0
  201. package/locales/sk.global.js +4 -4
  202. package/locales/sk.global.min.js +2 -2
  203. package/locales/sk.js.map +1 -0
  204. package/locales/sl.global.js +4 -4
  205. package/locales/sl.global.min.js +2 -2
  206. package/locales/sl.js.map +1 -0
  207. package/locales/sm.global.js +4 -4
  208. package/locales/sm.global.min.js +2 -2
  209. package/locales/sm.js.map +1 -0
  210. package/locales/sq.global.js +4 -4
  211. package/locales/sq.global.min.js +2 -2
  212. package/locales/sq.js.map +1 -0
  213. package/locales/sr-cyrl.global.js +4 -4
  214. package/locales/sr-cyrl.global.min.js +2 -2
  215. package/locales/sr-cyrl.js.map +1 -0
  216. package/locales/sr.global.js +4 -4
  217. package/locales/sr.global.min.js +2 -2
  218. package/locales/sr.js.map +1 -0
  219. package/locales/sv.global.js +4 -4
  220. package/locales/sv.global.min.js +2 -2
  221. package/locales/sv.js.map +1 -0
  222. package/locales/ta-in.global.js +4 -4
  223. package/locales/ta-in.global.min.js +2 -2
  224. package/locales/ta-in.js.map +1 -0
  225. package/locales/th.global.js +4 -4
  226. package/locales/th.global.min.js +2 -2
  227. package/locales/th.js.map +1 -0
  228. package/locales/tr.global.js +4 -4
  229. package/locales/tr.global.min.js +2 -2
  230. package/locales/tr.js.map +1 -0
  231. package/locales/ug.global.js +4 -4
  232. package/locales/ug.global.min.js +2 -2
  233. package/locales/ug.js.map +1 -0
  234. package/locales/uk.global.js +4 -4
  235. package/locales/uk.global.min.js +2 -2
  236. package/locales/uk.js.map +1 -0
  237. package/locales/uz.global.js +4 -4
  238. package/locales/uz.global.min.js +2 -2
  239. package/locales/uz.js.map +1 -0
  240. package/locales/vi.global.js +4 -4
  241. package/locales/vi.global.min.js +2 -2
  242. package/locales/vi.js.map +1 -0
  243. package/locales/zh-cn.global.js +4 -4
  244. package/locales/zh-cn.global.min.js +2 -2
  245. package/locales/zh-cn.js.map +1 -0
  246. package/locales/zh-tw.global.js +4 -4
  247. package/locales/zh-tw.global.min.js +2 -2
  248. package/locales/zh-tw.js.map +1 -0
  249. package/locales-all.global.js +4 -4
  250. package/locales-all.global.min.js +2 -2
  251. package/locales-all.js.map +1 -0
  252. package/package.json +1 -1
  253. package/preact.js +1 -1
  254. package/preact.js.map +1 -0
package/index.cjs CHANGED
@@ -9,6 +9,8 @@ require('preact/compat');
9
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,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\") 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)}";
10
10
  internalCommon.injectStyles(css_248z);
11
11
 
12
+ const globalLocales = [];
13
+
12
14
  const MINIMAL_RAW_EN_LOCALE = {
13
15
  code: 'en',
14
16
  week: {
@@ -53,7 +55,7 @@ const RAW_EN_LOCALE = Object.assign(Object.assign({}, MINIMAL_RAW_EN_LOCALE), {
53
55
  } });
54
56
  function organizeRawLocales(explicitRawLocales) {
55
57
  let defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';
56
- let allRawLocales = internalCommon.globalLocales.concat(explicitRawLocales);
58
+ let allRawLocales = globalLocales.concat(explicitRawLocales);
57
59
  let rawLocaleMap = {
58
60
  en: RAW_EN_LOCALE,
59
61
  };
@@ -102,6 +104,165 @@ function parseLocale(codeArg, codes, raw) {
102
104
  };
103
105
  }
104
106
 
107
+ // TODO: easier way to add new hooks? need to update a million things
108
+ function createPlugin(input) {
109
+ return {
110
+ id: internalCommon.guid(),
111
+ name: input.name,
112
+ premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : undefined,
113
+ deps: input.deps || [],
114
+ reducers: input.reducers || [],
115
+ isLoadingFuncs: input.isLoadingFuncs || [],
116
+ contextInit: [].concat(input.contextInit || []),
117
+ eventRefiners: input.eventRefiners || {},
118
+ eventDefMemberAdders: input.eventDefMemberAdders || [],
119
+ eventSourceRefiners: input.eventSourceRefiners || {},
120
+ isDraggableTransformers: input.isDraggableTransformers || [],
121
+ eventDragMutationMassagers: input.eventDragMutationMassagers || [],
122
+ eventDefMutationAppliers: input.eventDefMutationAppliers || [],
123
+ dateSelectionTransformers: input.dateSelectionTransformers || [],
124
+ datePointTransforms: input.datePointTransforms || [],
125
+ dateSpanTransforms: input.dateSpanTransforms || [],
126
+ views: input.views || {},
127
+ viewPropsTransformers: input.viewPropsTransformers || [],
128
+ isPropsValid: input.isPropsValid || null,
129
+ externalDefTransforms: input.externalDefTransforms || [],
130
+ viewContainerAppends: input.viewContainerAppends || [],
131
+ eventDropTransformers: input.eventDropTransformers || [],
132
+ componentInteractions: input.componentInteractions || [],
133
+ calendarInteractions: input.calendarInteractions || [],
134
+ themeClasses: input.themeClasses || {},
135
+ eventSourceDefs: input.eventSourceDefs || [],
136
+ cmdFormatter: input.cmdFormatter,
137
+ recurringTypes: input.recurringTypes || [],
138
+ namedTimeZonedImpl: input.namedTimeZonedImpl,
139
+ initialView: input.initialView || '',
140
+ elementDraggingImpl: input.elementDraggingImpl,
141
+ optionChangeHandlers: input.optionChangeHandlers || {},
142
+ scrollGridImpl: input.scrollGridImpl || null,
143
+ listenerRefiners: input.listenerRefiners || {},
144
+ optionRefiners: input.optionRefiners || {},
145
+ propSetHandlers: input.propSetHandlers || {},
146
+ };
147
+ }
148
+ function buildPluginHooks(pluginDefs, globalDefs) {
149
+ let currentPluginIds = {};
150
+ let hooks = {
151
+ premiumReleaseDate: undefined,
152
+ reducers: [],
153
+ isLoadingFuncs: [],
154
+ contextInit: [],
155
+ eventRefiners: {},
156
+ eventDefMemberAdders: [],
157
+ eventSourceRefiners: {},
158
+ isDraggableTransformers: [],
159
+ eventDragMutationMassagers: [],
160
+ eventDefMutationAppliers: [],
161
+ dateSelectionTransformers: [],
162
+ datePointTransforms: [],
163
+ dateSpanTransforms: [],
164
+ views: {},
165
+ viewPropsTransformers: [],
166
+ isPropsValid: null,
167
+ externalDefTransforms: [],
168
+ viewContainerAppends: [],
169
+ eventDropTransformers: [],
170
+ componentInteractions: [],
171
+ calendarInteractions: [],
172
+ themeClasses: {},
173
+ eventSourceDefs: [],
174
+ cmdFormatter: null,
175
+ recurringTypes: [],
176
+ namedTimeZonedImpl: null,
177
+ initialView: '',
178
+ elementDraggingImpl: null,
179
+ optionChangeHandlers: {},
180
+ scrollGridImpl: null,
181
+ listenerRefiners: {},
182
+ optionRefiners: {},
183
+ propSetHandlers: {},
184
+ };
185
+ function addDefs(defs) {
186
+ for (let def of defs) {
187
+ const pluginName = def.name;
188
+ const currentId = currentPluginIds[pluginName];
189
+ if (currentId === undefined) {
190
+ currentPluginIds[pluginName] = def.id;
191
+ addDefs(def.deps);
192
+ hooks = combineHooks(hooks, def);
193
+ }
194
+ else if (currentId !== def.id) {
195
+ // different ID than the one already added
196
+ console.warn(`Duplicate plugin '${pluginName}'`);
197
+ }
198
+ }
199
+ }
200
+ if (pluginDefs) {
201
+ addDefs(pluginDefs);
202
+ }
203
+ addDefs(globalDefs);
204
+ return hooks;
205
+ }
206
+ function buildBuildPluginHooks() {
207
+ let currentOverrideDefs = [];
208
+ let currentGlobalDefs = [];
209
+ let currentHooks;
210
+ return (overrideDefs, globalDefs) => {
211
+ if (!currentHooks || !internalCommon.isArraysEqual(overrideDefs, currentOverrideDefs) || !internalCommon.isArraysEqual(globalDefs, currentGlobalDefs)) {
212
+ currentHooks = buildPluginHooks(overrideDefs, globalDefs);
213
+ }
214
+ currentOverrideDefs = overrideDefs;
215
+ currentGlobalDefs = globalDefs;
216
+ return currentHooks;
217
+ };
218
+ }
219
+ function combineHooks(hooks0, hooks1) {
220
+ return {
221
+ premiumReleaseDate: compareOptionalDates(hooks0.premiumReleaseDate, hooks1.premiumReleaseDate),
222
+ reducers: hooks0.reducers.concat(hooks1.reducers),
223
+ isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),
224
+ contextInit: hooks0.contextInit.concat(hooks1.contextInit),
225
+ eventRefiners: Object.assign(Object.assign({}, hooks0.eventRefiners), hooks1.eventRefiners),
226
+ eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),
227
+ eventSourceRefiners: Object.assign(Object.assign({}, hooks0.eventSourceRefiners), hooks1.eventSourceRefiners),
228
+ isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),
229
+ eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),
230
+ eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),
231
+ dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
232
+ datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),
233
+ dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),
234
+ views: Object.assign(Object.assign({}, hooks0.views), hooks1.views),
235
+ viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
236
+ isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
237
+ externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
238
+ viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),
239
+ eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
240
+ calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
241
+ componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),
242
+ themeClasses: Object.assign(Object.assign({}, hooks0.themeClasses), hooks1.themeClasses),
243
+ eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),
244
+ cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,
245
+ recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),
246
+ namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,
247
+ initialView: hooks0.initialView || hooks1.initialView,
248
+ elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,
249
+ optionChangeHandlers: Object.assign(Object.assign({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),
250
+ scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,
251
+ listenerRefiners: Object.assign(Object.assign({}, hooks0.listenerRefiners), hooks1.listenerRefiners),
252
+ optionRefiners: Object.assign(Object.assign({}, hooks0.optionRefiners), hooks1.optionRefiners),
253
+ propSetHandlers: Object.assign(Object.assign({}, hooks0.propSetHandlers), hooks1.propSetHandlers),
254
+ };
255
+ }
256
+ function compareOptionalDates(date0, date1) {
257
+ if (date0 === undefined) {
258
+ return date1;
259
+ }
260
+ if (date1 === undefined) {
261
+ return date0;
262
+ }
263
+ return new Date(Math.max(date0.valueOf(), date1.valueOf()));
264
+ }
265
+
105
266
  class StandardTheme extends internalCommon.Theme {
106
267
  }
107
268
  StandardTheme.prototype.classes = {
@@ -331,6 +492,170 @@ function reduceDateProfile(currentDateProfile, action, currentDate, dateProfileG
331
492
  return currentDateProfile;
332
493
  }
333
494
 
495
+ function initEventSources(calendarOptions, dateProfile, context) {
496
+ let activeRange = dateProfile ? dateProfile.activeRange : null;
497
+ return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);
498
+ }
499
+ function reduceEventSources(eventSources, action, dateProfile, context) {
500
+ let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
501
+ switch (action.type) {
502
+ case 'ADD_EVENT_SOURCES': // already parsed
503
+ return addSources(eventSources, action.sources, activeRange, context);
504
+ case 'REMOVE_EVENT_SOURCE':
505
+ return removeSource(eventSources, action.sourceId);
506
+ case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
507
+ case 'NEXT':
508
+ case 'CHANGE_DATE':
509
+ case 'CHANGE_VIEW_TYPE':
510
+ if (dateProfile) {
511
+ return fetchDirtySources(eventSources, activeRange, context);
512
+ }
513
+ return eventSources;
514
+ case 'FETCH_EVENT_SOURCES':
515
+ return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?
516
+ internalCommon.arrayToHash(action.sourceIds) :
517
+ excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);
518
+ case 'RECEIVE_EVENTS':
519
+ case 'RECEIVE_EVENT_ERROR':
520
+ return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
521
+ case 'REMOVE_ALL_EVENT_SOURCES':
522
+ return {};
523
+ default:
524
+ return eventSources;
525
+ }
526
+ }
527
+ function reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {
528
+ let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
529
+ return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);
530
+ }
531
+ function computeEventSourcesLoading(eventSources) {
532
+ for (let sourceId in eventSources) {
533
+ if (eventSources[sourceId].isFetching) {
534
+ return true;
535
+ }
536
+ }
537
+ return false;
538
+ }
539
+ function addSources(eventSourceHash, sources, fetchRange, context) {
540
+ let hash = {};
541
+ for (let source of sources) {
542
+ hash[source.sourceId] = source;
543
+ }
544
+ if (fetchRange) {
545
+ hash = fetchDirtySources(hash, fetchRange, context);
546
+ }
547
+ return Object.assign(Object.assign({}, eventSourceHash), hash);
548
+ }
549
+ function removeSource(eventSourceHash, sourceId) {
550
+ return internalCommon.filterHash(eventSourceHash, (eventSource) => eventSource.sourceId !== sourceId);
551
+ }
552
+ function fetchDirtySources(sourceHash, fetchRange, context) {
553
+ return fetchSourcesByIds(sourceHash, internalCommon.filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)), fetchRange, false, context);
554
+ }
555
+ function isSourceDirty(eventSource, fetchRange, context) {
556
+ if (!doesSourceNeedRange(eventSource, context)) {
557
+ return !eventSource.latestFetchId;
558
+ }
559
+ return !context.options.lazyFetching ||
560
+ !eventSource.fetchRange ||
561
+ eventSource.isFetching || // always cancel outdated in-progress fetches
562
+ fetchRange.start < eventSource.fetchRange.start ||
563
+ fetchRange.end > eventSource.fetchRange.end;
564
+ }
565
+ function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {
566
+ let nextSources = {};
567
+ for (let sourceId in prevSources) {
568
+ let source = prevSources[sourceId];
569
+ if (sourceIdHash[sourceId]) {
570
+ nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);
571
+ }
572
+ else {
573
+ nextSources[sourceId] = source;
574
+ }
575
+ }
576
+ return nextSources;
577
+ }
578
+ function fetchSource(eventSource, fetchRange, isRefetch, context) {
579
+ let { options, calendarApi } = context;
580
+ let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
581
+ let fetchId = internalCommon.guid();
582
+ sourceDef.fetch({
583
+ eventSource,
584
+ range: fetchRange,
585
+ isRefetch,
586
+ context,
587
+ }, (res) => {
588
+ let { rawEvents } = res;
589
+ if (options.eventSourceSuccess) {
590
+ rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.response) || rawEvents;
591
+ }
592
+ if (eventSource.success) {
593
+ rawEvents = eventSource.success.call(calendarApi, rawEvents, res.response) || rawEvents;
594
+ }
595
+ context.dispatch({
596
+ type: 'RECEIVE_EVENTS',
597
+ sourceId: eventSource.sourceId,
598
+ fetchId,
599
+ fetchRange,
600
+ rawEvents,
601
+ });
602
+ }, (error) => {
603
+ let errorHandled = false;
604
+ if (options.eventSourceFailure) {
605
+ options.eventSourceFailure.call(calendarApi, error);
606
+ errorHandled = true;
607
+ }
608
+ if (eventSource.failure) {
609
+ eventSource.failure(error);
610
+ errorHandled = true;
611
+ }
612
+ if (!errorHandled) {
613
+ console.warn(error.message, error);
614
+ }
615
+ context.dispatch({
616
+ type: 'RECEIVE_EVENT_ERROR',
617
+ sourceId: eventSource.sourceId,
618
+ fetchId,
619
+ fetchRange,
620
+ error,
621
+ });
622
+ });
623
+ return Object.assign(Object.assign({}, eventSource), { isFetching: true, latestFetchId: fetchId });
624
+ }
625
+ function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
626
+ let eventSource = sourceHash[sourceId];
627
+ if (eventSource && // not already removed
628
+ fetchId === eventSource.latestFetchId) {
629
+ return Object.assign(Object.assign({}, sourceHash), { [sourceId]: Object.assign(Object.assign({}, eventSource), { isFetching: false, fetchRange }) });
630
+ }
631
+ return sourceHash;
632
+ }
633
+ function excludeStaticSources(eventSources, context) {
634
+ return internalCommon.filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context));
635
+ }
636
+ function parseInitialSources(rawOptions, context) {
637
+ let refiners = internalCommon.buildEventSourceRefiners(context);
638
+ let rawSources = [].concat(rawOptions.eventSources || []);
639
+ let sources = []; // parsed
640
+ if (rawOptions.initialEvents) {
641
+ rawSources.unshift(rawOptions.initialEvents);
642
+ }
643
+ if (rawOptions.events) {
644
+ rawSources.unshift(rawOptions.events);
645
+ }
646
+ for (let rawSource of rawSources) {
647
+ let source = internalCommon.parseEventSource(rawSource, context, refiners);
648
+ if (source) {
649
+ sources.push(source);
650
+ }
651
+ }
652
+ return sources;
653
+ }
654
+ function doesSourceNeedRange(eventSource, context) {
655
+ let defs = context.pluginHooks.eventSourceDefs;
656
+ return !defs[eventSource.sourceDefId].ignoreRange;
657
+ }
658
+
334
659
  function reduceDateSelection(currentSelection, action) {
335
660
  switch (action.type) {
336
661
  case 'UNSELECT_DATES':
@@ -516,6 +841,257 @@ class ViewImpl {
516
841
  }
517
842
  }
518
843
 
844
+ let eventSourceDef$2 = {
845
+ ignoreRange: true,
846
+ parseMeta(refined) {
847
+ if (Array.isArray(refined.events)) {
848
+ return refined.events;
849
+ }
850
+ return null;
851
+ },
852
+ fetch(arg, successCallback) {
853
+ successCallback({
854
+ rawEvents: arg.eventSource.meta,
855
+ });
856
+ },
857
+ };
858
+ const arrayEventSourcePlugin = createPlugin({
859
+ name: 'array-event-source',
860
+ eventSourceDefs: [eventSourceDef$2],
861
+ });
862
+
863
+ let eventSourceDef$1 = {
864
+ parseMeta(refined) {
865
+ if (typeof refined.events === 'function') {
866
+ return refined.events;
867
+ }
868
+ return null;
869
+ },
870
+ fetch(arg, successCallback, errorCallback) {
871
+ const { dateEnv } = arg.context;
872
+ const func = arg.eventSource.meta;
873
+ internalCommon.unpromisify(func.bind(null, internalCommon.buildRangeApiWithTimeZone(arg.range, dateEnv)), (rawEvents) => successCallback({ rawEvents }), errorCallback);
874
+ },
875
+ };
876
+ const funcEventSourcePlugin = createPlugin({
877
+ name: 'func-event-source',
878
+ eventSourceDefs: [eventSourceDef$1],
879
+ });
880
+
881
+ const JSON_FEED_EVENT_SOURCE_REFINERS = {
882
+ method: String,
883
+ extraParams: internalCommon.identity,
884
+ startParam: String,
885
+ endParam: String,
886
+ timeZoneParam: String,
887
+ };
888
+
889
+ let eventSourceDef = {
890
+ parseMeta(refined) {
891
+ if (refined.url && (refined.format === 'json' || !refined.format)) {
892
+ return {
893
+ url: refined.url,
894
+ format: 'json',
895
+ method: (refined.method || 'GET').toUpperCase(),
896
+ extraParams: refined.extraParams,
897
+ startParam: refined.startParam,
898
+ endParam: refined.endParam,
899
+ timeZoneParam: refined.timeZoneParam,
900
+ };
901
+ }
902
+ return null;
903
+ },
904
+ fetch(arg, successCallback, errorCallback) {
905
+ const { meta } = arg.eventSource;
906
+ const requestParams = buildRequestParams(meta, arg.range, arg.context);
907
+ internalCommon.requestJson(meta.method, meta.url, requestParams).then(([rawEvents, response]) => {
908
+ successCallback({ rawEvents, response });
909
+ }, errorCallback);
910
+ },
911
+ };
912
+ const jsonFeedEventSourcePlugin = createPlugin({
913
+ name: 'json-event-source',
914
+ eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,
915
+ eventSourceDefs: [eventSourceDef],
916
+ });
917
+ function buildRequestParams(meta, range, context) {
918
+ let { dateEnv, options } = context;
919
+ let startParam;
920
+ let endParam;
921
+ let timeZoneParam;
922
+ let customRequestParams;
923
+ let params = {};
924
+ startParam = meta.startParam;
925
+ if (startParam == null) {
926
+ startParam = options.startParam;
927
+ }
928
+ endParam = meta.endParam;
929
+ if (endParam == null) {
930
+ endParam = options.endParam;
931
+ }
932
+ timeZoneParam = meta.timeZoneParam;
933
+ if (timeZoneParam == null) {
934
+ timeZoneParam = options.timeZoneParam;
935
+ }
936
+ // retrieve any outbound GET/POST data from the options
937
+ if (typeof meta.extraParams === 'function') {
938
+ // supplied as a function that returns a key/value object
939
+ customRequestParams = meta.extraParams();
940
+ }
941
+ else {
942
+ // probably supplied as a straight key/value object
943
+ customRequestParams = meta.extraParams || {};
944
+ }
945
+ Object.assign(params, customRequestParams);
946
+ params[startParam] = dateEnv.formatIso(range.start);
947
+ params[endParam] = dateEnv.formatIso(range.end);
948
+ if (dateEnv.timeZone !== 'local') {
949
+ params[timeZoneParam] = dateEnv.timeZone;
950
+ }
951
+ return params;
952
+ }
953
+
954
+ const SIMPLE_RECURRING_REFINERS = {
955
+ daysOfWeek: internalCommon.identity,
956
+ startTime: internalCommon.createDuration,
957
+ endTime: internalCommon.createDuration,
958
+ duration: internalCommon.createDuration,
959
+ startRecur: internalCommon.identity,
960
+ endRecur: internalCommon.identity,
961
+ };
962
+
963
+ let recurring = {
964
+ parse(refined, dateEnv) {
965
+ if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {
966
+ let recurringData = {
967
+ daysOfWeek: refined.daysOfWeek || null,
968
+ startTime: refined.startTime || null,
969
+ endTime: refined.endTime || null,
970
+ startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,
971
+ endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null,
972
+ };
973
+ let duration;
974
+ if (refined.duration) {
975
+ duration = refined.duration;
976
+ }
977
+ if (!duration && refined.startTime && refined.endTime) {
978
+ duration = internalCommon.subtractDurations(refined.endTime, refined.startTime);
979
+ }
980
+ return {
981
+ allDayGuess: Boolean(!refined.startTime && !refined.endTime),
982
+ duration,
983
+ typeData: recurringData, // doesn't need endTime anymore but oh well
984
+ };
985
+ }
986
+ return null;
987
+ },
988
+ expand(typeData, framingRange, dateEnv) {
989
+ let clippedFramingRange = internalCommon.intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
990
+ if (clippedFramingRange) {
991
+ return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);
992
+ }
993
+ return [];
994
+ },
995
+ };
996
+ const simpleRecurringEventsPlugin = createPlugin({
997
+ name: 'simple-recurring-event',
998
+ recurringTypes: [recurring],
999
+ eventRefiners: SIMPLE_RECURRING_REFINERS,
1000
+ });
1001
+ function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
1002
+ let dowHash = daysOfWeek ? internalCommon.arrayToHash(daysOfWeek) : null;
1003
+ let dayMarker = internalCommon.startOfDay(framingRange.start);
1004
+ let endMarker = framingRange.end;
1005
+ let instanceStarts = [];
1006
+ while (dayMarker < endMarker) {
1007
+ let instanceStart;
1008
+ // if everyday, or this particular day-of-week
1009
+ if (!dowHash || dowHash[dayMarker.getUTCDay()]) {
1010
+ if (startTime) {
1011
+ instanceStart = dateEnv.add(dayMarker, startTime);
1012
+ }
1013
+ else {
1014
+ instanceStart = dayMarker;
1015
+ }
1016
+ instanceStarts.push(instanceStart);
1017
+ }
1018
+ dayMarker = internalCommon.addDays(dayMarker, 1);
1019
+ }
1020
+ return instanceStarts;
1021
+ }
1022
+
1023
+ const changeHandlerPlugin = createPlugin({
1024
+ name: 'change-handler',
1025
+ optionChangeHandlers: {
1026
+ events(events, context) {
1027
+ handleEventSources([events], context);
1028
+ },
1029
+ eventSources: handleEventSources,
1030
+ },
1031
+ });
1032
+ /*
1033
+ BUG: if `event` was supplied, all previously-given `eventSources` will be wiped out
1034
+ */
1035
+ function handleEventSources(inputs, context) {
1036
+ let unfoundSources = internalCommon.hashValuesToArray(context.getCurrentData().eventSources);
1037
+ let newInputs = [];
1038
+ for (let input of inputs) {
1039
+ let inputFound = false;
1040
+ for (let i = 0; i < unfoundSources.length; i += 1) {
1041
+ if (unfoundSources[i]._raw === input) {
1042
+ unfoundSources.splice(i, 1); // delete
1043
+ inputFound = true;
1044
+ break;
1045
+ }
1046
+ }
1047
+ if (!inputFound) {
1048
+ newInputs.push(input);
1049
+ }
1050
+ }
1051
+ for (let unfoundSource of unfoundSources) {
1052
+ context.dispatch({
1053
+ type: 'REMOVE_EVENT_SOURCE',
1054
+ sourceId: unfoundSource.sourceId,
1055
+ });
1056
+ }
1057
+ for (let newInput of newInputs) {
1058
+ context.calendarApi.addEventSource(newInput);
1059
+ }
1060
+ }
1061
+
1062
+ function handleDateProfile(dateProfile, context) {
1063
+ context.emitter.trigger('datesSet', Object.assign(Object.assign({}, internalCommon.buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));
1064
+ }
1065
+
1066
+ function handleEventStore(eventStore, context) {
1067
+ let { emitter } = context;
1068
+ if (emitter.hasHandlers('eventsSet')) {
1069
+ emitter.trigger('eventsSet', internalCommon.buildEventApis(eventStore, context));
1070
+ }
1071
+ }
1072
+
1073
+ /*
1074
+ this array is exposed on the root namespace so that UMD plugins can add to it.
1075
+ see the rollup-bundles script.
1076
+ */
1077
+ const globalPlugins = [
1078
+ arrayEventSourcePlugin,
1079
+ funcEventSourcePlugin,
1080
+ jsonFeedEventSourcePlugin,
1081
+ simpleRecurringEventsPlugin,
1082
+ changeHandlerPlugin,
1083
+ createPlugin({
1084
+ name: 'misc',
1085
+ isLoadingFuncs: [
1086
+ (state) => computeEventSourcesLoading(state.eventSources),
1087
+ ],
1088
+ propSetHandlers: {
1089
+ dateProfile: handleDateProfile,
1090
+ eventStore: handleEventStore,
1091
+ },
1092
+ }),
1093
+ ];
1094
+
519
1095
  class TaskRunner {
520
1096
  constructor(runTaskOption, drainedOption) {
521
1097
  this.runTaskOption = runTaskOption;
@@ -599,7 +1175,7 @@ class CalendarDataManager {
599
1175
  this.computeCurrentViewData = internalCommon.memoize(this._computeCurrentViewData);
600
1176
  this.organizeRawLocales = internalCommon.memoize(organizeRawLocales);
601
1177
  this.buildLocale = internalCommon.memoize(buildLocale);
602
- this.buildPluginHooks = internalCommon.buildBuildPluginHooks();
1178
+ this.buildPluginHooks = buildBuildPluginHooks();
603
1179
  this.buildDateEnv = internalCommon.memoize(buildDateEnv$1);
604
1180
  this.buildTheme = internalCommon.memoize(buildTheme);
605
1181
  this.parseToolbars = internalCommon.memoize(parseToolbars);
@@ -652,7 +1228,7 @@ class CalendarDataManager {
652
1228
  callback(calendarContext);
653
1229
  }
654
1230
  // NOT DRY
655
- let eventSources = internalCommon.initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);
1231
+ let eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);
656
1232
  let initialState = {
657
1233
  dynamicOptionOverrides,
658
1234
  currentViewType,
@@ -719,9 +1295,9 @@ class CalendarDataManager {
719
1295
  !internalCommon.rangeContainsMarker(dateProfile.currentRange, currentDate)) {
720
1296
  currentDate = dateProfile.currentRange.start;
721
1297
  }
722
- let eventSources = internalCommon.reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
1298
+ let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
723
1299
  let eventStore = internalCommon.reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
724
- let isEventsLoading = internalCommon.computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading
1300
+ let isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading
725
1301
  let renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?
726
1302
  (state.renderableEventStore || eventStore) : // try from previous state
727
1303
  eventStore;
@@ -774,7 +1350,7 @@ class CalendarDataManager {
774
1350
  if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {
775
1351
  if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {
776
1352
  // hack
777
- state.eventSources = data.eventSources = internalCommon.reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);
1353
+ state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);
778
1354
  state.eventStore = data.eventStore = internalCommon.rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);
779
1355
  }
780
1356
  for (let optionName in changeHandlers) {
@@ -816,7 +1392,7 @@ class CalendarDataManager {
816
1392
  let availableLocaleData = this.organizeRawLocales(locales);
817
1393
  let availableRawLocales = availableLocaleData.map;
818
1394
  let localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;
819
- let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], internalCommon.globalPlugins);
1395
+ let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);
820
1396
  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);
821
1397
  let extra = {};
822
1398
  let raw = internalCommon.mergeRawOptions([
@@ -1534,12 +2110,14 @@ function sliceEvents(props, allDay) {
1534
2110
  return internalCommon.sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
1535
2111
  }
1536
2112
 
1537
- const version = '6.0.0';
2113
+ const version = '6.0.2';
1538
2114
 
1539
2115
  exports.JsonRequestError = internalCommon.JsonRequestError;
1540
- exports.createPlugin = internalCommon.createPlugin;
1541
2116
  exports.Calendar = Calendar;
2117
+ exports.createPlugin = createPlugin;
1542
2118
  exports.formatDate = formatDate;
1543
2119
  exports.formatRange = formatRange;
2120
+ exports.globalLocales = globalLocales;
2121
+ exports.globalPlugins = globalPlugins;
1544
2122
  exports.sliceEvents = sliceEvents;
1545
2123
  exports.version = version;