@fullcalendar/core 7.0.0-beta.4 → 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 (249) hide show
  1. package/index.cjs +1 -6
  2. package/index.d.ts +0 -1
  3. package/index.global.js +146 -238
  4. package/index.global.min.js +2 -2
  5. package/index.js +1 -6
  6. package/internal-common.cjs +165 -252
  7. package/internal-common.d.ts +40 -56
  8. package/internal-common.js +164 -249
  9. package/internal.cjs +2 -5
  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.global.js +1 -1
  55. package/locales/de-at.global.min.js +1 -1
  56. package/locales/de.global.js +1 -1
  57. package/locales/de.global.min.js +1 -1
  58. package/locales/el.global.js +1 -1
  59. package/locales/el.global.min.js +1 -1
  60. package/locales/en-au.global.js +1 -1
  61. package/locales/en-au.global.min.js +1 -1
  62. package/locales/en-gb.global.js +1 -1
  63. package/locales/en-gb.global.min.js +1 -1
  64. package/locales/en-nz.global.js +1 -1
  65. package/locales/en-nz.global.min.js +1 -1
  66. package/locales/eo.cjs +1 -1
  67. package/locales/eo.global.js +2 -2
  68. package/locales/eo.global.min.js +2 -2
  69. package/locales/eo.js +1 -1
  70. package/locales/es-us.cjs +1 -1
  71. package/locales/es-us.global.js +2 -2
  72. package/locales/es-us.global.min.js +2 -2
  73. package/locales/es-us.js +1 -1
  74. package/locales/es.cjs +1 -1
  75. package/locales/es.global.js +2 -2
  76. package/locales/es.global.min.js +2 -2
  77. package/locales/es.js +1 -1
  78. package/locales/et.cjs +1 -1
  79. package/locales/et.global.js +2 -2
  80. package/locales/et.global.min.js +2 -2
  81. package/locales/et.js +1 -1
  82. package/locales/eu.cjs +1 -1
  83. package/locales/eu.global.js +2 -2
  84. package/locales/eu.global.min.js +2 -2
  85. package/locales/eu.js +1 -1
  86. package/locales/fa.global.js +1 -1
  87. package/locales/fa.global.min.js +1 -1
  88. package/locales/fi.cjs +1 -1
  89. package/locales/fi.global.js +2 -2
  90. package/locales/fi.global.min.js +2 -2
  91. package/locales/fi.js +1 -1
  92. package/locales/fr-ca.cjs +1 -1
  93. package/locales/fr-ca.global.js +2 -2
  94. package/locales/fr-ca.global.min.js +2 -2
  95. package/locales/fr-ca.js +1 -1
  96. package/locales/fr-ch.cjs +1 -1
  97. package/locales/fr-ch.global.js +2 -2
  98. package/locales/fr-ch.global.min.js +2 -2
  99. package/locales/fr-ch.js +1 -1
  100. package/locales/fr.cjs +1 -1
  101. package/locales/fr.global.js +2 -2
  102. package/locales/fr.global.min.js +2 -2
  103. package/locales/fr.js +1 -1
  104. package/locales/gl.cjs +1 -1
  105. package/locales/gl.global.js +2 -2
  106. package/locales/gl.global.min.js +2 -2
  107. package/locales/gl.js +1 -1
  108. package/locales/he.global.js +1 -1
  109. package/locales/he.global.min.js +1 -1
  110. package/locales/hi.global.js +1 -1
  111. package/locales/hi.global.min.js +1 -1
  112. package/locales/hr.cjs +1 -1
  113. package/locales/hr.global.js +2 -2
  114. package/locales/hr.global.min.js +2 -2
  115. package/locales/hr.js +1 -1
  116. package/locales/hu.cjs +1 -1
  117. package/locales/hu.global.js +2 -2
  118. package/locales/hu.global.min.js +2 -2
  119. package/locales/hu.js +1 -1
  120. package/locales/hy-am.global.js +1 -1
  121. package/locales/hy-am.global.min.js +1 -1
  122. package/locales/id.cjs +1 -1
  123. package/locales/id.global.js +2 -2
  124. package/locales/id.global.min.js +2 -2
  125. package/locales/id.js +1 -1
  126. package/locales/is.cjs +1 -1
  127. package/locales/is.global.js +2 -2
  128. package/locales/is.global.min.js +2 -2
  129. package/locales/is.js +1 -1
  130. package/locales/it.cjs +1 -1
  131. package/locales/it.global.js +2 -2
  132. package/locales/it.global.min.js +2 -2
  133. package/locales/it.js +1 -1
  134. package/locales/ja.global.js +1 -1
  135. package/locales/ja.global.min.js +1 -1
  136. package/locales/ka.cjs +1 -1
  137. package/locales/ka.global.js +2 -2
  138. package/locales/ka.global.min.js +2 -2
  139. package/locales/ka.js +1 -1
  140. package/locales/kk.cjs +1 -1
  141. package/locales/kk.global.js +2 -2
  142. package/locales/kk.global.min.js +2 -2
  143. package/locales/kk.js +1 -1
  144. package/locales/km.global.js +1 -1
  145. package/locales/km.global.min.js +1 -1
  146. package/locales/ko.global.js +1 -1
  147. package/locales/ko.global.min.js +1 -1
  148. package/locales/ku.global.js +1 -1
  149. package/locales/ku.global.min.js +1 -1
  150. package/locales/lb.cjs +1 -1
  151. package/locales/lb.global.js +2 -2
  152. package/locales/lb.global.min.js +2 -2
  153. package/locales/lb.js +1 -1
  154. package/locales/lt.cjs +1 -1
  155. package/locales/lt.global.js +2 -2
  156. package/locales/lt.global.min.js +2 -2
  157. package/locales/lt.js +1 -1
  158. package/locales/lv.cjs +1 -1
  159. package/locales/lv.global.js +2 -2
  160. package/locales/lv.global.min.js +2 -2
  161. package/locales/lv.js +1 -1
  162. package/locales/mk.global.js +1 -1
  163. package/locales/mk.global.min.js +1 -1
  164. package/locales/ms.cjs +1 -1
  165. package/locales/ms.global.js +2 -2
  166. package/locales/ms.global.min.js +2 -2
  167. package/locales/ms.js +1 -1
  168. package/locales/nb.cjs +1 -1
  169. package/locales/nb.global.js +2 -2
  170. package/locales/nb.global.min.js +2 -2
  171. package/locales/nb.js +1 -1
  172. package/locales/ne.global.js +1 -1
  173. package/locales/ne.global.min.js +1 -1
  174. package/locales/nl.global.js +1 -1
  175. package/locales/nl.global.min.js +1 -1
  176. package/locales/nn.cjs +1 -1
  177. package/locales/nn.global.js +2 -2
  178. package/locales/nn.global.min.js +2 -2
  179. package/locales/nn.js +1 -1
  180. package/locales/pl.cjs +1 -1
  181. package/locales/pl.global.js +2 -2
  182. package/locales/pl.global.min.js +2 -2
  183. package/locales/pl.js +1 -1
  184. package/locales/pt-br.cjs +1 -1
  185. package/locales/pt-br.global.js +2 -2
  186. package/locales/pt-br.global.min.js +2 -2
  187. package/locales/pt-br.js +1 -1
  188. package/locales/pt.cjs +1 -1
  189. package/locales/pt.global.js +2 -2
  190. package/locales/pt.global.min.js +2 -2
  191. package/locales/pt.js +1 -1
  192. package/locales/ro.cjs +1 -1
  193. package/locales/ro.global.js +2 -2
  194. package/locales/ro.global.min.js +2 -2
  195. package/locales/ro.js +1 -1
  196. package/locales/ru.cjs +1 -1
  197. package/locales/ru.global.js +2 -2
  198. package/locales/ru.global.min.js +2 -2
  199. package/locales/ru.js +1 -1
  200. package/locales/si-lk.global.js +1 -1
  201. package/locales/si-lk.global.min.js +1 -1
  202. package/locales/sk.global.js +1 -1
  203. package/locales/sk.global.min.js +1 -1
  204. package/locales/sl.global.js +1 -1
  205. package/locales/sl.global.min.js +1 -1
  206. package/locales/sm.global.js +1 -1
  207. package/locales/sm.global.min.js +1 -1
  208. package/locales/sq.cjs +1 -1
  209. package/locales/sq.global.js +2 -2
  210. package/locales/sq.global.min.js +2 -2
  211. package/locales/sq.js +1 -1
  212. package/locales/sr-cyrl.global.js +1 -1
  213. package/locales/sr-cyrl.global.min.js +1 -1
  214. package/locales/sr.global.js +1 -1
  215. package/locales/sr.global.min.js +1 -1
  216. package/locales/sv.global.js +1 -1
  217. package/locales/sv.global.min.js +1 -1
  218. package/locales/ta-in.cjs +1 -1
  219. package/locales/ta-in.global.js +2 -2
  220. package/locales/ta-in.global.min.js +2 -2
  221. package/locales/ta-in.js +1 -1
  222. package/locales/th.global.js +1 -1
  223. package/locales/th.global.min.js +1 -1
  224. package/locales/tr.global.js +1 -1
  225. package/locales/tr.global.min.js +1 -1
  226. package/locales/ug.global.js +1 -1
  227. package/locales/ug.global.min.js +1 -1
  228. package/locales/uk.cjs +1 -1
  229. package/locales/uk.global.js +2 -2
  230. package/locales/uk.global.min.js +2 -2
  231. package/locales/uk.js +1 -1
  232. package/locales/uz-cy.cjs +1 -1
  233. package/locales/uz-cy.global.js +2 -2
  234. package/locales/uz-cy.global.min.js +2 -2
  235. package/locales/uz-cy.js +1 -1
  236. package/locales/uz.global.js +1 -1
  237. package/locales/uz.global.min.js +1 -1
  238. package/locales/vi.global.js +1 -1
  239. package/locales/vi.global.min.js +1 -1
  240. package/locales/zh-cn.global.js +1 -1
  241. package/locales/zh-cn.global.min.js +1 -1
  242. package/locales/zh-tw.global.js +1 -1
  243. package/locales/zh-tw.global.min.js +1 -1
  244. package/locales-all.global.js +38 -38
  245. package/locales-all.global.min.js +2 -2
  246. package/package.json +1 -1
  247. package/preact.cjs +1 -0
  248. package/preact.d.ts +4 -3
  249. package/preact.js +1 -1
