@fullcalendar/core 7.0.0-beta.3 → 7.0.0-rc.0

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 (255) hide show
  1. package/index.cjs +54 -50
  2. package/index.d.ts +0 -1
  3. package/index.global.js +343 -381
  4. package/index.global.min.js +2 -2
  5. package/index.js +56 -52
  6. package/internal-common.cjs +5202 -5244
  7. package/internal-common.d.ts +147 -120
  8. package/internal-common.js +5199 -5240
  9. package/internal.cjs +4 -6
  10. package/internal.d.ts +1 -1
  11. package/internal.js +1 -1
  12. package/locales/af.global.js +1 -1
  13. package/locales/af.global.min.js +1 -1
  14. package/locales/ar-dz.global.js +1 -1
  15. package/locales/ar-dz.global.min.js +1 -1
  16. package/locales/ar-kw.global.js +1 -1
  17. package/locales/ar-kw.global.min.js +1 -1
  18. package/locales/ar-ly.global.js +1 -1
  19. package/locales/ar-ly.global.min.js +1 -1
  20. package/locales/ar-ma.global.js +1 -1
  21. package/locales/ar-ma.global.min.js +1 -1
  22. package/locales/ar-sa.global.js +1 -1
  23. package/locales/ar-sa.global.min.js +1 -1
  24. package/locales/ar-tn.global.js +1 -1
  25. package/locales/ar-tn.global.min.js +1 -1
  26. package/locales/ar.global.js +1 -1
  27. package/locales/ar.global.min.js +1 -1
  28. package/locales/az.cjs +1 -1
  29. package/locales/az.global.js +2 -2
  30. package/locales/az.global.min.js +2 -2
  31. package/locales/az.js +1 -1
  32. package/locales/bg.global.js +1 -1
  33. package/locales/bg.global.min.js +1 -1
  34. package/locales/bn.global.js +1 -1
  35. package/locales/bn.global.min.js +1 -1
  36. package/locales/bs.cjs +1 -1
  37. package/locales/bs.global.js +2 -2
  38. package/locales/bs.global.min.js +2 -2
  39. package/locales/bs.js +1 -1
  40. package/locales/ca.cjs +1 -1
  41. package/locales/ca.global.js +2 -2
  42. package/locales/ca.global.min.js +2 -2
  43. package/locales/ca.js +1 -1
  44. package/locales/cs.global.js +1 -1
  45. package/locales/cs.global.min.js +1 -1
  46. package/locales/cy.cjs +1 -1
  47. package/locales/cy.global.js +2 -2
  48. package/locales/cy.global.min.js +2 -2
  49. package/locales/cy.js +1 -1
  50. package/locales/da.cjs +1 -1
  51. package/locales/da.global.js +2 -2
  52. package/locales/da.global.min.js +2 -2
  53. package/locales/da.js +1 -1
  54. package/locales/de-at.cjs +1 -2
  55. package/locales/de-at.global.js +2 -3
  56. package/locales/de-at.global.min.js +2 -2
  57. package/locales/de-at.js +1 -2
  58. package/locales/de.cjs +1 -2
  59. package/locales/de.global.js +2 -3
  60. package/locales/de.global.min.js +2 -2
  61. package/locales/de.js +1 -2
  62. package/locales/el.global.js +1 -1
  63. package/locales/el.global.min.js +1 -1
  64. package/locales/en-au.global.js +1 -1
  65. package/locales/en-au.global.min.js +1 -1
  66. package/locales/en-gb.global.js +1 -1
  67. package/locales/en-gb.global.min.js +1 -1
  68. package/locales/en-nz.global.js +1 -1
  69. package/locales/en-nz.global.min.js +1 -1
  70. package/locales/eo.cjs +1 -1
  71. package/locales/eo.global.js +2 -2
  72. package/locales/eo.global.min.js +2 -2
  73. package/locales/eo.js +1 -1
  74. package/locales/es-us.cjs +1 -1
  75. package/locales/es-us.global.js +2 -2
  76. package/locales/es-us.global.min.js +2 -2
  77. package/locales/es-us.js +1 -1
  78. package/locales/es.cjs +2 -3
  79. package/locales/es.global.js +3 -4
  80. package/locales/es.global.min.js +2 -2
  81. package/locales/es.js +2 -3
  82. package/locales/et.cjs +1 -1
  83. package/locales/et.global.js +2 -2
  84. package/locales/et.global.min.js +2 -2
  85. package/locales/et.js +1 -1
  86. package/locales/eu.cjs +1 -1
  87. package/locales/eu.global.js +2 -2
  88. package/locales/eu.global.min.js +2 -2
  89. package/locales/eu.js +1 -1
  90. package/locales/fa.global.js +1 -1
  91. package/locales/fa.global.min.js +1 -1
  92. package/locales/fi.cjs +1 -1
  93. package/locales/fi.global.js +2 -2
  94. package/locales/fi.global.min.js +2 -2
  95. package/locales/fi.js +1 -1
  96. package/locales/fr-ca.cjs +1 -1
  97. package/locales/fr-ca.global.js +2 -2
  98. package/locales/fr-ca.global.min.js +2 -2
  99. package/locales/fr-ca.js +1 -1
  100. package/locales/fr-ch.cjs +1 -1
  101. package/locales/fr-ch.global.js +2 -2
  102. package/locales/fr-ch.global.min.js +2 -2
  103. package/locales/fr-ch.js +1 -1
  104. package/locales/fr.cjs +1 -1
  105. package/locales/fr.global.js +2 -2
  106. package/locales/fr.global.min.js +2 -2
  107. package/locales/fr.js +1 -1
  108. package/locales/gl.cjs +2 -3
  109. package/locales/gl.global.js +3 -4
  110. package/locales/gl.global.min.js +2 -2
  111. package/locales/gl.js +2 -3
  112. package/locales/he.global.js +1 -1
  113. package/locales/he.global.min.js +1 -1
  114. package/locales/hi.global.js +1 -1
  115. package/locales/hi.global.min.js +1 -1
  116. package/locales/hr.cjs +1 -1
  117. package/locales/hr.global.js +2 -2
  118. package/locales/hr.global.min.js +2 -2
  119. package/locales/hr.js +1 -1
  120. package/locales/hu.cjs +1 -1
  121. package/locales/hu.global.js +2 -2
  122. package/locales/hu.global.min.js +2 -2
  123. package/locales/hu.js +1 -1
  124. package/locales/hy-am.global.js +1 -1
  125. package/locales/hy-am.global.min.js +1 -1
  126. package/locales/id.cjs +1 -1
  127. package/locales/id.global.js +2 -2
  128. package/locales/id.global.min.js +2 -2
  129. package/locales/id.js +1 -1
  130. package/locales/is.cjs +1 -1
  131. package/locales/is.global.js +2 -2
  132. package/locales/is.global.min.js +2 -2
  133. package/locales/is.js +1 -1
  134. package/locales/it.cjs +1 -1
  135. package/locales/it.global.js +2 -2
  136. package/locales/it.global.min.js +2 -2
  137. package/locales/it.js +1 -1
  138. package/locales/ja.global.js +1 -1
  139. package/locales/ja.global.min.js +1 -1
  140. package/locales/ka.cjs +1 -1
  141. package/locales/ka.global.js +2 -2
  142. package/locales/ka.global.min.js +2 -2
  143. package/locales/ka.js +1 -1
  144. package/locales/kk.cjs +1 -1
  145. package/locales/kk.global.js +2 -2
  146. package/locales/kk.global.min.js +2 -2
  147. package/locales/kk.js +1 -1
  148. package/locales/km.global.js +1 -1
  149. package/locales/km.global.min.js +1 -1
  150. package/locales/ko.global.js +1 -1
  151. package/locales/ko.global.min.js +1 -1
  152. package/locales/ku.global.js +1 -1
  153. package/locales/ku.global.min.js +1 -1
  154. package/locales/lb.cjs +1 -1
  155. package/locales/lb.global.js +2 -2
  156. package/locales/lb.global.min.js +2 -2
  157. package/locales/lb.js +1 -1
  158. package/locales/lt.cjs +1 -1
  159. package/locales/lt.global.js +2 -2
  160. package/locales/lt.global.min.js +2 -2
  161. package/locales/lt.js +1 -1
  162. package/locales/lv.cjs +1 -1
  163. package/locales/lv.global.js +2 -2
  164. package/locales/lv.global.min.js +2 -2
  165. package/locales/lv.js +1 -1
  166. package/locales/mk.global.js +1 -1
  167. package/locales/mk.global.min.js +1 -1
  168. package/locales/ms.cjs +1 -1
  169. package/locales/ms.global.js +2 -2
  170. package/locales/ms.global.min.js +2 -2
  171. package/locales/ms.js +1 -1
  172. package/locales/nb.cjs +1 -1
  173. package/locales/nb.global.js +2 -2
  174. package/locales/nb.global.min.js +2 -2
  175. package/locales/nb.js +1 -1
  176. package/locales/ne.global.js +1 -1
  177. package/locales/ne.global.min.js +1 -1
  178. package/locales/nl.global.js +1 -1
  179. package/locales/nl.global.min.js +1 -1
  180. package/locales/nn.cjs +1 -1
  181. package/locales/nn.global.js +2 -2
  182. package/locales/nn.global.min.js +2 -2
  183. package/locales/nn.js +1 -1
  184. package/locales/pl.cjs +1 -1
  185. package/locales/pl.global.js +2 -2
  186. package/locales/pl.global.min.js +2 -2
  187. package/locales/pl.js +1 -1
  188. package/locales/pt-br.cjs +2 -3
  189. package/locales/pt-br.global.js +3 -4
  190. package/locales/pt-br.global.min.js +2 -2
  191. package/locales/pt-br.js +2 -3
  192. package/locales/pt.cjs +1 -1
  193. package/locales/pt.global.js +2 -2
  194. package/locales/pt.global.min.js +2 -2
  195. package/locales/pt.js +1 -1
  196. package/locales/ro.cjs +1 -1
  197. package/locales/ro.global.js +2 -2
  198. package/locales/ro.global.min.js +2 -2
  199. package/locales/ro.js +1 -1
  200. package/locales/ru.cjs +1 -1
  201. package/locales/ru.global.js +2 -2
  202. package/locales/ru.global.min.js +2 -2
  203. package/locales/ru.js +1 -1
  204. package/locales/si-lk.global.js +1 -1
  205. package/locales/si-lk.global.min.js +1 -1
  206. package/locales/sk.global.js +1 -1
  207. package/locales/sk.global.min.js +1 -1
  208. package/locales/sl.global.js +1 -1
  209. package/locales/sl.global.min.js +1 -1
  210. package/locales/sm.global.js +1 -1
  211. package/locales/sm.global.min.js +1 -1
  212. package/locales/sq.cjs +1 -1
  213. package/locales/sq.global.js +2 -2
  214. package/locales/sq.global.min.js +2 -2
  215. package/locales/sq.js +1 -1
  216. package/locales/sr-cyrl.global.js +1 -1
  217. package/locales/sr-cyrl.global.min.js +1 -1
  218. package/locales/sr.global.js +1 -1
  219. package/locales/sr.global.min.js +1 -1
  220. package/locales/sv.cjs +1 -2
  221. package/locales/sv.global.js +2 -3
  222. package/locales/sv.global.min.js +2 -2
  223. package/locales/sv.js +1 -2
  224. package/locales/ta-in.cjs +1 -1
  225. package/locales/ta-in.global.js +2 -2
  226. package/locales/ta-in.global.min.js +2 -2
  227. package/locales/ta-in.js +1 -1
  228. package/locales/th.global.js +1 -1
  229. package/locales/th.global.min.js +1 -1
  230. package/locales/tr.global.js +1 -1
  231. package/locales/tr.global.min.js +1 -1
  232. package/locales/ug.global.js +1 -1
  233. package/locales/ug.global.min.js +1 -1
  234. package/locales/uk.cjs +1 -1
  235. package/locales/uk.global.js +2 -2
  236. package/locales/uk.global.min.js +2 -2
  237. package/locales/uk.js +1 -1
  238. package/locales/uz-cy.cjs +1 -1
  239. package/locales/uz-cy.global.js +2 -2
  240. package/locales/uz-cy.global.min.js +2 -2
  241. package/locales/uz-cy.js +1 -1
  242. package/locales/uz.global.js +1 -1
  243. package/locales/uz.global.min.js +1 -1
  244. package/locales/vi.global.js +1 -1
  245. package/locales/vi.global.min.js +1 -1
  246. package/locales/zh-cn.global.js +1 -1
  247. package/locales/zh-cn.global.min.js +1 -1
  248. package/locales/zh-tw.global.js +1 -1
  249. package/locales/zh-tw.global.min.js +1 -1
  250. package/locales-all.global.js +44 -50
  251. package/locales-all.global.min.js +2 -2
  252. package/package.json +1 -1
  253. package/preact.cjs +1 -0
  254. package/preact.d.ts +4 -3
  255. package/preact.js +1 -1
package/index.global.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- FullCalendar Core v7.0.0-beta.3
2
+ FullCalendar Core v7.0.0-rc.0
3
3
  Docs & License: https://fullcalendar.io
4
4
  (c) 2024 Adam Shaw
5
5
  */
