fullcalendar 7.0.0-beta.4 → 7.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.global.js CHANGED
@@ -1,80 +1,16 @@
1
1
  /*!
2
- FullCalendar Standard Bundle v7.0.0-beta.4
2
+ FullCalendar Standard Bundle v7.0.0-rc.0
3
3
  Docs & License: https://fullcalendar.io/docs/initialize-globals
4
4
  (c) 2024 Adam Shaw
5
5
  */
6
6
  var FullCalendar = (function (exports) {
7
7
  'use strict';
8
8
 
9
- var n,l$1,u$1,t,i$1,o,r$1,f$1,e$1,c$1,s$1,a$1,h={},p=[],v$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function w$1(n){var l=n.parentNode;l&&l.removeChild(n);}function _(l,u,t){var i,o,r,f={};for(r in u)"key"==r?i=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return g$1(l,f,i,o,null)}function g$1(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u$1:r,__i:-1,__u:0};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function m$1(){return {current:null}}function k$1(n){return n.children}function b(n,l){this.props=n,this.context=l;}function x(n,l){if(null==l)return n.__?x(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?x(n):null}function C$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C$1(n)}}function M$1(n){(!n.__d&&(n.__d=!0)&&i$1.push(n)&&!P$1.__r++||o!==l$1.debounceRendering)&&((o=l$1.debounceRendering)||r$1)(P$1);}function P$1(){var n,u,t,o,r,e,c,s;for(i$1.sort(f$1);n=i$1.shift();)n.__d&&(u=i$1.length,o=void 0,e=(r=(t=n).__v).__e,c=[],s=[],t.__P&&((o=d({},r)).__v=r.__v+1,l$1.vnode&&l$1.vnode(o),O$1(t.__P,o,r,t.__n,t.__P.namespaceURI,32&r.__u?[e]:null,c,null==e?x(r):e,!!(32&r.__u),s),o.__v=r.__v,o.__.__k[o.__i]=o,j$2(c,o,s),o.__e!=e&&C$1(o)),i$1.length>u&&i$1.sort(f$1));P$1.__r=0;}function S(n,l,u,t,i,o,r,f,e,c,s){var a,v,y,d,w,_=t&&t.__k||p,g=l.length;for(u.__d=e,$$1(u,l,_),e=u.__d,a=0;a<g;a++)null!=(y=u.__k[a])&&"boolean"!=typeof y&&"function"!=typeof y&&(v=-1===y.__i?h:_[y.__i]||h,y.__i=a,O$1(n,y,v,i,o,r,f,e,c,s),d=y.__e,y.ref&&v.ref!=y.ref&&(v.ref&&N(v.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),65536&y.__u||v.__k===y.__k?e=I(y,e,n):"function"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=w;}function $$1(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)r=t+a,null!=(i=n.__k[t]=null==(i=l[t])||"boolean"==typeof i||"function"==typeof i?null:"string"==typeof i||"number"==typeof i||"bigint"==typeof i||i.constructor==String?g$1(null,i,null,null,null):y(i)?g$1(k$1,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?g$1(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=L$1(i,u,r,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,"function"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f==r-1?a=f-r:f==r+1?a++:f>r?s>e-r?a+=f-r:a--:f<r&&a++,f!==t+a&&(i.__u|=65536))):(o=u[r])&&null==o.key&&o.__e&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o,!1),u[r]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o));}function I(n,l,u){var t,i;if("function"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=I(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!u.contains(l)&&(l=x(n)),u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling;}while(null!=l&&8===l.nodeType);return l}function H$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(y(n)?n.some(function(n){H$1(n,l);}):l.push(n)),l}function L$1(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type&&0==(131072&e.__u))return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--;}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++;}}return -1}function T$1(n,l,u){"-"===l[0]?n.setProperty(l,null==u?"":u):n[l]=null==u?"":"number"!=typeof u||v$1.test(l)?u:u+"px";}function A$1(n,l,u,t,i){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof t&&(n.style.cssText=t=""),t)for(l in t)u&&l in u||T$1(n.style,l,"");if(u)for(l in u)t&&u[l]===t[l]||T$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/i,"$1")),l=l.toLowerCase()in n||"onFocusOut"===l||"onFocusIn"===l?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=e$1,n.addEventListener(l,o?s$1:c$1,o)):n.removeEventListener(l,o?s$1:c$1,o);else {if("http://www.w3.org/2000/svg"==i)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=l&&"height"!=l&&"href"!=l&&"list"!=l&&"form"!=l&&"tabIndex"!=l&&"download"!=l&&"rowSpan"!=l&&"colSpan"!=l&&"role"!=l&&"popover"!=l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&"-"!==l[4]?n.removeAttribute(l):n.setAttribute(l,"popover"==l&&1==u?"":u));}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=e$1++;else if(u.t<t.u)return;return t(l$1.event?l$1.event(u):u)}}}function O$1(n,u,t,i,o,r,f,e,c,s){var a,h,p,v,w,_,g,m,x,C,M,P,$,I,H,L,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l$1.__b)&&a(u);n:if("function"==typeof T)try{if(m=u.props,x="prototype"in T&&T.prototype.render,C=(a=T.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?g=(h=u.__c=t.__c).__=h.__E:(x?u.__c=h=new T(m,M):(u.__c=h=new b(m,M),h.constructor=T,h.render=q),C&&C.sub(h),h.props=m,h.state||(h.state={}),h.context=M,h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),x&&null==h.__s&&(h.__s=h.state),x&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,T.getDerivedStateFromProps(m,h.__s))),v=h.props,w=h.state,h.__v=u,p)x&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),x&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else {if(x&&null==T.getDerivedStateFromProps&&m!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,M),!h.__e&&(null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,M)||u.__v===t.__v)){for(u.__v!==t.__v&&(h.props=m,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u);}),P=0;P<h._sb.length;P++)h.__h.push(h._sb[P]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,M),x&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,w,_);});}if(h.context=M,h.props=m,h.__P=n,h.__e=!1,$=l$1.__r,I=0,x){for(h.state=h.__s,h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[];}else do{h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),h.state=h.__s;}while(h.__d&&++I<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),x&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,w)),S(n,y(L=null!=a&&a.type===k$1&&null==a.key?a.props.children:a)?L:[L],u,t,i,o,r,f,e,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&f.push(h),g&&(h.__E=h.__=null);}catch(n){if(u.__v=null,c||null!=r){for(u.__u|=c?160:32;e&&8===e.nodeType&&e.nextSibling;)e=e.nextSibling;r[r.indexOf(e)]=null,u.__e=e;}else u.__e=t.__e,u.__k=t.__k;l$1.__e(n,u,t);}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=z$2(t.__e,u,t,i,o,r,f,c,s);(a=l$1.diffed)&&a(u);}function j$2(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)N(t[i],t[++i],t[++i]);l$1.__c&&l$1.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$1.__e(n,u.__v);}});}function z$2(l,u,t,i,o,r,f,e,c){var s,a,p,v,d,_,g,m=t.props,k=u.props,b=u.type;if("svg"===b?o="http://www.w3.org/2000/svg":"math"===b?o="http://www.w3.org/1998/Math/MathML":o||(o="http://www.w3.org/1999/xhtml"),null!=r)for(s=0;s<r.length;s++)if((d=r[s])&&"setAttribute"in d==!!b&&(b?d.localName===b:3===d.nodeType)){l=d,r[s]=null;break}if(null==l){if(null===b)return document.createTextNode(k);l=document.createElementNS(o,b,k.is&&k),r=null,e=!1;}if(null===b)m===k||e&&l.data===k||(l.data=k);else {if(r=r&&n.call(l.childNodes),m=t.props||h,!e&&null!=r)for(m={},s=0;s<l.attributes.length;s++)m[(d=l.attributes[s]).name]=d.value;for(s in m)if(d=m[s],"children"==s);else if("dangerouslySetInnerHTML"==s)p=d;else if("key"!==s&&!(s in k)){if("value"==s&&"defaultValue"in k||"checked"==s&&"defaultChecked"in k)continue;A$1(l,s,null,d,o);}for(s in k)d=k[s],"children"==s?v=d:"dangerouslySetInnerHTML"==s?a=d:"value"==s?_=d:"checked"==s?g=d:"key"===s||e&&"function"!=typeof d||m[s]===d||A$1(l,s,d,m[s],o);if(a)e||p&&(a.__html===p.__html||a.__html===l.innerHTML)||(l.innerHTML=a.__html),u.__k=[];else if(p&&(l.innerHTML=""),S(l,y(v)?v:[v],u,t,i,"foreignObject"===b?"http://www.w3.org/1999/xhtml":o,r,f,r?r[0]:t.__k&&x(t,0),e,c),null!=r)for(s=r.length;s--;)null!=r[s]&&w$1(r[s]);e||(s="value",void 0!==_&&(_!==l[s]||"progress"===b&&!_||"option"===b&&_!==m[s])&&A$1(l,s,_,m[s],o),s="checked",void 0!==g&&g!==l[s]&&A$1(l,s,g,m[s],o));}return l}function N(n,u,t){try{if("function"==typeof n){var i="function"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u));}else n.current=u;}catch(n){l$1.__e(n,t);}}function V$1(n,u,t){var i,o;if(l$1.unmount&&l$1.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||N(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount();}catch(n){l$1.__e(n,u);}i.base=i.__P=null;}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&V$1(i[o],u,t||"function"!=typeof n.type);t||null==n.__e||w$1(n.__e),n.__c=n.__=n.__e=n.__d=void 0;}function q(n,l,u){return this.constructor(n,u)}function B$2(u,t,i){var o,r,f,e;l$1.__&&l$1.__(u,t),r=(o="function"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],O$1(t,u=(!o&&i||t).__k=_(k$1,null,[u]),r||h,h,t.namespaceURI,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),j$2(f,u,e);}function D$1(n,l){B$2(n,l,D$1);}function E$1(l,u,t){var i,o,r,f,e=d({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)"key"==r?i=u[r]:"ref"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),g$1(l.type,e,i||l.key,o||l.ref,null)}function G(n,l){var u={__c:l="__cC"+a$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null;},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,M$1(n);});},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=p.slice,l$1={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l;}throw n}},u$1=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=d({},this.state),"function"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M$1(this));},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M$1(this));},b.prototype.render=k$1,i$1=[],r$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f$1=function(n,l){return n.__v.__b-l.__v.__b},P$1.__r=0,e$1=0,c$1=F(!1),s$1=F(!0),a$1=0;
9
+ var n,l$1,u$1,t,i$1,o,r$1,f$1,e$1,c$1,s$1,a$1,h={},p=[],v$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function w$1(n){var l=n.parentNode;l&&l.removeChild(n);}function _(l,u,t){var i,o,r,f={};for(r in u)"key"==r?i=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return g$1(l,f,i,o,null)}function g$1(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u$1:r,__i:-1,__u:0};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function m$1(){return {current:null}}function k$1(n){return n.children}function b(n,l){this.props=n,this.context=l;}function x(n,l){if(null==l)return n.__?x(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?x(n):null}function C$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C$1(n)}}function M$1(n){(!n.__d&&(n.__d=!0)&&i$1.push(n)&&!P$1.__r++||o!==l$1.debounceRendering)&&((o=l$1.debounceRendering)||r$1)(P$1);}function P$1(){var n,u,t,o,r,e,c,s;for(i$1.sort(f$1);n=i$1.shift();)n.__d&&(u=i$1.length,o=void 0,e=(r=(t=n).__v).__e,c=[],s=[],t.__P&&((o=d({},r)).__v=r.__v+1,l$1.vnode&&l$1.vnode(o),O$1(t.__P,o,r,t.__n,t.__P.namespaceURI,32&r.__u?[e]:null,c,null==e?x(r):e,!!(32&r.__u),s),o.__v=r.__v,o.__.__k[o.__i]=o,j$2(c,o,s),o.__e!=e&&C$1(o)),i$1.length>u&&i$1.sort(f$1));P$1.__r=0;}function S(n,l,u,t,i,o,r,f,e,c,s){var a,v,y,d,w,_=t&&t.__k||p,g=l.length;for(u.__d=e,$$1(u,l,_),e=u.__d,a=0;a<g;a++)null!=(y=u.__k[a])&&"boolean"!=typeof y&&"function"!=typeof y&&(v=-1===y.__i?h:_[y.__i]||h,y.__i=a,O$1(n,y,v,i,o,r,f,e,c,s),d=y.__e,y.ref&&v.ref!=y.ref&&(v.ref&&N(v.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),65536&y.__u||v.__k===y.__k?e=I(y,e,n):"function"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=w;}function $$1(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)r=t+a,null!=(i=n.__k[t]=null==(i=l[t])||"boolean"==typeof i||"function"==typeof i?null:"string"==typeof i||"number"==typeof i||"bigint"==typeof i||i.constructor==String?g$1(null,i,null,null,null):y(i)?g$1(k$1,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?g$1(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=L$1(i,u,r,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,"function"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f==r-1?a--:f==r+1?a++:f>r?s>e-r?a+=f-r:a--:f<r&&(f==r-a?a-=f-r:a++),f!==t+a&&(i.__u|=65536))):(o=u[r])&&null==o.key&&o.__e&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o,!1),u[r]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o));}function I(n,l,u){var t,i;if("function"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=I(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!u.contains(l)&&(l=x(n)),u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling;}while(null!=l&&8===l.nodeType);return l}function H$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(y(n)?n.some(function(n){H$1(n,l);}):l.push(n)),l}function L$1(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type&&0==(131072&e.__u))return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--;}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++;}}return -1}function T$1(n,l,u){"-"===l[0]?n.setProperty(l,null==u?"":u):n[l]=null==u?"":"number"!=typeof u||v$1.test(l)?u:u+"px";}function A$1(n,l,u,t,i){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof t&&(n.style.cssText=t=""),t)for(l in t)u&&l in u||T$1(n.style,l,"");if(u)for(l in u)t&&u[l]===t[l]||T$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/i,"$1")),l=l.toLowerCase()in n||"onFocusOut"===l||"onFocusIn"===l?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=e$1,n.addEventListener(l,o?s$1:c$1,o)):n.removeEventListener(l,o?s$1:c$1,o);else {if("http://www.w3.org/2000/svg"==i)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=l&&"height"!=l&&"href"!=l&&"list"!=l&&"form"!=l&&"tabIndex"!=l&&"download"!=l&&"rowSpan"!=l&&"colSpan"!=l&&"role"!=l&&"popover"!=l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&"-"!==l[4]?n.removeAttribute(l):n.setAttribute(l,"popover"==l&&1==u?"":u));}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=e$1++;else if(u.t<t.u)return;return t(l$1.event?l$1.event(u):u)}}}function O$1(n,u,t,i,o,r,f,e,c,s){var a,h,p,v,w,_,g,m,x,C,M,P,$,I,H,L,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l$1.__b)&&a(u);n:if("function"==typeof T)try{if(m=u.props,x="prototype"in T&&T.prototype.render,C=(a=T.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?g=(h=u.__c=t.__c).__=h.__E:(x?u.__c=h=new T(m,M):(u.__c=h=new b(m,M),h.constructor=T,h.render=q),C&&C.sub(h),h.props=m,h.state||(h.state={}),h.context=M,h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),x&&null==h.__s&&(h.__s=h.state),x&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,T.getDerivedStateFromProps(m,h.__s))),v=h.props,w=h.state,h.__v=u,p)x&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),x&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else {if(x&&null==T.getDerivedStateFromProps&&m!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,M),!h.__e&&(null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,M)||u.__v===t.__v)){for(u.__v!==t.__v&&(h.props=m,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u);}),P=0;P<h._sb.length;P++)h.__h.push(h._sb[P]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,M),x&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,w,_);});}if(h.context=M,h.props=m,h.__P=n,h.__e=!1,$=l$1.__r,I=0,x){for(h.state=h.__s,h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[];}else do{h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),h.state=h.__s;}while(h.__d&&++I<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),x&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,w)),S(n,y(L=null!=a&&a.type===k$1&&null==a.key?a.props.children:a)?L:[L],u,t,i,o,r,f,e,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&f.push(h),g&&(h.__E=h.__=null);}catch(n){if(u.__v=null,c||null!=r){for(u.__u|=c?160:32;e&&8===e.nodeType&&e.nextSibling;)e=e.nextSibling;r[r.indexOf(e)]=null,u.__e=e;}else u.__e=t.__e,u.__k=t.__k;l$1.__e(n,u,t);}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=z$2(t.__e,u,t,i,o,r,f,c,s);(a=l$1.diffed)&&a(u);}function j$2(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)N(t[i],t[++i],t[++i]);l$1.__c&&l$1.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$1.__e(n,u.__v);}});}function z$2(l,u,t,i,o,r,f,e,c){var s,a,p,v,d,_,g,m=t.props,k=u.props,b=u.type;if("svg"===b?o="http://www.w3.org/2000/svg":"math"===b?o="http://www.w3.org/1998/Math/MathML":o||(o="http://www.w3.org/1999/xhtml"),null!=r)for(s=0;s<r.length;s++)if((d=r[s])&&"setAttribute"in d==!!b&&(b?d.localName===b:3===d.nodeType)){l=d,r[s]=null;break}if(null==l){if(null===b)return document.createTextNode(k);l=document.createElementNS(o,b,k.is&&k),r=null,e=!1;}if(null===b)m===k||e&&l.data===k||(l.data=k);else {if(r=r&&n.call(l.childNodes),m=t.props||h,!e&&null!=r)for(m={},s=0;s<l.attributes.length;s++)m[(d=l.attributes[s]).name]=d.value;for(s in m)if(d=m[s],"children"==s);else if("dangerouslySetInnerHTML"==s)p=d;else if("key"!==s&&!(s in k)){if("value"==s&&"defaultValue"in k||"checked"==s&&"defaultChecked"in k)continue;A$1(l,s,null,d,o);}for(s in k)d=k[s],"children"==s?v=d:"dangerouslySetInnerHTML"==s?a=d:"value"==s?_=d:"checked"==s?g=d:"key"===s||e&&"function"!=typeof d||m[s]===d||A$1(l,s,d,m[s],o);if(a)e||p&&(a.__html===p.__html||a.__html===l.innerHTML)||(l.innerHTML=a.__html),u.__k=[];else if(p&&(l.innerHTML=""),S(l,y(v)?v:[v],u,t,i,"foreignObject"===b?"http://www.w3.org/1999/xhtml":o,r,f,r?r[0]:t.__k&&x(t,0),e,c),null!=r)for(s=r.length;s--;)null!=r[s]&&w$1(r[s]);e||(s="value",void 0!==_&&(_!==l[s]||"progress"===b&&!_||"option"===b&&_!==m[s])&&A$1(l,s,_,m[s],o),s="checked",void 0!==g&&g!==l[s]&&A$1(l,s,g,m[s],o));}return l}function N(n,u,t){try{if("function"==typeof n){var i="function"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u));}else n.current=u;}catch(n){l$1.__e(n,t);}}function V$1(n,u,t){var i,o;if(l$1.unmount&&l$1.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||N(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount();}catch(n){l$1.__e(n,u);}i.base=i.__P=null;}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&V$1(i[o],u,t||"function"!=typeof n.type);t||null==n.__e||w$1(n.__e),n.__c=n.__=n.__e=n.__d=void 0;}function q(n,l,u){return this.constructor(n,u)}function B$2(u,t,i){var o,r,f,e;l$1.__&&l$1.__(u,t),r=(o="function"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],O$1(t,u=(!o&&i||t).__k=_(k$1,null,[u]),r||h,h,t.namespaceURI,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),j$2(f,u,e);}function D$1(n,l){B$2(n,l,D$1);}function E$1(l,u,t){var i,o,r,f,e=d({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)"key"==r?i=u[r]:"ref"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),g$1(l.type,e,i||l.key,o||l.ref,null)}function G(n,l){var u={__c:l="__cC"+a$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null;},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,M$1(n);});},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=p.slice,l$1={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l;}throw n}},u$1=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=d({},this.state),"function"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M$1(this));},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M$1(this));},b.prototype.render=k$1,i$1=[],r$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f$1=function(n,l){return n.__v.__b-l.__v.__b},P$1.__r=0,e$1=0,c$1=F(!1),s$1=F(!0),a$1=0;
10
10
 
