@fullcalendar/daygrid 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.
package/index.global.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- FullCalendar Day Grid Plugin v7.0.0-beta.0
2
+ FullCalendar Day Grid Plugin v7.0.0-beta.1
3
3
  Docs & License: https://fullcalendar.io/docs/month-view
4
4
  (c) 2024 Adam Shaw
5
5
  */
@@ -42,7 +42,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
42
42
  }
43
43
  // Positioning
44
44
  // -------------------------------------------------------------------------------------------------
45
- function computeTopFromDate(date, cellRows, rowHeightMap) {
45
+ function computeTopFromDate(date, cellRows, rowHeightMap, adjust = 0) {
46
46
  let top = 0;
47
47
  for (const cells of cellRows) {
48
48
  const start = cells[0].date;
@@ -55,7 +55,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
55
55
  if (rowHeight == null) {
56
56
  return; // denote unknown
57
57
  }
58
- top += rowHeight;
58
+ top += rowHeight + adjust;
59
59
  }
60
60
  return top;
61
61
  }
@@ -161,6 +161,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
161
161
  }
162
162
  componentWillUnmount() {
163
163
  this.disconectInnerHeight();
164
+ internal$1.setRef(this.props.innerHeightRef, null);
164
165
  }
165
166
  }
166
167
 
@@ -230,7 +231,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
230
231
  class DayGridBlockEvent extends internal$1.BaseComponent {
231
232
  render() {
232
233
  let { props } = this;
233
- return (preact.createElement(internal$1.StandardEvent, Object.assign({}, props, { elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.seg.eventRange.def.allDay })));
234
+ return (preact.createElement(internal$1.StandardEvent, Object.assign({}, props, { elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.eventRange.def.allDay })));
234
235
  }
235
236
  }
236
237
 
@@ -238,10 +239,10 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
238
239
  render() {
239
240
  let { props, context } = this;
240
241
  let { options } = context;
241
- let { seg } = props;
242
+ let { eventRange } = props;
242
243
  let timeFormat = options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;
243
- let timeText = internal$1.buildSegTimeText(seg, timeFormat, context, true, props.defaultDisplayEventEnd);
244
- return (preact.createElement(internal$1.EventContainer, Object.assign({}, props, { elTag: "a", elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'], elAttrs: internal$1.getSegAnchorAttrs(props.seg, context), defaultGenerator: renderInnerContent, timeText: timeText, isResizing: false, isDateSelecting: false })));
244
+ let timeText = internal$1.buildEventRangeTimeText(eventRange, timeFormat, context, true, props.defaultDisplayEventEnd);
245
+ return (preact.createElement(internal$1.EventContainer, Object.assign({}, props, { elTag: "a", elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'], elAttrs: internal$1.getEventRangeAnchorAttrs(eventRange, context), defaultGenerator: renderInnerContent, timeText: timeText, isResizing: false, isDateSelecting: false })));
245
246
  }
246
247
  }
247
248
  function renderInnerContent(renderProps) {
@@ -260,10 +261,11 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
260
261
  (props.eventResize ? props.eventResize.affectedInstances : null) ||
261
262
  {};
262
263
  return (preact.createElement(preact.Fragment, null, props.segs.map((seg) => {
263
- let instanceId = seg.eventRange.instance.instanceId;
264
+ let { eventRange } = seg;
265
+ let instanceId = eventRange.instance.instanceId;
264
266
  return (preact.createElement("div", { key: instanceId, style: {
265
267
  visibility: forcedInvisibleMap[instanceId] ? 'hidden' : '',
266
- } }, hasListItemDisplay(seg) ? (preact.createElement(DayGridListEvent, Object.assign({ seg: seg, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal$1.getSegMeta(seg, props.todayRange)))) : (preact.createElement(DayGridBlockEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal$1.getSegMeta(seg, props.todayRange))))));
268
+ } }, hasListItemDisplay(seg) ? (preact.createElement(DayGridListEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal$1.getEventRangeMeta(eventRange, props.todayRange)))) : (preact.createElement(DayGridBlockEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal$1.getEventRangeMeta(eventRange, props.todayRange))))));
267
269
  })));
268
270
  } }));
269
271
  }
@@ -482,6 +484,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
482
484
  }
483
485
  componentWillUnmount() {
484
486
  this.detachHeight();
487
+ internal$1.setRef(this.props.heightRef, null);
485
488
  }
486
489
  }
487
490
 
@@ -604,7 +607,8 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
604
607
  for (const seg of segs) {
605
608
  const { left, right, width } = computeHorizontalsFromSeg(seg, colWidth, colCnt, isRtl);
606
609
  // TODO: optimize ID creation? all related
607
- const { instanceId } = seg.eventRange.instance;
610
+ const { eventRange } = seg;
611
+ const { instanceId } = eventRange.instance;
608
612
  const segSpanId = getSegSpanId(seg);
609
613
  const segStartId = getSegStartId(seg);
610
614
  const top = segTops[segStartId];
@@ -624,7 +628,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
624
628
  width,
625
629
  }, heightRef: (isMirror || seg.isStandin)
626
630
  ? null
627
- : segHeightRefMap.createRef(segSpanId) }, hasListItemDisplay(seg) ? (preact.createElement(DayGridListEvent, Object.assign({ seg: seg, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal$1.getSegMeta(seg, todayRange)))) : (preact.createElement(DayGridBlockEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal$1.getSegMeta(seg, todayRange))))));
631
+ : segHeightRefMap.createRef(segSpanId) }, hasListItemDisplay(seg) ? (preact.createElement(DayGridListEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal$1.getEventRangeMeta(eventRange, todayRange)))) : (preact.createElement(DayGridBlockEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal$1.getEventRangeMeta(eventRange, todayRange))))));
628
632
  }
629
633
  return nodes;
630
634
  }
@@ -643,8 +647,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
643
647
  right,
644
648
  width,
645
649
  } }, fillType === 'bg-event' ?
646
- preact.createElement(internal$1.BgEvent, Object.assign({ seg: seg }, internal$1.getSegMeta(seg, todayRange))) :
647
- internal$1.renderFill(fillType)));
650
+ preact.createElement(internal$1.BgEvent, Object.assign({ eventRange: seg.eventRange, isStart: seg.isStart, isEnd: seg.isEnd }, internal$1.getEventRangeMeta(seg.eventRange, todayRange))) : (internal$1.renderFill(fillType))));
648
651
  }
649
652
  return preact.createElement(preact.Fragment, {}, ...nodes);
650
653
  }
@@ -742,12 +745,12 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
742
745
  heightRef: rowHeightRefMap.createRef(cells[0].key) })))));
743
746
  }
744
747
  componentDidMount() {
745
- this.unwatchWidth = internal$1.watchWidth(this.rootEl, (width) => {
748
+ this.detachWidth = internal$1.watchWidth(this.rootEl, (width) => {
746
749
  this.setState({ width });
747
750
  });
748
751
  }
749
752
  componentWillUnmount() {
750
- this.unwatchWidth();
753
+ this.detachWidth();
751
754
  }
752
755
  // Hit System
753
756
  // -----------------------------------------------------------------------------------------------
@@ -925,12 +928,11 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
925
928
  // Scrolling
926
929
  // -----------------------------------------------------------------------------------------------
927
930
  updateSyncedScroller() {
928
- const { isRtl } = this.context;
929
931
  this.syncedScroller.handleChildren([
930
932
  this.headerScrollerRef.current,
931
933
  this.bodyScrollerRef.current,
932
934
  this.footerScrollerRef.current,
933
- ], isRtl);
935
+ ]);
934
936
  }
935
937
  }
936
938
 
@@ -939,20 +941,29 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
939
941
  super(...arguments);
940
942
  // ref
941
943
  this.scrollerRef = preact.createRef();
942
- this.rowHeightRefMap = new internal$1.RefMap();
943
- // Scrolling
944
- // -----------------------------------------------------------------------------------------------
945
- this.timeScrollResponder = new internal$1.ScrollResponder((_time) => {
946
- // HACK to scroll to day
944
+ this.rowHeightRefMap = new internal$1.RefMap(() => {
945
+ internal$1.afterSize(this.updateScrollY);
946
+ });
947
+ // internal
948
+ this.scrollDate = null;
949
+ this.updateScrollY = () => {
947
950
  const rowHeightMap = this.rowHeightRefMap.current;
948
951
  const scroller = this.scrollerRef.current;
949
- const scrollTop = computeTopFromDate(this.props.dateProfile.currentDate, this.props.cellRows, rowHeightMap);
950
- if (scrollTop != null) {
951
- scroller.scrollTo({ y: scrollTop });
952
- return true;
952
+ // Since updateScrollY is called by rowHeightRefMap, could be called with null during cleanup,
953
+ // and the scroller might not exist
954
+ if (scroller && this.scrollDate) {
955
+ let scrollTop = computeTopFromDate(this.scrollDate, this.props.cellRows, rowHeightMap, 1);
956
+ if (scrollTop != null) {
957
+ if (scrollTop) {
958
+ scrollTop++; // clear top border
959
+ }
960
+ scroller.scrollTo({ y: scrollTop });
961
+ }
953
962
  }
954
- return false;
955
- });
963
+ };
964
+ this.clearScroll = () => {
965
+ this.scrollDate = null;
966
+ };
956
967
  }
957
968
  render() {
958
969
  const { props, context } = this;
@@ -963,22 +974,25 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
963
974
  // Lifecycle
964
975
  // -----------------------------------------------------------------------------------------------
965
976
  componentDidMount() {
966
- const { context } = this;
967
- const { options } = context;
968
- context.emitter.on('_timeScrollRequest', this.timeScrollResponder.handleScroll);
969
- this.timeScrollResponder.handleScroll(options.scrollTime);
977
+ this.resetScroll();
978
+ this.scrollerRef.current.addScrollEndListener(this.clearScroll);
970
979
  }
971
980
  componentDidUpdate(prevProps) {
972
- const { options } = this.context;
973
- if (prevProps.dateProfile !== this.props.dateProfile && options.scrollTimeReset) {
974
- this.timeScrollResponder.handleScroll(options.scrollTime);
975
- }
976
- else {
977
- this.timeScrollResponder.drain();
981
+ if (prevProps.dateProfile !== this.props.dateProfile && this.context.options.scrollTimeReset) {
982
+ this.resetScroll();
978
983
  }
979
984
  }
980
985
  componentWillUnmount() {
981
- this.context.emitter.off('_timeScrollRequest', this.timeScrollResponder.handleScroll);
986
+ this.scrollerRef.current.removeScrollEndListener(this.clearScroll);
987
+ }
988
+ // Scrolling
989
+ // -----------------------------------------------------------------------------------------------
990
+ resetScroll() {
991
+ this.scrollDate = this.props.dateProfile.currentDate;
992
+ this.updateScrollY();
993
+ // updateScrollX
994
+ const scroller = this.scrollerRef.current;
995
+ scroller.scrollTo({ x: 0 });
982
996
  }
983
997
  }
984
998
 
@@ -1035,6 +1049,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
1035
1049
  }
1036
1050
  componentWillUnmount() {
1037
1051
  this.disconectInnerHeight();
1052
+ internal$1.setRef(this.props.innerHeightRef, null);
1038
1053
  }
1039
1054
  }
1040
1055
 
@@ -1,6 +1,6 @@
1
1
  /*!
2
- FullCalendar Day Grid Plugin v7.0.0-beta.0
2
+ FullCalendar Day Grid Plugin v7.0.0-beta.1
3
3
  Docs & License: https://fullcalendar.io/docs/month-view
4
4
  (c) 2024 Adam Shaw
5
5
  */