@@ -86,7 +86,7 @@ var FullCalendar = (function (exports) {
86
86
  registerStylesRoot(document);
87
87
  }
88
88
 
89
- 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{display:flex;flex-direction:column;gap:1.5em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-border,.fc-border-b,.fc-border-e,.fc-border-s,.fc-border-t{border:0 solid var(--fc-border-color)}.fc-border-transparent{border-color:transparent}.fc-border{border-width:1px}.fc-border-t{border-top-width:1px}.fc-border-b{border-bottom-width:1px}.fc-direction-ltr .fc-border-s,.fc-direction-rtl .fc-border-e{border-left-width:1px}.fc-direction-ltr .fc-border-e,.fc-direction-rtl .fc-border-s{border-right-width:1px}.fc-flex-row{display:flex;flex-direction:row}.fc-flex-col{display:flex;flex-direction:column}.fc-grow{flex-grow:1}.fc-basis0,.fc-liquid{flex-basis:0}.fc-liquid{flex-grow:1;min-height:0;min-width:0}.fc-media-screen .fc-print-header,.fc-media-screen .fc-print-root{display:flex;flex-direction:column}.fc-cell{margin:0!important;padding:0!important}.fc-cell-inner{flex-shrink:0;overflow:hidden;white-space:nowrap}.fc-celldivider,.fc-rowdivider{border:0 solid var(--fc-border-color)}.fc-rowdivider{border-width:1px 0}.fc-celldivider{border-width:0 1px}.fc-celldivider,.fc-rowdivider{background:var(--fc-neutral-bg-color)}.fc-celldivider{padding-left:2px}.fc-rowdivider{padding-bottom:2px}.fc-crop{overflow:hidden}.fc-rel{position:relative}.fc-abs{position:absolute}.fc-fill{bottom:0;top:0}.fc-fill,.fc-fill-x{left:0;position:absolute;right:0}.fc-fill-y{bottom:0;position:absolute;top:0}.fc-sticky-t{position:sticky;top:0}.fc-sticky-s{left:0;position:sticky;right:0}.fc-table-header-sticky{background:var(--fc-page-bg-color);position:sticky;top:0;z-index:5}.fc-sticky-footer-scrollbar{bottom:0;position:sticky;z-index:5}.fc-sticky-footer-scrollbar>.fc-scroller{margin-top:-1px}.fc-sticky-footer-scrollbar>.fc-scroller>*{height:1px}.fc-content-box{box-sizing:content-box}.fc-offscreen{left:-10000px;position:absolute}.fc-shaded{background-color:var(--fc-neutral-bg-color)}.fc-filler{opacity:.5}.fc-padding-sm{padding:2px 4px}.fc-padding-md{padding:4px 5px}.fc-padding-lg{padding:8px}.fc-justify-center{justify-content:center}.fc-align-center{align-items:center}.fc-align-start{align-items:flex-start}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-view-outer{position:relative}.fc-view-outer-liquid,.fc-view-outer-static{display:flex;flex-direction:column}.fc-view-outer-liquid,.fc-view-outer-liquid>.fc-view,.fc-view-outer-static>.fc-view{flex-basis:0;flex-grow:1;min-height:0;min-width:0}.fc-view-outer-aspect-ratio>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.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-selected:before{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.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-event-inner{position:relative;z-index:2}.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-bg-event,.fc-highlight,.fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc-non-business{background:var(--fc-non-business-color)}.fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc-highlight{background:var(--fc-highlight-color)}.fc-day-disabled{background:var(--fc-neutral-bg-color)}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:flex;flex-direction:column;position:relative}.fc-h-event.fc-event-mirror{z-index:3}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-h-event .fc-event-inner{color:var(--fc-event-text-color);display:flex;flex-direction:row}.fc-h-event .fc-event-time,.fc-h-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-h-event .fc-event-title-outer{display:flex;flex-basis:0;flex-direction:row;flex-grow:1;min-height:0;min-width:0}.fc-h-event .fc-event-title{left:0;position:sticky;right: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-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:6}.fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc-popover-title{margin:0 2px}.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)}.fc-scroller{padding:0!important}.fc-scroller-no-bars{-ms-overflow-style:none;scrollbar-width:none}.fc-scroller-no-bars::-webkit-scrollbar{display:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}@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;-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-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc-button{-webkit-appearance:button}.fc-button:not(:disabled){cursor:pointer}.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;-moz-user-select:none;user-select:none;vertical-align:middle}.fc-button:hover{text-decoration:none}.fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc-button:disabled{opacity:.65}.fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.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-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button-primary:not(:disabled).fc-button-active,.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-button-primary:not(:disabled).fc-button-active:focus,.fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc-button-group>.fc-button.fc-button-active,.fc-button-group>.fc-button:active,.fc-button-group>.fc-button:focus,.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-toolbar{align-items:center;display:flex;flex-direction:row;gap:.75em;justify-content:space-between}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc-toolbar-section{display:flex;flex-direction:row;flex-shrink:0;gap:.75em}.fc-toolbar-title{font-size:1.75em;margin:0;white-space:nowrap}";
89
+ 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{display:flex;flex-direction:column;gap:1.5em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-border,.fc-border-b,.fc-border-e,.fc-border-s,.fc-border-t{border:0 solid var(--fc-border-color)}.fc-border-transparent{border-color:transparent}.fc-border{border-width:1px}.fc-border-t{border-top-width:1px}.fc-border-b{border-bottom-width:1px}.fc-direction-ltr .fc-border-s,.fc-direction-rtl .fc-border-e{border-left-width:1px}.fc-direction-ltr .fc-border-e,.fc-direction-rtl .fc-border-s{border-right-width:1px}.fc-flex-row{display:flex;flex-direction:row}.fc-flex-col{display:flex;flex-direction:column}.fc-grow{flex-grow:1}.fc-basis0,.fc-liquid{flex-basis:0}.fc-liquid{flex-grow:1;min-height:0;min-width:0}.fc-media-screen .fc-print-header,.fc-media-screen .fc-print-root{display:flex;flex-direction:column}.fc-cell{margin:0!important;padding:0!important}.fc-cell-inner{flex-shrink:0;overflow:hidden;white-space:nowrap}.fc-celldivider,.fc-rowdivider{border:0 solid var(--fc-border-color)}.fc-rowdivider{border-width:1px 0}.fc-celldivider{border-width:0 1px}.fc-celldivider,.fc-rowdivider{background:var(--fc-neutral-bg-color)}.fc-celldivider{padding-left:2px}.fc-rowdivider{padding-bottom:2px}.fc-crop{overflow:hidden}.fc-rel{position:relative}.fc-abs{position:absolute}.fc-fill{bottom:0;top:0}.fc-fill,.fc-fill-top,.fc-fill-x{left:0;position:absolute;right:0}.fc-fill-start,.fc-fill-y{bottom:0;position:absolute;top:0}.fc-fill-top{top:0}.fc-fill-start{left:0;right:0;width:0}.fc-sticky-t{position:sticky;top:0}.fc-sticky-s{left:0;position:sticky;right:0}.fc-table-header-sticky{background:var(--fc-page-bg-color);position:sticky;top:0;z-index:3}.fc-content-box{box-sizing:content-box}.fc-offscreen{left:-10000px;position:absolute}.fc-shaded{background-color:var(--fc-neutral-bg-color)}.fc-filler{opacity:.5}.fc-padding-sm{padding:2px 4px}.fc-padding-md{padding:4px 5px}.fc-padding-lg{padding:8px}.fc-justify-center{justify-content:center}.fc-align-center{align-items:center}.fc-align-start{align-items:flex-start}.fc-footer-scrollbar-sticky{bottom:0;position:sticky;z-index:3}.fc-footer-scrollbar>.fc-scroller{margin-top:-1px}.fc-footer-scrollbar>.fc-scroller>*{height:1px}.fc-navlink{cursor:pointer}.fc-navlink:hover{text-decoration:underline}.fc-view-outer{position:relative}.fc-view-outer-liquid,.fc-view-outer-static{display:flex;flex-direction:column}.fc-view-outer-liquid,.fc-view-outer-liquid>.fc-view,.fc-view-outer-static>.fc-view{flex-basis:0;flex-grow:1;min-height:0;min-width:0}.fc-view-outer-aspect-ratio>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.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-selected:before{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected,.fc-event:focus:not(.fc-list-event){box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:after,.fc-event:focus:not(.fc-list-event):after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\"\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-event-inner{position:relative;z-index:2}.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-bg-event,.fc-highlight,.fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc-non-business{background:var(--fc-non-business-color)}.fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc-highlight{background:var(--fc-highlight-color)}.fc-day-disabled{background:var(--fc-neutral-bg-color)}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:flex;flex-direction:column;position:relative}.fc-h-event.fc-event-mirror{z-index:1}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-h-event .fc-event-inner{color:var(--fc-event-text-color);display:flex;flex-direction:row}.fc-h-event .fc-event-time,.fc-h-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-media-print .fc-h-event .fc-event-time,.fc-media-print .fc-h-event .fc-event-title{overflow:hidden!important;white-space:nowrap!important}.fc-h-event .fc-event-title-outer{display:flex;flex-basis:0;flex-direction:row;flex-grow:1;min-height:0;min-width:0}.fc-h-event .fc-event-title{left:0;position:sticky;right: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-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:4}.fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc-popover-title{margin:0 2px}.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)}.fc-scroller{padding:0!important}.fc-scroller-no-bars{-ms-overflow-style:none;scrollbar-width:none}.fc-scroller-no-bars::-webkit-scrollbar{display:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}@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-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc-button{-webkit-appearance:button}.fc-button:not(:disabled){cursor:pointer}.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-button:hover{text-decoration:none}.fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc-button:disabled{opacity:.65}.fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.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-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button-primary:not(:disabled).fc-button-active,.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-button-primary:not(:disabled).fc-button-active:focus,.fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc-button-group>.fc-button.fc-button-active,.fc-button-group>.fc-button:active,.fc-button-group>.fc-button:focus,.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-toolbar{align-items:center;justify-content:space-between}.fc-toolbar,.fc-toolbar-section{display:flex;flex-direction:row;gap:.75em}.fc-toolbar-section{flex-shrink:0}.fc-toolbar-title{font-size:1.75em;font-weight:700;white-space:nowrap}";
90
90
  injectStyles(css_248z);
91
91
 
92
92
  // Stops a mouse/touch event from doing it's native browser action
@@ -887,65 +887,6 @@ var FullCalendar = (function (exports) {
887
887
  return currentRes;
888
888
  };
889
889
  }
890
- function memoizeArraylike(// used at all?
891
- workerFunc, resEquality, teardownFunc) {
892
- let currentArgSets = [];
893
- let currentResults = [];
894
- return (newArgSets) => {
895
- let currentLen = currentArgSets.length;
896
- let newLen = newArgSets.length;
897
- let i = 0;
898
- for (; i < currentLen; i += 1) {
899
- if (!newArgSets[i]) { // one of the old sets no longer exists
900
- if (teardownFunc) {
901
- teardownFunc(currentResults[i]);
902
- }
903
- }
904
- else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {
905
- if (teardownFunc) {
906
- teardownFunc(currentResults[i]);
907
- }
908
- let res = workerFunc.apply(this, newArgSets[i]);
909
- if (!resEquality || !resEquality(res, currentResults[i])) {
910
- currentResults[i] = res;
911
- }
912
- }
913
- }
914
- for (; i < newLen; i += 1) {
915
- currentResults[i] = workerFunc.apply(this, newArgSets[i]);
916
- }
917
- currentArgSets = newArgSets;
918
- currentResults.splice(newLen); // remove excess
919
- return currentResults;
920
- };
921
- }
922
- function memoizeHashlike(workerFunc, resEquality, teardownFunc) {
923
- let currentArgHash = {};
924
- let currentResHash = {};
925
- return (newArgHash) => {
926
- let newResHash = {};
927
- for (let key in newArgHash) {
928
- if (!currentResHash[key]) {
929
- newResHash[key] = workerFunc.apply(this, newArgHash[key]);
930
- }
931
- else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {
932
- if (teardownFunc) {
933
- teardownFunc(currentResHash[key]);
934
- }
935
- let res = workerFunc.apply(this, newArgHash[key]);
936
- newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))
937
- ? currentResHash[key]
938
- : res;
939
- }
940
- else {
941
- newResHash[key] = currentResHash[key];
942
- }
943
- }
944
- currentArgHash = newArgHash;
945
- currentResHash = newResHash;
946
- return newResHash;
947
- };
948
- }
949
890
 
950
891
  const EXTENDED_SETTINGS_AND_SEVERITIES = {
951
892
  week: 3,
@@ -1376,7 +1317,6 @@ var FullCalendar = (function (exports) {
1376
1317
  eventDataTransform: identity,
1377
1318
  stickyHeaderDates: identity,
1378
1319
  stickyFooterScrollbar: identity,
1379
- viewHeight: identity,
1380
1320
  defaultAllDay: Boolean,
1381
1321
  eventSourceFailure: identity,
1382
1322
  eventSourceSuccess: identity,
@@ -1417,6 +1357,7 @@ var FullCalendar = (function (exports) {
1417
1357
  allDayContent: identity,
1418
1358
  allDayDidMount: identity,
1419
1359
  allDayWillUnmount: identity,
1360
+ timedText: String,
1420
1361
  slotMinWidth: Number,
1421
1362
  navLinks: Boolean,
1422
1363
  eventTimeFormat: createFormatter,
@@ -1447,10 +1388,11 @@ var FullCalendar = (function (exports) {
1447
1388
  // only used by list-view, but languages define the value, so we need it in base options
1448
1389
  noEventsText: String,
1449
1390
  viewHint: identity,
1391
+ viewChangeHint: String,
1450
1392
  navLinkHint: identity,
1451
1393
  closeHint: String,
1452
- timeHint: String,
1453
- eventHint: String,
1394
+ eventsHint: String,
1395
+ headingLevel: Number,
1454
1396
  moreLinkClick: identity,
1455
1397
  moreLinkClassNames: identity,
1456
1398
  moreLinkContent: identity,
@@ -1515,6 +1457,7 @@ var FullCalendar = (function (exports) {
1515
1457
  eventMinWidth: 30,
1516
1458
  eventShortHeight: 30,
1517
1459
  monthStartFormat: { month: 'long', day: 'numeric' },
1460
+ headingLevel: 2, // like H2
1518
1461
  };
1519
1462
  // calendar listeners
1520
1463
  // ------------------
@@ -2392,36 +2335,31 @@ var FullCalendar = (function (exports) {
2392
2335
  };
2393
2336
  }
2394
2337
  function getDayClassName(meta) {
2395
- return joinClassNames('fc-day', `fc-day-${DAY_IDS[meta.dow]}`, meta.isDisabled
2338
+ return joinClassNames('fc-day', meta.isDisabled
2396
2339
  ? 'fc-day-disabled'
2397
- : joinClassNames(meta.isToday && 'fc-day-today', meta.isPast && 'fc-day-past', meta.isFuture && 'fc-day-future', meta.isOther && 'fc-day-other'));
2340
+ : joinClassNames(`fc-day-${DAY_IDS[meta.dow]}`, meta.isToday && 'fc-day-today', meta.isPast && 'fc-day-past', meta.isFuture && 'fc-day-future', meta.isOther && 'fc-day-other'));
2398
2341
  }
2399
2342
  function getSlotClassName(meta) {
2400
- return joinClassNames('fc-slot', `fc-slot-${DAY_IDS[meta.dow]}`, meta.isDisabled
2343
+ return joinClassNames('fc-slot', meta.isDisabled
2401
2344
  ? 'fc-slot-disabled'
2402
- : joinClassNames(meta.isToday && 'fc-slot-today', meta.isPast && 'fc-slot-past', meta.isFuture && 'fc-slot-future'));
2345
+ : joinClassNames(`fc-slot-${DAY_IDS[meta.dow]}`, meta.isToday && 'fc-slot-today', meta.isPast && 'fc-slot-past', meta.isFuture && 'fc-slot-future'));
2403
2346
  }
2404
2347
 
2405
2348
  function isDimsEqual(v0, v1) {
2406
2349
  return v0 != null && (v0 === v1 || Math.abs(v0 - v1) < 0.01);
2407
2350
  }
2408
2351
 
2409
- var n,l$1,u$1,t,i$1,o,r$1,f$1,e$1,c$1,s$1,a$1,h={},p=[],v$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function w$1(n){var l=n.parentNode;l&&l.removeChild(n);}function _(l,u,t){var i,o,r,f={};for(r in u)"key"==r?i=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return g$1(l,f,i,o,null)}function g$1(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u$1:r,__i:-1,__u:0};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function m$1(){return {current:null}}function k$1(n){return n.children}function b(n,l){this.props=n,this.context=l;}function x(n,l){if(null==l)return n.__?x(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?x(n):null}function C$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C$1(n)}}function M$1(n){(!n.__d&&(n.__d=!0)&&i$1.push(n)&&!P$1.__r++||o!==l$1.debounceRendering)&&((o=l$1.debounceRendering)||r$1)(P$1);}function P$1(){var n,u,t,o,r,e,c,s;for(i$1.sort(f$1);n=i$1.shift();)n.__d&&(u=i$1.length,o=void 0,e=(r=(t=n).__v).__e,c=[],s=[],t.__P&&((o=d({},r)).__v=r.__v+1,l$1.vnode&&l$1.vnode(o),O$1(t.__P,o,r,t.__n,t.__P.namespaceURI,32&r.__u?[e]:null,c,null==e?x(r):e,!!(32&r.__u),s),o.__v=r.__v,o.__.__k[o.__i]=o,j$2(c,o,s),o.__e!=e&&C$1(o)),i$1.length>u&&i$1.sort(f$1));P$1.__r=0;}function S(n,l,u,t,i,o,r,f,e,c,s){var a,v,y,d,w,_=t&&t.__k||p,g=l.length;for(u.__d=e,$$1(u,l,_),e=u.__d,a=0;a<g;a++)null!=(y=u.__k[a])&&"boolean"!=typeof y&&"function"!=typeof y&&(v=-1===y.__i?h:_[y.__i]||h,y.__i=a,O$1(n,y,v,i,o,r,f,e,c,s),d=y.__e,y.ref&&v.ref!=y.ref&&(v.ref&&N(v.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),65536&y.__u||v.__k===y.__k?e=I(y,e,n):"function"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=w;}function $$1(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)r=t+a,null!=(i=n.__k[t]=null==(i=l[t])||"boolean"==typeof i||"function"==typeof i?null:"string"==typeof i||"number"==typeof i||"bigint"==typeof i||i.constructor==String?g$1(null,i,null,null,null):y(i)?g$1(k$1,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?g$1(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=L$1(i,u,r,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,"function"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f==r-1?a=f-r:f==r+1?a++:f>r?s>e-r?a+=f-r:a--:f<r&&a++,f!==t+a&&(i.__u|=65536))):(o=u[r])&&null==o.key&&o.__e&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o,!1),u[r]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o));}function I(n,l,u){var t,i;if("function"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=I(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!u.contains(l)&&(l=x(n)),u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling;}while(null!=l&&8===l.nodeType);return l}function H$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(y(n)?n.some(function(n){H$1(n,l);}):l.push(n)),l}function L$1(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type&&0==(131072&e.__u))return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--;}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++;}}return -1}function T$1(n,l,u){"-"===l[0]?n.setProperty(l,null==u?"":u):n[l]=null==u?"":"number"!=typeof u||v$1.test(l)?u:u+"px";}function A$1(n,l,u,t,i){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof t&&(n.style.cssText=t=""),t)for(l in t)u&&l in u||T$1(n.style,l,"");if(u)for(l in u)t&&u[l]===t[l]||T$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/i,"$1")),l=l.toLowerCase()in n||"onFocusOut"===l||"onFocusIn"===l?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=e$1,n.addEventListener(l,o?s$1:c$1,o)):n.removeEventListener(l,o?s$1:c$1,o);else {if("http://www.w3.org/2000/svg"==i)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=l&&"height"!=l&&"href"!=l&&"list"!=l&&"form"!=l&&"tabIndex"!=l&&"download"!=l&&"rowSpan"!=l&&"colSpan"!=l&&"role"!=l&&"popover"!=l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&"-"!==l[4]?n.removeAttribute(l):n.setAttribute(l,"popover"==l&&1==u?"":u));}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=e$1++;else if(u.t<t.u)return;return t(l$1.event?l$1.event(u):u)}}}function O$1(n,u,t,i,o,r,f,e,c,s){var a,h,p,v,w,_,g,m,x,C,M,P,$,I,H,L,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l$1.__b)&&a(u);n:if("function"==typeof T)try{if(m=u.props,x="prototype"in T&&T.prototype.render,C=(a=T.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?g=(h=u.__c=t.__c).__=h.__E:(x?u.__c=h=new T(m,M):(u.__c=h=new b(m,M),h.constructor=T,h.render=q),C&&C.sub(h),h.props=m,h.state||(h.state={}),h.context=M,h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),x&&null==h.__s&&(h.__s=h.state),x&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,T.getDerivedStateFromProps(m,h.__s))),v=h.props,w=h.state,h.__v=u,p)x&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),x&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else {if(x&&null==T.getDerivedStateFromProps&&m!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,M),!h.__e&&(null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,M)||u.__v===t.__v)){for(u.__v!==t.__v&&(h.props=m,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u);}),P=0;P<h._sb.length;P++)h.__h.push(h._sb[P]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,M),x&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,w,_);});}if(h.context=M,h.props=m,h.__P=n,h.__e=!1,$=l$1.__r,I=0,x){for(h.state=h.__s,h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[];}else do{h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),h.state=h.__s;}while(h.__d&&++I<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),x&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,w)),S(n,y(L=null!=a&&a.type===k$1&&null==a.key?a.props.children:a)?L:[L],u,t,i,o,r,f,e,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&f.push(h),g&&(h.__E=h.__=null);}catch(n){if(u.__v=null,c||null!=r){for(u.__u|=c?160:32;e&&8===e.nodeType&&e.nextSibling;)e=e.nextSibling;r[r.indexOf(e)]=null,u.__e=e;}else u.__e=t.__e,u.__k=t.__k;l$1.__e(n,u,t);}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=z$2(t.__e,u,t,i,o,r,f,c,s);(a=l$1.diffed)&&a(u);}function j$2(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)N(t[i],t[++i],t[++i]);l$1.__c&&l$1.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$1.__e(n,u.__v);}});}function z$2(l,u,t,i,o,r,f,e,c){var s,a,p,v,d,_,g,m=t.props,k=u.props,b=u.type;if("svg"===b?o="http://www.w3.org/2000/svg":"math"===b?o="http://www.w3.org/1998/Math/MathML":o||(o="http://www.w3.org/1999/xhtml"),null!=r)for(s=0;s<r.length;s++)if((d=r[s])&&"setAttribute"in d==!!b&&(b?d.localName===b:3===d.nodeType)){l=d,r[s]=null;break}if(null==l){if(null===b)return document.createTextNode(k);l=document.createElementNS(o,b,k.is&&k),r=null,e=!1;}if(null===b)m===k||e&&l.data===k||(l.data=k);else {if(r=r&&n.call(l.childNodes),m=t.props||h,!e&&null!=r)for(m={},s=0;s<l.attributes.length;s++)m[(d=l.attributes[s]).name]=d.value;for(s in m)if(d=m[s],"children"==s);else if("dangerouslySetInnerHTML"==s)p=d;else if("key"!==s&&!(s in k)){if("value"==s&&"defaultValue"in k||"checked"==s&&"defaultChecked"in k)continue;A$1(l,s,null,d,o);}for(s in k)d=k[s],"children"==s?v=d:"dangerouslySetInnerHTML"==s?a=d:"value"==s?_=d:"checked"==s?g=d:"key"===s||e&&"function"!=typeof d||m[s]===d||A$1(l,s,d,m[s],o);if(a)e||p&&(a.__html===p.__html||a.__html===l.innerHTML)||(l.innerHTML=a.__html),u.__k=[];else if(p&&(l.innerHTML=""),S(l,y(v)?v:[v],u,t,i,"foreignObject"===b?"http://www.w3.org/1999/xhtml":o,r,f,r?r[0]:t.__k&&x(t,0),e,c),null!=r)for(s=r.length;s--;)null!=r[s]&&w$1(r[s]);e||(s="value",void 0!==_&&(_!==l[s]||"progress"===b&&!_||"option"===b&&_!==m[s])&&A$1(l,s,_,m[s],o),s="checked",void 0!==g&&g!==l[s]&&A$1(l,s,g,m[s],o));}return l}function N(n,u,t){try{if("function"==typeof n){var i="function"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u));}else n.current=u;}catch(n){l$1.__e(n,t);}}function V$1(n,u,t){var i,o;if(l$1.unmount&&l$1.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||N(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount();}catch(n){l$1.__e(n,u);}i.base=i.__P=null;}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&V$1(i[o],u,t||"function"!=typeof n.type);t||null==n.__e||w$1(n.__e),n.__c=n.__=n.__e=n.__d=void 0;}function q(n,l,u){return this.constructor(n,u)}function B$2(u,t,i){var o,r,f,e;l$1.__&&l$1.__(u,t),r=(o="function"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],O$1(t,u=(!o&&i||t).__k=_(k$1,null,[u]),r||h,h,t.namespaceURI,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),j$2(f,u,e);}function D$1(n,l){B$2(n,l,D$1);}function E$1(l,u,t){var i,o,r,f,e=d({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)"key"==r?i=u[r]:"ref"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),g$1(l.type,e,i||l.key,o||l.ref,null)}function G(n,l){var u={__c:l="__cC"+a$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null;},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,M$1(n);});},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=p.slice,l$1={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l;}throw n}},u$1=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=d({},this.state),"function"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M$1(this));},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M$1(this));},b.prototype.render=k$1,i$1=[],r$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f$1=function(n,l){return n.__v.__b-l.__v.__b},P$1.__r=0,e$1=0,c$1=F(!1),s$1=F(!0),a$1=0;
2352
+ var n,l$1,u$1,t,i$1,o,r$1,f$1,e$1,c$1,s$1,a$1,h={},p=[],v$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function w$1(n){var l=n.parentNode;l&&l.removeChild(n);}function _(l,u,t){var i,o,r,f={};for(r in u)"key"==r?i=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return g$1(l,f,i,o,null)}function g$1(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u$1:r,__i:-1,__u:0};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function m$1(){return {current:null}}function k$1(n){return n.children}function b(n,l){this.props=n,this.context=l;}function x(n,l){if(null==l)return n.__?x(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?x(n):null}function C$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C$1(n)}}function M$1(n){(!n.__d&&(n.__d=!0)&&i$1.push(n)&&!P$1.__r++||o!==l$1.debounceRendering)&&((o=l$1.debounceRendering)||r$1)(P$1);}function P$1(){var n,u,t,o,r,e,c,s;for(i$1.sort(f$1);n=i$1.shift();)n.__d&&(u=i$1.length,o=void 0,e=(r=(t=n).__v).__e,c=[],s=[],t.__P&&((o=d({},r)).__v=r.__v+1,l$1.vnode&&l$1.vnode(o),O$1(t.__P,o,r,t.__n,t.__P.namespaceURI,32&r.__u?[e]:null,c,null==e?x(r):e,!!(32&r.__u),s),o.__v=r.__v,o.__.__k[o.__i]=o,j$2(c,o,s),o.__e!=e&&C$1(o)),i$1.length>u&&i$1.sort(f$1));P$1.__r=0;}function S(n,l,u,t,i,o,r,f,e,c,s){var a,v,y,d,w,_=t&&t.__k||p,g=l.length;for(u.__d=e,$$1(u,l,_),e=u.__d,a=0;a<g;a++)null!=(y=u.__k[a])&&"boolean"!=typeof y&&"function"!=typeof y&&(v=-1===y.__i?h:_[y.__i]||h,y.__i=a,O$1(n,y,v,i,o,r,f,e,c,s),d=y.__e,y.ref&&v.ref!=y.ref&&(v.ref&&N(v.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),65536&y.__u||v.__k===y.__k?e=I(y,e,n):"function"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=w;}function $$1(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)r=t+a,null!=(i=n.__k[t]=null==(i=l[t])||"boolean"==typeof i||"function"==typeof i?null:"string"==typeof i||"number"==typeof i||"bigint"==typeof i||i.constructor==String?g$1(null,i,null,null,null):y(i)?g$1(k$1,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?g$1(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=L$1(i,u,r,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,"function"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f==r-1?a--:f==r+1?a++:f>r?s>e-r?a+=f-r:a--:f<r&&(f==r-a?a-=f-r:a++),f!==t+a&&(i.__u|=65536))):(o=u[r])&&null==o.key&&o.__e&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o,!1),u[r]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o));}function I(n,l,u){var t,i;if("function"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=I(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!u.contains(l)&&(l=x(n)),u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling;}while(null!=l&&8===l.nodeType);return l}function H$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(y(n)?n.some(function(n){H$1(n,l);}):l.push(n)),l}function L$1(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type&&0==(131072&e.__u))return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--;}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++;}}return -1}function T$1(n,l,u){"-"===l[0]?n.setProperty(l,null==u?"":u):n[l]=null==u?"":"number"!=typeof u||v$1.test(l)?u:u+"px";}function A$1(n,l,u,t,i){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof t&&(n.style.cssText=t=""),t)for(l in t)u&&l in u||T$1(n.style,l,"");if(u)for(l in u)t&&u[l]===t[l]||T$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/i,"$1")),l=l.toLowerCase()in n||"onFocusOut"===l||"onFocusIn"===l?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=e$1,n.addEventListener(l,o?s$1:c$1,o)):n.removeEventListener(l,o?s$1:c$1,o);else {if("http://www.w3.org/2000/svg"==i)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=l&&"height"!=l&&"href"!=l&&"list"!=l&&"form"!=l&&"tabIndex"!=l&&"download"!=l&&"rowSpan"!=l&&"colSpan"!=l&&"role"!=l&&"popover"!=l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&"-"!==l[4]?n.removeAttribute(l):n.setAttribute(l,"popover"==l&&1==u?"":u));}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=e$1++;else if(u.t<t.u)return;return t(l$1.event?l$1.event(u):u)}}}function O$1(n,u,t,i,o,r,f,e,c,s){var a,h,p,v,w,_,g,m,x,C,M,P,$,I,H,L,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l$1.__b)&&a(u);n:if("function"==typeof T)try{if(m=u.props,x="prototype"in T&&T.prototype.render,C=(a=T.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?g=(h=u.__c=t.__c).__=h.__E:(x?u.__c=h=new T(m,M):(u.__c=h=new b(m,M),h.constructor=T,h.render=q),C&&C.sub(h),h.props=m,h.state||(h.state={}),h.context=M,h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),x&&null==h.__s&&(h.__s=h.state),x&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,T.getDerivedStateFromProps(m,h.__s))),v=h.props,w=h.state,h.__v=u,p)x&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),x&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else {if(x&&null==T.getDerivedStateFromProps&&m!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,M),!h.__e&&(null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,M)||u.__v===t.__v)){for(u.__v!==t.__v&&(h.props=m,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u);}),P=0;P<h._sb.length;P++)h.__h.push(h._sb[P]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,M),x&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,w,_);});}if(h.context=M,h.props=m,h.__P=n,h.__e=!1,$=l$1.__r,I=0,x){for(h.state=h.__s,h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[];}else do{h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),h.state=h.__s;}while(h.__d&&++I<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),x&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,w)),S(n,y(L=null!=a&&a.type===k$1&&null==a.key?a.props.children:a)?L:[L],u,t,i,o,r,f,e,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&f.push(h),g&&(h.__E=h.__=null);}catch(n){if(u.__v=null,c||null!=r){for(u.__u|=c?160:32;e&&8===e.nodeType&&e.nextSibling;)e=e.nextSibling;r[r.indexOf(e)]=null,u.__e=e;}else u.__e=t.__e,u.__k=t.__k;l$1.__e(n,u,t);}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=z$2(t.__e,u,t,i,o,r,f,c,s);(a=l$1.diffed)&&a(u);}function j$2(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)N(t[i],t[++i],t[++i]);l$1.__c&&l$1.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$1.__e(n,u.__v);}});}function z$2(l,u,t,i,o,r,f,e,c){var s,a,p,v,d,_,g,m=t.props,k=u.props,b=u.type;if("svg"===b?o="http://www.w3.org/2000/svg":"math"===b?o="http://www.w3.org/1998/Math/MathML":o||(o="http://www.w3.org/1999/xhtml"),null!=r)for(s=0;s<r.length;s++)if((d=r[s])&&"setAttribute"in d==!!b&&(b?d.localName===b:3===d.nodeType)){l=d,r[s]=null;break}if(null==l){if(null===b)return document.createTextNode(k);l=document.createElementNS(o,b,k.is&&k),r=null,e=!1;}if(null===b)m===k||e&&l.data===k||(l.data=k);else {if(r=r&&n.call(l.childNodes),m=t.props||h,!e&&null!=r)for(m={},s=0;s<l.attributes.length;s++)m[(d=l.attributes[s]).name]=d.value;for(s in m)if(d=m[s],"children"==s);else if("dangerouslySetInnerHTML"==s)p=d;else if("key"!==s&&!(s in k)){if("value"==s&&"defaultValue"in k||"checked"==s&&"defaultChecked"in k)continue;A$1(l,s,null,d,o);}for(s in k)d=k[s],"children"==s?v=d:"dangerouslySetInnerHTML"==s?a=d:"value"==s?_=d:"checked"==s?g=d:"key"===s||e&&"function"!=typeof d||m[s]===d||A$1(l,s,d,m[s],o);if(a)e||p&&(a.__html===p.__html||a.__html===l.innerHTML)||(l.innerHTML=a.__html),u.__k=[];else if(p&&(l.innerHTML=""),S(l,y(v)?v:[v],u,t,i,"foreignObject"===b?"http://www.w3.org/1999/xhtml":o,r,f,r?r[0]:t.__k&&x(t,0),e,c),null!=r)for(s=r.length;s--;)null!=r[s]&&w$1(r[s]);e||(s="value",void 0!==_&&(_!==l[s]||"progress"===b&&!_||"option"===b&&_!==m[s])&&A$1(l,s,_,m[s],o),s="checked",void 0!==g&&g!==l[s]&&A$1(l,s,g,m[s],o));}return l}function N(n,u,t){try{if("function"==typeof n){var i="function"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u));}else n.current=u;}catch(n){l$1.__e(n,t);}}function V$1(n,u,t){var i,o;if(l$1.unmount&&l$1.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||N(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount();}catch(n){l$1.__e(n,u);}i.base=i.__P=null;}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&V$1(i[o],u,t||"function"!=typeof n.type);t||null==n.__e||w$1(n.__e),n.__c=n.__=n.__e=n.__d=void 0;}function q(n,l,u){return this.constructor(n,u)}function B$2(u,t,i){var o,r,f,e;l$1.__&&l$1.__(u,t),r=(o="function"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],O$1(t,u=(!o&&i||t).__k=_(k$1,null,[u]),r||h,h,t.namespaceURI,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),j$2(f,u,e);}function D$1(n,l){B$2(n,l,D$1);}function E$1(l,u,t){var i,o,r,f,e=d({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)"key"==r?i=u[r]:"ref"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),g$1(l.type,e,i||l.key,o||l.ref,null)}function G(n,l){var u={__c:l="__cC"+a$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null;},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,M$1(n);});},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=p.slice,l$1={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l;}throw n}},u$1=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=d({},this.state),"function"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M$1(this));},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M$1(this));},b.prototype.render=k$1,i$1=[],r$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f$1=function(n,l){return n.__v.__b-l.__v.__b},P$1.__r=0,e$1=0,c$1=F(!1),s$1=F(!0),a$1=0;
2410
2353
 