@@ -1,71 +1,7 @@
1
1
  import * as preact from 'preact';
2
- import { Component, createElement, isValidElement, Fragment, createRef } from 'preact';
2
+ import { Component, createElement, isValidElement, createRef, Fragment } from 'preact';
3
3
  import { createPortal } from 'preact/compat';
4
4
 
5
- /*
6
- NOTE: this can be a public API, especially createElement for hooks.
7
- See examples/typescript-scheduler/src/index.ts
8
- */
9
- /*
10
- HACK for flushSync being a noop:
11
- https://github.com/preactjs/preact/issues/3929
12
- */
13
- function flushSync(renderActionToFlush) {
14
- renderActionToFlush();
15
- let oldDebounceRendering = preact.options.debounceRendering; // orig
16
- let callbackQ = [];
17
- function execCallbackSync(callback) {
18
- callbackQ.push(callback);
19
- }
20
- preact.options.debounceRendering = execCallbackSync;
21
- preact.render(preact.createElement(FakeComponent, {}), document.createElement('div'));
22
- while (callbackQ.length) {
23
- callbackQ.shift()();
24
- }
25
- preact.options.debounceRendering = oldDebounceRendering;
26
- }
27
- /*
28
- Triggers a state-change which unclogs the render queue? Needed?
29
- */
30
- class FakeComponent extends preact.Component {
31
- render() { return preact.createElement('div', {}); }
32
- componentDidMount() { this.setState({}); }
33
- }
34
- /*
35
- HACK for Preact wrongly calling shouldComponentUpdate during context changes:
36
- https://github.com/preactjs/preact/issues/2510
37
- */
38
- function createContext(defaultValue) {
39
- let ContextType = preact.createContext(defaultValue);
40
- let origProvider = ContextType.Provider;
41
- ContextType.Provider = function () {
42
- let isNew = !this.getChildContext;
43
- let children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params
44
- if (isNew) {
45
- let subs = [];
46
- this.shouldComponentUpdate = (_props) => {
47
- if (this.props.value !== _props.value) {
48
- subs.forEach((c) => {
49
- c.context = _props.value;
50
- c.forceUpdate();
51
- });
52
- }
53
- };
54
- this.sub = (c) => {
55
- subs.push(c);
56
- let old = c.componentWillUnmount;
57
- c.componentWillUnmount = () => {
58
- subs.splice(subs.indexOf(c), 1);
59
- old && old.call(c);
60
- };
61
- };
62
- }
63
- return children;
64
- };
65
- return ContextType;
66
- }
67
- const preactOptions = preact.options;
68
-
69
5
  const styleTexts = [];
70
6
  const styleEls = new Map();
71
7
  function injectStyles(styleText) {
@@ -146,7 +82,7 @@ if (typeof document !== 'undefined') {
146
82
  registerStylesRoot(document);
147
83
  }
148
84
 
149
- 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 [data-navlink]{cursor:pointer}.fc [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;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}";
85
+ 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}";
150
86
  injectStyles(css_248z);
151
87
 
152
88
  class DelayedRunner {
@@ -858,65 +794,6 @@ function memoizeObjArg(workerFunc, resEquality, teardownFunc) {
858
794
  return currentRes;
859
795
  };
860
796
  }