6
- FullCalendar.DayGrid=function(e,t,r,n){"use strict";class i extends r.Slicer{constructor(){super(...arguments),this.forceDayIfListItem=!0}sliceRange(e,t){return t.sliceRange(e)}}function a(e){return e.text}function s(e,t){let n=new r.DaySeriesModel(e.renderRange,t);return new r.DayTableModel(n,/year|month|week/.test(e.currentRangeUnit))}function l(e,t,r){if(null==r)return[void 0,void 0];return r/e<t?[t*e,t]:[r,void 0]}function o(e,t){return[t?e.map(e=>({colSpan:1,date:e})):e.map(e=>({colSpan:1,dow:e.getUTCDay()}))]}function d(e,t,n,i){let a,s,l;if(null!=t)l=(e.lastCol-e.firstCol+1)*t,i?s=e.firstCol*t:a=e.firstCol*t;else{const t=1/n;l=r.fracToCssDim((e.lastCol-e.firstCol+1)*t),i?s=r.fracToCssDim(e.firstCol*t):a=r.fracToCssDim(e.firstCol*t)}return{left:a,right:s,width:l}}function c(e,t,r,n,i){const a=null!=r?r:t/n,s=Math.floor(e/a),l=s*a;return{col:i?n-s-1:s,left:l,right:l+a}}function g(e,t){return e.querySelectorAll(":scope > [role=row]")[t]}function h(e,t){return e.querySelectorAll(":scope > [role=gridcell]")[t]}class f extends r.BaseComponent{constructor(){super(...arguments),this.innerElRef=n.createRef()}render(){let{props:e,context:t}=this,{dateProfile:i,date:s,extraRenderProps:l,extraDataAttrs:o}=e,{dateEnv:d,options:c,theme:g,viewApi:h}=t,f=r.getDateMeta(s,e.todayRange,null,i),u=d.format(s,e.dayHeaderFormat),p=!f.isDisabled&&e.navLink?r.buildNavLinkAttrs(t,s):{},m=Object.assign(Object.assign(Object.assign({date:d.toDate(s),view:h},l),{text:u}),f);return n.createElement(r.ContentContainer,{elTag:"div",elClasses:[...r.getDayClassNames(f,g),...e.extraClassNames||[],"fc-header-cell","fc-cell",null!=e.colWidth?"":"fc-liquid","fc-flex-column","fc-align-center"],elAttrs:Object.assign({"data-date":f.isDisabled?void 0:r.formatDayString(s)},o),elStyle:{width:null!=e.colWidth?e.colWidth*(e.colSpan||1):void 0},renderProps:m,generatorName:"dayHeaderContent",customGenerator:c.dayHeaderContent,defaultGenerator:a,classNameGenerator:c.dayHeaderClassNames,didMount:c.dayHeaderDidMount,willUnmount:c.dayHeaderWillUnmount},t=>n.createElement("div",{ref:this.innerElRef,className:["fc-flex-column",e.isSticky?"fc-sticky-x":""].join(" ")},!f.isDisabled&&n.createElement(t,{elTag:"a",elAttrs:p,elClasses:["fc-cell-inner","fc-padding-sm"]})))}componentDidMount(){const e=this.innerElRef.current;this.disconectInnerHeight=r.watchHeight(e,e=>{r.setRef(this.props.innerHeightRef,e)})}componentWillUnmount(){this.disconectInnerHeight()}}function u(e,t){const r=[];for(let e=0;e<t;e++)r[e]=[];for(const t of e)r[t.row].push(t);return r}function p(e,t){const r=[];if(e){for(let n=0;n<t;n++)r[n]={affectedInstances:e.affectedInstances,isEvent:e.isEvent,segs:[]};for(const t of e.segs)r[t.row].segs.push(t)}else for(let e=0;e<t;e++)r[e]=null;return r}function m(e,t){let r=[];for(let e=0;e<t;e++)r.push([]);for(let t of e)for(let e=t.firstCol;e<=t.lastCol;e++)t.firstCol!==e&&(t=Object.assign(Object.assign({},t),{firstCol:e,lastCol:e,isStart:!1,isEnd:t.isEnd&&t.lastCol===e,isStandin:!0})),r[e].push(t);return r}const y=r.createFormatter({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"});function v(e){let{display:t}=e.eventRange.ui;return"list-item"===t||"auto"===t&&!e.eventRange.def.allDay&&e.firstCol===e.lastCol&&e.isStart&&e.isEnd}class R extends r.BaseComponent{render(){let{props:e}=this;return n.createElement(r.StandardEvent,Object.assign({},e,{elClasses:["fc-daygrid-event","fc-daygrid-block-event","fc-h-event"],defaultTimeFormat:y,defaultDisplayEventEnd:e.defaultDisplayEventEnd,disableResizing:!e.seg.eventRange.def.allDay}))}}class S extends r.BaseComponent{render(){let{props:e,context:t}=this,{options:i}=t,{seg:a}=e,s=i.eventTimeFormat||y,l=r.buildSegTimeText(a,s,t,!0,e.defaultDisplayEventEnd);return n.createElement(r.EventContainer,Object.assign({},e,{elTag:"a",elClasses:["fc-daygrid-event","fc-daygrid-dot-event"],elAttrs:r.getSegAnchorAttrs(e.seg,t),defaultGenerator:b,timeText:l,isResizing:!1,isDateSelecting:!1}))}}function b(e){return n.createElement(n.Fragment,null,n.createElement("div",{className:"fc-daygrid-event-dot",style:{borderColor:e.borderColor||e.backgroundColor}}),e.timeText&&n.createElement("div",{className:"fc-event-time"},e.timeText),n.createElement("div",{className:"fc-event-title"},e.event.title||n.createElement(n.Fragment,null," ")))}class w extends r.BaseComponent{render(){let{props:e}=this;return n.createElement(r.MoreLinkContainer,{elClasses:["fc-daygrid-more-link"],dateProfile:e.dateProfile,todayRange:e.todayRange,allDayDate:e.allDayDate,segs:e.segs,hiddenSegs:e.hiddenSegs,alignmentElRef:e.alignmentElRef,alignGridTop:e.alignGridTop,extraDateSpan:e.extraDateSpan,popoverContent:()=>{let t=(e.eventDrag?e.eventDrag.affectedInstances:null)||(e.eventResize?e.eventResize.affectedInstances:null)||{};return n.createElement(n.Fragment,null,e.segs.map(i=>{let a=i.eventRange.instance.instanceId;return n.createElement("div",{key:a,style:{visibility:t[a]?"hidden":""}},v(i)?n.createElement(S,Object.assign({seg:i,isDragging:!1,isSelected:a===e.eventSelection,defaultDisplayEventEnd:!1},r.getSegMeta(i,e.todayRange))):n.createElement(R,Object.assign({seg:i,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:a===e.eventSelection,defaultDisplayEventEnd:!1},r.getSegMeta(i,e.todayRange))))}))}})}}class E extends r.DateComponent{constructor(){super(...arguments),this.innerElRef=n.createRef(),this.headerWrapElRef=n.createRef()}render(){let{props:e,context:t}=this,{options:i,dateEnv:a}=t;const s=e.showDayNumber&&function(e,t,n){const{start:i,end:a}=t,s=r.addMs(a,-1),l=n.getYear(i),o=n.getMonth(i),d=n.getYear(s),c=n.getMonth(s);return!(l===d&&o===c)&&Boolean(e.valueOf()===i.valueOf()||1===n.getDay(e)&&e.valueOf()<a.valueOf())}(e.date,e.dateProfile.currentRange,a);return n.createElement(r.DayCellContainer,{elTag:"div",elClasses:["fc-daygrid-cell","fc-cell",null!=e.width?"":"fc-liquid","fc-flex-column",...e.extraClassNames||[]],elAttrs:Object.assign(Object.assign({},e.extraDataAttrs),{role:"gridcell"}),elStyle:{width:e.width},extraRenderProps:e.extraRenderProps,defaultGenerator:H,date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,showDayNumber:e.showDayNumber,isMonthStart:s},(a,l)=>n.createElement("div",{ref:this.innerElRef,className:["fc-daygrid-cell-inner",e.fgLiquidHeight?"fc-liquid":""].join(" ")},n.createElement("div",{ref:this.headerWrapElRef,className:"fc-flex-column"},!l.isDisabled&&(e.showDayNumber||r.hasCustomDayCellContent(i))&&n.createElement("div",{className:"fc-daygrid-cell-header"},n.createElement(a,{elTag:"a",elClasses:["fc-daygrid-cell-number",s&&"fc-daygrid-month-start"],elAttrs:r.buildNavLinkAttrs(t,e.date)}))),n.createElement("div",{className:"fc-daygrid-cell-main",style:{height:e.fgLiquidHeight?"":e.fgHeight}},e.fg),n.createElement("div",{className:"fc-daygrid-cell-footer",style:e.fgLiquidHeight?{position:"relative",top:e.fgHeight}:{}},n.createElement(w,{allDayDate:e.date,segs:e.segs,hiddenSegs:e.hiddenSegs,alignmentElRef:this.innerElRef,alignGridTop:!e.showDayNumber,extraDateSpan:e.extraDateSpan,dateProfile:e.dateProfile,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,todayRange:e.todayRange})),e.bg))}componentDidMount(){const e=this.innerElRef.current,t=this.headerWrapElRef.current;this.detachInnerHeight=r.watchHeight(e,e=>{r.setRef(this.props.innerHeightRef,e)}),this.detachHeaderHeight=r.watchHeight(t,e=>{r.setRef(this.props.headerHeightRef,e)})}componentWillUnmount(){this.detachInnerHeight(),this.detachHeaderHeight(),r.setRef(this.props.innerHeightRef,null),r.setRef(this.props.headerHeightRef,null)}}function H(e){return e.dayNumberText||n.createElement(n.Fragment,null," ")}function x(e){return e.eventRange.instance.instanceId+":"+e.firstCol}function C(e){return x(e)+":"+e.lastCol}class D extends r.SegHierarchy{constructor(){super(...arguments),this.hiddenConsumes=!1,this.forceHidden={}}addSegs(e){const t=super.addSegs(e),{entriesByLevel:n}=this,i=e=>!this.forceHidden[r.buildEntryKey(e)];for(let e=0;e<n.length;e+=1)n[e]=n[e].filter(i);return t}handleInvalidInsertion(e,t,n){const{entriesByLevel:i,forceHidden:a}=this,{touchingEntry:s,touchingLevel:l,touchingLateral:o}=e;if(this.hiddenConsumes&&s){const e=r.buildEntryKey(s);if(!a[e])if(this.allowReslicing){const e=Object.assign(Object.assign({},s),{span:r.intersectSpans(s.span,t.span)});a[r.buildEntryKey(e)]=!0,i[l][o]=e,n.push(e),this.splitEntry(s,t,n)}else a[e]=!0,n.push(s)}super.handleInvalidInsertion(e,t,n)}}class M extends n.Component{constructor(){super(...arguments),this.rootElRef=n.createRef()}render(){const{props:e}=this;return n.createElement("div",{className:"fc-abs",style:e.style,ref:this.rootElRef},e.children)}componentDidMount(){const e=this.rootElRef.current;this.detachHeight=r.watchHeight(e,e=>{r.setRef(this.props.heightRef,e)})}componentWillUnmount(){this.detachHeight()}}const W=r.createFormatter({week:"narrow"});class k extends r.BaseComponent{constructor(){super(...arguments),this.cellInnerHeightRefMap=new r.RefMap(()=>{r.afterSize(this.handleInnerHeights)}),this.cellHeaderHeightRefMap=new r.RefMap(()=>{r.afterSize(this.handleHeaderHeights)}),this.segHeightRefMap=new r.RefMap(()=>{r.afterSize(this.handleSegHeights)}),this.handleRootEl=e=>{this.rootEl=e,r.setRef(this.props.rootElRef,e)},this.handleHeaderHeights=()=>{const e=this.cellHeaderHeightRefMap.current;let t=0;for(const r of e.values())t=Math.max(t,r);this.state.headerHeight!==t&&this.setState({headerHeight:t})},this.handleInnerHeights=()=>{const{props:e}=this,t=!0===e.dayMaxEvents||!0===e.dayMaxEventRows,n=this.cellInnerHeightRefMap.current;let i=0;for(const e of n.values())i=Math.max(i,e);t?this.state.innerHeight!==i&&this.setState({innerHeight:i}):r.setRef(e.innerHeightRef,i)},this.handleSegHeights=()=>{this.setState({segHeightRev:this.segHeightRefMap.rev})}}render(){const{props:e,state:t,context:i,cellInnerHeightRefMap:a,cellHeaderHeightRefMap:s}=this,{cells:l}=e,{options:o}=i,d=e.cells[0].date,c=e.cells.length,g=!0===e.dayMaxEvents||!0===e.dayMaxEventRows,h=r.sortEventSegs(e.fgEventSegs,o.eventOrder),f=m(h,c),u=m(e.bgEventSegs,c),p=m(e.businessHourSegs,c),y=m(this.getHighlightSegs(),c),v=m(this.getMirrorSegs(),c),[R,S,b]=function(e,t,r,n,i,a,s,l){const o=r.length,d=[],c=[];for(let e=0;e<o;e++)d.push([]),c.push(0);const g=e.map((e,t)=>({index:t,seg:e,span:{start:e.firstCol,end:e.lastCol+1}}));let h=new D(r=>t.get(C(e[r.index])));h.allowReslicing=!1,h.strictOrder=a,!0===s||!0===l?(h.maxCoord=i,h.hiddenConsumes=!0):"number"==typeof s?h.maxStackCnt=s:"number"==typeof l&&(h.maxStackCnt=l,h.hiddenConsumes=!0);const f=h.addSegs(g),u=h.toRects(),p={};for(const t of u){p[x(e[t.index])]=n+t.levelCoord;let{start:r,end:i}=t.span;for(;r<i;r++)c[r]=Math.max(c[r],t.levelCoord+t.thickness)}for(const t of f){const{span:r}=t,n=e[t.index];for(let e=r.start;e<r.end;e++)d[e].push(n)}return[p,c,d]}(h,this.segHeightRefMap.current,l,t.headerHeight,g&&null!=t.innerHeight&&null!=t.headerHeight?t.innerHeight-t.headerHeight:void 0,o.eventOrderStrict,e.dayMaxEvents,e.dayMaxEventRows),w=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{};return n.createElement("div",{role:e.cellGroup?void 0:"row",className:["fc-daygrid-row",e.forceVSpacing?"fc-daygrid-row-spacious":e.compact?"fc-daygrid-row-compact":"",e.cellGroup?"fc-flex-row":"fc-row","fc-rel",e.className||""].join(" "),style:{minHeight:e.minHeight},ref:this.handleRootEl},e.cells.map((t,r)=>{const i=this.renderFgSegs(f[r],R,e.todayRange,w),l=this.renderFgSegs(v[r],R,e.todayRange,{},Boolean(e.eventDrag),Boolean(e.eventResize),!1);return n.createElement(E,{key:t.key,dateProfile:e.dateProfile,todayRange:e.todayRange,date:t.date,showDayNumber:e.showDayNumbers,segs:f[r],hiddenSegs:b[r],fgLiquidHeight:g,fg:n.createElement(n.Fragment,null,n.createElement(n.Fragment,null,i),n.createElement(n.Fragment,null,l)),bg:n.createElement(n.Fragment,null,this.renderFillSegs(y[r],"highlight"),this.renderFillSegs(p[r],"non-business"),this.renderFillSegs(u[r],"bg-event")),eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,extraRenderProps:t.extraRenderProps,extraDateSpan:t.extraDateSpan,extraDataAttrs:t.extraDataAttrs,extraClassNames:t.extraClassNames,fgHeight:S[r],width:e.colWidth,innerHeightRef:a.createRef(t.key),headerHeightRef:s.createRef(t.key)})}),e.showWeekNumbers&&n.createElement(r.WeekNumberContainer,{elTag:"a",elClasses:["fc-daygrid-week-number"],elAttrs:r.buildNavLinkAttrs(i,d,"week"),date:d,defaultFormat:W}))}renderFgSegs(e,t,i,a,s,l,o){const{props:c,context:g,segHeightRefMap:h}=this,{isRtl:f}=g,{colWidth:u,eventSelection:p}=c,m=c.cells.length,y=1===c.cells.length,b=s||l||o,w=[];for(const c of e){const{left:e,right:g,width:E}=d(c,u,m,f),{instanceId:H}=c.eventRange.instance,D=C(c),W=t[x(c)],k=!c.isStandin&&null!=W&&!a[H];w.push(n.createElement(M,{key:D,style:{visibility:k?"":"hidden",top:W,left:e,right:g,width:E},heightRef:b||c.isStandin?null:h.createRef(D)},v(c)?n.createElement(S,Object.assign({seg:c,isDragging:s,isSelected:H===p,defaultDisplayEventEnd:y},r.getSegMeta(c,i))):n.createElement(R,Object.assign({seg:c,isDragging:s,isResizing:l,isDateSelecting:o,isSelected:H===p,defaultDisplayEventEnd:y},r.getSegMeta(c,i)))))}return w}renderFillSegs(e,t){const{props:i,context:a}=this,{isRtl:s}=a,{todayRange:l,colWidth:o}=i,c=i.cells.length,g=[];for(const i of e){const{left:e,right:a,width:h}=d(i,o,c,s),f=!i.isStandin;g.push(n.createElement("div",{key:r.buildEventRangeKey(i.eventRange),className:"fc-fill-y",style:{visibility:f?"":"hidden",left:e,right:a,width:h}},"bg-event"===t?n.createElement(r.BgEvent,Object.assign({seg:i},r.getSegMeta(i,l))):r.renderFill(t)))}return n.createElement(n.Fragment,{},...g)}componentDidMount(){const{rootEl:e}=this;this.disconnectHeight=r.watchHeight(e,e=>{r.setRef(this.props.heightRef,e)})}componentWillUnmount(){this.disconnectHeight(),r.setRef(this.props.heightRef,null),r.setRef(this.props.innerHeightRef,null)}getMirrorSegs(){let{props:e}=this;return e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:[]}getHighlightSegs(){let{props:e}=this;return e.eventDrag&&e.eventDrag.segs.length?e.eventDrag.segs:e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:e.dateSelectionSegs}}class N extends r.DateComponent{constructor(){super(...arguments),this.splitBusinessHourSegs=r.memoize(u),this.splitBgEventSegs=r.memoize(u),this.splitFgEventSegs=r.memoize(u),this.splitDateSelectionSegs=r.memoize(u),this.splitEventDrag=r.memoize(p),this.splitEventResize=r.memoize(p),this.rowHeightRefMap=new r.RefMap((e,t)=>{const{rowHeightRefMap:r}=this.props;r&&r.handleValue(e,t)}),this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e,state:t,context:i,rowHeightRefMap:a}=this,{options:s}=i,l=e.cellRows.length,o=this.splitFgEventSegs(e.fgEventSegs,l),d=this.splitBgEventSegs(e.bgEventSegs,l),c=this.splitBusinessHourSegs(e.businessHourSegs,l),g=this.splitDateSelectionSegs(e.dateSelectionSegs,l),h=this.splitEventDrag(e.eventDrag,l),f=this.splitEventResize(e.eventResize,l),u=r.getIsHeightAuto(s),p=null!=t.width&&(l>=7||u)?t.width/i.options.aspectRatio/6:null;return n.createElement("div",{className:"fc-grow fc-flex-column",style:{width:e.width},ref:this.handleRootEl},e.cellRows.map((r,i)=>n.createElement(k,{key:r[0].key,dateProfile:e.dateProfile,todayRange:e.todayRange,cells:r,showDayNumbers:l>1,showWeekNumbers:s.weekNumbers,forPrint:e.forPrint,compact:null!=t.width&&t.width/r.length<80,className:u?"":"fc-grow fc-basis0",fgEventSegs:o[i],bgEventSegs:d[i].filter(P),businessHourSegs:c[i],dateSelectionSegs:g[i],eventSelection:e.eventSelection,eventDrag:h[i],eventResize:f[i],dayMaxEvents:s.dayMaxEvents,dayMaxEventRows:s.dayMaxEventRows,colWidth:e.colWidth,minHeight:p,heightRef:a.createRef(r[0].key)})))}componentDidMount(){this.unwatchWidth=r.watchWidth(this.rootEl,e=>{this.setState({width:e})})}componentWillUnmount(){this.unwatchWidth()}queryHit(e,t,n){const{props:i,context:a}=this,s=i.cellRows[0].length,{col:l,left:o,right:d}=c(e,n,i.colWidth,s,a.isRtl),{row:f,top:u,bottom:p}=function(e,t,r){let n=0,i=0,a=0;for(const s of t){const t=s[0].key;if(i=a,a=i+r.get(t),e<a)break;n++}return{row:n,top:i,bottom:a}}(t,i.cellRows,this.rowHeightRefMap.current),m=i.cellRows[f][l],y=m.date,v=r.addDays(y,1);return{dateProfile:i.dateProfile,dateSpan:Object.assign({range:{start:y,end:v},allDay:!0},m.extraDateSpan),dayEl:h(g(this.rootEl,f),l),rect:{left:o,right:d,top:u,bottom:p},layer:0}}}function P(e){return e.eventRange.def.allDay}class z extends r.BaseComponent{render(){const{props:e}=this;return n.createElement("div",{role:e.cellGroup?void 0:"row",className:[e.cellGroup?"fc-flex-row":"fc-row",e.className||""].join(" ")},e.cells.map(t=>n.createElement(n.Fragment,{key:e.getHeaderModelKey(t)},e.renderHeaderContent(t,e.tierNum,void 0,e.colWidth))))}}function T(e){return n.createElement("div",{className:["fc-rowgroup","fc-content-box",...e.extraClassNames||[]].join(" "),style:{width:e.width,paddingLeft:e.paddingLeft,paddingRight:e.paddingRight}},e.headerTiers.map((t,r)=>n.createElement(z,{key:r,tierNum:r,cells:t,renderHeaderContent:e.renderHeaderContent,getHeaderModelKey:e.getHeaderModelKey,colWidth:e.colWidth})))}class F extends r.BaseComponent{constructor(){super(...arguments),this.handleScroller=e=>{r.setRef(this.props.scrollerRef,e)},this.handleLeftScrollbarWidth=e=>{this.setState({leftScrollbarWidth:e})},this.handleRightScrollbarWidth=e=>{this.setState({rightScrollbarWidth:e})}}render(){const{props:e,state:t,context:i}=this,{options:a}=i,s=!e.forPrint&&!r.getIsHeightAuto(a),l=!e.forPrint&&r.getStickyHeaderDates(a);return n.createElement(n.Fragment,null,a.dayHeaders&&n.createElement(T,{headerTiers:e.headerTiers,renderHeaderContent:e.renderHeaderContent,getHeaderModelKey:e.getHeaderModelKey,extraClassNames:["fc-daygrid-header",l?"fc-sticky-header":""],paddingLeft:t.leftScrollbarWidth,paddingRight:t.rightScrollbarWidth}),n.createElement(r.Scroller,{vertical:s,leftScrollbarWidthRef:this.handleLeftScrollbarWidth,rightScrollbarWidthRef:this.handleRightScrollbarWidth,elClassNames:["fc-daygrid-body","fc-rowgroup","fc-flex-column",s?"fc-liquid":""],ref:this.handleScroller},n.createElement(N,{dateProfile:e.dateProfile,todayRange:e.todayRange,cellRows:e.cellRows,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed,fgEventSegs:e.fgEventSegs,bgEventSegs:e.bgEventSegs,businessHourSegs:e.businessHourSegs,dateSelectionSegs:e.dateSelectionSegs,eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,rowHeightRefMap:e.rowHeightRefMap})))}}class O extends r.BaseComponent{constructor(){super(...arguments),this.headerScrollerRef=n.createRef(),this.bodyScrollerRef=n.createRef(),this.footerScrollerRef=n.createRef(),this.handleWidth=e=>{this.setState({width:e})},this.handleLeftScrollbarWidth=e=>{this.setState({leftScrollbarWidth:e})},this.handleRightScrollbarWidth=e=>{this.setState({rightScrollbarWidth:e})}}render(){const{props:e,state:t,context:i}=this,{options:a}=i,s=!e.forPrint&&!r.getIsHeightAuto(a),o=!e.forPrint&&r.getStickyHeaderDates(a),d=!e.forPrint&&r.getStickyFooterScrollbar(a),c=e.cellRows[0].length,[g,h]=l(c,e.dayMinWidth,t.width);return n.createElement(n.Fragment,null,a.dayHeaders&&n.createElement(r.Scroller,{horizontal:!0,hideScrollbars:!0,elClassNames:["fc-daygrid-header","fc-rowgroup",o?"fc-sticky-header":""],ref:this.headerScrollerRef},n.createElement(T,{headerTiers:e.headerTiers,renderHeaderContent:e.renderHeaderContent,getHeaderModelKey:e.getHeaderModelKey,colWidth:h,width:g,paddingLeft:t.leftScrollbarWidth,paddingRight:t.rightScrollbarWidth})),n.createElement(r.Scroller,{vertical:s,horizontal:!0,hideScrollbars:d,widthRef:this.handleWidth,leftScrollbarWidthRef:this.handleLeftScrollbarWidth,rightScrollbarWidthRef:this.handleRightScrollbarWidth,elClassNames:["fc-daygrid-body","fc-rowgroup","fc-flex-column",s?"fc-liquid":""],ref:this.bodyScrollerRef},n.createElement(N,{dateProfile:e.dateProfile,todayRange:e.todayRange,cellRows:e.cellRows,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed,fgEventSegs:e.fgEventSegs,bgEventSegs:e.bgEventSegs,businessHourSegs:e.businessHourSegs,dateSelectionSegs:e.dateSelectionSegs,eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,colWidth:h,width:g,rowHeightRefMap:e.rowHeightRefMap})),Boolean(d)&&n.createElement(r.Scroller,{ref:this.footerScrollerRef,horizontal:!0,elClassNames:["fc-sticky-footer"],elStyle:{marginTop:"-1px"}},n.createElement("div",{style:{width:g,height:"1px"}})))}componentDidMount(){const e=r.getScrollerSyncerClass(this.context.pluginHooks);this.syncedScroller=new e(!0),r.setRef(this.props.scrollerRef,this.syncedScroller),this.updateSyncedScroller()}componentDidUpdate(){this.updateSyncedScroller()}componentWillUnmount(){this.syncedScroller.destroy()}updateSyncedScroller(){const{isRtl:e}=this.context;this.syncedScroller.handleChildren([this.headerScrollerRef.current,this.bodyScrollerRef.current,this.footerScrollerRef.current],e)}}class I extends r.BaseComponent{constructor(){super(...arguments),this.scrollerRef=n.createRef(),this.rowHeightRefMap=new r.RefMap,this.timeScrollResponder=new r.ScrollResponder(e=>{const t=this.rowHeightRefMap.current,r=this.scrollerRef.current,n=function(e,t,r){let n=0;for(const i of t){const t=i[0].date,a=i[i.length-1].date,s=t.toISOString();if(e>=t&&e<=a)return n;const l=r.get(s);if(null==l)return;n+=l}return n}(this.props.dateProfile.currentDate,this.props.cellRows,t);return null!=n&&(r.scrollTo({y:n}),!0)})}render(){const{props:e,context:t}=this,{options:i}=t,a=Object.assign(Object.assign({},e),{scrollerRef:this.scrollerRef,rowHeightRefMap:this.rowHeightRefMap});return n.createElement(r.ViewContainer,{viewSpec:t.viewSpec,elClasses:[e.className,"fc-flex-column","fc-border"]},i.dayMinWidth?n.createElement(O,Object.assign({},a,{dayMinWidth:i.dayMinWidth})):n.createElement(F,Object.assign({},a)))}componentDidMount(){const{context:e}=this,{options:t}=e;e.emitter.on("_timeScrollRequest",this.timeScrollResponder.handleScroll),this.timeScrollResponder.handleScroll(t.scrollTime)}componentDidUpdate(e){const{options:t}=this.context;e.dateProfile!==this.props.dateProfile&&t.scrollTimeReset?this.timeScrollResponder.handleScroll(t.scrollTime):this.timeScrollResponder.drain()}componentWillUnmount(){this.context.emitter.off("_timeScrollRequest",this.timeScrollResponder.handleScroll)}}const j=r.createFormatter({weekday:"long"});class G extends r.BaseComponent{constructor(){super(...arguments),this.innerElRef=n.createRef()}render(){let{props:e,context:t}=this,{dateEnv:i,theme:s,viewApi:l,options:o}=t,d=r.addDays(new Date(2592e5),e.dow),c={dow:e.dow,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},g=i.format(d,e.dayHeaderFormat),h=Object.assign(Object.assign(Object.assign(Object.assign({date:d},c),{view:l}),e.extraRenderProps),{text:g});return n.createElement(r.ContentContainer,{elTag:"div",elClasses:[...r.getDayClassNames(c,s),...e.extraClassNames||[],"fc-header-cell","fc-cell",null!=e.colWidth?"":"fc-liquid","fc-flex-column","fc-align-center"],elAttrs:e.extraDataAttrs,elStyle:{width:null!=e.colWidth?e.colWidth*(e.colSpan||1):void 0},renderProps:h,generatorName:"dayHeaderContent",customGenerator:o.dayHeaderContent,defaultGenerator:a,classNameGenerator:o.dayHeaderClassNames,didMount:o.dayHeaderDidMount,willUnmount:o.dayHeaderWillUnmount},t=>n.createElement("div",{ref:this.innerElRef,className:["fc-flex-column",e.isSticky?"fc-sticky-x":""].join(" ")},n.createElement(t,{elTag:"a",elClasses:["fc-cell-inner","fc-padding-sm"],elAttrs:{"aria-label":i.format(d,j)}})))}componentDidMount(){const e=this.innerElRef.current;this.disconectInnerHeight=r.watchHeight(e,e=>{r.setRef(this.props.innerHeightRef,e)})}componentWillUnmount(){this.disconectInnerHeight()}}function A(e,t,n){return e||function(e,t){if(!e||t>10)return r.createFormatter({weekday:"short"});if(t>1)return r.createFormatter({weekday:"short",month:"numeric",day:"numeric",omitCommas:!0});return r.createFormatter({weekday:"long"})}(t,n)}class L extends r.BaseComponent{constructor(){super(...arguments),this.buildDayTableModel=r.memoize(s),this.buildHeaderTiers=r.memoize(o),this.createDayHeaderFormatter=r.memoize(A),this.slicer=new i}render(){const{props:e,context:t}=this,{options:i}=t,a=this.buildDayTableModel(e.dateProfile,t.dateProfileGenerator),s=1===a.rowCnt,l=this.buildHeaderTiers(a.headerDates,s),o=this.slicer.sliceProps(e,e.dateProfile,i.nextDayThreshold,t,a),d=this.createDayHeaderFormatter(t.options.dayHeaderFormat,s,a.colCnt);return n.createElement(r.NowTimer,{unit:"day"},(t,r)=>n.createElement(I,{dateProfile:e.dateProfile,todayRange:r,cellRows:a.cellRows,forPrint:e.forPrint,className:"fc-daygrid-view",headerTiers:l,renderHeaderContent:(t,i,s,l)=>t.date?n.createElement(f,Object.assign({},t,{dateProfile:e.dateProfile,todayRange:r,navLink:a.colCnt>1,dayHeaderFormat:d,colSpan:t.colSpan,colWidth:l})):n.createElement(G,Object.assign({},t,{dayHeaderFormat:d,colSpan:t.colSpan,colWidth:l})),getHeaderModelKey:e=>e.date?e.date.toUTCString():e.dow,fgEventSegs:o.fgEventSegs,bgEventSegs:o.bgEventSegs,businessHourSegs:o.businessHourSegs,dateSelectionSegs:o.dateSelectionSegs,eventDrag:o.eventDrag,eventResize:o.eventResize,eventSelection:o.eventSelection}))}}class B extends r.DateProfileGenerator{buildRenderRange(e,t,r){let n=super.buildRenderRange(e,t,r),{props:i}=this;return U({currentRange:n,snapToWeek:/^(year|month)$/.test(t),fixedWeekCount:i.fixedWeekCount,dateEnv:i.dateEnv})}}function U(e){let t,{dateEnv:n,currentRange:i}=e,{start:a,end:s}=i;if(e.snapToWeek&&(a=n.startOfWeek(a),t=n.startOfWeek(s),t.valueOf()!==s.valueOf()&&(s=r.addWeeks(t,1))),e.fixedWeekCount){let e=n.startOfWeek(n.startOfMonth(r.addDays(i.end,-1))),t=Math.ceil(r.diffWeeks(e,s));s=r.addWeeks(s,6-t)}return{start:a,end:s}}r.injectStyles(":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc-daygrid-cell.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-daygrid-row-spacious .fc-daygrid-cell-inner{min-height:3em}.fc-daygrid-cell-header{display:flex;flex-direction:row-reverse}.fc-day-other .fc-daygrid-cell-header{opacity:.3}.fc-daygrid-cell-number{padding:4px;position:relative;z-index:4}.fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc-daygrid-cell-footer{align-items:flex-start;display:flex;flex-direction:column;font-size:.85em;margin:0 2px}.fc-daygrid-row-spacious .fc-daygrid-cell-footer{margin-bottom:1em!important}.fc-daygrid-row-compact .fc-daygrid-cell-footer{align-items:stretch}.fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc-daygrid-row-compact .fc-daygrid-more-link{border:1px solid var(--fc-event-border-color);padding:1px}.fc-daygrid-cell .fc-non-business{z-index:1}.fc-daygrid-cell .fc-bg-event{z-index:2}.fc-daygrid-cell .fc-highlight{z-index:3}.fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);margin-top:1px;z-index:6}.fc-daygrid-event.fc-event-mirror{z-index:7}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;direction:row;display:flex;padding:2px 0;position:relative}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-daygrid-dot-event .fc-event-time,.fc-daygrid-dot-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-daygrid-dot-event .fc-event-title{flex-basis:0;flex-grow:1;font-weight:700;min-width:0}");var q=t.createPlugin({name:"@fullcalendar/daygrid",initialView:"dayGridMonth",views:{dayGrid:{component:L,dateProfileGeneratorClass:B},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},fixedWeekCount:!0},dayGridYear:{type:"dayGrid",duration:{years:1}}}});class K extends r.BaseComponent{constructor(){super(...arguments),this.innerHeightRefMap=new r.RefMap(()=>{r.afterSize(this.handleInnerHeights)}),this.handleInnerHeights=()=>{const e=this.innerHeightRefMap.current;let t=0;for(const r of e.values())t=Math.max(t,r);this.currentInnerHeight!==t&&(this.currentInnerHeight=t,r.setRef(this.props.innerHeightRef,t))}}render(){const{props:e}=this;return n.createElement("div",{role:"row",className:"fc-row",style:{height:e.height}},e.cells.map(t=>{const r=e.getHeaderModelKey(t);return n.createElement(n.Fragment,{key:e.getHeaderModelKey(t)},e.renderHeaderContent(t,e.tierNum,this.innerHeightRefMap.createRef(r),e.colWidth))}))}}var _={__proto__:null,DayTableSlicer:i,TableDateProfileGenerator:B,buildDayTableRenderRange:U,DayGridView:L,DateHeaderCell:f,DayOfWeekHeaderCell:G,HeaderRow:z,HeaderRowAdvanced:K,createDayHeaderFormatter:A,DayGridLayout:I,DayGridRow:k,COMPACT_CELL_WIDTH:80,DayGridRows:N,buildDayTableModel:s,computeColWidth:l,computeColFromPosition:c,getRowEl:g,getCellEl:h};return t.globalPlugins.push(q),e.Internal=_,e.default=q,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal,FullCalendar.Preact);
6
+ FullCalendar.DayGrid=function(e,t,r,n){"use strict";class i extends r.Slicer{constructor(){super(...arguments),this.forceDayIfListItem=!0}sliceRange(e,t){return t.sliceRange(e)}}function a(e){return e.text}function s(e,t){let n=new r.DaySeriesModel(e.renderRange,t);return new r.DayTableModel(n,/year|month|week/.test(e.currentRangeUnit))}function l(e,t,r){if(null==r)return[void 0,void 0];return r/e<t?[t*e,t]:[r,void 0]}function o(e,t){return[t?e.map(e=>({colSpan:1,date:e})):e.map(e=>({colSpan:1,dow:e.getUTCDay()}))]}function d(e,t,n,i){let a,s,l;if(null!=t)l=(e.lastCol-e.firstCol+1)*t,i?s=e.firstCol*t:a=e.firstCol*t;else{const t=1/n;l=r.fracToCssDim((e.lastCol-e.firstCol+1)*t),i?s=r.fracToCssDim(e.firstCol*t):a=r.fracToCssDim(e.firstCol*t)}return{left:a,right:s,width:l}}function c(e,t,r,n,i){const a=null!=r?r:t/n,s=Math.floor(e/a),l=s*a;return{col:i?n-s-1:s,left:l,right:l+a}}function h(e,t){return e.querySelectorAll(":scope > [role=row]")[t]}function g(e,t){return e.querySelectorAll(":scope > [role=gridcell]")[t]}class f extends r.BaseComponent{constructor(){super(...arguments),this.innerElRef=n.createRef()}render(){let{props:e,context:t}=this,{dateProfile:i,date:s,extraRenderProps:l,extraDataAttrs:o}=e,{dateEnv:d,options:c,theme:h,viewApi:g}=t,f=r.getDateMeta(s,e.todayRange,null,i),u=d.format(s,e.dayHeaderFormat),p=!f.isDisabled&&e.navLink?r.buildNavLinkAttrs(t,s):{},m=Object.assign(Object.assign(Object.assign({date:d.toDate(s),view:g},l),{text:u}),f);return n.createElement(r.ContentContainer,{elTag:"div",elClasses:[...r.getDayClassNames(f,h),...e.extraClassNames||[],"fc-header-cell","fc-cell",null!=e.colWidth?"":"fc-liquid","fc-flex-column","fc-align-center"],elAttrs:Object.assign({"data-date":f.isDisabled?void 0:r.formatDayString(s)},o),elStyle:{width:null!=e.colWidth?e.colWidth*(e.colSpan||1):void 0},renderProps:m,generatorName:"dayHeaderContent",customGenerator:c.dayHeaderContent,defaultGenerator:a,classNameGenerator:c.dayHeaderClassNames,didMount:c.dayHeaderDidMount,willUnmount:c.dayHeaderWillUnmount},t=>n.createElement("div",{ref:this.innerElRef,className:["fc-flex-column",e.isSticky?"fc-sticky-x":""].join(" ")},!f.isDisabled&&n.createElement(t,{elTag:"a",elAttrs:p,elClasses:["fc-cell-inner","fc-padding-sm"]})))}componentDidMount(){const e=this.innerElRef.current;this.disconectInnerHeight=r.watchHeight(e,e=>{r.setRef(this.props.innerHeightRef,e)})}componentWillUnmount(){this.disconectInnerHeight(),r.setRef(this.props.innerHeightRef,null)}}function u(e,t){const r=[];for(let e=0;e<t;e++)r[e]=[];for(const t of e)r[t.row].push(t);return r}function p(e,t){const r=[];if(e){for(let n=0;n<t;n++)r[n]={affectedInstances:e.affectedInstances,isEvent:e.isEvent,segs:[]};for(const t of e.segs)r[t.row].segs.push(t)}else for(let e=0;e<t;e++)r[e]=null;return r}function m(e,t){let r=[];for(let e=0;e<t;e++)r.push([]);for(let t of e)for(let e=t.firstCol;e<=t.lastCol;e++)t.firstCol!==e&&(t=Object.assign(Object.assign({},t),{firstCol:e,lastCol:e,isStart:!1,isEnd:t.isEnd&&t.lastCol===e,isStandin:!0})),r[e].push(t);return r}const y=r.createFormatter({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"});function v(e){let{display:t}=e.eventRange.ui;return"list-item"===t||"auto"===t&&!e.eventRange.def.allDay&&e.firstCol===e.lastCol&&e.isStart&&e.isEnd}class R extends r.BaseComponent{render(){let{props:e}=this;return n.createElement(r.StandardEvent,Object.assign({},e,{elClasses:["fc-daygrid-event","fc-daygrid-block-event","fc-h-event"],defaultTimeFormat:y,defaultDisplayEventEnd:e.defaultDisplayEventEnd,disableResizing:!e.eventRange.def.allDay}))}}class S extends r.BaseComponent{render(){let{props:e,context:t}=this,{options:i}=t,{eventRange:a}=e,s=i.eventTimeFormat||y,l=r.buildEventRangeTimeText(a,s,t,!0,e.defaultDisplayEventEnd);return n.createElement(r.EventContainer,Object.assign({},e,{elTag:"a",elClasses:["fc-daygrid-event","fc-daygrid-dot-event"],elAttrs:r.getEventRangeAnchorAttrs(a,t),defaultGenerator:E,timeText:l,isResizing:!1,isDateSelecting:!1}))}}function E(e){return n.createElement(n.Fragment,null,n.createElement("div",{className:"fc-daygrid-event-dot",style:{borderColor:e.borderColor||e.backgroundColor}}),e.timeText&&n.createElement("div",{className:"fc-event-time"},e.timeText),n.createElement("div",{className:"fc-event-title"},e.event.title||n.createElement(n.Fragment,null," ")))}class b extends r.BaseComponent{render(){let{props:e}=this;return n.createElement(r.MoreLinkContainer,{elClasses:["fc-daygrid-more-link"],dateProfile:e.dateProfile,todayRange:e.todayRange,allDayDate:e.allDayDate,segs:e.segs,hiddenSegs:e.hiddenSegs,alignmentElRef:e.alignmentElRef,alignGridTop:e.alignGridTop,extraDateSpan:e.extraDateSpan,popoverContent:()=>{let t=(e.eventDrag?e.eventDrag.affectedInstances:null)||(e.eventResize?e.eventResize.affectedInstances:null)||{};return n.createElement(n.Fragment,null,e.segs.map(i=>{let{eventRange:a}=i,s=a.instance.instanceId;return n.createElement("div",{key:s,style:{visibility:t[s]?"hidden":""}},v(i)?n.createElement(S,Object.assign({eventRange:a,isStart:i.isStart,isEnd:i.isEnd,isDragging:!1,isSelected:s===e.eventSelection,defaultDisplayEventEnd:!1},r.getEventRangeMeta(a,e.todayRange))):n.createElement(R,Object.assign({eventRange:a,isStart:i.isStart,isEnd:i.isEnd,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:s===e.eventSelection,defaultDisplayEventEnd:!1},r.getEventRangeMeta(a,e.todayRange))))}))}})}}class w extends r.DateComponent{constructor(){super(...arguments),this.innerElRef=n.createRef(),this.headerWrapElRef=n.createRef()}render(){let{props:e,context:t}=this,{options:i,dateEnv:a}=t;const s=e.showDayNumber&&function(e,t,n){const{start:i,end:a}=t,s=r.addMs(a,-1),l=n.getYear(i),o=n.getMonth(i),d=n.getYear(s),c=n.getMonth(s);return!(l===d&&o===c)&&Boolean(e.valueOf()===i.valueOf()||1===n.getDay(e)&&e.valueOf()<a.valueOf())}(e.date,e.dateProfile.currentRange,a);return n.createElement(r.DayCellContainer,{elTag:"div",elClasses:["fc-daygrid-cell","fc-cell",null!=e.width?"":"fc-liquid","fc-flex-column",...e.extraClassNames||[]],elAttrs:Object.assign(Object.assign({},e.extraDataAttrs),{role:"gridcell"}),elStyle:{width:e.width},extraRenderProps:e.extraRenderProps,defaultGenerator:H,date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,showDayNumber:e.showDayNumber,isMonthStart:s},(a,l)=>n.createElement("div",{ref:this.innerElRef,className:["fc-daygrid-cell-inner",e.fgLiquidHeight?"fc-liquid":""].join(" ")},n.createElement("div",{ref:this.headerWrapElRef,className:"fc-flex-column"},!l.isDisabled&&(e.showDayNumber||r.hasCustomDayCellContent(i))&&n.createElement("div",{className:"fc-daygrid-cell-header"},n.createElement(a,{elTag:"a",elClasses:["fc-daygrid-cell-number",s&&"fc-daygrid-month-start"],elAttrs:r.buildNavLinkAttrs(t,e.date)}))),n.createElement("div",{className:"fc-daygrid-cell-main",style:{height:e.fgLiquidHeight?"":e.fgHeight}},e.fg),n.createElement("div",{className:"fc-daygrid-cell-footer",style:e.fgLiquidHeight?{position:"relative",top:e.fgHeight}:{}},n.createElement(b,{allDayDate:e.date,segs:e.segs,hiddenSegs:e.hiddenSegs,alignmentElRef:this.innerElRef,alignGridTop:!e.showDayNumber,extraDateSpan:e.extraDateSpan,dateProfile:e.dateProfile,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,todayRange:e.todayRange})),e.bg))}componentDidMount(){const e=this.innerElRef.current,t=this.headerWrapElRef.current;this.detachInnerHeight=r.watchHeight(e,e=>{r.setRef(this.props.innerHeightRef,e)}),this.detachHeaderHeight=r.watchHeight(t,e=>{r.setRef(this.props.headerHeightRef,e)})}componentWillUnmount(){this.detachInnerHeight(),this.detachHeaderHeight(),r.setRef(this.props.innerHeightRef,null),r.setRef(this.props.headerHeightRef,null)}}function H(e){return e.dayNumberText||n.createElement(n.Fragment,null," ")}function x(e){return e.eventRange.instance.instanceId+":"+e.firstCol}function C(e){return x(e)+":"+e.lastCol}class D extends r.SegHierarchy{constructor(){super(...arguments),this.hiddenConsumes=!1,this.forceHidden={}}addSegs(e){const t=super.addSegs(e),{entriesByLevel:n}=this,i=e=>!this.forceHidden[r.buildEntryKey(e)];for(let e=0;e<n.length;e+=1)n[e]=n[e].filter(i);return t}handleInvalidInsertion(e,t,n){const{entriesByLevel:i,forceHidden:a}=this,{touchingEntry:s,touchingLevel:l,touchingLateral:o}=e;if(this.hiddenConsumes&&s){const e=r.buildEntryKey(s);if(!a[e])if(this.allowReslicing){const e=Object.assign(Object.assign({},s),{span:r.intersectSpans(s.span,t.span)});a[r.buildEntryKey(e)]=!0,i[l][o]=e,n.push(e),this.splitEntry(s,t,n)}else a[e]=!0,n.push(s)}super.handleInvalidInsertion(e,t,n)}}class M extends n.Component{constructor(){super(...arguments),this.rootElRef=n.createRef()}render(){const{props:e}=this;return n.createElement("div",{className:"fc-abs",style:e.style,ref:this.rootElRef},e.children)}componentDidMount(){const e=this.rootElRef.current;this.detachHeight=r.watchHeight(e,e=>{r.setRef(this.props.heightRef,e)})}componentWillUnmount(){this.detachHeight(),r.setRef(this.props.heightRef,null)}}const W=r.createFormatter({week:"narrow"});class k extends r.BaseComponent{constructor(){super(...arguments),this.cellInnerHeightRefMap=new r.RefMap(()=>{r.afterSize(this.handleInnerHeights)}),this.cellHeaderHeightRefMap=new r.RefMap(()=>{r.afterSize(this.handleHeaderHeights)}),this.segHeightRefMap=new r.RefMap(()=>{r.afterSize(this.handleSegHeights)}),this.handleRootEl=e=>{this.rootEl=e,r.setRef(this.props.rootElRef,e)},this.handleHeaderHeights=()=>{const e=this.cellHeaderHeightRefMap.current;let t=0;for(const r of e.values())t=Math.max(t,r);this.state.headerHeight!==t&&this.setState({headerHeight:t})},this.handleInnerHeights=()=>{const{props:e}=this,t=!0===e.dayMaxEvents||!0===e.dayMaxEventRows,n=this.cellInnerHeightRefMap.current;let i=0;for(const e of n.values())i=Math.max(i,e);t?this.state.innerHeight!==i&&this.setState({innerHeight:i}):r.setRef(e.innerHeightRef,i)},this.handleSegHeights=()=>{this.setState({segHeightRev:this.segHeightRefMap.rev})}}render(){const{props:e,state:t,context:i,cellInnerHeightRefMap:a,cellHeaderHeightRefMap:s}=this,{cells:l}=e,{options:o}=i,d=e.cells[0].date,c=e.cells.length,h=!0===e.dayMaxEvents||!0===e.dayMaxEventRows,g=r.sortEventSegs(e.fgEventSegs,o.eventOrder),f=m(g,c),u=m(e.bgEventSegs,c),p=m(e.businessHourSegs,c),y=m(this.getHighlightSegs(),c),v=m(this.getMirrorSegs(),c),[R,S,E]=function(e,t,r,n,i,a,s,l){const o=r.length,d=[],c=[];for(let e=0;e<o;e++)d.push([]),c.push(0);const h=e.map((e,t)=>({index:t,seg:e,span:{start:e.firstCol,end:e.lastCol+1}}));let g=new D(r=>t.get(C(e[r.index])));g.allowReslicing=!1,g.strictOrder=a,!0===s||!0===l?(g.maxCoord=i,g.hiddenConsumes=!0):"number"==typeof s?g.maxStackCnt=s:"number"==typeof l&&(g.maxStackCnt=l,g.hiddenConsumes=!0);const f=g.addSegs(h),u=g.toRects(),p={};for(const t of u){p[x(e[t.index])]=n+t.levelCoord;let{start:r,end:i}=t.span;for(;r<i;r++)c[r]=Math.max(c[r],t.levelCoord+t.thickness)}for(const t of f){const{span:r}=t,n=e[t.index];for(let e=r.start;e<r.end;e++)d[e].push(n)}return[p,c,d]}(g,this.segHeightRefMap.current,l,t.headerHeight,h&&null!=t.innerHeight&&null!=t.headerHeight?t.innerHeight-t.headerHeight:void 0,o.eventOrderStrict,e.dayMaxEvents,e.dayMaxEventRows),b=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{};return n.createElement("div",{role:e.cellGroup?void 0:"row",className:["fc-daygrid-row",e.forceVSpacing?"fc-daygrid-row-spacious":e.compact?"fc-daygrid-row-compact":"",e.cellGroup?"fc-flex-row":"fc-row","fc-rel",e.className||""].join(" "),style:{minHeight:e.minHeight},ref:this.handleRootEl},e.cells.map((t,r)=>{const i=this.renderFgSegs(f[r],R,e.todayRange,b),l=this.renderFgSegs(v[r],R,e.todayRange,{},Boolean(e.eventDrag),Boolean(e.eventResize),!1);return n.createElement(w,{key:t.key,dateProfile:e.dateProfile,todayRange:e.todayRange,date:t.date,showDayNumber:e.showDayNumbers,segs:f[r],hiddenSegs:E[r],fgLiquidHeight:h,fg:n.createElement(n.Fragment,null,n.createElement(n.Fragment,null,i),n.createElement(n.Fragment,null,l)),bg:n.createElement(n.Fragment,null,this.renderFillSegs(y[r],"highlight"),this.renderFillSegs(p[r],"non-business"),this.renderFillSegs(u[r],"bg-event")),eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,extraRenderProps:t.extraRenderProps,extraDateSpan:t.extraDateSpan,extraDataAttrs:t.extraDataAttrs,extraClassNames:t.extraClassNames,fgHeight:S[r],width:e.colWidth,innerHeightRef:a.createRef(t.key),headerHeightRef:s.createRef(t.key)})}),e.showWeekNumbers&&n.createElement(r.WeekNumberContainer,{elTag:"a",elClasses:["fc-daygrid-week-number"],elAttrs:r.buildNavLinkAttrs(i,d,"week"),date:d,defaultFormat:W}))}renderFgSegs(e,t,i,a,s,l,o){const{props:c,context:h,segHeightRefMap:g}=this,{isRtl:f}=h,{colWidth:u,eventSelection:p}=c,m=c.cells.length,y=1===c.cells.length,E=s||l||o,b=[];for(const c of e){const{left:e,right:h,width:w}=d(c,u,m,f),{eventRange:H}=c,{instanceId:D}=H.instance,W=C(c),k=t[x(c)],N=!c.isStandin&&null!=k&&!a[D];b.push(n.createElement(M,{key:W,style:{visibility:N?"":"hidden",top:k,left:e,right:h,width:w},heightRef:E||c.isStandin?null:g.createRef(W)},v(c)?n.createElement(S,Object.assign({eventRange:H,isStart:c.isStart,isEnd:c.isEnd,isDragging:s,isSelected:D===p,defaultDisplayEventEnd:y},r.getEventRangeMeta(H,i))):n.createElement(R,Object.assign({eventRange:H,isStart:c.isStart,isEnd:c.isEnd,isDragging:s,isResizing:l,isDateSelecting:o,isSelected:D===p,defaultDisplayEventEnd:y},r.getEventRangeMeta(H,i)))))}return b}renderFillSegs(e,t){const{props:i,context:a}=this,{isRtl:s}=a,{todayRange:l,colWidth:o}=i,c=i.cells.length,h=[];for(const i of e){const{left:e,right:a,width:g}=d(i,o,c,s),f=!i.isStandin;h.push(n.createElement("div",{key:r.buildEventRangeKey(i.eventRange),className:"fc-fill-y",style:{visibility:f?"":"hidden",left:e,right:a,width:g}},"bg-event"===t?n.createElement(r.BgEvent,Object.assign({eventRange:i.eventRange,isStart:i.isStart,isEnd:i.isEnd},r.getEventRangeMeta(i.eventRange,l))):r.renderFill(t)))}return n.createElement(n.Fragment,{},...h)}componentDidMount(){const{rootEl:e}=this;this.disconnectHeight=r.watchHeight(e,e=>{r.setRef(this.props.heightRef,e)})}componentWillUnmount(){this.disconnectHeight(),r.setRef(this.props.heightRef,null),r.setRef(this.props.innerHeightRef,null)}getMirrorSegs(){let{props:e}=this;return e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:[]}getHighlightSegs(){let{props:e}=this;return e.eventDrag&&e.eventDrag.segs.length?e.eventDrag.segs:e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:e.dateSelectionSegs}}class N extends r.DateComponent{constructor(){super(...arguments),this.splitBusinessHourSegs=r.memoize(u),this.splitBgEventSegs=r.memoize(u),this.splitFgEventSegs=r.memoize(u),this.splitDateSelectionSegs=r.memoize(u),this.splitEventDrag=r.memoize(p),this.splitEventResize=r.memoize(p),this.rowHeightRefMap=new r.RefMap((e,t)=>{const{rowHeightRefMap:r}=this.props;r&&r.handleValue(e,t)}),this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e,state:t,context:i,rowHeightRefMap:a}=this,{options:s}=i,l=e.cellRows.length,o=this.splitFgEventSegs(e.fgEventSegs,l),d=this.splitBgEventSegs(e.bgEventSegs,l),c=this.splitBusinessHourSegs(e.businessHourSegs,l),h=this.splitDateSelectionSegs(e.dateSelectionSegs,l),g=this.splitEventDrag(e.eventDrag,l),f=this.splitEventResize(e.eventResize,l),u=r.getIsHeightAuto(s),p=null!=t.width&&(l>=7||u)?t.width/i.options.aspectRatio/6:null;return n.createElement("div",{className:"fc-grow fc-flex-column",style:{width:e.width},ref:this.handleRootEl},e.cellRows.map((r,i)=>n.createElement(k,{key:r[0].key,dateProfile:e.dateProfile,todayRange:e.todayRange,cells:r,showDayNumbers:l>1,showWeekNumbers:s.weekNumbers,forPrint:e.forPrint,compact:null!=t.width&&t.width/r.length<80,className:u?"":"fc-grow fc-basis0",fgEventSegs:o[i],bgEventSegs:d[i].filter(P),businessHourSegs:c[i],dateSelectionSegs:h[i],eventSelection:e.eventSelection,eventDrag:g[i],eventResize:f[i],dayMaxEvents:s.dayMaxEvents,dayMaxEventRows:s.dayMaxEventRows,colWidth:e.colWidth,minHeight:p,heightRef:a.createRef(r[0].key)})))}componentDidMount(){this.detachWidth=r.watchWidth(this.rootEl,e=>{this.setState({width:e})})}componentWillUnmount(){this.detachWidth()}queryHit(e,t,n){const{props:i,context:a}=this,s=i.cellRows[0].length,{col:l,left:o,right:d}=c(e,n,i.colWidth,s,a.isRtl),{row:f,top:u,bottom:p}=function(e,t,r){let n=0,i=0,a=0;for(const s of t){const t=s[0].key;if(i=a,a=i+r.get(t),e<a)break;n++}return{row:n,top:i,bottom:a}}(t,i.cellRows,this.rowHeightRefMap.current),m=i.cellRows[f][l],y=m.date,v=r.addDays(y,1);return{dateProfile:i.dateProfile,dateSpan:Object.assign({range:{start:y,end:v},allDay:!0},m.extraDateSpan),dayEl:g(h(this.rootEl,f),l),rect:{left:o,right:d,top:u,bottom:p},layer:0}}}function P(e){return e.eventRange.def.allDay}class z extends r.BaseComponent{render(){const{props:e}=this;return n.createElement("div",{role:e.cellGroup?void 0:"row",className:[e.cellGroup?"fc-flex-row":"fc-row",e.className||""].join(" ")},e.cells.map(t=>n.createElement(n.Fragment,{key:e.getHeaderModelKey(t)},e.renderHeaderContent(t,e.tierNum,void 0,e.colWidth))))}}function T(e){return n.createElement("div",{className:["fc-rowgroup","fc-content-box",...e.extraClassNames||[]].join(" "),style:{width:e.width,paddingLeft:e.paddingLeft,paddingRight:e.paddingRight}},e.headerTiers.map((t,r)=>n.createElement(z,{key:r,tierNum:r,cells:t,renderHeaderContent:e.renderHeaderContent,getHeaderModelKey:e.getHeaderModelKey,colWidth:e.colWidth})))}class F extends r.BaseComponent{constructor(){super(...arguments),this.handleScroller=e=>{r.setRef(this.props.scrollerRef,e)},this.handleLeftScrollbarWidth=e=>{this.setState({leftScrollbarWidth:e})},this.handleRightScrollbarWidth=e=>{this.setState({rightScrollbarWidth:e})}}render(){const{props:e,state:t,context:i}=this,{options:a}=i,s=!e.forPrint&&!r.getIsHeightAuto(a),l=!e.forPrint&&r.getStickyHeaderDates(a);return n.createElement(n.Fragment,null,a.dayHeaders&&n.createElement(T,{headerTiers:e.headerTiers,renderHeaderContent:e.renderHeaderContent,getHeaderModelKey:e.getHeaderModelKey,extraClassNames:["fc-daygrid-header",l?"fc-sticky-header":""],paddingLeft:t.leftScrollbarWidth,paddingRight:t.rightScrollbarWidth}),n.createElement(r.Scroller,{vertical:s,leftScrollbarWidthRef:this.handleLeftScrollbarWidth,rightScrollbarWidthRef:this.handleRightScrollbarWidth,elClassNames:["fc-daygrid-body","fc-rowgroup","fc-flex-column",s?"fc-liquid":""],ref:this.handleScroller},n.createElement(N,{dateProfile:e.dateProfile,todayRange:e.todayRange,cellRows:e.cellRows,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed,fgEventSegs:e.fgEventSegs,bgEventSegs:e.bgEventSegs,businessHourSegs:e.businessHourSegs,dateSelectionSegs:e.dateSelectionSegs,eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,rowHeightRefMap:e.rowHeightRefMap})))}}class O extends r.BaseComponent{constructor(){super(...arguments),this.headerScrollerRef=n.createRef(),this.bodyScrollerRef=n.createRef(),this.footerScrollerRef=n.createRef(),this.handleWidth=e=>{this.setState({width:e})},this.handleLeftScrollbarWidth=e=>{this.setState({leftScrollbarWidth:e})},this.handleRightScrollbarWidth=e=>{this.setState({rightScrollbarWidth:e})}}render(){const{props:e,state:t,context:i}=this,{options:a}=i,s=!e.forPrint&&!r.getIsHeightAuto(a),o=!e.forPrint&&r.getStickyHeaderDates(a),d=!e.forPrint&&r.getStickyFooterScrollbar(a),c=e.cellRows[0].length,[h,g]=l(c,e.dayMinWidth,t.width);return n.createElement(n.Fragment,null,a.dayHeaders&&n.createElement(r.Scroller,{horizontal:!0,hideScrollbars:!0,elClassNames:["fc-daygrid-header","fc-rowgroup",o?"fc-sticky-header":""],ref:this.headerScrollerRef},n.createElement(T,{headerTiers:e.headerTiers,renderHeaderContent:e.renderHeaderContent,getHeaderModelKey:e.getHeaderModelKey,colWidth:g,width:h,paddingLeft:t.leftScrollbarWidth,paddingRight:t.rightScrollbarWidth})),n.createElement(r.Scroller,{vertical:s,horizontal:!0,hideScrollbars:d,widthRef:this.handleWidth,leftScrollbarWidthRef:this.handleLeftScrollbarWidth,rightScrollbarWidthRef:this.handleRightScrollbarWidth,elClassNames:["fc-daygrid-body","fc-rowgroup","fc-flex-column",s?"fc-liquid":""],ref:this.bodyScrollerRef},n.createElement(N,{dateProfile:e.dateProfile,todayRange:e.todayRange,cellRows:e.cellRows,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed,fgEventSegs:e.fgEventSegs,bgEventSegs:e.bgEventSegs,businessHourSegs:e.businessHourSegs,dateSelectionSegs:e.dateSelectionSegs,eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,colWidth:g,width:h,rowHeightRefMap:e.rowHeightRefMap})),Boolean(d)&&n.createElement(r.Scroller,{ref:this.footerScrollerRef,horizontal:!0,elClassNames:["fc-sticky-footer"],elStyle:{marginTop:"-1px"}},n.createElement("div",{style:{width:h,height:"1px"}})))}componentDidMount(){const e=r.getScrollerSyncerClass(this.context.pluginHooks);this.syncedScroller=new e(!0),r.setRef(this.props.scrollerRef,this.syncedScroller),this.updateSyncedScroller()}componentDidUpdate(){this.updateSyncedScroller()}componentWillUnmount(){this.syncedScroller.destroy()}updateSyncedScroller(){this.syncedScroller.handleChildren([this.headerScrollerRef.current,this.bodyScrollerRef.current,this.footerScrollerRef.current])}}class I extends r.BaseComponent{constructor(){super(...arguments),this.scrollerRef=n.createRef(),this.rowHeightRefMap=new r.RefMap(()=>{r.afterSize(this.updateScrollY)}),this.scrollDate=null,this.updateScrollY=()=>{const e=this.rowHeightRefMap.current,t=this.scrollerRef.current;if(t&&this.scrollDate){let r=function(e,t,r,n=0){let i=0;for(const a of t){const t=a[0].date,s=a[a.length-1].date,l=t.toISOString();if(e>=t&&e<=s)return i;const o=r.get(l);if(null==o)return;i+=o+n}return i}(this.scrollDate,this.props.cellRows,e,1);null!=r&&(r&&r++,t.scrollTo({y:r}))}},this.clearScroll=()=>{this.scrollDate=null}}render(){const{props:e,context:t}=this,{options:i}=t,a=Object.assign(Object.assign({},e),{scrollerRef:this.scrollerRef,rowHeightRefMap:this.rowHeightRefMap});return n.createElement(r.ViewContainer,{viewSpec:t.viewSpec,elClasses:[e.className,"fc-flex-column","fc-border"]},i.dayMinWidth?n.createElement(O,Object.assign({},a,{dayMinWidth:i.dayMinWidth})):n.createElement(F,Object.assign({},a)))}componentDidMount(){this.resetScroll(),this.scrollerRef.current.addScrollEndListener(this.clearScroll)}componentDidUpdate(e){e.dateProfile!==this.props.dateProfile&&this.context.options.scrollTimeReset&&this.resetScroll()}componentWillUnmount(){this.scrollerRef.current.removeScrollEndListener(this.clearScroll)}resetScroll(){this.scrollDate=this.props.dateProfile.currentDate,this.updateScrollY();this.scrollerRef.current.scrollTo({x:0})}}const j=r.createFormatter({weekday:"long"});class G extends r.BaseComponent{constructor(){super(...arguments),this.innerElRef=n.createRef()}render(){let{props:e,context:t}=this,{dateEnv:i,theme:s,viewApi:l,options:o}=t,d=r.addDays(new Date(2592e5),e.dow),c={dow:e.dow,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},h=i.format(d,e.dayHeaderFormat),g=Object.assign(Object.assign(Object.assign(Object.assign({date:d},c),{view:l}),e.extraRenderProps),{text:h});return n.createElement(r.ContentContainer,{elTag:"div",elClasses:[...r.getDayClassNames(c,s),...e.extraClassNames||[],"fc-header-cell","fc-cell",null!=e.colWidth?"":"fc-liquid","fc-flex-column","fc-align-center"],elAttrs:e.extraDataAttrs,elStyle:{width:null!=e.colWidth?e.colWidth*(e.colSpan||1):void 0},renderProps:g,generatorName:"dayHeaderContent",customGenerator:o.dayHeaderContent,defaultGenerator:a,classNameGenerator:o.dayHeaderClassNames,didMount:o.dayHeaderDidMount,willUnmount:o.dayHeaderWillUnmount},t=>n.createElement("div",{ref:this.innerElRef,className:["fc-flex-column",e.isSticky?"fc-sticky-x":""].join(" ")},n.createElement(t,{elTag:"a",elClasses:["fc-cell-inner","fc-padding-sm"],elAttrs:{"aria-label":i.format(d,j)}})))}componentDidMount(){const e=this.innerElRef.current;this.disconectInnerHeight=r.watchHeight(e,e=>{r.setRef(this.props.innerHeightRef,e)})}componentWillUnmount(){this.disconectInnerHeight(),r.setRef(this.props.innerHeightRef,null)}}function A(e,t,n){return e||function(e,t){if(!e||t>10)return r.createFormatter({weekday:"short"});if(t>1)return r.createFormatter({weekday:"short",month:"numeric",day:"numeric",omitCommas:!0});return r.createFormatter({weekday:"long"})}(t,n)}class L extends r.BaseComponent{constructor(){super(...arguments),this.buildDayTableModel=r.memoize(s),this.buildHeaderTiers=r.memoize(o),this.createDayHeaderFormatter=r.memoize(A),this.slicer=new i}render(){const{props:e,context:t}=this,{options:i}=t,a=this.buildDayTableModel(e.dateProfile,t.dateProfileGenerator),s=1===a.rowCnt,l=this.buildHeaderTiers(a.headerDates,s),o=this.slicer.sliceProps(e,e.dateProfile,i.nextDayThreshold,t,a),d=this.createDayHeaderFormatter(t.options.dayHeaderFormat,s,a.colCnt);return n.createElement(r.NowTimer,{unit:"day"},(t,r)=>n.createElement(I,{dateProfile:e.dateProfile,todayRange:r,cellRows:a.cellRows,forPrint:e.forPrint,className:"fc-daygrid-view",headerTiers:l,renderHeaderContent:(t,i,s,l)=>t.date?n.createElement(f,Object.assign({},t,{dateProfile:e.dateProfile,todayRange:r,navLink:a.colCnt>1,dayHeaderFormat:d,colSpan:t.colSpan,colWidth:l})):n.createElement(G,Object.assign({},t,{dayHeaderFormat:d,colSpan:t.colSpan,colWidth:l})),getHeaderModelKey:e=>e.date?e.date.toUTCString():e.dow,fgEventSegs:o.fgEventSegs,bgEventSegs:o.bgEventSegs,businessHourSegs:o.businessHourSegs,dateSelectionSegs:o.dateSelectionSegs,eventDrag:o.eventDrag,eventResize:o.eventResize,eventSelection:o.eventSelection}))}}class B extends r.DateProfileGenerator{buildRenderRange(e,t,r){let n=super.buildRenderRange(e,t,r),{props:i}=this;return U({currentRange:n,snapToWeek:/^(year|month)$/.test(t),fixedWeekCount:i.fixedWeekCount,dateEnv:i.dateEnv})}}function U(e){let t,{dateEnv:n,currentRange:i}=e,{start:a,end:s}=i;if(e.snapToWeek&&(a=n.startOfWeek(a),t=n.startOfWeek(s),t.valueOf()!==s.valueOf()&&(s=r.addWeeks(t,1))),e.fixedWeekCount){let e=n.startOfWeek(n.startOfMonth(r.addDays(i.end,-1))),t=Math.ceil(r.diffWeeks(e,s));s=r.addWeeks(s,6-t)}return{start:a,end:s}}r.injectStyles(":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc-daygrid-cell.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-daygrid-row-spacious .fc-daygrid-cell-inner{min-height:3em}.fc-daygrid-cell-header{display:flex;flex-direction:row-reverse}.fc-day-other .fc-daygrid-cell-header{opacity:.3}.fc-daygrid-cell-number{padding:4px;position:relative;z-index:4}.fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc-daygrid-cell-footer{align-items:flex-start;display:flex;flex-direction:column;font-size:.85em;margin:0 2px}.fc-daygrid-row-spacious .fc-daygrid-cell-footer{margin-bottom:1em!important}.fc-daygrid-row-compact .fc-daygrid-cell-footer{align-items:stretch}.fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc-daygrid-row-compact .fc-daygrid-more-link{border:1px solid var(--fc-event-border-color);padding:1px}.fc-daygrid-cell .fc-non-business{z-index:1}.fc-daygrid-cell .fc-bg-event{z-index:2}.fc-daygrid-cell .fc-highlight{z-index:3}.fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);margin-top:1px;z-index:6}.fc-daygrid-event.fc-event-mirror{z-index:7}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;direction:row;display:flex;padding:2px 0;position:relative}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-daygrid-dot-event .fc-event-time,.fc-daygrid-dot-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-daygrid-dot-event .fc-event-title{flex-basis:0;flex-grow:1;font-weight:700;min-width:0}");var K=t.createPlugin({name:"@fullcalendar/daygrid",initialView:"dayGridMonth",views:{dayGrid:{component:L,dateProfileGeneratorClass:B},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},fixedWeekCount:!0},dayGridYear:{type:"dayGrid",duration:{years:1}}}});class q extends r.BaseComponent{constructor(){super(...arguments),this.innerHeightRefMap=new r.RefMap(()=>{r.afterSize(this.handleInnerHeights)}),this.handleInnerHeights=()=>{const e=this.innerHeightRefMap.current;let t=0;for(const r of e.values())t=Math.max(t,r);this.currentInnerHeight!==t&&(this.currentInnerHeight=t,r.setRef(this.props.innerHeightRef,t))}}render(){const{props:e}=this;return n.createElement("div",{role:"row",className:"fc-row",style:{height:e.height}},e.cells.map(t=>{const r=e.getHeaderModelKey(t);return n.createElement(n.Fragment,{key:e.getHeaderModelKey(t)},e.renderHeaderContent(t,e.tierNum,this.innerHeightRefMap.createRef(r),e.colWidth))}))}}var _={__proto__:null,DayTableSlicer:i,TableDateProfileGenerator:B,buildDayTableRenderRange:U,DayGridView:L,DateHeaderCell:f,DayOfWeekHeaderCell:G,HeaderRow:z,HeaderRowAdvanced:q,createDayHeaderFormatter:A,DayGridLayout:I,DayGridRow:k,COMPACT_CELL_WIDTH:80,DayGridRows:N,buildDayTableModel:s,computeColWidth:l,computeColFromPosition:c,getRowEl:h,getCellEl:g};return t.globalPlugins.push(K),e.Internal=_,e.default=K,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal,FullCalendar.Preact);
package/internal.cjs CHANGED
@@ -82,7 +82,7 @@ function buildHeaderTiers(dates, datesRepDistinctDays) {
82
82
  }
