var FullCalendar=function(exports){"use strict";var n,l$1,u$1,i$1,t,r$1,o,f$1,e$1,c$1={},s=[],a$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function h(n,l){for(var u in l)n[u]=l[u];return n}function v$1(n){var l=n.parentNode;l&&l.removeChild(n)}function y(l,u,i){var t,r,o,f={};for(o in u)"key"==o?t=u[o]:"ref"==o?r=u[o]:f[o]=u[o];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),"function"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===f[o]&&(f[o]=l.defaultProps[o]);return p(l,f,t,r,null)}function p(n,i,t,r,o){var f={type:n,props:i,key:t,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++u$1:o};return null==o&&null!=l$1.vnode&&l$1.vnode(f),f}function d(){return{current:null}}function _(n){return n.children}function k$1(n,l,u,i,t){var r;for(r in u)"children"===r||"key"===r||r in l||g$2(n,r,null,u[r],i);for(r in l)t&&"function"!=typeof l[r]||"children"===r||"key"===r||"value"===r||"checked"===r||u[r]===l[r]||g$2(n,r,l[r],u[r],i)}function b$1(n,l,u){"-"===l[0]?n.setProperty(l,null==u?"":u):n[l]=null==u?"":"number"!=typeof u||a$1.test(l)?u:u+"px"}function g$2(n,l,u,i,t){var r;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else{if("string"==typeof i&&(n.style.cssText=i=""),i)for(l in i)u&&l in u||b$1(n.style,l,"");if(u)for(l in u)i&&u[l]===i[l]||b$1(n.style,l,u[l])}else if("o"===l[0]&&"n"===l[1])r=l!==(l=l.replace(/Capture$/,"")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?i||n.addEventListener(l,r?w$2:m$1,r):n.removeEventListener(l,r?w$2:m$1,r);else if("dangerouslySetInnerHTML"!==l){if(t)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&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&-1==l.indexOf("-")?n.removeAttribute(l):n.setAttribute(l,u))}}function m$1(n){t=!0;try{return this.l[n.type+!1](l$1.event?l$1.event(n):n)}finally{t=!1}}function w$2(n){t=!0;try{return this.l[n.type+!0](l$1.event?l$1.event(n):n)}finally{t=!1}}function x$1(n,l){this.props=n,this.context=l}function A(n,l){if(null==l)return n.__?A(n.__,n.__.__k.indexOf(n)+1):null;for(var u;ll&&r$1.sort(function(n,l){return n.__v.__b-l.__v.__b}));$$1.__r=0}function H$1(n,l,u,i,t,r,o,f,e,a){var h,v,y,d,k,b,g,m=i&&i.__k||s,w=m.length;for(u.__k=[],h=0;h0?p(d.type,d.props,d.key,d.ref?d.ref:null,d.__v):d)){if(d.__=u,d.__b=u.__b+1,null===(y=m[h])||y&&d.key==y.key&&d.type===y.type)m[h]=void 0;else for(v=0;v=0;l--)if((u=n.__k[l])&&(i=L$1(u)))return i;return null}function M(n,u,i,t,r,o,f,e,c){var s,a,v,y,p,d,k,b,g,m,w,A,P,C,T,$=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,o=[e]),(s=l$1.__b)&&s(u);try{n:if("function"==typeof $){if(b=u.props,g=(s=$.contextType)&&t[s.__c],m=s?g?g.props.value:s.__:t,i.__c?k=(a=u.__c=i.__c).__=a.__E:("prototype"in $&&$.prototype.render?u.__c=a=new $(b,m):(u.__c=a=new x$1(b,m),a.constructor=$,a.render=B$1),g&&g.sub(a),a.props=b,a.state||(a.state={}),a.context=m,a.__n=t,v=a.__d=!0,a.__h=[],a._sb=[]),null==a.__s&&(a.__s=a.state),null!=$.getDerivedStateFromProps&&(a.__s==a.state&&(a.__s=h({},a.__s)),h(a.__s,$.getDerivedStateFromProps(b,a.__s))),y=a.props,p=a.state,a.__v=u,v)null==$.getDerivedStateFromProps&&null!=a.componentWillMount&&a.componentWillMount(),null!=a.componentDidMount&&a.__h.push(a.componentDidMount);else{if(null==$.getDerivedStateFromProps&&b!==y&&null!=a.componentWillReceiveProps&&a.componentWillReceiveProps(b,m),!a.__e&&null!=a.shouldComponentUpdate&&!1===a.shouldComponentUpdate(b,a.__s,m)||u.__v===i.__v){for(u.__v!==i.__v&&(a.props=b,a.state=a.__s,a.__d=!1),u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u)}),w=0;w2&&(f.children=arguments.length>3?n.call(arguments,2):i),p(l.type,f,t||l.key,r||l.ref,null)}function G$1(n,l){var u={__c:l="__cC"+e$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,T$1(n)})},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=s.slice,l$1={__e:function(n,l,u,i){for(var t,r,o;l=l.__;)if((t=l.__c)&&!t.__)try{if((r=t.constructor)&&null!=r.getDerivedStateFromError&&(t.setState(r.getDerivedStateFromError(n)),o=t.__d),null!=t.componentDidCatch&&(t.componentDidCatch(n,i||{}),o=t.__d),o)return t.__E=t}catch(l){n=l}throw n}},u$1=0,i$1=function(n){return null!=n&&void 0===n.constructor},t=!1,x$1.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=h({},this.state),"function"==typeof n&&(n=n(h({},u),this.props)),n&&h(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),T$1(this))},x$1.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),T$1(this))},x$1.prototype.render=_,r$1=[],f$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,$$1.__r=0,e$1=0;var r,u,i,f=[],c=[],e=l$1.__b,a=l$1.__r,v=l$1.diffed,l=l$1.__c,m=l$1.unmount;function b(){for(var t;t=f.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k),t.__H.__h.forEach(w$1),t.__H.__h=[]}catch(r){t.__H.__h=[],l$1.__e(r,t.__v)}}l$1.__b=function(n){r=null,e&&e(n)},l$1.__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.__V=c,n.__N=n.i=void 0})):(i.__h.forEach(k),i.__h.forEach(w$1),i.__h=[])),u=r},l$1.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f.push(o)&&i===l$1.requestAnimationFrame||((i=l$1.requestAnimationFrame)||j$1)(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),u=r=null},l$1.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k),t.__h=t.__h.filter(function(n){return!n.__||w$1(n)})}catch(u){r.some(function(n){n.__h&&(n.__h=[])}),r=[],l$1.__e(u,t.__v)}}),l&&l(t,r)},l$1.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k(n)}catch(n){r=n}}),u.__H=void 0,r&&l$1.__e(r,u.__v))};var g$1="function"==typeof requestAnimationFrame;function j$1(n){var t,r=function(){clearTimeout(u),g$1&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);g$1&&(t=requestAnimationFrame(r))}function k(n){var t=r,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r=t}function w$1(n){var t=r;n.__c=n.__(),r=t}function g(n,t){for(var e in t)n[e]=t[e];return n}function C(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 w(n){this.props=n}(w.prototype=new x$1).isPureReactComponent=!0,w.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var x=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),x&&x(n)};var T=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);T(n,t,e,r)};var I=l$1.unmount;function L(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 L(n,t,e)})),n}function U(n,t,e){return n&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return U(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.insertBefore(n.__e,n.__d),n.__c.__e=!0,n.__c.__P=e)),n}function D(){this.__u=0,this.t=null,this.__b=null}function F(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function V(){this.u=null,this.o=null}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),I&&I(n)},(D.prototype=new x$1).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=F(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=U(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}},c=!0===t.__h;r.__u++||c||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},D.prototype.componentWillUnmount=function(){this.t=[]},D.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]=L(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&y(_,null,n.fallback);return i&&(i.__h=null),[y(_,null,e.__a?null:n.children),i]};var W=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]>>1,1),e.i.removeChild(n)}}),D$1(y(P,{context:e.context},n.__v),e.l)):e.l&&e.componentWillUnmount()}function j(n,e){var r=y($,{__v:n,i:e});return r.containerInfo=e,r}(V.prototype=new x$1).__a=function(n){var t=this,e=F(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),W(t,n,r)):u()};e?e(o):o()}},V.prototype.render=function(n){this.u=null,this.o=new Map;var t=j$2(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},V.prototype.componentDidUpdate=V.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){W(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|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="undefined"!=typeof document,Z=function(n){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};x$1.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(x$1.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var G=l$1.event;function J(){}function K(){return this.cancelBubble}function Q(){return this.defaultPrevented}l$1.event=function(n){return G&&(n=G(n)),n.persist=J,n.isPropagationStopped=K,n.isDefaultPrevented=Q,n.nativeEvent=n};var nn={configurable:!0,get:function(){return this.class}},tn=l$1.vnode;l$1.vnode=function(n){var t=n.type,e=n.props,u=e;if("string"==typeof t){var o=-1===t.indexOf("-");for(var i in u={},e){var l=e[i];H&&"children"===i&&"noscript"===t||"value"===i&&"defaultValue"in e&&null==l||("defaultValue"===i&&"value"in e&&null==e.value?i="value":"download"===i&&!0===l?l="":/ondoubleclick/i.test(i)?i="ondblclick":/^onchange(textarea|input)/i.test(i+t)&&!Z(e.type)?i="oninput":/^onfocus$/i.test(i)?i="onfocusin":/^onblur$/i.test(i)?i="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)?i=i.toLowerCase():o&&B.test(i)?i=i.replace(/[A-Z0-9]/g,"-$&").toLowerCase():null===l&&(l=void 0),/^oninput$/i.test(i)&&(i=i.toLowerCase(),u[i]&&(i="oninputCapture")),u[i]=l)}"select"==t&&u.multiple&&Array.isArray(u.value)&&(u.value=j$2(e.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),"select"==t&&null!=u.defaultValue&&(u.value=j$2(e.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value})),n.props=u,e.class!=e.className&&(nn.enumerable="className"in e,null!=e.className&&(u.class=e.className),Object.defineProperty(u,"className",nn))}n.$$typeof=z,tn&&tn(n)};var en=l$1.__r;l$1.__r=function(n){en&&en(n),n.__c};const styleTexts=[];const styleEls=new Map;function injectStyles(styleText){styleTexts.push(styleText);styleEls.forEach(styleEl=>{appendStylesTo(styleEl,styleText)})}function ensureElHasStyles(el){if(el.isConnected&&el.getRootNode){registerStylesRoot(el.getRootNode())}}function registerStylesRoot(rootNode){let styleEl=styleEls.get(rootNode);if(!styleEl||!styleEl.isConnected){styleEl=rootNode.querySelector("style[data-fullcalendar]");if(!styleEl){styleEl=document.createElement("style");styleEl.setAttribute("data-fullcalendar","");const nonce=getNonceValue();if(nonce){styleEl.nonce=nonce}const parentEl=rootNode===document?document.head:rootNode;const insertBefore=rootNode===document?parentEl.querySelector("script,link[rel=stylesheet],link[as=style],style"):parentEl.firstChild;parentEl.insertBefore(styleEl,insertBefore)}styleEls.set(rootNode,styleEl);hydrateStylesRoot(styleEl)}}function hydrateStylesRoot(styleEl){for(const styleText of styleTexts){appendStylesTo(styleEl,styleText)}}function appendStylesTo(styleEl,styleText){const{sheet}=styleEl;const ruleCnt=sheet.cssRules.length;styleText.split("}").forEach((styleStr,i)=>{styleStr=styleStr.trim();if(styleStr){sheet.insertRule(styleStr+"}",ruleCnt+i)}})}let queriedNonceValue;function getNonceValue(){if(queriedNonceValue===undefined){queriedNonceValue=queryNonceValue()}return queriedNonceValue}function queryNonceValue(){const metaWithNonce=document.querySelector('meta[name="csp-nonce"]');if(metaWithNonce&&metaWithNonce.hasAttribute("content")){return metaWithNonce.getAttribute("content")}const elWithNonce=document.querySelector("script[nonce]");if(elWithNonce){return elWithNonce.nonce||""}return""}if(typeof document!=="undefined"){registerStylesRoot(document)}class DelayedRunner{constructor(drainedOption){this.drainedOption=drainedOption;this.isRunning=false;this.isDirty=false;this.pauseDepths={};this.timeoutId=0}request(delay){this.isDirty=true;if(!this.isPaused()){this.clearTimeout();if(delay==null){this.tryDrain()}else{this.timeoutId=setTimeout(this.tryDrain.bind(this),delay)}}}pause(scope=""){let{pauseDepths}=this;pauseDepths[scope]=(pauseDepths[scope]||0)+1;this.clearTimeout()}resume(scope="",force){let{pauseDepths}=this;if(scope in pauseDepths){if(force){delete pauseDepths[scope]}else{pauseDepths[scope]-=1;let depth=pauseDepths[scope];if(depth<=0){delete pauseDepths[scope]}}this.tryDrain()}}isPaused(){return Object.keys(this.pauseDepths).length}tryDrain(){if(!this.isRunning&&!this.isPaused()){this.isRunning=true;while(this.isDirty){this.isDirty=false;this.drained()}this.isRunning=false}}clear(){this.clearTimeout();this.isDirty=false;this.pauseDepths={}}clearTimeout(){if(this.timeoutId){clearTimeout(this.timeoutId);this.timeoutId=0}}drained(){if(this.drainedOption){this.drainedOption()}}}function removeElement(el){if(el.parentNode){el.parentNode.removeChild(el)}}function elementClosest(el,selector){if(el.closest){return el.closest(selector)}if(!document.documentElement.contains(el)){return null}do{if(elementMatches(el,selector)){return el}el=el.parentElement||el.parentNode}while(el!==null&&el.nodeType===1);return null}function elementMatches(el,selector){let method=el.matches||el.matchesSelector||el.msMatchesSelector;return method.call(el,selector)}function findElements(container,selector){let containers=container instanceof HTMLElement?[container]:container;let allMatches=[];for(let i=0;i{let matchedChild=elementClosest(ev.target,selector);if(matchedChild){handler.call(matchedChild,ev,matchedChild)}}}function listenBySelector(container,eventType,selector,handler){let attachedHandler=buildDelegationHandler(selector,handler);container.addEventListener(eventType,attachedHandler);return()=>{container.removeEventListener(eventType,attachedHandler)}}function listenToHoverBySelector(container,selector,onMouseEnter,onMouseLeave){let currentMatchedChild;return listenBySelector(container,"mouseover",selector,(mouseOverEv,matchedChild)=>{if(matchedChild!==currentMatchedChild){currentMatchedChild=matchedChild;onMouseEnter(mouseOverEv,matchedChild);let realOnMouseLeave=mouseLeaveEv=>{currentMatchedChild=null;onMouseLeave(mouseLeaveEv,matchedChild);matchedChild.removeEventListener("mouseleave",realOnMouseLeave)};matchedChild.addEventListener("mouseleave",realOnMouseLeave)}})}const transitionEventNames=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"];function whenTransitionDone(el,callback){let realCallback=ev=>{callback(ev);transitionEventNames.forEach(eventName=>{el.removeEventListener(eventName,realCallback)})};transitionEventNames.forEach(eventName=>{el.addEventListener(eventName,realCallback)})}function createAriaClickAttrs(handler){return Object.assign({onClick:handler},createAriaKeyboardAttrs(handler))}function createAriaKeyboardAttrs(handler){return{tabIndex:0,onKeyDown(ev){if(ev.key==="Enter"||ev.key===" "){handler(ev);ev.preventDefault()}}}}let guidNumber=0;function guid(){guidNumber+=1;return String(guidNumber)}function disableCursor(){document.body.classList.add("fc-not-allowed")}function enableCursor(){document.body.classList.remove("fc-not-allowed")}function preventSelection(el){el.style.userSelect="none";el.style.webkitUserSelect="none";el.addEventListener("selectstart",preventDefault)}function allowSelection(el){el.style.userSelect="";el.style.webkitUserSelect="";el.removeEventListener("selectstart",preventDefault)}function preventContextMenu(el){el.addEventListener("contextmenu",preventDefault)}function allowContextMenu(el){el.removeEventListener("contextmenu",preventDefault)}function parseFieldSpecs(input){let specs=[];let tokens=[];let i;let token;if(typeof input==="string"){tokens=input.split(/\s*,\s*/)}else if(typeof input==="function"){tokens=[input]}else if(Array.isArray(input)){tokens=input}for(i=0;istr.replace("$"+index,arg||""),formatter)}return fallbackText}function compareNumbers(a,b){return a-b}function isInt(n){return n%1===0}function computeSmallestCellWidth(cellEl){let allWidthEl=cellEl.querySelector(".fc-scrollgrid-shrink-frame");let contentWidthEl=cellEl.querySelector(".fc-scrollgrid-shrink-cushion");if(!allWidthEl){throw new Error("needs fc-scrollgrid-shrink-frame className")}if(!contentWidthEl){throw new Error("needs fc-scrollgrid-shrink-cushion className")}return cellEl.getBoundingClientRect().width-allWidthEl.getBoundingClientRect().width+contentWidthEl.getBoundingClientRect().width}const INTERNAL_UNITS=["years","months","days","milliseconds"];const PARSE_RE=/^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;function createDuration(input,unit){if(typeof input==="string"){return parseString(input)}if(typeof input==="object"&&input){return parseObject(input)}if(typeof input==="number"){return parseObject({[unit||"milliseconds"]:input})}return null}function parseString(s){let m=PARSE_RE.exec(s);if(m){let sign=m[1]?-1:1;return{years:0,months:0,days:sign*(m[2]?parseInt(m[2],10):0),milliseconds:sign*((m[3]?parseInt(m[3],10):0)*60*60*1e3+(m[4]?parseInt(m[4],10):0)*60*1e3+(m[5]?parseInt(m[5],10):0)*1e3+(m[6]?parseInt(m[6],10):0))}}return null}function parseObject(obj){let duration={years:obj.years||obj.year||0,months:obj.months||obj.month||0,days:obj.days||obj.day||0,milliseconds:(obj.hours||obj.hour||0)*60*60*1e3+(obj.minutes||obj.minute||0)*60*1e3+(obj.seconds||obj.second||0)*1e3+(obj.milliseconds||obj.millisecond||obj.ms||0)};let weeks=obj.weeks||obj.week;if(weeks){duration.days+=weeks*7;duration.specifiedWeeks=true}return duration}function durationsEqual(d0,d1){return d0.years===d1.years&&d0.months===d1.months&&d0.days===d1.days&&d0.milliseconds===d1.milliseconds}function asCleanDays(dur){if(!dur.years&&!dur.months&&!dur.milliseconds){return dur.days}return 0}function addDurations(d0,d1){return{years:d0.years+d1.years,months:d0.months+d1.months,days:d0.days+d1.days,milliseconds:d0.milliseconds+d1.milliseconds}}function subtractDurations(d1,d0){return{years:d1.years-d0.years,months:d1.months-d0.months,days:d1.days-d0.days,milliseconds:d1.milliseconds-d0.milliseconds}}function multiplyDuration(d,n){return{years:d.years*n,months:d.months*n,days:d.days*n,milliseconds:d.milliseconds*n}}function asRoughYears(dur){return asRoughDays(dur)/365}function asRoughMonths(dur){return asRoughDays(dur)/30}function asRoughDays(dur){return asRoughMs(dur)/864e5}function asRoughMinutes(dur){return asRoughMs(dur)/(1e3*60)}function asRoughSeconds(dur){return asRoughMs(dur)/1e3}function asRoughMs(dur){return dur.years*(365*864e5)+dur.months*(30*864e5)+dur.days*864e5+dur.milliseconds}function wholeDivideDurations(numerator,denominator){let res=null;for(let i=0;i=1){return Math.min(w,nextW)}return w}function weekOfGivenYear(marker,year,dow,doy){let firstWeekStart=arrayToUtcDate([year,0,1+firstWeekOffset(year,dow,doy)]);let dayStart=startOfDay(marker);let days=Math.round(diffDays(firstWeekStart,dayStart));return Math.floor(days/7)+1}function firstWeekOffset(year,dow,doy){let fwd=7+dow-doy;let fwdlw=(7+arrayToUtcDate([year,0,fwd]).getUTCDay()-dow)%7;return-fwdlw+fwd-1}function dateToLocalArray(date){return[date.getFullYear(),date.getMonth(),date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds(),date.getMilliseconds()]}function arrayToLocalDate(a){return new Date(a[0],a[1]||0,a[2]==null?1:a[2],a[3]||0,a[4]||0,a[5]||0)}function dateToUtcArray(date){return[date.getUTCFullYear(),date.getUTCMonth(),date.getUTCDate(),date.getUTCHours(),date.getUTCMinutes(),date.getUTCSeconds(),date.getUTCMilliseconds()]}function arrayToUtcDate(a){if(a.length===1){a=a.concat([0])}return new Date(Date.UTC(...a))}function isValidDate(m){return!isNaN(m.valueOf())}function timeAsMs(m){return m.getUTCHours()*1e3*60*60+m.getUTCMinutes()*1e3*60+m.getUTCSeconds()*1e3+m.getUTCMilliseconds()}function buildIsoString(marker,timeZoneOffset,stripZeroTime=false){let s=marker.toISOString();s=s.replace(".000","");if(stripZeroTime){s=s.replace("T00:00:00Z","")}if(s.length>10){if(timeZoneOffset==null){s=s.replace("Z","")}else if(timeZoneOffset!==0){s=s.replace("Z",formatTimeZoneOffset(timeZoneOffset,true))}}return s}function formatDayString(marker){return marker.toISOString().replace(/T.*$/,"")}function formatIsoMonthStr(marker){return marker.toISOString().match(/^\d{4}-\d{2}/)[0]}function formatIsoTimeString(marker){return padStart(marker.getUTCHours(),2)+":"+padStart(marker.getUTCMinutes(),2)+":"+padStart(marker.getUTCSeconds(),2)}function formatTimeZoneOffset(minutes,doIso=false){let sign=minutes<0?"-":"+";let abs=Math.abs(minutes);let hours=Math.floor(abs/60);let mins=Math.round(abs%60);if(doIso){return`${sign+padStart(hours,2)}:${padStart(mins,2)}`}return`GMT${sign}${hours}${mins?`:${padStart(mins,2)}`:""}`}function memoize(workerFunc,resEquality,teardownFunc){let currentArgs;let currentRes;return function(...newArgs){if(!currentArgs){currentRes=workerFunc.apply(this,newArgs)}else if(!isArraysEqual(currentArgs,newArgs)){if(teardownFunc){teardownFunc(currentRes)}let res=workerFunc.apply(this,newArgs);if(!resEquality||!resEquality(res,currentRes)){currentRes=res}}currentArgs=newArgs;return currentRes}}function memoizeObjArg(workerFunc,resEquality,teardownFunc){let currentArg;let currentRes;return newArg=>{if(!currentArg){currentRes=workerFunc.call(this,newArg)}else if(!isPropsEqual(currentArg,newArg)){if(teardownFunc){teardownFunc(currentRes)}let res=workerFunc.call(this,newArg);if(!resEquality||!resEquality(res,currentRes)){currentRes=res}}currentArg=newArg;return currentRes}}function memoizeArraylike(workerFunc,resEquality,teardownFunc){let currentArgSets=[];let currentResults=[];return newArgSets=>{let currentLen=currentArgSets.length;let newLen=newArgSets.length;let i=0;for(;i{let newResHash={};for(let key in newArgHash){if(!currentResHash[key]){newResHash[key]=workerFunc.apply(this,newArgHash[key])}else if(!isArraysEqual(currentArgHash[key],newArgHash[key])){if(teardownFunc){teardownFunc(currentResHash[key])}let res=workerFunc.apply(this,newArgHash[key]);newResHash[key]=resEquality&&resEquality(res,currentResHash[key])?currentResHash[key]:res}else{newResHash[key]=currentResHash[key]}}currentArgHash=newArgHash;currentResHash=newResHash;return newResHash}}const EXTENDED_SETTINGS_AND_SEVERITIES={week:3,separator:0,omitZeroMinute:0,meridiem:0,omitCommas:0};const STANDARD_DATE_PROP_SEVERITIES={timeZoneName:7,era:6,year:5,month:4,day:2,weekday:2,hour:1,minute:1,second:1};const MERIDIEM_RE=/\s*([ap])\.?m\.?/i;const COMMA_RE=/,/g;const MULTI_SPACE_RE=/\s+/g;const LTR_RE=/\u200e/g;const UTC_RE=/UTC|GMT/;class NativeFormatter{constructor(formatSettings){let standardDateProps={};let extendedSettings={};let severity=0;for(let name in formatSettings){if(name in EXTENDED_SETTINGS_AND_SEVERITIES){extendedSettings[name]=formatSettings[name];severity=Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name],severity)}else{standardDateProps[name]=formatSettings[name];if(name in STANDARD_DATE_PROP_SEVERITIES){severity=Math.max(STANDARD_DATE_PROP_SEVERITIES[name],severity)}}}this.standardDateProps=standardDateProps;this.extendedSettings=extendedSettings;this.severity=severity;this.buildFormattingFunc=memoize(buildFormattingFunc)}format(date,context){return this.buildFormattingFunc(this.standardDateProps,this.extendedSettings,context)(date)}formatRange(start,end,context,betterDefaultSeparator){let{standardDateProps,extendedSettings}=this;let diffSeverity=computeMarkerDiffSeverity(start.marker,end.marker,context.calendarSystem);if(!diffSeverity){return this.format(start,context)}let biggestUnitForPartial=diffSeverity;if(biggestUnitForPartial>1&&(standardDateProps.year==="numeric"||standardDateProps.year==="2-digit")&&(standardDateProps.month==="numeric"||standardDateProps.month==="2-digit")&&(standardDateProps.day==="numeric"||standardDateProps.day==="2-digit")){biggestUnitForPartial=1}let full0=this.format(start,context);let full1=this.format(end,context);if(full0===full1){return full0}let partialDateProps=computePartialFormattingOptions(standardDateProps,biggestUnitForPartial);let partialFormattingFunc=buildFormattingFunc(partialDateProps,extendedSettings,context);let partial0=partialFormattingFunc(start);let partial1=partialFormattingFunc(end);let insertion=findCommonInsertion(full0,partial0,full1,partial1);let separator=extendedSettings.separator||betterDefaultSeparator||context.defaultSeparator||"";if(insertion){return insertion.before+partial0+separator+partial1+insertion.after}return full0+separator+full1}getLargestUnit(){switch(this.severity){case 7:case 6:case 5:return"year";case 4:return"month";case 3:return"week";case 2:return"day";default:return"time"}}}function buildFormattingFunc(standardDateProps,extendedSettings,context){let standardDatePropCnt=Object.keys(standardDateProps).length;if(standardDatePropCnt===1&&standardDateProps.timeZoneName==="short"){return date=>formatTimeZoneOffset(date.timeZoneOffset)}if(standardDatePropCnt===0&&extendedSettings.week){return date=>formatWeekNumber(context.computeWeekNumber(date.marker),context.weekText,context.weekTextLong,context.locale,extendedSettings.week)}return buildNativeFormattingFunc(standardDateProps,extendedSettings,context)}function buildNativeFormattingFunc(standardDateProps,extendedSettings,context){standardDateProps=Object.assign({},standardDateProps);extendedSettings=Object.assign({},extendedSettings);sanitizeSettings(standardDateProps,extendedSettings);standardDateProps.timeZone="UTC";let normalFormat=new Intl.DateTimeFormat(context.locale.codes,standardDateProps);let zeroFormat;if(extendedSettings.omitZeroMinute){let zeroProps=Object.assign({},standardDateProps);delete zeroProps.minute;zeroFormat=new Intl.DateTimeFormat(context.locale.codes,zeroProps)}return date=>{let{marker}=date;let format;if(zeroFormat&&!marker.getUTCMinutes()){format=zeroFormat}else{format=normalFormat}let s=format.format(marker);return postProcess(s,date,standardDateProps,extendedSettings,context)}}function sanitizeSettings(standardDateProps,extendedSettings){if(standardDateProps.timeZoneName){if(!standardDateProps.hour){standardDateProps.hour="2-digit"}if(!standardDateProps.minute){standardDateProps.minute="2-digit"}}if(standardDateProps.timeZoneName==="long"){standardDateProps.timeZoneName="short"}if(extendedSettings.omitZeroMinute&&(standardDateProps.second||standardDateProps.millisecond)){delete extendedSettings.omitZeroMinute}}function postProcess(s,date,standardDateProps,extendedSettings,context){s=s.replace(LTR_RE,"");if(standardDateProps.timeZoneName==="short"){s=injectTzoStr(s,context.timeZone==="UTC"||date.timeZoneOffset==null?"UTC":formatTimeZoneOffset(date.timeZoneOffset))}if(extendedSettings.omitCommas){s=s.replace(COMMA_RE,"").trim()}if(extendedSettings.omitZeroMinute){s=s.replace(":00","")}if(extendedSettings.meridiem===false){s=s.replace(MERIDIEM_RE,"").trim()}else if(extendedSettings.meridiem==="narrow"){s=s.replace(MERIDIEM_RE,(m0,m1)=>m1.toLocaleLowerCase())}else if(extendedSettings.meridiem==="short"){s=s.replace(MERIDIEM_RE,(m0,m1)=>`${m1.toLocaleLowerCase()}m`)}else if(extendedSettings.meridiem==="lowercase"){s=s.replace(MERIDIEM_RE,m0=>m0.toLocaleLowerCase())}s=s.replace(MULTI_SPACE_RE," ");s=s.trim();return s}function injectTzoStr(s,tzoStr){let replaced=false;s=s.replace(UTC_RE,()=>{replaced=true;return tzoStr});if(!replaced){s+=` ${tzoStr}`}return s}function formatWeekNumber(num,weekText,weekTextLong,locale,display){let parts=[];if(display==="long"){parts.push(weekTextLong)}else if(display==="short"||display==="narrow"){parts.push(weekText)}if(display==="long"||display==="short"){parts.push(" ")}parts.push(locale.simpleNumberFormat.format(num));if(locale.options.direction==="rtl"){parts.reverse()}return parts.join("")}function computeMarkerDiffSeverity(d0,d1,ca){if(ca.getMarkerYear(d0)!==ca.getMarkerYear(d1)){return 5}if(ca.getMarkerMonth(d0)!==ca.getMarkerMonth(d1)){return 4}if(ca.getMarkerDay(d0)!==ca.getMarkerDay(d1)){return 2}if(timeAsMs(d0)!==timeAsMs(d1)){return 1}return 0}function computePartialFormattingOptions(options,biggestUnit){let partialOptions={};for(let name in options){if(!(name in STANDARD_DATE_PROP_SEVERITIES)||STANDARD_DATE_PROP_SEVERITIES[name]<=biggestUnit){partialOptions[name]=options[name]}}return partialOptions}function findCommonInsertion(full0,partial0,full1,partial1){let i0=0;while(i0=0;i-=1){let val=propObjs[i][name];if(typeof val==="object"&&val){complexObjs.unshift(val)}else if(val!==undefined){dest[name]=val;break}}if(complexObjs.length){dest[name]=mergeProps(complexObjs)}}}}for(let i=propObjs.length-1;i>=0;i-=1){let props=propObjs[i];for(let name in props){if(!(name in dest)){dest[name]=props[name]}}}return dest}function filterHash(hash,func){let filtered={};for(let key in hash){if(func(hash[key],key)){filtered[key]=hash[key]}}return filtered}function mapHash(hash,func){let newHash={};for(let key in hash){newHash[key]=func(hash[key],key)}return newHash}function arrayToHash(a){let hash={};for(let item of a){hash[item]=true}return hash}function hashValuesToArray(obj){let a=[];for(let key in obj){a.push(obj[key])}return a}function isPropsEqual(obj0,obj1){if(obj0===obj1){return true}for(let key in obj0){if(hasOwnProperty.call(obj0,key)){if(!(key in obj1)){return false}}}for(let key in obj1){if(hasOwnProperty.call(obj1,key)){if(obj0[key]!==obj1[key]){return false}}}return true}const HANDLER_RE=/^on[A-Z]/;function isNonHandlerPropsEqual(obj0,obj1){const keys=getUnequalProps(obj0,obj1);for(let key of keys){if(!HANDLER_RE.test(key)){return false}}return true}function getUnequalProps(obj0,obj1){let keys=[];for(let key in obj0){if(hasOwnProperty.call(obj0,key)){if(!(key in obj1)){keys.push(key)}}}for(let key in obj1){if(hasOwnProperty.call(obj1,key)){if(obj0[key]!==obj1[key]){keys.push(key)}}}return keys}function compareObjs(oldProps,newProps,equalityFuncs={}){if(oldProps===newProps){return true}for(let key in newProps){if(key in oldProps&&isObjValsEqual(oldProps[key],newProps[key],equalityFuncs[key]));else{return false}}for(let key in oldProps){if(!(key in newProps)){return false}}return true}function isObjValsEqual(val0,val1,comparator){if(val0===val1||comparator===true){return true}if(comparator){return comparator(val0,val1)}return false}function collectFromHash(hash,startIndex=0,endIndex,step=1){let res=[];if(endIndex==null){endIndex=Object.keys(hash).length}for(let i=startIndex;i{if(this.props.value!==_props.value){subs.forEach(c=>{c.context=_props.value;c.forceUpdate()})}};this.sub=c=>{subs.push(c);let old=c.componentWillUnmount;c.componentWillUnmount=()=>{subs.splice(subs.indexOf(c),1);old&&old.call(c)}}}return children};return ContextType}class ScrollResponder{constructor(execFunc,emitter,scrollTime,scrollTimeReset){this.execFunc=execFunc;this.emitter=emitter;this.scrollTime=scrollTime;this.scrollTimeReset=scrollTimeReset;this.handleScrollRequest=request=>{this.queuedRequest=Object.assign({},this.queuedRequest||{},request);this.drain()};emitter.on("_scrollRequest",this.handleScrollRequest);this.fireInitialScroll()}detach(){this.emitter.off("_scrollRequest",this.handleScrollRequest)}update(isDatesNew){if(isDatesNew&&this.scrollTimeReset){this.fireInitialScroll()}else{this.drain()}}fireInitialScroll(){this.handleScrollRequest({time:this.scrollTime})}drain(){if(this.queuedRequest&&this.execFunc(this.queuedRequest)){this.queuedRequest=null}}}const ViewContextType=createContext({});function buildViewContext(viewSpec,viewApi,viewOptions,dateProfileGenerator,dateEnv,theme,pluginHooks,dispatch,getCurrentData,emitter,calendarApi,registerInteractiveComponent,unregisterInteractiveComponent){return{dateEnv:dateEnv,options:viewOptions,pluginHooks:pluginHooks,emitter:emitter,dispatch:dispatch,getCurrentData:getCurrentData,calendarApi:calendarApi,viewSpec:viewSpec,viewApi:viewApi,dateProfileGenerator:dateProfileGenerator,theme:theme,isRtl:viewOptions.direction==="rtl",addResizeHandler(handler){emitter.on("_resize",handler)},removeResizeHandler(handler){emitter.off("_resize",handler)},createScrollResponder(execFunc){return new ScrollResponder(execFunc,emitter,createDuration(viewOptions.scrollTime),viewOptions.scrollTimeReset)},registerInteractiveComponent:registerInteractiveComponent,unregisterInteractiveComponent:unregisterInteractiveComponent}}class PureComponent extends x$1{shouldComponentUpdate(nextProps,nextState){if(this.debug){console.log(getUnequalProps(nextProps,this.props),getUnequalProps(nextState,this.state))}return!compareObjs(this.props,nextProps,this.propEquality)||!compareObjs(this.state,nextState,this.stateEquality)}safeSetState(newState){if(!compareObjs(this.state,Object.assign(Object.assign({},this.state),newState),this.stateEquality)){this.setState(newState)}}}PureComponent.addPropsEquality=addPropsEquality;PureComponent.addStateEquality=addStateEquality;PureComponent.contextType=ViewContextType;PureComponent.prototype.propEquality={};PureComponent.prototype.stateEquality={};class BaseComponent extends PureComponent{}BaseComponent.contextType=ViewContextType;function addPropsEquality(propEquality){let hash=Object.create(this.prototype.propEquality);Object.assign(hash,propEquality);this.prototype.propEquality=hash}function addStateEquality(stateEquality){let hash=Object.create(this.prototype.stateEquality);Object.assign(hash,stateEquality);this.prototype.stateEquality=hash}function setRef(ref,current){if(typeof ref==="function"){ref(current)}else if(ref){ref.current=current}}class ContentInjector extends BaseComponent{constructor(){super(...arguments);this.id=guid();this.queuedDomNodes=[];this.currentDomNodes=[];this.handleEl=el=>{const{options}=this.context;const{generatorName}=this.props;if(!options.customRenderingReplaces||!hasCustomRenderingHandler(generatorName,options)){this.updateElRef(el)}};this.updateElRef=el=>{if(this.props.elRef){setRef(this.props.elRef,el)}}}render(){const{props,context}=this;const{options}=context;const{customGenerator,defaultGenerator,renderProps}=props;const attrs=buildElAttrs(props,[],this.handleEl);let useDefault=false;let innerContent;let queuedDomNodes=[];let currentGeneratorMeta;if(customGenerator!=null){const customGeneratorRes=typeof customGenerator==="function"?customGenerator(renderProps,y):customGenerator;if(customGeneratorRes===true){useDefault=true}else{const isObject=customGeneratorRes&&typeof customGeneratorRes==="object";if(isObject&&"html"in customGeneratorRes){attrs.dangerouslySetInnerHTML={__html:customGeneratorRes.html}}else if(isObject&&"domNodes"in customGeneratorRes){queuedDomNodes=Array.prototype.slice.call(customGeneratorRes.domNodes)}else if(isObject?i$1(customGeneratorRes):typeof customGeneratorRes!=="function"){innerContent=customGeneratorRes}else{currentGeneratorMeta=customGeneratorRes}}}else{useDefault=!hasCustomRenderingHandler(props.generatorName,options)}if(useDefault&&defaultGenerator){innerContent=defaultGenerator(renderProps)}this.queuedDomNodes=queuedDomNodes;this.currentGeneratorMeta=currentGeneratorMeta;return y(props.elTag,attrs,innerContent)}componentDidMount(){this.applyQueueudDomNodes();this.triggerCustomRendering(true)}componentDidUpdate(){this.applyQueueudDomNodes();this.triggerCustomRendering(true)}componentWillUnmount(){this.triggerCustomRendering(false)}triggerCustomRendering(isActive){var _a;const{props,context}=this;const{handleCustomRendering,customRenderingMetaMap}=context.options;if(handleCustomRendering){const generatorMeta=(_a=this.currentGeneratorMeta)!==null&&_a!==void 0?_a:customRenderingMetaMap===null||customRenderingMetaMap===void 0?void 0:customRenderingMetaMap[props.generatorName];if(generatorMeta){handleCustomRendering(Object.assign(Object.assign({id:this.id,isActive:isActive,containerEl:this.base,reportNewContainerEl:this.updateElRef,generatorMeta:generatorMeta},props),{elClasses:(props.elClasses||[]).filter(isTruthy)}))}}}applyQueueudDomNodes(){const{queuedDomNodes,currentDomNodes}=this;const el=this.base;if(!isArraysEqual(queuedDomNodes,currentDomNodes)){currentDomNodes.forEach(removeElement);for(let newNode of queuedDomNodes){el.appendChild(newNode)}this.currentDomNodes=queuedDomNodes}}}ContentInjector.addPropsEquality({elClasses:isArraysEqual,elStyle:isPropsEqual,elAttrs:isNonHandlerPropsEqual,renderProps:isPropsEqual});function hasCustomRenderingHandler(generatorName,options){var _a;return Boolean(options.handleCustomRendering&&generatorName&&((_a=options.customRenderingMetaMap)===null||_a===void 0?void 0:_a[generatorName]))}function buildElAttrs(props,extraClassNames,elRef){const attrs=Object.assign(Object.assign({},props.elAttrs),{ref:elRef});if(props.elClasses||extraClassNames){attrs.className=(props.elClasses||[]).concat(extraClassNames||[]).concat(attrs.className||[]).filter(Boolean).join(" ")}if(props.elStyle){attrs.style=props.elStyle}return attrs}function isTruthy(val){return Boolean(val)}const RenderId=createContext(0);class ContentContainer extends x$1{constructor(){super(...arguments);this.InnerContent=InnerContentInjector.bind(undefined,this);this.handleEl=el=>{this.el=el;if(this.props.elRef){setRef(this.props.elRef,el);if(el&&this.didMountMisfire){this.componentDidMount()}}}}render(){const{props}=this;const generatedClassNames=generateClassNames(props.classNameGenerator,props.renderProps);if(props.children){const elAttrs=buildElAttrs(props,generatedClassNames,this.handleEl);const children=props.children(this.InnerContent,props.renderProps,elAttrs);if(props.elTag){return y(props.elTag,elAttrs,children)}else{return children}}else{return y(ContentInjector,Object.assign(Object.assign({},props),{elRef:this.handleEl,elTag:props.elTag||"div",elClasses:(props.elClasses||[]).concat(generatedClassNames),renderId:this.context}))}}componentDidMount(){var _a,_b;if(this.el){(_b=(_a=this.props).didMount)===null||_b===void 0?void 0:_b.call(_a,Object.assign(Object.assign({},this.props.renderProps),{el:this.el}))}else{this.didMountMisfire=true}}componentWillUnmount(){var _a,_b;(_b=(_a=this.props).willUnmount)===null||_b===void 0?void 0:_b.call(_a,Object.assign(Object.assign({},this.props.renderProps),{el:this.el}))}}ContentContainer.contextType=RenderId;function InnerContentInjector(containerComponent,props){const parentProps=containerComponent.props;return y(ContentInjector,Object.assign({renderProps:parentProps.renderProps,generatorName:parentProps.generatorName,customGenerator:parentProps.customGenerator,defaultGenerator:parentProps.defaultGenerator,renderId:containerComponent.context},props))}function generateClassNames(classNameGenerator,renderProps){const classNames=typeof classNameGenerator==="function"?classNameGenerator(renderProps):classNameGenerator||[];return typeof classNames==="string"?[classNames]:classNames}class ViewContainer extends BaseComponent{render(){let{props,context}=this;let{options}=context;let renderProps={view:context.viewApi};return y(ContentContainer,Object.assign({},props,{elTag:props.elTag||"div",elClasses:[...buildViewClassNames(props.viewSpec),...props.elClasses||[]],renderProps:renderProps,classNameGenerator:options.viewClassNames,generatorName:undefined,didMount:options.viewDidMount,willUnmount:options.viewWillUnmount}),()=>props.children)}}function buildViewClassNames(viewSpec){return[`fc-${viewSpec.type}-view`,"fc-view"]}function parseRange(input,dateEnv){let start=null;let end=null;if(input.start){start=dateEnv.createMarker(input.start)}if(input.end){end=dateEnv.createMarker(input.end)}if(!start&&!end){return null}if(start&&end&&endstart){invertedRanges.push({start:start,end:dateRange.start})}if(dateRange.end>start){start=dateRange.end}}if(startrange1.start)&&(range0.start===null||range1.end===null||range0.start=outerRange.start)&&(outerRange.end===null||innerRange.end!==null&&innerRange.end<=outerRange.end)}function rangeContainsMarker(range,date){return(range.start===null||date>=range.start)&&(range.end===null||date=range.end){return new Date(range.end.valueOf()-1)}return date}function computeAlignedDayRange(timedRange){let dayCnt=Math.floor(diffDays(timedRange.start,timedRange.end))||1;let start=startOfDay(timedRange.start);let end=addDays(start,dayCnt);return{start:start,end:end}}function computeVisibleDayRange(timedRange,nextDayThreshold=createDuration(0)){let startDay=null;let endDay=null;if(timedRange.end){endDay=startOfDay(timedRange.end);let endTimeMS=timedRange.end.valueOf()-endDay.valueOf();if(endTimeMS&&endTimeMS>=asRoughMs(nextDayThreshold)){endDay=addDays(endDay,1)}}if(timedRange.start){startDay=startOfDay(timedRange.start);if(endDay&&endDay<=startDay){endDay=addDays(startDay,1)}}return{start:startDay,end:endDay}}function isMultiDayRange(range){let visibleRange=computeVisibleDayRange(range);return diffDays(visibleRange.start,visibleRange.end)>1}function diffDates(date0,date1,dateEnv,largeUnit){if(largeUnit==="year"){return createDuration(dateEnv.diffWholeYears(date0,date1),"year")}if(largeUnit==="month"){return createDuration(dateEnv.diffWholeMonths(date0,date1),"month")}return diffDayAndTime(date0,date1)}function reduceCurrentDate(currentDate,action){switch(action.type){case"CHANGE_DATE":return action.dateMarker;default:return currentDate}}function getInitialDate(options,dateEnv){let initialDateInput=options.initialDate;if(initialDateInput!=null){return dateEnv.createMarker(initialDateInput)}return getNow(options.now,dateEnv)}function getNow(nowInput,dateEnv){if(typeof nowInput==="function"){nowInput=nowInput()}if(nowInput==null){return dateEnv.createNowMarker()}return dateEnv.createMarker(nowInput)}class DateProfileGenerator{constructor(props){this.props=props;this.nowDate=getNow(props.nowInput,props.dateEnv);this.initHiddenDays()}buildPrev(currentDateProfile,currentDate,forceToValid){let{dateEnv}=this.props;let prevDate=dateEnv.subtract(dateEnv.startOf(currentDate,currentDateProfile.currentRangeUnit),currentDateProfile.dateIncrement);return this.build(prevDate,-1,forceToValid)}buildNext(currentDateProfile,currentDate,forceToValid){let{dateEnv}=this.props;let nextDate=dateEnv.add(dateEnv.startOf(currentDate,currentDateProfile.currentRangeUnit),currentDateProfile.dateIncrement);return this.build(nextDate,1,forceToValid)}build(currentDate,direction,forceToValid=true){let{props}=this;let validRange;let currentInfo;let isRangeAllDay;let renderRange;let activeRange;let isValid;validRange=this.buildValidRange();validRange=this.trimHiddenDays(validRange);if(forceToValid){currentDate=constrainMarkerToRange(currentDate,validRange)}currentInfo=this.buildCurrentRangeInfo(currentDate,direction);isRangeAllDay=/^(year|month|week|day)$/.test(currentInfo.unit);renderRange=this.buildRenderRange(this.trimHiddenDays(currentInfo.range),currentInfo.unit,isRangeAllDay);renderRange=this.trimHiddenDays(renderRange);activeRange=renderRange;if(!props.showNonCurrentDates){activeRange=intersectRanges(activeRange,currentInfo.range)}activeRange=this.adjustActiveRange(activeRange);activeRange=intersectRanges(activeRange,validRange);isValid=rangesIntersect(currentInfo.range,validRange);if(!rangeContainsMarker(renderRange,currentDate)){currentDate=renderRange.start}return{currentDate:currentDate,validRange:validRange,currentRange:currentInfo.range,currentRangeUnit:currentInfo.unit,isRangeAllDay:isRangeAllDay,activeRange:activeRange,renderRange:renderRange,slotMinTime:props.slotMinTime,slotMaxTime:props.slotMaxTime,isValid:isValid,dateIncrement:this.buildDateIncrement(currentInfo.duration)}}buildValidRange(){let input=this.props.validRangeInput;let simpleInput=typeof input==="function"?input.call(this.props.calendarApi,this.nowDate):input;return this.refineRange(simpleInput)||{start:null,end:null}}buildCurrentRangeInfo(date,direction){let{props}=this;let duration=null;let unit=null;let range=null;let dayCount;if(props.duration){duration=props.duration;unit=props.durationUnit;range=this.buildRangeFromDuration(date,direction,duration,unit)}else if(dayCount=this.props.dayCount){unit="day";range=this.buildRangeFromDayCount(date,direction,dayCount)}else if(range=this.buildCustomVisibleRange(date)){unit=props.dateEnv.greatestWholeUnit(range.start,range.end).unit}else{duration=this.getFallbackDuration();unit=greatestDurationDenominator(duration).unit;range=this.buildRangeFromDuration(date,direction,duration,unit)}return{duration:duration,unit:unit,range:range}}getFallbackDuration(){return createDuration({day:1})}adjustActiveRange(range){let{dateEnv,usesMinMaxTime,slotMinTime,slotMaxTime}=this.props;let{start,end}=range;if(usesMinMaxTime){if(asRoughDays(slotMinTime)<0){start=startOfDay(start);start=dateEnv.add(start,slotMinTime)}if(asRoughDays(slotMaxTime)>1){end=startOfDay(end);end=addDays(end,-1);end=dateEnv.add(end,slotMaxTime)}}return{start:start,end:end}}buildRangeFromDuration(date,direction,duration,unit){let{dateEnv,dateAlignment}=this.props;let start;let end;let res;if(!dateAlignment){let{dateIncrement}=this.props;if(dateIncrement){if(asRoughMs(dateIncrement)!defs[instance.defId].recurringDef);for(let defId in defs){let def=defs[defId];if(def.recurringDef){let{duration}=def.recurringDef;if(!duration){duration=def.allDay?options.defaultAllDayEventDuration:options.defaultTimedEventDuration}let starts=expandRecurringRanges(def,duration,framingRange,dateEnv,pluginHooks.recurringTypes);for(let start of starts){let instance=createEventInstance(defId,{start:start,end:dateEnv.add(start,duration)});instances[instance.instanceId]=instance}}}return{defs:defs,instances:instances}}function expandRecurringRanges(eventDef,duration,framingRange,dateEnv,recurringTypes){let typeDef=recurringTypes[eventDef.recurringDef.typeId];let markers=typeDef.expand(eventDef.recurringDef.typeData,{start:dateEnv.subtract(framingRange.start,duration),end:framingRange.end},dateEnv);if(eventDef.allDay){markers=markers.map(startOfDay)}return markers}const EVENT_NON_DATE_REFINERS={id:String,groupId:String,title:String,url:String,interactive:Boolean};const EVENT_DATE_REFINERS={start:identity,end:identity,date:identity,allDay:Boolean};const EVENT_REFINERS=Object.assign(Object.assign(Object.assign({},EVENT_NON_DATE_REFINERS),EVENT_DATE_REFINERS),{extendedProps:identity});function parseEvent(raw,eventSource,context,allowOpenRange,refiners=buildEventRefiners(context),defIdMap,instanceIdMap){let{refined,extra}=refineEventDef(raw,context,refiners);let defaultAllDay=computeIsDefaultAllDay(eventSource,context);let recurringRes=parseRecurring(refined,defaultAllDay,context.dateEnv,context.pluginHooks.recurringTypes);if(recurringRes){let def=parseEventDef(refined,extra,eventSource?eventSource.sourceId:"",recurringRes.allDay,Boolean(recurringRes.duration),context,defIdMap);def.recurringDef={typeId:recurringRes.typeId,typeData:recurringRes.typeData,duration:recurringRes.duration};return{def:def,instance:null}}let singleRes=parseSingle(refined,defaultAllDay,context,allowOpenRange);if(singleRes){let def=parseEventDef(refined,extra,eventSource?eventSource.sourceId:"",singleRes.allDay,singleRes.hasEnd,context,defIdMap);let instance=createEventInstance(def.defId,singleRes.range,singleRes.forcedStartTzo,singleRes.forcedEndTzo);if(instanceIdMap&&def.publicId&&instanceIdMap[def.publicId]){instance.instanceId=instanceIdMap[def.publicId]}return{def:def,instance:instance}}return null}function refineEventDef(raw,context,refiners=buildEventRefiners(context)){return refineProps(raw,refiners)}function buildEventRefiners(context){return Object.assign(Object.assign(Object.assign({},EVENT_UI_REFINERS),EVENT_REFINERS),context.pluginHooks.eventRefiners)}function parseEventDef(refined,extra,sourceId,allDay,hasEnd,context,defIdMap){let def={title:refined.title||"",groupId:refined.groupId||"",publicId:refined.id||"",url:refined.url||"",recurringDef:null,defId:(defIdMap&&refined.id?defIdMap[refined.id]:"")||guid(),sourceId:sourceId,allDay:allDay,hasEnd:hasEnd,interactive:refined.interactive,ui:createEventUi(refined,context),extendedProps:Object.assign(Object.assign({},refined.extendedProps||{}),extra)};for(let memberAdder of context.pluginHooks.eventDefMemberAdders){Object.assign(def,memberAdder(refined))}Object.freeze(def.ui.classNames);Object.freeze(def.extendedProps);return def}function parseSingle(refined,defaultAllDay,context,allowOpenRange){let{allDay}=refined;let startMeta;let startMarker=null;let hasEnd=false;let endMeta;let endMarker=null;let startInput=refined.start!=null?refined.start:refined.date;startMeta=context.dateEnv.createMarkerMeta(startInput);if(startMeta){startMarker=startMeta.marker}else if(!allowOpenRange){return null}if(refined.end!=null){endMeta=context.dateEnv.createMarkerMeta(refined.end)}if(allDay==null){if(defaultAllDay!=null){allDay=defaultAllDay}else{allDay=(!startMeta||startMeta.isTimeUnspecified)&&(!endMeta||endMeta.isTimeUnspecified)}}if(allDay&&startMarker){startMarker=startOfDay(startMarker)}if(endMeta){endMarker=endMeta.marker;if(allDay){endMarker=startOfDay(endMarker)}if(startMarker&&endMarker<=startMarker){endMarker=null}}if(endMarker){hasEnd=true}else if(!allowOpenRange){hasEnd=context.options.forceEventDuration||false;endMarker=context.dateEnv.add(startMarker,allDay?context.options.defaultAllDayEventDuration:context.options.defaultTimedEventDuration)}return{allDay:allDay,hasEnd:hasEnd,range:{start:startMarker,end:endMarker},forcedStartTzo:startMeta?startMeta.forcedTzo:null,forcedEndTzo:endMeta?endMeta.forcedTzo:null}}function computeIsDefaultAllDay(eventSource,context){let res=null;if(eventSource){res=eventSource.defaultAllDay}if(res==null){res=context.options.defaultAllDay}return res}function parseEvents(rawEvents,eventSource,context,allowOpenRange,defIdMap,instanceIdMap){let eventStore=createEmptyEventStore();let eventRefiners=buildEventRefiners(context);for(let rawEvent of rawEvents){let tuple=parseEvent(rawEvent,eventSource,context,allowOpenRange,eventRefiners,defIdMap,instanceIdMap);if(tuple){eventTupleToStore(tuple,eventStore)}}return eventStore}function eventTupleToStore(tuple,eventStore=createEmptyEventStore()){eventStore.defs[tuple.def.defId]=tuple.def;if(tuple.instance){eventStore.instances[tuple.instance.instanceId]=tuple.instance}return eventStore}function getRelevantEvents(eventStore,instanceId){let instance=eventStore.instances[instanceId];if(instance){let def=eventStore.defs[instance.defId];let newStore=filterEventStoreDefs(eventStore,lookDef=>isEventDefsGrouped(def,lookDef));newStore.defs[def.defId]=def;newStore.instances[instance.instanceId]=instance;return newStore}return createEmptyEventStore()}function isEventDefsGrouped(def0,def1){return Boolean(def0.groupId&&def0.groupId===def1.groupId)}function createEmptyEventStore(){return{defs:{},instances:{}}}function mergeEventStores(store0,store1){return{defs:Object.assign(Object.assign({},store0.defs),store1.defs),instances:Object.assign(Object.assign({},store0.instances),store1.instances)}}function filterEventStoreDefs(eventStore,filterFunc){let defs=filterHash(eventStore.defs,filterFunc);let instances=filterHash(eventStore.instances,instance=>defs[instance.defId]);return{defs:defs,instances:instances}}function excludeSubEventStore(master,sub){let{defs,instances}=master;let filteredDefs={};let filteredInstances={};for(let defId in defs){if(!sub.defs[defId]){filteredDefs[defId]=defs[defId]}}for(let instanceId in instances){if(!sub.instances[instanceId]&&filteredDefs[instances[instanceId].defId]){filteredInstances[instanceId]=instances[instanceId]}}return{defs:filteredDefs,instances:filteredInstances}}function normalizeConstraint(input,context){if(Array.isArray(input)){return parseEvents(input,null,context,true)}if(typeof input==="object"&&input){return parseEvents([input],null,context,true)}if(input!=null){return String(input)}return null}function parseClassNames(raw){if(Array.isArray(raw)){return raw}if(typeof raw==="string"){return raw.split(/\s+/)}return[]}const EVENT_UI_REFINERS={display:String,editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:identity,overlap:identity,allow:identity,className:parseClassNames,classNames:parseClassNames,color:String,backgroundColor:String,borderColor:String,textColor:String};const EMPTY_EVENT_UI={display:null,startEditable:null,durationEditable:null,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]};function createEventUi(refined,context){let constraint=normalizeConstraint(refined.constraint,context);return{display:refined.display||null,startEditable:refined.startEditable!=null?refined.startEditable:refined.editable,durationEditable:refined.durationEditable!=null?refined.durationEditable:refined.editable,constraints:constraint!=null?[constraint]:[],overlap:refined.overlap!=null?refined.overlap:null,allows:refined.allow!=null?[refined.allow]:[],backgroundColor:refined.backgroundColor||refined.color||"",borderColor:refined.borderColor||refined.color||"",textColor:refined.textColor||"",classNames:(refined.className||[]).concat(refined.classNames||[])}}function combineEventUis(uis){return uis.reduce(combineTwoEventUis,EMPTY_EVENT_UI)}function combineTwoEventUis(item0,item1){return{display:item1.display!=null?item1.display:item0.display,startEditable:item1.startEditable!=null?item1.startEditable:item0.startEditable,durationEditable:item1.durationEditable!=null?item1.durationEditable:item0.durationEditable,constraints:item0.constraints.concat(item1.constraints),overlap:typeof item1.overlap==="boolean"?item1.overlap:item0.overlap,allows:item0.allows.concat(item1.allows),backgroundColor:item1.backgroundColor||item0.backgroundColor,borderColor:item1.borderColor||item0.borderColor,textColor:item1.textColor||item0.textColor,classNames:item0.classNames.concat(item1.classNames)}}const EVENT_SOURCE_REFINERS={id:String,defaultAllDay:Boolean,url:String,format:String,events:identity,eventDataTransform:identity,success:identity,failure:identity};function parseEventSource(raw,context,refiners=buildEventSourceRefiners(context)){let rawObj;if(typeof raw==="string"){rawObj={url:raw}}else if(typeof raw==="function"||Array.isArray(raw)){rawObj={events:raw}}else if(typeof raw==="object"&&raw){rawObj=raw}if(rawObj){let{refined,extra}=refineProps(rawObj,refiners);let metaRes=buildEventSourceMeta(refined,context);if(metaRes){return{_raw:raw,isFetching:false,latestFetchId:"",fetchRange:null,defaultAllDay:refined.defaultAllDay,eventDataTransform:refined.eventDataTransform,success:refined.success,failure:refined.failure,publicId:refined.id||"",sourceId:guid(),sourceDefId:metaRes.sourceDefId,meta:metaRes.meta,ui:createEventUi(refined,context),extendedProps:extra}}}return null}function buildEventSourceRefiners(context){return Object.assign(Object.assign(Object.assign({},EVENT_UI_REFINERS),EVENT_SOURCE_REFINERS),context.pluginHooks.eventSourceRefiners)}function buildEventSourceMeta(raw,context){let defs=context.pluginHooks.eventSourceDefs;for(let i=defs.length-1;i>=0;i-=1){let def=defs[i];let meta=def.parseMeta(raw);if(meta){return{sourceDefId:i,meta:meta}}}return null}function reduceEventStore(eventStore,action,eventSources,dateProfile,context){switch(action.type){case"RECEIVE_EVENTS":return receiveRawEvents(eventStore,eventSources[action.sourceId],action.fetchId,action.fetchRange,action.rawEvents,context);case"RESET_RAW_EVENTS":return resetRawEvents(eventStore,eventSources[action.sourceId],action.rawEvents,dateProfile.activeRange,context);case"ADD_EVENTS":return addEvent(eventStore,action.eventStore,dateProfile?dateProfile.activeRange:null,context);case"RESET_EVENTS":return action.eventStore;case"MERGE_EVENTS":return mergeEventStores(eventStore,action.eventStore);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":if(dateProfile){return expandRecurring(eventStore,dateProfile.activeRange,context)}return eventStore;case"REMOVE_EVENTS":return excludeSubEventStore(eventStore,action.eventStore);case"REMOVE_EVENT_SOURCE":return excludeEventsBySourceId(eventStore,action.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return filterEventStoreDefs(eventStore,eventDef=>!eventDef.sourceId);case"REMOVE_ALL_EVENTS":return createEmptyEventStore();default:return eventStore}}function receiveRawEvents(eventStore,eventSource,fetchId,fetchRange,rawEvents,context){if(eventSource&&fetchId===eventSource.latestFetchId){let subset=parseEvents(transformRawEvents(rawEvents,eventSource,context),eventSource,context);if(fetchRange){subset=expandRecurring(subset,fetchRange,context)}return mergeEventStores(excludeEventsBySourceId(eventStore,eventSource.sourceId),subset)}return eventStore}function resetRawEvents(existingEventStore,eventSource,rawEvents,activeRange,context){const{defIdMap,instanceIdMap}=buildPublicIdMaps(existingEventStore);let newEventStore=parseEvents(transformRawEvents(rawEvents,eventSource,context),eventSource,context,false,defIdMap,instanceIdMap);return expandRecurring(newEventStore,activeRange,context)}function transformRawEvents(rawEvents,eventSource,context){let calEachTransform=context.options.eventDataTransform;let sourceEachTransform=eventSource?eventSource.eventDataTransform:null;if(sourceEachTransform){rawEvents=transformEachRawEvent(rawEvents,sourceEachTransform)}if(calEachTransform){rawEvents=transformEachRawEvent(rawEvents,calEachTransform)}return rawEvents}function transformEachRawEvent(rawEvents,func){let refinedEvents;if(!func){refinedEvents=rawEvents}else{refinedEvents=[];for(let rawEvent of rawEvents){let refinedEvent=func(rawEvent);if(refinedEvent){refinedEvents.push(refinedEvent)}else if(refinedEvent==null){refinedEvents.push(rawEvent)}}}return refinedEvents}function addEvent(eventStore,subset,expandRange,context){if(expandRange){subset=expandRecurring(subset,expandRange,context)}return mergeEventStores(eventStore,subset)}function rezoneEventStoreDates(eventStore,oldDateEnv,newDateEnv){let{defs}=eventStore;let instances=mapHash(eventStore.instances,instance=>{let def=defs[instance.defId];if(def.allDay){return instance}return Object.assign(Object.assign({},instance),{range:{start:newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start,instance.forcedStartTzo)),end:newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end,instance.forcedEndTzo))},forcedStartTzo:newDateEnv.canComputeOffset?null:instance.forcedStartTzo,forcedEndTzo:newDateEnv.canComputeOffset?null:instance.forcedEndTzo})});return{defs:defs,instances:instances}}function excludeEventsBySourceId(eventStore,sourceId){return filterEventStoreDefs(eventStore,eventDef=>eventDef.sourceId!==sourceId)}function excludeInstances(eventStore,removals){return{defs:eventStore.defs,instances:filterHash(eventStore.instances,instance=>!removals[instance.instanceId])}}function buildPublicIdMaps(eventStore){const{defs,instances}=eventStore;const defIdMap={};const instanceIdMap={};for(let defId in defs){const def=defs[defId];const{publicId}=def;if(publicId){defIdMap[publicId]=defId}}for(let instanceId in instances){const instance=instances[instanceId];const def=defs[instance.defId];const{publicId}=def;if(publicId){instanceIdMap[publicId]=instanceId}}return{defIdMap:defIdMap,instanceIdMap:instanceIdMap}}class Emitter{constructor(){this.handlers={};this.thisContext=null}setThisContext(thisContext){this.thisContext=thisContext}setOptions(options){this.options=options}on(type,handler){addToHash(this.handlers,type,handler)}off(type,handler){removeFromHash(this.handlers,type,handler)}trigger(type,...args){let attachedHandlers=this.handlers[type]||[];let optionHandler=this.options&&this.options[type];let handlers=[].concat(optionHandler||[],attachedHandlers);for(let handler of handlers){handler.apply(this.thisContext,args)}}hasHandlers(type){return Boolean(this.handlers[type]&&this.handlers[type].length||this.options&&this.options[type])}}function addToHash(hash,type,handler){(hash[type]||(hash[type]=[])).push(handler)}function removeFromHash(hash,type,handler){if(handler){if(hash[type]){hash[type]=hash[type].filter(func=>func!==handler)}}else{delete hash[type]}}const DEF_DEFAULTS={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],display:"inverse-background",classNames:"fc-non-business",groupId:"_businessHours"};function parseBusinessHours(input,context){return parseEvents(refineInputs(input),null,context)}function refineInputs(input){let rawDefs;if(input===true){rawDefs=[{}]}else if(Array.isArray(input)){rawDefs=input.filter(rawDef=>rawDef.daysOfWeek)}else if(typeof input==="object"&&input){rawDefs=[input]}else{rawDefs=[]}rawDefs=rawDefs.map(rawDef=>Object.assign(Object.assign({},DEF_DEFAULTS),rawDef));return rawDefs}function triggerDateSelect(selection,pev,context){context.emitter.trigger("select",Object.assign(Object.assign({},buildDateSpanApiWithContext(selection,context)),{jsEvent:pev?pev.origEvent:null,view:context.viewApi||context.calendarApi.view}))}function triggerDateUnselect(pev,context){context.emitter.trigger("unselect",{jsEvent:pev?pev.origEvent:null,view:context.viewApi||context.calendarApi.view})}function buildDateSpanApiWithContext(dateSpan,context){let props={};for(let transform of context.pluginHooks.dateSpanTransforms){Object.assign(props,transform(dateSpan,context))}Object.assign(props,buildDateSpanApi(dateSpan,context.dateEnv));return props}function getDefaultEventEnd(allDay,marker,context){let{dateEnv,options}=context;let end=marker;if(allDay){end=startOfDay(end);end=dateEnv.add(end,options.defaultAllDayEventDuration)}else{end=dateEnv.add(end,options.defaultTimedEventDuration)}return end}function applyMutationToEventStore(eventStore,eventConfigBase,mutation,context){let eventConfigs=compileEventUis(eventStore.defs,eventConfigBase);let dest=createEmptyEventStore();for(let defId in eventStore.defs){let def=eventStore.defs[defId];dest.defs[defId]=applyMutationToEventDef(def,eventConfigs[defId],mutation,context)}for(let instanceId in eventStore.instances){let instance=eventStore.instances[instanceId];let def=dest.defs[instance.defId];dest.instances[instanceId]=applyMutationToEventInstance(instance,def,eventConfigs[instance.defId],mutation,context)}return dest}function applyMutationToEventDef(eventDef,eventConfig,mutation,context){let standardProps=mutation.standardProps||{};if(standardProps.hasEnd==null&&eventConfig.durationEditable&&(mutation.startDelta||mutation.endDelta)){standardProps.hasEnd=true}let copy=Object.assign(Object.assign(Object.assign({},eventDef),standardProps),{ui:Object.assign(Object.assign({},eventDef.ui),standardProps.ui)});if(mutation.extendedProps){copy.extendedProps=Object.assign(Object.assign({},copy.extendedProps),mutation.extendedProps)}for(let applier of context.pluginHooks.eventDefMutationAppliers){applier(copy,mutation,context)}if(!copy.hasEnd&&context.options.forceEventDuration){copy.hasEnd=true}return copy}function applyMutationToEventInstance(eventInstance,eventDef,eventConfig,mutation,context){let{dateEnv}=context;let forceAllDay=mutation.standardProps&&mutation.standardProps.allDay===true;let clearEnd=mutation.standardProps&&mutation.standardProps.hasEnd===false;let copy=Object.assign({},eventInstance);if(forceAllDay){copy.range=computeAlignedDayRange(copy.range)}if(mutation.datesDelta&&eventConfig.startEditable){copy.range={start:dateEnv.add(copy.range.start,mutation.datesDelta),end:dateEnv.add(copy.range.end,mutation.datesDelta)}}if(mutation.startDelta&&eventConfig.durationEditable){copy.range={start:dateEnv.add(copy.range.start,mutation.startDelta),end:copy.range.end}}if(mutation.endDelta&&eventConfig.durationEditable){copy.range={start:copy.range.start,end:dateEnv.add(copy.range.end,mutation.endDelta)}}if(clearEnd){copy.range={start:copy.range.start,end:getDefaultEventEnd(eventDef.allDay,copy.range.start,context)}}if(eventDef.allDay){copy.range={start:startOfDay(copy.range.start),end:startOfDay(copy.range.end)}}if(copy.range.endcompileEventUi(eventDef,eventUiBases))}function compileEventUi(eventDef,eventUiBases){let uis=[];if(eventUiBases[""]){uis.push(eventUiBases[""])}if(eventUiBases[eventDef.defId]){uis.push(eventUiBases[eventDef.defId])}uis.push(eventDef.ui);return combineEventUis(uis)}function sortEventSegs(segs,eventOrderSpecs){let objs=segs.map(buildSegCompareObj);objs.sort((obj0,obj1)=>compareByFieldSpecs(obj0,obj1,eventOrderSpecs));return objs.map(c=>c._seg)}function buildSegCompareObj(seg){let{eventRange}=seg;let eventDef=eventRange.def;let range=eventRange.instance?eventRange.instance.range:eventRange.range;let start=range.start?range.start.valueOf():0;let end=range.end?range.end.valueOf():0;return Object.assign(Object.assign(Object.assign({},eventDef.extendedProps),eventDef),{id:eventDef.publicId,start:start,end:end,duration:end-start,allDay:Number(eventDef.allDay),_seg:seg})}function computeSegDraggable(seg,context){let{pluginHooks}=context;let transformers=pluginHooks.isDraggableTransformers;let{def,ui}=seg.eventRange;let val=ui.startEditable;for(let transformer of transformers){val=transformer(val,def,ui,context)}return val}function computeSegStartResizable(seg,context){return seg.isStart&&seg.eventRange.ui.durationEditable&&context.options.eventResizableFromStart}function computeSegEndResizable(seg,context){return seg.isEnd&&seg.eventRange.ui.durationEditable}function buildSegTimeText(seg,timeFormat,context,defaultDisplayEventTime,defaultDisplayEventEnd,startOverride,endOverride){let{dateEnv,options}=context;let{displayEventTime,displayEventEnd}=options;let eventDef=seg.eventRange.def;let eventInstance=seg.eventRange.instance;if(displayEventTime==null){displayEventTime=defaultDisplayEventTime!==false}if(displayEventEnd==null){displayEventEnd=defaultDisplayEventEnd!==false}let wholeEventStart=eventInstance.range.start;let wholeEventEnd=eventInstance.range.end;let segStart=startOverride||seg.start||seg.eventRange.range.start;let segEnd=endOverride||seg.end||seg.eventRange.range.end;let isStartDay=startOfDay(wholeEventStart).valueOf()===startOfDay(segStart).valueOf();let isEndDay=startOfDay(addMs(wholeEventEnd,-1)).valueOf()===startOfDay(addMs(segEnd,-1)).valueOf();if(displayEventTime&&!eventDef.allDay&&(isStartDay||isEndDay)){segStart=isStartDay?wholeEventStart:segStart;segEnd=isEndDay?wholeEventEnd:segEnd;if(displayEventEnd&&eventDef.hasEnd){return dateEnv.formatRange(segStart,segEnd,timeFormat,{forcedStartTzo:startOverride?null:eventInstance.forcedStartTzo,forcedEndTzo:endOverride?null:eventInstance.forcedEndTzo})}return dateEnv.format(segStart,timeFormat,{forcedTzo:startOverride?null:eventInstance.forcedStartTzo})}return""}function getSegMeta(seg,todayRange,nowDate){let segRange=seg.eventRange.range;return{isPast:segRange.end<=(nowDate||todayRange.start),isFuture:segRange.start>=(nowDate||todayRange.end),isToday:todayRange&&rangeContainsMarker(todayRange,segRange.start)}}function getEventClassNames(props){let classNames=["fc-event"];if(props.isMirror){classNames.push("fc-event-mirror")}if(props.isDraggable){classNames.push("fc-event-draggable")}if(props.isStartResizable||props.isEndResizable){classNames.push("fc-event-resizable")}if(props.isDragging){classNames.push("fc-event-dragging")}if(props.isResizing){classNames.push("fc-event-resizing")}if(props.isSelected){classNames.push("fc-event-selected")}if(props.isStart){classNames.push("fc-event-start")}if(props.isEnd){classNames.push("fc-event-end")}if(props.isPast){classNames.push("fc-event-past")}if(props.isToday){classNames.push("fc-event-today")}if(props.isFuture){classNames.push("fc-event-future")}return classNames}function buildEventRangeKey(eventRange){return eventRange.instance?eventRange.instance.instanceId:`${eventRange.def.defId}:${eventRange.range.start.toISOString()}`}function getSegAnchorAttrs(seg,context){let{def,instance}=seg.eventRange;let{url}=def;if(url){return{href:url}}let{emitter,options}=context;let{eventInteractive}=options;if(eventInteractive==null){eventInteractive=def.interactive;if(eventInteractive==null){eventInteractive=Boolean(emitter.hasHandlers("eventClick"))}}if(eventInteractive){return createAriaKeyboardAttrs(ev=>{emitter.trigger("eventClick",{el:ev.target,event:new EventImpl(context,def,instance),jsEvent:ev,view:context.viewApi})})}return{}}const STANDARD_PROPS={start:identity,end:identity,allDay:Boolean};function parseDateSpan(raw,dateEnv,defaultDuration){let span=parseOpenDateSpan(raw,dateEnv);let{range}=span;if(!range.start){return null}if(!range.end){if(defaultDuration==null){return null}range.end=dateEnv.add(range.start,defaultDuration)}return span}function parseOpenDateSpan(raw,dateEnv){let{refined:standardProps,extra}=refineProps(raw,STANDARD_PROPS);let startMeta=standardProps.start?dateEnv.createMarkerMeta(standardProps.start):null;let endMeta=standardProps.end?dateEnv.createMarkerMeta(standardProps.end):null;let{allDay}=standardProps;if(allDay==null){allDay=startMeta&&startMeta.isTimeUnspecified&&(!endMeta||endMeta.isTimeUnspecified)}return Object.assign({range:{start:startMeta?startMeta.marker:null,end:endMeta?endMeta.marker:null},allDay:allDay},extra)}function isDateSpansEqual(span0,span1){return rangesEqual(span0.range,span1.range)&&span0.allDay===span1.allDay&&isSpanPropsEqual(span0,span1)}function isSpanPropsEqual(span0,span1){for(let propName in span1){if(propName!=="range"&&propName!=="allDay"){if(span0[propName]!==span1[propName]){return false}}}for(let propName in span0){if(!(propName in span1)){return false}}return true}function buildDateSpanApi(span,dateEnv){return Object.assign(Object.assign({},buildRangeApi(span.range,dateEnv,span.allDay)),{allDay:span.allDay})}function buildRangeApiWithTimeZone(range,dateEnv,omitTime){return Object.assign(Object.assign({},buildRangeApi(range,dateEnv,omitTime)),{timeZone:dateEnv.timeZone})}function buildRangeApi(range,dateEnv,omitTime){return{start:dateEnv.toDate(range.start),end:dateEnv.toDate(range.end),startStr:dateEnv.formatIso(range.start,{omitTime:omitTime}),endStr:dateEnv.formatIso(range.end,{omitTime:omitTime})}}function fabricateEventRange(dateSpan,eventUiBases,context){let res=refineEventDef({editable:false},context);let def=parseEventDef(res.refined,res.extra,"",dateSpan.allDay,true,context);return{def:def,ui:compileEventUi(def,eventUiBases),instance:createEventInstance(def.defId,dateSpan.range),range:dateSpan.range,isStart:true,isEnd:true}}function unpromisify(func,normalizedSuccessCallback,normalizedFailureCallback){let isResolved=false;let wrappedSuccess=function(res){if(!isResolved){isResolved=true;normalizedSuccessCallback(res)}};let wrappedFailure=function(error){if(!isResolved){isResolved=true;normalizedFailureCallback(error)}};let res=func(wrappedSuccess,wrappedFailure);if(res&&typeof res.then==="function"){res.then(wrappedSuccess,wrappedFailure)}}class JsonRequestError extends Error{constructor(message,response){super(message);this.response=response}}function requestJson(method,url,params){method=method.toUpperCase();const fetchOptions={method:method};if(method==="GET"){url+=(url.indexOf("?")===-1?"?":"&")+new URLSearchParams(params)}else{fetchOptions.body=new URLSearchParams(params);fetchOptions.headers={"Content-Type":"application/x-www-form-urlencoded"}}return fetch(url,fetchOptions).then(fetchRes=>{if(fetchRes.ok){return fetchRes.json().then(parsedResponse=>{return[parsedResponse,fetchRes]},()=>{throw new JsonRequestError("Failure parsing JSON",fetchRes)})}else{throw new JsonRequestError("Request failed",fetchRes)}})}let canVGrowWithinCell;function getCanVGrowWithinCell(){if(canVGrowWithinCell==null){canVGrowWithinCell=computeCanVGrowWithinCell()}return canVGrowWithinCell}function computeCanVGrowWithinCell(){if(typeof document==="undefined"){return true}let el=document.createElement("div");el.style.position="absolute";el.style.top="0px";el.style.left="0px";el.innerHTML="
";el.querySelector("table").style.height="100px";el.querySelector("div").style.height="100%";document.body.appendChild(el);let div=el.querySelector("div");let possible=div.offsetHeight>0;document.body.removeChild(el);return possible}class CalendarRoot extends BaseComponent{constructor(){super(...arguments);this.state={forPrint:false};this.handleBeforePrint=()=>{flushSync(()=>{this.setState({forPrint:true})})};this.handleAfterPrint=()=>{flushSync(()=>{this.setState({forPrint:false})})}}render(){let{props}=this;let{options}=props;let{forPrint}=this.state;let isHeightAuto=forPrint||options.height==="auto"||options.contentHeight==="auto";let height=!isHeightAuto&&options.height!=null?options.height:"";let classNames=["fc",forPrint?"fc-media-print":"fc-media-screen",`fc-direction-${options.direction}`,props.theme.getClass("root")];if(!getCanVGrowWithinCell()){classNames.push("fc-liquid-hack")}return props.children(classNames,height,isHeightAuto,forPrint)}componentDidMount(){let{emitter}=this.props;emitter.on("_beforeprint",this.handleBeforePrint);emitter.on("_afterprint",this.handleAfterPrint)}componentWillUnmount(){let{emitter}=this.props;emitter.off("_beforeprint",this.handleBeforePrint);emitter.off("_afterprint",this.handleAfterPrint)}}class Interaction{constructor(settings){this.component=settings.component;this.isHitComboAllowed=settings.isHitComboAllowed||null}destroy(){}}function parseInteractionSettings(component,input){return{component:component,el:input.el,useEventCenter:input.useEventCenter!=null?input.useEventCenter:true,isHitComboAllowed:input.isHitComboAllowed||null}}function interactionSettingsToStore(settings){return{[settings.component.uid]:settings}}const interactionSettingsStore={};class CalendarImpl{getCurrentData(){return this.currentDataManager.getCurrentData()}dispatch(action){this.currentDataManager.dispatch(action)}get view(){return this.getCurrentData().viewApi}batchRendering(callback){callback()}updateSize(){this.trigger("_resize",true)}setOption(name,val){this.dispatch({type:"SET_OPTION",optionName:name,rawOptionValue:val})}getOption(name){return this.currentDataManager.currentCalendarOptionsInput[name]}getAvailableLocaleCodes(){return Object.keys(this.getCurrentData().availableRawLocales)}on(handlerName,handler){let{currentDataManager}=this;if(currentDataManager.currentCalendarOptionsRefiners[handlerName]){currentDataManager.emitter.on(handlerName,handler)}else{console.warn(`Unknown listener name '${handlerName}'`)}}off(handlerName,handler){this.currentDataManager.emitter.off(handlerName,handler)}trigger(handlerName,...args){this.currentDataManager.emitter.trigger(handlerName,...args)}changeView(viewType,dateOrRange){this.batchRendering(()=>{this.unselect();if(dateOrRange){if(dateOrRange.start&&dateOrRange.end){this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:viewType});this.dispatch({type:"SET_OPTION",optionName:"visibleRange",rawOptionValue:dateOrRange})}else{let{dateEnv}=this.getCurrentData();this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:viewType,dateMarker:dateEnv.createMarker(dateOrRange)})}}else{this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:viewType})}})}zoomTo(dateMarker,viewType){let state=this.getCurrentData();let spec;viewType=viewType||"day";spec=state.viewSpecs[viewType]||this.getUnitViewSpec(viewType);this.unselect();if(spec){this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:spec.type,dateMarker:dateMarker})}else{this.dispatch({type:"CHANGE_DATE",dateMarker:dateMarker})}}getUnitViewSpec(unit){let{viewSpecs,toolbarConfig}=this.getCurrentData();let viewTypes=[].concat(toolbarConfig.header?toolbarConfig.header.viewsWithButtons:[],toolbarConfig.footer?toolbarConfig.footer.viewsWithButtons:[]);let i;let spec;for(let viewType in viewSpecs){viewTypes.push(viewType)}for(i=0;i{this.dispatch({type:"REMOVE_EVENTS",eventStore:eventApiToStore(eventApi)})}})}getEventById(id){let state=this.getCurrentData();let{defs,instances}=state.eventStore;id=String(id);for(let defId in defs){let def=defs[defId];if(def.publicId===id){if(def.recurringDef){return new EventImpl(state,def,null)}for(let instanceId in instances){let instance=instances[instanceId];if(instance.defId===def.defId){return new EventImpl(state,def,instance)}}}}return null}getEvents(){let currentData=this.getCurrentData();return buildEventApis(currentData.eventStore,currentData)}removeAllEvents(){this.dispatch({type:"REMOVE_ALL_EVENTS"})}getEventSources(){let state=this.getCurrentData();let sourceHash=state.eventSources;let sourceApis=[];for(let internalId in sourceHash){sourceApis.push(new EventSourceImpl(state,sourceHash[internalId]))}return sourceApis}getEventSourceById(id){let state=this.getCurrentData();let sourceHash=state.eventSources;id=String(id);for(let sourceId in sourceHash){if(sourceHash[sourceId].publicId===id){return new EventSourceImpl(state,sourceHash[sourceId])}}return null}addEventSource(sourceInput){let state=this.getCurrentData();if(sourceInput instanceof EventSourceImpl){if(!state.eventSources[sourceInput.internalEventSource.sourceId]){this.dispatch({type:"ADD_EVENT_SOURCES",sources:[sourceInput.internalEventSource]})}return sourceInput}let eventSource=parseEventSource(sourceInput,state);if(eventSource){this.dispatch({type:"ADD_EVENT_SOURCES",sources:[eventSource]});return new EventSourceImpl(state,eventSource)}return null}removeAllEventSources(){this.dispatch({type:"REMOVE_ALL_EVENT_SOURCES"})}refetchEvents(){this.dispatch({type:"FETCH_EVENT_SOURCES",isRefetch:true})}scrollToTime(timeInput){let time=createDuration(timeInput);if(time){this.trigger("_scrollRequest",{time:time})}}}function pointInsideRect(point,rect){return point.left>=rect.left&&point.left=rect.top&&point.topthis.eventUiBuilders[key]||memoize(buildEventUiForKey));for(let key in keyInfos){let keyInfo=keyInfos[key];let eventStore=eventStores[key]||EMPTY_EVENT_STORE;let buildEventUi=this.eventUiBuilders[key];splitProps[key]={businessHours:keyInfo.businessHours||props.businessHours,dateSelection:dateSelections[key]||null,eventStore:eventStore,eventUiBases:buildEventUi(props.eventUiBases[""],keyInfo.ui,individualUi[key]),eventSelection:eventStore.instances[props.eventSelection]?props.eventSelection:"",eventDrag:eventDrags[key]||null,eventResize:eventResizes[key]||null}}return splitProps}_splitDateSpan(dateSpan){let dateSpans={};if(dateSpan){let keys=this.getKeysForDateSpan(dateSpan);for(let key of keys){dateSpans[key]=dateSpan}}return dateSpans}_getKeysForEventDefs(eventStore){return mapHash(eventStore.defs,eventDef=>this.getKeysForEventDef(eventDef))}_splitEventStore(eventStore,defKeys){let{defs,instances}=eventStore;let splitStores={};for(let defId in defs){for(let key of defKeys[defId]){if(!splitStores[key]){splitStores[key]=createEmptyEventStore()}splitStores[key].defs[defId]=defs[defId]}}for(let instanceId in instances){let instance=instances[instanceId];for(let key of defKeys[instance.defId]){if(splitStores[key]){splitStores[key].instances[instanceId]=instance}}}return splitStores}_splitIndividualUi(eventUiBases,defKeys){let splitHashes={};for(let defId in eventUiBases){if(defId){for(let key of defKeys[defId]){if(!splitHashes[key]){splitHashes[key]={}}splitHashes[key][defId]=eventUiBases[defId]}}}return splitHashes}_splitInteraction(interaction){let splitStates={};if(interaction){let affectedStores=this._splitEventStore(interaction.affectedEvents,this._getKeysForEventDefs(interaction.affectedEvents));let mutatedKeysByDefId=this._getKeysForEventDefs(interaction.mutatedEvents);let mutatedStores=this._splitEventStore(interaction.mutatedEvents,mutatedKeysByDefId);let populate=key=>{if(!splitStates[key]){splitStates[key]={affectedEvents:affectedStores[key]||EMPTY_EVENT_STORE,mutatedEvents:mutatedStores[key]||EMPTY_EVENT_STORE,isEvent:interaction.isEvent}}};for(let key in affectedStores){populate(key)}for(let key in mutatedStores){populate(key)}}return splitStates}}function buildEventUiForKey(allUi,eventUiForKey,individualUi){let baseParts=[];if(allUi){baseParts.push(allUi)}if(eventUiForKey){baseParts.push(eventUiForKey)}let stuff={"":combineEventUis(baseParts)};if(individualUi){Object.assign(stuff,individualUi)}return stuff}function getDateMeta(date,todayRange,nowDate,dateProfile){return{dow:date.getUTCDay(),isDisabled:Boolean(dateProfile&&!rangeContainsMarker(dateProfile.activeRange,date)),isOther:Boolean(dateProfile&&!rangeContainsMarker(dateProfile.currentRange,date)),isToday:Boolean(todayRange&&rangeContainsMarker(todayRange,date)),isPast:Boolean(nowDate?datenowDate:todayRange?date>=todayRange.end:false)}}function getDayClassNames(meta,theme){let classNames=["fc-day",`fc-day-${DAY_IDS[meta.dow]}`];if(meta.isDisabled){classNames.push("fc-day-disabled")}else{if(meta.isToday){classNames.push("fc-day-today");classNames.push(theme.getClass("today"))}if(meta.isPast){classNames.push("fc-day-past")}if(meta.isFuture){classNames.push("fc-day-future")}if(meta.isOther){classNames.push("fc-day-other")}}return classNames}function getSlotClassNames(meta,theme){let classNames=["fc-slot",`fc-slot-${DAY_IDS[meta.dow]}`];if(meta.isDisabled){classNames.push("fc-slot-disabled")}else{if(meta.isToday){classNames.push("fc-slot-today");classNames.push(theme.getClass("today"))}if(meta.isPast){classNames.push("fc-slot-past")}if(meta.isFuture){classNames.push("fc-slot-future")}}return classNames}const DAY_FORMAT=createFormatter({year:"numeric",month:"long",day:"numeric"});const WEEK_FORMAT=createFormatter({week:"long"});function buildNavLinkAttrs(context,dateMarker,viewType="day",isTabbable=true){const{dateEnv,options,calendarApi}=context;let dateStr=dateEnv.format(dateMarker,viewType==="week"?WEEK_FORMAT:DAY_FORMAT);if(options.navLinks){let zonedDate=dateEnv.toDate(dateMarker);const handleInteraction=ev=>{let customAction=viewType==="day"?options.navLinkDayClick:viewType==="week"?options.navLinkWeekClick:null;if(typeof customAction==="function"){customAction.call(calendarApi,dateEnv.toDate(dateMarker),ev)}else{if(typeof customAction==="string"){viewType=customAction}calendarApi.zoomTo(dateMarker,viewType)}};return Object.assign({title:formatWithOrdinals(options.navLinkHint,[dateStr,zonedDate],dateStr),"data-navlink":""},isTabbable?createAriaClickAttrs(handleInteraction):{onClick:handleInteraction})}return{"aria-label":dateStr}}let _isRtlScrollbarOnLeft=null;function getIsRtlScrollbarOnLeft(){if(_isRtlScrollbarOnLeft===null){_isRtlScrollbarOnLeft=computeIsRtlScrollbarOnLeft()}return _isRtlScrollbarOnLeft}function computeIsRtlScrollbarOnLeft(){let outerEl=document.createElement("div");applyStyle(outerEl,{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"});outerEl.innerHTML="
";document.body.appendChild(outerEl);let innerEl=outerEl.firstChild;let res=innerEl.getBoundingClientRect().left>outerEl.getBoundingClientRect().left;removeElement(outerEl);return res}let _scrollbarWidths;function getScrollbarWidths(){if(!_scrollbarWidths){_scrollbarWidths=computeScrollbarWidths()}return _scrollbarWidths}function computeScrollbarWidths(){let el=document.createElement("div");el.style.overflow="scroll";el.style.position="absolute";el.style.top="-9999px";el.style.left="-9999px";document.body.appendChild(el);let res=computeScrollbarWidthsForEl(el);document.body.removeChild(el);return res}function computeScrollbarWidthsForEl(el){return{x:el.offsetHeight-el.clientHeight,y:el.offsetWidth-el.clientWidth}}function computeEdges(el,getPadding=false){let computedStyle=window.getComputedStyle(el);let borderLeft=parseInt(computedStyle.borderLeftWidth,10)||0;let borderRight=parseInt(computedStyle.borderRightWidth,10)||0;let borderTop=parseInt(computedStyle.borderTopWidth,10)||0;let borderBottom=parseInt(computedStyle.borderBottomWidth,10)||0;let badScrollbarWidths=computeScrollbarWidthsForEl(el);let scrollbarLeftRight=badScrollbarWidths.y-borderLeft-borderRight;let scrollbarBottom=badScrollbarWidths.x-borderTop-borderBottom;let res={borderLeft:borderLeft,borderRight:borderRight,borderTop:borderTop,borderBottom:borderBottom,scrollbarBottom:scrollbarBottom,scrollbarLeft:0,scrollbarRight:0};if(getIsRtlScrollbarOnLeft()&&computedStyle.direction==="rtl"){res.scrollbarLeft=scrollbarLeftRight}else{res.scrollbarRight=scrollbarLeftRight}if(getPadding){res.paddingLeft=parseInt(computedStyle.paddingLeft,10)||0;res.paddingRight=parseInt(computedStyle.paddingRight,10)||0;res.paddingTop=parseInt(computedStyle.paddingTop,10)||0;res.paddingBottom=parseInt(computedStyle.paddingBottom,10)||0}return res}function computeInnerRect(el,goWithinPadding=false,doFromWindowViewport){let outerRect=doFromWindowViewport?el.getBoundingClientRect():computeRect(el);let edges=computeEdges(el,goWithinPadding);let res={left:outerRect.left+edges.borderLeft+edges.scrollbarLeft,right:outerRect.right-edges.borderRight-edges.scrollbarRight,top:outerRect.top+edges.borderTop,bottom:outerRect.bottom-edges.borderBottom-edges.scrollbarBottom};if(goWithinPadding){res.left+=edges.paddingLeft;res.right-=edges.paddingRight;res.top+=edges.paddingTop;res.bottom-=edges.paddingBottom}return res}function computeRect(el){let rect=el.getBoundingClientRect();return{left:rect.left+window.scrollX,top:rect.top+window.scrollY,right:rect.right+window.scrollX,bottom:rect.bottom+window.scrollY}}function computeClippedClientRect(el){let clippingParents=getClippingParents(el);let rect=el.getBoundingClientRect();for(let clippingParent of clippingParents){let intersection=intersectRects(rect,clippingParent.getBoundingClientRect());if(intersection){rect=intersection}else{return null}}return rect}function getClippingParents(el){let parents=[];while(el instanceof HTMLElement){let computedStyle=window.getComputedStyle(el);if(computedStyle.position==="fixed"){break}if(/(auto|scroll)/.test(computedStyle.overflow+computedStyle.overflowY+computedStyle.overflowX)){parents.push(el)}el=el.parentNode}return parents}class PositionCache{constructor(originEl,els,isHorizontal,isVertical){this.els=els;let originClientRect=this.originClientRect=originEl.getBoundingClientRect();if(isHorizontal){this.buildElHorizontals(originClientRect.left)}if(isVertical){this.buildElVerticals(originClientRect.top)}}buildElHorizontals(originClientLeft){let lefts=[];let rights=[];for(let el of this.els){let rect=el.getBoundingClientRect();lefts.push(rect.left-originClientLeft);rights.push(rect.right-originClientLeft)}this.lefts=lefts;this.rights=rights}buildElVerticals(originClientTop){let tops=[];let bottoms=[];for(let el of this.els){let rect=el.getBoundingClientRect();tops.push(rect.top-originClientTop);bottoms.push(rect.bottom-originClientTop)}this.tops=tops;this.bottoms=bottoms}leftToIndex(leftPosition){let{lefts,rights}=this;let len=lefts.length;let i;for(i=0;i=lefts[i]&&leftPosition=tops[i]&&topPosition0}canScrollHorizontally(){return this.getMaxScrollLeft()>0}canScrollUp(){return this.getScrollTop()>0}canScrollDown(){return this.getScrollTop()0}canScrollRight(){return this.getScrollLeft(){return entry.thickness||1}){this.getEntryThickness=getEntryThickness;this.strictOrder=false;this.allowReslicing=false;this.maxCoord=-1;this.maxStackCnt=-1;this.levelCoords=[];this.entriesByLevel=[];this.stackCnts={}}addSegs(inputs){let hiddenEntries=[];for(let input of inputs){this.insertEntry(input,hiddenEntries)}return hiddenEntries}insertEntry(entry,hiddenEntries){let insertion=this.findInsertion(entry);if(this.isInsertionValid(insertion,entry)){this.insertEntryAt(entry,insertion)}else{this.handleInvalidInsertion(insertion,entry,hiddenEntries)}}isInsertionValid(insertion,entry){return(this.maxCoord===-1||insertion.levelCoord+this.getEntryThickness(entry)<=this.maxCoord)&&(this.maxStackCnt===-1||insertion.stackCntbarrierSpan.end){this.insertEntry({index:entry.index,thickness:entry.thickness,span:{start:barrierSpan.end,end:entrySpan.end}},hiddenEntries)}}insertEntryAt(entry,insertion){let{entriesByLevel,levelCoords}=this;if(insertion.lateral===-1){insertAt(levelCoords,insertion.level,insertion.levelCoord);insertAt(entriesByLevel,insertion.level,[entry])}else{insertAt(entriesByLevel[insertion.level],insertion.lateral,entry)}this.stackCnts[buildEntryKey(entry)]=insertion.stackCnt}findInsertion(newEntry){let{levelCoords,entriesByLevel,strictOrder,stackCnts}=this;let levelCnt=levelCoords.length;let candidateCoord=0;let touchingLevel=-1;let touchingLateral=-1;let touchingEntry=null;let stackCnt=0;for(let trackingLevel=0;trackingLevel=candidateCoord+this.getEntryThickness(newEntry)){break}let trackingEntries=entriesByLevel[trackingLevel];let trackingEntry;let searchRes=binarySearch(trackingEntries,newEntry.span.start,getEntrySpanEnd);let lateralIndex=searchRes[0]+searchRes[1];while((trackingEntry=trackingEntries[lateralIndex])&&trackingEntry.span.startcandidateCoord){candidateCoord=trackingEntryBottom;touchingEntry=trackingEntry;touchingLevel=trackingLevel;touchingLateral=lateralIndex}if(trackingEntryBottom===candidateCoord){stackCnt=Math.max(stackCnt,stackCnts[buildEntryKey(trackingEntry)]+1)}lateralIndex+=1}}let destLevel=0;if(touchingEntry){destLevel=touchingLevel+1;while(destLevelgetItemVal(a[endIndex-1])){return[endIndex,0]}while(startIndexmiddleVal){startIndex=middleIndex+1}else{return[middleIndex,1]}}return[startIndex,0]}class ElementDragging{constructor(el,selector){this.emitter=new Emitter}destroy(){}setMirrorIsVisible(bool){}setMirrorNeedsRevert(bool){}setAutoScrollEnabled(bool){}}const config={};const DRAG_META_REFINERS={startTime:createDuration,duration:createDuration,create:Boolean,sourceId:String};function parseDragMeta(raw){let{refined,extra}=refineProps(raw,DRAG_META_REFINERS);return{startTime:refined.startTime||null,duration:refined.duration||null,create:refined.create!=null?refined.create:true,sourceId:refined.sourceId,leftoverProps:extra}}function computeFallbackHeaderFormat(datesRepDistinctDays,dayCnt){if(!datesRepDistinctDays||dayCnt>10){return createFormatter({weekday:"short"})}if(dayCnt>1){return createFormatter({weekday:"short",month:"numeric",day:"numeric",omitCommas:true})}return createFormatter({weekday:"long"})}const CLASS_NAME="fc-col-header-cell";function renderInner$1(renderProps){return renderProps.text}class TableDateCell extends BaseComponent{render(){let{dateEnv,options,theme,viewApi}=this.context;let{props}=this;let{date,dateProfile}=props;let dayMeta=getDateMeta(date,props.todayRange,null,dateProfile);let classNames=[CLASS_NAME].concat(getDayClassNames(dayMeta,theme));let text=dateEnv.format(date,props.dayHeaderFormat);let navLinkAttrs=!dayMeta.isDisabled&&props.colCnt>1?buildNavLinkAttrs(this.context,date):{};let renderProps=Object.assign(Object.assign(Object.assign({date:dateEnv.toDate(date),view:viewApi},props.extraRenderProps),{text:text}),dayMeta);return y(ContentContainer,{elTag:"th",elClasses:classNames,elAttrs:Object.assign({role:"columnheader",colSpan:props.colSpan,"data-date":!dayMeta.isDisabled?formatDayString(date):undefined},props.extraDataAttrs),renderProps:renderProps,generatorName:"dayHeaderContent",customGenerator:options.dayHeaderContent,defaultGenerator:renderInner$1,classNameGenerator:options.dayHeaderClassNames,didMount:options.dayHeaderDidMount,willUnmount:options.dayHeaderWillUnmount},InnerContainer=>y("div",{className:"fc-scrollgrid-sync-inner"},!dayMeta.isDisabled&&y(InnerContainer,{elTag:"a",elAttrs:navLinkAttrs,elClasses:["fc-col-header-cell-cushion",props.isSticky&&"fc-sticky"]})))}}const WEEKDAY_FORMAT=createFormatter({weekday:"long"});class TableDowCell extends BaseComponent{render(){let{props}=this;let{dateEnv,theme,viewApi,options}=this.context;let date=addDays(new Date(2592e5),props.dow);let dateMeta={dow:props.dow,isDisabled:false,isFuture:false,isPast:false,isToday:false,isOther:false};let text=dateEnv.format(date,props.dayHeaderFormat);let renderProps=Object.assign(Object.assign(Object.assign(Object.assign({date:date},dateMeta),{view:viewApi}),props.extraRenderProps),{text:text});return y(ContentContainer,{elTag:"th",elClasses:[CLASS_NAME,...getDayClassNames(dateMeta,theme),...props.extraClassNames||[]],elAttrs:Object.assign({role:"columnheader",colSpan:props.colSpan},props.extraDataAttrs),renderProps:renderProps,generatorName:"dayHeaderContent",customGenerator:options.dayHeaderContent,defaultGenerator:renderInner$1,classNameGenerator:options.dayHeaderClassNames,didMount:options.dayHeaderDidMount,willUnmount:options.dayHeaderWillUnmount},InnerContent=>y("div",{className:"fc-scrollgrid-sync-inner"},y(InnerContent,{elTag:"a",elClasses:["fc-col-header-cell-cushion",props.isSticky&&"fc-sticky"],elAttrs:{"aria-label":dateEnv.format(date,WEEKDAY_FORMAT)}})))}}class NowTimer extends x$1{constructor(props,context){super(props,context);this.initialNowDate=getNow(context.options.now,context.dateEnv);this.initialNowQueriedMs=(new Date).valueOf();this.state=this.computeTiming().currentState}render(){let{props,state}=this;return props.children(state.nowDate,state.todayRange)}componentDidMount(){this.setTimeout()}componentDidUpdate(prevProps){if(prevProps.unit!==this.props.unit){this.clearTimeout();this.setTimeout()}}componentWillUnmount(){this.clearTimeout()}computeTiming(){let{props,context}=this;let unroundedNow=addMs(this.initialNowDate,(new Date).valueOf()-this.initialNowQueriedMs);let currentUnitStart=context.dateEnv.startOf(unroundedNow,props.unit);let nextUnitStart=context.dateEnv.add(currentUnitStart,createDuration(1,props.unit));let waitMs=nextUnitStart.valueOf()-unroundedNow.valueOf();waitMs=Math.min(1e3*60*60*24,waitMs);return{currentState:{nowDate:currentUnitStart,todayRange:buildDayRange(currentUnitStart)},nextState:{nowDate:nextUnitStart,todayRange:buildDayRange(nextUnitStart)},waitMs:waitMs}}setTimeout(){let{nextState,waitMs}=this.computeTiming();this.timeoutId=setTimeout(()=>{this.setState(nextState,()=>{this.setTimeout()})},waitMs)}clearTimeout(){if(this.timeoutId){clearTimeout(this.timeoutId)}}}NowTimer.contextType=ViewContextType;function buildDayRange(date){let start=startOfDay(date);let end=addDays(start,1);return{start:start,end:end}}class DayHeader extends BaseComponent{constructor(){super(...arguments);this.createDayHeaderFormatter=memoize(createDayHeaderFormatter)}render(){let{context}=this;let{dates,dateProfile,datesRepDistinctDays,renderIntro}=this.props;let dayHeaderFormat=this.createDayHeaderFormatter(context.options.dayHeaderFormat,datesRepDistinctDays,dates.length);return y(NowTimer,{unit:"day"},(nowDate,todayRange)=>y("tr",{role:"row"},renderIntro&&renderIntro("day"),dates.map(date=>datesRepDistinctDays?y(TableDateCell,{key:date.toISOString(),date:date,dateProfile:dateProfile,todayRange:todayRange,colCnt:dates.length,dayHeaderFormat:dayHeaderFormat}):y(TableDowCell,{key:date.getUTCDay(),dow:date.getUTCDay(),dayHeaderFormat:dayHeaderFormat}))))}}function createDayHeaderFormatter(explicitFormat,datesRepDistinctDays,dateCnt){return explicitFormat||computeFallbackHeaderFormat(datesRepDistinctDays,dateCnt)}class DaySeriesModel{constructor(range,dateProfileGenerator){let date=range.start;let{end}=range;let indices=[];let dates=[];let dayIndex=-1;while(date=indices.length){return indices[indices.length-1]+1}return indices[dayOffset]}}class DayTableModel{constructor(daySeries,breakOnWeeks){let{dates}=daySeries;let daysPerRow;let firstDay;let rowCnt;if(breakOnWeeks){firstDay=dates[0].getUTCDay();for(daysPerRow=1;daysPerRoweventDef.groupId===constraint))}if(typeof constraint==="object"&&constraint){return eventStoreToRanges(expandRecurring(constraint,subjectRange,context))}return[]}function eventStoreToRanges(eventStore){let{instances}=eventStore;let ranges=[];for(let instanceId in instances){ranges.push(instances[instanceId].range)}return ranges}function anyRangesContainRange(outerRanges,innerRange){for(let outerRange of outerRanges){if(rangeContainsRange(outerRange,innerRange)){return true}}return false}const VISIBLE_HIDDEN_RE=/^(visible|hidden)$/;class Scroller extends BaseComponent{constructor(){super(...arguments);this.handleEl=el=>{this.el=el;setRef(this.props.elRef,el)}}render(){let{props}=this;let{liquid,liquidIsAbsolute}=props;let isAbsolute=liquid&&liquidIsAbsolute;let className=["fc-scroller"];if(liquid){if(liquidIsAbsolute){className.push("fc-scroller-liquid-absolute")}else{className.push("fc-scroller-liquid")}}return y("div",{ref:this.handleEl,className:className.join(" "),style:{overflowX:props.overflowX,overflowY:props.overflowY,left:isAbsolute&&-(props.overcomeLeft||0)||"",right:isAbsolute&&-(props.overcomeRight||0)||"",bottom:isAbsolute&&-(props.overcomeBottom||0)||"",marginLeft:!isAbsolute&&-(props.overcomeLeft||0)||"",marginRight:!isAbsolute&&-(props.overcomeRight||0)||"",marginBottom:!isAbsolute&&-(props.overcomeBottom||0)||"",maxHeight:props.maxHeight||""}},props.children)}needsXScrolling(){if(VISIBLE_HIDDEN_RE.test(this.props.overflowX)){return false}let{el}=this;let realClientWidth=this.el.getBoundingClientRect().width-this.getYScrollbarWidth();let{children}=el;for(let i=0;irealClientWidth){return true}}return false}needsYScrolling(){if(VISIBLE_HIDDEN_RE.test(this.props.overflowY)){return false}let{el}=this;let realClientHeight=this.el.getBoundingClientRect().height-this.getXScrollbarWidth();let{children}=el;for(let i=0;irealClientHeight){return true}}return false}getXScrollbarWidth(){if(VISIBLE_HIDDEN_RE.test(this.props.overflowX)){return 0}return this.el.offsetHeight-this.el.clientHeight}getYScrollbarWidth(){if(VISIBLE_HIDDEN_RE.test(this.props.overflowY)){return 0}return this.el.offsetWidth-this.el.clientWidth}}class RefMap{constructor(masterCallback){this.masterCallback=masterCallback;this.currentMap={};this.depths={};this.callbackMap={};this.handleValue=(val,key)=>{let{depths,currentMap}=this;let removed=false;let added=false;if(val!==null){removed=key in currentMap;currentMap[key]=val;depths[key]=(depths[key]||0)+1;added=true}else{depths[key]-=1;if(!depths[key]){delete currentMap[key];delete this.callbackMap[key];removed=true}}if(this.masterCallback){if(removed){this.masterCallback(null,String(key))}if(added){this.masterCallback(val,String(key))}}}}createRef(key){let refCallback=this.callbackMap[key];if(!refCallback){refCallback=this.callbackMap[key]=val=>{this.handleValue(val,String(key))}}return refCallback}collect(startIndex,endIndex,step){return collectFromHash(this.currentMap,startIndex,endIndex,step)}getAll(){return hashValuesToArray(this.currentMap)}}function computeShrinkWidth(chunkEls){let shrinkCells=findElements(chunkEls,".fc-scrollgrid-shrink");let largestWidth=0;for(let shrinkCell of shrinkCells){largestWidth=Math.max(largestWidth,computeSmallestCellWidth(shrinkCell))}return Math.ceil(largestWidth)}function getSectionHasLiquidHeight(props,sectionConfig){return props.liquid&§ionConfig.liquid}function getAllowYScrolling(props,sectionConfig){return sectionConfig.maxHeight!=null||getSectionHasLiquidHeight(props,sectionConfig)}function renderChunkContent(sectionConfig,chunkConfig,arg,isHeader){let{expandRows}=arg;let content=typeof chunkConfig.content==="function"?chunkConfig.content(arg):y("table",{role:"presentation",className:[chunkConfig.tableClassName,sectionConfig.syncRowHeights?"fc-scrollgrid-sync-table":""].join(" "),style:{minWidth:arg.tableMinWidth,width:arg.clientWidth,height:expandRows?arg.clientHeight:""}},arg.tableColGroupNode,y(isHeader?"thead":"tbody",{role:"presentation"},typeof chunkConfig.rowContent==="function"?chunkConfig.rowContent(arg):chunkConfig.rowContent));return content}function isColPropsEqual(cols0,cols1){return isArraysEqual(cols0,cols1,isPropsEqual)}function renderMicroColGroup(cols,shrinkWidth){let colNodes=[];for(let colProps of cols){let span=colProps.span||1;for(let i=0;ia,isColPropsEqual);this.renderMicroColGroup=memoize(renderMicroColGroup);this.scrollerRefs=new RefMap;this.scrollerElRefs=new RefMap(this._handleScrollerEl.bind(this));this.state={shrinkWidth:null,forceYScrollbars:false,scrollerClientWidths:{},scrollerClientHeights:{}};this.handleSizing=()=>{this.safeSetState(Object.assign({shrinkWidth:this.computeShrinkWidth()},this.computeScrollerDims()))}}render(){let{props,state,context}=this;let sectionConfigs=props.sections||[];let cols=this.processCols(props.cols);let microColGroupNode=this.renderMicroColGroup(cols,state.shrinkWidth);let classNames=getScrollGridClassNames(props.liquid,context);if(props.collapsibleWidth){classNames.push("fc-scrollgrid-collapsible")}let configCnt=sectionConfigs.length;let configI=0;let currentConfig;let headSectionNodes=[];let bodySectionNodes=[];let footSectionNodes=[];while(configI{}},isHeader);return y(isHeader?"th":"td",{ref:chunkConfig.elRef,role:"presentation"},y("div",{className:`fc-scroller-harness${isLiquid?" fc-scroller-harness-liquid":""}`},y(Scroller,{ref:this.scrollerRefs.createRef(sectionKey),elRef:this.scrollerElRefs.createRef(sectionKey),overflowY:overflowY,overflowX:!props.liquid?"visible":"hidden",maxHeight:sectionConfig.maxHeight,liquid:isLiquid,liquidIsAbsolute:true},content)))}_handleScrollerEl(scrollerEl,key){let section=getSectionByKey(this.props.sections,key);if(section){setRef(section.chunk.scrollerElRef,scrollerEl)}}componentDidMount(){this.handleSizing();this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(){this.handleSizing()}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}computeShrinkWidth(){return hasShrinkWidth(this.props.cols)?computeShrinkWidth(this.scrollerElRefs.getAll()):0}computeScrollerDims(){let scrollbarWidth=getScrollbarWidths();let{scrollerRefs,scrollerElRefs}=this;let forceYScrollbars=false;let scrollerClientWidths={};let scrollerClientHeights={};for(let sectionKey in scrollerRefs.currentMap){let scroller=scrollerRefs.currentMap[sectionKey];if(scroller&&scroller.needsYScrolling()){forceYScrollbars=true;break}}for(let section of this.props.sections){let sectionKey=section.key;let scrollerEl=scrollerElRefs.currentMap[sectionKey];if(scrollerEl){let harnessEl=scrollerEl.parentNode;scrollerClientWidths[sectionKey]=Math.floor(harnessEl.getBoundingClientRect().width-(forceYScrollbars?scrollbarWidth.y:0));scrollerClientHeights[sectionKey]=Math.floor(harnessEl.getBoundingClientRect().height)}}return{forceYScrollbars:forceYScrollbars,scrollerClientWidths:scrollerClientWidths,scrollerClientHeights:scrollerClientHeights}}}SimpleScrollGrid.addStateEquality({scrollerClientWidths:isPropsEqual,scrollerClientHeights:isPropsEqual});function getSectionByKey(sections,key){for(let section of sections){if(section.key===key){return section}}return null}class EventContainer extends BaseComponent{constructor(){super(...arguments);this.handleEl=el=>{this.el=el;if(el){setElSeg(el,this.props.seg)}}}render(){const{props,context}=this;const{options}=context;const{seg}=props;const{eventRange}=seg;const{ui}=eventRange;const renderProps={event:new EventImpl(context,eventRange.def,eventRange.instance),view:context.viewApi,timeText:props.timeText,textColor:ui.textColor,backgroundColor:ui.backgroundColor,borderColor:ui.borderColor,isDraggable:!props.disableDragging&&computeSegDraggable(seg,context),isStartResizable:!props.disableResizing&&computeSegStartResizable(seg,context),isEndResizable:!props.disableResizing&&computeSegEndResizable(seg),isMirror:Boolean(props.isDragging||props.isResizing||props.isDateSelecting),isStart:Boolean(seg.isStart),isEnd:Boolean(seg.isEnd),isPast:Boolean(props.isPast),isFuture:Boolean(props.isFuture),isToday:Boolean(props.isToday),isSelected:Boolean(props.isSelected),isDragging:Boolean(props.isDragging),isResizing:Boolean(props.isResizing)};return y(ContentContainer,Object.assign({},props,{elRef:this.handleEl,elClasses:[...getEventClassNames(renderProps),...seg.eventRange.ui.classNames,...props.elClasses||[]],renderProps:renderProps,generatorName:"eventContent",customGenerator:options.eventContent,defaultGenerator:props.defaultGenerator,classNameGenerator:options.eventClassNames,didMount:options.eventDidMount,willUnmount:options.eventWillUnmount}))}componentDidUpdate(prevProps){if(this.el&&this.props.seg!==prevProps.seg){setElSeg(this.el,this.props.seg)}}}class StandardEvent extends BaseComponent{render(){let{props,context}=this;let{options}=context;let{seg}=props;let{ui}=seg.eventRange;let timeFormat=options.eventTimeFormat||props.defaultTimeFormat;let timeText=buildSegTimeText(seg,timeFormat,context,props.defaultDisplayEventTime,props.defaultDisplayEventEnd);return y(EventContainer,Object.assign({},props,{elTag:"a",elStyle:{borderColor:ui.borderColor,backgroundColor:ui.backgroundColor},elAttrs:getSegAnchorAttrs(seg,context),defaultGenerator:renderInnerContent$1$1,timeText:timeText}),(InnerContent,eventContentArg)=>y(_,null,y(InnerContent,{elTag:"div",elClasses:["fc-event-main"],elStyle:{color:eventContentArg.textColor}}),Boolean(eventContentArg.isStartResizable)&&y("div",{className:"fc-event-resizer fc-event-resizer-start"}),Boolean(eventContentArg.isEndResizable)&&y("div",{className:"fc-event-resizer fc-event-resizer-end"})))}}function renderInnerContent$1$1(innerProps){return y("div",{className:"fc-event-main-frame"},innerProps.timeText&&y("div",{className:"fc-event-time"},innerProps.timeText),y("div",{className:"fc-event-title-container"},y("div",{className:"fc-event-title fc-sticky"},innerProps.event.title||y(_,null," "))))}const NowIndicatorContainer=props=>y(ViewContextType.Consumer,null,context=>{let{options}=context;let renderProps={isAxis:props.isAxis,date:context.dateEnv.toDate(props.date),view:context.viewApi};return y(ContentContainer,Object.assign({},props,{elTag:props.elTag||"div",renderProps:renderProps,generatorName:"nowIndicatorContent",customGenerator:options.nowIndicatorContent,classNameGenerator:options.nowIndicatorClassNames,didMount:options.nowIndicatorDidMount,willUnmount:options.nowIndicatorWillUnmount}))});const DAY_NUM_FORMAT=createFormatter({day:"numeric"});class DayCellContainer extends BaseComponent{constructor(){super(...arguments);this.refineRenderProps=memoizeObjArg(refineRenderProps)}render(){let{props,context}=this;let{options}=context;let renderProps=this.refineRenderProps({date:props.date,dateProfile:props.dateProfile,todayRange:props.todayRange,isMonthStart:props.isMonthStart||false,showDayNumber:props.showDayNumber,extraRenderProps:props.extraRenderProps,viewApi:context.viewApi,dateEnv:context.dateEnv,monthStartFormat:options.monthStartFormat});return y(ContentContainer,Object.assign({},props,{elClasses:[...getDayClassNames(renderProps,context.theme),...props.elClasses||[]],elAttrs:Object.assign(Object.assign({},props.elAttrs),renderProps.isDisabled?{}:{"data-date":formatDayString(props.date)}),renderProps:renderProps,generatorName:"dayCellContent",customGenerator:options.dayCellContent,defaultGenerator:props.defaultGenerator,classNameGenerator:renderProps.isDisabled?undefined:options.dayCellClassNames,didMount:options.dayCellDidMount,willUnmount:options.dayCellWillUnmount}))}}function hasCustomDayCellContent(options){return Boolean(options.dayCellContent||hasCustomRenderingHandler("dayCellContent",options))}function refineRenderProps(raw){let{date,dateEnv,dateProfile,isMonthStart}=raw;let dayMeta=getDateMeta(date,raw.todayRange,null,dateProfile);let dayNumberText=raw.showDayNumber?dateEnv.format(date,isMonthStart?raw.monthStartFormat:DAY_NUM_FORMAT):"";return Object.assign(Object.assign(Object.assign({date:dateEnv.toDate(date),view:raw.viewApi},dayMeta),{isMonthStart:isMonthStart,dayNumberText:dayNumberText}),raw.extraRenderProps)}class BgEvent extends BaseComponent{render(){let{props}=this;let{seg}=props;return y(EventContainer,{elTag:"div",elClasses:["fc-bg-event"],elStyle:{backgroundColor:seg.eventRange.ui.backgroundColor},defaultGenerator:renderInnerContent$3,seg:seg,timeText:"",isDragging:false,isResizing:false,isDateSelecting:false,isSelected:false,isPast:props.isPast,isFuture:props.isFuture,isToday:props.isToday,disableDragging:true,disableResizing:true})}}function renderInnerContent$3(props){let{title}=props.event;return title&&y("div",{className:"fc-event-title"},props.event.title)}function renderFill(fillType){return y("div",{className:`fc-${fillType}`})}const WeekNumberContainer=props=>y(ViewContextType.Consumer,null,context=>{let{dateEnv,options}=context;let{date}=props;let format=options.weekNumberFormat||props.defaultFormat;let num=dateEnv.computeWeekNumber(date);let text=dateEnv.format(date,format);let renderProps={num:num,text:text,date:date};return y(ContentContainer,Object.assign({},props,{renderProps:renderProps,generatorName:"weekNumberContent",customGenerator:options.weekNumberContent,defaultGenerator:renderInner,classNameGenerator:options.weekNumberClassNames,didMount:options.weekNumberDidMount,willUnmount:options.weekNumberWillUnmount}))});function renderInner(innerProps){return innerProps.text}const PADDING_FROM_VIEWPORT=10;class Popover extends BaseComponent{constructor(){super(...arguments);this.state={titleId:getUniqueDomId()};this.handleRootEl=el=>{this.rootEl=el;if(this.props.elRef){setRef(this.props.elRef,el)}};this.handleDocumentMouseDown=ev=>{const target=getEventTargetViaRoot(ev);if(!this.rootEl.contains(target)){this.handleCloseClick()}};this.handleDocumentKeyDown=ev=>{if(ev.key==="Escape"){this.handleCloseClick()}};this.handleCloseClick=()=>{let{onClose}=this.props;if(onClose){onClose()}}}render(){let{theme,options}=this.context;let{props,state}=this;let classNames=["fc-popover",theme.getClass("popover")].concat(props.extraClassNames||[]);return j(y("div",Object.assign({},props.extraAttrs,{id:props.id,className:classNames.join(" "),"aria-labelledby":state.titleId,ref:this.handleRootEl}),y("div",{className:"fc-popover-header "+theme.getClass("popoverHeader")},y("span",{className:"fc-popover-title",id:state.titleId},props.title),y("span",{className:"fc-popover-close "+theme.getIconClass("close"),title:options.closeHint,onClick:this.handleCloseClick})),y("div",{className:"fc-popover-body "+theme.getClass("popoverContent")},props.children)),props.parentEl)}componentDidMount(){document.addEventListener("mousedown",this.handleDocumentMouseDown);document.addEventListener("keydown",this.handleDocumentKeyDown);this.updateSize()}componentWillUnmount(){document.removeEventListener("mousedown",this.handleDocumentMouseDown);document.removeEventListener("keydown",this.handleDocumentKeyDown)}updateSize(){let{isRtl}=this.context;let{alignmentEl,alignGridTop}=this.props;let{rootEl}=this;let alignmentRect=computeClippedClientRect(alignmentEl);if(alignmentRect){let popoverDims=rootEl.getBoundingClientRect();let popoverTop=alignGridTop?elementClosest(alignmentEl,".fc-scrollgrid").getBoundingClientRect().top:alignmentRect.top;let popoverLeft=isRtl?alignmentRect.right-popoverDims.width:alignmentRect.left;popoverTop=Math.max(popoverTop,PADDING_FROM_VIEWPORT);popoverLeft=Math.min(popoverLeft,document.documentElement.clientWidth-PADDING_FROM_VIEWPORT-popoverDims.width);popoverLeft=Math.max(popoverLeft,PADDING_FROM_VIEWPORT);let origin=rootEl.offsetParent.getBoundingClientRect();applyStyle(rootEl,{top:popoverTop-origin.top,left:popoverLeft-origin.left})}}}class MorePopover extends DateComponent{constructor(){super(...arguments);this.handleRootEl=rootEl=>{this.rootEl=rootEl;if(rootEl){this.context.registerInteractiveComponent(this,{el:rootEl,useEventCenter:false})}else{this.context.unregisterInteractiveComponent(this)}}}render(){let{options,dateEnv}=this.context;let{props}=this;let{startDate,todayRange,dateProfile}=props;let title=dateEnv.format(startDate,options.dayPopoverFormat);return y(DayCellContainer,{elRef:this.handleRootEl,date:startDate,dateProfile:dateProfile,todayRange:todayRange},(InnerContent,renderProps,elAttrs)=>y(Popover,{elRef:elAttrs.ref,id:props.id,title:title,extraClassNames:["fc-more-popover"].concat(elAttrs.className||[]),extraAttrs:elAttrs,parentEl:props.parentEl,alignmentEl:props.alignmentEl,alignGridTop:props.alignGridTop,onClose:props.onClose},hasCustomDayCellContent(options)&&y(InnerContent,{elTag:"div",elClasses:["fc-more-popover-misc"]}),props.children))}queryHit(positionLeft,positionTop,elWidth,elHeight){let{rootEl,props}=this;if(positionLeft>=0&&positionLeft=0&&positionTop{this.linkEl=linkEl;if(this.props.elRef){setRef(this.props.elRef,linkEl)}};this.handleClick=ev=>{let{props,context}=this;let{moreLinkClick}=context.options;let date=computeRange(props).start;function buildPublicSeg(seg){let{def,instance,range}=seg.eventRange;return{event:new EventImpl(context,def,instance),start:context.dateEnv.toDate(range.start),end:context.dateEnv.toDate(range.end),isStart:seg.isStart,isEnd:seg.isEnd}}if(typeof moreLinkClick==="function"){moreLinkClick=moreLinkClick({date:date,allDay:Boolean(props.allDayDate),allSegs:props.allSegs.map(buildPublicSeg),hiddenSegs:props.hiddenSegs.map(buildPublicSeg),jsEvent:ev,view:context.viewApi})}if(!moreLinkClick||moreLinkClick==="popover"){this.setState({isPopoverOpen:true})}else if(typeof moreLinkClick==="string"){context.calendarApi.zoomTo(date,moreLinkClick)}};this.handlePopoverClose=()=>{this.setState({isPopoverOpen:false})}}render(){let{props,state}=this;return y(ViewContextType.Consumer,null,context=>{let{viewApi,options,calendarApi}=context;let{moreLinkText}=options;let{moreCnt}=props;let range=computeRange(props);let text=typeof moreLinkText==="function"?moreLinkText.call(calendarApi,moreCnt):`+${moreCnt} ${moreLinkText}`;let hint=formatWithOrdinals(options.moreLinkHint,[moreCnt],text);let renderProps={num:moreCnt,shortText:`+${moreCnt}`,text:text,view:viewApi};return y(_,null,Boolean(props.moreCnt)&&y(ContentContainer,{elTag:props.elTag||"a",elRef:this.handleLinkEl,elClasses:[...props.elClasses||[],"fc-more-link"],elStyle:props.elStyle,elAttrs:Object.assign(Object.assign(Object.assign({},props.elAttrs),createAriaClickAttrs(this.handleClick)),{title:hint,"aria-expanded":state.isPopoverOpen,"aria-controls":state.isPopoverOpen?state.popoverId:""}),renderProps:renderProps,generatorName:"moreLinkContent",customGenerator:options.moreLinkContent,defaultGenerator:props.defaultGenerator||renderMoreLinkInner$1,classNameGenerator:options.moreLinkClassNames,didMount:options.moreLinkDidMount,willUnmount:options.moreLinkWillUnmount},props.children),state.isPopoverOpen&&y(MorePopover,{id:state.popoverId,startDate:range.start,endDate:range.end,dateProfile:props.dateProfile,todayRange:props.todayRange,extraDateSpan:props.extraDateSpan,parentEl:this.parentEl,alignmentEl:props.alignmentElRef?props.alignmentElRef.current:this.linkEl,alignGridTop:props.alignGridTop,forceTimed:props.forceTimed,onClose:this.handlePopoverClose},props.popoverContent()))})}componentDidMount(){this.updateParentEl()}componentDidUpdate(){this.updateParentEl()}updateParentEl(){if(this.linkEl){this.parentEl=elementClosest(this.linkEl,".fc-view-harness")}}}function renderMoreLinkInner$1(props){return props.text}function computeRange(props){if(props.allDayDate){return{start:props.allDayDate,end:addDays(props.allDayDate,1)}}let{hiddenSegs}=props;return{start:computeEarliestSegStart(hiddenSegs),end:computeLatestSegEnd(hiddenSegs)}}function computeEarliestSegStart(segs){return segs.reduce(pickEarliestStart).eventRange.range.start}function pickEarliestStart(seg0,seg1){return seg0.eventRange.range.startseg1.eventRange.range.end?seg0:seg1}class Store{constructor(){this.handlers=[]}set(value){this.currentValue=value;for(let handler of this.handlers){handler(value)}}subscribe(handler){this.handlers.push(handler);if(this.currentValue!==undefined){handler(this.currentValue)}}}class CustomRenderingStore extends Store{constructor(){super(...arguments);this.map=new Map}handle(customRendering){const{map}=this;let updated=false;if(customRendering.isActive){map.set(customRendering.id,customRendering);updated=true}else if(map.has(customRendering.id)){map.delete(customRendering.id);updated=true}if(updated){this.set(map)}}}var internal={__proto__:null,BASE_OPTION_DEFAULTS:BASE_OPTION_DEFAULTS,BaseComponent:BaseComponent,BgEvent:BgEvent,CalendarImpl:CalendarImpl,CalendarRoot:CalendarRoot,ContentContainer:ContentContainer,CustomRenderingStore:CustomRenderingStore,DateComponent:DateComponent,DateEnv:DateEnv,DateProfileGenerator:DateProfileGenerator,DayCellContainer:DayCellContainer,DayHeader:DayHeader,DaySeriesModel:DaySeriesModel,DayTableModel:DayTableModel,DelayedRunner:DelayedRunner,ElementDragging:ElementDragging,ElementScrollController:ElementScrollController,Emitter:Emitter,EventContainer:EventContainer,EventImpl:EventImpl,Interaction:Interaction,MoreLinkContainer:MoreLinkContainer,NamedTimeZoneImpl:NamedTimeZoneImpl,NowIndicatorContainer:NowIndicatorContainer,NowTimer:NowTimer,PositionCache:PositionCache,RefMap:RefMap,ScrollController:ScrollController,ScrollResponder:ScrollResponder,Scroller:Scroller,SegHierarchy:SegHierarchy,SimpleScrollGrid:SimpleScrollGrid,Slicer:Slicer,Splitter:Splitter,StandardEvent:StandardEvent,TableDateCell:TableDateCell,TableDowCell:TableDowCell,Theme:Theme,ViewContainer:ViewContainer,ViewContextType:ViewContextType,WeekNumberContainer:WeekNumberContainer,WindowScrollController:WindowScrollController,addDays:addDays,addDurations:addDurations,addMs:addMs,addWeeks:addWeeks,allowContextMenu:allowContextMenu,allowSelection:allowSelection,applyMutationToEventStore:applyMutationToEventStore,applyStyle:applyStyle,asCleanDays:asCleanDays,asRoughMinutes:asRoughMinutes,asRoughMs:asRoughMs,asRoughSeconds:asRoughSeconds,binarySearch:binarySearch,buildElAttrs:buildElAttrs,buildEntryKey:buildEntryKey,buildEventApis:buildEventApis,buildEventRangeKey:buildEventRangeKey,buildIsoString:buildIsoString,buildNavLinkAttrs:buildNavLinkAttrs,buildSegTimeText:buildSegTimeText,collectFromHash:collectFromHash,combineEventUis:combineEventUis,compareByFieldSpecs:compareByFieldSpecs,compareNumbers:compareNumbers,compareObjs:compareObjs,computeEarliestSegStart:computeEarliestSegStart,computeEdges:computeEdges,computeFallbackHeaderFormat:computeFallbackHeaderFormat,computeInnerRect:computeInnerRect,computeRect:computeRect,computeShrinkWidth:computeShrinkWidth,computeVisibleDayRange:computeVisibleDayRange,config:config,constrainPoint:constrainPoint,createDuration:createDuration,createEmptyEventStore:createEmptyEventStore,createEventInstance:createEventInstance,createEventUi:createEventUi,createFormatter:createFormatter,diffDates:diffDates,diffDayAndTime:diffDayAndTime,diffDays:diffDays,diffPoints:diffPoints,diffWeeks:diffWeeks,diffWholeDays:diffWholeDays,diffWholeWeeks:diffWholeWeeks,disableCursor:disableCursor,elementClosest:elementClosest,elementMatches:elementMatches,enableCursor:enableCursor,eventTupleToStore:eventTupleToStore,filterHash:filterHash,findDirectChildren:findDirectChildren,findElements:findElements,flexibleCompare:flexibleCompare,formatDayString:formatDayString,formatIsoMonthStr:formatIsoMonthStr,formatIsoTimeString:formatIsoTimeString,getAllowYScrolling:getAllowYScrolling,getCanVGrowWithinCell:getCanVGrowWithinCell,getClippingParents:getClippingParents,getDateMeta:getDateMeta,getDayClassNames:getDayClassNames,getDefaultEventEnd:getDefaultEventEnd,getElSeg:getElSeg,getEntrySpanEnd:getEntrySpanEnd,getEventTargetViaRoot:getEventTargetViaRoot,getIsRtlScrollbarOnLeft:getIsRtlScrollbarOnLeft,getRectCenter:getRectCenter,getRelevantEvents:getRelevantEvents,getScrollGridClassNames:getScrollGridClassNames,getScrollbarWidths:getScrollbarWidths,getSectionClassNames:getSectionClassNames,getSectionHasLiquidHeight:getSectionHasLiquidHeight,getSegAnchorAttrs:getSegAnchorAttrs,getSegMeta:getSegMeta,getSlotClassNames:getSlotClassNames,getStickyFooterScrollbar:getStickyFooterScrollbar,getStickyHeaderDates:getStickyHeaderDates,getUniqueDomId:getUniqueDomId,greatestDurationDenominator:greatestDurationDenominator,groupIntersectingEntries:groupIntersectingEntries,guid:guid,hasBgRendering:hasBgRendering,hasCustomDayCellContent:hasCustomDayCellContent,hasShrinkWidth:hasShrinkWidth,identity:identity,injectStyles:injectStyles,interactionSettingsStore:interactionSettingsStore,interactionSettingsToStore:interactionSettingsToStore,intersectRanges:intersectRanges,intersectRects:intersectRects,intersectSpans:intersectSpans,isArraysEqual:isArraysEqual,isColPropsEqual:isColPropsEqual,isDateSelectionValid:isDateSelectionValid,isDateSpansEqual:isDateSpansEqual,isInt:isInt,isInteractionValid:isInteractionValid,isMultiDayRange:isMultiDayRange,isPropsEqual:isPropsEqual,isPropsValid:isPropsValid,isValidDate:isValidDate,mapHash:mapHash,memoize:memoize,memoizeArraylike:memoizeArraylike,memoizeHashlike:memoizeHashlike,memoizeObjArg:memoizeObjArg,mergeEventStores:mergeEventStores,multiplyDuration:multiplyDuration,padStart:padStart,parseBusinessHours:parseBusinessHours,parseClassNames:parseClassNames,parseDragMeta:parseDragMeta,parseEventDef:parseEventDef,parseFieldSpecs:parseFieldSpecs,parseMarker:parse,pointInsideRect:pointInsideRect,preventContextMenu:preventContextMenu,preventDefault:preventDefault,preventSelection:preventSelection,rangeContainsMarker:rangeContainsMarker,rangeContainsRange:rangeContainsRange,rangesEqual:rangesEqual,rangesIntersect:rangesIntersect,refineEventDef:refineEventDef,refineProps:refineProps,removeElement:removeElement,removeExact:removeExact,renderChunkContent:renderChunkContent,renderFill:renderFill,renderMicroColGroup:renderMicroColGroup,renderScrollShim:renderScrollShim,requestJson:requestJson,sanitizeShrinkWidth:sanitizeShrinkWidth,setRef:setRef,sliceEventStore:sliceEventStore,sortEventSegs:sortEventSegs,startOfDay:startOfDay,translateRect:translateRect,triggerDateSelect:triggerDateSelect,unpromisify:unpromisify,whenTransitionDone:whenTransitionDone,wholeDivideDurations:wholeDivideDurations};var preact={__proto__:null,createPortal:j,createContext:createContext,flushSync:flushSync,Component:x$1,Fragment:_,cloneElement:F$1,createElement:y,createRef:d,h:y,hydrate:E,get isValidElement(){return i$1},get options(){return l$1},render:D$1,toChildArray:j$2};const globalLocales=[];const MINIMAL_RAW_EN_LOCALE={code:"en",week:{dow:0,doy:4},direction:"ltr",buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day",list:"list"},weekText:"W",weekTextLong:"Week",closeHint:"Close",timeHint:"Time",eventHint:"Event",allDayText:"all-day",moreLinkText:"more",noEventsText:"No events to display"};const RAW_EN_LOCALE=Object.assign(Object.assign({},MINIMAL_RAW_EN_LOCALE),{buttonHints:{prev:"Previous $0",next:"Next $0",today(buttonText,unit){return unit==="day"?"Today":`This ${buttonText}`}},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint(eventCnt){return`Show ${eventCnt} more event${eventCnt===1?"":"s"}`}});function organizeRawLocales(explicitRawLocales){let defaultCode=explicitRawLocales.length>0?explicitRawLocales[0].code:"en";let allRawLocales=globalLocales.concat(explicitRawLocales);let rawLocaleMap={en:RAW_EN_LOCALE};for(let rawLocale of allRawLocales){rawLocaleMap[rawLocale.code]=rawLocale}return{map:rawLocaleMap,defaultCode:defaultCode}}function buildLocale(inputSingular,available){if(typeof inputSingular==="object"&&!Array.isArray(inputSingular)){return parseLocale(inputSingular.code,[inputSingular.code],inputSingular)}return queryLocale(inputSingular,available)}function queryLocale(codeArg,available){let codes=[].concat(codeArg||[]);let raw=queryRawLocale(codes,available)||RAW_EN_LOCALE;return parseLocale(codeArg,codes,raw)}function queryRawLocale(codes,available){for(let i=0;i0;j-=1){let simpleId=parts.slice(0,j).join("-");if(available[simpleId]){return available[simpleId]}}}return null}function parseLocale(codeArg,codes,raw){let merged=mergeProps([MINIMAL_RAW_EN_LOCALE,raw],["buttonText"]);delete merged.code;let{week}=merged;delete merged.week;return{codeArg:codeArg,codes:codes,week:week,simpleNumberFormat:new Intl.NumberFormat(codeArg),options:merged}}function createPlugin(input){return{id:guid(),name:input.name,premiumReleaseDate:input.premiumReleaseDate?new Date(input.premiumReleaseDate):undefined,deps:input.deps||[],reducers:input.reducers||[],isLoadingFuncs:input.isLoadingFuncs||[],contextInit:[].concat(input.contextInit||[]),eventRefiners:input.eventRefiners||{},eventDefMemberAdders:input.eventDefMemberAdders||[],eventSourceRefiners:input.eventSourceRefiners||{},isDraggableTransformers:input.isDraggableTransformers||[],eventDragMutationMassagers:input.eventDragMutationMassagers||[],eventDefMutationAppliers:input.eventDefMutationAppliers||[],dateSelectionTransformers:input.dateSelectionTransformers||[],datePointTransforms:input.datePointTransforms||[],dateSpanTransforms:input.dateSpanTransforms||[],views:input.views||{},viewPropsTransformers:input.viewPropsTransformers||[],isPropsValid:input.isPropsValid||null,externalDefTransforms:input.externalDefTransforms||[],viewContainerAppends:input.viewContainerAppends||[],eventDropTransformers:input.eventDropTransformers||[],componentInteractions:input.componentInteractions||[],calendarInteractions:input.calendarInteractions||[],themeClasses:input.themeClasses||{},eventSourceDefs:input.eventSourceDefs||[],cmdFormatter:input.cmdFormatter,recurringTypes:input.recurringTypes||[],namedTimeZonedImpl:input.namedTimeZonedImpl,initialView:input.initialView||"",elementDraggingImpl:input.elementDraggingImpl,optionChangeHandlers:input.optionChangeHandlers||{},scrollGridImpl:input.scrollGridImpl||null,listenerRefiners:input.listenerRefiners||{},optionRefiners:input.optionRefiners||{},propSetHandlers:input.propSetHandlers||{}}}function buildPluginHooks(pluginDefs,globalDefs){let currentPluginIds={};let hooks={premiumReleaseDate:undefined,reducers:[],isLoadingFuncs:[],contextInit:[],eventRefiners:{},eventDefMemberAdders:[],eventSourceRefiners:{},isDraggableTransformers:[],eventDragMutationMassagers:[],eventDefMutationAppliers:[],dateSelectionTransformers:[],datePointTransforms:[],dateSpanTransforms:[],views:{},viewPropsTransformers:[],isPropsValid:null,externalDefTransforms:[],viewContainerAppends:[],eventDropTransformers:[],componentInteractions:[],calendarInteractions:[],themeClasses:{},eventSourceDefs:[],cmdFormatter:null,recurringTypes:[],namedTimeZonedImpl:null,initialView:"",elementDraggingImpl:null,optionChangeHandlers:{},scrollGridImpl:null,listenerRefiners:{},optionRefiners:{},propSetHandlers:{}};function addDefs(defs){for(let def of defs){const pluginName=def.name;const currentId=currentPluginIds[pluginName];if(currentId===undefined){currentPluginIds[pluginName]=def.id;addDefs(def.deps);hooks=combineHooks(hooks,def)}else if(currentId!==def.id){console.warn(`Duplicate plugin '${pluginName}'`)}}}if(pluginDefs){addDefs(pluginDefs)}addDefs(globalDefs);return hooks}function buildBuildPluginHooks(){let currentOverrideDefs=[];let currentGlobalDefs=[];let currentHooks;return(overrideDefs,globalDefs)=>{if(!currentHooks||!isArraysEqual(overrideDefs,currentOverrideDefs)||!isArraysEqual(globalDefs,currentGlobalDefs)){currentHooks=buildPluginHooks(overrideDefs,globalDefs)}currentOverrideDefs=overrideDefs;currentGlobalDefs=globalDefs;return currentHooks}}function combineHooks(hooks0,hooks1){return{premiumReleaseDate:compareOptionalDates(hooks0.premiumReleaseDate,hooks1.premiumReleaseDate),reducers:hooks0.reducers.concat(hooks1.reducers),isLoadingFuncs:hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),contextInit:hooks0.contextInit.concat(hooks1.contextInit),eventRefiners:Object.assign(Object.assign({},hooks0.eventRefiners),hooks1.eventRefiners),eventDefMemberAdders:hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),eventSourceRefiners:Object.assign(Object.assign({},hooks0.eventSourceRefiners),hooks1.eventSourceRefiners),isDraggableTransformers:hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),eventDragMutationMassagers:hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),eventDefMutationAppliers:hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),dateSelectionTransformers:hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),datePointTransforms:hooks0.datePointTransforms.concat(hooks1.datePointTransforms),dateSpanTransforms:hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),views:Object.assign(Object.assign({},hooks0.views),hooks1.views),viewPropsTransformers:hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),isPropsValid:hooks1.isPropsValid||hooks0.isPropsValid,externalDefTransforms:hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),viewContainerAppends:hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),eventDropTransformers:hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),calendarInteractions:hooks0.calendarInteractions.concat(hooks1.calendarInteractions),componentInteractions:hooks0.componentInteractions.concat(hooks1.componentInteractions),themeClasses:Object.assign(Object.assign({},hooks0.themeClasses),hooks1.themeClasses),eventSourceDefs:hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),cmdFormatter:hooks1.cmdFormatter||hooks0.cmdFormatter,recurringTypes:hooks0.recurringTypes.concat(hooks1.recurringTypes),namedTimeZonedImpl:hooks1.namedTimeZonedImpl||hooks0.namedTimeZonedImpl,initialView:hooks0.initialView||hooks1.initialView,elementDraggingImpl:hooks0.elementDraggingImpl||hooks1.elementDraggingImpl,optionChangeHandlers:Object.assign(Object.assign({},hooks0.optionChangeHandlers),hooks1.optionChangeHandlers),scrollGridImpl:hooks1.scrollGridImpl||hooks0.scrollGridImpl,listenerRefiners:Object.assign(Object.assign({},hooks0.listenerRefiners),hooks1.listenerRefiners),optionRefiners:Object.assign(Object.assign({},hooks0.optionRefiners),hooks1.optionRefiners),propSetHandlers:Object.assign(Object.assign({},hooks0.propSetHandlers),hooks1.propSetHandlers)}}function compareOptionalDates(date0,date1){if(date0===undefined){return date1}if(date1===undefined){return date0}return new Date(Math.max(date0.valueOf(),date1.valueOf()))}class StandardTheme extends Theme{}StandardTheme.prototype.classes={root:"fc-theme-standard",tableCellShaded:"fc-cell-shaded",buttonGroup:"fc-button-group",button:"fc-button fc-button-primary",buttonActive:"fc-button-active"};StandardTheme.prototype.baseIconClass="fc-icon";StandardTheme.prototype.iconClasses={close:"fc-icon-x",prev:"fc-icon-chevron-left",next:"fc-icon-chevron-right",prevYear:"fc-icon-chevrons-left",nextYear:"fc-icon-chevrons-right"};StandardTheme.prototype.rtlIconClasses={prev:"fc-icon-chevron-right",next:"fc-icon-chevron-left",prevYear:"fc-icon-chevrons-right",nextYear:"fc-icon-chevrons-left"};StandardTheme.prototype.iconOverrideOption="buttonIcons";StandardTheme.prototype.iconOverrideCustomButtonOption="icon";StandardTheme.prototype.iconOverridePrefix="fc-icon-";function compileViewDefs(defaultConfigs,overrideConfigs){let hash={};let viewType;for(viewType in defaultConfigs){ensureViewDef(viewType,hash,defaultConfigs,overrideConfigs)}for(viewType in overrideConfigs){ensureViewDef(viewType,hash,defaultConfigs,overrideConfigs)}return hash}function ensureViewDef(viewType,hash,defaultConfigs,overrideConfigs){if(hash[viewType]){return hash[viewType]}let viewDef=buildViewDef(viewType,hash,defaultConfigs,overrideConfigs);if(viewDef){hash[viewType]=viewDef}return viewDef}function buildViewDef(viewType,hash,defaultConfigs,overrideConfigs){let defaultConfig=defaultConfigs[viewType];let overrideConfig=overrideConfigs[viewType];let queryProp=name=>defaultConfig&&defaultConfig[name]!==null?defaultConfig[name]:overrideConfig&&overrideConfig[name]!==null?overrideConfig[name]:null;let theComponent=queryProp("component");let superType=queryProp("superType");let superDef=null;if(superType){if(superType===viewType){throw new Error("Can't have a custom view type that references itself")}superDef=ensureViewDef(superType,hash,defaultConfigs,overrideConfigs)}if(!theComponent&&superDef){theComponent=superDef.component}if(!theComponent){return null}return{type:viewType,component:theComponent,defaults:Object.assign(Object.assign({},superDef?superDef.defaults:{}),defaultConfig?defaultConfig.rawOptions:{}),overrides:Object.assign(Object.assign({},superDef?superDef.overrides:{}),overrideConfig?overrideConfig.rawOptions:{})}}function parseViewConfigs(inputs){return mapHash(inputs,parseViewConfig)}function parseViewConfig(input){let rawOptions=typeof input==="function"?{component:input}:input;let{component}=rawOptions;if(rawOptions.content){component=createViewHookComponent(rawOptions)}else if(component&&!(component.prototype instanceof BaseComponent)){component=createViewHookComponent(Object.assign(Object.assign({},rawOptions),{content:component}))}return{superType:rawOptions.type,component:component,rawOptions:rawOptions}}function createViewHookComponent(options){return viewProps=>y(ViewContextType.Consumer,null,context=>y(ContentContainer,{elTag:"div",elClasses:buildViewClassNames(context.viewSpec),renderProps:Object.assign(Object.assign({},viewProps),{nextDayThreshold:context.options.nextDayThreshold}),generatorName:undefined,customGenerator:options.content,classNameGenerator:options.classNames,didMount:options.didMount,willUnmount:options.willUnmount}))}function buildViewSpecs(defaultInputs,optionOverrides,dynamicOptionOverrides,localeDefaults){let defaultConfigs=parseViewConfigs(defaultInputs);let overrideConfigs=parseViewConfigs(optionOverrides.views);let viewDefs=compileViewDefs(defaultConfigs,overrideConfigs);return mapHash(viewDefs,viewDef=>buildViewSpec(viewDef,overrideConfigs,optionOverrides,dynamicOptionOverrides,localeDefaults))}function buildViewSpec(viewDef,overrideConfigs,optionOverrides,dynamicOptionOverrides,localeDefaults){let durationInput=viewDef.overrides.duration||viewDef.defaults.duration||dynamicOptionOverrides.duration||optionOverrides.duration;let duration=null;let durationUnit="";let singleUnit="";let singleUnitOverrides={};if(durationInput){duration=createDurationCached(durationInput);if(duration){let denom=greatestDurationDenominator(duration);durationUnit=denom.unit;if(denom.value===1){singleUnit=durationUnit;singleUnitOverrides=overrideConfigs[durationUnit]?overrideConfigs[durationUnit].rawOptions:{}}}}let queryButtonText=optionsSubset=>{let buttonTextMap=optionsSubset.buttonText||{};let buttonTextKey=viewDef.defaults.buttonTextKey;if(buttonTextKey!=null&&buttonTextMap[buttonTextKey]!=null){return buttonTextMap[buttonTextKey]}if(buttonTextMap[viewDef.type]!=null){return buttonTextMap[viewDef.type]}if(buttonTextMap[singleUnit]!=null){return buttonTextMap[singleUnit]}return null};let queryButtonTitle=optionsSubset=>{let buttonHints=optionsSubset.buttonHints||{};let buttonKey=viewDef.defaults.buttonTextKey;if(buttonKey!=null&&buttonHints[buttonKey]!=null){return buttonHints[buttonKey]}if(buttonHints[viewDef.type]!=null){return buttonHints[viewDef.type]}if(buttonHints[singleUnit]!=null){return buttonHints[singleUnit]}return null};return{type:viewDef.type,component:viewDef.component,duration:duration,durationUnit:durationUnit,singleUnit:singleUnit,optionDefaults:viewDef.defaults,optionOverrides:Object.assign(Object.assign({},singleUnitOverrides),viewDef.overrides),buttonTextOverride:queryButtonText(dynamicOptionOverrides)||queryButtonText(optionOverrides)||viewDef.overrides.buttonText,buttonTextDefault:queryButtonText(localeDefaults)||viewDef.defaults.buttonText||queryButtonText(BASE_OPTION_DEFAULTS)||viewDef.type,buttonTitleOverride:queryButtonTitle(dynamicOptionOverrides)||queryButtonTitle(optionOverrides)||viewDef.overrides.buttonHint,buttonTitleDefault:queryButtonTitle(localeDefaults)||viewDef.defaults.buttonHint||queryButtonTitle(BASE_OPTION_DEFAULTS)}}let durationInputMap={};function createDurationCached(durationInput){let json=JSON.stringify(durationInput);let res=durationInputMap[json];if(res===undefined){res=createDuration(durationInput);durationInputMap[json]=res}return res}function reduceViewType(viewType,action){switch(action.type){case"CHANGE_VIEW_TYPE":viewType=action.viewType}return viewType}function reduceDynamicOptionOverrides(dynamicOptionOverrides,action){switch(action.type){case"SET_OPTION":return Object.assign(Object.assign({},dynamicOptionOverrides),{[action.optionName]:action.rawOptionValue});default:return dynamicOptionOverrides}}function reduceDateProfile(currentDateProfile,action,currentDate,dateProfileGenerator){let dp;switch(action.type){case"CHANGE_VIEW_TYPE":return dateProfileGenerator.build(action.dateMarker||currentDate);case"CHANGE_DATE":return dateProfileGenerator.build(action.dateMarker);case"PREV":dp=dateProfileGenerator.buildPrev(currentDateProfile,currentDate);if(dp.isValid){return dp}break;case"NEXT":dp=dateProfileGenerator.buildNext(currentDateProfile,currentDate);if(dp.isValid){return dp}break}return currentDateProfile}function initEventSources(calendarOptions,dateProfile,context){let activeRange=dateProfile?dateProfile.activeRange:null;return addSources({},parseInitialSources(calendarOptions,context),activeRange,context)}function reduceEventSources(eventSources,action,dateProfile,context){let activeRange=dateProfile?dateProfile.activeRange:null;switch(action.type){case"ADD_EVENT_SOURCES":return addSources(eventSources,action.sources,activeRange,context);case"REMOVE_EVENT_SOURCE":return removeSource(eventSources,action.sourceId);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":if(dateProfile){return fetchDirtySources(eventSources,activeRange,context)}return eventSources;case"FETCH_EVENT_SOURCES":return fetchSourcesByIds(eventSources,action.sourceIds?arrayToHash(action.sourceIds):excludeStaticSources(eventSources,context),activeRange,action.isRefetch||false,context);case"RECEIVE_EVENTS":case"RECEIVE_EVENT_ERROR":return receiveResponse(eventSources,action.sourceId,action.fetchId,action.fetchRange);case"REMOVE_ALL_EVENT_SOURCES":return{};default:return eventSources}}function reduceEventSourcesNewTimeZone(eventSources,dateProfile,context){let activeRange=dateProfile?dateProfile.activeRange:null;return fetchSourcesByIds(eventSources,excludeStaticSources(eventSources,context),activeRange,true,context)}function computeEventSourcesLoading(eventSources){for(let sourceId in eventSources){if(eventSources[sourceId].isFetching){return true}}return false}function addSources(eventSourceHash,sources,fetchRange,context){let hash={};for(let source of sources){hash[source.sourceId]=source}if(fetchRange){hash=fetchDirtySources(hash,fetchRange,context)}return Object.assign(Object.assign({},eventSourceHash),hash)}function removeSource(eventSourceHash,sourceId){return filterHash(eventSourceHash,eventSource=>eventSource.sourceId!==sourceId)}function fetchDirtySources(sourceHash,fetchRange,context){return fetchSourcesByIds(sourceHash,filterHash(sourceHash,eventSource=>isSourceDirty(eventSource,fetchRange,context)),fetchRange,false,context)}function isSourceDirty(eventSource,fetchRange,context){if(!doesSourceNeedRange(eventSource,context)){return!eventSource.latestFetchId}return!context.options.lazyFetching||!eventSource.fetchRange||eventSource.isFetching||fetchRange.starteventSource.fetchRange.end}function fetchSourcesByIds(prevSources,sourceIdHash,fetchRange,isRefetch,context){let nextSources={};for(let sourceId in prevSources){let source=prevSources[sourceId];if(sourceIdHash[sourceId]){nextSources[sourceId]=fetchSource(source,fetchRange,isRefetch,context)}else{nextSources[sourceId]=source}}return nextSources}function fetchSource(eventSource,fetchRange,isRefetch,context){let{options,calendarApi}=context;let sourceDef=context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];let fetchId=guid();sourceDef.fetch({eventSource:eventSource,range:fetchRange,isRefetch:isRefetch,context:context},res=>{let{rawEvents}=res;if(options.eventSourceSuccess){rawEvents=options.eventSourceSuccess.call(calendarApi,rawEvents,res.response)||rawEvents}if(eventSource.success){rawEvents=eventSource.success.call(calendarApi,rawEvents,res.response)||rawEvents}context.dispatch({type:"RECEIVE_EVENTS",sourceId:eventSource.sourceId,fetchId:fetchId,fetchRange:fetchRange,rawEvents:rawEvents})},error=>{let errorHandled=false;if(options.eventSourceFailure){options.eventSourceFailure.call(calendarApi,error);errorHandled=true}if(eventSource.failure){eventSource.failure(error);errorHandled=true}if(!errorHandled){console.warn(error.message,error)}context.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:eventSource.sourceId,fetchId:fetchId,fetchRange:fetchRange,error:error})});return Object.assign(Object.assign({},eventSource),{isFetching:true,latestFetchId:fetchId})}function receiveResponse(sourceHash,sourceId,fetchId,fetchRange){let eventSource=sourceHash[sourceId];if(eventSource&&fetchId===eventSource.latestFetchId){return Object.assign(Object.assign({},sourceHash),{[sourceId]:Object.assign(Object.assign({},eventSource),{isFetching:false,fetchRange:fetchRange})})}return sourceHash}function excludeStaticSources(eventSources,context){return filterHash(eventSources,eventSource=>doesSourceNeedRange(eventSource,context))}function parseInitialSources(rawOptions,context){let refiners=buildEventSourceRefiners(context);let rawSources=[].concat(rawOptions.eventSources||[]);let sources=[];if(rawOptions.initialEvents){rawSources.unshift(rawOptions.initialEvents)}if(rawOptions.events){rawSources.unshift(rawOptions.events)}for(let rawSource of rawSources){let source=parseEventSource(rawSource,context,refiners);if(source){sources.push(source)}}return sources}function doesSourceNeedRange(eventSource,context){let defs=context.pluginHooks.eventSourceDefs;return!defs[eventSource.sourceDefId].ignoreRange}function reduceDateSelection(currentSelection,action){switch(action.type){case"UNSELECT_DATES":return null;case"SELECT_DATES":return action.selection;default:return currentSelection}}function reduceSelectedEvent(currentInstanceId,action){switch(action.type){case"UNSELECT_EVENT":return"";case"SELECT_EVENT":return action.eventInstanceId;default:return currentInstanceId}}function reduceEventDrag(currentDrag,action){let newDrag;switch(action.type){case"UNSET_EVENT_DRAG":return null;case"SET_EVENT_DRAG":newDrag=action.state;return{affectedEvents:newDrag.affectedEvents,mutatedEvents:newDrag.mutatedEvents,isEvent:newDrag.isEvent};default:return currentDrag}}function reduceEventResize(currentResize,action){let newResize;switch(action.type){case"UNSET_EVENT_RESIZE":return null;case"SET_EVENT_RESIZE":newResize=action.state;return{affectedEvents:newResize.affectedEvents,mutatedEvents:newResize.mutatedEvents,isEvent:newResize.isEvent};default:return currentResize}}function parseToolbars(calendarOptions,calendarOptionOverrides,theme,viewSpecs,calendarApi){let header=calendarOptions.headerToolbar?parseToolbar(calendarOptions.headerToolbar,calendarOptions,calendarOptionOverrides,theme,viewSpecs,calendarApi):null;let footer=calendarOptions.footerToolbar?parseToolbar(calendarOptions.footerToolbar,calendarOptions,calendarOptionOverrides,theme,viewSpecs,calendarApi):null;return{header:header,footer:footer}}function parseToolbar(sectionStrHash,calendarOptions,calendarOptionOverrides,theme,viewSpecs,calendarApi){let sectionWidgets={};let viewsWithButtons=[];let hasTitle=false;for(let sectionName in sectionStrHash){let sectionStr=sectionStrHash[sectionName];let sectionRes=parseSection(sectionStr,calendarOptions,calendarOptionOverrides,theme,viewSpecs,calendarApi);sectionWidgets[sectionName]=sectionRes.widgets;viewsWithButtons.push(...sectionRes.viewsWithButtons);hasTitle=hasTitle||sectionRes.hasTitle}return{sectionWidgets:sectionWidgets,viewsWithButtons:viewsWithButtons,hasTitle:hasTitle}}function parseSection(sectionStr,calendarOptions,calendarOptionOverrides,theme,viewSpecs,calendarApi){let isRtl=calendarOptions.direction==="rtl";let calendarCustomButtons=calendarOptions.customButtons||{};let calendarButtonTextOverrides=calendarOptionOverrides.buttonText||{};let calendarButtonText=calendarOptions.buttonText||{};let calendarButtonHintOverrides=calendarOptionOverrides.buttonHints||{};let calendarButtonHints=calendarOptions.buttonHints||{};let sectionSubstrs=sectionStr?sectionStr.split(" "):[];let viewsWithButtons=[];let hasTitle=false;let widgets=sectionSubstrs.map(buttonGroupStr=>buttonGroupStr.split(",").map(buttonName=>{if(buttonName==="title"){hasTitle=true;return{buttonName:buttonName}}let customButtonProps;let viewSpec;let buttonClick;let buttonIcon;let buttonText;let buttonHint;if(customButtonProps=calendarCustomButtons[buttonName]){buttonClick=ev=>{if(customButtonProps.click){customButtonProps.click.call(ev.target,ev,ev.target)}};(buttonIcon=theme.getCustomButtonIconClass(customButtonProps))||(buttonIcon=theme.getIconClass(buttonName,isRtl))||(buttonText=customButtonProps.text);buttonHint=customButtonProps.hint||customButtonProps.text}else if(viewSpec=viewSpecs[buttonName]){viewsWithButtons.push(buttonName);buttonClick=()=>{calendarApi.changeView(buttonName)};(buttonText=viewSpec.buttonTextOverride)||(buttonIcon=theme.getIconClass(buttonName,isRtl))||(buttonText=viewSpec.buttonTextDefault);let textFallback=viewSpec.buttonTextOverride||viewSpec.buttonTextDefault;buttonHint=formatWithOrdinals(viewSpec.buttonTitleOverride||viewSpec.buttonTitleDefault||calendarOptions.viewHint,[textFallback,buttonName],textFallback)}else if(calendarApi[buttonName]){buttonClick=()=>{calendarApi[buttonName]()};(buttonText=calendarButtonTextOverrides[buttonName])||(buttonIcon=theme.getIconClass(buttonName,isRtl))||(buttonText=calendarButtonText[buttonName]);if(buttonName==="prevYear"||buttonName==="nextYear"){let prevOrNext=buttonName==="prevYear"?"prev":"next";buttonHint=formatWithOrdinals(calendarButtonHintOverrides[prevOrNext]||calendarButtonHints[prevOrNext],[calendarButtonText.year||"year","year"],calendarButtonText[buttonName])}else{buttonHint=navUnit=>formatWithOrdinals(calendarButtonHintOverrides[buttonName]||calendarButtonHints[buttonName],[calendarButtonText[navUnit]||navUnit,navUnit],calendarButtonText[buttonName])}}return{buttonName:buttonName,buttonClick:buttonClick,buttonIcon:buttonIcon,buttonText:buttonText,buttonHint:buttonHint}}));return{widgets:widgets,viewsWithButtons:viewsWithButtons,hasTitle:hasTitle}}class ViewImpl{constructor(type,getCurrentData,dateEnv){this.type=type;this.getCurrentData=getCurrentData;this.dateEnv=dateEnv}get calendar(){return this.getCurrentData().calendarApi}get title(){return this.getCurrentData().viewTitle}get activeStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start)}get activeEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end)}get currentStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start)}get currentEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end)}getOption(name){return this.getCurrentData().options[name]}}let eventSourceDef$2={ignoreRange:true,parseMeta(refined){if(Array.isArray(refined.events)){return refined.events}return null},fetch(arg,successCallback){successCallback({rawEvents:arg.eventSource.meta})}};const arrayEventSourcePlugin=createPlugin({name:"array-event-source",eventSourceDefs:[eventSourceDef$2]});let eventSourceDef$1={parseMeta(refined){if(typeof refined.events==="function"){return refined.events}return null},fetch(arg,successCallback,errorCallback){const{dateEnv}=arg.context;const func=arg.eventSource.meta;unpromisify(func.bind(null,buildRangeApiWithTimeZone(arg.range,dateEnv)),rawEvents=>successCallback({rawEvents:rawEvents}),errorCallback)}};const funcEventSourcePlugin=createPlugin({name:"func-event-source",eventSourceDefs:[eventSourceDef$1]});const JSON_FEED_EVENT_SOURCE_REFINERS={method:String,extraParams:identity,startParam:String,endParam:String,timeZoneParam:String};let eventSourceDef={parseMeta(refined){if(refined.url&&(refined.format==="json"||!refined.format)){return{url:refined.url,format:"json",method:(refined.method||"GET").toUpperCase(),extraParams:refined.extraParams,startParam:refined.startParam,endParam:refined.endParam,timeZoneParam:refined.timeZoneParam}}return null},fetch(arg,successCallback,errorCallback){const{meta}=arg.eventSource;const requestParams=buildRequestParams(meta,arg.range,arg.context);requestJson(meta.method,meta.url,requestParams).then(([rawEvents,response])=>{successCallback({rawEvents:rawEvents,response:response})},errorCallback)}};const jsonFeedEventSourcePlugin=createPlugin({name:"json-event-source",eventSourceRefiners:JSON_FEED_EVENT_SOURCE_REFINERS,eventSourceDefs:[eventSourceDef]});function buildRequestParams(meta,range,context){let{dateEnv,options}=context;let startParam;let endParam;let timeZoneParam;let customRequestParams;let params={};startParam=meta.startParam;if(startParam==null){startParam=options.startParam}endParam=meta.endParam;if(endParam==null){endParam=options.endParam}timeZoneParam=meta.timeZoneParam;if(timeZoneParam==null){timeZoneParam=options.timeZoneParam}if(typeof meta.extraParams==="function"){customRequestParams=meta.extraParams()}else{customRequestParams=meta.extraParams||{}}Object.assign(params,customRequestParams);params[startParam]=dateEnv.formatIso(range.start);params[endParam]=dateEnv.formatIso(range.end);if(dateEnv.timeZone!=="local"){params[timeZoneParam]=dateEnv.timeZone}return params}const SIMPLE_RECURRING_REFINERS={daysOfWeek:identity,startTime:createDuration,endTime:createDuration,duration:createDuration,startRecur:identity,endRecur:identity};let recurring={parse(refined,dateEnv){if(refined.daysOfWeek||refined.startTime||refined.endTime||refined.startRecur||refined.endRecur){let recurringData={daysOfWeek:refined.daysOfWeek||null,startTime:refined.startTime||null,endTime:refined.endTime||null,startRecur:refined.startRecur?dateEnv.createMarker(refined.startRecur):null,endRecur:refined.endRecur?dateEnv.createMarker(refined.endRecur):null};let duration;if(refined.duration){duration=refined.duration}if(!duration&&refined.startTime&&refined.endTime){duration=subtractDurations(refined.endTime,refined.startTime)}return{allDayGuess:Boolean(!refined.startTime&&!refined.endTime),duration:duration,typeData:recurringData}}return null},expand(typeData,framingRange,dateEnv){let clippedFramingRange=intersectRanges(framingRange,{start:typeData.startRecur,end:typeData.endRecur});if(clippedFramingRange){return expandRanges(typeData.daysOfWeek,typeData.startTime,clippedFramingRange,dateEnv)}return[]}};const simpleRecurringEventsPlugin=createPlugin({name:"simple-recurring-event",recurringTypes:[recurring],eventRefiners:SIMPLE_RECURRING_REFINERS});function expandRanges(daysOfWeek,startTime,framingRange,dateEnv){let dowHash=daysOfWeek?arrayToHash(daysOfWeek):null;let dayMarker=startOfDay(framingRange.start);let endMarker=framingRange.end;let instanceStarts=[];while(dayMarkercomputeEventSourcesLoading(state.eventSources)],propSetHandlers:{dateProfile:handleDateProfile,eventStore:handleEventStore}})];class TaskRunner{constructor(runTaskOption,drainedOption){this.runTaskOption=runTaskOption;this.drainedOption=drainedOption;this.queue=[];this.delayedRunner=new DelayedRunner(this.drain.bind(this))}request(task,delay){this.queue.push(task);this.delayedRunner.request(delay)}pause(scope){this.delayedRunner.pause(scope)}resume(scope,force){this.delayedRunner.resume(scope,force)}drain(){let{queue}=this;while(queue.length){let completedTasks=[];let task;while(task=queue.shift()){this.runTask(task);completedTasks.push(task)}this.drained(completedTasks)}}runTask(task){if(this.runTaskOption){this.runTaskOption(task)}}drained(completedTasks){if(this.drainedOption){this.drainedOption(completedTasks)}}}function buildTitle(dateProfile,viewOptions,dateEnv){let range;if(/^(year|month)$/.test(dateProfile.currentRangeUnit)){range=dateProfile.currentRange}else{range=dateProfile.activeRange}return dateEnv.formatRange(range.start,range.end,createFormatter(viewOptions.titleFormat||buildTitleFormat(dateProfile)),{isEndExclusive:dateProfile.isRangeAllDay,defaultSeparator:viewOptions.titleRangeSeparator})}function buildTitleFormat(dateProfile){let{currentRangeUnit}=dateProfile;if(currentRangeUnit==="year"){return{year:"numeric"}}if(currentRangeUnit==="month"){return{year:"numeric",month:"long"}}let days=diffWholeDays(dateProfile.currentRange.start,dateProfile.currentRange.end);if(days!==null&&days>1){return{year:"numeric",month:"short",day:"numeric"}}return{year:"numeric",month:"long",day:"numeric"}}class CalendarDataManager{constructor(props){this.computeCurrentViewData=memoize(this._computeCurrentViewData);this.organizeRawLocales=memoize(organizeRawLocales);this.buildLocale=memoize(buildLocale);this.buildPluginHooks=buildBuildPluginHooks();this.buildDateEnv=memoize(buildDateEnv$1);this.buildTheme=memoize(buildTheme);this.parseToolbars=memoize(parseToolbars);this.buildViewSpecs=memoize(buildViewSpecs);this.buildDateProfileGenerator=memoizeObjArg(buildDateProfileGenerator);this.buildViewApi=memoize(buildViewApi);this.buildViewUiProps=memoizeObjArg(buildViewUiProps);this.buildEventUiBySource=memoize(buildEventUiBySource,isPropsEqual);this.buildEventUiBases=memoize(buildEventUiBases);this.parseContextBusinessHours=memoizeObjArg(parseContextBusinessHours);this.buildTitle=memoize(buildTitle);this.emitter=new Emitter;this.actionRunner=new TaskRunner(this._handleAction.bind(this),this.updateData.bind(this));this.currentCalendarOptionsInput={};this.currentCalendarOptionsRefined={};this.currentViewOptionsInput={};this.currentViewOptionsRefined={};this.currentCalendarOptionsRefiners={};this.optionsForRefining=[];this.optionsForHandling=[];this.getCurrentData=()=>this.data;this.dispatch=action=>{this.actionRunner.request(action)};this.props=props;this.actionRunner.pause();let dynamicOptionOverrides={};let optionsData=this.computeOptionsData(props.optionOverrides,dynamicOptionOverrides,props.calendarApi);let currentViewType=optionsData.calendarOptions.initialView||optionsData.pluginHooks.initialView;let currentViewData=this.computeCurrentViewData(currentViewType,optionsData,props.optionOverrides,dynamicOptionOverrides);props.calendarApi.currentDataManager=this;this.emitter.setThisContext(props.calendarApi);this.emitter.setOptions(currentViewData.options);let currentDate=getInitialDate(optionsData.calendarOptions,optionsData.dateEnv);let dateProfile=currentViewData.dateProfileGenerator.build(currentDate);if(!rangeContainsMarker(dateProfile.activeRange,currentDate)){currentDate=dateProfile.currentRange.start}let calendarContext={dateEnv:optionsData.dateEnv,options:optionsData.calendarOptions,pluginHooks:optionsData.pluginHooks,calendarApi:props.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData};for(let callback of optionsData.pluginHooks.contextInit){callback(calendarContext)}let eventSources=initEventSources(optionsData.calendarOptions,dateProfile,calendarContext);let initialState={dynamicOptionOverrides:dynamicOptionOverrides,currentViewType:currentViewType,currentDate:currentDate,dateProfile:dateProfile,businessHours:this.parseContextBusinessHours(calendarContext),eventSources:eventSources,eventUiBases:{},eventStore:createEmptyEventStore(),renderableEventStore:createEmptyEventStore(),dateSelection:null,eventSelection:"",eventDrag:null,eventResize:null,selectionConfig:this.buildViewUiProps(calendarContext).selectionConfig};let contextAndState=Object.assign(Object.assign({},calendarContext),initialState);for(let reducer of optionsData.pluginHooks.reducers){Object.assign(initialState,reducer(null,null,contextAndState))}if(computeIsLoading(initialState,calendarContext)){this.emitter.trigger("loading",true)}this.state=initialState;this.updateData();this.actionRunner.resume()}resetOptions(optionOverrides,changedOptionNames){let{props}=this;if(changedOptionNames===undefined){props.optionOverrides=optionOverrides}else{props.optionOverrides=Object.assign(Object.assign({},props.optionOverrides||{}),optionOverrides);this.optionsForRefining.push(...changedOptionNames)}if(changedOptionNames===undefined||changedOptionNames.length){this.actionRunner.request({type:"NOTHING"})}}_handleAction(action){let{props,state,emitter}=this;let dynamicOptionOverrides=reduceDynamicOptionOverrides(state.dynamicOptionOverrides,action);let optionsData=this.computeOptionsData(props.optionOverrides,dynamicOptionOverrides,props.calendarApi);let currentViewType=reduceViewType(state.currentViewType,action);let currentViewData=this.computeCurrentViewData(currentViewType,optionsData,props.optionOverrides,dynamicOptionOverrides);props.calendarApi.currentDataManager=this;emitter.setThisContext(props.calendarApi);emitter.setOptions(currentViewData.options);let calendarContext={dateEnv:optionsData.dateEnv,options:optionsData.calendarOptions,pluginHooks:optionsData.pluginHooks,calendarApi:props.calendarApi,dispatch:this.dispatch,emitter:emitter,getCurrentData:this.getCurrentData};let{currentDate,dateProfile}=state;if(this.data&&this.data.dateProfileGenerator!==currentViewData.dateProfileGenerator){dateProfile=currentViewData.dateProfileGenerator.build(currentDate)}currentDate=reduceCurrentDate(currentDate,action);dateProfile=reduceDateProfile(dateProfile,action,currentDate,currentViewData.dateProfileGenerator);if(action.type==="PREV"||action.type==="NEXT"||!rangeContainsMarker(dateProfile.currentRange,currentDate)){currentDate=dateProfile.currentRange.start}let eventSources=reduceEventSources(state.eventSources,action,dateProfile,calendarContext);let eventStore=reduceEventStore(state.eventStore,action,eventSources,dateProfile,calendarContext);let isEventsLoading=computeEventSourcesLoading(eventSources);let renderableEventStore=isEventsLoading&&!currentViewData.options.progressiveEventRendering?state.renderableEventStore||eventStore:eventStore;let{eventUiSingleBase,selectionConfig}=this.buildViewUiProps(calendarContext);let eventUiBySource=this.buildEventUiBySource(eventSources);let eventUiBases=this.buildEventUiBases(renderableEventStore.defs,eventUiSingleBase,eventUiBySource);let newState={dynamicOptionOverrides:dynamicOptionOverrides,currentViewType:currentViewType,currentDate:currentDate,dateProfile:dateProfile,eventSources:eventSources,eventStore:eventStore,renderableEventStore:renderableEventStore,selectionConfig:selectionConfig,eventUiBases:eventUiBases,businessHours:this.parseContextBusinessHours(calendarContext),dateSelection:reduceDateSelection(state.dateSelection,action),eventSelection:reduceSelectedEvent(state.eventSelection,action),eventDrag:reduceEventDrag(state.eventDrag,action),eventResize:reduceEventResize(state.eventResize,action)};let contextAndState=Object.assign(Object.assign({},calendarContext),newState);for(let reducer of optionsData.pluginHooks.reducers){Object.assign(newState,reducer(state,action,contextAndState))}let wasLoading=computeIsLoading(state,calendarContext);let isLoading=computeIsLoading(newState,calendarContext);if(!wasLoading&&isLoading){emitter.trigger("loading",true)}else if(wasLoading&&!isLoading){emitter.trigger("loading",false)}this.state=newState;if(props.onAction){props.onAction(action)}}updateData(){let{props,state}=this;let oldData=this.data;let optionsData=this.computeOptionsData(props.optionOverrides,state.dynamicOptionOverrides,props.calendarApi);let currentViewData=this.computeCurrentViewData(state.currentViewType,optionsData,props.optionOverrides,state.dynamicOptionOverrides);let data=this.data=Object.assign(Object.assign(Object.assign({viewTitle:this.buildTitle(state.dateProfile,currentViewData.options,optionsData.dateEnv),calendarApi:props.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},optionsData),currentViewData),state);let changeHandlers=optionsData.pluginHooks.optionChangeHandlers;let oldCalendarOptions=oldData&&oldData.calendarOptions;let newCalendarOptions=optionsData.calendarOptions;if(oldCalendarOptions&&oldCalendarOptions!==newCalendarOptions){if(oldCalendarOptions.timeZone!==newCalendarOptions.timeZone){state.eventSources=data.eventSources=reduceEventSourcesNewTimeZone(data.eventSources,state.dateProfile,data);state.eventStore=data.eventStore=rezoneEventStoreDates(data.eventStore,oldData.dateEnv,data.dateEnv);state.renderableEventStore=data.renderableEventStore=rezoneEventStoreDates(data.renderableEventStore,oldData.dateEnv,data.dateEnv)}for(let optionName in changeHandlers){if(this.optionsForHandling.indexOf(optionName)!==-1||oldCalendarOptions[optionName]!==newCalendarOptions[optionName]){changeHandlers[optionName](newCalendarOptions[optionName],data)}}}this.optionsForHandling=[];if(props.onData){props.onData(data)}}computeOptionsData(optionOverrides,dynamicOptionOverrides,calendarApi){if(!this.optionsForRefining.length&&optionOverrides===this.stableOptionOverrides&&dynamicOptionOverrides===this.stableDynamicOptionOverrides){return this.stableCalendarOptionsData}let{refinedOptions,pluginHooks,localeDefaults,availableLocaleData,extra}=this.processRawCalendarOptions(optionOverrides,dynamicOptionOverrides);warnUnknownOptions(extra);let dateEnv=this.buildDateEnv(refinedOptions.timeZone,refinedOptions.locale,refinedOptions.weekNumberCalculation,refinedOptions.firstDay,refinedOptions.weekText,pluginHooks,availableLocaleData,refinedOptions.defaultRangeSeparator);let viewSpecs=this.buildViewSpecs(pluginHooks.views,this.stableOptionOverrides,this.stableDynamicOptionOverrides,localeDefaults);let theme=this.buildTheme(refinedOptions,pluginHooks);let toolbarConfig=this.parseToolbars(refinedOptions,this.stableOptionOverrides,theme,viewSpecs,calendarApi);return this.stableCalendarOptionsData={calendarOptions:refinedOptions,pluginHooks:pluginHooks,dateEnv:dateEnv,viewSpecs:viewSpecs,theme:theme,toolbarConfig:toolbarConfig,localeDefaults:localeDefaults,availableRawLocales:availableLocaleData.map}}processRawCalendarOptions(optionOverrides,dynamicOptionOverrides){let{locales,locale}=mergeRawOptions([BASE_OPTION_DEFAULTS,optionOverrides,dynamicOptionOverrides]);let availableLocaleData=this.organizeRawLocales(locales);let availableRawLocales=availableLocaleData.map;let localeDefaults=this.buildLocale(locale||availableLocaleData.defaultCode,availableRawLocales).options;let pluginHooks=this.buildPluginHooks(optionOverrides.plugins||[],globalPlugins);let refiners=this.currentCalendarOptionsRefiners=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},BASE_OPTION_REFINERS),CALENDAR_LISTENER_REFINERS),CALENDAR_OPTION_REFINERS),pluginHooks.listenerRefiners),pluginHooks.optionRefiners);let extra={};let raw=mergeRawOptions([BASE_OPTION_DEFAULTS,localeDefaults,optionOverrides,dynamicOptionOverrides]);let refined={};let currentRaw=this.currentCalendarOptionsInput;let currentRefined=this.currentCalendarOptionsRefined;let anyChanges=false;for(let optionName in raw){if(this.optionsForRefining.indexOf(optionName)===-1&&(raw[optionName]===currentRaw[optionName]||COMPLEX_OPTION_COMPARATORS[optionName]&&optionName in currentRaw&&COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName],raw[optionName]))){refined[optionName]=currentRefined[optionName]}else if(refiners[optionName]){refined[optionName]=refiners[optionName](raw[optionName]);anyChanges=true}else{extra[optionName]=currentRaw[optionName]}}if(anyChanges){this.currentCalendarOptionsInput=raw;this.currentCalendarOptionsRefined=refined;this.stableOptionOverrides=optionOverrides;this.stableDynamicOptionOverrides=dynamicOptionOverrides}this.optionsForHandling.push(...this.optionsForRefining);this.optionsForRefining=[];return{rawOptions:this.currentCalendarOptionsInput,refinedOptions:this.currentCalendarOptionsRefined,pluginHooks:pluginHooks,availableLocaleData:availableLocaleData,localeDefaults:localeDefaults,extra:extra}}_computeCurrentViewData(viewType,optionsData,optionOverrides,dynamicOptionOverrides){let viewSpec=optionsData.viewSpecs[viewType];if(!viewSpec){throw new Error('viewType "'+viewType+"\" is not available. Please make sure you've loaded all neccessary plugins")}let{refinedOptions,extra}=this.processRawViewOptions(viewSpec,optionsData.pluginHooks,optionsData.localeDefaults,optionOverrides,dynamicOptionOverrides);warnUnknownOptions(extra);let dateProfileGenerator=this.buildDateProfileGenerator({dateProfileGeneratorClass:viewSpec.optionDefaults.dateProfileGeneratorClass,duration:viewSpec.duration,durationUnit:viewSpec.durationUnit,usesMinMaxTime:viewSpec.optionDefaults.usesMinMaxTime,dateEnv:optionsData.dateEnv,calendarApi:this.props.calendarApi,slotMinTime:refinedOptions.slotMinTime,slotMaxTime:refinedOptions.slotMaxTime,showNonCurrentDates:refinedOptions.showNonCurrentDates,dayCount:refinedOptions.dayCount,dateAlignment:refinedOptions.dateAlignment,dateIncrement:refinedOptions.dateIncrement,hiddenDays:refinedOptions.hiddenDays,weekends:refinedOptions.weekends,nowInput:refinedOptions.now,validRangeInput:refinedOptions.validRange,visibleRangeInput:refinedOptions.visibleRange,fixedWeekCount:refinedOptions.fixedWeekCount});let viewApi=this.buildViewApi(viewType,this.getCurrentData,optionsData.dateEnv);return{viewSpec:viewSpec,options:refinedOptions,dateProfileGenerator:dateProfileGenerator,viewApi:viewApi}}processRawViewOptions(viewSpec,pluginHooks,localeDefaults,optionOverrides,dynamicOptionOverrides){let raw=mergeRawOptions([BASE_OPTION_DEFAULTS,viewSpec.optionDefaults,localeDefaults,optionOverrides,viewSpec.optionOverrides,dynamicOptionOverrides]);let refiners=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},BASE_OPTION_REFINERS),CALENDAR_LISTENER_REFINERS),CALENDAR_OPTION_REFINERS),VIEW_OPTION_REFINERS),pluginHooks.listenerRefiners),pluginHooks.optionRefiners);let refined={};let currentRaw=this.currentViewOptionsInput;let currentRefined=this.currentViewOptionsRefined;let anyChanges=false;let extra={};for(let optionName in raw){if(raw[optionName]===currentRaw[optionName]||COMPLEX_OPTION_COMPARATORS[optionName]&&COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName],currentRaw[optionName])){refined[optionName]=currentRefined[optionName]}else{if(raw[optionName]===this.currentCalendarOptionsInput[optionName]||COMPLEX_OPTION_COMPARATORS[optionName]&&COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName],this.currentCalendarOptionsInput[optionName])){if(optionName in this.currentCalendarOptionsRefined){refined[optionName]=this.currentCalendarOptionsRefined[optionName]}}else if(refiners[optionName]){refined[optionName]=refiners[optionName](raw[optionName])}else{extra[optionName]=raw[optionName]}anyChanges=true}}if(anyChanges){this.currentViewOptionsInput=raw;this.currentViewOptionsRefined=refined}return{rawOptions:this.currentViewOptionsInput,refinedOptions:this.currentViewOptionsRefined,extra:extra}}}function buildDateEnv$1(timeZone,explicitLocale,weekNumberCalculation,firstDay,weekText,pluginHooks,availableLocaleData,defaultSeparator){let locale=buildLocale(explicitLocale||availableLocaleData.defaultCode,availableLocaleData.map);return new DateEnv({calendarSystem:"gregory",timeZone:timeZone,namedTimeZoneImpl:pluginHooks.namedTimeZonedImpl,locale:locale,weekNumberCalculation:weekNumberCalculation,firstDay:firstDay,weekText:weekText,cmdFormatter:pluginHooks.cmdFormatter,defaultSeparator:defaultSeparator})}function buildTheme(options,pluginHooks){let ThemeClass=pluginHooks.themeClasses[options.themeSystem]||StandardTheme;return new ThemeClass(options)}function buildDateProfileGenerator(props){let DateProfileGeneratorClass=props.dateProfileGeneratorClass||DateProfileGenerator;return new DateProfileGeneratorClass(props)}function buildViewApi(type,getCurrentData,dateEnv){return new ViewImpl(type,getCurrentData,dateEnv)}function buildEventUiBySource(eventSources){return mapHash(eventSources,eventSource=>eventSource.ui)}function buildEventUiBases(eventDefs,eventUiSingleBase,eventUiBySource){let eventUiBases={"":eventUiSingleBase};for(let defId in eventDefs){let def=eventDefs[defId];if(def.sourceId&&eventUiBySource[def.sourceId]){eventUiBases[defId]=eventUiBySource[def.sourceId]}}return eventUiBases}function buildViewUiProps(calendarContext){let{options}=calendarContext;return{eventUiSingleBase:createEventUi({display:options.eventDisplay,editable:options.editable,startEditable:options.eventStartEditable,durationEditable:options.eventDurationEditable,constraint:options.eventConstraint,overlap:typeof options.eventOverlap==="boolean"?options.eventOverlap:undefined,allow:options.eventAllow,backgroundColor:options.eventBackgroundColor,borderColor:options.eventBorderColor,textColor:options.eventTextColor,color:options.eventColor},calendarContext),selectionConfig:createEventUi({constraint:options.selectConstraint,overlap:typeof options.selectOverlap==="boolean"?options.selectOverlap:undefined,allow:options.selectAllow},calendarContext)}}function computeIsLoading(state,context){for(let isLoadingFunc of context.pluginHooks.isLoadingFuncs){if(isLoadingFunc(state)){return true}}return false}function parseContextBusinessHours(calendarContext){return parseBusinessHours(calendarContext.options.businessHours,calendarContext)}function warnUnknownOptions(options,viewName){for(let optionName in options){console.warn(`Unknown option '${optionName}'`+(viewName?` for view '${viewName}'`:""))}}class ToolbarSection extends BaseComponent{render(){let children=this.props.widgetGroups.map(widgetGroup=>this.renderWidgetGroup(widgetGroup));return y("div",{className:"fc-toolbar-chunk"},...children)}renderWidgetGroup(widgetGroup){let{props}=this;let{theme}=this.context;let children=[];let isOnlyButtons=true;for(let widget of widgetGroup){let{buttonName,buttonClick,buttonText,buttonIcon,buttonHint}=widget;if(buttonName==="title"){isOnlyButtons=false;children.push(y("h2",{className:"fc-toolbar-title",id:props.titleId},props.title))}else{let buttonChildren=[];if(buttonName==="prev"){let prevPath="M20.7 267.3c-6.2-6.2-6.2-16.4 0-22.6l192-192c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L54.6 256 235.3 436.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-192-192z";buttonChildren.push(y("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 320 512",fill:"currentColor"},y("path",{d:prevPath},"")));buttonChildren.push(y("span",{className:"fc-button-text"},buttonText?buttonText:typeof buttonHint==="function"?buttonHint(props.navUnit):buttonHint))}else if(buttonName==="next"){let nextPath="M299.3 244.7c6.2 6.2 6.2 16.4 0 22.6l-192 192c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L265.4 256 84.7 75.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l192 192z";buttonChildren.push(y("span",{className:"fc-button-text"},buttonText?buttonText:typeof buttonHint==="function"?buttonHint(props.navUnit):buttonHint));buttonChildren.push(y("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 320 512",fill:"currentColor"},y("path",{d:nextPath},"")))}else{buttonChildren.push(buttonText||(buttonIcon?y("span",{className:buttonIcon,role:"img"}):""))}let isPressed=buttonName===props.activeButton;let isDisabled=!props.isTodayEnabled&&buttonName==="today"||!props.isPrevEnabled&&buttonName==="prev"||!props.isNextEnabled&&buttonName==="next";let buttonClasses=[`fc-${buttonName}-button`,theme.getClass("button")];if(isPressed){buttonClasses.push(theme.getClass("buttonActive"))}children.push(y("button",{type:"button",disabled:isDisabled,"aria-pressed":isPressed,className:buttonClasses.join(" "),onClick:buttonClick},...buttonChildren))}}if(children.length>1){let groupClassName=isOnlyButtons&&theme.getClass("buttonGroup")||"";return y("div",{className:groupClassName},...children)}return children[0]}}class Toolbar extends BaseComponent{render(){let{model,extraClassName}=this.props;let forceLtr=false;let startContent;let endContent;let sectionWidgets=model.sectionWidgets;let centerContent=sectionWidgets.center;if(sectionWidgets.left){forceLtr=true;startContent=sectionWidgets.left}else{startContent=sectionWidgets.start}if(sectionWidgets.right){forceLtr=true;endContent=sectionWidgets.right}else{endContent=sectionWidgets.end}let classNames=[extraClassName||"","fc-toolbar",forceLtr?"fc-toolbar-ltr":""];return y("div",{className:classNames.join(" ")},this.renderSection("start",startContent||[]),this.renderSection("center",centerContent||[]),this.renderSection("end",endContent||[]))}renderSection(key,widgetGroups){let{props}=this;return y(ToolbarSection,{key:key,widgetGroups:widgetGroups,title:props.title,navUnit:props.navUnit,activeButton:props.activeButton,isTodayEnabled:props.isTodayEnabled,isPrevEnabled:props.isPrevEnabled,isNextEnabled:props.isNextEnabled,titleId:props.titleId})}}class ViewHarness extends BaseComponent{constructor(){super(...arguments);this.state={availableWidth:null};this.handleEl=el=>{this.el=el;setRef(this.props.elRef,el);this.updateAvailableWidth()};this.handleResize=()=>{this.updateAvailableWidth()}}render(){let{props,state}=this;let{aspectRatio}=props;let classNames=["fc-view-harness",aspectRatio||props.liquid||props.height?"fc-view-harness-active":"fc-view-harness-passive"];let height="";let paddingBottom="";if(aspectRatio){if(state.availableWidth!==null){height=state.availableWidth/aspectRatio}else{paddingBottom=`${1/aspectRatio*100}%`}}else{height=props.height||""}return y("div",{"aria-labelledby":props.labeledById,ref:this.handleEl,className:classNames.join(" "),style:{height:height,paddingBottom:paddingBottom}},props.children)}componentDidMount(){this.context.addResizeHandler(this.handleResize)}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}updateAvailableWidth(){if(this.el&&this.props.aspectRatio){this.setState({availableWidth:this.el.offsetWidth})}}}class EventClicking extends Interaction{constructor(settings){super(settings);this.handleSegClick=(ev,segEl)=>{let{component}=this;let{context}=component;let seg=getElSeg(segEl);if(seg&&component.isValidSegDownEl(ev.target)){let hasUrlContainer=elementClosest(ev.target,".fc-event-forced-url");let url=hasUrlContainer?hasUrlContainer.querySelector("a[href]").href:"";context.emitter.trigger("eventClick",{el:segEl,event:new EventImpl(component.context,seg.eventRange.def,seg.eventRange.instance),jsEvent:ev,view:context.viewApi});if(url&&!ev.defaultPrevented){window.location.href=url}}};this.destroy=listenBySelector(settings.el,"click",".fc-event",this.handleSegClick)}}class EventHovering extends Interaction{constructor(settings){super(settings);this.handleEventElRemove=el=>{if(el===this.currentSegEl){this.handleSegLeave(null,this.currentSegEl)}};this.handleSegEnter=(ev,segEl)=>{if(getElSeg(segEl)){this.currentSegEl=segEl;this.triggerEvent("eventMouseEnter",ev,segEl)}};this.handleSegLeave=(ev,segEl)=>{if(this.currentSegEl){this.currentSegEl=null;this.triggerEvent("eventMouseLeave",ev,segEl)}};this.removeHoverListeners=listenToHoverBySelector(settings.el,".fc-event",this.handleSegEnter,this.handleSegLeave)}destroy(){this.removeHoverListeners()}triggerEvent(publicEvName,ev,segEl){let{component}=this;let{context}=component;let seg=getElSeg(segEl);if(!ev||component.isValidSegDownEl(ev.target)){context.emitter.trigger(publicEvName,{el:segEl,event:new EventImpl(context,seg.eventRange.def,seg.eventRange.instance),jsEvent:ev,view:context.viewApi})}}}class CalendarContent extends PureComponent{constructor(){super(...arguments);this.buildViewContext=memoize(buildViewContext);this.buildViewPropTransformers=memoize(buildViewPropTransformers);this.buildToolbarProps=memoize(buildToolbarProps);this.headerRef=d();this.footerRef=d();this.interactionsStore={};this.state={viewLabelId:getUniqueDomId()};this.registerInteractiveComponent=(component,settingsInput)=>{let settings=parseInteractionSettings(component,settingsInput);let DEFAULT_INTERACTIONS=[EventClicking,EventHovering];let interactionClasses=DEFAULT_INTERACTIONS.concat(this.props.pluginHooks.componentInteractions);let interactions=interactionClasses.map(TheInteractionClass=>new TheInteractionClass(settings));this.interactionsStore[component.uid]=interactions;interactionSettingsStore[component.uid]=settings};this.unregisterInteractiveComponent=component=>{let listeners=this.interactionsStore[component.uid];if(listeners){for(let listener of listeners){listener.destroy()}delete this.interactionsStore[component.uid]}delete interactionSettingsStore[component.uid]};this.resizeRunner=new DelayedRunner(()=>{this.props.emitter.trigger("_resize",true);this.props.emitter.trigger("windowResize",{view:this.props.viewApi})});this.handleWindowResize=ev=>{let{options}=this.props;if(options.handleWindowResize&&ev.target===window){this.resizeRunner.request(options.windowResizeDelay)}}}render(){let{props}=this;let{toolbarConfig,options}=props;let toolbarProps=this.buildToolbarProps(props.viewSpec,props.dateProfile,props.dateProfileGenerator,props.currentDate,getNow(props.options.now,props.dateEnv),props.viewTitle);let viewVGrow=false;let viewHeight="";let viewAspectRatio;if(props.isHeightAuto||props.forPrint){viewHeight=""}else if(options.height!=null){viewVGrow=true}else if(options.contentHeight!=null){viewHeight=options.contentHeight}else{viewAspectRatio=Math.max(options.aspectRatio,.5)}let viewContext=this.buildViewContext(props.viewSpec,props.viewApi,props.options,props.dateProfileGenerator,props.dateEnv,props.theme,props.pluginHooks,props.dispatch,props.getCurrentData,props.emitter,props.calendarApi,this.registerInteractiveComponent,this.unregisterInteractiveComponent);let viewLabelId=toolbarConfig.header&&toolbarConfig.header.hasTitle?this.state.viewLabelId:undefined;return y(ViewContextType.Provider,{value:viewContext},toolbarConfig.header&&y(Toolbar,Object.assign({ref:this.headerRef,extraClassName:"fc-header-toolbar",model:toolbarConfig.header,titleId:viewLabelId},toolbarProps)),y(ViewHarness,{liquid:viewVGrow,height:viewHeight,aspectRatio:viewAspectRatio,labeledById:viewLabelId},this.renderView(props),this.buildAppendContent()),toolbarConfig.footer&&y(Toolbar,Object.assign({ref:this.footerRef,extraClassName:"fc-footer-toolbar",model:toolbarConfig.footer,titleId:""},toolbarProps)))}componentDidMount(){let{props}=this;this.calendarInteractions=props.pluginHooks.calendarInteractions.map(CalendarInteractionClass=>new CalendarInteractionClass(props));window.addEventListener("resize",this.handleWindowResize);let{propSetHandlers}=props.pluginHooks;for(let propName in propSetHandlers){propSetHandlers[propName](props[propName],props)}}componentDidUpdate(prevProps){let{props}=this;let{propSetHandlers}=props.pluginHooks;for(let propName in propSetHandlers){if(props[propName]!==prevProps[propName]){propSetHandlers[propName](props[propName],props)}}}componentWillUnmount(){window.removeEventListener("resize",this.handleWindowResize);this.resizeRunner.clear();for(let interaction of this.calendarInteractions){interaction.destroy()}this.props.emitter.trigger("_unmount")}buildAppendContent(){let{props}=this;let children=props.pluginHooks.viewContainerAppends.map(buildAppendContent=>buildAppendContent(props));return y(_,{},...children)}renderView(props){let{pluginHooks}=props;let{viewSpec}=props;let viewProps={dateProfile:props.dateProfile,businessHours:props.businessHours,eventStore:props.renderableEventStore,eventUiBases:props.eventUiBases,dateSelection:props.dateSelection,eventSelection:props.eventSelection,eventDrag:props.eventDrag,eventResize:props.eventResize,isHeightAuto:props.isHeightAuto,forPrint:props.forPrint};let transformers=this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);for(let transformer of transformers){Object.assign(viewProps,transformer.transform(viewProps,props))}let ViewComponent=viewSpec.component;return y(ViewComponent,Object.assign({},viewProps))}}function buildToolbarProps(viewSpec,dateProfile,dateProfileGenerator,currentDate,now,title){let todayInfo=dateProfileGenerator.build(now,undefined,false);let prevInfo=dateProfileGenerator.buildPrev(dateProfile,currentDate,false);let nextInfo=dateProfileGenerator.buildNext(dateProfile,currentDate,false);return{title:title,activeButton:viewSpec.type,navUnit:viewSpec.singleUnit,isTodayEnabled:todayInfo.isValid&&!rangeContainsMarker(dateProfile.currentRange,now),isPrevEnabled:prevInfo.isValid,isNextEnabled:nextInfo.isValid}}function buildViewPropTransformers(theClasses){return theClasses.map(TheClass=>new TheClass)}class Calendar extends CalendarImpl{constructor(el,optionOverrides={}){super();this.isRendering=false;this.isRendered=false;this.currentClassNames=[];this.customContentRenderId=0;this.handleAction=action=>{switch(action.type){case"SET_EVENT_DRAG":case"SET_EVENT_RESIZE":this.renderRunner.tryDrain()}};this.handleData=data=>{this.currentData=data;this.renderRunner.request(data.calendarOptions.rerenderDelay)};this.handleRenderRequest=()=>{if(this.isRendering){this.isRendered=true;let{currentData}=this;flushSync(()=>{D$1(y(CalendarRoot,{options:currentData.calendarOptions,theme:currentData.theme,emitter:currentData.emitter},(classNames,height,isHeightAuto,forPrint)=>{this.setClassNames(classNames);this.setHeight(height);return y(RenderId.Provider,{value:this.customContentRenderId},y(CalendarContent,Object.assign({isHeightAuto:isHeightAuto,forPrint:forPrint},currentData)))}),this.el)})}else if(this.isRendered){this.isRendered=false;D$1(null,this.el);this.setClassNames([]);this.setHeight("")}};ensureElHasStyles(el);this.el=el;this.renderRunner=new DelayedRunner(this.handleRenderRequest);new CalendarDataManager({optionOverrides:optionOverrides,calendarApi:this,onAction:this.handleAction,onData:this.handleData})}render(){let wasRendering=this.isRendering;if(!wasRendering){this.isRendering=true}else{this.customContentRenderId+=1}this.renderRunner.request();if(wasRendering){this.updateSize()}}destroy(){if(this.isRendering){this.isRendering=false;this.renderRunner.request()}}updateSize(){flushSync(()=>{super.updateSize()})}batchRendering(func){this.renderRunner.pause("batchRendering");func();this.renderRunner.resume("batchRendering")}pauseRendering(){this.renderRunner.pause("pauseRendering")}resumeRendering(){this.renderRunner.resume("pauseRendering",true)}resetOptions(optionOverrides,changedOptionNames){this.currentDataManager.resetOptions(optionOverrides,changedOptionNames)}setClassNames(classNames){if(!isArraysEqual(classNames,this.currentClassNames)){let{classList}=this.el;for(let className of this.currentClassNames){classList.remove(className)}for(let className of classNames){classList.add(className)}this.currentClassNames=classNames}}setHeight(height){applyStyleProp(this.el,"height",height)}}function formatDate(dateInput,options={}){let dateEnv=buildDateEnv(options);let formatter=createFormatter(options);let dateMeta=dateEnv.createMarkerMeta(dateInput);if(!dateMeta){return""}return dateEnv.format(dateMeta.marker,formatter,{forcedTzo:dateMeta.forcedTzo})}function formatRange(startInput,endInput,options){let dateEnv=buildDateEnv(typeof options==="object"&&options?options:{});let formatter=createFormatter(options);let startMeta=dateEnv.createMarkerMeta(startInput);let endMeta=dateEnv.createMarkerMeta(endInput);if(!startMeta||!endMeta){return""}return dateEnv.formatRange(startMeta.marker,endMeta.marker,formatter,{forcedStartTzo:startMeta.forcedTzo,forcedEndTzo:endMeta.forcedTzo,isEndExclusive:options.isEndExclusive,defaultSeparator:BASE_OPTION_DEFAULTS.defaultRangeSeparator})}function buildDateEnv(settings){let locale=buildLocale(settings.locale||"en",organizeRawLocales([]).map);return new DateEnv(Object.assign(Object.assign({timeZone:BASE_OPTION_DEFAULTS.timeZone,calendarSystem:"gregory"},settings),{locale:locale}))}function sliceEvents(props,allDay){return sliceEventStore(props.eventStore,props.eventUiBases,props.dateProfile.activeRange,allDay?props.nextDayThreshold:null).fg}const version="6.1.15";config.touchMouseIgnoreWait=500;let ignoreMouseDepth=0;let listenerCnt=0;let isWindowTouchMoveCancelled=false;class PointerDragging{constructor(containerEl){this.subjectEl=null;this.selector="";this.handleSelector="";this.shouldIgnoreMove=false;this.shouldWatchScroll=true;this.isDragging=false;this.isTouchDragging=false;this.wasTouchScroll=false;this.handleMouseDown=ev=>{if(!this.shouldIgnoreMouse()&&isPrimaryMouseButton(ev)&&this.tryStart(ev)){let pev=this.createEventFromMouse(ev,true);this.emitter.trigger("pointerdown",pev);this.initScrollWatch(pev);if(!this.shouldIgnoreMove){document.addEventListener("mousemove",this.handleMouseMove)}document.addEventListener("mouseup",this.handleMouseUp)}};this.handleMouseMove=ev=>{let pev=this.createEventFromMouse(ev);this.recordCoords(pev);this.emitter.trigger("pointermove",pev)};this.handleMouseUp=ev=>{document.removeEventListener("mousemove",this.handleMouseMove);document.removeEventListener("mouseup",this.handleMouseUp);this.emitter.trigger("pointerup",this.createEventFromMouse(ev));this.cleanup()};this.handleTouchStart=ev=>{if(this.tryStart(ev)){this.isTouchDragging=true;let pev=this.createEventFromTouch(ev,true);this.emitter.trigger("pointerdown",pev);this.initScrollWatch(pev);let targetEl=ev.target;if(!this.shouldIgnoreMove){targetEl.addEventListener("touchmove",this.handleTouchMove)}targetEl.addEventListener("touchend",this.handleTouchEnd);targetEl.addEventListener("touchcancel",this.handleTouchEnd);window.addEventListener("scroll",this.handleTouchScroll,true)}};this.handleTouchMove=ev=>{let pev=this.createEventFromTouch(ev);this.recordCoords(pev);this.emitter.trigger("pointermove",pev)};this.handleTouchEnd=ev=>{if(this.isDragging){let targetEl=ev.target;targetEl.removeEventListener("touchmove",this.handleTouchMove);targetEl.removeEventListener("touchend",this.handleTouchEnd);targetEl.removeEventListener("touchcancel",this.handleTouchEnd);window.removeEventListener("scroll",this.handleTouchScroll,true);this.emitter.trigger("pointerup",this.createEventFromTouch(ev));this.cleanup();this.isTouchDragging=false;startIgnoringMouse()}};this.handleTouchScroll=()=>{this.wasTouchScroll=true};this.handleScroll=ev=>{if(!this.shouldIgnoreMove){let pageX=window.scrollX-this.prevScrollX+this.prevPageX;let pageY=window.scrollY-this.prevScrollY+this.prevPageY;this.emitter.trigger("pointermove",{origEvent:ev,isTouch:this.isTouchDragging,subjectEl:this.subjectEl,pageX:pageX,pageY:pageY,deltaX:pageX-this.origPageX,deltaY:pageY-this.origPageY})}};this.containerEl=containerEl;this.emitter=new Emitter;containerEl.addEventListener("mousedown",this.handleMouseDown);containerEl.addEventListener("touchstart",this.handleTouchStart,{passive:true});listenerCreated()}destroy(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown);this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:true});listenerDestroyed()}tryStart(ev){let subjectEl=this.querySubjectEl(ev);let downEl=ev.target;if(subjectEl&&(!this.handleSelector||elementClosest(downEl,this.handleSelector))){this.subjectEl=subjectEl;this.isDragging=true;this.wasTouchScroll=false;return true}return false}cleanup(){isWindowTouchMoveCancelled=false;this.isDragging=false;this.subjectEl=null;this.destroyScrollWatch()}querySubjectEl(ev){if(this.selector){return elementClosest(ev.target,this.selector)}return this.containerEl}shouldIgnoreMouse(){return ignoreMouseDepth||this.isTouchDragging}cancelTouchScroll(){if(this.isDragging){isWindowTouchMoveCancelled=true}}initScrollWatch(ev){if(this.shouldWatchScroll){this.recordCoords(ev);window.addEventListener("scroll",this.handleScroll,true)}}recordCoords(ev){if(this.shouldWatchScroll){this.prevPageX=ev.pageX;this.prevPageY=ev.pageY;this.prevScrollX=window.scrollX;this.prevScrollY=window.scrollY}}destroyScrollWatch(){if(this.shouldWatchScroll){window.removeEventListener("scroll",this.handleScroll,true)}}createEventFromMouse(ev,isFirst){let deltaX=0;let deltaY=0;if(isFirst){this.origPageX=ev.pageX;this.origPageY=ev.pageY}else{deltaX=ev.pageX-this.origPageX;deltaY=ev.pageY-this.origPageY}return{origEvent:ev,isTouch:false,subjectEl:this.subjectEl,pageX:ev.pageX,pageY:ev.pageY,deltaX:deltaX,deltaY:deltaY}}createEventFromTouch(ev,isFirst){let touches=ev.touches;let pageX;let pageY;let deltaX=0;let deltaY=0;if(touches&&touches.length){pageX=touches[0].pageX;pageY=touches[0].pageY}else{pageX=ev.pageX;pageY=ev.pageY}if(isFirst){this.origPageX=pageX;this.origPageY=pageY}else{deltaX=pageX-this.origPageX;deltaY=pageY-this.origPageY}return{origEvent:ev,isTouch:true,subjectEl:this.subjectEl,pageX:pageX,pageY:pageY,deltaX:deltaX,deltaY:deltaY}}}function isPrimaryMouseButton(ev){return ev.button===0&&!ev.ctrlKey}function startIgnoringMouse(){ignoreMouseDepth+=1;setTimeout(()=>{ignoreMouseDepth-=1},config.touchMouseIgnoreWait)}function listenerCreated(){listenerCnt+=1;if(listenerCnt===1){window.addEventListener("touchmove",onWindowTouchMove,{passive:false})}}function listenerDestroyed(){listenerCnt-=1;if(!listenerCnt){window.removeEventListener("touchmove",onWindowTouchMove,{passive:false})}}function onWindowTouchMove(ev){if(isWindowTouchMoveCancelled){ev.preventDefault()}}class ElementMirror{constructor(){this.isVisible=false;this.sourceEl=null;this.mirrorEl=null;this.sourceElRect=null;this.parentNode=document.body;this.zIndex=9999;this.revertDuration=0}start(sourceEl,pageX,pageY){this.sourceEl=sourceEl;this.sourceElRect=this.sourceEl.getBoundingClientRect();this.origScreenX=pageX-window.scrollX;this.origScreenY=pageY-window.scrollY;this.deltaX=0;this.deltaY=0;this.updateElPosition()}handleMove(pageX,pageY){this.deltaX=pageX-window.scrollX-this.origScreenX;this.deltaY=pageY-window.scrollY-this.origScreenY;this.updateElPosition()}setIsVisible(bool){if(bool){if(!this.isVisible){if(this.mirrorEl){this.mirrorEl.style.display=""}this.isVisible=bool;this.updateElPosition()}}else if(this.isVisible){if(this.mirrorEl){this.mirrorEl.style.display="none"}this.isVisible=bool}}stop(needsRevertAnimation,callback){let done=()=>{this.cleanup();callback()};if(needsRevertAnimation&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)){this.doRevertAnimation(done,this.revertDuration)}else{setTimeout(done,0)}}doRevertAnimation(callback,revertDuration){let mirrorEl=this.mirrorEl;let finalSourceElRect=this.sourceEl.getBoundingClientRect();mirrorEl.style.transition="top "+revertDuration+"ms,"+"left "+revertDuration+"ms";applyStyle(mirrorEl,{left:finalSourceElRect.left,top:finalSourceElRect.top});whenTransitionDone(mirrorEl,()=>{mirrorEl.style.transition="";callback()})}cleanup(){if(this.mirrorEl){removeElement(this.mirrorEl);this.mirrorEl=null}this.sourceEl=null}updateElPosition(){if(this.sourceEl&&this.isVisible){applyStyle(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})}}getMirrorEl(){let sourceElRect=this.sourceElRect;let mirrorEl=this.mirrorEl;if(!mirrorEl){mirrorEl=this.mirrorEl=this.sourceEl.cloneNode(true);mirrorEl.style.userSelect="none";mirrorEl.style.webkitUserSelect="none";mirrorEl.style.pointerEvents="none";mirrorEl.classList.add("fc-event-dragging");applyStyle(mirrorEl,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:sourceElRect.right-sourceElRect.left,height:sourceElRect.bottom-sourceElRect.top,right:"auto",bottom:"auto",margin:0});this.parentNode.appendChild(mirrorEl)}return mirrorEl}}class ScrollGeomCache extends ScrollController{constructor(scrollController,doesListening){super();this.handleScroll=()=>{this.scrollTop=this.scrollController.getScrollTop();this.scrollLeft=this.scrollController.getScrollLeft();this.handleScrollChange()};this.scrollController=scrollController;this.doesListening=doesListening;this.scrollTop=this.origScrollTop=scrollController.getScrollTop();this.scrollLeft=this.origScrollLeft=scrollController.getScrollLeft();this.scrollWidth=scrollController.getScrollWidth();this.scrollHeight=scrollController.getScrollHeight();this.clientWidth=scrollController.getClientWidth();this.clientHeight=scrollController.getClientHeight();this.clientRect=this.computeClientRect();if(this.doesListening){this.getEventTarget().addEventListener("scroll",this.handleScroll)}}destroy(){if(this.doesListening){this.getEventTarget().removeEventListener("scroll",this.handleScroll)}}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}setScrollTop(top){this.scrollController.setScrollTop(top);if(!this.doesListening){this.scrollTop=Math.max(Math.min(top,this.getMaxScrollTop()),0);this.handleScrollChange()}}setScrollLeft(top){this.scrollController.setScrollLeft(top);if(!this.doesListening){this.scrollLeft=Math.max(Math.min(top,this.getMaxScrollLeft()),0);this.handleScrollChange()}}getClientWidth(){return this.clientWidth}getClientHeight(){return this.clientHeight}getScrollWidth(){return this.scrollWidth}getScrollHeight(){return this.scrollHeight}handleScrollChange(){}}class ElementScrollGeomCache extends ScrollGeomCache{constructor(el,doesListening){super(new ElementScrollController(el),doesListening)}getEventTarget(){return this.scrollController.el}computeClientRect(){return computeInnerRect(this.scrollController.el)}}class WindowScrollGeomCache extends ScrollGeomCache{constructor(doesListening){super(new WindowScrollController,doesListening)}getEventTarget(){return window}computeClientRect(){return{left:this.scrollLeft,right:this.scrollLeft+this.clientWidth,top:this.scrollTop,bottom:this.scrollTop+this.clientHeight}}handleScrollChange(){this.clientRect=this.computeClientRect()}}const getTime=typeof performance==="function"?performance.now:Date.now;class AutoScroller{constructor(){this.isEnabled=true;this.scrollQuery=[window,".fc-scroller"];this.edgeThreshold=50;this.maxVelocity=300;this.pointerScreenX=null;this.pointerScreenY=null;this.isAnimating=false;this.scrollCaches=null;this.everMovedUp=false;this.everMovedDown=false;this.everMovedLeft=false;this.everMovedRight=false;this.animate=()=>{if(this.isAnimating){let edge=this.computeBestEdge(this.pointerScreenX+window.scrollX,this.pointerScreenY+window.scrollY);if(edge){let now=getTime();this.handleSide(edge,(now-this.msSinceRequest)/1e3);this.requestAnimation(now)}else{this.isAnimating=false}}}}start(pageX,pageY,scrollStartEl){if(this.isEnabled){this.scrollCaches=this.buildCaches(scrollStartEl);this.pointerScreenX=null;this.pointerScreenY=null;this.everMovedUp=false;this.everMovedDown=false;this.everMovedLeft=false;this.everMovedRight=false;this.handleMove(pageX,pageY)}}handleMove(pageX,pageY){if(this.isEnabled){let pointerScreenX=pageX-window.scrollX;let pointerScreenY=pageY-window.scrollY;let yDelta=this.pointerScreenY===null?0:pointerScreenY-this.pointerScreenY;let xDelta=this.pointerScreenX===null?0:pointerScreenX-this.pointerScreenX;if(yDelta<0){this.everMovedUp=true}else if(yDelta>0){this.everMovedDown=true}if(xDelta<0){this.everMovedLeft=true}else if(xDelta>0){this.everMovedRight=true}this.pointerScreenX=pointerScreenX;this.pointerScreenY=pointerScreenY;if(!this.isAnimating){this.isAnimating=true;this.requestAnimation(getTime())}}}stop(){if(this.isEnabled){this.isAnimating=false;for(let scrollCache of this.scrollCaches){scrollCache.destroy()}this.scrollCaches=null}}requestAnimation(now){this.msSinceRequest=now;requestAnimationFrame(this.animate)}handleSide(edge,seconds){let{scrollCache}=edge;let{edgeThreshold}=this;let invDistance=edgeThreshold-edge.distance;let velocity=invDistance*invDistance/(edgeThreshold*edgeThreshold)*this.maxVelocity*seconds;let sign=1;switch(edge.name){case"left":sign=-1;case"right":scrollCache.setScrollLeft(scrollCache.getScrollLeft()+velocity*sign);break;case"top":sign=-1;case"bottom":scrollCache.setScrollTop(scrollCache.getScrollTop()+velocity*sign);break}}computeBestEdge(left,top){let{edgeThreshold}=this;let bestSide=null;let scrollCaches=this.scrollCaches||[];for(let scrollCache of scrollCaches){let rect=scrollCache.clientRect;let leftDist=left-rect.left;let rightDist=rect.right-left;let topDist=top-rect.top;let bottomDist=rect.bottom-top;if(leftDist>=0&&rightDist>=0&&topDist>=0&&bottomDist>=0){if(topDist<=edgeThreshold&&this.everMovedUp&&scrollCache.canScrollUp()&&(!bestSide||bestSide.distance>topDist)){bestSide={scrollCache:scrollCache,name:"top",distance:topDist}}if(bottomDist<=edgeThreshold&&this.everMovedDown&&scrollCache.canScrollDown()&&(!bestSide||bestSide.distance>bottomDist)){bestSide={scrollCache:scrollCache,name:"bottom",distance:bottomDist}}if(leftDist<=edgeThreshold&&this.everMovedLeft&&scrollCache.canScrollLeft()&&(!bestSide||bestSide.distance>leftDist)){bestSide={scrollCache:scrollCache,name:"left",distance:leftDist}}if(rightDist<=edgeThreshold&&this.everMovedRight&&scrollCache.canScrollRight()&&(!bestSide||bestSide.distance>rightDist)){bestSide={scrollCache:scrollCache,name:"right",distance:rightDist}}}}return bestSide}buildCaches(scrollStartEl){return this.queryScrollEls(scrollStartEl).map(el=>{if(el===window){return new WindowScrollGeomCache(false)}return new ElementScrollGeomCache(el,false)})}queryScrollEls(scrollStartEl){let els=[];for(let query of this.scrollQuery){if(typeof query==="object"){els.push(query)}else{els.push(...Array.prototype.slice.call(scrollStartEl.getRootNode().querySelectorAll(query)))}}return els}}class FeaturefulElementDragging extends ElementDragging{constructor(containerEl,selector){super(containerEl);this.containerEl=containerEl;this.delay=null;this.minDistance=0;this.touchScrollAllowed=true;this.mirrorNeedsRevert=false;this.isInteracting=false;this.isDragging=false;this.isDelayEnded=false;this.isDistanceSurpassed=false;this.delayTimeoutId=null;this.onPointerDown=ev=>{if(!this.isDragging){this.isInteracting=true;this.isDelayEnded=false;this.isDistanceSurpassed=false;preventSelection(document.body);preventContextMenu(document.body);if(!ev.isTouch){ev.origEvent.preventDefault()}this.emitter.trigger("pointerdown",ev);if(this.isInteracting&&!this.pointer.shouldIgnoreMove){this.mirror.setIsVisible(false);this.mirror.start(ev.subjectEl,ev.pageX,ev.pageY);this.startDelay(ev);if(!this.minDistance){this.handleDistanceSurpassed(ev)}}}};this.onPointerMove=ev=>{if(this.isInteracting){this.emitter.trigger("pointermove",ev);if(!this.isDistanceSurpassed){let minDistance=this.minDistance;let distanceSq;let{deltaX,deltaY}=ev;distanceSq=deltaX*deltaX+deltaY*deltaY;if(distanceSq>=minDistance*minDistance){this.handleDistanceSurpassed(ev)}}if(this.isDragging){if(ev.origEvent.type!=="scroll"){this.mirror.handleMove(ev.pageX,ev.pageY);this.autoScroller.handleMove(ev.pageX,ev.pageY)}this.emitter.trigger("dragmove",ev)}}};this.onPointerUp=ev=>{if(this.isInteracting){this.isInteracting=false;allowSelection(document.body);allowContextMenu(document.body);this.emitter.trigger("pointerup",ev);if(this.isDragging){this.autoScroller.stop();this.tryStopDrag(ev)}if(this.delayTimeoutId){clearTimeout(this.delayTimeoutId);this.delayTimeoutId=null}}};let pointer=this.pointer=new PointerDragging(containerEl);pointer.emitter.on("pointerdown",this.onPointerDown);pointer.emitter.on("pointermove",this.onPointerMove);pointer.emitter.on("pointerup",this.onPointerUp);if(selector){pointer.selector=selector}this.mirror=new ElementMirror;this.autoScroller=new AutoScroller}destroy(){this.pointer.destroy();this.onPointerUp({})}startDelay(ev){if(typeof this.delay==="number"){this.delayTimeoutId=setTimeout(()=>{this.delayTimeoutId=null;this.handleDelayEnd(ev)},this.delay)}else{this.handleDelayEnd(ev)}}handleDelayEnd(ev){this.isDelayEnded=true;this.tryStartDrag(ev)}handleDistanceSurpassed(ev){this.isDistanceSurpassed=true;this.tryStartDrag(ev)}tryStartDrag(ev){if(this.isDelayEnded&&this.isDistanceSurpassed){if(!this.pointer.wasTouchScroll||this.touchScrollAllowed){this.isDragging=true;this.mirrorNeedsRevert=false;this.autoScroller.start(ev.pageX,ev.pageY,this.containerEl);this.emitter.trigger("dragstart",ev);if(this.touchScrollAllowed===false){this.pointer.cancelTouchScroll()}}}}tryStopDrag(ev){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,ev))}stopDrag(ev){this.isDragging=false;this.emitter.trigger("dragend",ev)}setIgnoreMove(bool){this.pointer.shouldIgnoreMove=bool}setMirrorIsVisible(bool){this.mirror.setIsVisible(bool)}setMirrorNeedsRevert(bool){this.mirrorNeedsRevert=bool}setAutoScrollEnabled(bool){this.autoScroller.isEnabled=bool}}class OffsetTracker{constructor(el){this.el=el;this.origRect=computeRect(el);this.scrollCaches=getClippingParents(el).map(scrollEl=>new ElementScrollGeomCache(scrollEl,true))}destroy(){for(let scrollCache of this.scrollCaches){scrollCache.destroy()}}computeLeft(){let left=this.origRect.left;for(let scrollCache of this.scrollCaches){left+=scrollCache.origScrollLeft-scrollCache.getScrollLeft()}return left}computeTop(){let top=this.origRect.top;for(let scrollCache of this.scrollCaches){top+=scrollCache.origScrollTop-scrollCache.getScrollTop()}return top}isWithinClipping(pageX,pageY){let point={left:pageX,top:pageY};for(let scrollCache of this.scrollCaches){if(!isIgnoredClipping(scrollCache.getEventTarget())&&!pointInsideRect(point,scrollCache.clientRect)){return false}}return true}}function isIgnoredClipping(node){let tagName=node.tagName;return tagName==="HTML"||tagName==="BODY"}class HitDragging{constructor(dragging,droppableStore){this.useSubjectCenter=false;this.requireInitial=true;this.disablePointCheck=false;this.initialHit=null;this.movingHit=null;this.finalHit=null;this.handlePointerDown=ev=>{let{dragging}=this;this.initialHit=null;this.movingHit=null;this.finalHit=null;this.prepareHits();this.processFirstCoord(ev);if(this.initialHit||!this.requireInitial){dragging.setIgnoreMove(false);this.emitter.trigger("pointerdown",ev)}else{dragging.setIgnoreMove(true)}};this.handleDragStart=ev=>{this.emitter.trigger("dragstart",ev);this.handleMove(ev,true)};this.handleDragMove=ev=>{this.emitter.trigger("dragmove",ev);this.handleMove(ev)};this.handlePointerUp=ev=>{this.releaseHits();this.emitter.trigger("pointerup",ev)};this.handleDragEnd=ev=>{if(this.movingHit){this.emitter.trigger("hitupdate",null,true,ev)}this.finalHit=this.movingHit;this.movingHit=null;this.emitter.trigger("dragend",ev)};this.droppableStore=droppableStore;dragging.emitter.on("pointerdown",this.handlePointerDown);dragging.emitter.on("dragstart",this.handleDragStart);dragging.emitter.on("dragmove",this.handleDragMove);dragging.emitter.on("pointerup",this.handlePointerUp);dragging.emitter.on("dragend",this.handleDragEnd);this.dragging=dragging;this.emitter=new Emitter}processFirstCoord(ev){let origPoint={left:ev.pageX,top:ev.pageY};let adjustedPoint=origPoint;let subjectEl=ev.subjectEl;let subjectRect;if(subjectEl instanceof HTMLElement){subjectRect=computeRect(subjectEl);adjustedPoint=constrainPoint(adjustedPoint,subjectRect)}let initialHit=this.initialHit=this.queryHitForOffset(adjustedPoint.left,adjustedPoint.top);if(initialHit){if(this.useSubjectCenter&&subjectRect){let slicedSubjectRect=intersectRects(subjectRect,initialHit.rect);if(slicedSubjectRect){adjustedPoint=getRectCenter(slicedSubjectRect)}}this.coordAdjust=diffPoints(adjustedPoint,origPoint)}else{this.coordAdjust={left:0,top:0}}}handleMove(ev,forceHandle){let hit=this.queryHitForOffset(ev.pageX+this.coordAdjust.left,ev.pageY+this.coordAdjust.top);if(forceHandle||!isHitsEqual(this.movingHit,hit)){this.movingHit=hit;this.emitter.trigger("hitupdate",hit,false,ev)}}prepareHits(){this.offsetTrackers=mapHash(this.droppableStore,interactionSettings=>{interactionSettings.component.prepareHits();return new OffsetTracker(interactionSettings.el)})}releaseHits(){let{offsetTrackers}=this;for(let id in offsetTrackers){offsetTrackers[id].destroy()}this.offsetTrackers={}}queryHitForOffset(offsetLeft,offsetTop){let{droppableStore,offsetTrackers}=this;let bestHit=null;for(let id in droppableStore){let component=droppableStore[id].component;let offsetTracker=offsetTrackers[id];if(offsetTracker&&offsetTracker.isWithinClipping(offsetLeft,offsetTop)){let originLeft=offsetTracker.computeLeft();let originTop=offsetTracker.computeTop();let positionLeft=offsetLeft-originLeft;let positionTop=offsetTop-originTop;let{origRect}=offsetTracker;let width=origRect.right-origRect.left;let height=origRect.bottom-origRect.top;if(positionLeft>=0&&positionLeft=0&&positionTopbestHit.layer)){hit.componentId=id;hit.context=component.context;hit.rect.left+=originLeft;hit.rect.right+=originLeft;hit.rect.top+=originTop;hit.rect.bottom+=originTop;bestHit=hit}}}}return bestHit}}function isHitsEqual(hit0,hit1){if(!hit0&&!hit1){return true}if(Boolean(hit0)!==Boolean(hit1)){return false}return isDateSpansEqual(hit0.dateSpan,hit1.dateSpan)}function buildDatePointApiWithContext(dateSpan,context){let props={};for(let transform of context.pluginHooks.datePointTransforms){Object.assign(props,transform(dateSpan,context))}Object.assign(props,buildDatePointApi(dateSpan,context.dateEnv));return props}function buildDatePointApi(span,dateEnv){return{date:dateEnv.toDate(span.range.start),dateStr:dateEnv.formatIso(span.range.start,{omitTime:span.allDay}),allDay:span.allDay}}class DateClicking extends Interaction{constructor(settings){super(settings);this.handlePointerDown=pev=>{let{dragging}=this;let downEl=pev.origEvent.target;dragging.setIgnoreMove(!this.component.isValidDateDownEl(downEl))};this.handleDragEnd=ev=>{let{component}=this;let{pointer}=this.dragging;if(!pointer.wasTouchScroll){let{initialHit,finalHit}=this.hitDragging;if(initialHit&&finalHit&&isHitsEqual(initialHit,finalHit)){let{context}=component;let arg=Object.assign(Object.assign({},buildDatePointApiWithContext(initialHit.dateSpan,context)),{dayEl:initialHit.dayEl,jsEvent:ev.origEvent,view:context.viewApi||context.calendarApi.view});context.emitter.trigger("dateClick",arg)}}};this.dragging=new FeaturefulElementDragging(settings.el);this.dragging.autoScroller.isEnabled=false;let hitDragging=this.hitDragging=new HitDragging(this.dragging,interactionSettingsToStore(settings));hitDragging.emitter.on("pointerdown",this.handlePointerDown);hitDragging.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}}class DateSelecting extends Interaction{constructor(settings){super(settings);this.dragSelection=null;this.handlePointerDown=ev=>{let{component,dragging}=this;let{options}=component.context;let canSelect=options.selectable&&component.isValidDateDownEl(ev.origEvent.target);dragging.setIgnoreMove(!canSelect);dragging.delay=ev.isTouch?getComponentTouchDelay$1(component):null};this.handleDragStart=ev=>{this.component.context.calendarApi.unselect(ev)};this.handleHitUpdate=(hit,isFinal)=>{let{context}=this.component;let dragSelection=null;let isInvalid=false;if(hit){let initialHit=this.hitDragging.initialHit;let disallowed=hit.componentId===initialHit.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(initialHit,hit);if(!disallowed){dragSelection=joinHitsIntoSelection(initialHit,hit,context.pluginHooks.dateSelectionTransformers)}if(!dragSelection||!isDateSelectionValid(dragSelection,hit.dateProfile,context)){isInvalid=true;dragSelection=null}}if(dragSelection){context.dispatch({type:"SELECT_DATES",selection:dragSelection})}else if(!isFinal){context.dispatch({type:"UNSELECT_DATES"})}if(!isInvalid){enableCursor()}else{disableCursor()}if(!isFinal){this.dragSelection=dragSelection}};this.handlePointerUp=pev=>{if(this.dragSelection){triggerDateSelect(this.dragSelection,pev,this.component.context);this.dragSelection=null}};let{component}=settings;let{options}=component.context;let dragging=this.dragging=new FeaturefulElementDragging(settings.el);dragging.touchScrollAllowed=false;dragging.minDistance=options.selectMinDistance||0;dragging.autoScroller.isEnabled=options.dragScroll;let hitDragging=this.hitDragging=new HitDragging(this.dragging,interactionSettingsToStore(settings));hitDragging.emitter.on("pointerdown",this.handlePointerDown);hitDragging.emitter.on("dragstart",this.handleDragStart);hitDragging.emitter.on("hitupdate",this.handleHitUpdate);hitDragging.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.dragging.destroy()}}function getComponentTouchDelay$1(component){let{options}=component.context;let delay=options.selectLongPressDelay;if(delay==null){delay=options.longPressDelay}return delay}function joinHitsIntoSelection(hit0,hit1,dateSelectionTransformers){let dateSpan0=hit0.dateSpan;let dateSpan1=hit1.dateSpan;let ms=[dateSpan0.range.start,dateSpan0.range.end,dateSpan1.range.start,dateSpan1.range.end];ms.sort(compareNumbers);let props={};for(let transformer of dateSelectionTransformers){let res=transformer(hit0,hit1);if(res===false){return null}if(res){Object.assign(props,res)}}props.range={start:ms[0],end:ms[3]};props.allDay=dateSpan0.allDay;return props}class EventDragging extends Interaction{constructor(settings){super(settings);this.subjectEl=null;this.subjectSeg=null;this.isDragging=false;this.eventRange=null;this.relevantEvents=null;this.receivingContext=null;this.validMutation=null;this.mutatedRelevantEvents=null;this.handlePointerDown=ev=>{let origTarget=ev.origEvent.target;let{component,dragging}=this;let{mirror}=dragging;let{options}=component.context;let initialContext=component.context;this.subjectEl=ev.subjectEl;let subjectSeg=this.subjectSeg=getElSeg(ev.subjectEl);let eventRange=this.eventRange=subjectSeg.eventRange;let eventInstanceId=eventRange.instance.instanceId;this.relevantEvents=getRelevantEvents(initialContext.getCurrentData().eventStore,eventInstanceId);dragging.minDistance=ev.isTouch?0:options.eventDragMinDistance;dragging.delay=ev.isTouch&&eventInstanceId!==component.props.eventSelection?getComponentTouchDelay(component):null;if(options.fixedMirrorParent){mirror.parentNode=options.fixedMirrorParent}else{mirror.parentNode=elementClosest(origTarget,".fc")}mirror.revertDuration=options.dragRevertDuration;let isValid=component.isValidSegDownEl(origTarget)&&!elementClosest(origTarget,".fc-event-resizer");dragging.setIgnoreMove(!isValid);this.isDragging=isValid&&ev.subjectEl.classList.contains("fc-event-draggable")};this.handleDragStart=ev=>{let initialContext=this.component.context;let eventRange=this.eventRange;let eventInstanceId=eventRange.instance.instanceId;if(ev.isTouch){if(eventInstanceId!==this.component.props.eventSelection){initialContext.dispatch({type:"SELECT_EVENT",eventInstanceId:eventInstanceId})}}else{initialContext.dispatch({type:"UNSELECT_EVENT"})}if(this.isDragging){initialContext.calendarApi.unselect(ev);initialContext.emitter.trigger("eventDragStart",{el:this.subjectEl,event:new EventImpl(initialContext,eventRange.def,eventRange.instance),jsEvent:ev.origEvent,view:initialContext.viewApi})}};this.handleHitUpdate=(hit,isFinal)=>{if(!this.isDragging){return}let relevantEvents=this.relevantEvents;let initialHit=this.hitDragging.initialHit;let initialContext=this.component.context;let receivingContext=null;let mutation=null;let mutatedRelevantEvents=null;let isInvalid=false;let interaction={affectedEvents:relevantEvents,mutatedEvents:createEmptyEventStore(),isEvent:true};if(hit){receivingContext=hit.context;let receivingOptions=receivingContext.options;if(initialContext===receivingContext||receivingOptions.editable&&receivingOptions.droppable){mutation=computeEventMutation(initialHit,hit,this.eventRange.instance.range.start,receivingContext.getCurrentData().pluginHooks.eventDragMutationMassagers);if(mutation){mutatedRelevantEvents=applyMutationToEventStore(relevantEvents,receivingContext.getCurrentData().eventUiBases,mutation,receivingContext);interaction.mutatedEvents=mutatedRelevantEvents;if(!isInteractionValid(interaction,hit.dateProfile,receivingContext)){isInvalid=true;mutation=null;mutatedRelevantEvents=null;interaction.mutatedEvents=createEmptyEventStore()}}}else{receivingContext=null}}this.displayDrag(receivingContext,interaction);if(!isInvalid){enableCursor()}else{disableCursor()}if(!isFinal){if(initialContext===receivingContext&&isHitsEqual(initialHit,hit)){mutation=null}this.dragging.setMirrorNeedsRevert(!mutation);this.dragging.setMirrorIsVisible(!hit||!this.subjectEl.getRootNode().querySelector(".fc-event-mirror"));this.receivingContext=receivingContext;this.validMutation=mutation;this.mutatedRelevantEvents=mutatedRelevantEvents}};this.handlePointerUp=()=>{if(!this.isDragging){this.cleanup()}};this.handleDragEnd=ev=>{if(this.isDragging){let initialContext=this.component.context;let initialView=initialContext.viewApi;let{receivingContext,validMutation}=this;let eventDef=this.eventRange.def;let eventInstance=this.eventRange.instance;let eventApi=new EventImpl(initialContext,eventDef,eventInstance);let relevantEvents=this.relevantEvents;let mutatedRelevantEvents=this.mutatedRelevantEvents;let{finalHit}=this.hitDragging;this.clearDrag();initialContext.emitter.trigger("eventDragStop",{el:this.subjectEl,event:eventApi,jsEvent:ev.origEvent,view:initialView});if(validMutation){if(receivingContext===initialContext){let updatedEventApi=new EventImpl(initialContext,mutatedRelevantEvents.defs[eventDef.defId],eventInstance?mutatedRelevantEvents.instances[eventInstance.instanceId]:null);initialContext.dispatch({type:"MERGE_EVENTS",eventStore:mutatedRelevantEvents});let eventChangeArg={oldEvent:eventApi,event:updatedEventApi,relatedEvents:buildEventApis(mutatedRelevantEvents,initialContext,eventInstance),revert(){initialContext.dispatch({type:"MERGE_EVENTS",eventStore:relevantEvents})}};let transformed={};for(let transformer of initialContext.getCurrentData().pluginHooks.eventDropTransformers){Object.assign(transformed,transformer(validMutation,initialContext))}initialContext.emitter.trigger("eventDrop",Object.assign(Object.assign(Object.assign({},eventChangeArg),transformed),{el:ev.subjectEl,delta:validMutation.datesDelta,jsEvent:ev.origEvent,view:initialView}));initialContext.emitter.trigger("eventChange",eventChangeArg)}else if(receivingContext){let eventRemoveArg={event:eventApi,relatedEvents:buildEventApis(relevantEvents,initialContext,eventInstance),revert(){initialContext.dispatch({type:"MERGE_EVENTS",eventStore:relevantEvents})}};initialContext.emitter.trigger("eventLeave",Object.assign(Object.assign({},eventRemoveArg),{draggedEl:ev.subjectEl,view:initialView}));initialContext.dispatch({type:"REMOVE_EVENTS",eventStore:relevantEvents});initialContext.emitter.trigger("eventRemove",eventRemoveArg);let addedEventDef=mutatedRelevantEvents.defs[eventDef.defId];let addedEventInstance=mutatedRelevantEvents.instances[eventInstance.instanceId];let addedEventApi=new EventImpl(receivingContext,addedEventDef,addedEventInstance);receivingContext.dispatch({type:"MERGE_EVENTS",eventStore:mutatedRelevantEvents});let eventAddArg={event:addedEventApi,relatedEvents:buildEventApis(mutatedRelevantEvents,receivingContext,addedEventInstance),revert(){receivingContext.dispatch({type:"REMOVE_EVENTS",eventStore:mutatedRelevantEvents})}};receivingContext.emitter.trigger("eventAdd",eventAddArg);if(ev.isTouch){receivingContext.dispatch({type:"SELECT_EVENT",eventInstanceId:eventInstance.instanceId})}receivingContext.emitter.trigger("drop",Object.assign(Object.assign({},buildDatePointApiWithContext(finalHit.dateSpan,receivingContext)),{draggedEl:ev.subjectEl,jsEvent:ev.origEvent,view:finalHit.context.viewApi}));receivingContext.emitter.trigger("eventReceive",Object.assign(Object.assign({},eventAddArg),{draggedEl:ev.subjectEl,view:finalHit.context.viewApi}))}}else{initialContext.emitter.trigger("_noEventDrop")}}this.cleanup()};let{component}=this;let{options}=component.context;let dragging=this.dragging=new FeaturefulElementDragging(settings.el);dragging.pointer.selector=EventDragging.SELECTOR;dragging.touchScrollAllowed=false;dragging.autoScroller.isEnabled=options.dragScroll;let hitDragging=this.hitDragging=new HitDragging(this.dragging,interactionSettingsStore);hitDragging.useSubjectCenter=settings.useEventCenter;hitDragging.emitter.on("pointerdown",this.handlePointerDown);hitDragging.emitter.on("dragstart",this.handleDragStart);hitDragging.emitter.on("hitupdate",this.handleHitUpdate);hitDragging.emitter.on("pointerup",this.handlePointerUp);hitDragging.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}displayDrag(nextContext,state){let initialContext=this.component.context;let prevContext=this.receivingContext;if(prevContext&&prevContext!==nextContext){if(prevContext===initialContext){prevContext.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:state.affectedEvents,mutatedEvents:createEmptyEventStore(),isEvent:true}})}else{prevContext.dispatch({type:"UNSET_EVENT_DRAG"})}}if(nextContext){nextContext.dispatch({type:"SET_EVENT_DRAG",state:state})}}clearDrag(){let initialCalendar=this.component.context;let{receivingContext}=this;if(receivingContext){receivingContext.dispatch({type:"UNSET_EVENT_DRAG"})}if(initialCalendar!==receivingContext){initialCalendar.dispatch({type:"UNSET_EVENT_DRAG"})}}cleanup(){this.subjectSeg=null;this.isDragging=false;this.eventRange=null;this.relevantEvents=null;this.receivingContext=null;this.validMutation=null;this.mutatedRelevantEvents=null}}EventDragging.SELECTOR=".fc-event-draggable, .fc-event-resizable";function computeEventMutation(hit0,hit1,eventInstanceStart,massagers){let dateSpan0=hit0.dateSpan;let dateSpan1=hit1.dateSpan;let date0=dateSpan0.range.start;let date1=dateSpan1.range.start;let standardProps={};if(dateSpan0.allDay!==dateSpan1.allDay){standardProps.allDay=dateSpan1.allDay;standardProps.hasEnd=hit1.context.options.allDayMaintainDuration;if(dateSpan1.allDay){date0=startOfDay(eventInstanceStart)}else{date0=eventInstanceStart}}let delta=diffDates(date0,date1,hit0.context.dateEnv,hit0.componentId===hit1.componentId?hit0.largeUnit:null);if(delta.milliseconds){standardProps.allDay=false}let mutation={datesDelta:delta,standardProps:standardProps};for(let massager of massagers){massager(mutation,hit0,hit1)}return mutation}function getComponentTouchDelay(component){let{options}=component.context;let delay=options.eventLongPressDelay;if(delay==null){delay=options.longPressDelay}return delay}class EventResizing extends Interaction{constructor(settings){super(settings);this.draggingSegEl=null;this.draggingSeg=null;this.eventRange=null;this.relevantEvents=null;this.validMutation=null;this.mutatedRelevantEvents=null;this.handlePointerDown=ev=>{let{component}=this;let segEl=this.querySegEl(ev);let seg=getElSeg(segEl);let eventRange=this.eventRange=seg.eventRange;this.dragging.minDistance=component.context.options.eventDragMinDistance;this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(ev.origEvent.target)||ev.isTouch&&this.component.props.eventSelection!==eventRange.instance.instanceId)};this.handleDragStart=ev=>{let{context}=this.component;let eventRange=this.eventRange;this.relevantEvents=getRelevantEvents(context.getCurrentData().eventStore,this.eventRange.instance.instanceId);let segEl=this.querySegEl(ev);this.draggingSegEl=segEl;this.draggingSeg=getElSeg(segEl);context.calendarApi.unselect();context.emitter.trigger("eventResizeStart",{el:segEl,event:new EventImpl(context,eventRange.def,eventRange.instance),jsEvent:ev.origEvent,view:context.viewApi})};this.handleHitUpdate=(hit,isFinal,ev)=>{let{context}=this.component;let relevantEvents=this.relevantEvents;let initialHit=this.hitDragging.initialHit;let eventInstance=this.eventRange.instance;let mutation=null;let mutatedRelevantEvents=null;let isInvalid=false;let interaction={affectedEvents:relevantEvents,mutatedEvents:createEmptyEventStore(),isEvent:true};if(hit){let disallowed=hit.componentId===initialHit.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(initialHit,hit);if(!disallowed){mutation=computeMutation(initialHit,hit,ev.subjectEl.classList.contains("fc-event-resizer-start"),eventInstance.range)}}if(mutation){mutatedRelevantEvents=applyMutationToEventStore(relevantEvents,context.getCurrentData().eventUiBases,mutation,context);interaction.mutatedEvents=mutatedRelevantEvents;if(!isInteractionValid(interaction,hit.dateProfile,context)){isInvalid=true;mutation=null;mutatedRelevantEvents=null;interaction.mutatedEvents=null}}if(mutatedRelevantEvents){context.dispatch({type:"SET_EVENT_RESIZE",state:interaction})}else{context.dispatch({type:"UNSET_EVENT_RESIZE"})}if(!isInvalid){enableCursor()}else{disableCursor()}if(!isFinal){if(mutation&&isHitsEqual(initialHit,hit)){mutation=null}this.validMutation=mutation;this.mutatedRelevantEvents=mutatedRelevantEvents}};this.handleDragEnd=ev=>{let{context}=this.component;let eventDef=this.eventRange.def;let eventInstance=this.eventRange.instance;let eventApi=new EventImpl(context,eventDef,eventInstance);let relevantEvents=this.relevantEvents;let mutatedRelevantEvents=this.mutatedRelevantEvents;context.emitter.trigger("eventResizeStop",{el:this.draggingSegEl,event:eventApi,jsEvent:ev.origEvent,view:context.viewApi});if(this.validMutation){let updatedEventApi=new EventImpl(context,mutatedRelevantEvents.defs[eventDef.defId],eventInstance?mutatedRelevantEvents.instances[eventInstance.instanceId]:null);context.dispatch({type:"MERGE_EVENTS",eventStore:mutatedRelevantEvents});let eventChangeArg={oldEvent:eventApi,event:updatedEventApi,relatedEvents:buildEventApis(mutatedRelevantEvents,context,eventInstance),revert(){context.dispatch({type:"MERGE_EVENTS",eventStore:relevantEvents})}};context.emitter.trigger("eventResize",Object.assign(Object.assign({},eventChangeArg),{el:this.draggingSegEl,startDelta:this.validMutation.startDelta||createDuration(0),endDelta:this.validMutation.endDelta||createDuration(0),jsEvent:ev.origEvent,view:context.viewApi}));context.emitter.trigger("eventChange",eventChangeArg)}else{context.emitter.trigger("_noEventResize")}this.draggingSeg=null;this.relevantEvents=null;this.validMutation=null};let{component}=settings;let dragging=this.dragging=new FeaturefulElementDragging(settings.el);dragging.pointer.selector=".fc-event-resizer";dragging.touchScrollAllowed=false;dragging.autoScroller.isEnabled=component.context.options.dragScroll;let hitDragging=this.hitDragging=new HitDragging(this.dragging,interactionSettingsToStore(settings));hitDragging.emitter.on("pointerdown",this.handlePointerDown);hitDragging.emitter.on("dragstart",this.handleDragStart);hitDragging.emitter.on("hitupdate",this.handleHitUpdate);hitDragging.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}querySegEl(ev){return elementClosest(ev.subjectEl,".fc-event")}}function computeMutation(hit0,hit1,isFromStart,instanceRange){let dateEnv=hit0.context.dateEnv;let date0=hit0.dateSpan.range.start;let date1=hit1.dateSpan.range.start;let delta=diffDates(date0,date1,dateEnv,hit0.largeUnit);if(isFromStart){if(dateEnv.add(instanceRange.start,delta)instanceRange.start){return{endDelta:delta}}return null}class UnselectAuto{constructor(context){this.context=context;this.isRecentPointerDateSelect=false;this.matchesCancel=false;this.matchesEvent=false;this.onSelect=selectInfo=>{if(selectInfo.jsEvent){this.isRecentPointerDateSelect=true}};this.onDocumentPointerDown=pev=>{let unselectCancel=this.context.options.unselectCancel;let downEl=getEventTargetViaRoot(pev.origEvent);this.matchesCancel=!!elementClosest(downEl,unselectCancel);this.matchesEvent=!!elementClosest(downEl,EventDragging.SELECTOR)};this.onDocumentPointerUp=pev=>{let{context}=this;let{documentPointer}=this;let calendarState=context.getCurrentData();if(!documentPointer.wasTouchScroll){if(calendarState.dateSelection&&!this.isRecentPointerDateSelect){let unselectAuto=context.options.unselectAuto;if(unselectAuto&&(!unselectAuto||!this.matchesCancel)){context.calendarApi.unselect(pev)}}if(calendarState.eventSelection&&!this.matchesEvent){context.dispatch({type:"UNSELECT_EVENT"})}}this.isRecentPointerDateSelect=false};let documentPointer=this.documentPointer=new PointerDragging(document);documentPointer.shouldIgnoreMove=true;documentPointer.shouldWatchScroll=false;documentPointer.emitter.on("pointerdown",this.onDocumentPointerDown);documentPointer.emitter.on("pointerup",this.onDocumentPointerUp);context.emitter.on("select",this.onSelect)}destroy(){this.context.emitter.off("select",this.onSelect);this.documentPointer.destroy()}}const OPTION_REFINERS$3={fixedMirrorParent:identity};const LISTENER_REFINERS={dateClick:identity,eventDragStart:identity,eventDragStop:identity,eventDrop:identity,eventResizeStart:identity,eventResizeStop:identity,eventResize:identity,drop:identity,eventReceive:identity,eventLeave:identity};class ExternalElementDragging{constructor(dragging,suppliedDragMeta){this.receivingContext=null;this.droppableEvent=null;this.suppliedDragMeta=null;this.dragMeta=null;this.handleDragStart=ev=>{this.dragMeta=this.buildDragMeta(ev.subjectEl)};this.handleHitUpdate=(hit,isFinal,ev)=>{let{dragging}=this.hitDragging;let receivingContext=null;let droppableEvent=null;let isInvalid=false;let interaction={affectedEvents:createEmptyEventStore(),mutatedEvents:createEmptyEventStore(),isEvent:this.dragMeta.create};if(hit){receivingContext=hit.context;if(this.canDropElOnCalendar(ev.subjectEl,receivingContext)){droppableEvent=computeEventForDateSpan(hit.dateSpan,this.dragMeta,receivingContext);interaction.mutatedEvents=eventTupleToStore(droppableEvent);isInvalid=!isInteractionValid(interaction,hit.dateProfile,receivingContext);if(isInvalid){interaction.mutatedEvents=createEmptyEventStore();droppableEvent=null}}}this.displayDrag(receivingContext,interaction);dragging.setMirrorIsVisible(isFinal||!droppableEvent||!document.querySelector(".fc-event-mirror"));if(!isInvalid){enableCursor()}else{disableCursor()}if(!isFinal){dragging.setMirrorNeedsRevert(!droppableEvent);this.receivingContext=receivingContext;this.droppableEvent=droppableEvent}};this.handleDragEnd=pev=>{let{receivingContext,droppableEvent}=this;this.clearDrag();if(receivingContext&&droppableEvent){let finalHit=this.hitDragging.finalHit;let finalView=finalHit.context.viewApi;let dragMeta=this.dragMeta;receivingContext.emitter.trigger("drop",Object.assign(Object.assign({},buildDatePointApiWithContext(finalHit.dateSpan,receivingContext)),{draggedEl:pev.subjectEl,jsEvent:pev.origEvent,view:finalView}));if(dragMeta.create){let addingEvents=eventTupleToStore(droppableEvent);receivingContext.dispatch({type:"MERGE_EVENTS",eventStore:addingEvents});if(pev.isTouch){receivingContext.dispatch({type:"SELECT_EVENT",eventInstanceId:droppableEvent.instance.instanceId})}receivingContext.emitter.trigger("eventReceive",{event:new EventImpl(receivingContext,droppableEvent.def,droppableEvent.instance),relatedEvents:[],revert(){receivingContext.dispatch({type:"REMOVE_EVENTS",eventStore:addingEvents})},draggedEl:pev.subjectEl,view:finalView})}}this.receivingContext=null;this.droppableEvent=null};let hitDragging=this.hitDragging=new HitDragging(dragging,interactionSettingsStore);hitDragging.requireInitial=false;hitDragging.emitter.on("dragstart",this.handleDragStart);hitDragging.emitter.on("hitupdate",this.handleHitUpdate);hitDragging.emitter.on("dragend",this.handleDragEnd);this.suppliedDragMeta=suppliedDragMeta}buildDragMeta(subjectEl){if(typeof this.suppliedDragMeta==="object"){return parseDragMeta(this.suppliedDragMeta)}if(typeof this.suppliedDragMeta==="function"){return parseDragMeta(this.suppliedDragMeta(subjectEl))}return getDragMetaFromEl(subjectEl)}displayDrag(nextContext,state){let prevContext=this.receivingContext;if(prevContext&&prevContext!==nextContext){prevContext.dispatch({type:"UNSET_EVENT_DRAG"})}if(nextContext){nextContext.dispatch({type:"SET_EVENT_DRAG",state:state})}}clearDrag(){if(this.receivingContext){this.receivingContext.dispatch({type:"UNSET_EVENT_DRAG"})}}canDropElOnCalendar(el,receivingContext){let dropAccept=receivingContext.options.dropAccept;if(typeof dropAccept==="function"){return dropAccept.call(receivingContext.calendarApi,el)}if(typeof dropAccept==="string"&&dropAccept){return Boolean(elementMatches(el,dropAccept))}return true}}function computeEventForDateSpan(dateSpan,dragMeta,context){let defProps=Object.assign({},dragMeta.leftoverProps);for(let transform of context.pluginHooks.externalDefTransforms){Object.assign(defProps,transform(dateSpan,dragMeta))}let{refined,extra}=refineEventDef(defProps,context);let def=parseEventDef(refined,extra,dragMeta.sourceId,dateSpan.allDay,context.options.forceEventDuration||Boolean(dragMeta.duration),context);let start=dateSpan.range.start;if(dateSpan.allDay&&dragMeta.startTime){start=context.dateEnv.add(start,dragMeta.startTime)}let end=dragMeta.duration?context.dateEnv.add(start,dragMeta.duration):getDefaultEventEnd(dateSpan.allDay,start,context);let instance=createEventInstance(def.defId,{start:start,end:end});return{def:def,instance:instance}}function getDragMetaFromEl(el){let str=getEmbeddedElData(el,"event");let obj=str?JSON.parse(str):{create:false};return parseDragMeta(obj)}config.dataAttrPrefix="";function getEmbeddedElData(el,name){let prefix=config.dataAttrPrefix;let prefixedName=(prefix?prefix+"-":"")+name;return el.getAttribute("data-"+prefixedName)||""}class ExternalDraggable{constructor(el,settings={}){this.handlePointerDown=ev=>{let{dragging}=this;let{minDistance,longPressDelay}=this.settings;dragging.minDistance=minDistance!=null?minDistance:ev.isTouch?0:BASE_OPTION_DEFAULTS.eventDragMinDistance;dragging.delay=ev.isTouch?longPressDelay!=null?longPressDelay:BASE_OPTION_DEFAULTS.longPressDelay:0};this.handleDragStart=ev=>{if(ev.isTouch&&this.dragging.delay&&ev.subjectEl.classList.contains("fc-event")){this.dragging.mirror.getMirrorEl().classList.add("fc-event-selected")}};this.settings=settings;let dragging=this.dragging=new FeaturefulElementDragging(el);dragging.touchScrollAllowed=false;if(settings.itemSelector!=null){dragging.pointer.selector=settings.itemSelector}if(settings.appendTo!=null){dragging.mirror.parentNode=settings.appendTo}dragging.emitter.on("pointerdown",this.handlePointerDown);dragging.emitter.on("dragstart",this.handleDragStart);new ExternalElementDragging(dragging,settings.eventData)}destroy(){this.dragging.destroy()}}class InferredElementDragging extends ElementDragging{constructor(containerEl){super(containerEl);this.shouldIgnoreMove=false;this.mirrorSelector="";this.currentMirrorEl=null;this.handlePointerDown=ev=>{this.emitter.trigger("pointerdown",ev);if(!this.shouldIgnoreMove){this.emitter.trigger("dragstart",ev)}};this.handlePointerMove=ev=>{if(!this.shouldIgnoreMove){this.emitter.trigger("dragmove",ev)}};this.handlePointerUp=ev=>{this.emitter.trigger("pointerup",ev);if(!this.shouldIgnoreMove){this.emitter.trigger("dragend",ev)}};let pointer=this.pointer=new PointerDragging(containerEl);pointer.emitter.on("pointerdown",this.handlePointerDown);pointer.emitter.on("pointermove",this.handlePointerMove);pointer.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.pointer.destroy()}setIgnoreMove(bool){this.shouldIgnoreMove=bool}setMirrorIsVisible(bool){if(bool){if(this.currentMirrorEl){this.currentMirrorEl.style.visibility="";this.currentMirrorEl=null}}else{let mirrorEl=this.mirrorSelector?document.querySelector(this.mirrorSelector):null;if(mirrorEl){this.currentMirrorEl=mirrorEl;mirrorEl.style.visibility="hidden"}}}}class ThirdPartyDraggable{constructor(containerOrSettings,settings){let containerEl=document;if(containerOrSettings===document||containerOrSettings instanceof Element){containerEl=containerOrSettings;settings=settings||{}}else{settings=containerOrSettings||{}}let dragging=this.dragging=new InferredElementDragging(containerEl);if(typeof settings.itemSelector==="string"){dragging.pointer.selector=settings.itemSelector}else if(containerEl===document){dragging.pointer.selector="[data-event]"}if(typeof settings.mirrorSelector==="string"){dragging.mirrorSelector=settings.mirrorSelector}let externalDragging=new ExternalElementDragging(dragging,settings.eventData);externalDragging.hitDragging.disablePointCheck=true}destroy(){this.dragging.destroy()}}var index$4=createPlugin({name:"@fullcalendar/interaction",componentInteractions:[DateClicking,DateSelecting,EventDragging,EventResizing],calendarInteractions:[UnselectAuto],elementDraggingImpl:FeaturefulElementDragging,optionRefiners:OPTION_REFINERS$3,listenerRefiners:LISTENER_REFINERS});class TableView extends DateComponent{constructor(){super(...arguments);this.headerElRef=d()}renderSimpleLayout(headerRowContent,bodyContent){let{props,context}=this;let sections=[];let stickyHeaderDates=getStickyHeaderDates(context.options);if(headerRowContent){sections.push({type:"header",key:"header",isSticky:stickyHeaderDates,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:headerRowContent}})}sections.push({type:"body",key:"body",liquid:true,chunk:{content:bodyContent}});return y(ViewContainer,{elClasses:["fc-daygrid"],viewSpec:context.viewSpec},y(SimpleScrollGrid,{liquid:!props.isHeightAuto&&!props.forPrint,collapsibleWidth:props.forPrint,cols:[],sections:sections}))}renderHScrollLayout(headerRowContent,bodyContent,colCnt,dayMinWidth){let ScrollGrid=this.context.pluginHooks.scrollGridImpl;if(!ScrollGrid){throw new Error("No ScrollGrid implementation")}let{props,context}=this;let stickyHeaderDates=!props.forPrint&&getStickyHeaderDates(context.options);let stickyFooterScrollbar=!props.forPrint&&getStickyFooterScrollbar(context.options);let sections=[];if(headerRowContent){sections.push({type:"header",key:"header",isSticky:stickyHeaderDates,chunks:[{key:"main",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:headerRowContent}]})}sections.push({type:"body",key:"body",liquid:true,chunks:[{key:"main",content:bodyContent}]});if(stickyFooterScrollbar){sections.push({type:"footer",key:"footer",isSticky:true,chunks:[{key:"main",content:renderScrollShim}]})}return y(ViewContainer,{elClasses:["fc-daygrid"],viewSpec:context.viewSpec},y(ScrollGrid,{liquid:!props.isHeightAuto&&!props.forPrint,forPrint:props.forPrint,collapsibleWidth:props.forPrint,colGroups:[{cols:[{span:colCnt,minWidth:dayMinWidth}]}],sections:sections}))}}function splitSegsByRow(segs,rowCnt){let byRow=[];for(let i=0;i{let isForcedInvisible=(props.eventDrag?props.eventDrag.affectedInstances:null)||(props.eventResize?props.eventResize.affectedInstances:null)||{};return y(_,null,allSegs.map(seg=>{let instanceId=seg.eventRange.instance.instanceId;return y("div",{className:"fc-daygrid-event-harness",key:instanceId,style:{visibility:isForcedInvisible[instanceId]?"hidden":""}},hasListItemDisplay(seg)?y(TableListItemEvent,Object.assign({seg:seg,isDragging:false,isSelected:instanceId===props.eventSelection,defaultDisplayEventEnd:false},getSegMeta(seg,props.todayRange))):y(TableBlockEvent,Object.assign({seg:seg,isDragging:false,isResizing:false,isDateSelecting:false,isSelected:instanceId===props.eventSelection,defaultDisplayEventEnd:false},getSegMeta(seg,props.todayRange))))}))}})}}function compileSegs(singlePlacements){let allSegs=[];let invisibleSegs=[];for(let placement of singlePlacements){allSegs.push(placement.seg);if(!placement.isVisible){invisibleSegs.push(placement.seg)}}return{allSegs:allSegs,invisibleSegs:invisibleSegs}}const DEFAULT_WEEK_NUM_FORMAT$1=createFormatter({week:"narrow"});class TableCell extends DateComponent{constructor(){super(...arguments);this.rootElRef=d();this.state={dayNumberId:getUniqueDomId()};this.handleRootEl=el=>{setRef(this.rootElRef,el);setRef(this.props.elRef,el)}}render(){let{context,props,state,rootElRef}=this;let{options,dateEnv}=context;let{date,dateProfile}=props;const isMonthStart=props.showDayNumber&&shouldDisplayMonthStart(date,dateProfile.currentRange,dateEnv);let dayNumberText=props.showDayNumber?dateEnv.format(date,isMonthStart?props.monthStartFormat:DAY_NUM_FORMAT):"";return y(DayCellContainer,{elTag:"td",elRef:this.handleRootEl,elClasses:["fc-daygrid-day",...props.extraClassNames||[]],elAttrs:Object.assign(Object.assign(Object.assign({},props.extraDataAttrs),props.showDayNumber?{"aria-labelledby":state.dayNumberId}:{}),{role:"gridcell"}),defaultGenerator:renderTopInner,date:date,dateProfile:dateProfile,todayRange:props.todayRange,showDayNumber:props.showDayNumber,isMonthStart:isMonthStart,extraRenderProps:props.extraRenderProps},(InnerContent,renderProps)=>y("div",{ref:props.innerElRef,className:"fc-daygrid-day-frame fc-scrollgrid-sync-inner",style:{minHeight:props.minHeight}},props.showWeekNumber&&y(WeekNumberContainer,{elTag:"a",elClasses:["fc-daygrid-week-number"],elAttrs:buildNavLinkAttrs(context,date,"week"),date:date,defaultFormat:DEFAULT_WEEK_NUM_FORMAT$1}),!renderProps.isDisabled&&(props.showDayNumber||hasCustomDayCellContent(options)||props.forceDayTop)?y("div",{className:"fc-daygrid-day-top"},y(InnerContent,{elTag:"a",elClasses:["fc-daygrid-day-number",isMonthStart&&"fc-daygrid-month-start"],elAttrs:Object.assign(Object.assign({},buildNavLinkAttrs(context,date)),{id:state.dayNumberId})})):props.showDayNumber?y("div",{className:"fc-daygrid-day-top",style:{visibility:"hidden"}},y("a",{className:"fc-daygrid-day-number",id:state.dayNumberId},dayNumberText)):undefined,y("div",{className:"fc-daygrid-day-events",ref:props.fgContentElRef},props.fgContent,y("div",{className:"fc-daygrid-day-bottom",style:{marginTop:props.moreMarginTop}},y(TableCellMoreLink,{allDayDate:date,singlePlacements:props.singlePlacements,moreCnt:props.moreCnt,alignmentElRef:rootElRef,alignGridTop:!props.showDayNumber,extraDateSpan:props.extraDateSpan,dateProfile:props.dateProfile,eventSelection:props.eventSelection,eventDrag:props.eventDrag,eventResize:props.eventResize,todayRange:props.todayRange}))),y("div",{className:"fc-daygrid-day-bg"},props.bgContent)))}}function renderTopInner(props){return props.dayNumberText||y(_,null," ")}function shouldDisplayMonthStart(date,currentRange,dateEnv){const{start:currentStart,end:currentEnd}=currentRange;const currentEndIncl=addMs(currentEnd,-1);const currentFirstYear=dateEnv.getYear(currentStart);const currentFirstMonth=dateEnv.getMonth(currentStart);const currentLastYear=dateEnv.getYear(currentEndIncl);const currentLastMonth=dateEnv.getMonth(currentEndIncl);return!(currentFirstYear===currentLastYear&¤tFirstMonth===currentLastMonth)&&Boolean(date.valueOf()===currentStart.valueOf()||dateEnv.getDay(date)===1&&date.valueOf(){let segUid=segs[segEntry.index].eventRange.instance.instanceId+":"+segEntry.span.start+":"+(segEntry.span.end-1);return segHeights[segUid]||1});hierarchy.allowReslicing=true;hierarchy.strictOrder=strictOrder;if(dayMaxEvents===true||dayMaxEventRows===true){hierarchy.maxCoord=maxContentHeight;hierarchy.hiddenConsumes=true}else if(typeof dayMaxEvents==="number"){hierarchy.maxStackCnt=dayMaxEvents}else if(typeof dayMaxEventRows==="number"){hierarchy.maxStackCnt=dayMaxEventRows;hierarchy.hiddenConsumes=true}let segInputs=[];let unknownHeightSegs=[];for(let i=0;i1;let isFirstCol=rect.span.start===col;currentMarginTop+=rect.levelCoord-currentHeight;currentHeight=rect.levelCoord+rect.thickness;if(isAbsolute){currentMarginTop+=rect.thickness;if(isFirstCol){multiPlacements.push({seg:resliceSeg(seg,rect.span.start,rect.span.end,cells),isVisible:true,isAbsolute:true,absoluteTop:rect.levelCoord,marginTop:0})}}else if(isFirstCol){multiPlacements.push({seg:resliceSeg(seg,rect.span.start,rect.span.end,cells),isVisible:true,isAbsolute:false,absoluteTop:rect.levelCoord,marginTop:currentMarginTop});currentMarginTop=0}}singleColPlacements.push(singlePlacements);multiColPlacements.push(multiPlacements);leftoverMargins.push(currentMarginTop)}return{singleColPlacements:singleColPlacements,multiColPlacements:multiColPlacements,leftoverMargins:leftoverMargins}}function groupRectsByEachCol(rects,colCnt){let rectsByEachCol=[];for(let col=0;col!this.forceHidden[buildEntryKey(entry)];for(let level=0;level{if(isForced){this.updateSizing(true)}}}render(){let{props,state,context}=this;let{options}=context;let colCnt=props.cells.length;let businessHoursByCol=splitSegsByFirstCol(props.businessHourSegs,colCnt);let bgEventSegsByCol=splitSegsByFirstCol(props.bgEventSegs,colCnt);let highlightSegsByCol=splitSegsByFirstCol(this.getHighlightSegs(),colCnt);let mirrorSegsByCol=splitSegsByFirstCol(this.getMirrorSegs(),colCnt);let{singleColPlacements,multiColPlacements,moreCnts,moreMarginTops}=computeFgSegPlacement(sortEventSegs(props.fgEventSegs,options.eventOrder),props.dayMaxEvents,props.dayMaxEventRows,options.eventOrderStrict,state.segHeights,state.maxContentHeight,props.cells);let isForcedInvisible=props.eventDrag&&props.eventDrag.affectedInstances||props.eventResize&&props.eventResize.affectedInstances||{};return y("tr",{ref:this.rootElRef,role:"row"},props.renderIntro&&props.renderIntro(),props.cells.map((cell,col)=>{let normalFgNodes=this.renderFgSegs(col,props.forPrint?singleColPlacements[col]:multiColPlacements[col],props.todayRange,isForcedInvisible);let mirrorFgNodes=this.renderFgSegs(col,buildMirrorPlacements(mirrorSegsByCol[col],multiColPlacements),props.todayRange,{},Boolean(props.eventDrag),Boolean(props.eventResize),false);return y(TableCell,{key:cell.key,elRef:this.cellElRefs.createRef(cell.key),innerElRef:this.frameElRefs.createRef(cell.key),dateProfile:props.dateProfile,date:cell.date,showDayNumber:props.showDayNumbers,showWeekNumber:props.showWeekNumbers&&col===0,forceDayTop:props.showWeekNumbers,todayRange:props.todayRange,eventSelection:props.eventSelection,eventDrag:props.eventDrag,eventResize:props.eventResize,extraRenderProps:cell.extraRenderProps,extraDataAttrs:cell.extraDataAttrs,extraClassNames:cell.extraClassNames,extraDateSpan:cell.extraDateSpan,moreCnt:moreCnts[col],moreMarginTop:moreMarginTops[col],singlePlacements:singleColPlacements[col],fgContentElRef:this.fgElRefs.createRef(cell.key),fgContent:y(_,null,y(_,null,normalFgNodes),y(_,null,mirrorFgNodes)),bgContent:y(_,null,this.renderFillSegs(highlightSegsByCol[col],"highlight"),this.renderFillSegs(businessHoursByCol[col],"non-business"),this.renderFillSegs(bgEventSegsByCol[col],"bg-event")),minHeight:props.cellMinHeight})}))}componentDidMount(){this.updateSizing(true);this.context.addResizeHandler(this.handleResize)}componentDidUpdate(prevProps,prevState){let currentProps=this.props;this.updateSizing(!isPropsEqual(prevProps,currentProps))}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}getHighlightSegs(){let{props}=this;if(props.eventDrag&&props.eventDrag.segs.length){return props.eventDrag.segs}if(props.eventResize&&props.eventResize.segs.length){return props.eventResize.segs}return props.dateSelectionSegs}getMirrorSegs(){let{props}=this;if(props.eventResize&&props.eventResize.segs.length){return props.eventResize.segs}return[]}renderFgSegs(col,segPlacements,todayRange,isForcedInvisible,isDragging,isResizing,isDateSelecting){let{context}=this;let{eventSelection}=this.props;let{framePositions}=this.state;let defaultDisplayEventEnd=this.props.cells.length===1;let isMirror=isDragging||isResizing||isDateSelecting;let nodes=[];if(framePositions){for(let placement of segPlacements){let{seg}=placement;let{instanceId}=seg.eventRange.instance;let isVisible=placement.isVisible&&!isForcedInvisible[instanceId];let isAbsolute=placement.isAbsolute;let left="";let right="";if(isAbsolute){if(context.isRtl){right=0;left=framePositions.lefts[seg.lastCol]-framePositions.lefts[seg.firstCol]}else{left=0;right=framePositions.rights[seg.firstCol]-framePositions.rights[seg.lastCol]}}nodes.push(y("div",{className:"fc-daygrid-event-harness"+(isAbsolute?" fc-daygrid-event-harness-abs":""),key:generateSegKey(seg),ref:isMirror?null:this.segHarnessRefs.createRef(generateSegUid(seg)),style:{visibility:isVisible?"":"hidden",marginTop:isAbsolute?"":placement.marginTop,top:isAbsolute?placement.absoluteTop:"",left:left,right:right}},hasListItemDisplay(seg)?y(TableListItemEvent,Object.assign({seg:seg,isDragging:isDragging,isSelected:instanceId===eventSelection,defaultDisplayEventEnd:defaultDisplayEventEnd},getSegMeta(seg,todayRange))):y(TableBlockEvent,Object.assign({seg:seg,isDragging:isDragging,isResizing:isResizing,isDateSelecting:isDateSelecting,isSelected:instanceId===eventSelection,defaultDisplayEventEnd:defaultDisplayEventEnd},getSegMeta(seg,todayRange)))))}}return nodes}renderFillSegs(segs,fillType){let{isRtl}=this.context;let{todayRange}=this.props;let{framePositions}=this.state;let nodes=[];if(framePositions){for(let seg of segs){let leftRightCss=isRtl?{right:0,left:framePositions.lefts[seg.lastCol]-framePositions.lefts[seg.firstCol]}:{left:0,right:framePositions.rights[seg.firstCol]-framePositions.rights[seg.lastCol]};nodes.push(y("div",{key:buildEventRangeKey(seg.eventRange),className:"fc-daygrid-bg-harness",style:leftRightCss},fillType==="bg-event"?y(BgEvent,Object.assign({seg:seg},getSegMeta(seg,todayRange))):renderFill(fillType)))}}return y(_,{},...nodes)}updateSizing(isExternalSizingChange){let{props,state,frameElRefs}=this;if(!props.forPrint&&props.clientWidth!==null){if(isExternalSizingChange){let frameEls=props.cells.map(cell=>frameElRefs.currentMap[cell.key]);if(frameEls.length){let originEl=this.rootElRef.current;let newPositionCache=new PositionCache(originEl,frameEls,true,false);if(!state.framePositions||!state.framePositions.similarTo(newPositionCache)){this.setState({framePositions:new PositionCache(originEl,frameEls,true,false)})}}}const oldSegHeights=this.state.segHeights;const newSegHeights=this.querySegHeights();const limitByContentHeight=props.dayMaxEvents===true||props.dayMaxEventRows===true;this.safeSetState({segHeights:Object.assign(Object.assign({},oldSegHeights),newSegHeights),maxContentHeight:limitByContentHeight?this.computeMaxContentHeight():null})}}querySegHeights(){let segElMap=this.segHarnessRefs.currentMap;let segHeights={};for(let segUid in segElMap){let height=Math.round(segElMap[segUid].getBoundingClientRect().height);segHeights[segUid]=Math.max(segHeights[segUid]||0,height)}return segHeights}computeMaxContentHeight(){let firstKey=this.props.cells[0].key;let cellEl=this.cellElRefs.currentMap[firstKey];let fcContainerEl=this.fgElRefs.currentMap[firstKey];return cellEl.getBoundingClientRect().bottom-fcContainerEl.getBoundingClientRect().top}getCellEls(){let elMap=this.cellElRefs.currentMap;return this.props.cells.map(cell=>elMap[cell.key])}}TableRow.addStateEquality({segHeights:isPropsEqual});function buildMirrorPlacements(mirrorSegs,colPlacements){if(!mirrorSegs.length){return[]}let topsByInstanceId=buildAbsoluteTopHash(colPlacements);return mirrorSegs.map(seg=>({seg:seg,isVisible:true,isAbsolute:true,absoluteTop:topsByInstanceId[seg.eventRange.instance.instanceId],marginTop:0}))}function buildAbsoluteTopHash(colPlacements){let topsByInstanceId={};for(let placements of colPlacements){for(let placement of placements){topsByInstanceId[placement.seg.eventRange.instance.instanceId]=placement.absoluteTop}}return topsByInstanceId}class TableRows extends DateComponent{constructor(){super(...arguments);this.splitBusinessHourSegs=memoize(splitSegsByRow);this.splitBgEventSegs=memoize(splitSegsByRow);this.splitFgEventSegs=memoize(splitSegsByRow);this.splitDateSelectionSegs=memoize(splitSegsByRow);this.splitEventDrag=memoize(splitInteractionByRow);this.splitEventResize=memoize(splitInteractionByRow);this.rowRefs=new RefMap}render(){let{props,context}=this;let rowCnt=props.cells.length;let businessHourSegsByRow=this.splitBusinessHourSegs(props.businessHourSegs,rowCnt);let bgEventSegsByRow=this.splitBgEventSegs(props.bgEventSegs,rowCnt);let fgEventSegsByRow=this.splitFgEventSegs(props.fgEventSegs,rowCnt);let dateSelectionSegsByRow=this.splitDateSelectionSegs(props.dateSelectionSegs,rowCnt);let eventDragByRow=this.splitEventDrag(props.eventDrag,rowCnt);let eventResizeByRow=this.splitEventResize(props.eventResize,rowCnt);let cellMinHeight=rowCnt>=7&&props.clientWidth?props.clientWidth/context.options.aspectRatio/6:null;return y(NowTimer,{unit:"day"},(nowDate,todayRange)=>y(_,null,props.cells.map((cells,row)=>y(TableRow,{ref:this.rowRefs.createRef(row),key:cells.length?cells[0].date.toISOString():row,showDayNumbers:rowCnt>1,showWeekNumbers:props.showWeekNumbers,todayRange:todayRange,dateProfile:props.dateProfile,cells:cells,renderIntro:props.renderRowIntro,businessHourSegs:businessHourSegsByRow[row],eventSelection:props.eventSelection,bgEventSegs:bgEventSegsByRow[row].filter(isSegAllDay),fgEventSegs:fgEventSegsByRow[row],dateSelectionSegs:dateSelectionSegsByRow[row],eventDrag:eventDragByRow[row],eventResize:eventResizeByRow[row],dayMaxEvents:props.dayMaxEvents,dayMaxEventRows:props.dayMaxEventRows,clientWidth:props.clientWidth,clientHeight:props.clientHeight,cellMinHeight:cellMinHeight,forPrint:props.forPrint}))))}componentDidMount(){this.registerInteractiveComponent()}componentDidUpdate(){this.registerInteractiveComponent()}registerInteractiveComponent(){if(!this.rootEl){const firstCellEl=this.rowRefs.currentMap[0].getCellEls()[0];const rootEl=firstCellEl?firstCellEl.closest(".fc-daygrid-body"):null;if(rootEl){this.rootEl=rootEl;this.context.registerInteractiveComponent(this,{el:rootEl,isHitComboAllowed:this.props.isHitComboAllowed})}}}componentWillUnmount(){if(this.rootEl){this.context.unregisterInteractiveComponent(this);this.rootEl=null}}prepareHits(){this.rowPositions=new PositionCache(this.rootEl,this.rowRefs.collect().map(rowObj=>rowObj.getCellEls()[0]),false,true);this.colPositions=new PositionCache(this.rootEl,this.rowRefs.currentMap[0].getCellEls(),true,false)}queryHit(positionLeft,positionTop){let{colPositions,rowPositions}=this;let col=colPositions.leftToIndex(positionLeft);let row=rowPositions.topToIndex(positionTop);if(row!=null&&col!=null){let cell=this.props.cells[row][col];return{dateProfile:this.props.dateProfile,dateSpan:Object.assign({range:this.getCellRange(row,col),allDay:true},cell.extraDateSpan),dayEl:this.getCellEl(row,col),rect:{left:colPositions.lefts[col],right:colPositions.rights[col],top:rowPositions.tops[row],bottom:rowPositions.bottoms[row]},layer:0}}return null}getCellEl(row,col){return this.rowRefs.currentMap[row].getCellEls()[col]}getCellRange(row,col){let start=this.props.cells[row][col].date;let end=addDays(start,1);return{start:start,end:end}}}function isSegAllDay(seg){return seg.eventRange.def.allDay}class Table extends DateComponent{constructor(){super(...arguments);this.elRef=d();this.needsScrollReset=false}render(){let{props}=this;let{dayMaxEventRows,dayMaxEvents,expandRows}=props;let limitViaBalanced=dayMaxEvents===true||dayMaxEventRows===true;if(limitViaBalanced&&!expandRows){limitViaBalanced=false;dayMaxEventRows=null;dayMaxEvents=null}let classNames=["fc-daygrid-body",limitViaBalanced?"fc-daygrid-body-balanced":"fc-daygrid-body-unbalanced",expandRows?"":"fc-daygrid-body-natural"];return y("div",{ref:this.elRef,className:classNames.join(" "),style:{width:props.clientWidth,minWidth:props.tableMinWidth}},y("table",{role:"presentation",className:"fc-scrollgrid-sync-table",style:{width:props.clientWidth,minWidth:props.tableMinWidth,height:expandRows?props.clientHeight:""}},props.colGroupNode,y("tbody",{role:"presentation"},y(TableRows,{dateProfile:props.dateProfile,cells:props.cells,renderRowIntro:props.renderRowIntro,showWeekNumbers:props.showWeekNumbers,clientWidth:props.clientWidth,clientHeight:props.clientHeight,businessHourSegs:props.businessHourSegs,bgEventSegs:props.bgEventSegs,fgEventSegs:props.fgEventSegs,dateSelectionSegs:props.dateSelectionSegs,eventSelection:props.eventSelection,eventDrag:props.eventDrag,eventResize:props.eventResize,dayMaxEvents:dayMaxEvents,dayMaxEventRows:dayMaxEventRows,forPrint:props.forPrint,isHitComboAllowed:props.isHitComboAllowed}))))}componentDidMount(){this.requestScrollReset()}componentDidUpdate(prevProps){if(prevProps.dateProfile!==this.props.dateProfile){this.requestScrollReset()}else{this.flushScrollReset()}}requestScrollReset(){this.needsScrollReset=true;this.flushScrollReset()}flushScrollReset(){if(this.needsScrollReset&&this.props.clientWidth){const subjectEl=getScrollSubjectEl(this.elRef.current,this.props.dateProfile);if(subjectEl){const originEl=subjectEl.closest(".fc-daygrid-body");const scrollEl=originEl.closest(".fc-scroller");const scrollTop=subjectEl.getBoundingClientRect().top-originEl.getBoundingClientRect().top;scrollEl.scrollTop=scrollTop?scrollTop+1:0}this.needsScrollReset=false}}}function getScrollSubjectEl(containerEl,dateProfile){let el;if(dateProfile.currentRangeUnit.match(/year|month/)){el=containerEl.querySelector(`[data-date="${formatIsoMonthStr(dateProfile.currentDate)}-01"]`)}if(!el){el=containerEl.querySelector(`[data-date="${formatDayString(dateProfile.currentDate)}"]`)}return el}class DayTableSlicer extends Slicer{constructor(){super(...arguments);this.forceDayIfListItem=true}sliceRange(dateRange,dayTableModel){return dayTableModel.sliceRange(dateRange)}}class DayTable extends DateComponent{constructor(){super(...arguments);this.slicer=new DayTableSlicer;this.tableRef=d()}render(){let{props,context}=this;return y(Table,Object.assign({ref:this.tableRef},this.slicer.sliceProps(props,props.dateProfile,props.nextDayThreshold,context,props.dayTableModel),{dateProfile:props.dateProfile,cells:props.dayTableModel.cells,colGroupNode:props.colGroupNode,tableMinWidth:props.tableMinWidth,renderRowIntro:props.renderRowIntro,dayMaxEvents:props.dayMaxEvents,dayMaxEventRows:props.dayMaxEventRows,showWeekNumbers:props.showWeekNumbers,expandRows:props.expandRows,headerAlignElRef:props.headerAlignElRef,clientWidth:props.clientWidth,clientHeight:props.clientHeight,forPrint:props.forPrint}))}}class DayTableView extends TableView{constructor(){super(...arguments);this.buildDayTableModel=memoize(buildDayTableModel);this.headerRef=d();this.tableRef=d()}render(){let{options,dateProfileGenerator}=this.context;let{props}=this;let dayTableModel=this.buildDayTableModel(props.dateProfile,dateProfileGenerator);let headerContent=options.dayHeaders&&y(DayHeader,{ref:this.headerRef,dateProfile:props.dateProfile,dates:dayTableModel.headerDates,datesRepDistinctDays:dayTableModel.rowCnt===1});let bodyContent=contentArg=>y(DayTable,{ref:this.tableRef,dateProfile:props.dateProfile,dayTableModel:dayTableModel,businessHours:props.businessHours,dateSelection:props.dateSelection,eventStore:props.eventStore,eventUiBases:props.eventUiBases,eventSelection:props.eventSelection,eventDrag:props.eventDrag,eventResize:props.eventResize,nextDayThreshold:options.nextDayThreshold,colGroupNode:contentArg.tableColGroupNode,tableMinWidth:contentArg.tableMinWidth,dayMaxEvents:options.dayMaxEvents,dayMaxEventRows:options.dayMaxEventRows,showWeekNumbers:options.weekNumbers,expandRows:!props.isHeightAuto,headerAlignElRef:this.headerElRef,clientWidth:contentArg.clientWidth,clientHeight:contentArg.clientHeight,forPrint:props.forPrint});return options.dayMinWidth?this.renderHScrollLayout(headerContent,bodyContent,dayTableModel.colCnt,options.dayMinWidth):this.renderSimpleLayout(headerContent,bodyContent)}}function buildDayTableModel(dateProfile,dateProfileGenerator){let daySeries=new DaySeriesModel(dateProfile.renderRange,dateProfileGenerator);return new DayTableModel(daySeries,/year|month|week/.test(dateProfile.currentRangeUnit))}class TableDateProfileGenerator extends DateProfileGenerator{buildRenderRange(currentRange,currentRangeUnit,isRangeAllDay){let renderRange=super.buildRenderRange(currentRange,currentRangeUnit,isRangeAllDay);let{props}=this;return buildDayTableRenderRange({currentRange:renderRange,snapToWeek:/^(year|month)$/.test(currentRangeUnit),fixedWeekCount:props.fixedWeekCount,dateEnv:props.dateEnv})}}function buildDayTableRenderRange(props){let{dateEnv,currentRange}=props;let{start,end}=currentRange;let endOfWeek;if(props.snapToWeek){start=dateEnv.startOfWeek(start);endOfWeek=dateEnv.startOfWeek(end);if(endOfWeek.valueOf()!==end.valueOf()){end=addWeeks(endOfWeek,1)}}if(props.fixedWeekCount){let lastMonthRenderStart=dateEnv.startOfWeek(dateEnv.startOfMonth(addDays(currentRange.end,-1)));let rowCnt=Math.ceil(diffWeeks(lastMonthRenderStart,end));end=addWeeks(end,6-rowCnt)}return{start:start,end:end}}var index$3=createPlugin({name:"@fullcalendar/daygrid",initialView:"dayGridMonth",views:{dayGrid:{component:DayTableView,dateProfileGeneratorClass:TableDateProfileGenerator},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},fixedWeekCount:true},dayGridYear:{type:"dayGrid",duration:{years:1}}}});class AllDaySplitter extends Splitter{getKeyInfo(){return{allDay:{},timed:{}}}getKeysForDateSpan(dateSpan){if(dateSpan.allDay){return["allDay"]}return["timed"]}getKeysForEventDef(eventDef){if(!eventDef.allDay){return["timed"]}if(hasBgRendering(eventDef)){return["timed","allDay"]}return["allDay"]}}const DEFAULT_SLAT_LABEL_FORMAT=createFormatter({hour:"numeric",minute:"2-digit",omitZeroMinute:true,meridiem:"short"});function TimeColsAxisCell(props){let classNames=["fc-timegrid-slot","fc-timegrid-slot-label",props.isLabeled?"fc-scrollgrid-shrink":"fc-timegrid-slot-minor"];return y(ViewContextType.Consumer,null,context=>{if(!props.isLabeled){return y("td",{className:classNames.join(" "),"data-time":props.isoTimeStr})}let{dateEnv,options,viewApi}=context;let labelFormat=options.slotLabelFormat==null?DEFAULT_SLAT_LABEL_FORMAT:Array.isArray(options.slotLabelFormat)?createFormatter(options.slotLabelFormat[0]):createFormatter(options.slotLabelFormat);let renderProps={level:0,time:props.time,date:dateEnv.toDate(props.date),view:viewApi,text:dateEnv.format(props.date,labelFormat)};return y(ContentContainer,{elTag:"td",elClasses:classNames,elAttrs:{"data-time":props.isoTimeStr},renderProps:renderProps,generatorName:"slotLabelContent",customGenerator:options.slotLabelContent,defaultGenerator:renderInnerContent$1,classNameGenerator:options.slotLabelClassNames,didMount:options.slotLabelDidMount,willUnmount:options.slotLabelWillUnmount},InnerContent=>y("div",{className:"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame"},y(InnerContent,{elTag:"div",elClasses:["fc-timegrid-slot-label-cushion","fc-scrollgrid-shrink-cushion"]})))})}function renderInnerContent$1(props){return props.text}class TimeBodyAxis extends BaseComponent{render(){return this.props.slatMetas.map(slatMeta=>y("tr",{key:slatMeta.key},y(TimeColsAxisCell,Object.assign({},slatMeta))))}}const DEFAULT_WEEK_NUM_FORMAT=createFormatter({week:"short"});const AUTO_ALL_DAY_MAX_EVENT_ROWS=5;class TimeColsView extends DateComponent{constructor(){super(...arguments);this.allDaySplitter=new AllDaySplitter;this.headerElRef=d();this.rootElRef=d();this.scrollerElRef=d();this.state={slatCoords:null};this.handleScrollTopRequest=scrollTop=>{let scrollerEl=this.scrollerElRef.current;if(scrollerEl){scrollerEl.scrollTop=scrollTop}};this.renderHeadAxis=(rowKey,frameHeight="")=>{let{options}=this.context;let{dateProfile}=this.props;let range=dateProfile.renderRange;let dayCnt=diffDays(range.start,range.end);let navLinkAttrs=dayCnt===1?buildNavLinkAttrs(this.context,range.start,"week"):{};if(options.weekNumbers&&rowKey==="day"){return y(WeekNumberContainer,{elTag:"th",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":true},date:range.start,defaultFormat:DEFAULT_WEEK_NUM_FORMAT},InnerContent=>y("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame","fc-timegrid-axis-frame-liquid"].join(" "),style:{height:frameHeight}},y(InnerContent,{elTag:"a",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"],elAttrs:navLinkAttrs})))}return y("th",{"aria-hidden":true,className:"fc-timegrid-axis"},y("div",{className:"fc-timegrid-axis-frame",style:{height:frameHeight}}))};this.renderTableRowAxis=rowHeight=>{let{options,viewApi}=this.context;let renderProps={text:options.allDayText,view:viewApi};return y(ContentContainer,{elTag:"td",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":true},renderProps:renderProps,generatorName:"allDayContent",customGenerator:options.allDayContent,defaultGenerator:renderAllDayInner$1,classNameGenerator:options.allDayClassNames,didMount:options.allDayDidMount,willUnmount:options.allDayWillUnmount},InnerContent=>y("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame",rowHeight==null?" fc-timegrid-axis-frame-liquid":""].join(" "),style:{height:rowHeight}},y(InnerContent,{elTag:"span",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"]})))};this.handleSlatCoords=slatCoords=>{this.setState({slatCoords:slatCoords})}}renderSimpleLayout(headerRowContent,allDayContent,timeContent){let{context,props}=this;let sections=[];let stickyHeaderDates=getStickyHeaderDates(context.options);if(headerRowContent){sections.push({type:"header",key:"header",isSticky:stickyHeaderDates,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:headerRowContent}})}if(allDayContent){sections.push({type:"body",key:"all-day",chunk:{content:allDayContent}});sections.push({type:"body",key:"all-day-divider",outerContent:y("tr",{role:"presentation",className:"fc-scrollgrid-section"},y("td",{className:"fc-timegrid-divider "+context.theme.getClass("tableCellShaded")}))})}sections.push({type:"body",key:"body",liquid:true,expandRows:Boolean(context.options.expandRows),chunk:{scrollerElRef:this.scrollerElRef,content:timeContent}});return y(ViewContainer,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:context.viewSpec},y(SimpleScrollGrid,{liquid:!props.isHeightAuto&&!props.forPrint,collapsibleWidth:props.forPrint,cols:[{width:"shrink"}],sections:sections}))}renderHScrollLayout(headerRowContent,allDayContent,timeContent,colCnt,dayMinWidth,slatMetas,slatCoords){let ScrollGrid=this.context.pluginHooks.scrollGridImpl;if(!ScrollGrid){throw new Error("No ScrollGrid implementation")}let{context,props}=this;let stickyHeaderDates=!props.forPrint&&getStickyHeaderDates(context.options);let stickyFooterScrollbar=!props.forPrint&&getStickyFooterScrollbar(context.options);let sections=[];if(headerRowContent){sections.push({type:"header",key:"header",isSticky:stickyHeaderDates,syncRowHeights:true,chunks:[{key:"axis",rowContent:arg=>y("tr",{role:"presentation"},this.renderHeadAxis("day",arg.rowSyncHeights[0]))},{key:"cols",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:headerRowContent}]})}if(allDayContent){sections.push({type:"body",key:"all-day",syncRowHeights:true,chunks:[{key:"axis",rowContent:contentArg=>y("tr",{role:"presentation"},this.renderTableRowAxis(contentArg.rowSyncHeights[0]))},{key:"cols",content:allDayContent}]});sections.push({key:"all-day-divider",type:"body",outerContent:y("tr",{role:"presentation",className:"fc-scrollgrid-section"},y("td",{colSpan:2,className:"fc-timegrid-divider "+context.theme.getClass("tableCellShaded")}))})}let isNowIndicator=context.options.nowIndicator;sections.push({type:"body",key:"body",liquid:true,expandRows:Boolean(context.options.expandRows),chunks:[{key:"axis",content:arg=>y("div",{className:"fc-timegrid-axis-chunk"},y("table",{"aria-hidden":true,style:{height:arg.expandRows?arg.clientHeight:""}},arg.tableColGroupNode,y("tbody",null,y(TimeBodyAxis,{slatMetas:slatMetas}))),y("div",{className:"fc-timegrid-now-indicator-container"},y(NowTimer,{unit:isNowIndicator?"minute":"day"},nowDate=>{let nowIndicatorTop=isNowIndicator&&slatCoords&&slatCoords.safeComputeTop(nowDate);if(typeof nowIndicatorTop==="number"){return y(NowIndicatorContainer,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:nowIndicatorTop},isAxis:true,date:nowDate})}return null})))},{key:"cols",scrollerElRef:this.scrollerElRef,content:timeContent}]});if(stickyFooterScrollbar){sections.push({key:"footer",type:"footer",isSticky:true,chunks:[{key:"axis",content:renderScrollShim},{key:"cols",content:renderScrollShim}]})}return y(ViewContainer,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:context.viewSpec},y(ScrollGrid,{liquid:!props.isHeightAuto&&!props.forPrint,forPrint:props.forPrint,collapsibleWidth:false,colGroups:[{width:"shrink",cols:[{width:"shrink"}]},{cols:[{span:colCnt,minWidth:dayMinWidth}]}],sections:sections}))}getAllDayMaxEventProps(){let{dayMaxEvents,dayMaxEventRows}=this.context.options;if(dayMaxEvents===true||dayMaxEventRows===true){dayMaxEvents=undefined;dayMaxEventRows=AUTO_ALL_DAY_MAX_EVENT_ROWS}return{dayMaxEvents:dayMaxEvents,dayMaxEventRows:dayMaxEventRows}}}function renderAllDayInner$1(renderProps){return renderProps.text}class TimeColsSlatsCoords{constructor(positions,dateProfile,slotDuration){this.positions=positions;this.dateProfile=dateProfile;this.slotDuration=slotDuration}safeComputeTop(date){let{dateProfile}=this;if(rangeContainsMarker(dateProfile.currentRange,date)){let startOfDayDate=startOfDay(date);let timeMs=date.valueOf()-startOfDayDate.valueOf();if(timeMs>=asRoughMs(dateProfile.slotMinTime)&&timeMs{let renderProps={time:slatMeta.time,date:context.dateEnv.toDate(slatMeta.date),view:context.viewApi};return y("tr",{key:slatMeta.key,ref:slatElRefs.createRef(slatMeta.key)},props.axis&&y(TimeColsAxisCell,Object.assign({},slatMeta)),y(ContentContainer,{elTag:"td",elClasses:["fc-timegrid-slot","fc-timegrid-slot-lane",!slatMeta.isLabeled&&"fc-timegrid-slot-minor"],elAttrs:{"data-time":slatMeta.isoTimeStr},renderProps:renderProps,generatorName:"slotLaneContent",customGenerator:options.slotLaneContent,classNameGenerator:options.slotLaneClassNames,didMount:options.slotLaneDidMount,willUnmount:options.slotLaneWillUnmount}))}))}}class TimeColsSlats extends BaseComponent{constructor(){super(...arguments);this.rootElRef=d();this.slatElRefs=new RefMap}render(){let{props,context}=this;return y("div",{ref:this.rootElRef,className:"fc-timegrid-slots"},y("table",{"aria-hidden":true,className:context.theme.getClass("table"),style:{minWidth:props.tableMinWidth,width:props.clientWidth,height:props.minHeight}},props.tableColGroupNode,y(TimeColsSlatsBody,{slatElRefs:this.slatElRefs,axis:props.axis,slatMetas:props.slatMetas})))}componentDidMount(){this.updateSizing()}componentDidUpdate(){this.updateSizing()}componentWillUnmount(){if(this.props.onCoords){this.props.onCoords(null)}}updateSizing(){let{context,props}=this;if(props.onCoords&&props.clientWidth!==null){let rootEl=this.rootElRef.current;if(rootEl.offsetHeight){props.onCoords(new TimeColsSlatsCoords(new PositionCache(this.rootElRef.current,collectSlatEls(this.slatElRefs.currentMap,props.slatMetas),false,true),this.props.dateProfile,context.options.slotDuration))}}}}function collectSlatEls(elMap,slatMetas){return slatMetas.map(slatMeta=>elMap[slatMeta.key])}function splitSegsByCol(segs,colCnt){let segsByCol=[];let i;for(i=0;irenderPlainFgSegs(props.hiddenSegs,props),defaultGenerator:renderMoreLinkInner,forceTimed:true},InnerContent=>y(InnerContent,{elTag:"div",elClasses:["fc-timegrid-more-link-inner","fc-sticky"]}))}}function renderMoreLinkInner(props){return props.shortText}function buildPositioning(segInputs,strictOrder,maxStackCnt){let hierarchy=new SegHierarchy;if(strictOrder!=null){hierarchy.strictOrder=strictOrder}if(maxStackCnt!=null){hierarchy.maxStackCnt=maxStackCnt}let hiddenEntries=hierarchy.addSegs(segInputs);let hiddenGroups=groupIntersectingEntries(hiddenEntries);let web=buildWeb(hierarchy);web=stretchWeb(web,1);let segRects=webToRects(web);return{segRects:segRects,hiddenGroups:hiddenGroups}}function buildWeb(hierarchy){const{entriesByLevel}=hierarchy;const buildNode=cacheable((level,lateral)=>level+":"+lateral,(level,lateral)=>{let siblingRange=findNextLevelSegs(hierarchy,level,lateral);let nextLevelRes=buildNodes(siblingRange,buildNode);let entry=entriesByLevel[level][lateral];return[Object.assign(Object.assign({},entry),{nextLevelNodes:nextLevelRes[0]}),entry.thickness+nextLevelRes[1]]});return buildNodes(entriesByLevel.length?{level:0,lateralStart:0,lateralEnd:entriesByLevel[0].length}:null,buildNode)[0]}function buildNodes(siblingRange,buildNode){if(!siblingRange){return[[],0]}let{level,lateralStart,lateralEnd}=siblingRange;let lateral=lateralStart;let pairs=[];while(lateralbuildEntryKey(node),(node,startCoord,prevThickness)=>{let{nextLevelNodes,thickness}=node;let allThickness=thickness+prevThickness;let thicknessFraction=thickness/allThickness;let endCoord;let newChildren=[];if(!nextLevelNodes.length){endCoord=totalThickness}else{for(let childNode of nextLevelNodes){if(endCoord===undefined){let res=stretchNode(childNode,startCoord,allThickness);endCoord=res[0];newChildren.push(res[1])}else{let res=stretchNode(childNode,endCoord,0);newChildren.push(res[1])}}}let newThickness=(endCoord-startCoord)*thicknessFraction;return[endCoord-newThickness,Object.assign(Object.assign({},node),{thickness:newThickness,nextLevelNodes:newChildren})]});return topLevelNodes.map(node=>stretchNode(node,0,0)[1])}function webToRects(topLevelNodes){let rects=[];const processNode=cacheable((node,levelCoord,stackDepth)=>buildEntryKey(node),(node,levelCoord,stackDepth)=>{let rect=Object.assign(Object.assign({},node),{levelCoord:levelCoord,stackDepth:stackDepth,stackForward:0});rects.push(rect);return rect.stackForward=processNodes(node.nextLevelNodes,levelCoord+node.thickness,stackDepth+1)+1});function processNodes(nodes,levelCoord,stackDepth){let stackForward=0;for(let node of nodes){stackForward=Math.max(processNode(node,levelCoord,stackDepth),stackForward)}return stackForward}processNodes(topLevelNodes,0,0);return rects}function cacheable(keyFunc,workFunc){const cache={};return(...args)=>{let key=keyFunc(...args);return key in cache?cache[key]:cache[key]=workFunc(...args)}}function computeSegVCoords(segs,colDate,slatCoords=null,eventMinHeight=0){let vcoords=[];if(slatCoords){for(let i=0;iy("div",{className:"fc-timegrid-col-frame"},y("div",{className:"fc-timegrid-col-bg"},this.renderFillSegs(props.businessHourSegs,"non-business"),this.renderFillSegs(props.bgEventSegs,"bg-event"),this.renderFillSegs(props.dateSelectionSegs,"highlight")),y("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(sortedFgSegs,interactionAffectedInstances,false,false,false)),y("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(mirrorSegs,{},Boolean(props.eventDrag),Boolean(props.eventResize),Boolean(isSelectMirror),"mirror")),y("div",{className:"fc-timegrid-now-indicator-container"},this.renderNowIndicator(props.nowIndicatorSegs)),hasCustomDayCellContent(options)&&y(InnerContent,{elTag:"div",elClasses:["fc-timegrid-col-misc"]})))}renderFgSegs(sortedFgSegs,segIsInvisible,isDragging,isResizing,isDateSelecting,forcedKey){let{props}=this;if(props.forPrint){return renderPlainFgSegs(sortedFgSegs,props)}return this.renderPositionedFgSegs(sortedFgSegs,segIsInvisible,isDragging,isResizing,isDateSelecting,forcedKey)}renderPositionedFgSegs(segs,segIsInvisible,isDragging,isResizing,isDateSelecting,forcedKey){let{eventMaxStack,eventShortHeight,eventOrderStrict,eventMinHeight}=this.context.options;let{date,slatCoords,eventSelection,todayRange,nowDate}=this.props;let isMirror=isDragging||isResizing||isDateSelecting;let segVCoords=computeSegVCoords(segs,date,slatCoords,eventMinHeight);let{segPlacements,hiddenGroups}=computeFgSegPlacements(segs,segVCoords,eventOrderStrict,eventMaxStack);return y(_,null,this.renderHiddenGroups(hiddenGroups,segs),segPlacements.map(segPlacement=>{let{seg,rect}=segPlacement;let instanceId=seg.eventRange.instance.instanceId;let isVisible=isMirror||Boolean(!segIsInvisible[instanceId]&&rect);let vStyle=computeSegVStyle(rect&&rect.span);let hStyle=!isMirror&&rect?this.computeSegHStyle(rect):{left:0,right:0};let isInset=Boolean(rect)&&rect.stackForward>0;let isShort=Boolean(rect)&&rect.span.end-rect.span.start{let positionCss=computeSegVStyle(hiddenGroup.span);let hiddenSegs=compileSegsFromEntries(hiddenGroup.entries,segs);return y(TimeColMoreLink,{key:buildIsoString(computeEarliestSegStart(hiddenSegs)),hiddenSegs:hiddenSegs,top:positionCss.top,bottom:positionCss.bottom,extraDateSpan:extraDateSpan,dateProfile:dateProfile,todayRange:todayRange,nowDate:nowDate,eventSelection:eventSelection,eventDrag:eventDrag,eventResize:eventResize})}))}renderFillSegs(segs,fillType){let{props,context}=this;let segVCoords=computeSegVCoords(segs,props.date,props.slatCoords,context.options.eventMinHeight);let children=segVCoords.map((vcoords,i)=>{let seg=segs[i];return y("div",{key:buildEventRangeKey(seg.eventRange),className:"fc-timegrid-bg-harness",style:computeSegVStyle(vcoords)},fillType==="bg-event"?y(BgEvent,Object.assign({seg:seg},getSegMeta(seg,props.todayRange,props.nowDate))):renderFill(fillType))});return y(_,null,children)}renderNowIndicator(segs){let{slatCoords,date}=this.props;if(!slatCoords){return null}return segs.map((seg,i)=>y(NowIndicatorContainer,{key:i,elClasses:["fc-timegrid-now-indicator-line"],elStyle:{top:slatCoords.computeDateTop(seg.start,date)},isAxis:false,date:date}))}computeSegHStyle(segHCoords){let{isRtl,options}=this.context;let shouldOverlap=options.slotEventOverlap;let nearCoord=segHCoords.levelCoord;let farCoord=segHCoords.levelCoord+segHCoords.thickness;let left;let right;if(shouldOverlap){farCoord=Math.min(1,nearCoord+(farCoord-nearCoord)*2)}if(isRtl){left=1-farCoord;right=nearCoord}else{left=nearCoord;right=1-farCoord}let props={zIndex:segHCoords.stackDepth+1,left:left*100+"%",right:right*100+"%"};if(shouldOverlap&&!segHCoords.stackForward){props[isRtl?"marginLeft":"marginRight"]=10*2}return props}}function renderPlainFgSegs(sortedFgSegs,{todayRange,nowDate,eventSelection,eventDrag,eventResize}){let hiddenInstances=(eventDrag?eventDrag.affectedInstances:null)||(eventResize?eventResize.affectedInstances:null)||{};return y(_,null,sortedFgSegs.map(seg=>{let instanceId=seg.eventRange.instance.instanceId;return y("div",{key:instanceId,style:{visibility:hiddenInstances[instanceId]?"hidden":""}},y(TimeColEvent,Object.assign({seg:seg,isDragging:false,isResizing:false,isDateSelecting:false,isSelected:instanceId===eventSelection,isShort:false},getSegMeta(seg,todayRange,nowDate))))}))}function computeSegVStyle(segVCoords){if(!segVCoords){return{top:"",bottom:""}}return{top:segVCoords.start,bottom:-segVCoords.end}}function compileSegsFromEntries(segEntries,allSegs){return segEntries.map(segEntry=>allSegs[segEntry.index])}class TimeColsContent extends BaseComponent{constructor(){super(...arguments);this.splitFgEventSegs=memoize(splitSegsByCol);this.splitBgEventSegs=memoize(splitSegsByCol);this.splitBusinessHourSegs=memoize(splitSegsByCol);this.splitNowIndicatorSegs=memoize(splitSegsByCol);this.splitDateSelectionSegs=memoize(splitSegsByCol);this.splitEventDrag=memoize(splitInteractionByCol);this.splitEventResize=memoize(splitInteractionByCol);this.rootElRef=d();this.cellElRefs=new RefMap}render(){let{props,context}=this;let nowIndicatorTop=context.options.nowIndicator&&props.slatCoords&&props.slatCoords.safeComputeTop(props.nowDate);let colCnt=props.cells.length;let fgEventSegsByRow=this.splitFgEventSegs(props.fgEventSegs,colCnt);let bgEventSegsByRow=this.splitBgEventSegs(props.bgEventSegs,colCnt);let businessHourSegsByRow=this.splitBusinessHourSegs(props.businessHourSegs,colCnt);let nowIndicatorSegsByRow=this.splitNowIndicatorSegs(props.nowIndicatorSegs,colCnt);let dateSelectionSegsByRow=this.splitDateSelectionSegs(props.dateSelectionSegs,colCnt);let eventDragByRow=this.splitEventDrag(props.eventDrag,colCnt);let eventResizeByRow=this.splitEventResize(props.eventResize,colCnt);return y("div",{className:"fc-timegrid-cols",ref:this.rootElRef},y("table",{role:"presentation",style:{minWidth:props.tableMinWidth,width:props.clientWidth}},props.tableColGroupNode,y("tbody",{role:"presentation"},y("tr",{role:"row"},props.axis&&y("td",{"aria-hidden":true,className:"fc-timegrid-col fc-timegrid-axis"},y("div",{className:"fc-timegrid-col-frame"},y("div",{className:"fc-timegrid-now-indicator-container"},typeof nowIndicatorTop==="number"&&y(NowIndicatorContainer,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:nowIndicatorTop},isAxis:true,date:props.nowDate})))),props.cells.map((cell,i)=>y(TimeCol,{key:cell.key,elRef:this.cellElRefs.createRef(cell.key),dateProfile:props.dateProfile,date:cell.date,nowDate:props.nowDate,todayRange:props.todayRange,extraRenderProps:cell.extraRenderProps,extraDataAttrs:cell.extraDataAttrs,extraClassNames:cell.extraClassNames,extraDateSpan:cell.extraDateSpan,fgEventSegs:fgEventSegsByRow[i],bgEventSegs:bgEventSegsByRow[i],businessHourSegs:businessHourSegsByRow[i],nowIndicatorSegs:nowIndicatorSegsByRow[i],dateSelectionSegs:dateSelectionSegsByRow[i],eventDrag:eventDragByRow[i],eventResize:eventResizeByRow[i],slatCoords:props.slatCoords,eventSelection:props.eventSelection,forPrint:props.forPrint}))))))}componentDidMount(){this.updateCoords()}componentDidUpdate(){this.updateCoords()}updateCoords(){let{props}=this;if(props.onColCoords&&props.clientWidth!==null){props.onColCoords(new PositionCache(this.rootElRef.current,collectCellEls(this.cellElRefs.currentMap,props.cells),true,false))}}}function collectCellEls(elMap,cells){return cells.map(cell=>elMap[cell.key])}class TimeCols extends DateComponent{constructor(){super(...arguments);this.processSlotOptions=memoize(processSlotOptions);this.state={slatCoords:null};this.handleRootEl=el=>{if(el){this.context.registerInteractiveComponent(this,{el:el,isHitComboAllowed:this.props.isHitComboAllowed})}else{this.context.unregisterInteractiveComponent(this)}};this.handleScrollRequest=request=>{let{onScrollTopRequest}=this.props;let{slatCoords}=this.state;if(onScrollTopRequest&&slatCoords){if(request.time){let top=slatCoords.computeTimeTop(request.time);top=Math.ceil(top);if(top){top+=1}onScrollTopRequest(top)}return true}return false};this.handleColCoords=colCoords=>{this.colCoords=colCoords};this.handleSlatCoords=slatCoords=>{this.setState({slatCoords:slatCoords});if(this.props.onSlatCoords){this.props.onSlatCoords(slatCoords)}}}render(){let{props,state}=this;return y("div",{className:"fc-timegrid-body",ref:this.handleRootEl,style:{width:props.clientWidth,minWidth:props.tableMinWidth}},y(TimeColsSlats,{axis:props.axis,dateProfile:props.dateProfile,slatMetas:props.slatMetas,clientWidth:props.clientWidth,minHeight:props.expandRows?props.clientHeight:"",tableMinWidth:props.tableMinWidth,tableColGroupNode:props.axis?props.tableColGroupNode:null,onCoords:this.handleSlatCoords}),y(TimeColsContent,{cells:props.cells,axis:props.axis,dateProfile:props.dateProfile,businessHourSegs:props.businessHourSegs,bgEventSegs:props.bgEventSegs,fgEventSegs:props.fgEventSegs,dateSelectionSegs:props.dateSelectionSegs,eventSelection:props.eventSelection,eventDrag:props.eventDrag,eventResize:props.eventResize,todayRange:props.todayRange,nowDate:props.nowDate,nowIndicatorSegs:props.nowIndicatorSegs,clientWidth:props.clientWidth,tableMinWidth:props.tableMinWidth,tableColGroupNode:props.tableColGroupNode,slatCoords:state.slatCoords,onColCoords:this.handleColCoords,forPrint:props.forPrint}))}componentDidMount(){this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}componentDidUpdate(prevProps){this.scrollResponder.update(prevProps.dateProfile!==this.props.dateProfile)}componentWillUnmount(){this.scrollResponder.detach()}queryHit(positionLeft,positionTop){let{dateEnv,options}=this.context;let{colCoords}=this;let{dateProfile}=this.props;let{slatCoords}=this.state;let{snapDuration,snapsPerSlot}=this.processSlotOptions(this.props.slotDuration,options.snapDuration);let colIndex=colCoords.leftToIndex(positionLeft);let slatIndex=slatCoords.positions.topToIndex(positionTop);if(colIndex!=null&&slatIndex!=null){let cell=this.props.cells[colIndex];let slatTop=slatCoords.positions.tops[slatIndex];let slatHeight=slatCoords.positions.getHeight(slatIndex);let partial=(positionTop-slatTop)/slatHeight;let localSnapIndex=Math.floor(partial*snapsPerSlot);let snapIndex=slatIndex*snapsPerSlot+localSnapIndex;let dayDate=this.props.cells[colIndex].date;let time=addDurations(dateProfile.slotMinTime,multiplyDuration(snapDuration,snapIndex));let start=dateEnv.add(dayDate,time);let end=dateEnv.add(start,snapDuration);return{dateProfile:dateProfile,dateSpan:Object.assign({range:{start:start,end:end},allDay:false},cell.extraDateSpan),dayEl:colCoords.els[colIndex],rect:{left:colCoords.lefts[colIndex],right:colCoords.rights[colIndex],top:slatTop,bottom:slatTop+slatHeight},layer:0}}return null}}function processSlotOptions(slotDuration,snapDurationOverride){let snapDuration=snapDurationOverride||slotDuration;let snapsPerSlot=wholeDivideDurations(slotDuration,snapDuration);if(snapsPerSlot===null){snapDuration=slotDuration;snapsPerSlot=1}return{snapDuration:snapDuration,snapsPerSlot:snapsPerSlot}}class DayTimeColsSlicer extends Slicer{sliceRange(range,dayRanges){let segs=[];for(let col=0;coly(TimeCols,Object.assign({ref:this.timeColsRef},this.slicer.sliceProps(props,dateProfile,null,context,dayRanges),{forPrint:props.forPrint,axis:props.axis,dateProfile:dateProfile,slatMetas:props.slatMetas,slotDuration:props.slotDuration,cells:dayTableModel.cells[0],tableColGroupNode:props.tableColGroupNode,tableMinWidth:props.tableMinWidth,clientWidth:props.clientWidth,clientHeight:props.clientHeight,expandRows:props.expandRows,nowDate:nowDate,nowIndicatorSegs:nowIndicator&&this.slicer.sliceNowDate(nowDate,dateProfile,nextDayThreshold,context,dayRanges),todayRange:todayRange,onScrollTopRequest:props.onScrollTopRequest,onSlatCoords:props.onSlatCoords})))}}function buildDayRanges(dayTableModel,dateProfile,dateEnv){let ranges=[];for(let date of dayTableModel.headerDates){ranges.push({start:dateEnv.add(date,dateProfile.slotMinTime),end:dateEnv.add(date,dateProfile.slotMaxTime)})}return ranges}const STOCK_SUB_DURATIONS=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];function buildSlatMetas(slotMinTime,slotMaxTime,explicitLabelInterval,slotDuration,dateEnv){let dayStart=new Date(0);let slatTime=slotMinTime;let slatIterator=createDuration(0);let labelInterval=explicitLabelInterval||computeLabelInterval(slotDuration);let metas=[];while(asRoughMs(slatTime)=0;i-=1){labelInterval=createDuration(STOCK_SUB_DURATIONS[i]);slotsPerLabel=wholeDivideDurations(labelInterval,slotDuration);if(slotsPerLabel!==null&&slotsPerLabel>1){return labelInterval}}return slotDuration}class DayTimeColsView extends TimeColsView{constructor(){super(...arguments);this.buildTimeColsModel=memoize(buildTimeColsModel);this.buildSlatMetas=memoize(buildSlatMetas)}render(){let{options,dateEnv,dateProfileGenerator}=this.context;let{props}=this;let{dateProfile}=props;let dayTableModel=this.buildTimeColsModel(dateProfile,dateProfileGenerator);let splitProps=this.allDaySplitter.splitProps(props);let slatMetas=this.buildSlatMetas(dateProfile.slotMinTime,dateProfile.slotMaxTime,options.slotLabelInterval,options.slotDuration,dateEnv);let{dayMinWidth}=options;let hasAttachedAxis=!dayMinWidth;let hasDetachedAxis=dayMinWidth;let headerContent=options.dayHeaders&&y(DayHeader,{dates:dayTableModel.headerDates,dateProfile:dateProfile,datesRepDistinctDays:true,renderIntro:hasAttachedAxis?this.renderHeadAxis:null});let allDayContent=options.allDaySlot!==false&&(contentArg=>y(DayTable,Object.assign({},splitProps.allDay,{dateProfile:dateProfile,dayTableModel:dayTableModel,nextDayThreshold:options.nextDayThreshold,tableMinWidth:contentArg.tableMinWidth,colGroupNode:contentArg.tableColGroupNode,renderRowIntro:hasAttachedAxis?this.renderTableRowAxis:null,showWeekNumbers:false,expandRows:false,headerAlignElRef:this.headerElRef,clientWidth:contentArg.clientWidth,clientHeight:contentArg.clientHeight,forPrint:props.forPrint},this.getAllDayMaxEventProps())));let timeGridContent=contentArg=>y(DayTimeCols,Object.assign({},splitProps.timed,{dayTableModel:dayTableModel,dateProfile:dateProfile,axis:hasAttachedAxis,slotDuration:options.slotDuration,slatMetas:slatMetas,forPrint:props.forPrint,tableColGroupNode:contentArg.tableColGroupNode,tableMinWidth:contentArg.tableMinWidth,clientWidth:contentArg.clientWidth,clientHeight:contentArg.clientHeight,onSlatCoords:this.handleSlatCoords,expandRows:contentArg.expandRows,onScrollTopRequest:this.handleScrollTopRequest}));return hasDetachedAxis?this.renderHScrollLayout(headerContent,allDayContent,timeGridContent,dayTableModel.colCnt,dayMinWidth,slatMetas,this.state.slatCoords):this.renderSimpleLayout(headerContent,allDayContent,timeGridContent)}}function buildTimeColsModel(dateProfile,dateProfileGenerator){let daySeries=new DaySeriesModel(dateProfile.renderRange,dateProfileGenerator);return new DayTableModel(daySeries,false)}const OPTION_REFINERS$2={allDaySlot:Boolean};var index$2=createPlugin({name:"@fullcalendar/timegrid",initialView:"timeGridWeek",optionRefiners:OPTION_REFINERS$2,views:{timeGrid:{component:DayTimeColsView,usesMinMaxTime:true,allDaySlot:true,slotDuration:"00:30:00",slotEventOverlap:true},timeGridDay:{type:"timeGrid",duration:{days:1}},timeGridWeek:{type:"timeGrid",duration:{weeks:1}}}});class ListViewHeaderRow extends BaseComponent{constructor(){super(...arguments);this.state={textId:getUniqueDomId()}}render(){let{theme,dateEnv,options,viewApi}=this.context;let{cellId,dayDate,todayRange}=this.props;let{textId}=this.state;let dayMeta=getDateMeta(dayDate,todayRange);let text=options.listDayFormat?dateEnv.format(dayDate,options.listDayFormat):"";let sideText=options.listDaySideFormat?dateEnv.format(dayDate,options.listDaySideFormat):"";let renderProps=Object.assign({date:dateEnv.toDate(dayDate),view:viewApi,textId:textId,text:text,sideText:sideText,navLinkAttrs:buildNavLinkAttrs(this.context,dayDate),sideNavLinkAttrs:buildNavLinkAttrs(this.context,dayDate,"day",false)},dayMeta);return y(ContentContainer,{elTag:"tr",elClasses:["fc-list-day",...getDayClassNames(dayMeta,theme)],elAttrs:{"data-date":formatDayString(dayDate)},renderProps:renderProps,generatorName:"dayHeaderContent",customGenerator:options.dayHeaderContent,defaultGenerator:renderInnerContent,classNameGenerator:options.dayHeaderClassNames,didMount:options.dayHeaderDidMount,willUnmount:options.dayHeaderWillUnmount},InnerContent=>y("th",{scope:"colgroup",colSpan:3,id:cellId,"aria-labelledby":textId},y(InnerContent,{elTag:"div",elClasses:["fc-list-day-cushion",theme.getClass("tableCellShaded")]})))}}function renderInnerContent(props){return y(_,null,props.text&&y("a",Object.assign({id:props.textId,className:"fc-list-day-text"},props.navLinkAttrs),props.text),props.sideText&&y("a",Object.assign({"aria-hidden":true,className:"fc-list-day-side-text"},props.sideNavLinkAttrs),props.sideText))}const DEFAULT_TIME_FORMAT=createFormatter({hour:"numeric",minute:"2-digit",meridiem:"short"});class ListViewEventRow extends BaseComponent{render(){let{props,context}=this;let{options}=context;let{seg,timeHeaderId,eventHeaderId,dateHeaderId}=props;let timeFormat=options.eventTimeFormat||DEFAULT_TIME_FORMAT;return y(EventContainer,Object.assign({},props,{elTag:"tr",elClasses:["fc-list-event",seg.eventRange.def.url&&"fc-event-forced-url"],defaultGenerator:()=>renderEventInnerContent(seg,context),seg:seg,timeText:"",disableDragging:true,disableResizing:true}),(InnerContent,eventContentArg)=>y(_,null,buildTimeContent(seg,timeFormat,context,timeHeaderId,dateHeaderId),y("td",{"aria-hidden":true,className:"fc-list-event-graphic"},y("span",{className:"fc-list-event-dot",style:{borderColor:eventContentArg.borderColor||eventContentArg.backgroundColor}})),y(InnerContent,{elTag:"td",elClasses:["fc-list-event-title"],elAttrs:{headers:`${eventHeaderId} ${dateHeaderId}`}})))}}function renderEventInnerContent(seg,context){let interactiveAttrs=getSegAnchorAttrs(seg,context);return y("a",Object.assign({},interactiveAttrs),seg.eventRange.def.title)}function buildTimeContent(seg,timeFormat,context,timeHeaderId,dateHeaderId){let{options}=context;if(options.displayEventTime!==false){let eventDef=seg.eventRange.def;let eventInstance=seg.eventRange.instance;let doAllDay=false;let timeText;if(eventDef.allDay){doAllDay=true}else if(isMultiDayRange(seg.eventRange.range)){if(seg.isStart){timeText=buildSegTimeText(seg,timeFormat,context,null,null,eventInstance.range.start,seg.end)}else if(seg.isEnd){timeText=buildSegTimeText(seg,timeFormat,context,null,null,seg.start,eventInstance.range.end)}else{doAllDay=true}}else{timeText=buildSegTimeText(seg,timeFormat,context)}if(doAllDay){let renderProps={text:context.options.allDayText,view:context.viewApi};return y(ContentContainer,{elTag:"td",elClasses:["fc-list-event-time"],elAttrs:{headers:`${timeHeaderId} ${dateHeaderId}`},renderProps:renderProps,generatorName:"allDayContent",customGenerator:options.allDayContent,defaultGenerator:renderAllDayInner,classNameGenerator:options.allDayClassNames,didMount:options.allDayDidMount,willUnmount:options.allDayWillUnmount})}return y("td",{className:"fc-list-event-time"},timeText)}return null}function renderAllDayInner(renderProps){return renderProps.text}class ListView extends DateComponent{constructor(){super(...arguments);this.computeDateVars=memoize(computeDateVars);this.eventStoreToSegs=memoize(this._eventStoreToSegs);this.state={timeHeaderId:getUniqueDomId(),eventHeaderId:getUniqueDomId(),dateHeaderIdRoot:getUniqueDomId()};this.setRootEl=rootEl=>{if(rootEl){this.context.registerInteractiveComponent(this,{el:rootEl})}else{this.context.unregisterInteractiveComponent(this)}}}render(){let{props,context}=this;let{dayDates,dayRanges}=this.computeDateVars(props.dateProfile);let eventSegs=this.eventStoreToSegs(props.eventStore,props.eventUiBases,dayRanges);return y(ViewContainer,{elRef:this.setRootEl,elClasses:["fc-list",context.theme.getClass("table"),context.options.stickyHeaderDates!==false?"fc-list-sticky":""],viewSpec:context.viewSpec},y(Scroller,{liquid:!props.isHeightAuto,overflowX:props.isHeightAuto?"visible":"hidden",overflowY:props.isHeightAuto?"visible":"auto"},eventSegs.length>0?this.renderSegList(eventSegs,dayDates):this.renderEmptyMessage()))}renderEmptyMessage(){let{options,viewApi}=this.context;let renderProps={text:options.noEventsText,view:viewApi};return y(ContentContainer,{elTag:"div",elClasses:["fc-list-empty"],renderProps:renderProps,generatorName:"noEventsContent",customGenerator:options.noEventsContent,defaultGenerator:renderNoEventsInner,classNameGenerator:options.noEventsClassNames,didMount:options.noEventsDidMount,willUnmount:options.noEventsWillUnmount},InnerContent=>y(InnerContent,{elTag:"div",elClasses:["fc-list-empty-cushion"]}))}renderSegList(allSegs,dayDates){let{theme,options}=this.context;let{timeHeaderId,eventHeaderId,dateHeaderIdRoot}=this.state;let segsByDay=groupSegsByDay(allSegs);return y(NowTimer,{unit:"day"},(nowDate,todayRange)=>{let innerNodes=[];for(let dayIndex=0;dayIndex{if(isForced){this.updateSize()}}}render(){const{context,props,state}=this;const{options}=context;const{clientWidth,clientHeight}=state;const monthHPadding=state.monthHPadding||0;const colCount=Math.min(clientWidth!=null?Math.floor(clientWidth/(options.multiMonthMinWidth+monthHPadding)):1,options.multiMonthMaxColumns)||1;const monthWidthPct=100/colCount+"%";const monthTableWidth=clientWidth==null?null:clientWidth/colCount-monthHPadding;const isLegitSingleCol=clientWidth!=null&&colCount===1;const monthDateProfiles=this.splitDateProfileByMonth(context.dateProfileGenerator,props.dateProfile,context.dateEnv,isLegitSingleCol?false:options.fixedWeekCount,options.showNonCurrentDates);const monthTitleFormat=this.buildMonthFormat(options.multiMonthTitleFormat,monthDateProfiles);const rootClassNames=["fc-multimonth",isLegitSingleCol?"fc-multimonth-singlecol":"fc-multimonth-multicol",monthTableWidth!=null&&monthTableWidth<400?"fc-multimonth-compact":"",props.isHeightAuto?"":"fc-scroller"];return y(ViewContainer,{elRef:this.scrollElRef,elClasses:rootClassNames,viewSpec:context.viewSpec},monthDateProfiles.map((monthDateProfile,i)=>{const monthStr=formatIsoMonthStr(monthDateProfile.currentRange.start);return y(SingleMonth,Object.assign({},props,{key:monthStr,isoDateStr:monthStr,elRef:i===0?this.firstMonthElRef:undefined,titleFormat:monthTitleFormat,dateProfile:monthDateProfile,width:monthWidthPct,tableWidth:monthTableWidth,clientWidth:clientWidth,clientHeight:clientHeight}))}))}componentDidMount(){this.updateSize();this.context.addResizeHandler(this.handleSizing);this.requestScrollReset()}componentDidUpdate(prevProps){if(!isPropsEqual(prevProps,this.props)){this.handleSizing(false)}if(prevProps.dateProfile!==this.props.dateProfile){this.requestScrollReset()}else{this.flushScrollReset()}}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}updateSize(){const scrollEl=this.scrollElRef.current;const firstMonthEl=this.firstMonthElRef.current;if(scrollEl){this.setState({clientWidth:scrollEl.clientWidth,clientHeight:scrollEl.clientHeight})}if(firstMonthEl&&scrollEl){if(this.state.monthHPadding==null){this.setState({monthHPadding:scrollEl.clientWidth-firstMonthEl.firstChild.offsetWidth})}}}requestScrollReset(){this.needsScrollReset=true;this.flushScrollReset()}flushScrollReset(){if(this.needsScrollReset&&this.state.monthHPadding!=null){const{currentDate}=this.props.dateProfile;const scrollEl=this.scrollElRef.current;const monthEl=scrollEl.querySelector(`[data-date="${formatIsoMonthStr(currentDate)}"]`);scrollEl.scrollTop=monthEl.getBoundingClientRect().top-this.firstMonthElRef.current.getBoundingClientRect().top;this.needsScrollReset=false}}shouldComponentUpdate(){return true}}const oneMonthDuration=createDuration(1,"month");function splitDateProfileByMonth(dateProfileGenerator,dateProfile,dateEnv,fixedWeekCount,showNonCurrentDates){const{start,end}=dateProfile.currentRange;let monthStart=start;const monthDateProfiles=[];while(monthStart.valueOf()