861
- function memoizeArraylike(// used at all?
862
- workerFunc, resEquality, teardownFunc) {
863
- let currentArgSets = [];
864
- let currentResults = [];
865
- return (newArgSets) => {
866
- let currentLen = currentArgSets.length;
867
- let newLen = newArgSets.length;
868
- let i = 0;
869
- for (; i < currentLen; i += 1) {
870
- if (!newArgSets[i]) { // one of the old sets no longer exists
871
- if (teardownFunc) {
872
- teardownFunc(currentResults[i]);
873
- }
874
- }
875
- else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {
876
- if (teardownFunc) {
877
- teardownFunc(currentResults[i]);
878
- }
879
- let res = workerFunc.apply(this, newArgSets[i]);
880
- if (!resEquality || !resEquality(res, currentResults[i])) {
881
- currentResults[i] = res;
882
- }
883
- }
884
- }
885
- for (; i < newLen; i += 1) {
886
- currentResults[i] = workerFunc.apply(this, newArgSets[i]);
887
- }
888
- currentArgSets = newArgSets;
889
- currentResults.splice(newLen); // remove excess
890
- return currentResults;
891
- };
892
- }
893
- function memoizeHashlike(workerFunc, resEquality, teardownFunc) {
894
- let currentArgHash = {};
895
- let currentResHash = {};
896
- return (newArgHash) => {
897
- let newResHash = {};
898
- for (let key in newArgHash) {
899
- if (!currentResHash[key]) {
900
- newResHash[key] = workerFunc.apply(this, newArgHash[key]);
901
- }
902
- else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {
903
- if (teardownFunc) {
904
- teardownFunc(currentResHash[key]);
905
- }
906
- let res = workerFunc.apply(this, newArgHash[key]);
907
- newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))
908
- ? currentResHash[key]
909
- : res;
910
- }
911
- else {
912
- newResHash[key] = currentResHash[key];
913
- }
914
- }
915
- currentArgHash = newArgHash;
916
- currentResHash = newResHash;
917
- return newResHash;
918
- };
919
- }
920
797
 