83
83
  // Positioning
84
84
  // -------------------------------------------------------------------------------------------------
85
- function computeTopFromDate(date, cellRows, rowHeightMap) {
85
+ function computeTopFromDate(date, cellRows, rowHeightMap, adjust = 0) {
86
86
  let top = 0;
87
87
  for (const cells of cellRows) {
88
88
  const start = cells[0].date;
@@ -95,7 +95,7 @@ function computeTopFromDate(date, cellRows, rowHeightMap) {
95
95
  if (rowHeight == null) {
96
96
  return; // denote unknown
97
97
  }
98
- top += rowHeight;
98
+ top += rowHeight + adjust;
99
99
  }
100
100
  return top;
101
101
  }
@@ -201,6 +201,7 @@ class DateHeaderCell extends internal_cjs.BaseComponent {
201
201
  }
202
202
  componentWillUnmount() {
203
203
  this.disconectInnerHeight();
204
+ internal_cjs.setRef(this.props.innerHeightRef, null);
204
205
  }
205
206
  }
206
207
 
@@ -270,7 +271,7 @@ function hasListItemDisplay(seg) {
270
271
  class DayGridBlockEvent extends internal_cjs.BaseComponent {
271
272
  render() {
272
273
  let { props } = this;
273
- return (preact_cjs.createElement(internal_cjs.StandardEvent, Object.assign({}, props, { elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.seg.eventRange.def.allDay })));
274
+ return (preact_cjs.createElement(internal_cjs.StandardEvent, Object.assign({}, props, { elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.eventRange.def.allDay })));
274
275
  }
275
276
  }
276
277
 
@@ -278,10 +279,10 @@ class DayGridListEvent extends internal_cjs.BaseComponent {
278
279
  render() {
279
280
  let { props, context } = this;
280
281
  let { options } = context;
281
- let { seg } = props;
282
+ let { eventRange } = props;
282
283
  let timeFormat = options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;
283
- let timeText = internal_cjs.buildSegTimeText(seg, timeFormat, context, true, props.defaultDisplayEventEnd);
284
- return (preact_cjs.createElement(internal_cjs.EventContainer, Object.assign({}, props, { elTag: "a", elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'], elAttrs: internal_cjs.getSegAnchorAttrs(props.seg, context), defaultGenerator: renderInnerContent, timeText: timeText, isResizing: false, isDateSelecting: false })));
284
+ let timeText = internal_cjs.buildEventRangeTimeText(eventRange, timeFormat, context, true, props.defaultDisplayEventEnd);
285
+ return (preact_cjs.createElement(internal_cjs.EventContainer, Object.assign({}, props, { elTag: "a", elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'], elAttrs: internal_cjs.getEventRangeAnchorAttrs(eventRange, context), defaultGenerator: renderInnerContent, timeText: timeText, isResizing: false, isDateSelecting: false })));
285
286
  }
286
287
  }
287
288
  function renderInnerContent(renderProps) {
@@ -300,10 +301,11 @@ class DayGridMoreLink extends internal_cjs.BaseComponent {
300
301
  (props.eventResize ? props.eventResize.affectedInstances : null) ||
301
302
  {};
302
303
  return (preact_cjs.createElement(preact_cjs.Fragment, null, props.segs.map((seg) => {
303
- let instanceId = seg.eventRange.instance.instanceId;
304
+ let { eventRange } = seg;
305
+ let instanceId = eventRange.instance.instanceId;
304
306
  return (preact_cjs.createElement("div", { key: instanceId, style: {
305
307
  visibility: forcedInvisibleMap[instanceId] ? 'hidden' : '',
306
- } }, hasListItemDisplay(seg) ? (preact_cjs.createElement(DayGridListEvent, Object.assign({ seg: seg, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal_cjs.getSegMeta(seg, props.todayRange)))) : (preact_cjs.createElement(DayGridBlockEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal_cjs.getSegMeta(seg, props.todayRange))))));
308
+ } }, hasListItemDisplay(seg) ? (preact_cjs.createElement(DayGridListEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal_cjs.getEventRangeMeta(eventRange, props.todayRange)))) : (preact_cjs.createElement(DayGridBlockEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal_cjs.getEventRangeMeta(eventRange, props.todayRange))))));
307
309
  })));
308
310
  } }));
309
311
  }
@@ -522,6 +524,7 @@ class DayGridEventHarness extends preact_cjs.Component {
522
524
  }
523
525
  componentWillUnmount() {
524
526
  this.detachHeight();
527
+ internal_cjs.setRef(this.props.heightRef, null);
525
528
  }
526
529
  }
