@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
@@ -23,70 +23,6 @@ function _interopNamespace(e) {
23
23
 
24
24
  var preact__namespace = /*#__PURE__*/_interopNamespace(preact);
25
25
 
26
- /*
27
- NOTE: this can be a public API, especially createElement for hooks.
28
- See examples/typescript-scheduler/src/index.ts
29
- */
30
- /*
31
- HACK for flushSync being a noop:
32
- https://github.com/preactjs/preact/issues/3929
33
- */
34
- function flushSync(renderActionToFlush) {
35
- renderActionToFlush();
36
- let oldDebounceRendering = preact__namespace.options.debounceRendering; // orig
37
- let callbackQ = [];
38
- function execCallbackSync(callback) {
39
- callbackQ.push(callback);
40
- }
41
- preact__namespace.options.debounceRendering = execCallbackSync;
42
- preact__namespace.render(preact__namespace.createElement(FakeComponent, {}), document.createElement('div'));
43
- while (callbackQ.length) {
44
- callbackQ.shift()();
45
- }
46
- preact__namespace.options.debounceRendering = oldDebounceRendering;
47
- }
48
- /*
49
- Triggers a state-change which unclogs the render queue? Needed?
50
- */
51
- class FakeComponent extends preact__namespace.Component {
52
- render() { return preact__namespace.createElement('div', {}); }
53
- componentDidMount() { this.setState({}); }
54
- }
55
- /*
56
- HACK for Preact wrongly calling shouldComponentUpdate during context changes:
57
- https://github.com/preactjs/preact/issues/2510
58
- */
59
- function createContext(defaultValue) {
60
- let ContextType = preact__namespace.createContext(defaultValue);
61
- let origProvider = ContextType.Provider;
62
- ContextType.Provider = function () {
63
- let isNew = !this.getChildContext;
64
- let children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params
65
- if (isNew) {
66
- let subs = [];
67
- this.shouldComponentUpdate = (_props) => {
68
- if (this.props.value !== _props.value) {
69
- subs.forEach((c) => {
70
- c.context = _props.value;
71
- c.forceUpdate();
72
- });
73
- }
74
- };
75
- this.sub = (c) => {
76
- subs.push(c);
77
- let old = c.componentWillUnmount;
78
- c.componentWillUnmount = () => {
79
- subs.splice(subs.indexOf(c), 1);
80
- old && old.call(c);
81
- };
82
- };
83
- }
84
- return children;
85
- };
86
- return ContextType;
87
- }
88
- const preactOptions = preact__namespace.options;
89
-
90
26
  const styleTexts = [];
91
27
  const styleEls = new Map();
92
28
  function injectStyles(styleText) {
@@ -167,7 +103,7 @@ if (typeof document !== 'undefined') {
167
103
  registerStylesRoot(document);
168
104
  }
169
105
 
170
- 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}";
106
+ 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}";
171
107
  injectStyles(css_248z);
172
108
 
173
109
  class DelayedRunner {
@@ -879,65 +815,6 @@ function memoizeObjArg(workerFunc, resEquality, teardownFunc) {
879
815
  return currentRes;
880
816
  };
881
817
  }
882
- function memoizeArraylike(// used at all?
883
- workerFunc, resEquality, teardownFunc) {
884
- let currentArgSets = [];
885
- let currentResults = [];
886
- return (newArgSets) => {
887
- let currentLen = currentArgSets.length;
888
- let newLen = newArgSets.length;
889
- let i = 0;
890
- for (; i < currentLen; i += 1) {
891
- if (!newArgSets[i]) { // one of the old sets no longer exists
892
- if (teardownFunc) {
893
- teardownFunc(currentResults[i]);
894
- }
895
- }
896
- else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {
897
- if (teardownFunc) {
898
- teardownFunc(currentResults[i]);
899
- }
900
- let res = workerFunc.apply(this, newArgSets[i]);
901
- if (!resEquality || !resEquality(res, currentResults[i])) {
902
- currentResults[i] = res;
903
- }
904
- }
905
- }
906
- for (; i < newLen; i += 1) {
907
- currentResults[i] = workerFunc.apply(this, newArgSets[i]);
908
- }
909
- currentArgSets = newArgSets;
910
- currentResults.splice(newLen); // remove excess
911
- return currentResults;
912
- };
913
- }
914
- function memoizeHashlike(workerFunc, resEquality, teardownFunc) {
915
- let currentArgHash = {};
916
- let currentResHash = {};
917
- return (newArgHash) => {
918
- let newResHash = {};
919
- for (let key in newArgHash) {
920
- if (!currentResHash[key]) {
921
- newResHash[key] = workerFunc.apply(this, newArgHash[key]);
922
- }
923
- else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {
924
- if (teardownFunc) {
925
- teardownFunc(currentResHash[key]);
926
- }
927
- let res = workerFunc.apply(this, newArgHash[key]);
928
- newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))
929
- ? currentResHash[key]
930
- : res;
931
- }
932
- else {
933
- newResHash[key] = currentResHash[key];
934
- }
935
- }
936
- currentArgHash = newArgHash;
937
- currentResHash = newResHash;
938
- return newResHash;
939
- };
940
- }
941
818
 