2411
2354
  var r,u,i,f=[],c=l$1,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function j$1(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z$1),n.__H.__h.forEach(B$1),n.__H.__h=[];}catch(t){n.__H.__h=[],c.__e(t,n.__v);}}c.__b=function(n){r=null,e&&e(n);},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t);},c.__r=function(n){a&&a(n);var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.i=n.__N=void 0;})):(i.__h.forEach(z$1),i.__h.forEach(B$1),i.__h=[],0)),u=r;},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j$1)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.i=void 0;})),u=r=null;},c.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z$1),n.__h=n.__h.filter(function(n){return !n.__||B$1(n)});}catch(r){t.some(function(n){n.__h&&(n.__h=[]);}),t=[],c.__e(r,n.__v);}}),l&&l(n,t);},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z$1(n);}catch(n){t=n;}}),r.__H=void 0,t&&c.__e(t,r.__v));};var k="function"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);k&&(t=requestAnimationFrame(r));}function z$1(n){var t=r,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r=t;}function B$1(n){var t=r;n.__c=n.__(),r=t;}
2412
2355
 
2413
- function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function C(n,t){this.props=n,this.context=t;}(C.prototype=new b).isPureReactComponent=!0,C.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var R=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),R&&R(n);};var M=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);M(n,t,e,r);};var T=l$1.unmount;function A(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return A(n,t,e)})),n}function D(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return D(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function L(){this.__u=0,this.t=null,this.__b=null;}function O(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function U(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),T&&T(n);},(L.prototype=new b).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=O(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(c):c());};e.__R=i;var c=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=D(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate();}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i);},L.prototype.componentWillUnmount=function(){this.t=[];},L.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=A(this.__b,r,o.__O=o.__P);}this.__b=null;}var i=e.__a&&_(k$1,null,n.fallback);return i&&(i.__u&=-33),[_(k$1,null,e.__a?null:n.children),i]};var V=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};function W(n){return this.getChildContext=function(){return n.context},n.children}function P(n){var e=this,r=n.i;e.componentWillUnmount=function(){B$2(null,e.l),e.l=null,e.i=null;},e.i&&e.i!==r&&e.componentWillUnmount(),e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],contains:function(){return !0},appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n);},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n);},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n);}}),B$2(_(W,{context:e.context},n.__v),e.l);}function j(n,e){var r=_(P,{__v:n,i:e});return r.containerInfo=e,r}(U.prototype=new b).__a=function(n){var t=this,e=O(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),V(t,n,r)):u();};e?e(o):o();}},U.prototype.render=function(n){this.u=null,this.o=new Map;var t=H$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},U.prototype.componentDidUpdate=U.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){V(n,e,t);});};var z="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Z=/[A-Z0-9]/g,Y="undefined"!=typeof document,$=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};b.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(b.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n});}});});var J=l$1.event;function K(){}function Q(){return this.cancelBubble}function X(){return this.defaultPrevented}l$1.event=function(n){return J&&(n=J(n)),n.persist=K,n.isPropagationStopped=Q,n.isDefaultPrevented=X,n.nativeEvent=n};var tn={enumerable:!1,configurable:!0,get:function(){return this.class}},en=l$1.vnode;l$1.vnode=function(n){"string"==typeof n.type&&function(n){var t=n.props,e=n.type,u={};for(var o in t){var i=t[o];if(!("value"===o&&"defaultValue"in t&&null==i||Y&&"children"===o&&"noscript"===e||"class"===o||"className"===o)){var c=o.toLowerCase();"defaultValue"===o&&"value"in t&&null==t.value?o="value":"download"===o&&!0===i?i="":"translate"===c&&"no"===i?i=!1:"ondoubleclick"===c?o="ondblclick":"onchange"!==c||"input"!==e&&"textarea"!==e||$(t.type)?"onfocus"===c?o="onfocusin":"onblur"===c?o="onfocusout":H.test(o)?o=c:-1===e.indexOf("-")&&B.test(o)?o=o.replace(Z,"-$&").toLowerCase():null===i&&(i=void 0):c=o="oninput","oninput"===c&&u[o=c]&&(o="oninputCapture"),u[o]=i;}}"select"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value);})),"select"==e&&null!=u.defaultValue&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value;})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,"className",tn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u;}(n),n.$$typeof=z,en&&en(n);};var rn=l$1.__r;l$1.__r=function(n){rn&&rn(n),n.__c;};var un=l$1.diffed;l$1.diffed=function(n){un&&un(n);var t=n.props,e=n.__e;null!=e&&"textarea"===n.type&&"value"in t&&t.value!==e.value&&(e.value=null==t.value?"":t.value);};
2356
+ function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function C(n,t){this.props=n,this.context=t;}(C.prototype=new b).isPureReactComponent=!0,C.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var R=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),R&&R(n);};var M=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);M(n,t,e,r);};var T=l$1.unmount;function A(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return A(n,t,e)})),n}function D(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return D(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function L(){this.__u=0,this.t=null,this.__b=null;}function O(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function U(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),T&&T(n);},(L.prototype=new b).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=O(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(c):c());};e.__R=i;var c=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=D(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate();}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i);},L.prototype.componentWillUnmount=function(){this.t=[];},L.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=A(this.__b,r,o.__O=o.__P);}this.__b=null;}var i=e.__a&&_(k$1,null,n.fallback);return i&&(i.__u&=-33),[_(k$1,null,e.__a?null:n.children),i]};var V=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};function W(n){return this.getChildContext=function(){return n.context},n.children}function P(n){var e=this,r=n.i;e.componentWillUnmount=function(){B$2(null,e.l),e.l=null,e.i=null;},e.i&&e.i!==r&&e.componentWillUnmount(),e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],contains:function(){return !0},appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n);},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n);},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n);}}),B$2(_(W,{context:e.context},n.__v),e.l);}function j(n,e){var r=_(P,{__v:n,i:e});return r.containerInfo=e,r}(U.prototype=new b).__a=function(n){var t=this,e=O(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),V(t,n,r)):u();};e?e(o):o();}},U.prototype.render=function(n){this.u=null,this.o=new Map;var t=H$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},U.prototype.componentDidUpdate=U.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){V(n,e,t);});};var z="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Z=/[A-Z0-9]/g,Y="undefined"!=typeof document,$=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};b.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(b.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n});}});});var J=l$1.event;function K(){}function Q(){return this.cancelBubble}function X(){return this.defaultPrevented}l$1.event=function(n){return J&&(n=J(n)),n.persist=K,n.isPropagationStopped=Q,n.isDefaultPrevented=X,n.nativeEvent=n};var tn={enumerable:!1,configurable:!0,get:function(){return this.class}},en=l$1.vnode;l$1.vnode=function(n){"string"==typeof n.type&&function(n){var t=n.props,e=n.type,u={},o=-1===e.indexOf("-");for(var i in t){var c=t[i];if(!("value"===i&&"defaultValue"in t&&null==c||Y&&"children"===i&&"noscript"===e||"class"===i||"className"===i)){var l=i.toLowerCase();"defaultValue"===i&&"value"in t&&null==t.value?i="value":"download"===i&&!0===c?c="":"translate"===l&&"no"===c?c=!1:"o"===l[0]&&"n"===l[1]?"ondoubleclick"===l?i="ondblclick":"onchange"!==l||"input"!==e&&"textarea"!==e||$(t.type)?"onfocus"===l?i="onfocusin":"onblur"===l?i="onfocusout":H.test(i)&&(i=l):l=i="oninput":o&&B.test(i)?i=i.replace(Z,"-$&").toLowerCase():null===c&&(c=void 0),"oninput"===l&&u[i=l]&&(i="oninputCapture"),u[i]=c;}}"select"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value);})),"select"==e&&null!=u.defaultValue&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value;})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,"className",tn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u;}(n),n.$$typeof=z,en&&en(n);};var rn=l$1.__r;l$1.__r=function(n){rn&&rn(n),n.__c;};var un=l$1.diffed;l$1.diffed=function(n){un&&un(n);var t=n.props,e=n.__e;null!=e&&"textarea"===n.type&&"value"in t&&t.value!==e.value&&(e.value=null==t.value?"":t.value);};
2414
2357
 