527
530
 
@@ -644,7 +647,8 @@ class DayGridRow extends internal_cjs.BaseComponent {
644
647
  for (const seg of segs) {
645
648
  const { left, right, width } = computeHorizontalsFromSeg(seg, colWidth, colCnt, isRtl);
646
649
  // TODO: optimize ID creation? all related
647
- const { instanceId } = seg.eventRange.instance;
650
+ const { eventRange } = seg;
651
+ const { instanceId } = eventRange.instance;
648
652
  const segSpanId = getSegSpanId(seg);
649
653
  const segStartId = getSegStartId(seg);
650
654
  const top = segTops[segStartId];
@@ -664,7 +668,7 @@ class DayGridRow extends internal_cjs.BaseComponent {
664
668
  width,
665
669
  }, heightRef: (isMirror || seg.isStandin)
666
670
  ? null
667
- : segHeightRefMap.createRef(segSpanId) }, hasListItemDisplay(seg) ? (preact_cjs.createElement(DayGridListEvent, Object.assign({ seg: seg, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal_cjs.getSegMeta(seg, todayRange)))) : (preact_cjs.createElement(DayGridBlockEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal_cjs.getSegMeta(seg, todayRange))))));
671
+ : segHeightRefMap.createRef(segSpanId) }, hasListItemDisplay(seg) ? (preact_cjs.createElement(DayGridListEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal_cjs.getEventRangeMeta(eventRange, todayRange)))) : (preact_cjs.createElement(DayGridBlockEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal_cjs.getEventRangeMeta(eventRange, todayRange))))));
668
672
  }
