Calendar/wwwroot/js/calendar-min.js
2026-02-03 00:02:25 +01:00

26 lines
132 KiB
JavaScript

var Lt=Object.create;var vt=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var Ht=Object.getOwnPropertyNames;var Bt=Object.getPrototypeOf,Wt=Object.prototype.hasOwnProperty;var se=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports);var Pt=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Ht(e))!Wt.call(o,r)&&r!==t&&vt(o,r,{get:()=>e[r],enumerable:!(n=$t(e,r))||n.enumerable});return o};var ie=(o,e,t)=>(t=o!=null?Lt(Bt(o)):{},Pt(e||!o||!o.__esModule?vt(t,"default",{value:o,enumerable:!0}):t,o));var Et=se((rt,st)=>{(function(o,e){typeof rt=="object"&&typeof st<"u"?st.exports=e():typeof define=="function"&&define.amd?define(e):(o=typeof globalThis<"u"?globalThis:o||self).dayjs=e()})(rt,function(){"use strict";var o=1e3,e=6e4,t=36e5,n="millisecond",r="second",s="minute",i="hour",a="day",c="week",d="month",g="quarter",w="year",E="date",m="Invalid Date",u=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,D=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,C={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(S){var f=["th","st","nd","rd"],h=S%100;return"["+S+(f[(h-20)%10]||f[h]||f[0])+"]"}},k=function(S,f,h){var y=String(S);return!y||y.length>=f?S:""+Array(f+1-y.length).join(h)+S},l={s:k,z:function(S){var f=-S.utcOffset(),h=Math.abs(f),y=Math.floor(h/60),p=h%60;return(f<=0?"+":"-")+k(y,2,"0")+":"+k(p,2,"0")},m:function S(f,h){if(f.date()<h.date())return-S(h,f);var y=12*(h.year()-f.year())+(h.month()-f.month()),p=f.clone().add(y,d),T=h-p<0,M=f.clone().add(y+(T?-1:1),d);return+(-(y+(h-p)/(T?p-M:M-p))||0)},a:function(S){return S<0?Math.ceil(S)||0:Math.floor(S)},p:function(S){return{M:d,y:w,w:c,d:a,D:E,h:i,m:s,s:r,ms:n,Q:g}[S]||String(S||"").toLowerCase().replace(/s$/,"")},u:function(S){return S===void 0}},O="en",W={};W[O]=C;var P="$isDayjsObject",N=function(S){return S instanceof Y||!(!S||!S[P])},$=function S(f,h,y){var p;if(!f)return O;if(typeof f=="string"){var T=f.toLowerCase();W[T]&&(p=T),h&&(W[T]=h,p=T);var M=f.split("-");if(!p&&M.length>1)return S(M[0])}else{var R=f.name;W[R]=f,p=R}return!y&&p&&(O=p),p||!y&&O},x=function(S,f){if(N(S))return S.clone();var h=typeof f=="object"?f:{};return h.date=S,h.args=arguments,new Y(h)},A=l;A.l=$,A.i=N,A.w=function(S,f){return x(S,{locale:f.$L,utc:f.$u,x:f.$x,$offset:f.$offset})};var Y=function(){function S(h){this.$L=$(h.locale,null,!0),this.parse(h),this.$x=this.$x||h.x||{},this[P]=!0}var f=S.prototype;return f.parse=function(h){this.$d=function(y){var p=y.date,T=y.utc;if(p===null)return new Date(NaN);if(A.u(p))return new Date;if(p instanceof Date)return new Date(p);if(typeof p=="string"&&!/Z$/i.test(p)){var M=p.match(u);if(M){var R=M[2]-1||0,L=(M[7]||"0").substring(0,3);return T?new Date(Date.UTC(M[1],R,M[3]||1,M[4]||0,M[5]||0,M[6]||0,L)):new Date(M[1],R,M[3]||1,M[4]||0,M[5]||0,M[6]||0,L)}}return new Date(p)}(h),this.init()},f.init=function(){var h=this.$d;this.$y=h.getFullYear(),this.$M=h.getMonth(),this.$D=h.getDate(),this.$W=h.getDay(),this.$H=h.getHours(),this.$m=h.getMinutes(),this.$s=h.getSeconds(),this.$ms=h.getMilliseconds()},f.$utils=function(){return A},f.isValid=function(){return this.$d.toString()!==m},f.isSame=function(h,y){var p=x(h);return this.startOf(y)<=p&&p<=this.endOf(y)},f.isAfter=function(h,y){return x(h)<this.startOf(y)},f.isBefore=function(h,y){return this.endOf(y)<x(h)},f.$g=function(h,y,p){return A.u(h)?this[y]:this.set(p,h)},f.unix=function(){return Math.floor(this.valueOf()/1e3)},f.valueOf=function(){return this.$d.getTime()},f.startOf=function(h,y){var p=this,T=!!A.u(y)||y,M=A.p(h),R=function(j,_){var G=A.w(p.$u?Date.UTC(p.$y,_,j):new Date(p.$y,_,j),p);return T?G:G.endOf(a)},L=function(j,_){return A.w(p.toDate()[j].apply(p.toDate("s"),(T?[0,0,0,0]:[23,59,59,999]).slice(_)),p)},H=this.$W,F=this.$M,q=this.$D,ee="set"+(this.$u?"UTC":"");switch(M){case w:return T?R(1,0):R(31,11);case d:return T?R(1,F):R(0,F+1);case c:var Z=this.$locale().weekStart||0,re=(H<Z?H+7:H)-Z;return R(T?q-re:q+(6-re),F);case a:case E:return L(ee+"Hours",0);case i:return L(ee+"Minutes",1);case s:return L(ee+"Seconds",2);case r:return L(ee+"Milliseconds",3);default:return this.clone()}},f.endOf=function(h){return this.startOf(h,!1)},f.$set=function(h,y){var p,T=A.p(h),M="set"+(this.$u?"UTC":""),R=(p={},p[a]=M+"Date",p[E]=M+"Date",p[d]=M+"Month",p[w]=M+"FullYear",p[i]=M+"Hours",p[s]=M+"Minutes",p[r]=M+"Seconds",p[n]=M+"Milliseconds",p)[T],L=T===a?this.$D+(y-this.$W):y;if(T===d||T===w){var H=this.clone().set(E,1);H.$d[R](L),H.init(),this.$d=H.set(E,Math.min(this.$D,H.daysInMonth())).$d}else R&&this.$d[R](L);return this.init(),this},f.set=function(h,y){return this.clone().$set(h,y)},f.get=function(h){return this[A.p(h)]()},f.add=function(h,y){var p,T=this;h=Number(h);var M=A.p(y),R=function(F){var q=x(T);return A.w(q.date(q.date()+Math.round(F*h)),T)};if(M===d)return this.set(d,this.$M+h);if(M===w)return this.set(w,this.$y+h);if(M===a)return R(1);if(M===c)return R(7);var L=(p={},p[s]=e,p[i]=t,p[r]=o,p)[M]||1,H=this.$d.getTime()+h*L;return A.w(H,this)},f.subtract=function(h,y){return this.add(-1*h,y)},f.format=function(h){var y=this,p=this.$locale();if(!this.isValid())return p.invalidDate||m;var T=h||"YYYY-MM-DDTHH:mm:ssZ",M=A.z(this),R=this.$H,L=this.$m,H=this.$M,F=p.weekdays,q=p.months,ee=p.meridiem,Z=function(_,G,X,te){return _&&(_[G]||_(y,T))||X[G].slice(0,te)},re=function(_){return A.s(R%12||12,_,"0")},j=ee||function(_,G,X){var te=_<12?"AM":"PM";return X?te.toLowerCase():te};return T.replace(D,function(_,G){return G||function(X){switch(X){case"YY":return String(y.$y).slice(-2);case"YYYY":return A.s(y.$y,4,"0");case"M":return H+1;case"MM":return A.s(H+1,2,"0");case"MMM":return Z(p.monthsShort,H,q,3);case"MMMM":return Z(q,H);case"D":return y.$D;case"DD":return A.s(y.$D,2,"0");case"d":return String(y.$W);case"dd":return Z(p.weekdaysMin,y.$W,F,2);case"ddd":return Z(p.weekdaysShort,y.$W,F,3);case"dddd":return F[y.$W];case"H":return String(R);case"HH":return A.s(R,2,"0");case"h":return re(1);case"hh":return re(2);case"a":return j(R,L,!0);case"A":return j(R,L,!1);case"m":return String(L);case"mm":return A.s(L,2,"0");case"s":return String(y.$s);case"ss":return A.s(y.$s,2,"0");case"SSS":return A.s(y.$ms,3,"0");case"Z":return M}return null}(_)||M.replace(":","")})},f.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},f.diff=function(h,y,p){var T,M=this,R=A.p(y),L=x(h),H=(L.utcOffset()-this.utcOffset())*e,F=this-L,q=function(){return A.m(M,L)};switch(R){case w:T=q()/12;break;case d:T=q();break;case g:T=q()/3;break;case c:T=(F-H)/6048e5;break;case a:T=(F-H)/864e5;break;case i:T=F/t;break;case s:T=F/e;break;case r:T=F/o;break;default:T=F}return p?T:A.a(T)},f.daysInMonth=function(){return this.endOf(d).$D},f.$locale=function(){return W[this.$L]},f.locale=function(h,y){if(!h)return this.$L;var p=this.clone(),T=$(h,y,!0);return T&&(p.$L=T),p},f.clone=function(){return A.w(this.$d,this)},f.toDate=function(){return new Date(this.valueOf())},f.toJSON=function(){return this.isValid()?this.toISOString():null},f.toISOString=function(){return this.$d.toISOString()},f.toString=function(){return this.$d.toUTCString()},S}(),z=Y.prototype;return x.prototype=z,[["$ms",n],["$s",r],["$m",s],["$H",i],["$W",a],["$M",d],["$y",w],["$D",E]].forEach(function(S){z[S[1]]=function(f){return this.$g(f,S[0],S[1])}}),x.extend=function(S,f){return S.$i||(S(f,Y,x),S.$i=!0),x},x.locale=$,x.isDayjs=N,x.unix=function(S){return x(1e3*S)},x.en=W[O],x.Ls=W,x.p={},x})});var Dt=se((it,at)=>{(function(o,e){typeof it=="object"&&typeof at<"u"?at.exports=e():typeof define=="function"&&define.amd?define(e):(o=typeof globalThis<"u"?globalThis:o||self).dayjs_plugin_utc=e()})(it,function(){"use strict";var o="minute",e=/[+-]\d\d(?::?\d\d)?/g,t=/([+-]|\d\d)/g;return function(n,r,s){var i=r.prototype;s.utc=function(m){var u={date:m,utc:!0,args:arguments};return new r(u)},i.utc=function(m){var u=s(this.toDate(),{locale:this.$L,utc:!0});return m?u.add(this.utcOffset(),o):u},i.local=function(){return s(this.toDate(),{locale:this.$L,utc:!1})};var a=i.parse;i.parse=function(m){m.utc&&(this.$u=!0),this.$utils().u(m.$offset)||(this.$offset=m.$offset),a.call(this,m)};var c=i.init;i.init=function(){if(this.$u){var m=this.$d;this.$y=m.getUTCFullYear(),this.$M=m.getUTCMonth(),this.$D=m.getUTCDate(),this.$W=m.getUTCDay(),this.$H=m.getUTCHours(),this.$m=m.getUTCMinutes(),this.$s=m.getUTCSeconds(),this.$ms=m.getUTCMilliseconds()}else c.call(this)};var d=i.utcOffset;i.utcOffset=function(m,u){var D=this.$utils().u;if(D(m))return this.$u?0:D(this.$offset)?d.call(this):this.$offset;if(typeof m=="string"&&(m=function(O){O===void 0&&(O="");var W=O.match(e);if(!W)return null;var P=(""+W[0]).match(t)||["-",0,0],N=P[0],$=60*+P[1]+ +P[2];return $===0?0:N==="+"?$:-$}(m),m===null))return this;var C=Math.abs(m)<=16?60*m:m;if(C===0)return this.utc(u);var k=this.clone();if(u)return k.$offset=C,k.$u=!1,k;var l=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(k=this.local().add(C+l,o)).$offset=C,k.$x.$localOffset=l,k};var g=i.format;i.format=function(m){var u=m||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return g.call(this,u)},i.valueOf=function(){var m=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*m},i.isUTC=function(){return!!this.$u},i.toISOString=function(){return this.toDate().toISOString()},i.toString=function(){return this.toDate().toUTCString()};var w=i.toDate;i.toDate=function(m){return m==="s"&&this.$offset?s(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():w.call(this)};var E=i.diff;i.diff=function(m,u,D){if(m&&this.$u===m.$u)return E.call(this,m,u,D);var C=this.local(),k=s(m).local();return E.call(C,k,u,D)}}})});var St=se((ot,lt)=>{(function(o,e){typeof ot=="object"&&typeof lt<"u"?lt.exports=e():typeof define=="function"&&define.amd?define(e):(o=typeof globalThis<"u"?globalThis:o||self).dayjs_plugin_timezone=e()})(ot,function(){"use strict";var o={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(t,n,r){var s,i=function(g,w,E){E===void 0&&(E={});var m=new Date(g),u=function(D,C){C===void 0&&(C={});var k=C.timeZoneName||"short",l=D+"|"+k,O=e[l];return O||(O=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:D,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:k}),e[l]=O),O}(w,E);return u.formatToParts(m)},a=function(g,w){for(var E=i(g,w),m=[],u=0;u<E.length;u+=1){var D=E[u],C=D.type,k=D.value,l=o[C];l>=0&&(m[l]=parseInt(k,10))}var O=m[3],W=O===24?0:O,P=m[0]+"-"+m[1]+"-"+m[2]+" "+W+":"+m[4]+":"+m[5]+":000",N=+g;return(r.utc(P).valueOf()-(N-=N%1e3))/6e4},c=n.prototype;c.tz=function(g,w){g===void 0&&(g=s);var E,m=this.utcOffset(),u=this.toDate(),D=u.toLocaleString("en-US",{timeZone:g}),C=Math.round((u-new Date(D))/1e3/60),k=15*-Math.round(u.getTimezoneOffset()/15)-C;if(!Number(k))E=this.utcOffset(0,w);else if(E=r(D,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(k,!0),w){var l=E.utcOffset();E=E.add(m-l,"minute")}return E.$x.$timezone=g,E},c.offsetName=function(g){var w=this.$x.$timezone||r.tz.guess(),E=i(this.valueOf(),w,{timeZoneName:g}).find(function(m){return m.type.toLowerCase()==="timezonename"});return E&&E.value};var d=c.startOf;c.startOf=function(g,w){if(!this.$x||!this.$x.$timezone)return d.call(this,g,w);var E=r(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return d.call(E,g,w).tz(this.$x.$timezone,!0)},r.tz=function(g,w,E){var m=E&&w,u=E||w||s,D=a(+r(),u);if(typeof g!="string")return r(g).tz(u);var C=function(W,P,N){var $=W-60*P*1e3,x=a($,N);if(P===x)return[$,P];var A=a($-=60*(x-P)*1e3,N);return x===A?[$,x]:[W-60*Math.min(x,A)*1e3,Math.max(x,A)]}(r.utc(g,m).valueOf(),D,u),k=C[0],l=C[1],O=r(k).utcOffset(l);return O.$x.$timezone=u,O},r.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},r.tz.setDefault=function(g){s=g}}})});var wt=se((ct,dt)=>{(function(o,e){typeof ct=="object"&&typeof dt<"u"?dt.exports=e():typeof define=="function"&&define.amd?define(e):(o=typeof globalThis<"u"?globalThis:o||self).dayjs_plugin_isoWeek=e()})(ct,function(){"use strict";var o="day";return function(e,t,n){var r=function(a){return a.add(4-a.isoWeekday(),o)},s=t.prototype;s.isoWeekYear=function(){return r(this).year()},s.isoWeek=function(a){if(!this.$utils().u(a))return this.add(7*(a-this.isoWeek()),o);var c,d,g,w,E=r(this),m=(c=this.isoWeekYear(),d=this.$u,g=(d?n.utc:n)().year(c).startOf("year"),w=4-g.isoWeekday(),g.isoWeekday()>4&&(w+=7),g.add(w,o));return E.diff(m,"week")+1},s.isoWeekday=function(a){return this.$utils().u(a)?this.day()||7:this.day(this.day()%7?a:a-7)};var i=s.startOf;s.startOf=function(a,c){var d=this.$utils(),g=!!d.u(c)||c;return d.p(a)==="isoweek"?g?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):i.bind(this)(a,c)}}})});var Ct=se((ut,ht)=>{(function(o,e){typeof ut=="object"&&typeof ht<"u"?ht.exports=e():typeof define=="function"&&define.amd?define(e):(o=typeof globalThis<"u"?globalThis:o||self).dayjs_plugin_customParseFormat=e()})(ut,function(){"use strict";var o={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,t=/\d/,n=/\d\d/,r=/\d\d?/,s=/\d*[^-_:/,()\s\d]+/,i={},a=function(u){return(u=+u)+(u>68?1900:2e3)},c=function(u){return function(D){this[u]=+D}},d=[/[+-]\d\d:?(\d\d)?|Z/,function(u){(this.zone||(this.zone={})).offset=function(D){if(!D||D==="Z")return 0;var C=D.match(/([+-]|\d\d)/g),k=60*C[1]+(+C[2]||0);return k===0?0:C[0]==="+"?-k:k}(u)}],g=function(u){var D=i[u];return D&&(D.indexOf?D:D.s.concat(D.f))},w=function(u,D){var C,k=i.meridiem;if(k){for(var l=1;l<=24;l+=1)if(u.indexOf(k(l,0,D))>-1){C=l>12;break}}else C=u===(D?"pm":"PM");return C},E={A:[s,function(u){this.afternoon=w(u,!1)}],a:[s,function(u){this.afternoon=w(u,!0)}],Q:[t,function(u){this.month=3*(u-1)+1}],S:[t,function(u){this.milliseconds=100*+u}],SS:[n,function(u){this.milliseconds=10*+u}],SSS:[/\d{3}/,function(u){this.milliseconds=+u}],s:[r,c("seconds")],ss:[r,c("seconds")],m:[r,c("minutes")],mm:[r,c("minutes")],H:[r,c("hours")],h:[r,c("hours")],HH:[r,c("hours")],hh:[r,c("hours")],D:[r,c("day")],DD:[n,c("day")],Do:[s,function(u){var D=i.ordinal,C=u.match(/\d+/);if(this.day=C[0],D)for(var k=1;k<=31;k+=1)D(k).replace(/\[|\]/g,"")===u&&(this.day=k)}],w:[r,c("week")],ww:[n,c("week")],M:[r,c("month")],MM:[n,c("month")],MMM:[s,function(u){var D=g("months"),C=(g("monthsShort")||D.map(function(k){return k.slice(0,3)})).indexOf(u)+1;if(C<1)throw new Error;this.month=C%12||C}],MMMM:[s,function(u){var D=g("months").indexOf(u)+1;if(D<1)throw new Error;this.month=D%12||D}],Y:[/[+-]?\d+/,c("year")],YY:[n,function(u){this.year=a(u)}],YYYY:[/\d{4}/,c("year")],Z:d,ZZ:d};function m(u){var D,C;D=u,C=i&&i.formats;for(var k=(u=D.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(x,A,Y){var z=Y&&Y.toUpperCase();return A||C[Y]||o[Y]||C[z].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(S,f,h){return f||h.slice(1)})})).match(e),l=k.length,O=0;O<l;O+=1){var W=k[O],P=E[W],N=P&&P[0],$=P&&P[1];k[O]=$?{regex:N,parser:$}:W.replace(/^\[|\]$/g,"")}return function(x){for(var A={},Y=0,z=0;Y<l;Y+=1){var S=k[Y];if(typeof S=="string")z+=S.length;else{var f=S.regex,h=S.parser,y=x.slice(z),p=f.exec(y)[0];h.call(A,p),x=x.replace(p,"")}}return function(T){var M=T.afternoon;if(M!==void 0){var R=T.hours;M?R<12&&(T.hours+=12):R===12&&(T.hours=0),delete T.afternoon}}(A),A}}return function(u,D,C){C.p.customParseFormat=!0,u&&u.parseTwoDigitYear&&(a=u.parseTwoDigitYear);var k=D.prototype,l=k.parse;k.parse=function(O){var W=O.date,P=O.utc,N=O.args;this.$u=P;var $=N[1];if(typeof $=="string"){var x=N[2]===!0,A=N[3]===!0,Y=x||A,z=N[2];A&&(z=N[2]),i=this.$locale(),!x&&z&&(i=C.Ls[z]),this.$d=function(y,p,T,M){try{if(["x","X"].indexOf(p)>-1)return new Date((p==="X"?1e3:1)*y);var R=m(p)(y),L=R.year,H=R.month,F=R.day,q=R.hours,ee=R.minutes,Z=R.seconds,re=R.milliseconds,j=R.zone,_=R.week,G=new Date,X=F||(L||H?1:G.getDate()),te=L||G.getFullYear(),ve=0;L&&!H||(ve=H>0?H-1:G.getMonth());var ye,Qe=q||0,Ze=ee||0,Xe=Z||0,Ke=re||0;return j?new Date(Date.UTC(te,ve,X,Qe,Ze,Xe,Ke+60*j.offset*1e3)):T?new Date(Date.UTC(te,ve,X,Qe,Ze,Xe,Ke)):(ye=new Date(te,ve,X,Qe,Ze,Xe,Ke),_&&(ye=M(ye).week(_).toDate()),ye)}catch{return new Date("")}}(W,$,P,C),this.init(),z&&z!==!0&&(this.$L=this.locale(z).$L),Y&&W!=this.format($)&&(this.$d=new Date("")),i={}}else if($ instanceof Array)for(var S=$.length,f=1;f<=S;f+=1){N[1]=$[f-1];var h=C.apply(this,N);if(h.isValid()){this.$d=h.$d,this.$L=h.$L,this.init();break}f===S&&(this.$d=new Date(""))}else l.call(this,O)}}})});var Tt=se((gt,mt)=>{(function(o,e){typeof gt=="object"&&typeof mt<"u"?mt.exports=e():typeof define=="function"&&define.amd?define(e):(o=typeof globalThis<"u"?globalThis:o||self).dayjs_plugin_isSameOrAfter=e()})(gt,function(){"use strict";return function(o,e){e.prototype.isSameOrAfter=function(t,n){return this.isSame(t,n)||this.isAfter(t,n)}}})});var kt=se((ft,pt)=>{(function(o,e){typeof ft=="object"&&typeof pt<"u"?pt.exports=e():typeof define=="function"&&define.amd?define(e):(o=typeof globalThis<"u"?globalThis:o||self).dayjs_plugin_isSameOrBefore=e()})(ft,function(){"use strict";return function(o,e){e.prototype.isSameOrBefore=function(t,n){return this.isSame(t,n)||this.isBefore(t,n)}}})});var Nt=0;function ae(o){let e=++Nt;return{symbol:Symbol(o?`Token(${o})`:`Token#${e}`),description:o,toString(){return o?`Token<${o}>`:`Token<#${e}>`}}}var de=class extends Error{constructor(e){super(e),this.name="ContainerError"}},ue=class extends de{constructor(e,t=[]){let n=t.length>0?`
Dependency path: ${t.join(" -> ")}`:"";super(`Token "${e}" is not bound or registered in the container.${n}`),this.name="BindingNotFoundError"}},he=class extends de{constructor(e){super(`Circular dependency detected: ${e.join(" -> ")}`),this.name="CircularDependencyError"}};var yt=new WeakMap;function Ft(o){let e=yt.get(o);if(e)return e;let t=o.toString(),n=t.match(/constructor\s*\(([^)]*)\)/)||t.match(/^[^(]*\(([^)]*)\)/);if(!n||!n[1])return[];let r=n[1].split(",").map(s=>s.trim()).filter(s=>s.length>0).map(s=>{let i=s.split(/[:=]/)[0].trim();return i=i.replace(/^((public|private|protected|readonly)\s+)+/,""),i.includes("{")||i.includes("[")?null:i}).filter(s=>s!==null);return yt.set(o,r),r}function _t(o,e,t){if(!t.map)throw new Error("AutoWire map strategy requires options.map to be defined");let n=Ft(o),r=[];for(let s of n){let i=t.map[s];if(i===void 0){if(t.strict)throw new Error(`Cannot resolve parameter "${s}" on ${o.name}. Not found in autowire map. Add it to the map: .autoWire({ map: { ${s}: ... } })`);r.push(void 0);continue}typeof i=="function"?r.push(i(e)):r.push(e.resolve(i))}return r}function Yt(o,e,t){if(!t.mapResolvers||t.mapResolvers.length===0)return[];let n=[];for(let r=0;r<t.mapResolvers.length;r++){let s=t.mapResolvers[r];s===void 0?n.push(void 0):typeof s=="function"?n.push(s(e)):n.push(e.resolve(s))}return n}function Je(o,e,t){let n={by:"paramName",strict:!1,...t};return n.mapResolvers&&n.mapResolvers.length>0?Yt(o,e,n):n.map&&Object.keys(n.map).length>0?_t(o,e,n):[]}var le=class{constructor(e,t){this.registrations=t,this.configs=[],this.defaultLifetime="singleton",this.pending=e}as(e){if(e&&typeof e=="object"&&"symbol"in e){let t={token:e,type:this.pending.type,value:this.pending.value,factory:this.pending.factory,constructor:this.pending.constructor,lifetime:this.defaultLifetime};return this.configs.push(t),this.registrations.push(t),this}else{let t={token:null,type:this.pending.type,value:this.pending.value,factory:this.pending.factory,constructor:this.pending.constructor,lifetime:this.defaultLifetime,interfaceType:e};return this.configs.push(t),this.registrations.push(t),this}}asDefaultInterface(e){return this.as("TInterface",e),this.asDefault()}asKeyedInterface(e,t){return this.as("TInterface",t),this.keyed(e)}asImplementedInterfaces(e){if(e.length===0)return this;if(this.configs.length>0){for(let n of this.configs)n.lifetime="singleton",n.additionalTokens=n.additionalTokens||[],n.additionalTokens.push(...e);return this}let t={token:e[0],type:this.pending.type,value:this.pending.value,factory:this.pending.factory,constructor:this.pending.constructor,lifetime:"singleton"};this.configs.push(t),this.registrations.push(t);for(let n=1;n<e.length;n++)t.additionalTokens=t.additionalTokens||[],t.additionalTokens.push(e[n]);return this}singleInstance(){for(let e of this.configs)e.lifetime="singleton";return this}instancePerRequest(){for(let e of this.configs)e.lifetime="per-request";return this}instancePerDependency(){for(let e of this.configs)e.lifetime="transient";return this}named(e){for(let t of this.configs)t.name=e;return this}keyed(e){for(let t of this.configs)t.key=e;return this}asDefault(){for(let e of this.configs)e.isDefault=!0;return this}ifNotRegistered(){for(let e of this.configs)e.ifNotRegistered=!0;return this}withParameters(e){for(let t of this.configs)t.parameterValues=e;return this}autoWire(e){for(let t of this.configs)t.autowireOptions=e||{by:"paramName",strict:!1};return this}},ge=class{constructor(e){this.baseContainer=e,this.registrations=[]}registerType(e){let t={type:"type",value:null,constructor:e};return new le(t,this.registrations)}registerInstance(e){let t={type:"instance",value:e,constructor:void 0};return new le(t,this.registrations)}register(e){let t={type:"factory",value:null,factory:e,constructor:void 0};return new le(t,this.registrations)}module(e){return e(this),this}resolveInterfaceTokens(e){for(let t of this.registrations)t.interfaceType!==void 0&&!t.token&&(t.token=e.interfaceToken(t.interfaceType))}identifyNonDefaultTokens(){let e=new Set;for(let t of this.registrations)!t.isDefault&&!t.name&&t.key===void 0&&e.add(t.token);return e}shouldSkipRegistration(e,t,n){return!!(e.isDefault&&!e.name&&e.key===void 0&&t.has(e.token)||e.ifNotRegistered&&n.has(e.token)||e.isDefault&&n.has(e.token))}createBindingToken(e,t,n,r){if(e.name){let s=ae(`__named_${e.name}`);return t.set(e.name,{...e,token:s}),s}else if(e.key!==void 0){let s=typeof e.key=="symbol"?e.key.toString():e.key,i=ae(`__keyed_${s}`);return n.set(e.key,{...e,token:i}),i}else if(r.has(e.token)){let s=ae(`__multi_${e.token.toString()}_${r.get(e.token).length}`);return r.get(e.token).push(s),s}else return r.set(e.token,[e.token]),e.token}registerAdditionalInterfaces(e,t,n,r){if(t.additionalTokens)for(let s of t.additionalTokens)e.bindFactory(s,i=>i.resolve(n),{lifetime:t.lifetime}),r.add(s)}build(){let e=this.baseContainer.createChild();this.resolveInterfaceTokens(e);let t=new Set,n=new Map,r=new Map,s=new Map,i=this.identifyNonDefaultTokens();for(let a of this.registrations){if(this.shouldSkipRegistration(a,i,t))continue;let c=this.createBindingToken(a,n,r,s);this.applyRegistration(e,{...a,token:c}),t.add(a.token),this.registerAdditionalInterfaces(e,a,c,t)}return e.__namedRegistrations=n,e.__keyedRegistrations=r,e.__multiRegistrations=s,e}analyzeConstructor(e){let t=e.toString();return{hasDependencies:/constructor\s*\([^)]+\)/.test(t)}}createOptimizedFactory(e,t,n){if(t.lifetime==="singleton"){let r=new t.constructor;e.bindValue(t.token,r)}else if(t.lifetime==="transient"){let r=t.constructor,s=()=>new r;e.fastTransientCache.set(t.token,s),e.bindFactory(t.token,s,n)}else{let r=()=>new t.constructor;e.bindFactory(t.token,r,n)}}createAutoWireFactory(e,t,n){let r=s=>{let i=Je(t.constructor,s,t.autowireOptions);return new t.constructor(...i)};e.bindFactory(t.token,r,n)}createParameterFactory(e,t,n){let r=()=>{let s=Object.values(t.parameterValues);return new t.constructor(...s)};e.bindFactory(t.token,r,n)}applyTypeRegistration(e,t,n){let{hasDependencies:r}=this.analyzeConstructor(t.constructor);if(!r&&!t.autowireOptions&&!t.parameterValues){this.createOptimizedFactory(e,t,n);return}if(t.autowireOptions){this.createAutoWireFactory(e,t,n);return}if(t.parameterValues){this.createParameterFactory(e,t,n);return}if(r){let i=t.constructor.name||"UnnamedClass";throw new Error(`Service "${i}" has constructor dependencies but no autowiring configuration.
Solutions:
1. \u2B50 Use the NovaDI transformer (recommended):
- Add "@novadi/core/unplugin" to your build config
- Transformer automatically generates .autoWire() for all dependencies
2. Add manual autowiring:
.autoWire({ map: { /* param: resolver */ } })
3. Use a factory function:
.register((c) => new ${i}(...))
See docs: https://github.com/janus007/NovaDI#autowire`)}let s=()=>new t.constructor;e.bindFactory(t.token,s,n)}applyRegistration(e,t){let n={lifetime:t.lifetime};switch(t.type){case"instance":e.bindValue(t.token,t.value);break;case"factory":e.bindFactory(t.token,t.factory,n);break;case"type":this.applyTypeRegistration(e,t,n);break}}};function Vt(o){return o&&typeof o.dispose=="function"}var et=class{constructor(){this.resolvingStack=new Set,this.perRequestCache=new Map}isResolving(e){return this.resolvingStack.has(e)}enterResolve(e){this.resolvingStack.add(e)}exitResolve(e){this.resolvingStack.delete(e),this.path=void 0}getPath(){return this.path||(this.path=Array.from(this.resolvingStack).map(e=>e.toString())),[...this.path]}cachePerRequest(e,t){this.perRequestCache.set(e,t)}getPerRequest(e){return this.perRequestCache.get(e)}hasPerRequest(e){return this.perRequestCache.has(e)}reset(){this.resolvingStack.clear(),this.perRequestCache.clear(),this.path=void 0}},tt=class{constructor(){this.pool=[],this.maxSize=10}acquire(){let e=this.pool.pop();return e?(e.reset(),e):new et}release(e){this.pool.length<this.maxSize&&this.pool.push(e)}},ce=class o{constructor(e){this.bindings=new Map,this.singletonCache=new Map,this.singletonOrder=[],this.interfaceRegistry=new Map,this.interfaceTokenCache=new Map,this.fastTransientCache=new Map,this.ultraFastSingletonCache=new Map,this.parent=e}bindValue(e,t){this.bindings.set(e,{type:"value",lifetime:"singleton",value:t,constructor:void 0}),this.invalidateBindingCache()}bindFactory(e,t,n){this.bindings.set(e,{type:"factory",lifetime:n?.lifetime||"transient",factory:t,dependencies:n?.dependencies,constructor:void 0}),this.invalidateBindingCache()}bindClass(e,t,n){let r={type:"class",lifetime:n?.lifetime||"transient",constructor:t,dependencies:n?.dependencies};this.bindings.set(e,r),this.invalidateBindingCache(),r.lifetime==="transient"&&(!r.dependencies||r.dependencies.length===0)&&this.fastTransientCache.set(e,()=>new t)}resolve(e){let t=this.tryGetFromCaches(e);if(t!==void 0)return t;if(this.currentContext)return this.resolveWithContext(e,this.currentContext);let n=o.contextPool.acquire();this.currentContext=n;try{return this.resolveWithContext(e,n)}finally{this.currentContext=void 0,o.contextPool.release(n)}}resolveSingletonUnsafe(e){return this.ultraFastSingletonCache.get(e)??this.singletonCache.get(e)}resolveTransientSimple(e){let t=this.fastTransientCache.get(e);return t?t():this.resolve(e)}resolveBatch(e){let t=!!this.currentContext,n=this.currentContext||o.contextPool.acquire();t||(this.currentContext=n);try{return e.map(s=>{let i=this.tryGetFromCaches(s);return i!==void 0?i:this.resolveWithContext(s,n)})}finally{t||(this.currentContext=void 0,o.contextPool.release(n))}}async resolveAsync(e){if(this.currentContext)return this.resolveAsyncWithContext(e,this.currentContext);let t=o.contextPool.acquire();this.currentContext=t;try{return await this.resolveAsyncWithContext(e,t)}finally{this.currentContext=void 0,o.contextPool.release(t)}}tryGetFromCaches(e){let t=this.ultraFastSingletonCache.get(e);if(t!==void 0)return t;if(this.singletonCache.has(e)){let r=this.singletonCache.get(e);return this.ultraFastSingletonCache.set(e,r),r}let n=this.fastTransientCache.get(e);if(n)return n()}cacheInstance(e,t,n,r){n==="singleton"?(this.singletonCache.set(e,t),this.singletonOrder.push(e),this.ultraFastSingletonCache.set(e,t)):n==="per-request"&&r&&r.cachePerRequest(e,t)}validateAndGetBinding(e,t){if(t.isResolving(e))throw new he([...t.getPath(),e.toString()]);let n=this.getBinding(e);if(!n)throw new ue(e.toString(),t.getPath());return n}instantiateBindingSync(e,t,n){switch(e.type){case"value":return e.value;case"factory":let r=e.factory(this);if(r instanceof Promise)throw new Error(`Async factory detected for ${t.toString()}. Use resolveAsync() instead.`);return r;case"class":let i=(e.dependencies||[]).map(a=>this.resolveWithContext(a,n));return new e.constructor(...i);case"inline-class":return new e.constructor;default:throw new Error(`Unknown binding type: ${e.type}`)}}async instantiateBindingAsync(e,t){switch(e.type){case"value":return e.value;case"factory":return await Promise.resolve(e.factory(this));case"class":let n=e.dependencies||[],r=await Promise.all(n.map(s=>this.resolveAsyncWithContext(s,t)));return new e.constructor(...r);case"inline-class":return new e.constructor;default:throw new Error(`Unknown binding type: ${e.type}`)}}createChild(){return new o(this)}async dispose(){let e=[];for(let t=this.singletonOrder.length-1;t>=0;t--){let n=this.singletonOrder[t],r=this.singletonCache.get(n);if(r&&Vt(r))try{await r.dispose()}catch(s){e.push(s)}}this.singletonCache.clear(),this.singletonOrder.length=0}builder(){return new ge(this)}resolveNamed(e){let t=this.__namedRegistrations;if(!t)throw new Error(`Named service "${e}" not found. No named registrations exist.`);let n=t.get(e);if(!n)throw new Error(`Named service "${e}" not found`);return this.resolve(n.token)}resolveKeyed(e){let t=this.__keyedRegistrations;if(!t)throw new Error("Keyed service not found. No keyed registrations exist.");let n=t.get(e);if(!n){let r=typeof e=="symbol"?e.toString():`"${e}"`;throw new Error(`Keyed service ${r} not found`)}return this.resolve(n.token)}resolveAll(e){let t=this.__multiRegistrations;if(!t)return[];let n=t.get(e);return!n||n.length===0?[]:n.map(r=>this.resolve(r))}getRegistry(){let e=[];return this.bindings.forEach((t,n)=>{e.push({token:n.description||n.symbol.toString(),type:t.type,lifetime:t.lifetime,dependencies:t.dependencies?.map(r=>r.description||r.symbol.toString())})}),e}interfaceToken(e){let t=e||`Interface_${Math.random().toString(36).substr(2,9)}`;if(this.interfaceRegistry.has(t))return this.interfaceRegistry.get(t);if(this.parent)return this.parent.interfaceToken(t);let n=ae(t);return this.interfaceRegistry.set(t,n),n}resolveType(e){let t=e||"",n=this.interfaceTokenCache.get(t);return n||(n=this.interfaceToken(e),this.interfaceTokenCache.set(t,n)),this.resolve(n)}resolveTypeKeyed(e,t){return this.resolveKeyed(e)}resolveTypeAll(e){let t=this.interfaceToken(e);return this.resolveAll(t)}resolveWithContext(e,t){let n=this.validateAndGetBinding(e,t);if(n.lifetime==="per-request"&&t.hasPerRequest(e))return t.getPerRequest(e);if(n.lifetime==="singleton"&&this.singletonCache.has(e))return this.singletonCache.get(e);t.enterResolve(e);try{let r=this.instantiateBindingSync(n,e,t);return this.cacheInstance(e,r,n.lifetime,t),r}finally{t.exitResolve(e)}}async resolveAsyncWithContext(e,t){let n=this.validateAndGetBinding(e,t);if(n.lifetime==="per-request"&&t.hasPerRequest(e))return t.getPerRequest(e);if(n.lifetime==="singleton"&&this.singletonCache.has(e))return this.singletonCache.get(e);t.enterResolve(e);try{let r=await this.instantiateBindingAsync(n,t);return this.cacheInstance(e,r,n.lifetime,t),r}finally{t.exitResolve(e)}}getBinding(e){return this.bindingCache||this.buildBindingCache(),this.bindingCache.get(e)}buildBindingCache(){this.bindingCache=new Map;let e=this;for(;e;)e.bindings.forEach((t,n)=>{this.bindingCache.has(n)||this.bindingCache.set(n,t)}),e=e.parent}invalidateBindingCache(){this.bindingCache=void 0,this.ultraFastSingletonCache.clear()}};ce.contextPool=new tt;var nt=class{constructor(){this.eventLog=[],this.debug=!1,this.listeners=new Set,this.logConfig={calendar:!0,grid:!0,event:!0,scroll:!0,navigation:!0,view:!0,default:!0}}on(e,t,n){return document.addEventListener(e,t,n),this.listeners.add({eventType:e,handler:t,options:n}),()=>this.off(e,t)}once(e,t){return this.on(e,t,{once:!0})}off(e,t){document.removeEventListener(e,t);for(let n of this.listeners)if(n.eventType===e&&n.handler===t){this.listeners.delete(n);break}}emit(e,t={}){if(!e)return!1;let n=new CustomEvent(e,{detail:t??{},bubbles:!0,cancelable:!0});return this.debug&&this.logEventWithGrouping(e,t),this.eventLog.push({type:e,detail:t??{},timestamp:Date.now()}),!document.dispatchEvent(n)}logEventWithGrouping(e,t){let n=this.extractCategory(e);if(!this.logConfig[n])return;let{emoji:r,color:s}=this.getCategoryStyle(n)}extractCategory(e){if(!e)return"unknown";if(e.includes(":"))return e.split(":")[0];let t=e.toLowerCase();return t.includes("grid")||t.includes("rendered")?"grid":t.includes("event")||t.includes("sync")?"event":t.includes("scroll")?"scroll":t.includes("nav")||t.includes("date")?"navigation":t.includes("view")?"view":"default"}getCategoryStyle(e){let t={calendar:{emoji:"\u{1F5D3}\uFE0F",color:"#2196F3"},grid:{emoji:"\u{1F4CA}",color:"#4CAF50"},event:{emoji:"\u{1F4C5}",color:"#FF9800"},scroll:{emoji:"\u{1F4DC}",color:"#9C27B0"},navigation:{emoji:"\u{1F9ED}",color:"#F44336"},view:{emoji:"\u{1F441}\uFE0F",color:"#00BCD4"},default:{emoji:"\u{1F4E2}",color:"#607D8B"}};return t[e]||t.default}setLogConfig(e){this.logConfig={...this.logConfig,...e}}getLogConfig(){return{...this.logConfig}}getEventLog(e){return e?this.eventLog.filter(t=>t.type===e):this.eventLog}setDebug(e){this.debug=e}},b=new nt;var ne={EVENT_HEIGHT:22,EVENT_GAP:2,CONTAINER_PADDING:4,MAX_COLLAPSED_ROWS:4,get SINGLE_ROW_HEIGHT(){return this.EVENT_HEIGHT+this.EVENT_GAP}},me={standard:{id:"standard",workDays:[1,2,3,4,5],totalDays:5,firstWorkDay:1},compressed:{id:"compressed",workDays:[1,2,3,4],totalDays:4,firstWorkDay:1},midweek:{id:"midweek",workDays:[3,4,5],totalDays:3,firstWorkDay:3},weekend:{id:"weekend",workDays:[6,7],totalDays:2,firstWorkDay:6},fullweek:{id:"fullweek",workDays:[1,2,3,4,5,6,7],totalDays:7,firstWorkDay:1}},K=class o{constructor(e,t,n,r,s,i,a=new Date){this.apiEndpoint="/api",this.config=e,this.gridSettings=t,this.dateViewSettings=n,this.timeFormatConfig=r,this.currentWorkWeek=s,this.currentView=i,this.selectedDate=a,o._instance=this}static getInstance(){if(!o._instance)throw new Error("Configuration has not been initialized. Call ConfigManager.load() first.");return o._instance}setSelectedDate(e){this.selectedDate=e}getWorkWeekSettings(){return me[this.currentWorkWeek]||me.standard}};K._instance=null;var I=ie(Et(),1),Mt=ie(Dt(),1),At=ie(St(),1),Rt=ie(wt(),1),bt=ie(Ct(),1),xt=ie(Tt(),1),It=ie(kt(),1);I.default.extend(Mt.default);I.default.extend(At.default);I.default.extend(Rt.default);I.default.extend(bt.default);I.default.extend(xt.default);I.default.extend(It.default);var U=class{constructor(e){this.timezone=e.timeFormatConfig.timezone}toUTC(e){return I.default.tz(e,this.timezone).utc().toISOString()}fromUTC(e){return I.default.utc(e).tz(this.timezone).toDate()}formatTime(e,t=!1){let n=t?"HH:mm:ss":"HH:mm";return(0,I.default)(e).format(n)}formatTimeRange(e,t){return`${this.formatTime(e)} - ${this.formatTime(t)}`}formatTechnicalDateTime(e){return(0,I.default)(e).format("YYYY-MM-DD HH:mm:ss")}formatDate(e){return(0,I.default)(e).format("YYYY-MM-DD")}formatMonthYear(e,t="en-US"){return e.toLocaleDateString(t,{month:"long",year:"numeric"})}formatISODate(e){return this.formatDate(e)}formatTime12(e){return(0,I.default)(e).format("h:mm A")}getDayName(e,t="short",n="da-DK"){return new Intl.DateTimeFormat(n,{weekday:t}).format(e)}formatDateRange(e,t,n={}){let{locale:r="en-US",month:s="short",day:i="numeric"}=n,a=e.getFullYear(),c=t.getFullYear(),d=new Intl.DateTimeFormat(r,{month:s,day:i,year:a!==c?"numeric":void 0});return typeof d.formatRange=="function"?d.formatRange(e,t):`${d.format(e)} - ${d.format(t)}`}timeToMinutes(e){let t=e.split(":").map(Number),n=t[0]||0,r=t[1]||0;return n*60+r}minutesToTime(e){let t=Math.floor(e/60),n=e%60;return(0,I.default)().hour(t).minute(n).format("HH:mm")}formatTimeFromMinutes(e){return this.minutesToTime(e)}getMinutesSinceMidnight(e){let t=(0,I.default)(e);return t.hour()*60+t.minute()}getDurationMinutes(e,t){let n=(0,I.default)(e);return(0,I.default)(t).diff(n,"minute")}getWeekBounds(e){let t=(0,I.default)(e);return{start:t.startOf("week").add(1,"day").toDate(),end:t.endOf("week").add(1,"day").toDate()}}addWeeks(e,t){return(0,I.default)(e).add(t,"week").toDate()}addMonths(e,t){return(0,I.default)(e).add(t,"month").toDate()}getWeekNumber(e){return(0,I.default)(e).isoWeek()}getFullWeekDates(e){let t=[];for(let n=0;n<7;n++)t.push(this.addDays(e,n));return t}getWorkWeekDates(e,t){let n=[],r=this.getWeekBounds(e),s=this.startOfDay(r.start);return t.forEach(i=>{let a=new Date(s),c=i===7?6:i-1;a.setDate(s.getDate()+c),n.push(a)}),n}createDateAtTime(e,t){let n=Math.floor(t/60),r=t%60;return(0,I.default)(e).startOf("day").hour(n).minute(r).toDate()}snapToInterval(e,t){let n=this.getMinutesSinceMidnight(e),r=Math.round(n/t)*t;return this.createDateAtTime(e,r)}isSameDay(e,t){return(0,I.default)(e).isSame(t,"day")}startOfDay(e){return(0,I.default)(e).startOf("day").toDate()}endOfDay(e){return(0,I.default)(e).endOf("day").toDate()}addDays(e,t){return(0,I.default)(e).add(t,"day").toDate()}addMinutes(e,t){return(0,I.default)(e).add(t,"minute").toDate()}parseISO(e){return(0,I.default)(e).toDate()}isValid(e){return(0,I.default)(e).isValid()}differenceInCalendarDays(e,t){let n=(0,I.default)(e).startOf("day"),r=(0,I.default)(t).startOf("day");return n.diff(r,"day")}isValidRange(e,t){return!this.isValid(e)||!this.isValid(t)?!1:e.getTime()<=t.getTime()}isWithinBounds(e){if(!this.isValid(e))return!1;let t=e.getFullYear();return t>=1900&&t<=2100}validateDate(e,t={}){if(!this.isValid(e))return{valid:!1,error:"Invalid date"};if(!this.isWithinBounds(e))return{valid:!1,error:"Date out of bounds (1900-2100)"};let n=new Date;return t.requireFuture&&e<=n?{valid:!1,error:"Date must be in the future"}:t.requirePast&&e>=n?{valid:!1,error:"Date must be in the past"}:t.minDate&&e<t.minDate?{valid:!1,error:`Date must be after ${this.formatDate(t.minDate)}`}:t.maxDate&&e>t.maxDate?{valid:!1,error:`Date must be before ${this.formatDate(t.maxDate)}`}:{valid:!0}}};var V=class o{static getDateService(){if(!o.dateService){if(!o.settings)throw new Error("TimeFormatter must be configured before use. Call TimeFormatter.configure() first.");let e={timeFormatConfig:{timezone:o.settings.timezone}};o.dateService=new U(e)}return o.dateService}static configure(e){o.settings=e,o.dateService=null}static convertToLocalTime(e){if(typeof e=="string")return o.getDateService().fromUTC(e);let t=e.toISOString();return o.getDateService().fromUTC(t)}static format24Hour(e){if(!o.settings)throw new Error("TimeFormatter must be configured before use. Call TimeFormatter.configure() first.");let t=o.convertToLocalTime(e);return o.getDateService().formatTime(t,o.settings.showSeconds)}static formatTime(e){return o.format24Hour(e)}static formatTimeRange(e,t){let n=o.convertToLocalTime(e),r=o.convertToLocalTime(t);return o.getDateService().formatTimeRange(n,r)}};V.settings=null;V.dateService=null;var v={INITIALIZED:"core:initialized",READY:"core:ready",DESTROYED:"core:destroyed",VIEW_CHANGED:"view:changed",VIEW_RENDERED:"view:rendered",WORKWEEK_CHANGED:"workweek:changed",NAV_BUTTON_CLICKED:"nav:button-clicked",DATE_CHANGED:"nav:date-changed",NAVIGATION_COMPLETED:"nav:navigation-completed",PERIOD_INFO_UPDATE:"nav:period-info-update",NAVIGATE_TO_EVENT:"nav:navigate-to-event",DATA_LOADING:"data:loading",DATA_LOADED:"data:loaded",DATA_ERROR:"data:error",EVENTS_FILTERED:"data:events-filtered",REMOTE_UPDATE_RECEIVED:"data:remote-update",GRID_RENDERED:"grid:rendered",GRID_CLICKED:"grid:clicked",CELL_SELECTED:"grid:cell-selected",EVENT_CREATED:"event:created",EVENT_UPDATED:"event:updated",EVENT_DELETED:"event:deleted",EVENT_SELECTED:"event:selected",ERROR:"system:error",REFRESH_REQUESTED:"system:refresh",OFFLINE_MODE_CHANGED:"system:offline-mode-changed",SYNC_STARTED:"sync:started",SYNC_COMPLETED:"sync:completed",SYNC_FAILED:"sync:failed",SYNC_RETRY:"sync:retry",FILTER_CHANGED:"filter:changed",EVENTS_RENDERED:"events:rendered"};var fe=class{constructor(e,t){this.eventBus=e,this.config=t,this.setupEventListeners(),this.syncGridCSSVariables(),this.syncWorkweekCSSVariables()}setupEventListeners(){this.eventBus.on(v.WORKWEEK_CHANGED,e=>{let{settings:t}=e.detail;this.syncWorkweekCSSVariables(t)})}syncGridCSSVariables(){let e=this.config.gridSettings;document.documentElement.style.setProperty("--hour-height",`${e.hourHeight}px`),document.documentElement.style.setProperty("--day-start-hour",e.dayStartHour.toString()),document.documentElement.style.setProperty("--day-end-hour",e.dayEndHour.toString()),document.documentElement.style.setProperty("--work-start-hour",e.workStartHour.toString()),document.documentElement.style.setProperty("--work-end-hour",e.workEndHour.toString())}syncWorkweekCSSVariables(e){let t=e||this.config.getWorkWeekSettings();document.documentElement.style.setProperty("--grid-columns",t.totalDays.toString())}static async load(){let e=await fetch("/wwwroot/data/calendar-config.json");if(!e.ok)throw new Error(`Failed to load config: ${e.statusText}`);let t=await e.json(),n={scrollbarWidth:t.scrollbar.width,scrollbarColor:t.scrollbar.color,scrollbarTrackColor:t.scrollbar.trackColor,scrollbarHoverColor:t.scrollbar.hoverColor,scrollbarBorderRadius:t.scrollbar.borderRadius,allowDrag:t.interaction.allowDrag,allowResize:t.interaction.allowResize,allowCreate:t.interaction.allowCreate,apiEndpoint:t.api.endpoint,dateFormat:t.api.dateFormat,timeFormat:t.api.timeFormat,enableSearch:t.features.enableSearch,enableTouch:t.features.enableTouch,defaultEventDuration:t.eventDefaults.defaultEventDuration,minEventDuration:t.gridSettings.snapInterval,maxEventDuration:t.eventDefaults.maxEventDuration},r=new K(n,t.gridSettings,t.dateViewSettings,t.timeFormatConfig,t.currentWorkWeek,t.currentView||"week");return V.configure(r.timeFormatConfig),r}};var Ee=class{constructor(e){this.eventBus=e}parseEventIdFromURL(){try{let t=new URLSearchParams(window.location.search).get("eventId");return t&&t.trim()!==""?t.trim():null}catch(e){return console.warn("URLManager: Failed to parse URL parameters:",e),null}}getAllQueryParams(){try{let e=new URLSearchParams(window.location.search),t={};for(let[n,r]of e.entries())t[n]=r;return t}catch(e){return console.warn("URLManager: Failed to parse URL parameters:",e),{}}}updateURL(e){try{let t=new URL(window.location.href);Object.entries(e).forEach(([n,r])=>{r===null?t.searchParams.delete(n):t.searchParams.set(n,r)}),window.history.replaceState({},"",t.toString())}catch(t){console.warn("URLManager: Failed to update URL:",t)}}hasQueryParams(){return window.location.search.length>0}};var De=class{constructor(e,t,n,r){this.eventBus=e,this.dateService=t,this.config=n,this.repository=r}async loadData(){try{await this.repository.loadEvents()}catch(e){throw console.error("Failed to load event data:",e),e}}async getEvents(e=!1){let t=await this.repository.loadEvents();return e?[...t]:t}async getEventById(e){return(await this.repository.loadEvents()).find(n=>n.id===e)}async getEventForNavigation(e){let t=await this.getEventById(e);if(!t)return null;let n=this.dateService.validateDate(t.start);return n.valid?this.dateService.isValidRange(t.start,t.end)?{event:t,eventDate:t.start}:(console.warn(`EventManager: Invalid date range for event ${e}: start must be before end`),null):(console.warn(`EventManager: Invalid event start date for event ${e}:`,n.error),null)}async navigateToEvent(e){let t=await this.getEventForNavigation(e);if(!t)return console.warn(`EventManager: Event with ID ${e} not found`),!1;let{event:n,eventDate:r}=t;return this.eventBus.emit(v.NAVIGATE_TO_EVENT,{eventId:e,event:n,eventDate:r,eventStartTime:n.start}),!0}async getEventsForPeriod(e,t){return(await this.repository.loadEvents()).filter(r=>r.start<=t&&r.end>=e)}async addEvent(e){let t=await this.repository.createEvent(e,"local");return this.eventBus.emit(v.EVENT_CREATED,{event:t}),t}async updateEvent(e,t){try{let n=await this.repository.updateEvent(e,t,"local");return this.eventBus.emit(v.EVENT_UPDATED,{event:n}),n}catch(n){return console.error(`Failed to update event ${e}:`,n),null}}async deleteEvent(e){try{return await this.repository.deleteEvent(e,"local"),this.eventBus.emit(v.EVENT_DELETED,{eventId:e}),!0}catch(t){return console.error(`Failed to delete event ${e}:`,t),!1}}async handleRemoteUpdate(e){try{await this.repository.updateEvent(e.id,e,"remote"),this.eventBus.emit(v.REMOTE_UPDATE_RECEIVED,{event:e}),this.eventBus.emit(v.EVENT_UPDATED,{event:e})}catch(t){console.error(`Failed to handle remote update for event ${e.id}:`,t)}}};var B=class{static updateColumnBoundsCache(){this.columnBoundsCache=[];let e=document.querySelectorAll("swp-day-column"),t=1;e.forEach(n=>{let r=n.getBoundingClientRect(),s=n.dataset.date;s&&this.columnBoundsCache.push({boundingClientRect:r,element:n,date:s,left:r.left,right:r.right,index:t++})}),this.columnBoundsCache.sort((n,r)=>n.left-r.left)}static getColumnBounds(e){this.columnBoundsCache.length===0&&this.updateColumnBoundsCache();let t=this.columnBoundsCache.find(n=>e.x>=n.left&&e.x<=n.right);return t||null}static getColumnBoundsByDate(e){this.columnBoundsCache.length===0&&this.updateColumnBoundsCache();let t=e.toISOString().split("T")[0];return this.columnBoundsCache.find(r=>r.date===t)||null}static getColumns(){return[...this.columnBoundsCache]}static getHeaderColumns(){let e=[],t=document.querySelectorAll("swp-calendar-header swp-day-header"),n=1;return t.forEach(r=>{let s=r.getBoundingClientRect(),i=r.dataset.date;i&&e.push({boundingClientRect:s,element:r,date:i,left:s.left,right:s.right,index:n++})}),e.sort((r,s)=>r.left-s.left),e}};B.columnBoundsCache=[];var Se=class{constructor(e,t,n,r){this.dragMouseLeaveHeaderListener=null,this.eventBus=e,this.eventManager=t,this.strategy=n,this.dateService=r,this.setupEventListeners()}async renderEvents(e){this.strategy.clearEvents(e.container);let t=await this.eventManager.getEventsForPeriod(e.startDate,e.endDate);if(t.length===0)return;let n=t.filter(r=>!r.allDay);console.log("\u{1F3AF} EventRenderingService: Event filtering",{totalEvents:t.length,timedEvents:n.length,allDayEvents:t.length-n.length}),n.length>0&&this.strategy.renderEvents(n,e.container),this.eventBus.emit(v.EVENTS_RENDERED,{events:t,container:e.container})}setupEventListeners(){this.eventBus.on(v.GRID_RENDERED,e=>{this.handleGridRendered(e)}),this.eventBus.on(v.VIEW_CHANGED,e=>{this.handleViewChanged(e)}),this.setupDragEventListeners()}handleGridRendered(e){let{container:t,startDate:n,endDate:r}=e.detail;!t||!n||!r||this.renderEvents({container:t,startDate:n,endDate:r})}handleViewChanged(e){this.clearEvents()}setupDragEventListeners(){this.setupDragStartListener(),this.setupDragMoveListener(),this.setupDragEndListener(),this.setupDragColumnChangeListener(),this.setupDragMouseLeaveHeaderListener(),this.setupDragMouseEnterColumnListener(),this.setupResizeEndListener(),this.setupNavigationCompletedListener()}setupDragStartListener(){this.eventBus.on("drag:start",e=>{let t=e.detail;t.originalElement.hasAttribute("data-allday")||t.originalElement&&this.strategy.handleDragStart&&t.columnBounds&&this.strategy.handleDragStart(t)})}setupDragMoveListener(){this.eventBus.on("drag:move",e=>{let t=e.detail;t.draggedClone.hasAttribute("data-allday")||this.strategy.handleDragMove&&this.strategy.handleDragMove(t)})}setupDragEndListener(){this.eventBus.on("drag:end",async e=>{let{originalElement:t,draggedClone:n,originalSourceColumn:r,finalPosition:s,target:i}=e.detail,a=s.column,c=s.snappedY,d=n;i==="swp-day-column"&&a&&(t&&n&&this.strategy.handleDragEnd&&this.strategy.handleDragEnd(t,n,a,c),await this.eventManager.updateEvent(d.eventId,{start:d.start,end:d.end,allDay:!1}),await this.reRenderAffectedColumns(r,a))})}setupDragColumnChangeListener(){this.eventBus.on("drag:column-change",e=>{let t=e.detail;t.draggedClone&&t.draggedClone.hasAttribute("data-allday")||this.strategy.handleColumnChange&&this.strategy.handleColumnChange(t)})}setupDragMouseLeaveHeaderListener(){this.dragMouseLeaveHeaderListener=e=>{let{targetDate:t,mousePosition:n,originalElement:r,draggedClone:s}=e.detail;s&&(s.style.display=""),console.log("\u{1F6AA} EventRendererManager: Received drag:mouseleave-header",{targetDate:t,originalElement:r,cloneElement:s})},this.eventBus.on("drag:mouseleave-header",this.dragMouseLeaveHeaderListener)}setupDragMouseEnterColumnListener(){this.eventBus.on("drag:mouseenter-column",e=>{let t=e.detail;t.draggedClone.hasAttribute("data-allday")&&(console.log("\u{1F3AF} EventRendererManager: Received drag:mouseenter-column",{targetColumn:t.targetColumn,snappedY:t.snappedY,calendarEvent:t.calendarEvent}),this.strategy.handleConvertAllDayToTimed&&this.strategy.handleConvertAllDayToTimed(t))})}setupResizeEndListener(){this.eventBus.on("resize:end",async e=>{let{eventId:t,element:n}=e.detail,r=n,s=r.start,i=r.end;await this.eventManager.updateEvent(t,{start:s,end:i}),console.log("\u{1F4DD} EventRendererManager: Updated event after resize",{eventId:t,newStart:s,newEnd:i});let a=B.getColumnBoundsByDate(s);a&&await this.renderSingleColumn(a)})}setupNavigationCompletedListener(){this.eventBus.on(v.NAVIGATION_COMPLETED,()=>{this.strategy.handleNavigationCompleted&&this.strategy.handleNavigationCompleted()})}async reRenderAffectedColumns(e,t){e&&await this.renderSingleColumn(e),t&&t.date!==e?.date&&await this.renderSingleColumn(t)}clearColumnEvents(e){let t=e.querySelectorAll("swp-event"),n=e.querySelectorAll("swp-event-group");t.forEach(r=>r.remove()),n.forEach(r=>r.remove())}async renderSingleColumn(e){let t=this.dateService.parseISO(`${e.date}T00:00:00`),n=this.dateService.parseISO(`${e.date}T23:59:59.999`),s=(await this.eventManager.getEventsForPeriod(t,n)).filter(a=>!a.allDay),i=e.element.querySelector("swp-events-layer");if(!i){console.warn("EventRendererManager: Events layer not found in column");return}this.clearColumnEvents(i),this.strategy.renderSingleColumnEvents&&this.strategy.renderSingleColumnEvents(e,s),console.log("\u{1F504} EventRendererManager: Re-rendered single column",{columnDate:e.date,eventsCount:s.length})}clearEvents(e){this.strategy.clearEvents(e)}refresh(e){this.clearEvents(e)}};var we=class{constructor(e,t){this.container=null,this.currentDate=new Date,this.currentView="week",this.gridRenderer=e,this.dateService=t,this.init()}init(){this.findElements(),this.subscribeToEvents()}getISOWeekStart(e){let t=this.dateService.getWeekBounds(e);return this.dateService.startOfDay(t.start)}getWeekEnd(e){let t=this.dateService.getWeekBounds(e);return this.dateService.endOfDay(t.end)}findElements(){this.container=document.querySelector("swp-calendar-container")}subscribeToEvents(){b.on(v.VIEW_CHANGED,e=>{let t=e.detail;this.currentView=t.currentView,this.render()}),b.on(v.REFRESH_REQUESTED,e=>{this.render()}),b.on(v.WORKWEEK_CHANGED,()=>{this.render()})}async render(){if(!this.container)return;this.gridRenderer.renderGrid(this.container,this.currentDate);let e=this.getPeriodRange(),t=this.getLayoutConfig();b.emit(v.GRID_RENDERED,{container:this.container,currentDate:this.currentDate,startDate:e.startDate,endDate:e.endDate,layoutConfig:t,columnCount:t.columnCount})}getCurrentPeriodLabel(){switch(this.currentView){case"week":case"day":let e=this.getISOWeekStart(this.currentDate),t=this.getWeekEnd(this.currentDate);return this.dateService.formatDateRange(e,t);case"month":return this.dateService.formatMonthYear(this.currentDate);default:let n=this.getISOWeekStart(this.currentDate),r=this.getWeekEnd(this.currentDate);return this.dateService.formatDateRange(n,r)}}navigateNext(){let e;switch(this.currentView){case"week":e=this.dateService.addWeeks(this.currentDate,1);break;case"month":e=this.dateService.addMonths(this.currentDate,1);break;case"day":e=this.dateService.addDays(this.currentDate,1);break;default:e=this.dateService.addWeeks(this.currentDate,1)}this.currentDate=e,b.emit(v.NAVIGATION_COMPLETED,{direction:"next",newDate:e,periodLabel:this.getCurrentPeriodLabel()}),this.render()}navigatePrevious(){let e;switch(this.currentView){case"week":e=this.dateService.addWeeks(this.currentDate,-1);break;case"month":e=this.dateService.addMonths(this.currentDate,-1);break;case"day":e=this.dateService.addDays(this.currentDate,-1);break;default:e=this.dateService.addWeeks(this.currentDate,-1)}this.currentDate=e,b.emit(v.NAVIGATION_COMPLETED,{direction:"previous",newDate:e,periodLabel:this.getCurrentPeriodLabel()}),this.render()}getDisplayDates(){switch(this.currentView){case"week":let e=this.getISOWeekStart(this.currentDate);return this.dateService.getFullWeekDates(e);case"month":return this.getMonthDates(this.currentDate);case"day":return[this.currentDate];default:let t=this.getISOWeekStart(this.currentDate);return this.dateService.getFullWeekDates(t)}}getPeriodRange(){switch(this.currentView){case"week":let e=this.getISOWeekStart(this.currentDate),t=this.getWeekEnd(this.currentDate);return{startDate:e,endDate:t};case"month":return{startDate:this.getMonthStart(this.currentDate),endDate:this.getMonthEnd(this.currentDate)};case"day":return{startDate:this.currentDate,endDate:this.currentDate};default:let n=this.getISOWeekStart(this.currentDate),r=this.getWeekEnd(this.currentDate);return{startDate:n,endDate:r}}}getLayoutConfig(){switch(this.currentView){case"week":return{columnCount:7,type:"week"};case"month":return{columnCount:7,type:"month"};case"day":return{columnCount:1,type:"day"};default:return{columnCount:7,type:"week"}}}getMonthStart(e){let t=e.getFullYear(),n=e.getMonth();return this.dateService.startOfDay(new Date(t,n,1))}getMonthEnd(e){let t=this.dateService.addMonths(e,1),n=this.getMonthStart(t);return this.dateService.endOfDay(this.dateService.addDays(n,-1))}getMonthDates(e){let t=[],n=this.getMonthStart(e),r=this.getMonthEnd(e),s=Math.ceil((r.getTime()-n.getTime())/(1e3*60*60*24))+1;for(let i=0;i<s;i++)t.push(this.dateService.addDays(n,i));return t}};var Ce=class{constructor(e){this.scrollableContent=null,this.calendarContainer=null,this.timeAxis=null,this.calendarHeader=null,this.resizeObserver=null,this.positionUtils=e,this.init()}init(){this.subscribeToEvents()}initialize(){this.setupScrolling()}subscribeToEvents(){b.on(v.NAVIGATION_COMPLETED,()=>{this.syncTimeAxisPosition(),this.setupScrolling()}),b.on("header:height-changed",()=>{this.updateScrollableHeight()}),b.on("header:ready",()=>{this.calendarHeader=document.querySelector("swp-calendar-header"),this.scrollableContent&&this.calendarHeader&&(this.setupHorizontalScrollSynchronization(),this.syncCalendarHeaderPosition()),this.updateScrollableHeight()}),window.addEventListener("resize",()=>{this.updateScrollableHeight()}),b.on("scroll:to-event-time",e=>{let t=e,{eventStartTime:n}=t.detail;n&&this.scrollToEventTime(n)})}setupScrolling(){this.findElements(),this.scrollableContent&&this.calendarContainer&&(this.setupResizeObserver(),this.updateScrollableHeight(),this.setupScrollSynchronization()),this.scrollableContent&&this.calendarHeader&&this.setupHorizontalScrollSynchronization()}findElements(){this.scrollableContent=document.querySelector("swp-scrollable-content"),this.calendarContainer=document.querySelector("swp-calendar-container"),this.timeAxis=document.querySelector("swp-time-axis"),this.calendarHeader=document.querySelector("swp-calendar-header")}scrollTo(e){this.scrollableContent&&(this.scrollableContent.scrollTop=e)}scrollToHour(e){let t=`${e.toString().padStart(2,"0")}:00`,n=this.positionUtils.timeToPixels(t);this.scrollTo(n)}scrollToEventTime(e){try{let t=new Date(e),n=t.getHours(),r=t.getMinutes(),s=n+r/60;this.scrollToHour(s)}catch(t){console.warn("ScrollManager: Failed to scroll to event time:",t)}}setupResizeObserver(){this.calendarContainer&&(this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=new ResizeObserver(e=>{for(let t of e)this.updateScrollableHeight()}),this.resizeObserver.observe(this.calendarContainer))}updateScrollableHeight(){if(!this.scrollableContent||!this.calendarContainer)return;let e=this.calendarContainer.getBoundingClientRect(),t=document.querySelector("swp-calendar-nav"),n=t?t.getBoundingClientRect().height:0,r=document.querySelector("swp-calendar-header"),s=r?r.getBoundingClientRect().height:80,i=e.height-s,a=e.width-60;i>0&&(this.scrollableContent.style.height=`${i}px`),a>0&&(this.scrollableContent.style.width=`${a}px`)}setupScrollSynchronization(){if(!this.scrollableContent||!this.timeAxis)return;let e=null;this.scrollableContent.addEventListener("scroll",()=>{e&&cancelAnimationFrame(e),e=requestAnimationFrame(()=>{this.syncTimeAxisPosition()})})}syncTimeAxisPosition(){if(!this.scrollableContent||!this.timeAxis)return;let e=this.scrollableContent.scrollTop,t=this.timeAxis.querySelector("swp-time-axis-content");t&&(t.style.transform=`translateY(-${e}px)`,e%100)}setupHorizontalScrollSynchronization(){!this.scrollableContent||!this.calendarHeader||this.scrollableContent.addEventListener("scroll",()=>{this.syncCalendarHeaderPosition()})}syncCalendarHeaderPosition(){if(!this.scrollableContent||!this.calendarHeader)return;let e=this.scrollableContent.scrollLeft;this.calendarHeader.style.transform=`translateX(-${e}px)`,e%100}};var Te=class{constructor(e,t,n,r,s){this.animationQueue=0,this.eventBus=e,this.dateService=r,this.weekInfoRenderer=s,this.gridRenderer=n,this.currentWeek=this.getISOWeekStart(new Date),this.targetWeek=new Date(this.currentWeek),this.init()}init(){this.setupEventListeners()}getISOWeekStart(e){let t=this.dateService.getWeekBounds(e);return this.dateService.startOfDay(t.start)}setupEventListeners(){this.eventBus.on(v.INITIALIZED,()=>{this.updateWeekInfo()}),this.eventBus.on(v.FILTER_CHANGED,e=>{let t=e.detail;this.weekInfoRenderer.applyFilterToPreRenderedGrids(t)}),this.eventBus.on(v.NAV_BUTTON_CLICKED,e=>{let{action:t}=e.detail;switch(t){case"prev":this.navigateToPreviousWeek();break;case"next":this.navigateToNextWeek();break;case"today":this.navigateToToday();break}}),this.eventBus.on(v.DATE_CHANGED,e=>{let n=e.detail.currentDate;if(!n){console.warn("NavigationManager: No date provided in DATE_CHANGED event");return}let r=new Date(n),s=this.dateService.validateDate(r);if(!s.valid){console.warn("NavigationManager: Invalid date received:",s.error);return}this.navigateToDate(r)}),this.eventBus.on(v.NAVIGATE_TO_EVENT,e=>{let t=e,{eventDate:n,eventStartTime:r}=t.detail;if(!n||!r){console.warn("NavigationManager: Invalid event navigation data");return}this.navigateToEventDate(n,r)})}navigateToEventDate(e,t){let n=this.getISOWeekStart(e);this.targetWeek=new Date(n);let r=this.currentWeek.getTime(),s=n.getTime(),i=()=>{this.eventBus.emit("scroll:to-event-time",{eventStartTime:t})};r<s?(this.animationQueue++,this.animateTransition("next",n),this.eventBus.once(v.NAVIGATION_COMPLETED,i)):r>s?(this.animationQueue++,this.animateTransition("prev",n),this.eventBus.once(v.NAVIGATION_COMPLETED,i)):i()}navigateToPreviousWeek(){this.targetWeek=this.dateService.addWeeks(this.targetWeek,-1);let e=new Date(this.targetWeek);this.animationQueue++,this.animateTransition("prev",e)}navigateToNextWeek(){this.targetWeek=this.dateService.addWeeks(this.targetWeek,1);let e=new Date(this.targetWeek);this.animationQueue++,this.animateTransition("next",e)}navigateToToday(){let e=new Date,t=this.getISOWeekStart(e);this.targetWeek=new Date(t);let n=this.currentWeek.getTime(),r=t.getTime();n<r?(this.animationQueue++,this.animateTransition("next",t)):n>r&&(this.animationQueue++,this.animateTransition("prev",t))}navigateToDate(e){let t=this.getISOWeekStart(e);this.targetWeek=new Date(t);let n=this.currentWeek.getTime(),r=t.getTime();n<r?(this.animationQueue++,this.animateTransition("next",t)):n>r&&(this.animationQueue++,this.animateTransition("prev",t))}animateTransition(e,t){let n=document.querySelector("swp-calendar-container"),r=document.querySelector("swp-calendar-container swp-grid-container:not([data-prerendered])");if(!n||!r)return;document.documentElement.style.setProperty("--all-day-row-height","0px");let i;console.group("\u{1F527} NavigationManager.refactored"),console.log("Calling GridRenderer instead of NavigationRenderer"),console.log("Target week:",t),i=this.gridRenderer.createNavigationGrid(n,t),console.groupEnd(),i.style.transform="",r.style.transform="";let a=r.animate([{transform:"translateX(0)",opacity:"1"},{transform:e==="next"?"translateX(-100%)":"translateX(100%)",opacity:"0.5"}],{duration:400,easing:"ease-in-out",fill:"forwards"});i.animate([{transform:e==="next"?"translateX(100%)":"translateX(-100%)"},{transform:"translateX(0)"}],{duration:400,easing:"ease-in-out",fill:"forwards"}).addEventListener("finish",()=>{let d=n.querySelectorAll("swp-grid-container");for(let g=0;g<d.length-1;g++)d[g].remove();i.style.position="relative",i.removeAttribute("data-prerendered"),this.currentWeek=new Date(t),this.animationQueue--,this.animationQueue===0&&(this.currentWeek=new Date(this.targetWeek)),this.updateWeekInfo(),this.eventBus.emit(v.NAVIGATION_COMPLETED,{direction:e,currentDate:this.currentWeek})})}updateWeekInfo(){let e=this.dateService.getWeekNumber(this.currentWeek),t=this.dateService.addDays(this.currentWeek,6),n=this.dateService.formatDateRange(this.currentWeek,t);this.eventBus.emit(v.PERIOD_INFO_UPDATE,{weekNumber:e,dateRange:n,weekStart:this.currentWeek,weekEnd:t})}};var ke=class{constructor(e){this.buttonListeners=new Map,this.eventBus=e,this.setupButtonListeners()}setupButtonListeners(){document.querySelectorAll("swp-nav-button[data-action]").forEach(t=>{let n=r=>{r.preventDefault();let s=t.getAttribute("data-action");s&&this.isValidAction(s)&&this.handleNavigation(s)};t.addEventListener("click",n),this.buttonListeners.set(t,n)})}handleNavigation(e){this.eventBus.emit(v.NAV_BUTTON_CLICKED,{action:e})}isValidAction(e){return["prev","next","today"].includes(e)}};var Me=class{constructor(e,t){this.buttonListeners=new Map,this.eventBus=e,this.config=t,this.setupButtonListeners(),this.setupEventListeners()}setupButtonListeners(){document.querySelectorAll("swp-view-button[data-view]").forEach(t=>{let n=r=>{r.preventDefault();let s=t.getAttribute("data-view");s&&this.isValidView(s)&&this.changeView(s)};t.addEventListener("click",n),this.buttonListeners.set(t,n)}),this.updateButtonStates()}setupEventListeners(){this.eventBus.on(v.INITIALIZED,()=>{this.initializeView()}),this.eventBus.on(v.DATE_CHANGED,()=>{this.refreshCurrentView()})}changeView(e){if(e===this.config.currentView)return;let t=this.config.currentView;this.config.currentView=e,this.updateButtonStates(),this.eventBus.emit(v.VIEW_CHANGED,{previousView:t,currentView:e})}updateButtonStates(){document.querySelectorAll("swp-view-button[data-view]").forEach(t=>{t.getAttribute("data-view")===this.config.currentView?t.setAttribute("data-active","true"):t.removeAttribute("data-active")})}initializeView(){this.updateButtonStates(),this.emitViewRendered()}emitViewRendered(){this.eventBus.emit(v.VIEW_RENDERED,{view:this.config.currentView})}refreshCurrentView(){this.emitViewRendered()}isValidView(e){return["day","week","month"].includes(e)}};var Ae=class{constructor(e,t,n,r,s,i){this.currentView="week",this.currentDate=new Date,this.isInitialized=!1,this.eventBus=e,this.eventManager=t,this.gridManager=n,this.eventRenderer=r,this.scrollManager=s,this.config=i,this.setupEventListeners()}async initialize(){if(!this.isInitialized)try{await this.eventManager.loadData(),await this.gridManager.render(),this.scrollManager.initialize(),this.setView(this.currentView),this.setCurrentDate(this.currentDate),this.isInitialized=!0,this.eventBus.emit(v.INITIALIZED,{currentDate:this.currentDate,currentView:this.currentView})}catch(e){throw e}}setView(e){if(this.currentView===e)return;let t=this.currentView;this.currentView=e,this.eventBus.emit(v.VIEW_CHANGED,{previousView:t,currentView:e,date:this.currentDate})}setCurrentDate(e){let t=this.currentDate;this.currentDate=new Date(e),this.eventBus.emit(v.DATE_CHANGED,{previousDate:t,currentDate:this.currentDate,view:this.currentView})}setupEventListeners(){this.eventBus.on(v.WORKWEEK_CHANGED,e=>{let t=e;this.handleWorkweekChange()})}calculateCurrentPeriod(){let e=new Date(this.currentDate);switch(this.currentView){case"day":let t=new Date(e);t.setHours(0,0,0,0);let n=new Date(e);return n.setHours(23,59,59,999),{start:t.toISOString(),end:n.toISOString()};case"week":let r=new Date(e),s=r.getDay(),i=s===0?6:s-1;r.setDate(r.getDate()-i),r.setHours(0,0,0,0);let a=new Date(r);return a.setDate(a.getDate()+6),a.setHours(23,59,59,999),{start:r.toISOString(),end:a.toISOString()};case"month":let c=new Date(e.getFullYear(),e.getMonth(),1),d=new Date(e.getFullYear(),e.getMonth()+1,0,23,59,59,999);return{start:c.toISOString(),end:d.toISOString()};default:let g=new Date(e);g.setDate(g.getDate()-3),g.setHours(0,0,0,0);let w=new Date(e);return w.setDate(w.getDate()+3),w.setHours(23,59,59,999),{start:g.toISOString(),end:w.toISOString()}}}handleWorkweekChange(){this.eventBus.emit("workweek:header-update",{currentDate:this.currentDate,currentView:this.currentView})}};var Re=class extends HTMLElement{constructor(){super(),this.config=K.getInstance(),this.dateService=new U(this.config)}get eventId(){return this.dataset.eventId||""}set eventId(e){this.dataset.eventId=e}get start(){return new Date(this.dataset.start||"")}set start(e){this.dataset.start=this.dateService.toUTC(e)}get end(){return new Date(this.dataset.end||"")}set end(e){this.dataset.end=this.dateService.toUTC(e)}get title(){return this.dataset.title||""}set title(e){this.dataset.title=e}get description(){return this.dataset.description||""}set description(e){this.dataset.description=e}get type(){return this.dataset.type||"work"}set type(e){this.dataset.type=e}},Q=class extends Re{static get observedAttributes(){return["data-start","data-end","data-title","data-description","data-type"]}connectedCallback(){this.hasChildNodes()||this.render()}attributeChangedCallback(e,t,n){t!==n&&this.isConnected&&this.updateDisplay()}updatePosition(e,t){this.style.top=`${t+1}px`;let{startMinutes:n,endMinutes:r}=this.calculateTimesFromPosition(t),s=this.dateService.createDateAtTime(e,n),i=this.dateService.createDateAtTime(e,r);if(r>=1440){let a=Math.floor(r/1440);i=this.dateService.addDays(i,a)}this.start=s,this.end=i}updateHeight(e){this.style.height=`${e}px`;let t=this.config.gridSettings,{hourHeight:n,snapInterval:r}=t,s=this.start,i=e/n*60,a=Math.round(i/r)*r,c=this.dateService.addMinutes(s,a);this.end=c}createClone(){let e=this.cloneNode(!0);e.dataset.eventId=`clone-${this.eventId}`,e.style.pointerEvents="none";let t=this.querySelector("swp-event-time");if(t){let n=t.getAttribute("data-duration");n&&(e.dataset.originalDuration=n)}return e.style.height=this.style.height||`${this.getBoundingClientRect().height}px`,e}render(){let e=this.start,t=this.end,n=V.formatTimeRange(e,t),r=(t.getTime()-e.getTime())/(1e3*60);this.innerHTML=`
<swp-event-time data-duration="${r}">${n}</swp-event-time>
<swp-event-title>${this.title}</swp-event-title>
${this.description?`<swp-event-description>${this.description}</swp-event-description>`:""}
`}updateDisplay(){let e=this.querySelector("swp-event-time"),t=this.querySelector("swp-event-title"),n=this.querySelector("swp-event-description");if(e&&this.dataset.start&&this.dataset.end){let r=new Date(this.dataset.start),s=new Date(this.dataset.end),i=V.formatTimeRange(r,s);e.textContent=i;let a=(s.getTime()-r.getTime())/(1e3*60);e.setAttribute("data-duration",a.toString())}if(t&&this.dataset.title&&(t.textContent=this.dataset.title),this.dataset.description){if(n)n.textContent=this.dataset.description;else if(this.description){let r=document.createElement("swp-event-description");r.textContent=this.description,this.appendChild(r)}}else n&&n.remove()}calculateTimesFromPosition(e){let t=this.config.gridSettings,{hourHeight:n,dayStartHour:r,snapInterval:s}=t,i=parseInt(this.dataset.originalDuration||this.dataset.duration||"60"),a=e/n*60,c=r*60+a,d=Math.round(c/s)*s,g=d+i;return{startMinutes:d,endMinutes:g}}static fromCalendarEvent(e){let t=document.createElement("swp-event"),n=K.getInstance(),r=new U(n);return t.dataset.eventId=e.id,t.dataset.title=e.title,t.dataset.description=e.description||"",t.dataset.start=r.toUTC(e.start),t.dataset.end=r.toUTC(e.end),t.dataset.type=e.type,t.dataset.duration=e.metadata?.duration?.toString()||"60",t}static extractCalendarEventFromElement(e){return{id:e.dataset.eventId||"",title:e.dataset.title||"",description:e.dataset.description||void 0,start:new Date(e.dataset.start||""),end:new Date(e.dataset.end||""),type:e.dataset.type||"work",allDay:!1,syncStatus:"synced",metadata:{duration:e.dataset.duration}}}},oe=class extends Re{connectedCallback(){this.textContent||(this.textContent=this.dataset.title||"Untitled")}createClone(){let e=this.cloneNode(!0);return e.dataset.eventId=`clone-${this.eventId}`,e.style.pointerEvents="none",e.style.opacity="1",e}applyGridPositioning(e,t,n){let r=`${e} / ${t} / ${e+1} / ${n+1}`;this.style.gridArea=r}static fromCalendarEvent(e){let t=document.createElement("swp-allday-event"),n=K.getInstance(),r=new U(n);return t.dataset.eventId=e.id,t.dataset.title=e.title,t.dataset.start=r.toUTC(e.start),t.dataset.end=r.toUTC(e.end),t.dataset.type=e.type,t.dataset.allday="true",t.textContent=e.title,t}};customElements.define("swp-event",Q);customElements.define("swp-allday-event",oe);var be=class{constructor(e,t){this.mouseDownPosition={x:0,y:0},this.currentMousePosition={x:0,y:0},this.mouseOffset={x:0,y:0},this.currentColumn=null,this.previousColumn=null,this.originalSourceColumn=null,this.isDragStarted=!1,this.dragThreshold=5,this.scrollableContent=null,this.scrollDeltaY=0,this.lastScrollTop=0,this.isScrollCompensating=!1,this.dragAnimationId=null,this.targetY=0,this.currentY=0,this.targetColumn=null,this.eventBus=e,this.positionUtils=t,this.init()}init(){document.body.addEventListener("mousemove",this.handleMouseMove.bind(this)),document.body.addEventListener("mousedown",this.handleMouseDown.bind(this)),document.body.addEventListener("mouseup",this.handleMouseUp.bind(this));let e=document.querySelector("swp-calendar-container");e&&(e.addEventListener("mouseleave",()=>{this.originalElement&&this.isDragStarted&&this.cancelDrag()}),e.addEventListener("mouseenter",t=>{let n=t.target;n.closest("swp-calendar-header")?this.handleHeaderMouseEnter(t):n.closest("swp-day-column")&&this.handleColumnMouseEnter(t)},!0),e.addEventListener("mouseleave",t=>{t.target.closest("swp-calendar-header")&&this.handleHeaderMouseLeave(t)},!0)),B.updateColumnBoundsCache(),window.addEventListener("resize",()=>{B.updateColumnBoundsCache()}),this.eventBus.on("navigation:completed",()=>{B.updateColumnBoundsCache()}),this.eventBus.on(v.GRID_RENDERED,t=>{this.handleGridRendered(t)}),this.eventBus.on("edgescroll:started",()=>{this.isScrollCompensating=!0,this.scrollableContent&&(this.lastScrollTop=this.scrollableContent.scrollTop)}),this.eventBus.on("edgescroll:stopped",()=>{this.isScrollCompensating=!1}),this.eventBus.on("drag:mouseenter-header",()=>{this.scrollDeltaY=0,this.lastScrollTop=0}),this.eventBus.on("drag:mouseenter-column",()=>{this.scrollDeltaY=0,this.lastScrollTop=0})}handleGridRendered(e){this.scrollableContent=document.querySelector("swp-scrollable-content"),this.scrollableContent.addEventListener("scroll",this.handleScroll.bind(this),{passive:!0})}handleMouseDown(e){this.cleanupDragState(),B.updateColumnBoundsCache();let t=e.target;if(t.closest("swp-resize-handle"))return;let n=t;for(;n&&n.tagName!=="SWP-GRID-CONTAINER"&&!(n.tagName==="SWP-EVENT"||n.tagName==="SWP-ALLDAY-EVENT");)if(n=n.parentElement,!n)return;if(n){this.originalElement=n;let r=n.getBoundingClientRect();this.mouseOffset={x:e.clientX-r.left,y:e.clientY-r.top},this.mouseDownPosition={x:e.clientX,y:e.clientY}}}handleMouseMove(e){if(e.buttons===1){if(this.currentMousePosition={x:e.clientX,y:e.clientY},!this.isDragStarted&&this.originalElement&&!this.initializeDrag(this.currentMousePosition))return;this.isDragStarted&&this.originalElement&&this.draggedClone&&(this.continueDrag(this.currentMousePosition),this.detectColumnChange(this.currentMousePosition))}}initializeDrag(e){let t=Math.abs(e.x-this.mouseDownPosition.x),n=Math.abs(e.y-this.mouseDownPosition.y);if(Math.sqrt(t*t+n*n)<this.dragThreshold)return!1;this.isDragStarted=!0;let s=this.originalElement.closest("swp-event-group");s?s.style.zIndex="9999":this.originalElement.style.zIndex="9999";let i=this.originalElement;this.currentColumn=B.getColumnBounds(e),this.originalSourceColumn=this.currentColumn,this.draggedClone=i.createClone();let a={originalElement:this.originalElement,draggedClone:this.draggedClone,mousePosition:this.mouseDownPosition,mouseOffset:this.mouseOffset,columnBounds:this.currentColumn};return this.eventBus.emit("drag:start",a),!0}continueDrag(e){if(!this.draggedClone.hasAttribute("data-allday")){let t=B.getColumnBounds(e);if(t){let n=t.boundingClientRect,s=e.y+this.scrollDeltaY-n.top-this.mouseOffset.y;this.targetY=Math.max(0,s),this.targetColumn=t,this.dragAnimationId===null&&(this.currentY=parseFloat(this.draggedClone.style.top)||0,this.animateDrag())}}}detectColumnChange(e){let t=B.getColumnBounds(e);if(t!=null&&t.index!==this.currentColumn?.index){this.previousColumn=this.currentColumn,this.currentColumn=t;let n={originalElement:this.originalElement,draggedClone:this.draggedClone,previousColumn:this.previousColumn,newColumn:t,mousePosition:e};this.eventBus.emit("drag:column-change",n)}}handleMouseUp(e){if(this.stopDragAnimation(),this.originalElement)if(this.isDragStarted){let t={x:e.clientX,y:e.clientY},n=B.getColumnBounds(t);if(!n)return;let r=this.calculateSnapPosition(t.y,n);this.draggedClone&&(this.draggedClone.style.top=`${r}px`);let s=this.detectDropTarget(t);if(!s)throw"dropTarget is null";let i={originalElement:this.originalElement,draggedClone:this.draggedClone,mousePosition:t,originalSourceColumn:this.originalSourceColumn,finalPosition:{column:n,snappedY:r},target:s};this.eventBus.emit("drag:end",i),this.cleanupDragState()}else this.eventBus.emit("event:click",{clickedElement:this.originalElement,mousePosition:{x:e.clientX,y:e.clientY}})}cleanupAllClones(){let e=document.querySelectorAll('[data-event-id^="clone"]');e.length>0&&e.forEach(t=>t.remove())}cancelDrag(){if(!this.originalElement||!this.draggedClone)return;let e=this.draggedClone.getBoundingClientRect(),t=this.originalElement.getBoundingClientRect(),n=t.left-e.left,r=t.top-e.top;this.draggedClone.style.transition="transform 300ms ease-out",this.draggedClone.style.transform=`translate(${n}px, ${r}px)`,setTimeout(()=>{this.cleanupAllClones(),this.originalElement&&(this.originalElement.style.opacity="",this.originalElement.style.cursor=""),this.eventBus.emit("drag:cancelled",{originalElement:this.originalElement,reason:"mouse-left-grid"}),this.cleanupDragState(),this.stopDragAnimation()},300)}calculateSnapPosition(e,t){let n=e-this.mouseOffset.y,r=this.positionUtils.getPositionFromCoordinate(n,t);return Math.max(0,r)}animateDrag(){if(!this.isDragStarted||!this.draggedClone||!this.targetColumn){this.dragAnimationId=null;return}let e=this.targetY-this.currentY,t=e*.3;if(Math.abs(e)>.5){this.currentY+=t;let n={originalElement:this.originalElement,draggedClone:this.draggedClone,mousePosition:this.currentMousePosition,snappedY:this.currentY,columnBounds:this.targetColumn,mouseOffset:this.mouseOffset};this.eventBus.emit("drag:move",n),this.dragAnimationId=requestAnimationFrame(()=>this.animateDrag())}else{this.currentY=this.targetY;let n={originalElement:this.originalElement,draggedClone:this.draggedClone,mousePosition:this.currentMousePosition,snappedY:this.currentY,columnBounds:this.targetColumn,mouseOffset:this.mouseOffset};this.eventBus.emit("drag:move",n),this.dragAnimationId=null}}handleScroll(){if(!this.isDragStarted||!this.draggedClone||!this.scrollableContent||!this.isScrollCompensating)return;let e=this.scrollableContent.scrollTop,t=e-this.lastScrollTop;this.scrollDeltaY+=t,this.lastScrollTop=e,this.continueDrag(this.currentMousePosition)}stopDragAnimation(){this.dragAnimationId!==null&&(cancelAnimationFrame(this.dragAnimationId),this.dragAnimationId=null)}cleanupDragState(){this.previousColumn=null,this.originalElement=null,this.draggedClone=null,this.currentColumn=null,this.originalSourceColumn=null,this.isDragStarted=!1,this.scrollDeltaY=0,this.lastScrollTop=0}detectDropTarget(e){let t=this.draggedClone;for(;t&&t!==document.body;){if(t.tagName==="SWP-ALLDAY-CONTAINER")return"swp-day-header";if(t.tagName==="SWP-DAY-COLUMN")return"swp-day-column";t=t.parentElement}return null}handleHeaderMouseEnter(e){if(!this.isDragStarted||!this.draggedClone)return;let t={x:e.clientX,y:e.clientY},n=B.getColumnBounds(t);if(n){let r=Q.extractCalendarEventFromElement(this.draggedClone),s={targetColumn:n,mousePosition:t,originalElement:this.originalElement,draggedClone:this.draggedClone,calendarEvent:r,replaceClone:i=>{this.draggedClone=i,this.dragAnimationId}};this.eventBus.emit("drag:mouseenter-header",s)}}handleColumnMouseEnter(e){if(!this.isDragStarted||!this.draggedClone||!this.draggedClone.hasAttribute("data-allday"))return;let t={x:e.clientX,y:e.clientY},n=B.getColumnBounds(t);if(!n)return;let r=this.calculateSnapPosition(t.y,n),s=Q.extractCalendarEventFromElement(this.draggedClone),i={targetColumn:n,mousePosition:t,snappedY:r,originalElement:this.originalElement,draggedClone:this.draggedClone,calendarEvent:s,replaceClone:a=>{this.draggedClone=a,this.dragAnimationId,this.stopDragAnimation()}};this.eventBus.emit("drag:mouseenter-column",i)}handleHeaderMouseLeave(e){if(!this.isDragStarted||!this.draggedClone||!this.draggedClone.hasAttribute("data-allday"))return;let t={x:e.clientX,y:e.clientY},n=B.getColumnBounds(t);if(!n)return;let r={targetDate:n.date,mousePosition:t,originalElement:this.originalElement,draggedClone:this.draggedClone};this.eventBus.emit("drag:mouseleave-header",r)}};var xe=class{constructor(e){this.weekDates=e,this.tracks=[]}calculateLayout(e){let t=[];this.tracks=[new Array(this.weekDates.length).fill(!1)];let n=e.filter(r=>this.isEventVisible(r));for(let r of n){let s=this.getEventStartDay(r),i=this.getEventEndDay(r);if(s>0&&i>0){let a=this.findAvailableTrack(s-1,i-1);for(let d=s-1;d<=i-1;d++)this.tracks[a][d]=!0;let c={calenderEvent:r,gridArea:`${a+1} / ${s} / ${a+2} / ${i+1}`,startColumn:s,endColumn:i,row:a+1,columnSpan:i-s+1};t.push(c)}}return t}findAvailableTrack(e,t){for(let n=0;n<this.tracks.length;n++)if(this.isTrackAvailable(n,e,t))return n;return this.tracks.push(new Array(this.weekDates.length).fill(!1)),this.tracks.length-1}isTrackAvailable(e,t,n){for(let r=t;r<=n;r++)if(this.tracks[e][r])return!1;return!0}getEventStartDay(e){let t=this.formatDate(e.start),n=this.weekDates[0],r=t<n?n:t,s=this.weekDates.indexOf(r);return s>=0?s+1:0}getEventEndDay(e){let t=this.formatDate(e.end),n=this.weekDates[this.weekDates.length-1],r=t>n?n:t,s=this.weekDates.indexOf(r);return s>=0?s+1:0}isEventVisible(e){if(this.weekDates.length===0)return!1;let t=this.formatDate(e.start),n=this.formatDate(e.end),r=this.weekDates[0],s=this.weekDates[this.weekDates.length-1];return!(n<r||t>s)}formatDate(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${t}-${n}-${r}`}};var Ie=class{constructor(e,t,n){this.layoutEngine=null,this.currentAllDayEvents=[],this.currentWeekDates=[],this.isExpanded=!1,this.actualRowCount=0,this.eventManager=e,this.allDayEventRenderer=t,this.dateService=n,document.documentElement.style.setProperty("--single-row-height",`${ne.EVENT_HEIGHT}px`),this.setupEventListeners()}setupEventListeners(){b.on("drag:mouseenter-header",e=>{let t=e.detail;t.draggedClone.hasAttribute("data-allday")||(console.log("\u{1F504} AllDayManager: Received drag:mouseenter-header",{targetDate:t.targetColumn,originalElementId:t.originalElement?.dataset?.eventId,originalElementTag:t.originalElement?.tagName}),this.handleConvertToAllDay(t))}),b.on("drag:mouseleave-header",e=>{let{originalElement:t,cloneElement:n}=e.detail;console.log("\u{1F6AA} AllDayManager: Received drag:mouseleave-header",{originalElementId:t?.dataset?.eventId})}),b.on("drag:start",e=>{let t=e.detail;t.draggedClone?.hasAttribute("data-allday")&&this.allDayEventRenderer.handleDragStart(t)}),b.on("drag:column-change",e=>{let t=e.detail;t.draggedClone?.hasAttribute("data-allday")&&this.handleColumnChange(t)}),b.on("drag:end",e=>{let t=e.detail;if(console.log("\u{1F3AF} AllDayManager: drag:end received",{target:t.target,originalElementTag:t.originalElement?.tagName,hasAllDayAttribute:t.originalElement?.hasAttribute("data-allday"),eventId:t.originalElement?.dataset.eventId}),t.target==="swp-day-header"&&t.originalElement?.hasAttribute("data-allday")){console.log("\u2705 AllDayManager: Handling all-day \u2192 all-day drop"),this.handleDragEnd(t);return}if(t.target==="swp-day-header"&&!t.originalElement?.hasAttribute("data-allday")){console.log("\u{1F504} AllDayManager: Timed \u2192 all-day conversion on drop"),this.handleTimedToAllDayDrop(t);return}if(t.target==="swp-day-column"&&t.originalElement?.hasAttribute("data-allday")){let n=t.originalElement.dataset.eventId;console.log("\u{1F504} AllDayManager: All-day \u2192 timed conversion",{eventId:n}),this.fadeOutAndRemove(t.originalElement);let r=this.currentAllDayEvents.filter(i=>i.id!==n),s=this.calculateAllDayEventsLayout(r,this.currentWeekDates);this.allDayEventRenderer.renderAllDayEventsForPeriod(s),this.checkAndAnimateAllDayHeight()}}),b.on("drag:cancelled",e=>{let{draggedElement:t,reason:n}=e.detail;console.log("\u{1F6AB} AllDayManager: Drag cancelled",{eventId:t?.dataset?.eventId,reason:n})}),b.on("header:ready",async e=>{let t=e.detail,n=new Date(t.headerElements.at(0).date),r=new Date(t.headerElements.at(-1).date),i=(await this.eventManager.getEventsForPeriod(n,r)).filter(c=>c.allDay),a=this.calculateAllDayEventsLayout(i,t.headerElements);this.allDayEventRenderer.renderAllDayEventsForPeriod(a),this.checkAndAnimateAllDayHeight()}),b.on(v.VIEW_CHANGED,e=>{this.allDayEventRenderer.handleViewChanged(e)})}getAllDayContainer(){return document.querySelector("swp-calendar-header swp-allday-container")}getCalendarHeader(){return document.querySelector("swp-calendar-header")}getHeaderSpacer(){return document.querySelector("swp-header-spacer")}getMaxRowFromDOM(){let e=this.getAllDayContainer();if(!e)return 0;let t=0;return e.querySelectorAll("swp-allday-event:not(.max-event-indicator):not([data-removing])").forEach(r=>{let i=parseInt(r.style.gridRow)||1;t=Math.max(t,i)}),t}getGridAreaFromDOM(e){let t=this.getAllDayContainer();return t&&t.querySelector(`[data-event-id="${e}"]`)?.style.gridArea||null}countEventsInColumnFromDOM(e){let t=this.getAllDayContainer();if(!t)return 0;let n=0;return t.querySelectorAll("swp-allday-event:not(.max-event-indicator)").forEach(s=>{let c=s.style.gridColumn.match(/(\d+)\s*\/\s*(\d+)/);if(c){let d=parseInt(c[1]),g=parseInt(c[2])-1;d<=e&&g>=e&&n++}}),n}calculateAllDayHeight(e){let t=document.documentElement,n=e*ne.SINGLE_ROW_HEIGHT,r=t.style.getPropertyValue("--all-day-row-height")||"0px",s=parseInt(r)||0,i=n-s;return{targetHeight:n,currentHeight:s,heightDifference:i}}checkAndAnimateAllDayHeight(){let e=this.getMaxRowFromDOM();console.log("\u{1F4CA} AllDayManager: Height calculation",{maxRows:e,isExpanded:this.isExpanded}),this.actualRowCount=e;let t=e;e>ne.MAX_COLLAPSED_ROWS?(this.updateChevronButton(!0),this.isExpanded?this.clearOverflowIndicators():(t=ne.MAX_COLLAPSED_ROWS,this.updateOverflowIndicators())):(this.updateChevronButton(!1),this.clearOverflowIndicators()),console.log("\u{1F3AC} AllDayManager: Will animate to",{displayRows:t,maxRows:e,willAnimate:t!==this.actualRowCount}),console.log(`\u{1F3AF} AllDayManager: Animating to ${t} rows`),this.animateToRows(t)}animateToRows(e){let{targetHeight:t,currentHeight:n,heightDifference:r}=this.calculateAllDayHeight(e);if(t===n)return;console.log(`\u{1F3AC} All-day height animation: ${n}px \u2192 ${t}px (${Math.ceil(n/ne.SINGLE_ROW_HEIGHT)} \u2192 ${e} rows)`);let s=this.getCalendarHeader(),i=this.getHeaderSpacer(),a=this.getAllDayContainer();if(!s||!a)return;let c=parseFloat(getComputedStyle(s).height),d=c+r,g=[s.animate([{height:`${c}px`},{height:`${d}px`}],{duration:150,easing:"ease-out",fill:"forwards"})];if(i){let E=document.documentElement.style.getPropertyValue("--header-height"),m=parseInt(E),u=m+n,D=m+t;g.push(i.animate([{height:`${u}px`},{height:`${D}px`}],{duration:150,easing:"ease-out"}))}Promise.all(g.map(w=>w.finished)).then(()=>{document.documentElement.style.setProperty("--all-day-row-height",`${t}px`),b.emit("header:height-changed")})}calculateAllDayEventsLayout(e,t){return this.currentAllDayEvents=e,this.currentWeekDates=t,new xe(t.map(r=>r.date)).calculateLayout(e)}handleConvertToAllDay(e){let t=this.getAllDayContainer();if(!t)return;let n=oe.fromCalendarEvent(e.calendarEvent);n.style.gridRow="1",n.style.gridColumn=e.targetColumn.index.toString(),e.draggedClone.remove(),e.replaceClone(n),t.appendChild(n),B.updateColumnBoundsCache(),this.checkAndAnimateAllDayHeight()}handleColumnChange(e){if(!this.getAllDayContainer())return;let n=B.getColumnBounds(e.mousePosition);if(n==null||!e.draggedClone)return;let r=window.getComputedStyle(e.draggedClone),s=parseInt(r.gridColumnStart)||n.index,a=(parseInt(r.gridColumnEnd)||n.index+1)-s,c=n.index,d=c+a;e.draggedClone.style.gridColumn=`${c} / ${d}`}fadeOutAndRemove(e){console.log("\u{1F5D1}\uFE0F AllDayManager: About to remove all-day event",{eventId:e.dataset.eventId,element:e.tagName}),e.setAttribute("data-removing","true"),e.style.transition="opacity 0.3s ease-out",e.style.opacity="0",setTimeout(()=>{e.remove(),console.log("\u2705 AllDayManager: All-day event removed from DOM")},300)}async handleTimedToAllDayDrop(e){if(!e.draggedClone||!e.finalPosition.column)return;let t=e.draggedClone,n=t.eventId.replace("clone-",""),r=e.finalPosition.column.date;console.log("\u{1F504} AllDayManager: Converting timed event to all-day",{eventId:n,targetDate:r});let s=new Date(r);s.setHours(t.start.getHours(),t.start.getMinutes(),0,0);let i=new Date(r);i.setHours(t.end.getHours(),t.end.getMinutes(),0,0),await this.eventManager.updateEvent(n,{start:s,end:i,allDay:!0}),this.fadeOutAndRemove(e.originalElement);let a={id:n,title:t.title,start:s,end:i,type:t.type,allDay:!0,syncStatus:"synced"},c=[...this.currentAllDayEvents,a],d=this.calculateAllDayEventsLayout(c,this.currentWeekDates);this.allDayEventRenderer.renderAllDayEventsForPeriod(d),this.checkAndAnimateAllDayHeight()}async handleDragEnd(e){if(!e.draggedClone||!e.finalPosition.column)return;let t=e.draggedClone,n=t.eventId.replace("clone-",""),r=e.finalPosition.column.date,s=this.dateService.differenceInCalendarDays(t.end,t.start),i=new Date(r);i.setHours(t.start.getHours(),t.start.getMinutes(),0,0);let a=new Date(r);a.setDate(a.getDate()+s),a.setHours(t.end.getHours(),t.end.getMinutes(),0,0),await this.eventManager.updateEvent(n,{start:i,end:a,allDay:!0}),this.fadeOutAndRemove(e.originalElement);let c=this.currentAllDayEvents.map(g=>g.id===n?{...g,start:i,end:a}:g),d=this.calculateAllDayEventsLayout(c,this.currentWeekDates);this.allDayEventRenderer.renderAllDayEventsForPeriod(d),this.checkAndAnimateAllDayHeight()}updateChevronButton(e){let t=this.getHeaderSpacer();if(!t)return;let n=t.querySelector(".allday-chevron");e&&!n?(n=document.createElement("button"),n.className="allday-chevron collapsed",n.innerHTML=`
<svg width="12" height="8" viewBox="0 0 12 8">
<path d="M1 1.5L6 6.5L11 1.5" stroke="currentColor" stroke-width="2" fill="none"/>
</svg>
`,n.onclick=()=>this.toggleExpanded(),t.appendChild(n)):!e&&n?n.remove():n&&(n.classList.toggle("collapsed",!this.isExpanded),n.classList.toggle("expanded",this.isExpanded))}toggleExpanded(){this.isExpanded=!this.isExpanded,this.checkAndAnimateAllDayHeight(),document.querySelectorAll("swp-allday-container swp-allday-event.max-event-overflow-hide, swp-allday-container swp-allday-event.max-event-overflow-show").forEach(t=>{this.isExpanded?(t.classList.remove("max-event-overflow-hide"),t.classList.add("max-event-overflow-show")):(t.classList.remove("max-event-overflow-show"),t.classList.add("max-event-overflow-hide"))})}countEventsInColumn(e){return this.countEventsInColumnFromDOM(e.index)}updateOverflowIndicators(){let e=this.getAllDayContainer();if(!e)return;B.getColumns().forEach(n=>{let s=this.countEventsInColumn(n)-ne.MAX_COLLAPSED_ROWS;if(s>0){let i=e.querySelector(`.max-event-indicator[data-column="${n.index}"]`);if(i)i.innerHTML=`<span>+${s+1} more</span>`;else{let a=document.createElement("swp-allday-event");a.className="max-event-indicator",a.setAttribute("data-column",n.index.toString()),a.style.gridRow=ne.MAX_COLLAPSED_ROWS.toString(),a.style.gridColumn=n.index.toString(),a.innerHTML=`<span>+${s+1} more</span>`,a.onclick=c=>{c.stopPropagation(),this.toggleExpanded()},e.appendChild(a)}}})}clearOverflowIndicators(){let e=this.getAllDayContainer();e&&e.querySelectorAll(".max-event-indicator").forEach(t=>{t.remove()})}};var Oe=class{constructor(e,t){this.config=e,this.positionUtils=t,this.isResizing=!1,this.targetEl=null,this.startY=0,this.startDurationMin=0,this.animationId=null,this.currentHeight=0,this.targetHeight=0,this.pointerCaptured=!1,this.ANIMATION_SPEED=.35,this.Z_INDEX_RESIZING="1000",this.EVENT_REFRESH_THRESHOLD=.5,this.onMouseOver=r=>{let i=r.target.closest("swp-event");if(i&&!this.isResizing&&!i.querySelector(":scope > swp-resize-handle")){let a=this.createResizeHandle();i.appendChild(a)}},this.onPointerDown=r=>{let s=r.target.closest("swp-resize-handle");if(!s)return;let i=s.parentElement;this.startResizing(i,r)},this.onPointerMove=r=>{!this.isResizing||!this.targetEl||this.updateResizeHeight(r.clientY)},this.animate=()=>{if(!this.isResizing||!this.targetEl){this.animationId=null;return}let r=this.targetHeight-this.currentHeight;Math.abs(r)>this.EVENT_REFRESH_THRESHOLD?(this.currentHeight+=r*this.ANIMATION_SPEED,this.targetEl.updateHeight?.(this.currentHeight),this.animationId=requestAnimationFrame(this.animate)):this.finalizeAnimation()},this.onPointerUp=r=>{!this.isResizing||!this.targetEl||(this.cleanupAnimation(),this.snapToGrid(),this.emitResizeEndEvent(),this.cleanupResizing(r))};let n=this.config.gridSettings;this.snapMin=n.snapInterval,this.minDurationMin=this.snapMin}initialize(){this.attachGlobalListeners()}destroy(){this.removeEventListeners()}removeEventListeners(){let e=document.querySelector("swp-calendar-container");e&&e.removeEventListener("mouseover",this.onMouseOver,!0),document.removeEventListener("pointerdown",this.onPointerDown,!0),document.removeEventListener("pointermove",this.onPointerMove,!0),document.removeEventListener("pointerup",this.onPointerUp,!0)}createResizeHandle(){let e=document.createElement("swp-resize-handle");return e.setAttribute("aria-label","Resize event"),e.setAttribute("role","separator"),e}attachGlobalListeners(){let e=document.querySelector("swp-calendar-container");e&&e.addEventListener("mouseover",this.onMouseOver,!0),document.addEventListener("pointerdown",this.onPointerDown,!0),document.addEventListener("pointermove",this.onPointerMove,!0),document.addEventListener("pointerup",this.onPointerUp,!0)}startResizing(e,t){this.targetEl=e,this.isResizing=!0,this.startY=t.clientY;let n=e.offsetHeight;this.startDurationMin=Math.max(this.minDurationMin,Math.round(this.positionUtils.pixelsToMinutes(n))),this.setZIndexForResizing(e),this.capturePointer(t),document.documentElement.classList.add("swp--resizing"),t.preventDefault()}setZIndexForResizing(e){let t=e.closest("swp-event-group")??e;this.prevZ=t.style.zIndex,t.style.zIndex=this.Z_INDEX_RESIZING}capturePointer(e){try{e.target.setPointerCapture?.(e.pointerId),this.pointerCaptured=!0}catch(t){console.warn("Pointer capture failed:",t)}}updateResizeHeight(e){let t=e-this.startY,r=this.positionUtils.minutesToPixels(this.startDurationMin)+t,s=this.positionUtils.minutesToPixels(this.minDurationMin);this.targetHeight=Math.max(s,r),this.animationId==null&&(this.currentHeight=this.targetEl?.offsetHeight,this.animate())}finalizeAnimation(){this.targetEl&&(this.currentHeight=this.targetHeight,this.targetEl.updateHeight?.(this.currentHeight),this.animationId=null)}cleanupAnimation(){this.animationId!=null&&(cancelAnimationFrame(this.animationId),this.animationId=null)}snapToGrid(){if(!this.targetEl)return;let e=this.targetEl.offsetHeight,t=this.positionUtils.minutesToPixels(this.snapMin),n=Math.round(e/t)*t,r=this.positionUtils.minutesToPixels(this.minDurationMin),s=Math.max(r,n)-3;this.targetEl.updateHeight?.(s)}emitResizeEndEvent(){if(!this.targetEl)return;let t={eventId:this.targetEl.dataset.eventId||"",element:this.targetEl,finalHeight:this.targetEl.offsetHeight};b.emit("resize:end",t)}cleanupResizing(e){this.restoreZIndex(),this.releasePointer(e),this.isResizing=!1,this.targetEl=null,document.documentElement.classList.remove("swp--resizing")}restoreZIndex(){if(!this.targetEl||this.prevZ===void 0)return;let e=this.targetEl.closest("swp-event-group")??this.targetEl;e.style.zIndex=this.prevZ,this.prevZ=void 0}releasePointer(e){if(this.pointerCaptured)try{e.target.releasePointerCapture?.(e.pointerId),this.pointerCaptured=!1}catch(t){console.warn("Pointer release failed:",t)}}};var Le=class{constructor(e){this.eventBus=e,this.scrollableContent=null,this.timeGrid=null,this.draggedClone=null,this.scrollRAF=null,this.mouseY=0,this.isDragging=!1,this.isScrolling=!1,this.lastTs=0,this.rect=null,this.initialScrollTop=0,this.scrollListener=null,this.OUTER_ZONE=100,this.INNER_ZONE=50,this.SLOW_SPEED_PXS=140,this.FAST_SPEED_PXS=640,this.init()}init(){setTimeout(()=>{this.scrollableContent=document.querySelector("swp-scrollable-content"),this.timeGrid=document.querySelector("swp-time-grid"),this.scrollableContent&&(this.scrollableContent.style.scrollBehavior="auto",this.scrollListener=this.handleScroll.bind(this),this.scrollableContent.addEventListener("scroll",this.scrollListener,{passive:!0}))},100),document.body.addEventListener("mousemove",e=>{this.isDragging&&(this.mouseY=e.clientY)}),this.subscribeToEvents()}subscribeToEvents(){this.eventBus.on("drag:start",e=>{let t=e.detail;this.draggedClone=t.draggedClone,this.startDrag()}),this.eventBus.on("drag:end",()=>this.stopDrag()),this.eventBus.on("drag:cancelled",()=>this.stopDrag()),this.eventBus.on("drag:mouseenter-header",()=>{console.log("\u{1F504} EdgeScrollManager: Event converting to all-day - stopping scroll"),this.stopDrag()}),this.eventBus.on("drag:mouseenter-column",()=>{this.startDrag()})}startDrag(){console.log("\u{1F3AC} EdgeScrollManager: Starting drag"),this.isDragging=!0,this.isScrolling=!1,this.lastTs=performance.now(),this.scrollableContent&&(this.initialScrollTop=this.scrollableContent.scrollTop),this.scrollRAF===null&&(this.scrollRAF=requestAnimationFrame(e=>this.scrollTick(e)))}stopDrag(){this.isDragging=!1,this.isScrolling&&(this.isScrolling=!1,console.log("\u{1F6D1} EdgeScrollManager: Edge-scroll stopped (drag ended)"),this.eventBus.emit("edgescroll:stopped",{})),this.scrollRAF!==null&&(cancelAnimationFrame(this.scrollRAF),this.scrollRAF=null),this.rect=null,this.lastTs=0,this.initialScrollTop=0}handleScroll(){if(!this.isDragging||!this.scrollableContent)return;let e=this.scrollableContent.scrollTop,t=Math.abs(e-this.initialScrollTop);t>1&&!this.isScrolling&&(this.isScrolling=!0,console.log("\u{1F4BE} EdgeScrollManager: Edge-scroll started (actual scroll detected)",{initialScrollTop:this.initialScrollTop,currentScrollTop:e,scrollDelta:t}),this.eventBus.emit("edgescroll:started",{}))}scrollTick(e){let t=this.lastTs?(e-this.lastTs)/1e3:0;if(this.lastTs=e,!this.scrollableContent){this.stopDrag();return}this.rect||(this.rect=this.scrollableContent.getBoundingClientRect());let n=0;if(this.isDragging){let r=this.mouseY-this.rect.top,s=this.rect.bottom-this.mouseY;r<this.INNER_ZONE?n=-this.FAST_SPEED_PXS:r<this.OUTER_ZONE?n=-this.SLOW_SPEED_PXS:s<this.INNER_ZONE?n=this.FAST_SPEED_PXS:s<this.OUTER_ZONE&&(n=this.SLOW_SPEED_PXS)}if(n!==0&&this.isDragging&&this.timeGrid&&this.draggedClone){let r=this.scrollableContent.scrollTop,s=this.scrollableContent.clientHeight,i=this.timeGrid.clientHeight,c=this.draggedClone.getBoundingClientRect().bottom,g=this.timeGrid.getBoundingClientRect().bottom,w=r<=0&&n<0,E=c>=g&&n>0;w||E?(this.isScrolling&&(this.isScrolling=!1,this.initialScrollTop=this.scrollableContent.scrollTop,console.log("\u{1F6D1} EdgeScrollManager: Edge-scroll stopped (reached boundary)"),this.eventBus.emit("edgescroll:stopped",{})),this.isDragging&&(this.scrollRAF=requestAnimationFrame(m=>this.scrollTick(m)))):(this.scrollableContent.scrollTop+=n*t,this.rect=null,this.scrollRAF=requestAnimationFrame(m=>this.scrollTick(m)))}else this.isScrolling&&(this.isScrolling=!1,this.initialScrollTop=this.scrollableContent.scrollTop,console.log("\u{1F6D1} EdgeScrollManager: Edge-scroll stopped (mouse left edge)"),this.eventBus.emit("edgescroll:stopped",{})),this.isDragging?this.scrollRAF=requestAnimationFrame(r=>this.scrollTick(r)):this.stopDrag()}};var $e=class{constructor(e,t){this.headerRenderer=e,this.config=t,this.handleDragMouseEnterHeader=this.handleDragMouseEnterHeader.bind(this),this.handleDragMouseLeaveHeader=this.handleDragMouseLeaveHeader.bind(this),this.setupNavigationListener()}setupHeaderDragListeners(){console.log("\u{1F3AF} HeaderManager: Setting up drag event listeners"),b.on("drag:mouseenter-header",this.handleDragMouseEnterHeader),b.on("drag:mouseleave-header",this.handleDragMouseLeaveHeader),console.log("\u2705 HeaderManager: Drag event listeners attached")}handleDragMouseEnterHeader(e){let{targetColumn:t,mousePosition:n,originalElement:r,draggedClone:s}=e.detail;console.log("\u{1F3AF} HeaderManager: Received drag:mouseenter-header",{targetDate:t,originalElement:!!r,cloneElement:!!s})}handleDragMouseLeaveHeader(e){let{targetDate:t,mousePosition:n,originalElement:r,draggedClone:s}=e.detail;console.log("\u{1F6AA} HeaderManager: Received drag:mouseleave-header",{targetDate:t,originalElement:!!r,cloneElement:!!s})}setupNavigationListener(){b.on(v.NAVIGATION_COMPLETED,e=>{let{currentDate:t}=e.detail;this.updateHeader(t)}),b.on(v.DATE_CHANGED,e=>{let{currentDate:t}=e.detail;this.updateHeader(t)}),b.on("workweek:header-update",e=>{let{currentDate:t}=e.detail;this.updateHeader(t)})}updateHeader(e){console.log("\u{1F3AF} HeaderManager.updateHeader called",{currentDate:e,rendererType:this.headerRenderer.constructor.name});let t=document.querySelector("swp-calendar-header");if(!t){console.warn("\u274C HeaderManager: No calendar header found!");return}t.innerHTML="";let n={currentWeek:e,config:this.config};this.headerRenderer.render(t,n),this.setupHeaderDragListeners();let r={headerElements:B.getHeaderColumns()};b.emit("header:ready",r)}};var He=class{constructor(e,t){this.buttonListeners=new Map,this.eventBus=e,this.config=t,this.setupButtonListeners()}setupButtonListeners(){document.querySelectorAll("swp-preset-button[data-workweek]").forEach(t=>{let n=r=>{r.preventDefault();let s=t.getAttribute("data-workweek");s&&this.changePreset(s)};t.addEventListener("click",n),this.buttonListeners.set(t,n)}),this.updateButtonStates()}changePreset(e){if(!me[e]){console.warn(`Invalid preset ID "${e}"`);return}if(e===this.config.currentWorkWeek)return;let t=this.config.currentWorkWeek;this.config.currentWorkWeek=e;let n=me[e];this.updateButtonStates(),this.eventBus.emit(v.WORKWEEK_CHANGED,{workWeekId:e,previousWorkWeekId:t,settings:n})}updateButtonStates(){document.querySelectorAll("swp-preset-button[data-workweek]").forEach(t=>{t.getAttribute("data-workweek")===this.config.currentWorkWeek?t.setAttribute("data-active","true"):t.removeAttribute("data-active")})}};var Be=class{constructor(e,t){this.indexedDB=e,this.queue=t}async loadEvents(){return this.indexedDB.isInitialized()||(await this.indexedDB.initialize(),await this.indexedDB.seedIfEmpty()),await this.indexedDB.getAllEvents()}async createEvent(e,t="local"){let n=this.generateEventId(),s={...e,id:n,syncStatus:t==="local"?"pending":"synced"};return await this.indexedDB.saveEvent(s),t==="local"&&await this.queue.enqueue({type:"create",eventId:n,data:s,timestamp:Date.now(),retryCount:0}),s}async updateEvent(e,t,n="local"){let r=await this.indexedDB.getEvent(e);if(!r)throw new Error(`Event with ID ${e} not found`);let i={...r,...t,id:e,syncStatus:n==="local"?"pending":"synced"};return await this.indexedDB.saveEvent(i),n==="local"&&await this.queue.enqueue({type:"update",eventId:e,data:t,timestamp:Date.now(),retryCount:0}),i}async deleteEvent(e,t="local"){if(!await this.indexedDB.getEvent(e))throw new Error(`Event with ID ${e} not found`);t==="local"&&await this.queue.enqueue({type:"delete",eventId:e,data:{},timestamp:Date.now(),retryCount:0}),await this.indexedDB.deleteEvent(e)}generateEventId(){let e=Date.now(),t=Math.random().toString(36).substring(2,9);return`${e}-${t}`}};var We=class{constructor(e){this.apiEndpoint=e.apiEndpoint}async sendCreate(e){throw new Error("ApiEventRepository.sendCreate not implemented yet")}async sendUpdate(e,t){throw new Error("ApiEventRepository.sendUpdate not implemented yet")}async sendDelete(e){throw new Error("ApiEventRepository.sendDelete not implemented yet")}async fetchAll(){throw new Error("ApiEventRepository.fetchAll not implemented yet")}async initializeSignalR(){throw new Error("SignalR not implemented yet")}};var J=class o{constructor(){this.db=null,this.initialized=!1}async initialize(){return new Promise((e,t)=>{let n=indexedDB.open(o.DB_NAME,o.DB_VERSION);n.onerror=()=>{t(new Error(`Failed to open IndexedDB: ${n.error}`))},n.onsuccess=()=>{this.db=n.result,this.initialized=!0,e()},n.onupgradeneeded=r=>{let s=r.target.result;if(!s.objectStoreNames.contains(o.EVENTS_STORE)){let i=s.createObjectStore(o.EVENTS_STORE,{keyPath:"id"});i.createIndex("start","start",{unique:!1}),i.createIndex("end","end",{unique:!1}),i.createIndex("syncStatus","syncStatus",{unique:!1})}s.objectStoreNames.contains(o.QUEUE_STORE)||s.createObjectStore(o.QUEUE_STORE,{keyPath:"id"}).createIndex("timestamp","timestamp",{unique:!1}),s.objectStoreNames.contains(o.SYNC_STATE_STORE)||s.createObjectStore(o.SYNC_STATE_STORE,{keyPath:"key"})}})}isInitialized(){return this.initialized}ensureDB(){if(!this.db)throw new Error("IndexedDB not initialized. Call initialize() first.");return this.db}async getEvent(e){let t=this.ensureDB();return new Promise((n,r)=>{let a=t.transaction([o.EVENTS_STORE],"readonly").objectStore(o.EVENTS_STORE).get(e);a.onsuccess=()=>{let c=a.result;n(c?this.deserializeEvent(c):null)},a.onerror=()=>{r(new Error(`Failed to get event ${e}: ${a.error}`))}})}async getAllEvents(){let e=this.ensureDB();return new Promise((t,n)=>{let i=e.transaction([o.EVENTS_STORE],"readonly").objectStore(o.EVENTS_STORE).getAll();i.onsuccess=()=>{let a=i.result;t(a.map(c=>this.deserializeEvent(c)))},i.onerror=()=>{n(new Error(`Failed to get all events: ${i.error}`))}})}async saveEvent(e){let t=this.ensureDB(),n=this.serializeEvent(e);return new Promise((r,s)=>{let c=t.transaction([o.EVENTS_STORE],"readwrite").objectStore(o.EVENTS_STORE).put(n);c.onsuccess=()=>{r()},c.onerror=()=>{s(new Error(`Failed to save event ${e.id}: ${c.error}`))}})}async deleteEvent(e){let t=this.ensureDB();return new Promise((n,r)=>{let a=t.transaction([o.EVENTS_STORE],"readwrite").objectStore(o.EVENTS_STORE).delete(e);a.onsuccess=()=>{n()},a.onerror=()=>{r(new Error(`Failed to delete event ${e}: ${a.error}`))}})}async addToQueue(e){let t=this.ensureDB(),n={...e,id:`${e.type}-${e.eventId}-${Date.now()}`};return new Promise((r,s)=>{let c=t.transaction([o.QUEUE_STORE],"readwrite").objectStore(o.QUEUE_STORE).put(n);c.onsuccess=()=>{r()},c.onerror=()=>{s(new Error(`Failed to add to queue: ${c.error}`))}})}async getQueue(){let e=this.ensureDB();return new Promise((t,n)=>{let a=e.transaction([o.QUEUE_STORE],"readonly").objectStore(o.QUEUE_STORE).index("timestamp").getAll();a.onsuccess=()=>{t(a.result)},a.onerror=()=>{n(new Error(`Failed to get queue: ${a.error}`))}})}async removeFromQueue(e){let t=this.ensureDB();return new Promise((n,r)=>{let a=t.transaction([o.QUEUE_STORE],"readwrite").objectStore(o.QUEUE_STORE).delete(e);a.onsuccess=()=>{n()},a.onerror=()=>{r(new Error(`Failed to remove from queue: ${a.error}`))}})}async clearQueue(){let e=this.ensureDB();return new Promise((t,n)=>{let i=e.transaction([o.QUEUE_STORE],"readwrite").objectStore(o.QUEUE_STORE).clear();i.onsuccess=()=>{t()},i.onerror=()=>{n(new Error(`Failed to clear queue: ${i.error}`))}})}async setSyncState(e,t){let n=this.ensureDB();return new Promise((r,s)=>{let c=n.transaction([o.SYNC_STATE_STORE],"readwrite").objectStore(o.SYNC_STATE_STORE).put({key:e,value:t});c.onsuccess=()=>{r()},c.onerror=()=>{s(new Error(`Failed to set sync state ${e}: ${c.error}`))}})}async getSyncState(e){let t=this.ensureDB();return new Promise((n,r)=>{let a=t.transaction([o.SYNC_STATE_STORE],"readonly").objectStore(o.SYNC_STATE_STORE).get(e);a.onsuccess=()=>{let c=a.result;n(c?c.value:null)},a.onerror=()=>{r(new Error(`Failed to get sync state ${e}: ${a.error}`))}})}serializeEvent(e){return{...e,start:e.start instanceof Date?e.start.toISOString():e.start,end:e.end instanceof Date?e.end.toISOString():e.end}}deserializeEvent(e){return{...e,start:typeof e.start=="string"?new Date(e.start):e.start,end:typeof e.end=="string"?new Date(e.end):e.end}}close(){this.db&&(this.db.close(),this.db=null)}static async deleteDatabase(){return new Promise((e,t)=>{let n=indexedDB.deleteDatabase(o.DB_NAME);n.onsuccess=()=>{e()},n.onerror=()=>{t(new Error(`Failed to delete database: ${n.error}`))}})}async seedIfEmpty(e="data/mock-events.json"){try{let t=await this.getAllEvents();if(t.length>0){console.log(`IndexedDB already has ${t.length} events - skipping seed`);return}if(console.log("IndexedDB is empty - seeding with mock data"),!navigator.onLine){console.warn("Offline and IndexedDB empty - starting with no events");return}let n=await fetch(e);if(!n.ok)throw new Error(`Failed to fetch mock events: ${n.statusText}`);let r=await n.json();for(let s of r){let i={...s,start:new Date(s.start),end:new Date(s.end),allDay:s.allDay||!1,syncStatus:"synced"};await this.saveEvent(i)}console.log(`Seeded IndexedDB with ${r.length} mock events`)}catch(t){console.error("Failed to seed IndexedDB:",t)}}};J.DB_NAME="CalendarDB";J.DB_VERSION=1;J.EVENTS_STORE="events";J.QUEUE_STORE="operationQueue";J.SYNC_STATE_STORE="syncState";var Pe=class{constructor(e){this.indexedDB=e}async enqueue(e){await this.indexedDB.addToQueue(e)}async peek(){let e=await this.indexedDB.getQueue();return e.length>0?e[0]:null}async getAll(){return await this.indexedDB.getQueue()}async remove(e){await this.indexedDB.removeFromQueue(e)}async dequeue(){let e=await this.peek();return e&&await this.remove(e.id),e}async clear(){await this.indexedDB.clearQueue()}async size(){return(await this.getAll()).length}async isEmpty(){return await this.size()===0}async getOperationsForEvent(e){return(await this.getAll()).filter(n=>n.eventId===e)}async removeOperationsForEvent(e){let t=await this.getOperationsForEvent(e);for(let n of t)await this.remove(n.id)}async incrementRetryCount(e){let n=(await this.getAll()).find(r=>r.id===e);n&&(n.retryCount++,await this.remove(e),await this.enqueue(n))}};var Ne=class{constructor(e,t,n,r){this.isOnline=navigator.onLine,this.isSyncing=!1,this.syncInterval=5e3,this.maxRetries=5,this.intervalId=null,this.eventBus=e,this.queue=t,this.indexedDB=n,this.apiRepository=r,this.setupNetworkListeners(),this.startSync(),console.log("SyncManager initialized and started")}setupNetworkListeners(){window.addEventListener("online",()=>{this.isOnline=!0,this.eventBus.emit(v.OFFLINE_MODE_CHANGED,{isOnline:!0}),console.log("SyncManager: Network online - starting sync"),this.startSync()}),window.addEventListener("offline",()=>{this.isOnline=!1,this.eventBus.emit(v.OFFLINE_MODE_CHANGED,{isOnline:!1}),console.log("SyncManager: Network offline - pausing sync"),this.stopSync()})}startSync(){this.intervalId||(console.log("SyncManager: Starting background sync"),this.processQueue(),this.intervalId=window.setInterval(()=>{this.processQueue()},this.syncInterval))}stopSync(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null,console.log("SyncManager: Stopped background sync"))}async processQueue(){if(this.isOnline&&!this.isSyncing&&!await this.queue.isEmpty()){this.isSyncing=!0;try{let e=await this.queue.getAll();this.eventBus.emit(v.SYNC_STARTED,{operationCount:e.length});for(let t of e)await this.processOperation(t);this.eventBus.emit(v.SYNC_COMPLETED,{operationCount:e.length})}catch(e){console.error("SyncManager: Queue processing error:",e),this.eventBus.emit(v.SYNC_FAILED,{error:e instanceof Error?e.message:"Unknown error"})}finally{this.isSyncing=!1}}}async processOperation(e){if(e.retryCount>=this.maxRetries){console.error(`SyncManager: Max retries exceeded for operation ${e.id}`,e),await this.queue.remove(e.id),await this.markEventAsError(e.eventId);return}try{switch(e.type){case"create":await this.apiRepository.sendCreate(e.data);break;case"update":await this.apiRepository.sendUpdate(e.eventId,e.data);break;case"delete":await this.apiRepository.sendDelete(e.eventId);break;default:console.error(`SyncManager: Unknown operation type ${e.type}`),await this.queue.remove(e.id);return}await this.queue.remove(e.id),await this.markEventAsSynced(e.eventId),console.log(`SyncManager: Successfully synced operation ${e.id}`)}catch(t){console.error(`SyncManager: Failed to sync operation ${e.id}:`,t),await this.queue.incrementRetryCount(e.id);let n=this.calculateBackoff(e.retryCount+1);this.eventBus.emit(v.SYNC_RETRY,{operationId:e.id,retryCount:e.retryCount+1,nextRetryIn:n})}}async markEventAsSynced(e){try{let t=await this.indexedDB.getEvent(e);t&&(t.syncStatus="synced",await this.indexedDB.saveEvent(t))}catch(t){console.error(`SyncManager: Failed to mark event ${e} as synced:`,t)}}async markEventAsError(e){try{let t=await this.indexedDB.getEvent(e);t&&(t.syncStatus="error",await this.indexedDB.saveEvent(t))}catch(t){console.error(`SyncManager: Failed to mark event ${e} as error:`,t)}}calculateBackoff(e){let n=Math.pow(2,e)*1e3;return Math.min(n,6e4)}async triggerManualSync(){console.log("SyncManager: Manual sync triggered"),await this.processQueue()}getSyncStatus(){return{isOnline:this.isOnline,isSyncing:this.isSyncing,isRunning:this.intervalId!==null}}destroy(){this.stopSync()}};var Fe=class{render(e,t){let{currentWeek:n,config:r}=t,s=document.createElement("swp-allday-container");e.appendChild(s);let i=r.timeFormatConfig.timezone,a=r.timeFormatConfig.locale;this.dateService=new U(r);let c=r.getWorkWeekSettings(),d=this.dateService.getWorkWeekDates(n,c.workDays),g=r.dateViewSettings.weekDays;d.slice(0,g).forEach((E,m)=>{let u=document.createElement("swp-day-header");this.dateService.isSameDay(E,new Date)&&(u.dataset.today="true");let D=this.dateService.getDayName(E,"long",a).toUpperCase();u.innerHTML=`
<swp-day-name>${D}</swp-day-name>
<swp-day-date>${E.getDate()}</swp-day-date>
`,u.dataset.date=this.dateService.formatISODate(E),e.appendChild(u)})}};var _e=class{constructor(e,t){this.dateService=e,this.workHoursManager=t}render(e,t){let{currentWeek:n,config:r}=t,s=r.getWorkWeekSettings(),i=this.dateService.getWorkWeekDates(n,s.workDays),a=r.dateViewSettings;i.slice(0,a.weekDays).forEach(d=>{let g=document.createElement("swp-day-column");g.dataset.date=this.dateService.formatISODate(d),this.applyWorkHoursToColumn(g,d);let w=document.createElement("swp-events-layer");g.appendChild(w),e.appendChild(g)})}applyWorkHoursToColumn(e,t){let n=this.workHoursManager.getWorkHoursForDate(t);if(n==="off")e.dataset.workHours="off";else{let r=this.workHoursManager.calculateNonWorkHoursStyle(n);r&&(e.style.setProperty("--before-work-height",`${r.beforeWorkHeight}px`),e.style.setProperty("--after-work-top",`${r.afterWorkTop}px`))}}};var Ye=class{constructor(e,t,n,r,s){this.draggedClone=null,this.originalEvent=null,this.dateService=e,this.stackManager=t,this.layoutCoordinator=n,this.config=r,this.positionUtils=s}applyDragStyling(e){e.classList.add("dragging"),e.style.removeProperty("margin-left")}handleDragStart(e){if(this.originalEvent=e.originalElement,this.draggedClone=e.draggedClone,this.draggedClone&&e.columnBounds){this.applyDragStyling(this.draggedClone);let t=e.columnBounds.element.querySelector("swp-events-layer");if(t){t.appendChild(this.draggedClone);let n=this.originalEvent.getBoundingClientRect(),r=e.columnBounds.boundingClientRect,s=n.top-r.top;this.draggedClone.style.top=`${s}px`}}this.originalEvent.style.opacity="0.3",this.originalEvent.style.userSelect="none"}handleDragMove(e){let t=e.draggedClone,n=this.dateService.parseISO(e.columnBounds.date);t.updatePosition(n,e.snappedY)}handleColumnChange(e){let t=e.newColumn.element.querySelector("swp-events-layer");if(t&&e.draggedClone.parentElement!==t){t.appendChild(e.draggedClone);let n=parseFloat(e.draggedClone.style.top)||0,r=e.draggedClone,s=this.dateService.parseISO(e.newColumn.date);r.updatePosition(s,n)}}handleConvertAllDayToTimed(e){console.log("\u{1F3AF} DateEventRenderer: Converting all-day to timed event",{eventId:e.calendarEvent.id,targetColumn:e.targetColumn.date,snappedY:e.snappedY});let t=Q.fromCalendarEvent(e.calendarEvent),n=this.calculateEventPosition(e.calendarEvent);t.style.height=`${n.height-3}px`,t.style.left="2px",t.style.right="2px",t.style.width="auto",t.style.pointerEvents="none",this.applyDragStyling(t);let r=e.targetColumn.element.querySelector("swp-events-layer");e.draggedClone.remove(),e.replaceClone(t),r.appendChild(t)}handleDragEnd(e,t,n,r){if(!t||!e){console.warn("Missing draggedClone or originalElement");return}e.tagName==="SWP-EVENT"&&this.fadeOutAndRemove(e);let s=t.dataset.eventId;s&&s.startsWith("clone-")&&(t.dataset.eventId=s.replace("clone-","")),t.classList.remove("dragging"),t.style.pointerEvents="",this.draggedClone=null,this.originalEvent=null;let i=document.querySelector(`swp-event[data-event-id="clone-${s}"]`);i&&i.remove()}handleNavigationCompleted(){}fadeOutAndRemove(e){e.style.transition="opacity 0.3s ease-out",e.style.opacity="0",setTimeout(()=>{e.remove()},300)}renderEvents(e,t){let n=e.filter(s=>!s.allDay);this.getColumns(t).forEach(s=>{let i=this.getEventsForColumn(s,n),a=s.querySelector("swp-events-layer");a&&this.renderColumnEvents(i,a)})}renderSingleColumnEvents(e,t){let n=this.getEventsForColumn(e.element,t),r=e.element.querySelector("swp-events-layer");r&&this.renderColumnEvents(n,r)}renderColumnEvents(e,t){if(e.length===0)return;let n=this.layoutCoordinator.calculateColumnLayout(e);n.gridGroups.forEach(r=>{this.renderGridGroup(r,t)}),n.stackedEvents.forEach(r=>{let s=this.renderEvent(r.event);this.stackManager.applyStackLinkToElement(s,r.stackLink),this.stackManager.applyVisualStyling(s,r.stackLink.stackLevel),t.appendChild(s)})}renderGridGroup(e,t){let n=document.createElement("swp-event-group"),r=e.columns.length;n.classList.add(`cols-${r}`),n.classList.add(`stack-level-${e.stackLevel}`),n.style.top=`${e.position.top}px`;let s={stackLevel:e.stackLevel};this.stackManager.applyStackLinkToElement(n,s),this.stackManager.applyVisualStyling(n,e.stackLevel);let i=e.events[0];e.columns.forEach(a=>{let c=this.renderGridColumn(a,i.start);n.appendChild(c)}),t.appendChild(n)}renderGridColumn(e,t){let n=document.createElement("div");return n.style.position="relative",e.forEach(r=>{let s=this.renderEventInGrid(r,t);n.appendChild(s)}),n}renderEventInGrid(e,t){let n=Q.fromCalendarEvent(e),r=this.calculateEventPosition(e),i=(e.start.getTime()-t.getTime())/(1e3*60),a=this.config.gridSettings,c=i>0?i/60*a.hourHeight:0;return n.style.position="absolute",n.style.top=`${c}px`,n.style.height=`${r.height-3}px`,n.style.left="0",n.style.right="0",n}renderEvent(e){let t=Q.fromCalendarEvent(e),n=this.calculateEventPosition(e);return t.style.position="absolute",t.style.top=`${n.top+1}px`,t.style.height=`${n.height-3}px`,t.style.left="2px",t.style.right="2px",t}calculateEventPosition(e){return this.positionUtils.calculateEventPosition(e.start,e.end)}clearEvents(e){let t="swp-event",n="swp-event-group",r=e?e.querySelectorAll(t):document.querySelectorAll(t),s=e?e.querySelectorAll(n):document.querySelectorAll(n);r.forEach(i=>i.remove()),s.forEach(i=>i.remove())}getColumns(e){let t=e.querySelectorAll("swp-day-column");return Array.from(t)}getEventsForColumn(e,t){let n=e.dataset.date;if(!n)return[];let r=this.dateService.parseISO(`${n}T00:00:00`),s=this.dateService.parseISO(`${n}T23:59:59.999`);return t.filter(a=>a.start<s&&a.end>r)}};var Ve=class{constructor(){this.container=null,this.originalEvent=null,this.draggedClone=null,this.getContainer()}getContainer(){let e=document.querySelector("swp-calendar-header");return e&&(this.container=e.querySelector("swp-allday-container"),this.container||(this.container=document.createElement("swp-allday-container"),e.appendChild(this.container))),this.container}getAllDayContainer(){return document.querySelector("swp-calendar-header swp-allday-container")}handleDragStart(e){if(this.originalEvent=e.originalElement,this.draggedClone=e.draggedClone,this.draggedClone){let t=this.getAllDayContainer();if(!t)return;this.draggedClone.style.gridColumn=this.originalEvent.style.gridColumn,this.draggedClone.style.gridRow=this.originalEvent.style.gridRow,console.log("handleDragStart:this.draggedClone",this.draggedClone),t.appendChild(this.draggedClone),this.draggedClone.classList.add("dragging"),this.draggedClone.style.zIndex="1000",this.draggedClone.style.cursor="grabbing",this.originalEvent.style.opacity="0.3",this.originalEvent.style.userSelect="none"}}renderAllDayEventWithLayout(e,t){let n=this.getContainer();if(!n)return null;let r=oe.fromCalendarEvent(e);r.applyGridPositioning(t.row,t.startColumn,t.endColumn),r.classList.add("highlight"),n.appendChild(r)}removeAllDayEvent(e){let t=this.getContainer();if(!t)return;let n=t.querySelector(`swp-allday-event[data-event-id="${e}"]`);n&&n.remove()}clearCache(){this.container=null}renderAllDayEventsForPeriod(e){this.clearAllDayEvents(),e.forEach(t=>{this.renderAllDayEventWithLayout(t.calenderEvent,t)})}clearAllDayEvents(){let e=document.querySelector("swp-allday-container");e&&e.querySelectorAll("swp-allday-event:not(.max-event-indicator)").forEach(t=>t.remove())}handleViewChanged(e){this.clearAllDayEvents()}};var ze=class{constructor(e,t,n){this.cachedGridContainer=null,this.cachedTimeAxis=null,this.dateService=t,this.columnRenderer=e,this.config=n}renderGrid(e,t,n="week"){!e||!t||(this.cachedGridContainer=e,e.children.length===0?this.createCompleteGridStructure(e,t,n):this.updateGridContent(e,t,n))}createCompleteGridStructure(e,t,n){let r=document.createDocumentFragment(),s=document.createElement("swp-header-spacer");r.appendChild(s);let i=this.createOptimizedTimeAxis();this.cachedTimeAxis=i,r.appendChild(i);let a=this.createOptimizedGridContainer(t,n);this.cachedGridContainer=a,r.appendChild(a),e.appendChild(r)}createOptimizedTimeAxis(){let e=document.createElement("swp-time-axis"),t=document.createElement("swp-time-axis-content"),n=this.config.gridSettings,r=n.dayStartHour,s=n.dayEndHour,i=document.createDocumentFragment();for(let a=r;a<s;a++){let c=document.createElement("swp-hour-marker"),d=new Date(2024,0,1,a,0);c.textContent=V.formatTime(d),i.appendChild(c)}return t.appendChild(i),t.style.top="-1px",e.appendChild(t),e}createOptimizedGridContainer(e,t){let n=document.createElement("swp-grid-container"),r=document.createElement("swp-calendar-header");n.appendChild(r);let s=document.createElement("swp-scrollable-content"),i=document.createElement("swp-time-grid"),a=document.createElement("swp-grid-lines");i.appendChild(a);let c=document.createElement("swp-day-columns");return this.renderColumnContainer(c,e,t),i.appendChild(c),s.appendChild(i),n.appendChild(s),n}renderColumnContainer(e,t,n){let r={currentWeek:t,config:this.config};this.columnRenderer.render(e,r)}updateGridContent(e,t,n){let r=e.querySelector("swp-day-columns");r&&(r.innerHTML="",this.renderColumnContainer(r,t,n))}createNavigationGrid(e,t){let n=this.createOptimizedGridContainer(t,"week");return n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.width="100%",n.style.height="100%",e.appendChild(n),n}};var qe=class{constructor(e,t){this.eventBus=e,this.setupEventListeners()}setupEventListeners(){this.eventBus.on(v.PERIOD_INFO_UPDATE,e=>{let t=e,{weekNumber:n,dateRange:r}=t.detail;this.updateWeekInfoInDOM(n,r)})}updateWeekInfoInDOM(e,t){let n=document.querySelector("swp-week-number"),r=document.querySelector("swp-date-range");n&&(n.textContent=`Week ${e}`),r&&(r.textContent=t)}applyFilterToPreRenderedGrids(e){document.querySelectorAll("swp-grid-container").forEach(n=>{n.querySelectorAll("swp-events-layer").forEach(s=>{e.active?(s.setAttribute("data-filter-active","true"),s.querySelectorAll("swp-event").forEach(a=>{let c=a.getAttribute("data-event-id");c&&e.matchingIds.includes(c)?a.setAttribute("data-matches","true"):a.removeAttribute("data-matches")})):(s.removeAttribute("data-filter-active"),s.querySelectorAll("swp-event").forEach(a=>{a.removeAttribute("data-matches")}))})})}};var Ge=class{constructor(e,t){this.dateService=e,this.config=t}minutesToPixels(e){let n=this.config.gridSettings.hourHeight;return e/60*n}pixelsToMinutes(e){let n=this.config.gridSettings.hourHeight;return e/n*60}timeToPixels(e){let t=this.dateService.timeToMinutes(e),r=this.config.gridSettings.dayStartHour*60,s=t-r;return this.minutesToPixels(s)}dateToPixels(e){let t=this.dateService.getMinutesSinceMidnight(e),r=this.config.gridSettings.dayStartHour*60,s=t-r;return this.minutesToPixels(s)}pixelsToTime(e){let t=this.pixelsToMinutes(e),s=this.config.gridSettings.dayStartHour*60+t;return this.dateService.minutesToTime(s)}calculateEventPosition(e,t){let n,r;typeof e=="string"?n=this.timeToPixels(e):n=this.dateToPixels(e),typeof t=="string"?r=this.timeToPixels(t):r=this.dateToPixels(t);let s=Math.max(r-n,this.getMinimumEventHeight()),i=this.pixelsToMinutes(s);return{top:n,height:s,duration:i}}snapToGrid(e){let n=this.config.gridSettings.snapInterval,r=this.minutesToPixels(n);return Math.round(e/r)*r}snapTimeToInterval(e){let t=this.dateService.timeToMinutes(e),r=this.config.gridSettings.snapInterval,s=Math.round(t/r)*r;return this.dateService.minutesToTime(s)}calculateColumnPosition(e,t,n){let r=n/t,s=e*r,i=2,a=r-i;return{left:s+i/2,width:Math.max(a,50)}}eventsOverlap(e,t,n,r){let s=this.calculateEventPosition(e,t),i=this.calculateEventPosition(n,r),a=s.top+s.height,c=i.top+i.height;return!(a<=i.top||c<=s.top)}getPositionFromCoordinate(e,t){let n=e-t.boundingClientRect.top;return this.snapToGrid(n)}isWithinWorkHours(e){let[t]=e.split(":").map(Number),n=this.config.gridSettings;return t>=n.workStartHour&&t<n.workEndHour}isWithinDayBounds(e){let[t]=e.split(":").map(Number),n=this.config.gridSettings;return t>=n.dayStartHour&&t<n.dayEndHour}getMinimumEventHeight(){return this.minutesToPixels(15)}getMaximumEventHeight(){let e=this.config.gridSettings;return(e.dayEndHour-e.dayStartHour)*e.hourHeight}getTotalCalendarHeight(){return this.getMaximumEventHeight()}isoToTimeString(e){let t=new Date(e);return V.formatTime(t)}timeStringToIso(e,t=new Date){let n=this.dateService.timeToMinutes(e),r=this.dateService.createDateAtTime(t,n);return this.dateService.toUTC(r)}calculateDuration(e,t){return this.dateService.getDurationMinutes(e,t)}formatDuration(e){if(e<60)return`${e} min`;let t=Math.floor(e/60),n=e%60;return n===0?`${t} time${t!==1?"r":""}`:`${t}t ${n}m`}};var Ue=class{constructor(e,t,n){this.dateService=e,this.config=t,this.positionUtils=n,this.workSchedule={weeklyDefault:{monday:{start:9,end:17},tuesday:{start:9,end:17},wednesday:{start:9,end:17},thursday:{start:9,end:17},friday:{start:9,end:15},saturday:"off",sunday:"off"},dateOverrides:{"2025-01-20":{start:10,end:16},"2025-01-21":{start:8,end:14},"2025-01-22":"off"}}}getWorkHoursForDate(e){let t=this.dateService.formatISODate(e);if(this.workSchedule.dateOverrides[t])return this.workSchedule.dateOverrides[t];let n=this.getDayName(e);return this.workSchedule.weeklyDefault[n]}getWorkHoursForDateRange(e){let t=new Map;return e.forEach(n=>{let r=this.dateService.formatISODate(n),s=this.getWorkHoursForDate(n);t.set(r,s)}),t}calculateNonWorkHoursStyle(e){if(e==="off")return null;let t=this.config.gridSettings,n=t.dayStartHour,r=t.hourHeight,s=(e.start-n)*r,i=(e.end-n)*r;return{beforeWorkHeight:Math.max(0,s),afterWorkTop:Math.max(0,i)}}calculateWorkHoursStyle(e){if(e==="off")return null;let t=`${e.start.toString().padStart(2,"0")}:00`,n=`${e.end.toString().padStart(2,"0")}:00`,r=this.positionUtils.calculateEventPosition(t,n);return{top:r.top,height:r.height}}async loadWorkSchedule(e){this.workSchedule=e}getWorkSchedule(){return this.workSchedule}getDayName(e){return["sunday","monday","tuesday","wednesday","thursday","friday","saturday"][e.getDay()]}};var pe=class o{constructor(e){this.config=e}groupEventsByStartTime(e){if(e.length===0)return[];let n=this.config.gridSettings.gridStartThresholdMinutes,r=[...e].sort((i,a)=>i.start.getTime()-a.start.getTime()),s=[];for(let i of r){let a=s.find(c=>c.events.some(d=>{if(Math.abs(i.start.getTime()-d.start.getTime())/6e4<=n)return!0;let w=(d.end.getTime()-i.start.getTime())/(1e3*60);if(w>0&&w<=n)return!0;let E=(i.end.getTime()-d.start.getTime())/(1e3*60);return E>0&&E<=n}));a?a.events.push(i):s.push({events:[i],containerType:"NONE",startTime:i.start})}return s}decideContainerType(e){return e.events.length===1?"NONE":"GRID"}doEventsOverlap(e,t){return e.start<t.end&&e.end>t.start}createOptimizedStackLinks(e){let t=new Map;if(e.length===0)return t;let n=[...e].sort((r,s)=>r.start.getTime()-s.start.getTime());for(let r of n){let s=n.filter(a=>a!==r&&this.doEventsOverlap(r,a)),i=0;for(let a of s){let c=t.get(a.id);c&&(i=Math.max(i,c.stackLevel+1))}t.set(r.id,{stackLevel:i})}for(let r of n){let s=t.get(r.id),i=n.filter(d=>d!==r&&this.doEventsOverlap(r,d)),a=i.filter(d=>{let g=t.get(d.id);return g&&g.stackLevel===s.stackLevel-1});a.length>0&&(s.prev=a[0].id);let c=i.filter(d=>{let g=t.get(d.id);return g&&g.stackLevel===s.stackLevel+1});c.length>0&&(s.next=c[0].id)}return t}calculateMarginLeft(e){return e*o.STACK_OFFSET_PX}calculateZIndex(e){return 100+e}serializeStackLink(e){return JSON.stringify(e)}deserializeStackLink(e){try{return JSON.parse(e)}catch{return null}}applyStackLinkToElement(e,t){e.dataset.stackLink=this.serializeStackLink(t)}getStackLinkFromElement(e){let t=e.dataset.stackLink;return t?this.deserializeStackLink(t):null}applyVisualStyling(e,t){e.style.marginLeft=`${this.calculateMarginLeft(t)}px`,e.style.zIndex=`${this.calculateZIndex(t)}`}clearStackLinkFromElement(e){delete e.dataset.stackLink}clearVisualStyling(e){e.style.marginLeft="",e.style.zIndex=""}};pe.STACK_OFFSET_PX=15;var je=class{constructor(e,t,n){this.stackManager=e,this.config=t,this.positionUtils=n}calculateColumnLayout(e){if(e.length===0)return{gridGroups:[],stackedEvents:[]};let t=[],n=[],r=[],s=[...e].sort((i,a)=>i.start.getTime()-a.start.getTime());for(;s.length>0;){let i=s[0],c=this.config.gridSettings.gridStartThresholdMinutes,d=this.expandGridCandidates(i,s,c),g={events:d,containerType:"NONE",startTime:i.start};if(this.stackManager.decideContainerType(g)==="GRID"&&d.length>1){let E=this.calculateGridGroupStackLevelFromRendered(d,r),m=[...d].sort((C,k)=>C.start.getTime()-k.start.getTime())[0],u=this.positionUtils.calculateEventPosition(m.start,m.end),D=this.allocateColumns(d);t.push({events:d,stackLevel:E,position:{top:u.top+1},columns:D}),d.forEach(C=>r.push({event:C,level:E})),s=s.filter(C=>!d.includes(C))}else{let E=this.calculateStackLevelFromRendered(i,r),m=this.positionUtils.calculateEventPosition(i.start,i.end);n.push({event:i,stackLink:{stackLevel:E},position:{top:m.top+1,height:m.height-3}}),r.push({event:i,level:E}),s=s.slice(1)}}return{gridGroups:t,stackedEvents:n}}calculateGridGroupStackLevelFromRendered(e,t){let n=-1;for(let r of e)for(let s of t)this.stackManager.doEventsOverlap(r,s.event)&&(n=Math.max(n,s.level));return n+1}calculateStackLevelFromRendered(e,t){let n=-1;for(let r of t)this.stackManager.doEventsOverlap(e,r.event)&&(n=Math.max(n,r.level));return n+1}detectConflict(e,t,n){if(Math.abs(e.start.getTime()-t.start.getTime())/6e4<=n&&this.stackManager.doEventsOverlap(e,t))return!0;let s=(t.end.getTime()-e.start.getTime())/(1e3*60);if(s>0&&s<=n)return!0;let i=(e.end.getTime()-t.start.getTime())/(1e3*60);return i>0&&i<=n}expandGridCandidates(e,t,n){let r=[e],s=!0;for(;s;){s=!1;for(let i=1;i<t.length;i++){let a=t[i];if(!r.includes(a)){for(let c of r)if(this.detectConflict(a,c,n)){r.push(a),s=!0;break}}}}return r}allocateColumns(e){if(e.length===0)return[];if(e.length===1)return[[e[0]]];let t=[];for(let n of e){let r=!1;for(let s of t)if(!s.some(a=>this.stackManager.doEventsOverlap(n,a))){s.push(n),r=!0;break}r||t.push([n])}return t}};async function zt(o,e){try{let t=e.parseEventIdFromURL();t&&(console.log(`Deep linking to event ID: ${t}`),setTimeout(async()=>{await o.navigateToEvent(t)||console.warn(`Deep linking failed: Event with ID ${t} not found`)},500))}catch(t){console.warn("Deep linking failed:",t)}}async function Ot(){try{let o=await fe.load(),t=new ce().builder();b.setDebug(!0),t.registerInstance(b).as("IEventBus"),t.registerInstance(o).as("Configuration"),t.registerType(J).as("IndexedDBService"),t.registerType(Pe).as("OperationQueue").autoWire({mapResolvers:[l=>l.resolveType("IndexedDBService")]}),t.registerType(We).as("ApiEventRepository").autoWire({mapResolvers:[l=>l.resolveType("Configuration")]}),t.registerType(Be).as("IEventRepository").autoWire({mapResolvers:[l=>l.resolveType("IndexedDBService"),l=>l.resolveType("OperationQueue")]}),t.registerType(Ne).as("SyncManager").autoWire({mapResolvers:[l=>l.resolveType("IEventBus"),l=>l.resolveType("OperationQueue"),l=>l.resolveType("IndexedDBService"),l=>l.resolveType("ApiEventRepository")]}),t.registerType(Fe).as("IHeaderRenderer"),t.registerType(_e).as("IColumnRenderer").autoWire({mapResolvers:[l=>l.resolveType("DateService"),l=>l.resolveType("WorkHoursManager")]}),t.registerType(Ye).as("IEventRenderer").autoWire({mapResolvers:[l=>l.resolveType("DateService"),l=>l.resolveType("EventStackManager"),l=>l.resolveType("EventLayoutCoordinator"),l=>l.resolveType("Configuration"),l=>l.resolveType("PositionUtils")]}),t.registerType(U).as("DateService").autoWire({mapResolvers:[l=>l.resolveType("Configuration")]}),t.registerType(pe).as("EventStackManager").autoWire({mapResolvers:[l=>l.resolveType("Configuration")]}),t.registerType(je).as("EventLayoutCoordinator").autoWire({mapResolvers:[l=>l.resolveType("EventStackManager"),l=>l.resolveType("Configuration"),l=>l.resolveType("PositionUtils")]}),t.registerType(Ue).as("WorkHoursManager").autoWire({mapResolvers:[l=>l.resolveType("DateService"),l=>l.resolveType("Configuration"),l=>l.resolveType("PositionUtils")]}),t.registerType(Ee).as("URLManager").autoWire({mapResolvers:[l=>l.resolveType("IEventBus")]}),t.registerType(V).as("TimeFormatter"),t.registerType(Ge).as("PositionUtils").autoWire({mapResolvers:[l=>l.resolveType("DateService"),l=>l.resolveType("Configuration")]}),t.registerType(qe).as("WeekInfoRenderer").autoWire({mapResolvers:[l=>l.resolveType("IEventBus"),l=>l.resolveType("EventRenderingService")]}),t.registerType(Ve).as("AllDayEventRenderer"),t.registerType(Se).as("EventRenderingService").autoWire({mapResolvers:[l=>l.resolveType("IEventBus"),l=>l.resolveType("EventManager"),l=>l.resolveType("IEventRenderer"),l=>l.resolveType("DateService")]}),t.registerType(ze).as("GridRenderer").autoWire({mapResolvers:[l=>l.resolveType("IColumnRenderer"),l=>l.resolveType("DateService"),l=>l.resolveType("Configuration")]}),t.registerType(we).as("GridManager").autoWire({mapResolvers:[l=>l.resolveType("GridRenderer"),l=>l.resolveType("DateService")]}),t.registerType(Ce).as("ScrollManager").autoWire({mapResolvers:[l=>l.resolveType("PositionUtils")]}),t.registerType(Te).as("NavigationManager").autoWire({mapResolvers:[l=>l.resolveType("IEventBus"),l=>l.resolveType("EventRenderingService"),l=>l.resolveType("GridRenderer"),l=>l.resolveType("DateService"),l=>l.resolveType("WeekInfoRenderer")]}),t.registerType(ke).as("NavigationButtons").autoWire({mapResolvers:[l=>l.resolveType("IEventBus")]}),t.registerType(Me).as("ViewSelector").autoWire({mapResolvers:[l=>l.resolveType("IEventBus"),l=>l.resolveType("Configuration")]}),t.registerType(be).as("DragDropManager").autoWire({mapResolvers:[l=>l.resolveType("IEventBus"),l=>l.resolveType("PositionUtils")]}),t.registerType(Ie).as("AllDayManager").autoWire({mapResolvers:[l=>l.resolveType("EventManager"),l=>l.resolveType("AllDayEventRenderer"),l=>l.resolveType("DateService")]}),t.registerType(Oe).as("ResizeHandleManager").autoWire({mapResolvers:[l=>l.resolveType("Configuration"),l=>l.resolveType("PositionUtils")]}),t.registerType(Le).as("EdgeScrollManager").autoWire({mapResolvers:[l=>l.resolveType("IEventBus")]}),t.registerType($e).as("HeaderManager").autoWire({mapResolvers:[l=>l.resolveType("IHeaderRenderer"),l=>l.resolveType("Configuration")]}),t.registerType(Ae).as("CalendarManager").autoWire({mapResolvers:[l=>l.resolveType("IEventBus"),l=>l.resolveType("EventManager"),l=>l.resolveType("GridManager"),l=>l.resolveType("EventRenderingService"),l=>l.resolveType("ScrollManager"),l=>l.resolveType("Configuration")]}),t.registerType(He).as("WorkweekPresets").autoWire({mapResolvers:[l=>l.resolveType("IEventBus"),l=>l.resolveType("Configuration")]}),t.registerType(fe).as("ConfigManager").autoWire({mapResolvers:[l=>l.resolveType("IEventBus"),l=>l.resolveType("Configuration")]}),t.registerType(De).as("EventManager").autoWire({mapResolvers:[l=>l.resolveType("IEventBus"),l=>l.resolveType("DateService"),l=>l.resolveType("Configuration"),l=>l.resolveType("IEventRepository")]});let n=t.build(),r=n.resolveType("IEventBus"),s=n.resolveType("CalendarManager"),i=n.resolveType("EventManager"),a=n.resolveType("ResizeHandleManager"),c=n.resolveType("HeaderManager"),d=n.resolveType("DragDropManager"),g=n.resolveType("ViewSelector"),w=n.resolveType("NavigationManager"),E=n.resolveType("NavigationButtons"),m=n.resolveType("EdgeScrollManager"),u=n.resolveType("AllDayManager"),D=n.resolveType("URLManager"),C=n.resolveType("WorkweekPresets"),k=n.resolveType("ConfigManager");await s.initialize?.(),await a.initialize?.(),await zt(i,D),window.calendarDebug={eventBus:b,app:n,calendarManager:s,eventManager:i,workweekPresetsManager:C}}catch(o){throw o}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{Ot().catch(o=>{console.error("Calendar initialization failed:",o)})}):Ot().catch(o=>{console.error("Calendar initialization failed:",o)});