2415
2358
  /*
2416
- NOTE: this can be a public API, especially createElement for hooks.
2417
- See examples/typescript-scheduler/src/index.ts
2418
- */
2419
- /*
2420
- HACK for flushSync being a noop:
2421
- https://github.com/preactjs/preact/issues/3929
2359
+ Like flushSync, but flushes ALL pending updates, not only those initiated in a callback
2360
+ BTW, flushSync doesn't work in Preact: https://github.com/preactjs/preact/issues/3929
2422
2361
  */
2423
- function flushSync(renderActionToFlush) {
2424
- renderActionToFlush();
2362
+ function flushUpdates() {
2425
2363
  let oldDebounceRendering = l$1.debounceRendering; // orig
2426
2364
  let callbackQ = [];
2427
2365
  function execCallbackSync(callback) {
@@ -2434,6 +2372,10 @@ var FullCalendar = (function (exports) {
2434
2372
  }
2435
2373
  l$1.debounceRendering = oldDebounceRendering;
2436
2374
  }
2375
+ function flushSync(f) {
2376
+ f();
2377
+ flushUpdates();
2378
+ }
2437
2379
  /*
2438
2380
  Triggers a state-change which unclogs the render queue? Needed?
2439
2381
  */
@@ -2441,43 +2383,12 @@ var FullCalendar = (function (exports) {
2441
2383
  render() { return _('div', {}); }
2442
2384
  componentDidMount() { this.setState({}); }
2443
2385
  }
2444
- /*
2445
- HACK for Preact wrongly calling shouldComponentUpdate during context changes:
2446
- https://github.com/preactjs/preact/issues/2510
2447
- */
2448
- function createContext(defaultValue) {
2449
- let ContextType = G(defaultValue);
2450
- let origProvider = ContextType.Provider;
2451
- ContextType.Provider = function () {
2452
- let isNew = !this.getChildContext;
2453
- let children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params
2454
- if (isNew) {
2455
- let subs = [];
2456
- this.shouldComponentUpdate = (_props) => {
2457
- if (this.props.value !== _props.value) {
2458
- subs.forEach((c) => {
2459
- c.context = _props.value;
2460
- c.forceUpdate();
2461
- });
2462
- }
2463
- };
2464
- this.sub = (c) => {
2465
- subs.push(c);
2466
- let old = c.componentWillUnmount;
2467
- c.componentWillUnmount = () => {
2468
- subs.splice(subs.indexOf(c), 1);
2469
- old && old.call(c);
2470
- };
2471
- };
2472
- }
2473
- return children;
2474
- };
2475
- return ContextType;
2476
- }
2386
+ const createContext = G;
2477
2387
  const preactOptions = l$1;
2478
2388
 
2479
2389
  var preact = {
2480
2390
  __proto__: null,
2391
+ flushUpdates: flushUpdates,
2481
2392
  flushSync: flushSync,
2482
2393
  createContext: createContext,
2483
2394
  preactOptions: preactOptions,
@@ -2522,21 +2433,15 @@ var FullCalendar = (function (exports) {
2522
2433
  so we can skip this.
2523
2434
  */
2524
2435
  function checkConfigMap() {
2436
+ let anyDirty = true;
2525
2437
  if (!isHandling) {
2526
2438
  isHandling = true;
2527
2439
  const dirtyConfigs = [];
2528
2440
  for (const [el, config] of configMap.entries()) {
2529
- let width;
2530
- let height;
2531
- if (config.client) {
2532
- width = el.clientWidth;
2533
- height = el.clientHeight;
2534
- }
2535
- else {
2536
- ({ width, height } = el.getBoundingClientRect());
2537
- }
2441
+ const { width, height } = el.getBoundingClientRect();
2538
2442
  if (storeConfigDims(config, width, height)) {
2539
2443
  dirtyConfigs.push(config);
2444
+ anyDirty = true;
2540
2445
  }
2541
2446
  }
2542
2447
  for (const dirtyConfig of dirtyConfigs) {
@@ -2545,6 +2450,7 @@ var FullCalendar = (function (exports) {
2545
2450
  flushAfterSize();
2546
2451
  isHandling = false;
2547
2452
  }
2453
+ return anyDirty;
2548
2454
  }
2549
2455
  function storeConfigDims(config, width, height) {
2550
2456
  let shouldFire = false;
@@ -2572,11 +2478,7 @@ var FullCalendar = (function (exports) {
2572
2478
  const config = configMap.get(el);
2573
2479
  let width;
2574
2480
  let height;
2575
- if (config.client) {
2576
- width = el.clientWidth;
2577
- height = el.clientHeight;
2578
- }
2579
- else if (entry.borderBoxSize && nativeBorderBoxEnabled) {
2481
+ if (entry.borderBoxSize && nativeBorderBoxEnabled) {
2580
2482
  const borderBoxSize = entry.borderBoxSize[0] || entry.borderBoxSize; // HACK for Firefox
2581
2483
  width = borderBoxSize.inlineSize;
2582
2484
  height = borderBoxSize.blockSize;
@@ -2591,12 +2493,11 @@ var FullCalendar = (function (exports) {
2591
2493
  flushAfterSize();
2592
2494
  isHandling = false;
2593
2495
  });
2594
- function watchSize(el, callback, client, watchWidth = true, watchHeight = true) {
2595
- configMap.set(el, { callback, client, watchWidth, watchHeight });
2496
+ function watchSize(el, callback, watchWidth = true, watchHeight = true) {
2497
+ configMap.set(el, { callback, watchWidth, watchHeight });
2596
2498
  globalResizeObserver.observe(el, {
2597
- box: !client && nativeBorderBoxEnabled
2598
- ? 'border-box'
2599
- : undefined // default is 'content-box'
2499
+ box: 'border-box'
2500
+ // default is 'content-box'
2600
2501
  });
2601
2502
  return () => {
2602
2503
  configMap.delete(el);
@@ -2638,13 +2539,13 @@ var FullCalendar = (function (exports) {
2638
2539
  const [requestCheckSizes, cancelCheckSizes] = debounce(checkConfigMap, fallbackTimeout);
2639
2540
  function requestCheckSizesSync() {
2640
2541
  cancelCheckSizes();
2641
- checkConfigMap();
2542
+ return checkConfigMap();
2642
2543
  }
2643
- function watchSize(el, callback, client, watchWidth = true, watchHeight = true) {
2544
+ function watchSize(el, callback, watchWidth = true, watchHeight = true) {
2644
2545
  if (!configMap.size) {
2645
2546
  addGlobalHandlers();
2646
2547
  }
2647
- configMap.set(el, { callback, client, watchWidth, watchHeight });
2548
+ configMap.set(el, { callback, watchWidth, watchHeight });
2648
2549
  requestCheckSizes();
2649
2550
  return () => {
2650
2551
  configMap.delete(el);
@@ -2760,7 +2661,7 @@ var FullCalendar = (function (exports) {
2760
2661
  PRECONDITION: element can only have one listener attached
2761
2662
 
2762
2663
  NOTE: If we ever kill the fallback technique and use ResizeObserver unconditionally with full
2763
- border-box support, we no longer need wrappers around the <StickyFooterScrollbar>'s <Scroller>
2664
+ border-box support, we no longer need wrappers around the <FooterScrollbar>'s <Scroller>
2764
2665
  */
2765
2666
  const [watchSize, updateSizeSync] = typeof ResizeObserver !== 'undefined'
2766
2667
  ? initNative()
@@ -2777,81 +2678,32 @@ var FullCalendar = (function (exports) {
2777
2678
 
2778
2679
  const DAY_FORMAT = createFormatter({ year: 'numeric', month: 'long', day: 'numeric' });
2779
2680
  const WEEK_FORMAT = createFormatter({ week: 'long' });
2780
- function buildNavLinkAttrs(context, dateMarker, viewType = 'day', isTabbable = true) {
2681
+ function buildDateStr(context, dateMarker, viewType = 'day') {
2682
+ return context.dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT);
2683
+ }
2684
+ /*
2685
+ Assumes navLinks enabled
2686
+ Always hidden to screen readers. Do not point aria-labelledby at this. Use aria-label instead.
2687
+ */
2688
+ function buildNavLinkAttrs(context, dateMarker, viewType = 'day', dateStr = buildDateStr(context, dateMarker, viewType), isTabbable = true) {
2781
2689
  const { dateEnv, options, calendarApi } = context;
2782
- let dateStr = dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT);
2783
- if (options.navLinks) {
2784
- let zonedDate = dateEnv.toDate(dateMarker);
2785
- const handleInteraction = (ev) => {
2786
- let customAction = viewType === 'day' ? options.navLinkDayClick :
2787
- viewType === 'week' ? options.navLinkWeekClick : null;
2788
- if (typeof customAction === 'function') {
2789
- customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
2790
- }
2791
- else {
2792
- if (typeof customAction === 'string') {
2793
- viewType = customAction;
2794
- }
2795
- calendarApi.zoomTo(dateMarker, viewType);
2690
+ const zonedDate = dateEnv.toDate(dateMarker);
2691
+ const handleInteraction = (ev) => {
2692
+ let customAction = viewType === 'day' ? options.navLinkDayClick :
2693
+ viewType === 'week' ? options.navLinkWeekClick : null;
2694
+ if (typeof customAction === 'function') {
2695
+ customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
2696
+ }
2697
+ else {
2698
+ if (typeof customAction === 'string') {
2699
+ viewType = customAction;
2796
2700
  }
2797
- };
2798
- return Object.assign({ title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'data-navlink': '' }, (isTabbable
2799
- ? createAriaClickAttrs(handleInteraction)
2800
- : { onClick: handleInteraction }));
2801
- }
2802
- return { 'aria-label': dateStr };
2803
- }
2804
-
2805
- let _isRtlScrollbarOnLeft = null;
2806
- function getIsRtlScrollbarOnLeft() {
2807
- if (_isRtlScrollbarOnLeft === null) {
2808
- _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();
2809
- }
2810
- return _isRtlScrollbarOnLeft;
2811
- }
2812
- function computeIsRtlScrollbarOnLeft() {
2813
- let outerEl = document.createElement('div');
2814
- applyStyle(outerEl, {
2815
- position: 'absolute',
2816
- top: -1000,
2817
- left: 0,
2818
- border: 0,
2819
- padding: 0,
2820
- overflow: 'scroll',
2821
- direction: 'rtl',
2822
- });
2823
- outerEl.innerHTML = '<div></div>';
2824
- document.body.appendChild(outerEl);
2825
- let innerEl = outerEl.firstChild;
2826
- let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;
2827
- outerEl.remove();
2828
- return res;
2829
- }
2830
-
2831
- let _scrollbarWidths;
2832
- function getScrollbarWidths() {
2833
- if (!_scrollbarWidths) {
2834
- _scrollbarWidths = computeScrollbarWidths();
2835
- }
2836
- return _scrollbarWidths;
2837
- }
2838
- function computeScrollbarWidths() {
2839
- let el = document.createElement('div');
2840
- el.style.overflow = 'scroll';
2841
- el.style.position = 'absolute';
2842
- el.style.top = '-9999px';
2843
- el.style.left = '-9999px';
2844
- document.body.appendChild(el);
2845
- let res = computeScrollbarWidthsForEl(el);
2846
- document.body.removeChild(el);
2847
- return res;
2848
- }
2849
- // WARNING: will include border
2850
- function computeScrollbarWidthsForEl(el) {
2851
- return {
2852
- x: el.offsetHeight - el.clientHeight,
2853
- y: el.offsetWidth - el.clientWidth,
2701
+ calendarApi.zoomTo(dateMarker, viewType);
2702
+ }
2854
2703
  };
2704
+ return Object.assign({ 'role': 'link', 'aria-label': formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'className': 'fc-navlink' }, (isTabbable
2705
+ ? createAriaClickAttrs(handleInteraction)
2706
+ : { onClick: handleInteraction }));
2855
2707
  }
2856
2708
 
2857
2709
  function computeEdges(el, getPadding = false) {
@@ -2872,7 +2724,7 @@ var FullCalendar = (function (exports) {
2872
2724
  scrollbarLeft: 0,
2873
2725
  scrollbarRight: 0,
2874
2726
  };
2875
- if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?
2727
+ if (computedStyle.direction === 'rtl') {
2876
2728
  res.scrollbarLeft = scrollbarLeftRight;
2877
2729
  }
2878
2730
  else {
@@ -2941,6 +2793,13 @@ var FullCalendar = (function (exports) {
2941
2793
  }
2942
2794
  return parents;
2943
2795
  }
2796
+ // WARNING: will include border
2797
+ function computeScrollbarWidthsForEl(el) {
2798
+ return {
2799
+ x: el.offsetHeight - el.clientHeight,
2800
+ y: el.offsetWidth - el.clientWidth,
2801
+ };
2802
+ }
2944
2803
 
2945
2804
  /*
2946
2805
  given a function that resolves a result asynchronously.
@@ -3346,7 +3205,7 @@ var FullCalendar = (function (exports) {
3346
3205
  isValidDateDownEl(el) {
3347
3206
  return !el.closest('.fc-event:not(.fc-bg-event)') &&
3348
3207
  !el.closest('.fc-more-link') && // a "more.." link
3349
- !el.closest('a[data-navlink]') && // a clickable nav link
3208
+ !el.closest('.fc-navlink') && // a clickable nav link
3350
3209
  !el.closest('.fc-popover'); // hack
3351
3210
  }
3352
3211
  }
@@ -4359,8 +4218,19 @@ var FullCalendar = (function (exports) {
4359
4218
  if (displayEventEnd == null) {
4360
4219
  displayEventEnd = defaultDisplayEventEnd !== false;
4361
4220
  }
4362
- const startDate = (!isStart && slicedStart) ? slicedStart : eventRange.instance.range.start;
4363
- const endDate = (!isEnd && slicedEnd) ? slicedEnd : eventRange.instance.range.end;
4221
+ const startDate = (!isStart &&
4222
+ slicedStart &&
4223
+ // if seg is the first seg, but start-date cut-off by slotMinTime, (technically isStart=false)
4224
+ // we still want to display the original start-time
4225
+ startOfDay(slicedStart).valueOf() !== startOfDay(eventRange.instance.range.start).valueOf())
4226
+ ? slicedStart
4227
+ : eventRange.instance.range.start;
4228
+ const endDate = (!isEnd &&
4229
+ slicedEnd &&
4230
+ // See above HACK, but for end-time
4231
+ startOfDay(addMs(slicedEnd, -1)).valueOf() !== startOfDay(addMs(eventRange.instance.range.end, -1)).valueOf())
4232
+ ? slicedEnd
4233
+ : eventRange.instance.range.end;
4364
4234
  if (displayEventTime && !def.allDay) {
4365
4235
  if (displayEventEnd && (isStart || isEnd) && def.hasEnd) {
4366
4236
  return dateEnv.formatRange(startDate, endDate, timeFormat, {
@@ -4427,11 +4297,11 @@ var FullCalendar = (function (exports) {
4427
4297
  : `${eventRange.def.defId}:${eventRange.range.start.toISOString()}`;
4428
4298
  // inverse-background events don't have specific instances. TODO: better solution
4429
4299
  }
4430
- function getEventRangeAnchorAttrs(eventRange, context) {
4300
+ function getEventTagAndAttrs(eventRange, context) {
4431
4301
  let { def, instance } = eventRange;
4432
4302
  let { url } = def;
4433
4303
  if (url) {
4434
- return { href: url };
4304
+ return ['a', { href: url }];
4435
4305
  }
4436
4306
  let { emitter, options } = context;
4437
4307
  let { eventInteractive } = options;
@@ -4441,10 +4311,11 @@ var FullCalendar = (function (exports) {
4441
4311
  eventInteractive = Boolean(emitter.hasHandlers('eventClick'));
4442
4312
  }
4443
4313
  }
4314
+ let attrs;
4444
4315
  // mock what happens in EventClicking
4445
4316
  if (eventInteractive) {
4446
4317
  // only attach keyboard-related handlers because click handler is already done in EventClicking
4447
- return createAriaKeyboardAttrs((ev) => {
4318
+ attrs = createAriaKeyboardAttrs((ev) => {
4448
4319
  emitter.trigger('eventClick', {
4449
4320
  el: ev.target,
4450
4321
  event: new EventImpl(context, def, instance),
@@ -4452,7 +4323,9 @@ var FullCalendar = (function (exports) {
4452
4323
  view: context.viewApi,
4453
4324
  });
4454
4325
  });
4326
+ attrs = Object.assign({ role: 'button' }, attrs);
4455
4327
  }
4328
+ return ['div', attrs];
4456
4329
  }
4457
4330
 
4458
4331
  const STANDARD_PROPS = {
@@ -5283,13 +5156,13 @@ var FullCalendar = (function (exports) {
5283
5156
  };
5284
5157
  this.handleBeforePrint = () => {
5285
5158
  this.setState({ forPrint: true });
5286
- flushSync(() => { }); // TODO: use noop
5159
+ flushUpdates();
5287
5160
  updateSizeSync();
5288
- flushSync(() => { }); // TODO: use noop
5161
+ flushUpdates();
5289
5162
  };
5290
5163
  this.handleAfterPrint = () => {
5291
5164
  this.setState({ forPrint: false });
5292
- flushSync(() => { }); // TODO: use noop
5165
+ flushUpdates();
5293
5166
  };
5294
5167
  }
5295
5168
  render() {
@@ -5522,12 +5395,11 @@ var FullCalendar = (function (exports) {
5522
5395
  }
5523
5396
  }
5524
5397
 
5525
- const WHEEL_EVENT_NAMES = 'wheel mousewheel DomMouseScroll MozMousePixelScroll'.split(' ');
5526
5398
  /*
5527
5399
  Fires:
5528
- - scrollStart (always user)
5529
- - scroll
5530
- - scrollEnd (always user)
5400
+ - scrollStart: (isUser) => void
5401
+ - scroll: (isUser) => void
5402
+ - scrollEnd: (isUser) => void
5531
5403
 
5532
5404
  NOTE: detection is complicated (w/ touch and wheel) because ScrollerSyncer needs to know about it,
5533
5405
  but are we sure we can't just ignore programmatic scrollTo() calls with a flag? and determine the
@@ -5537,81 +5409,107 @@ var FullCalendar = (function (exports) {
5537
5409
  constructor(el) {
5538
5410
  this.el = el;
5539
5411
  this.emitter = new Emitter();
5540
- this.isScrolling = false;
5541
- this.isTouching = false; // user currently has finger down?
5542
- this.isRecentlyWheeled = false;
5543
- this.isRecentlyScrolled = false;
5544
- this.wheelWaiter = new DelayedRunner(this._handleWheelWaited.bind(this));
5545
- this.scrollWaiter = new DelayedRunner(this._handleScrollWaited.bind(this));
5412
+ this.isScroll = false;
5413
+ this.isScrollRecent = false;
5414
+ this.isWheelRecent = false;
5415
+ this.isMouseDown = false; // user currently has mouse down?
5416
+ this.isTouchDown = false; // user currently has finger down?
5417
+ // accumulated during scroll
5418
+ this.isMouse = false;
5419
+ this.isTouch = false;
5420
+ this.isWheel = false;
5546
5421
  // Handlers
5547
5422
  // ----------------------------------------------------------------------------------------------
5548
5423
  this.handleScroll = () => {
5549
5424
  this.startScroll();
5550
- this.emitter.trigger('scroll', this.isRecentlyWheeled, this.isTouching);
5551
- this.isRecentlyScrolled = true;
5425
+ this.emitter.trigger('scroll', this.getIsUser());
5426
+ this.isScrollRecent = true;
5427
+ if (this.isMouseDown) {
5428
+ this.isMouse = true;
5429
+ }
5430
+ if (this.isTouchDown) {
5431
+ this.isTouch = true;
5432
+ }
5433
+ if (this.isWheelRecent) {
5434
+ this.isWheel = true;
5435
+ }
5552
5436
  this.scrollWaiter.request(500);
5553
5437
  };
5554
- // will fire *before* the scroll event is fired (might not cause a scroll)
5438
+ this.handleScrollWait = () => {
5439
+ this.isScrollRecent = false;
5440
+ // only end the scroll if not currently touching.
5441
+ // if touching, the scrolling will end later, on touchend.
5442
+ if (!this.isTouchDown) {
5443
+ this.endScroll();
5444
+ }
5445
+ };
5446
+ // will fire *before* the scroll event is fired (might not cause a scroll!)
5555
5447
  this.handleWheel = () => {
5556
- this.isRecentlyWheeled = true;
5448
+ this.isWheelRecent = true;
5557
5449
  this.wheelWaiter.request(500);
5558
5450
  };
5559
- // will fire *before* the scroll event is fired (might not cause a scroll)
5451
+ this.handleWheelWait = () => {
5452
+ this.isWheelRecent = false;
5453
+ };
5454
+ this.handleMouseDown = () => {
5455
+ this.isMouseDown = true;
5456
+ };
5457
+ this.handleMouseUp = () => {
5458
+ this.isMouseDown = false;
5459
+ };
5460
+ // will fire *before* the scroll event is fired (might not cause a scroll!)
5560
5461
  this.handleTouchStart = () => {
5561
- this.isTouching = true;
5462
+ this.isTouchDown = true;
5562
5463
  };
5563
5464
  this.handleTouchEnd = () => {
5564
- this.isTouching = false;
5465
+ this.isTouchDown = false;
5565
5466
  // if the user ended their touch, and the scroll area wasn't moving,
5566
- // we consider this to be the end of the scroll.
5567
- if (!this.isRecentlyScrolled) {
5568
- this.endScroll(); // won't fire if already ended
5467
+ // we consider this to be the end of the scroll
5468
+ // otherwise, wait for inertia to finish and handleScrollWait to fire
5469
+ if (!this.isScrollRecent) {
5470
+ this.endScroll();
5569
5471
  }
5570
5472
  };
5473
+ this.wheelWaiter = new DelayedRunner(this.handleWheelWait);
5474
+ this.scrollWaiter = new DelayedRunner(this.handleScrollWait);
5571
5475
  el.addEventListener('scroll', this.handleScroll);
5476
+ el.addEventListener('wheel', this.handleWheel, { passive: true });
5477
+ el.addEventListener('mousedown', this.handleMouseDown);
5478
+ el.addEventListener('mouseup', this.handleMouseUp);
5572
5479
  el.addEventListener('touchstart', this.handleTouchStart, { passive: true });
5573
5480
  el.addEventListener('touchend', this.handleTouchEnd);
5574
- for (let eventName of WHEEL_EVENT_NAMES) {
5575
- el.addEventListener(eventName, this.handleWheel, { passive: true });
5576
- }
5577
5481
  }
5578
5482
  destroy() {
5579
5483
  let { el } = this;
5580
5484
  el.removeEventListener('scroll', this.handleScroll);
5485
+ el.removeEventListener('wheel', this.handleWheel, { passive: true });
5486
+ el.removeEventListener('mousedown', this.handleMouseDown);
5487
+ el.removeEventListener('mouseup', this.handleMouseUp);
5581
5488
  el.removeEventListener('touchstart', this.handleTouchStart, { passive: true });
5582
5489
  el.removeEventListener('touchend', this.handleTouchEnd);
5583
- for (let eventName of WHEEL_EVENT_NAMES) {
5584
- el.removeEventListener(eventName, this.handleWheel, { passive: true });
5585
- }
5586
5490
  }
5587
5491
  // Start / Stop
5588
5492
  // ----------------------------------------------------------------------------------------------
5589
5493
  startScroll() {
5590
- if (!this.isScrolling) {
5591
- this.isScrolling = true;
5592
- this.emitter.trigger('scrollStart', this.isRecentlyWheeled, this.isTouching);
5494
+ if (!this.isScroll) {
5495
+ this.isScroll = true;
5496
+ this.emitter.trigger('scrollStart', this.getIsUser());
5593
5497
  }
5594
5498
  }
5595
5499
  endScroll() {
5596
- if (this.isScrolling) {
5597
- this.emitter.trigger('scrollEnd');
5598
- this.isScrolling = false;
5599
- this.isRecentlyScrolled = true;
5600
- this.isRecentlyWheeled = false;
5601
- this.scrollWaiter.clear();
5602
- this.wheelWaiter.clear();
5603
- }
5604
- }
5605
- _handleScrollWaited() {
5606
- this.isRecentlyScrolled = false;
5607
- // only end the scroll if not currently touching.
5608
- // if touching, the scrolling will end later, on touchend.
5609
- if (!this.isTouching) {
5610
- this.endScroll(); // won't fire if already ended
5500
+ if (this.isScroll) { // extra protection because might be called publicly
5501
+ this.scrollWaiter.clear(); // (same)
5502
+ this.wheelWaiter.clear(); // (same)
5503
+ this.isScroll = false;
5504
+ this.isWheelRecent = false;
5505
+ this.emitter.trigger('scrollEnd', this.getIsUser());
5506
+ this.isMouse = false;
5507
+ this.isTouch = false;
5508
+ this.isWheel = false;
5611
5509
  }
5612
5510
  }
5613
- _handleWheelWaited() {
5614
- this.isRecentlyWheeled = false;
5511
+ getIsUser() {
5512
+ return this.isWheel || this.isMouse || this.isTouch;
5615
5513
  }
5616
5514
  }
5617
5515
 
@@ -5619,37 +5517,54 @@ var FullCalendar = (function (exports) {
5619
5517
  constructor() {
5620
5518
  super(...arguments);
5621
5519
  this.handleEl = (el) => {
5622
- const { props } = this;
5623
5520
  if (this.el) {
5624
5521
  this.el = null;
5625
5522
  this.listener.destroy();
5626
- this.disconnectSize();
5627
- setRef(props.clientWidthRef, null);
5628
- setRef(props.clientHeightRef, null);
5629
- setRef(props.endScrollbarWidthRef, null);
5630
- setRef(props.bottomScrollbarWidthRef, null);
5631
5523
  }
5632
5524
  if (el) {
5633
5525
  this.el = el;
5634
5526
  this.listener = new ScrollListener(el);
5635
- this.disconnectSize = watchSize(el, (clientWidth, clientHeight) => {
5636
- const { props } = this;
5637
- const endScrollbarWidth = el.offsetWidth - clientWidth;
5638
- const bottomScrollbarWidth = el.offsetHeight - clientHeight;
5639
- if (this.currentClientWidth !== clientWidth) {
5640
- setRef(props.clientWidthRef, this.currentClientWidth = clientWidth);
5641
- }
5642
- if (this.currentClientHeight !== clientHeight) {
5643
- setRef(props.clientHeightRef, this.currentClientHeight = clientHeight);
5527
+ }
5528
+ };
5529
+ this.handleHRuler = (el) => {
5530
+ if (this.disconnectHRuler) {
5531
+ this.disconnectHRuler();
5532
+ this.disconnectHRuler = undefined;
5533
+ if (this.clientWidth !== undefined) {
5534
+ this.clientWidth = undefined;
5535
+ setRef(this.props.clientWidthRef, null);
5536
+ }
5537
+ }
5538
+ if (el) {
5539
+ this.disconnectHRuler = watchWidth(el, (clientWidth) => {
5540
+ if (clientWidth !== this.clientWidth) {
5541
+ this.clientWidth = clientWidth;
5542
+ setRef(this.props.clientWidthRef, clientWidth);
5644
5543
  }
5645
- // are these isDimsEqual calls necessary?
5646
- if (!isDimsEqual(this.currentBottomScrollbarWidth, bottomScrollbarWidth)) {
5647
- setRef(props.bottomScrollbarWidthRef, this.currentBottomScrollbarWidth = bottomScrollbarWidth);
5544
+ });
5545
+ }
5546
+ };
5547
+ this.handleVRuler = (el) => {
5548
+ if (this.disconnectVRuler) {
5549
+ this.disconnectVRuler();
5550
+ this.disconnectVRuler = undefined;
5551
+ if (this.clientHeight !== undefined) {
5552
+ this.clientHeight = undefined;
5553
+ setRef(this.props.clientHeightRef, null);
5554
+ }
5555
+ }
5556
+ if (el) {
5557
+ this.disconnectVRuler = watchHeight(el, (clientHeight) => {
5558
+ if (clientHeight !== this.clientHeight) {
5559
+ this.clientHeight = clientHeight;
5560
+ setRef(this.props.clientHeightRef, clientHeight);
5648
5561
  }
5649
- if (!isDimsEqual(this.currentEndScrollbarWidth, endScrollbarWidth)) {
5650
- setRef(props.endScrollbarWidthRef, this.currentEndScrollbarWidth = endScrollbarWidth);
5562
+ const bottomScrollbarWidth = Math.round(this.el.getBoundingClientRect().height - clientHeight);
5563
+ if (bottomScrollbarWidth !== this.bottomScrollbarWidth) {
5564
+ this.bottomScrollbarWidth = bottomScrollbarWidth;
5565
+ setRef(this.props.bottomScrollbarWidthRef, bottomScrollbarWidth);
5651
5566
  }
5652
- }, /* client(width+height) = */ true);
5567
+ });
5653
5568
  }
5654
5569
  };
5655
5570
  }
@@ -5658,7 +5573,11 @@ var FullCalendar = (function (exports) {
5658
5573
  // if there's only one axis that needs scrolling, the other axis will unintentionally have
5659
5574
  // scrollbars too if we don't force to 'hidden'
5660
5575
  const fallbackOverflow = (props.horizontal || props.vertical) ? 'hidden' : '';
5661
- return (_("div", { ref: this.handleEl, className: joinClassNames(props.className, 'fc-scroller', props.hideScrollbars && 'fc-scroller-no-bars'), style: Object.assign(Object.assign({}, props.style), { overflowX: props.horizontal ? 'auto' : fallbackOverflow, overflowY: props.vertical ? 'auto' : fallbackOverflow }) }, props.children));
5576
+ return (_("div", { ref: this.handleEl, className: joinClassNames(props.className, 'fc-scroller fc-rel', // fc-rel for children fc-fill-top/start
5577
+ props.hideScrollbars && 'fc-scroller-no-bars'), style: Object.assign(Object.assign({}, props.style), { overflowX: props.horizontal ? 'auto' : fallbackOverflow, overflowY: props.vertical ? 'auto' : fallbackOverflow }) },
5578
+ props.children,
5579
+ Boolean(props.clientWidthRef) && (_("div", { ref: this.handleHRuler, className: 'fc-fill-top' })),
5580
+ Boolean(props.clientHeightRef || props.bottomScrollbarWidthRef) && (_("div", { ref: this.handleVRuler, className: 'fc-fill-start' }))));
5662
5581
  }
5663
5582
  endScroll() {
5664
5583
  this.listener.endScroll();
@@ -5733,9 +5652,6 @@ var FullCalendar = (function (exports) {
5733
5652
  function getRtlScrollerSystem() {
5734
5653
  return _rtlScrollerSystem || (_rtlScrollerSystem = detectRtlScrollerSystem());
5735
5654
  }
5736
- /*
5737
- TODO: make this more minimal now that scrollbar-side detection isn't needed?
5738
- */
5739
5655
  function detectRtlScrollerSystem() {
5740
5656
  let el = document.createElement('div');
5741
5657
  el.style.position = 'absolute';
@@ -6237,7 +6153,7 @@ var FullCalendar = (function (exports) {
6237
6153
  }
6238
6154
 
6239
6155
  function getIsHeightAuto(options) {
6240
- return options.height === 'auto' || options.viewHeight === 'auto';
6156
+ return options.height === 'auto' || options.contentHeight === 'auto';
6241
6157
  }
6242
6158
  function getStickyHeaderDates(options) {
6243
6159
  let { stickyHeaderDates } = options;
@@ -6261,6 +6177,30 @@ var FullCalendar = (function (exports) {
6261
6177
  return ScrollerSyncer;
6262
6178
  }
6263
6179
 
6180
+ class Ruler extends BaseComponent {
6181
+ constructor() {
6182
+ super(...arguments);
6183
+ this.elRef = m$1();
6184
+ }
6185
+ render() {
6186
+ return (_("div", { ref: this.elRef }));
6187
+ }
6188
+ componentDidMount() {
6189
+ const { props } = this;
6190
+ const el = this.elRef.current;
6191
+ this.disconnectWidth = watchWidth(el, (width) => {
6192
+ setRef(props.widthRef, width);
6193
+ });
6194
+ }
6195
+ componentWillUnmount() {
6196
+ this.disconnectWidth();
6197
+ const { props } = this;
6198
+ if (props.widthRef) {
6199
+ setRef(props.widthRef, null);
6200
+ }
6201
+ }
6202
+ }
6203
+
6264
6204
  /*
6265
6205
  TODO: make API where createRefMap() called
6266
6206
  */
@@ -6553,6 +6493,8 @@ var FullCalendar = (function (exports) {
6553
6493
  class EventContainer extends BaseComponent {
6554
6494
  constructor() {
6555
6495
  super(...arguments);
6496
+ // memo
6497
+ this.buildPublicEvent = memoize((context, eventDef, eventInstance) => new EventImpl(context, eventDef, eventInstance));
6556
6498
  this.handleEl = (el) => {
6557
6499
  this.el = el;
6558
6500
  if (el) {
@@ -6566,7 +6508,9 @@ var FullCalendar = (function (exports) {
6566
6508
  const { eventRange } = props;
6567
6509
  const { ui } = eventRange;
6568
6510
  const renderProps = {
6569
- event: new EventImpl(context, eventRange.def, eventRange.instance),
6511
+ // make stable. everything else atomic
6512
+ // FYI, eventRange unfortunately gets reconstructed a lot, but def/instance is stable
6513
+ event: this.buildPublicEvent(context, eventRange.def, eventRange.instance),
6570
6514
  view: context.viewApi,
6571
6515
  timeText: props.timeText,
6572
6516
  textColor: ui.textColor,
@@ -6585,7 +6529,7 @@ var FullCalendar = (function (exports) {
6585
6529
  isDragging: Boolean(props.isDragging),
6586
6530
  isResizing: Boolean(props.isResizing),
6587
6531
  };
6588
- return (_(ContentContainer, Object.assign({}, props /* contains children */, { elRef: this.handleEl, className: joinClassNames(props.className, ...getEventClassNames(renderProps), ...eventRange.ui.classNames), renderProps: renderProps, generatorName: "eventContent", customGenerator: options.eventContent, defaultGenerator: props.defaultGenerator, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount })));
6532
+ return (_(ContentContainer, { attrs: props.attrs, className: joinClassNames(props.className, ...getEventClassNames(renderProps), ...eventRange.ui.classNames), style: props.style, elRef: this.handleEl, renderProps: renderProps, generatorName: "eventContent", customGenerator: options.eventContent, defaultGenerator: props.defaultGenerator, tag: props.tag, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount }, props.children));
6589
6533
  }
6590
6534
  componentDidUpdate(prevProps) {
6591
6535
  if (this.el && this.props.eventRange !== prevProps.eventRange) {
@@ -6603,11 +6547,11 @@ var FullCalendar = (function (exports) {
6603
6547
  const timeFormat = options.eventTimeFormat || props.defaultTimeFormat;
6604
6548
  const timeText = buildEventRangeTimeText(timeFormat, eventRange, // just for def/instance
6605
6549
  props.slicedStart, props.slicedEnd, props.isStart, props.isEnd, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);
6606
- const anchorAttrs = getEventRangeAnchorAttrs(eventRange, context);
6607
- return (_(EventContainer, Object.assign({}, props /* includes elRef */, { tag: anchorAttrs ? 'a' : 'div', style: {
6550
+ const [tag, attrs] = getEventTagAndAttrs(eventRange, context);
6551
+ return (_(EventContainer, Object.assign({}, props /* includes elRef */, { tag: tag, style: {
6608
6552
  borderColor: eventRange.ui.borderColor,
6609
6553
  backgroundColor: eventRange.ui.backgroundColor,
6610
- }, attrs: anchorAttrs, defaultGenerator: renderInnerContent$1, timeText: timeText }), (InnerContent, eventContentArg) => (_(k$1, null,
6554
+ }, attrs: attrs, defaultGenerator: renderInnerContent$1, timeText: timeText }), (InnerContent, eventContentArg) => (_(k$1, null,
6611
6555
  _(InnerContent, { tag: "div", className: 'fc-event-inner', style: { color: eventContentArg.textColor } }),
6612
6556
  Boolean(eventContentArg.isStartResizable) && (_("div", { className: "fc-event-resizer fc-event-resizer-start" })),
6613
6557
  Boolean(eventContentArg.isEndResizable) && (_("div", { className: "fc-event-resizer fc-event-resizer-end" }))))));
@@ -6641,8 +6585,7 @@ var FullCalendar = (function (exports) {
6641
6585
  let { options } = context;
6642
6586
  let renderProps = this.refineRenderProps({
6643
6587
  date: props.date,
6644
- dateProfile: props.dateProfile,
6645
- todayRange: props.todayRange,
6588
+ dateMeta: props.dateMeta,
6646
6589
  isMonthStart: props.isMonthStart || false,
6647
6590
  showDayNumber: props.showDayNumber,
6648
6591
  renderProps: props.renderProps,
@@ -6650,20 +6593,16 @@ var FullCalendar = (function (exports) {
6650
6593
  dateEnv: context.dateEnv,
6651
6594
  monthStartFormat: options.monthStartFormat,
6652
6595
  });
6653
- return (_(ContentContainer, Object.assign({}, props /* includes children */, { className: joinClassNames(props.className, getDayClassName(renderProps)), attrs: Object.assign(Object.assign({}, props.attrs), (renderProps.isDisabled ? {} : { 'data-date': formatDayString(props.date) })), renderProps: renderProps, generatorName: "dayCellContent", customGenerator: options.dayCellContent, defaultGenerator: props.defaultGenerator, classNameGenerator:
6654
- // don't use custom classNames if disabled
6655
- // TODO: make DRY with DayGridHeaderCell
6656
- renderProps.isDisabled ? undefined : options.dayCellClassNames, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount })));
6596
+ return (_(ContentContainer, Object.assign({}, props /* includes children */, { className: joinClassNames(props.className, getDayClassName(renderProps)), attrs: Object.assign(Object.assign(Object.assign({}, props.attrs), { 'data-date': formatDayString(props.date) }), (renderProps.isToday ? { 'aria-current': 'date' } : {})), renderProps: renderProps, generatorName: "dayCellContent", customGenerator: options.dayCellContent, defaultGenerator: props.defaultGenerator, classNameGenerator: options.dayCellClassNames, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount })));
6657
6597
  }
6658
6598
  }
6659
6599
  function hasCustomDayCellContent(options) {
6660
6600
  return Boolean(options.dayCellContent || hasCustomRenderingHandler('dayCellContent', options));
6661
6601
  }
6662
6602
  function refineRenderProps(raw) {
6663
- let { date, dateEnv, dateProfile, isMonthStart } = raw;
6664
- let dayMeta = getDateMeta(date, raw.todayRange, null, dateProfile);
6603
+ let { date, dateEnv, isMonthStart } = raw;
6665
6604
  let dayNumberText = raw.showDayNumber ? (dateEnv.format(date, isMonthStart ? raw.monthStartFormat : DAY_NUM_FORMAT)) : '';
6666
- return Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: raw.viewApi }, dayMeta), { isMonthStart,
6605
+ return Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: raw.viewApi }, raw.dateMeta), { isMonthStart,
6667
6606
  dayNumberText }), raw.renderProps);
6668
6607
  }
6669
6608
 
@@ -6694,12 +6633,14 @@ var FullCalendar = (function (exports) {
6694
6633
  }));
6695
6634
 
6696
6635
  const PADDING_FROM_VIEWPORT = 10;
6636
+ const ROW_BORDER_WIDTH = 1;
6697
6637
  class Popover extends BaseComponent {
6698
6638
  constructor() {
6699
6639
  super(...arguments);
6700
- this.state = {
6701
- titleId: getUniqueDomId(),
6702
- };
6640
+ this.closeRef = m$1();
6641
+ this.focusStartRef = m$1();
6642
+ this.focusEndRef = m$1();
6643
+ this.titleId = getUniqueDomId();
6703
6644
  this.handleRootEl = (el) => {
6704
6645
  this.rootEl = el;
6705
6646
  if (this.props.elRef) {
@@ -6711,15 +6652,17 @@ var FullCalendar = (function (exports) {
6711
6652
  // only hide the popover if the click happened outside the popover
6712
6653
  const target = getEventTargetViaRoot(ev);
6713
6654
  if (!this.rootEl.contains(target)) {
6714
- this.handleCloseClick();
6655
+ this.handleClose();
6715
6656
  }
6716
6657
  };
6717
6658
  this.handleDocumentKeyDown = (ev) => {
6718
6659
  if (ev.key === 'Escape') {
6719
- this.handleCloseClick();
6660
+ this.handleClose();
6720
6661
  }
6721
6662
  };
6722
- this.handleCloseClick = () => {
6663
+ // for many different close techniques
6664
+ // cannot accept params because might receive a browser Event
6665
+ this.handleClose = () => {
6723
6666
  let { onClose } = this.props;
6724
6667
  if (onClose) {
6725
6668
  onClose();
@@ -6728,21 +6671,28 @@ var FullCalendar = (function (exports) {
6728
6671
  }
6729
6672
  render() {
6730
6673
  let { theme, options } = this.context;
6731
- let { props, state } = this;
6732
- return j(_("div", Object.assign({}, props.attrs, { id: props.id, className: joinClassNames(props.className, 'fc-popover', theme.getClassName('popover')), "aria-labelledby": state.titleId, ref: this.handleRootEl }),
6674
+ let { props } = this;
6675
+ return j(_("div", Object.assign({}, props.attrs, { id: props.id, role: 'dialog', "aria-labelledby": this.titleId, className: joinClassNames(props.className, 'fc-popover', theme.getClassName('popover')), ref: this.handleRootEl }),
6676
+ _("div", { tabIndex: 0, style: { outline: 'none' }, ref: this.focusStartRef }),
6733
6677
  _("div", { className: 'fc-popover-header ' + theme.getClassName('popoverHeader') },
6734
- _("span", { className: "fc-popover-title", id: state.titleId }, props.title),
6735
- _("span", { className: 'fc-popover-close ' + theme.getIconClass('close'), title: options.closeHint, onClick: this.handleCloseClick })),
6736
- _("div", { className: 'fc-popover-body ' + theme.getClassName('popoverContent') }, props.children)), props.parentEl);
6678
+ _("div", { className: "fc-popover-title", id: this.titleId }, props.title),
6679
+ _("div", Object.assign({ role: 'button', "aria-label": options.closeHint, className: 'fc-popover-close ' + theme.getIconClass('close') }, createAriaClickAttrs(this.handleClose), { ref: this.closeRef }))),
6680
+ _("div", { className: 'fc-popover-body ' + theme.getClassName('popoverContent') }, props.children),
6681
+ _("div", { tabIndex: 0, style: { outline: 'none' }, ref: this.focusEndRef })), props.parentEl);
6737
6682
  }
6738
6683
  componentDidMount() {
6739
6684
  document.addEventListener('mousedown', this.handleDocumentMouseDown);
6740
6685
  document.addEventListener('keydown', this.handleDocumentKeyDown);
6686
+ this.focusStartRef.current.addEventListener('focus', this.handleClose);
6687
+ this.focusEndRef.current.addEventListener('focus', this.handleClose);
6688
+ this.closeRef.current.focus({ preventScroll: true });
6741
6689
  this.updateSize();
6742
6690
  }
6743
6691
  componentWillUnmount() {
6744
6692
  document.removeEventListener('mousedown', this.handleDocumentMouseDown);
6745
6693
  document.removeEventListener('keydown', this.handleDocumentKeyDown);
6694
+ this.focusStartRef.current.removeEventListener('focus', this.handleClose);
6695
+ this.focusEndRef.current.removeEventListener('focus', this.handleClose);
6746
6696
  }
6747
6697
  updateSize() {
6748
6698
  let { isRtl } = this.context;
@@ -6753,7 +6703,8 @@ var FullCalendar = (function (exports) {
6753
6703
  let popoverDims = rootEl.getBoundingClientRect();
6754
6704
  // position relative to viewport
6755
6705
  let popoverTop = alignParentTop
6756
- ? alignEl.closest(alignParentTop).getBoundingClientRect().top
6706
+ // HACK: subtract 1 for DayGrid, which has borders on row-bottom. Only view that uses alignParentTop
6707
+ ? alignEl.closest(alignParentTop).getBoundingClientRect().top - ROW_BORDER_WIDTH
6757
6708
  : alignmentRect.top;
6758
6709
  let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
6759
6710
  // constrain
@@ -6789,8 +6740,10 @@ var FullCalendar = (function (exports) {
6789
6740
  let { options, dateEnv } = this.context;
6790
6741
  let { props } = this;
6791
6742
  let { startDate, todayRange, dateProfile } = props;
6743
+ // TODO: memoize?
6744
+ let detaMeta = getDateMeta(startDate, todayRange, null, dateProfile);
6792
6745
  let title = dateEnv.format(startDate, options.dayPopoverFormat);
6793
- return (_(DayCellContainer, { elRef: this.handleRootEl, date: startDate, dateProfile: dateProfile, todayRange: todayRange }, (InnerContent, renderProps, attrs) => (_(Popover, { elRef: attrs.ref, id: props.id, title: title, attrs: attrs /* TODO: make these time-based when not whole-day? */, className: joinClassNames(attrs.className, // TODO: solve SignalLike type problem
6746
+ return (_(DayCellContainer, { elRef: this.handleRootEl, date: startDate, dateMeta: detaMeta }, (InnerContent, renderProps, attrs) => (_(Popover, { elRef: attrs.ref, id: props.id, title: title, attrs: attrs /* TODO: make these time-based when not whole-day? */, className: joinClassNames(attrs.className, // TODO: solve SignalLike type problem
6794
6747
  'fc-more-popover'), parentEl: props.parentEl, alignEl: props.alignEl, alignParentTop: props.alignParentTop, onClose: props.onClose },
6795
6748
  hasCustomDayCellContent(options) && (_(InnerContent, { tag: "div", className: 'fc-more-popover-misc' })),
6796
6749
  props.children))));
@@ -6805,7 +6758,7 @@ var FullCalendar = (function (exports) {
6805
6758
  start: props.startDate,
6806
6759
  end: props.endDate,
6807
6760
  } }, props.dateSpanProps),
6808
- dayEl: rootEl,
6761
+ getDayEl: () => rootEl,
6809
6762
  rect: {
6810
6763
  left: 0,
6811
6764
  top: 0,
@@ -6834,21 +6787,22 @@ var FullCalendar = (function (exports) {
6834
6787
  };
6835
6788
  this.handleClick = (ev) => {
6836
6789
  let { props, context } = this;
6837
- let { moreLinkClick } = context.options;
6790
+ let { dateEnv, options } = context;
6791
+ let { moreLinkClick } = options;
6838
6792
  let date = computeRange(props).start;
6839
6793
  function buildPublicSeg(seg) {
6840
6794
  let { def, instance, range } = seg.eventRange;
6841
6795
  return {
6842
6796
  event: new EventImpl(context, def, instance),
6843
- start: context.dateEnv.toDate(range.start),
6844
- end: context.dateEnv.toDate(range.end),
6797
+ start: dateEnv.toDate(range.start),
6798
+ end: dateEnv.toDate(range.end),
6845
6799
  isStart: seg.isStart,
6846
6800
  isEnd: seg.isEnd,
6847
6801
  };
6848
6802
  }
6849
6803
  if (typeof moreLinkClick === 'function') {
6850
6804
  moreLinkClick = moreLinkClick({
6851
- date,
6805
+ date: dateEnv.toDate(date),
6852
6806
  allDay: Boolean(props.allDayDate),
6853
6807
  allSegs: props.segs.map(buildPublicSeg),
6854
6808
  hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
@@ -6864,6 +6818,9 @@ var FullCalendar = (function (exports) {
6864
6818
  }
6865
6819
  };
6866
6820
  this.handlePopoverClose = () => {
6821
+ if (this.linkEl) { // was null sometimes when initiating drag-n-drop would hide the popover
6822
+ this.linkEl.focus();
6823
+ }
6867
6824
  this.setState({ isPopoverOpen: false });
6868
6825
  };
6869
6826
  }
@@ -6885,7 +6842,7 @@ var FullCalendar = (function (exports) {
6885
6842
  view: viewApi,
6886
6843
  };
6887
6844
  return (_(k$1, null,
6888
- Boolean(moreCnt) && (_(ContentContainer, { tag: props.tag || 'a', elRef: this.handleLinkEl, className: joinClassNames(props.className, 'fc-more-link'), style: props.style, attrs: Object.assign(Object.assign(Object.assign({}, props.attrs), createAriaClickAttrs(this.handleClick)), { title: hint, 'aria-expanded': state.isPopoverOpen, 'aria-controls': state.isPopoverOpen ? state.popoverId : '' }), renderProps: renderProps, generatorName: "moreLinkContent", customGenerator: options.moreLinkContent, defaultGenerator: props.defaultGenerator || renderMoreLinkInner, classNameGenerator: options.moreLinkClassNames, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, props.children)),
6845
+ Boolean(moreCnt) && (_(ContentContainer, { tag: 'div', elRef: this.handleLinkEl, className: joinClassNames(props.className, 'fc-more-link'), style: props.style, attrs: Object.assign(Object.assign(Object.assign({}, props.attrs), createAriaClickAttrs(this.handleClick)), { title: hint, 'role': 'button', 'aria-haspopup': 'dialog', 'aria-expanded': state.isPopoverOpen, 'aria-controls': state.isPopoverOpen ? state.popoverId : undefined }), renderProps: renderProps, generatorName: "moreLinkContent", customGenerator: options.moreLinkContent, defaultGenerator: props.defaultGenerator || renderMoreLinkInner, classNameGenerator: options.moreLinkClassNames, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, props.children)),
6889
6846
  state.isPopoverOpen && (_(MorePopover, { id: state.popoverId, startDate: range.start, endDate: range.end, dateProfile: props.dateProfile, todayRange: props.todayRange, dateSpanProps: props.dateSpanProps, parentEl: this.parentEl, alignEl: props.alignElRef ?
6890
6847
  props.alignElRef.current :
6891
6848
  this.linkEl, alignParentTop: props.alignParentTop, forceTimed: props.forceTimed, onClose: this.handlePopoverClose }, props.popoverContent()))));
@@ -6924,7 +6881,7 @@ var FullCalendar = (function (exports) {
6924
6881
  let { props, context } = this;
6925
6882
  let { options } = context;
6926
6883
  let renderProps = { view: context.viewApi };
6927
- return (_(ContentContainer, Object.assign({}, props, { tag: props.tag || 'div', className: joinClassNames(props.className, buildViewClassName(props.viewSpec)), renderProps: renderProps, classNameGenerator: options.viewClassNames, generatorName: undefined, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount }), () => props.children));
6884
+ return (_(ContentContainer, Object.assign({}, props, { tag: props.tag || 'div', attrs: props.attrs, className: joinClassNames(props.className, buildViewClassName(props.viewSpec)), renderProps: renderProps, classNameGenerator: options.viewClassNames, generatorName: undefined, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount }), () => props.children));
6928
6885
  }
6929
6886
  }
6930
6887
  function buildViewClassName(viewSpec) {
@@ -7007,7 +6964,10 @@ var FullCalendar = (function (exports) {
7007
6964
  callback();
7008
6965
  }
7009
6966
  updateSize() {
7010
- requestAnimationFrame(updateSizeSync);
6967
+ let cycleCount = 0;
6968
+ while (cycleCount++ < 3 && updateSizeSync()) {
6969
+ flushUpdates();
6970
+ }
7011
6971
  }
7012
6972
  // Options
7013
6973
  // -----------------------------------------------------------------------------------------------------------------
@@ -7415,7 +7375,7 @@ var FullCalendar = (function (exports) {
7415
7375
  }
7416
7376
  }
7417
7377
 
7418
- class StickyFooterScrollbar extends BaseComponent {
7378
+ class FooterScrollbar extends BaseComponent {
7419
7379
  constructor() {
7420
7380
  super(...arguments);
7421
7381
  this.rootElRef = m$1();
@@ -7426,7 +7386,7 @@ var FullCalendar = (function (exports) {
7426
7386
  // the outer dimensions change, but the inner dimensions do not. The Scroller's
7427
7387
  // dimension-watching, when used in ponyfill-mode, can't fire on border-box change, so we
7428
7388
  // workaround it by monitoring dimensions of a wrapper instead
7429
- return (_("div", { ref: this.rootElRef, className: 'fc-sticky-footer-scrollbar' },
7389
+ return (_("div", { ref: this.rootElRef, className: joinClassNames('fc-footer-scrollbar', props.isSticky && 'fc-footer-scrollbar-sticky') },
7430
7390
  _(Scroller, { horizontal: true, ref: props.scrollerRef },
7431
7391
  _("div", { style: { minWidth: props.canvasWidth } }))));
7432
7392
  }
@@ -7469,8 +7429,6 @@ var FullCalendar = (function (exports) {
7469
7429
  isArraysEqual: isArraysEqual,
7470
7430
  memoize: memoize,
7471
7431
  memoizeObjArg: memoizeObjArg,
7472
- memoizeArraylike: memoizeArraylike,
7473
- memoizeHashlike: memoizeHashlike,
7474
7432
  intersectRects: intersectRects,
7475
7433
  pointInsideRect: pointInsideRect,
7476
7434
  constrainPoint: constrainPoint,
@@ -7504,6 +7462,7 @@ var FullCalendar = (function (exports) {
7504
7462
  watchHeight: watchHeight,
7505
7463
  afterSize: afterSize,
7506
7464
  buildNavLinkAttrs: buildNavLinkAttrs,
7465
+ buildDateStr: buildDateStr,
7507
7466
  preventDefault: preventDefault,
7508
7467
  whenTransitionDone: whenTransitionDone,
7509
7468
  computeInnerRect: computeInnerRect,
@@ -7571,7 +7530,7 @@ var FullCalendar = (function (exports) {
7571
7530
  sortEventSegs: sortEventSegs,
7572
7531
  getEventRangeMeta: getEventRangeMeta,
7573
7532
  buildEventRangeKey: buildEventRangeKey,
7574
- getEventRangeAnchorAttrs: getEventRangeAnchorAttrs,
7533
+ getEventTagAndAttrs: getEventTagAndAttrs,
7575
7534
  getEventKey: getEventKey,
7576
7535
  DayTableModel: DayTableModel,
7577
7536
  Scroller: Scroller,
@@ -7590,9 +7549,8 @@ var FullCalendar = (function (exports) {
7590
7549
  getStickyHeaderDates: getStickyHeaderDates,
7591
7550
  getIsHeightAuto: getIsHeightAuto,
7592
7551
  getScrollerSyncerClass: getScrollerSyncerClass,
7593
- getScrollbarWidths: getScrollbarWidths,
7552
+ Ruler: Ruler,
7594
7553
  RefMap: RefMap,
7595
- getIsRtlScrollbarOnLeft: getIsRtlScrollbarOnLeft,
7596
7554
  NowTimer: NowTimer,
7597
7555
  StandardEvent: StandardEvent,
7598
7556
  NowIndicatorContainer: NowIndicatorContainer,
@@ -7617,7 +7575,7 @@ var FullCalendar = (function (exports) {
7617
7575
  computeEarliestStart: computeEarliestStart,
7618
7576
  computeLatestEnd: computeLatestEnd,
7619
7577
  getCoordRangeEnd: getCoordRangeEnd,
7620
- StickyFooterScrollbar: StickyFooterScrollbar
7578
+ FooterScrollbar: FooterScrollbar
7621
7579
  };
7622
7580
 
7623
7581
  const globalLocales = [];
@@ -7644,9 +7602,9 @@ var FullCalendar = (function (exports) {
7644
7602
  weekText: 'W',
7645
7603
  weekTextLong: 'Week',
7646
7604
  closeHint: 'Close',
7647
- timeHint: 'Time',
7648
- eventHint: 'Event',
7605
+ eventsHint: 'Events',
7649
7606
  allDayText: 'all-day',
7607
+ timedText: 'timed',
7650
7608
  moreLinkText: 'more',
7651
7609
  noEventsText: 'No events to display',
7652
7610
  };
@@ -7661,7 +7619,7 @@ var FullCalendar = (function (exports) {
7661
7619
  ? 'Today'
7662
7620
  : `This ${buttonText}`;
7663
7621
  },
7664
- }, viewHint: '$0 view', navLinkHint: 'Go to $0', moreLinkHint(eventCnt) {
7622
+ }, viewHint: '$0 view', viewChangeHint: 'Change view', navLinkHint: 'Go to $0', moreLinkHint(eventCnt) {
7665
7623
  return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;
7666
7624
  } });
7667
7625
  function organizeRawLocales(explicitRawLocales) {
@@ -8333,17 +8291,25 @@ var FullCalendar = (function (exports) {
8333
8291
  return { header, footer };
8334
8292
  }
8335
8293
  function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
8336
- let sectionWidgets = {};
8294
+ let isRtl = calendarOptions.direction === 'rtl';
8337
8295
  let viewsWithButtons = [];
8338
8296
  let hasTitle = false;
8339
- for (let sectionName in sectionStrHash) {
8340
- let sectionStr = sectionStrHash[sectionName];
8297
+ function processSectionStr(sectionStr) {
8341
8298
  let sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi);
8342
- sectionWidgets[sectionName] = sectionRes.widgets;
8343
8299
  viewsWithButtons.push(...sectionRes.viewsWithButtons);
8344
8300
  hasTitle = hasTitle || sectionRes.hasTitle;
8301
+ return sectionRes.widgets;
8345
8302
  }
8346
- return { sectionWidgets, viewsWithButtons, hasTitle };
8303
+ const sectionWidgets = {
8304
+ start: processSectionStr(sectionStrHash[isRtl ? 'right' : 'left'] || sectionStrHash.start || ''),
8305
+ center: processSectionStr(sectionStrHash.center || ''),
8306
+ end: processSectionStr(sectionStrHash[isRtl ? 'left' : 'right'] || sectionStrHash.end || ''),
8307
+ };
8308
+ return {
8309
+ sectionWidgets,
8310
+ viewsWithButtons,
8311
+ hasTitle,
8312
+ };
8347
8313
  }
8348
8314
  /*
8349
8315
  BAD: querying icons and text here. should be done at render time
@@ -8371,6 +8337,7 @@ var FullCalendar = (function (exports) {
8371
8337
  let buttonIcon; // only one of these will be set
8372
8338
  let buttonText; // "
8373
8339
  let buttonHint;
8340
+ let isView = false;
8374
8341
  // ^ for the title="" attribute, for accessibility
8375
8342
  if ((customButtonProps = calendarCustomButtons[buttonName])) {
8376
8343
  buttonClick = (ev) => {
@@ -8384,6 +8351,7 @@ var FullCalendar = (function (exports) {
8384
8351
  buttonHint = customButtonProps.hint || customButtonProps.text;
8385
8352
  }
8386
8353
  else if ((viewSpec = viewSpecs[buttonName])) {
8354
+ isView = true;
8387
8355
  viewsWithButtons.push(buttonName);
8388
8356
  buttonClick = () => {
8389
8357
  calendarApi.changeView(buttonName);
@@ -8421,7 +8389,7 @@ var FullCalendar = (function (exports) {
8421
8389
  ], calendarButtonText[buttonName]);
8422
8390
  }
8423
8391
  }
8424
- return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint };
8392
+ return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint, isView };
8425
8393
  })));
8426
8394
  return { widgets, viewsWithButtons, hasTitle };
8427
8395
  }
@@ -9245,27 +9213,41 @@ var FullCalendar = (function (exports) {
9245
9213
  }, ...children);
9246
9214
  }
9247
9215
  renderWidgetGroup(widgetGroup) {
9248
- let { props } = this;
9249
- let { theme } = this.context;
9216
+ let { props, context } = this;
9217
+ let { options, theme } = context;
9250
9218
  let children = [];
9251
9219
  let isOnlyButtons = true;
9220
+ let isOnlyView = true;
9221
+ for (const widget of widgetGroup) {
9222
+ const { buttonName, isView } = widget;
9223
+ if (buttonName === 'title') {
9224
+ isOnlyButtons = false;
9225
+ }
9226
+ else if (!isView) {
9227
+ isOnlyView = false;
9228
+ }
9229
+ }
9252
9230
  for (let widget of widgetGroup) {
9253
9231
  let { buttonName, buttonClick, buttonText, buttonIcon, buttonHint } = widget;
9254
9232
  if (buttonName === 'title') {
9255
- isOnlyButtons = false;
9256
- children.push(_("h2", { className: "fc-toolbar-title" }, props.title));
9233
+ children.push(_("div", { role: 'heading', "aria-level": options.headingLevel, id: props.titleId, className: 'fc-toolbar-title' }, props.title));
9257
9234
  }
9258
9235
  else {
9259
9236
  let isPressed = buttonName === props.activeButton;
9260
9237
  let isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||
9261
9238
  (!props.isPrevEnabled && buttonName === 'prev') ||
9262
9239
  (!props.isNextEnabled && buttonName === 'next');
9263
- children.push(_("button", { type: "button", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, "aria-pressed": isPressed, className: joinClassNames(`fc-${buttonName}-button`, theme.getClassName('button'), isPressed && theme.getClassName('buttonActive')), onClick: buttonClick }, buttonText || (buttonIcon ? _("span", { className: buttonIcon, role: "img" }) : '')));
9240
+ children.push(_("button", Object.assign({ type: "button", disabled: isDisabled }, ((isOnlyButtons && isOnlyView)
9241
+ ? { 'role': 'tab', 'aria-selected': isPressed }
9242
+ : { 'aria-pressed': isPressed }), { "aria-label": typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, className: joinClassNames(`fc-${buttonName}-button`, theme.getClassName('button'), isPressed && theme.getClassName('buttonActive')), onClick: buttonClick }), buttonText || (buttonIcon ? _("span", { className: buttonIcon, "aria-hidden": true }) : '')));
9264
9243
  }
9265
9244
  }
9266
9245
  if (children.length > 1) {
9267
- let groupClassName = (isOnlyButtons && theme.getClassName('buttonGroup')) || '';
9268
- return _('div', { className: groupClassName }, ...children);
9246
+ return _('div', {
9247
+ role: (isOnlyButtons && isOnlyView) ? 'tablist' : undefined,
9248
+ 'aria-label': (isOnlyButtons && isOnlyView) ? options.viewChangeHint : undefined,
9249
+ className: isOnlyButtons ? theme.getClassName('buttonGroup') : undefined,
9250
+ }, ...children);
9269
9251
  }
9270
9252
  return children[0];
9271
9253
  }
@@ -9274,33 +9256,15 @@ var FullCalendar = (function (exports) {
9274
9256
  class Toolbar extends BaseComponent {
9275
9257
  render() {
9276
9258
  let { model, className } = this.props;
9277
- let forceLtr = false;
9278
- let startContent;
9279
- let endContent;
9280
- let sectionWidgets = model.sectionWidgets;
9281
- let centerContent = sectionWidgets.center;
9282
- if (sectionWidgets.left) {
9283
- forceLtr = true;
9284
- startContent = sectionWidgets.left;
9285
- }
9286
- else {
9287
- startContent = sectionWidgets.start;
9288
- }
9289
- if (sectionWidgets.right) {
9290
- forceLtr = true;
9291
- endContent = sectionWidgets.right;
9292
- }
9293
- else {
9294
- endContent = sectionWidgets.end;
9295
- }
9296
- return (_("div", { className: joinClassNames(className, 'fc-toolbar', forceLtr && 'fc-toolbar-ltr') },
9297
- this.renderSection('start', startContent || []),
9298
- this.renderSection('center', centerContent || []),
9299
- this.renderSection('end', endContent || [])));
9259
+ let { sectionWidgets } = model;
9260
+ return (_("div", { className: joinClassNames(className, 'fc-toolbar') },
9261
+ this.renderSection('start', sectionWidgets.start),
9262
+ this.renderSection('center', sectionWidgets.center),
9263
+ this.renderSection('end', sectionWidgets.end)));
9300
9264
  }
9301
9265
  renderSection(key, widgetGroups) {
9302
9266
  let { props } = this;
9303
- return (_(ToolbarSection, { key: key, name: key, widgetGroups: widgetGroups, title: props.title, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled }));
9267
+ return (_(ToolbarSection, { key: key, name: key, widgetGroups: widgetGroups, title: props.title, titleId: props.titleId, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled }));
9304
9268
  }
9305
9269
  }
9306
9270
 
@@ -9399,6 +9363,7 @@ var FullCalendar = (function (exports) {
9399
9363
  this.buildViewPropTransformers = memoize(buildViewPropTransformers);
9400
9364
  this.buildToolbarProps = memoize(buildToolbarProps);
9401
9365
  this.interactionsStore = {};
9366
+ this.viewTitleId = getUniqueDomId();
9402
9367
  // Component Registration
9403
9368
  // -----------------------------------------------------------------------------------------------------------------
9404
9369
  this.registerInteractiveComponent = (component, settingsInput) => {
@@ -9449,9 +9414,9 @@ var FullCalendar = (function (exports) {
9449
9414
  }
9450
9415
  let viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);
9451
9416
  return (_(ViewContextType.Provider, { value: viewContext },
9452
- toolbarConfig.header && (_(Toolbar, Object.assign({ className: "fc-header-toolbar", model: toolbarConfig.header }, toolbarProps))),
9417
+ toolbarConfig.header && (_(Toolbar, Object.assign({ className: "fc-header-toolbar", model: toolbarConfig.header, titleId: this.viewTitleId }, toolbarProps))),
9453
9418
  _(ViewHarness, { height: viewHeight, heightLiquid: viewHeightLiquid, aspectRatio: viewAspectRatio },
9454
- this.renderView(props),
9419
+ this.renderView(props, toolbarProps.title),
9455
9420
  this.buildAppendContent()),
9456
9421
  toolbarConfig.footer && (_(Toolbar, Object.assign({ className: "fc-footer-toolbar", model: toolbarConfig.footer }, toolbarProps)))));
9457
9422
  }
@@ -9484,9 +9449,9 @@ var FullCalendar = (function (exports) {
9484
9449
  let children = props.pluginHooks.viewContainerAppends.map((buildAppendContent) => buildAppendContent(props));
9485
9450
  return _(k$1, {}, ...children);
9486
9451
  }
9487
- renderView(props) {
9452
+ renderView(props, title) {
9488
9453
  let { pluginHooks } = props;
9489
- let { viewSpec } = props;
9454
+ let { viewSpec, toolbarConfig } = props;
9490
9455
  let viewProps = {
9491
9456
  dateProfile: props.dateProfile,
9492
9457
  businessHours: props.businessHours,
@@ -9497,6 +9462,8 @@ var FullCalendar = (function (exports) {
9497
9462
  eventDrag: props.eventDrag,
9498
9463
  eventResize: props.eventResize,
9499
9464
  forPrint: props.forPrint,
9465
+ labelId: toolbarConfig.header && toolbarConfig.header.hasTitle ? this.viewTitleId : undefined,
9466
+ labelStr: toolbarConfig.header && toolbarConfig.header.hasTitle ? undefined : title,
9500
9467
  };
9501
9468
  let transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);
9502
9469
  for (let transformer of transformers) {
@@ -9597,11 +9564,6 @@ var FullCalendar = (function (exports) {
9597
9564
  this.renderRunner.request();
9598
9565
  }
9599
9566
  }
9600
- updateSize() {
9601
- flushSync(() => {
9602
- super.updateSize();
9603
- });
9604
- }
9605
9567
  batchRendering(func) {
9606
9568
  this.renderRunner.pause('batchRendering');
9607
9569
  func();
@@ -9674,7 +9636,7 @@ var FullCalendar = (function (exports) {
9674
9636
  return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
9675
9637
  }
9676
9638
 
9677
- const version = '7.0.0-beta.3';
9639
+ const version = '7.0.0-rc.0';
9678
9640
 
9679
9641
  exports.Calendar = Calendar;
9680
9642
  exports.Internal = internal;