669
673
  return nodes;
670
674
  }
@@ -683,8 +687,7 @@ class DayGridRow extends internal_cjs.BaseComponent {
683
687
  right,
684
688
  width,
685
689
  } }, fillType === 'bg-event' ?
686
- preact_cjs.createElement(internal_cjs.BgEvent, Object.assign({ seg: seg }, internal_cjs.getSegMeta(seg, todayRange))) :
687
- internal_cjs.renderFill(fillType)));
690
+ preact_cjs.createElement(internal_cjs.BgEvent, Object.assign({ eventRange: seg.eventRange, isStart: seg.isStart, isEnd: seg.isEnd }, internal_cjs.getEventRangeMeta(seg.eventRange, todayRange))) : (internal_cjs.renderFill(fillType))));
688
691
  }
689
692
  return preact_cjs.createElement(preact_cjs.Fragment, {}, ...nodes);
690
693
  }
@@ -782,12 +785,12 @@ class DayGridRows extends internal_cjs.DateComponent {
782
785
  heightRef: rowHeightRefMap.createRef(cells[0].key) })))));
783
786
  }
784
787
  componentDidMount() {
785
- this.unwatchWidth = internal_cjs.watchWidth(this.rootEl, (width) => {
788
+ this.detachWidth = internal_cjs.watchWidth(this.rootEl, (width) => {
786
789
  this.setState({ width });
787
790
  });
788
791
  }
789
792
  componentWillUnmount() {
790
- this.unwatchWidth();
793
+ this.detachWidth();
791
794
  }
792
795
  // Hit System
793
796
  // -----------------------------------------------------------------------------------------------
@@ -965,12 +968,11 @@ class DayGridLayoutPannable extends internal_cjs.BaseComponent {
965
968
  // Scrolling
966
969
  // -----------------------------------------------------------------------------------------------
967
970
  updateSyncedScroller() {
968
- const { isRtl } = this.context;
969
971
  this.syncedScroller.handleChildren([
970
972
  this.headerScrollerRef.current,
971
973
  this.bodyScrollerRef.current,
972
974
  this.footerScrollerRef.current,
973
- ], isRtl);
975
+ ]);
974
976
  }
975
977
  }
