@fullcalendar/interaction 6.0.0 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.global.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /*!
2
- FullCalendar Interaction Plugin v6.0.0
2
+ FullCalendar Interaction Plugin v6.0.2
3
3
  Docs & License: https://fullcalendar.io/docs/editable
4
4
  (c) 2022 Adam Shaw
5
5
  */
6
- FullCalendar.Interaction = (function (exports, internal, core) {
6
+ FullCalendar.Interaction = (function (exports, core, internal) {
7
7
  'use strict';
8
8
 
9
9
  internal.config.touchMouseIgnoreWait = 500;
@@ -2101,7 +2101,7 @@ FullCalendar.Interaction = (function (exports, internal, core) {
2101
2101
  listenerRefiners: LISTENER_REFINERS,
2102
2102
  });
2103
2103
 
2104
- internal.globalPlugins.push(plugin);
2104
+ core.globalPlugins.push(plugin);
2105
2105
 
2106
2106
  exports.Draggable = ExternalDraggable;
2107
2107
  exports.ThirdPartyDraggable = ThirdPartyDraggable;
@@ -2111,4 +2111,4 @@ FullCalendar.Interaction = (function (exports, internal, core) {
2111
2111
 
2112
2112
  return exports;
2113
2113
 
2114
- })({}, FullCalendar.Internal, FullCalendar);
2114
+ })({}, FullCalendar, FullCalendar.Internal);
@@ -1,6 +1,6 @@
1
1
  /*!
2
- FullCalendar Interaction Plugin v6.0.0
2
+ FullCalendar Interaction Plugin v6.0.2
3
3
  Docs & License: https://fullcalendar.io/docs/editable
4
4
  (c) 2022 Adam Shaw
5
5
  */
6
- FullCalendar.Interaction=function(t,e,i){"use strict";e.config.touchMouseIgnoreWait=500;let n=0,s=0,r=!1;class o{constructor(t){this.subjectEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=t=>{if(!this.shouldIgnoreMouse()&&function(t){return 0===t.button&&!t.ctrlKey}(t)&&this.tryStart(t)){let e=this.createEventFromMouse(t,!0);this.emitter.trigger("pointerdown",e),this.initScrollWatch(e),this.shouldIgnoreMove||document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)}},this.handleMouseMove=t=>{let e=this.createEventFromMouse(t);this.recordCoords(e),this.emitter.trigger("pointermove",e)},this.handleMouseUp=t=>{document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),this.emitter.trigger("pointerup",this.createEventFromMouse(t)),this.cleanup()},this.handleTouchStart=t=>{if(this.tryStart(t)){this.isTouchDragging=!0;let e=this.createEventFromTouch(t,!0);this.emitter.trigger("pointerdown",e),this.initScrollWatch(e);let i=t.target;this.shouldIgnoreMove||i.addEventListener("touchmove",this.handleTouchMove),i.addEventListener("touchend",this.handleTouchEnd),i.addEventListener("touchcancel",this.handleTouchEnd),window.addEventListener("scroll",this.handleTouchScroll,!0)}},this.handleTouchMove=t=>{let e=this.createEventFromTouch(t);this.recordCoords(e),this.emitter.trigger("pointermove",e)},this.handleTouchEnd=t=>{if(this.isDragging){let i=t.target;i.removeEventListener("touchmove",this.handleTouchMove),i.removeEventListener("touchend",this.handleTouchEnd),i.removeEventListener("touchcancel",this.handleTouchEnd),window.removeEventListener("scroll",this.handleTouchScroll,!0),this.emitter.trigger("pointerup",this.createEventFromTouch(t)),this.cleanup(),this.isTouchDragging=!1,n+=1,setTimeout(()=>{n-=1},e.config.touchMouseIgnoreWait)}},this.handleTouchScroll=()=>{this.wasTouchScroll=!0},this.handleScroll=t=>{if(!this.shouldIgnoreMove){let e=window.pageXOffset-this.prevScrollX+this.prevPageX,i=window.pageYOffset-this.prevScrollY+this.prevPageY;this.emitter.trigger("pointermove",{origEvent:t,isTouch:this.isTouchDragging,subjectEl:this.subjectEl,pageX:e,pageY:i,deltaX:e-this.origPageX,deltaY:i-this.origPageY})}},this.containerEl=t,this.emitter=new e.Emitter,t.addEventListener("mousedown",this.handleMouseDown),t.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),s+=1,1===s&&window.addEventListener("touchmove",l,{passive:!1})}destroy(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),s-=1,s||window.removeEventListener("touchmove",l,{passive:!1})}tryStart(t){let i=this.querySubjectEl(t),n=t.target;return!(!i||this.handleSelector&&!e.elementClosest(n,this.handleSelector))&&(this.subjectEl=i,this.isDragging=!0,this.wasTouchScroll=!1,!0)}cleanup(){r=!1,this.isDragging=!1,this.subjectEl=null,this.destroyScrollWatch()}querySubjectEl(t){return this.selector?e.elementClosest(t.target,this.selector):this.containerEl}shouldIgnoreMouse(){return n||this.isTouchDragging}cancelTouchScroll(){this.isDragging&&(r=!0)}initScrollWatch(t){this.shouldWatchScroll&&(this.recordCoords(t),window.addEventListener("scroll",this.handleScroll,!0))}recordCoords(t){this.shouldWatchScroll&&(this.prevPageX=t.pageX,this.prevPageY=t.pageY,this.prevScrollX=window.pageXOffset,this.prevScrollY=window.pageYOffset)}destroyScrollWatch(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)}createEventFromMouse(t,e){let i=0,n=0;return e?(this.origPageX=t.pageX,this.origPageY=t.pageY):(i=t.pageX-this.origPageX,n=t.pageY-this.origPageY),{origEvent:t,isTouch:!1,subjectEl:this.subjectEl,pageX:t.pageX,pageY:t.pageY,deltaX:i,deltaY:n}}createEventFromTouch(t,e){let i,n,s=t.touches,r=0,o=0;return s&&s.length?(i=s[0].pageX,n=s[0].pageY):(i=t.pageX,n=t.pageY),e?(this.origPageX=i,this.origPageY=n):(r=i-this.origPageX,o=n-this.origPageY),{origEvent:t,isTouch:!0,subjectEl:this.subjectEl,pageX:i,pageY:n,deltaX:r,deltaY:o}}}function l(t){r&&t.preventDefault()}class a{constructor(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}start(t,e,i){this.sourceEl=t,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=e-window.pageXOffset,this.origScreenY=i-window.pageYOffset,this.deltaX=0,this.deltaY=0,this.updateElPosition()}handleMove(t,e){this.deltaX=t-window.pageXOffset-this.origScreenX,this.deltaY=e-window.pageYOffset-this.origScreenY,this.updateElPosition()}setIsVisible(t){t?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=t,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=t)}stop(t,e){let i=()=>{this.cleanup(),e()};t&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(i,this.revertDuration):setTimeout(i,0)}doRevertAnimation(t,i){let n=this.mirrorEl,s=this.sourceEl.getBoundingClientRect();n.style.transition="top "+i+"ms,left "+i+"ms",e.applyStyle(n,{left:s.left,top:s.top}),e.whenTransitionDone(n,()=>{n.style.transition="",t()})}cleanup(){this.mirrorEl&&(e.removeElement(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null}updateElPosition(){this.sourceEl&&this.isVisible&&e.applyStyle(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})}getMirrorEl(){let t=this.sourceElRect,i=this.mirrorEl;return i||(i=this.mirrorEl=this.sourceEl.cloneNode(!0),i.classList.add("fc-unselectable"),i.classList.add("fc-event-dragging"),e.applyStyle(i,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:t.right-t.left,height:t.bottom-t.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(i)),i}}class h extends e.ScrollController{constructor(t,e){super(),this.handleScroll=()=>{this.scrollTop=this.scrollController.getScrollTop(),this.scrollLeft=this.scrollController.getScrollLeft(),this.handleScrollChange()},this.scrollController=t,this.doesListening=e,this.scrollTop=this.origScrollTop=t.getScrollTop(),this.scrollLeft=this.origScrollLeft=t.getScrollLeft(),this.scrollWidth=t.getScrollWidth(),this.scrollHeight=t.getScrollHeight(),this.clientWidth=t.getClientWidth(),this.clientHeight=t.getClientHeight(),this.clientRect=this.computeClientRect(),this.doesListening&&this.getEventTarget().addEventListener("scroll",this.handleScroll)}destroy(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}setScrollTop(t){this.scrollController.setScrollTop(t),this.doesListening||(this.scrollTop=Math.max(Math.min(t,this.getMaxScrollTop()),0),this.handleScrollChange())}setScrollLeft(t){this.scrollController.setScrollLeft(t),this.doesListening||(this.scrollLeft=Math.max(Math.min(t,this.getMaxScrollLeft()),0),this.handleScrollChange())}getClientWidth(){return this.clientWidth}getClientHeight(){return this.clientHeight}getScrollWidth(){return this.scrollWidth}getScrollHeight(){return this.scrollHeight}handleScrollChange(){}}class c extends h{constructor(t,i){super(new e.ElementScrollController(t),i)}getEventTarget(){return this.scrollController.el}computeClientRect(){return e.computeInnerRect(this.scrollController.el)}}class d extends h{constructor(t){super(new e.WindowScrollController,t)}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 g="function"==typeof performance?performance.now:Date.now;class u{constructor(){this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=()=>{if(this.isAnimating){let t=this.computeBestEdge(this.pointerScreenX+window.pageXOffset,this.pointerScreenY+window.pageYOffset);if(t){let e=g();this.handleSide(t,(e-this.msSinceRequest)/1e3),this.requestAnimation(e)}else this.isAnimating=!1}}}start(t,e,i){this.isEnabled&&(this.scrollCaches=this.buildCaches(i),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(t,e))}handleMove(t,e){if(this.isEnabled){let i=t-window.pageXOffset,n=e-window.pageYOffset,s=null===this.pointerScreenY?0:n-this.pointerScreenY,r=null===this.pointerScreenX?0:i-this.pointerScreenX;s<0?this.everMovedUp=!0:s>0&&(this.everMovedDown=!0),r<0?this.everMovedLeft=!0:r>0&&(this.everMovedRight=!0),this.pointerScreenX=i,this.pointerScreenY=n,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(g()))}}stop(){if(this.isEnabled){this.isAnimating=!1;for(let t of this.scrollCaches)t.destroy();this.scrollCaches=null}}requestAnimation(t){this.msSinceRequest=t,requestAnimationFrame(this.animate)}handleSide(t,e){let{scrollCache:i}=t,{edgeThreshold:n}=this,s=n-t.distance,r=s*s/(n*n)*this.maxVelocity*e,o=1;switch(t.name){case"left":o=-1;case"right":i.setScrollLeft(i.getScrollLeft()+r*o);break;case"top":o=-1;case"bottom":i.setScrollTop(i.getScrollTop()+r*o)}}computeBestEdge(t,e){let{edgeThreshold:i}=this,n=null,s=this.scrollCaches||[];for(let r of s){let s=r.clientRect,o=t-s.left,l=s.right-t,a=e-s.top,h=s.bottom-e;o>=0&&l>=0&&a>=0&&h>=0&&(a<=i&&this.everMovedUp&&r.canScrollUp()&&(!n||n.distance>a)&&(n={scrollCache:r,name:"top",distance:a}),h<=i&&this.everMovedDown&&r.canScrollDown()&&(!n||n.distance>h)&&(n={scrollCache:r,name:"bottom",distance:h}),o<=i&&this.everMovedLeft&&r.canScrollLeft()&&(!n||n.distance>o)&&(n={scrollCache:r,name:"left",distance:o}),l<=i&&this.everMovedRight&&r.canScrollRight()&&(!n||n.distance>l)&&(n={scrollCache:r,name:"right",distance:l}))}return n}buildCaches(t){return this.queryScrollEls(t).map(t=>t===window?new d(!1):new c(t,!1))}queryScrollEls(t){let i=[];for(let n of this.scrollQuery)"object"==typeof n?i.push(n):i.push(...Array.prototype.slice.call(e.getElRoot(t).querySelectorAll(n)));return i}}class p extends e.ElementDragging{constructor(t,i){super(t),this.containerEl=t,this.delay=null,this.minDistance=0,this.touchScrollAllowed=!0,this.mirrorNeedsRevert=!1,this.isInteracting=!1,this.isDragging=!1,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,this.delayTimeoutId=null,this.onPointerDown=t=>{this.isDragging||(this.isInteracting=!0,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,e.preventSelection(document.body),e.preventContextMenu(document.body),t.isTouch||t.origEvent.preventDefault(),this.emitter.trigger("pointerdown",t),this.isInteracting&&!this.pointer.shouldIgnoreMove&&(this.mirror.setIsVisible(!1),this.mirror.start(t.subjectEl,t.pageX,t.pageY),this.startDelay(t),this.minDistance||this.handleDistanceSurpassed(t)))},this.onPointerMove=t=>{if(this.isInteracting){if(this.emitter.trigger("pointermove",t),!this.isDistanceSurpassed){let e,i=this.minDistance,{deltaX:n,deltaY:s}=t;e=n*n+s*s,e>=i*i&&this.handleDistanceSurpassed(t)}this.isDragging&&("scroll"!==t.origEvent.type&&(this.mirror.handleMove(t.pageX,t.pageY),this.autoScroller.handleMove(t.pageX,t.pageY)),this.emitter.trigger("dragmove",t))}},this.onPointerUp=t=>{this.isInteracting&&(this.isInteracting=!1,e.allowSelection(document.body),e.allowContextMenu(document.body),this.emitter.trigger("pointerup",t),this.isDragging&&(this.autoScroller.stop(),this.tryStopDrag(t)),this.delayTimeoutId&&(clearTimeout(this.delayTimeoutId),this.delayTimeoutId=null))};let n=this.pointer=new o(t);n.emitter.on("pointerdown",this.onPointerDown),n.emitter.on("pointermove",this.onPointerMove),n.emitter.on("pointerup",this.onPointerUp),i&&(n.selector=i),this.mirror=new a,this.autoScroller=new u}destroy(){this.pointer.destroy(),this.onPointerUp({})}startDelay(t){"number"==typeof this.delay?this.delayTimeoutId=setTimeout(()=>{this.delayTimeoutId=null,this.handleDelayEnd(t)},this.delay):this.handleDelayEnd(t)}handleDelayEnd(t){this.isDelayEnded=!0,this.tryStartDrag(t)}handleDistanceSurpassed(t){this.isDistanceSurpassed=!0,this.tryStartDrag(t)}tryStartDrag(t){this.isDelayEnded&&this.isDistanceSurpassed&&(this.pointer.wasTouchScroll&&!this.touchScrollAllowed||(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(t.pageX,t.pageY,this.containerEl),this.emitter.trigger("dragstart",t),!1===this.touchScrollAllowed&&this.pointer.cancelTouchScroll()))}tryStopDrag(t){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,t))}stopDrag(t){this.isDragging=!1,this.emitter.trigger("dragend",t)}setIgnoreMove(t){this.pointer.shouldIgnoreMove=t}setMirrorIsVisible(t){this.mirror.setIsVisible(t)}setMirrorNeedsRevert(t){this.mirrorNeedsRevert=t}setAutoScrollEnabled(t){this.autoScroller.isEnabled=t}}class v{constructor(t){this.origRect=e.computeRect(t),this.scrollCaches=e.getClippingParents(t).map(t=>new c(t,!0))}destroy(){for(let t of this.scrollCaches)t.destroy()}computeLeft(){let t=this.origRect.left;for(let e of this.scrollCaches)t+=e.origScrollLeft-e.getScrollLeft();return t}computeTop(){let t=this.origRect.top;for(let e of this.scrollCaches)t+=e.origScrollTop-e.getScrollTop();return t}isWithinClipping(t,i){let n={left:t,top:i};for(let t of this.scrollCaches)if(!E(t.getEventTarget())&&!e.pointInsideRect(n,t.clientRect))return!1;return!0}}function E(t){let e=t.tagName;return"HTML"===e||"BODY"===e}class m{constructor(t,i){this.useSubjectCenter=!1,this.requireInitial=!0,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=t=>{let{dragging:e}=this;this.initialHit=null,this.movingHit=null,this.finalHit=null,this.prepareHits(),this.processFirstCoord(t),this.initialHit||!this.requireInitial?(e.setIgnoreMove(!1),this.emitter.trigger("pointerdown",t)):e.setIgnoreMove(!0)},this.handleDragStart=t=>{this.emitter.trigger("dragstart",t),this.handleMove(t,!0)},this.handleDragMove=t=>{this.emitter.trigger("dragmove",t),this.handleMove(t)},this.handlePointerUp=t=>{this.releaseHits(),this.emitter.trigger("pointerup",t)},this.handleDragEnd=t=>{this.movingHit&&this.emitter.trigger("hitupdate",null,!0,t),this.finalHit=this.movingHit,this.movingHit=null,this.emitter.trigger("dragend",t)},this.droppableStore=i,t.emitter.on("pointerdown",this.handlePointerDown),t.emitter.on("dragstart",this.handleDragStart),t.emitter.on("dragmove",this.handleDragMove),t.emitter.on("pointerup",this.handlePointerUp),t.emitter.on("dragend",this.handleDragEnd),this.dragging=t,this.emitter=new e.Emitter}processFirstCoord(t){let i,n={left:t.pageX,top:t.pageY},s=n,r=t.subjectEl;r instanceof HTMLElement&&(i=e.computeRect(r),s=e.constrainPoint(s,i));let o=this.initialHit=this.queryHitForOffset(s.left,s.top);if(o){if(this.useSubjectCenter&&i){let t=e.intersectRects(i,o.rect);t&&(s=e.getRectCenter(t))}this.coordAdjust=e.diffPoints(s,n)}else this.coordAdjust={left:0,top:0}}handleMove(t,e){let i=this.queryHitForOffset(t.pageX+this.coordAdjust.left,t.pageY+this.coordAdjust.top);!e&&S(this.movingHit,i)||(this.movingHit=i,this.emitter.trigger("hitupdate",i,!1,t))}prepareHits(){this.offsetTrackers=e.mapHash(this.droppableStore,t=>(t.component.prepareHits(),new v(t.el)))}releaseHits(){let{offsetTrackers:t}=this;for(let e in t)t[e].destroy();this.offsetTrackers={}}queryHitForOffset(t,i){let{droppableStore:n,offsetTrackers:s}=this,r=null;for(let o in n){let l=n[o].component,a=s[o];if(a&&a.isWithinClipping(t,i)){let n=a.computeLeft(),s=a.computeTop(),h=t-n,c=i-s,{origRect:d}=a,g=d.right-d.left,u=d.bottom-d.top;if(h>=0&&h<g&&c>=0&&c<u){let t=l.queryHit(h,c,g,u);t&&e.rangeContainsRange(t.dateProfile.activeRange,t.dateSpan.range)&&(!r||t.layer>r.layer)&&(t.componentId=o,t.context=l.context,t.rect.left+=n,t.rect.right+=n,t.rect.top+=s,t.rect.bottom+=s,r=t)}}}return r}}function S(t,i){return!t&&!i||Boolean(t)===Boolean(i)&&e.isDateSpansEqual(t.dateSpan,i.dateSpan)}function f(t,e){let i={};for(let n of e.pluginHooks.datePointTransforms)Object.assign(i,n(t,e));var n,s;return Object.assign(i,(n=t,{date:(s=e.dateEnv).toDate(n.range.start),dateStr:s.formatIso(n.range.start,{omitTime:n.allDay}),allDay:n.allDay})),i}class D extends e.Interaction{constructor(t){super(t),this.handlePointerDown=t=>{let{dragging:e}=this,i=t.origEvent.target;e.setIgnoreMove(!this.component.isValidDateDownEl(i))},this.handleDragEnd=t=>{let{component:e}=this,{pointer:i}=this.dragging;if(!i.wasTouchScroll){let{initialHit:i,finalHit:n}=this.hitDragging;if(i&&n&&S(i,n)){let{context:n}=e,s=Object.assign(Object.assign({},f(i.dateSpan,n)),{dayEl:i.dayEl,jsEvent:t.origEvent,view:n.viewApi||n.calendarApi.view});n.emitter.trigger("dateClick",s)}}},this.dragging=new p(t.el),this.dragging.autoScroller.isEnabled=!1;let i=this.hitDragging=new m(this.dragging,e.interactionSettingsToStore(t));i.emitter.on("pointerdown",this.handlePointerDown),i.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}}class y extends e.Interaction{constructor(t){super(t),this.dragSelection=null,this.handlePointerDown=t=>{let{component:e,dragging:i}=this,{options:n}=e.context,s=n.selectable&&e.isValidDateDownEl(t.origEvent.target);i.setIgnoreMove(!s),i.delay=t.isTouch?function(t){let{options:e}=t.context,i=e.selectLongPressDelay;null==i&&(i=e.longPressDelay);return i}(e):null},this.handleDragStart=t=>{this.component.context.calendarApi.unselect(t)},this.handleHitUpdate=(t,i)=>{let{context:n}=this.component,s=null,r=!1;if(t){let i=this.hitDragging.initialHit;t.componentId===i.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(i,t)||(s=function(t,i,n){let s=t.dateSpan,r=i.dateSpan,o=[s.range.start,s.range.end,r.range.start,r.range.end];o.sort(e.compareNumbers);let l={};for(let e of n){let n=e(t,i);if(!1===n)return null;n&&Object.assign(l,n)}return l.range={start:o[0],end:o[3]},l.allDay=s.allDay,l}(i,t,n.pluginHooks.dateSelectionTransformers)),s&&e.isDateSelectionValid(s,t.dateProfile,n)||(r=!0,s=null)}s?n.dispatch({type:"SELECT_DATES",selection:s}):i||n.dispatch({type:"UNSELECT_DATES"}),r?e.disableCursor():e.enableCursor(),i||(this.dragSelection=s)},this.handlePointerUp=t=>{this.dragSelection&&(e.triggerDateSelect(this.dragSelection,t,this.component.context),this.dragSelection=null)};let{component:i}=t,{options:n}=i.context,s=this.dragging=new p(t.el);s.touchScrollAllowed=!1,s.minDistance=n.selectMinDistance||0,s.autoScroller.isEnabled=n.dragScroll;let r=this.hitDragging=new m(this.dragging,e.interactionSettingsToStore(t));r.emitter.on("pointerdown",this.handlePointerDown),r.emitter.on("dragstart",this.handleDragStart),r.emitter.on("hitupdate",this.handleHitUpdate),r.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.dragging.destroy()}}class w extends e.Interaction{constructor(t){super(t),this.subjectEl=null,this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=t=>{let i=t.origEvent.target,{component:n,dragging:s}=this,{mirror:r}=s,{options:o}=n.context,l=n.context;this.subjectEl=t.subjectEl;let a=this.subjectSeg=e.getElSeg(t.subjectEl),h=(this.eventRange=a.eventRange).instance.instanceId;this.relevantEvents=e.getRelevantEvents(l.getCurrentData().eventStore,h),s.minDistance=t.isTouch?0:o.eventDragMinDistance,s.delay=t.isTouch&&h!==n.props.eventSelection?function(t){let{options:e}=t.context,i=e.eventLongPressDelay;null==i&&(i=e.longPressDelay);return i}(n):null,o.fixedMirrorParent?r.parentNode=o.fixedMirrorParent:r.parentNode=e.elementClosest(i,".fc"),r.revertDuration=o.dragRevertDuration;let c=n.isValidSegDownEl(i)&&!e.elementClosest(i,".fc-event-resizer");s.setIgnoreMove(!c),this.isDragging=c&&t.subjectEl.classList.contains("fc-event-draggable")},this.handleDragStart=t=>{let i=this.component.context,n=this.eventRange,s=n.instance.instanceId;t.isTouch?s!==this.component.props.eventSelection&&i.dispatch({type:"SELECT_EVENT",eventInstanceId:s}):i.dispatch({type:"UNSELECT_EVENT"}),this.isDragging&&(i.calendarApi.unselect(t),i.emitter.trigger("eventDragStart",{el:this.subjectEl,event:new e.EventImpl(i,n.def,n.instance),jsEvent:t.origEvent,view:i.viewApi}))},this.handleHitUpdate=(t,i)=>{if(!this.isDragging)return;let n=this.relevantEvents,s=this.hitDragging.initialHit,r=this.component.context,o=null,l=null,a=null,h=!1,c={affectedEvents:n,mutatedEvents:e.createEmptyEventStore(),isEvent:!0};if(t){o=t.context;let i=o.options;r===o||i.editable&&i.droppable?(l=function(t,i,n){let s=t.dateSpan,r=i.dateSpan,o=s.range.start,l=r.range.start,a={};s.allDay!==r.allDay&&(a.allDay=r.allDay,a.hasEnd=i.context.options.allDayMaintainDuration,r.allDay&&(o=e.startOfDay(o)));let h=e.diffDates(o,l,t.context.dateEnv,t.componentId===i.componentId?t.largeUnit:null);h.milliseconds&&(a.allDay=!1);let c={datesDelta:h,standardProps:a};for(let e of n)e(c,t,i);return c}(s,t,o.getCurrentData().pluginHooks.eventDragMutationMassagers),l&&(a=e.applyMutationToEventStore(n,o.getCurrentData().eventUiBases,l,o),c.mutatedEvents=a,e.isInteractionValid(c,t.dateProfile,o)||(h=!0,l=null,a=null,c.mutatedEvents=e.createEmptyEventStore()))):o=null}this.displayDrag(o,c),h?e.disableCursor():e.enableCursor(),i||(r===o&&S(s,t)&&(l=null),this.dragging.setMirrorNeedsRevert(!l),this.dragging.setMirrorIsVisible(!t||!e.getElRoot(this.subjectEl).querySelector(".fc-event-mirror")),this.receivingContext=o,this.validMutation=l,this.mutatedRelevantEvents=a)},this.handlePointerUp=()=>{this.isDragging||this.cleanup()},this.handleDragEnd=t=>{if(this.isDragging){let i=this.component.context,n=i.viewApi,{receivingContext:s,validMutation:r}=this,o=this.eventRange.def,l=this.eventRange.instance,a=new e.EventImpl(i,o,l),h=this.relevantEvents,c=this.mutatedRelevantEvents,{finalHit:d}=this.hitDragging;if(this.clearDrag(),i.emitter.trigger("eventDragStop",{el:this.subjectEl,event:a,jsEvent:t.origEvent,view:n}),r){if(s===i){let s=new e.EventImpl(i,c.defs[o.defId],l?c.instances[l.instanceId]:null);i.dispatch({type:"MERGE_EVENTS",eventStore:c});let d={oldEvent:a,event:s,relatedEvents:e.buildEventApis(c,i,l),revert(){i.dispatch({type:"MERGE_EVENTS",eventStore:h})}},g={};for(let t of i.getCurrentData().pluginHooks.eventDropTransformers)Object.assign(g,t(r,i));i.emitter.trigger("eventDrop",Object.assign(Object.assign(Object.assign({},d),g),{el:t.subjectEl,delta:r.datesDelta,jsEvent:t.origEvent,view:n})),i.emitter.trigger("eventChange",d)}else if(s){let r={event:a,relatedEvents:e.buildEventApis(h,i,l),revert(){i.dispatch({type:"MERGE_EVENTS",eventStore:h})}};i.emitter.trigger("eventLeave",Object.assign(Object.assign({},r),{draggedEl:t.subjectEl,view:n})),i.dispatch({type:"REMOVE_EVENTS",eventStore:h}),i.emitter.trigger("eventRemove",r);let g=c.defs[o.defId],u=c.instances[l.instanceId],p=new e.EventImpl(s,g,u);s.dispatch({type:"MERGE_EVENTS",eventStore:c});let v={event:p,relatedEvents:e.buildEventApis(c,s,u),revert(){s.dispatch({type:"REMOVE_EVENTS",eventStore:c})}};s.emitter.trigger("eventAdd",v),t.isTouch&&s.dispatch({type:"SELECT_EVENT",eventInstanceId:l.instanceId}),s.emitter.trigger("drop",Object.assign(Object.assign({},f(d.dateSpan,s)),{draggedEl:t.subjectEl,jsEvent:t.origEvent,view:d.context.viewApi})),s.emitter.trigger("eventReceive",Object.assign(Object.assign({},v),{draggedEl:t.subjectEl,view:d.context.viewApi}))}}else i.emitter.trigger("_noEventDrop")}this.cleanup()};let{component:i}=this,{options:n}=i.context,s=this.dragging=new p(t.el);s.pointer.selector=w.SELECTOR,s.touchScrollAllowed=!1,s.autoScroller.isEnabled=n.dragScroll;let r=this.hitDragging=new m(this.dragging,e.interactionSettingsStore);r.useSubjectCenter=t.useEventCenter,r.emitter.on("pointerdown",this.handlePointerDown),r.emitter.on("dragstart",this.handleDragStart),r.emitter.on("hitupdate",this.handleHitUpdate),r.emitter.on("pointerup",this.handlePointerUp),r.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}displayDrag(t,i){let n=this.component.context,s=this.receivingContext;s&&s!==t&&(s===n?s.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:i.affectedEvents,mutatedEvents:e.createEmptyEventStore(),isEvent:!0}}):s.dispatch({type:"UNSET_EVENT_DRAG"})),t&&t.dispatch({type:"SET_EVENT_DRAG",state:i})}clearDrag(){let t=this.component.context,{receivingContext:e}=this;e&&e.dispatch({type:"UNSET_EVENT_DRAG"}),t!==e&&t.dispatch({type:"UNSET_EVENT_DRAG"})}cleanup(){this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null}}w.SELECTOR=".fc-event-draggable, .fc-event-resizable";class T extends e.Interaction{constructor(t){super(t),this.draggingSegEl=null,this.draggingSeg=null,this.eventRange=null,this.relevantEvents=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=t=>{let{component:i}=this,n=this.querySegEl(t),s=e.getElSeg(n),r=this.eventRange=s.eventRange;this.dragging.minDistance=i.context.options.eventDragMinDistance,this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(t.origEvent.target)||t.isTouch&&this.component.props.eventSelection!==r.instance.instanceId)},this.handleDragStart=t=>{let{context:i}=this.component,n=this.eventRange;this.relevantEvents=e.getRelevantEvents(i.getCurrentData().eventStore,this.eventRange.instance.instanceId);let s=this.querySegEl(t);this.draggingSegEl=s,this.draggingSeg=e.getElSeg(s),i.calendarApi.unselect(),i.emitter.trigger("eventResizeStart",{el:s,event:new e.EventImpl(i,n.def,n.instance),jsEvent:t.origEvent,view:i.viewApi})},this.handleHitUpdate=(t,i,n)=>{let{context:s}=this.component,r=this.relevantEvents,o=this.hitDragging.initialHit,l=this.eventRange.instance,a=null,h=null,c=!1,d={affectedEvents:r,mutatedEvents:e.createEmptyEventStore(),isEvent:!0};if(t){t.componentId===o.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(o,t)||(a=function(t,i,n,s){let r=t.context.dateEnv,o=t.dateSpan.range.start,l=i.dateSpan.range.start,a=e.diffDates(o,l,r,t.largeUnit);if(n){if(r.add(s.start,a)<s.end)return{startDelta:a}}else if(r.add(s.end,a)>s.start)return{endDelta:a};return null}(o,t,n.subjectEl.classList.contains("fc-event-resizer-start"),l.range))}a&&(h=e.applyMutationToEventStore(r,s.getCurrentData().eventUiBases,a,s),d.mutatedEvents=h,e.isInteractionValid(d,t.dateProfile,s)||(c=!0,a=null,h=null,d.mutatedEvents=null)),h?s.dispatch({type:"SET_EVENT_RESIZE",state:d}):s.dispatch({type:"UNSET_EVENT_RESIZE"}),c?e.disableCursor():e.enableCursor(),i||(a&&S(o,t)&&(a=null),this.validMutation=a,this.mutatedRelevantEvents=h)},this.handleDragEnd=t=>{let{context:i}=this.component,n=this.eventRange.def,s=this.eventRange.instance,r=new e.EventImpl(i,n,s),o=this.relevantEvents,l=this.mutatedRelevantEvents;if(i.emitter.trigger("eventResizeStop",{el:this.draggingSegEl,event:r,jsEvent:t.origEvent,view:i.viewApi}),this.validMutation){let a=new e.EventImpl(i,l.defs[n.defId],s?l.instances[s.instanceId]:null);i.dispatch({type:"MERGE_EVENTS",eventStore:l});let h={oldEvent:r,event:a,relatedEvents:e.buildEventApis(l,i,s),revert(){i.dispatch({type:"MERGE_EVENTS",eventStore:o})}};i.emitter.trigger("eventResize",Object.assign(Object.assign({},h),{el:this.draggingSegEl,startDelta:this.validMutation.startDelta||e.createDuration(0),endDelta:this.validMutation.endDelta||e.createDuration(0),jsEvent:t.origEvent,view:i.viewApi})),i.emitter.trigger("eventChange",h)}else i.emitter.trigger("_noEventResize");this.draggingSeg=null,this.relevantEvents=null,this.validMutation=null};let{component:i}=t,n=this.dragging=new p(t.el);n.pointer.selector=".fc-event-resizer",n.touchScrollAllowed=!1,n.autoScroller.isEnabled=i.context.options.dragScroll;let s=this.hitDragging=new m(this.dragging,e.interactionSettingsToStore(t));s.emitter.on("pointerdown",this.handlePointerDown),s.emitter.on("dragstart",this.handleDragStart),s.emitter.on("hitupdate",this.handleHitUpdate),s.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}querySegEl(t){return e.elementClosest(t.subjectEl,".fc-event")}}const b={fixedMirrorParent:e.identity},M={dateClick:e.identity,eventDragStart:e.identity,eventDragStop:e.identity,eventDrop:e.identity,eventResizeStart:e.identity,eventResizeStop:e.identity,eventResize:e.identity,drop:e.identity,eventReceive:e.identity,eventLeave:e.identity};class C{constructor(t,i){this.receivingContext=null,this.droppableEvent=null,this.suppliedDragMeta=null,this.dragMeta=null,this.handleDragStart=t=>{this.dragMeta=this.buildDragMeta(t.subjectEl)},this.handleHitUpdate=(t,i,n)=>{let{dragging:s}=this.hitDragging,r=null,o=null,l=!1,a={affectedEvents:e.createEmptyEventStore(),mutatedEvents:e.createEmptyEventStore(),isEvent:this.dragMeta.create};t&&(r=t.context,this.canDropElOnCalendar(n.subjectEl,r)&&(o=function(t,i,n){let s=Object.assign({},i.leftoverProps);for(let e of n.pluginHooks.externalDefTransforms)Object.assign(s,e(t,i));let{refined:r,extra:o}=e.refineEventDef(s,n),l=e.parseEventDef(r,o,i.sourceId,t.allDay,n.options.forceEventDuration||Boolean(i.duration),n),a=t.range.start;t.allDay&&i.startTime&&(a=n.dateEnv.add(a,i.startTime));let h=i.duration?n.dateEnv.add(a,i.duration):e.getDefaultEventEnd(t.allDay,a,n),c=e.createEventInstance(l.defId,{start:a,end:h});return{def:l,instance:c}}(t.dateSpan,this.dragMeta,r),a.mutatedEvents=e.eventTupleToStore(o),l=!e.isInteractionValid(a,t.dateProfile,r),l&&(a.mutatedEvents=e.createEmptyEventStore(),o=null))),this.displayDrag(r,a),s.setMirrorIsVisible(i||!o||!document.querySelector(".fc-event-mirror")),l?e.disableCursor():e.enableCursor(),i||(s.setMirrorNeedsRevert(!o),this.receivingContext=r,this.droppableEvent=o)},this.handleDragEnd=t=>{let{receivingContext:i,droppableEvent:n}=this;if(this.clearDrag(),i&&n){let s=this.hitDragging.finalHit,r=s.context.viewApi,o=this.dragMeta;if(i.emitter.trigger("drop",Object.assign(Object.assign({},f(s.dateSpan,i)),{draggedEl:t.subjectEl,jsEvent:t.origEvent,view:r})),o.create){let s=e.eventTupleToStore(n);i.dispatch({type:"MERGE_EVENTS",eventStore:s}),t.isTouch&&i.dispatch({type:"SELECT_EVENT",eventInstanceId:n.instance.instanceId}),i.emitter.trigger("eventReceive",{event:new e.EventImpl(i,n.def,n.instance),relatedEvents:[],revert(){i.dispatch({type:"REMOVE_EVENTS",eventStore:s})},draggedEl:t.subjectEl,view:r})}}this.receivingContext=null,this.droppableEvent=null};let n=this.hitDragging=new m(t,e.interactionSettingsStore);n.requireInitial=!1,n.emitter.on("dragstart",this.handleDragStart),n.emitter.on("hitupdate",this.handleHitUpdate),n.emitter.on("dragend",this.handleDragEnd),this.suppliedDragMeta=i}buildDragMeta(t){return"object"==typeof this.suppliedDragMeta?e.parseDragMeta(this.suppliedDragMeta):"function"==typeof this.suppliedDragMeta?e.parseDragMeta(this.suppliedDragMeta(t)):function(t){let i=function(t,i){let n=e.config.dataAttrPrefix,s=(n?n+"-":"")+i;return t.getAttribute("data-"+s)||""}(t,"event"),n=i?JSON.parse(i):{create:!1};return e.parseDragMeta(n)}(t)}displayDrag(t,e){let i=this.receivingContext;i&&i!==t&&i.dispatch({type:"UNSET_EVENT_DRAG"}),t&&t.dispatch({type:"SET_EVENT_DRAG",state:e})}clearDrag(){this.receivingContext&&this.receivingContext.dispatch({type:"UNSET_EVENT_DRAG"})}canDropElOnCalendar(t,i){let n=i.options.dropAccept;return"function"==typeof n?n.call(i.calendarApi,t):"string"!=typeof n||!n||Boolean(e.elementMatches(t,n))}}e.config.dataAttrPrefix="";class R extends e.ElementDragging{constructor(t){super(t),this.shouldIgnoreMove=!1,this.mirrorSelector="",this.currentMirrorEl=null,this.handlePointerDown=t=>{this.emitter.trigger("pointerdown",t),this.shouldIgnoreMove||this.emitter.trigger("dragstart",t)},this.handlePointerMove=t=>{this.shouldIgnoreMove||this.emitter.trigger("dragmove",t)},this.handlePointerUp=t=>{this.emitter.trigger("pointerup",t),this.shouldIgnoreMove||this.emitter.trigger("dragend",t)};let e=this.pointer=new o(t);e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("pointermove",this.handlePointerMove),e.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.pointer.destroy()}setIgnoreMove(t){this.shouldIgnoreMove=t}setMirrorIsVisible(t){if(t)this.currentMirrorEl&&(this.currentMirrorEl.style.visibility="",this.currentMirrorEl=null);else{let t=this.mirrorSelector?document.querySelector(this.mirrorSelector):null;t&&(this.currentMirrorEl=t,t.style.visibility="hidden")}}}var I=i.createPlugin({name:"@fullcalendar/interaction",componentInteractions:[D,y,w,T],calendarInteractions:[class{constructor(t){this.context=t,this.isRecentPointerDateSelect=!1,this.matchesCancel=!1,this.matchesEvent=!1,this.onSelect=t=>{t.jsEvent&&(this.isRecentPointerDateSelect=!0)},this.onDocumentPointerDown=t=>{let i=this.context.options.unselectCancel,n=e.getEventTargetViaRoot(t.origEvent);this.matchesCancel=!!e.elementClosest(n,i),this.matchesEvent=!!e.elementClosest(n,w.SELECTOR)},this.onDocumentPointerUp=t=>{let{context:e}=this,{documentPointer:i}=this,n=e.getCurrentData();if(!i.wasTouchScroll){if(n.dateSelection&&!this.isRecentPointerDateSelect){let i=e.options.unselectAuto;!i||i&&this.matchesCancel||e.calendarApi.unselect(t)}n.eventSelection&&!this.matchesEvent&&e.dispatch({type:"UNSELECT_EVENT"})}this.isRecentPointerDateSelect=!1};let i=this.documentPointer=new o(document);i.shouldIgnoreMove=!0,i.shouldWatchScroll=!1,i.emitter.on("pointerdown",this.onDocumentPointerDown),i.emitter.on("pointerup",this.onDocumentPointerUp),t.emitter.on("select",this.onSelect)}destroy(){this.context.emitter.off("select",this.onSelect),this.documentPointer.destroy()}}],elementDraggingImpl:p,optionRefiners:b,listenerRefiners:M});return e.globalPlugins.push(I),t.Draggable=class{constructor(t,i={}){this.handlePointerDown=t=>{let{dragging:i}=this,{minDistance:n,longPressDelay:s}=this.settings;i.minDistance=null!=n?n:t.isTouch?0:e.BASE_OPTION_DEFAULTS.eventDragMinDistance,i.delay=t.isTouch?null!=s?s:e.BASE_OPTION_DEFAULTS.longPressDelay:0},this.handleDragStart=t=>{t.isTouch&&this.dragging.delay&&t.subjectEl.classList.contains("fc-event")&&this.dragging.mirror.getMirrorEl().classList.add("fc-event-selected")},this.settings=i;let n=this.dragging=new p(t);n.touchScrollAllowed=!1,null!=i.itemSelector&&(n.pointer.selector=i.itemSelector),null!=i.appendTo&&(n.mirror.parentNode=i.appendTo),n.emitter.on("pointerdown",this.handlePointerDown),n.emitter.on("dragstart",this.handleDragStart),new C(n,i.eventData)}destroy(){this.dragging.destroy()}},t.ThirdPartyDraggable=class{constructor(t,e){let i=document;t===document||t instanceof Element?(i=t,e=e||{}):e=t||{};let n=this.dragging=new R(i);"string"==typeof e.itemSelector?n.pointer.selector=e.itemSelector:i===document&&(n.pointer.selector="[data-event]"),"string"==typeof e.mirrorSelector&&(n.mirrorSelector=e.mirrorSelector),new C(n,e.eventData)}destroy(){this.dragging.destroy()}},t.default=I,Object.defineProperty(t,"__esModule",{value:!0}),t}({},FullCalendar.Internal,FullCalendar);
6
+ FullCalendar.Interaction=function(t,e,i){"use strict";i.config.touchMouseIgnoreWait=500;let n=0,s=0,r=!1;class o{constructor(t){this.subjectEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=t=>{if(!this.shouldIgnoreMouse()&&function(t){return 0===t.button&&!t.ctrlKey}(t)&&this.tryStart(t)){let e=this.createEventFromMouse(t,!0);this.emitter.trigger("pointerdown",e),this.initScrollWatch(e),this.shouldIgnoreMove||document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)}},this.handleMouseMove=t=>{let e=this.createEventFromMouse(t);this.recordCoords(e),this.emitter.trigger("pointermove",e)},this.handleMouseUp=t=>{document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),this.emitter.trigger("pointerup",this.createEventFromMouse(t)),this.cleanup()},this.handleTouchStart=t=>{if(this.tryStart(t)){this.isTouchDragging=!0;let e=this.createEventFromTouch(t,!0);this.emitter.trigger("pointerdown",e),this.initScrollWatch(e);let i=t.target;this.shouldIgnoreMove||i.addEventListener("touchmove",this.handleTouchMove),i.addEventListener("touchend",this.handleTouchEnd),i.addEventListener("touchcancel",this.handleTouchEnd),window.addEventListener("scroll",this.handleTouchScroll,!0)}},this.handleTouchMove=t=>{let e=this.createEventFromTouch(t);this.recordCoords(e),this.emitter.trigger("pointermove",e)},this.handleTouchEnd=t=>{if(this.isDragging){let e=t.target;e.removeEventListener("touchmove",this.handleTouchMove),e.removeEventListener("touchend",this.handleTouchEnd),e.removeEventListener("touchcancel",this.handleTouchEnd),window.removeEventListener("scroll",this.handleTouchScroll,!0),this.emitter.trigger("pointerup",this.createEventFromTouch(t)),this.cleanup(),this.isTouchDragging=!1,n+=1,setTimeout(()=>{n-=1},i.config.touchMouseIgnoreWait)}},this.handleTouchScroll=()=>{this.wasTouchScroll=!0},this.handleScroll=t=>{if(!this.shouldIgnoreMove){let e=window.pageXOffset-this.prevScrollX+this.prevPageX,i=window.pageYOffset-this.prevScrollY+this.prevPageY;this.emitter.trigger("pointermove",{origEvent:t,isTouch:this.isTouchDragging,subjectEl:this.subjectEl,pageX:e,pageY:i,deltaX:e-this.origPageX,deltaY:i-this.origPageY})}},this.containerEl=t,this.emitter=new i.Emitter,t.addEventListener("mousedown",this.handleMouseDown),t.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),s+=1,1===s&&window.addEventListener("touchmove",l,{passive:!1})}destroy(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),s-=1,s||window.removeEventListener("touchmove",l,{passive:!1})}tryStart(t){let e=this.querySubjectEl(t),n=t.target;return!(!e||this.handleSelector&&!i.elementClosest(n,this.handleSelector))&&(this.subjectEl=e,this.isDragging=!0,this.wasTouchScroll=!1,!0)}cleanup(){r=!1,this.isDragging=!1,this.subjectEl=null,this.destroyScrollWatch()}querySubjectEl(t){return this.selector?i.elementClosest(t.target,this.selector):this.containerEl}shouldIgnoreMouse(){return n||this.isTouchDragging}cancelTouchScroll(){this.isDragging&&(r=!0)}initScrollWatch(t){this.shouldWatchScroll&&(this.recordCoords(t),window.addEventListener("scroll",this.handleScroll,!0))}recordCoords(t){this.shouldWatchScroll&&(this.prevPageX=t.pageX,this.prevPageY=t.pageY,this.prevScrollX=window.pageXOffset,this.prevScrollY=window.pageYOffset)}destroyScrollWatch(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)}createEventFromMouse(t,e){let i=0,n=0;return e?(this.origPageX=t.pageX,this.origPageY=t.pageY):(i=t.pageX-this.origPageX,n=t.pageY-this.origPageY),{origEvent:t,isTouch:!1,subjectEl:this.subjectEl,pageX:t.pageX,pageY:t.pageY,deltaX:i,deltaY:n}}createEventFromTouch(t,e){let i,n,s=t.touches,r=0,o=0;return s&&s.length?(i=s[0].pageX,n=s[0].pageY):(i=t.pageX,n=t.pageY),e?(this.origPageX=i,this.origPageY=n):(r=i-this.origPageX,o=n-this.origPageY),{origEvent:t,isTouch:!0,subjectEl:this.subjectEl,pageX:i,pageY:n,deltaX:r,deltaY:o}}}function l(t){r&&t.preventDefault()}class a{constructor(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}start(t,e,i){this.sourceEl=t,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=e-window.pageXOffset,this.origScreenY=i-window.pageYOffset,this.deltaX=0,this.deltaY=0,this.updateElPosition()}handleMove(t,e){this.deltaX=t-window.pageXOffset-this.origScreenX,this.deltaY=e-window.pageYOffset-this.origScreenY,this.updateElPosition()}setIsVisible(t){t?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=t,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=t)}stop(t,e){let i=()=>{this.cleanup(),e()};t&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(i,this.revertDuration):setTimeout(i,0)}doRevertAnimation(t,e){let n=this.mirrorEl,s=this.sourceEl.getBoundingClientRect();n.style.transition="top "+e+"ms,left "+e+"ms",i.applyStyle(n,{left:s.left,top:s.top}),i.whenTransitionDone(n,()=>{n.style.transition="",t()})}cleanup(){this.mirrorEl&&(i.removeElement(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null}updateElPosition(){this.sourceEl&&this.isVisible&&i.applyStyle(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})}getMirrorEl(){let t=this.sourceElRect,e=this.mirrorEl;return e||(e=this.mirrorEl=this.sourceEl.cloneNode(!0),e.classList.add("fc-unselectable"),e.classList.add("fc-event-dragging"),i.applyStyle(e,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:t.right-t.left,height:t.bottom-t.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(e)),e}}class h extends i.ScrollController{constructor(t,e){super(),this.handleScroll=()=>{this.scrollTop=this.scrollController.getScrollTop(),this.scrollLeft=this.scrollController.getScrollLeft(),this.handleScrollChange()},this.scrollController=t,this.doesListening=e,this.scrollTop=this.origScrollTop=t.getScrollTop(),this.scrollLeft=this.origScrollLeft=t.getScrollLeft(),this.scrollWidth=t.getScrollWidth(),this.scrollHeight=t.getScrollHeight(),this.clientWidth=t.getClientWidth(),this.clientHeight=t.getClientHeight(),this.clientRect=this.computeClientRect(),this.doesListening&&this.getEventTarget().addEventListener("scroll",this.handleScroll)}destroy(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}setScrollTop(t){this.scrollController.setScrollTop(t),this.doesListening||(this.scrollTop=Math.max(Math.min(t,this.getMaxScrollTop()),0),this.handleScrollChange())}setScrollLeft(t){this.scrollController.setScrollLeft(t),this.doesListening||(this.scrollLeft=Math.max(Math.min(t,this.getMaxScrollLeft()),0),this.handleScrollChange())}getClientWidth(){return this.clientWidth}getClientHeight(){return this.clientHeight}getScrollWidth(){return this.scrollWidth}getScrollHeight(){return this.scrollHeight}handleScrollChange(){}}class c extends h{constructor(t,e){super(new i.ElementScrollController(t),e)}getEventTarget(){return this.scrollController.el}computeClientRect(){return i.computeInnerRect(this.scrollController.el)}}class d extends h{constructor(t){super(new i.WindowScrollController,t)}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 g="function"==typeof performance?performance.now:Date.now;class u{constructor(){this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=()=>{if(this.isAnimating){let t=this.computeBestEdge(this.pointerScreenX+window.pageXOffset,this.pointerScreenY+window.pageYOffset);if(t){let e=g();this.handleSide(t,(e-this.msSinceRequest)/1e3),this.requestAnimation(e)}else this.isAnimating=!1}}}start(t,e,i){this.isEnabled&&(this.scrollCaches=this.buildCaches(i),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(t,e))}handleMove(t,e){if(this.isEnabled){let i=t-window.pageXOffset,n=e-window.pageYOffset,s=null===this.pointerScreenY?0:n-this.pointerScreenY,r=null===this.pointerScreenX?0:i-this.pointerScreenX;s<0?this.everMovedUp=!0:s>0&&(this.everMovedDown=!0),r<0?this.everMovedLeft=!0:r>0&&(this.everMovedRight=!0),this.pointerScreenX=i,this.pointerScreenY=n,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(g()))}}stop(){if(this.isEnabled){this.isAnimating=!1;for(let t of this.scrollCaches)t.destroy();this.scrollCaches=null}}requestAnimation(t){this.msSinceRequest=t,requestAnimationFrame(this.animate)}handleSide(t,e){let{scrollCache:i}=t,{edgeThreshold:n}=this,s=n-t.distance,r=s*s/(n*n)*this.maxVelocity*e,o=1;switch(t.name){case"left":o=-1;case"right":i.setScrollLeft(i.getScrollLeft()+r*o);break;case"top":o=-1;case"bottom":i.setScrollTop(i.getScrollTop()+r*o)}}computeBestEdge(t,e){let{edgeThreshold:i}=this,n=null,s=this.scrollCaches||[];for(let r of s){let s=r.clientRect,o=t-s.left,l=s.right-t,a=e-s.top,h=s.bottom-e;o>=0&&l>=0&&a>=0&&h>=0&&(a<=i&&this.everMovedUp&&r.canScrollUp()&&(!n||n.distance>a)&&(n={scrollCache:r,name:"top",distance:a}),h<=i&&this.everMovedDown&&r.canScrollDown()&&(!n||n.distance>h)&&(n={scrollCache:r,name:"bottom",distance:h}),o<=i&&this.everMovedLeft&&r.canScrollLeft()&&(!n||n.distance>o)&&(n={scrollCache:r,name:"left",distance:o}),l<=i&&this.everMovedRight&&r.canScrollRight()&&(!n||n.distance>l)&&(n={scrollCache:r,name:"right",distance:l}))}return n}buildCaches(t){return this.queryScrollEls(t).map(t=>t===window?new d(!1):new c(t,!1))}queryScrollEls(t){let e=[];for(let n of this.scrollQuery)"object"==typeof n?e.push(n):e.push(...Array.prototype.slice.call(i.getElRoot(t).querySelectorAll(n)));return e}}class p extends i.ElementDragging{constructor(t,e){super(t),this.containerEl=t,this.delay=null,this.minDistance=0,this.touchScrollAllowed=!0,this.mirrorNeedsRevert=!1,this.isInteracting=!1,this.isDragging=!1,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,this.delayTimeoutId=null,this.onPointerDown=t=>{this.isDragging||(this.isInteracting=!0,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,i.preventSelection(document.body),i.preventContextMenu(document.body),t.isTouch||t.origEvent.preventDefault(),this.emitter.trigger("pointerdown",t),this.isInteracting&&!this.pointer.shouldIgnoreMove&&(this.mirror.setIsVisible(!1),this.mirror.start(t.subjectEl,t.pageX,t.pageY),this.startDelay(t),this.minDistance||this.handleDistanceSurpassed(t)))},this.onPointerMove=t=>{if(this.isInteracting){if(this.emitter.trigger("pointermove",t),!this.isDistanceSurpassed){let e,i=this.minDistance,{deltaX:n,deltaY:s}=t;e=n*n+s*s,e>=i*i&&this.handleDistanceSurpassed(t)}this.isDragging&&("scroll"!==t.origEvent.type&&(this.mirror.handleMove(t.pageX,t.pageY),this.autoScroller.handleMove(t.pageX,t.pageY)),this.emitter.trigger("dragmove",t))}},this.onPointerUp=t=>{this.isInteracting&&(this.isInteracting=!1,i.allowSelection(document.body),i.allowContextMenu(document.body),this.emitter.trigger("pointerup",t),this.isDragging&&(this.autoScroller.stop(),this.tryStopDrag(t)),this.delayTimeoutId&&(clearTimeout(this.delayTimeoutId),this.delayTimeoutId=null))};let n=this.pointer=new o(t);n.emitter.on("pointerdown",this.onPointerDown),n.emitter.on("pointermove",this.onPointerMove),n.emitter.on("pointerup",this.onPointerUp),e&&(n.selector=e),this.mirror=new a,this.autoScroller=new u}destroy(){this.pointer.destroy(),this.onPointerUp({})}startDelay(t){"number"==typeof this.delay?this.delayTimeoutId=setTimeout(()=>{this.delayTimeoutId=null,this.handleDelayEnd(t)},this.delay):this.handleDelayEnd(t)}handleDelayEnd(t){this.isDelayEnded=!0,this.tryStartDrag(t)}handleDistanceSurpassed(t){this.isDistanceSurpassed=!0,this.tryStartDrag(t)}tryStartDrag(t){this.isDelayEnded&&this.isDistanceSurpassed&&(this.pointer.wasTouchScroll&&!this.touchScrollAllowed||(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(t.pageX,t.pageY,this.containerEl),this.emitter.trigger("dragstart",t),!1===this.touchScrollAllowed&&this.pointer.cancelTouchScroll()))}tryStopDrag(t){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,t))}stopDrag(t){this.isDragging=!1,this.emitter.trigger("dragend",t)}setIgnoreMove(t){this.pointer.shouldIgnoreMove=t}setMirrorIsVisible(t){this.mirror.setIsVisible(t)}setMirrorNeedsRevert(t){this.mirrorNeedsRevert=t}setAutoScrollEnabled(t){this.autoScroller.isEnabled=t}}class v{constructor(t){this.origRect=i.computeRect(t),this.scrollCaches=i.getClippingParents(t).map(t=>new c(t,!0))}destroy(){for(let t of this.scrollCaches)t.destroy()}computeLeft(){let t=this.origRect.left;for(let e of this.scrollCaches)t+=e.origScrollLeft-e.getScrollLeft();return t}computeTop(){let t=this.origRect.top;for(let e of this.scrollCaches)t+=e.origScrollTop-e.getScrollTop();return t}isWithinClipping(t,e){let n={left:t,top:e};for(let t of this.scrollCaches)if(!E(t.getEventTarget())&&!i.pointInsideRect(n,t.clientRect))return!1;return!0}}function E(t){let e=t.tagName;return"HTML"===e||"BODY"===e}class m{constructor(t,e){this.useSubjectCenter=!1,this.requireInitial=!0,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=t=>{let{dragging:e}=this;this.initialHit=null,this.movingHit=null,this.finalHit=null,this.prepareHits(),this.processFirstCoord(t),this.initialHit||!this.requireInitial?(e.setIgnoreMove(!1),this.emitter.trigger("pointerdown",t)):e.setIgnoreMove(!0)},this.handleDragStart=t=>{this.emitter.trigger("dragstart",t),this.handleMove(t,!0)},this.handleDragMove=t=>{this.emitter.trigger("dragmove",t),this.handleMove(t)},this.handlePointerUp=t=>{this.releaseHits(),this.emitter.trigger("pointerup",t)},this.handleDragEnd=t=>{this.movingHit&&this.emitter.trigger("hitupdate",null,!0,t),this.finalHit=this.movingHit,this.movingHit=null,this.emitter.trigger("dragend",t)},this.droppableStore=e,t.emitter.on("pointerdown",this.handlePointerDown),t.emitter.on("dragstart",this.handleDragStart),t.emitter.on("dragmove",this.handleDragMove),t.emitter.on("pointerup",this.handlePointerUp),t.emitter.on("dragend",this.handleDragEnd),this.dragging=t,this.emitter=new i.Emitter}processFirstCoord(t){let e,n={left:t.pageX,top:t.pageY},s=n,r=t.subjectEl;r instanceof HTMLElement&&(e=i.computeRect(r),s=i.constrainPoint(s,e));let o=this.initialHit=this.queryHitForOffset(s.left,s.top);if(o){if(this.useSubjectCenter&&e){let t=i.intersectRects(e,o.rect);t&&(s=i.getRectCenter(t))}this.coordAdjust=i.diffPoints(s,n)}else this.coordAdjust={left:0,top:0}}handleMove(t,e){let i=this.queryHitForOffset(t.pageX+this.coordAdjust.left,t.pageY+this.coordAdjust.top);!e&&S(this.movingHit,i)||(this.movingHit=i,this.emitter.trigger("hitupdate",i,!1,t))}prepareHits(){this.offsetTrackers=i.mapHash(this.droppableStore,t=>(t.component.prepareHits(),new v(t.el)))}releaseHits(){let{offsetTrackers:t}=this;for(let e in t)t[e].destroy();this.offsetTrackers={}}queryHitForOffset(t,e){let{droppableStore:n,offsetTrackers:s}=this,r=null;for(let o in n){let l=n[o].component,a=s[o];if(a&&a.isWithinClipping(t,e)){let n=a.computeLeft(),s=a.computeTop(),h=t-n,c=e-s,{origRect:d}=a,g=d.right-d.left,u=d.bottom-d.top;if(h>=0&&h<g&&c>=0&&c<u){let t=l.queryHit(h,c,g,u);t&&i.rangeContainsRange(t.dateProfile.activeRange,t.dateSpan.range)&&(!r||t.layer>r.layer)&&(t.componentId=o,t.context=l.context,t.rect.left+=n,t.rect.right+=n,t.rect.top+=s,t.rect.bottom+=s,r=t)}}}return r}}function S(t,e){return!t&&!e||Boolean(t)===Boolean(e)&&i.isDateSpansEqual(t.dateSpan,e.dateSpan)}function f(t,e){let i={};for(let n of e.pluginHooks.datePointTransforms)Object.assign(i,n(t,e));var n,s;return Object.assign(i,(n=t,{date:(s=e.dateEnv).toDate(n.range.start),dateStr:s.formatIso(n.range.start,{omitTime:n.allDay}),allDay:n.allDay})),i}class D extends i.Interaction{constructor(t){super(t),this.handlePointerDown=t=>{let{dragging:e}=this,i=t.origEvent.target;e.setIgnoreMove(!this.component.isValidDateDownEl(i))},this.handleDragEnd=t=>{let{component:e}=this,{pointer:i}=this.dragging;if(!i.wasTouchScroll){let{initialHit:i,finalHit:n}=this.hitDragging;if(i&&n&&S(i,n)){let{context:n}=e,s=Object.assign(Object.assign({},f(i.dateSpan,n)),{dayEl:i.dayEl,jsEvent:t.origEvent,view:n.viewApi||n.calendarApi.view});n.emitter.trigger("dateClick",s)}}},this.dragging=new p(t.el),this.dragging.autoScroller.isEnabled=!1;let e=this.hitDragging=new m(this.dragging,i.interactionSettingsToStore(t));e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}}class y extends i.Interaction{constructor(t){super(t),this.dragSelection=null,this.handlePointerDown=t=>{let{component:e,dragging:i}=this,{options:n}=e.context,s=n.selectable&&e.isValidDateDownEl(t.origEvent.target);i.setIgnoreMove(!s),i.delay=t.isTouch?function(t){let{options:e}=t.context,i=e.selectLongPressDelay;null==i&&(i=e.longPressDelay);return i}(e):null},this.handleDragStart=t=>{this.component.context.calendarApi.unselect(t)},this.handleHitUpdate=(t,e)=>{let{context:n}=this.component,s=null,r=!1;if(t){let e=this.hitDragging.initialHit;t.componentId===e.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(e,t)||(s=function(t,e,n){let s=t.dateSpan,r=e.dateSpan,o=[s.range.start,s.range.end,r.range.start,r.range.end];o.sort(i.compareNumbers);let l={};for(let i of n){let n=i(t,e);if(!1===n)return null;n&&Object.assign(l,n)}return l.range={start:o[0],end:o[3]},l.allDay=s.allDay,l}(e,t,n.pluginHooks.dateSelectionTransformers)),s&&i.isDateSelectionValid(s,t.dateProfile,n)||(r=!0,s=null)}s?n.dispatch({type:"SELECT_DATES",selection:s}):e||n.dispatch({type:"UNSELECT_DATES"}),r?i.disableCursor():i.enableCursor(),e||(this.dragSelection=s)},this.handlePointerUp=t=>{this.dragSelection&&(i.triggerDateSelect(this.dragSelection,t,this.component.context),this.dragSelection=null)};let{component:e}=t,{options:n}=e.context,s=this.dragging=new p(t.el);s.touchScrollAllowed=!1,s.minDistance=n.selectMinDistance||0,s.autoScroller.isEnabled=n.dragScroll;let r=this.hitDragging=new m(this.dragging,i.interactionSettingsToStore(t));r.emitter.on("pointerdown",this.handlePointerDown),r.emitter.on("dragstart",this.handleDragStart),r.emitter.on("hitupdate",this.handleHitUpdate),r.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.dragging.destroy()}}class w extends i.Interaction{constructor(t){super(t),this.subjectEl=null,this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=t=>{let e=t.origEvent.target,{component:n,dragging:s}=this,{mirror:r}=s,{options:o}=n.context,l=n.context;this.subjectEl=t.subjectEl;let a=this.subjectSeg=i.getElSeg(t.subjectEl),h=(this.eventRange=a.eventRange).instance.instanceId;this.relevantEvents=i.getRelevantEvents(l.getCurrentData().eventStore,h),s.minDistance=t.isTouch?0:o.eventDragMinDistance,s.delay=t.isTouch&&h!==n.props.eventSelection?function(t){let{options:e}=t.context,i=e.eventLongPressDelay;null==i&&(i=e.longPressDelay);return i}(n):null,o.fixedMirrorParent?r.parentNode=o.fixedMirrorParent:r.parentNode=i.elementClosest(e,".fc"),r.revertDuration=o.dragRevertDuration;let c=n.isValidSegDownEl(e)&&!i.elementClosest(e,".fc-event-resizer");s.setIgnoreMove(!c),this.isDragging=c&&t.subjectEl.classList.contains("fc-event-draggable")},this.handleDragStart=t=>{let e=this.component.context,n=this.eventRange,s=n.instance.instanceId;t.isTouch?s!==this.component.props.eventSelection&&e.dispatch({type:"SELECT_EVENT",eventInstanceId:s}):e.dispatch({type:"UNSELECT_EVENT"}),this.isDragging&&(e.calendarApi.unselect(t),e.emitter.trigger("eventDragStart",{el:this.subjectEl,event:new i.EventImpl(e,n.def,n.instance),jsEvent:t.origEvent,view:e.viewApi}))},this.handleHitUpdate=(t,e)=>{if(!this.isDragging)return;let n=this.relevantEvents,s=this.hitDragging.initialHit,r=this.component.context,o=null,l=null,a=null,h=!1,c={affectedEvents:n,mutatedEvents:i.createEmptyEventStore(),isEvent:!0};if(t){o=t.context;let e=o.options;r===o||e.editable&&e.droppable?(l=function(t,e,n){let s=t.dateSpan,r=e.dateSpan,o=s.range.start,l=r.range.start,a={};s.allDay!==r.allDay&&(a.allDay=r.allDay,a.hasEnd=e.context.options.allDayMaintainDuration,r.allDay&&(o=i.startOfDay(o)));let h=i.diffDates(o,l,t.context.dateEnv,t.componentId===e.componentId?t.largeUnit:null);h.milliseconds&&(a.allDay=!1);let c={datesDelta:h,standardProps:a};for(let i of n)i(c,t,e);return c}(s,t,o.getCurrentData().pluginHooks.eventDragMutationMassagers),l&&(a=i.applyMutationToEventStore(n,o.getCurrentData().eventUiBases,l,o),c.mutatedEvents=a,i.isInteractionValid(c,t.dateProfile,o)||(h=!0,l=null,a=null,c.mutatedEvents=i.createEmptyEventStore()))):o=null}this.displayDrag(o,c),h?i.disableCursor():i.enableCursor(),e||(r===o&&S(s,t)&&(l=null),this.dragging.setMirrorNeedsRevert(!l),this.dragging.setMirrorIsVisible(!t||!i.getElRoot(this.subjectEl).querySelector(".fc-event-mirror")),this.receivingContext=o,this.validMutation=l,this.mutatedRelevantEvents=a)},this.handlePointerUp=()=>{this.isDragging||this.cleanup()},this.handleDragEnd=t=>{if(this.isDragging){let e=this.component.context,n=e.viewApi,{receivingContext:s,validMutation:r}=this,o=this.eventRange.def,l=this.eventRange.instance,a=new i.EventImpl(e,o,l),h=this.relevantEvents,c=this.mutatedRelevantEvents,{finalHit:d}=this.hitDragging;if(this.clearDrag(),e.emitter.trigger("eventDragStop",{el:this.subjectEl,event:a,jsEvent:t.origEvent,view:n}),r){if(s===e){let s=new i.EventImpl(e,c.defs[o.defId],l?c.instances[l.instanceId]:null);e.dispatch({type:"MERGE_EVENTS",eventStore:c});let d={oldEvent:a,event:s,relatedEvents:i.buildEventApis(c,e,l),revert(){e.dispatch({type:"MERGE_EVENTS",eventStore:h})}},g={};for(let t of e.getCurrentData().pluginHooks.eventDropTransformers)Object.assign(g,t(r,e));e.emitter.trigger("eventDrop",Object.assign(Object.assign(Object.assign({},d),g),{el:t.subjectEl,delta:r.datesDelta,jsEvent:t.origEvent,view:n})),e.emitter.trigger("eventChange",d)}else if(s){let r={event:a,relatedEvents:i.buildEventApis(h,e,l),revert(){e.dispatch({type:"MERGE_EVENTS",eventStore:h})}};e.emitter.trigger("eventLeave",Object.assign(Object.assign({},r),{draggedEl:t.subjectEl,view:n})),e.dispatch({type:"REMOVE_EVENTS",eventStore:h}),e.emitter.trigger("eventRemove",r);let g=c.defs[o.defId],u=c.instances[l.instanceId],p=new i.EventImpl(s,g,u);s.dispatch({type:"MERGE_EVENTS",eventStore:c});let v={event:p,relatedEvents:i.buildEventApis(c,s,u),revert(){s.dispatch({type:"REMOVE_EVENTS",eventStore:c})}};s.emitter.trigger("eventAdd",v),t.isTouch&&s.dispatch({type:"SELECT_EVENT",eventInstanceId:l.instanceId}),s.emitter.trigger("drop",Object.assign(Object.assign({},f(d.dateSpan,s)),{draggedEl:t.subjectEl,jsEvent:t.origEvent,view:d.context.viewApi})),s.emitter.trigger("eventReceive",Object.assign(Object.assign({},v),{draggedEl:t.subjectEl,view:d.context.viewApi}))}}else e.emitter.trigger("_noEventDrop")}this.cleanup()};let{component:e}=this,{options:n}=e.context,s=this.dragging=new p(t.el);s.pointer.selector=w.SELECTOR,s.touchScrollAllowed=!1,s.autoScroller.isEnabled=n.dragScroll;let r=this.hitDragging=new m(this.dragging,i.interactionSettingsStore);r.useSubjectCenter=t.useEventCenter,r.emitter.on("pointerdown",this.handlePointerDown),r.emitter.on("dragstart",this.handleDragStart),r.emitter.on("hitupdate",this.handleHitUpdate),r.emitter.on("pointerup",this.handlePointerUp),r.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}displayDrag(t,e){let n=this.component.context,s=this.receivingContext;s&&s!==t&&(s===n?s.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:e.affectedEvents,mutatedEvents:i.createEmptyEventStore(),isEvent:!0}}):s.dispatch({type:"UNSET_EVENT_DRAG"})),t&&t.dispatch({type:"SET_EVENT_DRAG",state:e})}clearDrag(){let t=this.component.context,{receivingContext:e}=this;e&&e.dispatch({type:"UNSET_EVENT_DRAG"}),t!==e&&t.dispatch({type:"UNSET_EVENT_DRAG"})}cleanup(){this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null}}w.SELECTOR=".fc-event-draggable, .fc-event-resizable";class T extends i.Interaction{constructor(t){super(t),this.draggingSegEl=null,this.draggingSeg=null,this.eventRange=null,this.relevantEvents=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=t=>{let{component:e}=this,n=this.querySegEl(t),s=i.getElSeg(n),r=this.eventRange=s.eventRange;this.dragging.minDistance=e.context.options.eventDragMinDistance,this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(t.origEvent.target)||t.isTouch&&this.component.props.eventSelection!==r.instance.instanceId)},this.handleDragStart=t=>{let{context:e}=this.component,n=this.eventRange;this.relevantEvents=i.getRelevantEvents(e.getCurrentData().eventStore,this.eventRange.instance.instanceId);let s=this.querySegEl(t);this.draggingSegEl=s,this.draggingSeg=i.getElSeg(s),e.calendarApi.unselect(),e.emitter.trigger("eventResizeStart",{el:s,event:new i.EventImpl(e,n.def,n.instance),jsEvent:t.origEvent,view:e.viewApi})},this.handleHitUpdate=(t,e,n)=>{let{context:s}=this.component,r=this.relevantEvents,o=this.hitDragging.initialHit,l=this.eventRange.instance,a=null,h=null,c=!1,d={affectedEvents:r,mutatedEvents:i.createEmptyEventStore(),isEvent:!0};if(t){t.componentId===o.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(o,t)||(a=function(t,e,n,s){let r=t.context.dateEnv,o=t.dateSpan.range.start,l=e.dateSpan.range.start,a=i.diffDates(o,l,r,t.largeUnit);if(n){if(r.add(s.start,a)<s.end)return{startDelta:a}}else if(r.add(s.end,a)>s.start)return{endDelta:a};return null}(o,t,n.subjectEl.classList.contains("fc-event-resizer-start"),l.range))}a&&(h=i.applyMutationToEventStore(r,s.getCurrentData().eventUiBases,a,s),d.mutatedEvents=h,i.isInteractionValid(d,t.dateProfile,s)||(c=!0,a=null,h=null,d.mutatedEvents=null)),h?s.dispatch({type:"SET_EVENT_RESIZE",state:d}):s.dispatch({type:"UNSET_EVENT_RESIZE"}),c?i.disableCursor():i.enableCursor(),e||(a&&S(o,t)&&(a=null),this.validMutation=a,this.mutatedRelevantEvents=h)},this.handleDragEnd=t=>{let{context:e}=this.component,n=this.eventRange.def,s=this.eventRange.instance,r=new i.EventImpl(e,n,s),o=this.relevantEvents,l=this.mutatedRelevantEvents;if(e.emitter.trigger("eventResizeStop",{el:this.draggingSegEl,event:r,jsEvent:t.origEvent,view:e.viewApi}),this.validMutation){let a=new i.EventImpl(e,l.defs[n.defId],s?l.instances[s.instanceId]:null);e.dispatch({type:"MERGE_EVENTS",eventStore:l});let h={oldEvent:r,event:a,relatedEvents:i.buildEventApis(l,e,s),revert(){e.dispatch({type:"MERGE_EVENTS",eventStore:o})}};e.emitter.trigger("eventResize",Object.assign(Object.assign({},h),{el:this.draggingSegEl,startDelta:this.validMutation.startDelta||i.createDuration(0),endDelta:this.validMutation.endDelta||i.createDuration(0),jsEvent:t.origEvent,view:e.viewApi})),e.emitter.trigger("eventChange",h)}else e.emitter.trigger("_noEventResize");this.draggingSeg=null,this.relevantEvents=null,this.validMutation=null};let{component:e}=t,n=this.dragging=new p(t.el);n.pointer.selector=".fc-event-resizer",n.touchScrollAllowed=!1,n.autoScroller.isEnabled=e.context.options.dragScroll;let s=this.hitDragging=new m(this.dragging,i.interactionSettingsToStore(t));s.emitter.on("pointerdown",this.handlePointerDown),s.emitter.on("dragstart",this.handleDragStart),s.emitter.on("hitupdate",this.handleHitUpdate),s.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}querySegEl(t){return i.elementClosest(t.subjectEl,".fc-event")}}const b={fixedMirrorParent:i.identity},M={dateClick:i.identity,eventDragStart:i.identity,eventDragStop:i.identity,eventDrop:i.identity,eventResizeStart:i.identity,eventResizeStop:i.identity,eventResize:i.identity,drop:i.identity,eventReceive:i.identity,eventLeave:i.identity};class C{constructor(t,e){this.receivingContext=null,this.droppableEvent=null,this.suppliedDragMeta=null,this.dragMeta=null,this.handleDragStart=t=>{this.dragMeta=this.buildDragMeta(t.subjectEl)},this.handleHitUpdate=(t,e,n)=>{let{dragging:s}=this.hitDragging,r=null,o=null,l=!1,a={affectedEvents:i.createEmptyEventStore(),mutatedEvents:i.createEmptyEventStore(),isEvent:this.dragMeta.create};t&&(r=t.context,this.canDropElOnCalendar(n.subjectEl,r)&&(o=function(t,e,n){let s=Object.assign({},e.leftoverProps);for(let i of n.pluginHooks.externalDefTransforms)Object.assign(s,i(t,e));let{refined:r,extra:o}=i.refineEventDef(s,n),l=i.parseEventDef(r,o,e.sourceId,t.allDay,n.options.forceEventDuration||Boolean(e.duration),n),a=t.range.start;t.allDay&&e.startTime&&(a=n.dateEnv.add(a,e.startTime));let h=e.duration?n.dateEnv.add(a,e.duration):i.getDefaultEventEnd(t.allDay,a,n),c=i.createEventInstance(l.defId,{start:a,end:h});return{def:l,instance:c}}(t.dateSpan,this.dragMeta,r),a.mutatedEvents=i.eventTupleToStore(o),l=!i.isInteractionValid(a,t.dateProfile,r),l&&(a.mutatedEvents=i.createEmptyEventStore(),o=null))),this.displayDrag(r,a),s.setMirrorIsVisible(e||!o||!document.querySelector(".fc-event-mirror")),l?i.disableCursor():i.enableCursor(),e||(s.setMirrorNeedsRevert(!o),this.receivingContext=r,this.droppableEvent=o)},this.handleDragEnd=t=>{let{receivingContext:e,droppableEvent:n}=this;if(this.clearDrag(),e&&n){let s=this.hitDragging.finalHit,r=s.context.viewApi,o=this.dragMeta;if(e.emitter.trigger("drop",Object.assign(Object.assign({},f(s.dateSpan,e)),{draggedEl:t.subjectEl,jsEvent:t.origEvent,view:r})),o.create){let s=i.eventTupleToStore(n);e.dispatch({type:"MERGE_EVENTS",eventStore:s}),t.isTouch&&e.dispatch({type:"SELECT_EVENT",eventInstanceId:n.instance.instanceId}),e.emitter.trigger("eventReceive",{event:new i.EventImpl(e,n.def,n.instance),relatedEvents:[],revert(){e.dispatch({type:"REMOVE_EVENTS",eventStore:s})},draggedEl:t.subjectEl,view:r})}}this.receivingContext=null,this.droppableEvent=null};let n=this.hitDragging=new m(t,i.interactionSettingsStore);n.requireInitial=!1,n.emitter.on("dragstart",this.handleDragStart),n.emitter.on("hitupdate",this.handleHitUpdate),n.emitter.on("dragend",this.handleDragEnd),this.suppliedDragMeta=e}buildDragMeta(t){return"object"==typeof this.suppliedDragMeta?i.parseDragMeta(this.suppliedDragMeta):"function"==typeof this.suppliedDragMeta?i.parseDragMeta(this.suppliedDragMeta(t)):function(t){let e=function(t,e){let n=i.config.dataAttrPrefix,s=(n?n+"-":"")+e;return t.getAttribute("data-"+s)||""}(t,"event"),n=e?JSON.parse(e):{create:!1};return i.parseDragMeta(n)}(t)}displayDrag(t,e){let i=this.receivingContext;i&&i!==t&&i.dispatch({type:"UNSET_EVENT_DRAG"}),t&&t.dispatch({type:"SET_EVENT_DRAG",state:e})}clearDrag(){this.receivingContext&&this.receivingContext.dispatch({type:"UNSET_EVENT_DRAG"})}canDropElOnCalendar(t,e){let n=e.options.dropAccept;return"function"==typeof n?n.call(e.calendarApi,t):"string"!=typeof n||!n||Boolean(i.elementMatches(t,n))}}i.config.dataAttrPrefix="";class R extends i.ElementDragging{constructor(t){super(t),this.shouldIgnoreMove=!1,this.mirrorSelector="",this.currentMirrorEl=null,this.handlePointerDown=t=>{this.emitter.trigger("pointerdown",t),this.shouldIgnoreMove||this.emitter.trigger("dragstart",t)},this.handlePointerMove=t=>{this.shouldIgnoreMove||this.emitter.trigger("dragmove",t)},this.handlePointerUp=t=>{this.emitter.trigger("pointerup",t),this.shouldIgnoreMove||this.emitter.trigger("dragend",t)};let e=this.pointer=new o(t);e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("pointermove",this.handlePointerMove),e.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.pointer.destroy()}setIgnoreMove(t){this.shouldIgnoreMove=t}setMirrorIsVisible(t){if(t)this.currentMirrorEl&&(this.currentMirrorEl.style.visibility="",this.currentMirrorEl=null);else{let t=this.mirrorSelector?document.querySelector(this.mirrorSelector):null;t&&(this.currentMirrorEl=t,t.style.visibility="hidden")}}}var I=e.createPlugin({name:"@fullcalendar/interaction",componentInteractions:[D,y,w,T],calendarInteractions:[class{constructor(t){this.context=t,this.isRecentPointerDateSelect=!1,this.matchesCancel=!1,this.matchesEvent=!1,this.onSelect=t=>{t.jsEvent&&(this.isRecentPointerDateSelect=!0)},this.onDocumentPointerDown=t=>{let e=this.context.options.unselectCancel,n=i.getEventTargetViaRoot(t.origEvent);this.matchesCancel=!!i.elementClosest(n,e),this.matchesEvent=!!i.elementClosest(n,w.SELECTOR)},this.onDocumentPointerUp=t=>{let{context:e}=this,{documentPointer:i}=this,n=e.getCurrentData();if(!i.wasTouchScroll){if(n.dateSelection&&!this.isRecentPointerDateSelect){let i=e.options.unselectAuto;!i||i&&this.matchesCancel||e.calendarApi.unselect(t)}n.eventSelection&&!this.matchesEvent&&e.dispatch({type:"UNSELECT_EVENT"})}this.isRecentPointerDateSelect=!1};let e=this.documentPointer=new o(document);e.shouldIgnoreMove=!0,e.shouldWatchScroll=!1,e.emitter.on("pointerdown",this.onDocumentPointerDown),e.emitter.on("pointerup",this.onDocumentPointerUp),t.emitter.on("select",this.onSelect)}destroy(){this.context.emitter.off("select",this.onSelect),this.documentPointer.destroy()}}],elementDraggingImpl:p,optionRefiners:b,listenerRefiners:M});return e.globalPlugins.push(I),t.Draggable=class{constructor(t,e={}){this.handlePointerDown=t=>{let{dragging:e}=this,{minDistance:n,longPressDelay:s}=this.settings;e.minDistance=null!=n?n:t.isTouch?0:i.BASE_OPTION_DEFAULTS.eventDragMinDistance,e.delay=t.isTouch?null!=s?s:i.BASE_OPTION_DEFAULTS.longPressDelay:0},this.handleDragStart=t=>{t.isTouch&&this.dragging.delay&&t.subjectEl.classList.contains("fc-event")&&this.dragging.mirror.getMirrorEl().classList.add("fc-event-selected")},this.settings=e;let n=this.dragging=new p(t);n.touchScrollAllowed=!1,null!=e.itemSelector&&(n.pointer.selector=e.itemSelector),null!=e.appendTo&&(n.mirror.parentNode=e.appendTo),n.emitter.on("pointerdown",this.handlePointerDown),n.emitter.on("dragstart",this.handleDragStart),new C(n,e.eventData)}destroy(){this.dragging.destroy()}},t.ThirdPartyDraggable=class{constructor(t,e){let i=document;t===document||t instanceof Element?(i=t,e=e||{}):e=t||{};let n=this.dragging=new R(i);"string"==typeof e.itemSelector?n.pointer.selector=e.itemSelector:i===document&&(n.pointer.selector="[data-event]"),"string"==typeof e.mirrorSelector&&(n.mirrorSelector=e.mirrorSelector),new C(n,e.eventData)}destroy(){this.dragging.destroy()}},t.default=I,Object.defineProperty(t,"__esModule",{value:!0}),t}({},FullCalendar,FullCalendar.Internal);
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/dnd/PointerDragging.ts","../src/dnd/ElementMirror.ts","../src/ScrollGeomCache.ts","../src/ElementScrollGeomCache.ts","../src/WindowScrollGeomCache.ts","../src/dnd/AutoScroller.ts","../src/dnd/FeaturefulElementDragging.ts","../src/OffsetTracker.ts","../src/interactions/HitDragging.ts","../src/utils.ts","../src/interactions/DateClicking.ts","../src/interactions/DateSelecting.ts","../src/interactions/EventDragging.ts","../src/interactions/EventResizing.ts","../src/interactions/UnselectAuto.ts","../src/option-refiners.ts","../src/interactions-external/ExternalElementDragging.ts","../src/interactions-external/ExternalDraggable.ts","../src/interactions-external/InferredElementDragging.ts","../src/interactions-external/ThirdPartyDraggable.ts","../src/index.ts"],"sourcesContent":["import { config, elementClosest, Emitter, PointerDragEvent } from '@fullcalendar/core/internal'\n\nconfig.touchMouseIgnoreWait = 500\n\nlet ignoreMouseDepth = 0\nlet listenerCnt = 0\nlet isWindowTouchMoveCancelled = false\n\n/*\nUses a \"pointer\" abstraction, which monitors UI events for both mouse and touch.\nTracks when the pointer \"drags\" on a certain element, meaning down+move+up.\n\nAlso, tracks if there was touch-scrolling.\nAlso, can prevent touch-scrolling from happening.\nAlso, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.\n\nemits:\n- pointerdown\n- pointermove\n- pointerup\n*/\nexport class PointerDragging {\n containerEl: EventTarget\n subjectEl: HTMLElement | null = null\n emitter: Emitter<any>\n\n // options that can be directly assigned by caller\n selector: string = '' // will cause subjectEl in all emitted events to be this element\n handleSelector: string = ''\n shouldIgnoreMove: boolean = false\n shouldWatchScroll: boolean = true // for simulating pointermove on scroll\n\n // internal states\n isDragging: boolean = false\n isTouchDragging: boolean = false\n wasTouchScroll: boolean = false\n origPageX: number\n origPageY: number\n prevPageX: number\n prevPageY: number\n prevScrollX: number // at time of last pointer pageX/pageY capture\n prevScrollY: number // \"\n\n constructor(containerEl: EventTarget) {\n this.containerEl = containerEl\n this.emitter = new Emitter()\n containerEl.addEventListener('mousedown', this.handleMouseDown as EventListener)\n containerEl.addEventListener('touchstart', this.handleTouchStart as EventListener, { passive: true })\n listenerCreated()\n }\n\n destroy() {\n this.containerEl.removeEventListener('mousedown', this.handleMouseDown as EventListener)\n this.containerEl.removeEventListener('touchstart', this.handleTouchStart as EventListener, { passive: true } as AddEventListenerOptions)\n listenerDestroyed()\n }\n\n tryStart(ev: UIEvent): boolean {\n let subjectEl = this.querySubjectEl(ev)\n let downEl = ev.target as HTMLElement\n\n if (\n subjectEl &&\n (!this.handleSelector || elementClosest(downEl, this.handleSelector))\n ) {\n this.subjectEl = subjectEl\n this.isDragging = true // do this first so cancelTouchScroll will work\n this.wasTouchScroll = false\n\n return true\n }\n\n return false\n }\n\n cleanup() {\n isWindowTouchMoveCancelled = false\n this.isDragging = false\n this.subjectEl = null\n // keep wasTouchScroll around for later access\n this.destroyScrollWatch()\n }\n\n querySubjectEl(ev: UIEvent): HTMLElement {\n if (this.selector) {\n return elementClosest(ev.target as HTMLElement, this.selector)\n }\n return this.containerEl as HTMLElement\n }\n\n // Mouse\n // ----------------------------------------------------------------------------------------------------\n\n handleMouseDown = (ev: MouseEvent) => {\n if (\n !this.shouldIgnoreMouse() &&\n isPrimaryMouseButton(ev) &&\n this.tryStart(ev)\n ) {\n let pev = this.createEventFromMouse(ev, true)\n this.emitter.trigger('pointerdown', pev)\n this.initScrollWatch(pev)\n\n if (!this.shouldIgnoreMove) {\n document.addEventListener('mousemove', this.handleMouseMove)\n }\n\n document.addEventListener('mouseup', this.handleMouseUp)\n }\n }\n\n handleMouseMove = (ev: MouseEvent) => {\n let pev = this.createEventFromMouse(ev)\n this.recordCoords(pev)\n this.emitter.trigger('pointermove', pev)\n }\n\n handleMouseUp = (ev: MouseEvent) => {\n document.removeEventListener('mousemove', this.handleMouseMove)\n document.removeEventListener('mouseup', this.handleMouseUp)\n\n this.emitter.trigger('pointerup', this.createEventFromMouse(ev))\n\n this.cleanup() // call last so that pointerup has access to props\n }\n\n shouldIgnoreMouse() {\n return ignoreMouseDepth || this.isTouchDragging\n }\n\n // Touch\n // ----------------------------------------------------------------------------------------------------\n\n handleTouchStart = (ev: TouchEvent) => {\n if (this.tryStart(ev)) {\n this.isTouchDragging = true\n\n let pev = this.createEventFromTouch(ev, true)\n this.emitter.trigger('pointerdown', pev)\n this.initScrollWatch(pev)\n\n // unlike mouse, need to attach to target, not document\n // https://stackoverflow.com/a/45760014\n let targetEl = ev.target as HTMLElement\n\n if (!this.shouldIgnoreMove) {\n targetEl.addEventListener('touchmove', this.handleTouchMove)\n }\n\n targetEl.addEventListener('touchend', this.handleTouchEnd)\n targetEl.addEventListener('touchcancel', this.handleTouchEnd) // treat it as a touch end\n\n // attach a handler to get called when ANY scroll action happens on the page.\n // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\n // http://stackoverflow.com/a/32954565/96342\n window.addEventListener(\n 'scroll',\n this.handleTouchScroll,\n true, // useCapture\n )\n }\n }\n\n handleTouchMove = (ev: TouchEvent) => {\n let pev = this.createEventFromTouch(ev)\n this.recordCoords(pev)\n this.emitter.trigger('pointermove', pev)\n }\n\n handleTouchEnd = (ev: TouchEvent) => {\n if (this.isDragging) { // done to guard against touchend followed by touchcancel\n let targetEl = ev.target as HTMLElement\n\n targetEl.removeEventListener('touchmove', this.handleTouchMove)\n targetEl.removeEventListener('touchend', this.handleTouchEnd)\n targetEl.removeEventListener('touchcancel', this.handleTouchEnd)\n window.removeEventListener('scroll', this.handleTouchScroll, true) // useCaptured=true\n\n this.emitter.trigger('pointerup', this.createEventFromTouch(ev))\n\n this.cleanup() // call last so that pointerup has access to props\n this.isTouchDragging = false\n startIgnoringMouse()\n }\n }\n\n handleTouchScroll = () => {\n this.wasTouchScroll = true\n }\n\n // can be called by user of this class, to cancel touch-based scrolling for the current drag\n cancelTouchScroll() {\n if (this.isDragging) {\n isWindowTouchMoveCancelled = true\n }\n }\n\n // Scrolling that simulates pointermoves\n // ----------------------------------------------------------------------------------------------------\n\n initScrollWatch(ev: PointerDragEvent) {\n if (this.shouldWatchScroll) {\n this.recordCoords(ev)\n window.addEventListener('scroll', this.handleScroll, true) // useCapture=true\n }\n }\n\n recordCoords(ev: PointerDragEvent) {\n if (this.shouldWatchScroll) {\n this.prevPageX = (ev as any).pageX\n this.prevPageY = (ev as any).pageY\n this.prevScrollX = window.pageXOffset\n this.prevScrollY = window.pageYOffset\n }\n }\n\n handleScroll = (ev: UIEvent) => {\n if (!this.shouldIgnoreMove) {\n let pageX = (window.pageXOffset - this.prevScrollX) + this.prevPageX\n let pageY = (window.pageYOffset - this.prevScrollY) + this.prevPageY\n\n this.emitter.trigger('pointermove', {\n origEvent: ev,\n isTouch: this.isTouchDragging,\n subjectEl: this.subjectEl,\n pageX,\n pageY,\n deltaX: pageX - this.origPageX,\n deltaY: pageY - this.origPageY,\n } as PointerDragEvent)\n }\n }\n\n destroyScrollWatch() {\n if (this.shouldWatchScroll) {\n window.removeEventListener('scroll', this.handleScroll, true) // useCaptured=true\n }\n }\n\n // Event Normalization\n // ----------------------------------------------------------------------------------------------------\n\n createEventFromMouse(ev: MouseEvent, isFirst?: boolean): PointerDragEvent {\n let deltaX = 0\n let deltaY = 0\n\n // TODO: repeat code\n if (isFirst) {\n this.origPageX = ev.pageX\n this.origPageY = ev.pageY\n } else {\n deltaX = ev.pageX - this.origPageX\n deltaY = ev.pageY - this.origPageY\n }\n\n return {\n origEvent: ev,\n isTouch: false,\n subjectEl: this.subjectEl,\n pageX: ev.pageX,\n pageY: ev.pageY,\n deltaX,\n deltaY,\n }\n }\n\n createEventFromTouch(ev: TouchEvent, isFirst?: boolean): PointerDragEvent {\n let touches = ev.touches\n let pageX\n let pageY\n let deltaX = 0\n let deltaY = 0\n\n // if touch coords available, prefer,\n // because FF would give bad ev.pageX ev.pageY\n if (touches && touches.length) {\n pageX = touches[0].pageX\n pageY = touches[0].pageY\n } else {\n pageX = (ev as any).pageX\n pageY = (ev as any).pageY\n }\n\n // TODO: repeat code\n if (isFirst) {\n this.origPageX = pageX\n this.origPageY = pageY\n } else {\n deltaX = pageX - this.origPageX\n deltaY = pageY - this.origPageY\n }\n\n return {\n origEvent: ev,\n isTouch: true,\n subjectEl: this.subjectEl,\n pageX,\n pageY,\n deltaX,\n deltaY,\n }\n }\n}\n\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\nfunction isPrimaryMouseButton(ev: MouseEvent) {\n return ev.button === 0 && !ev.ctrlKey\n}\n\n// Ignoring fake mouse events generated by touch\n// ----------------------------------------------------------------------------------------------------\n\nfunction startIgnoringMouse() { // can be made non-class function\n ignoreMouseDepth += 1\n\n setTimeout(() => {\n ignoreMouseDepth -= 1\n }, config.touchMouseIgnoreWait)\n}\n\n// We want to attach touchmove as early as possible for Safari\n// ----------------------------------------------------------------------------------------------------\n\nfunction listenerCreated() {\n listenerCnt += 1\n\n if (listenerCnt === 1) {\n window.addEventListener('touchmove', onWindowTouchMove, { passive: false })\n }\n}\n\nfunction listenerDestroyed() {\n listenerCnt -= 1\n\n if (!listenerCnt) {\n window.removeEventListener('touchmove', onWindowTouchMove, { passive: false } as AddEventListenerOptions)\n }\n}\n\nfunction onWindowTouchMove(ev: UIEvent) {\n if (isWindowTouchMoveCancelled) {\n ev.preventDefault()\n }\n}\n","import { removeElement, applyStyle, whenTransitionDone, Rect } from '@fullcalendar/core/internal'\n\n/*\nAn effect in which an element follows the movement of a pointer across the screen.\nThe moving element is a clone of some other element.\nMust call start + handleMove + stop.\n*/\nexport class ElementMirror {\n isVisible: boolean = false // must be explicitly enabled\n origScreenX?: number\n origScreenY?: number\n deltaX?: number\n deltaY?: number\n sourceEl: HTMLElement | null = null\n mirrorEl: HTMLElement | null = null\n sourceElRect: Rect | null = null // screen coords relative to viewport\n\n // options that can be set directly by caller\n parentNode: HTMLElement = document.body // HIGHLY SUGGESTED to set this to sidestep ShadowDOM issues\n zIndex: number = 9999\n revertDuration: number = 0\n\n start(sourceEl: HTMLElement, pageX: number, pageY: number) {\n this.sourceEl = sourceEl\n this.sourceElRect = this.sourceEl.getBoundingClientRect()\n this.origScreenX = pageX - window.pageXOffset\n this.origScreenY = pageY - window.pageYOffset\n this.deltaX = 0\n this.deltaY = 0\n this.updateElPosition()\n }\n\n handleMove(pageX: number, pageY: number) {\n this.deltaX = (pageX - window.pageXOffset) - this.origScreenX!\n this.deltaY = (pageY - window.pageYOffset) - this.origScreenY!\n this.updateElPosition()\n }\n\n // can be called before start\n setIsVisible(bool: boolean) {\n if (bool) {\n if (!this.isVisible) {\n if (this.mirrorEl) {\n this.mirrorEl.style.display = ''\n }\n\n this.isVisible = bool // needs to happen before updateElPosition\n this.updateElPosition() // because was not updating the position while invisible\n }\n } else if (this.isVisible) {\n if (this.mirrorEl) {\n this.mirrorEl.style.display = 'none'\n }\n\n this.isVisible = bool\n }\n }\n\n // always async\n stop(needsRevertAnimation: boolean, callback: () => void) {\n let done = () => {\n this.cleanup()\n callback()\n }\n\n if (\n needsRevertAnimation &&\n this.mirrorEl &&\n this.isVisible &&\n this.revertDuration && // if 0, transition won't work\n (this.deltaX || this.deltaY) // if same coords, transition won't work\n ) {\n this.doRevertAnimation(done, this.revertDuration)\n } else {\n setTimeout(done, 0)\n }\n }\n\n doRevertAnimation(callback: () => void, revertDuration: number) {\n let mirrorEl = this.mirrorEl!\n let finalSourceElRect = this.sourceEl!.getBoundingClientRect() // because autoscrolling might have happened\n\n mirrorEl.style.transition =\n 'top ' + revertDuration + 'ms,' +\n 'left ' + revertDuration + 'ms'\n\n applyStyle(mirrorEl, {\n left: finalSourceElRect.left,\n top: finalSourceElRect.top,\n })\n\n whenTransitionDone(mirrorEl, () => {\n mirrorEl.style.transition = ''\n callback()\n })\n }\n\n cleanup() {\n if (this.mirrorEl) {\n removeElement(this.mirrorEl)\n this.mirrorEl = null\n }\n\n this.sourceEl = null\n }\n\n updateElPosition() {\n if (this.sourceEl && this.isVisible) {\n applyStyle(this.getMirrorEl(), {\n left: this.sourceElRect!.left + this.deltaX!,\n top: this.sourceElRect!.top + this.deltaY!,\n })\n }\n }\n\n getMirrorEl(): HTMLElement {\n let sourceElRect = this.sourceElRect!\n let mirrorEl = this.mirrorEl\n\n if (!mirrorEl) {\n mirrorEl = this.mirrorEl = this.sourceEl!.cloneNode(true) as HTMLElement // cloneChildren=true\n\n // we don't want long taps or any mouse interaction causing selection/menus.\n // would use preventSelection(), but that prevents selectstart, causing problems.\n mirrorEl.classList.add('fc-unselectable')\n\n mirrorEl.classList.add('fc-event-dragging')\n\n applyStyle(mirrorEl, {\n position: 'fixed',\n zIndex: this.zIndex,\n visibility: '', // in case original element was hidden by the drag effect\n boxSizing: 'border-box', // for easy width/height\n width: sourceElRect.right - sourceElRect.left, // explicit height in case there was a 'right' value\n height: sourceElRect.bottom - sourceElRect.top, // explicit width in case there was a 'bottom' value\n right: 'auto', // erase and set width instead\n bottom: 'auto', // erase and set height instead\n margin: 0,\n })\n\n this.parentNode.appendChild(mirrorEl)\n }\n\n return mirrorEl\n }\n}\n","import { Rect, ScrollController } from '@fullcalendar/core/internal'\n\n/*\nIs a cache for a given element's scroll information (all the info that ScrollController stores)\nin addition the \"client rectangle\" of the element.. the area within the scrollbars.\n\nThe cache can be in one of two modes:\n- doesListening:false - ignores when the container is scrolled by someone else\n- doesListening:true - watch for scrolling and update the cache\n*/\nexport abstract class ScrollGeomCache extends ScrollController {\n clientRect: Rect\n origScrollTop: number\n origScrollLeft: number\n\n protected scrollController: ScrollController\n protected doesListening: boolean\n protected scrollTop: number\n protected scrollLeft: number\n protected scrollWidth: number\n protected scrollHeight: number\n protected clientWidth: number\n protected clientHeight: number\n\n constructor(scrollController: ScrollController, doesListening: boolean) {\n super()\n this.scrollController = scrollController\n this.doesListening = doesListening\n this.scrollTop = this.origScrollTop = scrollController.getScrollTop()\n this.scrollLeft = this.origScrollLeft = scrollController.getScrollLeft()\n this.scrollWidth = scrollController.getScrollWidth()\n this.scrollHeight = scrollController.getScrollHeight()\n this.clientWidth = scrollController.getClientWidth()\n this.clientHeight = scrollController.getClientHeight()\n this.clientRect = this.computeClientRect() // do last in case it needs cached values\n\n if (this.doesListening) {\n this.getEventTarget().addEventListener('scroll', this.handleScroll)\n }\n }\n\n abstract getEventTarget(): EventTarget\n abstract computeClientRect(): Rect\n\n destroy() {\n if (this.doesListening) {\n this.getEventTarget().removeEventListener('scroll', this.handleScroll)\n }\n }\n\n handleScroll = () => {\n this.scrollTop = this.scrollController.getScrollTop()\n this.scrollLeft = this.scrollController.getScrollLeft()\n this.handleScrollChange()\n }\n\n getScrollTop() {\n return this.scrollTop\n }\n\n getScrollLeft() {\n return this.scrollLeft\n }\n\n setScrollTop(top: number) {\n this.scrollController.setScrollTop(top)\n\n if (!this.doesListening) {\n // we are not relying on the element to normalize out-of-bounds scroll values\n // so we need to sanitize ourselves\n this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0)\n\n this.handleScrollChange()\n }\n }\n\n setScrollLeft(top: number) {\n this.scrollController.setScrollLeft(top)\n\n if (!this.doesListening) {\n // we are not relying on the element to normalize out-of-bounds scroll values\n // so we need to sanitize ourselves\n this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0)\n\n this.handleScrollChange()\n }\n }\n\n getClientWidth() {\n return this.clientWidth\n }\n\n getClientHeight() {\n return this.clientHeight\n }\n\n getScrollWidth() {\n return this.scrollWidth\n }\n\n getScrollHeight() {\n return this.scrollHeight\n }\n\n handleScrollChange() {\n }\n}\n","import { computeInnerRect, ElementScrollController } from '@fullcalendar/core/internal'\nimport { ScrollGeomCache } from './ScrollGeomCache.js'\n\nexport class ElementScrollGeomCache extends ScrollGeomCache {\n constructor(el: HTMLElement, doesListening: boolean) {\n super(new ElementScrollController(el), doesListening)\n }\n\n getEventTarget(): EventTarget {\n return (this.scrollController as ElementScrollController).el\n }\n\n computeClientRect() {\n return computeInnerRect((this.scrollController as ElementScrollController).el)\n }\n}\n","import { Rect, WindowScrollController } from '@fullcalendar/core/internal'\nimport { ScrollGeomCache } from './ScrollGeomCache.js'\n\nexport class WindowScrollGeomCache extends ScrollGeomCache {\n constructor(doesListening: boolean) {\n super(new WindowScrollController(), doesListening)\n }\n\n getEventTarget(): EventTarget {\n return window\n }\n\n computeClientRect(): Rect {\n return {\n left: this.scrollLeft,\n right: this.scrollLeft + this.clientWidth,\n top: this.scrollTop,\n bottom: this.scrollTop + this.clientHeight,\n }\n }\n\n // the window is the only scroll object that changes it's rectangle relative\n // to the document's topleft as it scrolls\n handleScrollChange() {\n this.clientRect = this.computeClientRect()\n }\n}\n","import { getElRoot } from '@fullcalendar/core/internal'\nimport { ScrollGeomCache } from '../ScrollGeomCache.js'\nimport { ElementScrollGeomCache } from '../ElementScrollGeomCache.js'\nimport { WindowScrollGeomCache } from '../WindowScrollGeomCache.js'\n\ninterface Edge {\n scrollCache: ScrollGeomCache\n name: 'top' | 'left' | 'right' | 'bottom'\n distance: number // how many pixels the current pointer is from the edge\n}\n\n// If available we are using native \"performance\" API instead of \"Date\"\n// Read more about it on MDN:\n// https://developer.mozilla.org/en-US/docs/Web/API/Performance\nconst getTime = typeof performance === 'function' ? (performance as any).now : Date.now\n\n/*\nFor a pointer interaction, automatically scrolls certain scroll containers when the pointer\napproaches the edge.\n\nThe caller must call start + handleMove + stop.\n*/\nexport class AutoScroller {\n // options that can be set by caller\n isEnabled: boolean = true\n scrollQuery: (Window | string)[] = [window, '.fc-scroller']\n edgeThreshold: number = 50 // pixels\n maxVelocity: number = 300 // pixels per second\n\n // internal state\n pointerScreenX: number | null = null\n pointerScreenY: number | null = null\n isAnimating: boolean = false\n scrollCaches: ScrollGeomCache[] | null = null\n msSinceRequest?: number\n\n // protect against the initial pointerdown being too close to an edge and starting the scroll\n everMovedUp: boolean = false\n everMovedDown: boolean = false\n everMovedLeft: boolean = false\n everMovedRight: boolean = false\n\n start(pageX: number, pageY: number, scrollStartEl: HTMLElement) {\n if (this.isEnabled) {\n this.scrollCaches = this.buildCaches(scrollStartEl)\n this.pointerScreenX = null\n this.pointerScreenY = null\n this.everMovedUp = false\n this.everMovedDown = false\n this.everMovedLeft = false\n this.everMovedRight = false\n this.handleMove(pageX, pageY)\n }\n }\n\n handleMove(pageX: number, pageY: number) {\n if (this.isEnabled) {\n let pointerScreenX = pageX - window.pageXOffset\n let pointerScreenY = pageY - window.pageYOffset\n\n let yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY\n let xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX\n\n if (yDelta < 0) {\n this.everMovedUp = true\n } else if (yDelta > 0) {\n this.everMovedDown = true\n }\n\n if (xDelta < 0) {\n this.everMovedLeft = true\n } else if (xDelta > 0) {\n this.everMovedRight = true\n }\n\n this.pointerScreenX = pointerScreenX\n this.pointerScreenY = pointerScreenY\n\n if (!this.isAnimating) {\n this.isAnimating = true\n this.requestAnimation(getTime())\n }\n }\n }\n\n stop() {\n if (this.isEnabled) {\n this.isAnimating = false // will stop animation\n\n for (let scrollCache of this.scrollCaches!) {\n scrollCache.destroy()\n }\n\n this.scrollCaches = null\n }\n }\n\n requestAnimation(now: number) {\n this.msSinceRequest = now\n requestAnimationFrame(this.animate)\n }\n\n private animate = () => {\n if (this.isAnimating) { // wasn't cancelled between animation calls\n let edge = this.computeBestEdge(\n this.pointerScreenX! + window.pageXOffset,\n this.pointerScreenY! + window.pageYOffset,\n )\n\n if (edge) {\n let now = getTime()\n this.handleSide(edge, (now - this.msSinceRequest!) / 1000)\n this.requestAnimation(now)\n } else {\n this.isAnimating = false // will stop animation\n }\n }\n }\n\n private handleSide(edge: Edge, seconds: number) {\n let { scrollCache } = edge\n let { edgeThreshold } = this\n let invDistance = edgeThreshold - edge.distance\n let velocity = // the closer to the edge, the faster we scroll\n ((invDistance * invDistance) / (edgeThreshold * edgeThreshold)) * // quadratic\n this.maxVelocity * seconds\n let sign = 1\n\n switch (edge.name) {\n case 'left':\n sign = -1\n // falls through\n case 'right':\n scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign)\n break\n\n case 'top':\n sign = -1\n // falls through\n case 'bottom':\n scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign)\n break\n }\n }\n\n // left/top are relative to document topleft\n private computeBestEdge(left: number, top: number): Edge | null {\n let { edgeThreshold } = this\n let bestSide: Edge | null = null\n let scrollCaches = this.scrollCaches || []\n\n for (let scrollCache of scrollCaches) {\n let rect = scrollCache.clientRect\n let leftDist = left - rect.left\n let rightDist = rect.right - left\n let topDist = top - rect.top\n let bottomDist = rect.bottom - top\n\n // completely within the rect?\n if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {\n if (\n topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() &&\n (!bestSide || bestSide.distance > topDist)\n ) {\n bestSide = { scrollCache, name: 'top', distance: topDist }\n }\n\n if (\n bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() &&\n (!bestSide || bestSide.distance > bottomDist)\n ) {\n bestSide = { scrollCache, name: 'bottom', distance: bottomDist }\n }\n\n if (\n leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() &&\n (!bestSide || bestSide.distance > leftDist)\n ) {\n bestSide = { scrollCache, name: 'left', distance: leftDist }\n }\n\n if (\n rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() &&\n (!bestSide || bestSide.distance > rightDist)\n ) {\n bestSide = { scrollCache, name: 'right', distance: rightDist }\n }\n }\n }\n\n return bestSide\n }\n\n private buildCaches(scrollStartEl: HTMLElement) {\n return this.queryScrollEls(scrollStartEl).map((el) => {\n if (el === window) {\n return new WindowScrollGeomCache(false) // false = don't listen to user-generated scrolls\n }\n return new ElementScrollGeomCache(el, false) // false = don't listen to user-generated scrolls\n })\n }\n\n private queryScrollEls(scrollStartEl: HTMLElement) {\n let els = []\n\n for (let query of this.scrollQuery) {\n if (typeof query === 'object') {\n els.push(query)\n } else {\n els.push(...Array.prototype.slice.call(\n getElRoot(scrollStartEl).querySelectorAll(query),\n ))\n }\n }\n\n return els\n }\n}\n","import {\n PointerDragEvent,\n preventSelection,\n allowSelection,\n preventContextMenu,\n allowContextMenu,\n ElementDragging,\n} from '@fullcalendar/core/internal'\nimport { PointerDragging } from './PointerDragging.js'\nimport { ElementMirror } from './ElementMirror.js'\nimport { AutoScroller } from './AutoScroller.js'\n\n/*\nMonitors dragging on an element. Has a number of high-level features:\n- minimum distance required before dragging\n- minimum wait time (\"delay\") before dragging\n- a mirror element that follows the pointer\n*/\nexport class FeaturefulElementDragging extends ElementDragging {\n pointer: PointerDragging\n mirror: ElementMirror\n autoScroller: AutoScroller\n\n // options that can be directly set by caller\n // the caller can also set the PointerDragging's options as well\n delay: number | null = null\n minDistance: number = 0\n touchScrollAllowed: boolean = true // prevents drag from starting and blocks scrolling during drag\n\n mirrorNeedsRevert: boolean = false\n isInteracting: boolean = false // is the user validly moving the pointer? lasts until pointerup\n isDragging: boolean = false // is it INTENTFULLY dragging? lasts until after revert animation\n isDelayEnded: boolean = false\n isDistanceSurpassed: boolean = false\n delayTimeoutId: number | null = null\n\n constructor(private containerEl: HTMLElement, selector?: string) {\n super(containerEl)\n\n let pointer = this.pointer = new PointerDragging(containerEl)\n pointer.emitter.on('pointerdown', this.onPointerDown)\n pointer.emitter.on('pointermove', this.onPointerMove)\n pointer.emitter.on('pointerup', this.onPointerUp)\n\n if (selector) {\n pointer.selector = selector\n }\n\n this.mirror = new ElementMirror()\n this.autoScroller = new AutoScroller()\n }\n\n destroy() {\n this.pointer.destroy()\n\n // HACK: simulate a pointer-up to end the current drag\n // TODO: fire 'dragend' directly and stop interaction. discourage use of pointerup event (b/c might not fire)\n this.onPointerUp({} as any)\n }\n\n onPointerDown = (ev: PointerDragEvent) => {\n if (!this.isDragging) { // so new drag doesn't happen while revert animation is going\n this.isInteracting = true\n this.isDelayEnded = false\n this.isDistanceSurpassed = false\n\n preventSelection(document.body)\n preventContextMenu(document.body)\n\n // prevent links from being visited if there's an eventual drag.\n // also prevents selection in older browsers (maybe?).\n // not necessary for touch, besides, browser would complain about passiveness.\n if (!ev.isTouch) {\n ev.origEvent.preventDefault()\n }\n\n this.emitter.trigger('pointerdown', ev)\n\n if (\n this.isInteracting && // not destroyed via pointerdown handler\n !this.pointer.shouldIgnoreMove\n ) {\n // actions related to initiating dragstart+dragmove+dragend...\n\n this.mirror.setIsVisible(false) // reset. caller must set-visible\n this.mirror.start(ev.subjectEl as HTMLElement, ev.pageX, ev.pageY) // must happen on first pointer down\n\n this.startDelay(ev)\n\n if (!this.minDistance) {\n this.handleDistanceSurpassed(ev)\n }\n }\n }\n }\n\n onPointerMove = (ev: PointerDragEvent) => {\n if (this.isInteracting) {\n this.emitter.trigger('pointermove', ev)\n\n if (!this.isDistanceSurpassed) {\n let minDistance = this.minDistance\n let distanceSq // current distance from the origin, squared\n let { deltaX, deltaY } = ev\n\n distanceSq = deltaX * deltaX + deltaY * deltaY\n if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\n this.handleDistanceSurpassed(ev)\n }\n }\n\n if (this.isDragging) {\n // a real pointer move? (not one simulated by scrolling)\n if (ev.origEvent.type !== 'scroll') {\n this.mirror.handleMove(ev.pageX, ev.pageY)\n this.autoScroller.handleMove(ev.pageX, ev.pageY)\n }\n\n this.emitter.trigger('dragmove', ev)\n }\n }\n }\n\n onPointerUp = (ev: PointerDragEvent) => {\n if (this.isInteracting) {\n this.isInteracting = false\n\n allowSelection(document.body)\n allowContextMenu(document.body)\n\n this.emitter.trigger('pointerup', ev) // can potentially set mirrorNeedsRevert\n\n if (this.isDragging) {\n this.autoScroller.stop()\n this.tryStopDrag(ev) // which will stop the mirror\n }\n\n if (this.delayTimeoutId) {\n clearTimeout(this.delayTimeoutId)\n this.delayTimeoutId = null\n }\n }\n }\n\n startDelay(ev: PointerDragEvent) {\n if (typeof this.delay === 'number') {\n this.delayTimeoutId = setTimeout(() => {\n this.delayTimeoutId = null\n this.handleDelayEnd(ev)\n }, this.delay) as any // not assignable to number!\n } else {\n this.handleDelayEnd(ev)\n }\n }\n\n handleDelayEnd(ev: PointerDragEvent) {\n this.isDelayEnded = true\n this.tryStartDrag(ev)\n }\n\n handleDistanceSurpassed(ev: PointerDragEvent) {\n this.isDistanceSurpassed = true\n this.tryStartDrag(ev)\n }\n\n tryStartDrag(ev: PointerDragEvent) {\n if (this.isDelayEnded && this.isDistanceSurpassed) {\n if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {\n this.isDragging = true\n this.mirrorNeedsRevert = false\n\n this.autoScroller.start(ev.pageX, ev.pageY, this.containerEl)\n this.emitter.trigger('dragstart', ev)\n\n if (this.touchScrollAllowed === false) {\n this.pointer.cancelTouchScroll()\n }\n }\n }\n }\n\n tryStopDrag(ev: PointerDragEvent) {\n // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events\n // that come from the document to fire beforehand. much more convenient this way.\n this.mirror.stop(\n this.mirrorNeedsRevert,\n this.stopDrag.bind(this, ev), // bound with args\n )\n }\n\n stopDrag(ev: PointerDragEvent) {\n this.isDragging = false\n this.emitter.trigger('dragend', ev)\n }\n\n // fill in the implementations...\n\n setIgnoreMove(bool: boolean) {\n this.pointer.shouldIgnoreMove = bool\n }\n\n setMirrorIsVisible(bool: boolean) {\n this.mirror.setIsVisible(bool)\n }\n\n setMirrorNeedsRevert(bool: boolean) {\n this.mirrorNeedsRevert = bool\n }\n\n setAutoScrollEnabled(bool: boolean) {\n this.autoScroller.isEnabled = bool\n }\n}\n","import {\n getClippingParents, computeRect,\n pointInsideRect, Rect,\n} from '@fullcalendar/core/internal'\nimport { ElementScrollGeomCache } from './ElementScrollGeomCache.js'\n\n/*\nWhen this class is instantiated, it records the offset of an element (relative to the document topleft),\nand continues to monitor scrolling, updating the cached coordinates if it needs to.\nDoes not access the DOM after instantiation, so highly performant.\n\nAlso keeps track of all scrolling/overflow:hidden containers that are parents of the given element\nand an determine if a given point is inside the combined clipping rectangle.\n*/\nexport class OffsetTracker { // ElementOffsetTracker\n scrollCaches: ElementScrollGeomCache[]\n origRect: Rect\n\n constructor(el: HTMLElement) {\n this.origRect = computeRect(el)\n\n // will work fine for divs that have overflow:hidden\n this.scrollCaches = getClippingParents(el).map(\n (scrollEl) => new ElementScrollGeomCache(scrollEl, true), // listen=true\n )\n }\n\n destroy() {\n for (let scrollCache of this.scrollCaches) {\n scrollCache.destroy()\n }\n }\n\n computeLeft() {\n let left = this.origRect.left\n\n for (let scrollCache of this.scrollCaches) {\n left += scrollCache.origScrollLeft - scrollCache.getScrollLeft()\n }\n\n return left\n }\n\n computeTop() {\n let top = this.origRect.top\n\n for (let scrollCache of this.scrollCaches) {\n top += scrollCache.origScrollTop - scrollCache.getScrollTop()\n }\n\n return top\n }\n\n isWithinClipping(pageX: number, pageY: number): boolean {\n let point = { left: pageX, top: pageY }\n\n for (let scrollCache of this.scrollCaches) {\n if (\n !isIgnoredClipping(scrollCache.getEventTarget()) &&\n !pointInsideRect(point, scrollCache.clientRect)\n ) {\n return false\n }\n }\n\n return true\n }\n}\n\n// certain clipping containers should never constrain interactions, like <html> and <body>\n// https://github.com/fullcalendar/fullcalendar/issues/3615\nfunction isIgnoredClipping(node: EventTarget) {\n let tagName = (node as HTMLElement).tagName\n\n return tagName === 'HTML' || tagName === 'BODY'\n}\n","import {\n Emitter, PointerDragEvent,\n isDateSpansEqual,\n computeRect,\n constrainPoint, intersectRects, getRectCenter, diffPoints, Point,\n rangeContainsRange,\n Hit,\n InteractionSettingsStore,\n mapHash,\n ElementDragging,\n} from '@fullcalendar/core/internal'\nimport { OffsetTracker } from '../OffsetTracker.js'\n\n/*\nTracks movement over multiple droppable areas (aka \"hits\")\nthat exist in one or more DateComponents.\nRelies on an existing draggable.\n\nemits:\n- pointerdown\n- dragstart\n- hitchange - fires initially, even if not over a hit\n- pointerup\n- (hitchange - again, to null, if ended over a hit)\n- dragend\n*/\nexport class HitDragging {\n droppableStore: InteractionSettingsStore\n dragging: ElementDragging\n emitter: Emitter<any>\n\n // options that can be set by caller\n useSubjectCenter: boolean = false\n requireInitial: boolean = true // if doesn't start out on a hit, won't emit any events\n\n // internal state\n offsetTrackers: { [componentUid: string]: OffsetTracker }\n initialHit: Hit | null = null\n movingHit: Hit | null = null\n finalHit: Hit | null = null // won't ever be populated if shouldIgnoreMove\n coordAdjust?: Point\n\n constructor(dragging: ElementDragging, droppableStore: InteractionSettingsStore) {\n this.droppableStore = droppableStore\n\n dragging.emitter.on('pointerdown', this.handlePointerDown)\n dragging.emitter.on('dragstart', this.handleDragStart)\n dragging.emitter.on('dragmove', this.handleDragMove)\n dragging.emitter.on('pointerup', this.handlePointerUp)\n dragging.emitter.on('dragend', this.handleDragEnd)\n\n this.dragging = dragging\n this.emitter = new Emitter()\n }\n\n handlePointerDown = (ev: PointerDragEvent) => {\n let { dragging } = this\n\n this.initialHit = null\n this.movingHit = null\n this.finalHit = null\n\n this.prepareHits()\n this.processFirstCoord(ev)\n\n if (this.initialHit || !this.requireInitial) {\n dragging.setIgnoreMove(false)\n\n // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(\n this.emitter.trigger('pointerdown', ev)\n } else {\n dragging.setIgnoreMove(true)\n }\n }\n\n // sets initialHit\n // sets coordAdjust\n processFirstCoord(ev: PointerDragEvent) {\n let origPoint = { left: ev.pageX, top: ev.pageY }\n let adjustedPoint = origPoint\n let subjectEl = ev.subjectEl\n let subjectRect\n\n if (subjectEl instanceof HTMLElement) { // i.e. not a Document/ShadowRoot\n subjectRect = computeRect(subjectEl)\n adjustedPoint = constrainPoint(adjustedPoint, subjectRect)\n }\n\n let initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top)\n if (initialHit) {\n if (this.useSubjectCenter && subjectRect) {\n let slicedSubjectRect = intersectRects(subjectRect, initialHit.rect)\n if (slicedSubjectRect) {\n adjustedPoint = getRectCenter(slicedSubjectRect)\n }\n }\n\n this.coordAdjust = diffPoints(adjustedPoint, origPoint)\n } else {\n this.coordAdjust = { left: 0, top: 0 }\n }\n }\n\n handleDragStart = (ev: PointerDragEvent) => {\n this.emitter.trigger('dragstart', ev)\n this.handleMove(ev, true) // force = fire even if initially null\n }\n\n handleDragMove = (ev: PointerDragEvent) => {\n this.emitter.trigger('dragmove', ev)\n this.handleMove(ev)\n }\n\n handlePointerUp = (ev: PointerDragEvent) => {\n this.releaseHits()\n this.emitter.trigger('pointerup', ev)\n }\n\n handleDragEnd = (ev: PointerDragEvent) => {\n if (this.movingHit) {\n this.emitter.trigger('hitupdate', null, true, ev)\n }\n\n this.finalHit = this.movingHit\n this.movingHit = null\n this.emitter.trigger('dragend', ev)\n }\n\n handleMove(ev: PointerDragEvent, forceHandle?: boolean) {\n let hit = this.queryHitForOffset(\n ev.pageX + this.coordAdjust!.left,\n ev.pageY + this.coordAdjust!.top,\n )\n\n if (forceHandle || !isHitsEqual(this.movingHit, hit)) {\n this.movingHit = hit\n this.emitter.trigger('hitupdate', hit, false, ev)\n }\n }\n\n prepareHits() {\n this.offsetTrackers = mapHash(this.droppableStore, (interactionSettings) => {\n interactionSettings.component.prepareHits()\n return new OffsetTracker(interactionSettings.el)\n })\n }\n\n releaseHits() {\n let { offsetTrackers } = this\n\n for (let id in offsetTrackers) {\n offsetTrackers[id].destroy()\n }\n\n this.offsetTrackers = {}\n }\n\n queryHitForOffset(offsetLeft: number, offsetTop: number): Hit | null {\n let { droppableStore, offsetTrackers } = this\n let bestHit: Hit | null = null\n\n for (let id in droppableStore) {\n let component = droppableStore[id].component\n let offsetTracker = offsetTrackers[id]\n\n if (\n offsetTracker && // wasn't destroyed mid-drag\n offsetTracker.isWithinClipping(offsetLeft, offsetTop)\n ) {\n let originLeft = offsetTracker.computeLeft()\n let originTop = offsetTracker.computeTop()\n let positionLeft = offsetLeft - originLeft\n let positionTop = offsetTop - originTop\n let { origRect } = offsetTracker\n let width = origRect.right - origRect.left\n let height = origRect.bottom - origRect.top\n\n if (\n // must be within the element's bounds\n positionLeft >= 0 && positionLeft < width &&\n positionTop >= 0 && positionTop < height\n ) {\n let hit = component.queryHit(positionLeft, positionTop, width, height)\n if (\n hit && (\n // make sure the hit is within activeRange, meaning it's not a dead cell\n rangeContainsRange(hit.dateProfile.activeRange, hit.dateSpan.range)\n ) &&\n (!bestHit || hit.layer > bestHit.layer)\n ) {\n hit.componentId = id\n hit.context = component.context\n\n // TODO: better way to re-orient rectangle\n hit.rect.left += originLeft\n hit.rect.right += originLeft\n hit.rect.top += originTop\n hit.rect.bottom += originTop\n\n bestHit = hit\n }\n }\n }\n }\n\n return bestHit\n }\n}\n\nexport function isHitsEqual(hit0: Hit | null, hit1: Hit | null): boolean {\n if (!hit0 && !hit1) {\n return true\n }\n\n if (Boolean(hit0) !== Boolean(hit1)) {\n return false\n }\n\n return isDateSpansEqual(hit0!.dateSpan, hit1!.dateSpan)\n}\n","import { ViewApi, EventApi, DatePointApi } from '@fullcalendar/core'\nimport { DateSpan, CalendarContext, DateEnv } from '@fullcalendar/core/internal'\n\nexport interface DropArg extends DatePointApi {\n draggedEl: HTMLElement\n jsEvent: MouseEvent\n view: ViewApi\n}\n\nexport type EventReceiveArg = EventReceiveLeaveArg\nexport type EventLeaveArg = EventReceiveLeaveArg\nexport interface EventReceiveLeaveArg { // will this become public?\n draggedEl: HTMLElement\n event: EventApi\n relatedEvents: EventApi[]\n revert: () => void\n view: ViewApi\n}\n\nexport function buildDatePointApiWithContext(dateSpan: DateSpan, context: CalendarContext) {\n let props = {} as DatePointApi\n\n for (let transform of context.pluginHooks.datePointTransforms) {\n Object.assign(props, transform(dateSpan, context))\n }\n\n Object.assign(props, buildDatePointApi(dateSpan, context.dateEnv))\n\n return props\n}\n\nexport function buildDatePointApi(span: DateSpan, dateEnv: DateEnv): DatePointApi {\n return {\n date: dateEnv.toDate(span.range.start),\n dateStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),\n allDay: span.allDay,\n }\n}\n","import { ViewApi, DatePointApi } from '@fullcalendar/core'\nimport {\n PointerDragEvent, Interaction, InteractionSettings, interactionSettingsToStore,\n} from '@fullcalendar/core/internal'\nimport { FeaturefulElementDragging } from '../dnd/FeaturefulElementDragging.js'\nimport { HitDragging, isHitsEqual } from './HitDragging.js'\nimport { buildDatePointApiWithContext } from '../utils.js'\n\nexport interface DateClickArg extends DatePointApi {\n dayEl: HTMLElement\n jsEvent: MouseEvent\n view: ViewApi\n}\n\n/*\nMonitors when the user clicks on a specific date/time of a component.\nA pointerdown+pointerup on the same \"hit\" constitutes a click.\n*/\nexport class DateClicking extends Interaction {\n dragging: FeaturefulElementDragging\n hitDragging: HitDragging\n\n constructor(settings: InteractionSettings) {\n super(settings)\n\n // we DO want to watch pointer moves because otherwise finalHit won't get populated\n this.dragging = new FeaturefulElementDragging(settings.el)\n this.dragging.autoScroller.isEnabled = false\n\n let hitDragging = this.hitDragging = new HitDragging(this.dragging, interactionSettingsToStore(settings))\n hitDragging.emitter.on('pointerdown', this.handlePointerDown)\n hitDragging.emitter.on('dragend', this.handleDragEnd)\n }\n\n destroy() {\n this.dragging.destroy()\n }\n\n handlePointerDown = (pev: PointerDragEvent) => {\n let { dragging } = this\n let downEl = pev.origEvent.target as HTMLElement\n\n // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired\n dragging.setIgnoreMove(\n !this.component.isValidDateDownEl(downEl),\n )\n }\n\n // won't even fire if moving was ignored\n handleDragEnd = (ev: PointerDragEvent) => {\n let { component } = this\n let { pointer } = this.dragging\n\n if (!pointer.wasTouchScroll) {\n let { initialHit, finalHit } = this.hitDragging\n\n if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {\n let { context } = component\n let arg: DateClickArg = {\n ...buildDatePointApiWithContext(initialHit.dateSpan, context),\n dayEl: initialHit.dayEl,\n jsEvent: ev.origEvent as MouseEvent,\n view: context.viewApi || context.calendarApi.view,\n }\n\n context.emitter.trigger('dateClick', arg)\n }\n }\n }\n}\n","import {\n compareNumbers, enableCursor, disableCursor, DateComponent, Hit,\n DateSpan, PointerDragEvent, dateSelectionJoinTransformer,\n Interaction, InteractionSettings, interactionSettingsToStore,\n triggerDateSelect, isDateSelectionValid,\n} from '@fullcalendar/core/internal'\nimport { HitDragging } from './HitDragging.js'\nimport { FeaturefulElementDragging } from '../dnd/FeaturefulElementDragging.js'\n\n/*\nTracks when the user selects a portion of time of a component,\nconstituted by a drag over date cells, with a possible delay at the beginning of the drag.\n*/\nexport class DateSelecting extends Interaction {\n dragging: FeaturefulElementDragging\n hitDragging: HitDragging\n dragSelection: DateSpan | null = null\n\n constructor(settings: InteractionSettings) {\n super(settings)\n let { component } = settings\n let { options } = component.context\n\n let dragging = this.dragging = new FeaturefulElementDragging(settings.el)\n dragging.touchScrollAllowed = false\n dragging.minDistance = options.selectMinDistance || 0\n dragging.autoScroller.isEnabled = options.dragScroll\n\n let hitDragging = this.hitDragging = new HitDragging(this.dragging, interactionSettingsToStore(settings))\n hitDragging.emitter.on('pointerdown', this.handlePointerDown)\n hitDragging.emitter.on('dragstart', this.handleDragStart)\n hitDragging.emitter.on('hitupdate', this.handleHitUpdate)\n hitDragging.emitter.on('pointerup', this.handlePointerUp)\n }\n\n destroy() {\n this.dragging.destroy()\n }\n\n handlePointerDown = (ev: PointerDragEvent) => {\n let { component, dragging } = this\n let { options } = component.context\n\n let canSelect = options.selectable &&\n component.isValidDateDownEl(ev.origEvent.target as HTMLElement)\n\n // don't bother to watch expensive moves if component won't do selection\n dragging.setIgnoreMove(!canSelect)\n\n // if touch, require user to hold down\n dragging.delay = ev.isTouch ? getComponentTouchDelay(component) : null\n }\n\n handleDragStart = (ev: PointerDragEvent) => {\n this.component.context.calendarApi.unselect(ev) // unselect previous selections\n }\n\n handleHitUpdate = (hit: Hit | null, isFinal: boolean) => {\n let { context } = this.component\n let dragSelection: DateSpan | null = null\n let isInvalid = false\n\n if (hit) {\n let initialHit = this.hitDragging.initialHit!\n let disallowed = hit.componentId === initialHit.componentId\n && this.isHitComboAllowed\n && !this.isHitComboAllowed(initialHit, hit)\n\n if (!disallowed) {\n dragSelection = joinHitsIntoSelection(\n initialHit,\n hit,\n context.pluginHooks.dateSelectionTransformers,\n )\n }\n\n if (!dragSelection || !isDateSelectionValid(dragSelection, hit.dateProfile, context)) {\n isInvalid = true\n dragSelection = null\n }\n }\n\n if (dragSelection) {\n context.dispatch({ type: 'SELECT_DATES', selection: dragSelection })\n } else if (!isFinal) { // only unselect if moved away while dragging\n context.dispatch({ type: 'UNSELECT_DATES' })\n }\n\n if (!isInvalid) {\n enableCursor()\n } else {\n disableCursor()\n }\n\n if (!isFinal) {\n this.dragSelection = dragSelection // only clear if moved away from all hits while dragging\n }\n }\n\n handlePointerUp = (pev: PointerDragEvent) => {\n if (this.dragSelection) {\n // selection is already rendered, so just need to report selection\n triggerDateSelect(this.dragSelection, pev, this.component.context)\n\n this.dragSelection = null\n }\n }\n}\n\nfunction getComponentTouchDelay(component: DateComponent<any>): number {\n let { options } = component.context\n let delay = options.selectLongPressDelay\n\n if (delay == null) {\n delay = options.longPressDelay\n }\n\n return delay\n}\n\nfunction joinHitsIntoSelection(hit0: Hit, hit1: Hit, dateSelectionTransformers: dateSelectionJoinTransformer[]): DateSpan {\n let dateSpan0 = hit0.dateSpan\n let dateSpan1 = hit1.dateSpan\n let ms = [\n dateSpan0.range.start,\n dateSpan0.range.end,\n dateSpan1.range.start,\n dateSpan1.range.end,\n ]\n\n ms.sort(compareNumbers)\n\n let props = {} as DateSpan\n\n for (let transformer of dateSelectionTransformers) {\n let res = transformer(hit0, hit1)\n\n if (res === false) {\n return null\n }\n\n if (res) {\n Object.assign(props, res)\n }\n }\n\n props.range = { start: ms[0], end: ms[3] }\n props.allDay = dateSpan0.allDay\n\n return props\n}\n","import {\n EventApi,\n ViewApi,\n EventChangeArg,\n EventAddArg,\n EventRemoveArg,\n EventRenderRange,\n} from '@fullcalendar/core'\nimport {\n DateComponent, Seg,\n PointerDragEvent, Hit,\n EventMutation, applyMutationToEventStore,\n startOfDay,\n elementClosest,\n EventStore, getRelevantEvents, createEmptyEventStore,\n EventInteractionState,\n diffDates, enableCursor, disableCursor,\n getElSeg,\n eventDragMutationMassager,\n Interaction, InteractionSettings, interactionSettingsStore,\n EventDropTransformers,\n CalendarContext,\n buildEventApis,\n isInteractionValid,\n getElRoot,\n EventImpl,\n} from '@fullcalendar/core/internal'\nimport { HitDragging, isHitsEqual } from './HitDragging.js'\nimport { FeaturefulElementDragging } from '../dnd/FeaturefulElementDragging.js'\nimport { buildDatePointApiWithContext } from '../utils.js'\n\nexport type EventDragStopArg = EventDragArg\nexport type EventDragStartArg = EventDragArg\n\nexport interface EventDragArg {\n el: HTMLElement\n event: EventApi\n jsEvent: MouseEvent\n view: ViewApi\n}\n\nexport class EventDragging extends Interaction { // TODO: rename to EventSelectingAndDragging\n // TODO: test this in IE11\n // QUESTION: why do we need it on the resizable???\n static SELECTOR = '.fc-event-draggable, .fc-event-resizable'\n\n dragging: FeaturefulElementDragging\n hitDragging: HitDragging\n\n // internal state\n subjectEl: HTMLElement | null = null\n subjectSeg: Seg | null = null // the seg being selected/dragged\n isDragging: boolean = false\n eventRange: EventRenderRange | null = null\n relevantEvents: EventStore | null = null // the events being dragged\n receivingContext: CalendarContext | null = null\n validMutation: EventMutation | null = null\n mutatedRelevantEvents: EventStore | null = null\n\n constructor(settings: InteractionSettings) {\n super(settings)\n let { component } = this\n let { options } = component.context\n\n let dragging = this.dragging = new FeaturefulElementDragging(settings.el)\n dragging.pointer.selector = EventDragging.SELECTOR\n dragging.touchScrollAllowed = false\n dragging.autoScroller.isEnabled = options.dragScroll\n\n let hitDragging = this.hitDragging = new HitDragging(this.dragging, interactionSettingsStore)\n hitDragging.useSubjectCenter = settings.useEventCenter\n hitDragging.emitter.on('pointerdown', this.handlePointerDown)\n hitDragging.emitter.on('dragstart', this.handleDragStart)\n hitDragging.emitter.on('hitupdate', this.handleHitUpdate)\n hitDragging.emitter.on('pointerup', this.handlePointerUp)\n hitDragging.emitter.on('dragend', this.handleDragEnd)\n }\n\n destroy() {\n this.dragging.destroy()\n }\n\n handlePointerDown = (ev: PointerDragEvent) => {\n let origTarget = ev.origEvent.target as HTMLElement\n let { component, dragging } = this\n let { mirror } = dragging\n let { options } = component.context\n let initialContext = component.context\n this.subjectEl = ev.subjectEl as HTMLElement\n let subjectSeg = this.subjectSeg = getElSeg(ev.subjectEl as HTMLElement)!\n let eventRange = this.eventRange = subjectSeg.eventRange!\n let eventInstanceId = eventRange.instance!.instanceId\n\n this.relevantEvents = getRelevantEvents(\n initialContext.getCurrentData().eventStore,\n eventInstanceId,\n )\n\n dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance\n dragging.delay =\n // only do a touch delay if touch and this event hasn't been selected yet\n (ev.isTouch && eventInstanceId !== component.props.eventSelection) ?\n getComponentTouchDelay(component) :\n null\n\n if (options.fixedMirrorParent) {\n mirror.parentNode = options.fixedMirrorParent\n } else {\n mirror.parentNode = elementClosest(origTarget, '.fc')\n }\n\n mirror.revertDuration = options.dragRevertDuration\n\n let isValid =\n component.isValidSegDownEl(origTarget) &&\n !elementClosest(origTarget, '.fc-event-resizer') // NOT on a resizer\n\n dragging.setIgnoreMove(!isValid)\n\n // disable dragging for elements that are resizable (ie, selectable)\n // but are not draggable\n this.isDragging = isValid &&\n (ev.subjectEl as HTMLElement).classList.contains('fc-event-draggable')\n }\n\n handleDragStart = (ev: PointerDragEvent) => {\n let initialContext = this.component.context\n let eventRange = this.eventRange!\n let eventInstanceId = eventRange.instance.instanceId\n\n if (ev.isTouch) {\n // need to select a different event?\n if (eventInstanceId !== this.component.props.eventSelection) {\n initialContext.dispatch({ type: 'SELECT_EVENT', eventInstanceId })\n }\n } else {\n // if now using mouse, but was previous touch interaction, clear selected event\n initialContext.dispatch({ type: 'UNSELECT_EVENT' })\n }\n\n if (this.isDragging) {\n initialContext.calendarApi.unselect(ev) // unselect *date* selection\n initialContext.emitter.trigger('eventDragStart', {\n el: this.subjectEl,\n event: new EventImpl(initialContext, eventRange.def, eventRange.instance),\n jsEvent: ev.origEvent as MouseEvent, // Is this always a mouse event? See #4655\n view: initialContext.viewApi,\n } as EventDragStartArg)\n }\n }\n\n handleHitUpdate = (hit: Hit | null, isFinal: boolean) => {\n if (!this.isDragging) {\n return\n }\n\n let relevantEvents = this.relevantEvents!\n let initialHit = this.hitDragging.initialHit!\n let initialContext = this.component.context\n\n // states based on new hit\n let receivingContext: CalendarContext | null = null\n let mutation: EventMutation | null = null\n let mutatedRelevantEvents: EventStore | null = null\n let isInvalid = false\n let interaction: EventInteractionState = {\n affectedEvents: relevantEvents,\n mutatedEvents: createEmptyEventStore(),\n isEvent: true,\n }\n\n if (hit) {\n receivingContext = hit.context\n let receivingOptions = receivingContext.options\n\n if (\n initialContext === receivingContext ||\n (receivingOptions.editable && receivingOptions.droppable)\n ) {\n mutation = computeEventMutation(initialHit, hit, receivingContext.getCurrentData().pluginHooks.eventDragMutationMassagers)\n\n if (mutation) {\n mutatedRelevantEvents = applyMutationToEventStore(\n relevantEvents,\n receivingContext.getCurrentData().eventUiBases,\n mutation,\n receivingContext,\n )\n interaction.mutatedEvents = mutatedRelevantEvents\n\n if (!isInteractionValid(interaction, hit.dateProfile, receivingContext)) {\n isInvalid = true\n mutation = null\n mutatedRelevantEvents = null\n interaction.mutatedEvents = createEmptyEventStore()\n }\n }\n } else {\n receivingContext = null\n }\n }\n\n this.displayDrag(receivingContext, interaction)\n\n if (!isInvalid) {\n enableCursor()\n } else {\n disableCursor()\n }\n\n if (!isFinal) {\n if (\n initialContext === receivingContext && // TODO: write test for this\n isHitsEqual(initialHit, hit)\n ) {\n mutation = null\n }\n\n this.dragging.setMirrorNeedsRevert(!mutation)\n\n // render the mirror if no already-rendered mirror\n // TODO: wish we could somehow wait for dispatch to guarantee render\n this.dragging.setMirrorIsVisible(\n !hit || !getElRoot(this.subjectEl).querySelector('.fc-event-mirror'), // TODO: turn className into constant\n )\n\n // assign states based on new hit\n this.receivingContext = receivingContext\n this.validMutation = mutation\n this.mutatedRelevantEvents = mutatedRelevantEvents\n }\n }\n\n handlePointerUp = () => {\n if (!this.isDragging) {\n this.cleanup() // because handleDragEnd won't fire\n }\n }\n\n handleDragEnd = (ev: PointerDragEvent) => {\n if (this.isDragging) {\n let initialContext = this.component.context\n let initialView = initialContext.viewApi\n let { receivingContext, validMutation } = this\n let eventDef = this.eventRange!.def\n let eventInstance = this.eventRange!.instance\n let eventApi = new EventImpl(initialContext, eventDef, eventInstance)\n let relevantEvents = this.relevantEvents!\n let mutatedRelevantEvents = this.mutatedRelevantEvents!\n let { finalHit } = this.hitDragging\n\n this.clearDrag() // must happen after revert animation\n\n initialContext.emitter.trigger('eventDragStop', {\n el: this.subjectEl,\n event: eventApi,\n jsEvent: ev.origEvent as MouseEvent, // Is this always a mouse event? See #4655\n view: initialView,\n } as EventDragStopArg)\n\n if (validMutation) {\n // dropped within same calendar\n if (receivingContext === initialContext) {\n let updatedEventApi = new EventImpl(\n initialContext,\n mutatedRelevantEvents.defs[eventDef.defId],\n eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null,\n )\n\n initialContext.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: mutatedRelevantEvents,\n })\n\n let eventChangeArg: EventChangeArg = {\n oldEvent: eventApi,\n event: updatedEventApi,\n relatedEvents: buildEventApis(mutatedRelevantEvents, initialContext, eventInstance),\n revert() {\n initialContext.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: relevantEvents, // the pre-change data\n })\n },\n }\n\n let transformed: ReturnType<EventDropTransformers> = {}\n for (let transformer of initialContext.getCurrentData().pluginHooks.eventDropTransformers) {\n Object.assign(transformed, transformer(validMutation, initialContext))\n }\n\n initialContext.emitter.trigger('eventDrop', {\n ...eventChangeArg,\n ...transformed,\n el: ev.subjectEl as HTMLElement,\n delta: validMutation.datesDelta!,\n jsEvent: ev.origEvent as MouseEvent, // bad\n view: initialView,\n })\n\n initialContext.emitter.trigger('eventChange', eventChangeArg)\n\n // dropped in different calendar\n } else if (receivingContext) {\n let eventRemoveArg: EventRemoveArg = {\n event: eventApi,\n relatedEvents: buildEventApis(relevantEvents, initialContext, eventInstance),\n revert() {\n initialContext.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: relevantEvents,\n })\n },\n }\n\n initialContext.emitter.trigger('eventLeave', {\n ...eventRemoveArg,\n draggedEl: ev.subjectEl as HTMLElement,\n view: initialView,\n })\n\n initialContext.dispatch({\n type: 'REMOVE_EVENTS',\n eventStore: relevantEvents,\n })\n\n initialContext.emitter.trigger('eventRemove', eventRemoveArg)\n\n let addedEventDef = mutatedRelevantEvents.defs[eventDef.defId]\n let addedEventInstance = mutatedRelevantEvents.instances[eventInstance.instanceId]\n let addedEventApi = new EventImpl(receivingContext, addedEventDef, addedEventInstance)\n\n receivingContext.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: mutatedRelevantEvents,\n })\n\n let eventAddArg: EventAddArg = {\n event: addedEventApi,\n relatedEvents: buildEventApis(mutatedRelevantEvents, receivingContext, addedEventInstance),\n revert() {\n receivingContext.dispatch({\n type: 'REMOVE_EVENTS',\n eventStore: mutatedRelevantEvents,\n })\n },\n }\n\n receivingContext.emitter.trigger('eventAdd', eventAddArg)\n\n if (ev.isTouch) {\n receivingContext.dispatch({\n type: 'SELECT_EVENT',\n eventInstanceId: eventInstance.instanceId,\n })\n }\n\n receivingContext.emitter.trigger('drop', {\n ...buildDatePointApiWithContext(finalHit.dateSpan, receivingContext),\n draggedEl: ev.subjectEl as HTMLElement,\n jsEvent: ev.origEvent as MouseEvent, // Is this always a mouse event? See #4655\n view: finalHit.context.viewApi,\n })\n\n receivingContext.emitter.trigger('eventReceive', {\n ...eventAddArg,\n draggedEl: ev.subjectEl as HTMLElement,\n view: finalHit.context.viewApi,\n })\n }\n } else {\n initialContext.emitter.trigger('_noEventDrop')\n }\n }\n\n this.cleanup()\n }\n\n // render a drag state on the next receivingCalendar\n displayDrag(nextContext: CalendarContext | null, state: EventInteractionState) {\n let initialContext = this.component.context\n let prevContext = this.receivingContext\n\n // does the previous calendar need to be cleared?\n if (prevContext && prevContext !== nextContext) {\n // does the initial calendar need to be cleared?\n // if so, don't clear all the way. we still need to to hide the affectedEvents\n if (prevContext === initialContext) {\n prevContext.dispatch({\n type: 'SET_EVENT_DRAG',\n state: {\n affectedEvents: state.affectedEvents,\n mutatedEvents: createEmptyEventStore(),\n isEvent: true,\n },\n })\n\n // completely clear the old calendar if it wasn't the initial\n } else {\n prevContext.dispatch({ type: 'UNSET_EVENT_DRAG' })\n }\n }\n\n if (nextContext) {\n nextContext.dispatch({ type: 'SET_EVENT_DRAG', state })\n }\n }\n\n clearDrag() {\n let initialCalendar = this.component.context\n let { receivingContext } = this\n\n if (receivingContext) {\n receivingContext.dispatch({ type: 'UNSET_EVENT_DRAG' })\n }\n\n // the initial calendar might have an dummy drag state from displayDrag\n if (initialCalendar !== receivingContext) {\n initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' })\n }\n }\n\n cleanup() { // reset all internal state\n this.subjectSeg = null\n this.isDragging = false\n this.eventRange = null\n this.relevantEvents = null\n this.receivingContext = null\n this.validMutation = null\n this.mutatedRelevantEvents = null\n }\n}\n\nfunction computeEventMutation(hit0: Hit, hit1: Hit, massagers: eventDragMutationMassager[]): EventMutation {\n let dateSpan0 = hit0.dateSpan\n let dateSpan1 = hit1.dateSpan\n let date0 = dateSpan0.range.start\n let date1 = dateSpan1.range.start\n let standardProps = {} as any\n\n if (dateSpan0.allDay !== dateSpan1.allDay) {\n standardProps.allDay = dateSpan1.allDay\n standardProps.hasEnd = hit1.context.options.allDayMaintainDuration\n\n if (dateSpan1.allDay) {\n // means date1 is already start-of-day,\n // but date0 needs to be converted\n date0 = startOfDay(date0)\n }\n }\n\n let delta = diffDates(\n date0, date1,\n hit0.context.dateEnv,\n hit0.componentId === hit1.componentId ?\n hit0.largeUnit :\n null,\n )\n\n if (delta.milliseconds) { // has hours/minutes/seconds\n standardProps.allDay = false\n }\n\n let mutation: EventMutation = {\n datesDelta: delta,\n standardProps,\n }\n\n for (let massager of massagers) {\n massager(mutation, hit0, hit1)\n }\n\n return mutation\n}\n\nfunction getComponentTouchDelay(component: DateComponent<any>): number | null {\n let { options } = component.context\n let delay = options.eventLongPressDelay\n\n if (delay == null) {\n delay = options.longPressDelay\n }\n\n return delay\n}\n","import {\n ViewApi,\n EventApi,\n EventChangeArg,\n EventRenderRange,\n Duration,\n} from '@fullcalendar/core'\nimport {\n Seg, Hit,\n EventMutation, applyMutationToEventStore,\n elementClosest,\n PointerDragEvent,\n EventStore, getRelevantEvents, createEmptyEventStore,\n diffDates, enableCursor, disableCursor,\n DateRange,\n getElSeg,\n createDuration,\n EventInteractionState,\n Interaction, InteractionSettings, interactionSettingsToStore, buildEventApis, isInteractionValid,\n EventImpl,\n} from '@fullcalendar/core/internal'\nimport { HitDragging, isHitsEqual } from './HitDragging.js'\nimport { FeaturefulElementDragging } from '../dnd/FeaturefulElementDragging.js'\n\nexport type EventResizeStartArg = EventResizeStartStopArg\nexport type EventResizeStopArg = EventResizeStartStopArg\n\nexport interface EventResizeStartStopArg {\n el: HTMLElement\n event: EventApi\n jsEvent: MouseEvent\n view: ViewApi\n}\n\nexport interface EventResizeDoneArg extends EventChangeArg {\n el: HTMLElement\n startDelta: Duration\n endDelta: Duration\n jsEvent: MouseEvent\n view: ViewApi\n}\n\nexport class EventResizing extends Interaction {\n dragging: FeaturefulElementDragging\n hitDragging: HitDragging\n\n // internal state\n draggingSegEl: HTMLElement | null = null\n draggingSeg: Seg | null = null // TODO: rename to resizingSeg? subjectSeg?\n eventRange: EventRenderRange | null = null\n relevantEvents: EventStore | null = null\n validMutation: EventMutation | null = null\n mutatedRelevantEvents: EventStore | null = null\n\n constructor(settings: InteractionSettings) {\n super(settings)\n let { component } = settings\n\n let dragging = this.dragging = new FeaturefulElementDragging(settings.el)\n dragging.pointer.selector = '.fc-event-resizer'\n dragging.touchScrollAllowed = false\n dragging.autoScroller.isEnabled = component.context.options.dragScroll\n\n let hitDragging = this.hitDragging = new HitDragging(this.dragging, interactionSettingsToStore(settings))\n hitDragging.emitter.on('pointerdown', this.handlePointerDown)\n hitDragging.emitter.on('dragstart', this.handleDragStart)\n hitDragging.emitter.on('hitupdate', this.handleHitUpdate)\n hitDragging.emitter.on('dragend', this.handleDragEnd)\n }\n\n destroy() {\n this.dragging.destroy()\n }\n\n handlePointerDown = (ev: PointerDragEvent) => {\n let { component } = this\n let segEl = this.querySegEl(ev)\n let seg = getElSeg(segEl)\n let eventRange = this.eventRange = seg.eventRange!\n\n this.dragging.minDistance = component.context.options.eventDragMinDistance\n\n // if touch, need to be working with a selected event\n this.dragging.setIgnoreMove(\n !this.component.isValidSegDownEl(ev.origEvent.target as HTMLElement) ||\n (ev.isTouch && this.component.props.eventSelection !== eventRange.instance!.instanceId),\n )\n }\n\n handleDragStart = (ev: PointerDragEvent) => {\n let { context } = this.component\n let eventRange = this.eventRange!\n\n this.relevantEvents = getRelevantEvents(\n context.getCurrentData().eventStore,\n this.eventRange.instance!.instanceId,\n )\n\n let segEl = this.querySegEl(ev)\n this.draggingSegEl = segEl\n this.draggingSeg = getElSeg(segEl)\n\n context.calendarApi.unselect()\n context.emitter.trigger('eventResizeStart', {\n el: segEl,\n event: new EventImpl(context, eventRange.def, eventRange.instance),\n jsEvent: ev.origEvent as MouseEvent, // Is this always a mouse event? See #4655\n view: context.viewApi,\n } as EventResizeStartArg)\n }\n\n handleHitUpdate = (hit: Hit | null, isFinal: boolean, ev: PointerDragEvent) => {\n let { context } = this.component\n let relevantEvents = this.relevantEvents!\n let initialHit = this.hitDragging.initialHit!\n let eventInstance = this.eventRange.instance!\n let mutation: EventMutation | null = null\n let mutatedRelevantEvents: EventStore | null = null\n let isInvalid = false\n let interaction: EventInteractionState = {\n affectedEvents: relevantEvents,\n mutatedEvents: createEmptyEventStore(),\n isEvent: true,\n }\n\n if (hit) {\n let disallowed = hit.componentId === initialHit.componentId\n && this.isHitComboAllowed\n && !this.isHitComboAllowed(initialHit, hit)\n\n if (!disallowed) {\n mutation = computeMutation(\n initialHit,\n hit,\n (ev.subjectEl as HTMLElement).classList.contains('fc-event-resizer-start'),\n eventInstance.range,\n )\n }\n }\n\n if (mutation) {\n mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, context.getCurrentData().eventUiBases, mutation, context)\n interaction.mutatedEvents = mutatedRelevantEvents\n\n if (!isInteractionValid(interaction, hit.dateProfile, context)) {\n isInvalid = true\n mutation = null\n mutatedRelevantEvents = null\n interaction.mutatedEvents = null\n }\n }\n\n if (mutatedRelevantEvents) {\n context.dispatch({\n type: 'SET_EVENT_RESIZE',\n state: interaction,\n })\n } else {\n context.dispatch({ type: 'UNSET_EVENT_RESIZE' })\n }\n\n if (!isInvalid) {\n enableCursor()\n } else {\n disableCursor()\n }\n\n if (!isFinal) {\n if (mutation && isHitsEqual(initialHit, hit)) {\n mutation = null\n }\n\n this.validMutation = mutation\n this.mutatedRelevantEvents = mutatedRelevantEvents\n }\n }\n\n handleDragEnd = (ev: PointerDragEvent) => {\n let { context } = this.component\n let eventDef = this.eventRange!.def\n let eventInstance = this.eventRange!.instance\n let eventApi = new EventImpl(context, eventDef, eventInstance)\n let relevantEvents = this.relevantEvents!\n let mutatedRelevantEvents = this.mutatedRelevantEvents!\n\n context.emitter.trigger('eventResizeStop', {\n el: this.draggingSegEl,\n event: eventApi,\n jsEvent: ev.origEvent as MouseEvent, // Is this always a mouse event? See #4655\n view: context.viewApi,\n } as EventResizeStopArg)\n\n if (this.validMutation) {\n let updatedEventApi = new EventImpl(\n context,\n mutatedRelevantEvents.defs[eventDef.defId],\n eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null,\n )\n\n context.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: mutatedRelevantEvents,\n })\n\n let eventChangeArg: EventChangeArg = {\n oldEvent: eventApi,\n event: updatedEventApi,\n relatedEvents: buildEventApis(mutatedRelevantEvents, context, eventInstance),\n revert() {\n context.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: relevantEvents, // the pre-change events\n })\n },\n }\n\n context.emitter.trigger('eventResize', {\n ...eventChangeArg,\n el: this.draggingSegEl,\n startDelta: this.validMutation.startDelta || createDuration(0),\n endDelta: this.validMutation.endDelta || createDuration(0),\n jsEvent: ev.origEvent as MouseEvent,\n view: context.viewApi,\n })\n\n context.emitter.trigger('eventChange', eventChangeArg)\n } else {\n context.emitter.trigger('_noEventResize')\n }\n\n // reset all internal state\n this.draggingSeg = null\n this.relevantEvents = null\n this.validMutation = null\n\n // okay to keep eventInstance around. useful to set it in handlePointerDown\n }\n\n querySegEl(ev: PointerDragEvent) {\n return elementClosest(ev.subjectEl as HTMLElement, '.fc-event')\n }\n}\n\nfunction computeMutation(\n hit0: Hit,\n hit1: Hit,\n isFromStart: boolean,\n instanceRange: DateRange,\n): EventMutation | null {\n let dateEnv = hit0.context.dateEnv\n let date0 = hit0.dateSpan.range.start\n let date1 = hit1.dateSpan.range.start\n\n let delta = diffDates(\n date0, date1,\n dateEnv,\n hit0.largeUnit,\n )\n\n if (isFromStart) {\n if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {\n return { startDelta: delta }\n }\n } else if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {\n return { endDelta: delta }\n }\n\n return null\n}\n","import { DateSelectionApi } from '@fullcalendar/core'\nimport {\n PointerDragEvent,\n elementClosest,\n CalendarContext,\n getEventTargetViaRoot,\n} from '@fullcalendar/core/internal'\nimport { PointerDragging } from '../dnd/PointerDragging.js'\nimport { EventDragging } from './EventDragging.js'\n\nexport class UnselectAuto {\n documentPointer: PointerDragging // for unfocusing\n isRecentPointerDateSelect = false // wish we could use a selector to detect date selection, but uses hit system\n matchesCancel = false\n matchesEvent = false\n\n constructor(private context: CalendarContext) {\n let documentPointer = this.documentPointer = new PointerDragging(document)\n documentPointer.shouldIgnoreMove = true\n documentPointer.shouldWatchScroll = false\n documentPointer.emitter.on('pointerdown', this.onDocumentPointerDown)\n documentPointer.emitter.on('pointerup', this.onDocumentPointerUp)\n\n /*\n TODO: better way to know about whether there was a selection with the pointer\n */\n context.emitter.on('select', this.onSelect)\n }\n\n destroy() {\n this.context.emitter.off('select', this.onSelect)\n this.documentPointer.destroy()\n }\n\n onSelect = (selectInfo: DateSelectionApi) => {\n if (selectInfo.jsEvent) {\n this.isRecentPointerDateSelect = true\n }\n }\n\n onDocumentPointerDown = (pev: PointerDragEvent) => {\n let unselectCancel = this.context.options.unselectCancel\n let downEl = getEventTargetViaRoot(pev.origEvent) as HTMLElement\n\n this.matchesCancel = !!elementClosest(downEl, unselectCancel)\n this.matchesEvent = !!elementClosest(downEl, EventDragging.SELECTOR) // interaction started on an event?\n }\n\n onDocumentPointerUp = (pev: PointerDragEvent) => {\n let { context } = this\n let { documentPointer } = this\n let calendarState = context.getCurrentData()\n\n // touch-scrolling should never unfocus any type of selection\n if (!documentPointer.wasTouchScroll) {\n if (\n calendarState.dateSelection && // an existing date selection?\n !this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?\n ) {\n let unselectAuto = context.options.unselectAuto\n\n if (unselectAuto && (!unselectAuto || !this.matchesCancel)) {\n context.calendarApi.unselect(pev)\n }\n }\n\n if (\n calendarState.eventSelection && // an existing event selected?\n !this.matchesEvent // interaction DIDN'T start on an event\n ) {\n context.dispatch({ type: 'UNSELECT_EVENT' })\n }\n }\n\n this.isRecentPointerDateSelect = false\n }\n}\n","import { EventDropArg } from '@fullcalendar/core'\nimport { identity, Identity } from '@fullcalendar/core/internal'\nimport {\n DateClickArg,\n EventDragStartArg, EventDragStopArg,\n EventResizeStartArg, EventResizeStopArg, EventResizeDoneArg,\n DropArg, EventReceiveArg, EventLeaveArg,\n} from './public-types.js'\n\nexport const OPTION_REFINERS = {\n fixedMirrorParent: identity as Identity<HTMLElement>,\n}\n\nexport const LISTENER_REFINERS = {\n dateClick: identity as Identity<(arg: DateClickArg) => void>,\n eventDragStart: identity as Identity<(arg: EventDragStartArg) => void>,\n eventDragStop: identity as Identity<(arg: EventDragStopArg) => void>,\n eventDrop: identity as Identity<(arg: EventDropArg) => void>,\n eventResizeStart: identity as Identity<(arg: EventResizeStartArg) => void>,\n eventResizeStop: identity as Identity<(arg: EventResizeStopArg) => void>,\n eventResize: identity as Identity<(arg: EventResizeDoneArg) => void>,\n drop: identity as Identity<(arg: DropArg) => void>,\n eventReceive: identity as Identity<(arg: EventReceiveArg) => void>,\n eventLeave: identity as Identity<(arg: EventLeaveArg) => void>,\n}\n","import { ViewApi, DatePointApi } from '@fullcalendar/core'\nimport {\n Hit,\n interactionSettingsStore,\n PointerDragEvent,\n parseEventDef, createEventInstance, EventTuple,\n createEmptyEventStore, eventTupleToStore,\n config,\n DateSpan,\n EventInteractionState,\n DragMetaInput, DragMeta, parseDragMeta,\n elementMatches,\n enableCursor, disableCursor,\n isInteractionValid,\n ElementDragging,\n CalendarContext,\n getDefaultEventEnd,\n refineEventDef,\n EventImpl,\n} from '@fullcalendar/core/internal'\nimport { HitDragging } from '../interactions/HitDragging.js'\nimport { buildDatePointApiWithContext } from '../utils.js'\n\nexport type DragMetaGenerator = DragMetaInput | ((el: HTMLElement) => DragMetaInput)\n\nexport interface ExternalDropApi extends DatePointApi {\n draggedEl: HTMLElement\n jsEvent: UIEvent\n view: ViewApi\n}\n\n/*\nGiven an already instantiated draggable object for one-or-more elements,\nInterprets any dragging as an attempt to drag an events that lives outside\nof a calendar onto a calendar.\n*/\nexport class ExternalElementDragging {\n hitDragging: HitDragging\n receivingContext: CalendarContext | null = null\n droppableEvent: EventTuple | null = null // will exist for all drags, even if create:false\n suppliedDragMeta: DragMetaGenerator | null = null\n dragMeta: DragMeta | null = null\n\n constructor(dragging: ElementDragging, suppliedDragMeta?: DragMetaGenerator) {\n let hitDragging = this.hitDragging = new HitDragging(dragging, interactionSettingsStore)\n hitDragging.requireInitial = false // will start outside of a component\n hitDragging.emitter.on('dragstart', this.handleDragStart)\n hitDragging.emitter.on('hitupdate', this.handleHitUpdate)\n hitDragging.emitter.on('dragend', this.handleDragEnd)\n\n this.suppliedDragMeta = suppliedDragMeta\n }\n\n handleDragStart = (ev: PointerDragEvent) => {\n this.dragMeta = this.buildDragMeta(ev.subjectEl as HTMLElement)\n }\n\n buildDragMeta(subjectEl: HTMLElement) {\n if (typeof this.suppliedDragMeta === 'object') {\n return parseDragMeta(this.suppliedDragMeta)\n }\n if (typeof this.suppliedDragMeta === 'function') {\n return parseDragMeta(this.suppliedDragMeta(subjectEl))\n }\n return getDragMetaFromEl(subjectEl)\n }\n\n handleHitUpdate = (hit: Hit | null, isFinal: boolean, ev: PointerDragEvent) => {\n let { dragging } = this.hitDragging\n let receivingContext: CalendarContext | null = null\n let droppableEvent: EventTuple | null = null\n let isInvalid = false\n let interaction: EventInteractionState = {\n affectedEvents: createEmptyEventStore(),\n mutatedEvents: createEmptyEventStore(),\n isEvent: this.dragMeta!.create,\n }\n\n if (hit) {\n receivingContext = hit.context\n\n if (this.canDropElOnCalendar(ev.subjectEl as HTMLElement, receivingContext)) {\n droppableEvent = computeEventForDateSpan(\n hit.dateSpan,\n this.dragMeta!,\n receivingContext,\n )\n\n interaction.mutatedEvents = eventTupleToStore(droppableEvent)\n isInvalid = !isInteractionValid(interaction, hit.dateProfile, receivingContext)\n\n if (isInvalid) {\n interaction.mutatedEvents = createEmptyEventStore()\n droppableEvent = null\n }\n }\n }\n\n this.displayDrag(receivingContext, interaction)\n\n // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)\n // TODO: wish we could somehow wait for dispatch to guarantee render\n dragging.setMirrorIsVisible(\n isFinal || !droppableEvent || !document.querySelector('.fc-event-mirror'), // TODO: turn className into constant\n // TODO: somehow query FullCalendars WITHIN shadow-roots for existing event-mirror els\n )\n\n if (!isInvalid) {\n enableCursor()\n } else {\n disableCursor()\n }\n\n if (!isFinal) {\n dragging.setMirrorNeedsRevert(!droppableEvent)\n\n this.receivingContext = receivingContext\n this.droppableEvent = droppableEvent\n }\n }\n\n handleDragEnd = (pev: PointerDragEvent) => {\n let { receivingContext, droppableEvent } = this\n\n this.clearDrag()\n\n if (receivingContext && droppableEvent) {\n let finalHit = this.hitDragging.finalHit!\n let finalView = finalHit.context.viewApi\n let dragMeta = this.dragMeta!\n\n receivingContext.emitter.trigger('drop', {\n ...buildDatePointApiWithContext(finalHit.dateSpan, receivingContext),\n draggedEl: pev.subjectEl as HTMLElement,\n jsEvent: pev.origEvent as MouseEvent, // Is this always a mouse event? See #4655\n view: finalView,\n })\n\n if (dragMeta.create) {\n let addingEvents = eventTupleToStore(droppableEvent)\n\n receivingContext.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: addingEvents,\n })\n\n if (pev.isTouch) {\n receivingContext.dispatch({\n type: 'SELECT_EVENT',\n eventInstanceId: droppableEvent.instance.instanceId,\n })\n }\n\n // signal that an external event landed\n receivingContext.emitter.trigger('eventReceive', {\n event: new EventImpl(\n receivingContext,\n droppableEvent.def,\n droppableEvent.instance,\n ),\n relatedEvents: [],\n revert() {\n receivingContext.dispatch({\n type: 'REMOVE_EVENTS',\n eventStore: addingEvents,\n })\n },\n draggedEl: pev.subjectEl as HTMLElement,\n view: finalView,\n })\n }\n }\n\n this.receivingContext = null\n this.droppableEvent = null\n }\n\n displayDrag(nextContext: CalendarContext | null, state: EventInteractionState) {\n let prevContext = this.receivingContext\n\n if (prevContext && prevContext !== nextContext) {\n prevContext.dispatch({ type: 'UNSET_EVENT_DRAG' })\n }\n\n if (nextContext) {\n nextContext.dispatch({ type: 'SET_EVENT_DRAG', state })\n }\n }\n\n clearDrag() {\n if (this.receivingContext) {\n this.receivingContext.dispatch({ type: 'UNSET_EVENT_DRAG' })\n }\n }\n\n canDropElOnCalendar(el: HTMLElement, receivingContext: CalendarContext): boolean {\n let dropAccept = receivingContext.options.dropAccept\n\n if (typeof dropAccept === 'function') {\n return dropAccept.call(receivingContext.calendarApi, el)\n }\n\n if (typeof dropAccept === 'string' && dropAccept) {\n return Boolean(elementMatches(el, dropAccept))\n }\n\n return true\n }\n}\n\n// Utils for computing event store from the DragMeta\n// ----------------------------------------------------------------------------------------------------\n\nfunction computeEventForDateSpan(dateSpan: DateSpan, dragMeta: DragMeta, context: CalendarContext): EventTuple {\n let defProps = { ...dragMeta.leftoverProps }\n\n for (let transform of context.pluginHooks.externalDefTransforms) {\n Object.assign(defProps, transform(dateSpan, dragMeta))\n }\n\n let { refined, extra } = refineEventDef(defProps, context)\n let def = parseEventDef(\n refined,\n extra,\n dragMeta.sourceId,\n dateSpan.allDay,\n context.options.forceEventDuration || Boolean(dragMeta.duration), // hasEnd\n context,\n )\n\n let start = dateSpan.range.start\n\n // only rely on time info if drop zone is all-day,\n // otherwise, we already know the time\n if (dateSpan.allDay && dragMeta.startTime) {\n start = context.dateEnv.add(start, dragMeta.startTime)\n }\n\n let end = dragMeta.duration ?\n context.dateEnv.add(start, dragMeta.duration) :\n getDefaultEventEnd(dateSpan.allDay, start, context)\n\n let instance = createEventInstance(def.defId, { start, end })\n\n return { def, instance }\n}\n\n// Utils for extracting data from element\n// ----------------------------------------------------------------------------------------------------\n\nfunction getDragMetaFromEl(el: HTMLElement): DragMeta {\n let str = getEmbeddedElData(el, 'event')\n let obj = str ?\n JSON.parse(str) :\n { create: false } // if no embedded data, assume no event creation\n\n return parseDragMeta(obj)\n}\n\nconfig.dataAttrPrefix = ''\n\nfunction getEmbeddedElData(el: HTMLElement, name: string): string {\n let prefix = config.dataAttrPrefix\n let prefixedName = (prefix ? prefix + '-' : '') + name\n\n return el.getAttribute('data-' + prefixedName) || ''\n}\n","import { BASE_OPTION_DEFAULTS, PointerDragEvent } from '@fullcalendar/core/internal'\nimport { FeaturefulElementDragging } from '../dnd/FeaturefulElementDragging.js'\nimport { ExternalElementDragging, DragMetaGenerator } from './ExternalElementDragging.js'\n\nexport interface ExternalDraggableSettings {\n eventData?: DragMetaGenerator\n itemSelector?: string\n minDistance?: number\n longPressDelay?: number\n appendTo?: HTMLElement\n}\n\n/*\nMakes an element (that is *external* to any calendar) draggable.\nCan pass in data that determines how an event will be created when dropped onto a calendar.\nLeverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.\n*/\nexport class ExternalDraggable {\n dragging: FeaturefulElementDragging\n settings: ExternalDraggableSettings\n\n constructor(el: HTMLElement, settings: ExternalDraggableSettings = {}) {\n this.settings = settings\n\n let dragging = this.dragging = new FeaturefulElementDragging(el)\n dragging.touchScrollAllowed = false\n\n if (settings.itemSelector != null) {\n dragging.pointer.selector = settings.itemSelector\n }\n\n if (settings.appendTo != null) {\n dragging.mirror.parentNode = settings.appendTo // TODO: write tests\n }\n\n dragging.emitter.on('pointerdown', this.handlePointerDown)\n dragging.emitter.on('dragstart', this.handleDragStart)\n\n new ExternalElementDragging(dragging, settings.eventData) // eslint-disable-line no-new\n }\n\n handlePointerDown = (ev: PointerDragEvent) => {\n let { dragging } = this\n let { minDistance, longPressDelay } = this.settings\n\n dragging.minDistance =\n minDistance != null ?\n minDistance :\n (ev.isTouch ? 0 : BASE_OPTION_DEFAULTS.eventDragMinDistance)\n\n dragging.delay =\n ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv\n (longPressDelay != null ? longPressDelay : BASE_OPTION_DEFAULTS.longPressDelay) :\n 0\n }\n\n handleDragStart = (ev: PointerDragEvent) => {\n if (\n ev.isTouch &&\n this.dragging.delay &&\n (ev.subjectEl as HTMLElement).classList.contains('fc-event')\n ) {\n this.dragging.mirror.getMirrorEl().classList.add('fc-event-selected')\n }\n }\n\n destroy() {\n this.dragging.destroy()\n }\n}\n","import { PointerDragEvent, ElementDragging } from '@fullcalendar/core/internal'\nimport { PointerDragging } from '../dnd/PointerDragging.js'\n\n/*\nDetects when a *THIRD-PARTY* drag-n-drop system interacts with elements.\nThe third-party system is responsible for drawing the visuals effects of the drag.\nThis class simply monitors for pointer movements and fires events.\nIt also has the ability to hide the moving element (the \"mirror\") during the drag.\n*/\nexport class InferredElementDragging extends ElementDragging {\n pointer: PointerDragging\n shouldIgnoreMove: boolean = false\n mirrorSelector: string = ''\n currentMirrorEl: HTMLElement | null = null\n\n constructor(containerEl: HTMLElement) {\n super(containerEl)\n\n let pointer = this.pointer = new PointerDragging(containerEl)\n pointer.emitter.on('pointerdown', this.handlePointerDown)\n pointer.emitter.on('pointermove', this.handlePointerMove)\n pointer.emitter.on('pointerup', this.handlePointerUp)\n }\n\n destroy() {\n this.pointer.destroy()\n }\n\n handlePointerDown = (ev: PointerDragEvent) => {\n this.emitter.trigger('pointerdown', ev)\n\n if (!this.shouldIgnoreMove) {\n // fire dragstart right away. does not support delay or min-distance\n this.emitter.trigger('dragstart', ev)\n }\n }\n\n handlePointerMove = (ev: PointerDragEvent) => {\n if (!this.shouldIgnoreMove) {\n this.emitter.trigger('dragmove', ev)\n }\n }\n\n handlePointerUp = (ev: PointerDragEvent) => {\n this.emitter.trigger('pointerup', ev)\n\n if (!this.shouldIgnoreMove) {\n // fire dragend right away. does not support a revert animation\n this.emitter.trigger('dragend', ev)\n }\n }\n\n setIgnoreMove(bool: boolean) {\n this.shouldIgnoreMove = bool\n }\n\n setMirrorIsVisible(bool: boolean) {\n if (bool) {\n // restore a previously hidden element.\n // use the reference in case the selector class has already been removed.\n if (this.currentMirrorEl) {\n this.currentMirrorEl.style.visibility = ''\n this.currentMirrorEl = null\n }\n } else {\n let mirrorEl = this.mirrorSelector\n // TODO: somehow query FullCalendars WITHIN shadow-roots\n ? document.querySelector(this.mirrorSelector) as HTMLElement\n : null\n\n if (mirrorEl) {\n this.currentMirrorEl = mirrorEl\n mirrorEl.style.visibility = 'hidden'\n }\n }\n }\n}\n","import { ExternalElementDragging, DragMetaGenerator } from './ExternalElementDragging.js'\nimport { InferredElementDragging } from './InferredElementDragging.js'\n\nexport interface ThirdPartyDraggableSettings {\n eventData?: DragMetaGenerator\n itemSelector?: string\n mirrorSelector?: string\n}\n\n/*\nBridges third-party drag-n-drop systems with FullCalendar.\nMust be instantiated and destroyed by caller.\n*/\nexport class ThirdPartyDraggable {\n dragging: InferredElementDragging\n\n constructor(\n containerOrSettings?: EventTarget | ThirdPartyDraggableSettings,\n settings?: ThirdPartyDraggableSettings,\n ) {\n let containerEl: EventTarget = document\n\n if (\n // wish we could just test instanceof EventTarget, but doesn't work in IE11\n containerOrSettings === document ||\n containerOrSettings instanceof Element\n ) {\n containerEl = containerOrSettings as EventTarget\n settings = settings || {}\n } else {\n settings = (containerOrSettings || {}) as ThirdPartyDraggableSettings\n }\n\n let dragging = this.dragging = new InferredElementDragging(containerEl as HTMLElement)\n\n if (typeof settings.itemSelector === 'string') {\n dragging.pointer.selector = settings.itemSelector\n } else if (containerEl === document) {\n dragging.pointer.selector = '[data-event]'\n }\n\n if (typeof settings.mirrorSelector === 'string') {\n dragging.mirrorSelector = settings.mirrorSelector\n }\n\n new ExternalElementDragging(dragging, settings.eventData) // eslint-disable-line no-new\n }\n\n destroy() {\n this.dragging.destroy()\n }\n}\n","import { createPlugin, PluginDef } from '@fullcalendar/core'\nimport { DateClicking } from './interactions/DateClicking.js'\nimport { DateSelecting } from './interactions/DateSelecting.js'\nimport { EventDragging } from './interactions/EventDragging.js'\nimport { EventResizing } from './interactions/EventResizing.js'\nimport { UnselectAuto } from './interactions/UnselectAuto.js'\nimport { FeaturefulElementDragging } from './dnd/FeaturefulElementDragging.js'\nimport { OPTION_REFINERS, LISTENER_REFINERS } from './option-refiners.js'\nimport './ambient.js'\n\nexport default createPlugin({\n name: '<%= pkgName %>',\n componentInteractions: [DateClicking, DateSelecting, EventDragging, EventResizing],\n calendarInteractions: [UnselectAuto],\n elementDraggingImpl: FeaturefulElementDragging,\n optionRefiners: OPTION_REFINERS,\n listenerRefiners: LISTENER_REFINERS,\n}) as PluginDef\n\nexport * from './public-types.js'\nexport { ExternalDraggable as Draggable } from './interactions-external/ExternalDraggable.js'\nexport { ThirdPartyDraggable } from './interactions-external/ThirdPartyDraggable.js'\n"],"names":["getComponentTouchDelay"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fullcalendar/interaction",
3
- "version": "6.0.0",
3
+ "version": "6.0.2",
4
4
  "title": "FullCalendar Interaction Plugin",
5
5
  "description": "Calendar functionality for event drag-n-drop, event resizing, date clicking, and date selecting",
6
6
  "keywords": [
@@ -14,7 +14,7 @@
14
14
  ],
15
15
  "homepage": "https://fullcalendar.io/docs/editable",
16
16
  "peerDependencies": {
17
- "@fullcalendar/core": "~6.0.0"
17
+ "@fullcalendar/core": "~6.0.2"
18
18
  },
19
19
  "type": "module",
20
20
  "bugs": "https://fullcalendar.io/reporting-bugs",