@fullcalendar/core 7.0.0-beta.0 → 7.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/index.cjs +7 -7
  2. package/index.global.js +228 -146
  3. package/index.global.min.js +2 -2
  4. package/index.js +8 -8
  5. package/internal-common.cjs +147 -65
  6. package/internal-common.d.ts +50 -27
  7. package/internal-common.js +144 -61
  8. package/internal.cjs +4 -5
  9. package/internal.d.ts +1 -1
  10. package/internal.js +1 -1
  11. package/locales/af.global.js +1 -1
  12. package/locales/af.global.min.js +1 -1
  13. package/locales/ar-dz.global.js +1 -1
  14. package/locales/ar-dz.global.min.js +1 -1
  15. package/locales/ar-kw.global.js +1 -1
  16. package/locales/ar-kw.global.min.js +1 -1
  17. package/locales/ar-ly.global.js +1 -1
  18. package/locales/ar-ly.global.min.js +1 -1
  19. package/locales/ar-ma.global.js +1 -1
  20. package/locales/ar-ma.global.min.js +1 -1
  21. package/locales/ar-sa.global.js +1 -1
  22. package/locales/ar-sa.global.min.js +1 -1
  23. package/locales/ar-tn.global.js +1 -1
  24. package/locales/ar-tn.global.min.js +1 -1
  25. package/locales/ar.global.js +1 -1
  26. package/locales/ar.global.min.js +1 -1
  27. package/locales/az.global.js +1 -1
  28. package/locales/az.global.min.js +1 -1
  29. package/locales/bg.global.js +1 -1
  30. package/locales/bg.global.min.js +1 -1
  31. package/locales/bn.global.js +1 -1
  32. package/locales/bn.global.min.js +1 -1
  33. package/locales/bs.global.js +1 -1
  34. package/locales/bs.global.min.js +1 -1
  35. package/locales/ca.global.js +1 -1
  36. package/locales/ca.global.min.js +1 -1
  37. package/locales/cs.global.js +1 -1
  38. package/locales/cs.global.min.js +1 -1
  39. package/locales/cy.global.js +1 -1
  40. package/locales/cy.global.min.js +1 -1
  41. package/locales/da.global.js +1 -1
  42. package/locales/da.global.min.js +1 -1
  43. package/locales/de-at.global.js +1 -1
  44. package/locales/de-at.global.min.js +1 -1
  45. package/locales/de.global.js +1 -1
  46. package/locales/de.global.min.js +1 -1
  47. package/locales/el.global.js +1 -1
  48. package/locales/el.global.min.js +1 -1
  49. package/locales/en-au.global.js +1 -1
  50. package/locales/en-au.global.min.js +1 -1
  51. package/locales/en-gb.global.js +1 -1
  52. package/locales/en-gb.global.min.js +1 -1
  53. package/locales/en-nz.global.js +1 -1
  54. package/locales/en-nz.global.min.js +1 -1
  55. package/locales/eo.global.js +1 -1
  56. package/locales/eo.global.min.js +1 -1
  57. package/locales/es-us.global.js +1 -1
  58. package/locales/es-us.global.min.js +1 -1
  59. package/locales/es.global.js +1 -1
  60. package/locales/es.global.min.js +1 -1
  61. package/locales/et.global.js +1 -1
  62. package/locales/et.global.min.js +1 -1
  63. package/locales/eu.global.js +1 -1
  64. package/locales/eu.global.min.js +1 -1
  65. package/locales/fa.global.js +1 -1
  66. package/locales/fa.global.min.js +1 -1
  67. package/locales/fi.global.js +1 -1
  68. package/locales/fi.global.min.js +1 -1
  69. package/locales/fr-ca.global.js +1 -1
  70. package/locales/fr-ca.global.min.js +1 -1
  71. package/locales/fr-ch.global.js +1 -1
  72. package/locales/fr-ch.global.min.js +1 -1
  73. package/locales/fr.global.js +1 -1
  74. package/locales/fr.global.min.js +1 -1
  75. package/locales/gl.global.js +1 -1
  76. package/locales/gl.global.min.js +1 -1
  77. package/locales/he.global.js +1 -1
  78. package/locales/he.global.min.js +1 -1
  79. package/locales/hi.global.js +1 -1
  80. package/locales/hi.global.min.js +1 -1
  81. package/locales/hr.global.js +1 -1
  82. package/locales/hr.global.min.js +1 -1
  83. package/locales/hu.global.js +1 -1
  84. package/locales/hu.global.min.js +1 -1
  85. package/locales/hy-am.global.js +1 -1
  86. package/locales/hy-am.global.min.js +1 -1
  87. package/locales/id.global.js +1 -1
  88. package/locales/id.global.min.js +1 -1
  89. package/locales/is.global.js +1 -1
  90. package/locales/is.global.min.js +1 -1
  91. package/locales/it.global.js +1 -1
  92. package/locales/it.global.min.js +1 -1
  93. package/locales/ja.global.js +1 -1
  94. package/locales/ja.global.min.js +1 -1
  95. package/locales/ka.global.js +1 -1
  96. package/locales/ka.global.min.js +1 -1
  97. package/locales/kk.global.js +1 -1
  98. package/locales/kk.global.min.js +1 -1
  99. package/locales/km.global.js +1 -1
  100. package/locales/km.global.min.js +1 -1
  101. package/locales/ko.global.js +1 -1
  102. package/locales/ko.global.min.js +1 -1
  103. package/locales/ku.global.js +1 -1
  104. package/locales/ku.global.min.js +1 -1
  105. package/locales/lb.global.js +1 -1
  106. package/locales/lb.global.min.js +1 -1
  107. package/locales/lt.global.js +1 -1
  108. package/locales/lt.global.min.js +1 -1
  109. package/locales/lv.global.js +1 -1
  110. package/locales/lv.global.min.js +1 -1
  111. package/locales/mk.global.js +1 -1
  112. package/locales/mk.global.min.js +1 -1
  113. package/locales/ms.global.js +1 -1
  114. package/locales/ms.global.min.js +1 -1
  115. package/locales/nb.global.js +1 -1
  116. package/locales/nb.global.min.js +1 -1
  117. package/locales/ne.global.js +1 -1
  118. package/locales/ne.global.min.js +1 -1
  119. package/locales/nl.global.js +1 -1
  120. package/locales/nl.global.min.js +1 -1
  121. package/locales/nn.global.js +1 -1
  122. package/locales/nn.global.min.js +1 -1
  123. package/locales/pl.global.js +1 -1
  124. package/locales/pl.global.min.js +1 -1
  125. package/locales/pt-br.global.js +1 -1
  126. package/locales/pt-br.global.min.js +1 -1
  127. package/locales/pt.global.js +1 -1
  128. package/locales/pt.global.min.js +1 -1
  129. package/locales/ro.global.js +1 -1
  130. package/locales/ro.global.min.js +1 -1
  131. package/locales/ru.global.js +1 -1
  132. package/locales/ru.global.min.js +1 -1
  133. package/locales/si-lk.global.js +1 -1
  134. package/locales/si-lk.global.min.js +1 -1
  135. package/locales/sk.global.js +1 -1
  136. package/locales/sk.global.min.js +1 -1
  137. package/locales/sl.global.js +1 -1
  138. package/locales/sl.global.min.js +1 -1
  139. package/locales/sm.global.js +1 -1
  140. package/locales/sm.global.min.js +1 -1
  141. package/locales/sq.global.js +1 -1
  142. package/locales/sq.global.min.js +1 -1
  143. package/locales/sr-cyrl.global.js +1 -1
  144. package/locales/sr-cyrl.global.min.js +1 -1
  145. package/locales/sr.global.js +1 -1
  146. package/locales/sr.global.min.js +1 -1
  147. package/locales/sv.global.js +1 -1
  148. package/locales/sv.global.min.js +1 -1
  149. package/locales/ta-in.global.js +1 -1
  150. package/locales/ta-in.global.min.js +1 -1
  151. package/locales/th.global.js +1 -1
  152. package/locales/th.global.min.js +1 -1
  153. package/locales/tr.global.js +1 -1
  154. package/locales/tr.global.min.js +1 -1
  155. package/locales/ug.global.js +1 -1
  156. package/locales/ug.global.min.js +1 -1
  157. package/locales/uk.global.js +1 -1
  158. package/locales/uk.global.min.js +1 -1
  159. package/locales/uz-cy.global.js +1 -1
  160. package/locales/uz-cy.global.min.js +1 -1
  161. package/locales/uz.global.js +1 -1
  162. package/locales/uz.global.min.js +1 -1
  163. package/locales/vi.global.js +1 -1
  164. package/locales/vi.global.min.js +1 -1
  165. package/locales/zh-cn.global.js +1 -1
  166. package/locales/zh-cn.global.min.js +1 -1
  167. package/locales/zh-tw.global.js +1 -1
  168. package/locales/zh-tw.global.min.js +1 -1
  169. package/locales-all.global.js +1 -1
  170. package/locales-all.global.min.js +1 -1
  171. package/package.json +1 -1
  172. package/preact.d.ts +6 -0
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { m as mergeProps, g as guid, i as isArraysEqual, T as Theme, a as mapHash, B as BaseComponent, V as ViewContextType, C as ContentContainer, b as buildViewClassNames, c as greatestDurationDenominator, d as createDuration, e as BASE_OPTION_DEFAULTS, f as arrayToHash, h as filterHash, j as buildEventSourceRefiners, p as parseEventSource, k as formatWithOrdinals, u as unpromisify, l as buildRangeApiWithTimeZone, n as identity, r as requestJson, s as subtractDurations, o as intersectRanges, q as startOfDay, t as addDays, v as hashValuesToArray, w as buildEventApis, D as DelayedRunner, x as createFormatter, y as diffWholeDays, z as memoize, A as memoizeObjArg, E as isPropsEqual, F as Emitter, G as getInitialDate, H as rangeContainsMarker, I as createEmptyEventStore, J as reduceCurrentDate, K as reduceEventStore, L as rezoneEventStoreDates, M as mergeRawOptions, N as BASE_OPTION_REFINERS, O as CALENDAR_LISTENER_REFINERS, P as CALENDAR_OPTION_REFINERS, Q as COMPLEX_OPTION_COMPARATORS, R as VIEW_OPTION_REFINERS, S as DateEnv, U as DateProfileGenerator, W as createEventUi, X as parseBusinessHours, Y as Interaction, Z as getElSeg, _ as elementClosest, $ as EventImpl, a0 as listenBySelector, a1 as listenToHoverBySelector, a2 as PureComponent, a3 as buildViewContext, a4 as parseInteractionSettings, a5 as interactionSettingsStore, a6 as getNow, a7 as getIsHeightAuto, a8 as CalendarImpl, a9 as flushSync, aa as CalendarRoot, ab as RenderId, ac as ensureElHasStyles, ad as applyStyleProp, ae as sliceEventStore } from './internal-common.js';
1
+ import { m as mergeProps, g as guid, i as isArraysEqual, T as Theme, a as mapHash, B as BaseComponent, V as ViewContextType, C as ContentContainer, b as buildViewClassNames, c as greatestDurationDenominator, d as createDuration, e as BASE_OPTION_DEFAULTS, f as arrayToHash, h as filterHash, j as buildEventSourceRefiners, p as parseEventSource, k as formatWithOrdinals, u as unpromisify, l as buildRangeApiWithTimeZone, n as identity, r as requestJson, s as subtractDurations, o as intersectRanges, q as startOfDay, t as addDays, v as hashValuesToArray, w as buildEventApis, D as DelayedRunner, x as createFormatter, y as diffWholeDays, z as memoize, A as memoizeObjArg, E as isPropsEqual, F as Emitter, G as getInitialDate, H as rangeContainsMarker, I as createEmptyEventStore, J as reduceCurrentDate, K as reduceEventStore, L as rezoneEventStoreDates, M as mergeRawOptions, N as BASE_OPTION_REFINERS, O as CALENDAR_LISTENER_REFINERS, P as CALENDAR_OPTION_REFINERS, Q as COMPLEX_OPTION_COMPARATORS, R as VIEW_OPTION_REFINERS, S as DateEnv, U as DateProfileGenerator, W as createEventUi, X as parseBusinessHours, Y as Interaction, Z as getElEventRange, _ as elementClosest, $ as EventImpl, a0 as listenBySelector, a1 as listenToHoverBySelector, a2 as PureComponent, a3 as buildViewContext, a4 as parseInteractionSettings, a5 as interactionSettingsStore, a6 as getNow, a7 as getIsHeightAuto, a8 as CalendarImpl, a9 as flushSync, aa as CalendarRoot, ab as RenderId, ac as ensureElHasStyles, ad as applyStyleProp, ae as sliceEventStore } from './internal-common.js';
2
2
  export { af as JsonRequestError } from './internal-common.js';
