UNPKG

events-calendar

Version:

A flexible, responsive, and feature-rich calendar component for modern React applications.

2 lines 32.3 kB
"use client";import{useMemo as Wt,useRef as sn}from"react";import{useRef as ur}from"react";function re(e,t){return e.hour(t.hour()).minute(t.minute())}var V=["year","month","week","day"],ne=["January","February","March","April","May","June","July","August","September","October","November","December"],Te=["S","M","T","W","T","F","S"],Ae=42,ae="#0ea5e9",Pe=["1 AM","2 AM","3 AM","4 AM","5 AM","6 AM","7 AM","8 AM","9 AM","10 AM","11 AM","12 PM","1 PM","2 PM","3 PM","4 PM","5 PM","6 PM","7 PM","8 PM","9 PM","10 PM","11 PM"];function M(e,t,r,n=!1){return e.isAfter(t)&&e.isBefore(r)||e.isSame(t,"d")||(n?!1:e.isSame(r,"d"))}function z(e,t,r,n){return M(e,r,n)||M(r,e,t)||M(n,e,t)}function oe({state:e,dispatch:t,date:r,view:n}){let a=n==="month"?"day":"minute";if(e.dragStartOffset===null){let c=r.diff(e.clickedEvent.start,a);t({type:"update_event",dragStartOffset:c});return}let{start:o,end:i,startTime:d,endTime:l}=e.clickedEvent,s=r.subtract(e.dragStartOffset,a),m=i.diff(o,a),v=s.add(m,a);n!=="month"&&!s.isSame(v,"day")||t({type:"update_event",event:{...e.placeholderEvent,start:n==="month"?s.hour(o.hour()).minute(o.minute()):s,end:n==="month"?v.hour(i.hour()).minute(i.minute()):v,startTime:n==="month"?d:s.format("h:mma"),endTime:n==="month"?l:v.format("h:mma")}})}function O(e,t){let r=e.hour()*60+e.minute();return t.hour()*60+t.minute()-r}function Se(e,t){if(!e.start||!e.end)return"";let r=t<=30?", ":"";return e.start.isBefore(e.end)?`${r}${e.start.format("h:mma")} - ${e.end.format("h:mma")}`:`${r}${e.end.format("h:mma")} - ${e.start.format("h:mma")}`}function ie(e,t){let r=t.add(6,"d");return e.filter(({start:n,end:a})=>z(t,r,n,a||n))}function A(e,t){return e.filter(({start:r,end:n})=>M(t,r,n))}function Oe(e,t,r){let n=r==="year"?"year":"month",a=t.startOf(n).day(0),o=t.endOf(n).day(6);return e.filter(({start:i,end:d})=>z(a,o,i,d))}import de from"dayjs";var ge=(e,t)=>{let r=t.replace(/.{2}$/," $&").toUpperCase();return de(`${e.format("DD-MMM-YYYY")} ${r}`)};function Re(e){return e.filter(t=>t.start||t.end).map((t,r)=>{let n=t.start?de(t.start):de(t.end);t.startTime&&(n=ge(n,t.startTime));let a=t.end?de(t.end):n;return(t.startTime||t.endTime||t.isAllDay===!1)&&(!t.startTime&&!t.endTime?a=n.add(1,"hour"):t.endTime?a=ge(a,t.endTime):a=ge(a,t.startTime).add(1,"hour")),{...t,id:t.id??r,title:t.title??"",start:n,end:a,isAllDay:t.isAllDay!==!1}})}function je(e,t,r,n){return e.filter(({order:a,start:o})=>a<r&&(n||t.day()===0||t.isSame(o,"day")))}function Xt(e){return[...e].sort((r,n)=>{let a=r.end.diff(r.start,"day")+1,o=n.end.diff(n.start,"day")+1;return a>o?-1:a<o?1:r.start.isBefore(n.start,"day")?-1:n.start.isBefore(r.start,"day")?1:r.isAllDay&&!n.isAllDay?-1:!r.isAllDay&&n.isAllDay?1:0})}function qt(e){let t=0;for(;e.has(t);)t++;return t}function H(e){if(e.length<2)return e.map(o=>({...o,order:0,indent:0}));let t=Xt(e),[r,...n]=t,a=[{...r,order:0,indent:0}];return n.forEach(o=>{let i=o.start,d=o.end||i,l=new Set;for(let m of a){let v=m.start,c=m.end||v;z(i,d,v,c)&&l.add(m.order)}let s=qt(l);a.push({...o,order:s,indent:0})}),a}import Ne from"dayjs";var T={id:null,dragId:null,title:"Untitled",groups:[],start:Ne(),end:Ne(),startTime:void 0,endTime:void 0,isActive:!1,isAllDay:!0,indent:0,order:0};function le(e,t){return t?e.isSame(t)||e.isBefore(t)?[e,t]:[t,e]:[e,e]}var se=(e,t,r,n)=>{let[a,o]=le(e,t),i=n&&r?a.add(15,"minute"):o;return{...T,id:null,start:a,end:i,isActive:!0,isAllDay:!r,startTime:r?a.format("h:mma"):void 0,endTime:r?i.format("h:mma"):void 0,order:r?100:0}};function Zt(e){return e.length<2?e:e.sort((t,r)=>{let n=O(t.start,r.start);return n>0?-1:n<0?1:0})}function Kt(e,t,r){return e.isSame(t)||e.isAfter(t)&&e.isBefore(r)}function _e(e,t){if(e.length<2)return e.map(i=>({...i,order:0,indent:0}));let r=Zt(e),[n,...a]=r,o=[{...n,order:0,indent:0}];return a.forEach((i,d)=>{let l=re(t,i.start),s=0;o.forEach(m=>{let v=re(t,m.start),c=re(t,m.end);Kt(l,v,c)&&(s+=1)}),o.push({...i,order:d+1,indent:s})}),o}import Ve from"dayjs";var Un=(e,t,r="01-Jan-2000",n="01-Jan-2000")=>{let a=e?.replace(/.{2}$/," $&").toUpperCase()||"12:00 AM",o=t?.replace(/.{2}$/," $&").toUpperCase()||"12:00 AM",i=Ve(`${r} ${a}`),d=Ve(`${n} ${o}`);return{start:i,end:d}};function I(e){let t=e?.map(a=>a.color).filter(Boolean)??[];if(!t.length)return{backgroundColor:ae};if(t.length===1)return{backgroundColor:t[0]};let r=100/t.length;return{backgroundImage:`-webkit-linear-gradient(-30deg,${t.map((a,o)=>`${a} ${r*o}% ${r*o+r}%`).join(", ")})`}}var Qt=({isTimeEvent:e,firstClickDate:t,start:r,date:n,dispatch:a})=>{if(e){let o=O(t,n)<0?le(r,t.add(15,"minute"))[1]:t,i=r.hour(n.hour()).minute(n.minute());if(Math.abs(O(o,n))>=15){let d=se(o,i,!0);a({type:"update_event",event:d})}}else{let o=se(t,n);a({type:"update_event",event:o})}},ze=({enableDragCreation:e,dispatch:t,state:r,onEventCreate:n})=>{if(!e)return d=>{d.type==="mousedown"&&t({type:"reset_calendar"})};let a=()=>t({type:"open_popover"}),o=()=>t({type:"reset_calendar"});return(d,l,s,m)=>{let{dragActive:v,firstClickDate:c,placeholderEvent:f}=r,{start:h}=f;if(d.button!==0){v&&t({type:"event_create_stop"});return}switch(d.type){case"mousedown":{if(r.eventAnchor||r.overflowIsOpen){t({type:"reset_calendar"});return}let p=se(l,l,s,!0);t({type:"event_create_start",date:l,event:p,anchor:m.current});break}case"mouseenter":{if(d.buttons!==1||!v||!c)return;Qt({isTimeEvent:s,firstClickDate:c,start:h,date:l,dispatch:t});break}case"mouseup":{if(!v)return;n&&n({clickedEvent:r.clickedEvent,newEvent:r.placeholderEvent,eventRef:m.current,openPopover:a,reset:o}),t({type:"event_create_end",anchor:m.current})}}}};import{useEffect as er,useMemo as tr,useRef as He,useState as rr}from"react";var nr={x:0,y:0,width:0,height:0,top:0,left:0,bottom:0,right:0};function ar(e){let t=He(0),r=He(null),[n,a]=rr(nr),o=tr(()=>typeof window<"u"?new ResizeObserver(i=>{let d=i[0];d&&(cancelAnimationFrame(t.current),t.current=requestAnimationFrame(()=>{r.current&&a(d.contentRect)}))}):null,[]);return er(()=>(r.current&&o?.observe(r.current,e),()=>{o?.disconnect(),t.current&&cancelAnimationFrame(t.current)}),[r.current]),[r,n]}function Ie(e){let[t,{width:r,height:n}]=ar(e);return{ref:t,width:r,height:n}}import{useState as or}from"react";import{useFloating as ir,flip as dr,offset as lr,shift as sr,useDismiss as cr,useInteractions as mr}from"@floating-ui/react";function Be({dispatch:e,event:t,isInOverflow:r,hasContextMenu:n,state:a}){let[o,i]=or(!1),d=()=>i(!1),l=t.id!==null&&a.clickedEvent?.id===t.id,{refs:s,floatingStyles:m,context:v}=ir({open:o,onOpenChange:i,middleware:[lr({mainAxis:5,alignmentAxis:4}),dr({fallbackPlacements:["left-start"]}),sr({padding:10})],placement:"right-start"}),c=cr(v),{getFloatingProps:f}=mr([c]);return{handleContextMenu:(p,u)=>{n&&(p.preventDefault(),!(a.popoverIsOpen||a.overflowIsOpen&&!r)&&(s.setPositionReference({getBoundingClientRect(){return{width:0,height:0,x:p.clientX,y:p.clientY,top:p.clientY,right:p.clientX,bottom:p.clientY,left:p.clientX}}}),e({type:"open_context_menu",event:t,anchor:u.current}),i(!0)))},isActive:l,contextIsOpen:o,refs:s,floatingStyles:m,getFloatingProps:f,closeContextMenu:d}}import Ye from"dayjs";import{useEffect as pr,useReducer as vr,useState as $e}from"react";var q={clickedEvent:T,popoverIsOpen:!1,eventAnchor:null,dragActive:!1,firstClickDate:null,placeholderEvent:T,dragStartOffset:null,eventDragActive:!1,overflowAnchor:null,overflowIsOpen:!1};function Le(e,t){switch(t.type){case"reset_calendar":return q;case"open_overflow":return{...e,...q,overflowIsOpen:!0,overflowAnchor:t.anchor||e.overflowAnchor};case"open_popover":return{...e,popoverIsOpen:!0};case"open_context_menu":return{...e,clickedEvent:t.event||e.clickedEvent,eventAnchor:t.anchor||e.eventAnchor};case"set_clicked_event":return{...e,clickedEvent:t.event||e.clickedEvent,eventAnchor:t.anchor||e.eventAnchor,placeholderEvent:T};case"update_event":return{...e,dragStartOffset:t.dragStartOffset??e.dragStartOffset,placeholderEvent:{...e.placeholderEvent,...t.event,id:null}};case"event_create_start":return{...e,dragActive:!0,firstClickDate:t.date||e.firstClickDate,placeholderEvent:{...e.placeholderEvent,...t.event,isActive:!0},eventAnchor:t.anchor||e.eventAnchor};case"event_create_end":return{...e,dragActive:!1,firstClickDate:null,placeholderEvent:{...e.placeholderEvent,isActive:!0},eventAnchor:t.anchor||e.eventAnchor};case"event_create_stop":return{...e,dragActive:!1,firstClickDate:null,clickedEvent:T,placeholderEvent:T,eventDragActive:!1};case"event_reschedule_start":return{...e,eventDragActive:!0,clickedEvent:t.event||e.clickedEvent,placeholderEvent:{...e.placeholderEvent,order:0,...t.event,id:null,isActive:!0}};case"event_reschedule_end":return{...e,eventDragActive:!1,dragStartOffset:null,eventAnchor:t.anchor||e.eventAnchor};default:return console.log(`Invalid action type ${t.type} passed to calendar reducer`),e}}function We({isInitialised:e=!1,initialDate:t=Ye(),initialView:r="month",closeOnClickOutside:n=!0}={}){let[a,o]=$e(Ye(t)),[i,d]=$e(r),[l,s]=vr(Le,q);return pr(()=>{if(!n||e)return;let m=()=>s({type:"reset_calendar"});return window.addEventListener("click",m),()=>{window.removeEventListener("click",m)}},[s,e,n]),{activeDate:a,setActiveDate:o,view:i,setView:d,state:l,dispatch:s}}function Fe(e){let r=We({isInitialised:!!e});return e||r}import{jsx as ye,jsxs as fr}from"react/jsx-runtime";function Ue({event:e,isCompact:t}){let{title:r,start:n,groups:a}=e,o=I(a),d={border:`1px solid ${(a?.map(l=>l.color).filter(Boolean)??[])[0]??ae}`};return fr("div",{className:"events-calendar-time","data-sm":t,style:d,children:[ye("div",{className:"events-calendar-time-dot",style:o}),ye("div",{className:"events-calendar-time-text",children:n.format("h:mma")}),ye("span",{className:"events-calendar-time-label",children:r})]})}var Ge=e=>{switch(e){case"both":return"polygon(10px 0%, calc(100% - 10px) 0%, 100% 50%, calc(100% - 10px) 100%, 10px 100%, 0% 50%)";case"left":return"polygon(10px 0%, 100% 0%, 100% 100%, 10px 100%, 0% 50%)";case"right":return"polygon(0% 0%, calc(100% - 10px) 0%, 100% 50%, calc(100% - 10px) 100%, 0% 100%)";case"none":return;default:return}};var Je=(e,t,r,n,a,o)=>{if(e)return{width:"100%"};let i=t.start.isSame(r,"w")?t.start.day():0,d=t.end.isSame(r,"w")?t.end.day():6;return{position:"absolute",left:o?"0.125rem":`calc(${i*100/7}% + 0.125rem)`,top:`calc(${o?4:n?24:26}px + ${t.order*(n?21:22)}px + ${a?6:0}px)`,width:o?"calc(100% - 6px)":`calc(${100*(1+(d-i))/7}% - 0.25rem - 1px)`}};function Xe(e,t){return!t.isActive&&t.id===e.placeholderEvent.dragId}var qe=(e,t,r,n,a)=>{let o=e?r.isBefore(t,"day"):!!a?.first&&r.isBefore(a.first,"day"),i=e?n.isAfter(t,"day"):!!a?.last&&n.isAfter(a.last,"day");return o&&i?"both":o?"left":i?"right":"none"};var Ze=(e,t,r,n,a)=>{let o=r===0?6:0;return{gridColumnStart:r+1,gridRowStart:e.start&&e.start.hour()*4+Math.round(e.start.minute()/15)+1,gridRowEnd:e.end&&e.end.hour()*4+Math.round(e.end.minute()/15)+1,height:12*((t||60)/15)-2,borderWidth:e.indent>0?t>30?"1px":"0.5px":0,marginLeft:n*e.indent+o,width:`calc(100% - ${n*(e.indent+1)+o}px)`,zIndex:a?100:1+e.order,...I(e.groups)}};import{jsx as we}from"react/jsx-runtime";function Ke({date:e,event:t,minMaxDatesInView:r,isCompact:n,isInOverflow:a}){let o=qe(a,e,t.start,t.end,r),i=Ge(o),d=I(t.groups);return we("div",{className:"events-calendar-all-day-event",style:{...d,clipPath:i},children:we("div",{className:"events-calendar-all-day-event-content","data-sm":n,children:we("span",{className:"events-calendar-all-day-event-text","data-arrows":o,children:t.title})})})}import{Fragment as hr,jsx as B,jsxs as Qe}from"react/jsx-runtime";function L({view:e,enableRescheduling:t,compact:r=!1,date:n,dispatch:a,event:o,isInWeekHeader:i=!1,isInOverflow:d=!1,isInDayHeader:l=!1,minMaxDatesInView:s,onEventClick:m,placeholderRef:v,renderContextMenu:c,state:f}){let h=ur(null),p=!!c,u=!!m||t,b=e==="month",g=e==="day",w=()=>a({type:"open_popover"}),E=()=>a({type:"reset_calendar"}),y=()=>a({type:"reset_calendar"}),k=(X,Ut,te,Gt)=>{if(X.stopPropagation(),Ut||!te.current)return;let he=D&&f.eventAnchor?.dataset.anchorday===te.current.dataset.anchorday;!d&&f.overflowIsOpen&&a({type:"reset_calendar"}),he||a({type:"set_clicked_event",event:o,anchor:te.current});let Jt=()=>he?E():w();Gt?.({event:o,isDoubleClick:he,eventRef:te.current,openPopover:w,closePopover:E,togglePopover:Jt})},{handleContextMenu:C,isActive:D,contextIsOpen:P,refs:S,floatingStyles:x,getFloatingProps:j,closeContextMenu:N}=Be({dispatch:a,event:o,state:f,hasContextMenu:p,isInOverflow:d}),U=o.id===null,G=U&&o.start.isSame(n,"d")?v:h,_=Math.abs(O(o.start,o.end)),K=_<=30,Q=g?120:20,ee=g?0:n.day(),Me=()=>{a({type:"reset_calendar"}),t&&!d&&a({type:"event_reschedule_start",event:{...o,dragId:o.id,order:b?o.order:1e3}})},J=b?Je(d,o,n,r,i,l):Ze(o,_,ee,Q,u&&D);return Qe(hr,{children:[B("div",{className:b?"events-calendar-month-item-container":"events-calendar-week-item-container","data-interactive":u,"data-active":u&&D,"data-anchorday":n.format("DD-MMM-YYYY"),"data-placeholder":U,"data-dragactive":f.dragActive||f.eventDragActive,"data-isdragging":Xe(f,o),"data-sm":r,"data-time":b&&!o.isAllDay,draggable:"true",onClick:X=>k(X,U,G,m),onContextMenu:X=>C(X,G),onDragStart:Me,ref:G,style:J,children:b?o.isAllDay?B(Ke,{date:n,event:o,isCompact:r,isInOverflow:d,minMaxDatesInView:s}):B(Ue,{event:o,isCompact:r}):Qe("div",{className:"events-calendar-item-label","data-short":K,children:[B("span",{style:K?void 0:{width:"100%"},children:o.title}),B("span",{className:"events-calendar-time-text",children:Se(o,_)})]})}),P&&B("div",{ref:S.setFloating,style:{...x,zIndex:2},...j(),children:c&&c({event:o,closeContextMenu:N,onClose:y,openPopover:w})})]})}import{createPortal as Dr}from"react-dom";import{useEffect as kr,useRef as Mr}from"react";import{useFloating as gr,autoPlacement as yr,offset as wr,detectOverflow as br,autoUpdate as xr,hide as Er}from"@floating-ui/react-dom";var Cr=32,et=32,tt=16;function rt({anchor:e}){let t={name:"preventViewportOverflow",async fn(a){let o=await br(a),i=a.x;o.left>0&&(i=a.x+o.left+et),o.right>0&&(i=a.x-o.right-et);let d=a.y;return o.top>0&&(d=a.y+o.top+tt),o.bottom>0&&(d=a.y-o.bottom-tt),a.middlewareData.hide?.referenceHidden?{...a,x:i}:{...a,x:i,y:d}}},{refs:r,floatingStyles:n}=gr({elements:{reference:e},placement:"bottom",strategy:"fixed",whileElementsMounted:xr,middleware:[Er(),wr(8),yr({crossAxis:!0,padding:Cr}),t]});return{refs:r,floatingStyles:n}}import{jsx as nt}from"react/jsx-runtime";function at({anchor:e,zIndex:t,children:r}){let n=Mr({}),{refs:a,floatingStyles:o}=rt({anchor:e});return kr(()=>{setTimeout(()=>{n.current={transitionDuration:"250ms",transitionProperty:"all"}},100)},[]),Dr(nt("div",{ref:a.setFloating,style:{...o,...n.current,zIndex:t},children:nt("div",{onClick:i=>i.stopPropagation(),children:r})}),document.body)}import{jsx as Tr}from"react/jsx-runtime";function ce({anchor:e,isOpen:t,zIndex:r=1,children:n}){return!t||!e?null:Tr(at,{anchor:e,zIndex:r,children:n})}import Sr from"dayjs";import{useRef as Ar}from"react";import{jsx as Pr,jsxs as ot}from"react/jsx-runtime";function me({date:e,dispatch:t,isCompact:r,numOverflowEvents:n,state:a}){let o=Ar(null),i=d=>{a.overflowIsOpen&&d.target===a.overflowAnchor?t({type:"reset_calendar"}):t({type:"open_overflow",date:e,anchor:o.current})};if(n)return ot("div",{className:"events-calendar-show-more-text-container","data-sm":r,"data-date":e.format("DD-MMM-YYYY"),onClick:i,onMouseDown:d=>d.stopPropagation(),ref:o,children:[Pr("span",{className:"events-calendar-show-more-text-label events-calendar-sm-only",children:`+${n}`}),ot("span",{className:"events-calendar-show-more-text-label events-calendar-lg-only",children:[n," more"]})]})}import{jsx as be,jsxs as Or}from"react/jsx-runtime";function it({dayRecord:e,dispatch:t,isCompact:r,numOverflowEvents:n,state:a}){let{date:o,isCurrentMonth:i}=e,d=o.isSame(Sr(),"day");return Or("div",{className:"events-calendar-month-cell-header",children:[be("div",{className:"events-calendar-month-cell-date-container","data-today":d,children:be("span",{className:"events-calendar-month-cell-date-label","data-color":d?"white":i?"dark":"dim","data-sm":r,children:o.date()})}),be(me,{date:o,dispatch:t,isCompact:r,numOverflowEvents:n,state:a})]})}import{Fragment as jr,jsx as pe,jsxs as dt}from"react/jsx-runtime";var Rr=(e,t,r=!1)=>{let{isActive:n,isAllDay:a,start:o,end:i}=e;return n&&(!r||a)&&M(t,o,i)&&(t.day()===0||t.isSame(o,"day"))};function ve({EVENT_LIMIT:e,enableRescheduling:t,compact:r,dayRecord:n,dispatch:a,handleMouseEvent:o,headerHeight:i="100%",isInWeekHeader:d=!1,isInDayHeader:l=!1,minMaxDatesInView:s,onEventClick:m,onEventReschedule:v,orderedEvents:c,placeholderRef:f,renderContextMenu:h,state:p}){let{date:u}=n,b=A(c,u),g=je(b,u,e,l),w=b.reduce((x,j)=>x+(j.order>=e?1:0),0),E=(l||d)&&w>0;Rr(p.placeholderEvent,u,d||l)&&g.push(p.placeholderEvent);let k=()=>a({type:"open_popover"}),C=()=>a({type:"reset_calendar"}),D=x=>{o(x,u,!1,f)},P=x=>{p.eventDragActive&&oe({state:p,dispatch:a,date:u,view:"month"}),o(x,u,!1,f)},S=x=>{p.eventDragActive&&(a({type:"event_reschedule_end",anchor:f.current}),v?.({clickedEvent:p.clickedEvent,newEvent:p.placeholderEvent,eventRef:f.current,openPopover:k,reset:C})),o(x,u,!1,f)};return dt(jr,{children:[dt("div",{className:"events-calendar-month-cell","data-border":!l&&u.day()!==6,onMouseDown:D,onMouseEnter:P,onMouseUp:S,style:{height:i,cursor:p.eventDragActive?"grabbing":"auto"},children:[!d&&!l&&pe(it,{state:p,dispatch:a,isCompact:r,dayRecord:n,numOverflowEvents:w}),pe("div",{className:"events-calendar-month-cell-content","data-week":d||l,children:E&&pe(me,{date:u,state:p,dispatch:a,isCompact:r,numOverflowEvents:w})})]}),g.map(x=>pe(L,{date:u,view:"month",state:p,event:x,compact:r,dispatch:a,onEventClick:m,isInDayHeader:l,isInWeekHeader:d,placeholderRef:f,renderContextMenu:h,minMaxDatesInView:s,enableRescheduling:t},x.id))]})}import{jsx as lt}from"react/jsx-runtime";function st({visible:e}){if(e)return lt("div",{className:"events-calendar-loader-wrapper",children:lt("span",{className:"events-calendar-loader"})})}import{jsx as Nr}from"react/jsx-runtime";function Y({isGroupButton:e,active:t=!1,onClick:r=()=>null,variant:n,children:a}){return Nr("button",{type:"button",onClick:r,"data-group":e,"data-active":t,"data-variant":n,className:"events-calendar-header-button",children:a})}import{jsx as ct,jsxs as _r}from"react/jsx-runtime";function mt({hideViewToggle:e,views:t,setView:r,view:n,children:a}){if(t.length<1&&!a)return;let o=V.filter(i=>t.includes(i));return _r("div",{className:"events-calendar-header-controls",children:[!e&&o.length>1&&ct("div",{className:"events-calendar-button-group",children:o.map(i=>ct(Y,{isGroupButton:!0,active:n===i,onClick:()=>r(i),children:i},i))}),a]})}import Hr from"dayjs";import{jsx as pt,jsxs as Vr}from"react/jsx-runtime";function vt({size:e="24",stroke:t="2"}){return Vr("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:t,strokeLinecap:"round",strokeLinejoin:"round",className:"icon icon-tabler icons-tabler-outline icon-tabler-chevron-left",children:[pt("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),pt("path",{d:"M15 6l-6 6l6 6"})]})}import{jsx as ft,jsxs as zr}from"react/jsx-runtime";function ut({size:e="24",stroke:t="2"}){return zr("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:t,strokeLinecap:"round",strokeLinejoin:"round",className:"icon icon-tabler icons-tabler-outline icon-tabler-chevron-right",children:[ft("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),ft("path",{d:"M9 6l6 6l-6 6"})]})}import{jsx as $,jsxs as ht}from"react/jsx-runtime";var Ir=(e,t)=>{let r=e.startOf("week"),n=e.endOf("week");return t==="year"?e.format("YYYY"):t==="month"?e.format("MMMM YYYY"):t==="week"?`${r.format("MMM DD")} - ${n.format("MMM DD, YYYY")}`:e.format("D MMMM, YYYY")};function gt({activeDate:e,setActiveDate:t,view:r}){let n=()=>t(Hr()),a=i=>t(d=>d.add(1,i)),o=i=>t(d=>d.subtract(1,i));return ht("div",{className:"events-calendar-nav",children:[$(Y,{variant:"outline",onClick:n,children:"Today"}),ht("div",{className:"events-calendar-nav-actions",children:[$(Y,{variant:"subtle",onClick:()=>o(r),children:$(vt,{size:"1.5rem"})}),$(Y,{variant:"subtle",onClick:()=>a(r),children:$(ut,{size:"1.5rem"})})]}),$("span",{className:"events-calendar-title",children:Ir(e,r)})]})}import{jsx as yt,jsxs as Br}from"react/jsx-runtime";function wt({activeDate:e,onClick:t=()=>null,hideViewToggle:r,setActiveDate:n,setView:a=()=>null,views:o=[...V],view:i="month",customControls:d}){return Br("div",{className:"events-calendar-header",onClick:t,children:[yt(gt,{activeDate:e,setActiveDate:n,view:i}),yt(mt,{hideViewToggle:r,views:o,setView:a,view:i,children:d})]})}import{useMemo as Ot}from"react";import bt from"dayjs";import{useEffect as Lr,useRef as Yr}from"react";var $r=48,Wr=60,Fr=bt().diff(bt().startOf("day"),"m"),Ur=$r/Wr;function xt({minutesToScroll:e=Fr,offset:t=140}={}){let r=Yr(null);return Lr(()=>{if(!r.current)return;let n=Ur*e-t;r.current.scrollTo({top:n})},[e,t]),r}var Et=(e,t)=>{if(t==="day")return[{date:e}];let r=e.startOf("week"),a=r.subtract(r.day(),"d"),o=[];for(let i=0;i<7;i++)o.push({date:a,isCurrentMonth:a.month()===e.month()}),a=a.add(1,"day");return o};function Ct(e,t){return e.reduce((r,n,a)=>({...r,[a]:_e(A(t,n.date),n.date)}),{})}import{jsx as xe}from"react/jsx-runtime";function Dt(){return xe("div",{className:"events-calendar-hours-column",children:Pe.map(e=>xe("div",{className:"events-calendar-hour",children:xe("span",{className:"events-calendar-hour-label",children:e})},e))})}import Gr from"dayjs";import{jsx as kt,jsxs as Jr}from"react/jsx-runtime";var fe=Gr();function Mt({activeDate:e,isDayView:t}){if(!e.isSame(fe,"day"))return;let r=t?1:fe.day()+1,n=fe.hour()*4+Math.round(fe.minute()/15)+1;return Jr("div",{className:"events-calendar-time-indicator",style:{gridColumn:r,gridRow:n},children:[kt("div",{className:"events-calendar-time-indicator-dot"}),kt("div",{className:"events-calendar-time-indicator-line"})]})}import{Fragment as qr,jsx as Tt}from"react/jsx-runtime";var Ee=e=>Array(e).fill(0).map((t,r)=>r),Xr=(e,t,r,n,a)=>(a==="day"?e:e.startOf("week").add(t,"d")).hour(r).minute(n*15);function At({view:e,activeDate:t,handleMouseEvent:r,placeholderRef:n,state:a,dispatch:o,onEventReschedule:i}){let d=e==="day"?[0]:Ee(7),l=Ee(24),s=Ee(4),m=()=>o({type:"open_popover"}),v=()=>o({type:"reset_calendar"});return Tt(qr,{children:d.map(c=>l.map(f=>s.map(h=>{let p=Xr(t,c,f,h,e);return Tt("div",{className:"events-calendar-time-background-cell","data-isweekview":e==="week",onMouseDown:u=>r(u,p,!0,n),onMouseEnter:u=>{a.eventDragActive&&oe({state:a,dispatch:o,date:p,view:e}),r(u,p,!0,n)},onMouseUp:u=>{a.eventDragActive&&(o({type:"event_reschedule_end",anchor:n.current}),i?.({clickedEvent:a.clickedEvent,newEvent:a.placeholderEvent,eventRef:n.current,openPopover:m,reset:v})),r(u,p,!0,n)},style:{gridColumnStart:c+1,gridRow:`${f*4+h+1} / ${f*4+h+2}`,cursor:a.eventDragActive?"grabbing":"auto"}},`${c}${f}${h}`)})))})}import Zr from"dayjs";import{jsx as Ce,jsxs as Kr}from"react/jsx-runtime";var Pt=2;function St({view:e,enableRescheduling:t,compact:r,allDayEvents:n,dispatch:a,handleMouseEvent:o,handleStopDrag:i,minMaxDatesInView:d,onEventClick:l,onEventReschedule:s,placeholderRef:m,renderContextMenu:v,state:c,weekDatesArray:f}){let h=e==="day"?A(n,f[0].date):ie(n,f[0].date),p=H(h),u=p.length>0?Math.max(...p.map(y=>y.order+1)):0,b=Math.min(u,Pt+1),g=r?20:23,w=b>0?8:0,E=g*b+w;return Ce("div",{className:"events-calendar-time-view-header","data-isweekview":e==="week",onMouseLeave:i,children:f.map((y,k)=>{let{date:C}=y,D=e==="week"||h.length>0;return Kr("div",{className:"events-calendar-time-view-header-cell","data-border":D,children:[e==="week"&&Ce("div",{className:"events-calendar-time-view-header-label","data-today":C.isSame(Zr(),"day"),onMouseEnter:i,children:`${C.format("ddd")} ${C.format("DD")}`}),Ce(ve,{isInDayHeader:e==="day",isInWeekHeader:e==="week",EVENT_LIMIT:Pt,enableRescheduling:t,compact:r,dayRecord:y,dispatch:a,handleMouseEvent:o,headerHeight:E,minMaxDatesInView:d,onEventClick:l,onEventReschedule:s,orderedEvents:p,placeholderRef:m,renderContextMenu:v,state:c})]},k)})})}import{jsx as W,jsxs as De}from"react/jsx-runtime";function Rt({view:e,activeDate:t,compact:r,dispatch:n,enableRescheduling:a,events:o,handleMouseEvent:i,handleStopDrag:d,onEventClick:l,onEventReschedule:s,placeholderRef:m,renderContextMenu:v,state:c}){let f=e==="day",h=e==="week",p=o.filter(y=>y.isAllDay),u=o.filter(y=>!y.isAllDay),b=xt(),g=Ot(()=>Et(t,e),[t,e]),w={first:f?t:g[0].date,last:f?t:g[6].date},E=Ot(()=>Ct(g,u),[u,g]);return De("div",{className:"events-calendar-time-view",children:[W(St,{allDayEvents:p,compact:r,dispatch:n,enableRescheduling:a,handleMouseEvent:i,handleStopDrag:d,minMaxDatesInView:w,onEventClick:l,onEventReschedule:s,placeholderRef:m,renderContextMenu:v,state:c,view:e,weekDatesArray:g}),W("div",{ref:b,className:"events-calendar-time-view-scroll-wrapper",children:De("div",{className:"events-calendar-time-view-grid-wrapper",children:[W(Dt,{}),De("div",{className:"events-calendar-time-view-grid","data-isweekview":h,onMouseEnter:d,onMouseLeave:d,children:[W(At,{activeDate:t,dispatch:n,handleMouseEvent:i,onEventReschedule:s,placeholderRef:m,state:c,view:e}),W(Mt,{activeDate:t,isDayView:f}),g.map(({date:y},k)=>{let C=E[k],{isActive:D,isAllDay:P,start:S,end:x}=c.placeholderEvent;return D&&!P&&M(y,S,x)&&C.push(c.placeholderEvent),C.map(N=>W(L,{date:y,dispatch:n,enableRescheduling:a,event:N,onEventClick:l,placeholderRef:m,renderContextMenu:v,state:c,view:e},N.id))})]})]})})]})}import{useRef as Qr}from"react";import{jsx as en}from"react/jsx-runtime";function jt({date:e,handleClick:t,isToday:r,isDimmed:n,isActive:a}){let o=Qr(null);return en("div",{ref:o,"data-date":e.format("DD-MMM-YYYY"),className:"events-calendar-year-view-month-date","data-today":r,"data-dimmed":n,"data-active":a,onMouseDown:i=>i.stopPropagation(),onClick:i=>t(i,e,o),children:e.format("D")})}import tn from"dayjs";function Nt(e,t){let r={},n=new Set;t.forEach(({start:o,end:i})=>{let d=o.clone().startOf("day"),l=i.clone().startOf("day");for(;d.isBefore(l,"day")||d.isSame(l,"day");)n.add(d.format("YYYY-MM-DD")),d=d.add(1,"day")});let a=e.startOf("year");return ne.forEach((o,i)=>{let d=a.clone().day(0),l=Array.from({length:42},(s,m)=>{let v=d.clone().add(m,"day"),c=v.isSame(tn(),"day"),f=a.isSame(v,"month"),h=f&&n.has(v.format("YYYY-MM-DD"));return{date:v,isToday:c,isActive:h,isCurrentMonth:f}});r[o]=l,a=a.month(i+1)}),r}import{jsx as Z,jsxs as _t}from"react/jsx-runtime";function Vt({activeDate:e,dispatch:t,events:r,state:n}){let a=Nt(e,r),o=()=>t({type:"reset_calendar"}),i=(d,l,s)=>{n.overflowIsOpen&&d.target===n.overflowAnchor?t({type:"reset_calendar"}):t({type:"open_overflow",date:l,anchor:s.current})};return Z("div",{className:"events-calendar-year-view-scroll-wrapper",children:Z("div",{className:"events-calendar-year-view",onMouseDown:o,children:ne.map(d=>_t("div",{className:"events-calendar-year-view-month",children:[Z("div",{className:"events-calendar-year-view-month-label",children:d}),_t("div",{className:"events-calendar-year-view-month-dates",children:[Te.map((l,s)=>Z("div",{className:"events-calendar-year-view-month-header",children:l},`${d}-${s}`)),a[d].map(({date:l,isToday:s,isCurrentMonth:m,isActive:v},c)=>Z(jt,{date:l,handleClick:i,isToday:s,isActive:v,isDimmed:!m},c))]})]},d))})})}import{useMemo as Yt}from"react";import{jsx as zt}from"react/jsx-runtime";var rn=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function Ht({isCompact:e}){return zt("div",{className:"events-calendar-month-header","data-sm":e,children:rn.map((t,r)=>zt("div",{className:"events-calendar-month-header-cell",children:t},r))})}var It=(e,t)=>{if(e===0)return 0;let r=2,n=8,a=26,o=t?18:20;return Math.max(Math.floor((e-a-n)/(o+r)),0)};var Bt=e=>{let t=e.startOf("month").day(0),r=t,n=e.add(1,"month").month(),a=[],o=[],i=1;for(;r.subtract(r.day(),"d").month()!==n;)a.push({date:r,isCurrentMonth:r.month()===e.month()}),i===7&&(o.push(a),a=[],i=0),i++,r=r.add(1,"day");return{weeks:o,first:t,last:r}};function Lt(e,t){return e.reduce((r,n,a)=>({...r,[a]:H(ie(t,n[0].date))}),{})}import{jsx as ue,jsxs as nn}from"react/jsx-runtime";function $t({enableRescheduling:e,compact:t,activeDate:r,dispatch:n,events:a,handleMouseEvent:o,handleStopDrag:i,onEventClick:d,onEventReschedule:l,placeholderRef:s,renderContextMenu:m,state:v}){let c=Yt(()=>Bt(r),[r]),f={first:c.first,last:c.last},{ref:h,height:p}=Ie(),u=p/c.weeks.length,b=It(u,t),g=Yt(()=>Lt(c.weeks,a),[a,c.weeks]);return nn("div",{className:"events-calendar-month-view",children:[ue(Ht,{isCompact:t}),ue("div",{className:"events-calendar-month-view-grid",onMouseLeave:i,ref:h,children:c.weeks.map((w,E)=>{let y=p>0?g[E]:[];return ue("div",{className:"events-calendar-month-view-row",children:w.map((k,C)=>ue(ve,{EVENT_LIMIT:b,enableRescheduling:e,compact:t,dayRecord:k,dispatch:n,handleMouseEvent:o,isInWeekHeader:!1,minMaxDatesInView:f,onEventClick:d,onEventReschedule:l,orderedEvents:y,placeholderRef:s,renderContextMenu:m,state:v},C))},E)})})]})}import an from"dayjs";import{Fragment as dn,jsx as F,jsxs as ln}from"react/jsx-runtime";var on=e=>e?an(e):void 0;function ke({compact:e,dispatch:t,events:r,onEventClick:n,placeholderRef:a,renderContextMenu:o,state:i,enableRescheduling:d}){let l=on(i.overflowAnchor?.dataset.date);if(!l||!i.overflowAnchor)return F(dn,{});let s=H(A(r,l));return F(ce,{zIndex:2,anchor:i.overflowAnchor,isOpen:i.overflowIsOpen,children:ln("div",{className:"events-calendar-overflow-card",children:[F("span",{className:"events-calendar-overflow-card-label",children:l.format("dddd, MMMM D")}),!s.length&&F("div",{className:"events-calendar-overflow-card-text",children:"No events scheduled for this date"}),F("div",{className:"events-calendar-overflow-card-content",children:s.map(m=>F(L,{view:"month",isInOverflow:!0,enableRescheduling:d,compact:e,date:l,dispatch:t,event:m,onEventClick:n,placeholderRef:a,renderContextMenu:o,state:i},m.id))})]})})}import{jsx as R,jsxs as Ft}from"react/jsx-runtime";function vl({calendar:e,compact:t=!1,enableDragCreation:r=!1,enableRescheduling:n=!1,events:a=[],popoverZIndex:o=101,isFetching:i=!1,noHeader:d=!1,onEventClick:l,onEventCreate:s,onEventReschedule:m,renderPopover:v,renderContextMenu:c,views:f=[...V]}){let{activeDate:h,setActiveDate:p,view:u,setView:b,state:g,dispatch:w}=Fe(e),E=Wt(()=>Re(a),[a]),y=Wt(()=>Oe(E,h,u),[E,h,u]),C=u==="week"||u==="day"?y.filter(J=>J.isAllDay):y,{eventAnchor:D,dragActive:P,eventDragActive:S,popoverIsOpen:x,clickedEvent:j,placeholderEvent:N}=g,U=()=>w({type:"reset_calendar"}),G=()=>{(P||S)&&w({type:"event_create_stop"})},_=sn(null),K=ze({enableDragCreation:r,dispatch:w,state:g,onEventCreate:s}),Q={activeDate:h,dispatch:w,state:g,events:y},ee={...Q,compact:t,onEventClick:l,handleStopDrag:G,placeholderRef:_,handleMouseEvent:K,onEventReschedule:m,renderContextMenu:c,enableRescheduling:n};return Ft("div",{className:"events-calendar-wrapper",children:[d?null:R(wt,{view:u,setActiveDate:p,setView:b,activeDate:h,views:f}),Ft("div",{className:"events-calendar","data-withheader":!d,onClick:J=>J.stopPropagation(),children:[R(st,{visible:i}),(()=>{switch(u){case"year":return R(Vt,{...Q});case"month":return R($t,{...ee});case"week":case"day":return R(Rt,{...ee,view:u});default:return null}})(),v&&D&&R(ce,{isOpen:x,anchor:D,zIndex:o,children:v({onClose:U,clickedEvent:j,newEvent:N})}),R(ke,{state:g,compact:t,dispatch:w,events:C,onEventClick:l,placeholderRef:_,renderContextMenu:c,enableRescheduling:n})]})]})}export{V as CALENDAR_VIEWS,Ae as DAYS_IN_FULL_MONTH,Te as DAY_LABELS_SHORT,ae as DEFAULT_COLOR,vl as EventsCalendar,Pe as HOURS,wt as Header,ne as MONTHS,H as arrangeWeekEvents,_e as arrangeWeekdayEvents,Un as createDayjsObjFromTime,A as filterByDate,Oe as filterByView,ie as filterByWeek,I as getBackgroundFromGroups,se as getPlaceholderEvent,O as getTimeDiff,Se as getTimeLabel,je as getVisibleEvents,z as hasOverlap,M as isBetween,Re as parseRawEvents,le as returnValidStartEnd,re as setTime,oe as updateEvent,We as useEventsCalendar}; //# sourceMappingURL=index.mjs.map