921
798
  const EXTENDED_SETTINGS_AND_SEVERITIES = {
922
799
  week: 3,
@@ -1347,7 +1224,6 @@ const BASE_OPTION_REFINERS = {
1347
1224
  eventDataTransform: identity,
1348
1225
  stickyHeaderDates: identity,
1349
1226
  stickyFooterScrollbar: identity,
1350
- viewHeight: identity,
1351
1227
  defaultAllDay: Boolean,
1352
1228
  eventSourceFailure: identity,
1353
1229
  eventSourceSuccess: identity,
@@ -2176,6 +2052,37 @@ Theme.prototype.iconClasses = {};
2176
2052
  Theme.prototype.baseIconClass = '';
2177
2053
  Theme.prototype.iconOverridePrefix = '';
2178
2054
 
2055
+ /*
2056
+ Like flushSync, but flushes ALL pending updates, not only those initiated in a callback
2057
+ BTW, flushSync doesn't work in Preact: https://github.com/preactjs/preact/issues/3929
2058
+ */
2059
+ function flushUpdates() {
2060
+ let oldDebounceRendering = preact.options.debounceRendering; // orig
2061
+ let callbackQ = [];
2062
+ function execCallbackSync(callback) {
2063
+ callbackQ.push(callback);
2064
+ }
2065
+ preact.options.debounceRendering = execCallbackSync;
2066
+ preact.render(preact.createElement(FakeComponent, {}), document.createElement('div'));
2067
+ while (callbackQ.length) {
2068
+ callbackQ.shift()();
2069
+ }
2070
+ preact.options.debounceRendering = oldDebounceRendering;
2071
+ }
2072
+ function flushSync(f) {
2073
+ f();
2074
+ flushUpdates();
2075
+ }
2076
+ /*
2077
+ Triggers a state-change which unclogs the render queue? Needed?
2078
+ */
2079
+ class FakeComponent extends preact.Component {
2080
+ render() { return preact.createElement('div', {}); }
2081
+ componentDidMount() { this.setState({}); }
2082
+ }
2083
+ const createContext = preact.createContext;
2084
+ const preactOptions = preact.options;
2085
+
2179
2086
  const ViewContextType = createContext({}); // for Components
2180
2087
  function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {
2181
2088
  return {
@@ -4247,8 +4154,19 @@ isStart, isEnd, context, defaultDisplayEventTime = true, defaultDisplayEventEnd
4247
4154
  if (displayEventEnd == null) {
4248
4155
  displayEventEnd = defaultDisplayEventEnd !== false;
4249
4156
  }
4250
- const startDate = (!isStart && slicedStart) ? slicedStart : eventRange.instance.range.start;
4251
- const endDate = (!isEnd && slicedEnd) ? slicedEnd : eventRange.instance.range.end;
4157
+ const startDate = (!isStart &&
4158
+ slicedStart &&
4159
+ // if seg is the first seg, but start-date cut-off by slotMinTime, (technically isStart=false)
4160
+ // we still want to display the original start-time
4161
+ startOfDay(slicedStart).valueOf() !== startOfDay(eventRange.instance.range.start).valueOf())
4162
+ ? slicedStart
4163
+ : eventRange.instance.range.start;
4164
+ const endDate = (!isEnd &&
4165
+ slicedEnd &&
4166
+ // See above HACK, but for end-time
4167
+ startOfDay(addMs(slicedEnd, -1)).valueOf() !== startOfDay(addMs(eventRange.instance.range.end, -1)).valueOf())
4168
+ ? slicedEnd
4169
+ : eventRange.instance.range.end;
4252
4170
  if (displayEventTime && !def.allDay) {
4253
4171
  if (displayEventEnd && (isStart || isEnd) && def.hasEnd) {
4254
4172
  return dateEnv.formatRange(startDate, endDate, timeFormat, {
@@ -4529,21 +4447,15 @@ but our Preact system does not commit to the DOM immediately, commits are batche
4529
4447
  so we can skip this.
4530
4448
  */
4531
4449
  function checkConfigMap() {
4450
+ let anyDirty = true;
4532
4451
  if (!isHandling) {
4533
4452
  isHandling = true;
4534
4453
  const dirtyConfigs = [];
4535
4454
  for (const [el, config] of configMap.entries()) {
4536
- let width;
4537
- let height;
4538
- if (config.client) {
4539
- width = el.clientWidth;
4540
- height = el.clientHeight;
4541
- }
4542
- else {
4543
- ({ width, height } = el.getBoundingClientRect());
4544
- }
4455
+ const { width, height } = el.getBoundingClientRect();
4545
4456
  if (storeConfigDims(config, width, height)) {
4546
4457
  dirtyConfigs.push(config);
4458
+ anyDirty = true;
4547
4459
  }
4548
4460
  }
4549
4461
  for (const dirtyConfig of dirtyConfigs) {
@@ -4552,6 +4464,7 @@ function checkConfigMap() {
4552
4464
  flushAfterSize();
4553
4465
  isHandling = false;
4554
4466
  }
4467
+ return anyDirty;
4555
4468
  }
4556
4469
  function storeConfigDims(config, width, height) {
4557
4470
  let shouldFire = false;
@@ -4579,11 +4492,7 @@ function initNative() {
4579
4492
  const config = configMap.get(el);
4580
4493
  let width;
4581
4494
  let height;
4582
- if (config.client) {
4583
- width = el.clientWidth;
4584
- height = el.clientHeight;
4585
- }
4586
- else if (entry.borderBoxSize && nativeBorderBoxEnabled) {
4495
+ if (entry.borderBoxSize && nativeBorderBoxEnabled) {
4587
4496
  const borderBoxSize = entry.borderBoxSize[0] || entry.borderBoxSize; // HACK for Firefox
4588
4497
  width = borderBoxSize.inlineSize;
4589
4498
  height = borderBoxSize.blockSize;
@@ -4598,12 +4507,11 @@ function initNative() {
4598
4507
  flushAfterSize();
4599
4508
  isHandling = false;
4600
4509
  });
4601
- function watchSize(el, callback, client, watchWidth = true, watchHeight = true) {
4602
- configMap.set(el, { callback, client, watchWidth, watchHeight });
4510
+ function watchSize(el, callback, watchWidth = true, watchHeight = true) {
4511
+ configMap.set(el, { callback, watchWidth, watchHeight });
4603
4512
  globalResizeObserver.observe(el, {
4604
- box: !client && nativeBorderBoxEnabled
4605
- ? 'border-box'
4606
- : undefined // default is 'content-box'
4513
+ box: 'border-box'
4514
+ // default is 'content-box'
4607
4515
  });
4608
4516
  return () => {
4609
4517
  configMap.delete(el);
@@ -4645,13 +4553,13 @@ function initFallback() {
4645
4553
  const [requestCheckSizes, cancelCheckSizes] = debounce(checkConfigMap, fallbackTimeout);
4646
4554
  function requestCheckSizesSync() {
4647
4555
  cancelCheckSizes();
4648
- checkConfigMap();
4556
+ return checkConfigMap();
4649
4557
  }
4650
- function watchSize(el, callback, client, watchWidth = true, watchHeight = true) {
4558
+ function watchSize(el, callback, watchWidth = true, watchHeight = true) {
4651
4559
  if (!configMap.size) {
4652
4560
  addGlobalHandlers();
4653
4561
  }
4654
- configMap.set(el, { callback, client, watchWidth, watchHeight });
4562
+ configMap.set(el, { callback, watchWidth, watchHeight });
4655
4563
  requestCheckSizes();
4656
4564
  return () => {
4657
4565
  configMap.delete(el);
@@ -4767,7 +4675,7 @@ function debounce(fn, ms) {
4767
4675
  PRECONDITION: element can only have one listener attached
4768
4676
 
4769
4677
  NOTE: If we ever kill the fallback technique and use ResizeObserver unconditionally with full
4770
- border-box support, we no longer need wrappers around the <StickyFooterScrollbar>'s <Scroller>
4678
+ border-box support, we no longer need wrappers around the <FooterScrollbar>'s <Scroller>
4771
4679
  */
4772
4680
  const [watchSize, updateSizeSync] = typeof ResizeObserver !== 'undefined'
4773
4681
  ? initNative()
@@ -4790,13 +4698,13 @@ class CalendarRoot extends BaseComponent {
4790
4698
  };
4791
4699
  this.handleBeforePrint = () => {
4792
4700
  this.setState({ forPrint: true });
4793
- flushSync(() => { }); // TODO: use noop
4701
+ flushUpdates();
4794
4702
  updateSizeSync();
4795
- flushSync(() => { }); // TODO: use noop
4703
+ flushUpdates();
4796
4704
  };
4797
4705
  this.handleAfterPrint = () => {
4798
4706
  this.setState({ forPrint: false });
4799
- flushSync(() => { }); // TODO: use noop
4707
+ flushUpdates();
4800
4708
  };
4801
4709
  }
4802
4710
  render() {
@@ -4883,7 +4791,7 @@ function getUniqueDomId() {
4883
4791
  }
4884
4792
 
4885
4793
  function getIsHeightAuto(options) {
4886
- return options.height === 'auto' || options.viewHeight === 'auto';
4794
+ return options.height === 'auto' || options.contentHeight === 'auto';
4887
4795
  }
4888
4796
  function getStickyHeaderDates(options) {
4889
4797
  let { stickyHeaderDates } = options;
@@ -4922,7 +4830,10 @@ class CalendarImpl {
4922
4830
  callback();
4923
4831
  }
4924
4832
  updateSize() {
4925
- requestAnimationFrame(updateSizeSync);
4833
+ let cycleCount = 0;
4834
+ while (cycleCount++ < 3 && updateSizeSync()) {
4835
+ flushUpdates();
4836
+ }
4926
4837
  }
4927
4838
  // Options
4928
4839
  // -----------------------------------------------------------------------------------------------------------------
@@ -5509,63 +5420,11 @@ function buildNavLinkAttrs(context, dateMarker, viewType = 'day', dateStr = buil
5509
5420
  calendarApi.zoomTo(dateMarker, viewType);
5510
5421
  }
5511
5422
  };
5512
- return Object.assign({ 'role': 'link', 'aria-label': formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'data-navlink': '' }, (isTabbable
5423
+ return Object.assign({ 'role': 'link', 'aria-label': formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'className': 'fc-navlink' }, (isTabbable
5513
5424
  ? createAriaClickAttrs(handleInteraction)
5514
5425
  : { onClick: handleInteraction }));
5515
5426
  }
5516
5427
 
5517
- let _isRtlScrollbarOnLeft = null;
5518
- function getIsRtlScrollbarOnLeft() {
5519
- if (_isRtlScrollbarOnLeft === null) {
5520
- _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();
5521
- }
5522
- return _isRtlScrollbarOnLeft;
5523
- }
5524
- function computeIsRtlScrollbarOnLeft() {
5525
- let outerEl = document.createElement('div');
5526
- applyStyle(outerEl, {
5527
- position: 'absolute',
5528
- top: -1000,
5529
- left: 0,
5530
- border: 0,
5531
- padding: 0,
5532
- overflow: 'scroll',
5533
- direction: 'rtl',
5534
- });
5535
- outerEl.innerHTML = '<div></div>';
5536
- document.body.appendChild(outerEl);
5537
- let innerEl = outerEl.firstChild;
5538
- let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;
5539
- outerEl.remove();
5540
- return res;
5541
- }
5542
-
5543
- let _scrollbarWidths;
5544
- function getScrollbarWidths() {
5545
- if (!_scrollbarWidths) {
5546
- _scrollbarWidths = computeScrollbarWidths();
5547
- }
5548
- return _scrollbarWidths;
5549
- }
5550
- function computeScrollbarWidths() {
5551
- let el = document.createElement('div');
5552
- el.style.overflow = 'scroll';
5553
- el.style.position = 'absolute';
5554
- el.style.top = '-9999px';
5555
- el.style.left = '-9999px';
5556
- document.body.appendChild(el);
5557
- let res = computeScrollbarWidthsForEl(el);
5558
- document.body.removeChild(el);
5559
- return res;
5560
- }
5561
- // WARNING: will include border
5562
- function computeScrollbarWidthsForEl(el) {
5563
- return {
5564
- x: el.offsetHeight - el.clientHeight,
5565
- y: el.offsetWidth - el.clientWidth,
5566
- };
5567
- }
5568
-
5569
5428
  function computeEdges(el, getPadding = false) {
5570
5429
  let computedStyle = window.getComputedStyle(el);
5571
5430
  let borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;
@@ -5584,7 +5443,7 @@ function computeEdges(el, getPadding = false) {
5584
5443
  scrollbarLeft: 0,
5585
5444
  scrollbarRight: 0,
5586
5445
  };
5587
- if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?
5446
+ if (computedStyle.direction === 'rtl') {
5588
5447
  res.scrollbarLeft = scrollbarLeftRight;
5589
5448
  }
5590
5449
  else {
@@ -5653,6 +5512,13 @@ function getClippingParents(el) {
5653
5512
  }
5654
5513
  return parents;
5655
5514
  }
5515
+ // WARNING: will include border
5516
+ function computeScrollbarWidthsForEl(el) {
5517
+ return {
5518
+ x: el.offsetHeight - el.clientHeight,
5519
+ y: el.offsetWidth - el.clientWidth,
5520
+ };
5521
+ }
5656
5522
 
5657
5523
  /*
5658
5524
  Records offset information for a set of elements, relative to an origin element.
@@ -5866,7 +5732,7 @@ class DateComponent extends BaseComponent {
5866
5732
  isValidDateDownEl(el) {
5867
5733
  return !el.closest('.fc-event:not(.fc-bg-event)') &&
5868
5734
  !el.closest('.fc-more-link') && // a "more.." link
5869
- !el.closest('[data-navlink]') && // a clickable nav link
5735
+ !el.closest('.fc-navlink') && // a clickable nav link
5870
5736
  !el.closest('.fc-popover'); // hack
5871
5737
  }
5872
5738
  }
@@ -6463,37 +6329,54 @@ class Scroller extends DateComponent {
6463
6329
  constructor() {
6464
6330
  super(...arguments);
6465
6331
  this.handleEl = (el) => {
6466
- const { props } = this;
6467
6332
  if (this.el) {
6468
6333
  this.el = null;
6469
6334
  this.listener.destroy();
6470
- this.disconnectSize();
6471
- setRef(props.clientWidthRef, null);
6472
- setRef(props.clientHeightRef, null);
6473
- setRef(props.endScrollbarWidthRef, null);
6474
- setRef(props.bottomScrollbarWidthRef, null);
6475
6335
  }
6476
6336
  if (el) {
6477
6337
  this.el = el;
6478
6338
  this.listener = new ScrollListener(el);
6479
- this.disconnectSize = watchSize(el, (clientWidth, clientHeight) => {
6480
- const { props } = this;
6481
- const endScrollbarWidth = el.offsetWidth - clientWidth;
6482
- const bottomScrollbarWidth = el.offsetHeight - clientHeight;
6483
- if (this.currentClientWidth !== clientWidth) {
6484
- setRef(props.clientWidthRef, this.currentClientWidth = clientWidth);
6485
- }
6486
- if (this.currentClientHeight !== clientHeight) {
6487
- setRef(props.clientHeightRef, this.currentClientHeight = clientHeight);
6339
+ }
6340
+ };
6341
+ this.handleHRuler = (el) => {
6342
+ if (this.disconnectHRuler) {
6343
+ this.disconnectHRuler();
6344
+ this.disconnectHRuler = undefined;
6345
+ if (this.clientWidth !== undefined) {
6346
+ this.clientWidth = undefined;
6347
+ setRef(this.props.clientWidthRef, null);
6348
+ }
6349
+ }
6350
+ if (el) {
6351
+ this.disconnectHRuler = watchWidth(el, (clientWidth) => {
6352
+ if (clientWidth !== this.clientWidth) {
6353
+ this.clientWidth = clientWidth;
6354
+ setRef(this.props.clientWidthRef, clientWidth);
6488
6355
  }
6489
- // are these isDimsEqual calls necessary?
6490
- if (!isDimsEqual(this.currentBottomScrollbarWidth, bottomScrollbarWidth)) {
6491
- setRef(props.bottomScrollbarWidthRef, this.currentBottomScrollbarWidth = bottomScrollbarWidth);
6356
+ });
6357
+ }
6358
+ };
6359
+ this.handleVRuler = (el) => {
6360
+ if (this.disconnectVRuler) {
6361
+ this.disconnectVRuler();
6362
+ this.disconnectVRuler = undefined;
6363
+ if (this.clientHeight !== undefined) {
6364
+ this.clientHeight = undefined;
6365
+ setRef(this.props.clientHeightRef, null);
6366
+ }
6367
+ }
6368
+ if (el) {
6369
+ this.disconnectVRuler = watchHeight(el, (clientHeight) => {
6370
+ if (clientHeight !== this.clientHeight) {
6371
+ this.clientHeight = clientHeight;
6372
+ setRef(this.props.clientHeightRef, clientHeight);
6492
6373
  }
6493
- if (!isDimsEqual(this.currentEndScrollbarWidth, endScrollbarWidth)) {
6494
- setRef(props.endScrollbarWidthRef, this.currentEndScrollbarWidth = endScrollbarWidth);
6374
+ const bottomScrollbarWidth = Math.round(this.el.getBoundingClientRect().height - clientHeight);
6375
+ if (bottomScrollbarWidth !== this.bottomScrollbarWidth) {
6376
+ this.bottomScrollbarWidth = bottomScrollbarWidth;
6377
+ setRef(this.props.bottomScrollbarWidthRef, bottomScrollbarWidth);
6495
6378
  }
6496
- }, /* client(width+height) = */ true);
6379
+ });
6497
6380
  }
6498
6381
  };
6499
6382
  }
@@ -6502,7 +6385,11 @@ class Scroller extends DateComponent {
6502
6385
  // if there's only one axis that needs scrolling, the other axis will unintentionally have
6503
6386
  // scrollbars too if we don't force to 'hidden'
6504
6387
  const fallbackOverflow = (props.horizontal || props.vertical) ? 'hidden' : '';
6505
- return (createElement("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));
6388
+ return (createElement("div", { ref: this.handleEl, className: joinClassNames(props.className, 'fc-scroller fc-rel', // fc-rel for children fc-fill-top/start
6389
+ props.hideScrollbars && 'fc-scroller-no-bars'), style: Object.assign(Object.assign({}, props.style), { overflowX: props.horizontal ? 'auto' : fallbackOverflow, overflowY: props.vertical ? 'auto' : fallbackOverflow }) },
6390
+ props.children,
6391
+ Boolean(props.clientWidthRef) && (createElement("div", { ref: this.handleHRuler, className: 'fc-fill-top' })),
6392
+ Boolean(props.clientHeightRef || props.bottomScrollbarWidthRef) && (createElement("div", { ref: this.handleVRuler, className: 'fc-fill-start' }))));
6506
6393
  }
6507
6394
  endScroll() {
6508
6395
  this.listener.endScroll();
@@ -6577,9 +6464,6 @@ let _rtlScrollerSystem;
6577
6464
  function getRtlScrollerSystem() {
6578
6465
  return _rtlScrollerSystem || (_rtlScrollerSystem = detectRtlScrollerSystem());
6579
6466
  }
6580
- /*
6581
- TODO: make this more minimal now that scrollbar-side detection isn't needed?
6582
- */
6583
6467
  function detectRtlScrollerSystem() {
6584
6468
  let el = document.createElement('div');
6585
6469
  el.style.position = 'absolute';
@@ -6912,6 +6796,30 @@ function anyRangesContainRange(outerRanges, innerRange) {
6912
6796
  return false;
6913
6797
  }
6914
6798
 
6799
+ class Ruler extends BaseComponent {
6800
+ constructor() {
6801
+ super(...arguments);
6802
+ this.elRef = createRef();
6803
+ }
6804
+ render() {
6805
+ return (createElement("div", { ref: this.elRef }));
6806
+ }
6807
+ componentDidMount() {
6808
+ const { props } = this;
6809
+ const el = this.elRef.current;
6810
+ this.disconnectWidth = watchWidth(el, (width) => {
6811
+ setRef(props.widthRef, width);
6812
+ });
6813
+ }
6814
+ componentWillUnmount() {
6815
+ this.disconnectWidth();
6816
+ const { props } = this;
6817
+ if (props.widthRef) {
6818
+ setRef(props.widthRef, null);
6819
+ }
6820
+ }
6821
+ }
6822
+
6915
6823
  /*
6916
6824
  TODO: make API where createRefMap() called
6917
6825
  */
@@ -7010,6 +6918,8 @@ function buildDayRange(date) {
7010
6918
  class EventContainer extends BaseComponent {
7011
6919
  constructor() {
7012
6920
  super(...arguments);
6921
+ // memo
6922
+ this.buildPublicEvent = memoize((context, eventDef, eventInstance) => new EventImpl(context, eventDef, eventInstance));
7013
6923
  this.handleEl = (el) => {
7014
6924
  this.el = el;
7015
6925
  if (el) {
@@ -7023,7 +6933,9 @@ class EventContainer extends BaseComponent {
7023
6933
  const { eventRange } = props;
7024
6934
  const { ui } = eventRange;
7025
6935
  const renderProps = {
7026
- event: new EventImpl(context, eventRange.def, eventRange.instance),
6936
+ // make stable. everything else atomic
6937
+ // FYI, eventRange unfortunately gets reconstructed a lot, but def/instance is stable
6938
+ event: this.buildPublicEvent(context, eventRange.def, eventRange.instance),
7027
6939
  view: context.viewApi,
7028
6940
  timeText: props.timeText,
7029
6941
  textColor: ui.textColor,
@@ -7042,7 +6954,7 @@ class EventContainer extends BaseComponent {
7042
6954
  isDragging: Boolean(props.isDragging),
7043
6955
  isResizing: Boolean(props.isResizing),
7044
6956
  };
7045
- return (createElement(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 })));
6957
+ return (createElement(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));
7046
6958
  }
7047
6959
  componentDidUpdate(prevProps) {
7048
6960
  if (this.el && this.props.eventRange !== prevProps.eventRange) {
@@ -7146,6 +7058,7 @@ const WeekNumberContainer = (props) => (createElement(ViewContextType.Consumer,
7146
7058
  }));
7147
7059
 
7148
7060
  const PADDING_FROM_VIEWPORT = 10;
7061
+ const ROW_BORDER_WIDTH = 1;
7149
7062
  class Popover extends BaseComponent {
7150
7063
  constructor() {
7151
7064
  super(...arguments);
@@ -7187,8 +7100,8 @@ class Popover extends BaseComponent {
7187
7100
  return createPortal(createElement("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 }),
7188
7101
  createElement("div", { tabIndex: 0, style: { outline: 'none' }, ref: this.focusStartRef }),
7189
7102
  createElement("div", { className: 'fc-popover-header ' + theme.getClassName('popoverHeader') },
7190
- createElement("span", { className: "fc-popover-title", id: this.titleId }, props.title),
7191
- createElement("span", Object.assign({ role: 'button', "aria-label": options.closeHint, className: 'fc-popover-close ' + theme.getIconClass('close') }, createAriaClickAttrs(this.handleClose), { ref: this.closeRef }))),
7103
+ createElement("div", { className: "fc-popover-title", id: this.titleId }, props.title),
7104
+ createElement("div", Object.assign({ role: 'button', "aria-label": options.closeHint, className: 'fc-popover-close ' + theme.getIconClass('close') }, createAriaClickAttrs(this.handleClose), { ref: this.closeRef }))),
7192
7105
  createElement("div", { className: 'fc-popover-body ' + theme.getClassName('popoverContent') }, props.children),
7193
7106
  createElement("div", { tabIndex: 0, style: { outline: 'none' }, ref: this.focusEndRef })), props.parentEl);
7194
7107
  }
@@ -7215,7 +7128,8 @@ class Popover extends BaseComponent {
7215
7128
  let popoverDims = rootEl.getBoundingClientRect();
7216
7129
  // position relative to viewport
7217
7130
  let popoverTop = alignParentTop
7218
- ? alignEl.closest(alignParentTop).getBoundingClientRect().top
7131
+ // HACK: subtract 1 for DayGrid, which has borders on row-bottom. Only view that uses alignParentTop
7132
+ ? alignEl.closest(alignParentTop).getBoundingClientRect().top - ROW_BORDER_WIDTH
7219
7133
  : alignmentRect.top;
7220
7134
  let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
7221
7135
  // constrain
@@ -7269,7 +7183,7 @@ class MorePopover extends DateComponent {
7269
7183
  start: props.startDate,
7270
7184
  end: props.endDate,
7271
7185
  } }, props.dateSpanProps),
7272
- dayEl: rootEl,
7186
+ getDayEl: () => rootEl,
7273
7187
  rect: {
7274
7188
  left: 0,
7275
7189
  top: 0,
@@ -7298,21 +7212,22 @@ class MoreLinkContainer extends BaseComponent {
7298
7212
  };
7299
7213
  this.handleClick = (ev) => {
7300
7214
  let { props, context } = this;
7301
- let { moreLinkClick } = context.options;
7215
+ let { dateEnv, options } = context;
7216
+ let { moreLinkClick } = options;
7302
7217
  let date = computeRange(props).start;
7303
7218
  function buildPublicSeg(seg) {
7304
7219
  let { def, instance, range } = seg.eventRange;
7305
7220
  return {
7306
7221
  event: new EventImpl(context, def, instance),
7307
- start: context.dateEnv.toDate(range.start),
7308
- end: context.dateEnv.toDate(range.end),
7222
+ start: dateEnv.toDate(range.start),
7223
+ end: dateEnv.toDate(range.end),
7309
7224
  isStart: seg.isStart,
7310
7225
  isEnd: seg.isEnd,
7311
7226
  };
7312
7227
  }
7313
7228
  if (typeof moreLinkClick === 'function') {
7314
7229
  moreLinkClick = moreLinkClick({
7315
- date,
7230
+ date: dateEnv.toDate(date),
7316
7231
  allDay: Boolean(props.allDayDate),
7317
7232
  allSegs: props.segs.map(buildPublicSeg),
7318
7233
  hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
@@ -7430,7 +7345,7 @@ class CustomRenderingStore extends Store {
7430
7345
  }
7431
7346
  }
7432
7347
 
7433
- class StickyFooterScrollbar extends BaseComponent {
7348
+ class FooterScrollbar extends BaseComponent {
7434
7349
  constructor() {
7435
7350
  super(...arguments);
7436
7351
  this.rootElRef = createRef();
@@ -7441,7 +7356,7 @@ class StickyFooterScrollbar extends BaseComponent {
7441
7356
  // the outer dimensions change, but the inner dimensions do not. The Scroller's
7442
7357
  // dimension-watching, when used in ponyfill-mode, can't fire on border-box change, so we
7443
7358
  // workaround it by monitoring dimensions of a wrapper instead
7444
- return (createElement("div", { ref: this.rootElRef, className: 'fc-sticky-footer-scrollbar' },
7359
+ return (createElement("div", { ref: this.rootElRef, className: joinClassNames('fc-footer-scrollbar', props.isSticky && 'fc-footer-scrollbar-sticky') },
7445
7360
  createElement(Scroller, { horizontal: true, ref: props.scrollerRef },
7446
7361
  createElement("div", { style: { minWidth: props.canvasWidth } }))));
7447
7362
  }
@@ -7456,4 +7371,4 @@ class StickyFooterScrollbar extends BaseComponent {
7456
7371
  }
7457
7372
  }
7458
7373
 
7459
- export { EventImpl as $, memoizeObjArg as A, BaseComponent as B, ContentContainer as C, DelayedRunner as D, isPropsEqual as E, Emitter as F, getInitialDate as G, rangeContainsMarker as H, createEmptyEventStore as I, reduceCurrentDate as J, reduceEventStore as K, rezoneEventStoreDates as L, mergeRawOptions as M, BASE_OPTION_REFINERS as N, CALENDAR_LISTENER_REFINERS as O, CALENDAR_OPTION_REFINERS as P, COMPLEX_OPTION_COMPARATORS as Q, VIEW_OPTION_REFINERS as R, DateEnv as S, Theme as T, DateProfileGenerator as U, ViewContextType as V, createEventUi as W, parseBusinessHours as X, joinClassNames as Y, Interaction as Z, getElEventRange as _, mapHash as a, watchHeight as a$, listenBySelector as a0, listenToHoverBySelector as a1, PureComponent as a2, buildViewContext as a3, getUniqueDomId as a4, parseInteractionSettings as a5, interactionSettingsStore as a6, getNow as a7, getIsHeightAuto as a8, CalendarImpl as a9, diffDates as aA, removeExact as aB, memoizeArraylike as aC, memoizeHashlike as aD, intersectRects as aE, pointInsideRect as aF, constrainPoint as aG, getRectCenter as aH, diffPoints as aI, translateRect as aJ, compareObjs as aK, collectFromHash as aL, applyStyle as aM, getEventTargetViaRoot as aN, parseClassNames as aO, fracToCssDim as aP, mergeEventStores as aQ, getRelevantEvents as aR, eventTupleToStore as aS, combineEventUis as aT, Splitter as aU, getDayClassName as aV, getDateMeta as aW, getSlotClassName as aX, isDimsEqual as aY, watchSize as aZ, watchWidth as a_, flushSync as aa, CalendarRoot as ab, RenderId as ac, ensureElHasStyles as ad, applyStyleProp as ae, sliceEventStore as af, JsonRequestError as ag, createContext as ah, preactOptions as ai, refineProps as aj, createEventInstance as ak, parseEventDef as al, refineEventDef as am, padStart as an, isInt as ao, parseFieldSpecs as ap, compareByFieldSpecs as aq, flexibleCompare as ar, preventSelection as as, allowSelection as at, preventContextMenu as au, allowContextMenu as av, compareNumbers as aw, enableCursor as ax, disableCursor as ay, computeVisibleDayRange as az, buildViewClassName as b, getStickyFooterScrollbar as b$, afterSize as b0, buildNavLinkAttrs as b1, buildDateStr as b2, preventDefault as b3, whenTransitionDone as b4, computeInnerRect as b5, computeEdges as b6, getClippingParents as b7, computeRect as b8, rangesEqual as b9, NamedTimeZoneImpl as bA, parse as bB, SegHierarchy as bC, groupIntersectingSegs as bD, binarySearch as bE, interactionSettingsToStore as bF, ElementDragging as bG, config as bH, parseDragMeta as bI, DaySeriesModel as bJ, hasBgRendering as bK, buildEventRangeTimeText as bL, sortEventSegs as bM, getEventRangeMeta as bN, buildEventRangeKey as bO, getEventTagAndAttrs as bP, getEventKey as bQ, DayTableModel as bR, Scroller as bS, getNormalizedScrollX as bT, setNormalizedScrollX as bU, Slicer as bV, applyMutationToEventStore as bW, isPropsValid as bX, isInteractionValid as bY, isDateSelectionValid as bZ, setRef as b_, rangesIntersect as ba, rangeContainsRange as bb, PositionCache as bc, ScrollController as bd, ElementScrollController as be, WindowScrollController as bf, DateComponent as bg, isDateSpansEqual as bh, addMs as bi, addWeeks as bj, diffWeeks as bk, diffWholeWeeks as bl, diffDayAndTime as bm, diffDays as bn, isValidDate as bo, asCleanDays as bp, multiplyDuration as bq, addDurations as br, asRoughMinutes as bs, asRoughSeconds as bt, asRoughMs as bu, wholeDivideDurations as bv, formatIsoTimeString as bw, formatDayString as bx, buildIsoString as by, formatIsoMonthStr as bz, greatestDurationDenominator as c, getStickyHeaderDates as c0, getScrollerSyncerClass as c1, getScrollbarWidths as c2, RefMap as c3, getIsRtlScrollbarOnLeft as c4, NowTimer as c5, StandardEvent as c6, NowIndicatorContainer as c7, DayCellContainer as c8, hasCustomDayCellContent as c9, EventContainer as ca, renderFill as cb, BgEvent as cc, WeekNumberContainer as cd, MoreLinkContainer as ce, ViewContainer as cf, triggerDateSelect as cg, getDefaultEventEnd as ch, injectStyles as ci, buildElAttrs as cj, renderText as ck, CustomRenderingStore as cl, computeEarliestStart as cm, computeLatestEnd as cn, getCoordRangeEnd as co, StickyFooterScrollbar as cp, createDuration as d, BASE_OPTION_DEFAULTS as e, arrayToHash as f, guid$1 as g, filterHash as h, isArraysEqual as i, buildEventSourceRefiners as j, formatWithOrdinals as k, buildRangeApiWithTimeZone as l, mergeProps as m, identity as n, intersectRanges as o, parseEventSource as p, startOfDay as q, requestJson as r, subtractDurations as s, addDays as t, unpromisify as u, hashValuesToArray as v, buildEventApis as w, createFormatter as x, diffWholeDays as y, memoize as z };
7374
+ export { EventImpl as $, memoizeObjArg as A, BaseComponent as B, ContentContainer as C, DelayedRunner as D, isPropsEqual as E, Emitter as F, getInitialDate as G, rangeContainsMarker as H, createEmptyEventStore as I, reduceCurrentDate as J, reduceEventStore as K, rezoneEventStoreDates as L, mergeRawOptions as M, BASE_OPTION_REFINERS as N, CALENDAR_LISTENER_REFINERS as O, CALENDAR_OPTION_REFINERS as P, COMPLEX_OPTION_COMPARATORS as Q, VIEW_OPTION_REFINERS as R, DateEnv as S, Theme as T, DateProfileGenerator as U, ViewContextType as V, createEventUi as W, parseBusinessHours as X, joinClassNames as Y, Interaction as Z, getElEventRange as _, mapHash as a, afterSize as a$, listenBySelector as a0, listenToHoverBySelector as a1, PureComponent as a2, buildViewContext as a3, getUniqueDomId as a4, parseInteractionSettings as a5, interactionSettingsStore as a6, getNow as a7, getIsHeightAuto as a8, CalendarImpl as a9, computeVisibleDayRange as aA, diffDates as aB, removeExact as aC, intersectRects as aD, pointInsideRect as aE, constrainPoint as aF, getRectCenter as aG, diffPoints as aH, translateRect as aI, compareObjs as aJ, collectFromHash as aK, applyStyle as aL, getEventTargetViaRoot as aM, parseClassNames as aN, fracToCssDim as aO, mergeEventStores as aP, getRelevantEvents as aQ, eventTupleToStore as aR, combineEventUis as aS, Splitter as aT, getDayClassName as aU, getDateMeta as aV, getSlotClassName as aW, isDimsEqual as aX, watchSize as aY, watchWidth as aZ, watchHeight as a_, flushSync as aa, CalendarRoot as ab, RenderId as ac, ensureElHasStyles as ad, applyStyleProp as ae, sliceEventStore as af, JsonRequestError as ag, flushUpdates as ah, createContext as ai, preactOptions as aj, refineProps as ak, createEventInstance as al, parseEventDef as am, refineEventDef as an, padStart as ao, isInt as ap, parseFieldSpecs as aq, compareByFieldSpecs as ar, flexibleCompare as as, preventSelection as at, allowSelection as au, preventContextMenu as av, allowContextMenu as aw, compareNumbers as ax, enableCursor as ay, disableCursor as az, buildViewClassName as b, getStickyHeaderDates as b$, buildNavLinkAttrs as b0, buildDateStr as b1, preventDefault as b2, whenTransitionDone as b3, computeInnerRect as b4, computeEdges as b5, getClippingParents as b6, computeRect as b7, rangesEqual as b8, rangesIntersect as b9, parse as bA, SegHierarchy as bB, groupIntersectingSegs as bC, binarySearch as bD, interactionSettingsToStore as bE, ElementDragging as bF, config as bG, parseDragMeta as bH, DaySeriesModel as bI, hasBgRendering as bJ, buildEventRangeTimeText as bK, sortEventSegs as bL, getEventRangeMeta as bM, buildEventRangeKey as bN, getEventTagAndAttrs as bO, getEventKey as bP, DayTableModel as bQ, Scroller as bR, getNormalizedScrollX as bS, setNormalizedScrollX as bT, Slicer as bU, applyMutationToEventStore as bV, isPropsValid as bW, isInteractionValid as bX, isDateSelectionValid as bY, setRef as bZ, getStickyFooterScrollbar as b_, rangeContainsRange as ba, PositionCache as bb, ScrollController as bc, ElementScrollController as bd, WindowScrollController as be, DateComponent as bf, isDateSpansEqual as bg, addMs as bh, addWeeks as bi, diffWeeks as bj, diffWholeWeeks as bk, diffDayAndTime as bl, diffDays as bm, isValidDate as bn, asCleanDays as bo, multiplyDuration as bp, addDurations as bq, asRoughMinutes as br, asRoughSeconds as bs, asRoughMs as bt, wholeDivideDurations as bu, formatIsoTimeString as bv, formatDayString as bw, buildIsoString as bx, formatIsoMonthStr as by, NamedTimeZoneImpl as bz, greatestDurationDenominator as c, getScrollerSyncerClass as c0, Ruler as c1, RefMap as c2, NowTimer as c3, StandardEvent as c4, NowIndicatorContainer as c5, DayCellContainer as c6, hasCustomDayCellContent as c7, EventContainer as c8, renderFill as c9, BgEvent as ca, WeekNumberContainer as cb, MoreLinkContainer as cc, ViewContainer as cd, triggerDateSelect as ce, getDefaultEventEnd as cf, injectStyles as cg, buildElAttrs as ch, renderText as ci, CustomRenderingStore as cj, computeEarliestStart as ck, computeLatestEnd as cl, getCoordRangeEnd as cm, FooterScrollbar as cn, createDuration as d, BASE_OPTION_DEFAULTS as e, arrayToHash as f, guid$1 as g, filterHash as h, isArraysEqual as i, buildEventSourceRefiners as j, formatWithOrdinals as k, buildRangeApiWithTimeZone as l, mergeProps as m, identity as n, intersectRanges as o, parseEventSource as p, startOfDay as q, requestJson as r, subtractDurations as s, addDays as t, unpromisify as u, hashValuesToArray as v, buildEventApis as w, createFormatter as x, diffWholeDays as y, memoize as z };