976
978
 
@@ -979,20 +981,29 @@ class DayGridLayout extends internal_cjs.BaseComponent {
979
981
  super(...arguments);
980
982
  // ref
981
983
  this.scrollerRef = preact_cjs.createRef();
982
- this.rowHeightRefMap = new internal_cjs.RefMap();
983
- // Scrolling
984
- // -----------------------------------------------------------------------------------------------
985
- this.timeScrollResponder = new internal_cjs.ScrollResponder((_time) => {
986
- // HACK to scroll to day
984
+ this.rowHeightRefMap = new internal_cjs.RefMap(() => {
985
+ internal_cjs.afterSize(this.updateScrollY);
986
+ });
987
+ // internal
988
+ this.scrollDate = null;
989
+ this.updateScrollY = () => {
987
990
  const rowHeightMap = this.rowHeightRefMap.current;
988
991
  const scroller = this.scrollerRef.current;
989
- const scrollTop = computeTopFromDate(this.props.dateProfile.currentDate, this.props.cellRows, rowHeightMap);
990
- if (scrollTop != null) {
991
- scroller.scrollTo({ y: scrollTop });
992
- return true;
992
+ // Since updateScrollY is called by rowHeightRefMap, could be called with null during cleanup,
993
+ // and the scroller might not exist
994
+ if (scroller && this.scrollDate) {
995
+ let scrollTop = computeTopFromDate(this.scrollDate, this.props.cellRows, rowHeightMap, 1);
996
+ if (scrollTop != null) {
997
+ if (scrollTop) {
998
+ scrollTop++; // clear top border
999
+ }
1000
+ scroller.scrollTo({ y: scrollTop });
1001
+ }
993
1002
  }
994
- return false;
995
- });
1003
+ };
1004
+ this.clearScroll = () => {
1005
+ this.scrollDate = null;
1006
+ };
996
1007
  }
997
1008
  render() {
998
1009
  const { props, context } = this;
@@ -1003,22 +1014,25 @@ class DayGridLayout extends internal_cjs.BaseComponent {
1003
1014
  // Lifecycle
1004
1015
  // -----------------------------------------------------------------------------------------------
1005
1016
  componentDidMount() {
1006
- const { context } = this;
1007
- const { options } = context;
1008
- context.emitter.on('_timeScrollRequest', this.timeScrollResponder.handleScroll);
1009
- this.timeScrollResponder.handleScroll(options.scrollTime);
1017
+ this.resetScroll();
1018
+ this.scrollerRef.current.addScrollEndListener(this.clearScroll);
1010
1019
  }
1011
1020
  componentDidUpdate(prevProps) {
1012
- const { options } = this.context;
1013
- if (prevProps.dateProfile !== this.props.dateProfile && options.scrollTimeReset) {
1014
- this.timeScrollResponder.handleScroll(options.scrollTime);
1015
- }
1016
- else {
1017
- this.timeScrollResponder.drain();
1021
+ if (prevProps.dateProfile !== this.props.dateProfile && this.context.options.scrollTimeReset) {
1022
+ this.resetScroll();
1018
1023
  }
1019
1024
  }
1020
1025
  componentWillUnmount() {
1021
- this.context.emitter.off('_timeScrollRequest', this.timeScrollResponder.handleScroll);
1026
+ this.scrollerRef.current.removeScrollEndListener(this.clearScroll);
1027
+ }
1028
+ // Scrolling
1029
+ // -----------------------------------------------------------------------------------------------
1030
+ resetScroll() {
1031
+ this.scrollDate = this.props.dateProfile.currentDate;
1032
+ this.updateScrollY();
1033
+ // updateScrollX
1034
+ const scroller = this.scrollerRef.current;
1035
+ scroller.scrollTo({ x: 0 });
1022
1036
  }
1023
1037
  }
1024
1038
 
@@ -1075,6 +1089,7 @@ class DayOfWeekHeaderCell extends internal_cjs.BaseComponent {
1075
1089
  }
1076
1090
  componentWillUnmount() {
1077
1091
  this.disconectInnerHeight();
1092
+ internal_cjs.setRef(this.props.innerHeightRef, null);
1078
1093
  }
1079
1094
  }
1080
1095
 
package/internal.d.ts CHANGED
@@ -121,18 +121,21 @@ interface DayGridLayoutProps<HeaderCellModel, HeaderCellKey> {
121
121
  bgEventSegs: TableSeg[];
122
122
  businessHourSegs: TableSeg[];
123
123
  dateSelectionSegs: TableSeg[];
124
- eventDrag: EventSegUiInteractionState | null;
125
- eventResize: EventSegUiInteractionState | null;
124
+ eventDrag: EventSegUiInteractionState<TableSeg> | null;
125
+ eventResize: EventSegUiInteractionState<TableSeg> | null;
126
126
  eventSelection: string;
127
127
  }
128
128
  declare class DayGridLayout<HeaderCellModel, HeaderCellKey> extends BaseComponent<DayGridLayoutProps<HeaderCellModel, HeaderCellKey>> {
129
129
  private scrollerRef;
130
130
  private rowHeightRefMap;
131
+ private scrollDate;
131
132
  render(): createElement.JSX.Element;
132
133
  componentDidMount(): void;
133
134
  componentDidUpdate(prevProps: DayGridLayoutProps<unknown, unknown>): void;
134
135
  componentWillUnmount(): void;
135
- private timeScrollResponder;
136
+ resetScroll(): void;
137
+ updateScrollY: () => void;
138
+ clearScroll: () => void;
136
139
  }
137
140
 
138
141
  interface DayGridRowProps {
@@ -200,8 +203,8 @@ interface DayGridRowsProps {
200
203
  bgEventSegs: TableSeg[];
201
204
  businessHourSegs: TableSeg[];
202
205
  dateSelectionSegs: TableSeg[];
203
- eventDrag: EventSegUiInteractionState | null;
204
- eventResize: EventSegUiInteractionState | null;
206
+ eventDrag: EventSegUiInteractionState<TableSeg> | null;
207
+ eventResize: EventSegUiInteractionState<TableSeg> | null;
205
208
  eventSelection: string;
206
209
  colWidth?: number;
207
210
  width?: number | string;
@@ -219,7 +222,7 @@ declare class DayGridRows extends DateComponent<DayGridRowsProps, DayGridRowsSta
219
222
  private splitEventDrag;
220
223
  private splitEventResize;
221
224
  private rowHeightRefMap;
222
- private unwatchWidth?;
225
+ private detachWidth?;
223
226
  render(): createElement.JSX.Element;
224
227
  handleRootEl: (rootEl: HTMLDivElement) => void;
225
228
  componentDidMount(): void;
package/internal.js CHANGED
@@ -1,4 +1,4 @@
1
- import { injectStyles, Slicer, DateProfileGenerator, addWeeks, addDays, diffWeeks, DaySeriesModel, DayTableModel, fracToCssDim, BaseComponent, getDateMeta, buildNavLinkAttrs, ContentContainer, getDayClassNames, formatDayString, watchHeight, setRef, createFormatter, StandardEvent, buildSegTimeText, EventContainer, getSegAnchorAttrs, MoreLinkContainer, getSegMeta, DateComponent, DayCellContainer, hasCustomDayCellContent, addMs, SegHierarchy, buildEntryKey, intersectSpans, RefMap, afterSize, sortEventSegs, WeekNumberContainer, buildEventRangeKey, BgEvent, renderFill, memoize, getIsHeightAuto, watchWidth, getStickyHeaderDates, Scroller, getStickyFooterScrollbar, getScrollerSyncerClass, ScrollResponder, ViewContainer, NowTimer } from '@fullcalendar/core/internal.js';
1
+ import { injectStyles, Slicer, DateProfileGenerator, addWeeks, addDays, diffWeeks, DaySeriesModel, DayTableModel, fracToCssDim, BaseComponent, getDateMeta, buildNavLinkAttrs, ContentContainer, getDayClassNames, formatDayString, watchHeight, setRef, createFormatter, StandardEvent, buildEventRangeTimeText, EventContainer, getEventRangeAnchorAttrs, MoreLinkContainer, getEventRangeMeta, DateComponent, DayCellContainer, hasCustomDayCellContent, addMs, SegHierarchy, buildEntryKey, intersectSpans, RefMap, afterSize, sortEventSegs, WeekNumberContainer, buildEventRangeKey, BgEvent, renderFill, memoize, getIsHeightAuto, watchWidth, getStickyHeaderDates, Scroller, getStickyFooterScrollbar, getScrollerSyncerClass, ViewContainer, NowTimer } from '@fullcalendar/core/internal.js';
2
2
  import { createRef, createElement, Fragment, Component } from '@fullcalendar/core/preact.js';
3
3
 
4
4
  var css_248z = ":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc-daygrid-cell.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-daygrid-row-spacious .fc-daygrid-cell-inner{min-height:3em}.fc-daygrid-cell-header{display:flex;flex-direction:row-reverse}.fc-day-other .fc-daygrid-cell-header{opacity:.3}.fc-daygrid-cell-number{padding:4px;position:relative;z-index:4}.fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc-daygrid-cell-footer{align-items:flex-start;display:flex;flex-direction:column;font-size:.85em;margin:0 2px}.fc-daygrid-row-spacious .fc-daygrid-cell-footer{margin-bottom:1em!important}.fc-daygrid-row-compact .fc-daygrid-cell-footer{align-items:stretch}.fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc-daygrid-row-compact .fc-daygrid-more-link{border:1px solid var(--fc-event-border-color);padding:1px}.fc-daygrid-cell .fc-non-business{z-index:1}.fc-daygrid-cell .fc-bg-event{z-index:2}.fc-daygrid-cell .fc-highlight{z-index:3}.fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);margin-top:1px;z-index:6}.fc-daygrid-event.fc-event-mirror{z-index:7}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;direction:row;display:flex;padding:2px 0;position:relative}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-daygrid-dot-event .fc-event-time,.fc-daygrid-dot-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-daygrid-dot-event .fc-event-title{flex-basis:0;flex-grow:1;font-weight:700;min-width:0}";
@@ -78,7 +78,7 @@ function buildHeaderTiers(dates, datesRepDistinctDays) {
78
78
  }
79
79
  // Positioning
80
80
  // -------------------------------------------------------------------------------------------------
81
- function computeTopFromDate(date, cellRows, rowHeightMap) {
81
+ function computeTopFromDate(date, cellRows, rowHeightMap, adjust = 0) {
82
82
  let top = 0;
83
83
  for (const cells of cellRows) {
84
84
  const start = cells[0].date;
@@ -91,7 +91,7 @@ function computeTopFromDate(date, cellRows, rowHeightMap) {
91
91
  if (rowHeight == null) {
92
92
  return; // denote unknown
93
93
  }
94
- top += rowHeight;
94
+ top += rowHeight + adjust;
95
95
  }
96
96
  return top;
97
97
  }
@@ -197,6 +197,7 @@ class DateHeaderCell extends BaseComponent {
197
197
  }
198
198
  componentWillUnmount() {
199
199
  this.disconectInnerHeight();
200
+ setRef(this.props.innerHeightRef, null);
200
201
  }
201
202
  }
202
203
 
@@ -266,7 +267,7 @@ function hasListItemDisplay(seg) {
266
267
  class DayGridBlockEvent extends BaseComponent {
267
268
  render() {
268
269
  let { props } = this;
269
- return (createElement(StandardEvent, Object.assign({}, props, { elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.seg.eventRange.def.allDay })));
270
+ return (createElement(StandardEvent, Object.assign({}, props, { elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.eventRange.def.allDay })));
270
271
  }
271
272
  }
272
273
 
@@ -274,10 +275,10 @@ class DayGridListEvent extends BaseComponent {
274
275
  render() {
275
276
  let { props, context } = this;
276
277
  let { options } = context;
277
- let { seg } = props;
278
+ let { eventRange } = props;
278
279
  let timeFormat = options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;
279
- let timeText = buildSegTimeText(seg, timeFormat, context, true, props.defaultDisplayEventEnd);
280
- return (createElement(EventContainer, Object.assign({}, props, { elTag: "a", elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'], elAttrs: getSegAnchorAttrs(props.seg, context), defaultGenerator: renderInnerContent, timeText: timeText, isResizing: false, isDateSelecting: false })));
280
+ let timeText = buildEventRangeTimeText(eventRange, timeFormat, context, true, props.defaultDisplayEventEnd);
281
+ return (createElement(EventContainer, Object.assign({}, props, { elTag: "a", elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'], elAttrs: getEventRangeAnchorAttrs(eventRange, context), defaultGenerator: renderInnerContent, timeText: timeText, isResizing: false, isDateSelecting: false })));
281
282
  }
282
283
  }
283
284
  function renderInnerContent(renderProps) {
@@ -296,10 +297,11 @@ class DayGridMoreLink extends BaseComponent {
296
297
  (props.eventResize ? props.eventResize.affectedInstances : null) ||
297
298
  {};
298
299
  return (createElement(Fragment, null, props.segs.map((seg) => {
299
- let instanceId = seg.eventRange.instance.instanceId;
300
+ let { eventRange } = seg;
301
+ let instanceId = eventRange.instance.instanceId;
300
302
  return (createElement("div", { key: instanceId, style: {
301
303
  visibility: forcedInvisibleMap[instanceId] ? 'hidden' : '',
302
- } }, hasListItemDisplay(seg) ? (createElement(DayGridListEvent, Object.assign({ seg: seg, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getSegMeta(seg, props.todayRange)))) : (createElement(DayGridBlockEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getSegMeta(seg, props.todayRange))))));
304
+ } }, hasListItemDisplay(seg) ? (createElement(DayGridListEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getEventRangeMeta(eventRange, props.todayRange)))) : (createElement(DayGridBlockEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getEventRangeMeta(eventRange, props.todayRange))))));
303
305
  })));
304
306
  } }));
305
307
  }
@@ -518,6 +520,7 @@ class DayGridEventHarness extends Component {
518
520
  }
519
521
  componentWillUnmount() {
520
522
  this.detachHeight();
523
+ setRef(this.props.heightRef, null);
521
524
  }
522
525
  }
523
526
 
@@ -640,7 +643,8 @@ class DayGridRow extends BaseComponent {
640
643
  for (const seg of segs) {
641
644
  const { left, right, width } = computeHorizontalsFromSeg(seg, colWidth, colCnt, isRtl);
642
645
  // TODO: optimize ID creation? all related
643
- const { instanceId } = seg.eventRange.instance;
646
+ const { eventRange } = seg;
647
+ const { instanceId } = eventRange.instance;
644
648
  const segSpanId = getSegSpanId(seg);
645
649
  const segStartId = getSegStartId(seg);
646
650
  const top = segTops[segStartId];
@@ -660,7 +664,7 @@ class DayGridRow extends BaseComponent {
660
664
  width,
661
665
  }, heightRef: (isMirror || seg.isStandin)
662
666
  ? null
663
- : segHeightRefMap.createRef(segSpanId) }, hasListItemDisplay(seg) ? (createElement(DayGridListEvent, Object.assign({ seg: seg, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, getSegMeta(seg, todayRange)))) : (createElement(DayGridBlockEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, getSegMeta(seg, todayRange))))));
667
+ : segHeightRefMap.createRef(segSpanId) }, hasListItemDisplay(seg) ? (createElement(DayGridListEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, getEventRangeMeta(eventRange, todayRange)))) : (createElement(DayGridBlockEvent, Object.assign({ eventRange: eventRange, isStart: seg.isStart, isEnd: seg.isEnd, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, getEventRangeMeta(eventRange, todayRange))))));
664
668
  }
