UNPKG

@mormat/jscheduler_ui

Version:

A javascript scheduler ui component

2 lines 61.7 kB
/*! For license information please see jscheduler_ui.js.LICENSE.txt */ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.jscheduler_ui=t():e.jscheduler_ui=t()}(self,(()=>{return e={11:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.unsafeStringify=void 0;const r=n(746),s=[];for(let e=0;e<256;++e)s.push((e+256).toString(16).slice(1));function a(e,t=0){return(s[e[t+0]]+s[e[t+1]]+s[e[t+2]]+s[e[t+3]]+"-"+s[e[t+4]]+s[e[t+5]]+"-"+s[e[t+6]]+s[e[t+7]]+"-"+s[e[t+8]]+s[e[t+9]]+"-"+s[e[t+10]]+s[e[t+11]]+s[e[t+12]]+s[e[t+13]]+s[e[t+14]]+s[e[t+15]]).toLowerCase()}t.unsafeStringify=a,t.default=function(e,t=0){const n=a(e,t);if(!(0,r.default)(n))throw TypeError("Stringified UUID is invalid");return n}},48:(e,t,n)=>{const{DateRange:r,format_date:s}=n(120),{getEventHeader:a}=n(195);e.exports={createDragAndDropObserver:function({droppable:e,parentElement:t}){switch(e.type){case"days":return function({parentElement:e}){let t=null,n=null;return{onDrag:function({mouseEvent:r,droppable:s}){t=e.cloneNode(!0),t.style.display="none",t.classList.add("jscheduler_ui-dragged"),document.body.appendChild(t),n=s.getClosestChild(r)},onMove:function({mouseEvent:s,draggable:i,droppable:o}){const l="resize_event"===i.type?n:o.getClosestChild(s),{day:u,minhour:d,maxhour:c}=l.getData(s),h=new r(u+" "+d,u+" "+c),f=i.getCurrentValue(),{start:g,end:p}=f,y=Math.max(h.calcPercentPosition(g)/100,0),v=Math.min(h.calcPercentPosition(p)/100,1)-y,m=l.getRect();t.style.position="absolute",t.style.display="block",t.style.left=m.x+"px",t.style.width=m.width+"px",t.style.height=m.height*v+"px",t.style.top=m.y+m.height*y+"px",t.querySelector(".jscheduler_ui-event-header").innerHTML=a(f),e.style.display="none"},onDrop:function(){document.body.removeChild(t),t=null}}}({parentElement:t});case"timeline":return function({parentElement:e}){let t=null;return{onDrag:function({mouseEvent:n}){t=e.cloneNode(!0),t.style.display="none",t.style["max-height"]="22px",t.classList.add("jscheduler_ui-dragged"),document.body.appendChild(t)},onMove:function({mouseEvent:n,draggable:s,droppable:a}){const i=a.getClosestChild(n),o=i.getData(n),l=new r(o.daterange_start,o.daterange_end),u=s.getCurrentValue(),{start:d,end:c}=new r(u.start,u.start).fill(o.column_daterange_type),h=Math.max(l.calcPercentPosition(d)/100,0),f=Math.min(l.calcPercentPosition(c)/100,1)-h,g=i.getRect();t.style.position="absolute",t.style.display="block",t.style.top=g.y+"px",t.style.width=g.width*f+"px",t.style.left=g.x+g.width*h+"px",t.style["min-width"]="50px",e.style.display="none"},onDrop:function({mouseEvent:e}){document.body.removeChild(t),t=null}}}({parentElement:t})}}}},92:(e,t,n)=>{const{DayView:r,WeekView:s,MonthView:a,YearView:i}=n(623),{Day:o,DateRange:l}=n(120),{createViewRenderer:u}=n(807),{SchedulerListener:d}=n(316),c=n(182),{isEventDisplayable:h}=n(195),{StateHandler:f,reduceEvents:g,reduceCurrentDate:p}=n(350),y=function(e){for(const t of e){const{width:e}=t.contentRect;let n="large";e<=768&&(n="medium"),e<=576&&(n="small"),t.target.setAttribute("data-breakpoint",n)}};e.exports={Scheduler:class{#e;#t;#n;#r={};#s;constructor(e,t={},n={}){this.#e=e,this.#t=new f({},{onUpdate:()=>this.refresh(),reducers:[g,p]}),this.#t.update({viewMode:"week",minHour:8,maxHour:19,currentDate:null,events:[],eventsDraggable:!1,eventsResizeable:!1,eventsClickable:!1,eventsEditable:!1,headersVisible:!0,dateLocale:"en",styles:{"min-height":"480px",height:"100%"},...t}),this.#n=new d({onEventDrop:()=>{},onEventResize:()=>{},onEventClick:()=>{},...n},this.#t),this.#n.register(e),t.useBreakpoint&&(this.#s=new ResizeObserver(y),this.#s.observe(this.#e)),this.#e.classList.add("jscheduler_ui")}refresh(){const e=this.#t.values;e.events=e.events.filter(h),"day"===e.viewMode&&(this.#r=new r(e)),"week"===e.viewMode&&(this.#r=new s(e)),"month"===e.viewMode&&(this.#r=new a(e)),"year"===e.viewMode&&(this.#r=new i(e));const t=u(this.#r,e);this.#e.innerHTML=t.render(this.#r)}destroy(){this.#n.unregister(this.#e),this.#s&&this.#s.unobserve(this.#e),this.#e.classList.remove("jscheduler_ui")}setOptions(e){this.#t.update(e)}getOption(e){return this.#t.values[e]}next(){const{currentDate:e,viewMode:t}=this.#t.values;let n=new o(e);"day"===t&&(n=n.addDays(1)),"week"===t&&(n=n.addDays(7)),"month"===t&&(n=n.addMonths(1)),"year"===t&&(n=n.addYears(1)),this.#t.update({currentDate:n.getDate()})}previous(){const{currentDate:e,viewMode:t}=this.#t.values;let n=new o(e);"day"===t&&(n=n.addDays(-1)),"week"===t&&(n=n.addDays(-7)),"month"===t&&(n=n.addMonths(-1)),"year"===t&&(n=n.addYears(-1)),this.#t.update({currentDate:n.getDate()})}today(){this.#t.update({currentDate:Date.now()})}pushEvent(e){const t=e._uuid?e:{...e,_uuid:c.v4()},{events:n}=this.#t.values;return this.#t.update({events:[...n,t]}),t}replaceEvent(e,t){const{events:n}=this.#t.values;this.#t.update({events:n.map((function(n){return[n].find(t)?{...n,...e}:n}))})}removeEvent(e){const{events:t}=this.#t.values;this.#t.update({events:t.filter((function(t){return![t].find(e)}))})}getEventsDateRange(){return this.#r.eventsDateRange}getLabel(){return this.#r.label}}}},120:e=>{const t={yyyy:e=>String(e.getFullYear()),mm:e=>("0"+(e.getMonth()+1)).slice(-2),dd:e=>("0"+e.getDate()).slice(-2),uuu:e=>String(e.getMilliseconds()).padStart(3,"0"),"yyyy-mm":e=>t.yyyy(e)+"-"+t.mm(e),"yyyy-mm-dd":e=>t["yyyy-mm"](e)+"-"+t.dd(e),hh:e=>("0"+e.getHours()).slice(-2),ii:e=>("0"+e.getMinutes()).slice(-2),ss:e=>("0"+e.getSeconds()).slice(-2),"hh:ii":e=>t.hh(e)+":"+t.ii(e),"hh:ii:ss":e=>t.hh(e)+":"+t.ii(e)+":"+t.ss(e),"hh:ii:ss.uuu":e=>t.hh(e)+":"+t.ii(e)+":"+t.ss(e)+"."+t.uuu(e),"yyyy-mm-dd hh:ii":e=>t["yyyy-mm-dd"](e)+" "+t["hh:ii"](e),"yyyy-mm-dd hh:ii:ss":e=>t["yyyy-mm-dd"](e)+" "+t["hh:ii:ss"](e),"yyyy-mm-dd hh:ii:ss.uuu":e=>t["yyyy-mm-dd"](e)+" "+t["hh:ii:ss.uuu"](e)};function n(e,n){const r=new Date(n);return t[e](r)}class r{constructor(e){this.date=new Date(e)}get vars(){return{year:this.date.getFullYear(),monthIndex:this.date.getMonth(),day:this.date.getDate()}}getFirstDayOfWeek(){const e=new Date(this.date);return e.setDate(e.getDate()-e.getDay()+(0===e.getDay()?-6:1)),new r(e)}getLastDayOfWeek(){const e=new Date(this.date);return e.setDate(e.getDate()-e.getDay()+(0===e.getDay()?0:7)),new r(e)}getFirstDayOfMonth(){const e=new Date(this.date);return e.setDate(1),new r(e)}getLastDayOfMonth(){const e=new Date(this.date);return e.setDate(1),e.setMonth(e.getMonth()+1),e.setDate(e.getDate()-1),new r(e)}addDays(e){const t=new Date(this.date);return t.setDate(this.date.getDate()+e),new r(t)}addMonths(e){const t=new Date(this.date);return t.setMonth(this.date.getMonth()+e),new r(t)}addYears(e){const t=new Date(this.date);return t.setYear(t.getFullYear()+e),new r(t)}getDate(){return this.date}get numday(){return this.date.getDate()}get month(){return this.date.getMonth()}toString(){return t["yyyy-mm-dd"](this.date)}}class s{constructor(e,t){this.start=new Date(e),this.end=new Date(t)}static fromObject({start:e,end:t}){return new s(e,t)}static createForMonth(e){const t=n("yyyy-mm",e)+"-01 00:00:00.000",r=new Date(t);return r.setMonth(r.getMonth()+1),r.setTime(r.getTime()-1),new s(t,r)}get length(){return this.end.getTime()-this.start.getTime()}contains(e){const t=new Date(e.start),n=new Date(e.end);return this.start<=t&&n<=this.end}intersects(e){const t=new Date(e.start),n=new Date(e.end);return n<this.start||this.end<t?null:new s(Math.max(this.start.getTime(),t.getTime()),Math.min(this.end.getTime(),n.getTime()))}calcPercentPosition(e){const t=new Date(e),n=this.end.getTime()-this.start.getTime();return 100*(t.getTime()-this.start.getTime())/n}countDays(){return Math.round(this.length/864e5)}getWeeks(){const e=new r(this.start),t=new r(this.end),n=[];let s=e.getFirstDayOfWeek(),a=t.getLastDayOfWeek();for(;s<=a;){const e=[s];for(let t=1;t<7;t++)e.push(e[0].addDays(t));n.push(e),s=s.addDays(7)}return n}fill(e){if("month"===e){const e=new Date(this.end);return e.setDate(1),e.setMonth(e.getMonth()+1),e.setDate(e.getDate()-1),new s(n("yyyy-mm",this.start)+"-01 00:00:00.000",n("yyyy-mm-dd",e)+" 23:59:59.999")}if("day_hour"===e){const e=new Date(this.start),t=new Date(this.end);return e.setMinutes(0),0==t.getMinutes()&&t.setHours(t.getHours()-1),t.setMinutes(59),new s(n("yyyy-mm-dd hh:ii",e)+":00.000",n("yyyy-mm-dd hh:ii",t)+":59.999")}if("day"===e)return new s(new r(this.start)+" 00:00:00.000",new r(this.end)+" 23:59:59.999")}}function a(e){const t=[],n=new Set;for(const r of e){if(n.has(r))continue;const s=e.filter((e=>e!==r&&r.intersects(e)));if(s.length){const e=a(s);for(const n of e)t.push([r,...n]);for(const e of s)n.add(e)}else t.push([r])}return t}function i(e){const t=new Map,n=e.sort(((e,t)=>t.length-e.length));for(const e of n){let n=1/e.length,r=0;for(const s in e)if(t.has(e[s])){const a=t.get(e[s]);r=a.offset+a.length,n=(1-r)/(e.length-s-1)}else t.set(e[s],{offset:r,length:n}),r+=n}return t}class o{#a;constructor(e){this.#a=e}with(e,t){return"month"===e?new o(n("yyyy-mm",t)+"-"+n("dd",this.#a)+" "+n("hh:ii:ss.uuu",this.#a)):"day"===e?new o(n("yyyy-mm-dd",t)+" "+n("hh:ii:ss.uuu",this.#a)):"day_hour"===e?new o(n("yyyy-mm-dd",t)+" "+n("hh",t)+":"+n("ii",this.#a)+":"+n("ss",this.#a)+"."+n("uuu",this.#a)):void 0}toString(){return n("yyyy-mm-dd hh:ii:ss.uuu",this.#a)}}e.exports={format_date:n,DateRange:s,Day:r,date_add_hour:function(e,t){const n=new Date(e);return n.setTime(n.getTime()+60*t*60*1e3),n},groupDateRangedItemsByPosition:function(e){const t=[];e:for(const n of e){const e=new s(n.start,n.end-1);for(const r in t)if(!t[r].find((t=>{const n=new s(t.start,t.end-1);return e.intersects(n)}))){t[r].push(n);continue e}t.push([n])}return t},getOffsetAndLengthByDateRanges:function(e){return i(a(e))},_groupDateRanges:a,_mapGroupedDateRanges:i,getWeekDays:function({dateLocale:e="en"}={}){const t=[];for(let n=0;n<7;n++){const r=new Date("1970-01-01");r.setDate(n+5),t.push(r.toLocaleString(e,{weekday:"short"}))}return t},DateStringFormatter:o}},182:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.version=t.validate=t.v7=t.v6ToV1=t.v6=t.v5=t.v4=t.v3=t.v1ToV6=t.v1=t.stringify=t.parse=t.NIL=t.MAX=void 0;var r=n(196);Object.defineProperty(t,"MAX",{enumerable:!0,get:function(){return r.default}});var s=n(465);Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return s.default}});var a=n(797);Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return a.default}});var i=n(11);Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return i.default}});var o=n(425);Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return o.default}});var l=n(568);Object.defineProperty(t,"v1ToV6",{enumerable:!0,get:function(){return l.default}});var u=n(591);Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return u.default}});var d=n(286);Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return d.default}});var c=n(557);Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return c.default}});var h=n(356);Object.defineProperty(t,"v6",{enumerable:!0,get:function(){return h.default}});var f=n(268);Object.defineProperty(t,"v6ToV1",{enumerable:!0,get:function(){return f.default}});var g=n(299);Object.defineProperty(t,"v7",{enumerable:!0,get:function(){return g.default}});var p=n(746);Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return p.default}});var y=n(770);Object.defineProperty(t,"version",{enumerable:!0,get:function(){return y.default}})},195:(e,t,n)=>{const{date_add_hour:r,format_date:s}=n(120),a=n(182);e.exports={compareSchedulerEventsByDaysCount:function(e,t){const n=864e5,r=Math.round(Math.abs((e.end-e.start)/n));return Math.round(Math.abs((t.end-t.start)/n))-r},withEventDefaultValues:function(e){const t={bgColor:"#0288d1",color:"white",start:null,end:null,...e};t._uuid||(t._uuid=a.v4());for(const e of["start","end"])t[e]&&(t[e]=new Date(t[e]));return!t.end&&t.start&&(t.end=r(t.start,2)),t},isEventDisplayable:function(e){if(!e.label||!e.start||!e.end)return!1;const t=new Date(e.start),n=new Date(e.end);return!(isNaN(t)||isNaN(n)||n.getTime()<t.getTime())},getEventHeader:function({start:e,end:t}){return[e,t].map((e=>s("hh:ii",e))).join(" - ")}}},196:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default="ffffffff-ffff-ffff-ffff-ffffffffffff"},268:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(797),s=n(11);t.default=function(e){const t=(n="string"==typeof e?(0,r.default)(e):e,Uint8Array.of((15&n[3])<<4|n[4]>>4&15,(15&n[4])<<4|(240&n[5])>>4,(15&n[5])<<4|15&n[6],n[7],(15&n[1])<<4|(240&n[2])>>4,(15&n[2])<<4|(240&n[3])>>4,16|(240&n[0])>>4,(15&n[0])<<4|(240&n[1])>>4,n[8],n[9],n[10],n[11],n[12],n[13],n[14],n[15]));var n;return"string"==typeof e?(0,s.unsafeStringify)(t):t}},271:(e,t,n)=>{const{Rectangle:r,calcDistance:s}=n(420);class a{#e;constructor(e){this.#e=e}getData(e){const t={...this.#e.dataset};if(e){const{x:n,y:r,width:s,height:a}=this.getRect();t.percentX=100*(e.pageX-n)/s,t.percentY=100*(e.pageY-r)/a}return t}getRect(){const{x:e,y:t,width:n,height:r}=this.#e.getBoundingClientRect();return{x:e+window.scrollX,y:t+window.scrollY,width:n,height:r}}}class i{#i;#o;constructor(e,t){this.#i=e,this.#o=t}get type(){return this.#o}getChildren(){this.#i}getData(e){const t=this.getClosestChild(e);return t?t.getData(e):{}}getRect(){const e=[];for(let t of this.#i)e.push(t.getRect());return r.createBounding(e)}getClosestChild(e){const t={x:e.pageX,y:e.pageY},n={},a=[];for(let e of this.#i){const i=new r(e.getRect());if(!i)continue;const o=s(t,i.getCenter());a.push(o),n[o]=e}return n[Math.min(...a)]}}class o{#i;#o;constructor(e,t){this.#i=e,this.#o=t}get type(){return this.#o}getChildren(){this.#i}getData(e){const t=this.getClosestChild(e);return t?t.getData(e):{}}getRect(){const e=[];for(let t of this.#i)e.push(t.getRect());return r.createBounding(e)}getClosestChild(e){e.pageX;const t=e.pageY,n={},s=[];for(let e of this.#i){const a=new r(e.getRect()),i=Math.abs(t-(a.y+a.height/2));s.push(i),n[i]=e}return n[Math.min(...s)]}}e.exports={createDroppable:function({draggableElement:e}){const t=e.getAttribute("data-jscheduler_ui-droppable-target"),n=document.querySelector(t),r=n.getAttribute("data-jscheduler_ui-droppable-type");switch(r){case"days":{const e=[...n.querySelectorAll("td[data-jscheduler_ui-day]")];return new i(e.map((e=>new a(e))),r)}case"timeline":{const e=[...n.querySelectorAll("[data-daterange_start][data-daterange_end]")];return new o(e.map((e=>new a(e))),r)}}}}},284:e=>{e.exports={composeMaps:function(e,t){const n=new Map;for(const[r,s]of e.entries())n.set(r,t.get(s));return n}}},286:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(779),s=n(291),a=n(11);t.default=function(e,t,n){if(r.default.randomUUID&&!t&&!e)return r.default.randomUUID();const i=(e=e||{}).random??e.rng?.()??(0,s.default)();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){if((n=n||0)<0||n+16>t.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let e=0;e<16;++e)t[n+e]=i[e];return t}return(0,a.unsafeStringify)(i)}},291:(e,t)=>{"use strict";let n;Object.defineProperty(t,"__esModule",{value:!0});const r=new Uint8Array(16);t.default=function(){if(!n){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");n=crypto.getRandomValues.bind(crypto)}return n(r)}},299:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.updateV7State=void 0;const r=n(291),s=n(11),a={};function i(e,t,n){return e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=n[6]<<23|n[7]<<16|n[8]<<8|n[9],e.msecs=t):(e.seq=e.seq+1|0,0===e.seq&&e.msecs++),e}function o(e,t,n,r,s=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(r){if(s<0||s+16>r.length)throw new RangeError(`UUID byte range ${s}:${s+15} is out of buffer bounds`)}else r=new Uint8Array(16),s=0;return t??=Date.now(),n??=127*e[6]<<24|e[7]<<16|e[8]<<8|e[9],r[s++]=t/1099511627776&255,r[s++]=t/4294967296&255,r[s++]=t/16777216&255,r[s++]=t/65536&255,r[s++]=t/256&255,r[s++]=255&t,r[s++]=112|n>>>28&15,r[s++]=n>>>20&255,r[s++]=128|n>>>14&63,r[s++]=n>>>6&255,r[s++]=n<<2&255|3&e[10],r[s++]=e[11],r[s++]=e[12],r[s++]=e[13],r[s++]=e[14],r[s++]=e[15],r}t.updateV7State=i,t.default=function(e,t,n){let l;if(e)l=o(e.random??e.rng?.()??(0,r.default)(),e.msecs,e.seq,t,n);else{const e=Date.now(),s=(0,r.default)();i(a,e,s),l=o(s,a.msecs,a.seq,t,n)}return t??(0,s.unsafeStringify)(l)}},316:(e,t,n)=>{const{createDragAndDropObserver:r}=n(48),{createDroppable:s}=n(271),{createDraggable:a}=n(903);e.exports={SchedulerListener:function(e,t){const{onEventDrop:n,onEventResize:i,onEventClick:o,onEventEdit:l}=e;function u(){const{events:e}=t.values;return e}function d(e){const{events:n}=t.values;t.update({events:n.map((t=>t._uuid!==e._uuid?t:e))})}function c(e){if(g(e,".jscheduler_ui-event-edit")){e.preventDefault();const t=e.target.closest(".jscheduler_ui-event"),n=u().find((function({_uuid:e}){return t.dataset.eventUuid===e}));n&&l(n)}else if(g(e,".jscheduler_ui-event a")){e.preventDefault();const t=e.target.closest(".jscheduler_ui-event"),n=u().find((function({_uuid:e}){return t.dataset.eventUuid===e}));n&&o(n)}}function h(e){if(g(e,".jscheduler_ui-event .jscheduler_ui-resize-handler")){e.preventDefault();const t=e.target.closest(".jscheduler_ui-event"),n=u().find((function({_uuid:e}){return t.dataset.eventUuid===e})),o=s({draggableElement:t}),l=a("resize_event",{onChange:function(e,t){d(e),i(e,t)},schedulerEvent:n}),c=r({droppable:o,parentElement:t});l.startDragAndDrop({mouseEvent:e,observer:c,droppable:o})}}function f(e){if(g(e,".jscheduler_ui-event .jscheduler_ui-draggable")){e.preventDefault();const t=e.target.closest(".jscheduler_ui-event"),i=u().find((function({_uuid:e}){return t.dataset.eventUuid===e})),o=s({draggableElement:t}),l=a(t.matches(".jscheduler_ui-event-timeline")?"move_event_timeline":"move_event_day",{onChange:function(e,t){d(e),n(e,t)},schedulerEvent:i}),c=r({droppable:o,parentElement:t});l.startDragAndDrop({mouseEvent:e,observer:c,droppable:o})}}function g(e,t){for(const n of e.composedPath())if(n instanceof Element&&n.matches(t))return!0}this.register=function(e){e.addEventListener("click",c),e.addEventListener("mousedown",h),e.addEventListener("mousedown",f)},this.unregister=function(e){e.removeEventListener("click",c),e.removeEventListener("mousedown",h),e.removeEventListener("mousedown",f)}}}},338:(e,t)=>{"use strict";function n(e){return 14+(e+64>>>9<<4)+1}function r(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function s(e,t,n,s,a,i){return r((o=r(r(t,e),r(s,i)))<<(l=a)|o>>>32-l,n);var o,l}function a(e,t,n,r,a,i,o){return s(t&n|~t&r,e,t,a,i,o)}function i(e,t,n,r,a,i,o){return s(t&r|n&~r,e,t,a,i,o)}function o(e,t,n,r,a,i,o){return s(t^n^r,e,t,a,i,o)}function l(e,t,n,r,a,i,o){return s(n^(t|~r),e,t,a,i,o)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return function(e){const t=new Uint8Array(4*e.length);for(let n=0;n<4*e.length;n++)t[n]=e[n>>2]>>>n%4*8&255;return t}(function(e,t){const s=new Uint32Array(n(t)).fill(0);s.set(e),s[t>>5]|=128<<t%32,s[s.length-1]=t,e=s;let u=1732584193,d=-271733879,c=-1732584194,h=271733878;for(let t=0;t<e.length;t+=16){const n=u,s=d,f=c,g=h;u=a(u,d,c,h,e[t],7,-680876936),h=a(h,u,d,c,e[t+1],12,-389564586),c=a(c,h,u,d,e[t+2],17,606105819),d=a(d,c,h,u,e[t+3],22,-1044525330),u=a(u,d,c,h,e[t+4],7,-176418897),h=a(h,u,d,c,e[t+5],12,1200080426),c=a(c,h,u,d,e[t+6],17,-1473231341),d=a(d,c,h,u,e[t+7],22,-45705983),u=a(u,d,c,h,e[t+8],7,1770035416),h=a(h,u,d,c,e[t+9],12,-1958414417),c=a(c,h,u,d,e[t+10],17,-42063),d=a(d,c,h,u,e[t+11],22,-1990404162),u=a(u,d,c,h,e[t+12],7,1804603682),h=a(h,u,d,c,e[t+13],12,-40341101),c=a(c,h,u,d,e[t+14],17,-1502002290),d=a(d,c,h,u,e[t+15],22,1236535329),u=i(u,d,c,h,e[t+1],5,-165796510),h=i(h,u,d,c,e[t+6],9,-1069501632),c=i(c,h,u,d,e[t+11],14,643717713),d=i(d,c,h,u,e[t],20,-373897302),u=i(u,d,c,h,e[t+5],5,-701558691),h=i(h,u,d,c,e[t+10],9,38016083),c=i(c,h,u,d,e[t+15],14,-660478335),d=i(d,c,h,u,e[t+4],20,-405537848),u=i(u,d,c,h,e[t+9],5,568446438),h=i(h,u,d,c,e[t+14],9,-1019803690),c=i(c,h,u,d,e[t+3],14,-187363961),d=i(d,c,h,u,e[t+8],20,1163531501),u=i(u,d,c,h,e[t+13],5,-1444681467),h=i(h,u,d,c,e[t+2],9,-51403784),c=i(c,h,u,d,e[t+7],14,1735328473),d=i(d,c,h,u,e[t+12],20,-1926607734),u=o(u,d,c,h,e[t+5],4,-378558),h=o(h,u,d,c,e[t+8],11,-2022574463),c=o(c,h,u,d,e[t+11],16,1839030562),d=o(d,c,h,u,e[t+14],23,-35309556),u=o(u,d,c,h,e[t+1],4,-1530992060),h=o(h,u,d,c,e[t+4],11,1272893353),c=o(c,h,u,d,e[t+7],16,-155497632),d=o(d,c,h,u,e[t+10],23,-1094730640),u=o(u,d,c,h,e[t+13],4,681279174),h=o(h,u,d,c,e[t],11,-358537222),c=o(c,h,u,d,e[t+3],16,-722521979),d=o(d,c,h,u,e[t+6],23,76029189),u=o(u,d,c,h,e[t+9],4,-640364487),h=o(h,u,d,c,e[t+12],11,-421815835),c=o(c,h,u,d,e[t+15],16,530742520),d=o(d,c,h,u,e[t+2],23,-995338651),u=l(u,d,c,h,e[t],6,-198630844),h=l(h,u,d,c,e[t+7],10,1126891415),c=l(c,h,u,d,e[t+14],15,-1416354905),d=l(d,c,h,u,e[t+5],21,-57434055),u=l(u,d,c,h,e[t+12],6,1700485571),h=l(h,u,d,c,e[t+3],10,-1894986606),c=l(c,h,u,d,e[t+10],15,-1051523),d=l(d,c,h,u,e[t+1],21,-2054922799),u=l(u,d,c,h,e[t+8],6,1873313359),h=l(h,u,d,c,e[t+15],10,-30611744),c=l(c,h,u,d,e[t+6],15,-1560198380),d=l(d,c,h,u,e[t+13],21,1309151649),u=l(u,d,c,h,e[t+4],6,-145523070),h=l(h,u,d,c,e[t+11],10,-1120210379),c=l(c,h,u,d,e[t+2],15,718787259),d=l(d,c,h,u,e[t+9],21,-343485551),u=r(u,n),d=r(d,s),c=r(c,f),h=r(h,g)}return Uint32Array.of(u,d,c,h)}(function(e){if(0===e.length)return new Uint32Array;const t=new Uint32Array(n(8*e.length)).fill(0);for(let n=0;n<e.length;n++)t[n>>2]|=(255&e[n])<<n%4*8;return t}(e),8*e.length))}},350:(e,t,n)=>{const{withEventDefaultValues:r,isEventDisplayable:s}=n(195);e.exports={StateHandler:class{#l;#u;#d;constructor(e,t={}){this.#l={...e},this.#u=t.onUpdate||(()=>{}),this.#d=t.reducers||[]}get values(){return this.#l}update(e){const t=this.#d.reduce(((e,t)=>({...e,...t(e)})),e);this.#l={...this.#l,...t},this.#u(this)}},reduceEvents:function(e){return"events"in e?{events:e.events.map(r)}:{}},reduceCurrentDate:function(e){if("currentDate"in e){if(e.currentDate)return{};const{events:t}=e;if(t){const e=t.filter(s).map((e=>new Date(e.start)));if(e.length)return{currentDate:Math.min(...e.map((e=>e.getTime())))}}return{currentDate:Date.now()}}return{}}}},356:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(11),s=n(425),a=n(568);t.default=function(e,t,n){e??={},n??=0;let i=(0,s.default)({...e,_v6:!0},new Uint8Array(16));if(i=(0,a.default)(i),t){for(let e=0;e<16;e++)t[n+e]=i[e];return t}return(0,r.unsafeStringify)(i)}},420:e=>{class t{x;y;width;height;constructor({x:e,y:t,width:n,height:r}){this.x=e,this.y=t,this.width=n,this.height=r}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}contains(e){return this.x<=e.x&&this.y<=e.y&&e.x+e.width<=this.x+this.width&&e.y+e.height<=this.y+this.height}includes(e){return this.x<=e.x&&this.y<=e.y&&e.x<=this.x+this.width&&e.y<=this.y+this.height}getCenter(){return{x:this.x+this.width/2,y:this.y+this.height/2}}intersectsWith(e){return!(e.x>this.x+this.width||e.x+e.width<this.x||e.y>this.y+this.height||e.y+e.height<this.y)}static createBounding(e){const n=Math.min(...e.map((e=>e.x))),r=Math.min(...e.map((e=>e.y))),s=Math.max(...e.map((e=>e.x+e.width))),a=Math.max(...e.map((e=>e.y+e.height)));return new t({x:n,y:r,width:s-n,height:a-r})}}e.exports={Rectangle:t,calcDistance:function(e,t){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}}},425:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.updateV1State=void 0;const r=n(291),s=n(11),a={};function i(e,t,n){return e.msecs??=-1/0,e.nsecs??=0,t===e.msecs?(e.nsecs++,e.nsecs>=1e4&&(e.node=void 0,e.nsecs=0)):t>e.msecs?e.nsecs=0:t<e.msecs&&(e.node=void 0),e.node||(e.node=n.slice(10,16),e.node[0]|=1,e.clockseq=16383&(n[8]<<8|n[9])),e.msecs=t,e}function o(e,t,n,r,s,a,i=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(a){if(i<0||i+16>a.length)throw new RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`)}else a=new Uint8Array(16),i=0;t??=Date.now(),n??=0,r??=16383&(e[8]<<8|e[9]),s??=e.slice(10,16);const o=(1e4*(268435455&(t+=122192928e5))+n)%4294967296;a[i++]=o>>>24&255,a[i++]=o>>>16&255,a[i++]=o>>>8&255,a[i++]=255&o;const l=t/4294967296*1e4&268435455;a[i++]=l>>>8&255,a[i++]=255&l,a[i++]=l>>>24&15|16,a[i++]=l>>>16&255,a[i++]=r>>>8|128,a[i++]=255&r;for(let e=0;e<6;++e)a[i++]=s[e];return a}t.updateV1State=i,t.default=function(e,t,n){let l;const u=e?._v6??!1;if(e){const t=Object.keys(e);1===t.length&&"_v6"===t[0]&&(e=void 0)}if(e)l=o(e.random??e.rng?.()??(0,r.default)(),e.msecs,e.nsecs,e.clockseq,e.node,t,n);else{const e=Date.now(),s=(0,r.default)();i(a,e,s),l=o(s,a.msecs,a.nsecs,u?void 0:a.clockseq,u?void 0:a.node,t,n)}return t??(0,s.unsafeStringify)(l)}},465:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default="00000000-0000-0000-0000-000000000000"},466:(e,t,n)=>{const{Scheduler:r}=n(92),{format_date:s,Day:a}=n(120),i={format_date:s,Day:a};e.exports={render:function(e,t){const n=Array.isArray(t)?{events:t}:t,s={},a={};for(const[e,t]of Object.entries(n))e.startsWith("on")?a[e]=t:s[e]=t;return new r(e,s,a)},utils:i,name:"@mormat/jscheduler_ui",version:"0.9.7"}},557:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0;const r=n(829),s=n(988);var a=n(988);function i(e,t,n,a){return(0,s.default)(80,r.default,e,t,n,a)}Object.defineProperty(t,"DNS",{enumerable:!0,get:function(){return a.DNS}}),Object.defineProperty(t,"URL",{enumerable:!0,get:function(){return a.URL}}),i.DNS=s.DNS,i.URL=s.URL,t.default=i},568:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(797),s=n(11);t.default=function(e){const t=(n="string"==typeof e?(0,r.default)(e):e,Uint8Array.of((15&n[6])<<4|n[7]>>4&15,(15&n[7])<<4|(240&n[4])>>4,(15&n[4])<<4|(240&n[5])>>4,(15&n[5])<<4|(240&n[0])>>4,(15&n[0])<<4|(240&n[1])>>4,(15&n[1])<<4|(240&n[2])>>4,96|15&n[2],n[3],n[8],n[9],n[10],n[11],n[12],n[13],n[14],n[15]));var n;return"string"==typeof e?(0,s.unsafeStringify)(t):t}},591:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0;const r=n(338),s=n(988);var a=n(988);function i(e,t,n,a){return(0,s.default)(48,r.default,e,t,n,a)}Object.defineProperty(t,"DNS",{enumerable:!0,get:function(){return a.DNS}}),Object.defineProperty(t,"URL",{enumerable:!0,get:function(){return a.URL}}),i.DNS=s.DNS,i.URL=s.URL,t.default=i},623:(e,t,n)=>{const{Day:r,DateRange:s,format_date:a,getWeekDays:i}=n(120);class o{#c;#h;#f;#g;#p;#y;constructor({eventsDateRange:e,minHour:t,maxHour:n,dateLocale:r,events:s,groups:a=[]}){this.#c=e,this.#h=t,this.#f=n,this.#g=r,this.#p=s,this.#y=a}get eventsDateRange(){return this.#c}get minHour(){return Math.max(0,this.#h)}get maxHour(){return this.#f}get dateLocale(){return this.#g}get hours(){const e=Math.max(0,this.#h),t=Math.min(23,this.#f);return t<e?[]:[...Array(t-e+1)].map(((t,n)=>n+e))}get days(){const e=new r(this.#c.end),t=[new r(this.#c.start)];for(;t.at(-1)<e;)t.push(t.at(-1).addDays(1));return t}get vars(){const{eventsDateRange:e,minHour:t,maxHour:n}=this,r=this.#p.filter((t=>e.intersects(t))),a=this.hours.map((e=>({label:String(e).padStart(2,"0")+":00",value:e}))),i=this.days.map((e=>{const t=new s(e+` ${this.#h}:00:00`,e+` ${this.#f+1}:00:00`),n=new Date(e).toLocaleString(this.#g,{weekday:"short",month:"short",day:"numeric"});return{value:e,events:r.filter((e=>t.contains(e))),label:n,dateRange:t}})),o=r.filter((function(e){return-1===i.findIndex((t=>t.events.includes(e)))}));return{hours:a,days:i,spannedEvents:o,minHour:t,maxHour:n,eventsDateRange:e,groups:this.#y}}}e.exports={DayView:class extends o{constructor({currentDate:e,...t}){const n=new r(e||Date.now());super({eventsDateRange:new s(n+" 00:00:00",n+" 23:59:59.999"),...t})}get label(){const{start:e}=this.eventsDateRange;return e.toLocaleString(this.dateLocale,{weekday:"long",month:"long",day:"numeric",year:"numeric"})}},WeekView:class extends o{constructor({currentDate:e,...t}){const n=new r(e||Date.now()).getFirstDayOfWeek(),a=n.addDays(6);super({eventsDateRange:new s(n+" 00:00:00",a+" 23:59:59.999"),...t})}get label(){const{start:e,end:t}=this.eventsDateRange;return e.toLocaleString(this.dateLocale,{month:"short",day:"numeric",year:"numeric"})+" - "+t.toLocaleString(this.dateLocale,{month:"short",day:"numeric",year:"numeric"})}},MonthView:class{#v;#g;#p;#y;constructor({currentDate:e,dateLocale:t,events:n,groups:r}){this.#v=e,this.#g=t,this.#p=n,this.#y=r}get eventsDateRange(){const e=new r(this.#v),t=e.getFirstDayOfMonth().getFirstDayOfWeek(),n=e.getLastDayOfMonth().getLastDayOfWeek();return new s(t+" 00:00:00",n+" 23:59:59.999")}get label(){return new Date(this.#v).toLocaleString(this.#g,{month:"long",year:"numeric"})}get weeks(){const e=this.eventsDateRange,t=[];let n=new r(e.start),s=new r(e.end);for(;n<=s;){const e=[n];for(let t=1;t<7;t++)e.push(e[0].addDays(t));t.push(e),n=n.addDays(7)}return t}get vars(){const e=new r(this.#v),t=this.weeks.map((t=>{const n=new s(t.at(0)+" 00:00:00",t.at(-1)+" 23:59:59.999"),r=this.#p.filter((e=>n.intersects(e)));return{days:t.map((t=>({numday:t.numday,value:t,isCurrentMonth:t.month===e.month}))),dateRange:n,events:r}}));return{weekdays:t[0].days.map((({value:e})=>e.date.toLocaleString(this.#g,{weekday:"short"}))),weeks:t,groups:this.#y}}},YearView:class{#v;#g;#p;#y;constructor({currentDate:e,dateLocale:t,events:n,groups:r=[]}){this.#v=e,this.#g=t,this.#p=n,this.#y=r}get label(){return a("yyyy",this.#v)}get eventsDateRange(){const e=a("yyyy",this.#v);return new s(e+"-01-01 00:00:00.000",e+"-12-31 23:59:59.999")}get vars(){const e=[],t=[];for(let e=1;e<=12;e++){const n=s.createForMonth(a("yyyy",this.#v)+"-"+e+"-01");let r=n.start.toLocaleString(this.#g,{month:"long"});r=r[0].toUpperCase()+r.substring(1);const i=n.getWeeks(),o=[];for(let e=1;e<=n.countDays();e++){const t=a("yyyy-mm",n.start)+"-"+e,r=new Date(t),s=[0,6].includes(r.getDay());o.push({day_of_month:e,is_dayoff:s})}const l=n.start.getDay()||7,u=this.#p.filter((e=>n.intersects(e)));t.push({text:r,dateRange:n,weeks:i,monthdays:o,startDay:l,events:u})}const n=Math.max(...t.map((e=>e.weeks.length)));for(let r=1;r<=n;r++){let s=i({dateLocale:this.#g});if(r===n){const e=Math.max(...t.filter((e=>e.weeks.length===n)).map((e=>e.dateRange.end.getDay()||7)));s=s.filter(((t,n)=>n<e))}e.push(...s.map((function(e,t){return{text:e.substring(0,1).toUpperCase(),numday_in_week:t+1}})))}return{days:e,months:t,groups:this.#y}}}}},697:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i},746:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(697);t.default=function(e){return"string"==typeof e&&r.default.test(e)}},770:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(746);t.default=function(e){if(!(0,r.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}},779:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n="undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);t.default={randomUUID:n}},797:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(746);t.default=function(e){if(!(0,r.default)(e))throw TypeError("Invalid UUID");let t;return Uint8Array.of((t=parseInt(e.slice(0,8),16))>>>24,t>>>16&255,t>>>8&255,255&t,(t=parseInt(e.slice(9,13),16))>>>8,255&t,(t=parseInt(e.slice(14,18),16))>>>8,255&t,(t=parseInt(e.slice(19,23),16))>>>8,255&t,(t=parseInt(e.slice(24,36),16))/1099511627776&255,t/4294967296&255,t>>>24&255,t>>>16&255,t>>>8&255,255&t)}},807:(e,t,n)=>{const{Day:r,format_date:s,DateRange:a}=n(120),{groupDateRangedItemsByPosition:i}=n(120),{getOffsetAndLengthByDateRanges:o}=n(120),{composeMaps:l}=n(284),{compareSchedulerEventsByDaysCount:u}=n(195),d=n(965),{DayView:c,WeekView:h,MonthView:f,YearView:g}=n(623),{getEventHeader:p}=n(195),y={events_row:'<div data-daterange_start = "{{ dateRange.start }}" data-daterange_end = "{{ dateRange.end }}" style = "width: 100%; height: {{ style.height }}; position: relative " {{# attrs }}{{key}}="{{value}}" {{/ attrs }} > {{# for_each_events }} <div class = "jscheduler_ui-event jscheduler_ui-event-timeline {{ className }}" style = " position: absolute; top: {{ style.top }}; left: {{ style.left }}; right: {{ style.right }}; height: {{ style.height }}; color: {{ style.color }}; background-color: {{ style.backgroundColor }} " data-event-uuid = "{{ event._uuid }}" data-jscheduler_ui-droppable-target = "{{ eventDroppableTarget }}" > {{# if_draggable }} <div class="jscheduler_ui-draggable" style=" position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 1 " > </div> {{/ if_draggable }} {{# if_clickable }} <span style="position: relative; z-index: 2"> <a href="#" style="color: {{ event.color }}"> {{ description }} </a> </span> {{/ if_clickable }} {{^ if_clickable }} <span style="color: {{ event.color }}"> {{ description }} </span> {{/ if_clickable }} {{# if_editable }} <a class="jscheduler_ui-event-edit" href="#" title = "{{ translations.edit_event_btn }}" > <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-plus"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg> </a> {{/ if_editable }} </div> {{/ for_each_events }} </div>',events_column:' {{# for_each_events }} <div class="jscheduler_ui-event jscheduler_ui-event-day {{ className }}" style="position: absolute; top: {{ style.top }}; bottom: {{ style.bottom }}; left: {{ style.left }}; width: {{ style.width }}; background-color: {{ style.backgroundColor }} " data-event-uuid="{{event._uuid}}" data-jscheduler_ui-droppable-target="{{eventDroppableTarget}}" > {{# if_draggable }} <div class="jscheduler_ui-draggable" style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 1" > </div> {{/ if_draggable }} {{# if_resizeable }} <div class="jscheduler_ui-resize-handler" style="position: absolute; left: 0; right: 0; bottom: 0; height: 10px; z-index: 2" > </div> {{/ if_resizeable }} {{# if_clickable }} <span style="position: relative; color: {{ event.color }}; z-index: 3;" > <a class="jscheduler_ui-event-header" href="#"> {{ event.header }} </a> <br/> <a href="#"> {{ event.label }} </a> </span> {{/ if_clickable }} {{^ if_clickable }} <span style="color: {{ event.color }}"> <span class="jscheduler_ui-event-header"> {{ event.header }} </span> <br/> {{ event.label }} </span> {{/ if_clickable }} {{# if_editable }} <a class = "jscheduler_ui-event-edit" href = "#" title = "{{ translations.edit_event_btn }}" > <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-plus"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg> </a> {{/ if_editable }} </div> {{/ for_each_events }} ',grid:'<div class="jscheduler_ui-grid"> {{ #hseps }} <div class="jscheduler_ui-hsep" style="position: absolute; left: {{ style.left }}; top: 0; height: 100%; width: 1px; " > </div> {{ /hseps }} {{#vseps}} <div class="jscheduler_ui-vsep" style="position: absolute; top: {{ style.top }}; left: 0; width: 100%; height: 1px;" > </div> {{/vseps}} </div>'};class v{#m;#w;#b;#_;#D;constructor({eventsClickable:e,eventsResizeable:t,eventsDraggable:n,eventsEditable:r,translations:s={}}){this.#m=e,this.#w=n,this.#b=t,this.#_=r,this.#D={edit_event_btn:"Edit the event",...s}}getTranslations(){return this.#D}withEventsColumnPartial({events:e,dateRange:t,eventDroppableTarget:n}){const r=i(e.filter((e=>t.contains(e))));return{for_each_events:r.map(((e,s)=>e.map((e=>{const a={position:"absolute",top:x(t.calcPercentPosition(e.start),2)+"%",bottom:x(100-t.calcPercentPosition(e.end),2)+"%",left:100*s/r.length+"%",width:100/r.length+"%"};let i="";return j.includes(e.bgColor)?i="bg-"+e.bgColor:a.backgroundColor=e.bgColor,{if_draggable:this.#w,if_resizeable:this.#b,if_clickable:this.#m,if_editable:this.#_,event:e,eventDroppableTarget:n,style:a,className:i}})))).flat()}}withEventsRowPartial({events:e,dateRange:t,eventDroppableTarget:n,columnDateRangeType:r="day",groupId:i,labelType:d}){const c=[...e].sort(u),h=new Map(c.map((e=>[e,a.fromObject(e).fill(r)]))),f=l(h,o([...h.values()])),g={"data-column_daterange_type":r};return void 0!==i&&(g["data-group_id"]=JSON.stringify(i)),{for_each_events:e.map((e=>{const s=t.intersects(e);if(!s)return null;const{start:a,end:i}=s.fill(r),o={top:100*f.get(e).offset+"%",height:100*f.get(e).length+"%",left:t.calcPercentPosition(a)+"%",right:100-t.calcPercentPosition(i)+"%"};let l="";j.includes(e.bgColor)?l="bg-"+e.bgColor:o.backgroundColor=e.bgColor;let u=e.label;if(d){const{labels:t={}}=e;t[d]&&(u=t[d])}return{if_draggable:this.#w,if_clickable:this.#m,if_editable:this.#_,event:e,eventDroppableTarget:n,style:o,className:l,description:u}})).filter((e=>e)),dateRange:{start:s("yyyy-mm-dd hh:ii:ss",t.start),end:s("yyyy-mm-dd hh:ii:ss",t.end)},style:{height:"100%"},attr:g,attrs:Object.entries(g).map((function([e,t]){return{key:e,value:t}}))}}withGridPartial({cols:e=1,rows:t=1}){return{hseps:[...Array(e-1)].map(((t,n)=>({style:{left:100*(n+1)/e+"%"}}))),vseps:[...Array(t-1)].map(((e,n)=>({style:{top:100*(n+1)/t+"%"}})))}}}class m extends v{render(e){const t={...e.vars};t.translations=this.getTranslations(),t.headerId="jscheduler_ui-"+D(),t.bodyId="jscheduler_ui-"+D(),t.has_header=t.days.length>1;for(const e of t.hours)e.style={width:"5%"};for(const n of t.days)n.style={width:x(95/t.days.length,2)+"%"},n.rowspan=t.hours.length,n.data={day:n.value,minhour:`${e.minHour}:00:00`,maxhour:`${e.maxHour+1}:00:00`},n.events_column=this.withEventsColumnPartial({events:n.events.map((e=>{const t=p(e);return{...e,header:t}})),dateRange:n.dateRange,eventDroppableTarget:"#"+t.bodyId}),n.is_dayoff=[0,6].includes(n.value.date.getDay());if(t.hours.length&&(t.hours[0]._days=t.days,t.hours[0].grid=this.withGridPartial({rows:e.hours.length}),t["hours[0]"]=t.hours[0]),t.spannedEvents.length){const e=new Map(t.spannedEvents.map((e=>[e,new a(e.start,e.end)]))),n=l(e,o([...e.values()])),r=Math.min(...[...n.values()].map((e=>e.length)));t.events_row={...this.withEventsRowPartial({events:t.spannedEvents,dateRange:t.eventsDateRange,eventDroppableTarget:"#"+t.headerId}),colspan:t.days.length},t.events_row_height=22/r+"px"}return d.render('\x3c!-- jscheduler_ui-day_view-header jscheduler_ui-daterange --\x3e <table class="jscheduler_ui-daysview" style="width: 100%; table-layout: fixed; flex: 1 1 auto;" > <thead> {{# has_header }} <tr> <td style="width: {{ hours[0].style.width }}"> </td> {{# days }} <th style="width: {{ style.width }}; text-align: center" class="jscheduler_ui-daterange-header jscheduler_ui-day-header" > {{ label }} </th> {{/ days }} </tr> {{/ has_header }} {{# events_row }} <tr id="{{headerId}}" data-jscheduler_ui-droppable-type="timeline"> <td style="width: {{ hours[0].style.width }}"></td> <td class="jscheduler_ui-daterange-row" colspan="{{ colspan }}" > <div style="height: {{ events_row_height }}; width: 100%; " > {{> events_row }} </div> </td> </tr> {{/ events_row }} </thead> <tbody class="jscheduler_ui-daysview-columns" style="position: relative" id="{{bodyId}}" data-jscheduler_ui-droppable-type="days"> {{# hours }} <tr> <th style="width: {{ style.width }}" data-hour> {{ label }} {{ #grid }} {{> grid }} {{ /grid }} </div> </th> {{# _days }} <td style = "width: {{ style.width }}%; position: relative" rowspan = "{{ rowspan }}" data-jscheduler_ui-day = "{{ data.day }}" data-day = "{{ data.day }}" data-minhour = "{{ data.minhour }}" data-maxhour = "{{ data.maxhour }}" > {{# is_dayoff }} <div class="jscheduler_ui-dayoff" style="position: absolute; top: 0; left: 0; bottom: 0; right: 0; " > </div> {{/ is_dayoff }} {{# events_column }} {{> events_column }} {{/ events_column }} </td> {{/ _days }} </tr> {{/ hours }} </tbody> </table> ',t,y)}}class w extends v{render(e){const t={...e.vars};t.translations=this.getTranslations(),t.bodyId="jscheduler_ui-"+D();for(const n of t.weeks){n.events_row=this.withEventsRowPartial({eventDroppableTarget:"#"+t.bodyId,dateRange:n.dateRange,events:n.events}),n.style={height:100/e.weeks.length+"%"},n.grid=this.withGridPartial({cols:7});for(const e in n.days){const t=n.days[e];t.style={width:100/7+"%",left:100*e/7+"%"},t.active=function(){return t.isCurrentMonth?"active":"inactive"}}n.daysoff=n.days.map(((e,t)=>{const{date:n}=e.value;return{date:n,style:{width:100/7+"%",left:100*t/7+"%"}}})).filter((e=>[0,6].includes(e.date.getDay())))}return d.render(' <table class="jscheduler_ui-month_view" style="width: 100%; table-layout: fixed; flex: 1 1 auto;" > <thead> <tr> {{ #weekdays }} <th style="width: 14.28%"> {{ . }} </th> {{ /weekdays }} </tr> </thead> <tbody id="{{bodyId}}" data-jscheduler_ui-droppable-type="timeline" > {{ #weeks }} <tr> <td colspan="7" style="position: relative; height: {{ style.height }}; " class="jscheduler_ui-daterange" > {{ #grid }} {{> grid }} {{ /grid }} {{ #daysoff }} <div class="jscheduler_ui-dayoff" style = "position: absolute; top: 0; left: {{ style.left }}; width: {{ style.width }}; bottom: 0; " > </div> {{ /daysoff }} <div> {{ #days }} <span style="width: {{ style.width }}; left: {{ style.left }}; top: 0; position: absolute; text-align: right; " class="jscheduler_ui-month_view-numday jscheduler_ui-month_view-numday-{{ active }} jscheduler_ui-daterange-header " >{{ numday }}</span> {{ /days }} </div> {{ #events_row }} <div class="jscheduler_ui-daterange-row" style=" position: absolute; top: 0; bottom: 0; left: 0; right: 0; padding-top: 20px; " > {{> events_row }} </div> {{ /events_row }} </td> </tr> {{ /weeks }} </tbody> </table> ',t,y)}}class b extends v{render(e){const t={...e.vars};t.bodyId="jscheduler_ui-"+D(),t.row_colspan=t.days.length;for(const e of t.days)e.style={width:92/t.days.length+"%"};t.yaxis={style:{width:"8%"}};for(const e of t.months){e.grid=this.withGridPartial({cols:t.days.length});for(const t in e.monthdays)e.monthdays[t].width=100/e.monthdays.length+"%",e.monthdays[t].left=100*t/e.monthdays.length+"%";const{startDay:n}=e;e.style={left:100*(n-1)/t.days.length+"%",width:100*e.dateRange.countDays()/t.days.length+"%"},e.events_row=this.withEventsRowPartial({eventDroppableTarget:"#"+t.bodyId,dateRange:e.dateRange,events:e.events.map((function(e){let{label:t,short_label:n}=e;return n&&new a(e.start,e.end).countDays()<=1&&(t=n),{...e,label:t}}))})}return d.render('<table class="jscheduler_ui-year_view" style="width: 100%; table-layout: fixed; flex: 1 1 auto;" > <thead> <tr> <td style="width: {{ yaxis.style.width }}"> </td> {{ #days }} <th style = "width: {{ style.width }}; overflow: hidden; text-align: center " > {{ text }} </th> {{ /days }} </tr> </thead> <tbody id="{{bodyId}}" data-jscheduler_ui-droppable-type="timeline" > {{ #months }} <tr> <th> {{ text }} </th> <td colspan="{{ row_colspan }}" style="position: relative; " > <div style="position: absolute; top: 0; bottom: 0; left: {{ style.left }}; width: {{ style.width }}; background-color: white; " > {{ #monthdays }} {{ #is_dayoff }} <div class="jscheduler_ui-dayoff" style="position: absolute; top: 0; bottom: 0; left: {{ left }}; width: {{ width }}; " > </div> {{ /is_dayoff }} <span class="jscheduler_ui-year_view-monthday" style="position: absolute; top: 0; left: {{ left }}; width: {{ width }}; " data-monthday="{{ day_of_month }}" > {{ day_of_month }} </span> {{ /monthdays }} {{ #events_row }} <div class="jscheduler_ui-daterange-row" style="position: absolute; top: 10px; bottom: 0; left: 0; right: 0; " > {{> events_row }} </div> {{ /events_row }} </div> {{ #grid }} {{> grid }} {{ /grid }} </td> </tr> {{ /months }} </tbody> </table>',t,y)}}function _(e,{styles:t}){this.render=function(n){const r={innerHTML:e.render(n),styles:Object.entries(t).map((([e,t])=>({name:e,value:t})))};return d.render('<div style="display: flex; flex-flow: column; {{# styles }} {{ name }}:{{ value}}; {{/ styles }}" > {{{ innerHTML }}} </div>',r)}}const D=function(){let e=0;return()=>++e}();function x(e,t=0){const n=Math.pow(10,t);return Math.round(e*n)/n}const j=["primary","secondary","success","danger","warning","info","light","dark","white"];class E extends v{get yaxisWidthPercent(){return 15}getCols(){return[]}getAttr(){return{id:"jscheduler_ui-"+D()}}getEvents(){return[]}getColumnTimeRangeType(){return"day"}getDaysOff(){return[]}render(e){const t={...e.vars},n=e.eventsDateRange,r=[...t.groups],s=r.map((e=>e.id)),a=this.getEvents(e).filter((e=>n.intersects(e))).map((function(e){return void 0===e.group_id||!s.includes(e.group_id)&&Number.isInteger(e.group_id)?{...e,group_id:null}:e})),i=new Set(a.map((e=>e.group_id)).filter((e=>!s.includes(e))));i.has(null)&&(i.delete(null),i.add(null));for(const e of i)r.push({id:e,label:e||""});return t.attr=this.getAttr(),t.xaxis={cols:this.getCols(e)},t.yaxis={style:{width:"15%"},rows:r.map((r=>{const{label:s}=r;return{label:s,events_row:this.withEventsRowPartial({eventDroppableTarget:"#"+t.attr.id,dateRange:n,events:a.filter((e=>(e.group_id||null)==r.id)),columnDateRangeType:this.getColumnTimeRangeType(),groupId:r.id,labelType:"showGroups"}),grid:this.withGridPartial({cols:t.xaxis.cols.length}),daysoff:this.getDaysOff(e)}}))},d.render('<table id="{{ attr.id }}" class="jscheduler_ui-timeline" style="width: 100%; table-layout: fixed; flex: 1 1 auto; " data-type-view="{{ attr.data_type_view }}" data-jscheduler_ui-droppable-type="timeline" > <thead> <tr> <td style="width: {{ yaxis.style.width }}" ></td> {{ #xaxis.cols }} <th class = "{{ #disabled }}jscheduler_ui-disabled{{/disabled}}" style = "width: {{ style.width }}; text-align: center; " > {{ text }} {{ #subtext }} <br/> {{ /subtext }} {{ subtext }} </th> {{ /xaxis.cols }} </tr> </thead> <tbody> {{ #yaxis.rows }} <tr> <th data-text="{{ label }}"> {{ label }} {{^label}} <div style="min-height: 25px;"></div> {{/label}} </th> <td colspan="{{ xaxis.cols.length }}" style="position: relative"; > {{ #daysoff }} <div class="jscheduler_ui-dayoff" style = "position: absolute; top: 0; left: {{ style.left }}; width: {{ style.width }}; bottom: 0; " > </div> {{ /daysoff }} {{ #events_row }} <div class="jscheduler_ui-daterange-row" style=" position: absolute; top: 0; bottom: 0; left: 0; right: 0; " > {{> events_row }} </div> {{ /events_row }} {{ #grid }} {{> grid }} {{ /grid }} </td> </tr> {{ /yaxis.rows }} </tbody> </table>',t,y)}}class C extends E{getAttr(){return{...super.getAttr(),data_type_view:"day"}}getEvents({vars:e}){return[[...e.spannedEvents],...e.days.map((e=>e.events))].flat()}getCols(){const e=[];for(let t=0;t<12;t++){const n=s("hh:ii",`1970-01-01 ${2*t}:00`);e.push({text:n})}return e}getColumnTimeRangeType(){return"day_hour"}}class M extends E{getAttr(){return{...super.getAttr(),data_type_view:"week"}}getEvents({vars:e}){return[[...e.spannedEvents],...e.days.map((e=>e.events))].flat()}getCols({vars:e}){return e.days.map((e=>({text:new Date(e.value).toLocaleString("en",{weekday:"short"}),subtext:new Date(e.value).toLocaleString("en",{day:"numeric"}),style:{width:(100-this.yaxisWidthPercent)/7+"%"}})))}getDaysOff({vars:e}){return e.days.map(((e,t)=>{const{date:n}=e.value;return{date:n,style:{width:100/7+"%",left:100*t/7+"%"}}})).filter((e=>[0,6].includes(e.date.getDay())))}}class R extends E{getAttr(){return{...super.getAttr(),data_type_view:"month"}}getEvents({vars:e}){const t=[];for(const n of e.weeks)t.push(...n.events);return t}getDays({vars:e}){const t=[];for(const n of e.weeks)t.push(...n.days);return t}getCols({vars:e}){const t=[];for(const n of this.getDays({vars:e})){const{date:r}=n.value,s=r.toLocaleString("en",{weekday:"short"})[0],a=r.toLocaleString("en",{day:"numeric"}),i=!n.isCurrentMonth,o={width:(100-this.yaxisWidthPercent)/(7*e.weeks.length)+"%"};t.push({text:s,subtext:a,style:o,disabled:i})}return t}getDaysOff({vars:e}){return this.getDays({vars:e}).map(((t,n)=>{const{date:r}=t.value;return{date:r,style:{width:100/(7*e.weeks.length)+"%",left:100*n/(7*e.weeks.length)+"%"}}})).filter((e=>[0,6].includes(e.date.getDay())))}}class k extends E{getAttr(){return{...super.getAttr(),data_type_view:"year"}}getEvents({vars:e}){const t=[];for(const n of e.months)t.push(...n.events);return t}getCols(){const e=[];for(let t=1;t<=12;t++){const n=new Date(`1970-${t}-01`).toLocaleString("en",{month:"short"}),r={width:(100-this.yaxisWidthPercent)/12+"%"};e.push({text:n,style:r})}return e}getColumnTimeRangeType(){return"month"}}e.exports={createViewRenderer:function(e,t){return e instanceof c?new _(t.showGroups?new C(t):new m(t),t):e instanceof h?new _(t.showGroups?new M(t):new m(t),t):e instanceof f?new _(t.showGroups?new R(t):new w(t),t):e instanceof g?new _(t.showGroups?new k(t):new b(t),t):void 0}}},829:(e,t)=>{"use strict";function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<<t|e>>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],s=[1732584193,4023233417,2562383102,271733878,3285377520],a=new Uint8Array(e.length+1);a.se