@fullcalendar/scrollgrid 6.0.1 → 6.0.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/index.cjs CHANGED
@@ -14,7 +14,7 @@ var premiumCommonPlugin__default = /*#__PURE__*/_interopDefaultLegacy(premiumCom
14
14
 
15
15
  var index = index_cjs.createPlugin({
16
16
  name: '@fullcalendar/scrollgrid',
17
- premiumReleaseDate: '2022-12-20',
17
+ premiumReleaseDate: '2022-12-27',
18
18
  deps: [premiumCommonPlugin__default["default"]],
19
19
  scrollGridImpl: internalCommon.ScrollGrid,
20
20
  });
package/index.global.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- FullCalendar ScrollGrid Plugin v6.0.1
2
+ FullCalendar ScrollGrid Plugin v6.0.2
3
3
  Docs & License: https://fullcalendar.io/docs/premium
4
4
  (c) 2022 Adam Shaw
5
5
  */
@@ -838,7 +838,7 @@ FullCalendar.ScrollGrid = (function (exports, core, premiumCommonPlugin, interna
838
838
 
839
839
  var plugin = core.createPlugin({
840
840
  name: '@fullcalendar/scrollgrid',
841
- premiumReleaseDate: '2022-12-20',
841
+ premiumReleaseDate: '2022-12-27',
842
842
  deps: [premiumCommonPlugin__default["default"]],
843
843
  scrollGridImpl: ScrollGrid,
844
844
  });
@@ -1,6 +1,6 @@
1
1
  /*!
2
- FullCalendar ScrollGrid Plugin v6.0.1
2
+ FullCalendar ScrollGrid Plugin v6.0.2
3
3
  Docs & License: https://fullcalendar.io/docs/premium
4
4
  (c) 2022 Adam Shaw
5
5
  */
6
- FullCalendar.ScrollGrid=function(e,t,l,s,i){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=r(l);function n(e){let t=e.scrollLeft;if("rtl"===window.getComputedStyle(e).direction)switch(a()){case"negative":t*=-1;case"reverse":t=e.scrollWidth-t-e.clientWidth}return t}function h(e,t){if("rtl"===window.getComputedStyle(e).direction)switch(a()){case"reverse":t=e.scrollWidth-t;break;case"negative":t=-(e.scrollWidth-t)}e.scrollLeft=t}let c;function a(){return c||(c=function(){let e,t=document.createElement("div");t.style.position="absolute",t.style.top="-1000px",t.style.width="1px",t.style.height="1px",t.style.overflow="scroll",t.style.direction="rtl",t.style.fontSize="100px",t.innerHTML="A",document.body.appendChild(t),t.scrollLeft>0?e="positive":(t.scrollLeft=1,e=t.scrollLeft>0?"reverse":"negative");return s.removeElement(t),e}())}class d{constructor(e,t){this.scrollEl=e,this.isRtl=t,this.updateSize=()=>{let{scrollEl:e}=this,t=s.findElements(e,".fc-sticky");!function(e,t,l){e.forEach((e,i)=>{let r,{textAlign:o,elWidth:n,parentBound:h}=t[i],c=h.right-h.left;r="center"===o&&c>l?(l-n)/2:"",s.applyStyle(e,{left:r,right:r,top:0})})}(t,this.queryElGeoms(t),e.clientWidth)}}queryElGeoms(e){let{scrollEl:t,isRtl:l}=this,i=function(e){let t=e.getBoundingClientRect(),l=s.computeEdges(e);return{left:t.left+l.borderLeft+l.scrollbarLeft-n(e),top:t.top+l.borderTop-e.scrollTop}}(t),r=[];for(let t of e){let e=s.translateRect(s.computeInnerRect(t.parentNode,!0,!0),-i.left,-i.top),o=t.getBoundingClientRect(),n=window.getComputedStyle(t),h=window.getComputedStyle(t.parentNode).textAlign,c=null;"start"===h?h=l?"right":"left":"end"===h&&(h=l?"left":"right"),"sticky"!==n.position&&(c=s.translateRect(o,-i.left-(parseFloat(n.left)||0),-i.top-(parseFloat(n.top)||0))),r.push({parentBound:e,naturalBound:c,elWidth:o.width,elHeight:o.height,textAlign:h})}return r}}class u extends s.BaseComponent{constructor(){super(...arguments),this.elRef=i.createRef(),this.state={xScrollbarWidth:0,yScrollbarWidth:0},this.handleScroller=e=>{this.scroller=e,s.setRef(this.props.scrollerRef,e)},this.handleSizing=()=>{let{props:e}=this;"scroll-hidden"===e.overflowY&&this.setState({yScrollbarWidth:this.scroller.getYScrollbarWidth()}),"scroll-hidden"===e.overflowX&&this.setState({xScrollbarWidth:this.scroller.getXScrollbarWidth()})}}render(){let{props:e,state:t,context:l}=this,r=l.isRtl&&s.getIsRtlScrollbarOnLeft(),o=0,n=0,h=0;return"scroll-hidden"===e.overflowX&&(h=t.xScrollbarWidth),"scroll-hidden"===e.overflowY&&null!=t.yScrollbarWidth&&(r?o=t.yScrollbarWidth:n=t.yScrollbarWidth),i.createElement("div",{ref:this.elRef,className:"fc-scroller-harness"+(e.liquid?" fc-scroller-harness-liquid":"")},i.createElement(s.Scroller,{ref:this.handleScroller,elRef:this.props.scrollerElRef,overflowX:"scroll-hidden"===e.overflowX?"scroll":e.overflowX,overflowY:"scroll-hidden"===e.overflowY?"scroll":e.overflowY,overcomeLeft:o,overcomeRight:n,overcomeBottom:h,maxHeight:"number"==typeof e.maxHeight?e.maxHeight+("scroll-hidden"===e.overflowX?t.xScrollbarWidth:0):"",liquid:e.liquid,liquidIsAbsolute:!0},e.children))}componentDidMount(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(e){s.isPropsEqual(e,this.props)||this.handleSizing()}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}needsXScrolling(){return this.scroller.needsXScrolling()}needsYScrolling(){return this.scroller.needsYScrolling()}}const f="wheel mousewheel DomMouseScroll MozMousePixelScroll".split(" ");class g{constructor(e){this.el=e,this.emitter=new s.Emitter,this.isScrolling=!1,this.isTouching=!1,this.isRecentlyWheeled=!1,this.isRecentlyScrolled=!1,this.wheelWaiter=new s.DelayedRunner(this._handleWheelWaited.bind(this)),this.scrollWaiter=new s.DelayedRunner(this._handleScrollWaited.bind(this)),this.handleScroll=()=>{this.startScroll(),this.emitter.trigger("scroll",this.isRecentlyWheeled,this.isTouching),this.isRecentlyScrolled=!0,this.scrollWaiter.request(500)},this.handleWheel=()=>{this.isRecentlyWheeled=!0,this.wheelWaiter.request(500)},this.handleTouchStart=()=>{this.isTouching=!0},this.handleTouchEnd=()=>{this.isTouching=!1,this.isRecentlyScrolled||this.endScroll()},e.addEventListener("scroll",this.handleScroll),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.addEventListener("touchend",this.handleTouchEnd);for(let t of f)e.addEventListener(t,this.handleWheel)}destroy(){let{el:e}=this;e.removeEventListener("scroll",this.handleScroll),e.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.removeEventListener("touchend",this.handleTouchEnd);for(let t of f)e.removeEventListener(t,this.handleWheel)}startScroll(){this.isScrolling||(this.isScrolling=!0,this.emitter.trigger("scrollStart",this.isRecentlyWheeled,this.isTouching))}endScroll(){this.isScrolling&&(this.emitter.trigger("scrollEnd"),this.isScrolling=!1,this.isRecentlyScrolled=!0,this.isRecentlyWheeled=!1,this.scrollWaiter.clear(),this.wheelWaiter.clear())}_handleScrollWaited(){this.isRecentlyScrolled=!1,this.isTouching||this.endScroll()}_handleWheelWaited(){this.isRecentlyWheeled=!1}}class p{constructor(e,t){this.isVertical=e,this.scrollEls=t,this.isPaused=!1,this.scrollListeners=t.map(e=>this.bindScroller(e))}destroy(){for(let e of this.scrollListeners)e.destroy()}bindScroller(e){let{scrollEls:t,isVertical:l}=this,s=new g(e);return s.emitter.on("scroll",(s,i)=>{if(!this.isPaused&&((!this.masterEl||this.masterEl!==e&&(s||i))&&this.assignMaster(e),this.masterEl===e))for(let s of t)s!==e&&(l?s.scrollTop=e.scrollTop:s.scrollLeft=e.scrollLeft)}),s.emitter.on("scrollEnd",()=>{this.masterEl===e&&(this.masterEl=null)}),s}assignMaster(e){this.masterEl=e;for(let t of this.scrollListeners)t.el!==e&&t.endScroll()}forceScrollLeft(e){this.isPaused=!0;for(let t of this.scrollListeners)h(t.el,e);this.isPaused=!1}forceScrollTop(e){this.isPaused=!0;for(let t of this.scrollListeners)t.el.scrollTop=e;this.isPaused=!1}}s.config.SCROLLGRID_RESIZE_INTERVAL=500;class S extends s.BaseComponent{constructor(){super(...arguments),this.compileColGroupStats=s.memoizeArraylike(w,W),this.renderMicroColGroups=s.memoizeArraylike(s.renderMicroColGroup),this.clippedScrollerRefs=new s.RefMap,this.scrollerElRefs=new s.RefMap(this._handleScrollerEl.bind(this)),this.chunkElRefs=new s.RefMap(this._handleChunkEl.bind(this)),this.scrollSyncersBySection={},this.scrollSyncersByColumn={},this.rowUnstableMap=new Map,this.rowInnerMaxHeightMap=new Map,this.anyRowHeightsChanged=!1,this.recentSizingCnt=0,this.state={shrinkWidths:[],forceYScrollbars:!1,forceXScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{},sectionRowMaxHeights:[]},this.handleSizing=(e,t)=>{if(!this.allowSizing())return;t||(this.anyRowHeightsChanged=!0);let l={};(e||!t&&!this.rowUnstableMap.size)&&(l.sectionRowMaxHeights=this.computeSectionRowMaxHeights()),this.setState(Object.assign(Object.assign({shrinkWidths:this.computeShrinkWidths()},this.computeScrollerDims()),l),()=>{this.rowUnstableMap.size||this.updateStickyScrolling()})},this.handleRowHeightChange=(e,t)=>{let{rowUnstableMap:l,rowInnerMaxHeightMap:s}=this;if(t){l.delete(e);let t=y(e);s.has(e)&&s.get(e)===t||(s.set(e,t),this.anyRowHeightsChanged=!0),!l.size&&this.anyRowHeightsChanged&&(this.anyRowHeightsChanged=!1,this.setState({sectionRowMaxHeights:this.computeSectionRowMaxHeights()}))}else l.set(e,!0)}}render(){let{props:e,state:t,context:l}=this,{shrinkWidths:r}=t,o=this.compileColGroupStats(e.colGroups.map(e=>[e])),n=this.renderMicroColGroups(o.map((e,t)=>[e.cols,r[t]])),h=s.getScrollGridClassNames(e.liquid,l);this.getDims();let c,a=e.sections,d=a.length,u=0,f=[],g=[],p=[];for(;u<d&&"header"===(c=a[u]).type;)f.push(this.renderSection(c,u,o,n,t.sectionRowMaxHeights,!0)),u+=1;for(;u<d&&"body"===(c=a[u]).type;)g.push(this.renderSection(c,u,o,n,t.sectionRowMaxHeights,!1)),u+=1;for(;u<d&&"footer"===(c=a[u]).type;)p.push(this.renderSection(c,u,o,n,t.sectionRowMaxHeights,!0)),u+=1;const S=!s.getCanVGrowWithinCell(),m={role:"rowgroup"};return i.createElement("table",{ref:e.elRef,role:"grid",className:h.join(" ")},function(e,t){let l=e.map((e,l)=>{let r=e.width;return"shrink"===r&&(r=e.totalColWidth+s.sanitizeShrinkWidth(t[l])+1),i.createElement("col",{style:{width:r}})});return i.createElement("colgroup",{},...l)}(o,r),Boolean(!S&&f.length)&&i.createElement("thead",m,...f),Boolean(!S&&g.length)&&i.createElement("tbody",m,...g),Boolean(!S&&p.length)&&i.createElement("tfoot",m,...p),S&&i.createElement("tbody",m,...f,...g,...p))}renderSection(e,t,l,r,o,n){return"outerContent"in e?i.createElement(i.Fragment,{key:e.key},e.outerContent):i.createElement("tr",{key:e.key,role:"presentation",className:s.getSectionClassNames(e,this.props.liquid).join(" ")},e.chunks.map((s,i)=>this.renderChunk(e,t,l[i],r[i],s,i,(o[t]||[])[i]||[],n)))}renderChunk(e,t,l,r,o,n,h,c){if("outerContent"in o)return i.createElement(i.Fragment,{key:o.key},o.outerContent);let{state:a}=this,{scrollerClientWidths:d,scrollerClientHeights:f}=a,[g,p]=this.getDims(),S=t*p+n,m=n===(!this.context.isRtl||s.getIsRtlScrollbarOnLeft()?p-1:0),y=t===g-1,R=y&&a.forceXScrollbars,w=m&&a.forceYScrollbars,C=l&&l.allowXScrolling,E=s.getAllowYScrolling(this.props,e),W=s.getSectionHasLiquidHeight(this.props,e),b=e.expandRows&&W,M=l&&l.totalColMinWidth||"",k=s.renderChunkContent(e,o,{tableColGroupNode:r,tableMinWidth:M,clientWidth:void 0!==d[S]?d[S]:null,clientHeight:void 0!==f[S]?f[S]:null,expandRows:b,syncRowHeights:Boolean(e.syncRowHeights),rowSyncHeights:h,reportRowHeightChange:this.handleRowHeightChange},c),v=R?y?"scroll":"scroll-hidden":C?y?"auto":"scroll-hidden":"hidden",x=w?m?"scroll":"scroll-hidden":E?m?"auto":"scroll-hidden":"hidden";return k=i.createElement(u,{ref:this.clippedScrollerRefs.createRef(S),scrollerElRef:this.scrollerElRefs.createRef(S),overflowX:v,overflowY:x,liquid:W,maxHeight:e.maxHeight},k),i.createElement(c?"th":"td",{key:o.key,ref:this.chunkElRefs.createRef(S),role:"presentation"},k)}componentDidMount(){this.getStickyScrolling=s.memoizeArraylike(k),this.getScrollSyncersBySection=s.memoizeHashlike(b.bind(this,!0),null,M),this.getScrollSyncersByColumn=s.memoizeHashlike(b.bind(this,!1),null,M),this.updateScrollSyncers(),this.handleSizing(!1),this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(e,t){this.updateScrollSyncers(),this.handleSizing(!1,t.sectionRowMaxHeights!==this.state.sectionRowMaxHeights)}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing),this.destroyScrollSyncers()}allowSizing(){let e=new Date;return!this.lastSizingDate||e.valueOf()>this.lastSizingDate.valueOf()+s.config.SCROLLGRID_RESIZE_INTERVAL?(this.lastSizingDate=e,this.recentSizingCnt=0,!0):(this.recentSizingCnt+=1)<=10}computeShrinkWidths(){let e=this.compileColGroupStats(this.props.colGroups.map(e=>[e])),[t,l]=this.getDims(),i=t*l,r=[];return e.forEach((e,t)=>{if(e.hasShrinkCol){let e=this.chunkElRefs.collect(t,i,l);r[t]=s.computeShrinkWidth(e)}}),r}computeSectionRowMaxHeights(){let e=new Map,[t,l]=this.getDims(),i=[];for(let r=0;r<t;r+=1){let t=this.props.sections[r],o=[];if(t&&t.syncRowHeights){let i=[];for(let t=0;t<l;t+=1){let o=r*l+t,n=[],h=this.chunkElRefs.currentMap[o];n=h?s.findElements(h,".fc-scrollgrid-sync-table tr").map(t=>{let l=y(t);return e.set(t,l),l}):[],i.push(n)}let n=i[0].length,h=!0;for(let e=1;e<l;e+=1){if(!(t.chunks[e]&&void 0!==t.chunks[e].outerContent)&&i[e].length!==n){h=!1;break}}if(h){for(let e=0;e<l;e+=1)o.push([]);for(let e=0;e<n;e+=1){let t=[];for(let s=0;s<l;s+=1){let l=i[s][e];null!=l&&t.push(l)}let s=Math.max(...t);for(let e=0;e<l;e+=1)o[e].push(s)}}else{let e=[];for(let t=0;t<l;t+=1)e.push(m(i[t])+i[t].length);let t=Math.max(...e);for(let e=0;e<l;e+=1){let l=i[e].length,s=t-l,r=Math.floor(s/l),n=s-r*(l-1),h=[],c=0;for(c<l&&(h.push(n),c+=1);c<l;)h.push(r),c+=1;o.push(h)}}}i.push(o)}return this.rowInnerMaxHeightMap=e,i}computeScrollerDims(){let e=s.getScrollbarWidths(),[t,l]=this.getDims(),i=!this.context.isRtl||s.getIsRtlScrollbarOnLeft()?l-1:0,r=t-1,o=this.clippedScrollerRefs.currentMap,n=this.scrollerElRefs.currentMap,h=!1,c=!1,a={},d={};for(let e=0;e<t;e+=1){let t=o[e*l+i];if(t&&t.needsYScrolling()){h=!0;break}}for(let e=0;e<l;e+=1){let t=o[r*l+e];if(t&&t.needsXScrolling()){c=!0;break}}for(let s=0;s<t;s+=1)for(let t=0;t<l;t+=1){let o=s*l+t,u=n[o];if(u){let l=u.parentNode;a[o]=Math.floor(l.getBoundingClientRect().width-(t===i&&h?e.y:0)),d[o]=Math.floor(l.getBoundingClientRect().height-(s===r&&c?e.x:0))}}return{forceYScrollbars:h,forceXScrollbars:c,scrollerClientWidths:a,scrollerClientHeights:d}}updateStickyScrolling(){let{isRtl:e}=this.context,t=this.scrollerElRefs.getAll().map(t=>[t,e]);this.getStickyScrolling(t).forEach(e=>e.updateSize())}updateScrollSyncers(){let[e,t]=this.getDims(),l=e*t,i={},r={},o=this.scrollerElRefs.currentMap;for(let l=0;l<e;l+=1){let e=l*t,r=e+t;i[l]=s.collectFromHash(o,e,r,1)}for(let e=0;e<t;e+=1)r[e]=this.scrollerElRefs.collect(e,l,t);this.scrollSyncersBySection=this.getScrollSyncersBySection(i),this.scrollSyncersByColumn=this.getScrollSyncersByColumn(r)}destroyScrollSyncers(){s.mapHash(this.scrollSyncersBySection,M),s.mapHash(this.scrollSyncersByColumn,M)}getChunkConfigByIndex(e){let t=this.getDims()[1],l=Math.floor(e/t),s=e%t,i=this.props.sections[l];return i&&i.chunks[s]}forceScrollLeft(e,t){let l=this.scrollSyncersByColumn[e];l&&l.forceScrollLeft(t)}forceScrollTop(e,t){let l=this.scrollSyncersBySection[e];l&&l.forceScrollTop(t)}_handleChunkEl(e,t){let l=this.getChunkConfigByIndex(parseInt(t,10));l&&s.setRef(l.elRef,e)}_handleScrollerEl(e,t){let l=this.getChunkConfigByIndex(parseInt(t,10));l&&s.setRef(l.scrollerElRef,e)}getDims(){let e=this.props.sections.length;return[e,e?this.props.sections[0].chunks.length:0]}}function m(e){let t=0;for(let l of e)t+=l;return t}function y(e){let t=s.findElements(e,".fc-scrollgrid-sync-inner").map(R);return t.length?Math.max(...t):0}function R(e){return e.offsetHeight}function w(e){let t=C(e.cols,"width"),l=C(e.cols,"minWidth"),i=s.hasShrinkWidth(e.cols);return{hasShrinkCol:i,totalColWidth:t,totalColMinWidth:l,allowXScrolling:"shrink"!==e.width&&Boolean(t||l||i),cols:e.cols,width:e.width}}function C(e,t){let l=0;for(let s of e){let e=s[t];"number"==typeof e&&(l+=e*(s.span||1))}return l}S.addStateEquality({shrinkWidths:s.isArraysEqual,scrollerClientWidths:s.isPropsEqual,scrollerClientHeights:s.isPropsEqual});const E={cols:s.isColPropsEqual};function W(e,t){return s.compareObjs(e,t,E)}function b(e,...t){return new p(e,t)}function M(e){e.destroy()}function k(e,t){return new d(e,t)}var v=t.createPlugin({name:"@fullcalendar/scrollgrid",premiumReleaseDate:"2022-12-20",deps:[o.default],scrollGridImpl:S}),x={__proto__:null,ScrollGrid:S};return t.globalPlugins.push(v),e.Internal=x,e.default=v,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.PremiumCommon,FullCalendar.Internal,FullCalendar.Preact);
6
+ FullCalendar.ScrollGrid=function(e,t,l,s,i){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=r(l);function n(e){let t=e.scrollLeft;if("rtl"===window.getComputedStyle(e).direction)switch(a()){case"negative":t*=-1;case"reverse":t=e.scrollWidth-t-e.clientWidth}return t}function h(e,t){if("rtl"===window.getComputedStyle(e).direction)switch(a()){case"reverse":t=e.scrollWidth-t;break;case"negative":t=-(e.scrollWidth-t)}e.scrollLeft=t}let c;function a(){return c||(c=function(){let e,t=document.createElement("div");t.style.position="absolute",t.style.top="-1000px",t.style.width="1px",t.style.height="1px",t.style.overflow="scroll",t.style.direction="rtl",t.style.fontSize="100px",t.innerHTML="A",document.body.appendChild(t),t.scrollLeft>0?e="positive":(t.scrollLeft=1,e=t.scrollLeft>0?"reverse":"negative");return s.removeElement(t),e}())}class d{constructor(e,t){this.scrollEl=e,this.isRtl=t,this.updateSize=()=>{let{scrollEl:e}=this,t=s.findElements(e,".fc-sticky");!function(e,t,l){e.forEach((e,i)=>{let r,{textAlign:o,elWidth:n,parentBound:h}=t[i],c=h.right-h.left;r="center"===o&&c>l?(l-n)/2:"",s.applyStyle(e,{left:r,right:r,top:0})})}(t,this.queryElGeoms(t),e.clientWidth)}}queryElGeoms(e){let{scrollEl:t,isRtl:l}=this,i=function(e){let t=e.getBoundingClientRect(),l=s.computeEdges(e);return{left:t.left+l.borderLeft+l.scrollbarLeft-n(e),top:t.top+l.borderTop-e.scrollTop}}(t),r=[];for(let t of e){let e=s.translateRect(s.computeInnerRect(t.parentNode,!0,!0),-i.left,-i.top),o=t.getBoundingClientRect(),n=window.getComputedStyle(t),h=window.getComputedStyle(t.parentNode).textAlign,c=null;"start"===h?h=l?"right":"left":"end"===h&&(h=l?"left":"right"),"sticky"!==n.position&&(c=s.translateRect(o,-i.left-(parseFloat(n.left)||0),-i.top-(parseFloat(n.top)||0))),r.push({parentBound:e,naturalBound:c,elWidth:o.width,elHeight:o.height,textAlign:h})}return r}}class u extends s.BaseComponent{constructor(){super(...arguments),this.elRef=i.createRef(),this.state={xScrollbarWidth:0,yScrollbarWidth:0},this.handleScroller=e=>{this.scroller=e,s.setRef(this.props.scrollerRef,e)},this.handleSizing=()=>{let{props:e}=this;"scroll-hidden"===e.overflowY&&this.setState({yScrollbarWidth:this.scroller.getYScrollbarWidth()}),"scroll-hidden"===e.overflowX&&this.setState({xScrollbarWidth:this.scroller.getXScrollbarWidth()})}}render(){let{props:e,state:t,context:l}=this,r=l.isRtl&&s.getIsRtlScrollbarOnLeft(),o=0,n=0,h=0;return"scroll-hidden"===e.overflowX&&(h=t.xScrollbarWidth),"scroll-hidden"===e.overflowY&&null!=t.yScrollbarWidth&&(r?o=t.yScrollbarWidth:n=t.yScrollbarWidth),i.createElement("div",{ref:this.elRef,className:"fc-scroller-harness"+(e.liquid?" fc-scroller-harness-liquid":"")},i.createElement(s.Scroller,{ref:this.handleScroller,elRef:this.props.scrollerElRef,overflowX:"scroll-hidden"===e.overflowX?"scroll":e.overflowX,overflowY:"scroll-hidden"===e.overflowY?"scroll":e.overflowY,overcomeLeft:o,overcomeRight:n,overcomeBottom:h,maxHeight:"number"==typeof e.maxHeight?e.maxHeight+("scroll-hidden"===e.overflowX?t.xScrollbarWidth:0):"",liquid:e.liquid,liquidIsAbsolute:!0},e.children))}componentDidMount(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(e){s.isPropsEqual(e,this.props)||this.handleSizing()}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}needsXScrolling(){return this.scroller.needsXScrolling()}needsYScrolling(){return this.scroller.needsYScrolling()}}const f="wheel mousewheel DomMouseScroll MozMousePixelScroll".split(" ");class g{constructor(e){this.el=e,this.emitter=new s.Emitter,this.isScrolling=!1,this.isTouching=!1,this.isRecentlyWheeled=!1,this.isRecentlyScrolled=!1,this.wheelWaiter=new s.DelayedRunner(this._handleWheelWaited.bind(this)),this.scrollWaiter=new s.DelayedRunner(this._handleScrollWaited.bind(this)),this.handleScroll=()=>{this.startScroll(),this.emitter.trigger("scroll",this.isRecentlyWheeled,this.isTouching),this.isRecentlyScrolled=!0,this.scrollWaiter.request(500)},this.handleWheel=()=>{this.isRecentlyWheeled=!0,this.wheelWaiter.request(500)},this.handleTouchStart=()=>{this.isTouching=!0},this.handleTouchEnd=()=>{this.isTouching=!1,this.isRecentlyScrolled||this.endScroll()},e.addEventListener("scroll",this.handleScroll),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.addEventListener("touchend",this.handleTouchEnd);for(let t of f)e.addEventListener(t,this.handleWheel)}destroy(){let{el:e}=this;e.removeEventListener("scroll",this.handleScroll),e.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.removeEventListener("touchend",this.handleTouchEnd);for(let t of f)e.removeEventListener(t,this.handleWheel)}startScroll(){this.isScrolling||(this.isScrolling=!0,this.emitter.trigger("scrollStart",this.isRecentlyWheeled,this.isTouching))}endScroll(){this.isScrolling&&(this.emitter.trigger("scrollEnd"),this.isScrolling=!1,this.isRecentlyScrolled=!0,this.isRecentlyWheeled=!1,this.scrollWaiter.clear(),this.wheelWaiter.clear())}_handleScrollWaited(){this.isRecentlyScrolled=!1,this.isTouching||this.endScroll()}_handleWheelWaited(){this.isRecentlyWheeled=!1}}class p{constructor(e,t){this.isVertical=e,this.scrollEls=t,this.isPaused=!1,this.scrollListeners=t.map(e=>this.bindScroller(e))}destroy(){for(let e of this.scrollListeners)e.destroy()}bindScroller(e){let{scrollEls:t,isVertical:l}=this,s=new g(e);return s.emitter.on("scroll",(s,i)=>{if(!this.isPaused&&((!this.masterEl||this.masterEl!==e&&(s||i))&&this.assignMaster(e),this.masterEl===e))for(let s of t)s!==e&&(l?s.scrollTop=e.scrollTop:s.scrollLeft=e.scrollLeft)}),s.emitter.on("scrollEnd",()=>{this.masterEl===e&&(this.masterEl=null)}),s}assignMaster(e){this.masterEl=e;for(let t of this.scrollListeners)t.el!==e&&t.endScroll()}forceScrollLeft(e){this.isPaused=!0;for(let t of this.scrollListeners)h(t.el,e);this.isPaused=!1}forceScrollTop(e){this.isPaused=!0;for(let t of this.scrollListeners)t.el.scrollTop=e;this.isPaused=!1}}s.config.SCROLLGRID_RESIZE_INTERVAL=500;class S extends s.BaseComponent{constructor(){super(...arguments),this.compileColGroupStats=s.memoizeArraylike(w,W),this.renderMicroColGroups=s.memoizeArraylike(s.renderMicroColGroup),this.clippedScrollerRefs=new s.RefMap,this.scrollerElRefs=new s.RefMap(this._handleScrollerEl.bind(this)),this.chunkElRefs=new s.RefMap(this._handleChunkEl.bind(this)),this.scrollSyncersBySection={},this.scrollSyncersByColumn={},this.rowUnstableMap=new Map,this.rowInnerMaxHeightMap=new Map,this.anyRowHeightsChanged=!1,this.recentSizingCnt=0,this.state={shrinkWidths:[],forceYScrollbars:!1,forceXScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{},sectionRowMaxHeights:[]},this.handleSizing=(e,t)=>{if(!this.allowSizing())return;t||(this.anyRowHeightsChanged=!0);let l={};(e||!t&&!this.rowUnstableMap.size)&&(l.sectionRowMaxHeights=this.computeSectionRowMaxHeights()),this.setState(Object.assign(Object.assign({shrinkWidths:this.computeShrinkWidths()},this.computeScrollerDims()),l),()=>{this.rowUnstableMap.size||this.updateStickyScrolling()})},this.handleRowHeightChange=(e,t)=>{let{rowUnstableMap:l,rowInnerMaxHeightMap:s}=this;if(t){l.delete(e);let t=y(e);s.has(e)&&s.get(e)===t||(s.set(e,t),this.anyRowHeightsChanged=!0),!l.size&&this.anyRowHeightsChanged&&(this.anyRowHeightsChanged=!1,this.setState({sectionRowMaxHeights:this.computeSectionRowMaxHeights()}))}else l.set(e,!0)}}render(){let{props:e,state:t,context:l}=this,{shrinkWidths:r}=t,o=this.compileColGroupStats(e.colGroups.map(e=>[e])),n=this.renderMicroColGroups(o.map((e,t)=>[e.cols,r[t]])),h=s.getScrollGridClassNames(e.liquid,l);this.getDims();let c,a=e.sections,d=a.length,u=0,f=[],g=[],p=[];for(;u<d&&"header"===(c=a[u]).type;)f.push(this.renderSection(c,u,o,n,t.sectionRowMaxHeights,!0)),u+=1;for(;u<d&&"body"===(c=a[u]).type;)g.push(this.renderSection(c,u,o,n,t.sectionRowMaxHeights,!1)),u+=1;for(;u<d&&"footer"===(c=a[u]).type;)p.push(this.renderSection(c,u,o,n,t.sectionRowMaxHeights,!0)),u+=1;const S=!s.getCanVGrowWithinCell(),m={role:"rowgroup"};return i.createElement("table",{ref:e.elRef,role:"grid",className:h.join(" ")},function(e,t){let l=e.map((e,l)=>{let r=e.width;return"shrink"===r&&(r=e.totalColWidth+s.sanitizeShrinkWidth(t[l])+1),i.createElement("col",{style:{width:r}})});return i.createElement("colgroup",{},...l)}(o,r),Boolean(!S&&f.length)&&i.createElement("thead",m,...f),Boolean(!S&&g.length)&&i.createElement("tbody",m,...g),Boolean(!S&&p.length)&&i.createElement("tfoot",m,...p),S&&i.createElement("tbody",m,...f,...g,...p))}renderSection(e,t,l,r,o,n){return"outerContent"in e?i.createElement(i.Fragment,{key:e.key},e.outerContent):i.createElement("tr",{key:e.key,role:"presentation",className:s.getSectionClassNames(e,this.props.liquid).join(" ")},e.chunks.map((s,i)=>this.renderChunk(e,t,l[i],r[i],s,i,(o[t]||[])[i]||[],n)))}renderChunk(e,t,l,r,o,n,h,c){if("outerContent"in o)return i.createElement(i.Fragment,{key:o.key},o.outerContent);let{state:a}=this,{scrollerClientWidths:d,scrollerClientHeights:f}=a,[g,p]=this.getDims(),S=t*p+n,m=n===(!this.context.isRtl||s.getIsRtlScrollbarOnLeft()?p-1:0),y=t===g-1,R=y&&a.forceXScrollbars,w=m&&a.forceYScrollbars,C=l&&l.allowXScrolling,E=s.getAllowYScrolling(this.props,e),W=s.getSectionHasLiquidHeight(this.props,e),b=e.expandRows&&W,M=l&&l.totalColMinWidth||"",k=s.renderChunkContent(e,o,{tableColGroupNode:r,tableMinWidth:M,clientWidth:void 0!==d[S]?d[S]:null,clientHeight:void 0!==f[S]?f[S]:null,expandRows:b,syncRowHeights:Boolean(e.syncRowHeights),rowSyncHeights:h,reportRowHeightChange:this.handleRowHeightChange},c),v=R?y?"scroll":"scroll-hidden":C?y?"auto":"scroll-hidden":"hidden",x=w?m?"scroll":"scroll-hidden":E?m?"auto":"scroll-hidden":"hidden";return k=i.createElement(u,{ref:this.clippedScrollerRefs.createRef(S),scrollerElRef:this.scrollerElRefs.createRef(S),overflowX:v,overflowY:x,liquid:W,maxHeight:e.maxHeight},k),i.createElement(c?"th":"td",{key:o.key,ref:this.chunkElRefs.createRef(S),role:"presentation"},k)}componentDidMount(){this.getStickyScrolling=s.memoizeArraylike(k),this.getScrollSyncersBySection=s.memoizeHashlike(b.bind(this,!0),null,M),this.getScrollSyncersByColumn=s.memoizeHashlike(b.bind(this,!1),null,M),this.updateScrollSyncers(),this.handleSizing(!1),this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(e,t){this.updateScrollSyncers(),this.handleSizing(!1,t.sectionRowMaxHeights!==this.state.sectionRowMaxHeights)}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing),this.destroyScrollSyncers()}allowSizing(){let e=new Date;return!this.lastSizingDate||e.valueOf()>this.lastSizingDate.valueOf()+s.config.SCROLLGRID_RESIZE_INTERVAL?(this.lastSizingDate=e,this.recentSizingCnt=0,!0):(this.recentSizingCnt+=1)<=10}computeShrinkWidths(){let e=this.compileColGroupStats(this.props.colGroups.map(e=>[e])),[t,l]=this.getDims(),i=t*l,r=[];return e.forEach((e,t)=>{if(e.hasShrinkCol){let e=this.chunkElRefs.collect(t,i,l);r[t]=s.computeShrinkWidth(e)}}),r}computeSectionRowMaxHeights(){let e=new Map,[t,l]=this.getDims(),i=[];for(let r=0;r<t;r+=1){let t=this.props.sections[r],o=[];if(t&&t.syncRowHeights){let i=[];for(let t=0;t<l;t+=1){let o=r*l+t,n=[],h=this.chunkElRefs.currentMap[o];n=h?s.findElements(h,".fc-scrollgrid-sync-table tr").map(t=>{let l=y(t);return e.set(t,l),l}):[],i.push(n)}let n=i[0].length,h=!0;for(let e=1;e<l;e+=1){if(!(t.chunks[e]&&void 0!==t.chunks[e].outerContent)&&i[e].length!==n){h=!1;break}}if(h){for(let e=0;e<l;e+=1)o.push([]);for(let e=0;e<n;e+=1){let t=[];for(let s=0;s<l;s+=1){let l=i[s][e];null!=l&&t.push(l)}let s=Math.max(...t);for(let e=0;e<l;e+=1)o[e].push(s)}}else{let e=[];for(let t=0;t<l;t+=1)e.push(m(i[t])+i[t].length);let t=Math.max(...e);for(let e=0;e<l;e+=1){let l=i[e].length,s=t-l,r=Math.floor(s/l),n=s-r*(l-1),h=[],c=0;for(c<l&&(h.push(n),c+=1);c<l;)h.push(r),c+=1;o.push(h)}}}i.push(o)}return this.rowInnerMaxHeightMap=e,i}computeScrollerDims(){let e=s.getScrollbarWidths(),[t,l]=this.getDims(),i=!this.context.isRtl||s.getIsRtlScrollbarOnLeft()?l-1:0,r=t-1,o=this.clippedScrollerRefs.currentMap,n=this.scrollerElRefs.currentMap,h=!1,c=!1,a={},d={};for(let e=0;e<t;e+=1){let t=o[e*l+i];if(t&&t.needsYScrolling()){h=!0;break}}for(let e=0;e<l;e+=1){let t=o[r*l+e];if(t&&t.needsXScrolling()){c=!0;break}}for(let s=0;s<t;s+=1)for(let t=0;t<l;t+=1){let o=s*l+t,u=n[o];if(u){let l=u.parentNode;a[o]=Math.floor(l.getBoundingClientRect().width-(t===i&&h?e.y:0)),d[o]=Math.floor(l.getBoundingClientRect().height-(s===r&&c?e.x:0))}}return{forceYScrollbars:h,forceXScrollbars:c,scrollerClientWidths:a,scrollerClientHeights:d}}updateStickyScrolling(){let{isRtl:e}=this.context,t=this.scrollerElRefs.getAll().map(t=>[t,e]);this.getStickyScrolling(t).forEach(e=>e.updateSize())}updateScrollSyncers(){let[e,t]=this.getDims(),l=e*t,i={},r={},o=this.scrollerElRefs.currentMap;for(let l=0;l<e;l+=1){let e=l*t,r=e+t;i[l]=s.collectFromHash(o,e,r,1)}for(let e=0;e<t;e+=1)r[e]=this.scrollerElRefs.collect(e,l,t);this.scrollSyncersBySection=this.getScrollSyncersBySection(i),this.scrollSyncersByColumn=this.getScrollSyncersByColumn(r)}destroyScrollSyncers(){s.mapHash(this.scrollSyncersBySection,M),s.mapHash(this.scrollSyncersByColumn,M)}getChunkConfigByIndex(e){let t=this.getDims()[1],l=Math.floor(e/t),s=e%t,i=this.props.sections[l];return i&&i.chunks[s]}forceScrollLeft(e,t){let l=this.scrollSyncersByColumn[e];l&&l.forceScrollLeft(t)}forceScrollTop(e,t){let l=this.scrollSyncersBySection[e];l&&l.forceScrollTop(t)}_handleChunkEl(e,t){let l=this.getChunkConfigByIndex(parseInt(t,10));l&&s.setRef(l.elRef,e)}_handleScrollerEl(e,t){let l=this.getChunkConfigByIndex(parseInt(t,10));l&&s.setRef(l.scrollerElRef,e)}getDims(){let e=this.props.sections.length;return[e,e?this.props.sections[0].chunks.length:0]}}function m(e){let t=0;for(let l of e)t+=l;return t}function y(e){let t=s.findElements(e,".fc-scrollgrid-sync-inner").map(R);return t.length?Math.max(...t):0}function R(e){return e.offsetHeight}function w(e){let t=C(e.cols,"width"),l=C(e.cols,"minWidth"),i=s.hasShrinkWidth(e.cols);return{hasShrinkCol:i,totalColWidth:t,totalColMinWidth:l,allowXScrolling:"shrink"!==e.width&&Boolean(t||l||i),cols:e.cols,width:e.width}}function C(e,t){let l=0;for(let s of e){let e=s[t];"number"==typeof e&&(l+=e*(s.span||1))}return l}S.addStateEquality({shrinkWidths:s.isArraysEqual,scrollerClientWidths:s.isPropsEqual,scrollerClientHeights:s.isPropsEqual});const E={cols:s.isColPropsEqual};function W(e,t){return s.compareObjs(e,t,E)}function b(e,...t){return new p(e,t)}function M(e){e.destroy()}function k(e,t){return new d(e,t)}var v=t.createPlugin({name:"@fullcalendar/scrollgrid",premiumReleaseDate:"2022-12-27",deps:[o.default],scrollGridImpl:S}),x={__proto__:null,ScrollGrid:S};return t.globalPlugins.push(v),e.Internal=x,e.default=v,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.PremiumCommon,FullCalendar.Internal,FullCalendar.Preact);
package/index.js CHANGED
@@ -6,7 +6,7 @@ import '@fullcalendar/core/preact.js';
6
6
 
7
7
  var index = createPlugin({
8
8
  name: '@fullcalendar/scrollgrid',
9
- premiumReleaseDate: '2022-12-20',
9
+ premiumReleaseDate: '2022-12-27',
10
10
  deps: [premiumCommonPlugin],
11
11
  scrollGridImpl: ScrollGrid,
12
12
  });
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { createPlugin, PluginDef } from '@fullcalendar/core'\nimport premiumCommonPlugin from '@fullcalendar/premium-common'\nimport { ScrollGrid } from './ScrollGrid.js'\nimport './ambient.js'\n\nexport default createPlugin({\n name: '<%= pkgName %>',\n premiumReleaseDate: '<%= releaseDate %>',\n deps: [premiumCommonPlugin],\n scrollGridImpl: ScrollGrid,\n}) as PluginDef\n"],"names":[],"mappings":";;;;;;AAKA,YAAe,YAAY,CAAC;AAC1B,IAAA,IAAI,EAAE,0BAAgB;AACtB,IAAA,kBAAkB,EAAE,YAAoB;IACxC,IAAI,EAAE,CAAC,mBAAmB,CAAC;AAC3B,IAAA,cAAc,EAAE,UAAU;AAC3B,CAAA,CAAc;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sources":["../src/scroll-left-norm.ts","../src/StickyScrolling.ts","../src/ClippedScroller.tsx","../src/ScrollListener.ts","../src/ScrollSyncer.ts","../src/ScrollGrid.tsx"],"sourcesContent":["import { removeElement, computeEdges } from '@fullcalendar/core/internal'\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\nfunction 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 { CssDimValue } from '@fullcalendar/core'\nimport {\n applyStyle,\n translateRect, Rect,\n findElements,\n computeInnerRect,\n} from '@fullcalendar/core/internal'\nimport { ScrollListener } from './ScrollListener.js'\nimport { getScrollCanvasOrigin } from './scroll-left-norm.js'\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 STICKY_SELECTOR = '.fc-sticky'\n\n/*\nGoes beyond mere position:sticky, allows horizontal centering\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\n constructor(\n private scrollEl: HTMLElement,\n private isRtl: boolean,\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\n assignStickyPositions(els, elGeoms, viewportWidth)\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\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","import {\n BaseComponent,\n setRef,\n ScrollerLike,\n Scroller, OverflowValue,\n getIsRtlScrollbarOnLeft,\n isPropsEqual,\n} from '@fullcalendar/core/internal'\nimport {\n createElement,\n ComponentChildren,\n createRef,\n Ref,\n} from '@fullcalendar/core/preact'\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 { Emitter, DelayedRunner } from '@fullcalendar/core/internal'\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: Emitter<any> = 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 { ScrollListener } from './ScrollListener.js'\nimport { setScrollFromLeftEdge } from './scroll-left-norm.js'\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 { CssDimValue } from '@fullcalendar/core'\nimport {\n BaseComponent,\n isArraysEqual,\n findElements,\n mapHash,\n RefMap,\n ColProps, 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/core/internal'\nimport { createElement, VNode, Fragment } from '@fullcalendar/core/preact'\nimport { StickyScrolling } from './StickyScrolling.js'\nimport { ClippedScroller, ClippedOverflowValue } from './ClippedScroller.js'\nimport { ScrollSyncer } from './ScrollSyncer.js'\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\nconfig.SCROLLGRID_RESIZE_INTERVAL = 500\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 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)\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.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 this.getStickyScrolling(argsByKey)\n .forEach((stickyScrolling) => stickyScrolling.updateSize())\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"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@fullcalendar/scrollgrid",
3
- "version": "6.0.1",
3
+ "version": "6.0.2",
4
4
  "title": "FullCalendar ScrollGrid Plugin",
5
5
  "description": "Tabular data chunked into scrollable panes",
6
6
  "dependencies": {
7
- "@fullcalendar/premium-common": "~6.0.0"
7
+ "@fullcalendar/premium-common": "~6.0.2"
8
8
  },
9
9
  "peerDependencies": {
10
- "@fullcalendar/core": "~6.0.1"
10
+ "@fullcalendar/core": "~6.0.2"
11
11
  },
12
12
  "type": "module",
13
13
  "keywords": [