665
669
  return nodes;
666
670
  }
@@ -679,8 +683,7 @@ class DayGridRow extends BaseComponent {
679
683
  right,
680
684
  width,
681
685
  } }, fillType === 'bg-event' ?
682
- createElement(BgEvent, Object.assign({ seg: seg }, getSegMeta(seg, todayRange))) :
683
- renderFill(fillType)));
686
+ createElement(BgEvent, Object.assign({ eventRange: seg.eventRange, isStart: seg.isStart, isEnd: seg.isEnd }, getEventRangeMeta(seg.eventRange, todayRange))) : (renderFill(fillType))));
684
687
  }
685
688
  return createElement(Fragment, {}, ...nodes);
686
689
  }
@@ -778,12 +781,12 @@ class DayGridRows extends DateComponent {
778
781
  heightRef: rowHeightRefMap.createRef(cells[0].key) })))));
779
782
  }
780
783
  componentDidMount() {
781
- this.unwatchWidth = watchWidth(this.rootEl, (width) => {
784
+ this.detachWidth = watchWidth(this.rootEl, (width) => {
782
785
  this.setState({ width });
783
786
  });
784
787
  }
785
788
  componentWillUnmount() {
786
- this.unwatchWidth();
789
+ this.detachWidth();
787
790
  }
788
791
  // Hit System
789
792
  // -----------------------------------------------------------------------------------------------
@@ -961,12 +964,11 @@ class DayGridLayoutPannable extends BaseComponent {
961
964
  // Scrolling
962
965
  // -----------------------------------------------------------------------------------------------
963
966
  updateSyncedScroller() {
964
- const { isRtl } = this.context;
965
967
  this.syncedScroller.handleChildren([
966
968
  this.headerScrollerRef.current,
967
969
  this.bodyScrollerRef.current,
968
970
  this.footerScrollerRef.current,
969
- ], isRtl);
971
+ ]);
970
972
  }
971
973
  }