11
11
  var r,u,i,f=[],c=l$1,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function j$1(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z$1),n.__H.__h.forEach(B$1),n.__H.__h=[];}catch(t){n.__H.__h=[],c.__e(t,n.__v);}}c.__b=function(n){r=null,e&&e(n);},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t);},c.__r=function(n){a&&a(n);var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.i=n.__N=void 0;})):(i.__h.forEach(z$1),i.__h.forEach(B$1),i.__h=[],0)),u=r;},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j$1)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.i=void 0;})),u=r=null;},c.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z$1),n.__h=n.__h.filter(function(n){return !n.__||B$1(n)});}catch(r){t.some(function(n){n.__h&&(n.__h=[]);}),t=[],c.__e(r,n.__v);}}),l&&l(n,t);},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z$1(n);}catch(n){t=n;}}),r.__H=void 0,t&&c.__e(t,r.__v));};var k="function"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);k&&(t=requestAnimationFrame(r));}function z$1(n){var t=r,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r=t;}function B$1(n){var t=r;n.__c=n.__(),r=t;}
12
12
 
13
- function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function C(n,t){this.props=n,this.context=t;}(C.prototype=new b).isPureReactComponent=!0,C.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var R=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),R&&R(n);};var M=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);M(n,t,e,r);};var T=l$1.unmount;function A(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return A(n,t,e)})),n}function D(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return D(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function L(){this.__u=0,this.t=null,this.__b=null;}function O(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function U(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),T&&T(n);},(L.prototype=new b).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=O(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(c):c());};e.__R=i;var c=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=D(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate();}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i);},L.prototype.componentWillUnmount=function(){this.t=[];},L.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=A(this.__b,r,o.__O=o.__P);}this.__b=null;}var i=e.__a&&_(k$1,null,n.fallback);return i&&(i.__u&=-33),[_(k$1,null,e.__a?null:n.children),i]};var V=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};function W(n){return this.getChildContext=function(){return n.context},n.children}function P(n){var e=this,r=n.i;e.componentWillUnmount=function(){B$2(null,e.l),e.l=null,e.i=null;},e.i&&e.i!==r&&e.componentWillUnmount(),e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],contains:function(){return !0},appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n);},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n);},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n);}}),B$2(_(W,{context:e.context},n.__v),e.l);}function j(n,e){var r=_(P,{__v:n,i:e});return r.containerInfo=e,r}(U.prototype=new b).__a=function(n){var t=this,e=O(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),V(t,n,r)):u();};e?e(o):o();}},U.prototype.render=function(n){this.u=null,this.o=new Map;var t=H$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},U.prototype.componentDidUpdate=U.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){V(n,e,t);});};var z="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Z=/[A-Z0-9]/g,Y="undefined"!=typeof document,$=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};b.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(b.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n});}});});var J=l$1.event;function K(){}function Q(){return this.cancelBubble}function X(){return this.defaultPrevented}l$1.event=function(n){return J&&(n=J(n)),n.persist=K,n.isPropagationStopped=Q,n.isDefaultPrevented=X,n.nativeEvent=n};var tn={enumerable:!1,configurable:!0,get:function(){return this.class}},en=l$1.vnode;l$1.vnode=function(n){"string"==typeof n.type&&function(n){var t=n.props,e=n.type,u={};for(var o in t){var i=t[o];if(!("value"===o&&"defaultValue"in t&&null==i||Y&&"children"===o&&"noscript"===e||"class"===o||"className"===o)){var c=o.toLowerCase();"defaultValue"===o&&"value"in t&&null==t.value?o="value":"download"===o&&!0===i?i="":"translate"===c&&"no"===i?i=!1:"ondoubleclick"===c?o="ondblclick":"onchange"!==c||"input"!==e&&"textarea"!==e||$(t.type)?"onfocus"===c?o="onfocusin":"onblur"===c?o="onfocusout":H.test(o)?o=c:-1===e.indexOf("-")&&B.test(o)?o=o.replace(Z,"-$&").toLowerCase():null===i&&(i=void 0):c=o="oninput","oninput"===c&&u[o=c]&&(o="oninputCapture"),u[o]=i;}}"select"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value);})),"select"==e&&null!=u.defaultValue&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value;})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,"className",tn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u;}(n),n.$$typeof=z,en&&en(n);};var rn=l$1.__r;l$1.__r=function(n){rn&&rn(n),n.__c;};var un=l$1.diffed;l$1.diffed=function(n){un&&un(n);var t=n.props,e=n.__e;null!=e&&"textarea"===n.type&&"value"in t&&t.value!==e.value&&(e.value=null==t.value?"":t.value);};
14
-
15
- /*
16
- NOTE: this can be a public API, especially createElement for hooks.
17
- See examples/typescript-scheduler/src/index.ts
18
- */
19
- /*
20
- HACK for flushSync being a noop:
21
- https://github.com/preactjs/preact/issues/3929
22
- */
23
- function flushSync(renderActionToFlush) {
24
- renderActionToFlush();
25
- let oldDebounceRendering = l$1.debounceRendering; // orig
26
- let callbackQ = [];
27
- function execCallbackSync(callback) {
28
- callbackQ.push(callback);
29
- }
30
- l$1.debounceRendering = execCallbackSync;
31
- B$2(_(FakeComponent, {}), document.createElement('div'));
32
- while (callbackQ.length) {
33
- callbackQ.shift()();
34
- }
35
- l$1.debounceRendering = oldDebounceRendering;
36
- }
37
- /*
38
- Triggers a state-change which unclogs the render queue? Needed?
39
- */
40
- class FakeComponent extends b {
41
- render() { return _('div', {}); }
42
- componentDidMount() { this.setState({}); }
43
- }
44
- /*
45
- HACK for Preact wrongly calling shouldComponentUpdate during context changes:
46
- https://github.com/preactjs/preact/issues/2510
47
- */
48
- function createContext(defaultValue) {
49
- let ContextType = G(defaultValue);
50
- let origProvider = ContextType.Provider;
51
- ContextType.Provider = function () {
52
- let isNew = !this.getChildContext;
53
- let children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params
54
- if (isNew) {
55
- let subs = [];
56
- this.shouldComponentUpdate = (_props) => {
57
- if (this.props.value !== _props.value) {
58
- subs.forEach((c) => {
59
- c.context = _props.value;
60
- c.forceUpdate();
61
- });
62
- }
63
- };
64
- this.sub = (c) => {
65
- subs.push(c);
66
- let old = c.componentWillUnmount;
67
- c.componentWillUnmount = () => {
68
- subs.splice(subs.indexOf(c), 1);
69
- old && old.call(c);
70
- };
71
- };
72
- }
73
- return children;
74
- };
75
- return ContextType;
76
- }
77
- const preactOptions = l$1;
13
+ function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function C(n,t){this.props=n,this.context=t;}(C.prototype=new b).isPureReactComponent=!0,C.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var R=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),R&&R(n);};var M=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);M(n,t,e,r);};var T=l$1.unmount;function A(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return A(n,t,e)})),n}function D(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return D(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function L(){this.__u=0,this.t=null,this.__b=null;}function O(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function U(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),T&&T(n);},(L.prototype=new b).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=O(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(c):c());};e.__R=i;var c=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=D(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate();}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i);},L.prototype.componentWillUnmount=function(){this.t=[];},L.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=A(this.__b,r,o.__O=o.__P);}this.__b=null;}var i=e.__a&&_(k$1,null,n.fallback);return i&&(i.__u&=-33),[_(k$1,null,e.__a?null:n.children),i]};var V=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};function W(n){return this.getChildContext=function(){return n.context},n.children}function P(n){var e=this,r=n.i;e.componentWillUnmount=function(){B$2(null,e.l),e.l=null,e.i=null;},e.i&&e.i!==r&&e.componentWillUnmount(),e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],contains:function(){return !0},appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n);},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n);},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n);}}),B$2(_(W,{context:e.context},n.__v),e.l);}function j(n,e){var r=_(P,{__v:n,i:e});return r.containerInfo=e,r}(U.prototype=new b).__a=function(n){var t=this,e=O(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),V(t,n,r)):u();};e?e(o):o();}},U.prototype.render=function(n){this.u=null,this.o=new Map;var t=H$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},U.prototype.componentDidUpdate=U.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){V(n,e,t);});};var z="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Z=/[A-Z0-9]/g,Y="undefined"!=typeof document,$=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};b.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(b.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n});}});});var J=l$1.event;function K(){}function Q(){return this.cancelBubble}function X(){return this.defaultPrevented}l$1.event=function(n){return J&&(n=J(n)),n.persist=K,n.isPropagationStopped=Q,n.isDefaultPrevented=X,n.nativeEvent=n};var tn={enumerable:!1,configurable:!0,get:function(){return this.class}},en=l$1.vnode;l$1.vnode=function(n){"string"==typeof n.type&&function(n){var t=n.props,e=n.type,u={},o=-1===e.indexOf("-");for(var i in t){var c=t[i];if(!("value"===i&&"defaultValue"in t&&null==c||Y&&"children"===i&&"noscript"===e||"class"===i||"className"===i)){var l=i.toLowerCase();"defaultValue"===i&&"value"in t&&null==t.value?i="value":"download"===i&&!0===c?c="":"translate"===l&&"no"===c?c=!1:"o"===l[0]&&"n"===l[1]?"ondoubleclick"===l?i="ondblclick":"onchange"!==l||"input"!==e&&"textarea"!==e||$(t.type)?"onfocus"===l?i="onfocusin":"onblur"===l?i="onfocusout":H.test(i)&&(i=l):l=i="oninput":o&&B.test(i)?i=i.replace(Z,"-$&").toLowerCase():null===c&&(c=void 0),"oninput"===l&&u[i=l]&&(i="oninputCapture"),u[i]=c;}}"select"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value);})),"select"==e&&null!=u.defaultValue&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value;})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,"className",tn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u;}(n),n.$$typeof=z,en&&en(n);};var rn=l$1.__r;l$1.__r=function(n){rn&&rn(n),n.__c;};var un=l$1.diffed;l$1.diffed=function(n){un&&un(n);var t=n.props,e=n.__e;null!=e&&"textarea"===n.type&&"value"in t&&t.value!==e.value&&(e.value=null==t.value?"":t.value);};
78
14
 
79
15
  const styleTexts = [];
80
16
  const styleEls = new Map();
@@ -156,7 +92,7 @@ var FullCalendar = (function (exports) {
156
92
  registerStylesRoot(document);
157
93
  }
158
94
 
159
- var css_248z$4 = ":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc{display:flex;flex-direction:column;gap:1.5em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-border,.fc-border-b,.fc-border-e,.fc-border-s,.fc-border-t{border:0 solid var(--fc-border-color)}.fc-border-transparent{border-color:transparent}.fc-border{border-width:1px}.fc-border-t{border-top-width:1px}.fc-border-b{border-bottom-width:1px}.fc-direction-ltr .fc-border-s,.fc-direction-rtl .fc-border-e{border-left-width:1px}.fc-direction-ltr .fc-border-e,.fc-direction-rtl .fc-border-s{border-right-width:1px}.fc-flex-row{display:flex;flex-direction:row}.fc-flex-col{display:flex;flex-direction:column}.fc-grow{flex-grow:1}.fc-basis0,.fc-liquid{flex-basis:0}.fc-liquid{flex-grow:1;min-height:0;min-width:0}.fc-media-screen .fc-print-header,.fc-media-screen .fc-print-root{display:flex;flex-direction:column}.fc-cell{margin:0!important;padding:0!important}.fc-cell-inner{flex-shrink:0;overflow:hidden;white-space:nowrap}.fc-celldivider,.fc-rowdivider{border:0 solid var(--fc-border-color)}.fc-rowdivider{border-width:1px 0}.fc-celldivider{border-width:0 1px}.fc-celldivider,.fc-rowdivider{background:var(--fc-neutral-bg-color)}.fc-celldivider{padding-left:2px}.fc-rowdivider{padding-bottom:2px}.fc-crop{overflow:hidden}.fc-rel{position:relative}.fc-abs{position:absolute}.fc-fill{bottom:0;top:0}.fc-fill,.fc-fill-x{left:0;position:absolute;right:0}.fc-fill-y{bottom:0;position:absolute;top:0}.fc-sticky-t{position:sticky;top:0}.fc-sticky-s{left:0;position:sticky;right:0}.fc-table-header-sticky{background:var(--fc-page-bg-color);position:sticky;top:0;z-index:5}.fc-sticky-footer-scrollbar{bottom:0;position:sticky;z-index:5}.fc-sticky-footer-scrollbar>.fc-scroller{margin-top:-1px}.fc-sticky-footer-scrollbar>.fc-scroller>*{height:1px}.fc-content-box{box-sizing:content-box}.fc-offscreen{left:-10000px;position:absolute}.fc-shaded{background-color:var(--fc-neutral-bg-color)}.fc-filler{opacity:.5}.fc-padding-sm{padding:2px 4px}.fc-padding-md{padding:4px 5px}.fc-padding-lg{padding:8px}.fc-justify-center{justify-content:center}.fc-align-center{align-items:center}.fc-align-start{align-items:flex-start}.fc [data-navlink]{cursor:pointer}.fc [data-navlink]:hover{text-decoration:underline}.fc-view-outer{position:relative}.fc-view-outer-liquid,.fc-view-outer-static{display:flex;flex-direction:column}.fc-view-outer-liquid,.fc-view-outer-liquid>.fc-view,.fc-view-outer-static>.fc-view{flex-basis:0;flex-grow:1;min-height:0;min-width:0}.fc-view-outer-aspect-ratio>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event-selected:before{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\"\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-event-inner{position:relative;z-index:2}.fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\"\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-bg-event,.fc-highlight,.fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc-non-business{background:var(--fc-non-business-color)}.fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc-highlight{background:var(--fc-highlight-color)}.fc-day-disabled{background:var(--fc-neutral-bg-color)}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:flex;flex-direction:column;position:relative}.fc-h-event.fc-event-mirror{z-index:3}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-h-event .fc-event-inner{color:var(--fc-event-text-color);display:flex;flex-direction:row}.fc-h-event .fc-event-time,.fc-h-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-h-event .fc-event-title-outer{display:flex;flex-basis:0;flex-direction:row;flex-grow:1;min-height:0;min-width:0}.fc-h-event .fc-event-title{left:0;position:sticky;right:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:6}.fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc-popover-title{margin:0 2px}.fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}.fc-scroller{padding:0!important}.fc-scroller-no-bars{-ms-overflow-style:none;scrollbar-width:none}.fc-scroller-no-bars::-webkit-scrollbar{display:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\") format(\"truetype\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\"\\e900\"}.fc-icon-chevron-right:before{content:\"\\e901\"}.fc-icon-chevrons-left:before{content:\"\\e902\"}.fc-icon-chevrons-right:before{content:\"\\e903\"}.fc-icon-minus-square:before{content:\"\\e904\"}.fc-icon-plus-square:before{content:\"\\e905\"}.fc-icon-x:before{content:\"\\e906\"}.fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc-button{-webkit-appearance:button}.fc-button:not(:disabled){cursor:pointer}.fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-moz-user-select:none;user-select:none;vertical-align:middle}.fc-button:hover{text-decoration:none}.fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc-button:disabled{opacity:.65}.fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button-primary:not(:disabled).fc-button-active,.fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc-button-primary:not(:disabled).fc-button-active:focus,.fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc-button-group>.fc-button.fc-button-active,.fc-button-group>.fc-button:active,.fc-button-group>.fc-button:focus,.fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc-toolbar{align-items:center;justify-content:space-between}.fc-toolbar,.fc-toolbar-section{display:flex;flex-direction:row;gap:.75em}.fc-toolbar-section{flex-shrink:0}.fc-toolbar-title{font-size:1.75em;font-weight:700;white-space:nowrap}";
95
+ var css_248z$4 = ":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc{display:flex;flex-direction:column;gap:1.5em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-border,.fc-border-b,.fc-border-e,.fc-border-s,.fc-border-t{border:0 solid var(--fc-border-color)}.fc-border-transparent{border-color:transparent}.fc-border{border-width:1px}.fc-border-t{border-top-width:1px}.fc-border-b{border-bottom-width:1px}.fc-direction-ltr .fc-border-s,.fc-direction-rtl .fc-border-e{border-left-width:1px}.fc-direction-ltr .fc-border-e,.fc-direction-rtl .fc-border-s{border-right-width:1px}.fc-flex-row{display:flex;flex-direction:row}.fc-flex-col{display:flex;flex-direction:column}.fc-grow{flex-grow:1}.fc-basis0,.fc-liquid{flex-basis:0}.fc-liquid{flex-grow:1;min-height:0;min-width:0}.fc-media-screen .fc-print-header,.fc-media-screen .fc-print-root{display:flex;flex-direction:column}.fc-cell{margin:0!important;padding:0!important}.fc-cell-inner{flex-shrink:0;overflow:hidden;white-space:nowrap}.fc-celldivider,.fc-rowdivider{border:0 solid var(--fc-border-color)}.fc-rowdivider{border-width:1px 0}.fc-celldivider{border-width:0 1px}.fc-celldivider,.fc-rowdivider{background:var(--fc-neutral-bg-color)}.fc-celldivider{padding-left:2px}.fc-rowdivider{padding-bottom:2px}.fc-crop{overflow:hidden}.fc-rel{position:relative}.fc-abs{position:absolute}.fc-fill{bottom:0;top:0}.fc-fill,.fc-fill-top,.fc-fill-x{left:0;position:absolute;right:0}.fc-fill-start,.fc-fill-y{bottom:0;position:absolute;top:0}.fc-fill-top{top:0}.fc-fill-start{left:0;right:0;width:0}.fc-sticky-t{position:sticky;top:0}.fc-sticky-s{left:0;position:sticky;right:0}.fc-table-header-sticky{background:var(--fc-page-bg-color);position:sticky;top:0;z-index:3}.fc-content-box{box-sizing:content-box}.fc-offscreen{left:-10000px;position:absolute}.fc-shaded{background-color:var(--fc-neutral-bg-color)}.fc-filler{opacity:.5}.fc-padding-sm{padding:2px 4px}.fc-padding-md{padding:4px 5px}.fc-padding-lg{padding:8px}.fc-justify-center{justify-content:center}.fc-align-center{align-items:center}.fc-align-start{align-items:flex-start}.fc-footer-scrollbar-sticky{bottom:0;position:sticky;z-index:3}.fc-footer-scrollbar>.fc-scroller{margin-top:-1px}.fc-footer-scrollbar>.fc-scroller>*{height:1px}.fc-navlink{cursor:pointer}.fc-navlink:hover{text-decoration:underline}.fc-view-outer{position:relative}.fc-view-outer-liquid,.fc-view-outer-static{display:flex;flex-direction:column}.fc-view-outer-liquid,.fc-view-outer-liquid>.fc-view,.fc-view-outer-static>.fc-view{flex-basis:0;flex-grow:1;min-height:0;min-width:0}.fc-view-outer-aspect-ratio>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event-selected:before{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected,.fc-event:focus:not(.fc-list-event){box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:after,.fc-event:focus:not(.fc-list-event):after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\"\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-event-inner{position:relative;z-index:2}.fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\"\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-bg-event,.fc-highlight,.fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc-non-business{background:var(--fc-non-business-color)}.fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc-highlight{background:var(--fc-highlight-color)}.fc-day-disabled{background:var(--fc-neutral-bg-color)}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:flex;flex-direction:column;position:relative}.fc-h-event.fc-event-mirror{z-index:1}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-h-event .fc-event-inner{color:var(--fc-event-text-color);display:flex;flex-direction:row}.fc-h-event .fc-event-time,.fc-h-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-media-print .fc-h-event .fc-event-time,.fc-media-print .fc-h-event .fc-event-title{overflow:hidden!important;white-space:nowrap!important}.fc-h-event .fc-event-title-outer{display:flex;flex-basis:0;flex-direction:row;flex-grow:1;min-height:0;min-width:0}.fc-h-event .fc-event-title{left:0;position:sticky;right:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:4}.fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc-popover-title{margin:0 2px}.fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}.fc-scroller{padding:0!important}.fc-scroller-no-bars{-ms-overflow-style:none;scrollbar-width:none}.fc-scroller-no-bars::-webkit-scrollbar{display:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\") format(\"truetype\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\"\\e900\"}.fc-icon-chevron-right:before{content:\"\\e901\"}.fc-icon-chevrons-left:before{content:\"\\e902\"}.fc-icon-chevrons-right:before{content:\"\\e903\"}.fc-icon-minus-square:before{content:\"\\e904\"}.fc-icon-plus-square:before{content:\"\\e905\"}.fc-icon-x:before{content:\"\\e906\"}.fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc-button{-webkit-appearance:button}.fc-button:not(:disabled){cursor:pointer}.fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc-button:hover{text-decoration:none}.fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc-button:disabled{opacity:.65}.fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button-primary:not(:disabled).fc-button-active,.fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc-button-primary:not(:disabled).fc-button-active:focus,.fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc-button-group>.fc-button.fc-button-active,.fc-button-group>.fc-button:active,.fc-button-group>.fc-button:focus,.fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc-toolbar{align-items:center;justify-content:space-between}.fc-toolbar,.fc-toolbar-section{display:flex;flex-direction:row;gap:.75em}.fc-toolbar-section{flex-shrink:0}.fc-toolbar-title{font-size:1.75em;font-weight:700;white-space:nowrap}";
160
96
  injectStyles(css_248z$4);
161
97
 
162
98
  class DelayedRunner {
@@ -868,65 +804,6 @@ var FullCalendar = (function (exports) {
868
804
  return currentRes;
869
805
  };
870
806
  }
871
- function memoizeArraylike(// used at all?
872
- workerFunc, resEquality, teardownFunc) {
873
- let currentArgSets = [];
874
- let currentResults = [];
875
- return (newArgSets) => {
876
- let currentLen = currentArgSets.length;
877
- let newLen = newArgSets.length;
878
- let i = 0;
879
- for (; i < currentLen; i += 1) {
880
- if (!newArgSets[i]) { // one of the old sets no longer exists
881
- if (teardownFunc) {
882
- teardownFunc(currentResults[i]);
883
- }
884
- }
885
- else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {
886
- if (teardownFunc) {
887
- teardownFunc(currentResults[i]);
888
- }
889
- let res = workerFunc.apply(this, newArgSets[i]);
890
- if (!resEquality || !resEquality(res, currentResults[i])) {
891
- currentResults[i] = res;
892
- }
893
- }
894
- }
895
- for (; i < newLen; i += 1) {
896
- currentResults[i] = workerFunc.apply(this, newArgSets[i]);
897
- }
898
- currentArgSets = newArgSets;
899
- currentResults.splice(newLen); // remove excess
900
- return currentResults;
901
- };
902
- }
903
- function memoizeHashlike(workerFunc, resEquality, teardownFunc) {
904
- let currentArgHash = {};
905
- let currentResHash = {};
906
- return (newArgHash) => {
907
- let newResHash = {};
908
- for (let key in newArgHash) {
909
- if (!currentResHash[key]) {
910
- newResHash[key] = workerFunc.apply(this, newArgHash[key]);
911
- }
912
- else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {
913
- if (teardownFunc) {
914
- teardownFunc(currentResHash[key]);
915
- }
916
- let res = workerFunc.apply(this, newArgHash[key]);
917
- newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))
918
- ? currentResHash[key]
919
- : res;
920
- }
921
- else {
922
- newResHash[key] = currentResHash[key];
923
- }
924
- }
925
- currentArgHash = newArgHash;
926
- currentResHash = newResHash;
927
- return newResHash;
928
- };
929
- }
930
807
 