942
819
  const EXTENDED_SETTINGS_AND_SEVERITIES = {
943
820
  week: 3,
@@ -1368,7 +1245,6 @@ const BASE_OPTION_REFINERS = {
1368
1245
  eventDataTransform: identity,
1369
1246
  stickyHeaderDates: identity,
1370
1247
  stickyFooterScrollbar: identity,
1371
- viewHeight: identity,
1372
1248
  defaultAllDay: Boolean,
1373
1249
  eventSourceFailure: identity,
1374
1250
  eventSourceSuccess: identity,
@@ -2197,6 +2073,37 @@ Theme.prototype.iconClasses = {};
2197
2073
  Theme.prototype.baseIconClass = '';
2198
2074
  Theme.prototype.iconOverridePrefix = '';
2199
2075
 
2076
+ /*
2077
+ Like flushSync, but flushes ALL pending updates, not only those initiated in a callback
2078
+ BTW, flushSync doesn't work in Preact: https://github.com/preactjs/preact/issues/3929
2079
+ */
2080
+ function flushUpdates() {
2081
+ let oldDebounceRendering = preact__namespace.options.debounceRendering; // orig
2082
+ let callbackQ = [];
2083
+ function execCallbackSync(callback) {
2084
+ callbackQ.push(callback);
2085
+ }
2086
+ preact__namespace.options.debounceRendering = execCallbackSync;
2087
+ preact__namespace.render(preact__namespace.createElement(FakeComponent, {}), document.createElement('div'));
2088
+ while (callbackQ.length) {
2089
+ callbackQ.shift()();
2090
+ }
2091
+ preact__namespace.options.debounceRendering = oldDebounceRendering;
2092
+ }
2093
+ function flushSync(f) {
2094
+ f();
2095
+ flushUpdates();
2096
+ }
2097
+ /*
2098
+ Triggers a state-change which unclogs the render queue? Needed?
2099
+ */
2100
+ class FakeComponent extends preact__namespace.Component {
2101
+ render() { return preact__namespace.createElement('div', {}); }
2102
+ componentDidMount() { this.setState({}); }
2103
+ }
2104
+ const createContext = preact__namespace.createContext;
2105
+ const preactOptions = preact__namespace.options;
2106
+
2200
2107
  const ViewContextType = createContext({}); // for Components
2201
2108
  function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {
2202
2109
  return {
@@ -4268,8 +4175,19 @@ isStart, isEnd, context, defaultDisplayEventTime = true, defaultDisplayEventEnd
4268
4175
  if (displayEventEnd == null) {
4269
4176
  displayEventEnd = defaultDisplayEventEnd !== false;
4270
4177
  }
4271
- const startDate = (!isStart && slicedStart) ? slicedStart : eventRange.instance.range.start;
4272
- const endDate = (!isEnd && slicedEnd) ? slicedEnd : eventRange.instance.range.end;
4178
+ const startDate = (!isStart &&
4179
+ slicedStart &&
4180
+ // if seg is the first seg, but start-date cut-off by slotMinTime, (technically isStart=false)
4181
+ // we still want to display the original start-time
4182
+ startOfDay(slicedStart).valueOf() !== startOfDay(eventRange.instance.range.start).valueOf())
4183
+ ? slicedStart
4184
+ : eventRange.instance.range.start;
4185
+ const endDate = (!isEnd &&
4186
+ slicedEnd &&
4187
+ // See above HACK, but for end-time
4188
+ startOfDay(addMs(slicedEnd, -1)).valueOf() !== startOfDay(addMs(eventRange.instance.range.end, -1)).valueOf())
4189
+ ? slicedEnd
4190
+ : eventRange.instance.range.end;
4273
4191
  if (displayEventTime && !def.allDay) {
4274
4192
  if (displayEventEnd && (isStart || isEnd) && def.hasEnd) {
4275
4193
  return dateEnv.formatRange(startDate, endDate, timeFormat, {
@@ -4550,21 +4468,15 @@ but our Preact system does not commit to the DOM immediately, commits are batche
4550
4468
  so we can skip this.
4551
4469
  */
4552
4470
  function checkConfigMap() {
4471
+ let anyDirty = true;
4553
4472
  if (!isHandling) {
4554
4473
  isHandling = true;
4555
4474
  const dirtyConfigs = [];
4556
4475
  for (const [el, config] of configMap.entries()) {
4557
- let width;
4558
- let height;
4559
- if (config.client) {
4560
- width = el.clientWidth;
4561
- height = el.clientHeight;
4562
- }
4563
- else {
4564
- ({ width, height } = el.getBoundingClientRect());
4565
- }
4476
+ const { width, height } = el.getBoundingClientRect();
4566
4477
  if (storeConfigDims(config, width, height)) {
4567
4478
  dirtyConfigs.push(config);
4479
+ anyDirty = true;
4568
4480
  }
4569
4481
  }
4570
4482
  for (const dirtyConfig of dirtyConfigs) {
@@ -4573,6 +4485,7 @@ function checkConfigMap() {
4573
4485
  flushAfterSize();
4574
4486
  isHandling = false;
4575
4487
  }
4488
+ return anyDirty;
4576
4489
  }
4577
4490
  function storeConfigDims(config, width, height) {
4578
4491
  let shouldFire = false;
@@ -4600,11 +4513,7 @@ function initNative() {
4600
4513
  const config = configMap.get(el);
4601
4514
  let width;
4602
4515
  let height;
4603
- if (config.client) {
4604
- width = el.clientWidth;
4605
- height = el.clientHeight;
4606
- }
4607
- else if (entry.borderBoxSize && nativeBorderBoxEnabled) {
4516
+ if (entry.borderBoxSize && nativeBorderBoxEnabled) {
4608
4517
  const borderBoxSize = entry.borderBoxSize[0] || entry.borderBoxSize; // HACK for Firefox
4609
4518
  width = borderBoxSize.inlineSize;
4610
4519
  height = borderBoxSize.blockSize;
@@ -4619,12 +4528,11 @@ function initNative() {
4619
4528
  flushAfterSize();
4620
4529
  isHandling = false;
4621
4530
  });
4622
- function watchSize(el, callback, client, watchWidth = true, watchHeight = true) {
4623
- configMap.set(el, { callback, client, watchWidth, watchHeight });
4531
+ function watchSize(el, callback, watchWidth = true, watchHeight = true) {
4532
+ configMap.set(el, { callback, watchWidth, watchHeight });
4624
4533
  globalResizeObserver.observe(el, {
4625
- box: !client && nativeBorderBoxEnabled
4626
- ? 'border-box'
4627
- : undefined // default is 'content-box'
4534
+ box: 'border-box'
4535
+ // default is 'content-box'
4628
4536
  });
4629
4537
  return () => {
4630
4538
  configMap.delete(el);
@@ -4666,13 +4574,13 @@ function initFallback() {
4666
4574
  const [requestCheckSizes, cancelCheckSizes] = debounce(checkConfigMap, fallbackTimeout);
4667
4575
  function requestCheckSizesSync() {
4668
4576
  cancelCheckSizes();
4669
- checkConfigMap();
4577
+ return checkConfigMap();
4670
4578
  }
4671
- function watchSize(el, callback, client, watchWidth = true, watchHeight = true) {
4579
+ function watchSize(el, callback, watchWidth = true, watchHeight = true) {
4672
4580
  if (!configMap.size) {
4673
4581
  addGlobalHandlers();
4674
4582
  }
4675
- configMap.set(el, { callback, client, watchWidth, watchHeight });
4583
+ configMap.set(el, { callback, watchWidth, watchHeight });
4676
4584
  requestCheckSizes();
4677
4585
  return () => {
4678
4586
  configMap.delete(el);
@@ -4788,7 +4696,7 @@ function debounce(fn, ms) {
4788
4696
  PRECONDITION: element can only have one listener attached
4789
4697
 
4790
4698
  NOTE: If we ever kill the fallback technique and use ResizeObserver unconditionally with full
4791
- border-box support, we no longer need wrappers around the <StickyFooterScrollbar>'s <Scroller>
4699
+ border-box support, we no longer need wrappers around the <FooterScrollbar>'s <Scroller>
4792
4700
  */
4793
4701
  const [watchSize, updateSizeSync] = typeof ResizeObserver !== 'undefined'
4794
4702
  ? initNative()
@@ -4811,13 +4719,13 @@ class CalendarRoot extends BaseComponent {
4811
4719
  };
4812
4720
  this.handleBeforePrint = () => {
4813
4721
  this.setState({ forPrint: true });
4814
- flushSync(() => { }); // TODO: use noop
4722
+ flushUpdates();
4815
4723
  updateSizeSync();
4816
- flushSync(() => { }); // TODO: use noop
4724
+ flushUpdates();
4817
4725
  };
4818
4726
  this.handleAfterPrint = () => {
4819
4727
  this.setState({ forPrint: false });
4820
- flushSync(() => { }); // TODO: use noop
4728
+ flushUpdates();
4821
4729
  };
4822
4730
  }
4823
4731
  render() {
@@ -4904,7 +4812,7 @@ function getUniqueDomId() {
4904
4812
  }
4905
4813
 
4906
4814
  function getIsHeightAuto(options) {
4907
- return options.height === 'auto' || options.viewHeight === 'auto';
4815
+ return options.height === 'auto' || options.contentHeight === 'auto';
4908
4816
  }
4909
4817
  function getStickyHeaderDates(options) {
4910
4818
  let { stickyHeaderDates } = options;
@@ -4943,7 +4851,10 @@ class CalendarImpl {
4943
4851
  callback();
4944
4852
  }
4945
4853
  updateSize() {
4946
- requestAnimationFrame(updateSizeSync);
4854
+ let cycleCount = 0;
4855
+ while (cycleCount++ < 3 && updateSizeSync()) {
4856
+ flushUpdates();
4857
+ }
4947
4858
  }
4948
4859
  // Options
4949
4860
  // -----------------------------------------------------------------------------------------------------------------
@@ -5530,63 +5441,11 @@ function buildNavLinkAttrs(context, dateMarker, viewType = 'day', dateStr = buil
5530
5441
  calendarApi.zoomTo(dateMarker, viewType);
5531
5442
  }
5532
5443
  };
5533
- return Object.assign({ 'role': 'link', 'aria-label': formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'data-navlink': '' }, (isTabbable
5444
+ return Object.assign({ 'role': 'link', 'aria-label': formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'className': 'fc-navlink' }, (isTabbable
5534
5445
  ? createAriaClickAttrs(handleInteraction)
5535
5446
  : { onClick: handleInteraction }));
5536
5447
  }
5537
5448
 
5538
- let _isRtlScrollbarOnLeft = null;
5539
- function getIsRtlScrollbarOnLeft() {
5540
- if (_isRtlScrollbarOnLeft === null) {
5541
- _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();
5542
- }
5543
- return _isRtlScrollbarOnLeft;
5544
- }
5545
- function computeIsRtlScrollbarOnLeft() {
5546
- let outerEl = document.createElement('div');
5547
- applyStyle(outerEl, {
5548
- position: 'absolute',
5549
- top: -1000,
5550
- left: 0,
5551
- border: 0,
5552
- padding: 0,
5553
- overflow: 'scroll',
5554
- direction: 'rtl',
5555
- });
5556
- outerEl.innerHTML = '<div></div>';
5557
- document.body.appendChild(outerEl);
5558
- let innerEl = outerEl.firstChild;
5559
- let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;
5560
- outerEl.remove();
5561
- return res;
5562
- }
5563
-
5564
- let _scrollbarWidths;
5565
- function getScrollbarWidths() {
5566
- if (!_scrollbarWidths) {
5567
- _scrollbarWidths = computeScrollbarWidths();
5568
- }
5569
- return _scrollbarWidths;
5570
- }
5571
- function computeScrollbarWidths() {
5572
- let el = document.createElement('div');
5573
- el.style.overflow = 'scroll';
5574
- el.style.position = 'absolute';
5575
- el.style.top = '-9999px';
5576
- el.style.left = '-9999px';
5577
- document.body.appendChild(el);
5578
- let res = computeScrollbarWidthsForEl(el);
5579
- document.body.removeChild(el);
5580
- return res;
5581
- }
5582
- // WARNING: will include border
5583
- function computeScrollbarWidthsForEl(el) {
5584
- return {
5585
- x: el.offsetHeight - el.clientHeight,
5586
- y: el.offsetWidth - el.clientWidth,
5587
- };
5588
- }
5589
-
5590
5449
  function computeEdges(el, getPadding = false) {
5591
5450
  let computedStyle = window.getComputedStyle(el);
5592
5451
  let borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;
@@ -5605,7 +5464,7 @@ function computeEdges(el, getPadding = false) {
5605
5464
  scrollbarLeft: 0,
5606
5465
  scrollbarRight: 0,
5607
5466
  };
5608
- if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?
5467
+ if (computedStyle.direction === 'rtl') {
5609
5468
  res.scrollbarLeft = scrollbarLeftRight;
5610
5469
  }
5611
5470
  else {
@@ -5674,6 +5533,13 @@ function getClippingParents(el) {
5674
5533
  }
5675
5534
  return parents;
5676
5535
  }
5536
+ // WARNING: will include border
5537
+ function computeScrollbarWidthsForEl(el) {
5538
+ return {
5539
+ x: el.offsetHeight - el.clientHeight,
5540
+ y: el.offsetWidth - el.clientWidth,
5541
+ };
5542
+ }
5677
5543
 
5678
5544
  /*
5679
5545
  Records offset information for a set of elements, relative to an origin element.
@@ -5887,7 +5753,7 @@ class DateComponent extends BaseComponent {
5887
5753
  isValidDateDownEl(el) {
5888
5754
  return !el.closest('.fc-event:not(.fc-bg-event)') &&
5889
5755
  !el.closest('.fc-more-link') && // a "more.." link
5890
- !el.closest('[data-navlink]') && // a clickable nav link
5756
+ !el.closest('.fc-navlink') && // a clickable nav link
5891
5757
  !el.closest('.fc-popover'); // hack
5892
5758
  }
5893
5759
  }
@@ -6484,37 +6350,54 @@ class Scroller extends DateComponent {
6484
6350
  constructor() {
6485
6351
  super(...arguments);
6486
6352
  this.handleEl = (el) => {
6487
- const { props } = this;
6488
6353
  if (this.el) {
6489
6354
  this.el = null;
6490
6355
  this.listener.destroy();
6491
- this.disconnectSize();
6492
- setRef(props.clientWidthRef, null);
6493
- setRef(props.clientHeightRef, null);
6494
- setRef(props.endScrollbarWidthRef, null);
6495
- setRef(props.bottomScrollbarWidthRef, null);
6496
6356
  }
6497
6357
  if (el) {
6498
6358
  this.el = el;
6499
6359
  this.listener = new ScrollListener(el);
6500
- this.disconnectSize = watchSize(el, (clientWidth, clientHeight) => {
6501
- const { props } = this;
6502
- const endScrollbarWidth = el.offsetWidth - clientWidth;
6503
- const bottomScrollbarWidth = el.offsetHeight - clientHeight;
6504
- if (this.currentClientWidth !== clientWidth) {
6505
- setRef(props.clientWidthRef, this.currentClientWidth = clientWidth);
6506
- }
6507
- if (this.currentClientHeight !== clientHeight) {
6508
- setRef(props.clientHeightRef, this.currentClientHeight = clientHeight);
6360
+ }
6361
+ };
6362
+ this.handleHRuler = (el) => {
6363
+ if (this.disconnectHRuler) {
6364
+ this.disconnectHRuler();
6365
+ this.disconnectHRuler = undefined;
6366
+ if (this.clientWidth !== undefined) {
6367
+ this.clientWidth = undefined;
6368
+ setRef(this.props.clientWidthRef, null);
6369
+ }
6370
+ }
6371
+ if (el) {
6372
+ this.disconnectHRuler = watchWidth(el, (clientWidth) => {
6373
+ if (clientWidth !== this.clientWidth) {
6374
+ this.clientWidth = clientWidth;
6375
+ setRef(this.props.clientWidthRef, clientWidth);
6509
6376
  }
6510
- // are these isDimsEqual calls necessary?
6511
- if (!isDimsEqual(this.currentBottomScrollbarWidth, bottomScrollbarWidth)) {
6512
- setRef(props.bottomScrollbarWidthRef, this.currentBottomScrollbarWidth = bottomScrollbarWidth);
6377
+ });
6378
+ }
6379
+ };
6380
+ this.handleVRuler = (el) => {
6381
+ if (this.disconnectVRuler) {
6382
+ this.disconnectVRuler();
6383
+ this.disconnectVRuler = undefined;
6384
+ if (this.clientHeight !== undefined) {
6385
+ this.clientHeight = undefined;
6386
+ setRef(this.props.clientHeightRef, null);
6387
+ }
6388
+ }
6389
+ if (el) {
6390
+ this.disconnectVRuler = watchHeight(el, (clientHeight) => {
6391
+ if (clientHeight !== this.clientHeight) {
6392
+ this.clientHeight = clientHeight;
6393
+ setRef(this.props.clientHeightRef, clientHeight);
6513
6394
  }
6514
- if (!isDimsEqual(this.currentEndScrollbarWidth, endScrollbarWidth)) {
6515
- setRef(props.endScrollbarWidthRef, this.currentEndScrollbarWidth = endScrollbarWidth);
6395
+ const bottomScrollbarWidth = Math.round(this.el.getBoundingClientRect().height - clientHeight);
6396
+ if (bottomScrollbarWidth !== this.bottomScrollbarWidth) {
6397
+ this.bottomScrollbarWidth = bottomScrollbarWidth;
6398
+ setRef(this.props.bottomScrollbarWidthRef, bottomScrollbarWidth);
6516
6399
  }
6517
- }, /* client(width+height) = */ true);
6400
+ });
6518
6401
  }
6519
6402
  };
6520
6403
  }
@@ -6523,7 +6406,11 @@ class Scroller extends DateComponent {
6523
6406
  // if there's only one axis that needs scrolling, the other axis will unintentionally have
6524
6407
  // scrollbars too if we don't force to 'hidden'
6525
6408
  const fallbackOverflow = (props.horizontal || props.vertical) ? 'hidden' : '';
6526
- return (preact.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));
6409
+ return (preact.createElement("div", { ref: this.handleEl, className: joinClassNames(props.className, 'fc-scroller fc-rel', // fc-rel for children fc-fill-top/start
6410
+ props.hideScrollbars && 'fc-scroller-no-bars'), style: Object.assign(Object.assign({}, props.style), { overflowX: props.horizontal ? 'auto' : fallbackOverflow, overflowY: props.vertical ? 'auto' : fallbackOverflow }) },
6411
+ props.children,
6412
+ Boolean(props.clientWidthRef) && (preact.createElement("div", { ref: this.handleHRuler, className: 'fc-fill-top' })),
6413
+ Boolean(props.clientHeightRef || props.bottomScrollbarWidthRef) && (preact.createElement("div", { ref: this.handleVRuler, className: 'fc-fill-start' }))));
6527
6414
  }
6528
6415
  endScroll() {
6529
6416
  this.listener.endScroll();
@@ -6598,9 +6485,6 @@ let _rtlScrollerSystem;
6598
6485
  function getRtlScrollerSystem() {
6599
6486
  return _rtlScrollerSystem || (_rtlScrollerSystem = detectRtlScrollerSystem());
6600
6487
  }
6601
- /*
6602
- TODO: make this more minimal now that scrollbar-side detection isn't needed?
6603
- */
6604
6488
  function detectRtlScrollerSystem() {
6605
6489
  let el = document.createElement('div');
6606
6490
  el.style.position = 'absolute';
@@ -6933,6 +6817,30 @@ function anyRangesContainRange(outerRanges, innerRange) {
6933
6817
  return false;
6934
6818
  }
6935
6819
 
6820
+ class Ruler extends BaseComponent {
6821
+ constructor() {
6822
+ super(...arguments);
6823
+ this.elRef = preact.createRef();
6824
+ }
6825
+ render() {
6826
+ return (preact.createElement("div", { ref: this.elRef }));
6827
+ }
6828
+ componentDidMount() {
6829
+ const { props } = this;
6830
+ const el = this.elRef.current;
6831
+ this.disconnectWidth = watchWidth(el, (width) => {
6832
+ setRef(props.widthRef, width);
6833
+ });
6834
+ }
6835
+ componentWillUnmount() {
6836
+ this.disconnectWidth();
6837
+ const { props } = this;
6838
+ if (props.widthRef) {
6839
+ setRef(props.widthRef, null);
6840
+ }
6841
+ }
6842
+ }
6843
+
6936
6844
  /*
6937
6845
  TODO: make API where createRefMap() called
6938
6846
  */
@@ -7031,6 +6939,8 @@ function buildDayRange(date) {
7031
6939
  class EventContainer extends BaseComponent {
7032
6940
  constructor() {
7033
6941
  super(...arguments);
6942
+ // memo
6943
+ this.buildPublicEvent = memoize((context, eventDef, eventInstance) => new EventImpl(context, eventDef, eventInstance));
7034
6944
  this.handleEl = (el) => {
7035
6945
  this.el = el;
7036
6946
  if (el) {
@@ -7044,7 +6954,9 @@ class EventContainer extends BaseComponent {
7044
6954
  const { eventRange } = props;
7045
6955
  const { ui } = eventRange;
7046
6956
  const renderProps = {
7047
- event: new EventImpl(context, eventRange.def, eventRange.instance),
6957
+ // make stable. everything else atomic
6958
+ // FYI, eventRange unfortunately gets reconstructed a lot, but def/instance is stable
6959
+ event: this.buildPublicEvent(context, eventRange.def, eventRange.instance),
7048
6960
  view: context.viewApi,
7049
6961
  timeText: props.timeText,
7050
6962
  textColor: ui.textColor,
@@ -7063,7 +6975,7 @@ class EventContainer extends BaseComponent {
7063
6975
  isDragging: Boolean(props.isDragging),
7064
6976
  isResizing: Boolean(props.isResizing),
7065
6977
  };
7066
- return (preact.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 })));
6978
+ return (preact.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));
7067
6979
  }
7068
6980
  componentDidUpdate(prevProps) {
7069
6981
  if (this.el && this.props.eventRange !== prevProps.eventRange) {
@@ -7167,6 +7079,7 @@ const WeekNumberContainer = (props) => (preact.createElement(ViewContextType.Con
7167
7079
  }));
7168
7080
 
7169
7081
  const PADDING_FROM_VIEWPORT = 10;
7082
+ const ROW_BORDER_WIDTH = 1;
7170
7083
  class Popover extends BaseComponent {
7171
7084
  constructor() {
7172
7085
  super(...arguments);
@@ -7208,8 +7121,8 @@ class Popover extends BaseComponent {
7208
7121
  return compat.createPortal(preact.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 }),
7209
7122
  preact.createElement("div", { tabIndex: 0, style: { outline: 'none' }, ref: this.focusStartRef }),
7210
7123
  preact.createElement("div", { className: 'fc-popover-header ' + theme.getClassName('popoverHeader') },
7211
- preact.createElement("span", { className: "fc-popover-title", id: this.titleId }, props.title),
7212
- preact.createElement("span", Object.assign({ role: 'button', "aria-label": options.closeHint, className: 'fc-popover-close ' + theme.getIconClass('close') }, createAriaClickAttrs(this.handleClose), { ref: this.closeRef }))),
7124
+ preact.createElement("div", { className: "fc-popover-title", id: this.titleId }, props.title),
7125
+ preact.createElement("div", Object.assign({ role: 'button', "aria-label": options.closeHint, className: 'fc-popover-close ' + theme.getIconClass('close') }, createAriaClickAttrs(this.handleClose), { ref: this.closeRef }))),
7213
7126
  preact.createElement("div", { className: 'fc-popover-body ' + theme.getClassName('popoverContent') }, props.children),
7214
7127
  preact.createElement("div", { tabIndex: 0, style: { outline: 'none' }, ref: this.focusEndRef })), props.parentEl);
7215
7128
  }
@@ -7236,7 +7149,8 @@ class Popover extends BaseComponent {
7236
7149
  let popoverDims = rootEl.getBoundingClientRect();
7237
7150
  // position relative to viewport
7238
7151
  let popoverTop = alignParentTop
7239
- ? alignEl.closest(alignParentTop).getBoundingClientRect().top
7152
+ // HACK: subtract 1 for DayGrid, which has borders on row-bottom. Only view that uses alignParentTop
7153
+ ? alignEl.closest(alignParentTop).getBoundingClientRect().top - ROW_BORDER_WIDTH
7240
7154
  : alignmentRect.top;
7241
7155
  let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
7242
7156
  // constrain
@@ -7290,7 +7204,7 @@ class MorePopover extends DateComponent {
7290
7204
  start: props.startDate,
7291
7205
  end: props.endDate,
7292
7206
  } }, props.dateSpanProps),
7293
- dayEl: rootEl,
7207
+ getDayEl: () => rootEl,
7294
7208
  rect: {
7295
7209
  left: 0,
7296
7210
  top: 0,
@@ -7319,21 +7233,22 @@ class MoreLinkContainer extends BaseComponent {
7319
7233
  };
7320
7234
  this.handleClick = (ev) => {
7321
7235
  let { props, context } = this;
7322
- let { moreLinkClick } = context.options;
7236
+ let { dateEnv, options } = context;
7237
+ let { moreLinkClick } = options;
7323
7238
  let date = computeRange(props).start;
7324
7239
  function buildPublicSeg(seg) {
7325
7240
  let { def, instance, range } = seg.eventRange;
7326
7241
  return {
7327
7242
  event: new EventImpl(context, def, instance),
7328
- start: context.dateEnv.toDate(range.start),
7329
- end: context.dateEnv.toDate(range.end),
7243
+ start: dateEnv.toDate(range.start),
7244
+ end: dateEnv.toDate(range.end),
7330
7245
  isStart: seg.isStart,
7331
7246
  isEnd: seg.isEnd,
7332
7247
  };
7333
7248
  }
7334
7249
  if (typeof moreLinkClick === 'function') {
7335
7250
  moreLinkClick = moreLinkClick({
7336
- date,
7251
+ date: dateEnv.toDate(date),
7337
7252
  allDay: Boolean(props.allDayDate),
7338
7253
  allSegs: props.segs.map(buildPublicSeg),
7339
7254
  hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
@@ -7451,7 +7366,7 @@ class CustomRenderingStore extends Store {
7451
7366
  }
7452
7367
  }
7453
7368
 
7454
- class StickyFooterScrollbar extends BaseComponent {
7369
+ class FooterScrollbar extends BaseComponent {
7455
7370
  constructor() {
7456
7371
  super(...arguments);
7457
7372
  this.rootElRef = preact.createRef();
@@ -7462,7 +7377,7 @@ class StickyFooterScrollbar extends BaseComponent {
7462
7377
  // the outer dimensions change, but the inner dimensions do not. The Scroller's
7463
7378
  // dimension-watching, when used in ponyfill-mode, can't fire on border-box change, so we
7464
7379
  // workaround it by monitoring dimensions of a wrapper instead
7465
- return (preact.createElement("div", { ref: this.rootElRef, className: 'fc-sticky-footer-scrollbar' },
7380
+ return (preact.createElement("div", { ref: this.rootElRef, className: joinClassNames('fc-footer-scrollbar', props.isSticky && 'fc-footer-scrollbar-sticky') },
7466
7381
  preact.createElement(Scroller, { horizontal: true, ref: props.scrollerRef },
7467
7382
  preact.createElement("div", { style: { minWidth: props.canvasWidth } }))));
7468
7383
  }
@@ -7500,6 +7415,7 @@ exports.ElementScrollController = ElementScrollController;
7500
7415
  exports.Emitter = Emitter;
7501
7416
  exports.EventContainer = EventContainer;
7502
7417
  exports.EventImpl = EventImpl;
7418
+ exports.FooterScrollbar = FooterScrollbar;
7503
7419
  exports.Interaction = Interaction;
7504
7420
  exports.JsonRequestError = JsonRequestError;
7505
7421
  exports.MoreLinkContainer = MoreLinkContainer;
@@ -7510,13 +7426,13 @@ exports.PositionCache = PositionCache;
7510
7426
  exports.PureComponent = PureComponent;
7511
7427
  exports.RefMap = RefMap;
7512
7428
  exports.RenderId = RenderId;
7429
+ exports.Ruler = Ruler;
7513
7430
  exports.ScrollController = ScrollController;
7514
7431
  exports.Scroller = Scroller;
7515
7432
  exports.SegHierarchy = SegHierarchy;
7516
7433
  exports.Slicer = Slicer;
7517
7434
  exports.Splitter = Splitter;
7518
7435
  exports.StandardEvent = StandardEvent;
7519
- exports.StickyFooterScrollbar = StickyFooterScrollbar;
7520
7436
  exports.Theme = Theme;
7521
7437
  exports.VIEW_OPTION_REFINERS = VIEW_OPTION_REFINERS;
7522
7438
  exports.ViewContainer = ViewContainer;
@@ -7583,6 +7499,7 @@ exports.eventTupleToStore = eventTupleToStore;
7583
7499
  exports.filterHash = filterHash;
7584
7500
  exports.flexibleCompare = flexibleCompare;
7585
7501
  exports.flushSync = flushSync;
7502
+ exports.flushUpdates = flushUpdates;
7586
7503
  exports.formatDayString = formatDayString;
7587
7504
  exports.formatIsoMonthStr = formatIsoMonthStr;
7588
7505
  exports.formatIsoTimeString = formatIsoTimeString;
@@ -7600,12 +7517,10 @@ exports.getEventTagAndAttrs = getEventTagAndAttrs;
7600
7517
  exports.getEventTargetViaRoot = getEventTargetViaRoot;
7601
7518
  exports.getInitialDate = getInitialDate;
7602
7519
  exports.getIsHeightAuto = getIsHeightAuto;
7603
- exports.getIsRtlScrollbarOnLeft = getIsRtlScrollbarOnLeft;
7604
7520
  exports.getNormalizedScrollX = getNormalizedScrollX;
7605
7521
  exports.getNow = getNow;
7606
7522
  exports.getRectCenter = getRectCenter;
7607
7523
  exports.getRelevantEvents = getRelevantEvents;
7608
- exports.getScrollbarWidths = getScrollbarWidths;
7609
7524
  exports.getScrollerSyncerClass = getScrollerSyncerClass;
7610
7525
  exports.getSlotClassName = getSlotClassName;
7611
7526
  exports.getStickyFooterScrollbar = getStickyFooterScrollbar;
@@ -7637,8 +7552,6 @@ exports.listenBySelector = listenBySelector;
7637
7552
  exports.listenToHoverBySelector = listenToHoverBySelector;
7638
7553
  exports.mapHash = mapHash;
7639
7554
  exports.memoize = memoize;
7640
- exports.memoizeArraylike = memoizeArraylike;
7641
- exports.memoizeHashlike = memoizeHashlike;
7642
7555
  exports.memoizeObjArg = memoizeObjArg;
7643
7556
  exports.mergeEventStores = mergeEventStores;
7644
7557
  exports.mergeProps = mergeProps;