972
974
 
@@ -975,20 +977,29 @@ class DayGridLayout extends BaseComponent {
975
977
  super(...arguments);
976
978
  // ref
977
979
  this.scrollerRef = createRef();
978
- this.rowHeightRefMap = new RefMap();
979
- // Scrolling
980
- // -----------------------------------------------------------------------------------------------
981
- this.timeScrollResponder = new ScrollResponder((_time) => {
982
- // HACK to scroll to day
980
+ this.rowHeightRefMap = new RefMap(() => {
981
+ afterSize(this.updateScrollY);
982
+ });
983
+ // internal
984
+ this.scrollDate = null;
985
+ this.updateScrollY = () => {
983
986
  const rowHeightMap = this.rowHeightRefMap.current;
984
987
  const scroller = this.scrollerRef.current;
985
- const scrollTop = computeTopFromDate(this.props.dateProfile.currentDate, this.props.cellRows, rowHeightMap);
986
- if (scrollTop != null) {
987
- scroller.scrollTo({ y: scrollTop });
988
- return true;
988
+ // Since updateScrollY is called by rowHeightRefMap, could be called with null during cleanup,
989
+ // and the scroller might not exist
990
+ if (scroller && this.scrollDate) {
991
+ let scrollTop = computeTopFromDate(this.scrollDate, this.props.cellRows, rowHeightMap, 1);
992
+ if (scrollTop != null) {
993
+ if (scrollTop) {
994
+ scrollTop++; // clear top border
995
+ }
996
+ scroller.scrollTo({ y: scrollTop });
997
+ }
989
998
  }
990
- return false;
991
- });
999
+ };
1000
+ this.clearScroll = () => {
1001
+ this.scrollDate = null;
1002
+ };
992
1003
  }
993
1004
  render() {
994
1005
  const { props, context } = this;
@@ -999,22 +1010,25 @@ class DayGridLayout extends BaseComponent {
999
1010
  // Lifecycle
1000
1011
  // -----------------------------------------------------------------------------------------------
1001
1012
  componentDidMount() {
1002
- const { context } = this;
1003
- const { options } = context;
1004
- context.emitter.on('_timeScrollRequest', this.timeScrollResponder.handleScroll);
1005
- this.timeScrollResponder.handleScroll(options.scrollTime);
1013
+ this.resetScroll();
1014
+ this.scrollerRef.current.addScrollEndListener(this.clearScroll);
1006
1015
  }
1007
1016
  componentDidUpdate(prevProps) {
1008
- const { options } = this.context;
1009
- if (prevProps.dateProfile !== this.props.dateProfile && options.scrollTimeReset) {
1010
- this.timeScrollResponder.handleScroll(options.scrollTime);
1011
- }
1012
- else {
1013
- this.timeScrollResponder.drain();
1017
+ if (prevProps.dateProfile !== this.props.dateProfile && this.context.options.scrollTimeReset) {
1018
+ this.resetScroll();
1014
1019
  }
1015
1020
  }
1016
1021
  componentWillUnmount() {
1017
- this.context.emitter.off('_timeScrollRequest', this.timeScrollResponder.handleScroll);
1022
+ this.scrollerRef.current.removeScrollEndListener(this.clearScroll);
1023
+ }
1024
+ // Scrolling
1025
+ // -----------------------------------------------------------------------------------------------
1026
+ resetScroll() {
1027
+ this.scrollDate = this.props.dateProfile.currentDate;
1028
+ this.updateScrollY();
1029
+ // updateScrollX
1030
+ const scroller = this.scrollerRef.current;
1031
+ scroller.scrollTo({ x: 0 });
1018
1032
  }
1019
1033
  }
1020
1034
 
@@ -1071,6 +1085,7 @@ class DayOfWeekHeaderCell extends BaseComponent {
1071
1085
  }
1072
1086
  componentWillUnmount() {
1073
1087
  this.disconectInnerHeight();
1088
+ setRef(this.props.innerHeightRef, null);
1074
1089
  }
1075
1090
  }
1076
1091
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fullcalendar/daygrid",
3
- "version": "7.0.0-beta.0",
3
+ "version": "7.0.0-beta.1",
4
4
  "title": "FullCalendar Day Grid Plugin",
5
5
  "description": "Display events on a month view or \"day grid\" view",
6
6
  "homepage": "https://fullcalendar.io/docs/month-view",
@@ -13,7 +13,7 @@
13
13
  "month-view"
14
14
  ],
15
15
  "peerDependencies": {
16
- "@fullcalendar/core": "7.0.0-beta.0"
16
+ "@fullcalendar/core": "7.0.0-beta.1"
17
17
  },
18
18
  "type": "module",
19
19
  "bugs": "https://fullcalendar.io/reporting-bugs",