931
808
  const EXTENDED_SETTINGS_AND_SEVERITIES = {
932
809
  week: 3,
@@ -1357,7 +1234,6 @@ var FullCalendar = (function (exports) {
1357
1234
  eventDataTransform: identity,
1358
1235
  stickyHeaderDates: identity,
1359
1236
  stickyFooterScrollbar: identity,
1360
- viewHeight: identity,
1361
1237
  defaultAllDay: Boolean,
1362
1238
  eventSourceFailure: identity,
1363
1239
  eventSourceSuccess: identity,
@@ -2186,6 +2062,37 @@ var FullCalendar = (function (exports) {
2186
2062
  Theme.prototype.baseIconClass = '';
2187
2063
  Theme.prototype.iconOverridePrefix = '';
2188
2064
 
2065
+ /*
2066
+ Like flushSync, but flushes ALL pending updates, not only those initiated in a callback
2067
+ BTW, flushSync doesn't work in Preact: https://github.com/preactjs/preact/issues/3929
2068
+ */
2069
+ function flushUpdates() {
2070
+ let oldDebounceRendering = l$1.debounceRendering; // orig
2071
+ let callbackQ = [];
2072
+ function execCallbackSync(callback) {
2073
+ callbackQ.push(callback);
2074
+ }
2075
+ l$1.debounceRendering = execCallbackSync;
2076
+ B$2(_(FakeComponent, {}), document.createElement('div'));
2077
+ while (callbackQ.length) {
2078
+ callbackQ.shift()();
2079
+ }
2080
+ l$1.debounceRendering = oldDebounceRendering;
2081
+ }
2082
+ function flushSync(f) {
2083
+ f();
2084
+ flushUpdates();
2085
+ }
2086
+ /*
2087
+ Triggers a state-change which unclogs the render queue? Needed?
2088
+ */
2089
+ class FakeComponent extends b {
2090
+ render() { return _('div', {}); }
2091
+ componentDidMount() { this.setState({}); }
2092
+ }
2093
+ const createContext = G;
2094
+ const preactOptions = l$1;
2095
+
2189
2096
  const ViewContextType = createContext({}); // for Components
2190
2097
  function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {
2191
2098
  return {
@@ -4257,8 +4164,19 @@ var FullCalendar = (function (exports) {
4257
4164
  if (displayEventEnd == null) {
4258
4165
  displayEventEnd = defaultDisplayEventEnd !== false;
4259
4166
  }
4260
- const startDate = (!isStart && slicedStart) ? slicedStart : eventRange.instance.range.start;
4261
- const endDate = (!isEnd && slicedEnd) ? slicedEnd : eventRange.instance.range.end;
4167
+ const startDate = (!isStart &&
4168
+ slicedStart &&
4169
+ // if seg is the first seg, but start-date cut-off by slotMinTime, (technically isStart=false)
4170
+ // we still want to display the original start-time
4171
+ startOfDay(slicedStart).valueOf() !== startOfDay(eventRange.instance.range.start).valueOf())
4172
+ ? slicedStart
4173
+ : eventRange.instance.range.start;
4174
+ const endDate = (!isEnd &&
4175
+ slicedEnd &&
4176
+ // See above HACK, but for end-time
4177
+ startOfDay(addMs(slicedEnd, -1)).valueOf() !== startOfDay(addMs(eventRange.instance.range.end, -1)).valueOf())
4178
+ ? slicedEnd
4179
+ : eventRange.instance.range.end;
4262
4180
  if (displayEventTime && !def.allDay) {
4263
4181
  if (displayEventEnd && (isStart || isEnd) && def.hasEnd) {
4264
4182
  return dateEnv.formatRange(startDate, endDate, timeFormat, {
@@ -4539,21 +4457,15 @@ var FullCalendar = (function (exports) {
4539
4457
  so we can skip this.
4540
4458
  */
4541
4459
  function checkConfigMap() {
4460
+ let anyDirty = true;
4542
4461
  if (!isHandling) {
4543
4462
  isHandling = true;
4544
4463
  const dirtyConfigs = [];
4545
4464
  for (const [el, config] of configMap.entries()) {
4546
- let width;
4547
- let height;
4548
- if (config.client) {
4549
- width = el.clientWidth;
4550
- height = el.clientHeight;
4551
- }
4552
- else {
4553
- ({ width, height } = el.getBoundingClientRect());
4554
- }
4465
+ const { width, height } = el.getBoundingClientRect();
4555
4466
  if (storeConfigDims(config, width, height)) {
4556
4467
  dirtyConfigs.push(config);
4468
+ anyDirty = true;
4557
4469
  }
4558
4470
  }
4559
4471
  for (const dirtyConfig of dirtyConfigs) {
@@ -4562,6 +4474,7 @@ var FullCalendar = (function (exports) {
4562
4474
  flushAfterSize();
4563
4475
  isHandling = false;
4564
4476
  }
4477
+ return anyDirty;
4565
4478
  }
4566
4479
  function storeConfigDims(config, width, height) {
4567
4480
  let shouldFire = false;
@@ -4589,11 +4502,7 @@ var FullCalendar = (function (exports) {
4589
4502
  const config = configMap.get(el);
4590
4503
  let width;
4591
4504
  let height;
4592
- if (config.client) {
4593
- width = el.clientWidth;
4594
- height = el.clientHeight;
4595
- }
4596
- else if (entry.borderBoxSize && nativeBorderBoxEnabled) {
4505
+ if (entry.borderBoxSize && nativeBorderBoxEnabled) {
4597
4506
  const borderBoxSize = entry.borderBoxSize[0] || entry.borderBoxSize; // HACK for Firefox
4598
4507
  width = borderBoxSize.inlineSize;
4599
4508
  height = borderBoxSize.blockSize;
@@ -4608,12 +4517,11 @@ var FullCalendar = (function (exports) {
4608
4517
  flushAfterSize();
4609
4518
  isHandling = false;
4610
4519
  });
4611
- function watchSize(el, callback, client, watchWidth = true, watchHeight = true) {
4612
- configMap.set(el, { callback, client, watchWidth, watchHeight });
4520
+ function watchSize(el, callback, watchWidth = true, watchHeight = true) {
4521
+ configMap.set(el, { callback, watchWidth, watchHeight });
4613
4522
  globalResizeObserver.observe(el, {
4614
- box: !client && nativeBorderBoxEnabled
4615
- ? 'border-box'
4616
- : undefined // default is 'content-box'
4523
+ box: 'border-box'
4524
+ // default is 'content-box'
4617
4525
  });
4618
4526
  return () => {
4619
4527
  configMap.delete(el);
@@ -4655,13 +4563,13 @@ var FullCalendar = (function (exports) {
4655
4563
  const [requestCheckSizes, cancelCheckSizes] = debounce(checkConfigMap, fallbackTimeout);
4656
4564
  function requestCheckSizesSync() {
4657
4565
  cancelCheckSizes();
4658
- checkConfigMap();
4566
+ return checkConfigMap();
4659
4567
  }
4660
- function watchSize(el, callback, client, watchWidth = true, watchHeight = true) {
4568
+ function watchSize(el, callback, watchWidth = true, watchHeight = true) {
4661
4569
  if (!configMap.size) {
4662
4570
  addGlobalHandlers();
4663
4571
  }
4664
- configMap.set(el, { callback, client, watchWidth, watchHeight });
4572
+ configMap.set(el, { callback, watchWidth, watchHeight });
4665
4573
  requestCheckSizes();
4666
4574
  return () => {
4667
4575
  configMap.delete(el);
@@ -4777,7 +4685,7 @@ var FullCalendar = (function (exports) {
4777
4685
  PRECONDITION: element can only have one listener attached
4778
4686
 
4779
4687
  NOTE: If we ever kill the fallback technique and use ResizeObserver unconditionally with full
4780
- border-box support, we no longer need wrappers around the <StickyFooterScrollbar>'s <Scroller>
4688
+ border-box support, we no longer need wrappers around the <FooterScrollbar>'s <Scroller>
4781
4689
  */
4782
4690
  const [watchSize, updateSizeSync] = typeof ResizeObserver !== 'undefined'
4783
4691
  ? initNative()
@@ -4800,13 +4708,13 @@ var FullCalendar = (function (exports) {
4800
4708
  };
4801
4709
  this.handleBeforePrint = () => {
4802
4710
  this.setState({ forPrint: true });
4803
- flushSync(() => { }); // TODO: use noop
4711
+ flushUpdates();
4804
4712
  updateSizeSync();
4805
- flushSync(() => { }); // TODO: use noop
4713
+ flushUpdates();
4806
4714
  };
4807
4715
  this.handleAfterPrint = () => {
4808
4716
  this.setState({ forPrint: false });
4809
- flushSync(() => { }); // TODO: use noop
4717
+ flushUpdates();
4810
4718
  };
4811
4719
  }
4812
4720
  render() {
@@ -4893,7 +4801,7 @@ var FullCalendar = (function (exports) {
4893
4801
  }
4894
4802
 
4895
4803
  function getIsHeightAuto(options) {
4896
- return options.height === 'auto' || options.viewHeight === 'auto';
4804
+ return options.height === 'auto' || options.contentHeight === 'auto';
4897
4805
  }
4898
4806
  function getStickyHeaderDates(options) {
4899
4807
  let { stickyHeaderDates } = options;
@@ -4932,7 +4840,10 @@ var FullCalendar = (function (exports) {
4932
4840
  callback();
4933
4841
  }
4934
4842
  updateSize() {
4935
- requestAnimationFrame(updateSizeSync);
4843
+ let cycleCount = 0;
4844
+ while (cycleCount++ < 3 && updateSizeSync()) {
4845
+ flushUpdates();
4846
+ }
4936
4847
  }
4937
4848
  // Options
4938
4849
  // -----------------------------------------------------------------------------------------------------------------
@@ -5519,63 +5430,11 @@ var FullCalendar = (function (exports) {
5519
5430
  calendarApi.zoomTo(dateMarker, viewType);
5520
5431
  }
5521
5432
  };
5522
- return Object.assign({ 'role': 'link', 'aria-label': formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'data-navlink': '' }, (isTabbable
5433
+ return Object.assign({ 'role': 'link', 'aria-label': formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'className': 'fc-navlink' }, (isTabbable
5523
5434
  ? createAriaClickAttrs(handleInteraction)
5524
5435
  : { onClick: handleInteraction }));
5525
5436
  }
5526
5437
 
5527
- let _isRtlScrollbarOnLeft = null;
5528
- function getIsRtlScrollbarOnLeft() {
5529
- if (_isRtlScrollbarOnLeft === null) {
5530
- _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();
5531
- }
5532
- return _isRtlScrollbarOnLeft;
5533
- }
5534
- function computeIsRtlScrollbarOnLeft() {
5535
- let outerEl = document.createElement('div');
5536
- applyStyle(outerEl, {
5537
- position: 'absolute',
5538
- top: -1000,
5539
- left: 0,
5540
- border: 0,
5541
- padding: 0,
5542
- overflow: 'scroll',
5543
- direction: 'rtl',
5544
- });
5545
- outerEl.innerHTML = '<div></div>';
5546
- document.body.appendChild(outerEl);
5547
- let innerEl = outerEl.firstChild;
5548
- let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;
5549
- outerEl.remove();
5550
- return res;
5551
- }
5552
-
5553
- let _scrollbarWidths;
5554
- function getScrollbarWidths() {
5555
- if (!_scrollbarWidths) {
5556
- _scrollbarWidths = computeScrollbarWidths();
5557
- }
5558
- return _scrollbarWidths;
5559
- }
5560
- function computeScrollbarWidths() {
5561
- let el = document.createElement('div');
5562
- el.style.overflow = 'scroll';
5563
- el.style.position = 'absolute';
5564
- el.style.top = '-9999px';
5565
- el.style.left = '-9999px';
5566
- document.body.appendChild(el);
5567
- let res = computeScrollbarWidthsForEl(el);
5568
- document.body.removeChild(el);
5569
- return res;
5570
- }
5571
- // WARNING: will include border
5572
- function computeScrollbarWidthsForEl(el) {
5573
- return {
5574
- x: el.offsetHeight - el.clientHeight,
5575
- y: el.offsetWidth - el.clientWidth,
5576
- };
5577
- }
5578
-
5579
5438
  function computeEdges(el, getPadding = false) {
5580
5439
  let computedStyle = window.getComputedStyle(el);
5581
5440
  let borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;
@@ -5594,7 +5453,7 @@ var FullCalendar = (function (exports) {
5594
5453
  scrollbarLeft: 0,
5595
5454
  scrollbarRight: 0,
5596
5455
  };
5597
- if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?
5456
+ if (computedStyle.direction === 'rtl') {
5598
5457
  res.scrollbarLeft = scrollbarLeftRight;
5599
5458
  }
5600
5459
  else {
@@ -5663,6 +5522,13 @@ var FullCalendar = (function (exports) {
5663
5522
  }
5664
5523
  return parents;
5665
5524
  }
5525
+ // WARNING: will include border
5526
+ function computeScrollbarWidthsForEl(el) {
5527
+ return {
5528
+ x: el.offsetHeight - el.clientHeight,
5529
+ y: el.offsetWidth - el.clientWidth,
5530
+ };
5531
+ }
5666
5532
 
5667
5533
  /*
5668
5534
  Records offset information for a set of elements, relative to an origin element.
@@ -5876,7 +5742,7 @@ var FullCalendar = (function (exports) {
5876
5742
  isValidDateDownEl(el) {
5877
5743
  return !el.closest('.fc-event:not(.fc-bg-event)') &&
5878
5744
  !el.closest('.fc-more-link') && // a "more.." link
5879
- !el.closest('[data-navlink]') && // a clickable nav link
5745
+ !el.closest('.fc-navlink') && // a clickable nav link
5880
5746
  !el.closest('.fc-popover'); // hack
5881
5747
  }
5882
5748
  }
@@ -6473,37 +6339,54 @@ var FullCalendar = (function (exports) {
6473
6339
  constructor() {
6474
6340
  super(...arguments);
6475
6341
  this.handleEl = (el) => {
6476
- const { props } = this;
6477
6342
  if (this.el) {
6478
6343
  this.el = null;
6479
6344
  this.listener.destroy();
6480
- this.disconnectSize();
6481
- setRef(props.clientWidthRef, null);
6482
- setRef(props.clientHeightRef, null);
6483
- setRef(props.endScrollbarWidthRef, null);
6484
- setRef(props.bottomScrollbarWidthRef, null);
6485
6345
  }
6486
6346
  if (el) {
6487
6347
  this.el = el;
6488
6348
  this.listener = new ScrollListener(el);
6489
- this.disconnectSize = watchSize(el, (clientWidth, clientHeight) => {
6490
- const { props } = this;
6491
- const endScrollbarWidth = el.offsetWidth - clientWidth;
6492
- const bottomScrollbarWidth = el.offsetHeight - clientHeight;
6493
- if (this.currentClientWidth !== clientWidth) {
6494
- setRef(props.clientWidthRef, this.currentClientWidth = clientWidth);
6495
- }
6496
- if (this.currentClientHeight !== clientHeight) {
6497
- setRef(props.clientHeightRef, this.currentClientHeight = clientHeight);
6349
+ }
6350
+ };
6351
+ this.handleHRuler = (el) => {
6352
+ if (this.disconnectHRuler) {
6353
+ this.disconnectHRuler();
6354
+ this.disconnectHRuler = undefined;
6355
+ if (this.clientWidth !== undefined) {
6356
+ this.clientWidth = undefined;
6357
+ setRef(this.props.clientWidthRef, null);
6358
+ }
6359
+ }
6360
+ if (el) {
6361
+ this.disconnectHRuler = watchWidth(el, (clientWidth) => {
6362
+ if (clientWidth !== this.clientWidth) {
6363
+ this.clientWidth = clientWidth;
6364
+ setRef(this.props.clientWidthRef, clientWidth);
6498
6365
  }
6499
- // are these isDimsEqual calls necessary?
6500
- if (!isDimsEqual(this.currentBottomScrollbarWidth, bottomScrollbarWidth)) {
6501
- setRef(props.bottomScrollbarWidthRef, this.currentBottomScrollbarWidth = bottomScrollbarWidth);
6366
+ });
6367
+ }
6368
+ };
6369
+ this.handleVRuler = (el) => {
6370
+ if (this.disconnectVRuler) {
6371
+ this.disconnectVRuler();
6372
+ this.disconnectVRuler = undefined;
6373
+ if (this.clientHeight !== undefined) {
6374
+ this.clientHeight = undefined;
6375
+ setRef(this.props.clientHeightRef, null);
6376
+ }
6377
+ }
6378
+ if (el) {
6379
+ this.disconnectVRuler = watchHeight(el, (clientHeight) => {
6380
+ if (clientHeight !== this.clientHeight) {
6381
+ this.clientHeight = clientHeight;
6382
+ setRef(this.props.clientHeightRef, clientHeight);
6502
6383
  }
6503
- if (!isDimsEqual(this.currentEndScrollbarWidth, endScrollbarWidth)) {
6504
- setRef(props.endScrollbarWidthRef, this.currentEndScrollbarWidth = endScrollbarWidth);
6384
+ const bottomScrollbarWidth = Math.round(this.el.getBoundingClientRect().height - clientHeight);
6385
+ if (bottomScrollbarWidth !== this.bottomScrollbarWidth) {
6386
+ this.bottomScrollbarWidth = bottomScrollbarWidth;
6387
+ setRef(this.props.bottomScrollbarWidthRef, bottomScrollbarWidth);
6505
6388
  }
6506
- }, /* client(width+height) = */ true);
6389
+ });
6507
6390
  }
6508
6391
  };
6509
6392
  }
@@ -6512,7 +6395,11 @@ var FullCalendar = (function (exports) {
6512
6395
  // if there's only one axis that needs scrolling, the other axis will unintentionally have
6513
6396
  // scrollbars too if we don't force to 'hidden'
6514
6397
  const fallbackOverflow = (props.horizontal || props.vertical) ? 'hidden' : '';
6515
- return (_("div", { ref: this.handleEl, className: joinClassNames(props.className, 'fc-scroller', props.hideScrollbars && 'fc-scroller-no-bars'), style: Object.assign(Object.assign({}, props.style), { overflowX: props.horizontal ? 'auto' : fallbackOverflow, overflowY: props.vertical ? 'auto' : fallbackOverflow }) }, props.children));
6398
+ return (_("div", { ref: this.handleEl, className: joinClassNames(props.className, 'fc-scroller fc-rel', // fc-rel for children fc-fill-top/start
6399
+ props.hideScrollbars && 'fc-scroller-no-bars'), style: Object.assign(Object.assign({}, props.style), { overflowX: props.horizontal ? 'auto' : fallbackOverflow, overflowY: props.vertical ? 'auto' : fallbackOverflow }) },
6400
+ props.children,
6401
+ Boolean(props.clientWidthRef) && (_("div", { ref: this.handleHRuler, className: 'fc-fill-top' })),
6402
+ Boolean(props.clientHeightRef || props.bottomScrollbarWidthRef) && (_("div", { ref: this.handleVRuler, className: 'fc-fill-start' }))));
6516
6403
  }
6517
6404
  endScroll() {
6518
6405
  this.listener.endScroll();
@@ -6587,9 +6474,6 @@ var FullCalendar = (function (exports) {
6587
6474
  function getRtlScrollerSystem() {
6588
6475
  return _rtlScrollerSystem || (_rtlScrollerSystem = detectRtlScrollerSystem());
6589
6476
  }
6590
- /*
6591
- TODO: make this more minimal now that scrollbar-side detection isn't needed?
6592
- */
6593
6477
  function detectRtlScrollerSystem() {
6594
6478
  let el = document.createElement('div');
6595
6479
  el.style.position = 'absolute';
@@ -6922,6 +6806,30 @@ var FullCalendar = (function (exports) {
6922
6806
  return false;
6923
6807
  }
6924
6808
 
6809
+ class Ruler extends BaseComponent {
6810
+ constructor() {
6811
+ super(...arguments);
6812
+ this.elRef = m$1();
6813
+ }
6814
+ render() {
6815
+ return (_("div", { ref: this.elRef }));
6816
+ }
6817
+ componentDidMount() {
6818
+ const { props } = this;
6819
+ const el = this.elRef.current;
6820
+ this.disconnectWidth = watchWidth(el, (width) => {
6821
+ setRef(props.widthRef, width);
6822
+ });
6823
+ }
6824
+ componentWillUnmount() {
6825
+ this.disconnectWidth();
6826
+ const { props } = this;
6827
+ if (props.widthRef) {
6828
+ setRef(props.widthRef, null);
6829
+ }
6830
+ }
6831
+ }
6832
+
6925
6833
  /*
6926
6834
  TODO: make API where createRefMap() called
6927
6835
  */
@@ -7020,6 +6928,8 @@ var FullCalendar = (function (exports) {
7020
6928
  class EventContainer extends BaseComponent {
7021
6929
  constructor() {
7022
6930
  super(...arguments);
6931
+ // memo
6932
+ this.buildPublicEvent = memoize((context, eventDef, eventInstance) => new EventImpl(context, eventDef, eventInstance));
7023
6933
  this.handleEl = (el) => {
7024
6934
  this.el = el;
7025
6935
  if (el) {
@@ -7033,7 +6943,9 @@ var FullCalendar = (function (exports) {
7033
6943
  const { eventRange } = props;
7034
6944
  const { ui } = eventRange;
7035
6945
  const renderProps = {
7036
- event: new EventImpl(context, eventRange.def, eventRange.instance),
6946
+ // make stable. everything else atomic
6947
+ // FYI, eventRange unfortunately gets reconstructed a lot, but def/instance is stable
6948
+ event: this.buildPublicEvent(context, eventRange.def, eventRange.instance),
7037
6949
  view: context.viewApi,
7038
6950
  timeText: props.timeText,
7039
6951
  textColor: ui.textColor,
@@ -7052,7 +6964,7 @@ var FullCalendar = (function (exports) {
7052
6964
  isDragging: Boolean(props.isDragging),
7053
6965
  isResizing: Boolean(props.isResizing),
7054
6966
  };
7055
- return (_(ContentContainer, Object.assign({}, props /* contains children */, { elRef: this.handleEl, className: joinClassNames(props.className, ...getEventClassNames(renderProps), ...eventRange.ui.classNames), renderProps: renderProps, generatorName: "eventContent", customGenerator: options.eventContent, defaultGenerator: props.defaultGenerator, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount })));
6967
+ return (_(ContentContainer, { attrs: props.attrs, className: joinClassNames(props.className, ...getEventClassNames(renderProps), ...eventRange.ui.classNames), style: props.style, elRef: this.handleEl, renderProps: renderProps, generatorName: "eventContent", customGenerator: options.eventContent, defaultGenerator: props.defaultGenerator, tag: props.tag, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount }, props.children));
7056
6968
  }
7057
6969
  componentDidUpdate(prevProps) {
7058
6970
  if (this.el && this.props.eventRange !== prevProps.eventRange) {
@@ -7156,6 +7068,7 @@ var FullCalendar = (function (exports) {
7156
7068
  }));
7157
7069
 
7158
7070
  const PADDING_FROM_VIEWPORT = 10;
7071
+ const ROW_BORDER_WIDTH = 1;
7159
7072
  class Popover extends BaseComponent {
7160
7073
  constructor() {
7161
7074
  super(...arguments);
@@ -7197,8 +7110,8 @@ var FullCalendar = (function (exports) {
7197
7110
  return j(_("div", Object.assign({}, props.attrs, { id: props.id, role: 'dialog', "aria-labelledby": this.titleId, className: joinClassNames(props.className, 'fc-popover', theme.getClassName('popover')), ref: this.handleRootEl }),
7198
7111
  _("div", { tabIndex: 0, style: { outline: 'none' }, ref: this.focusStartRef }),
7199
7112
  _("div", { className: 'fc-popover-header ' + theme.getClassName('popoverHeader') },
7200
- _("span", { className: "fc-popover-title", id: this.titleId }, props.title),
7201
- _("span", Object.assign({ role: 'button', "aria-label": options.closeHint, className: 'fc-popover-close ' + theme.getIconClass('close') }, createAriaClickAttrs(this.handleClose), { ref: this.closeRef }))),
7113
+ _("div", { className: "fc-popover-title", id: this.titleId }, props.title),
7114
+ _("div", Object.assign({ role: 'button', "aria-label": options.closeHint, className: 'fc-popover-close ' + theme.getIconClass('close') }, createAriaClickAttrs(this.handleClose), { ref: this.closeRef }))),
7202
7115
  _("div", { className: 'fc-popover-body ' + theme.getClassName('popoverContent') }, props.children),
7203
7116
  _("div", { tabIndex: 0, style: { outline: 'none' }, ref: this.focusEndRef })), props.parentEl);
7204
7117
  }
@@ -7225,7 +7138,8 @@ var FullCalendar = (function (exports) {
7225
7138
  let popoverDims = rootEl.getBoundingClientRect();
7226
7139
  // position relative to viewport
7227
7140
  let popoverTop = alignParentTop
7228
- ? alignEl.closest(alignParentTop).getBoundingClientRect().top
7141
+ // HACK: subtract 1 for DayGrid, which has borders on row-bottom. Only view that uses alignParentTop
7142
+ ? alignEl.closest(alignParentTop).getBoundingClientRect().top - ROW_BORDER_WIDTH
7229
7143
  : alignmentRect.top;
7230
7144
  let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
7231
7145
  // constrain
@@ -7279,7 +7193,7 @@ var FullCalendar = (function (exports) {
7279
7193
  start: props.startDate,
7280
7194
  end: props.endDate,
7281
7195
  } }, props.dateSpanProps),
7282
- dayEl: rootEl,
7196
+ getDayEl: () => rootEl,
7283
7197
  rect: {
7284
7198
  left: 0,
7285
7199
  top: 0,
@@ -7308,21 +7222,22 @@ var FullCalendar = (function (exports) {
7308
7222
  };
7309
7223
  this.handleClick = (ev) => {
7310
7224
  let { props, context } = this;
7311
- let { moreLinkClick } = context.options;
7225
+ let { dateEnv, options } = context;
7226
+ let { moreLinkClick } = options;
7312
7227
  let date = computeRange(props).start;
7313
7228
  function buildPublicSeg(seg) {
7314
7229
  let { def, instance, range } = seg.eventRange;
7315
7230
  return {
7316
7231
  event: new EventImpl(context, def, instance),
7317
- start: context.dateEnv.toDate(range.start),
7318
- end: context.dateEnv.toDate(range.end),
7232
+ start: dateEnv.toDate(range.start),
7233
+ end: dateEnv.toDate(range.end),
7319
7234
  isStart: seg.isStart,
7320
7235
  isEnd: seg.isEnd,
7321
7236
  };
7322
7237
  }
7323
7238
  if (typeof moreLinkClick === 'function') {
7324
7239
  moreLinkClick = moreLinkClick({
7325
- date,
7240
+ date: dateEnv.toDate(date),
7326
7241
  allDay: Boolean(props.allDayDate),
7327
7242
  allSegs: props.segs.map(buildPublicSeg),
7328
7243
  hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
@@ -7440,7 +7355,7 @@ var FullCalendar = (function (exports) {
7440
7355
  }
7441
7356
  }
7442
7357
 
7443
- class StickyFooterScrollbar extends BaseComponent {
7358
+ class FooterScrollbar extends BaseComponent {
7444
7359
  constructor() {
7445
7360
  super(...arguments);
7446
7361
  this.rootElRef = m$1();
@@ -7451,7 +7366,7 @@ var FullCalendar = (function (exports) {
7451
7366
  // the outer dimensions change, but the inner dimensions do not. The Scroller's
7452
7367
  // dimension-watching, when used in ponyfill-mode, can't fire on border-box change, so we
7453
7368
  // workaround it by monitoring dimensions of a wrapper instead
7454
- return (_("div", { ref: this.rootElRef, className: 'fc-sticky-footer-scrollbar' },
7369
+ return (_("div", { ref: this.rootElRef, className: joinClassNames('fc-footer-scrollbar', props.isSticky && 'fc-footer-scrollbar-sticky') },
7455
7370
  _(Scroller, { horizontal: true, ref: props.scrollerRef },
7456
7371
  _("div", { style: { minWidth: props.canvasWidth } }))));
7457
7372
  }
@@ -7487,6 +7402,7 @@ var FullCalendar = (function (exports) {
7487
7402
  Emitter: Emitter,
7488
7403
  EventContainer: EventContainer,
7489
7404
  EventImpl: EventImpl,
7405
+ FooterScrollbar: FooterScrollbar,
7490
7406
  Interaction: Interaction,
7491
7407
  MoreLinkContainer: MoreLinkContainer,
7492
7408
  NamedTimeZoneImpl: NamedTimeZoneImpl,
@@ -7494,13 +7410,13 @@ var FullCalendar = (function (exports) {
7494
7410
  NowTimer: NowTimer,
7495
7411
  PositionCache: PositionCache,
7496
7412
  RefMap: RefMap,
7413
+ Ruler: Ruler,
7497
7414
  ScrollController: ScrollController,
7498
7415
  Scroller: Scroller,
7499
7416
  SegHierarchy: SegHierarchy,
7500
7417
  Slicer: Slicer,
7501
7418
  Splitter: Splitter,
7502
7419
  StandardEvent: StandardEvent,
7503
- StickyFooterScrollbar: StickyFooterScrollbar,
7504
7420
  Theme: Theme,
7505
7421
  ViewContainer: ViewContainer,
7506
7422
  ViewContextType: ViewContextType,
@@ -7572,11 +7488,9 @@ var FullCalendar = (function (exports) {
7572
7488
  getEventTagAndAttrs: getEventTagAndAttrs,
7573
7489
  getEventTargetViaRoot: getEventTargetViaRoot,
7574
7490
  getIsHeightAuto: getIsHeightAuto,
7575
- getIsRtlScrollbarOnLeft: getIsRtlScrollbarOnLeft,
7576
7491
  getNormalizedScrollX: getNormalizedScrollX,
7577
7492
  getRectCenter: getRectCenter,
7578
7493
  getRelevantEvents: getRelevantEvents,
7579
- getScrollbarWidths: getScrollbarWidths,
7580
7494
  getScrollerSyncerClass: getScrollerSyncerClass,
7581
7495
  getSlotClassName: getSlotClassName,
7582
7496
  getStickyFooterScrollbar: getStickyFooterScrollbar,
@@ -7605,8 +7519,6 @@ var FullCalendar = (function (exports) {
7605
7519
  joinClassNames: joinClassNames,
7606
7520
  mapHash: mapHash,
7607
7521
  memoize: memoize,
7608
- memoizeArraylike: memoizeArraylike,
7609
- memoizeHashlike: memoizeHashlike,
7610
7522
  memoizeObjArg: memoizeObjArg,
7611
7523
  mergeEventStores: mergeEventStores,
7612
7524
  multiplyDuration: multiplyDuration,
@@ -7651,6 +7563,7 @@ var FullCalendar = (function (exports) {
7651
7563
  createPortal: j,
7652
7564
  createContext: createContext,
7653
7565
  flushSync: flushSync,
7566
+ flushUpdates: flushUpdates,
7654
7567
  preactOptions: preactOptions,
7655
7568
  Component: b,
7656
7569
  Fragment: k$1,
@@ -9651,11 +9564,6 @@ var FullCalendar = (function (exports) {
9651
9564
  this.renderRunner.request();
9652
9565
  }
9653
9566
  }
9654
- updateSize() {
9655
- flushSync(() => {
9656
- super.updateSize();
9657
- });
9658
- }
9659
9567
  batchRendering(func) {
9660
9568
  this.renderRunner.pause('batchRendering');
9661
9569
  func();
@@ -9728,7 +9636,7 @@ var FullCalendar = (function (exports) {
9728
9636
  return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
9729
9637
  }
9730
9638
 
9731
- const version = '7.0.0-beta.4';
9639
+ const version = '7.0.0-rc.0';
9732
9640
 
9733
9641
  config.touchMouseIgnoreWait = 500;
9734
9642
  let ignoreMouseDepth = 0;
@@ -10825,6 +10733,9 @@ var FullCalendar = (function (exports) {
10825
10733
  this.handlePointerDown = (pev) => {
10826
10734
  let { dragging } = this;
10827
10735
  let downEl = pev.origEvent.target;
10736
+ /*
10737
+ If no dateClick, allow text on dates to be text-selectable
10738
+ */
10828
10739
  const canDateClick = this.component.context.emitter.hasHandlers('dateClick') &&
10829
10740
  this.component.isValidDateDownEl(downEl);
10830
10741
  if (!canDateClick) {
@@ -10839,7 +10750,7 @@ var FullCalendar = (function (exports) {
10839
10750
  let { initialHit, finalHit } = this.hitDragging;
10840
10751
  if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {
10841
10752
  let { context } = component;
10842
- let arg = Object.assign(Object.assign({}, buildDatePointApiWithContext(initialHit.dateSpan, context)), { dayEl: initialHit.dayEl, jsEvent: ev.origEvent, view: context.viewApi || context.calendarApi.view });
10753
+ let arg = Object.assign(Object.assign({}, buildDatePointApiWithContext(initialHit.dateSpan, context)), { dayEl: initialHit.getDayEl(), jsEvent: ev.origEvent, view: context.viewApi || context.calendarApi.view });
10843
10754
  context.emitter.trigger('dateClick', arg);
10844
10755
  }
10845
10756
  }
@@ -11898,6 +11809,7 @@ var FullCalendar = (function (exports) {
11898
11809
  function buildDateRowConfig(dates, datesRepDistinctDays, dateProfile, todayRange, dayHeaderFormat, // TODO: rename to dateHeaderFormat?
11899
11810
  context, colSpan) {
11900
11811
  return {
11812
+ isDateRow: true,
11901
11813
  renderConfig: buildDateRenderConfig(context),
11902
11814
  dataConfigs: buildDateDataConfigs(dates, datesRepDistinctDays, dateProfile, todayRange, dayHeaderFormat, context, colSpan)
11903
11815
  };
@@ -11916,31 +11828,38 @@ var FullCalendar = (function (exports) {
11916
11828
  willUnmount: options.dayHeaderWillUnmount,
11917
11829
  };
11918
11830
  }
11831
+ const dowDates = [];
11832
+ for (let dow = 0; dow < 7; dow++) {
11833
+ dowDates.push(addDays(new Date(259200000), dow)); // start with Sun, 04 Jan 1970 00:00:00 GMT)
11834
+ }
11919
11835
  /*
11920
11836
  For header cells: data
11921
11837
  */
11922
11838
  function buildDateDataConfigs(dates, datesRepDistinctDays, dateProfile, todayRange, dayHeaderFormat, // TODO: rename to dateHeaderFormat?
11923
- context, colSpan = 1, keyPrefix = '') {
11839
+ context, colSpan = 1, keyPrefix = '', extraRenderProps = {}, // TODO
11840
+ extraAttrs = {}, // TODO
11841
+ className = '') {
11924
11842
  const { dateEnv, viewApi, options } = context;
11925
11843
  return datesRepDistinctDays
11926
11844
  ? dates.map((date) => {
11927
11845
  const dateMeta = getDateMeta(date, todayRange, null, dateProfile);
11928
11846
  const text = dateEnv.format(date, dayHeaderFormat);
11929
- const renderProps = Object.assign(Object.assign({}, dateMeta), { date: dateEnv.toDate(date), view: viewApi, text });
11930
- const isNavLink = options.navLinks && !dateMeta.isDisabled;
11847
+ const renderProps = Object.assign(Object.assign(Object.assign({}, dateMeta), { date: dateEnv.toDate(date), view: viewApi, text }), extraRenderProps);
11848
+ const isNavLink = options.navLinks && !dateMeta.isDisabled &&
11849
+ dates.length > 1; // don't show navlink to day if only one day
11931
11850
  const fullDateStr = buildDateStr(context, date);
11932
11851
  // for DayGridHeaderCell
11933
11852
  return {
11934
11853
  key: keyPrefix + date.toUTCString(),
11935
11854
  renderProps,
11936
- attrs: Object.assign(Object.assign({ 'aria-label': fullDateStr }, (dateMeta.isToday ? { 'aria-current': 'date' } : {})), { 'data-date': formatDayString(date) }),
11855
+ attrs: Object.assign(Object.assign(Object.assign({ 'aria-label': fullDateStr }, (dateMeta.isToday ? { 'aria-current': 'date' } : {})), { 'data-date': formatDayString(date) }), extraAttrs),
11937
11856
  // for navlink
11938
11857
  innerAttrs: isNavLink
11939
11858
  ? buildNavLinkAttrs(context, date, undefined, fullDateStr)
11940
11859
  : { 'aria-hidden': true },
11941
11860
  colSpan,
11942
11861
  isNavLink,
11943
- className: getDayClassName(dateMeta),
11862
+ className: joinClassNames(className, getDayClassName(dateMeta)),
11944
11863
  };
11945
11864
  })
11946
11865
  : dates.map((date) => {
@@ -11955,21 +11874,19 @@ var FullCalendar = (function (exports) {
11955
11874
  isOther: false,
11956
11875
  };
11957
11876
  const text = dateEnv.format(normDate, dayHeaderFormat);
11958
- const renderProps = Object.assign(Object.assign({}, dayMeta), { date, view: viewApi, text });
11877
+ const renderProps = Object.assign(Object.assign(Object.assign({}, dayMeta), { date: dowDates[dow], view: viewApi, text }), extraRenderProps);
11959
11878
  const fullWeekDayStr = dateEnv.format(normDate, WEEKDAY_FORMAT);
11960
11879
  // for DayGridHeaderCell
11961
11880
  return {
11962
11881
  key: keyPrefix + String(dow),
11963
11882
  renderProps,
11964
- attrs: {
11965
- 'aria-label': fullWeekDayStr,
11966
- },
11967
- // for navlink
11883
+ attrs: Object.assign({ 'aria-label': fullWeekDayStr }, extraAttrs),
11884
+ // NOT a navlink
11968
11885
  innerAttrs: {
11969
11886
  'aria-hidden': true, // label already on cell
11970
11887
  },
11971
11888
  colSpan,
11972
- className: getDayClassName(dayMeta),
11889
+ className: joinClassNames(className, getDayClassName(dayMeta)),
11973
11890
  };
11974
11891
  });
11975
11892
  }
@@ -12088,6 +12005,8 @@ var FullCalendar = (function (exports) {
12088
12005
  class DayGridCell extends DateComponent {
12089
12006
  constructor() {
12090
12007
  super(...arguments);
12008
+ // memo
12009
+ this.getDateMeta = memoize(getDateMeta);
12091
12010
  // ref
12092
12011
  this.rootElRef = m$1();
12093
12012
  this.handleBodyEl = (bodyEl) => {
@@ -12121,8 +12040,7 @@ var FullCalendar = (function (exports) {
12121
12040
  // TODO: memoize this
12122
12041
  const isMonthStart = props.showDayNumber &&
12123
12042
  shouldDisplayMonthStart(props.date, props.dateProfile.currentRange, dateEnv);
12124
- // TODO: memoize this
12125
- const dateMeta = getDateMeta(props.date, props.todayRange, null, props.dateProfile);
12043
+ const dateMeta = this.getDateMeta(props.date, props.todayRange, null, props.dateProfile);
12126
12044
  const baseClassName = joinClassNames('fc-daygrid-day', props.borderStart && 'fc-border-s', props.width != null ? '' : 'fc-liquid', 'fc-flex-col');
12127
12045
  if (dateMeta.isDisabled) {
12128
12046
  return (_("div", { role: 'gridcell', "aria-disabled": true, className: joinClassNames(baseClassName, 'fc-day-disabled'), style: {
@@ -12371,10 +12289,10 @@ var FullCalendar = (function (exports) {
12371
12289
  // Hit Element
12372
12290
  // -------------------------------------------------------------------------------------------------
12373
12291
  function getRowEl(rootEl, row) {
12374
- return rootEl.querySelectorAll(':scope > [role=row]')[row];
12292
+ return rootEl.querySelectorAll('[role=row]')[row];
12375
12293
  }
12376
12294
  function getCellEl(rowEl, col) {
12377
- return rowEl.querySelectorAll(':scope > [role=gridcell]')[col];
12295
+ return rowEl.querySelectorAll('[role=gridcell]')[col];
12378
12296
  }
12379
12297
  // Header Formatting
12380
12298
  // -------------------------------------------------------------------------------------------------
@@ -12472,13 +12390,16 @@ var FullCalendar = (function (exports) {
12472
12390
  return (_("div", { role: props.role /* !!! */, "aria-label": props.role === 'row' // HACK
12473
12391
  ? fullWeekStr
12474
12392
  : undefined // can't have label on non-role div
12475
- , className: joinClassNames('fc-flex-row fc-rel', props.className), style: {
12476
- minHeight: props.minHeight,
12393
+ , className: joinClassNames('fc-daygrid-row', props.forPrint && 'fc-daygrid-row-print', 'fc-flex-row fc-rel', props.className), style: {
12394
+ 'flex-basis': props.basis,
12477
12395
  }, ref: this.handleRootEl },
12396
+ props.showWeekNumbers && (_(WeekNumberContainer, { tag: 'div', attrs: Object.assign(Object.assign({}, (isNavLink
12397
+ ? buildNavLinkAttrs(context, weekDate, 'week', fullWeekStr, /* isTabbable = */ false)
12398
+ : {})), { 'role': undefined, 'aria-hidden': true }), className: 'fc-daygrid-week-number', date: weekDate, defaultFormat: DEFAULT_WEEK_NUM_FORMAT$1 })),
12478
12399
  this.renderFillSegs(props.businessHourSegs, 'non-business'),
12479
12400
  this.renderFillSegs(props.bgEventSegs, 'bg-event'),
12480
12401
  this.renderFillSegs(highlightSegs, 'highlight'),
12481
- _("div", { className: 'fc-flex-row fc-liquid fc-rel' }, props.cells.map((cell, col) => {
12402
+ props.cells.map((cell, col) => {
12482
12403
  const normalFgNodes = this.renderFgSegs(maxMainTop, renderableSegsByCol[col], segTops, props.todayRange, forcedInvisibleMap);
12483
12404
  return (_(DayGridCell, { key: cell.key, dateProfile: props.dateProfile, todayRange: props.todayRange, date: cell.date, showDayNumber: props.showDayNumbers, isCompact: props.isCompact, isTall: props.isTall, borderStart: Boolean(col),
12484
12405
  // content
@@ -12489,10 +12410,7 @@ var FullCalendar = (function (exports) {
12489
12410
  fgHeight: heightsByCol[col], width: props.colWidth,
12490
12411
  // refs
12491
12412
  headerHeightRef: headerHeightRefMap.createRef(cell.key), mainHeightRef: mainHeightRefMap.createRef(cell.key) }));
12492
- })),
12493
- props.showWeekNumbers && (_(WeekNumberContainer, { tag: 'div', attrs: Object.assign(Object.assign({}, (isNavLink
12494
- ? buildNavLinkAttrs(context, weekDate, 'week', fullWeekStr, /* isTabbable = */ false)
12495
- : {})), { 'role': undefined, 'aria-hidden': true }), className: 'fc-daygrid-week-number', date: weekDate, defaultFormat: DEFAULT_WEEK_NUM_FORMAT$1 })),
12413
+ }),
12496
12414
  this.renderFgSegs(maxMainTop, mirrorSegs, segTops, props.todayRange, {}, // forcedInvisibleMap
12497
12415
  Boolean(props.eventDrag), Boolean(props.eventResize), false)));
12498
12416
  }
@@ -12652,30 +12570,22 @@ var FullCalendar = (function (exports) {
12652
12570
  let eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt);
12653
12571
  let isHeightAuto = getIsHeightAuto(options);
12654
12572
  let rowHeightsRedistribute = !props.forPrint && !isHeightAuto;
12655
- let [rowMinHeight, isCompact] = computeRowHeight(props.visibleWidth, rowCnt, isHeightAuto, props.forPrint, options);
12573
+ let rowBasis = computeRowBasis(props.visibleWidth, rowCnt, isHeightAuto, options);
12574
+ let isCompact = computeRowIsCompact(props.visibleWidth, options);
12656
12575
  return (_("div", { role: 'rowgroup', className: joinClassNames(
12657
12576
  // HACK for Safari. Can't do break-inside:avoid with flexbox items, likely b/c it's not standard:
12658
12577
  // https://stackoverflow.com/a/60256345
12659
12578
  !props.forPrint && 'fc-flex-col', props.className), style: { width: props.width }, ref: this.handleRootEl }, props.cellRows.map((cells, row) => (_(DayGridRow, { key: cells[0].key, role: 'row', dateProfile: props.dateProfile, todayRange: props.todayRange, cells: cells, showDayNumbers: rowCnt > 1, showWeekNumbers: rowCnt > 1 && options.weekNumbers, forPrint: props.forPrint, isCompact: isCompact,
12660
12579
  // if not auto-height, distribute height of container somewhat evently to rows
12661
- // (treat all as zero, distribute height, then ensure min-heights -- the inner content height)
12662
- className: joinClassNames(rowHeightsRedistribute && 'fc-grow fc-basis0', rowCnt > 1 && 'fc-break-inside-avoid', // don't avoid breaks for single tall row
12580
+ className: joinClassNames(rowHeightsRedistribute && 'fc-grow', rowCnt > 1 && 'fc-break-inside-avoid', // don't avoid breaks for single tall row
12663
12581
  row < rowCnt - 1 && 'fc-border-b'),
12664
12582
  // content
12665
12583
  fgEventSegs: fgEventSegsByRow[row], bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay) /* HACK */, businessHourSegs: businessHourSegsByRow[row], dateSelectionSegs: dateSelectionSegsByRow[row], eventSelection: props.eventSelection, eventDrag: eventDragByRow[row], eventResize: eventResizeByRow[row], dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows,
12666
12584
  // dimensions
12667
- colWidth: props.colWidth, minHeight: rowMinHeight,
12585
+ colWidth: props.colWidth, basis: rowBasis,
12668
12586
  // refs
12669
12587
  heightRef: rowHeightRefMap.createRef(cells[0].key) })))));
12670
12588
  }
12671
- componentDidMount() {
12672
- this.disconnectWidth = watchWidth(this.rootEl, (width) => {
12673
- this.setState({ width });
12674
- });
12675
- }
12676
- componentWillUnmount() {
12677
- this.disconnectWidth();
12678
- }
12679
12589
  // Hit System
12680
12590
  // -----------------------------------------------------------------------------------------------
12681
12591
  queryHit(positionLeft, positionTop, elWidth) {
@@ -12692,8 +12602,7 @@ var FullCalendar = (function (exports) {
12692
12602
  start: cellStartDate,
12693
12603
  end: cellEndDate,
12694
12604
  }, allDay: true }, cell.dateSpanProps),
12695
- // HACK. TODO: This is expensive to do every hit-query
12696
- dayEl: getCellEl(getRowEl(this.rootEl, row), col),
12605
+ getDayEl: () => getCellEl(getRowEl(this.rootEl, row), col),
12697
12606
  rect: {
12698
12607
  left,
12699
12608
  right,
@@ -12709,27 +12618,35 @@ var FullCalendar = (function (exports) {
12709
12618
  function isSegAllDay(seg) {
12710
12619
  return seg.eventRange.def.allDay;
12711
12620
  }
12712
- function computeRowHeight(visibleWidth, // should INCLUDE any scrollbar width to avoid oscillation
12713
- rowCnt, isHeightAuto, forPrint, options) {
12621
+ /*
12622
+ Amount of height a row should consume prior to expanding
12623
+ We don't want to use min-height with flexbox because we leverage min-height:auto,
12624
+ which yields value based on natural height of events
12625
+ */
12626
+ function computeRowBasis(visibleWidth, // should INCLUDE any scrollbar width to avoid oscillation
12627
+ rowCnt, isHeightAuto, options) {
12714
12628
  if (visibleWidth != null) {
12715
12629
  // ensure a consistent row min-height modelled after a month with 6 rows respecting aspectRatio
12716
12630
  // will result in same minHeight regardless of weekends, dayMinWidth, height:auto
12717
- const rowMinHeight = visibleWidth / options.aspectRatio / 6;
12718
- return [
12719
- forPrint
12720
- // special-case for print, which condenses whole-page width without notifying
12721
- // this is value that looks natural on paper for portrait/landscape
12722
- ? '6em'
12723
- // don't give minHeight when single-month non-auto-height
12724
- // TODO: better way to detect this with DateProfile?
12725
- : (rowCnt > 6 || isHeightAuto)
12726
- ? rowMinHeight
12727
- : undefined,
12728
- // isCompact?: just before most lone +more links hit bottom of cell
12729
- rowMinHeight < 70,
12730
- ];
12631
+ const rowBasis = visibleWidth / options.aspectRatio / 6;
12632
+ // don't give minHeight when single-month non-auto-height
12633
+ // TODO: better way to detect this with DateProfile?
12634
+ return (rowCnt > 6 || isHeightAuto) ? rowBasis : 0;
12731
12635
  }
12732
- return [undefined, false];
12636
+ return 0;
12637
+ }
12638
+ /*
12639
+ Infers cell height based on overall width
12640
+ */
12641
+ function computeRowIsCompact(visibleWidth, // should INCLUDE any scrollbar width to avoid oscillation
12642
+ options) {
12643
+ if (visibleWidth != null) {
12644
+ // ensure a consistent row min-height modelled after a month with 6 rows respecting aspectRatio
12645
+ // will result in same minHeight regardless of weekends, dayMinWidth, height:auto
12646
+ const rowBasis = visibleWidth / options.aspectRatio / 6;
12647
+ return rowBasis < 70;
12648
+ }
12649
+ return false;
12733
12650
  }
12734
12651
 
12735
12652
  class DayGridHeaderCell extends BaseComponent {
@@ -12789,6 +12706,9 @@ var FullCalendar = (function (exports) {
12789
12706
  const { props } = this;
12790
12707
  return (_("div", { role: props.role /* !!! */, "aria-rowindex": props.rowIndex != null ? 1 + props.rowIndex : undefined, className: joinClassNames('fc-flex-row fc-content-box', props.className), style: { height: props.height } }, props.dataConfigs.map((dataConfig, cellI) => (_(DayGridHeaderCell, { key: dataConfig.key, renderConfig: props.renderConfig, dataConfig: dataConfig, isSticky: props.isSticky, borderStart: Boolean(cellI), colWidth: props.colWidth, innerHeightRef: props.innerHeightRef })))));
12791
12708
  }
12709
+ componentWillUnmount() {
12710
+ setRef(this.props.innerHeightRef, null);
12711
+ }
12792
12712
  }
12793
12713
 
12794
12714
  /*
@@ -12809,37 +12729,39 @@ var FullCalendar = (function (exports) {
12809
12729
  this.handleScroller = (scroller) => {
12810
12730
  setRef(this.props.scrollerRef, scroller);
12811
12731
  };
12732
+ this.handleTotalWidth = (totalWidth) => {
12733
+ this.setState({ totalWidth });
12734
+ };
12812
12735
  this.handleClientWidth = (clientWidth) => {
12813
12736
  this.setState({ clientWidth });
12814
12737
  };
12815
- this.handleEndScrollbarWidth = (endScrollbarWidth) => {
12816
- this.setState({ endScrollbarWidth });
12817
- };
12818
12738
  }
12819
12739
  render() {
12820
12740
  const { props, state, context } = this;
12821
12741
  const { options } = context;
12742
+ const { totalWidth, clientWidth } = state;
12743
+ const endScrollbarWidth = (totalWidth != null && clientWidth != null)
12744
+ ? totalWidth - clientWidth
12745
+ : undefined;
12822
12746
  const verticalScrollbars = !props.forPrint && !getIsHeightAuto(options);
12823
12747
  const stickyHeaderDates = !props.forPrint && getStickyHeaderDates(options);
12824
12748
  return (_(k$1, null,
12825
12749
  options.dayHeaders && (_("div", { className: joinClassNames(props.forPrint ? 'fc-print-header' : 'fc-flex-row', // col for print, row for screen
12826
- 'fc-border-b') },
12827
- _(DayGridHeader, { headerTiers: props.headerTiers, className: joinClassNames('fc-daygrid-header', stickyHeaderDates && 'fc-table-header-sticky') }),
12828
- Boolean(state.endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: state.endScrollbarWidth } })))),
12829
- _(Scroller, { vertical: verticalScrollbars, clientWidthRef: this.handleClientWidth, endScrollbarWidthRef: this.handleEndScrollbarWidth, className: joinClassNames('fc-daygrid-body',
12750
+ stickyHeaderDates && 'fc-table-header-sticky', 'fc-border-b') },
12751
+ _(DayGridHeader, { headerTiers: props.headerTiers, className: 'fc-daygrid-header' }),
12752
+ Boolean(endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: endScrollbarWidth } })))),
12753
+ _(Scroller, { vertical: verticalScrollbars, className: joinClassNames('fc-daygrid-body',
12830
12754
  // HACK for Safari. Can't do break-inside:avoid with flexbox items, likely b/c it's not standard:
12831
12755
  // https://stackoverflow.com/a/60256345
12832
- !props.forPrint && 'fc-flex-col', verticalScrollbars && 'fc-liquid'), ref: this.handleScroller },
12756
+ !props.forPrint && 'fc-flex-col', verticalScrollbars && 'fc-liquid'), ref: this.handleScroller, clientWidthRef: this.handleClientWidth },
12833
12757
  _(DayGridRows, { dateProfile: props.dateProfile, todayRange: props.todayRange, cellRows: props.cellRows, forPrint: props.forPrint, isHitComboAllowed: props.isHitComboAllowed, className: 'fc-grow', dayMaxEvents: props.forPrint ? undefined : options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows,
12834
12758
  // content
12835
12759
  fgEventSegs: props.fgEventSegs, bgEventSegs: props.bgEventSegs, businessHourSegs: props.businessHourSegs, dateSelectionSegs: props.dateSelectionSegs, eventDrag: props.eventDrag, eventResize: props.eventResize, eventSelection: props.eventSelection,
12836
12760
  // dimensions
12837
- visibleWidth: // TODO: DRY
12838
- state.clientWidth != null && state.endScrollbarWidth != null
12839
- ? state.clientWidth + state.endScrollbarWidth
12840
- : undefined,
12761
+ visibleWidth: totalWidth,
12841
12762
  // refs
12842
- rowHeightRefMap: props.rowHeightRefMap }))));
12763
+ rowHeightRefMap: props.rowHeightRefMap })),
12764
+ _(Ruler, { widthRef: this.handleTotalWidth })));
12843
12765
  }
12844
12766
  }
12845
12767
 
@@ -12851,43 +12773,45 @@ var FullCalendar = (function (exports) {
12851
12773
  this.footerScrollerRef = m$1();
12852
12774
  // Sizing
12853
12775
  // -----------------------------------------------------------------------------------------------
12776
+ this.handleTotalWidth = (totalWidth) => {
12777
+ this.setState({ totalWidth });
12778
+ };
12854
12779
  this.handleClientWidth = (clientWidth) => {
12855
12780
  this.setState({ clientWidth });
12856
12781
  };
12857
- this.handleEndScrollbarWidth = (endScrollbarWidth) => {
12858
- this.setState({ endScrollbarWidth });
12859
- };
12860
12782
  }
12861
12783
  render() {
12862
12784
  const { props, state, context } = this;
12863
12785
  const { options } = context;
12786
+ const { totalWidth, clientWidth } = state;
12787
+ const endScrollbarWidth = (totalWidth != null && clientWidth != null)
12788
+ ? totalWidth - clientWidth
12789
+ : undefined;
12864
12790
  const verticalScrollbars = !props.forPrint && !getIsHeightAuto(options);
12865
12791
  const stickyHeaderDates = !props.forPrint && getStickyHeaderDates(options);
12866
12792
  const stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(options);
12867
12793
  const colCnt = props.cellRows[0].length;
12868
- const [canvasWidth, colWidth] = computeColWidth(colCnt, props.dayMinWidth, state.clientWidth);
12794
+ const [canvasWidth, colWidth] = computeColWidth(colCnt, props.dayMinWidth, clientWidth);
12869
12795
  return (_(k$1, null,
12870
- options.dayHeaders && (_("div", { className: 'fc-print-header' },
12871
- _(Scroller, { horizontal: true, hideScrollbars: true, className: joinClassNames('fc-daygrid-header fc-flex-row fc-border-b', stickyHeaderDates && 'fc-table-header-sticky'), ref: this.headerScrollerRef },
12796
+ options.dayHeaders && (_("div", { className: joinClassNames('fc-print-header', stickyHeaderDates && 'fc-table-header-sticky') },
12797
+ _(Scroller, { horizontal: true, hideScrollbars: true, className: 'fc-daygrid-header fc-flex-row fc-border-b', ref: this.headerScrollerRef },
12872
12798
  _(DayGridHeader, { headerTiers: props.headerTiers, colWidth: colWidth, width: canvasWidth }),
12873
- Boolean(state.endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: state.endScrollbarWidth } }))))),
12799
+ Boolean(endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: endScrollbarWidth } }))))),
12874
12800
  _(Scroller, { vertical: verticalScrollbars, horizontal: true, hideScrollbars: stickyFooterScrollbar ||
12875
12801
  props.forPrint // prevents blank space in print-view on Safari
12876
12802
  , className: joinClassNames('fc-daygrid-body',
12877
12803
  // HACK for Safari. Can't do break-inside:avoid with flexbox items, likely b/c it's not standard:
12878
12804
  // https://stackoverflow.com/a/60256345
12879
- !props.forPrint && 'fc-flex-col', verticalScrollbars && 'fc-liquid'), ref: this.bodyScrollerRef, clientWidthRef: this.handleClientWidth, endScrollbarWidthRef: this.handleEndScrollbarWidth },
12805
+ !props.forPrint && 'fc-flex-col', verticalScrollbars && 'fc-liquid'), ref: this.bodyScrollerRef, clientWidthRef: this.handleClientWidth },
12880
12806
  _(DayGridRows, { dateProfile: props.dateProfile, todayRange: props.todayRange, cellRows: props.cellRows, forPrint: props.forPrint, isHitComboAllowed: props.isHitComboAllowed, className: 'fc-grow', dayMaxEvents: props.forPrint ? undefined : options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows,
12881
12807
  // content
12882
12808
  fgEventSegs: props.fgEventSegs, bgEventSegs: props.bgEventSegs, businessHourSegs: props.businessHourSegs, dateSelectionSegs: props.dateSelectionSegs, eventDrag: props.eventDrag, eventResize: props.eventResize, eventSelection: props.eventSelection,
12883
12809
  // dimensions
12884
- colWidth: colWidth, width: canvasWidth, visibleWidth: // TODO: DRY
12885
- state.clientWidth != null && state.endScrollbarWidth != null
12886
- ? state.clientWidth + state.endScrollbarWidth
12887
- : undefined,
12810
+ colWidth: colWidth, width: canvasWidth, visibleWidth: totalWidth,
12888
12811
  // refs
12889
12812
  rowHeightRefMap: props.rowHeightRefMap })),
12890
- Boolean(stickyFooterScrollbar) && (_(StickyFooterScrollbar, { canvasWidth: canvasWidth, scrollerRef: this.footerScrollerRef }))));
12813
+ Boolean(stickyFooterScrollbar) && (_(FooterScrollbar, { isSticky: true, canvasWidth: canvasWidth, scrollerRef: this.footerScrollerRef })),
12814
+ _(Ruler, { widthRef: this.handleTotalWidth })));
12891
12815
  }
12892
12816
  // Lifecycle
12893
12817
  // -----------------------------------------------------------------------------------------------
@@ -12942,7 +12866,7 @@ var FullCalendar = (function (exports) {
12942
12866
  }
12943
12867
  }
12944
12868
  };
12945
- this.handleScrollEnd = ({ isUser }) => {
12869
+ this.handleScrollEnd = (isUser) => {
12946
12870
  if (isUser) {
12947
12871
  this.scrollDate = null;
12948
12872
  }
@@ -13050,7 +12974,7 @@ var FullCalendar = (function (exports) {
13050
12974
  return { start, end };
13051
12975
  }
13052
12976
 
13053
- var css_248z$3 = ":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-daygrid-day-header{display:flex;flex-direction:row-reverse}.fc-day-other .fc-daygrid-day-header{opacity:.3}.fc-daygrid-day-number{padding:4px;position:relative}.fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc-daygrid-day-body{display:flex;flex-direction:column;margin-bottom:1px}.fc-daygrid-day-body-tall{margin-bottom:1em;min-height:2em}.fc-daygrid-day-body:only-child{margin-top:2px}.fc-daygrid-more-link{border-radius:3px;cursor:pointer;font-size:var(--fc-small-font-size);margin:0 2px 1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap}.fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc-daygrid-more-link-button{align-self:flex-start}.fc-daygrid-more-link-block{border:1px solid var(--fc-event-border-color);padding:1px}.fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0}.fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);margin-bottom:1px}.fc-media-print .fc-daygrid-event{overflow:hidden!important;white-space:nowrap!important}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;direction:row;display:flex;padding:2px 0;position:relative;z-index:2}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-daygrid-dot-event .fc-event-time,.fc-daygrid-dot-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-daygrid-dot-event .fc-event-title{flex-basis:0;flex-grow:1;font-weight:700;min-height:0;min-width:0}";
12977
+ var css_248z$3 = ":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-row-print{min-height:6em}.fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-daygrid-day-header{display:flex;flex-direction:row-reverse}.fc-day-other .fc-daygrid-day-header{opacity:.3}.fc-daygrid-day-number{padding:4px;position:relative}.fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc-daygrid-day-body{display:flex;flex-direction:column;margin-bottom:1px}.fc-daygrid-day-body-tall{margin-bottom:1em;min-height:2em}.fc-daygrid-day-body:only-child{margin-top:2px}.fc-daygrid-more-link{border-radius:3px;cursor:pointer;font-size:var(--fc-small-font-size);margin:0 2px 1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap}.fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc-daygrid-more-link-button{align-self:flex-start}.fc-daygrid-more-link-block{border:1px solid var(--fc-event-border-color);padding:1px}.fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:1}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px}.fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);margin-bottom:1px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;direction:row;display:flex;padding:2px 0;position:relative}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-daygrid-dot-event .fc-event-time,.fc-daygrid-dot-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-media-print .fc-daygrid-dot-event .fc-event-time,.fc-media-print .fc-daygrid-dot-event .fc-event-title{overflow:hidden!important;white-space:nowrap!important}.fc-daygrid-dot-event .fc-event-title{flex-basis:0;flex-grow:1;font-weight:700;min-height:0;min-width:0}";
13054
12978
  injectStyles(css_248z$3);
13055
12979
 
13056
12980
  var index$3 = createPlugin({
@@ -13230,7 +13154,7 @@ var FullCalendar = (function (exports) {
13230
13154
  role: 'rowheader',
13231
13155
  }, className: 'fc-timegrid-allday-label fc-timegrid-axis fc-cell fc-content-box', style: {
13232
13156
  width: props.width,
13233
- }, renderProps: renderProps, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner$1, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }, (InnerContent) => (_(InnerContent, { tag: "span", className: 'fc-timegrid-axis-inner fc-cell-inner fc-padding-sm', elRef: this.innerElRef }))));
13157
+ }, renderProps: renderProps, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner$1, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }, (InnerContent) => (_(InnerContent, { tag: "span", className: 'fc-timegrid-allday-label-inner fc-timegrid-axis-inner fc-cell-inner fc-padding-sm', elRef: this.innerElRef }))));
13234
13158
  }
13235
13159
  componentDidMount() {
13236
13160
  const { props } = this;
@@ -13281,8 +13205,7 @@ var FullCalendar = (function (exports) {
13281
13205
  start: cellStartDate,
13282
13206
  end: cellEndDate,
13283
13207
  }, allDay: true }, cell.dateSpanProps),
13284
- // HACK. TODO: This is expensive to do every hit-query
13285
- dayEl: getCellEl(this.rootEl, col),
13208
+ getDayEl: () => getCellEl(this.rootEl, col),
13286
13209
  rect: {
13287
13210
  left,
13288
13211
  right,
@@ -13298,9 +13221,6 @@ var FullCalendar = (function (exports) {
13298
13221
  let daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);
13299
13222
  return new DayTableModel(daySeries, false);
13300
13223
  }
13301
- /*
13302
- TODO: move this so @fullcalendar/daygrid
13303
- */
13304
13224
  function buildDayRanges(dayTableModel, dateProfile, dateEnv) {
13305
13225
  let ranges = [];
13306
13226
  for (let date of dayTableModel.headerDates) {
@@ -13575,6 +13495,7 @@ var FullCalendar = (function (exports) {
13575
13495
  constructor() {
13576
13496
  super(...arguments);
13577
13497
  this.sortEventSegs = memoize(sortEventSegs);
13498
+ this.getDateMeta = memoize(getDateMeta);
13578
13499
  }
13579
13500
  render() {
13580
13501
  let { props, context } = this;
@@ -13589,27 +13510,26 @@ var FullCalendar = (function (exports) {
13589
13510
  (props.eventDrag && props.eventDrag.affectedInstances) ||
13590
13511
  (props.eventResize && props.eventResize.affectedInstances) ||
13591
13512
  {};
13592
- // TODO: memoize
13593
- let dateMeta = getDateMeta(props.date, props.todayRange, null, props.dateProfile);
13513
+ let dateMeta = this.getDateMeta(props.date, props.todayRange, null, props.dateProfile);
13594
13514
  const baseClassName = joinClassNames('fc-timegrid-day', props.borderStart && 'fc-border-s', props.width == null && 'fc-liquid', 'fc-flex-col fc-rel');
13515
+ const baseStyle = {
13516
+ width: props.width,
13517
+ zIndex: 1, // get above slots
13518
+ };
13595
13519
  if (dateMeta.isDisabled) {
13596
- return (_("div", { role: 'gridcell', "aria-disabled": true, className: joinClassNames(baseClassName, 'fc-day-disabled'), style: {
13597
- width: props.width
13598
- } }));
13520
+ return (_("div", { role: 'gridcell', "aria-disabled": true, className: joinClassNames(baseClassName, 'fc-day-disabled'), style: baseStyle }));
13599
13521
  }
13600
13522
  let sortedFgSegs = this.sortEventSegs(props.fgEventSegs, options.eventOrder);
13601
- return (_(DayCellContainer, { tag: "div", attrs: Object.assign(Object.assign({}, props.attrs), { role: 'gridcell' }), className: baseClassName, style: {
13602
- width: props.width
13603
- }, date: props.date, dateMeta: dateMeta, renderProps: props.renderProps }, (InnerContent) => (_(k$1, null,
13523
+ return (_(DayCellContainer, { tag: "div", attrs: Object.assign(Object.assign({}, props.attrs), { role: 'gridcell' }), className: baseClassName, style: baseStyle, date: props.date, dateMeta: dateMeta, renderProps: props.renderProps }, (InnerContent) => (_(k$1, null,
13604
13524
  this.renderFillSegs(props.businessHourSegs, 'non-business'),
13605
13525
  this.renderFillSegs(props.bgEventSegs, 'bg-event'),
13606
13526
  this.renderFillSegs(props.dateSelectionSegs, 'highlight'),
13607
- hasCustomDayCellContent(options) && (_(InnerContent, { tag: "div", className: 'fc-timegrid-day-misc fc-rel' })),
13527
+ hasCustomDayCellContent(options) && (_(InnerContent, { tag: "div", className: 'fc-timegrid-day-misc fc-fill-top' })),
13608
13528
  _("div", { className: joinClassNames('fc-timegrid-day-events', (props.forPrint && simplifiedTimeGridPrint)
13609
13529
  ? 'fc-timegrid-day-events-simple'
13610
13530
  : 'fc-fill') }, this.renderFgSegs(sortedFgSegs, interactionAffectedInstances, false, false, false)),
13611
13531
  Boolean(mirrorSegs.length) && (
13612
- // has a z-index to be above other fg container,
13532
+ // has natural z-index to be above other fg container,
13613
13533
  // but only show it when there are actual mirror events, to avoid blocking clicks
13614
13534
  _("div", { className: 'fc-timegrid-day-events fc-fill' }, this.renderFgSegs(mirrorSegs, {}, Boolean(props.eventDrag), Boolean(props.eventResize), Boolean(isSelectMirror), 'mirror'))),
13615
13535
  this.renderNowIndicator(props.nowIndicatorSegs)))));
@@ -13640,7 +13560,7 @@ var FullCalendar = (function (exports) {
13640
13560
  ? this.computeSegHStyle(segRect)
13641
13561
  : { left: 0, right: 0 };
13642
13562
  let isVisible = isMirror || (segRect && !segIsInvisible[instanceId]);
13643
- let isInset = segRect && Boolean(segRect.stackDepth);
13563
+ let isInset = segRect ? Boolean(segRect.stackDepth) : false;
13644
13564
  return (_("div", {
13645
13565
  // we would have used fc-fill, but multi-page spanning breaks in Firefox
13646
13566
  // we would have used height:100%, but multi-page spanning breaks in Safari
@@ -13770,8 +13690,7 @@ var FullCalendar = (function (exports) {
13770
13690
  return {
13771
13691
  dateProfile,
13772
13692
  dateSpan: Object.assign({ range: { start, end }, allDay: false }, cell.dateSpanProps),
13773
- // HACK. TODO: This is expensive to do every hit-query
13774
- dayEl: getCellEl(this.rootEl, col),
13693
+ getDayEl: () => getCellEl(this.rootEl, col),
13775
13694
  rect: {
13776
13695
  left,
13777
13696
  right,
@@ -13813,9 +13732,20 @@ var FullCalendar = (function (exports) {
13813
13732
  omitZeroMinute: true,
13814
13733
  meridiem: 'short',
13815
13734
  });
13735
+ function createRenderProps(date, time, labelFormat, dateEnv, viewApi) {
13736
+ return {
13737
+ level: 0,
13738
+ time: time,
13739
+ date: dateEnv.toDate(date),
13740
+ view: viewApi,
13741
+ text: dateEnv.format(date, labelFormat),
13742
+ };
13743
+ }
13816
13744
  class TimeGridSlatLabel extends BaseComponent {
13817
13745
  constructor() {
13818
13746
  super(...arguments);
13747
+ // memo
13748
+ this.createRenderProps = memoize(createRenderProps);
13819
13749
  // ref
13820
13750
  this.innerElRef = m$1();
13821
13751
  }
@@ -13824,22 +13754,14 @@ var FullCalendar = (function (exports) {
13824
13754
  let { dateEnv, options, viewApi } = context;
13825
13755
  let className = joinClassNames('fc-timegrid-slot-label fc-timegrid-axis fc-header-cell fc-cell', props.isLiquid ? 'fc-liquid' : 'fc-content-box');
13826
13756
  if (!props.isLabeled) {
13827
- return (_("div", { "data-time": props.isoTimeStr, className: className, style: { width: props.width } }));
13757
+ return (_("div", { className: className, style: { width: props.width } }));
13828
13758
  }
13829
13759
  let labelFormat = // TODO: fully pre-parse
13830
13760
  options.slotLabelFormat == null ? DEFAULT_SLAT_LABEL_FORMAT :
13831
13761
  Array.isArray(options.slotLabelFormat) ? createFormatter(options.slotLabelFormat[0]) :
13832
13762
  createFormatter(options.slotLabelFormat);
13833
- let renderProps = {
13834
- level: 0,
13835
- time: props.time,
13836
- date: dateEnv.toDate(props.date),
13837
- view: viewApi,
13838
- text: dateEnv.format(props.date, labelFormat),
13839
- };
13840
- return (_(ContentContainer, { tag: "div", attrs: {
13841
- 'data-time': props.isoTimeStr,
13842
- }, className: className, style: { width: props.width }, renderProps: renderProps, generatorName: "slotLabelContent", customGenerator: options.slotLabelContent, defaultGenerator: renderInnerContent$1, classNameGenerator: options.slotLabelClassNames, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, (InnerContent) => (_(InnerContent, { tag: "div", className: 'fc-timegrid-axis-inner fc-cell-inner fc-padding-sm', elRef: this.innerElRef }))));
13763
+ let renderProps = this.createRenderProps(props.date, props.time, labelFormat, dateEnv, viewApi);
13764
+ return (_(ContentContainer, { tag: "div", className: className, style: { width: props.width }, renderProps: renderProps, generatorName: "slotLabelContent", customGenerator: options.slotLabelContent, defaultGenerator: renderInnerContent$1, classNameGenerator: options.slotLabelClassNames, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, (InnerContent) => (_(InnerContent, { tag: "div", className: 'fc-timegrid-axis-inner fc-cell-inner fc-padding-sm', elRef: this.innerElRef }))));
13843
13765
  }
13844
13766
  componentDidMount() {
13845
13767
  const { props } = this;
@@ -13882,9 +13804,7 @@ var FullCalendar = (function (exports) {
13882
13804
  };
13883
13805
  return (_(ContentContainer, { tag: "div",
13884
13806
  // TODO: have lane classNames like 'fc-timegrid-lane'/'fc-timegrid-slot-lane'/'fc-timegrid-slat-lane'
13885
- className: joinClassNames('fc-cell fc-liquid', props.borderStart && 'fc-border-s'), attrs: {
13886
- 'data-time': props.isoTimeStr,
13887
- }, renderProps: renderProps, generatorName: "slotLaneContent", customGenerator: options.slotLaneContent, classNameGenerator: options.slotLaneClassNames, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount }, (InnerContent) => (_(InnerContent, { tag: "div", className: 'fc-cell-inner', elRef: this.innerElRef }))));
13807
+ className: joinClassNames('fc-timegrid-slot-lane fc-cell fc-liquid', props.borderStart && 'fc-border-s'), renderProps: renderProps, generatorName: "slotLaneContent", customGenerator: options.slotLaneContent, classNameGenerator: options.slotLaneClassNames, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount }, (InnerContent) => (_(InnerContent, { tag: "div", className: 'fc-cell-inner', elRef: this.innerElRef }))));
13888
13808
  }
13889
13809
  componentDidMount() {
13890
13810
  const innerEl = this.innerElRef.current; // TODO: make dynamic with useEffect
@@ -13979,15 +13899,15 @@ var FullCalendar = (function (exports) {
13979
13899
  this.axisScrollerRef = m$1();
13980
13900
  // Sizing
13981
13901
  // -----------------------------------------------------------------------------------------------
13902
+ this.handleTotalWidth = (totalWidth) => {
13903
+ this.setState({ totalWidth });
13904
+ };
13982
13905
  this.handleClientWidth = (clientWidth) => {
13983
13906
  this.setState({ clientWidth });
13984
13907
  };
13985
13908
  this.handleClientHeight = (clientHeight) => {
13986
13909
  this.setState({ clientHeight });
13987
13910
  };
13988
- this.handleEndScrollbarWidth = (endScrollbarWidth) => {
13989
- this.setState({ endScrollbarWidth });
13990
- };
13991
13911
  this.handleBottomScrollbarWidth = (bottomScrollbarWidth) => {
13992
13912
  this.setState({ bottomScrollbarWidth });
13993
13913
  };
@@ -14036,8 +13956,11 @@ var FullCalendar = (function (exports) {
14036
13956
  render() {
14037
13957
  const { props, state, context, headerLabelInnerWidthRefMap, headerLabelInnerHeightRefMap, headerMainInnerHeightRefMap, slatLabelInnerWidthRefMap, slatLabelInnerHeightRefMap, slatMainInnerHeightRefMap, } = this;
14038
13958
  const { nowDate, headerTiers, forPrint } = props;
14039
- const { axisWidth } = state;
13959
+ const { axisWidth, totalWidth, clientWidth, clientHeight, bottomScrollbarWidth } = state;
14040
13960
  const { options } = context;
13961
+ const endScrollbarWidth = (totalWidth != null && clientWidth != null)
13962
+ ? totalWidth - clientWidth
13963
+ : undefined;
14041
13964
  const verticalScrolling = !forPrint && !getIsHeightAuto(options);
14042
13965
  const stickyHeaderDates = !forPrint && getStickyHeaderDates(options);
14043
13966
  const stickyFooterScrollbar = !forPrint && getStickyFooterScrollbar(options);
@@ -14045,26 +13968,25 @@ var FullCalendar = (function (exports) {
14045
13968
  const simplePrint = forPrint && simplifiedTimeGridPrint;
14046
13969
  const colCnt = props.cells.length;
14047
13970
  // TODO: memo?
14048
- const [canvasWidth, colWidth] = computeColWidth(colCnt, props.dayMinWidth, state.clientWidth);
13971
+ const [canvasWidth, colWidth] = computeColWidth(colCnt, props.dayMinWidth, clientWidth);
14049
13972
  const slatCnt = props.slatMetas.length;
14050
13973
  const [slatHeight, slatLiquid] = computeSlatHeight(// TODO: memo?
14051
- verticalScrolling && options.expandRows, slatCnt, state.slatInnerHeight, state.clientHeight);
13974
+ verticalScrolling && options.expandRows, slatCnt, state.slatInnerHeight, clientHeight);
14052
13975
  this.slatHeight = slatHeight;
14053
13976
  // TODO: have computeSlatHeight return?
14054
13977
  const totalSlatHeight = (slatHeight || 0) * slatCnt;
14055
13978
  const forcedBodyHeight = absPrint ? totalSlatHeight : undefined;
14056
13979
  const rowsNotExpanding = verticalScrolling && !options.expandRows &&
14057
- state.clientHeight != null && state.clientHeight > totalSlatHeight;
13980
+ clientHeight != null && clientHeight > totalSlatHeight;
14058
13981
  const firstBodyRowIndex = options.dayHeaders ? headerTiers.length + 1 : 1;
14059
13982
  return (_(k$1, null,
14060
13983
  options.dayHeaders && (_("div", { className: joinClassNames(
14061
13984
  // see note in TimeGridLayout about why we don't do fc-print-header
14062
13985
  'fc-timegrid-header fc-flex-row fc-border-b', stickyHeaderDates && 'fc-table-header-sticky') },
14063
- _("div", { role: 'rowgroup', className: 'fc-content-box', style: { width: axisWidth } }, headerTiers.map((models, tierNum) => (_("div", { key: tierNum, role: 'row', "aria-rowindex": tierNum + 1, className: joinClassNames('fc-flex-row fc-content-box', tierNum && 'fc-border-t'), style: { height: state.headerTierHeights[tierNum] } }, (options.weekNumbers && tierNum === headerTiers.length - 1) ? ( // last row?
14064
- _(TimeGridWeekNumber, { dateProfile: props.dateProfile, innerWidthRef: headerLabelInnerWidthRefMap.createRef(tierNum), innerHeightRef: headerLabelInnerHeightRefMap.createRef(tierNum), width: undefined, isLiquid: true })) : (_(TimeGridAxisEmpty, { width: undefined, isLiquid: true })))))),
13986
+ _("div", { role: 'rowgroup', className: 'fc-content-box', style: { width: axisWidth } }, headerTiers.map((rowConfig, tierNum) => (_("div", { key: tierNum, role: 'row', "aria-rowindex": tierNum + 1, className: joinClassNames('fc-flex-row fc-content-box', tierNum && 'fc-border-t'), style: { height: state.headerTierHeights[tierNum] } }, (options.weekNumbers && rowConfig.isDateRow) ? (_(TimeGridWeekNumber, { dateProfile: props.dateProfile, innerWidthRef: headerLabelInnerWidthRefMap.createRef(tierNum), innerHeightRef: headerLabelInnerHeightRefMap.createRef(tierNum), width: undefined, isLiquid: true })) : (_(TimeGridAxisEmpty, { width: undefined, isLiquid: true })))))),
14065
13987
  _(Scroller, { horizontal: true, hideScrollbars: true, className: 'fc-flex-row fc-border-s fc-liquid', ref: this.headerScrollerRef },
14066
13988
  _("div", { role: 'rowgroup', className: canvasWidth == null ? 'fc-liquid' : '', style: { width: canvasWidth } }, props.headerTiers.map((rowConfig, tierNum) => (_(DayGridHeaderRow, Object.assign({}, rowConfig, { key: tierNum, role: 'row', rowIndex: tierNum, className: tierNum ? 'fc-border-t' : '', height: state.headerTierHeights[tierNum], colWidth: colWidth, innerHeightRef: headerMainInnerHeightRefMap.createRef(tierNum) }))))),
14067
- Boolean(state.endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: state.endScrollbarWidth } }))))),
13989
+ Boolean(endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: endScrollbarWidth } }))))),
14068
13990
  _("div", { role: 'rowgroup', className: joinClassNames('fc-flex-col', verticalScrolling && 'fc-liquid') },
14069
13991
  options.allDaySlot && (_(k$1, null,
14070
13992
  _("div", { role: 'row', "aria-rowindex": firstBodyRowIndex, className: 'fc-timegrid-allday fc-flex-row' },
@@ -14072,35 +13994,39 @@ var FullCalendar = (function (exports) {
14072
13994
  _(Scroller, { horizontal: true, hideScrollbars: true, className: 'fc-border-s fc-flex-row fc-liquid' // fill remaining width
14073
13995
  , ref: this.allDayScrollerRef },
14074
13996
  _("div", { className: 'fc-flex-col', style: { width: canvasWidth } },
14075
- _(TimeGridAllDayLane, { dateProfile: props.dateProfile, todayRange: props.todayRange, cells: props.cells, showDayNumbers: false, forPrint: forPrint, isHitComboAllowed: props.isHitComboAllowed, isCompact: computeRowHeight(state.clientWidth, 1, true, forPrint, options)[1],
13997
+ _(TimeGridAllDayLane, { dateProfile: props.dateProfile, todayRange: props.todayRange, cells: props.cells, showDayNumbers: false, forPrint: forPrint, isHitComboAllowed: props.isHitComboAllowed, isCompact: computeRowIsCompact(clientWidth, options),
14076
13998
  // content
14077
13999
  fgEventSegs: props.fgEventSegs, bgEventSegs: props.bgEventSegs, businessHourSegs: props.businessHourSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows,
14078
14000
  // dimensions
14079
14001
  colWidth: colWidth })),
14080
- Boolean(state.endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: state.endScrollbarWidth } })))),
14002
+ Boolean(endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: endScrollbarWidth } })))),
14081
14003
  _("div", { className: 'fc-rowdivider' }))),
14082
- _("div", { role: 'row', "aria-rowindex": firstBodyRowIndex + (options.allDaySlot ? 1 : 0), className: joinClassNames('fc-timegrid-body fc-flex-row', // TODO: rename away from "body"? (because we have another "body" div above)
14004
+ _("div", { role: 'row', "aria-rowindex": firstBodyRowIndex + (options.allDaySlot ? 1 : 0), className: joinClassNames('fc-timegrid-body fc-flex-row fc-rel', // TODO: rename away from "body"? (because we have another "body" div above)
14005
+ // fc-rel for Ruler.fc-fill-start
14083
14006
  verticalScrolling && 'fc-liquid') },
14084
14007
  _(Scroller, { vertical: verticalScrolling, hideScrollbars: true, className: 'fc-flex-col fc-content-box', style: {
14085
14008
  width: axisWidth,
14086
14009
  }, ref: this.axisScrollerRef }, !simplePrint && (_(k$1, null,
14087
- _("div", { role: 'rowheader', "aria-label": options.timedText, className: joinClassNames('fc-flex-col fc-grow', absPrint && 'fc-rel'), style: {
14010
+ _("div", { role: 'rowheader', "aria-label": options.timedText,
14011
+ // fc-rel is for absPrint AND TimeGridNowIndicatorArrow
14012
+ className: 'fc-flex-col fc-grow fc-rel', style: {
14088
14013
  height: forcedBodyHeight,
14089
14014
  } },
14090
- _("div", { "aria-hidden": true, className: joinClassNames('fc-timegrid-slots-axis fc-flex-col', (verticalScrolling && options.expandRows) && 'fc-grow', absPrint && 'fc-fill-x') }, props.slatMetas.map((slatMeta, slatI) => (_("div", { key: slatMeta.key, className: joinClassNames(...getSlatRowClassNames(slatMeta), slatI && 'fc-border-t', slatLiquid && 'fc-liquid'), style: {
14015
+ _("div", { "aria-hidden": true, className: joinClassNames('fc-timegrid-slots-axis fc-flex-col', (verticalScrolling && options.expandRows) && 'fc-grow', absPrint && 'fc-fill-x') }, props.slatMetas.map((slatMeta, slatI) => (_("div", { key: slatMeta.key, "data-time": slatMeta.isoTimeStr, className: joinClassNames(...getSlatRowClassNames(slatMeta), slatI && 'fc-border-t', slatLiquid && 'fc-liquid'), style: {
14091
14016
  height: slatLiquid ? '' : slatHeight
14092
14017
  } },
14093
- _(TimeGridSlatLabel, Object.assign({}, slatMeta, { isLiquid: true, innerWidthRef: slatLabelInnerWidthRefMap.createRef(slatMeta.key), innerHeightRef: slatLabelInnerHeightRefMap.createRef(slatMeta.key) })))))),
14018
+ _(TimeGridSlatLabel, Object.assign({}, slatMeta /* FYI doesn't need isoTimeStr */, { isLiquid: true, innerWidthRef: slatLabelInnerWidthRefMap.createRef(slatMeta.key), innerHeightRef: slatLabelInnerHeightRefMap.createRef(slatMeta.key) })))))),
14094
14019
  options.nowIndicator && rangeContainsMarker(props.dateProfile.currentRange, nowDate) && (_(TimeGridNowIndicatorArrow, { nowDate: nowDate, dateProfile: props.dateProfile, totalHeight: slatHeight != null ? slatHeight * slatCnt : undefined })),
14095
- Boolean(rowsNotExpanding || state.bottomScrollbarWidth) && (_("div", { class: joinClassNames('fc-border-t fc-filler', rowsNotExpanding && 'fc-liquid'), style: {
14096
- minHeight: state.bottomScrollbarWidth
14020
+ Boolean(rowsNotExpanding || bottomScrollbarWidth) && (_("div", { class: joinClassNames('fc-border-t fc-filler', rowsNotExpanding && 'fc-liquid'), style: {
14021
+ minHeight: bottomScrollbarWidth
14097
14022
  } })))))),
14098
14023
  _("div", {
14099
14024
  // we need this div because it's bad for Scroller to have left/right borders,
14100
- // AND because we need to containt the StickyFooterScrollbar
14025
+ // AND because we need to containt the FooterScrollbar
14101
14026
  className: 'fc-border-s fc-flex-col fc-liquid' },
14102
14027
  _(Scroller, { vertical: verticalScrolling, horizontal: true, hideScrollbars: stickyFooterScrollbar || // also means height:auto, so won't need vertical scrollbars anyway
14103
- forPrint, className: joinClassNames('fc-flex-col', verticalScrolling && 'fc-liquid'), ref: this.mainScrollerRef, clientWidthRef: this.handleClientWidth, clientHeightRef: this.handleClientHeight, endScrollbarWidthRef: this.handleEndScrollbarWidth, bottomScrollbarWidthRef: this.handleBottomScrollbarWidth },
14028
+ forPrint, className: joinClassNames('fc-flex-col fc-rel', // fc-rel for Ruler.fc-fill-start
14029
+ verticalScrolling && 'fc-liquid'), ref: this.mainScrollerRef, clientWidthRef: this.handleClientWidth, clientHeightRef: this.handleClientHeight },
14104
14030
  _("div", { className: 'fc-flex-col fc-grow fc-rel', style: {
14105
14031
  width: canvasWidth,
14106
14032
  height: forcedBodyHeight,
@@ -14111,12 +14037,13 @@ var FullCalendar = (function (exports) {
14111
14037
  // dimensions
14112
14038
  colWidth: colWidth, slatHeight: slatHeight }),
14113
14039
  !simplePrint && (_(k$1, null,
14114
- _("div", { "aria-hidden": true, className: joinClassNames('fc-timegrid-slots fc-flex-col', (verticalScrolling && options.expandRows) && 'fc-grow', absPrint ? 'fc-fill-x' : 'fc-rel') }, props.slatMetas.map((slatMeta, slatI) => (_("div", { key: slatMeta.key, className: joinClassNames(...getSlatRowClassNames(slatMeta), slatI && 'fc-border-t', slatLiquid && 'fc-liquid'), style: {
14040
+ _("div", { "aria-hidden": true, className: joinClassNames('fc-timegrid-slots fc-flex-col', (verticalScrolling && options.expandRows) && 'fc-grow', absPrint ? 'fc-fill-x' : 'fc-rel') }, props.slatMetas.map((slatMeta, slatI) => (_("div", { key: slatMeta.key, "data-time": slatMeta.isoTimeStr, className: joinClassNames(...getSlatRowClassNames(slatMeta), slatI && 'fc-border-t', slatLiquid && 'fc-liquid'), style: {
14115
14041
  height: slatLiquid ? '' : slatHeight
14116
14042
  } },
14117
- _(TimeGridSlatLane, Object.assign({}, slatMeta, { innerHeightRef: slatMainInnerHeightRefMap.createRef(slatMeta.key) })))))),
14043
+ _(TimeGridSlatLane, Object.assign({}, slatMeta /* FYI doesn't need isoTimeStr */, { innerHeightRef: slatMainInnerHeightRefMap.createRef(slatMeta.key) })))))),
14118
14044
  rowsNotExpanding && (_("div", { class: 'fc-liquid fc-border-t fc-filler' })))))),
14119
- Boolean(stickyFooterScrollbar) && (_(StickyFooterScrollbar, { canvasWidth: canvasWidth, scrollerRef: this.footScrollerRef, scrollbarWidthRef: this.handleBottomScrollbarWidth })))))));
14045
+ Boolean(stickyFooterScrollbar) && (_(FooterScrollbar, { isSticky: true, canvasWidth: canvasWidth, scrollerRef: this.footScrollerRef, scrollbarWidthRef: this.handleBottomScrollbarWidth }))))),
14046
+ _(Ruler, { widthRef: this.handleTotalWidth })));
14120
14047
  }
14121
14048
  // Lifecycle
14122
14049
  // -----------------------------------------------------------------------------------------------
@@ -14130,6 +14057,7 @@ var FullCalendar = (function (exports) {
14130
14057
  }
14131
14058
  componentWillUnmount() {
14132
14059
  this.destroyScrollers();
14060
+ setRef(this.props.slatHeightRef, null);
14133
14061
  }
14134
14062
  updateSlatHeight() {
14135
14063
  if (this.prevSlatHeight !== this.slatHeight) {
@@ -14175,6 +14103,10 @@ var FullCalendar = (function (exports) {
14175
14103
  this.allDayLabelInnerWidth = width;
14176
14104
  afterSize(this.handleAxisInnerWidths);
14177
14105
  };
14106
+ this.handleWeekNumberInnerWidth = (width) => {
14107
+ this.weekNumberInnerWidth = width;
14108
+ afterSize(this.handleAxisInnerWidths);
14109
+ };
14178
14110
  this.slatLabelInnerWidthRefMap = new RefMap(() => {
14179
14111
  afterSize(this.handleAxisInnerWidths);
14180
14112
  });
@@ -14186,19 +14118,25 @@ var FullCalendar = (function (exports) {
14186
14118
  });
14187
14119
  // Sizing
14188
14120
  // -----------------------------------------------------------------------------------------------
14121
+ this.handleTotalWidth = (totalWidth) => {
14122
+ // Must delay the rerender because might change the width of the all-day DayGridRow events,
14123
+ // which shows a ResizeObserver loop warning
14124
+ requestAnimationFrame(() => {
14125
+ this.setState({ totalWidth });
14126
+ });
14127
+ };
14189
14128
  this.handleClientWidth = (clientWidth) => {
14190
14129
  this.setState({ clientWidth });
14191
14130
  };
14192
14131
  this.handleClientHeight = (clientHeight) => {
14193
14132
  this.setState({ clientHeight });
14194
14133
  };
14195
- this.handleEndScrollbarWidth = (endScrollbarWidth) => {
14196
- this.setState({ endScrollbarWidth });
14197
- };
14198
14134
  this.handleAxisInnerWidths = () => {
14199
14135
  const headerLabelInnerWidthMap = this.headerLabelInnerWidthRefMap.current;
14200
14136
  const slatLabelInnerWidthMap = this.slatLabelInnerWidthRefMap.current;
14201
- let max = this.allDayLabelInnerWidth || 0; // guard against all-day slot hidden
14137
+ let max = Math.max(this.weekNumberInnerWidth || 0, // might not exist
14138
+ this.allDayLabelInnerWidth || 0 // guard against all-day slot hidden
14139
+ );
14202
14140
  for (const headerLabelInnerWidth of headerLabelInnerWidthMap.values()) {
14203
14141
  max = Math.max(max, headerLabelInnerWidth);
14204
14142
  }
@@ -14227,8 +14165,11 @@ var FullCalendar = (function (exports) {
14227
14165
  render() {
14228
14166
  const { props, state, context, slatLabelInnerWidthRefMap, slatLabelInnerHeightRefMap, slatInnerMainHeightRefMap, headerLabelInnerWidthRefMap } = this;
14229
14167
  const { nowDate, forPrint } = props;
14230
- const { axisWidth } = state;
14168
+ const { axisWidth, clientWidth, totalWidth } = state;
14231
14169
  const { options } = context;
14170
+ const endScrollbarWidth = (totalWidth != null && clientWidth != null)
14171
+ ? totalWidth - clientWidth
14172
+ : undefined;
14232
14173
  const verticalScrolling = !forPrint && !getIsHeightAuto(options);
14233
14174
  const stickyHeaderDates = !forPrint && getStickyHeaderDates(options);
14234
14175
  const slatCnt = props.slatMetas.length;
@@ -14250,20 +14191,20 @@ var FullCalendar = (function (exports) {
14250
14191
  options.dayHeaders && (_("div", { role: 'rowgroup', className: joinClassNames(
14251
14192
  // see note in TimeGridLayout about why we don't do fc-print-header
14252
14193
  'fc-timegrid-header fc-flex-col fc-border-b', stickyHeaderDates && 'fc-table-header-sticky') }, props.headerTiers.map((rowConfig, tierNum) => (_("div", { key: tierNum, role: 'row', className: joinClassNames('fc-flex-row', tierNum && 'fc-border-t') },
14253
- (options.weekNumbers && tierNum === props.headerTiers.length - 1) ? ( // last row?
14254
- _(TimeGridWeekNumber, { dateProfile: props.dateProfile, innerHeightRef: headerLabelInnerWidthRefMap.createRef(tierNum), width: axisWidth, isLiquid: false })) : (_(TimeGridAxisEmpty, { width: axisWidth, isLiquid: false })),
14194
+ (options.weekNumbers && rowConfig.isDateRow) ? (_(TimeGridWeekNumber, { dateProfile: props.dateProfile, innerWidthRef: this.handleWeekNumberInnerWidth, innerHeightRef: headerLabelInnerWidthRefMap.createRef(tierNum), width: axisWidth, isLiquid: false })) : (_(TimeGridAxisEmpty, { width: axisWidth, isLiquid: false })),
14255
14195
  _(DayGridHeaderRow, Object.assign({}, rowConfig, { className: 'fc-border-s fc-liquid' })),
14256
- Boolean(state.endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: state.endScrollbarWidth } }))))))),
14196
+ Boolean(endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: endScrollbarWidth } }))))))),
14257
14197
  _("div", { role: 'rowgroup', className: joinClassNames('fc-flex-col', verticalScrolling && 'fc-liquid') },
14258
14198
  options.allDaySlot && (_(k$1, null,
14259
14199
  _("div", { role: 'row', className: 'fc-timegrid-allday fc-flex-row' },
14260
14200
  _(TimeGridAllDayLabel, { width: axisWidth, innerWidthRef: this.handleAllDayLabelInnerWidth }),
14261
- _(TimeGridAllDayLane, { dateProfile: props.dateProfile, todayRange: props.todayRange, cells: props.cells, showDayNumbers: false, forPrint: forPrint, isHitComboAllowed: props.isHitComboAllowed, className: 'fc-border-s fc-liquid', isCompact: computeRowHeight(state.clientWidth, 1, true, forPrint, options)[1],
14201
+ _(TimeGridAllDayLane, { dateProfile: props.dateProfile, todayRange: props.todayRange, cells: props.cells, showDayNumbers: false, forPrint: forPrint, isHitComboAllowed: props.isHitComboAllowed, className: 'fc-border-s fc-liquid', isCompact: computeRowIsCompact(clientWidth, options),
14262
14202
  // content
14263
14203
  fgEventSegs: props.fgEventSegs, bgEventSegs: props.bgEventSegs, businessHourSegs: props.businessHourSegs, dateSelectionSegs: props.dateSelectionSegs, eventDrag: props.eventDrag, eventResize: props.eventResize, eventSelection: props.eventSelection, dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows }),
14264
- Boolean(state.endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: state.endScrollbarWidth } }))),
14204
+ Boolean(endScrollbarWidth) && (_("div", { className: 'fc-border-s fc-filler', style: { minWidth: endScrollbarWidth } }))),
14265
14205
  _("div", { className: 'fc-rowdivider' }))),
14266
- _(Scroller, { vertical: verticalScrolling, className: joinClassNames('fc-timegrid-body fc-flex-col', verticalScrolling && 'fc-liquid'), ref: props.timeScrollerRef, clientWidthRef: this.handleClientWidth, clientHeightRef: this.handleClientHeight, endScrollbarWidthRef: this.handleEndScrollbarWidth },
14206
+ _(Scroller, { vertical: verticalScrolling, className: joinClassNames('fc-timegrid-body fc-flex-col fc-rel', // fc-rel for Ruler.fc-fill-start
14207
+ verticalScrolling && 'fc-liquid'), ref: props.timeScrollerRef, clientWidthRef: this.handleClientWidth, clientHeightRef: this.handleClientHeight },
14267
14208
  _("div", { className: 'fc-flex-col fc-grow fc-rel', style: {
14268
14209
  // in print mode, this div creates the height and everything is absolutely positioned within
14269
14210
  // we need to do this so that slats positioning synces with events's positioning
@@ -14280,13 +14221,14 @@ var FullCalendar = (function (exports) {
14280
14221
  !simplePrint && (_(k$1, null,
14281
14222
  _("div", { "aria-hidden": true, className: joinClassNames('fc-timegrid-slots fc-flex-col', (verticalScrolling && options.expandRows) && 'fc-grow', absPrint
14282
14223
  ? 'fc-fill-x' // will assume top:0, height will be decided naturally
14283
- : 'fc-rel') }, props.slatMetas.map((slatMeta, slatI) => (_("div", { key: slatMeta.key, className: joinClassNames(...getSlatRowClassNames(slatMeta), slatI && 'fc-border-t', slatLiquid && 'fc-liquid'), style: {
14224
+ : 'fc-rel') }, props.slatMetas.map((slatMeta, slatI) => (_("div", { key: slatMeta.key, "data-time": slatMeta.isoTimeStr, className: joinClassNames(...getSlatRowClassNames(slatMeta), slatI && 'fc-border-t', slatLiquid && 'fc-liquid'), style: {
14284
14225
  height: slatLiquid ? '' : slatHeight
14285
14226
  } },
14286
- _(TimeGridSlatLabel, Object.assign({}, slatMeta, { innerWidthRef: slatLabelInnerWidthRefMap.createRef(slatMeta.key), innerHeightRef: slatLabelInnerHeightRefMap.createRef(slatMeta.key), width: axisWidth })),
14287
- _(TimeGridSlatLane, Object.assign({}, slatMeta, { borderStart: true, innerHeightRef: slatInnerMainHeightRefMap.createRef(slatMeta.key) })))))),
14227
+ _(TimeGridSlatLabel, Object.assign({}, slatMeta /* FYI doesn't need isoTimeStr */, { innerWidthRef: slatLabelInnerWidthRefMap.createRef(slatMeta.key), innerHeightRef: slatLabelInnerHeightRefMap.createRef(slatMeta.key), width: axisWidth })),
14228
+ _(TimeGridSlatLane, Object.assign({}, slatMeta /* FYI doesn't need isoTimeStr */, { borderStart: true, innerHeightRef: slatInnerMainHeightRefMap.createRef(slatMeta.key) })))))),
14288
14229
  rowsNotExpanding && (_("div", { class: 'fc-liquid fc-border-t fc-filler' })),
14289
- options.nowIndicator && rangeContainsMarker(props.dateProfile.currentRange, nowDate) && (_(TimeGridNowIndicatorArrow, { nowDate: nowDate, dateProfile: props.dateProfile, totalHeight: slatHeight != null ? slatHeight * slatCnt : undefined })))))))));
14230
+ options.nowIndicator && rangeContainsMarker(props.dateProfile.currentRange, nowDate) && (_(TimeGridNowIndicatorArrow, { nowDate: nowDate, dateProfile: props.dateProfile, totalHeight: slatHeight != null ? slatHeight * slatCnt : undefined }))))))),
14231
+ _(Ruler, { widthRef: this.handleTotalWidth })));
14290
14232
  }
14291
14233
  // Lifecycle
14292
14234
  // -----------------------------------------------------------------------------------------------
@@ -14296,6 +14238,9 @@ var FullCalendar = (function (exports) {
14296
14238
  componentDidUpdate() {
14297
14239
  this.updateSlatHeight();
14298
14240
  }
14241
+ componentWillUnmount() {
14242
+ setRef(this.props.slatHeightRef, null);
14243
+ }
14299
14244
  updateSlatHeight() {
14300
14245
  if (this.prevSlatHeight !== this.slatHeight) {
14301
14246
  setRef(this.props.slatHeightRef, this.prevSlatHeight = this.slatHeight);
@@ -14316,7 +14261,9 @@ var FullCalendar = (function (exports) {
14316
14261
  // -----------------------------------------------------------------------------------------------
14317
14262
  this.handleSlatHeight = (slatHeight) => {
14318
14263
  this.slatHeight = slatHeight;
14319
- afterSize(this.applyTimeScroll);
14264
+ if (slatHeight != null) {
14265
+ afterSize(this.applyTimeScroll);
14266
+ }
14320
14267
  };
14321
14268
  this.handleTimeScrollRequest = (scrollTime) => {
14322
14269
  this.scrollState.time = scrollTime;
@@ -14326,8 +14273,9 @@ var FullCalendar = (function (exports) {
14326
14273
  /*
14327
14274
  Captures current values
14328
14275
  */
14329
- this.handleTimeScrollEnd = ({ y, isUser }) => {
14276
+ this.handleTimeScrollEnd = (isUser) => {
14330
14277
  if (isUser) {
14278
+ const y = this.timeScrollerRef.current.y;
14331
14279
  // record, but only if not forPrint, which could give bogus values in the case of
14332
14280
  // TimeGridLayoutPannable, which kills y-scrolling, but retains x-scrolling,
14333
14281
  // which reports as a 0 y-scroll.
@@ -14348,8 +14296,7 @@ var FullCalendar = (function (exports) {
14348
14296
  // and the timeScroller might not exist
14349
14297
  timeScroller) {
14350
14298
  y = computeTimeTopFrac(time, this.props.dateProfile)
14351
- * (slatHeight * this.currentSlatCnt)
14352
- + 1; // overcome border
14299
+ * (slatHeight * this.currentSlatCnt);
14353
14300
  if (y) {
14354
14301
  y++; // overcome top border
14355
14302
  }
@@ -14486,7 +14433,7 @@ var FullCalendar = (function (exports) {
14486
14433
  }
14487
14434
  }
14488
14435
 
14489
- var css_248z$2 = ".fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:flex;flex-direction:column}.fc-v-event.fc-event-mirror{z-index:3}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-inner{color:var(--fc-event-text-color);display:flex;flex-direction:column;flex-grow:1;min-height:0}.fc-v-event .fc-event-time{flex-shrink:0;white-space:nowrap}.fc-v-event .fc-event-time,.fc-v-event .fc-event-title{overflow:hidden}.fc-v-event .fc-event-title-outer{display:flex;flex-direction:column;flex-grow:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;position:sticky;top:0}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-timegrid-slots{z-index:1}.fc-timegrid-slot-minor{border-style:dotted}.fc-timegrid-axis{align-items:flex-end}.fc-timegrid-axis,.fc-timegrid-axis-inner{display:flex;flex-direction:column;justify-content:center}.fc-timegrid-axis-inner{min-height:1.5em}.fc-timegrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-timegrid-day-events{z-index:2}.fc-direction-ltr .fc-timegrid-day-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-day-events{margin:0 2px 0 2.5%}.fc-timegrid-day-events.fc-timegrid-day-events-simple{margin:4px}.fc-timegrid-event{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event-inset,.fc-timegrid-event.fc-event-mirror{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event.fc-event-end{margin-bottom:1px}.fc-timegrid-event .fc-event-inner{padding:1px 1px 0}.fc-timegrid-event-short .fc-event-inner{flex-direction:row;overflow:hidden}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-time:after{content:\"\\00a0-\\00a0\"}.fc-timegrid-event-short .fc-event-title-outer{flex-basis:0;flex-grow:1;min-height:0;min-width:0}.fc-timegrid-event-short .fc-event-title,.fc-timegrid-more-link{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);border-radius:3px;box-shadow:0 0 0 1px var(--fc-page-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;z-index:9999}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc-timegrid-more-link-inner{padding:3px 2px}.fc-timegrid-now-indicator-container{bottom:0;left:0;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0;z-index:4}.fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-bottom:5px solid transparent;border-left-style:solid;border-left-width:6px;border-right-style:solid;border-right-width:6px;border-top:5px solid transparent;height:0;margin-top:-5px;position:absolute;width:0}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-right:0;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-left:0;right:0}.fc-timegrid-now-indicator-line{border-top:1px solid var(--fc-now-indicator-color);left:0;position:absolute;right:0}";
14436
+ var css_248z$2 = ".fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:flex;flex-direction:column}.fc-v-event.fc-event-mirror{z-index:1}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-inner{color:var(--fc-event-text-color);display:flex;flex-direction:column;flex-grow:1;min-height:0}.fc-v-event .fc-event-time{flex-shrink:0;white-space:nowrap}.fc-v-event .fc-event-time,.fc-v-event .fc-event-title{overflow:hidden}.fc-v-event .fc-event-title-outer{display:flex;flex-direction:column;flex-grow:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;position:sticky;top:0}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-timegrid-slot-minor{border-style:dotted}.fc-timegrid-axis{align-items:flex-end}.fc-timegrid-axis,.fc-timegrid-axis-inner{display:flex;flex-direction:column;justify-content:center}.fc-timegrid-axis-inner{min-height:1.5em}.fc-direction-ltr .fc-timegrid-axis-inner{text-align:right}.fc-direction-rtl .fc-timegrid-axis-inner{text-align:left}.fc-timegrid-allday-label-inner{white-space:pre}.fc-timegrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-direction-ltr .fc-timegrid-day-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-day-events{margin:0 2px 0 2.5%}.fc-timegrid-day-events.fc-timegrid-day-events-simple{margin:4px}.fc-timegrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative}.fc-timegrid-event-inset,.fc-timegrid-event.fc-event-mirror{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event.fc-event-end{margin-bottom:1px}.fc-timegrid-event .fc-event-inner{padding:1px 1px 0}.fc-timegrid-event-short .fc-event-inner{flex-direction:row;overflow:hidden}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-time:after{content:\"\\00a0-\\00a0\"}.fc-timegrid-event-short .fc-event-title-outer{flex-basis:0;flex-grow:1;min-height:0;min-width:0}.fc-timegrid-event-short .fc-event-title,.fc-timegrid-more-link{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);border-radius:3px;box-shadow:0 0 0 1px var(--fc-page-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;z-index:9999}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc-timegrid-more-link-inner{padding:3px 2px}.fc-timegrid-now-indicator-container{bottom:0;left:0;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0;z-index:2}.fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-bottom:5px solid transparent;border-left-style:solid;border-left-width:6px;border-right-style:solid;border-right-width:6px;border-top:5px solid transparent;height:0;margin-top:-5px;position:absolute;width:0}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-right:0;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-left:0;right:0}.fc-timegrid-now-indicator-line{border-top:1px solid var(--fc-now-indicator-color);left:0;position:absolute;right:0}";
14490
14437
  injectStyles(css_248z$2);
14491
14438
 
14492
14439
  const OPTION_REFINERS$2 = {
@@ -14570,7 +14517,7 @@ var FullCalendar = (function (exports) {
14570
14517
  let { options } = context;
14571
14518
  let timeFormat = options.eventTimeFormat || DEFAULT_TIME_FORMAT;
14572
14519
  let [tag, attrs] = getEventTagAndAttrs(eventRange, context);
14573
- return (_(EventContainer, Object.assign({}, props, { tag: tag, attrs: Object.assign({ role: 'listitem' }, attrs), className: 'fc-list-event', defaultGenerator: renderEventTitleOnly, eventRange: eventRange, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (_(k$1, null,
14520
+ return (_(EventContainer, Object.assign({}, props, { tag: tag, attrs: Object.assign({ role: 'listitem' }, attrs), className: 'fc-list-event', defaultGenerator: renderEventTitleOnly, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (_(k$1, null,
14574
14521
  _("div", { className: 'fc-list-event-time-outer', style: { width: props.timeOuterWidth } }, this.buildTimeContent(eventRange, props.slicedStart, props.slicedEnd, props.isStart, props.isEnd, timeFormat, context)),
14575
14522
  _("div", { className: "fc-list-event-dot-outer" },
14576
14523
  _("span", { className: "fc-list-event-dot", style: {
@@ -14778,7 +14725,7 @@ var FullCalendar = (function (exports) {
14778
14725
  return segsByDay;
14779
14726
  }
14780
14727
 
14781
- var css_248z$1 = ":root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-list-day,.fc-list-event-dot-outer,.fc-list-event-time,.fc-list-event-title{padding:8px 14px}.fc-direction-ltr .fc-list-event-dot-outer{padding-right:0}.fc-direction-rtl .fc-list-event-dot-outer{padding-left:0}.fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc-list-empty-inner{margin:5em 0}.fc-list-day,.fc-list-event:not(.fc-list-day-and-events:last-child .fc-list-event:last-child){border-bottom:1px solid var(--fc-border-color)}.fc-list-day-outer-sticky{background:var(--fc-page-bg-color);position:sticky;top:0}.fc-list-day{background:var(--fc-neutral-bg-color);display:flex;font-weight:700;justify-content:space-between}.fc-list-event{display:flex;flex-direction:row}a.fc-list-event{color:inherit;text-decoration:none}.fc-list-event:hover{background-color:var(--fc-list-event-hover-bg-color)}.fc-list-event-time-outer{display:flex;flex-direction:row}.fc-list-event-dot-outer,.fc-list-event-time{white-space:nowrap}.fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}a.fc-list-event:hover .fc-list-event-title{text-decoration:underline}";
14728
+ var css_248z$1 = ":root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-list-day,.fc-list-event-dot-outer,.fc-list-event-time,.fc-list-event-title{padding:8px 14px}.fc-direction-ltr .fc-list-event-dot-outer{padding-right:0}.fc-direction-rtl .fc-list-event-dot-outer{padding-left:0}.fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc-list-empty-inner{margin:5em 0}.fc-list-day,.fc-list-day-and-events:not(:last-child),.fc-list-event:not(:last-child){border-bottom:1px solid var(--fc-border-color)}.fc-list-day-outer-sticky{background:var(--fc-page-bg-color);position:sticky;top:0}.fc-list-day{background:var(--fc-neutral-bg-color);display:flex;font-weight:700;justify-content:space-between}.fc-list-event{display:flex;flex-direction:row}a.fc-list-event{color:inherit;text-decoration:none}.fc-list-event:hover{background-color:var(--fc-list-event-hover-bg-color)}.fc-list-event-time-outer{display:flex;flex-direction:row}.fc-list-event-dot-outer,.fc-list-event-time{white-space:nowrap}.fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}a.fc-list-event:hover .fc-list-event-title{text-decoration:underline}";
14782
14729
  injectStyles(css_248z$1);
14783
14730
 
14784
14731
  const OPTION_REFINERS$1 = {
@@ -14863,7 +14810,10 @@ var FullCalendar = (function (exports) {
14863
14810
  marginTop: isHeaderSticky ? fracToCssDim(-invRowAspectRatio) : undefined,
14864
14811
  paddingBottom: isAspectRatio ? fracToCssDim(invAspectRatio) : undefined,
14865
14812
  } },
14866
- _(DayGridRows, { dateProfile: props.dateProfile, todayRange: props.todayRange, cellRows: dayTableModel.cellRows, className: isAspectRatio ? 'fc-fill' : '', forPrint: forPrint && !props.hasLateralSiblings, dayMaxEvents: forPrint ? undefined : options.dayMaxEvents, dayMaxEventRows: (forPrint && props.hasLateralSiblings) ? 1 : options.dayMaxEventRows,
14813
+ _(DayGridRows, { dateProfile: props.dateProfile, todayRange: props.todayRange, cellRows: dayTableModel.cellRows, className: isAspectRatio ? 'fc-fill' : '', forPrint: forPrint && !props.hasLateralSiblings, dayMaxEventRows: (forPrint && props.hasLateralSiblings)
14814
+ ? 1 // for side-by-side multimonths, limit to one row
14815
+ : true // otherwise, always do +more link, never expand rows
14816
+ ,
14867
14817
  // content
14868
14818
  fgEventSegs: slicedProps.fgEventSegs, bgEventSegs: slicedProps.bgEventSegs, businessHourSegs: slicedProps.businessHourSegs, dateSelectionSegs: slicedProps.dateSelectionSegs, eventDrag: slicedProps.eventDrag, eventResize: slicedProps.eventResize, eventSelection: slicedProps.eventSelection,
14869
14819
  // dimensions
@@ -14881,7 +14831,7 @@ var FullCalendar = (function (exports) {
14881
14831
  this.scrollerRef = m$1();
14882
14832
  this.innerElRef = m$1(); // .fc-multimonth-inner
14883
14833
  this.scrollDate = null;
14884
- this.handleScrollEnd = ({ isUser }) => {
14834
+ this.handleScrollEnd = (isUser) => {
14885
14835
  if (isUser) {
14886
14836
  this.scrollDate = null;
14887
14837
  }
@@ -15039,7 +14989,7 @@ var FullCalendar = (function (exports) {
15039
14989
  multiMonth: {
15040
14990
  component: MultiMonthView,
15041
14991
  dateProfileGeneratorClass: TableDateProfileGenerator,
15042
- multiMonthMinWidth: 350,
14992
+ multiMonthMinWidth: 375,
15043
14993
  multiMonthMaxColumns: 3,
15044
14994
  },
15045
14995
  multiMonthYear: {