3
3
  import { createElement, Component, Fragment, render } from 'preact';
4
4
  import 'preact/compat';
@@ -1705,8 +1705,8 @@ class EventClicking extends Interaction {
1705
1705
  this.handleSegClick = (ev, segEl) => {
1706
1706
  let { component } = this;
1707
1707
  let { context } = component;
1708
- let seg = getElSeg(segEl);
1709
- if (seg && // might be the <div> surrounding the more link
1708
+ let eventRange = getElEventRange(segEl);
1709
+ if (eventRange && // might be the <div> surrounding the more link
1710
1710
  component.isValidSegDownEl(ev.target)) {
1711
1711
  // our way to simulate a link click for elements that can't be <a> tags
1712
1712
  // grab before trigger fired in case trigger trashes DOM thru rerendering
@@ -1714,7 +1714,7 @@ class EventClicking extends Interaction {
1714
1714
  let url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';
1715
1715
  context.emitter.trigger('eventClick', {
1716
1716
  el: segEl,
1717
- event: new EventImpl(component.context, seg.eventRange.def, seg.eventRange.instance),
1717
+ event: new EventImpl(component.context, eventRange.def, eventRange.instance),
1718
1718
  jsEvent: ev,
1719
1719
  view: context.viewApi,
1720
1720
  });
@@ -1742,7 +1742,7 @@ class EventHovering extends Interaction {
1742
1742
  }
1743
1743
  };
1744
1744
  this.handleSegEnter = (ev, segEl) => {
1745
- if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper
1745
+ if (getElEventRange(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper
1746
1746
  this.currentSegEl = segEl;
1747
1747
  this.triggerEvent('eventMouseEnter', ev, segEl);
1748
1748
  }
@@ -1762,11 +1762,11 @@ class EventHovering extends Interaction {
1762
1762
  triggerEvent(publicEvName, ev, segEl) {
1763
1763
  let { component } = this;
1764
1764
  let { context } = component;
1765
- let seg = getElSeg(segEl);
1765
+ let eventRange = getElEventRange(segEl);
1766
1766
  if (!ev || component.isValidSegDownEl(ev.target)) {
1767
1767
  context.emitter.trigger(publicEvName, {
1768
1768
  el: segEl,
1769
- event: new EventImpl(context, seg.eventRange.def, seg.eventRange.instance),
1769
+ event: new EventImpl(context, eventRange.def, eventRange.instance),
1770
1770
  jsEvent: ev,
1771
1771
  view: context.viewApi,
1772
1772
  });
@@ -2074,6 +2074,6 @@ function sliceEvents(props, allDay) {
2074
2074
  return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
2075
2075
  }
2076
2076
 
2077
- const version = '7.0.0-beta.0';
2077
+ const version = '7.0.0-beta.1';
2078
2078
 
2079
2079
  export { Calendar, createPlugin, formatDate, formatRange, globalLocales, globalPlugins, sliceEvents, version };
@@ -4297,12 +4297,12 @@ function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshol
4297
4297
  function hasBgRendering(def) {
4298
4298
  return def.ui.display === 'background' || def.ui.display === 'inverse-background';
4299
4299
  }
4300
- function setElSeg(el, seg) {
4301
- el.fcSeg = seg;
4300
+ function setElEventRange(el, eventRange) {
4301
+ el.fcEventRange = eventRange;
4302
4302
  }
4303
- function getElSeg(el) {
4304
- return el.fcSeg ||
4305
- el.parentNode.fcSeg || // for the harness
4303
+ function getElEventRange(el) {
4304
+ return el.fcEventRange ||
4305
+ el.parentNode.fcEventRange || // for the harness
4306
4306
  null;
4307
4307
  }
4308
4308
  // event ui computation
@@ -4322,7 +4322,7 @@ function compileEventUi(eventDef, eventUiBases) {
4322
4322
  }
4323
4323
  function sortEventSegs(segs, eventOrderSpecs) {
4324
4324
  let objs = segs.map(buildSegCompareObj);
4325
- objs.sort((obj0, obj1) => compareByFieldSpecs(obj0, obj1, eventOrderSpecs));
4325
+ objs.sort((obj0, obj1) => compareByFieldSpecs(obj0, obj1, eventOrderSpecs)); // !!!
4326
4326
  return objs.map((c) => c._seg);
4327
4327
  }
4328
4328
  // returns a object with all primitive props that can be compared
@@ -4335,29 +4335,23 @@ function buildSegCompareObj(seg) {
4335
4335
  return Object.assign(Object.assign(Object.assign({}, eventDef.extendedProps), eventDef), { id: eventDef.publicId, start,
4336
4336
  end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg });
4337
4337
  }
4338
- function computeSegDraggable(seg, context) {
4338
+ function computeEventRangeDraggable(eventRange, context) {
4339
4339
  let { pluginHooks } = context;
4340
4340
  let transformers = pluginHooks.isDraggableTransformers;
4341
- let { def, ui } = seg.eventRange;
4341
+ let { def, ui } = eventRange;
4342
4342
  let val = ui.startEditable;
4343
4343
  for (let transformer of transformers) {
4344
4344
  val = transformer(val, def, ui, context);
4345
4345
  }
4346
4346
  return val;
4347
4347
  }
4348
- function computeSegStartResizable(seg, context) {
4349
- return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart;
4350
- }
4351
- function computeSegEndResizable(seg, context) {
4352
- return seg.isEnd && seg.eventRange.ui.durationEditable;
4353
- }
4354
- function buildSegTimeText(seg, timeFormat, context, defaultDisplayEventTime, // defaults to true
4348
+ function buildEventRangeTimeText(eventRange, timeFormat, context, defaultDisplayEventTime, // defaults to true
4355
4349
  defaultDisplayEventEnd, // defaults to true
4356
4350
  startOverride, endOverride) {
4357
4351
  let { dateEnv, options } = context;
4358
4352
  let { displayEventTime, displayEventEnd } = options;
4359
- let eventDef = seg.eventRange.def;
4360
- let eventInstance = seg.eventRange.instance;
4353
+ let eventDef = eventRange.def;
4354
+ let eventInstance = eventRange.instance;
4361
4355
  if (displayEventTime == null) {
4362
4356
  displayEventTime = defaultDisplayEventTime !== false;
4363
4357
  }
@@ -4366,8 +4360,8 @@ startOverride, endOverride) {
4366
4360
  }
4367
4361
  let wholeEventStart = eventInstance.range.start;
4368
4362
  let wholeEventEnd = eventInstance.range.end;
4369
- let segStart = startOverride || seg.start || seg.eventRange.range.start;
4370
- let segEnd = endOverride || seg.end || seg.eventRange.range.end;
4363
+ let segStart = startOverride || eventRange.range.start;
4364
+ let segEnd = endOverride || eventRange.range.end;
4371
4365
  let isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf();
4372
4366
  let isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf();
4373
4367
  if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {
@@ -4385,8 +4379,8 @@ startOverride, endOverride) {
4385
4379
  }
4386
4380
  return '';
4387
4381
  }
4388
- function getSegMeta(seg, todayRange, nowDate) {
4389
- let segRange = seg.eventRange.range;
4382
+ function getEventRangeMeta(eventRange, todayRange, nowDate) {
4383
+ let segRange = eventRange.range;
4390
4384
  return {
4391
4385
  isPast: segRange.end <= (nowDate || todayRange.start),
4392
4386
  isFuture: segRange.start >= (nowDate || todayRange.end),
@@ -4436,8 +4430,8 @@ function buildEventRangeKey(eventRange) {
4436
4430
  : `${eventRange.def.defId}:${eventRange.range.start.toISOString()}`;
4437
4431
  // inverse-background events don't have specific instances. TODO: better solution
4438
4432
  }
4439
- function getSegAnchorAttrs(seg, context) {
4440
- let { def, instance } = seg.eventRange;
4433
+ function getEventRangeAnchorAttrs(eventRange, context) {
4434
+ let { def, instance } = eventRange;
4441
4435
  let { url } = def;
4442
4436
  if (url) {
4443
4437
  return { href: url };
@@ -6132,6 +6126,99 @@ class DayTableModel {
6132
6126
  }
6133
6127
  }
6134
6128
 
6129
+ const WHEEL_EVENT_NAMES = 'wheel mousewheel DomMouseScroll MozMousePixelScroll'.split(' ');
6130
+ /*
6131
+ Fires:
6132
+ - scrollStart (always user)
6133
+ - scroll
6134
+ - scrollEnd (always user)
6135
+
6136
+ NOTE: detection is complicated (w/ touch and wheel) because ScrollerSyncer needs to know about it,
6137
+ but are we sure we can't just ignore programmatic scrollTo() calls with a flag? and determine the
6138
+ the scroll-master simply by who was the newest scroller? Does passive:true do things asynchronously?
6139
+ */
6140
+ class ScrollListener {
6141
+ constructor(el) {
6142
+ this.el = el;
6143
+ this.emitter = new Emitter();
6144
+ this.isScrolling = false;
6145
+ this.isTouching = false; // user currently has finger down?
6146
+ this.isRecentlyWheeled = false;
6147
+ this.isRecentlyScrolled = false;
6148
+ this.wheelWaiter = new DelayedRunner(this._handleWheelWaited.bind(this));
6149
+ this.scrollWaiter = new DelayedRunner(this._handleScrollWaited.bind(this));
6150
+ // Handlers
6151
+ // ----------------------------------------------------------------------------------------------
6152
+ this.handleScroll = () => {
6153
+ this.startScroll();
6154
+ this.emitter.trigger('scroll', this.isRecentlyWheeled, this.isTouching);
6155
+ this.isRecentlyScrolled = true;
6156
+ this.scrollWaiter.request(500);
6157
+ };
6158
+ // will fire *before* the scroll event is fired (might not cause a scroll)
6159
+ this.handleWheel = () => {
6160
+ this.isRecentlyWheeled = true;
6161
+ this.wheelWaiter.request(500);
6162
+ };
6163
+ // will fire *before* the scroll event is fired (might not cause a scroll)
6164
+ this.handleTouchStart = () => {
6165
+ this.isTouching = true;
6166
+ };
6167
+ this.handleTouchEnd = () => {
6168
+ this.isTouching = false;
6169
+ // if the user ended their touch, and the scroll area wasn't moving,
6170
+ // we consider this to be the end of the scroll.
6171
+ if (!this.isRecentlyScrolled) {
6172
+ this.endScroll(); // won't fire if already ended
6173
+ }
6174
+ };
6175
+ el.addEventListener('scroll', this.handleScroll);
6176
+ el.addEventListener('touchstart', this.handleTouchStart, { passive: true });
6177
+ el.addEventListener('touchend', this.handleTouchEnd);
6178
+ for (let eventName of WHEEL_EVENT_NAMES) {
6179
+ el.addEventListener(eventName, this.handleWheel, { passive: true });
6180
+ }
6181
+ }
6182
+ destroy() {
6183
+ let { el } = this;
6184
+ el.removeEventListener('scroll', this.handleScroll);
6185
+ el.removeEventListener('touchstart', this.handleTouchStart, { passive: true });
6186
+ el.removeEventListener('touchend', this.handleTouchEnd);
6187
+ for (let eventName of WHEEL_EVENT_NAMES) {
6188
+ el.removeEventListener(eventName, this.handleWheel, { passive: true });
6189
+ }
6190
+ }
6191
+ // Start / Stop
6192
+ // ----------------------------------------------------------------------------------------------
6193
+ startScroll() {
6194
+ if (!this.isScrolling) {
6195
+ this.isScrolling = true;
6196
+ this.emitter.trigger('scrollStart', this.isRecentlyWheeled, this.isTouching);
6197
+ }
6198
+ }
6199
+ endScroll() {
6200
+ if (this.isScrolling) {
6201
+ this.emitter.trigger('scrollEnd');
6202
+ this.isScrolling = false;
6203
+ this.isRecentlyScrolled = true;
6204
+ this.isRecentlyWheeled = false;
6205
+ this.scrollWaiter.clear();
6206
+ this.wheelWaiter.clear();
6207
+ }
6208
+ }
6209
+ _handleScrollWaited() {
6210
+ this.isRecentlyScrolled = false;
6211
+ // only end the scroll if not currently touching.
6212
+ // if touching, the scrolling will end later, on touchend.
6213
+ if (!this.isTouching) {
6214
+ this.endScroll(); // won't fire if already ended
6215
+ }
6216
+ }
6217
+ _handleWheelWaited() {
6218
+ this.isRecentlyWheeled = false;
6219
+ }
6220
+ }
6221
+
6135
6222
  class Scroller extends DateComponent {
6136
6223
  constructor() {
6137
6224
  super(...arguments);
@@ -6151,6 +6238,7 @@ class Scroller extends DateComponent {
6151
6238
  }
6152
6239
  componentDidMount() {
6153
6240
  const el = this.elRef.current; // TODO: make dynamic with useEffect
6241
+ this.listener = new ScrollListener(el);
6154
6242
  this.disconnectSize = watchSize(el, (contentWidth, contentHeight) => {
6155
6243
  const { props, context } = this;
6156
6244
  const bottomScrollbarWidth = el.offsetHeight - el.clientHeight;
@@ -6181,13 +6269,20 @@ class Scroller extends DateComponent {
6181
6269
  });
6182
6270
  }
6183
6271
  componentWillUnmount() {
6272
+ const { props } = this;
6184
6273
  this.disconnectSize();
6274
+ this.listener.destroy();
6275
+ setRef(props.widthRef, null);
6276
+ setRef(props.heightRef, null);
6277
+ setRef(props.bottomScrollbarWidthRef, null);
6278
+ setRef(props.rightScrollbarWidthRef, null);
6279
+ setRef(props.leftScrollbarWidthRef, null);
6280
+ }
6281
+ endScroll() {
6282
+ this.listener.endScroll();
6185
6283
  }
6186
6284
  // Public API
6187
6285
  // -----------------------------------------------------------------------------------------------
6188
- get el() {
6189
- return this.elRef.current;
6190
- }
6191
6286
  get x() {
6192
6287
  const { isRtl } = this.context;
6193
6288
  const el = this.elRef.current;
@@ -6207,6 +6302,12 @@ class Scroller extends DateComponent {
6207
6302
  setNormalizedScrollX(el, isRtl, x);
6208
6303
  }
6209
6304
  }
6305
+ addScrollEndListener(handler) {
6306
+ this.listener.emitter.on('scrollEnd', handler);
6307
+ }
6308
+ removeScrollEndListener(handler) {
6309
+ this.listener.emitter.off('scrollEnd', handler);
6310
+ }
6210
6311
  }
6211
6312
  // Public API
6212
6313
  // -------------------------------------------------------------------------------------------------
@@ -6701,38 +6802,20 @@ function buildDayRange(date) {
6701
6802
  return { start, end };
6702
6803
  }
6703
6804
 
6704
- class ScrollResponder {
6705
- constructor(_handleScroll) {
6706
- this._handleScroll = _handleScroll;
6707
- this.handleScroll = (scroll) => {
6708
- this.queuedScroll = scroll;
6709
- this.drain();
6710
- };
6711
- }
6712
- drain() {
6713
- if (this.queuedScroll) {
6714
- if (this._handleScroll(this.queuedScroll)) {
6715
- this.queuedScroll = undefined;
6716
- }
6717
- }
6718
- }
6719
- }
6720
-
6721
6805
  class EventContainer extends BaseComponent {
6722
6806
  constructor() {
6723
6807
  super(...arguments);
6724
6808
  this.handleEl = (el) => {
6725
6809
  this.el = el;
6726
6810
  if (el) {
6727
- setElSeg(el, this.props.seg);
6811
+ setElEventRange(el, this.props.eventRange);
6728
6812
  }
6729
6813
  };
6730
6814
  }
6731
6815
  render() {
6732
6816
  const { props, context } = this;
6733
6817
  const { options } = context;
6734
- const { seg } = props;
6735
- const { eventRange } = seg;
6818
+ const { eventRange } = props;
6736
6819
  const { ui } = eventRange;
6737
6820
  const renderProps = {
6738
6821
  event: new EventImpl(context, eventRange.def, eventRange.instance),
@@ -6741,12 +6824,12 @@ class EventContainer extends BaseComponent {
6741
6824
  textColor: ui.textColor,
6742
6825
  backgroundColor: ui.backgroundColor,
6743
6826
  borderColor: ui.borderColor,
6744
- isDraggable: !props.disableDragging && computeSegDraggable(seg, context),
6745
- isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),
6746
- isEndResizable: !props.disableResizing && computeSegEndResizable(seg),
6827
+ isDraggable: !props.disableDragging && computeEventRangeDraggable(eventRange, context),
6828
+ isStartResizable: !props.disableResizing && props.isStart && eventRange.ui.durationEditable && options.eventResizableFromStart,
6829
+ isEndResizable: !props.disableResizing && props.isEnd && eventRange.ui.durationEditable,
6747
6830
  isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),
6748
- isStart: Boolean(seg.isStart),
6749
- isEnd: Boolean(seg.isEnd),
6831
+ isStart: Boolean(props.isStart),
6832
+ isEnd: Boolean(props.isEnd),
6750
6833
  isPast: Boolean(props.isPast),
6751
6834
  isFuture: Boolean(props.isFuture),
6752
6835
  isToday: Boolean(props.isToday),
@@ -6756,13 +6839,13 @@ class EventContainer extends BaseComponent {
6756
6839
  };
6757
6840
  return (preact.createElement(ContentContainer, Object.assign({}, props /* contains children */, { elRef: this.handleEl, elClasses: [
6758
6841
  ...getEventClassNames(renderProps),
6759
- ...seg.eventRange.ui.classNames,
6842
+ ...eventRange.ui.classNames,
6760
6843
  ...(props.elClasses || []),
6761
6844
  ], renderProps: renderProps, generatorName: "eventContent", customGenerator: options.eventContent, defaultGenerator: props.defaultGenerator, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount })));
6762
6845
  }
6763
6846
  componentDidUpdate(prevProps) {
6764
- if (this.el && this.props.seg !== prevProps.seg) {
6765
- setElSeg(this.el, this.props.seg);
6847
+ if (this.el && this.props.eventRange !== prevProps.eventRange) {
6848
+ setElEventRange(this.el, this.props.eventRange);
6766
6849
  }
6767
6850
  }
6768
6851
  }
@@ -6772,14 +6855,14 @@ class StandardEvent extends BaseComponent {
6772
6855
  render() {
6773
6856
  let { props, context } = this;
6774
6857
  let { options } = context;
6775
- let { seg } = props;
6776
- let { ui } = seg.eventRange;
6858
+ let { eventRange } = props;
6859
+ let { ui } = eventRange;
6777
6860
  let timeFormat = options.eventTimeFormat || props.defaultTimeFormat;
6778
- let timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);
6861
+ let timeText = buildEventRangeTimeText(eventRange, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd, props.startOverride, props.endOverride);
6779
6862
  return (preact.createElement(EventContainer, Object.assign({}, props /* includes elRef */, { elTag: "a", elStyle: {
6780
6863
  borderColor: ui.borderColor,
6781
6864
  backgroundColor: ui.backgroundColor,
6782
- }, elAttrs: getSegAnchorAttrs(seg, context), defaultGenerator: renderInnerContent$1, timeText: timeText }), (InnerContent, eventContentArg) => (preact.createElement(preact.Fragment, null,
6865
+ }, elAttrs: getEventRangeAnchorAttrs(eventRange, context), defaultGenerator: renderInnerContent$1, timeText: timeText }), (InnerContent, eventContentArg) => (preact.createElement(preact.Fragment, null,
6783
6866
  preact.createElement(InnerContent, { elTag: "div", elClasses: ['fc-event-inner'], elStyle: { color: eventContentArg.textColor } }),
6784
6867
  Boolean(eventContentArg.isStartResizable) && (preact.createElement("div", { className: "fc-event-resizer fc-event-resizer-start" })),
6785
6868
  Boolean(eventContentArg.isEndResizable) && (preact.createElement("div", { className: "fc-event-resizer fc-event-resizer-end" }))))));
@@ -6805,8 +6888,8 @@ const NowIndicatorContainer = (props) => (preact.createElement(ViewContextType.C
6805
6888
  class BgEvent extends BaseComponent {
6806
6889
  render() {
6807
6890
  let { props } = this;
6808
- let { seg } = props;
6809
- return (preact.createElement(EventContainer, { elTag: "div", elClasses: ['fc-bg-event'], elStyle: { backgroundColor: seg.eventRange.ui.backgroundColor }, defaultGenerator: renderInnerContent, seg: seg, timeText: "", isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday, disableDragging: true, disableResizing: true }));
6891
+ let { eventRange } = props;
6892
+ return (preact.createElement(EventContainer, { elTag: "div", elClasses: ['fc-bg-event'], elStyle: { backgroundColor: eventRange.ui.backgroundColor }, defaultGenerator: renderInnerContent, eventRange: eventRange, isStart: props.isStart, isEnd: props.isEnd, timeText: "", isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday, disableDragging: true, disableResizing: true }));
6810
6893
  }
6811
6894
  }
6812
6895
  function renderInnerContent(props) {
@@ -7288,7 +7371,6 @@ exports.PureComponent = PureComponent;
7288
7371
  exports.RefMap = RefMap;
7289
7372
  exports.RenderId = RenderId;
7290
7373
  exports.ScrollController = ScrollController;
7291
- exports.ScrollResponder = ScrollResponder;
7292
7374
  exports.Scroller = Scroller;
7293
7375
  exports.SegHierarchy = SegHierarchy;
7294
7376
  exports.Slicer = Slicer;
@@ -7320,11 +7402,11 @@ exports.buildElAttrs = buildElAttrs;
7320
7402
  exports.buildEntryKey = buildEntryKey;
7321
7403
  exports.buildEventApis = buildEventApis;
7322
7404
  exports.buildEventRangeKey = buildEventRangeKey;
7405
+ exports.buildEventRangeTimeText = buildEventRangeTimeText;
7323
7406
  exports.buildEventSourceRefiners = buildEventSourceRefiners;
7324
7407
  exports.buildIsoString = buildIsoString;
7325
7408
  exports.buildNavLinkAttrs = buildNavLinkAttrs;
7326
7409
  exports.buildRangeApiWithTimeZone = buildRangeApiWithTimeZone;
7327
- exports.buildSegTimeText = buildSegTimeText;
7328
7410
  exports.buildViewClassNames = buildViewClassNames;
7329
7411
  exports.buildViewContext = buildViewContext;
7330
7412
  exports.collectFromHash = collectFromHash;
@@ -7372,8 +7454,10 @@ exports.getClippingParents = getClippingParents;
7372
7454
  exports.getDateMeta = getDateMeta;
7373
7455
  exports.getDayClassNames = getDayClassNames;
7374
7456
  exports.getDefaultEventEnd = getDefaultEventEnd;
7375
- exports.getElSeg = getElSeg;
7457
+ exports.getElEventRange = getElEventRange;
7376
7458
  exports.getEntrySpanEnd = getEntrySpanEnd;
7459
+ exports.getEventRangeAnchorAttrs = getEventRangeAnchorAttrs;
7460
+ exports.getEventRangeMeta = getEventRangeMeta;
7377
7461
  exports.getEventTargetViaRoot = getEventTargetViaRoot;
7378
7462
  exports.getInitialDate = getInitialDate;
7379
7463
  exports.getIsHeightAuto = getIsHeightAuto;
@@ -7384,8 +7468,6 @@ exports.getRectCenter = getRectCenter;
7384
7468
  exports.getRelevantEvents = getRelevantEvents;
7385
7469
  exports.getScrollbarWidths = getScrollbarWidths;
7386
7470
  exports.getScrollerSyncerClass = getScrollerSyncerClass;
7387
- exports.getSegAnchorAttrs = getSegAnchorAttrs;
7388
- exports.getSegMeta = getSegMeta;
7389
7471
  exports.getSlotClassNames = getSlotClassNames;
7390
7472
  exports.getStickyFooterScrollbar = getStickyFooterScrollbar;
7391
7473
  exports.getStickyHeaderDates = getStickyHeaderDates;
@@ -956,16 +956,13 @@ interface Hit {
956
956
  }
957
957
 
958
958
  interface Seg {
959
- component?: DateComponent<any, any>;
959
+ eventRange?: EventRenderRange;
960
960
  isStart: boolean;
961
961
  isEnd: boolean;
962
- eventRange?: EventRenderRange;
963
- [otherProp: string]: any;
964
- el?: never;
965
962
  }
966
- interface EventSegUiInteractionState {
963
+ interface EventSegUiInteractionState<S = Seg> {
967
964
  affectedInstances: EventInstanceHash;
968
- segs: Seg[];
965
+ segs: S[];
969
966
  isEvent: boolean;
970
967
  }
971
968
  declare abstract class DateComponent<Props = Dictionary, State = Dictionary> extends BaseComponent<Props, State> {
@@ -1106,13 +1103,15 @@ interface ScrollerInterface {
1106
1103
  x?: number;
1107
1104
  y?: number;
1108
1105
  }): void;
1106
+ addScrollEndListener(handler: (x: number, y: number) => void): void;
1107
+ removeScrollEndListener(handler: (x: number, y: number) => void): void;
1109
1108
  }
1110
1109
 
1111
1110
  interface ScrollerSyncerClass {
1112
1111
  new (horizontal?: boolean): ScrollerSyncerInterface;
1113
1112
  }
1114
1113
  interface ScrollerSyncerInterface extends ScrollerInterface {
1115
- handleChildren(scrollers: ScrollerInterface[], isRtl: boolean): void;
1114
+ handleChildren(scrollers: ScrollerInterface[]): void;
1116
1115
  destroy(): void;
1117
1116
  }
1118
1117
 
@@ -1374,8 +1373,8 @@ declare function sliceEventStore(eventStore: EventStore, eventUiBases: EventUiHa
1374
1373
  fg: EventRenderRange[];
1375
1374
  };
1376
1375
  declare function hasBgRendering(def: EventDef): boolean;
1377
- declare function getElSeg(el: HTMLElement): Seg | null;
1378
- declare function sortEventSegs(segs: any, eventOrderSpecs: OrderSpec<EventImpl>[]): Seg[];
1376
+ declare function getElEventRange(el: HTMLElement): EventRenderRange | null;
1377
+ declare function sortEventSegs<S extends Seg>(segs: S[], eventOrderSpecs: OrderSpec<EventImpl>[]): S[];
1379
1378
  interface EventContentArg {
1380
1379
  event: EventImpl;
1381
1380
  timeText: string;
@@ -1397,16 +1396,16 @@ interface EventContentArg {
1397
1396
  view: ViewApi;
1398
1397
  }
1399
1398
  type EventMountArg = MountArg<EventContentArg>;
1400
- declare function buildSegTimeText(seg: Seg, timeFormat: DateFormatter, context: ViewContext, defaultDisplayEventTime?: boolean, // defaults to true
1399
+ declare function buildEventRangeTimeText(eventRange: EventRenderRange, timeFormat: DateFormatter, context: ViewContext, defaultDisplayEventTime?: boolean, // defaults to true
1401
1400
  defaultDisplayEventEnd?: boolean, // defaults to true
1402
1401
  startOverride?: DateMarker, endOverride?: DateMarker): string;
1403
- declare function getSegMeta(seg: Seg, todayRange: DateRange, nowDate?: DateMarker): {
1402
+ declare function getEventRangeMeta(eventRange: EventRenderRange, todayRange: DateRange, nowDate?: DateMarker): {
1404
1403
  isPast: boolean;
1405
1404
  isFuture: boolean;
1406
1405
  isToday: boolean;
1407
1406
  };
1408
1407
  declare function buildEventRangeKey(eventRange: EventRenderRange): string;
1409
- declare function getSegAnchorAttrs(seg: Seg, context: ViewContext): {
1408
+ declare function getEventRangeAnchorAttrs(eventRange: EventRenderRange, context: ViewContext): {
1410
1409
  tabIndex: number;
1411
1410
  onKeyDown(ev: KeyboardEvent): void;
1412
1411
  } | {
@@ -2475,6 +2474,27 @@ declare class DayTableModel {
2475
2474
  sliceRange(range: DateRange): DayTableSeg[];
2476
2475
  }
2477
2476
 
2477
+ declare class ScrollListener {
2478
+ el: HTMLElement;
2479
+ emitter: Emitter<any>;
2480
+ private isScrolling;
2481
+ private isTouching;
2482
+ private isRecentlyWheeled;
2483
+ private isRecentlyScrolled;
2484
+ private wheelWaiter;
2485
+ private scrollWaiter;
2486
+ constructor(el: HTMLElement);
2487
+ destroy(): void;
2488
+ private startScroll;
2489
+ endScroll(): void;
2490
+ private handleScroll;
2491
+ private _handleScrollWaited;
2492
+ private handleWheel;
2493
+ private _handleWheelWaited;
2494
+ private handleTouchStart;
2495
+ private handleTouchEnd;
2496
+ }
2497
+
2478
2498
  interface ScrollerProps {
2479
2499
  vertical?: boolean;
2480
2500
  horizontal?: boolean;
@@ -2490,6 +2510,7 @@ interface ScrollerProps {
2490
2510
  }
2491
2511
  declare class Scroller extends DateComponent$1<ScrollerProps> implements ScrollerInterface {
2492
2512
  private elRef;
2513
+ listener: ScrollListener;
2493
2514
  private disconnectSize?;
2494
2515
  private currentWidth;
2495
2516
  private currentHeight;
@@ -2499,13 +2520,15 @@ declare class Scroller extends DateComponent$1<ScrollerProps> implements Scrolle
2499
2520
  render(): createElement.JSX.Element;
2500
2521
  componentDidMount(): void;
2501
2522
  componentWillUnmount(): void;
2502
- get el(): HTMLElement;
2523
+ endScroll(): void;
2503
2524
  get x(): number;
2504
2525
  get y(): number;
2505
2526
  scrollTo({ x, y }: {
2506
2527
  x?: number;
2507
2528
  y?: number;
2508
2529
  }): void;
2530
+ addScrollEndListener(handler: (x: number, y: number) => void): void;
2531
+ removeScrollEndListener(handler: (x: number, y: number) => void): void;
2509
2532
  }
2510
2533
  declare function getNormalizedScrollX(el: HTMLElement, isRtl: boolean): number;
2511
2534
  declare function setNormalizedScrollX(el: HTMLElement, isRtl: boolean, x: number): void;
@@ -2524,8 +2547,8 @@ interface SlicedProps<SegType extends Seg> {
2524
2547
  businessHourSegs: SegType[];
2525
2548
  fgEventSegs: SegType[];
2526
2549
  bgEventSegs: SegType[];
2527
- eventDrag: EventSegUiInteractionState | null;
2528
- eventResize: EventSegUiInteractionState | null;
2550
+ eventDrag: EventSegUiInteractionState<SegType> | null;
2551
+ eventResize: EventSegUiInteractionState<SegType> | null;
2529
2552
  eventSelection: string;
2530
2553
  }
2531
2554
  declare abstract class Slicer<SegType extends Seg, ExtraArgs extends any[] = []> {
@@ -2610,18 +2633,12 @@ declare class NowTimer extends Component<NowTimerProps, NowTimerState> {
2610
2633
  private clearTimeout;
2611
2634
  }
2612
2635
 
2613
- declare class ScrollResponder<T> {
2614
- private _handleScroll;
2615
- protected queuedScroll?: T;
2616
- constructor(_handleScroll: (scroll: T) => boolean);
2617
- handleScroll: (scroll: T) => void;
2618
- drain(): void;
2619
- }
2620
-
2621
2636
  interface StandardEventProps {
2622
2637
  elRef?: ElRef;
2623
2638
  elClasses?: string[];
2624
- seg: Seg;
2639
+ eventRange: EventRenderRange;
2640
+ isStart: boolean;
2641
+ isEnd: boolean;
2625
2642
  isDragging: boolean;
2626
2643
  isResizing: boolean;
2627
2644
  isDateSelecting: boolean;
@@ -2634,13 +2651,17 @@ interface StandardEventProps {
2634
2651
  defaultTimeFormat: DateFormatter;
2635
2652
  defaultDisplayEventTime?: boolean;
2636
2653
  defaultDisplayEventEnd?: boolean;
2654
+ startOverride?: DateMarker;
2655
+ endOverride?: DateMarker;
2637
2656
  }
2638
2657
  declare class StandardEvent extends BaseComponent<StandardEventProps> {
2639
2658
  render(): createElement.JSX.Element;
2640
2659
  }
2641
2660
 
2642
2661
  interface MinimalEventProps {
2643
- seg: Seg;
2662
+ eventRange: EventRenderRange;
2663
+ isStart: boolean;
2664
+ isEnd: boolean;
2644
2665
  isDragging: boolean;
2645
2666
  isResizing: boolean;
2646
2667
  isDateSelecting: boolean;
@@ -2664,7 +2685,9 @@ declare class EventContainer extends BaseComponent<EventContainerProps> {
2664
2685
  }
2665
2686
 
2666
2687
  interface BgEventProps {
2667
- seg: Seg;
2688
+ eventRange: EventRenderRange;
2689
+ isStart: boolean;
2690
+ isEnd: boolean;
2668
2691
  isPast: boolean;
2669
2692
  isFuture: boolean;
2670
2693
  isToday: boolean;
@@ -2676,4 +2699,4 @@ declare function renderFill(fillType: string): createElement.JSX.Element;
2676
2699
 
2677
2700
  declare function injectStyles(styleText: string): void;
2678
2701
 
2679
- export { DayCellMountArg as $, AllowFunc as A, BusinessHoursInput as B, CalendarImpl as C, DateInput as D, EventSourceApi as E, FormatterInput as F, WeekNumberContentArg as G, WeekNumberMountArg as H, MoreLinkMountArg as I, JsonRequestError as J, SlotLaneContentArg as K, LocaleInput as L, MoreLinkContentArg as M, NativeFormatterOptions as N, OverlapFunc as O, PluginDefInput as P, SlotLaneMountArg as Q, SlotLabelContentArg as R, SpecificViewContentArg as S, SlotLabelMountArg as T, AllDayContentArg as U, ViewApi as V, WillUnmountHandler as W, AllDayMountArg as X, DayHeaderContentArg as Y, DayHeaderMountArg as Z, DayCellContentArg as _, CalendarOptions as a, enableCursor as a$, ViewContentArg as a0, ViewMountArg as a1, EventClickArg as a2, EventHoveringArg as a3, DateSelectArg as a4, DateUnselectArg as a5, WeekNumberCalculation as a6, ToolbarInput as a7, CustomButtonInput as a8, ButtonIconsInput as a9, RefinedOptionsFromRefiners as aA, CalendarListenerRefiners as aB, BASE_OPTION_DEFAULTS as aC, identity as aD, refineProps as aE, EventDef as aF, EventDefHash as aG, EventInstance as aH, EventInstanceHash as aI, createEventInstance as aJ, EventRefined as aK, EventTuple as aL, EventRefiners as aM, parseEventDef as aN, refineEventDef as aO, parseBusinessHours as aP, OrderSpec as aQ, padStart as aR, isInt as aS, parseFieldSpecs as aT, compareByFieldSpecs as aU, flexibleCompare as aV, preventSelection as aW, allowSelection as aX, preventContextMenu as aY, allowContextMenu as aZ, compareNumbers as a_, ButtonTextCompoundInput as aa, EventContentArg as ab, EventMountArg as ac, DatesSetArg as ad, EventAddArg as ae, EventChangeArg as af, EventDropArg as ag, EventRemoveArg as ah, ButtonHintCompoundInput as ai, CustomRenderingHandler as aj, CustomRenderingStore as ak, DateSpanApi as al, DatePointApi as am, DateSelectionApi as an, Duration as ao, EventSegment as ap, MoreLinkAction as aq, MoreLinkSimpleAction as ar, MoreLinkArg as as, MoreLinkHandler as at, Identity as au, Dictionary as av, BaseOptionRefiners as aw, BaseOptionsRefined as ax, ViewOptionsRefined as ay, RawOptionsFromRefiners as az, PluginDef as b, getClippingParents as b$, disableCursor as b0, guid as b1, computeVisibleDayRange as b2, isMultiDayRange as b3, diffDates as b4, removeExact as b5, isArraysEqual as b6, MemoizeHashFunc as b7, MemoiseArrayFunc as b8, memoize as b9, EventStore as bA, createEmptyEventStore as bB, mergeEventStores as bC, getRelevantEvents as bD, eventTupleToStore as bE, EventUiHash as bF, EventUi as bG, combineEventUis as bH, createEventUi as bI, SplittableProps as bJ, Splitter as bK, getDayClassNames as bL, getDateMeta as bM, getSlotClassNames as bN, DateMeta as bO, setStateDimMap as bP, isDimMapsEqual as bQ, isDimsEqual as bR, watchSize as bS, watchWidth as bT, watchHeight as bU, afterSize as bV, buildNavLinkAttrs as bW, preventDefault as bX, whenTransitionDone as bY, computeInnerRect as bZ, computeEdges as b_, memoizeObjArg as ba, memoizeArraylike as bb, memoizeHashlike as bc, Rect as bd, Point as be, intersectRects as bf, pointInsideRect as bg, constrainPoint as bh, getRectCenter as bi, diffPoints as bj, translateRect as bk, mapHash as bl, filterHash as bm, isPropsEqual as bn, compareObjs as bo, collectFromHash as bp, findElements as bq, findDirectChildren as br, removeElement as bs, applyStyle as bt, elementMatches as bu, elementClosest as bv, getEventTargetViaRoot as bw, getUniqueDomId as bx, parseClassNames as by, fracToCssDim as bz, CalendarApi as c, SegGroup as c$, computeRect as c0, unpromisify as c1, Emitter as c2, DateRange as c3, rangeContainsMarker as c4, intersectRanges as c5, rangesEqual as c6, rangesIntersect as c7, rangeContainsRange as c8, PositionCache as c9, isValidDate as cA, createDuration as cB, asCleanDays as cC, multiplyDuration as cD, addDurations as cE, asRoughMinutes as cF, asRoughSeconds as cG, asRoughMs as cH, wholeDivideDurations as cI, greatestDurationDenominator as cJ, DateEnv as cK, createFormatter as cL, DateFormatter as cM, VerboseFormattingArg as cN, formatIsoTimeString as cO, formatDayString as cP, buildIsoString as cQ, formatIsoMonthStr as cR, NamedTimeZoneImpl as cS, parse as cT, EventSourceDef as cU, EventSourceRefined as cV, EventSourceRefiners as cW, SegSpan as cX, SegRect as cY, SegEntry as cZ, SegInsertion as c_, ScrollController as ca, ElementScrollController as cb, WindowScrollController as cc, Theme as cd, ViewContext as ce, ViewContextType as cf, Seg as cg, EventSegUiInteractionState as ch, DateComponent as ci, CalendarData as cj, ViewProps as ck, DateProfile as cl, DateProfileGenerator as cm, ViewSpec as cn, DateSpan as co, isDateSpansEqual as cp, DateMarker as cq, addDays as cr, startOfDay as cs, addMs as ct, addWeeks as cu, diffWeeks as cv, diffWholeWeeks as cw, diffWholeDays as cx, diffDayAndTime as cy, diffDays as cz, EventApi as d, getIsRtlScrollbarOnLeft as d$, SegHierarchy as d0, buildEntryKey as d1, getEntrySpanEnd as d2, binarySearch as d3, groupIntersectingEntries as d4, intersectSpans as d5, InteractionSettings as d6, InteractionSettingsStore as d7, Interaction as d8, interactionSettingsToStore as d9, buildEventRangeKey as dA, getSegAnchorAttrs as dB, DayTableCell as dC, DayTableModel as dD, Scroller as dE, getNormalizedScrollX as dF, setNormalizedScrollX as dG, SlicedProps as dH, Slicer as dI, EventMutation as dJ, applyMutationToEventStore as dK, Constraint as dL, isPropsValid as dM, isInteractionValid as dN, isDateSelectionValid as dO, requestJson as dP, BaseComponent as dQ, setRef as dR, DelayedRunner as dS, getStickyFooterScrollbar as dT, getStickyHeaderDates as dU, getIsHeightAuto as dV, getScrollerSyncerClass as dW, ScrollerInterface as dX, ScrollerSyncerInterface as dY, getScrollbarWidths as dZ, RefMap as d_, interactionSettingsStore as da, PointerDragEvent as db, Hit as dc, dateSelectionJoinTransformer as dd, eventDragMutationMassager as de, EventDropTransformers as df, ElementDragging as dg, config as dh, RecurringType as di, DragMetaInput as dj, DragMeta as dk, parseDragMeta as dl, ViewPropsTransformer as dm, Action as dn, CalendarContext as dp, CalendarContentProps as dq, CalendarRoot as dr, DaySeriesModel as ds, EventInteractionState as dt, sliceEventStore as du, hasBgRendering as dv, getElSeg as dw, buildSegTimeText as dx, sortEventSegs as dy, getSegMeta as dz, EventRenderRange as e, NowTimer as e0, ScrollResponder as e1, MountArg as e2, StandardEvent as e3, NowIndicatorContainer as e4, DayCellContainer as e5, hasCustomDayCellContent as e6, MinimalEventProps as e7, EventContainer as e8, renderFill as e9, BgEvent as ea, WeekNumberContainerProps as eb, WeekNumberContainer as ec, MoreLinkContainer as ed, computeEarliestSegStart as ee, ViewContainerProps as ef, ViewContainer as eg, DatePointTransform as eh, DateSpanTransform as ei, triggerDateSelect as ej, getDefaultEventEnd as ek, injectStyles as el, EventImpl as em, buildEventApis as en, ElProps as eo, buildElAttrs as ep, InnerContainerFunc as eq, ContentContainer as er, CustomRendering as es, CalendarListeners as f, ViewOptions as g, DurationInput as h, DateSpanInput as i, DateRangeInput as j, EventSourceInput as k, EventSourceFunc as l, EventSourceFuncArg as m, EventInput as n, EventInputTransformer as o, CssDimValue as p, LocaleSingularArg as q, ConstraintInput as r, sliceEvents as s, ViewComponentType as t, SpecificViewMountArg as u, ClassNamesGenerator as v, CustomContentGenerator as w, DidMountHandler as x, NowIndicatorContentArg as y, NowIndicatorMountArg as z };
2702
+ export { DayCellMountArg as $, AllowFunc as A, BusinessHoursInput as B, CalendarImpl as C, DateInput as D, EventSourceApi as E, FormatterInput as F, WeekNumberContentArg as G, WeekNumberMountArg as H, MoreLinkMountArg as I, JsonRequestError as J, SlotLaneContentArg as K, LocaleInput as L, MoreLinkContentArg as M, NativeFormatterOptions as N, OverlapFunc as O, PluginDefInput as P, SlotLaneMountArg as Q, SlotLabelContentArg as R, SpecificViewContentArg as S, SlotLabelMountArg as T, AllDayContentArg as U, ViewApi as V, WillUnmountHandler as W, AllDayMountArg as X, DayHeaderContentArg as Y, DayHeaderMountArg as Z, DayCellContentArg as _, CalendarOptions as a, enableCursor as a$, ViewContentArg as a0, ViewMountArg as a1, EventClickArg as a2, EventHoveringArg as a3, DateSelectArg as a4, DateUnselectArg as a5, WeekNumberCalculation as a6, ToolbarInput as a7, CustomButtonInput as a8, ButtonIconsInput as a9, RefinedOptionsFromRefiners as aA, CalendarListenerRefiners as aB, BASE_OPTION_DEFAULTS as aC, identity as aD, refineProps as aE, EventDef as aF, EventDefHash as aG, EventInstance as aH, EventInstanceHash as aI, createEventInstance as aJ, EventRefined as aK, EventTuple as aL, EventRefiners as aM, parseEventDef as aN, refineEventDef as aO, parseBusinessHours as aP, OrderSpec as aQ, padStart as aR, isInt as aS, parseFieldSpecs as aT, compareByFieldSpecs as aU, flexibleCompare as aV, preventSelection as aW, allowSelection as aX, preventContextMenu as aY, allowContextMenu as aZ, compareNumbers as a_, ButtonTextCompoundInput as aa, EventContentArg as ab, EventMountArg as ac, DatesSetArg as ad, EventAddArg as ae, EventChangeArg as af, EventDropArg as ag, EventRemoveArg as ah, ButtonHintCompoundInput as ai, CustomRenderingHandler as aj, CustomRenderingStore as ak, DateSpanApi as al, DatePointApi as am, DateSelectionApi as an, Duration as ao, EventSegment as ap, MoreLinkAction as aq, MoreLinkSimpleAction as ar, MoreLinkArg as as, MoreLinkHandler as at, Identity as au, Dictionary as av, BaseOptionRefiners as aw, BaseOptionsRefined as ax, ViewOptionsRefined as ay, RawOptionsFromRefiners as az, PluginDef as b, getClippingParents as b$, disableCursor as b0, guid as b1, computeVisibleDayRange as b2, isMultiDayRange as b3, diffDates as b4, removeExact as b5, isArraysEqual as b6, MemoizeHashFunc as b7, MemoiseArrayFunc as b8, memoize as b9, EventStore as bA, createEmptyEventStore as bB, mergeEventStores as bC, getRelevantEvents as bD, eventTupleToStore as bE, EventUiHash as bF, EventUi as bG, combineEventUis as bH, createEventUi as bI, SplittableProps as bJ, Splitter as bK, getDayClassNames as bL, getDateMeta as bM, getSlotClassNames as bN, DateMeta as bO, setStateDimMap as bP, isDimMapsEqual as bQ, isDimsEqual as bR, watchSize as bS, watchWidth as bT, watchHeight as bU, afterSize as bV, buildNavLinkAttrs as bW, preventDefault as bX, whenTransitionDone as bY, computeInnerRect as bZ, computeEdges as b_, memoizeObjArg as ba, memoizeArraylike as bb, memoizeHashlike as bc, Rect as bd, Point as be, intersectRects as bf, pointInsideRect as bg, constrainPoint as bh, getRectCenter as bi, diffPoints as bj, translateRect as bk, mapHash as bl, filterHash as bm, isPropsEqual as bn, compareObjs as bo, collectFromHash as bp, findElements as bq, findDirectChildren as br, removeElement as bs, applyStyle as bt, elementMatches as bu, elementClosest as bv, getEventTargetViaRoot as bw, getUniqueDomId as bx, parseClassNames as by, fracToCssDim as bz, CalendarApi as c, SegGroup as c$, computeRect as c0, unpromisify as c1, Emitter as c2, DateRange as c3, rangeContainsMarker as c4, intersectRanges as c5, rangesEqual as c6, rangesIntersect as c7, rangeContainsRange as c8, PositionCache as c9, isValidDate as cA, createDuration as cB, asCleanDays as cC, multiplyDuration as cD, addDurations as cE, asRoughMinutes as cF, asRoughSeconds as cG, asRoughMs as cH, wholeDivideDurations as cI, greatestDurationDenominator as cJ, DateEnv as cK, createFormatter as cL, DateFormatter as cM, VerboseFormattingArg as cN, formatIsoTimeString as cO, formatDayString as cP, buildIsoString as cQ, formatIsoMonthStr as cR, NamedTimeZoneImpl as cS, parse as cT, EventSourceDef as cU, EventSourceRefined as cV, EventSourceRefiners as cW, SegSpan as cX, SegRect as cY, SegEntry as cZ, SegInsertion as c_, ScrollController as ca, ElementScrollController as cb, WindowScrollController as cc, Theme as cd, ViewContext as ce, ViewContextType as cf, Seg as cg, EventSegUiInteractionState as ch, DateComponent as ci, CalendarData as cj, ViewProps as ck, DateProfile as cl, DateProfileGenerator as cm, ViewSpec as cn, DateSpan as co, isDateSpansEqual as cp, DateMarker as cq, addDays as cr, startOfDay as cs, addMs as ct, addWeeks as cu, diffWeeks as cv, diffWholeWeeks as cw, diffWholeDays as cx, diffDayAndTime as cy, diffDays as cz, EventApi as d, getIsRtlScrollbarOnLeft as d$, SegHierarchy as d0, buildEntryKey as d1, getEntrySpanEnd as d2, binarySearch as d3, groupIntersectingEntries as d4, intersectSpans as d5, InteractionSettings as d6, InteractionSettingsStore as d7, Interaction as d8, interactionSettingsToStore as d9, buildEventRangeKey as dA, getEventRangeAnchorAttrs as dB, DayTableCell as dC, DayTableModel as dD, Scroller as dE, getNormalizedScrollX as dF, setNormalizedScrollX as dG, SlicedProps as dH, Slicer as dI, EventMutation as dJ, applyMutationToEventStore as dK, Constraint as dL, isPropsValid as dM, isInteractionValid as dN, isDateSelectionValid as dO, requestJson as dP, BaseComponent as dQ, setRef as dR, DelayedRunner as dS, getStickyFooterScrollbar as dT, getStickyHeaderDates as dU, getIsHeightAuto as dV, getScrollerSyncerClass as dW, ScrollerInterface as dX, ScrollerSyncerInterface as dY, getScrollbarWidths as dZ, RefMap as d_, interactionSettingsStore as da, PointerDragEvent as db, Hit as dc, dateSelectionJoinTransformer as dd, eventDragMutationMassager as de, EventDropTransformers as df, ElementDragging as dg, config as dh, RecurringType as di, DragMetaInput as dj, DragMeta as dk, parseDragMeta as dl, ViewPropsTransformer as dm, Action as dn, CalendarContext as dp, CalendarContentProps as dq, CalendarRoot as dr, DaySeriesModel as ds, EventInteractionState as dt, sliceEventStore as du, hasBgRendering as dv, getElEventRange as dw, buildEventRangeTimeText as dx, sortEventSegs as dy, getEventRangeMeta as dz, EventRenderRange as e, NowTimer as e0, MountArg as e1, StandardEvent as e2, NowIndicatorContainer as e3, DayCellContainer as e4, hasCustomDayCellContent as e5, MinimalEventProps as e6, EventContainer as e7, renderFill as e8, BgEvent as e9, WeekNumberContainerProps as ea, WeekNumberContainer as eb, MoreLinkContainer as ec, computeEarliestSegStart as ed, ViewContainerProps as ee, ViewContainer as ef, DatePointTransform as eg, DateSpanTransform as eh, triggerDateSelect as ei, getDefaultEventEnd as ej, injectStyles as ek, EventImpl as el, buildEventApis as em, ElProps as en, buildElAttrs as eo, InnerContainerFunc as ep, ContentContainer as eq, CustomRendering as er, CalendarListeners as f, ViewOptions as g, DurationInput as h, DateSpanInput as i, DateRangeInput as j, EventSourceInput as k, EventSourceFunc as l, EventSourceFuncArg as m, EventInput as n, EventInputTransformer as o, CssDimValue as p, LocaleSingularArg as q, ConstraintInput as r, sliceEvents as s, ViewComponentType as t, SpecificViewMountArg as u, ClassNamesGenerator as v, CustomContentGenerator as w, DidMountHandler as x, NowIndicatorContentArg as y, NowIndicatorMountArg as z };