@fullcalendar/scrollgrid 5.11.0 → 5.11.2

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/main.cjs.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- FullCalendar Scheduler v5.10.2
2
+ FullCalendar Scheduler v5.11.2
3
3
  Docs & License: https://fullcalendar.io/scheduler
4
- (c) 2021 Adam Shaw
4
+ (c) 2022 Adam Shaw
5
5
  */
6
6
  'use strict';
7
7
 
@@ -504,9 +504,6 @@ var ScrollGrid = /** @class */ (function (_super) {
504
504
  // doesn't hold non-scrolling els used just for padding
505
505
  _this.scrollerElRefs = new common.RefMap(_this._handleScrollerEl.bind(_this));
506
506
  _this.chunkElRefs = new common.RefMap(_this._handleChunkEl.bind(_this));
507
- _this.getStickyScrolling = common.memoizeArraylike(initStickyScrolling, null, destroyStickyScrolling);
508
- _this.getScrollSyncersBySection = common.memoizeHashlike(initScrollSyncer.bind(_this, true), null, destroyScrollSyncer);
509
- _this.getScrollSyncersByColumn = common.memoizeHashlike(initScrollSyncer.bind(_this, false), null, destroyScrollSyncer);
510
507
  _this.stickyScrollings = [];
511
508
  _this.scrollSyncersBySection = {};
512
509
  _this.scrollSyncersByColumn = {};
@@ -649,6 +646,9 @@ var ScrollGrid = /** @class */ (function (_super) {
649
646
  }, content);
650
647
  };
651
648
  ScrollGrid.prototype.componentDidMount = function () {
649
+ this.getStickyScrolling = common.memoizeArraylike(initStickyScrolling, null, destroyStickyScrolling);
650
+ this.getScrollSyncersBySection = common.memoizeHashlike(initScrollSyncer.bind(this, true), null, destroyScrollSyncer);
651
+ this.getScrollSyncersByColumn = common.memoizeHashlike(initScrollSyncer.bind(this, false), null, destroyScrollSyncer);
652
652
  this.updateScrollSyncers();
653
653
  this.handleSizing(false);
654
654
  this.context.addResizeHandler(this.handleSizing);
package/main.global.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- FullCalendar Scheduler v5.10.2
2
+ FullCalendar Scheduler v5.11.2
3
3
  Docs & License: https://fullcalendar.io/scheduler
4
- (c) 2021 Adam Shaw
4
+ (c) 2022 Adam Shaw
5
5
  */
6
6
  var FullCalendarScrollGrid = (function (exports, common, premiumCommonPlugin) {
7
7
  'use strict';
@@ -551,9 +551,6 @@ var FullCalendarScrollGrid = (function (exports, common, premiumCommonPlugin) {
551
551
  // doesn't hold non-scrolling els used just for padding
552
552
  _this.scrollerElRefs = new common.RefMap(_this._handleScrollerEl.bind(_this));
553
553
  _this.chunkElRefs = new common.RefMap(_this._handleChunkEl.bind(_this));
554
- _this.getStickyScrolling = common.memoizeArraylike(initStickyScrolling, null, destroyStickyScrolling);
555
- _this.getScrollSyncersBySection = common.memoizeHashlike(initScrollSyncer.bind(_this, true), null, destroyScrollSyncer);
556
- _this.getScrollSyncersByColumn = common.memoizeHashlike(initScrollSyncer.bind(_this, false), null, destroyScrollSyncer);
557
554
  _this.stickyScrollings = [];
558
555
  _this.scrollSyncersBySection = {};
559
556
  _this.scrollSyncersByColumn = {};
@@ -696,6 +693,9 @@ var FullCalendarScrollGrid = (function (exports, common, premiumCommonPlugin) {
696
693
  }, content);
697
694
  };
698
695
  ScrollGrid.prototype.componentDidMount = function () {
696
+ this.getStickyScrolling = common.memoizeArraylike(initStickyScrolling, null, destroyStickyScrolling);
697
+ this.getScrollSyncersBySection = common.memoizeHashlike(initScrollSyncer.bind(this, true), null, destroyScrollSyncer);
698
+ this.getScrollSyncersByColumn = common.memoizeHashlike(initScrollSyncer.bind(this, false), null, destroyScrollSyncer);
699
699
  this.updateScrollSyncers();
700
700
  this.handleSizing(false);
701
701
  this.context.addResizeHandler(this.handleSizing);
@@ -1,6 +1,6 @@
1
1
  /*!
2
- FullCalendar Scheduler v5.10.2
2
+ FullCalendar Scheduler v5.11.2
3
3
  Docs & License: https://fullcalendar.io/scheduler
4
- (c) 2021 Adam Shaw
4
+ (c) 2022 Adam Shaw
5
5
  */
6
- var FullCalendarScrollGrid=function(e,t,r){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=o(FullCalendarPremiumCommon),l=function(e,t){return(l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}l(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var s=function(){return(s=Object.assign||function(e){for(var t,r=1,o=arguments.length;r<o;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)};function c(e,t,r){if(r||2===arguments.length)for(var o,n=0,l=t.length;n<l;n++)!o&&n in t||(o||(o=Array.prototype.slice.call(t,0,n)),o[n]=t[n]);return e.concat(o||t)}var a,h="wheel mousewheel DomMouseScroll MozMousePixelScroll".split(" "),u=function(){function e(e){var r=this;this.el=e,this.emitter=new t.Emitter,this.isScrolling=!1,this.isTouching=!1,this.isRecentlyWheeled=!1,this.isRecentlyScrolled=!1,this.wheelWaiter=new t.DelayedRunner(this._handleWheelWaited.bind(this)),this.scrollWaiter=new t.DelayedRunner(this._handleScrollWaited.bind(this)),this.handleScroll=function(){r.startScroll(),r.emitter.trigger("scroll",r.isRecentlyWheeled,r.isTouching),r.isRecentlyScrolled=!0,r.scrollWaiter.request(500)},this.handleWheel=function(){r.isRecentlyWheeled=!0,r.wheelWaiter.request(500)},this.handleTouchStart=function(){r.isTouching=!0},this.handleTouchEnd=function(){r.isTouching=!1,r.isRecentlyScrolled||r.endScroll()},e.addEventListener("scroll",this.handleScroll),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.addEventListener("touchend",this.handleTouchEnd);for(var o=0,n=h;o<n.length;o++){var l=n[o];e.addEventListener(l,this.handleWheel)}}return e.prototype.destroy=function(){var e=this.el;e.removeEventListener("scroll",this.handleScroll),e.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.removeEventListener("touchend",this.handleTouchEnd);for(var t=0,r=h;t<r.length;t++){var o=r[t];e.removeEventListener(o,this.handleWheel)}},e.prototype.startScroll=function(){this.isScrolling||(this.isScrolling=!0,this.emitter.trigger("scrollStart",this.isRecentlyWheeled,this.isTouching))},e.prototype.endScroll=function(){this.isScrolling&&(this.emitter.trigger("scrollEnd"),this.isScrolling=!1,this.isRecentlyScrolled=!0,this.isRecentlyWheeled=!1,this.scrollWaiter.clear(),this.wheelWaiter.clear())},e.prototype._handleScrollWaited=function(){this.isRecentlyScrolled=!1,this.isTouching||this.endScroll()},e.prototype._handleWheelWaited=function(){this.isRecentlyWheeled=!1},e}();function d(e){var t=e.scrollLeft;if("rtl"===window.getComputedStyle(e).direction)switch(f()){case"negative":t*=-1;case"reverse":t=e.scrollWidth-t-e.clientWidth}return t}function p(e,t){if("rtl"===window.getComputedStyle(e).direction)switch(f()){case"reverse":t=e.scrollWidth-t;break;case"negative":t=-(e.scrollWidth-t)}e.scrollLeft=t}function f(){return a||(a=function(){var e,r=document.createElement("div");r.style.position="absolute",r.style.top="-1000px",r.style.width="1px",r.style.height="1px",r.style.overflow="scroll",r.style.direction="rtl",r.style.fontSize="100px",r.innerHTML="A",document.body.appendChild(r),r.scrollLeft>0?e="positive":(r.scrollLeft=1,e=r.scrollLeft>0?"reverse":"negative");return t.removeElement(r),e}())}var g,y="undefined"!=typeof navigator&&/Edge/.test(navigator.userAgent),S=function(){function e(e,r){var o=this;this.scrollEl=e,this.isRtl=r,this.usingRelative=null,this.updateSize=function(){var e=o.scrollEl,r=t.findElements(e,".fc-sticky"),n=o.queryElGeoms(r),l=e.clientWidth,i=e.clientHeight;o.usingRelative?function(e,r,o,n,l){e.forEach((function(e,i){var s,c,a=r[i],h=a.naturalBound,u=a.parentBound,d=u.right-u.left,p=u.bottom-u.bottom;d>n||p>l?(s=o[i].left-h.left,c=o[i].top-h.top):(s="",c=""),t.applyStyle(e,{position:"relative",left:s,right:-s,top:c})}))}(r,n,o.computeElDestinations(n,l),l,i):function(e,r,o){e.forEach((function(e,n){var l,i=r[n],s=i.textAlign,c=i.elWidth,a=i.parentBound,h=a.right-a.left;l="center"===s&&h>o?(o-c)/2:"",t.applyStyle(e,{left:l,right:l,top:0})}))}(r,n,l)},this.usingRelative=!function(){null==g&&(g=function(){var e=document.createElement("div");e.style.position="sticky",document.body.appendChild(e);var r=window.getComputedStyle(e).position;return t.removeElement(e),"sticky"===r}());return g}()||y&&r,this.usingRelative&&(this.listener=new u(e),this.listener.emitter.on("scrollEnd",this.updateSize))}return e.prototype.destroy=function(){this.listener&&this.listener.destroy()},e.prototype.queryElGeoms=function(e){for(var r=this.scrollEl,o=this.isRtl,n=function(e){var r=e.getBoundingClientRect(),o=t.computeEdges(e);return{left:r.left+o.borderLeft+o.scrollbarLeft-d(e),top:r.top+o.borderTop-e.scrollTop}}(r),l=[],i=0,s=e;i<s.length;i++){var c=s[i],a=t.translateRect(t.computeInnerRect(c.parentNode,!0,!0),-n.left,-n.top),h=c.getBoundingClientRect(),u=window.getComputedStyle(c),p=window.getComputedStyle(c.parentNode).textAlign,f=null;"start"===p?p=o?"right":"left":"end"===p&&(p=o?"left":"right"),"sticky"!==u.position&&(f=t.translateRect(h,-n.left-(parseFloat(u.left)||0),-n.top-(parseFloat(u.top)||0))),l.push({parentBound:a,naturalBound:f,elWidth:h.width,elHeight:h.height,textAlign:p})}return l},e.prototype.computeElDestinations=function(e,t){var r=this.scrollEl,o=r.scrollTop,n=d(r),l=n+t;return e.map((function(e){var t,r,i=e.elWidth,s=e.elHeight,c=e.parentBound,a=e.naturalBound;switch(e.textAlign){case"left":t=n;break;case"right":t=l-i;break;case"center":t=(n+l)/2-i/2}return t=Math.min(t,c.right-i),t=Math.max(t,c.left),r=o,r=Math.min(r,c.bottom-s),{left:t,top:r=Math.max(r,a.top)}}))},e}();var m=function(e){function r(){var r=null!==e&&e.apply(this,arguments)||this;return r.elRef=t.createRef(),r.state={xScrollbarWidth:0,yScrollbarWidth:0},r.handleScroller=function(e){r.scroller=e,t.setRef(r.props.scrollerRef,e)},r.handleSizing=function(){var e=r.props;"scroll-hidden"===e.overflowY&&r.setState({yScrollbarWidth:r.scroller.getYScrollbarWidth()}),"scroll-hidden"===e.overflowX&&r.setState({xScrollbarWidth:r.scroller.getXScrollbarWidth()})},r}return i(r,e),r.prototype.render=function(){var e=this,r=e.props,o=e.state,n=e.context.isRtl&&t.getIsRtlScrollbarOnLeft(),l=0,i=0,s=0;return"scroll-hidden"===r.overflowX&&(s=o.xScrollbarWidth),"scroll-hidden"===r.overflowY&&null!=o.yScrollbarWidth&&(n?l=o.yScrollbarWidth:i=o.yScrollbarWidth),t.createElement("div",{ref:this.elRef,className:"fc-scroller-harness"+(r.liquid?" fc-scroller-harness-liquid":"")},t.createElement(t.Scroller,{ref:this.handleScroller,elRef:this.props.scrollerElRef,overflowX:"scroll-hidden"===r.overflowX?"scroll":r.overflowX,overflowY:"scroll-hidden"===r.overflowY?"scroll":r.overflowY,overcomeLeft:l,overcomeRight:i,overcomeBottom:s,maxHeight:"number"==typeof r.maxHeight?r.maxHeight+("scroll-hidden"===r.overflowX?o.xScrollbarWidth:0):"",liquid:r.liquid,liquidIsAbsolute:!0},r.children))},r.prototype.componentDidMount=function(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)},r.prototype.componentDidUpdate=function(e){t.isPropsEqual(e,this.props)||this.handleSizing()},r.prototype.componentWillUnmount=function(){this.context.removeResizeHandler(this.handleSizing)},r.prototype.needsXScrolling=function(){return this.scroller.needsXScrolling()},r.prototype.needsYScrolling=function(){return this.scroller.needsYScrolling()},r}(t.BaseComponent),v=function(){function e(e,t){var r=this;this.isVertical=e,this.scrollEls=t,this.isPaused=!1,this.scrollListeners=t.map((function(e){return r.bindScroller(e)}))}return e.prototype.destroy=function(){for(var e=0,t=this.scrollListeners;e<t.length;e++){t[e].destroy()}},e.prototype.bindScroller=function(e){var t=this,r=this.scrollEls,o=this.isVertical,n=new u(e);return n.emitter.on("scroll",(function(n,l){if(!t.isPaused&&((!t.masterEl||t.masterEl!==e&&(n||l))&&t.assignMaster(e),t.masterEl===e))for(var i=0,s=r;i<s.length;i++){var c=s[i];c!==e&&(o?c.scrollTop=e.scrollTop:c.scrollLeft=e.scrollLeft)}})),n.emitter.on("scrollEnd",(function(){t.masterEl===e&&(t.masterEl=null)})),n},e.prototype.assignMaster=function(e){this.masterEl=e;for(var t=0,r=this.scrollListeners;t<r.length;t++){var o=r[t];o.el!==e&&o.endScroll()}},e.prototype.forceScrollLeft=function(e){this.isPaused=!0;for(var t=0,r=this.scrollListeners;t<r.length;t++){p(r[t].el,e)}this.isPaused=!1},e.prototype.forceScrollTop=function(e){this.isPaused=!0;for(var t=0,r=this.scrollListeners;t<r.length;t++){r[t].el.scrollTop=e}this.isPaused=!1},e}(),R=function(e){function r(){var r=null!==e&&e.apply(this,arguments)||this;return r.compileColGroupStats=t.memoizeArraylike(b,M),r.renderMicroColGroups=t.memoizeArraylike(t.renderMicroColGroup),r.clippedScrollerRefs=new t.RefMap,r.scrollerElRefs=new t.RefMap(r._handleScrollerEl.bind(r)),r.chunkElRefs=new t.RefMap(r._handleChunkEl.bind(r)),r.getStickyScrolling=t.memoizeArraylike(L,null,z),r.getScrollSyncersBySection=t.memoizeHashlike(x.bind(r,!0),null,H),r.getScrollSyncersByColumn=t.memoizeHashlike(x.bind(r,!1),null,H),r.stickyScrollings=[],r.scrollSyncersBySection={},r.scrollSyncersByColumn={},r.rowUnstableMap=new Map,r.rowInnerMaxHeightMap=new Map,r.anyRowHeightsChanged=!1,r.recentSizingCnt=0,r.state={shrinkWidths:[],forceYScrollbars:!1,forceXScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{},sectionRowMaxHeights:[]},r.handleSizing=function(e,t){if(r.allowSizing()){t||(r.anyRowHeightsChanged=!0);var o={};(e||!t&&!r.rowUnstableMap.size)&&(o.sectionRowMaxHeights=r.computeSectionRowMaxHeights()),r.setState(s(s({shrinkWidths:r.computeShrinkWidths()},r.computeScrollerDims()),o),(function(){r.rowUnstableMap.size||r.updateStickyScrolling()}))}},r.handleRowHeightChange=function(e,t){var o=r,n=o.rowUnstableMap,l=o.rowInnerMaxHeightMap;if(t){n.delete(e);var i=E(e);l.has(e)&&l.get(e)===i||(l.set(e,i),r.anyRowHeightsChanged=!0),!n.size&&r.anyRowHeightsChanged&&(r.anyRowHeightsChanged=!1,r.setState({sectionRowMaxHeights:r.computeSectionRowMaxHeights()}))}else n.set(e,!0)},r}return i(r,e),r.prototype.render=function(){var e=this,r=e.props,o=e.state,n=e.context,l=o.shrinkWidths,i=this.compileColGroupStats(r.colGroups.map((function(e){return[e]}))),s=this.renderMicroColGroups(i.map((function(e,t){return[e.cols,l[t]]}))),a=t.getScrollGridClassNames(r.liquid,n),h=this.getDims();h[0],h[1];for(var u,d=r.sections,p=d.length,f=0,g=[],y=[],S=[];f<p&&"header"===(u=d[f]).type;)g.push(this.renderSection(u,f,i,s,o.sectionRowMaxHeights,!0)),f+=1;for(;f<p&&"body"===(u=d[f]).type;)y.push(this.renderSection(u,f,i,s,o.sectionRowMaxHeights,!1)),f+=1;for(;f<p&&"footer"===(u=d[f]).type;)S.push(this.renderSection(u,f,i,s,o.sectionRowMaxHeights,!0)),f+=1;var m=!t.getCanVGrowWithinCell(),v={role:"rowgroup"};return t.createElement("table",{ref:r.elRef,role:"grid",className:a.join(" ")},function(e,r){var o=e.map((function(e,o){var n=e.width;return"shrink"===n&&(n=e.totalColWidth+t.sanitizeShrinkWidth(r[o])+1),t.createElement("col",{style:{width:n}})}));return t.createElement.apply(void 0,c(["colgroup",{}],o))}(i,l),Boolean(!m&&g.length)&&t.createElement.apply(void 0,c(["thead",v],g)),Boolean(!m&&y.length)&&t.createElement.apply(void 0,c(["tbody",v],y)),Boolean(!m&&S.length)&&t.createElement.apply(void 0,c(["tfoot",v],S)),m&&t.createElement.apply(void 0,c(c(c(["tbody",v],g),y),S)))},r.prototype.renderSection=function(e,r,o,n,l,i){var s=this;return"outerContent"in e?t.createElement(t.Fragment,{key:e.key},e.outerContent):t.createElement("tr",{key:e.key,role:"presentation",className:t.getSectionClassNames(e,this.props.liquid).join(" ")},e.chunks.map((function(t,c){return s.renderChunk(e,r,o[c],n[c],t,c,(l[r]||[])[c]||[],i)})))},r.prototype.renderChunk=function(e,r,o,n,l,i,s,c){if("outerContent"in l)return t.createElement(t.Fragment,{key:l.key},l.outerContent);var a=this.state,h=a.scrollerClientWidths,u=a.scrollerClientHeights,d=this.getDims(),p=d[0],f=d[1],g=r*f+i,y=i===(!this.context.isRtl||t.getIsRtlScrollbarOnLeft()?f-1:0),S=r===p-1,v=S&&a.forceXScrollbars,R=y&&a.forceYScrollbars,w=o&&o.allowXScrolling,E=t.getAllowYScrolling(this.props,e),C=t.getSectionHasLiquidHeight(this.props,e),b=e.expandRows&&C,W=o&&o.totalColMinWidth||"",k=t.renderChunkContent(e,l,{tableColGroupNode:n,tableMinWidth:W,clientWidth:void 0!==h[g]?h[g]:null,clientHeight:void 0!==u[g]?u[g]:null,expandRows:b,syncRowHeights:Boolean(e.syncRowHeights),rowSyncHeights:s,reportRowHeightChange:this.handleRowHeightChange},c),M=v?S?"scroll":"scroll-hidden":w?S?"auto":"scroll-hidden":"hidden",x=R?y?"scroll":"scroll-hidden":E?y?"auto":"scroll-hidden":"hidden";return k=t.createElement(m,{ref:this.clippedScrollerRefs.createRef(g),scrollerElRef:this.scrollerElRefs.createRef(g),overflowX:M,overflowY:x,liquid:C,maxHeight:e.maxHeight},k),t.createElement(c?"th":"td",{key:l.key,ref:this.chunkElRefs.createRef(g),role:"presentation"},k)},r.prototype.componentDidMount=function(){this.updateScrollSyncers(),this.handleSizing(!1),this.context.addResizeHandler(this.handleSizing)},r.prototype.componentDidUpdate=function(e,t){this.updateScrollSyncers(),this.handleSizing(!1,t.sectionRowMaxHeights!==this.state.sectionRowMaxHeights)},r.prototype.componentWillUnmount=function(){this.context.removeResizeHandler(this.handleSizing),this.destroyStickyScrolling(),this.destroyScrollSyncers()},r.prototype.allowSizing=function(){var e=new Date;return!this.lastSizingDate||e.valueOf()>this.lastSizingDate.valueOf()+t.config.SCROLLGRID_RESIZE_INTERVAL?(this.lastSizingDate=e,this.recentSizingCnt=0,!0):(this.recentSizingCnt+=1)<=10},r.prototype.computeShrinkWidths=function(){var e=this,r=this.compileColGroupStats(this.props.colGroups.map((function(e){return[e]}))),o=this.getDims(),n=o[0],l=o[1],i=n*l,s=[];return r.forEach((function(r,o){if(r.hasShrinkCol){var n=e.chunkElRefs.collect(o,i,l);s[o]=t.computeShrinkWidth(n)}})),s},r.prototype.computeSectionRowMaxHeights=function(){for(var e=new Map,r=this.getDims(),o=r[0],n=r[1],l=[],i=0;i<o;i+=1){var s=this.props.sections[i],c=[];if(s&&s.syncRowHeights){for(var a=[],h=0;h<n;h+=1){var u=i*n+h,d=[],p=this.chunkElRefs.currentMap[u];d=p?t.findElements(p,".fc-scrollgrid-sync-table tr").map((function(t){var r=E(t);return e.set(t,r),r})):[],a.push(d)}var f=a[0].length,g=!0;for(h=1;h<n;h+=1){if(!(s.chunks[h]&&void 0!==s.chunks[h].outerContent)&&a[h].length!==f){g=!1;break}}if(g){for(h=0;h<n;h+=1)c.push([]);for(C=0;C<f;C+=1){var y=[];for(h=0;h<n;h+=1){var S=a[h][C];null!=S&&y.push(S)}var m=Math.max.apply(Math,y);for(h=0;h<n;h+=1)c[h].push(m)}}else{for(var v=[],h=0;h<n;h+=1)v.push(w(a[h])+a[h].length);for(var R=Math.max.apply(Math,v),h=0;h<n;h+=1){var C,b=a[h].length,W=R-b,k=Math.floor(W/b),M=W-k*(b-1),x=[];for((C=0)<b&&(x.push(M),C+=1);C<b;)x.push(k),C+=1;c.push(x)}}}l.push(c)}return this.rowInnerMaxHeightMap=e,l},r.prototype.computeScrollerDims=function(){for(var e=t.getScrollbarWidths(),r=this.getDims(),o=r[0],n=r[1],l=!this.context.isRtl||t.getIsRtlScrollbarOnLeft()?n-1:0,i=o-1,s=this.clippedScrollerRefs.currentMap,c=this.scrollerElRefs.currentMap,a=!1,h=!1,u={},d={},p=0;p<o;p+=1){if((g=s[y=p*n+l])&&g.needsYScrolling()){a=!0;break}}for(var f=0;f<n;f+=1){var g;if((g=s[y=i*n+f])&&g.needsXScrolling()){h=!0;break}}for(p=0;p<o;p+=1)for(f=0;f<n;f+=1){var y,S=c[y=p*n+f];if(S){var m=S.parentNode;u[y]=Math.floor(m.getBoundingClientRect().width-(f===l&&a?e.y:0)),d[y]=Math.floor(m.getBoundingClientRect().height-(p===i&&h?e.x:0))}}return{forceYScrollbars:a,forceXScrollbars:h,scrollerClientWidths:u,scrollerClientHeights:d}},r.prototype.updateStickyScrolling=function(){var e=this.context.isRtl,t=this.scrollerElRefs.getAll().map((function(t){return[t,e]})),r=this.getStickyScrolling(t);r.forEach((function(e){return e.updateSize()})),this.stickyScrollings=r},r.prototype.destroyStickyScrolling=function(){this.stickyScrollings.forEach(z)},r.prototype.updateScrollSyncers=function(){for(var e=this.getDims(),r=e[0],o=e[1],n=r*o,l={},i={},s=this.scrollerElRefs.currentMap,c=0;c<r;c+=1){var a=c*o,h=a+o;l[c]=t.collectFromHash(s,a,h,1)}for(var u=0;u<o;u+=1)i[u]=this.scrollerElRefs.collect(u,n,o);this.scrollSyncersBySection=this.getScrollSyncersBySection(l),this.scrollSyncersByColumn=this.getScrollSyncersByColumn(i)},r.prototype.destroyScrollSyncers=function(){t.mapHash(this.scrollSyncersBySection,H),t.mapHash(this.scrollSyncersByColumn,H)},r.prototype.getChunkConfigByIndex=function(e){var t=this.getDims()[1],r=Math.floor(e/t),o=e%t,n=this.props.sections[r];return n&&n.chunks[o]},r.prototype.forceScrollLeft=function(e,t){var r=this.scrollSyncersByColumn[e];r&&r.forceScrollLeft(t)},r.prototype.forceScrollTop=function(e,t){var r=this.scrollSyncersBySection[e];r&&r.forceScrollTop(t)},r.prototype._handleChunkEl=function(e,r){var o=this.getChunkConfigByIndex(parseInt(r,10));o&&t.setRef(o.elRef,e)},r.prototype._handleScrollerEl=function(e,r){var o=this.getChunkConfigByIndex(parseInt(r,10));o&&t.setRef(o.scrollerElRef,e)},r.prototype.getDims=function(){var e=this.props.sections.length;return[e,e?this.props.sections[0].chunks.length:0]},r}(t.BaseComponent);function w(e){for(var t=0,r=0,o=e;r<o.length;r++){t+=o[r]}return t}function E(e){var r=t.findElements(e,".fc-scrollgrid-sync-inner").map(C);return r.length?Math.max.apply(Math,r):0}function C(e){return e.offsetHeight}function b(e){var r=W(e.cols,"width"),o=W(e.cols,"minWidth"),n=t.hasShrinkWidth(e.cols);return{hasShrinkCol:n,totalColWidth:r,totalColMinWidth:o,allowXScrolling:"shrink"!==e.width&&Boolean(r||o||n),cols:e.cols,width:e.width}}function W(e,t){for(var r=0,o=0,n=e;o<n.length;o++){var l=n[o],i=l[t];"number"==typeof i&&(r+=i*(l.span||1))}return r}R.addStateEquality({shrinkWidths:t.isArraysEqual,scrollerClientWidths:t.isPropsEqual,scrollerClientHeights:t.isPropsEqual});var k={cols:t.isColPropsEqual};function M(e,r){return t.compareObjs(e,r,k)}function x(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return new v(e,t)}function H(e){e.destroy()}function L(e,t){return new S(e,t)}function z(e){e.destroy()}var B=t.createPlugin({deps:[n.default],scrollGridImpl:R});return t.config.SCROLLGRID_RESIZE_INTERVAL=500,t.globalPlugins.push(B),e.ScrollGrid=R,e.default=B,e.setScrollFromLeftEdge=p,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar);
6
+ var FullCalendarScrollGrid=function(e,t,r){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=o(FullCalendarPremiumCommon),l=function(e,t){return(l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}l(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var s=function(){return(s=Object.assign||function(e){for(var t,r=1,o=arguments.length;r<o;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)};function c(e,t,r){if(r||2===arguments.length)for(var o,n=0,l=t.length;n<l;n++)!o&&n in t||(o||(o=Array.prototype.slice.call(t,0,n)),o[n]=t[n]);return e.concat(o||t)}var a,h="wheel mousewheel DomMouseScroll MozMousePixelScroll".split(" "),u=function(){function e(e){var r=this;this.el=e,this.emitter=new t.Emitter,this.isScrolling=!1,this.isTouching=!1,this.isRecentlyWheeled=!1,this.isRecentlyScrolled=!1,this.wheelWaiter=new t.DelayedRunner(this._handleWheelWaited.bind(this)),this.scrollWaiter=new t.DelayedRunner(this._handleScrollWaited.bind(this)),this.handleScroll=function(){r.startScroll(),r.emitter.trigger("scroll",r.isRecentlyWheeled,r.isTouching),r.isRecentlyScrolled=!0,r.scrollWaiter.request(500)},this.handleWheel=function(){r.isRecentlyWheeled=!0,r.wheelWaiter.request(500)},this.handleTouchStart=function(){r.isTouching=!0},this.handleTouchEnd=function(){r.isTouching=!1,r.isRecentlyScrolled||r.endScroll()},e.addEventListener("scroll",this.handleScroll),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.addEventListener("touchend",this.handleTouchEnd);for(var o=0,n=h;o<n.length;o++){var l=n[o];e.addEventListener(l,this.handleWheel)}}return e.prototype.destroy=function(){var e=this.el;e.removeEventListener("scroll",this.handleScroll),e.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.removeEventListener("touchend",this.handleTouchEnd);for(var t=0,r=h;t<r.length;t++){var o=r[t];e.removeEventListener(o,this.handleWheel)}},e.prototype.startScroll=function(){this.isScrolling||(this.isScrolling=!0,this.emitter.trigger("scrollStart",this.isRecentlyWheeled,this.isTouching))},e.prototype.endScroll=function(){this.isScrolling&&(this.emitter.trigger("scrollEnd"),this.isScrolling=!1,this.isRecentlyScrolled=!0,this.isRecentlyWheeled=!1,this.scrollWaiter.clear(),this.wheelWaiter.clear())},e.prototype._handleScrollWaited=function(){this.isRecentlyScrolled=!1,this.isTouching||this.endScroll()},e.prototype._handleWheelWaited=function(){this.isRecentlyWheeled=!1},e}();function d(e){var t=e.scrollLeft;if("rtl"===window.getComputedStyle(e).direction)switch(f()){case"negative":t*=-1;case"reverse":t=e.scrollWidth-t-e.clientWidth}return t}function p(e,t){if("rtl"===window.getComputedStyle(e).direction)switch(f()){case"reverse":t=e.scrollWidth-t;break;case"negative":t=-(e.scrollWidth-t)}e.scrollLeft=t}function f(){return a||(a=function(){var e,r=document.createElement("div");r.style.position="absolute",r.style.top="-1000px",r.style.width="1px",r.style.height="1px",r.style.overflow="scroll",r.style.direction="rtl",r.style.fontSize="100px",r.innerHTML="A",document.body.appendChild(r),r.scrollLeft>0?e="positive":(r.scrollLeft=1,e=r.scrollLeft>0?"reverse":"negative");return t.removeElement(r),e}())}var g,y="undefined"!=typeof navigator&&/Edge/.test(navigator.userAgent),S=function(){function e(e,r){var o=this;this.scrollEl=e,this.isRtl=r,this.usingRelative=null,this.updateSize=function(){var e=o.scrollEl,r=t.findElements(e,".fc-sticky"),n=o.queryElGeoms(r),l=e.clientWidth,i=e.clientHeight;o.usingRelative?function(e,r,o,n,l){e.forEach((function(e,i){var s,c,a=r[i],h=a.naturalBound,u=a.parentBound,d=u.right-u.left,p=u.bottom-u.bottom;d>n||p>l?(s=o[i].left-h.left,c=o[i].top-h.top):(s="",c=""),t.applyStyle(e,{position:"relative",left:s,right:-s,top:c})}))}(r,n,o.computeElDestinations(n,l),l,i):function(e,r,o){e.forEach((function(e,n){var l,i=r[n],s=i.textAlign,c=i.elWidth,a=i.parentBound,h=a.right-a.left;l="center"===s&&h>o?(o-c)/2:"",t.applyStyle(e,{left:l,right:l,top:0})}))}(r,n,l)},this.usingRelative=!function(){null==g&&(g=function(){var e=document.createElement("div");e.style.position="sticky",document.body.appendChild(e);var r=window.getComputedStyle(e).position;return t.removeElement(e),"sticky"===r}());return g}()||y&&r,this.usingRelative&&(this.listener=new u(e),this.listener.emitter.on("scrollEnd",this.updateSize))}return e.prototype.destroy=function(){this.listener&&this.listener.destroy()},e.prototype.queryElGeoms=function(e){for(var r=this.scrollEl,o=this.isRtl,n=function(e){var r=e.getBoundingClientRect(),o=t.computeEdges(e);return{left:r.left+o.borderLeft+o.scrollbarLeft-d(e),top:r.top+o.borderTop-e.scrollTop}}(r),l=[],i=0,s=e;i<s.length;i++){var c=s[i],a=t.translateRect(t.computeInnerRect(c.parentNode,!0,!0),-n.left,-n.top),h=c.getBoundingClientRect(),u=window.getComputedStyle(c),p=window.getComputedStyle(c.parentNode).textAlign,f=null;"start"===p?p=o?"right":"left":"end"===p&&(p=o?"left":"right"),"sticky"!==u.position&&(f=t.translateRect(h,-n.left-(parseFloat(u.left)||0),-n.top-(parseFloat(u.top)||0))),l.push({parentBound:a,naturalBound:f,elWidth:h.width,elHeight:h.height,textAlign:p})}return l},e.prototype.computeElDestinations=function(e,t){var r=this.scrollEl,o=r.scrollTop,n=d(r),l=n+t;return e.map((function(e){var t,r,i=e.elWidth,s=e.elHeight,c=e.parentBound,a=e.naturalBound;switch(e.textAlign){case"left":t=n;break;case"right":t=l-i;break;case"center":t=(n+l)/2-i/2}return t=Math.min(t,c.right-i),t=Math.max(t,c.left),r=o,r=Math.min(r,c.bottom-s),{left:t,top:r=Math.max(r,a.top)}}))},e}();var m=function(e){function r(){var r=null!==e&&e.apply(this,arguments)||this;return r.elRef=t.createRef(),r.state={xScrollbarWidth:0,yScrollbarWidth:0},r.handleScroller=function(e){r.scroller=e,t.setRef(r.props.scrollerRef,e)},r.handleSizing=function(){var e=r.props;"scroll-hidden"===e.overflowY&&r.setState({yScrollbarWidth:r.scroller.getYScrollbarWidth()}),"scroll-hidden"===e.overflowX&&r.setState({xScrollbarWidth:r.scroller.getXScrollbarWidth()})},r}return i(r,e),r.prototype.render=function(){var e=this,r=e.props,o=e.state,n=e.context.isRtl&&t.getIsRtlScrollbarOnLeft(),l=0,i=0,s=0;return"scroll-hidden"===r.overflowX&&(s=o.xScrollbarWidth),"scroll-hidden"===r.overflowY&&null!=o.yScrollbarWidth&&(n?l=o.yScrollbarWidth:i=o.yScrollbarWidth),t.createElement("div",{ref:this.elRef,className:"fc-scroller-harness"+(r.liquid?" fc-scroller-harness-liquid":"")},t.createElement(t.Scroller,{ref:this.handleScroller,elRef:this.props.scrollerElRef,overflowX:"scroll-hidden"===r.overflowX?"scroll":r.overflowX,overflowY:"scroll-hidden"===r.overflowY?"scroll":r.overflowY,overcomeLeft:l,overcomeRight:i,overcomeBottom:s,maxHeight:"number"==typeof r.maxHeight?r.maxHeight+("scroll-hidden"===r.overflowX?o.xScrollbarWidth:0):"",liquid:r.liquid,liquidIsAbsolute:!0},r.children))},r.prototype.componentDidMount=function(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)},r.prototype.componentDidUpdate=function(e){t.isPropsEqual(e,this.props)||this.handleSizing()},r.prototype.componentWillUnmount=function(){this.context.removeResizeHandler(this.handleSizing)},r.prototype.needsXScrolling=function(){return this.scroller.needsXScrolling()},r.prototype.needsYScrolling=function(){return this.scroller.needsYScrolling()},r}(t.BaseComponent),v=function(){function e(e,t){var r=this;this.isVertical=e,this.scrollEls=t,this.isPaused=!1,this.scrollListeners=t.map((function(e){return r.bindScroller(e)}))}return e.prototype.destroy=function(){for(var e=0,t=this.scrollListeners;e<t.length;e++){t[e].destroy()}},e.prototype.bindScroller=function(e){var t=this,r=this.scrollEls,o=this.isVertical,n=new u(e);return n.emitter.on("scroll",(function(n,l){if(!t.isPaused&&((!t.masterEl||t.masterEl!==e&&(n||l))&&t.assignMaster(e),t.masterEl===e))for(var i=0,s=r;i<s.length;i++){var c=s[i];c!==e&&(o?c.scrollTop=e.scrollTop:c.scrollLeft=e.scrollLeft)}})),n.emitter.on("scrollEnd",(function(){t.masterEl===e&&(t.masterEl=null)})),n},e.prototype.assignMaster=function(e){this.masterEl=e;for(var t=0,r=this.scrollListeners;t<r.length;t++){var o=r[t];o.el!==e&&o.endScroll()}},e.prototype.forceScrollLeft=function(e){this.isPaused=!0;for(var t=0,r=this.scrollListeners;t<r.length;t++){p(r[t].el,e)}this.isPaused=!1},e.prototype.forceScrollTop=function(e){this.isPaused=!0;for(var t=0,r=this.scrollListeners;t<r.length;t++){r[t].el.scrollTop=e}this.isPaused=!1},e}(),R=function(e){function r(){var r=null!==e&&e.apply(this,arguments)||this;return r.compileColGroupStats=t.memoizeArraylike(b,M),r.renderMicroColGroups=t.memoizeArraylike(t.renderMicroColGroup),r.clippedScrollerRefs=new t.RefMap,r.scrollerElRefs=new t.RefMap(r._handleScrollerEl.bind(r)),r.chunkElRefs=new t.RefMap(r._handleChunkEl.bind(r)),r.stickyScrollings=[],r.scrollSyncersBySection={},r.scrollSyncersByColumn={},r.rowUnstableMap=new Map,r.rowInnerMaxHeightMap=new Map,r.anyRowHeightsChanged=!1,r.recentSizingCnt=0,r.state={shrinkWidths:[],forceYScrollbars:!1,forceXScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{},sectionRowMaxHeights:[]},r.handleSizing=function(e,t){if(r.allowSizing()){t||(r.anyRowHeightsChanged=!0);var o={};(e||!t&&!r.rowUnstableMap.size)&&(o.sectionRowMaxHeights=r.computeSectionRowMaxHeights()),r.setState(s(s({shrinkWidths:r.computeShrinkWidths()},r.computeScrollerDims()),o),(function(){r.rowUnstableMap.size||r.updateStickyScrolling()}))}},r.handleRowHeightChange=function(e,t){var o=r,n=o.rowUnstableMap,l=o.rowInnerMaxHeightMap;if(t){n.delete(e);var i=E(e);l.has(e)&&l.get(e)===i||(l.set(e,i),r.anyRowHeightsChanged=!0),!n.size&&r.anyRowHeightsChanged&&(r.anyRowHeightsChanged=!1,r.setState({sectionRowMaxHeights:r.computeSectionRowMaxHeights()}))}else n.set(e,!0)},r}return i(r,e),r.prototype.render=function(){var e=this,r=e.props,o=e.state,n=e.context,l=o.shrinkWidths,i=this.compileColGroupStats(r.colGroups.map((function(e){return[e]}))),s=this.renderMicroColGroups(i.map((function(e,t){return[e.cols,l[t]]}))),a=t.getScrollGridClassNames(r.liquid,n),h=this.getDims();h[0],h[1];for(var u,d=r.sections,p=d.length,f=0,g=[],y=[],S=[];f<p&&"header"===(u=d[f]).type;)g.push(this.renderSection(u,f,i,s,o.sectionRowMaxHeights,!0)),f+=1;for(;f<p&&"body"===(u=d[f]).type;)y.push(this.renderSection(u,f,i,s,o.sectionRowMaxHeights,!1)),f+=1;for(;f<p&&"footer"===(u=d[f]).type;)S.push(this.renderSection(u,f,i,s,o.sectionRowMaxHeights,!0)),f+=1;var m=!t.getCanVGrowWithinCell(),v={role:"rowgroup"};return t.createElement("table",{ref:r.elRef,role:"grid",className:a.join(" ")},function(e,r){var o=e.map((function(e,o){var n=e.width;return"shrink"===n&&(n=e.totalColWidth+t.sanitizeShrinkWidth(r[o])+1),t.createElement("col",{style:{width:n}})}));return t.createElement.apply(void 0,c(["colgroup",{}],o))}(i,l),Boolean(!m&&g.length)&&t.createElement.apply(void 0,c(["thead",v],g)),Boolean(!m&&y.length)&&t.createElement.apply(void 0,c(["tbody",v],y)),Boolean(!m&&S.length)&&t.createElement.apply(void 0,c(["tfoot",v],S)),m&&t.createElement.apply(void 0,c(c(c(["tbody",v],g),y),S)))},r.prototype.renderSection=function(e,r,o,n,l,i){var s=this;return"outerContent"in e?t.createElement(t.Fragment,{key:e.key},e.outerContent):t.createElement("tr",{key:e.key,role:"presentation",className:t.getSectionClassNames(e,this.props.liquid).join(" ")},e.chunks.map((function(t,c){return s.renderChunk(e,r,o[c],n[c],t,c,(l[r]||[])[c]||[],i)})))},r.prototype.renderChunk=function(e,r,o,n,l,i,s,c){if("outerContent"in l)return t.createElement(t.Fragment,{key:l.key},l.outerContent);var a=this.state,h=a.scrollerClientWidths,u=a.scrollerClientHeights,d=this.getDims(),p=d[0],f=d[1],g=r*f+i,y=i===(!this.context.isRtl||t.getIsRtlScrollbarOnLeft()?f-1:0),S=r===p-1,v=S&&a.forceXScrollbars,R=y&&a.forceYScrollbars,w=o&&o.allowXScrolling,E=t.getAllowYScrolling(this.props,e),C=t.getSectionHasLiquidHeight(this.props,e),b=e.expandRows&&C,W=o&&o.totalColMinWidth||"",k=t.renderChunkContent(e,l,{tableColGroupNode:n,tableMinWidth:W,clientWidth:void 0!==h[g]?h[g]:null,clientHeight:void 0!==u[g]?u[g]:null,expandRows:b,syncRowHeights:Boolean(e.syncRowHeights),rowSyncHeights:s,reportRowHeightChange:this.handleRowHeightChange},c),M=v?S?"scroll":"scroll-hidden":w?S?"auto":"scroll-hidden":"hidden",x=R?y?"scroll":"scroll-hidden":E?y?"auto":"scroll-hidden":"hidden";return k=t.createElement(m,{ref:this.clippedScrollerRefs.createRef(g),scrollerElRef:this.scrollerElRefs.createRef(g),overflowX:M,overflowY:x,liquid:C,maxHeight:e.maxHeight},k),t.createElement(c?"th":"td",{key:l.key,ref:this.chunkElRefs.createRef(g),role:"presentation"},k)},r.prototype.componentDidMount=function(){this.getStickyScrolling=t.memoizeArraylike(L,null,z),this.getScrollSyncersBySection=t.memoizeHashlike(x.bind(this,!0),null,H),this.getScrollSyncersByColumn=t.memoizeHashlike(x.bind(this,!1),null,H),this.updateScrollSyncers(),this.handleSizing(!1),this.context.addResizeHandler(this.handleSizing)},r.prototype.componentDidUpdate=function(e,t){this.updateScrollSyncers(),this.handleSizing(!1,t.sectionRowMaxHeights!==this.state.sectionRowMaxHeights)},r.prototype.componentWillUnmount=function(){this.context.removeResizeHandler(this.handleSizing),this.destroyStickyScrolling(),this.destroyScrollSyncers()},r.prototype.allowSizing=function(){var e=new Date;return!this.lastSizingDate||e.valueOf()>this.lastSizingDate.valueOf()+t.config.SCROLLGRID_RESIZE_INTERVAL?(this.lastSizingDate=e,this.recentSizingCnt=0,!0):(this.recentSizingCnt+=1)<=10},r.prototype.computeShrinkWidths=function(){var e=this,r=this.compileColGroupStats(this.props.colGroups.map((function(e){return[e]}))),o=this.getDims(),n=o[0],l=o[1],i=n*l,s=[];return r.forEach((function(r,o){if(r.hasShrinkCol){var n=e.chunkElRefs.collect(o,i,l);s[o]=t.computeShrinkWidth(n)}})),s},r.prototype.computeSectionRowMaxHeights=function(){for(var e=new Map,r=this.getDims(),o=r[0],n=r[1],l=[],i=0;i<o;i+=1){var s=this.props.sections[i],c=[];if(s&&s.syncRowHeights){for(var a=[],h=0;h<n;h+=1){var u=i*n+h,d=[],p=this.chunkElRefs.currentMap[u];d=p?t.findElements(p,".fc-scrollgrid-sync-table tr").map((function(t){var r=E(t);return e.set(t,r),r})):[],a.push(d)}var f=a[0].length,g=!0;for(h=1;h<n;h+=1){if(!(s.chunks[h]&&void 0!==s.chunks[h].outerContent)&&a[h].length!==f){g=!1;break}}if(g){for(h=0;h<n;h+=1)c.push([]);for(C=0;C<f;C+=1){var y=[];for(h=0;h<n;h+=1){var S=a[h][C];null!=S&&y.push(S)}var m=Math.max.apply(Math,y);for(h=0;h<n;h+=1)c[h].push(m)}}else{for(var v=[],h=0;h<n;h+=1)v.push(w(a[h])+a[h].length);for(var R=Math.max.apply(Math,v),h=0;h<n;h+=1){var C,b=a[h].length,W=R-b,k=Math.floor(W/b),M=W-k*(b-1),x=[];for((C=0)<b&&(x.push(M),C+=1);C<b;)x.push(k),C+=1;c.push(x)}}}l.push(c)}return this.rowInnerMaxHeightMap=e,l},r.prototype.computeScrollerDims=function(){for(var e=t.getScrollbarWidths(),r=this.getDims(),o=r[0],n=r[1],l=!this.context.isRtl||t.getIsRtlScrollbarOnLeft()?n-1:0,i=o-1,s=this.clippedScrollerRefs.currentMap,c=this.scrollerElRefs.currentMap,a=!1,h=!1,u={},d={},p=0;p<o;p+=1){if((g=s[y=p*n+l])&&g.needsYScrolling()){a=!0;break}}for(var f=0;f<n;f+=1){var g;if((g=s[y=i*n+f])&&g.needsXScrolling()){h=!0;break}}for(p=0;p<o;p+=1)for(f=0;f<n;f+=1){var y,S=c[y=p*n+f];if(S){var m=S.parentNode;u[y]=Math.floor(m.getBoundingClientRect().width-(f===l&&a?e.y:0)),d[y]=Math.floor(m.getBoundingClientRect().height-(p===i&&h?e.x:0))}}return{forceYScrollbars:a,forceXScrollbars:h,scrollerClientWidths:u,scrollerClientHeights:d}},r.prototype.updateStickyScrolling=function(){var e=this.context.isRtl,t=this.scrollerElRefs.getAll().map((function(t){return[t,e]})),r=this.getStickyScrolling(t);r.forEach((function(e){return e.updateSize()})),this.stickyScrollings=r},r.prototype.destroyStickyScrolling=function(){this.stickyScrollings.forEach(z)},r.prototype.updateScrollSyncers=function(){for(var e=this.getDims(),r=e[0],o=e[1],n=r*o,l={},i={},s=this.scrollerElRefs.currentMap,c=0;c<r;c+=1){var a=c*o,h=a+o;l[c]=t.collectFromHash(s,a,h,1)}for(var u=0;u<o;u+=1)i[u]=this.scrollerElRefs.collect(u,n,o);this.scrollSyncersBySection=this.getScrollSyncersBySection(l),this.scrollSyncersByColumn=this.getScrollSyncersByColumn(i)},r.prototype.destroyScrollSyncers=function(){t.mapHash(this.scrollSyncersBySection,H),t.mapHash(this.scrollSyncersByColumn,H)},r.prototype.getChunkConfigByIndex=function(e){var t=this.getDims()[1],r=Math.floor(e/t),o=e%t,n=this.props.sections[r];return n&&n.chunks[o]},r.prototype.forceScrollLeft=function(e,t){var r=this.scrollSyncersByColumn[e];r&&r.forceScrollLeft(t)},r.prototype.forceScrollTop=function(e,t){var r=this.scrollSyncersBySection[e];r&&r.forceScrollTop(t)},r.prototype._handleChunkEl=function(e,r){var o=this.getChunkConfigByIndex(parseInt(r,10));o&&t.setRef(o.elRef,e)},r.prototype._handleScrollerEl=function(e,r){var o=this.getChunkConfigByIndex(parseInt(r,10));o&&t.setRef(o.scrollerElRef,e)},r.prototype.getDims=function(){var e=this.props.sections.length;return[e,e?this.props.sections[0].chunks.length:0]},r}(t.BaseComponent);function w(e){for(var t=0,r=0,o=e;r<o.length;r++){t+=o[r]}return t}function E(e){var r=t.findElements(e,".fc-scrollgrid-sync-inner").map(C);return r.length?Math.max.apply(Math,r):0}function C(e){return e.offsetHeight}function b(e){var r=W(e.cols,"width"),o=W(e.cols,"minWidth"),n=t.hasShrinkWidth(e.cols);return{hasShrinkCol:n,totalColWidth:r,totalColMinWidth:o,allowXScrolling:"shrink"!==e.width&&Boolean(r||o||n),cols:e.cols,width:e.width}}function W(e,t){for(var r=0,o=0,n=e;o<n.length;o++){var l=n[o],i=l[t];"number"==typeof i&&(r+=i*(l.span||1))}return r}R.addStateEquality({shrinkWidths:t.isArraysEqual,scrollerClientWidths:t.isPropsEqual,scrollerClientHeights:t.isPropsEqual});var k={cols:t.isColPropsEqual};function M(e,r){return t.compareObjs(e,r,k)}function x(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return new v(e,t)}function H(e){e.destroy()}function L(e,t){return new S(e,t)}function z(e){e.destroy()}var B=t.createPlugin({deps:[n.default],scrollGridImpl:R});return t.config.SCROLLGRID_RESIZE_INTERVAL=500,t.globalPlugins.push(B),e.ScrollGrid=R,e.default=B,e.setScrollFromLeftEdge=p,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar);
package/main.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /*!
2
- FullCalendar Scheduler v5.10.2
2
+ FullCalendar Scheduler v5.11.2
3
3
  Docs & License: https://fullcalendar.io/scheduler
4
- (c) 2021 Adam Shaw
4
+ (c) 2022 Adam Shaw
5
5
  */
6
- import { Emitter, DelayedRunner, removeElement, computeEdges, findElements, translateRect, computeInnerRect, applyStyle, createRef, setRef, getIsRtlScrollbarOnLeft, createElement, Scroller, isPropsEqual, BaseComponent, memoizeArraylike, renderMicroColGroup, RefMap, memoizeHashlike, getScrollGridClassNames, getCanVGrowWithinCell, Fragment, getSectionClassNames, getAllowYScrolling, getSectionHasLiquidHeight, renderChunkContent, config, computeShrinkWidth, getScrollbarWidths, collectFromHash, mapHash, isArraysEqual, sanitizeShrinkWidth, hasShrinkWidth, compareObjs, isColPropsEqual, createPlugin } from '@fullcalendar/common';
6
+ import { Emitter, DelayedRunner, removeElement, computeEdges, findElements, translateRect, computeInnerRect, applyStyle, createRef, setRef, getIsRtlScrollbarOnLeft, createElement, Scroller, isPropsEqual, BaseComponent, memoizeArraylike, renderMicroColGroup, RefMap, getScrollGridClassNames, getCanVGrowWithinCell, Fragment, getSectionClassNames, getAllowYScrolling, getSectionHasLiquidHeight, renderChunkContent, memoizeHashlike, config, computeShrinkWidth, getScrollbarWidths, collectFromHash, mapHash, isArraysEqual, sanitizeShrinkWidth, hasShrinkWidth, compareObjs, isColPropsEqual, createPlugin } from '@fullcalendar/common';
7
7
  import premiumCommonPlugin from '@fullcalendar/premium-common';
8
8
  import { __extends, __assign, __spreadArray } from 'tslib';
9
9
 
@@ -496,9 +496,6 @@ var ScrollGrid = /** @class */ (function (_super) {
496
496
  // doesn't hold non-scrolling els used just for padding
497
497
  _this.scrollerElRefs = new RefMap(_this._handleScrollerEl.bind(_this));
498
498
  _this.chunkElRefs = new RefMap(_this._handleChunkEl.bind(_this));
499
- _this.getStickyScrolling = memoizeArraylike(initStickyScrolling, null, destroyStickyScrolling);
500
- _this.getScrollSyncersBySection = memoizeHashlike(initScrollSyncer.bind(_this, true), null, destroyScrollSyncer);
501
- _this.getScrollSyncersByColumn = memoizeHashlike(initScrollSyncer.bind(_this, false), null, destroyScrollSyncer);
502
499
  _this.stickyScrollings = [];
503
500
  _this.scrollSyncersBySection = {};
504
501
  _this.scrollSyncersByColumn = {};
@@ -641,6 +638,9 @@ var ScrollGrid = /** @class */ (function (_super) {
641
638
  }, content);
642
639
  };
643
640
  ScrollGrid.prototype.componentDidMount = function () {
641
+ this.getStickyScrolling = memoizeArraylike(initStickyScrolling, null, destroyStickyScrolling);
642
+ this.getScrollSyncersBySection = memoizeHashlike(initScrollSyncer.bind(this, true), null, destroyScrollSyncer);
643
+ this.getScrollSyncersByColumn = memoizeHashlike(initScrollSyncer.bind(this, false), null, destroyScrollSyncer);
644
644
  this.updateScrollSyncers();
645
645
  this.handleSizing(false);
646
646
  this.context.addResizeHandler(this.handleSizing);
package/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sources":["src/ScrollListener.ts","src/scroll-left-norm.tsx","src/StickyScrolling.ts","src/ClippedScroller.tsx","src/ScrollSyncer.ts","src/ScrollGrid.tsx","src/main.ts"],"sourcesContent":["import { Emitter, DelayedRunner } from '@fullcalendar/common'\n\nconst WHEEL_EVENT_NAMES = 'wheel mousewheel DomMouseScroll MozMousePixelScroll'.split(' ')\n\n/*\nALSO, with the ability to disable touch\n*/\nexport class ScrollListener {\n emitter = new Emitter()\n private isScrolling = false\n private isTouching = false // user currently has finger down?\n private isRecentlyWheeled = false\n private isRecentlyScrolled = false\n private wheelWaiter = new DelayedRunner(this._handleWheelWaited.bind(this))\n private scrollWaiter = new DelayedRunner(this._handleScrollWaited.bind(this))\n\n constructor(public el: HTMLElement) {\n el.addEventListener('scroll', this.handleScroll)\n el.addEventListener('touchstart', this.handleTouchStart, { passive: true })\n el.addEventListener('touchend', this.handleTouchEnd)\n\n for (let eventName of WHEEL_EVENT_NAMES) {\n el.addEventListener(eventName, this.handleWheel)\n }\n }\n\n destroy() {\n let { el } = this\n el.removeEventListener('scroll', this.handleScroll)\n el.removeEventListener('touchstart', this.handleTouchStart, { passive: true } as AddEventListenerOptions)\n el.removeEventListener('touchend', this.handleTouchEnd)\n\n for (let eventName of WHEEL_EVENT_NAMES) {\n el.removeEventListener(eventName, this.handleWheel)\n }\n }\n\n // Start / Stop\n // ----------------------------------------------------------------------------------------------\n\n private startScroll() {\n if (!this.isScrolling) {\n this.isScrolling = true\n this.emitter.trigger('scrollStart', this.isRecentlyWheeled, this.isTouching)\n }\n }\n\n endScroll() {\n if (this.isScrolling) {\n this.emitter.trigger('scrollEnd')\n this.isScrolling = false\n this.isRecentlyScrolled = true\n this.isRecentlyWheeled = false\n this.scrollWaiter.clear()\n this.wheelWaiter.clear()\n }\n }\n\n // Handlers\n // ----------------------------------------------------------------------------------------------\n\n handleScroll = () => {\n this.startScroll()\n this.emitter.trigger('scroll', this.isRecentlyWheeled, this.isTouching)\n this.isRecentlyScrolled = true\n this.scrollWaiter.request(500)\n }\n\n _handleScrollWaited() {\n this.isRecentlyScrolled = false\n\n // only end the scroll if not currently touching.\n // if touching, the scrolling will end later, on touchend.\n if (!this.isTouching) {\n this.endScroll() // won't fire if already ended\n }\n }\n\n // will fire *before* the scroll event is fired (might not cause a scroll)\n handleWheel = () => {\n this.isRecentlyWheeled = true\n this.wheelWaiter.request(500)\n }\n\n _handleWheelWaited() {\n this.isRecentlyWheeled = false\n }\n\n // will fire *before* the scroll event is fired (might not cause a scroll)\n handleTouchStart = () => {\n this.isTouching = true\n }\n\n handleTouchEnd = () => {\n this.isTouching = false\n\n // if the user ended their touch, and the scroll area wasn't moving,\n // we consider this to be the end of the scroll.\n if (!this.isRecentlyScrolled) {\n this.endScroll() // won't fire if already ended\n }\n }\n}\n","import { removeElement, computeEdges } from '@fullcalendar/common'\n\n// TODO: assume the el has no borders?\nexport function getScrollCanvasOrigin(scrollEl: HTMLElement) { // best place for this?\n let rect = scrollEl.getBoundingClientRect()\n let edges = computeEdges(scrollEl) // TODO: pass in isRtl?\n\n return {\n left: rect.left + edges.borderLeft + edges.scrollbarLeft - getScrollFromLeftEdge(scrollEl),\n top: rect.top + edges.borderTop - scrollEl.scrollTop,\n }\n}\n\nexport function getScrollFromLeftEdge(el: HTMLElement) {\n let scrollLeft = el.scrollLeft\n let computedStyles = window.getComputedStyle(el) // TODO: pass in isRtl instead?\n\n if (computedStyles.direction === 'rtl') {\n switch (getRtlScrollSystem()) {\n case 'negative':\n scrollLeft *= -1 // convert to 'reverse'. fall through...\n case 'reverse': // scrollLeft is distance between scrollframe's right edge scrollcanvas's right edge\n scrollLeft = el.scrollWidth - scrollLeft - el.clientWidth\n }\n }\n\n return scrollLeft\n}\n\nexport function setScrollFromLeftEdge(el: HTMLElement, scrollLeft: number) {\n let computedStyles = window.getComputedStyle(el) // TODO: pass in isRtl instead?\n\n if (computedStyles.direction === 'rtl') {\n switch (getRtlScrollSystem()) {\n case 'reverse':\n scrollLeft = el.scrollWidth - scrollLeft\n break\n case 'negative':\n scrollLeft = -(el.scrollWidth - scrollLeft)\n break\n }\n }\n\n el.scrollLeft = scrollLeft\n}\n\n// Horizontal Scroll System Detection\n// ----------------------------------------------------------------------------------------------\n\nlet _rtlScrollSystem\n\nfunction getRtlScrollSystem() {\n return _rtlScrollSystem || (_rtlScrollSystem = detectRtlScrollSystem())\n}\n\nfunction detectRtlScrollSystem() {\n let el = document.createElement('div')\n el.style.position = 'absolute'\n el.style.top = '-1000px'\n el.style.width = '1px'\n el.style.height = '1px'\n el.style.overflow = 'scroll'\n el.style.direction = 'rtl'\n el.style.fontSize = '100px'\n el.innerHTML = 'A'\n\n document.body.appendChild(el)\n\n let system\n if (el.scrollLeft > 0) {\n system = 'positive' // scroll is a positive number from the left edge\n } else {\n el.scrollLeft = 1\n if (el.scrollLeft > 0) {\n system = 'reverse' // scroll is a positive number from the right edge\n } else {\n system = 'negative' // scroll is a negative number from the right edge\n }\n }\n\n removeElement(el)\n return system\n}\n","import {\n applyStyle,\n translateRect, Rect, Point,\n findElements,\n computeInnerRect,\n CssDimValue,\n removeElement,\n} from '@fullcalendar/common'\nimport { ScrollListener } from './ScrollListener'\nimport { getScrollCanvasOrigin, getScrollFromLeftEdge } from './scroll-left-norm'\n\ninterface ElementGeom {\n parentBound: Rect // relative to the canvas origin\n naturalBound: Rect | null // of the el itself\n elWidth: number\n elHeight: number\n textAlign: string\n}\n\nconst IS_MS_EDGE = typeof navigator !== 'undefined' && /Edge/.test(navigator.userAgent) // TODO: what about Chromeum-based Edge?\nconst STICKY_SELECTOR = '.fc-sticky'\n\n/*\nuseful beyond the native position:sticky for these reasons:\n- support in IE11\n- nice centering support\n\nREQUIREMENT: fc-sticky elements, if the fc-sticky className is taken away, should NOT have relative or absolute positioning.\nThis is because we attach the coords with JS, and the VDOM might take away the fc-sticky class but doesn't know kill the positioning.\n\nTODO: don't query text-align:center. isn't compatible with flexbox centering. instead, check natural X coord within parent container\n*/\nexport class StickyScrolling {\n listener?: ScrollListener\n usingRelative: boolean | null = null\n\n constructor(\n private scrollEl: HTMLElement,\n private isRtl: boolean,\n ) {\n this.usingRelative =\n !getStickySupported() || // IE11\n // https://stackoverflow.com/questions/56835658/in-microsoft-edge-sticky-positioning-doesnt-work-when-combined-with-dir-rtl\n (IS_MS_EDGE && isRtl)\n\n if (this.usingRelative) {\n this.listener = new ScrollListener(scrollEl)\n this.listener.emitter.on('scrollEnd', this.updateSize)\n }\n }\n\n destroy() {\n if (this.listener) {\n this.listener.destroy()\n }\n }\n\n updateSize = () => {\n let { scrollEl } = this\n let els = findElements(scrollEl, STICKY_SELECTOR)\n let elGeoms = this.queryElGeoms(els)\n let viewportWidth = scrollEl.clientWidth\n let viewportHeight = scrollEl.clientHeight\n\n if (this.usingRelative) {\n let elDestinations = this.computeElDestinations(elGeoms, viewportWidth) // read before prepPositioning\n\n assignRelativePositions(els, elGeoms, elDestinations, viewportWidth, viewportHeight)\n } else {\n assignStickyPositions(els, elGeoms, viewportWidth)\n }\n }\n\n queryElGeoms(els: HTMLElement[]): ElementGeom[] {\n let { scrollEl, isRtl } = this\n let canvasOrigin = getScrollCanvasOrigin(scrollEl)\n let elGeoms: ElementGeom[] = []\n\n for (let el of els) {\n let parentBound = translateRect(\n computeInnerRect(el.parentNode as HTMLElement, true, true), // weird way to call this!!!\n -canvasOrigin.left,\n -canvasOrigin.top,\n )\n\n let elRect = el.getBoundingClientRect()\n let computedStyles = window.getComputedStyle(el)\n let textAlign = window.getComputedStyle(el.parentNode as HTMLElement).textAlign // ask the parent\n let naturalBound = null\n\n if (textAlign === 'start') {\n textAlign = isRtl ? 'right' : 'left'\n } else if (textAlign === 'end') {\n textAlign = isRtl ? 'left' : 'right'\n }\n\n if (computedStyles.position !== 'sticky') {\n naturalBound = translateRect(\n elRect,\n -canvasOrigin.left - (parseFloat(computedStyles.left) || 0), // could be 'auto'\n -canvasOrigin.top - (parseFloat(computedStyles.top) || 0),\n )\n }\n\n elGeoms.push({\n parentBound,\n naturalBound,\n elWidth: elRect.width,\n elHeight: elRect.height,\n textAlign,\n })\n }\n\n return elGeoms\n }\n\n // only for IE\n computeElDestinations(elGeoms: ElementGeom[], viewportWidth: number): Point[] {\n let { scrollEl } = this\n let viewportTop = scrollEl.scrollTop\n let viewportLeft = getScrollFromLeftEdge(scrollEl)\n let viewportRight = viewportLeft + viewportWidth\n\n return elGeoms.map((elGeom) => {\n let { elWidth, elHeight, parentBound, naturalBound } = elGeom\n let destLeft // relative to canvas topleft\n let destTop // \"\n\n switch (elGeom.textAlign) {\n case 'left':\n destLeft = viewportLeft\n break\n case 'right':\n destLeft = viewportRight - elWidth\n break\n case 'center':\n destLeft = (viewportLeft + viewportRight) / 2 - elWidth / 2 /// noooo, use half-width insteadddddddd\n break\n }\n\n destLeft = Math.min(destLeft, parentBound.right - elWidth)\n destLeft = Math.max(destLeft, parentBound.left)\n\n destTop = viewportTop\n destTop = Math.min(destTop, parentBound.bottom - elHeight)\n destTop = Math.max(destTop, naturalBound.top) // better to use natural top for upper bound\n\n return { left: destLeft, top: destTop }\n })\n }\n}\n\nfunction assignRelativePositions(\n els: HTMLElement[],\n elGeoms: ElementGeom[],\n elDestinations: Point[],\n viewportWidth: number,\n viewportHeight: number,\n) {\n els.forEach((el, i) => {\n let { naturalBound, parentBound } = elGeoms[i]\n let parentWidth = parentBound.right - parentBound.left\n let parentHeight = parentBound.bottom - parentBound.bottom\n let left: CssDimValue\n let top: CssDimValue\n\n if (\n parentWidth > viewportWidth ||\n parentHeight > viewportHeight\n ) {\n left = elDestinations[i].left - naturalBound.left\n top = elDestinations[i].top - naturalBound.top\n } else { // if parent container can be completely in view, we don't need stickiness\n left = ''\n top = ''\n }\n\n applyStyle(el, {\n position: 'relative',\n left,\n right: -left, // for rtl\n top,\n })\n })\n}\n\nfunction assignStickyPositions(els: HTMLElement[], elGeoms: ElementGeom[], viewportWidth: number) {\n els.forEach((el, i) => {\n let { textAlign, elWidth, parentBound } = elGeoms[i]\n let parentWidth = parentBound.right - parentBound.left\n let left: CssDimValue\n\n if (\n textAlign === 'center' &&\n parentWidth > viewportWidth\n ) {\n left = (viewportWidth - elWidth) / 2\n } else { // if parent container can be completely in view, we don't need stickiness\n left = ''\n }\n\n applyStyle(el, { // will already have fc-sticky class which makes it sticky\n left,\n right: left, // for when centered\n top: 0,\n })\n })\n}\n\nlet _isStickySupported\n\nfunction getStickySupported() {\n if (_isStickySupported == null) {\n _isStickySupported = computeStickySupported()\n }\n return _isStickySupported\n}\n\nfunction computeStickySupported() {\n let el = document.createElement('div')\n el.style.position = 'sticky'\n document.body.appendChild(el)\n let val = window.getComputedStyle(el).position\n removeElement(el)\n return val === 'sticky'\n}\n","import {\n createElement, ComponentChildren, createRef, Ref, BaseComponent, setRef,\n ScrollerLike,\n Scroller, OverflowValue,\n getIsRtlScrollbarOnLeft,\n isPropsEqual,\n} from '@fullcalendar/common'\n\nexport type ClippedOverflowValue = OverflowValue | 'scroll-hidden'\n\nexport interface ClippedScrollerProps {\n overflowX: ClippedOverflowValue\n overflowY: ClippedOverflowValue\n liquid: boolean\n maxHeight?: number // incompatible with liquid\n children?: ComponentChildren\n scrollerRef?: Ref<Scroller>\n scrollerElRef?: Ref<HTMLElement>\n}\n\ninterface ClippedScrollerState {\n yScrollbarWidth?: number\n xScrollbarWidth?: number\n}\n\nexport class ClippedScroller extends BaseComponent<ClippedScrollerProps, ClippedScrollerState> implements ScrollerLike {\n private elRef = createRef<HTMLDivElement>()\n private scroller: Scroller\n\n state = {\n xScrollbarWidth: 0,\n yScrollbarWidth: 0,\n }\n\n render() {\n let { props, state, context } = this\n let isScrollbarOnLeft = context.isRtl && getIsRtlScrollbarOnLeft()\n let overcomeLeft = 0\n let overcomeRight = 0\n let overcomeBottom = 0\n\n if (props.overflowX === 'scroll-hidden') {\n overcomeBottom = state.xScrollbarWidth\n }\n\n if (props.overflowY === 'scroll-hidden') {\n if (state.yScrollbarWidth != null) {\n if (isScrollbarOnLeft) {\n overcomeLeft = state.yScrollbarWidth\n } else {\n overcomeRight = state.yScrollbarWidth\n }\n }\n }\n\n return (\n <div\n ref={this.elRef}\n className={'fc-scroller-harness' + (props.liquid ? ' fc-scroller-harness-liquid' : '')}\n >\n <Scroller\n ref={this.handleScroller}\n elRef={this.props.scrollerElRef}\n overflowX={props.overflowX === 'scroll-hidden' ? 'scroll' : props.overflowX}\n overflowY={props.overflowY === 'scroll-hidden' ? 'scroll' : props.overflowY}\n overcomeLeft={overcomeLeft}\n overcomeRight={overcomeRight}\n overcomeBottom={overcomeBottom}\n maxHeight={\n typeof props.maxHeight === 'number'\n ? (props.maxHeight + (props.overflowX === 'scroll-hidden' ? state.xScrollbarWidth : 0))\n : ''\n }\n liquid={props.liquid}\n liquidIsAbsolute\n >\n {props.children}\n </Scroller>\n </div>\n )\n }\n\n handleScroller = (scroller: Scroller) => {\n this.scroller = scroller\n setRef(this.props.scrollerRef, scroller)\n }\n\n componentDidMount() {\n this.handleSizing()\n this.context.addResizeHandler(this.handleSizing)\n }\n\n componentDidUpdate(prevProps: ClippedScrollerProps) {\n if (!isPropsEqual(prevProps, this.props)) { // an external change?\n this.handleSizing()\n }\n }\n\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleSizing)\n }\n\n handleSizing = () => {\n let { props } = this\n\n if (props.overflowY === 'scroll-hidden') {\n this.setState({ yScrollbarWidth: this.scroller.getYScrollbarWidth() })\n }\n\n if (props.overflowX === 'scroll-hidden') {\n this.setState({ xScrollbarWidth: this.scroller.getXScrollbarWidth() })\n }\n }\n\n needsXScrolling() {\n return this.scroller.needsXScrolling()\n }\n\n needsYScrolling() {\n return this.scroller.needsYScrolling()\n }\n}\n","import { ScrollListener } from './ScrollListener'\nimport { setScrollFromLeftEdge } from './scroll-left-norm'\n\nexport class ScrollSyncer {\n private masterEl: HTMLElement\n private scrollListeners: ScrollListener[]\n private isPaused: boolean = false\n\n constructor(\n private isVertical: boolean,\n private scrollEls: HTMLElement[],\n ) {\n this.scrollListeners = scrollEls.map((el) => this.bindScroller(el))\n }\n\n destroy() {\n for (let scrollListener of this.scrollListeners) {\n scrollListener.destroy()\n }\n }\n\n bindScroller(el: HTMLElement) {\n let { scrollEls, isVertical } = this\n let scrollListener = new ScrollListener(el)\n\n const onScroll = (isWheel, isTouch) => {\n if (!this.isPaused) {\n if (!this.masterEl || (this.masterEl !== el && (isWheel || isTouch))) {\n this.assignMaster(el)\n }\n\n if (this.masterEl === el) { // dealing with current\n for (let otherEl of scrollEls) {\n if (otherEl !== el) {\n if (isVertical) {\n otherEl.scrollTop = el.scrollTop\n } else {\n otherEl.scrollLeft = el.scrollLeft\n }\n }\n }\n }\n }\n }\n\n const onScrollEnd = () => {\n if (this.masterEl === el) {\n this.masterEl = null\n }\n }\n\n scrollListener.emitter.on('scroll', onScroll)\n scrollListener.emitter.on('scrollEnd', onScrollEnd)\n\n return scrollListener\n }\n\n assignMaster(el: HTMLElement) {\n this.masterEl = el\n\n for (let scrollListener of this.scrollListeners) {\n if (scrollListener.el !== el) {\n scrollListener.endScroll() // to prevent residual scrolls from reclaiming master\n }\n }\n }\n\n /*\n will normalize the scrollLeft value\n */\n forceScrollLeft(scrollLeft: number) {\n this.isPaused = true\n\n for (let listener of this.scrollListeners) {\n setScrollFromLeftEdge(listener.el, scrollLeft)\n }\n\n this.isPaused = false\n }\n\n forceScrollTop(top: number) {\n this.isPaused = true\n\n for (let listener of this.scrollListeners) {\n listener.el.scrollTop = top\n }\n\n this.isPaused = false\n }\n}\n","import {\n createElement, VNode, Fragment,\n BaseComponent,\n isArraysEqual,\n findElements,\n mapHash,\n RefMap,\n ColProps, CssDimValue, hasShrinkWidth, renderMicroColGroup,\n ScrollGridProps, ScrollGridSectionConfig, ColGroupConfig,\n getScrollGridClassNames, getSectionClassNames, getSectionHasLiquidHeight, getAllowYScrolling, renderChunkContent, computeShrinkWidth,\n getIsRtlScrollbarOnLeft,\n setRef,\n sanitizeShrinkWidth,\n isPropsEqual,\n compareObjs,\n isColPropsEqual,\n getScrollbarWidths,\n memoizeArraylike,\n collectFromHash,\n memoizeHashlike,\n ScrollGridChunkConfig,\n getCanVGrowWithinCell,\n config,\n} from '@fullcalendar/common'\nimport { StickyScrolling } from './StickyScrolling'\nimport { ClippedScroller, ClippedOverflowValue } from './ClippedScroller'\nimport { ScrollSyncer } from './ScrollSyncer'\n\ninterface ScrollGridState {\n shrinkWidths: number[] // for only one col within each vertical stack of chunks\n forceYScrollbars: boolean // null means not computed yet\n forceXScrollbars: boolean // \"\n scrollerClientWidths: { [index: string]: number } // why not use array?\n scrollerClientHeights: { [index: string]: number }\n sectionRowMaxHeights: number[][][]\n}\n\ninterface ColGroupStat {\n hasShrinkCol: boolean\n totalColWidth: number\n totalColMinWidth: number\n allowXScrolling: boolean\n width?: CssDimValue\n cols: ColProps[]\n}\n\n/*\nTODO: make <ScrollGridSection> subcomponent\nNOTE: doesn't support collapsibleWidth (which is sortof a hack anyway)\n*/\nexport class ScrollGrid extends BaseComponent<ScrollGridProps, ScrollGridState> {\n private compileColGroupStats = memoizeArraylike(compileColGroupStat, isColGroupStatsEqual)\n private renderMicroColGroups = memoizeArraylike(renderMicroColGroup) // yucky to memoize VNodes, but much more efficient for consumers\n private clippedScrollerRefs = new RefMap<ClippedScroller>()\n\n // doesn't hold non-scrolling els used just for padding\n private scrollerElRefs = new RefMap<HTMLElement>(this._handleScrollerEl.bind(this))\n\n private chunkElRefs = new RefMap<HTMLTableCellElement>(this._handleChunkEl.bind(this))\n private getStickyScrolling = memoizeArraylike(initStickyScrolling, null, destroyStickyScrolling)\n private getScrollSyncersBySection = memoizeHashlike(initScrollSyncer.bind(this, true), null, destroyScrollSyncer)\n private getScrollSyncersByColumn = memoizeHashlike(initScrollSyncer.bind(this, false), null, destroyScrollSyncer)\n private stickyScrollings: StickyScrolling[] = []\n private scrollSyncersBySection: { [sectionI: string]: ScrollSyncer } = {}\n private scrollSyncersByColumn: { [columnI: string]: ScrollSyncer } = {}\n\n // for row-height-syncing\n private rowUnstableMap = new Map<HTMLTableRowElement, boolean>() // no need to groom. always self-cancels\n private rowInnerMaxHeightMap = new Map<HTMLTableRowElement, number>()\n private anyRowHeightsChanged = false\n\n private lastSizingDate: Date\n private recentSizingCnt = 0\n\n state: ScrollGridState = {\n shrinkWidths: [],\n forceYScrollbars: false,\n forceXScrollbars: false,\n scrollerClientWidths: {},\n scrollerClientHeights: {},\n sectionRowMaxHeights: [],\n }\n\n render(): VNode {\n let { props, state, context } = this\n let { shrinkWidths } = state\n\n let colGroupStats = this.compileColGroupStats(props.colGroups.map((colGroup) => [colGroup]))\n let microColGroupNodes = this.renderMicroColGroups(colGroupStats.map((stat, i) => [stat.cols, shrinkWidths[i]]))\n let classNames = getScrollGridClassNames(props.liquid, context)\n\n // yuck\n let indices: [ number, number ][] = []\n let [sectionCnt, chunksPerSection] = this.getDims()\n for (let sectionI = 0; sectionI < sectionCnt; sectionI += 1) {\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n indices.push([sectionI, chunkI])\n }\n }\n\n // TODO: make DRY\n let sectionConfigs = props.sections\n let configCnt = sectionConfigs.length\n let configI = 0\n let currentConfig: ScrollGridSectionConfig\n let headSectionNodes: VNode[] = []\n let bodySectionNodes: VNode[] = []\n let footSectionNodes: VNode[] = []\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {\n headSectionNodes.push(this.renderSection(\n currentConfig,\n configI,\n colGroupStats,\n microColGroupNodes,\n state.sectionRowMaxHeights,\n true,\n ))\n configI += 1\n }\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {\n bodySectionNodes.push(this.renderSection(\n currentConfig,\n configI,\n colGroupStats,\n microColGroupNodes,\n state.sectionRowMaxHeights,\n false,\n ))\n configI += 1\n }\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {\n footSectionNodes.push(this.renderSection(\n currentConfig,\n configI,\n colGroupStats,\n microColGroupNodes,\n state.sectionRowMaxHeights,\n true,\n ))\n configI += 1\n }\n\n const isBuggy = !getCanVGrowWithinCell() // see NOTE in SimpleScrollGrid\n const roleAttrs = { role: 'rowgroup' }\n\n return createElement(\n 'table',\n {\n ref: props.elRef,\n role: 'grid',\n className: classNames.join(' '),\n },\n renderMacroColGroup(colGroupStats, shrinkWidths),\n Boolean(!isBuggy && headSectionNodes.length) && createElement('thead', roleAttrs, ...headSectionNodes),\n Boolean(!isBuggy && bodySectionNodes.length) && createElement('tbody', roleAttrs, ...bodySectionNodes),\n Boolean(!isBuggy && footSectionNodes.length) && createElement('tfoot', roleAttrs, ...footSectionNodes),\n isBuggy && createElement('tbody', roleAttrs, ...headSectionNodes, ...bodySectionNodes, ...footSectionNodes),\n )\n }\n\n renderSection(\n sectionConfig: ScrollGridSectionConfig,\n sectionIndex: number,\n colGroupStats: ColGroupStat[],\n microColGroupNodes: VNode[],\n sectionRowMaxHeights: number[][][],\n isHeader: boolean,\n ): VNode {\n if ('outerContent' in sectionConfig) {\n return (\n <Fragment key={sectionConfig.key}>\n {sectionConfig.outerContent}\n </Fragment>\n )\n }\n\n return (\n <tr\n key={sectionConfig.key}\n role=\"presentation\"\n className={getSectionClassNames(sectionConfig, this.props.liquid).join(' ')}\n >\n {sectionConfig.chunks.map((chunkConfig, i) => this.renderChunk(\n sectionConfig,\n sectionIndex,\n colGroupStats[i],\n microColGroupNodes[i],\n chunkConfig,\n i,\n (sectionRowMaxHeights[sectionIndex] || [])[i] || [],\n isHeader,\n ))}\n </tr>\n )\n }\n\n renderChunk(\n sectionConfig: ScrollGridSectionConfig,\n sectionIndex: number,\n colGroupStat: ColGroupStat | undefined,\n microColGroupNode: VNode | undefined,\n chunkConfig: ScrollGridChunkConfig,\n chunkIndex: number,\n rowHeights: number[],\n isHeader: boolean,\n ): VNode {\n if ('outerContent' in chunkConfig) {\n return (\n <Fragment key={chunkConfig.key}>\n {chunkConfig.outerContent}\n </Fragment>\n )\n }\n\n let { state } = this\n let { scrollerClientWidths, scrollerClientHeights } = state\n\n let [sectionCnt, chunksPerSection] = this.getDims()\n let index = sectionIndex * chunksPerSection + chunkIndex\n let sideScrollIndex = (!this.context.isRtl || getIsRtlScrollbarOnLeft()) ? chunksPerSection - 1 : 0\n let isVScrollSide = chunkIndex === sideScrollIndex\n let isLastSection = sectionIndex === sectionCnt - 1\n\n let forceXScrollbars = isLastSection && state.forceXScrollbars // NOOOO can result in `null`\n let forceYScrollbars = isVScrollSide && state.forceYScrollbars // NOOOO can result in `null`\n\n let allowXScrolling = colGroupStat && colGroupStat.allowXScrolling // rename?\n let allowYScrolling = getAllowYScrolling(this.props, sectionConfig) // rename? do in section func?\n\n let chunkVGrow = getSectionHasLiquidHeight(this.props, sectionConfig) // do in section func?\n let expandRows = sectionConfig.expandRows && chunkVGrow\n let tableMinWidth = (colGroupStat && colGroupStat.totalColMinWidth) || ''\n\n let content = renderChunkContent(sectionConfig, chunkConfig, {\n tableColGroupNode: microColGroupNode,\n tableMinWidth,\n clientWidth: scrollerClientWidths[index] !== undefined ? scrollerClientWidths[index] : null,\n clientHeight: scrollerClientHeights[index] !== undefined ? scrollerClientHeights[index] : null,\n expandRows,\n syncRowHeights: Boolean(sectionConfig.syncRowHeights),\n rowSyncHeights: rowHeights,\n reportRowHeightChange: this.handleRowHeightChange,\n }, isHeader)\n\n let overflowX: ClippedOverflowValue =\n forceXScrollbars ? (isLastSection ? 'scroll' : 'scroll-hidden') :\n !allowXScrolling ? 'hidden' :\n (isLastSection ? 'auto' : 'scroll-hidden')\n\n let overflowY: ClippedOverflowValue =\n forceYScrollbars ? (isVScrollSide ? 'scroll' : 'scroll-hidden') :\n !allowYScrolling ? 'hidden' :\n (isVScrollSide ? 'auto' : 'scroll-hidden')\n\n // it *could* be possible to reduce DOM wrappers by only doing a ClippedScroller when allowXScrolling or allowYScrolling,\n // but if these values were to change, the inner components would be unmounted/remounted because of the parent change.\n content = (\n <ClippedScroller\n ref={this.clippedScrollerRefs.createRef(index)}\n scrollerElRef={this.scrollerElRefs.createRef(index)}\n overflowX={overflowX}\n overflowY={overflowY}\n liquid={chunkVGrow}\n maxHeight={sectionConfig.maxHeight}\n >\n {content}\n </ClippedScroller>\n )\n\n return createElement(\n isHeader ? 'th' : 'td',\n {\n key: chunkConfig.key,\n ref: this.chunkElRefs.createRef(index) as any,\n role: 'presentation',\n },\n content,\n )\n }\n\n componentDidMount() {\n this.updateScrollSyncers()\n this.handleSizing(false)\n\n this.context.addResizeHandler(this.handleSizing)\n }\n\n componentDidUpdate(prevProps: ScrollGridProps, prevState: ScrollGridState) {\n this.updateScrollSyncers()\n\n // TODO: need better solution when state contains non-sizing things\n this.handleSizing(false, prevState.sectionRowMaxHeights !== this.state.sectionRowMaxHeights)\n }\n\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleSizing)\n\n this.destroyStickyScrolling()\n this.destroyScrollSyncers()\n }\n\n handleSizing = (isForcedResize: boolean, sectionRowMaxHeightsChanged?: boolean) => {\n if (!this.allowSizing()) {\n return\n }\n\n if (!sectionRowMaxHeightsChanged) { // something else changed, probably external\n this.anyRowHeightsChanged = true\n }\n\n let otherState: Partial<ScrollGridState> = {}\n\n // if reacting to self-change of sectionRowMaxHeightsChanged, or not stable, don't do anything\n if (isForcedResize || (!sectionRowMaxHeightsChanged && !this.rowUnstableMap.size)) {\n otherState.sectionRowMaxHeights = this.computeSectionRowMaxHeights()\n }\n\n this.setState({\n shrinkWidths: this.computeShrinkWidths(),\n ...this.computeScrollerDims(),\n ...(otherState as any), // wtf\n }, () => {\n if (!this.rowUnstableMap.size) {\n this.updateStickyScrolling() // needs to happen AFTER final positioning committed to DOM\n }\n })\n }\n\n allowSizing() {\n let now = new Date()\n\n if (\n !this.lastSizingDate ||\n now.valueOf() > this.lastSizingDate.valueOf() + config.SCROLLGRID_RESIZE_INTERVAL\n ) {\n this.lastSizingDate = now\n this.recentSizingCnt = 0\n return true\n }\n\n return (this.recentSizingCnt += 1) <= 10\n }\n\n handleRowHeightChange = (rowEl: HTMLTableRowElement, isStable: boolean) => {\n let { rowUnstableMap, rowInnerMaxHeightMap } = this\n\n if (!isStable) {\n rowUnstableMap.set(rowEl, true)\n } else {\n rowUnstableMap.delete(rowEl)\n\n let innerMaxHeight = getRowInnerMaxHeight(rowEl)\n if (!rowInnerMaxHeightMap.has(rowEl) || rowInnerMaxHeightMap.get(rowEl) !== innerMaxHeight) {\n rowInnerMaxHeightMap.set(rowEl, innerMaxHeight)\n this.anyRowHeightsChanged = true\n }\n\n if (!rowUnstableMap.size && this.anyRowHeightsChanged) {\n this.anyRowHeightsChanged = false\n this.setState({\n sectionRowMaxHeights: this.computeSectionRowMaxHeights(),\n })\n }\n }\n }\n\n computeShrinkWidths() {\n let colGroupStats = this.compileColGroupStats(this.props.colGroups.map((colGroup) => [colGroup]))\n let [sectionCnt, chunksPerSection] = this.getDims()\n let cnt = sectionCnt * chunksPerSection\n let shrinkWidths: number[] = []\n\n colGroupStats.forEach((colGroupStat, i) => {\n if (colGroupStat.hasShrinkCol) {\n let chunkEls = this.chunkElRefs.collect(i, cnt, chunksPerSection) // in one col\n shrinkWidths[i] = computeShrinkWidth(chunkEls)\n }\n })\n\n return shrinkWidths\n }\n\n // has the side effect of grooming rowInnerMaxHeightMap\n // TODO: somehow short-circuit if there are no new height changes\n private computeSectionRowMaxHeights() {\n let newHeightMap = new Map<HTMLTableRowElement, number>()\n\n let [sectionCnt, chunksPerSection] = this.getDims()\n let sectionRowMaxHeights: number[][][] = []\n\n for (let sectionI = 0; sectionI < sectionCnt; sectionI += 1) {\n let sectionConfig = this.props.sections[sectionI]\n let assignableHeights: number[][] = [] // chunk, row\n\n if (sectionConfig && sectionConfig.syncRowHeights) {\n let rowHeightsByChunk: number[][] = []\n\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n let index = sectionI * chunksPerSection + chunkI\n let rowHeights: number[] = []\n\n let chunkEl = this.chunkElRefs.currentMap[index]\n if (chunkEl) {\n rowHeights = findElements(chunkEl, '.fc-scrollgrid-sync-table tr').map((rowEl: HTMLTableRowElement) => {\n let max = getRowInnerMaxHeight(rowEl)\n newHeightMap.set(rowEl, max)\n return max\n })\n } else {\n rowHeights = []\n }\n\n rowHeightsByChunk.push(rowHeights)\n }\n\n let rowCnt = rowHeightsByChunk[0].length\n let isEqualRowCnt = true\n\n for (let chunkI = 1; chunkI < chunksPerSection; chunkI += 1) {\n let isOuterContent = sectionConfig.chunks[chunkI] && sectionConfig.chunks[chunkI].outerContent !== undefined // can be null\n\n if (!isOuterContent && rowHeightsByChunk[chunkI].length !== rowCnt) { // skip outer content\n isEqualRowCnt = false\n break\n }\n }\n\n if (!isEqualRowCnt) {\n let chunkHeightSums: number[] = []\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n chunkHeightSums.push(\n sumNumbers(rowHeightsByChunk[chunkI]) + rowHeightsByChunk[chunkI].length, // add in border\n )\n }\n\n let maxTotalSum = Math.max(...chunkHeightSums)\n\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n let rowInChunkCnt = rowHeightsByChunk[chunkI].length\n let rowInChunkTotalHeight = maxTotalSum - rowInChunkCnt // subtract border\n\n // height of non-first row. we do this to avoid rounding, because it's unreliable within a table\n let rowInChunkHeightOthers = Math.floor(rowInChunkTotalHeight / rowInChunkCnt)\n\n // whatever is leftover goes to the first row\n let rowInChunkHeightFirst = rowInChunkTotalHeight - rowInChunkHeightOthers * (rowInChunkCnt - 1)\n\n let rowInChunkHeights: number[] = []\n let row = 0\n\n if (row < rowInChunkCnt) {\n rowInChunkHeights.push(rowInChunkHeightFirst)\n row += 1\n }\n\n while (row < rowInChunkCnt) {\n rowInChunkHeights.push(rowInChunkHeightOthers)\n row += 1\n }\n\n assignableHeights.push(rowInChunkHeights)\n }\n } else {\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n assignableHeights.push([])\n }\n\n for (let row = 0; row < rowCnt; row += 1) {\n let rowHeightsAcrossChunks: number[] = []\n\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n let h = rowHeightsByChunk[chunkI][row]\n if (h != null) { // protect against outerContent\n rowHeightsAcrossChunks.push(h)\n }\n }\n\n let maxHeight = Math.max(...rowHeightsAcrossChunks)\n\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n assignableHeights[chunkI].push(maxHeight)\n }\n }\n }\n }\n\n sectionRowMaxHeights.push(assignableHeights)\n }\n\n this.rowInnerMaxHeightMap = newHeightMap\n\n return sectionRowMaxHeights\n }\n\n computeScrollerDims() {\n let scrollbarWidth = getScrollbarWidths()\n let [sectionCnt, chunksPerSection] = this.getDims()\n let sideScrollI = (!this.context.isRtl || getIsRtlScrollbarOnLeft()) ? chunksPerSection - 1 : 0\n let lastSectionI = sectionCnt - 1\n let currentScrollers = this.clippedScrollerRefs.currentMap\n let scrollerEls = this.scrollerElRefs.currentMap\n let forceYScrollbars = false\n let forceXScrollbars = false\n let scrollerClientWidths: { [index: string]: number } = {}\n let scrollerClientHeights: { [index: string]: number } = {}\n\n for (let sectionI = 0; sectionI < sectionCnt; sectionI += 1) { // along edge\n let index = sectionI * chunksPerSection + sideScrollI\n let scroller = currentScrollers[index]\n\n if (scroller && scroller.needsYScrolling()) {\n forceYScrollbars = true\n break\n }\n }\n\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) { // along last row\n let index = lastSectionI * chunksPerSection + chunkI\n let scroller = currentScrollers[index]\n\n if (scroller && scroller.needsXScrolling()) {\n forceXScrollbars = true\n break\n }\n }\n\n for (let sectionI = 0; sectionI < sectionCnt; sectionI += 1) {\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n let index = sectionI * chunksPerSection + chunkI\n let scrollerEl = scrollerEls[index]\n\n if (scrollerEl) {\n // TODO: weird way to get this. need harness b/c doesn't include table borders\n let harnessEl = scrollerEl.parentNode as HTMLElement\n\n scrollerClientWidths[index] = Math.floor(\n harnessEl.getBoundingClientRect().width - (\n (chunkI === sideScrollI && forceYScrollbars)\n ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future\n : 0\n ),\n )\n\n scrollerClientHeights[index] = Math.floor(\n harnessEl.getBoundingClientRect().height - (\n (sectionI === lastSectionI && forceXScrollbars)\n ? scrollbarWidth.x // use global because scroller might not have scrollbars yet but will need them in future\n : 0\n ),\n )\n }\n }\n }\n\n return { forceYScrollbars, forceXScrollbars, scrollerClientWidths, scrollerClientHeights }\n }\n\n updateStickyScrolling() {\n let { isRtl } = this.context\n let argsByKey = this.scrollerElRefs.getAll().map(\n (scrollEl) => [scrollEl, isRtl] as [ HTMLElement, boolean ],\n )\n\n let stickyScrollings = this.getStickyScrolling(argsByKey)\n\n stickyScrollings.forEach((stickyScrolling) => stickyScrolling.updateSize())\n\n this.stickyScrollings = stickyScrollings\n }\n\n destroyStickyScrolling() {\n this.stickyScrollings.forEach(destroyStickyScrolling)\n }\n\n updateScrollSyncers() {\n let [sectionCnt, chunksPerSection] = this.getDims()\n let cnt = sectionCnt * chunksPerSection\n let scrollElsBySection: { [sectionI: string]: HTMLElement[] } = {}\n let scrollElsByColumn: { [colI: string]: HTMLElement[] } = {}\n let scrollElMap = this.scrollerElRefs.currentMap\n\n for (let sectionI = 0; sectionI < sectionCnt; sectionI += 1) {\n let startIndex = sectionI * chunksPerSection\n let endIndex = startIndex + chunksPerSection\n\n scrollElsBySection[sectionI] = collectFromHash(scrollElMap, startIndex, endIndex, 1) // use the filtered\n }\n\n for (let col = 0; col < chunksPerSection; col += 1) {\n scrollElsByColumn[col] = this.scrollerElRefs.collect(col, cnt, chunksPerSection) // DON'T use the filtered\n }\n\n this.scrollSyncersBySection = this.getScrollSyncersBySection(scrollElsBySection)\n this.scrollSyncersByColumn = this.getScrollSyncersByColumn(scrollElsByColumn)\n }\n\n destroyScrollSyncers() {\n mapHash(this.scrollSyncersBySection, destroyScrollSyncer)\n mapHash(this.scrollSyncersByColumn, destroyScrollSyncer)\n }\n\n getChunkConfigByIndex(index: number) { // somewhat expensive for something so simple\n let chunksPerSection = this.getDims()[1]\n let sectionI = Math.floor(index / chunksPerSection)\n let chunkI = index % chunksPerSection\n let sectionConfig = this.props.sections[sectionI]\n\n return sectionConfig && sectionConfig.chunks[chunkI]\n }\n\n forceScrollLeft(col: number, scrollLeft: number) {\n let scrollSyncer = this.scrollSyncersByColumn[col]\n\n if (scrollSyncer) {\n scrollSyncer.forceScrollLeft(scrollLeft)\n }\n }\n\n forceScrollTop(sectionI: number, scrollTop: number) {\n let scrollSyncer = this.scrollSyncersBySection[sectionI]\n\n if (scrollSyncer) {\n scrollSyncer.forceScrollTop(scrollTop)\n }\n }\n\n _handleChunkEl(chunkEl: HTMLTableCellElement | null, key: string) {\n let chunkConfig = this.getChunkConfigByIndex(parseInt(key, 10))\n\n if (chunkConfig) { // null if section disappeared. bad, b/c won't null-set the elRef\n setRef(chunkConfig.elRef, chunkEl)\n }\n }\n\n _handleScrollerEl(scrollerEl: HTMLElement | null, key: string) {\n let chunkConfig = this.getChunkConfigByIndex(parseInt(key, 10))\n\n if (chunkConfig) { // null if section disappeared. bad, b/c won't null-set the elRef\n setRef(chunkConfig.scrollerElRef, scrollerEl)\n }\n }\n\n getDims() {\n let sectionCnt = this.props.sections.length\n let chunksPerSection = sectionCnt ? this.props.sections[0].chunks.length : 0\n\n return [sectionCnt, chunksPerSection]\n }\n}\n\nScrollGrid.addStateEquality({\n shrinkWidths: isArraysEqual,\n scrollerClientWidths: isPropsEqual,\n scrollerClientHeights: isPropsEqual,\n})\n\nfunction sumNumbers(numbers: number[]) { // TODO: general util\n let sum = 0\n\n for (let n of numbers) {\n sum += n\n }\n\n return sum\n}\n\nfunction getRowInnerMaxHeight(rowEl: HTMLElement) {\n let innerHeights = findElements(rowEl, '.fc-scrollgrid-sync-inner').map(getElHeight)\n\n if (innerHeights.length) {\n return Math.max(...innerHeights)\n }\n\n return 0\n}\n\nfunction getElHeight(el: HTMLElement) {\n return el.offsetHeight // better to deal with integers, for rounding, for PureComponent\n}\n\nfunction renderMacroColGroup(colGroupStats: ColGroupStat[], shrinkWidths: number[]) {\n let children = colGroupStats.map((colGroupStat, i) => {\n let width = colGroupStat.width\n\n if (width === 'shrink') {\n width = colGroupStat.totalColWidth + sanitizeShrinkWidth(shrinkWidths[i]) + 1 // +1 for border :(\n }\n\n return ( // eslint-disable-next-line react/jsx-key\n <col style={{ width }} />\n )\n })\n\n return createElement('colgroup', {}, ...children)\n}\n\nfunction compileColGroupStat(colGroupConfig: ColGroupConfig): ColGroupStat {\n let totalColWidth = sumColProp(colGroupConfig.cols, 'width') // excludes \"shrink\"\n let totalColMinWidth = sumColProp(colGroupConfig.cols, 'minWidth')\n let hasShrinkCol = hasShrinkWidth(colGroupConfig.cols)\n let allowXScrolling = colGroupConfig.width !== 'shrink' && Boolean(totalColWidth || totalColMinWidth || hasShrinkCol)\n\n return {\n hasShrinkCol,\n totalColWidth,\n totalColMinWidth,\n allowXScrolling,\n cols: colGroupConfig.cols,\n width: colGroupConfig.width,\n }\n}\n\nfunction sumColProp(cols: ColProps[], propName: string) {\n let total = 0\n\n for (let col of cols) {\n let val = col[propName]\n\n if (typeof val === 'number') {\n total += val * (col.span || 1)\n }\n }\n\n return total\n}\n\nconst COL_GROUP_STAT_EQUALITY = {\n cols: isColPropsEqual,\n}\n\nfunction isColGroupStatsEqual(stat0: ColGroupStat, stat1: ColGroupStat): boolean {\n return compareObjs(stat0, stat1, COL_GROUP_STAT_EQUALITY)\n}\n\n// for memoizers...\n\nfunction initScrollSyncer(isVertical: boolean, ...scrollEls: HTMLElement[]) {\n return new ScrollSyncer(isVertical, scrollEls)\n}\n\nfunction destroyScrollSyncer(scrollSyncer: ScrollSyncer) {\n scrollSyncer.destroy()\n}\n\nfunction initStickyScrolling(scrollEl: HTMLElement, isRtl: boolean) {\n return new StickyScrolling(scrollEl, isRtl)\n}\n\nfunction destroyStickyScrolling(stickyScrolling: StickyScrolling) {\n stickyScrolling.destroy()\n}\n","import { createPlugin, config } from '@fullcalendar/common'\n\nimport premiumCommonPlugin from '@fullcalendar/premium-common' // eslint-disable-line import/no-duplicates\n// ensure ambient declarations\nimport '@fullcalendar/premium-common' // eslint-disable-line import/no-duplicates\n\nimport { ScrollGrid } from './ScrollGrid'\n\nexport { ScrollGrid }\nexport { setScrollFromLeftEdge } from './scroll-left-norm'\n\nexport default createPlugin({\n deps: [\n premiumCommonPlugin,\n ],\n scrollGridImpl: ScrollGrid,\n})\n\nconfig.SCROLLGRID_RESIZE_INTERVAL = 500\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sources":["src/ScrollListener.ts","src/scroll-left-norm.tsx","src/StickyScrolling.ts","src/ClippedScroller.tsx","src/ScrollSyncer.ts","src/ScrollGrid.tsx","src/main.ts"],"sourcesContent":["import { Emitter, DelayedRunner } from '@fullcalendar/common'\n\nconst WHEEL_EVENT_NAMES = 'wheel mousewheel DomMouseScroll MozMousePixelScroll'.split(' ')\n\n/*\nALSO, with the ability to disable touch\n*/\nexport class ScrollListener {\n emitter = new Emitter()\n private isScrolling = false\n private isTouching = false // user currently has finger down?\n private isRecentlyWheeled = false\n private isRecentlyScrolled = false\n private wheelWaiter = new DelayedRunner(this._handleWheelWaited.bind(this))\n private scrollWaiter = new DelayedRunner(this._handleScrollWaited.bind(this))\n\n constructor(public el: HTMLElement) {\n el.addEventListener('scroll', this.handleScroll)\n el.addEventListener('touchstart', this.handleTouchStart, { passive: true })\n el.addEventListener('touchend', this.handleTouchEnd)\n\n for (let eventName of WHEEL_EVENT_NAMES) {\n el.addEventListener(eventName, this.handleWheel)\n }\n }\n\n destroy() {\n let { el } = this\n el.removeEventListener('scroll', this.handleScroll)\n el.removeEventListener('touchstart', this.handleTouchStart, { passive: true } as AddEventListenerOptions)\n el.removeEventListener('touchend', this.handleTouchEnd)\n\n for (let eventName of WHEEL_EVENT_NAMES) {\n el.removeEventListener(eventName, this.handleWheel)\n }\n }\n\n // Start / Stop\n // ----------------------------------------------------------------------------------------------\n\n private startScroll() {\n if (!this.isScrolling) {\n this.isScrolling = true\n this.emitter.trigger('scrollStart', this.isRecentlyWheeled, this.isTouching)\n }\n }\n\n endScroll() {\n if (this.isScrolling) {\n this.emitter.trigger('scrollEnd')\n this.isScrolling = false\n this.isRecentlyScrolled = true\n this.isRecentlyWheeled = false\n this.scrollWaiter.clear()\n this.wheelWaiter.clear()\n }\n }\n\n // Handlers\n // ----------------------------------------------------------------------------------------------\n\n handleScroll = () => {\n this.startScroll()\n this.emitter.trigger('scroll', this.isRecentlyWheeled, this.isTouching)\n this.isRecentlyScrolled = true\n this.scrollWaiter.request(500)\n }\n\n _handleScrollWaited() {\n this.isRecentlyScrolled = false\n\n // only end the scroll if not currently touching.\n // if touching, the scrolling will end later, on touchend.\n if (!this.isTouching) {\n this.endScroll() // won't fire if already ended\n }\n }\n\n // will fire *before* the scroll event is fired (might not cause a scroll)\n handleWheel = () => {\n this.isRecentlyWheeled = true\n this.wheelWaiter.request(500)\n }\n\n _handleWheelWaited() {\n this.isRecentlyWheeled = false\n }\n\n // will fire *before* the scroll event is fired (might not cause a scroll)\n handleTouchStart = () => {\n this.isTouching = true\n }\n\n handleTouchEnd = () => {\n this.isTouching = false\n\n // if the user ended their touch, and the scroll area wasn't moving,\n // we consider this to be the end of the scroll.\n if (!this.isRecentlyScrolled) {\n this.endScroll() // won't fire if already ended\n }\n }\n}\n","import { removeElement, computeEdges } from '@fullcalendar/common'\n\n// TODO: assume the el has no borders?\nexport function getScrollCanvasOrigin(scrollEl: HTMLElement) { // best place for this?\n let rect = scrollEl.getBoundingClientRect()\n let edges = computeEdges(scrollEl) // TODO: pass in isRtl?\n\n return {\n left: rect.left + edges.borderLeft + edges.scrollbarLeft - getScrollFromLeftEdge(scrollEl),\n top: rect.top + edges.borderTop - scrollEl.scrollTop,\n }\n}\n\nexport function getScrollFromLeftEdge(el: HTMLElement) {\n let scrollLeft = el.scrollLeft\n let computedStyles = window.getComputedStyle(el) // TODO: pass in isRtl instead?\n\n if (computedStyles.direction === 'rtl') {\n switch (getRtlScrollSystem()) {\n case 'negative':\n scrollLeft *= -1 // convert to 'reverse'. fall through...\n case 'reverse': // scrollLeft is distance between scrollframe's right edge scrollcanvas's right edge\n scrollLeft = el.scrollWidth - scrollLeft - el.clientWidth\n }\n }\n\n return scrollLeft\n}\n\nexport function setScrollFromLeftEdge(el: HTMLElement, scrollLeft: number) {\n let computedStyles = window.getComputedStyle(el) // TODO: pass in isRtl instead?\n\n if (computedStyles.direction === 'rtl') {\n switch (getRtlScrollSystem()) {\n case 'reverse':\n scrollLeft = el.scrollWidth - scrollLeft\n break\n case 'negative':\n scrollLeft = -(el.scrollWidth - scrollLeft)\n break\n }\n }\n\n el.scrollLeft = scrollLeft\n}\n\n// Horizontal Scroll System Detection\n// ----------------------------------------------------------------------------------------------\n\nlet _rtlScrollSystem\n\nfunction getRtlScrollSystem() {\n return _rtlScrollSystem || (_rtlScrollSystem = detectRtlScrollSystem())\n}\n\nfunction detectRtlScrollSystem() {\n let el = document.createElement('div')\n el.style.position = 'absolute'\n el.style.top = '-1000px'\n el.style.width = '1px'\n el.style.height = '1px'\n el.style.overflow = 'scroll'\n el.style.direction = 'rtl'\n el.style.fontSize = '100px'\n el.innerHTML = 'A'\n\n document.body.appendChild(el)\n\n let system\n if (el.scrollLeft > 0) {\n system = 'positive' // scroll is a positive number from the left edge\n } else {\n el.scrollLeft = 1\n if (el.scrollLeft > 0) {\n system = 'reverse' // scroll is a positive number from the right edge\n } else {\n system = 'negative' // scroll is a negative number from the right edge\n }\n }\n\n removeElement(el)\n return system\n}\n","import {\n applyStyle,\n translateRect, Rect, Point,\n findElements,\n computeInnerRect,\n CssDimValue,\n removeElement,\n} from '@fullcalendar/common'\nimport { ScrollListener } from './ScrollListener'\nimport { getScrollCanvasOrigin, getScrollFromLeftEdge } from './scroll-left-norm'\n\ninterface ElementGeom {\n parentBound: Rect // relative to the canvas origin\n naturalBound: Rect | null // of the el itself\n elWidth: number\n elHeight: number\n textAlign: string\n}\n\nconst IS_MS_EDGE = typeof navigator !== 'undefined' && /Edge/.test(navigator.userAgent) // TODO: what about Chromeum-based Edge?\nconst STICKY_SELECTOR = '.fc-sticky'\n\n/*\nuseful beyond the native position:sticky for these reasons:\n- support in IE11\n- nice centering support\n\nREQUIREMENT: fc-sticky elements, if the fc-sticky className is taken away, should NOT have relative or absolute positioning.\nThis is because we attach the coords with JS, and the VDOM might take away the fc-sticky class but doesn't know kill the positioning.\n\nTODO: don't query text-align:center. isn't compatible with flexbox centering. instead, check natural X coord within parent container\n*/\nexport class StickyScrolling {\n listener?: ScrollListener\n usingRelative: boolean | null = null\n\n constructor(\n private scrollEl: HTMLElement,\n private isRtl: boolean,\n ) {\n this.usingRelative =\n !getStickySupported() || // IE11\n // https://stackoverflow.com/questions/56835658/in-microsoft-edge-sticky-positioning-doesnt-work-when-combined-with-dir-rtl\n (IS_MS_EDGE && isRtl)\n\n if (this.usingRelative) {\n this.listener = new ScrollListener(scrollEl)\n this.listener.emitter.on('scrollEnd', this.updateSize)\n }\n }\n\n destroy() {\n if (this.listener) {\n this.listener.destroy()\n }\n }\n\n updateSize = () => {\n let { scrollEl } = this\n let els = findElements(scrollEl, STICKY_SELECTOR)\n let elGeoms = this.queryElGeoms(els)\n let viewportWidth = scrollEl.clientWidth\n let viewportHeight = scrollEl.clientHeight\n\n if (this.usingRelative) {\n let elDestinations = this.computeElDestinations(elGeoms, viewportWidth) // read before prepPositioning\n\n assignRelativePositions(els, elGeoms, elDestinations, viewportWidth, viewportHeight)\n } else {\n assignStickyPositions(els, elGeoms, viewportWidth)\n }\n }\n\n queryElGeoms(els: HTMLElement[]): ElementGeom[] {\n let { scrollEl, isRtl } = this\n let canvasOrigin = getScrollCanvasOrigin(scrollEl)\n let elGeoms: ElementGeom[] = []\n\n for (let el of els) {\n let parentBound = translateRect(\n computeInnerRect(el.parentNode as HTMLElement, true, true), // weird way to call this!!!\n -canvasOrigin.left,\n -canvasOrigin.top,\n )\n\n let elRect = el.getBoundingClientRect()\n let computedStyles = window.getComputedStyle(el)\n let textAlign = window.getComputedStyle(el.parentNode as HTMLElement).textAlign // ask the parent\n let naturalBound = null\n\n if (textAlign === 'start') {\n textAlign = isRtl ? 'right' : 'left'\n } else if (textAlign === 'end') {\n textAlign = isRtl ? 'left' : 'right'\n }\n\n if (computedStyles.position !== 'sticky') {\n naturalBound = translateRect(\n elRect,\n -canvasOrigin.left - (parseFloat(computedStyles.left) || 0), // could be 'auto'\n -canvasOrigin.top - (parseFloat(computedStyles.top) || 0),\n )\n }\n\n elGeoms.push({\n parentBound,\n naturalBound,\n elWidth: elRect.width,\n elHeight: elRect.height,\n textAlign,\n })\n }\n\n return elGeoms\n }\n\n // only for IE\n computeElDestinations(elGeoms: ElementGeom[], viewportWidth: number): Point[] {\n let { scrollEl } = this\n let viewportTop = scrollEl.scrollTop\n let viewportLeft = getScrollFromLeftEdge(scrollEl)\n let viewportRight = viewportLeft + viewportWidth\n\n return elGeoms.map((elGeom) => {\n let { elWidth, elHeight, parentBound, naturalBound } = elGeom\n let destLeft // relative to canvas topleft\n let destTop // \"\n\n switch (elGeom.textAlign) {\n case 'left':\n destLeft = viewportLeft\n break\n case 'right':\n destLeft = viewportRight - elWidth\n break\n case 'center':\n destLeft = (viewportLeft + viewportRight) / 2 - elWidth / 2 /// noooo, use half-width insteadddddddd\n break\n }\n\n destLeft = Math.min(destLeft, parentBound.right - elWidth)\n destLeft = Math.max(destLeft, parentBound.left)\n\n destTop = viewportTop\n destTop = Math.min(destTop, parentBound.bottom - elHeight)\n destTop = Math.max(destTop, naturalBound.top) // better to use natural top for upper bound\n\n return { left: destLeft, top: destTop }\n })\n }\n}\n\nfunction assignRelativePositions(\n els: HTMLElement[],\n elGeoms: ElementGeom[],\n elDestinations: Point[],\n viewportWidth: number,\n viewportHeight: number,\n) {\n els.forEach((el, i) => {\n let { naturalBound, parentBound } = elGeoms[i]\n let parentWidth = parentBound.right - parentBound.left\n let parentHeight = parentBound.bottom - parentBound.bottom\n let left: CssDimValue\n let top: CssDimValue\n\n if (\n parentWidth > viewportWidth ||\n parentHeight > viewportHeight\n ) {\n left = elDestinations[i].left - naturalBound.left\n top = elDestinations[i].top - naturalBound.top\n } else { // if parent container can be completely in view, we don't need stickiness\n left = ''\n top = ''\n }\n\n applyStyle(el, {\n position: 'relative',\n left,\n right: -left, // for rtl\n top,\n })\n })\n}\n\nfunction assignStickyPositions(els: HTMLElement[], elGeoms: ElementGeom[], viewportWidth: number) {\n els.forEach((el, i) => {\n let { textAlign, elWidth, parentBound } = elGeoms[i]\n let parentWidth = parentBound.right - parentBound.left\n let left: CssDimValue\n\n if (\n textAlign === 'center' &&\n parentWidth > viewportWidth\n ) {\n left = (viewportWidth - elWidth) / 2\n } else { // if parent container can be completely in view, we don't need stickiness\n left = ''\n }\n\n applyStyle(el, { // will already have fc-sticky class which makes it sticky\n left,\n right: left, // for when centered\n top: 0,\n })\n })\n}\n\nlet _isStickySupported\n\nfunction getStickySupported() {\n if (_isStickySupported == null) {\n _isStickySupported = computeStickySupported()\n }\n return _isStickySupported\n}\n\nfunction computeStickySupported() {\n let el = document.createElement('div')\n el.style.position = 'sticky'\n document.body.appendChild(el)\n let val = window.getComputedStyle(el).position\n removeElement(el)\n return val === 'sticky'\n}\n","import {\n createElement, ComponentChildren, createRef, Ref, BaseComponent, setRef,\n ScrollerLike,\n Scroller, OverflowValue,\n getIsRtlScrollbarOnLeft,\n isPropsEqual,\n} from '@fullcalendar/common'\n\nexport type ClippedOverflowValue = OverflowValue | 'scroll-hidden'\n\nexport interface ClippedScrollerProps {\n overflowX: ClippedOverflowValue\n overflowY: ClippedOverflowValue\n liquid: boolean\n maxHeight?: number // incompatible with liquid\n children?: ComponentChildren\n scrollerRef?: Ref<Scroller>\n scrollerElRef?: Ref<HTMLElement>\n}\n\ninterface ClippedScrollerState {\n yScrollbarWidth?: number\n xScrollbarWidth?: number\n}\n\nexport class ClippedScroller extends BaseComponent<ClippedScrollerProps, ClippedScrollerState> implements ScrollerLike {\n private elRef = createRef<HTMLDivElement>()\n private scroller: Scroller\n\n state = {\n xScrollbarWidth: 0,\n yScrollbarWidth: 0,\n }\n\n render() {\n let { props, state, context } = this\n let isScrollbarOnLeft = context.isRtl && getIsRtlScrollbarOnLeft()\n let overcomeLeft = 0\n let overcomeRight = 0\n let overcomeBottom = 0\n\n if (props.overflowX === 'scroll-hidden') {\n overcomeBottom = state.xScrollbarWidth\n }\n\n if (props.overflowY === 'scroll-hidden') {\n if (state.yScrollbarWidth != null) {\n if (isScrollbarOnLeft) {\n overcomeLeft = state.yScrollbarWidth\n } else {\n overcomeRight = state.yScrollbarWidth\n }\n }\n }\n\n return (\n <div\n ref={this.elRef}\n className={'fc-scroller-harness' + (props.liquid ? ' fc-scroller-harness-liquid' : '')}\n >\n <Scroller\n ref={this.handleScroller}\n elRef={this.props.scrollerElRef}\n overflowX={props.overflowX === 'scroll-hidden' ? 'scroll' : props.overflowX}\n overflowY={props.overflowY === 'scroll-hidden' ? 'scroll' : props.overflowY}\n overcomeLeft={overcomeLeft}\n overcomeRight={overcomeRight}\n overcomeBottom={overcomeBottom}\n maxHeight={\n typeof props.maxHeight === 'number'\n ? (props.maxHeight + (props.overflowX === 'scroll-hidden' ? state.xScrollbarWidth : 0))\n : ''\n }\n liquid={props.liquid}\n liquidIsAbsolute\n >\n {props.children}\n </Scroller>\n </div>\n )\n }\n\n handleScroller = (scroller: Scroller) => {\n this.scroller = scroller\n setRef(this.props.scrollerRef, scroller)\n }\n\n componentDidMount() {\n this.handleSizing()\n this.context.addResizeHandler(this.handleSizing)\n }\n\n componentDidUpdate(prevProps: ClippedScrollerProps) {\n if (!isPropsEqual(prevProps, this.props)) { // an external change?\n this.handleSizing()\n }\n }\n\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleSizing)\n }\n\n handleSizing = () => {\n let { props } = this\n\n if (props.overflowY === 'scroll-hidden') {\n this.setState({ yScrollbarWidth: this.scroller.getYScrollbarWidth() })\n }\n\n if (props.overflowX === 'scroll-hidden') {\n this.setState({ xScrollbarWidth: this.scroller.getXScrollbarWidth() })\n }\n }\n\n needsXScrolling() {\n return this.scroller.needsXScrolling()\n }\n\n needsYScrolling() {\n return this.scroller.needsYScrolling()\n }\n}\n","import { ScrollListener } from './ScrollListener'\nimport { setScrollFromLeftEdge } from './scroll-left-norm'\n\nexport class ScrollSyncer {\n private masterEl: HTMLElement\n private scrollListeners: ScrollListener[]\n private isPaused: boolean = false\n\n constructor(\n private isVertical: boolean,\n private scrollEls: HTMLElement[],\n ) {\n this.scrollListeners = scrollEls.map((el) => this.bindScroller(el))\n }\n\n destroy() {\n for (let scrollListener of this.scrollListeners) {\n scrollListener.destroy()\n }\n }\n\n bindScroller(el: HTMLElement) {\n let { scrollEls, isVertical } = this\n let scrollListener = new ScrollListener(el)\n\n const onScroll = (isWheel, isTouch) => {\n if (!this.isPaused) {\n if (!this.masterEl || (this.masterEl !== el && (isWheel || isTouch))) {\n this.assignMaster(el)\n }\n\n if (this.masterEl === el) { // dealing with current\n for (let otherEl of scrollEls) {\n if (otherEl !== el) {\n if (isVertical) {\n otherEl.scrollTop = el.scrollTop\n } else {\n otherEl.scrollLeft = el.scrollLeft\n }\n }\n }\n }\n }\n }\n\n const onScrollEnd = () => {\n if (this.masterEl === el) {\n this.masterEl = null\n }\n }\n\n scrollListener.emitter.on('scroll', onScroll)\n scrollListener.emitter.on('scrollEnd', onScrollEnd)\n\n return scrollListener\n }\n\n assignMaster(el: HTMLElement) {\n this.masterEl = el\n\n for (let scrollListener of this.scrollListeners) {\n if (scrollListener.el !== el) {\n scrollListener.endScroll() // to prevent residual scrolls from reclaiming master\n }\n }\n }\n\n /*\n will normalize the scrollLeft value\n */\n forceScrollLeft(scrollLeft: number) {\n this.isPaused = true\n\n for (let listener of this.scrollListeners) {\n setScrollFromLeftEdge(listener.el, scrollLeft)\n }\n\n this.isPaused = false\n }\n\n forceScrollTop(top: number) {\n this.isPaused = true\n\n for (let listener of this.scrollListeners) {\n listener.el.scrollTop = top\n }\n\n this.isPaused = false\n }\n}\n","import {\n createElement, VNode, Fragment,\n BaseComponent,\n isArraysEqual,\n findElements,\n mapHash,\n RefMap,\n ColProps, CssDimValue, hasShrinkWidth, renderMicroColGroup,\n ScrollGridProps, ScrollGridSectionConfig, ColGroupConfig,\n getScrollGridClassNames, getSectionClassNames, getSectionHasLiquidHeight, getAllowYScrolling, renderChunkContent, computeShrinkWidth,\n getIsRtlScrollbarOnLeft,\n setRef,\n sanitizeShrinkWidth,\n isPropsEqual,\n compareObjs,\n isColPropsEqual,\n getScrollbarWidths,\n memoizeArraylike,\n MemoiseArrayFunc,\n collectFromHash,\n memoizeHashlike,\n MemoizeHashFunc,\n ScrollGridChunkConfig,\n getCanVGrowWithinCell,\n config,\n} from '@fullcalendar/common'\nimport { StickyScrolling } from './StickyScrolling'\nimport { ClippedScroller, ClippedOverflowValue } from './ClippedScroller'\nimport { ScrollSyncer } from './ScrollSyncer'\n\ninterface ScrollGridState {\n shrinkWidths: number[] // for only one col within each vertical stack of chunks\n forceYScrollbars: boolean // null means not computed yet\n forceXScrollbars: boolean // \"\n scrollerClientWidths: { [index: string]: number } // why not use array?\n scrollerClientHeights: { [index: string]: number }\n sectionRowMaxHeights: number[][][]\n}\n\ninterface ColGroupStat {\n hasShrinkCol: boolean\n totalColWidth: number\n totalColMinWidth: number\n allowXScrolling: boolean\n width?: CssDimValue\n cols: ColProps[]\n}\n\n/*\nTODO: make <ScrollGridSection> subcomponent\nNOTE: doesn't support collapsibleWidth (which is sortof a hack anyway)\n*/\nexport class ScrollGrid extends BaseComponent<ScrollGridProps, ScrollGridState> {\n private compileColGroupStats = memoizeArraylike(compileColGroupStat, isColGroupStatsEqual)\n private renderMicroColGroups = memoizeArraylike(renderMicroColGroup) // yucky to memoize VNodes, but much more efficient for consumers\n private clippedScrollerRefs = new RefMap<ClippedScroller>()\n\n // doesn't hold non-scrolling els used just for padding\n private scrollerElRefs = new RefMap<HTMLElement>(this._handleScrollerEl.bind(this))\n\n private chunkElRefs = new RefMap<HTMLTableCellElement>(this._handleChunkEl.bind(this))\n private getStickyScrolling: MemoiseArrayFunc<[HTMLElement, boolean], StickyScrolling>\n private getScrollSyncersBySection: MemoizeHashFunc<HTMLElement[], ScrollSyncer>\n private getScrollSyncersByColumn: MemoizeHashFunc<HTMLElement[], ScrollSyncer>\n private stickyScrollings: StickyScrolling[] = []\n private scrollSyncersBySection: { [sectionI: string]: ScrollSyncer } = {}\n private scrollSyncersByColumn: { [columnI: string]: ScrollSyncer } = {}\n\n // for row-height-syncing\n private rowUnstableMap = new Map<HTMLTableRowElement, boolean>() // no need to groom. always self-cancels\n private rowInnerMaxHeightMap = new Map<HTMLTableRowElement, number>()\n private anyRowHeightsChanged = false\n\n private lastSizingDate: Date\n private recentSizingCnt = 0\n\n state: ScrollGridState = {\n shrinkWidths: [],\n forceYScrollbars: false,\n forceXScrollbars: false,\n scrollerClientWidths: {},\n scrollerClientHeights: {},\n sectionRowMaxHeights: [],\n }\n\n render(): VNode {\n let { props, state, context } = this\n let { shrinkWidths } = state\n\n let colGroupStats = this.compileColGroupStats(props.colGroups.map((colGroup) => [colGroup]))\n let microColGroupNodes = this.renderMicroColGroups(colGroupStats.map((stat, i) => [stat.cols, shrinkWidths[i]]))\n let classNames = getScrollGridClassNames(props.liquid, context)\n\n // yuck\n let indices: [ number, number ][] = []\n let [sectionCnt, chunksPerSection] = this.getDims()\n for (let sectionI = 0; sectionI < sectionCnt; sectionI += 1) {\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n indices.push([sectionI, chunkI])\n }\n }\n\n // TODO: make DRY\n let sectionConfigs = props.sections\n let configCnt = sectionConfigs.length\n let configI = 0\n let currentConfig: ScrollGridSectionConfig\n let headSectionNodes: VNode[] = []\n let bodySectionNodes: VNode[] = []\n let footSectionNodes: VNode[] = []\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {\n headSectionNodes.push(this.renderSection(\n currentConfig,\n configI,\n colGroupStats,\n microColGroupNodes,\n state.sectionRowMaxHeights,\n true,\n ))\n configI += 1\n }\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {\n bodySectionNodes.push(this.renderSection(\n currentConfig,\n configI,\n colGroupStats,\n microColGroupNodes,\n state.sectionRowMaxHeights,\n false,\n ))\n configI += 1\n }\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {\n footSectionNodes.push(this.renderSection(\n currentConfig,\n configI,\n colGroupStats,\n microColGroupNodes,\n state.sectionRowMaxHeights,\n true,\n ))\n configI += 1\n }\n\n const isBuggy = !getCanVGrowWithinCell() // see NOTE in SimpleScrollGrid\n const roleAttrs = { role: 'rowgroup' }\n\n return createElement(\n 'table',\n {\n ref: props.elRef,\n role: 'grid',\n className: classNames.join(' '),\n },\n renderMacroColGroup(colGroupStats, shrinkWidths),\n Boolean(!isBuggy && headSectionNodes.length) && createElement('thead', roleAttrs, ...headSectionNodes),\n Boolean(!isBuggy && bodySectionNodes.length) && createElement('tbody', roleAttrs, ...bodySectionNodes),\n Boolean(!isBuggy && footSectionNodes.length) && createElement('tfoot', roleAttrs, ...footSectionNodes),\n isBuggy && createElement('tbody', roleAttrs, ...headSectionNodes, ...bodySectionNodes, ...footSectionNodes),\n )\n }\n\n renderSection(\n sectionConfig: ScrollGridSectionConfig,\n sectionIndex: number,\n colGroupStats: ColGroupStat[],\n microColGroupNodes: VNode[],\n sectionRowMaxHeights: number[][][],\n isHeader: boolean,\n ): VNode {\n if ('outerContent' in sectionConfig) {\n return (\n <Fragment key={sectionConfig.key}>\n {sectionConfig.outerContent}\n </Fragment>\n )\n }\n\n return (\n <tr\n key={sectionConfig.key}\n role=\"presentation\"\n className={getSectionClassNames(sectionConfig, this.props.liquid).join(' ')}\n >\n {sectionConfig.chunks.map((chunkConfig, i) => this.renderChunk(\n sectionConfig,\n sectionIndex,\n colGroupStats[i],\n microColGroupNodes[i],\n chunkConfig,\n i,\n (sectionRowMaxHeights[sectionIndex] || [])[i] || [],\n isHeader,\n ))}\n </tr>\n )\n }\n\n renderChunk(\n sectionConfig: ScrollGridSectionConfig,\n sectionIndex: number,\n colGroupStat: ColGroupStat | undefined,\n microColGroupNode: VNode | undefined,\n chunkConfig: ScrollGridChunkConfig,\n chunkIndex: number,\n rowHeights: number[],\n isHeader: boolean,\n ): VNode {\n if ('outerContent' in chunkConfig) {\n return (\n <Fragment key={chunkConfig.key}>\n {chunkConfig.outerContent}\n </Fragment>\n )\n }\n\n let { state } = this\n let { scrollerClientWidths, scrollerClientHeights } = state\n\n let [sectionCnt, chunksPerSection] = this.getDims()\n let index = sectionIndex * chunksPerSection + chunkIndex\n let sideScrollIndex = (!this.context.isRtl || getIsRtlScrollbarOnLeft()) ? chunksPerSection - 1 : 0\n let isVScrollSide = chunkIndex === sideScrollIndex\n let isLastSection = sectionIndex === sectionCnt - 1\n\n let forceXScrollbars = isLastSection && state.forceXScrollbars // NOOOO can result in `null`\n let forceYScrollbars = isVScrollSide && state.forceYScrollbars // NOOOO can result in `null`\n\n let allowXScrolling = colGroupStat && colGroupStat.allowXScrolling // rename?\n let allowYScrolling = getAllowYScrolling(this.props, sectionConfig) // rename? do in section func?\n\n let chunkVGrow = getSectionHasLiquidHeight(this.props, sectionConfig) // do in section func?\n let expandRows = sectionConfig.expandRows && chunkVGrow\n let tableMinWidth = (colGroupStat && colGroupStat.totalColMinWidth) || ''\n\n let content = renderChunkContent(sectionConfig, chunkConfig, {\n tableColGroupNode: microColGroupNode,\n tableMinWidth,\n clientWidth: scrollerClientWidths[index] !== undefined ? scrollerClientWidths[index] : null,\n clientHeight: scrollerClientHeights[index] !== undefined ? scrollerClientHeights[index] : null,\n expandRows,\n syncRowHeights: Boolean(sectionConfig.syncRowHeights),\n rowSyncHeights: rowHeights,\n reportRowHeightChange: this.handleRowHeightChange,\n }, isHeader)\n\n let overflowX: ClippedOverflowValue =\n forceXScrollbars ? (isLastSection ? 'scroll' : 'scroll-hidden') :\n !allowXScrolling ? 'hidden' :\n (isLastSection ? 'auto' : 'scroll-hidden')\n\n let overflowY: ClippedOverflowValue =\n forceYScrollbars ? (isVScrollSide ? 'scroll' : 'scroll-hidden') :\n !allowYScrolling ? 'hidden' :\n (isVScrollSide ? 'auto' : 'scroll-hidden')\n\n // it *could* be possible to reduce DOM wrappers by only doing a ClippedScroller when allowXScrolling or allowYScrolling,\n // but if these values were to change, the inner components would be unmounted/remounted because of the parent change.\n content = (\n <ClippedScroller\n ref={this.clippedScrollerRefs.createRef(index)}\n scrollerElRef={this.scrollerElRefs.createRef(index)}\n overflowX={overflowX}\n overflowY={overflowY}\n liquid={chunkVGrow}\n maxHeight={sectionConfig.maxHeight}\n >\n {content}\n </ClippedScroller>\n )\n\n return createElement(\n isHeader ? 'th' : 'td',\n {\n key: chunkConfig.key,\n ref: this.chunkElRefs.createRef(index) as any,\n role: 'presentation',\n },\n content,\n )\n }\n\n componentDidMount() {\n this.getStickyScrolling = memoizeArraylike(initStickyScrolling, null, destroyStickyScrolling)\n this.getScrollSyncersBySection = memoizeHashlike(initScrollSyncer.bind(this, true), null, destroyScrollSyncer)\n this.getScrollSyncersByColumn = memoizeHashlike(initScrollSyncer.bind(this, false), null, destroyScrollSyncer)\n\n this.updateScrollSyncers()\n this.handleSizing(false)\n\n this.context.addResizeHandler(this.handleSizing)\n }\n\n componentDidUpdate(prevProps: ScrollGridProps, prevState: ScrollGridState) {\n this.updateScrollSyncers()\n\n // TODO: need better solution when state contains non-sizing things\n this.handleSizing(false, prevState.sectionRowMaxHeights !== this.state.sectionRowMaxHeights)\n }\n\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleSizing)\n\n this.destroyStickyScrolling()\n this.destroyScrollSyncers()\n }\n\n handleSizing = (isForcedResize: boolean, sectionRowMaxHeightsChanged?: boolean) => {\n if (!this.allowSizing()) {\n return\n }\n\n if (!sectionRowMaxHeightsChanged) { // something else changed, probably external\n this.anyRowHeightsChanged = true\n }\n\n let otherState: Partial<ScrollGridState> = {}\n\n // if reacting to self-change of sectionRowMaxHeightsChanged, or not stable, don't do anything\n if (isForcedResize || (!sectionRowMaxHeightsChanged && !this.rowUnstableMap.size)) {\n otherState.sectionRowMaxHeights = this.computeSectionRowMaxHeights()\n }\n\n this.setState({\n shrinkWidths: this.computeShrinkWidths(),\n ...this.computeScrollerDims(),\n ...(otherState as any), // wtf\n }, () => {\n if (!this.rowUnstableMap.size) {\n this.updateStickyScrolling() // needs to happen AFTER final positioning committed to DOM\n }\n })\n }\n\n allowSizing() {\n let now = new Date()\n\n if (\n !this.lastSizingDate ||\n now.valueOf() > this.lastSizingDate.valueOf() + config.SCROLLGRID_RESIZE_INTERVAL\n ) {\n this.lastSizingDate = now\n this.recentSizingCnt = 0\n return true\n }\n\n return (this.recentSizingCnt += 1) <= 10\n }\n\n handleRowHeightChange = (rowEl: HTMLTableRowElement, isStable: boolean) => {\n let { rowUnstableMap, rowInnerMaxHeightMap } = this\n\n if (!isStable) {\n rowUnstableMap.set(rowEl, true)\n } else {\n rowUnstableMap.delete(rowEl)\n\n let innerMaxHeight = getRowInnerMaxHeight(rowEl)\n if (!rowInnerMaxHeightMap.has(rowEl) || rowInnerMaxHeightMap.get(rowEl) !== innerMaxHeight) {\n rowInnerMaxHeightMap.set(rowEl, innerMaxHeight)\n this.anyRowHeightsChanged = true\n }\n\n if (!rowUnstableMap.size && this.anyRowHeightsChanged) {\n this.anyRowHeightsChanged = false\n this.setState({\n sectionRowMaxHeights: this.computeSectionRowMaxHeights(),\n })\n }\n }\n }\n\n computeShrinkWidths() {\n let colGroupStats = this.compileColGroupStats(this.props.colGroups.map((colGroup) => [colGroup]))\n let [sectionCnt, chunksPerSection] = this.getDims()\n let cnt = sectionCnt * chunksPerSection\n let shrinkWidths: number[] = []\n\n colGroupStats.forEach((colGroupStat, i) => {\n if (colGroupStat.hasShrinkCol) {\n let chunkEls = this.chunkElRefs.collect(i, cnt, chunksPerSection) // in one col\n shrinkWidths[i] = computeShrinkWidth(chunkEls)\n }\n })\n\n return shrinkWidths\n }\n\n // has the side effect of grooming rowInnerMaxHeightMap\n // TODO: somehow short-circuit if there are no new height changes\n private computeSectionRowMaxHeights() {\n let newHeightMap = new Map<HTMLTableRowElement, number>()\n\n let [sectionCnt, chunksPerSection] = this.getDims()\n let sectionRowMaxHeights: number[][][] = []\n\n for (let sectionI = 0; sectionI < sectionCnt; sectionI += 1) {\n let sectionConfig = this.props.sections[sectionI]\n let assignableHeights: number[][] = [] // chunk, row\n\n if (sectionConfig && sectionConfig.syncRowHeights) {\n let rowHeightsByChunk: number[][] = []\n\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n let index = sectionI * chunksPerSection + chunkI\n let rowHeights: number[] = []\n\n let chunkEl = this.chunkElRefs.currentMap[index]\n if (chunkEl) {\n rowHeights = findElements(chunkEl, '.fc-scrollgrid-sync-table tr').map((rowEl: HTMLTableRowElement) => {\n let max = getRowInnerMaxHeight(rowEl)\n newHeightMap.set(rowEl, max)\n return max\n })\n } else {\n rowHeights = []\n }\n\n rowHeightsByChunk.push(rowHeights)\n }\n\n let rowCnt = rowHeightsByChunk[0].length\n let isEqualRowCnt = true\n\n for (let chunkI = 1; chunkI < chunksPerSection; chunkI += 1) {\n let isOuterContent = sectionConfig.chunks[chunkI] && sectionConfig.chunks[chunkI].outerContent !== undefined // can be null\n\n if (!isOuterContent && rowHeightsByChunk[chunkI].length !== rowCnt) { // skip outer content\n isEqualRowCnt = false\n break\n }\n }\n\n if (!isEqualRowCnt) {\n let chunkHeightSums: number[] = []\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n chunkHeightSums.push(\n sumNumbers(rowHeightsByChunk[chunkI]) + rowHeightsByChunk[chunkI].length, // add in border\n )\n }\n\n let maxTotalSum = Math.max(...chunkHeightSums)\n\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n let rowInChunkCnt = rowHeightsByChunk[chunkI].length\n let rowInChunkTotalHeight = maxTotalSum - rowInChunkCnt // subtract border\n\n // height of non-first row. we do this to avoid rounding, because it's unreliable within a table\n let rowInChunkHeightOthers = Math.floor(rowInChunkTotalHeight / rowInChunkCnt)\n\n // whatever is leftover goes to the first row\n let rowInChunkHeightFirst = rowInChunkTotalHeight - rowInChunkHeightOthers * (rowInChunkCnt - 1)\n\n let rowInChunkHeights: number[] = []\n let row = 0\n\n if (row < rowInChunkCnt) {\n rowInChunkHeights.push(rowInChunkHeightFirst)\n row += 1\n }\n\n while (row < rowInChunkCnt) {\n rowInChunkHeights.push(rowInChunkHeightOthers)\n row += 1\n }\n\n assignableHeights.push(rowInChunkHeights)\n }\n } else {\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n assignableHeights.push([])\n }\n\n for (let row = 0; row < rowCnt; row += 1) {\n let rowHeightsAcrossChunks: number[] = []\n\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n let h = rowHeightsByChunk[chunkI][row]\n if (h != null) { // protect against outerContent\n rowHeightsAcrossChunks.push(h)\n }\n }\n\n let maxHeight = Math.max(...rowHeightsAcrossChunks)\n\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n assignableHeights[chunkI].push(maxHeight)\n }\n }\n }\n }\n\n sectionRowMaxHeights.push(assignableHeights)\n }\n\n this.rowInnerMaxHeightMap = newHeightMap\n\n return sectionRowMaxHeights\n }\n\n computeScrollerDims() {\n let scrollbarWidth = getScrollbarWidths()\n let [sectionCnt, chunksPerSection] = this.getDims()\n let sideScrollI = (!this.context.isRtl || getIsRtlScrollbarOnLeft()) ? chunksPerSection - 1 : 0\n let lastSectionI = sectionCnt - 1\n let currentScrollers = this.clippedScrollerRefs.currentMap\n let scrollerEls = this.scrollerElRefs.currentMap\n let forceYScrollbars = false\n let forceXScrollbars = false\n let scrollerClientWidths: { [index: string]: number } = {}\n let scrollerClientHeights: { [index: string]: number } = {}\n\n for (let sectionI = 0; sectionI < sectionCnt; sectionI += 1) { // along edge\n let index = sectionI * chunksPerSection + sideScrollI\n let scroller = currentScrollers[index]\n\n if (scroller && scroller.needsYScrolling()) {\n forceYScrollbars = true\n break\n }\n }\n\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) { // along last row\n let index = lastSectionI * chunksPerSection + chunkI\n let scroller = currentScrollers[index]\n\n if (scroller && scroller.needsXScrolling()) {\n forceXScrollbars = true\n break\n }\n }\n\n for (let sectionI = 0; sectionI < sectionCnt; sectionI += 1) {\n for (let chunkI = 0; chunkI < chunksPerSection; chunkI += 1) {\n let index = sectionI * chunksPerSection + chunkI\n let scrollerEl = scrollerEls[index]\n\n if (scrollerEl) {\n // TODO: weird way to get this. need harness b/c doesn't include table borders\n let harnessEl = scrollerEl.parentNode as HTMLElement\n\n scrollerClientWidths[index] = Math.floor(\n harnessEl.getBoundingClientRect().width - (\n (chunkI === sideScrollI && forceYScrollbars)\n ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future\n : 0\n ),\n )\n\n scrollerClientHeights[index] = Math.floor(\n harnessEl.getBoundingClientRect().height - (\n (sectionI === lastSectionI && forceXScrollbars)\n ? scrollbarWidth.x // use global because scroller might not have scrollbars yet but will need them in future\n : 0\n ),\n )\n }\n }\n }\n\n return { forceYScrollbars, forceXScrollbars, scrollerClientWidths, scrollerClientHeights }\n }\n\n updateStickyScrolling() {\n let { isRtl } = this.context\n let argsByKey = this.scrollerElRefs.getAll().map(\n (scrollEl) => [scrollEl, isRtl] as [ HTMLElement, boolean ],\n )\n\n let stickyScrollings = this.getStickyScrolling(argsByKey)\n\n stickyScrollings.forEach((stickyScrolling) => stickyScrolling.updateSize())\n\n this.stickyScrollings = stickyScrollings\n }\n\n destroyStickyScrolling() {\n this.stickyScrollings.forEach(destroyStickyScrolling)\n }\n\n updateScrollSyncers() {\n let [sectionCnt, chunksPerSection] = this.getDims()\n let cnt = sectionCnt * chunksPerSection\n let scrollElsBySection: { [sectionI: string]: HTMLElement[] } = {}\n let scrollElsByColumn: { [colI: string]: HTMLElement[] } = {}\n let scrollElMap = this.scrollerElRefs.currentMap\n\n for (let sectionI = 0; sectionI < sectionCnt; sectionI += 1) {\n let startIndex = sectionI * chunksPerSection\n let endIndex = startIndex + chunksPerSection\n\n scrollElsBySection[sectionI] = collectFromHash(scrollElMap, startIndex, endIndex, 1) // use the filtered\n }\n\n for (let col = 0; col < chunksPerSection; col += 1) {\n scrollElsByColumn[col] = this.scrollerElRefs.collect(col, cnt, chunksPerSection) // DON'T use the filtered\n }\n\n this.scrollSyncersBySection = this.getScrollSyncersBySection(scrollElsBySection)\n this.scrollSyncersByColumn = this.getScrollSyncersByColumn(scrollElsByColumn)\n }\n\n destroyScrollSyncers() {\n mapHash(this.scrollSyncersBySection, destroyScrollSyncer)\n mapHash(this.scrollSyncersByColumn, destroyScrollSyncer)\n }\n\n getChunkConfigByIndex(index: number) { // somewhat expensive for something so simple\n let chunksPerSection = this.getDims()[1]\n let sectionI = Math.floor(index / chunksPerSection)\n let chunkI = index % chunksPerSection\n let sectionConfig = this.props.sections[sectionI]\n\n return sectionConfig && sectionConfig.chunks[chunkI]\n }\n\n forceScrollLeft(col: number, scrollLeft: number) {\n let scrollSyncer = this.scrollSyncersByColumn[col]\n\n if (scrollSyncer) {\n scrollSyncer.forceScrollLeft(scrollLeft)\n }\n }\n\n forceScrollTop(sectionI: number, scrollTop: number) {\n let scrollSyncer = this.scrollSyncersBySection[sectionI]\n\n if (scrollSyncer) {\n scrollSyncer.forceScrollTop(scrollTop)\n }\n }\n\n _handleChunkEl(chunkEl: HTMLTableCellElement | null, key: string) {\n let chunkConfig = this.getChunkConfigByIndex(parseInt(key, 10))\n\n if (chunkConfig) { // null if section disappeared. bad, b/c won't null-set the elRef\n setRef(chunkConfig.elRef, chunkEl)\n }\n }\n\n _handleScrollerEl(scrollerEl: HTMLElement | null, key: string) {\n let chunkConfig = this.getChunkConfigByIndex(parseInt(key, 10))\n\n if (chunkConfig) { // null if section disappeared. bad, b/c won't null-set the elRef\n setRef(chunkConfig.scrollerElRef, scrollerEl)\n }\n }\n\n getDims() {\n let sectionCnt = this.props.sections.length\n let chunksPerSection = sectionCnt ? this.props.sections[0].chunks.length : 0\n\n return [sectionCnt, chunksPerSection]\n }\n}\n\nScrollGrid.addStateEquality({\n shrinkWidths: isArraysEqual,\n scrollerClientWidths: isPropsEqual,\n scrollerClientHeights: isPropsEqual,\n})\n\nfunction sumNumbers(numbers: number[]) { // TODO: general util\n let sum = 0\n\n for (let n of numbers) {\n sum += n\n }\n\n return sum\n}\n\nfunction getRowInnerMaxHeight(rowEl: HTMLElement) {\n let innerHeights = findElements(rowEl, '.fc-scrollgrid-sync-inner').map(getElHeight)\n\n if (innerHeights.length) {\n return Math.max(...innerHeights)\n }\n\n return 0\n}\n\nfunction getElHeight(el: HTMLElement) {\n return el.offsetHeight // better to deal with integers, for rounding, for PureComponent\n}\n\nfunction renderMacroColGroup(colGroupStats: ColGroupStat[], shrinkWidths: number[]) {\n let children = colGroupStats.map((colGroupStat, i) => {\n let width = colGroupStat.width\n\n if (width === 'shrink') {\n width = colGroupStat.totalColWidth + sanitizeShrinkWidth(shrinkWidths[i]) + 1 // +1 for border :(\n }\n\n return ( // eslint-disable-next-line react/jsx-key\n <col style={{ width }} />\n )\n })\n\n return createElement('colgroup', {}, ...children)\n}\n\nfunction compileColGroupStat(colGroupConfig: ColGroupConfig): ColGroupStat {\n let totalColWidth = sumColProp(colGroupConfig.cols, 'width') // excludes \"shrink\"\n let totalColMinWidth = sumColProp(colGroupConfig.cols, 'minWidth')\n let hasShrinkCol = hasShrinkWidth(colGroupConfig.cols)\n let allowXScrolling = colGroupConfig.width !== 'shrink' && Boolean(totalColWidth || totalColMinWidth || hasShrinkCol)\n\n return {\n hasShrinkCol,\n totalColWidth,\n totalColMinWidth,\n allowXScrolling,\n cols: colGroupConfig.cols,\n width: colGroupConfig.width,\n }\n}\n\nfunction sumColProp(cols: ColProps[], propName: string) {\n let total = 0\n\n for (let col of cols) {\n let val = col[propName]\n\n if (typeof val === 'number') {\n total += val * (col.span || 1)\n }\n }\n\n return total\n}\n\nconst COL_GROUP_STAT_EQUALITY = {\n cols: isColPropsEqual,\n}\n\nfunction isColGroupStatsEqual(stat0: ColGroupStat, stat1: ColGroupStat): boolean {\n return compareObjs(stat0, stat1, COL_GROUP_STAT_EQUALITY)\n}\n\n// for memoizers...\n\nfunction initScrollSyncer(isVertical: boolean, ...scrollEls: HTMLElement[]) {\n return new ScrollSyncer(isVertical, scrollEls)\n}\n\nfunction destroyScrollSyncer(scrollSyncer: ScrollSyncer) {\n scrollSyncer.destroy()\n}\n\nfunction initStickyScrolling(scrollEl: HTMLElement, isRtl: boolean) {\n return new StickyScrolling(scrollEl, isRtl)\n}\n\nfunction destroyStickyScrolling(stickyScrolling: StickyScrolling) {\n stickyScrolling.destroy()\n}\n","import { createPlugin, config } from '@fullcalendar/common'\n\nimport premiumCommonPlugin from '@fullcalendar/premium-common' // eslint-disable-line import/no-duplicates\n// ensure ambient declarations\nimport '@fullcalendar/premium-common' // eslint-disable-line import/no-duplicates\n\nimport { ScrollGrid } from './ScrollGrid'\n\nexport { ScrollGrid }\nexport { setScrollFromLeftEdge } from './scroll-left-norm'\n\nexport default createPlugin({\n deps: [\n premiumCommonPlugin,\n ],\n scrollGridImpl: ScrollGrid,\n})\n\nconfig.SCROLLGRID_RESIZE_INTERVAL = 500\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@fullcalendar/scrollgrid",
3
- "version": "5.11.0",
3
+ "version": "5.11.2",
4
4
  "title": "FullCalendar ScrollGrid Plugin",
5
5
  "description": "Tabular data chunked into scrollable panes",
6
6
  "docs": "https://fullcalendar.io/docs/scheduler",
7
7
  "dependencies": {
8
- "@fullcalendar/common": "~5.11.0",
9
- "@fullcalendar/premium-common": "~5.11.0",
8
+ "@fullcalendar/common": "~5.11.2",
9
+ "@fullcalendar/premium-common": "~5.11.2",
10
10
  "tslib": "^2.1.0"
11
11
  },
12
12
  "main": "main.cjs.js",
@@ -28,6 +28,6 @@
28
28
  "url": "http://arshaw.com/"
29
29
  },
30
30
  "devDependencies": {
31
- "@fullcalendar/core-preact": "5.11.0"
31
+ "@fullcalendar/core-preact": "5.11.2"
32
32
  }
33
33
  }