vue-cal 4.10.2 → 5.0.1-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +88 -36
  2. package/dist/i18n/ar.json +18 -0
  3. package/dist/i18n/bg.json +16 -0
  4. package/dist/i18n/bn.json +16 -0
  5. package/dist/i18n/bs.json +16 -0
  6. package/dist/i18n/ca.json +17 -0
  7. package/dist/i18n/cs.json +16 -0
  8. package/dist/i18n/da.json +16 -0
  9. package/dist/i18n/de.json +16 -0
  10. package/dist/i18n/el.json +19 -0
  11. package/dist/i18n/en-gb.json +16 -0
  12. package/dist/i18n/en-us.json +16 -0
  13. package/dist/i18n/es.json +16 -0
  14. package/dist/i18n/et.json +16 -0
  15. package/dist/i18n/fa.json +18 -0
  16. package/dist/i18n/fi.json +16 -0
  17. package/dist/i18n/fr.json +16 -0
  18. package/dist/i18n/he.json +18 -0
  19. package/dist/i18n/hr.json +16 -0
  20. package/dist/i18n/hu.json +16 -0
  21. package/dist/i18n/id.json +16 -0
  22. package/dist/i18n/is.json +16 -0
  23. package/dist/i18n/it.json +16 -0
  24. package/dist/i18n/ja.json +17 -0
  25. package/dist/i18n/ka.json +16 -0
  26. package/dist/i18n/ko.json +17 -0
  27. package/dist/i18n/lt.json +16 -0
  28. package/dist/i18n/mn.json +16 -0
  29. package/dist/i18n/nl.json +16 -0
  30. package/dist/i18n/no.json +16 -0
  31. package/dist/i18n/pl.json +16 -0
  32. package/dist/i18n/pt-br.json +16 -0
  33. package/dist/i18n/pt-pt.json +16 -0
  34. package/dist/i18n/ro.json +16 -0
  35. package/dist/i18n/ru.json +17 -0
  36. package/dist/i18n/sk.json +16 -0
  37. package/dist/i18n/sl.json +16 -0
  38. package/dist/i18n/sq.json +17 -0
  39. package/dist/i18n/sr.json +16 -0
  40. package/dist/i18n/sv.json +16 -0
  41. package/dist/i18n/tr.json +16 -0
  42. package/dist/i18n/uk.json +17 -0
  43. package/dist/i18n/vi.json +17 -0
  44. package/dist/i18n/zh-cn.json +17 -0
  45. package/dist/i18n/zh-hk.json +17 -0
  46. package/dist/vue-cal.css +1 -0
  47. package/dist/vue-cal.es.js +2031 -3341
  48. package/dist/vue-cal.umd.js +6 -0
  49. package/package.json +25 -25
  50. package/dist/drag-and-drop.amd.js +0 -6
  51. package/dist/drag-and-drop.cjs.js +0 -6
  52. package/dist/drag-and-drop.es.js +0 -259
  53. package/dist/i18n/ar.amd.js +0 -6
  54. package/dist/i18n/ar.cjs.js +0 -6
  55. package/dist/i18n/ar.es.js +0 -70
  56. package/dist/i18n/bg.amd.js +0 -6
  57. package/dist/i18n/bg.cjs.js +0 -6
  58. package/dist/i18n/bg.es.js +0 -70
  59. package/dist/i18n/bn.amd.js +0 -6
  60. package/dist/i18n/bn.cjs.js +0 -6
  61. package/dist/i18n/bn.es.js +0 -70
  62. package/dist/i18n/bs.amd.js +0 -6
  63. package/dist/i18n/bs.cjs.js +0 -6
  64. package/dist/i18n/bs.es.js +0 -70
  65. package/dist/i18n/ca.amd.js +0 -6
  66. package/dist/i18n/ca.cjs.js +0 -6
  67. package/dist/i18n/ca.es.js +0 -81
  68. package/dist/i18n/cs.amd.js +0 -6
  69. package/dist/i18n/cs.cjs.js +0 -6
  70. package/dist/i18n/cs.es.js +0 -70
  71. package/dist/i18n/da.amd.js +0 -6
  72. package/dist/i18n/da.cjs.js +0 -6
  73. package/dist/i18n/da.es.js +0 -70
  74. package/dist/i18n/de.amd.js +0 -6
  75. package/dist/i18n/de.cjs.js +0 -6
  76. package/dist/i18n/de.es.js +0 -70
  77. package/dist/i18n/el.amd.js +0 -6
  78. package/dist/i18n/el.cjs.js +0 -6
  79. package/dist/i18n/el.es.js +0 -92
  80. package/dist/i18n/en.amd.js +0 -6
  81. package/dist/i18n/en.cjs.js +0 -6
  82. package/dist/i18n/en.es.js +0 -70
  83. package/dist/i18n/es.amd.js +0 -6
  84. package/dist/i18n/es.cjs.js +0 -6
  85. package/dist/i18n/es.es.js +0 -70
  86. package/dist/i18n/et.amd.js +0 -6
  87. package/dist/i18n/et.cjs.js +0 -6
  88. package/dist/i18n/et.es.js +0 -70
  89. package/dist/i18n/fa.amd.js +0 -6
  90. package/dist/i18n/fa.cjs.js +0 -6
  91. package/dist/i18n/fa.es.js +0 -70
  92. package/dist/i18n/fi.amd.js +0 -6
  93. package/dist/i18n/fi.cjs.js +0 -6
  94. package/dist/i18n/fi.es.js +0 -70
  95. package/dist/i18n/fr.amd.js +0 -6
  96. package/dist/i18n/fr.cjs.js +0 -6
  97. package/dist/i18n/fr.es.js +0 -70
  98. package/dist/i18n/he.amd.js +0 -6
  99. package/dist/i18n/he.cjs.js +0 -6
  100. package/dist/i18n/he.es.js +0 -70
  101. package/dist/i18n/hr.amd.js +0 -6
  102. package/dist/i18n/hr.cjs.js +0 -6
  103. package/dist/i18n/hr.es.js +0 -70
  104. package/dist/i18n/hu.amd.js +0 -6
  105. package/dist/i18n/hu.cjs.js +0 -6
  106. package/dist/i18n/hu.es.js +0 -70
  107. package/dist/i18n/id.amd.js +0 -6
  108. package/dist/i18n/id.cjs.js +0 -6
  109. package/dist/i18n/id.es.js +0 -70
  110. package/dist/i18n/is.amd.js +0 -6
  111. package/dist/i18n/is.cjs.js +0 -6
  112. package/dist/i18n/is.es.js +0 -70
  113. package/dist/i18n/it.amd.js +0 -6
  114. package/dist/i18n/it.cjs.js +0 -6
  115. package/dist/i18n/it.es.js +0 -70
  116. package/dist/i18n/ja.amd.js +0 -6
  117. package/dist/i18n/ja.cjs.js +0 -6
  118. package/dist/i18n/ja.es.js +0 -70
  119. package/dist/i18n/ka.amd.js +0 -6
  120. package/dist/i18n/ka.cjs.js +0 -6
  121. package/dist/i18n/ka.es.js +0 -70
  122. package/dist/i18n/ko.amd.js +0 -6
  123. package/dist/i18n/ko.cjs.js +0 -6
  124. package/dist/i18n/ko.es.js +0 -70
  125. package/dist/i18n/lt.amd.js +0 -6
  126. package/dist/i18n/lt.cjs.js +0 -6
  127. package/dist/i18n/lt.es.js +0 -70
  128. package/dist/i18n/mn.amd.js +0 -6
  129. package/dist/i18n/mn.cjs.js +0 -6
  130. package/dist/i18n/mn.es.js +0 -70
  131. package/dist/i18n/nl.amd.js +0 -6
  132. package/dist/i18n/nl.cjs.js +0 -6
  133. package/dist/i18n/nl.es.js +0 -70
  134. package/dist/i18n/no.amd.js +0 -6
  135. package/dist/i18n/no.cjs.js +0 -6
  136. package/dist/i18n/no.es.js +0 -70
  137. package/dist/i18n/pl.amd.js +0 -6
  138. package/dist/i18n/pl.cjs.js +0 -6
  139. package/dist/i18n/pl.es.js +0 -70
  140. package/dist/i18n/pt-br.amd.js +0 -6
  141. package/dist/i18n/pt-br.cjs.js +0 -6
  142. package/dist/i18n/pt-br.es.js +0 -70
  143. package/dist/i18n/pt-pt.amd.js +0 -6
  144. package/dist/i18n/pt-pt.cjs.js +0 -6
  145. package/dist/i18n/pt-pt.es.js +0 -70
  146. package/dist/i18n/ro.amd.js +0 -6
  147. package/dist/i18n/ro.cjs.js +0 -6
  148. package/dist/i18n/ro.es.js +0 -70
  149. package/dist/i18n/ru.amd.js +0 -6
  150. package/dist/i18n/ru.cjs.js +0 -6
  151. package/dist/i18n/ru.es.js +0 -81
  152. package/dist/i18n/sk.amd.js +0 -6
  153. package/dist/i18n/sk.cjs.js +0 -6
  154. package/dist/i18n/sk.es.js +0 -70
  155. package/dist/i18n/sl.amd.js +0 -6
  156. package/dist/i18n/sl.cjs.js +0 -6
  157. package/dist/i18n/sl.es.js +0 -70
  158. package/dist/i18n/sq.amd.js +0 -6
  159. package/dist/i18n/sq.cjs.js +0 -6
  160. package/dist/i18n/sq.es.js +0 -81
  161. package/dist/i18n/sr.amd.js +0 -6
  162. package/dist/i18n/sr.cjs.js +0 -6
  163. package/dist/i18n/sr.es.js +0 -70
  164. package/dist/i18n/sv.amd.js +0 -6
  165. package/dist/i18n/sv.cjs.js +0 -6
  166. package/dist/i18n/sv.es.js +0 -70
  167. package/dist/i18n/tr.amd.js +0 -6
  168. package/dist/i18n/tr.cjs.js +0 -6
  169. package/dist/i18n/tr.es.js +0 -70
  170. package/dist/i18n/uk.amd.js +0 -6
  171. package/dist/i18n/uk.cjs.js +0 -6
  172. package/dist/i18n/uk.es.js +0 -81
  173. package/dist/i18n/vi.amd.js +0 -6
  174. package/dist/i18n/vi.cjs.js +0 -6
  175. package/dist/i18n/vi.es.js +0 -81
  176. package/dist/i18n/zh-cn.amd.js +0 -6
  177. package/dist/i18n/zh-cn.cjs.js +0 -6
  178. package/dist/i18n/zh-cn.es.js +0 -81
  179. package/dist/i18n/zh-hk.amd.js +0 -6
  180. package/dist/i18n/zh-hk.cjs.js +0 -6
  181. package/dist/i18n/zh-hk.es.js +0 -81
  182. package/dist/vue-cal.amd.js +0 -6
  183. package/dist/vue-cal.cjs.js +0 -6
  184. package/dist/vue-cal.iife.js +0 -1
  185. package/dist/vuecal.css +0 -1
@@ -0,0 +1,6 @@
1
+ (function(H,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(H=typeof globalThis<"u"?globalThis:H||self,e(H.vuecal={},H.Vue))})(this,function(H,e){"use strict";/**
2
+ * vue-cal v5.0.1-rc.1
3
+ * (c) 2024-2025 Antoni Andre <antoniandre.web@gmail.com>
4
+ * @license MIT
5
+ */const Q={texts:{weekDays:Array(7).fill(""),weekDaysShort:[],months:Array(12).fill(""),years:"",year:"",month:"",week:"",day:"",today:"",noEvent:"",allDay:"",deleteEvent:"",createEvent:"",dateFormat:"dddd MMMM D, YYYY",am:"am",pm:"pm",truncations:!0},availableViews:{day:{cols:1,rows:1},days:{cols:10,rows:1},week:{cols:7,rows:1},month:{cols:7,rows:6},year:{cols:4,rows:3},years:{cols:5,rows:5}}},_e=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],de=["sun","mon","tue","wed","thu","fri","sat"],be=de.reduce((u,n,o)=>(u[n]=o||7,u),{}),Te=(u,n,o)=>{const{dateUtils:p}=u,k=!1,_=e.computed(()=>{if(N.value[n.view])return n.view;{const l=n.datePicker?"month":"week",v=n.view||l;return N.value[v]?v:(console.warn(`Vue Cal: the provided or default view \`${v}\` is either invalid or not in the list of available views. The first available view will be chosen: \`${Object.keys(N.value)[0]}\`.`),Object.keys(N.value)[0])}}),z=e.computed(()=>n.sm&&!n.xs),h=e.computed(()=>n.xs||n.datePicker),B=e.computed(()=>n.clickToNavigate||n.datePicker&&n.clickToNavigate!==!1),c=e.computed(()=>{const l={cell:{},event:{}},v=M=>M.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();return Object.entries(o).forEach(([M,a])=>{const[V,j,I]=M.match(/^on(Cell|Event)(.+)$/)||[];V&&(l[j.toLowerCase()][v(I).replace(/^-+|-+$/g,"")]=a)}),l}),g=e.computed(()=>{var v;const l={};return n.hideWeekends&&(l[6]=!0)&&(l[7]=!0),(v=n.hideWeekdays)!=null&&v.length&&n.hideWeekdays.forEach(M=>l[be[M]]=!0),l}),T=e.computed(()=>n.hideWeekends||g.value[6]&&g.value[7]),N=e.computed(()=>{const l=n.datePicker;let v=0,M={};const a=n.views;return l&&!a?{month:{...Q.availableViews.month},year:{...Q.availableViews.year},years:{...Q.availableViews.years}}:(a?(Array.isArray(a)?M=a.reduce((V,j)=>(typeof j=="string"&&Q.availableViews[j]?V[j]=Q.availableViews[j]:v++,V),{}):typeof a=="object"&&(M=Object.entries(a).reduce((V,[j,I])=>{const{cols:K,rows:Z}=Q.availableViews[j];return V[j]={cols:I.cols||K,rows:I.rows||Z},V},{})),v&&console.warn("Vue Cal: the provided `views` prop contains invalid views that will be ignored."),Object.keys(M).length||(console.warn("Vue Cal: No valid view in the provided `views` prop. Falling back to default views."),M={...Q.availableViews})):M={...Q.availableViews},M)}),W=e.computed(()=>n.datePicker?"month":N.value.week?"week":Object.keys(N.value)[0]),d=e.computed(()=>{if(typeof n.selectedDate=="string")return p.stringToDate(n.selectedDate);if(n.selectedDate instanceof Date)return n.selectedDate;n.selectedDate?console.warn("Vue Cal: The provided selected date is invalid:",n.selectedDate):console.log("Vue Cal: Info - The provided selected date is undefined.")}),m=e.computed(()=>{if(!n.disableDays)return[];const l=[];return Array.isArray(n.disableDays)?n.disableDays.forEach(v=>{let M=v;if(typeof v=="string"?M=p.stringToDate(v):v instanceof Date&&(v=p.formatDate(v,"YYYY-MM-DD")),M instanceof Date&&!isNaN(M.getTime())){l.push(v);return}else console.warn("Vue Cal: The provided `disableDays` prop contains an invalid date:",v)}):console.warn("Vue Cal: The provided `disableDays` prop is invalid:",n.disableDays),l}),t=e.computed(()=>{let l=null;return n.minDate&&typeof n.minDate=="string"?l=p.stringToDate(n.minDate):n.minDate&&n.minDate instanceof Date&&(l=n.minDate),(l==null?void 0:l.getTime())||null}),i=e.computed(()=>{let l=null;return n.maxDate&&typeof n.maxDate=="string"?l=p.stringToDate(n.maxDate):n.maxDate&&n.maxDate instanceof Date&&(l=n.maxDate),(l==null?void 0:l.getTime())||null}),D=e.computed(()=>{var M;const{view:l}=u;return n.schedules.length&&(l.isDay||l.isDays||l.isWeek)&&((M=n.schedules)==null?void 0:M.map((a,V)=>({...a,id:a.id??V+1})))||void 0}),S=e.computed(()=>{const l={drag:!0,resize:!0,delete:!0,create:!0};return n.editableEvents===!0?l:n.editableEvents===!1?Object.keys(l).map(v=>l[v]=!1):{...l,...n.editableEvents}}),P=async l=>{var M;let v=Object.assign({"../i18n/ar.json":()=>import("./i18n/ar.json").then(a=>a.default),"../i18n/bg.json":()=>import("./i18n/bg.json").then(a=>a.default),"../i18n/bn.json":()=>import("./i18n/bn.json").then(a=>a.default),"../i18n/bs.json":()=>import("./i18n/bs.json").then(a=>a.default),"../i18n/ca.json":()=>import("./i18n/ca.json").then(a=>a.default),"../i18n/cs.json":()=>import("./i18n/cs.json").then(a=>a.default),"../i18n/da.json":()=>import("./i18n/da.json").then(a=>a.default),"../i18n/de.json":()=>import("./i18n/de.json").then(a=>a.default),"../i18n/el.json":()=>import("./i18n/el.json").then(a=>a.default),"../i18n/en-gb.json":()=>import("./i18n/en-gb.json").then(a=>a.default),"../i18n/en-us.json":()=>import("./i18n/en-us.json").then(a=>a.default),"../i18n/es.json":()=>import("./i18n/es.json").then(a=>a.default),"../i18n/et.json":()=>import("./i18n/et.json").then(a=>a.default),"../i18n/fa.json":()=>import("./i18n/fa.json").then(a=>a.default),"../i18n/fi.json":()=>import("./i18n/fi.json").then(a=>a.default),"../i18n/fr.json":()=>import("./i18n/fr.json").then(a=>a.default),"../i18n/he.json":()=>import("./i18n/he.json").then(a=>a.default),"../i18n/hr.json":()=>import("./i18n/hr.json").then(a=>a.default),"../i18n/hu.json":()=>import("./i18n/hu.json").then(a=>a.default),"../i18n/id.json":()=>import("./i18n/id.json").then(a=>a.default),"../i18n/is.json":()=>import("./i18n/is.json").then(a=>a.default),"../i18n/it.json":()=>import("./i18n/it.json").then(a=>a.default),"../i18n/ja.json":()=>import("./i18n/ja.json").then(a=>a.default),"../i18n/ka.json":()=>import("./i18n/ka.json").then(a=>a.default),"../i18n/ko.json":()=>import("./i18n/ko.json").then(a=>a.default),"../i18n/lt.json":()=>import("./i18n/lt.json").then(a=>a.default),"../i18n/mn.json":()=>import("./i18n/mn.json").then(a=>a.default),"../i18n/nl.json":()=>import("./i18n/nl.json").then(a=>a.default),"../i18n/no.json":()=>import("./i18n/no.json").then(a=>a.default),"../i18n/pl.json":()=>import("./i18n/pl.json").then(a=>a.default),"../i18n/pt-br.json":()=>import("./i18n/pt-br.json").then(a=>a.default),"../i18n/pt-pt.json":()=>import("./i18n/pt-pt.json").then(a=>a.default),"../i18n/ro.json":()=>import("./i18n/ro.json").then(a=>a.default),"../i18n/ru.json":()=>import("./i18n/ru.json").then(a=>a.default),"../i18n/sk.json":()=>import("./i18n/sk.json").then(a=>a.default),"../i18n/sl.json":()=>import("./i18n/sl.json").then(a=>a.default),"../i18n/sq.json":()=>import("./i18n/sq.json").then(a=>a.default),"../i18n/sr.json":()=>import("./i18n/sr.json").then(a=>a.default),"../i18n/sv.json":()=>import("./i18n/sv.json").then(a=>a.default),"../i18n/tr.json":()=>import("./i18n/tr.json").then(a=>a.default),"../i18n/uk.json":()=>import("./i18n/uk.json").then(a=>a.default),"../i18n/vi.json":()=>import("./i18n/vi.json").then(a=>a.default),"../i18n/zh-cn.json":()=>import("./i18n/zh-cn.json").then(a=>a.default),"../i18n/zh-hk.json":()=>import("./i18n/zh-hk.json").then(a=>a.default)});{if(!v[`../i18n/${l}.json`]){console.warn(`Vue Cal: the locale \`${l}\` does not exist. Falling back to \`en-us\`.`),l="en-us";return}v=await((M=v[`../i18n/${l}.json`])==null?void 0:M.call(v))}u.texts=Object.assign(u.texts,Object.assign({...Q.texts},v)),p.updateTexts(u.texts)};let b=e.reactive(n.events||[]);return e.watch(()=>n.events,l=>b.splice(0,b.length,...l)),(n.locale||!u.texts.today)&&P(n.locale||"en-us"),{...e.toRefs(n),events:b,eventListeners:c,defaultView:W,availableViews:N,disableDays:m,ready:k,sm:z,xs:h,clickToNavigate:B,hideWeekdays:g,hideWeekends:T,minTimestamp:t,maxTimestamp:i,schedules:D,selectedDate:d,editableEvents:S,view:_,get hasHiddenDays(){return Object.keys(g.value).length},get size(){return h.value?"xs":z.value?"sm":"lg"},loadTexts:P}},le=(u,n)=>{const o=n.timeTo-n.timeFrom;return(u-n.timeFrom)*100/o},re=(u,n)=>{const o=n.timeTo-n.timeFrom;return~~(u*o/100+n.timeFrom)},fe=(u,n)=>{const o=n.clientHeight;return u*100/o},ue=e.reactive({id:null,date:null});let pe=!1,ge=!0;const te=e.reactive({el:null,cell:null,timeout:null}),ne=e.reactive({eventId:null,fromVueCal:null,toVueCal:null});function Me(u){const{config:n,view:o,eventsManager:p,emit:k,uid:_,dateUtils:z}=u,h=t=>{var v;const{timeStep:i,timeCellHeight:D,timeFrom:S}=n,P=(((v=t.touches)==null?void 0:v[0])||t).clientY,{top:b}=t.currentTarget.getBoundingClientRect(),l=P-b-~~t.dataTransfer.getData("cursor-grab-at");return re(fe(l,t.currentTarget),n)},B=(t,i,D)=>{const S=i.duration||c(i.start,i.end)||n.timeStep;let P=Math.max(h(t),0);if(n.snapToInterval){const M=P+n.snapToInterval/2;P=M-M%n.snapToInterval}const b=new Date(new Date(D).setMinutes(P)),l=Math.min(P+S,24*60),v=new Date(new Date(D).setMinutes(l));return{start:b,end:v}},c=(t,i)=>Math.round((i-t)/6e4);return{eventDragStart:(t,i)=>{if(t.target.nodeType===3||u.touch.isResizingEvent)return t.preventDefault();t.dataTransfer.dropEffect="move";const D={...i,_:{id:i._.id,duration:c(i.start,i.end)}};t.dataTransfer.setData("event",JSON.stringify(D)),t.dataTransfer.setData("cursor-grab-at",t.offsetY),ne.eventId=i._.id,ne.fromVueCal=_;const S=t.target.closest(".vuecal__event");S.classList.add("vuecal__event--dragging-ghost"),setTimeout(()=>{S.classList.add("vuecal__event--dragging-original"),S.classList.remove("vuecal__event--dragging-ghost")},0),pe=!1,Object.assign(ue,{id:o.id,date:o.firstCellDate}),ge=!0,u.touch.isDraggingEvent=!0},eventDragEnd:(t,i)=>{ne.eventId=null,t.target.closest(".vuecal__event").classList.remove("vuecal__event--dragging-original");const{fromVueCal:D,toVueCal:S}=ne;S&&D!==S&&p.deleteEvent(i._.id,3),ne.fromVueCal=null,ne.toVueCal=null,pe&&ge&&ue.id&&o.switchView(ue.id,ue.date,!0),u.touch.isDraggingEvent=!1},cellDragEnter:(t,i)=>{const{start:D}=i,S=t.currentTarget;if(!t.currentTarget.contains(t.relatedTarget)){if(S===te.el||!S.className.includes("vuecal__cell-content"))return!1;te.el&&(te.cell.highlighted=!1),Object.assign(te,{el:S,cell:i,timeout:clearTimeout(te.timeout)}),i.highlighted=!0,["years","year","month"].includes(o.id)&&(te.timeout=setTimeout(()=>u.switchToNarrowerView(D),2e3))}},cellDragOver:(t,i)=>{const{start:D,schedule:S}=i;t.preventDefault(),i.highlighted=!0,(S||S===0)&&(i.highlightedSchedule=S)},cellDragLeave:(t,i)=>{t.preventDefault(),!t.currentTarget.contains(t.relatedTarget)&&(i.highlightedSchedule=!1,te.cell===i&&(clearTimeout(te.timeout),Object.assign(te,{el:null,cell:null,timeout:null}),i.highlighted=!1))},cellDragDrop:async(t,i)=>{var V,j,I;t.preventDefault(),clearTimeout(te.timeout),Object.assign(te,{el:null,cell:null,timeout:null});const D=JSON.parse(t.dataTransfer.getData("event")||"{}");D.start&&(D.start=new Date(D.start)),D.end&&(D.end=new Date(D.end));let S;const{start:P,end:b}=B(t,D,i.start),{schedule:l}=((V=t.target.closest("[data-schedule]"))==null?void 0:V.dataset)||{};let v=()=>{};ne.fromVueCal===_?(S=p.getEvent(D._.id),S&&(S._.dragging=!1,v=()=>{S.start=P,S.end=b,l!==void 0&&(S.schedule=~~l)})):(S={...D,start:P,end:b,...l!==void 0&&{schedule:~~l},_:{id:((j=D._)==null?void 0:j.id)||D.id,duration:c(P,b)},getOverlappingEvents:()=>p.getEventsInRange(p.getEventsByDate(z.formatDate(P),!0),{start:P,end:b},{schedule:~~l})},v=()=>{S=p.createEvent(S)});let M=!0;const{drop:a}=(I=n.eventListeners)==null?void 0:I.event;a&&(M=await a({e:t,event:{...S,start:P,end:b,schedule:~~l},overlaps:S.getOverlappingEvents({start:P,end:b,schedule:~~l}),cell:i,external:ne.fromVueCal!==_})),M!==!1&&v(),i.highlighted=!1,i.highlightedSchedule=null,ge=!1,ne.toVueCal=_,k("event-dropped",{event:S,originalEvent:D,external:ne.fromVueCal!==_}),k("event-change",{event:S,originalEvent:D})}}}const ve=u=>{let n,o,p,k={},_={};const z=e.ref(u),h=()=>{Date.prototype.addDays=function(s){return T(this,s||0)},Date.prototype.subtractDays=function(s){return N(this,s||0)},Date.prototype.addHours=function(s){return W(this,s||0)},Date.prototype.subtractHours=function(s){return d(this,s||0)},Date.prototype.addMinutes=function(s){return m(this,s||0)},Date.prototype.subtractMinutes=function(s){return t(this,s||0)},Date.prototype.getWeek=function(){return D(this)},Date.prototype.isToday=function(){return S(this)},Date.prototype.isLeapYear=function(){return l(this)},Date.prototype.format=function(s="YYYY-MM-DD"){return K(this,s)},Date.prototype.formatTime=function(s="HH:mm"){return oe(this,s)}},B=()=>{delete Date.prototype.addDays,delete Date.prototype.subtractDays,delete Date.prototype.addHours,delete Date.prototype.subtractHours,delete Date.prototype.addMinutes,delete Date.prototype.subtractMinutes,delete Date.prototype.getWeek,delete Date.prototype.isToday,delete Date.prototype.isLeapYear,delete Date.prototype.format,delete Date.prototype.formatTime},c=s=>z.value=s,g=()=>(o!==new Date().getDate()&&(n=new Date,o=n.getDate(),p=`${n.getFullYear()}-${n.getMonth()}-${n.getDate()}`),p),T=(s,w)=>{const f=new Date(s.valueOf());return f.setDate(f.getDate()+w),f},N=(s,w)=>{const f=new Date(s.valueOf());return f.setDate(f.getDate()-w),f},W=(s,w)=>{const f=new Date(s.valueOf());return f.setHours(f.getHours()+w),f},d=(s,w)=>{const f=new Date(s.valueOf());return f.setHours(f.getHours()-w),f},m=(s,w)=>{const f=new Date(s.valueOf());return f.setMinutes(f.getMinutes()+w),f},t=(s,w)=>{const f=new Date(s.valueOf());return f.setMinutes(f.getMinutes()-w),f},i=(s,w)=>{const f=A=>{const G=A%w;return G!==0&&(A+=G>=w/2?w-G:-G),A};if(typeof s=="number")return f(s);if(s instanceof Date){let A=f(s.getMinutes());A>=60&&(s.setHours(s.getHours()+1),A=0),s.setMinutes(A,0,0)}},D=(s,w=!1)=>{const f=new Date(Date.UTC(s.getFullYear(),s.getMonth(),s.getDate())),A=f.getUTCDay()||7;f.setUTCDate(f.getUTCDate()+4-A);const G=new Date(Date.UTC(f.getUTCFullYear(),0,1));return Math.ceil(((f-G)/864e5+1)/7)+(w?1:0)},S=s=>`${s.getFullYear()}-${s.getMonth()}-${s.getDate()}`===g(),P=(s,w)=>{if(!s||!w)return console.warn(`Vue Cal: missing date${s?"2":"1"} parameter for comparison with \`isSameDate(date1, date2)\`.`);if(I(s)){if(!I(w))return console.warn(`Vue Cal: invalid date2 provided for comparison with \`isSameDate(date1, date2)\`: \`${w}\`.`)}else return console.warn(`Vue Cal: invalid date1 provided for comparison with \`isSameDate(date1, date2)\`: \`${s}\`.`);return s.getFullYear()===w.getFullYear()&&s.getMonth()===w.getMonth()&&s.getDate()===w.getDate()},b=(s,w,f)=>I(s)?s.getTime()>=w&&s.getTime()<=f:console.warn(`Vue Cal: invalid date provided to \`isInRange(date, rangeStart, rangeEnd)\`: \`${s}\`.`),l=s=>{const w=s.getFullYear();return!(w%400)||w%100&&!(w%4)},v=(s=null,w)=>{const f=s&&new Date(s.valueOf())||new Date,A=w?7:6;return f.setDate(f.getDate()-(f.getDay()+A)%7),f},M=s=>s instanceof Date?s:(s.length===10&&(s+=" 00:00"),new Date(s.replace(/-/g,"/"))),a=s=>s.getHours()*60+s.getMinutes(),V=(s,w)=>{typeof s=="string"&&(s=s.replace(/-/g,"/")),typeof w=="string"&&(w=w.replace(/-/g,"/")),s=new Date(s).setHours(0,0,0,0),w=new Date(w).setHours(0,0,1,0);const f=(new Date(w).getTimezoneOffset()-new Date(s).getTimezoneOffset())*60*1e3;return Math.ceil((w-s-f)/(24*3600*1e3))},j=(s,w,f)=>Math.abs(s.getTime()-w.getTime())<=f*60*1e3,I=s=>s&&s instanceof Date&&!isNaN(s),K=(s,w="YYYY-MM-DD",f=null)=>{if(f||(f=z.value),w||(w="YYYY-MM-DD"),w==="YYYY-MM-DD")return Z(s);k={},_={};const A={YYYY:()=>R(s,f).YYYY,YY:()=>R(s,f).YY(),M:()=>R(s,f).M,MM:()=>R(s,f).MM(),MMM:()=>R(s,f).MMM(),MMMM:()=>R(s,f).MMMM(),MMMMG:()=>R(s,f).MMMMG(),D:()=>R(s,f).D,DD:()=>R(s,f).DD(),S:()=>R(s,f).S(),d:()=>R(s,f).d,dd:()=>R(s,f).dd(),ddd:()=>R(s,f).ddd(),dddd:()=>R(s,f).dddd(),HH:()=>X(s,f).HH,H:()=>X(s,f).H,hh:()=>X(s,f).hh,h:()=>X(s,f).h,am:()=>X(s,f).am,AM:()=>X(s,f).AM,mm:()=>X(s,f).mm,m:()=>X(s,f).m,s:()=>X(s,f).s};return w.replace(/(\{[a-zA-Z]+\}|[a-zA-Z]+)/g,(G,ee)=>{const r=A[ee.replace(/\{|\}/g,"")];return r!==void 0?r():ee})},Z=s=>{const w=s.getMonth()+1,f=s.getDate();return`${s.getFullYear()}-${w<10?"0":""}${w}-${f<10?"0":""}${f}`},oe=(s,w="HH:mm",f=null,A=!1)=>{let G=!1;if(A){const[$,C,E]=[s.getHours(),s.getMinutes(),s.getSeconds()];$+C+E===141&&(G=!0)}if(s instanceof Date&&w==="HH:mm")return G?"24:00":x(s);_={},f||(f=z.value);const ee=X(s,f),r=w.replace(/(\{[a-zA-Z]+\}|[a-zA-Z]+)/g,($,C)=>{const E=ee[C.replace(/\{|\}/g,"")];return E!==void 0?E:C});return G?r.replace("23:59","24:00"):r},x=s=>{const w=s.getHours(),f=s.getMinutes();return`${(w<10?"0":"")+w}:${(f<10?"0":"")+f}`},se=s=>{const w=Math.floor(s/60).toString().padStart(2,0),f=(s%60).toString().padStart(2,0);return`${w}:${f}`},ae=s=>{if(s>3&&s<21)return"th";switch(s%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},R=(s,w)=>{if(k.D)return k;const f=s.getFullYear(),A=s.getMonth()+1,G=s.getDate(),r=(s.getDay()-1+7)%7;return k={YYYY:f,YY:()=>f.toString().substring(2),M:A,MM:()=>A.toString().padStart(2,0),MMM:()=>w.months[A-1].substring(0,3),MMMM:()=>w.months[A-1],MMMMG:()=>(w.monthsGenitive||w.months)[A-1],D:G,DD:()=>G.toString().padStart(2,0),S:()=>ae(G),d:r+1,dd:()=>w.weekDaysShort.length?w.weekDaysShort[r]:w.weekDays[r][0],ddd:()=>w.weekDaysShort.length?w.weekDaysShort[r]:w.weekDays[r].substr(0,3),dddd:()=>w.weekDays[r]},k},X=(s,w)=>{if(_.am)return _;let f,A,G;s instanceof Date?(f=s.getHours(),A=s.getMinutes(),G=s.getSeconds()):(f=Math.floor(s/60),A=Math.floor(s%60));const ee=f%12?f%12:12,r=(w||{am:"am",pm:"pm"})[f===24||f<12?"am":"pm"];return _={H:f,h:ee,HH:f.toString().padStart(2,0),hh:ee.toString().padStart(2,0),am:r,AM:r.toUpperCase(),m:A,mm:A.toString().padStart(2,0),s:G},_};return{addDatePrototypes:h,removeDatePrototypes:B,updateTexts:c,addDays:T,subtractDays:N,addHours:W,subtractHours:d,addMinutes:m,subtractMinutes:t,snapToInterval:i,getWeek:D,isToday:S,isSameDate:P,isInRange:b,isLeapYear:l,getPreviousFirstDayOfWeek:v,stringToDate:M,dateToMinutes:a,countDays:V,datesInSameTimeStep:j,isValid:I,formatDate:K,formatDateLite:Z,formatTime:oe,formatTimeLite:x,formatMinutes:se}},$e=u=>{const{dateUtils:n,config:o}=u;let p=0;const k=e.computed(()=>{const d={byDate:{},recurring:[],multiday:[],byId:{}};return o.events.sort((t,i)=>t.start-i.start<0?-1:1).forEach(t=>{_(t),t._||(t._={}),t._.id=t._.id||++p,t.delete||(t.delete=i=>g(t._.id,i)),t._.deleting=!1,t._.deleted=!1,t.isOverlapping=(i=null)=>t.getOverlappingEvents(i).length,t.getOverlappingEvents=(i=null)=>{var D;return N(h(n.formatDate((i==null?void 0:i.start)||t.start),!0),{start:(i==null?void 0:i.start)||t.start,end:(i==null?void 0:i.end)||t.end},{excludeIds:[t._.id],schedule:(D=o.schedules)!=null&&D.length?~~((i==null?void 0:i.schedule)||t.schedule):null})},t._.register=i=>{t._.$el=i,t._.fireCreated&&(u.emit("event-created",t),delete t._.fireCreated)},t._.unregister=()=>t._.$el=null,d.byId[t._.id]=t,t.recurring?d.recurring.push(t._.id):t._.multiday?(d.multiday.push(t._.id),d.byDate[t._.startFormatted]||(d.byDate[t._.startFormatted]=[]),d.byDate[t._.startFormatted].push(t._.id)):(d.byDate[t._.startFormatted]||(d.byDate[t._.startFormatted]=[]),d.byDate[t._.startFormatted].push(t._.id))}),d}),_=d=>{if(typeof d.start=="string"&&(d.start=n.stringToDate(d.start)),typeof d.end=="string"&&(d.end=n.stringToDate(d.end)),d.start.setSeconds(0,0),d.end.setSeconds(0,0),isNaN(d.start)||isNaN(d.end)){isNaN(d.start)?console.error(`Vue Cal: invalid start date for event "${d.title}".`,d.start):console.error(`Vue Cal: invalid end date for event "${d.title}".`,d.end);return}else d.end.getTime()<d.start.getTime()&&console.error(`Vue Cal: invalid event dates for event "${d.title}". The event ends before it starts.`,d.start,d.end);d._||(d._={}),d._.multiday=!n.isSameDate(d.start,new Date(d.end.getTime()-1)),d._.startFormatted=n.formatDate(d.start),d._.startMinutes=~~n.dateToMinutes(d.start),d._.endMinutes=~~n.dateToMinutes(d.end);const m=d.start.getHours(),t=d.start.getMinutes().toString().padStart(2,0),i=d.end.getHours(),D=d.end.getMinutes().toString().padStart(2,0);d._.startTimeFormatted24=`${m.toString().padStart(2,0)}:${t}`,d._.startTimeFormatted12=`${m%12||12}${t?`:${t}`:""} ${m<12?"AM":"PM"}`,d._.endTimeFormatted24=`${i.toString().padStart(2,0)}:${D}`,d._.endTimeFormatted12=`${i%12||12}${D?`:${D}`:""} ${i<12?"AM":"PM"}`,d._.duration=Math.abs(~~((d.end-d.start)/6e4))},z=d=>k.value.byId[d],h=(d,m=!1,t=!1)=>{let i=k.value.byDate[d]||[];return i=m||t?i.map(z):i,t||(i=i.filter(D=>!D.background),m||(i=i.map(D=>D._.id))),i},B=d=>{const m={};return d.forEach(({startFormatted:t})=>{m[t]=[];const i=h(t,!1,!0);i.length&&m[t].push(...i)}),m},c=d=>{if(!d.start||!d.end){console.error("Vue Cal: Cannot create an event without valid start and end dates.");return}return o.snapToInterval&&(n.snapToInterval(d.start,o.snapToInterval),n.snapToInterval(d.end,o.snapToInterval)),d._||(d._={}),d._.id=++p,d._.fireCreated=!0,o.events.push(d),d},g=(d,m=0)=>{var D;if(!o.editableEvents.delete)return;if(!d)return console.warn(`Vue Cal: Cannot delete unknown event \`${d}\`.`);const t=o.events.findIndex(S=>S._.id===d);if(t===-1)return console.warn(`Vue Cal: Cannot delete unknown event \`${d}\`.`);const i=o.events[t];if(i.deletable===!1)return console.warn(`Vue Cal: Can't delete event \`${d}\` since it was explicitely set to \`delete: false\`.`);switch(m){case 0:i._.deleting?i._.deleted?o.events.splice(t,1):i._.deleted=!0:i._.deleting=!0;break;case 1:i._.deleting=!0,o.events[t]._.deleting=!0;break;case 2:i._.deleted=!0,o.events[t]._.deleted=!0,(D=i._.$el)==null||D.dispatchEvent(new CustomEvent("event-deleted",{detail:i._.id}));break;case 3:o.events.splice(t,1),u.emit("update:events",o.events),u.emit("event-delete",i);break}return!0},T=d=>{const m=h(d,!0);if(!m.length)return{cellOverlaps:{},longestStreak:0};let t={},i=[],D=0;m.sort((S,P)=>S.start-P.start||S.end-S.start-(P.end-P.start));for(const S of m){const P=S._.id;t[P]||(t[P]={overlaps:new Set,maxConcurrent:1,position:0}),i=i.filter(a=>a.end>S.start);let b=i.filter(a=>{var j;return(!((j=o.schedules)!=null&&j.length)||S.schedule===a.schedule)&&a.start<S.end}),l=new Set(b.map(a=>{var V;return((V=t[a._.id])==null?void 0:V.position)??0})),v=0;for(;l.has(v);)v++;t[P].position=v,i.push(S);let M=Math.max(1,...b.map(a=>{var V;return((V=t[a._.id])==null?void 0:V.maxConcurrent)??1}));t[P].maxConcurrent=Math.max(b.length+1,M);for(const a of b)t[a._.id].overlaps.add(P),t[P].overlaps.add(a._.id),t[a._.id].maxConcurrent=t[P].maxConcurrent;D=Math.max(D,t[P].maxConcurrent)}for(const S in t)t[S].overlaps=[...t[S].overlaps];return{cellOverlaps:t,longestStreak:D}},N=(d=[],{start:m,end:t},{excludeIds:i=[],schedule:D=null})=>{var b;const S=new Set(i),P=[];for(const l of d)!S.has((b=l._)==null?void 0:b.id)&&(D===null||D===l.schedule)&&W(l,m,t)&&P.push(l);return P},W=(d,m,t)=>{const i=d.allDay||!o.time,D=i?new Date(d.start).setHours(0,0,0,0):d.start.getTime(),S=i?new Date(d.end).setHours(23,59,59,999):d.end.getTime(),P=i?new Date(m).setHours(0,0,0,0):m.getTime(),b=i?new Date(t).setHours(23,59,59,999):t.getTime();return S>P&&D<b};return{events:k,getEvent:z,getEventsByDate:h,getViewEvents:B,getCellOverlappingEvents:T,getEventsInRange:N,createEvent:c,deleteEvent:g,isEventInRange:W}},Ee=({config:u,dateUtils:n,emit:o,texts:p,eventsManager:k},_)=>{const{availableViews:z}=u,h=e.ref(u.view&&z[u.view]?u.view:u.defaultView),B=e.ref(u.selectedDate||null);let c=e.ref(new Date);const g=e.ref(new Date(u.viewDate||c.value));g.value.setHours(0,0,0,0);const T=e.ref(new Date(g));let N=null;const W=e.computed(()=>h.value==="month"?T.value:v.value),d=e.computed(()=>h.value==="month"?new Date(T.value.getFullYear(),T.value.getMonth()+1,0,23,59,59,999):a.value),m=e.computed(()=>h.value==="week"?n.getPreviousFirstDayOfWeek(v.value,u.startWeekOnSunday):h.value==="month"?v.value:W.value),t=e.computed(()=>{if(h.value==="week"){const y=n.addDays(m.value,7);return y.setMilliseconds(-1),y}else if(h.value==="month")return a.value;return d.value}),i=e.computed(()=>{const y=c.value.getTime();if(h.value==="week")return m.value.getTime()<=y&&y<=t.value.getTime();const Y=v.value.getTime(),O=a.value.getTime();return Y<=y&&y<=O});function D(){c.value=new Date,N=setTimeout(D,60*1e3)}function S(){N=setTimeout(D,(60-new Date().getSeconds())*1e3),D()}const P=e.computed(()=>{if(!u.availableViews[h.value])return 1;let y=u.availableViews[h.value].cols;return u.hasHiddenDays&&["week","month"].includes(h.value)&&(y-=u.hasHiddenDays),y}),b=e.computed(()=>{var y;return((y=u.availableViews[h.value])==null?void 0:y.rows)||1}),l=e.computed(()=>P.value*b.value),v=e.computed(()=>{if(h.value==="month"){let y=T.value.getDay()||7;return u.startWeekOnSunday&&!u.hideWeekdays[7]&&(y+=1),u.viewDayOffset&&(y-=u.viewDayOffset),n.subtractDays(T.value,y-1)}else if(h.value==="week"){const y="1234567".split("").filter(O=>!Object.keys(u.hideWeekdays).includes(O));let Y=Math.min(...y);return u.startWeekOnSunday&&!u.hideWeekdays[7]&&(Y=1),u.viewDayOffset&&(Y+=u.viewDayOffset),n.addDays(T.value,Y-1)}else return T.value}),M=e.computed(()=>{const y=[],Y=["days","week","month"].includes(h.value);let O=0;for(let q=0;q<l.value+O;q++)switch(h.value){case"day":case"days":case"week":case"month":{const J=n.addDays(v.value,q),me=J.getDay()||7;if(Y&&u.hasHiddenDays&&u.hideWeekdays[me]){O++;continue}const ce=new Date(J);ce.setHours(23,59,59,999),y.push({start:J,startFormatted:n.formatDate(J),end:ce});break}case"year":y.push({start:new Date(v.value.getFullYear(),q,1,0,0,0,0),end:new Date(v.value.getFullYear(),q+1,0,23,59,59,999)});break;case"years":y.push({start:new Date(v.value.getFullYear()+q,0,1,0,0,0,0),end:new Date(v.value.getFullYear()+q+1,0,0,23,59,59,999)});break}return y}),a=e.computed(()=>M.value[M.value.length-1].end),V=e.ref("right"),j=e.computed(()=>{const y=Object.keys(u.availableViews);return y[y.indexOf(h.value)+1]}),I=e.computed(()=>{const y=Object.keys(u.availableViews);return y[y.indexOf(h.value)-1]}),K=e.computed(()=>{const{dateFormat:y,truncations:Y}=p;switch(h.value){case"day":return n.formatDate(v.value,y);case"days":{let O=y.replace(/(\s|^)[^a-zA-Z]*?d{2,4}[^a-zA-Z]*?(\s|$)/,"");Y!==!1&&(O=O.replace("MMMM","MMM"));const q=n.formatDate(v.value,O),J=n.formatDate(a.value,O);return`${q} - ${J}`}case"week":{let O=n.getWeek(v.value,u.startWeekOnSunday&&!u.hideWeekdays[7]);O=` <small>${p.week} ${O}</small>`;const q=v.value.getMonth(),J=v.value.getFullYear(),me=a.value.getMonth(),ce=a.value.getFullYear(),he=q!==me,At=he&&J!==ce,ke=Y!==!1&&(u.xs||he),ye=p.months[q][ke?"substring":"toString"](0,3);if(he){const we=p.months[me][ke?"substring":"toString"](0,3);return At?`${ye} ${J} - ${we} ${ce} ${O}`:`${ye} - ${we} ${J} ${O}`}else return`${ye} ${J} ${O}`}case"month":{const O=`${u.xs&&Y!==!1?"MMM":"MMMM"} YYYY`;return n.formatDate(W.value,O)}case"year":return v.value.getFullYear();case"years":return`${v.value.getFullYear()} - ${d.value.getFullYear()}`}});function Z(){switch(T.value=new Date(g.value||c.value),T.value.setHours(0,0,0,0),h.value){case"day":break;case"days":break;case"week":T.value=n.getPreviousFirstDayOfWeek(T.value,u.startWeekOnSunday&&!u.hideWeekdays[7]);break;case"month":T.value=new Date(T.value.getFullYear(),T.value.getMonth(),1,0,0,0,0);break;case"year":T.value=new Date(T.value.getFullYear(),0,1,0,0,0,0);break;case"years":T.value=new Date(T.value.getFullYear()-T.value.getFullYear()%l.value,0,1,0,0,0,0);break}o("view-change",{id:h.value,title:K.value,start:W.value,end:d.value,extendedStart:m.value,extendedEnd:t.value,cellDates:M.value,containsToday:i.value,events:F.value}),c.value=new Date}function oe(y){const Y=h.value,O=u.availableViews[Y];y[Y]&&JSON.stringify(y[Y])===JSON.stringify(O)||Z()}function x(y,Y=!0){const O=Object.keys(u.availableViews);h.value!==y&&(O.includes(y)?(V.value=O.indexOf(y)<O.indexOf(h.value)?"left":"right",h.value=y,o("update:view",y),Z()):console.warn(`Vue Cal: the \`${y}\` view is not available.`))}function se(){j.value?x(j.value):console.warn("Vue Cal: no broader view is available.")}function ae(){I.value?x(I.value):console.warn("Vue Cal: no narrower view is available.")}function R(){s(!1)}function X(){s(!0)}function s(y=!0){let Y=new Date(g.value);switch(h.value){case"day":case"days":y?Y=n.addDays(a.value,1):Y=n.subtractDays(v.value,l.value);break;case"week":{y?(Y=n.addDays(t.value,1),Y.setHours(0,0,0,0)):Y=n.subtractDays(m.value,l.value);break}case"month":{const O=y?1:-1;Y=new Date(Y.getFullYear(),Y.getMonth()+O,1,0,0,0,0);break}case"year":{const O=y?1:-1;Y=new Date(Y.getFullYear()+O,1,1,0,0,0,0);break}case"years":{const O=y?l.value:-l.value;Y=new Date(Y.getFullYear()+O,1,1,0,0,0,0);break}}f(Y)}function w(){const y=new Date;y.setHours(0,0,0,0),f(y)}function f(y,Y=!0,O=!1){if(!n.isValid(y))return console.warn("Vue Cal: can't navigate to the given date: invalid date provided to `updateViewDate(date)`.");let[q,J]=[v.value,a.value];h.value==="month"&&([q,J]=[W.value,d.value]),(!n.isInRange(y,q,J)||O)&&(y.setHours(0,0,0,0),V.value=y.getTime()<q.getTime()?"left":"right",g.value=y,Y&&o("update:viewDate",y),Z())}function A(y,Y=!0){if(n.isValid(y)){const{isValid:O,isSameDate:q}=n;(!B.value||!O(B.value)||!q(y,B.value))&&(y.setHours(0,0,0,0),B.value=y,Y&&o("update:selectedDate",y))}else return console.warn("Vue Cal: can't update the selected date: invalid date provided to `updateSelectedDate(date)`.")}function G(y){!y&&!T.value.getDay()?f(n.addDays(T.value,1),!0,!0):(V.value="left",Z())}function ee(y){y&&u.startWeekOnSunday&&!T.value.getDay()?f(n.addDays(T.value,1),!0,!0):!y&&u.startWeekOnSunday&&T.value.getDay()===1&&f(n.subtractDays(T.value,1),!0,!0)}function r(){console.log("toggling weekdays",u.hideWeekdays)}function $(y){const Y=_.value.querySelector(".vuecal__scrollable"),O=y?y*u.timeCellHeight/u.timeStep:0;Y==null||Y.scrollTo({top:O,behavior:"smooth"})}function C(){const y=new Date;$(y.getHours()*60+y.getMinutes())}function E(){$(0)}const F=e.computed(()=>k.getViewEvents(M.value)),L=k.createEvent,U=k.deleteEvent;return e.watch(()=>u.view,y=>x(y,!1)),e.watch(()=>u.availableViews,oe),e.watch(()=>u.datePicker,()=>x("month",!1)),e.watch(()=>u.viewDate,y=>f(y,!1)),e.watch(()=>u.selectedDate,y=>A(y,!1)),e.watch(()=>u.startWeekOnSunday,y=>G(y)),e.watch(()=>u.hideWeekends,y=>ee(y)),e.watch(()=>u.hideWeekdays,r),e.watch(()=>l.value,()=>{l.value>90&&console.warn("Vue Cal: high cell count detected. Performance may degrade when interactions are enabled.")}),e.watch(()=>u.watchRealTime,y=>{y&&u.time?S():N=clearTimeout(N)}),Z(),u.time&&u.watchRealTime&&S(),e.onBeforeUnmount(()=>N=clearTimeout(N)),{now:c,id:h,broaderView:j,narrowerView:I,title:K,viewDate:g,start:W,end:d,extendedStart:m,extendedEnd:t,firstCellDate:v,lastCellDate:a,containsToday:i,selectedDate:B,cellDates:M,cols:P,rows:b,events:F,transitionDirection:V,switch:x,broader:se,narrower:ae,previous:R,next:X,navigate:s,goToToday:w,updateViewDate:f,updateSelectedDate:A,scrollToCurrentTime:C,scrollToTime:$,scrollTop:E,createEvent:L,deleteEvent:U,get isDay(){return h.value==="day"},get isDays(){return h.value==="days"},get isWeek(){return h.value==="week"},get isMonth(){return h.value==="month"},get isYear(){return h.value==="year"},get isYears(){return h.value==="years"}}},ie=e.reactive({texts:{...Q.texts},dateUtils:ve(Q.texts)}),Se=({props:u,emit:n,attrs:o,vuecalEl:p,uid:k})=>{const _=e.reactive({uid:k,emit:n,texts:{...ie.texts},dateUtils:{...ie.dateUtils},now:new Date,config:{},eventsManager:{},view:{},dnd:{},touch:{isDraggingCell:!1,isDraggingEvent:!1,isResizingEvent:!1}});return _.dateUtils=ve(Object.assign(Q.texts,_.texts)),_.config=Te(_,u,o),_.eventsManager=$e(_),_.view=Ee(_,p),_.dnd=Me(_),_},Ce=24*60,Be={allDayEvents:{type:[Boolean,String],default:!1},clickToNavigate:{type:Boolean,default:void 0},dark:{type:Boolean,default:!1},datePicker:{type:Boolean,default:!1},disableDays:{type:Array,default:()=>[]},editableEvents:{type:[Boolean,Object],default:!1},eventCreateMinDrag:{type:Number,default:15},events:{type:Array,default:()=>[]},eventCount:{type:Boolean,default:!1},eventsOnMonthView:{type:Boolean,default:!1},hideWeekdays:{type:Array,default:()=>[]},hideWeekends:{type:Boolean,default:!1},locale:{type:String,default:""},maxDate:{type:[String,Date],default:""},minDate:{type:[String,Date],default:""},selectedDate:{type:[String,Date],default:""},sm:{type:Boolean,default:!1},specialHours:{type:Object,default:()=>({})},schedules:{type:Array,default:()=>[]},snapToInterval:{type:Number,default:0},startWeekOnSunday:{type:Boolean,default:!1},theme:{type:[String,Boolean],default:"default"},time:{type:Boolean,default:!0},timeAtCursor:{type:Boolean,default:!1},timeCellHeight:{type:Number,default:40},timeFormat:{type:String,default:""},timeFrom:{type:Number,default:0},timeStep:{type:Number,default:60},timeTo:{type:Number,default:Ce},titleBar:{type:Boolean,default:!0},todayButton:{type:Boolean,default:!0},transitions:{type:Boolean,default:!0},twelveHour:{type:Boolean,default:!1},view:{type:String,default:""},viewDate:{type:[String,Date],default:""},viewDayOffset:{type:Number,default:0},views:{type:[Array,Object],default:["day","days","week","month","year","years"]},viewsBar:{type:Boolean,default:!0},watchRealTime:{type:Boolean,default:!1},weekNumbers:{type:[Boolean,String],default:!1},xs:{type:Boolean,default:!1}},Ve={class:"vuecal__header"},Ye={key:0,class:"vuecal__views-bar"},Pe=["onClick","innerHTML"],ze={key:1,class:"vuecal__title-bar"},Oe={class:"vuecal__transition-wrap"},Ne=["disabled","innerHTML"],je={__name:"header",setup(u){const n=e.inject("vuecal"),{view:o,config:p}=n,k=()=>{p.clickToNavigate&&o.broader()},_=e.computed(()=>p.clickToNavigate?{click:k}:{});return(z,h)=>(e.openBlock(),e.createElementBlock("div",Ve,[e.renderSlot(z.$slots,"header",{view:e.unref(o),availableViews:e.unref(p).availableViews,vuecal:e.unref(n)}),z.$slots.header?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.unref(p).viewsBar?(e.openBlock(),e.createElementBlock("div",Ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(p).availableViews,(B,c)=>(e.openBlock(),e.createElementBlock("button",{class:e.normalizeClass(["vuecal__view-button",{"vuecal__view-button--active":e.unref(o).id===c}]),onClick:g=>e.unref(o).switch(c),innerHTML:e.unref(n).texts[c],type:"button"},null,10,Pe))),256))])):e.createCommentVNode("",!0),e.unref(p).titleBar?(e.openBlock(),e.createElementBlock("nav",ze,[e.createElementVNode("button",{class:e.normalizeClass(["vuecal__nav vuecal__nav--prev",{"vuecal__nav--default":!z.$slots["previous-button"]}]),onClick:h[0]||(h[0]=(...B)=>e.unref(o).previous&&e.unref(o).previous(...B)),type:"button"},[e.renderSlot(z.$slots,"previous-button")],2),e.createElementVNode("div",Oe,[e.createVNode(e.Transition,{name:`vuecal-slide-fade--${e.unref(o).transitionDirection}`},{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock("div",{key:e.unref(o).id+e.unref(o).start.getTime()},[z.$slots.title?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(p).clickToNavigate&&e.unref(o).broaderView?"button":"div"),e.mergeProps({key:0,class:"vuecal__title"},e.toHandlers(_.value)),{default:e.withCtx(()=>[e.renderSlot(z.$slots,"title",e.normalizeProps(e.guardReactiveProps(e.unref(o))))]),_:3},16)):(e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(p).clickToNavigate&&e.unref(o).broaderView?"button":"div"),e.mergeProps({key:1,class:"vuecal__title"},e.toHandlers(_.value),{innerHTML:e.unref(o).title}),null,16,["innerHTML"]))]))]),_:3},8,["name"])]),e.unref(p).todayButton?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[z.$slots["today-button"]?e.renderSlot(z.$slots,"today-button",{key:0,navigate:()=>!e.unref(o).containsToday&&e.unref(o).goToToday(),active:e.unref(o).containsToday}):(e.openBlock(),e.createElementBlock("button",{key:1,class:e.normalizeClass(["vuecal__nav vuecal__nav--today vuecal__nav--default",{"vuecal__nav--active":e.unref(o).containsToday}]),onClick:h[1]||(h[1]=B=>!e.unref(o).containsToday&&e.unref(o).goToToday()),disabled:!!e.unref(o).containsToday,type:"button",innerHTML:e.unref(n).texts.today},null,10,Ne))],64)):e.createCommentVNode("",!0),e.createElementVNode("button",{class:e.normalizeClass(["vuecal__nav vuecal__nav--next",{"vuecal__nav--default":!z.$slots["next-button"]}]),onClick:h[2]||(h[2]=(...B)=>e.unref(o).next&&e.unref(o).next(...B)),type:"button"},[e.renderSlot(z.$slots,"next-button")],2)])):e.createCommentVNode("",!0)],64))]))}},Fe={key:0,class:"vuecal__headings"},Le={key:0,class:"vuecal__weekdays-headings"},He=["onClick"],We={class:"vuecal__weekday-day"},Re={key:0,class:"vuecal__weekday-date"},Ae={key:1,class:"vuecal__schedules-headings w-flex grow"},Ie=["innerHTML"],Xe={__name:"headings-bar",setup(u){const n=e.inject("vuecal"),{view:o,config:p,dateUtils:k}=n,_=e.computed(()=>p.xs?"day-xs":p.sm||o.isDays||o.isMonth?"day-sm":"day"),z=e.computed(()=>(o.isDay||o.isDays||o.isWeek||o.isMonth)&&!(o.isDay&&!p.schedules)),h=e.computed(()=>o.cellDates.slice(0,o.cols).map(({start:c})=>({id:de[c.getDay()],date:c,dateNumber:c.getDate(),day:k.formatDate(c,"dddd"),"day-sm":k.formatDate(c,"ddd"),"day-xs":k.formatDate(c,"dd"),isToday:k.isToday(c)}))),B={click:c=>{(o.isDays||o.isWeek)&&o.updateSelectedDate(c)}};return(c,g)=>z.value?(e.openBlock(),e.createElementBlock("div",Fe,[e.unref(o).isDay?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Le,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,(T,N)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vuecal__weekday",{"vuecal__weekday--today":T.isToday}]),key:N,onClick:W=>B.click(T.date)},[e.renderSlot(c.$slots,"weekday-heading",{label:T[_.value],id:T.id,date:T.date},()=>[e.createElementVNode("span",We,e.toDisplayString(T[_.value]),1),e.unref(o).isMonth?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("strong",Re,e.toDisplayString(T.dateNumber),1))])],10,He))),128))])),e.unref(p).schedules?(e.openBlock(),e.createElementBlock("div",Ae,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,(T,N)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:N},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(p).schedules,(W,d)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d},[c.$slots["schedule-heading"]?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["vuecal__schedule vuecal__schedule--heading",W.class])},[e.renderSlot(c.$slots,"schedule-heading",{schedule:W,view:e.unref(o)})],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["vuecal__schedule vuecal__schedule--heading",W.class]),innerHTML:W.label},null,10,Ie))],64))),128))],64))),128))])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)}},Ge={class:"vuecal__time-column"},qe={__name:"time-column",setup(u){const n=e.inject("vuecal"),{config:o,texts:p}=n,k=e.computed(()=>{const _=[];for(let h=o.timeFrom;h<o.timeTo;h+=o.timeStep){const B=~~(h/60),c=h%60,g=p[h<720?"am":"pm"];_.push({minutesSum:h,hours:B,minutes:c,formatted12:`${B%12?B%12:12}${c?":"+c.toString().padStart(2,0):""}${g}`,formatted24:`${B.toString().padStart(2,0)}:${c.toString().padStart(2,0)}`})}return _});return(_,z)=>(e.openBlock(),e.createElementBlock("div",Ge,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,(h,B)=>(e.openBlock(),e.createElementBlock("div",{class:"vuecal__time-cell",key:B},[e.renderSlot(_.$slots,"time-cell",{index:B,minutes:h.minutes,hours:h.hours,minutesSum:h.minutesSum,format12:h.formatted12,format24:h.formatted24},()=>[e.createElementVNode("label",null,e.toDisplayString(e.unref(o).twelveHour?h.formatted12:h.formatted24),1)])]))),128))]))}},Ze=["draggable"],Ue={class:"vuecal__event-details"},Je={class:"vuecal__event-title"},Ke={key:0,class:"vuecal__event-time"},Qe=["innerHTML"],De={__name:"event",props:{event:{type:Object,required:!0}},emits:["event-drag-start","event-drag-end","event-resize-start","event-resize-end"],setup(u,{emit:n}){const{config:o,view:p,dnd:k,touch:_,dateUtils:z}=e.inject("vuecal"),h=u,B=e.ref(null),c=e.reactive(h.event),g=e.reactive({dragging:!1,resizing:!1,fromResizer:!1,holding:!1,holdTimer:null,startX:0,startY:0,startPercentageX:0,startPercentageY:0,moveX:0,moveY:0,movePercentageX:0,movePercentageY:0,resizeStartDate:null,resizingOriginalEvent:null,resizingLastAcceptedEvent:null,cellEl:null,schedule:null}),T=e.computed(()=>o.editableEvents.drag&&c.draggable!==!1&&!c.background),N=e.computed(()=>o.time&&o.editableEvents.resize&&c.resizable!==!1&&!c.background);e.computed(()=>o.editableEvents.delete&&c.deletable!==!1&&!c.background);const W=e.computed(()=>{var b,l,v;return{[`vuecal__event--${c._.id}`]:!0,[c.class]:!!c.class,"vuecal__event--recurring":!!c.recurring,"vuecal__event--background":!!c.background,"vuecal__event--multiday":!!((b=c._)!=null&&b.multiday),"vuecal__event--cut-top":((l=c._)==null?void 0:l.startMinutes)<o.timeFrom,"vuecal__event--cut-bottom":((v=c._)==null?void 0:v.endMinutes)>o.timeTo||c.end.getDate()!==c.start.getDate(),"vuecal__event--dragging":!c._.draggingGhost&&c._.dragging,"vuecal__event--dragging-ghost":c._.draggingGhost,"vuecal__event--resizing":g.resizing}}),d=e.computed(()=>{const b=(p.isDay||p.isDays||p.isWeek)&&o.time;if(!b&&!c.backgroundColor&&!c.color)return!1;const l={backgroundColor:c.backgroundColor||null,color:c.color||null};if(b){const v=Math.max(o.timeFrom,c._.startMinutes),M=Math.min(o.timeTo,c._.endMinutes),a=le(v,o),V=le(M,o)-a;l.top=`${a}%`,l.height=`${V}%`}return l}),m=e.computed(()=>{const b={...o.eventListeners.event};Object.entries(b).forEach(([M,a])=>{["resize-end"].includes(M)||(b[M]=V=>{V.type!=="drop"&&a(V.type?{e:V,event:c}:V)})});const l={...b};b.touchstart=M=>{var a;M.stopPropagation(),(a=l.touchstart)==null||a.call(l,{e:M,event:c})},b.mousedown=M=>{var a;M.stopPropagation(),t(M),(a=l.mousedown)==null||a.call(l,{e:M,event:c})};let v=null;return b.click=M=>{var a;(a=l.click)==null||a.call(l,{e:M,event:c}),v?v=clearTimeout(v):v=setTimeout(()=>{var V;v=null,(V=l["delayed-click"])==null||V.call(l,{e:M,event:c})},400)},b.dblclick=M=>{l.dblclick?l.dblclick({e:M,event:c}):c.delete(1)},b}),t=b=>{var M,a,V;const l=((M=b.touches)==null?void 0:M[0])||b;g.fromResizer=l.target.matches(".vuecal__event-resizer, .vuecal__event-resizer *");const v=B.value.getBoundingClientRect();g.startX=(((a=b.touches)==null?void 0:a[0])||b).clientX-v.left,g.startY=(((V=b.touches)==null?void 0:V[0])||b).clientY-v.top,g.startPercentageX=g.startX*100/v.width,g.startPercentageY=g.startY*100/v.height,g.cellEl=B.value.closest(".vuecal__cell"),g.resizeStartDate=c.start,document.addEventListener(b.type==="touchstart"?"touchmove":"mousemove",i),document.addEventListener(b.type==="touchstart"?"touchend":"mouseup",D,{once:!0}),g.holdTimer=setTimeout(()=>{var j,I;g.holding=!0,(I=(j=m.value).hold)==null||I.call(j,{e:b,event:c})},1e3)},i=async b=>{var v,M,a,V;const l=((v=b.touches)==null?void 0:v[0])||b;if(g.fromResizer&&!g.resizing&&(g.resizing=!0,g.resizingOriginalEvent={...c,_:{...c._}},_.isResizingEvent=!0,(a=(M=m.value).resizeStart)==null||a.call(M,{e:b,event:c})),g.holdTimer=clearTimeout(g.holdTimer),g.holding=!1,g.cellEl){const{top:j,left:I,width:K,height:Z}=g.cellEl.getBoundingClientRect();g.moveX=l.clientX-I,g.moveY=l.clientY-j,g.movePercentageX=g.moveX*100/K,g.movePercentageY=g.moveY*100/Z}if(g.fromResizer){const{newStart:j,newEnd:I}=P(c);let K=!0;const{resize:Z}=(V=o.eventListeners)==null?void 0:V.event;Z&&(K=await Z({e:b,event:{...c,start:j,end:I},overlaps:c.getOverlappingEvents({start:j,end:I})})),K!==!1?(c.start=j,c.end=I,g.resizingLastAcceptedEvent&&(g.resizingLastAcceptedEvent=null)):Z&&(g.resizingLastAcceptedEvent={...c,_:{...c._}})}},D=async b=>{var l,v;if(g.holdTimer=clearTimeout(g.holdTimer),g.holding=!1,g.resizing){const{newStart:M,newEnd:a}=P(c);let V=!0;const j=m.value["resize-end"];j&&(V=await j({e:b,event:c,original:g.resizingOriginalEvent,overlaps:c.getOverlappingEvents({start:M,end:a})})),c.start=V===!1?(g.resizingLastAcceptedEvent||g.resizingOriginalEvent).start:((l=g.resizingLastAcceptedEvent)==null?void 0:l.start)||M,c.end=V===!1?(g.resizingLastAcceptedEvent||g.resizingOriginalEvent).end:((v=g.resizingLastAcceptedEvent)==null?void 0:v.end)||a,c._.duration<1&&(c.start=g.resizingOriginalEvent.start,c.end=g.resizingOriginalEvent.end),_.isResizingEvent=!1}document.removeEventListener(b.type==="touchmove"?"touchmove":"mousemove",i),g.resizing=!1,g.fromResizer=!1,g.dragging=!1,g.startX=0,g.startY=0,g.moveX=0,g.moveY=0,g.startPercentageX=0,g.startPercentageY=0,g.movePercentageX=0,g.movePercentageY=0,g.cellEl=null,g.resizeStartDate=null,g.resizingOriginalEvent=null,g.resizingLastAcceptedEvent=null,g.schedule=null},S=()=>{B.value.dispatchEvent(new CustomEvent("event-deleted",{detail:c._.id}))},P=b=>{const l=new Date(b.start.getFullYear(),b.start.getMonth(),b.start.getDate());new Date(l).setDate(l.getDate()+1);let M=re(g.movePercentageY,o);if(M=Math.max(0,Math.min(M,24*60)),o.snapToInterval){const j=M+o.snapToInterval/2;M=j-j%o.snapToInterval}let a=b.start,V=new Date(l.getTime()+M*6e4);return V<g.resizeStartDate&&(a=V,V=g.resizeStartDate),{newStart:a,newEnd:V}};return e.onMounted(()=>c._.register(B.value)),e.onUnmounted(()=>c._.unregister()),(b,l)=>(e.openBlock(),e.createElementBlock("div",e.mergeProps({class:"vuecal__event"},e.toHandlers(m.value,!0),{ref_key:"eventEl",ref:B,class:W.value,style:d.value,draggable:T.value,onDragstart:l[1]||(l[1]=v=>T.value&&e.unref(k).eventDragStart(v,c)),onDragend:l[2]||(l[2]=v=>T.value&&e.unref(k).eventDragEnd(v,c))}),[e.createElementVNode("div",Ue,[e.renderSlot(b.$slots,"event",{event:c},()=>[e.createElementVNode("div",Je,e.toDisplayString(c.title),1),e.unref(o).time?(e.openBlock(),e.createElementBlock("div",Ke,e.toDisplayString(c._[`startTimeFormatted${e.unref(o).twelveHour?12:24}`])+`
6
+ - `+e.toDisplayString(c._[`endTimeFormatted${e.unref(o).twelveHour?12:24}`]),1)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:"vuecal__event-content",innerHTML:c.content},null,8,Qe)])]),N.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vuecal__event-resizer",onDragstart:l[0]||(l[0]=e.withModifiers(()=>{},["prevent","stop"]))},null,32)):e.createCommentVNode("",!0),e.createVNode(e.Transition,{name:"vuecal-delete-btn"},{default:e.withCtx(()=>[c._.deleting?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vuecal__event-delete",onClick:e.withModifiers(S,["stop"])},"Delete")):e.createCommentVNode("",!0)]),_:1})],16,Ze))}},xe=["innerHTML"],et=["data-schedule"],tt={key:1,class:"vuecal__cell-date"},at={key:2,class:"vuecal__cell-content"},nt={key:3,class:"vuecal__cell-events"},st={key:1,class:"vuecal__cell-date"},lt={key:2,class:"vuecal__cell-content"},rt={key:3,class:"vuecal__cell-events"},ot={key:5,class:"vuecal__cell-events-count"},it=["title"],ct={__name:"cell",props:{start:{type:Date,required:!0},end:{type:Date,required:!0},index:{type:Number,required:!0}},setup(u){const n=u,o=e.inject("vuecal"),{view:p,config:k,dateUtils:_,eventsManager:z,dnd:h,touch:B}=o,c=e.computed(()=>_.isToday(n.start)),g=e.ref(null),T=e.ref([]),N=e.ref(!1),W=r=>{T.value.push(r.detail),N.value=!0},d=()=>setTimeout(()=>N.value=!1,300),m=e.reactive({dragging:!1,holding:!1,holdTimer:null,thresholdPassed:!1,startX:0,startY:0,moveX:0,moveY:0,startPercentageX:0,startPercentageY:0,movePercentageX:0,movePercentageY:0,schedule:null}),t=e.ref(!1),i=e.computed(()=>{let r=Math.min(m.startPercentageY,m.movePercentageY),$=Math.max(m.startPercentageY,m.movePercentageY),C=re(r,k),E=re($,k);return k.snapToInterval&&(C=_.snapToInterval(C,k.snapToInterval),E=_.snapToInterval(E,k.snapToInterval),r=le(C,k),$=le(E,k)),{style:{top:r+"%",height:Math.abs($-r)+"%"},startMinutes:C,endMinutes:E,start:_.formatMinutes(C),end:_.formatMinutes(E),...m.schedule?{schedule:m.schedule}:{}}}),D=e.computed(()=>{const r=k.editableEvents.create&&(m.dragging||t.value),$=k.eventCreateMinDrag&&m.thresholdPassed||!k.eventCreateMinDrag;return r&&$}),S=e.computed(()=>{var U;const r=new Date,$=p.start.getFullYear(),C=p.start.getMonth(),E=n.start.getFullYear(),F=n.start.getMonth();return{[`vuecal__cell--${de[n.start.getDay()]}`]:p.isDay||p.isDays||p.isWeek||p.isMonth,[`vuecal__cell--${_e[F]}`]:p.isYear,[`vuecal__cell--${E}`]:p.isYears,"vuecal__cell--today":c.value,"vuecal__cell--current-month":p.isYear&&E===r.getFullYear()&&F===r.getMonth(),"vuecal__cell--current-year":p.isYears&&E===r.getFullYear(),"vuecal__cell--out-of-range":p.isMonth&&(E!==$||F!==C),"vuecal__cell--before-min":x.value&&Z.value,"vuecal__cell--after-max":x.value&&oe.value,"vuecal__cell--disabled":x.value,"vuecal__cell--selected":p.selectedDate&&p.selectedDate.getTime()>=n.start.getTime()&&p.selectedDate.getTime()<=n.end.getTime(),"vuecal__cell--has-schedules":(U=k.schedules)==null?void 0:U.length,"vuecal__cell--dragging":m.dragging,"vuecal__cell--has-events":l.value.length}}),P=e.computed(()=>_.formatDate(n.start)),b=e.computed(()=>{switch(p.id){case"day":return"";case"days":return k.availableViews.days.rows>1&&_.formatDate(n.start,"D"),"";case"week":return"";case"month":return _.formatDate(n.start,"D");case"year":return _.formatDate(n.start,k.xs?"MMM":"MMMM");case"years":return _.formatDate(n.start,"YYYY")}}),l=e.computed(()=>k.datePicker?[]:z.getEventsByDate(P.value,!0,!0).filter(r=>!T.value.includes(r._.id))),v=e.computed(()=>l.value.filter(r=>!r.background)),M=e.computed(()=>{var r;return(r=k.schedules)==null?void 0:r.reduce(($,C)=>($[C.id]=l.value.filter(E=>E.schedule===C.id),$),{})}),a=e.ref({cellOverlaps:{},longestStreak:0});e.watch(()=>v.value.map(r=>`${r._.id} ${r.start.getTime()} ${r.end.getTime()}`).join(),()=>{a.value=z.getCellOverlappingEvents(P.value)},{immediate:!0});const V=e.computed(()=>{const r={};for(const $ of l.value){const C=$._.id,{maxConcurrent:E=1,position:F=0}=a.value.cellOverlaps[C]||{};r[C]={width:`${100/E}%`,left:`${100/E*F}%`}}return r}),j=()=>{a.value=z.getCellOverlappingEvents(P.value)},I=e.computed(()=>p.isMonth&&k.eventCount&&!k.eventsOnMonthView&&v.value.length),K=e.computed(()=>{var C;if(!k.specialHours||p.isMonth||p.isYear||p.isYears)return;const r=de[n.start.getDay()];let $=(C=k.specialHours)==null?void 0:C[r];if($)return Array.isArray($)||($=[$]),$.map(E=>{let{from:F,to:L,class:U,label:y}=E;if(isNaN(F)||isNaN(L)||k.timeFrom>=L||k.timeTo<=F)return;F=Math.max(k.timeFrom,F),L=Math.min(k.timeTo,L);const Y=le(F,k),O=le(L,k)-Y;return{style:{top:`${Y}%`,height:`${O}%`},label:y,class:U}}).filter(E=>!!E)}),Z=e.computed(()=>k.minTimestamp!==null&&k.minTimestamp>n.end.getTime()),oe=e.computed(()=>k.maxTimestamp&&k.maxTimestamp<n.start.getTime()),x=e.computed(()=>{const{disableDays:r}=k,$=p.isYear||p.isYears;return r.length&&r.includes(_.formatDate(n.start))&&!$?!0:Z.value||oe.value}),se=e.reactive({show:e.computed(()=>{if(!(!p.isDay&&!p.isDays&&!p.isWeek)&&!(!c.value||!k.time)&&!(k.timeFrom>_.dateToMinutes(p.now))&&!(_.dateToMinutes(p.now)>k.timeTo))return!0}),nowInMinutes:e.computed(()=>_.dateToMinutes(p.now)),todaysTimePosition:e.computed(()=>le(se.nowInMinutes,k)),style:e.computed(()=>`top: ${se.todaysTimePosition}%`),currentTime:e.computed(()=>_.formatTime(p.now))}),ae=e.computed(()=>{if(x.value)return{};const r={...k.eventListeners.cell};Object.entries(r).forEach(([E,F])=>{r[E]=L=>{var U,y,Y;(Y=(y=L.target||((U=L.e)==null?void 0:U.target)).closest)!=null&&Y.call(y,".vuecal__event")||F(L.type?{e:L,cell:R.value,cursor:X.value}:L)}});const $={...r};let C=null;return r.click=E=>{var F;s(),(F=$.click)==null||F.call($,{e:E,cell:R.value,cursor:X.value}),C?C=clearTimeout(C):C=setTimeout(()=>{var L;C=null,(L=$["delayed-click"])==null||L.call($,{e:E,cell:R.value,cursor:X.value})},400)},(k.time&&p.isDay||p.isDays||p.isWeek)&&(r.touchstart=E=>{var F;w(E.e||E),(F=$.touchstart)==null||F.call($,{e:E,cell:R.value,cursor:X.value})},r.mousedown=E=>{var F;w(E.e||E),(F=$.mousedown)==null||F.call($,{e:E,cell:R.value,cursor:X.value})}),$.dblclick&&(r.dblclick=E=>{var q,J;const F=(((q=E.touches)==null?void 0:q[0])||E).clientY,{top:L}=g.value.getBoundingClientRect(),U=fe(F-L,g.value),y=re(U,k),Y=new Date(n.start);Y.setMinutes(y);const O={y:U,date:Y};(J=$.dblclick)==null||J.call($,{e:E,cell:R.value,cursor:O})}),k.editableEvents.drag&&(r.dragenter=E=>h.cellDragEnter(E,R.value),r.dragover=E=>h.cellDragOver(E,R.value),r.dragleave=E=>h.cellDragLeave(E,R.value),r.drop=E=>h.cellDragDrop(E,R.value)),r}),R=e.computed(()=>({start:n.start,end:n.end,events:l,...m.schedule?{schedule:m.schedule}:{}})),X=e.computed(()=>{const r=re(m.movePercentageY||m.startPercentageY,k),$=new Date(n.start);return $.setMinutes(r),{x:m.movePercentageX||m.startPercentageX,y:m.movePercentageY||m.startPercentageY,date:$}}),s=()=>{p.updateSelectedDate(n.start),k.clickToNavigate&&((p.isMonth||p.isDays||p.isWeek)&&k.availableViews.day?p.switch("day"):p.isYear&&k.availableViews.month?p.switch("month"):p.isYears&&k.availableViews.year&&p.switch("year")),p.updateViewDate(n.start)},w=r=>{var C,E;m.schedule=~~r.target.dataset.schedule;const $=g.value.getBoundingClientRect();m.startX=(((C=r.touches)==null?void 0:C[0])||r).clientX-$.left,m.startY=(((E=r.touches)==null?void 0:E[0])||r).clientY-$.top,m.startPercentageX=m.startX*100/$.width,m.startPercentageY=m.startY*100/$.height,m.thresholdPassed=!1,document.addEventListener(r.type==="touchstart"?"touchmove":"mousemove",f),document.addEventListener(r.type==="touchstart"?"touchend":"mouseup",A,{once:!0}),m.holdTimer=setTimeout(()=>{var F,L;m.holding=!0,(L=(F=ae.value).hold)==null||L.call(F,{e:r,cell:R.value,cursor:X.value})},1e3)},f=r=>{var C,E,F,L,U,y;m.dragging||(B.isDraggingCell=!0,(E=(C=ae.value).dragStart)==null||E.call(C,{e:r,cell:R.value,cursor:X.value})),m.dragging=!0,m.holdTimer=clearTimeout(m.holdTimer),m.holding=!1;const $=g.value.getBoundingClientRect();m.moveX=(((F=r.touches)==null?void 0:F[0])||r).clientX-$.left,m.moveY=(((L=r.touches)==null?void 0:L[0])||r).clientY-$.top,m.movePercentageX=m.moveX*100/$.width,m.movePercentageY=m.moveY*100/$.height,k.eventCreateMinDrag&&Math.abs(m.startY-m.moveY)>k.eventCreateMinDrag&&(m.thresholdPassed=!0),(y=(U=ae.value).drag)==null||y.call(U,{e:r,cell:R.value,cursor:X.value})},A=async r=>{var $,C;document.removeEventListener(r.type==="touchend"?"touchmove":"mousemove",f,{passive:!1}),m.dragging&&((C=($=ae.value).dragEnd)==null||C.call($,{e:r,cell:R.value,cursor:X.value}),B.isDraggingCell=!1,k.editableEvents.create&&(t.value=!0,await G(r),t.value=!1)),m.holdTimer=clearTimeout(m.holdTimer),m.holding=!1,m.dragging=!1,m.startX=0,m.startY=0,m.moveX=0,m.moveY=0,m.startPercentageX=0,m.startPercentageY=0,m.movePercentageX=0,m.movePercentageY=0,m.thresholdPassed=!1,m.schedule=null},G=async r=>{if(!D.value)return;let{start:$,end:C,startMinutes:E,endMinutes:F}=i.value;$=new Date(n.start),$.setMinutes(E),C=new Date(n.start),C.setMinutes(F);let L={...i.value,start:$,end:C};const{create:U}=k.eventListeners.event;if(typeof U=="function"){const y=L;L=await new Promise(Y=>U({e:r,event:L,cell:R.value,resolve:Y,cursor:X.value})),L&&typeof L=="object"&&p.createEvent(L),L&&typeof L=="boolean"&&p.createEvent(y)}else p.createEvent(L)},ee=()=>{Object.keys(ae.value).forEach(r=>{var $;($=g.value)==null||$.removeEventListener(r,ae.value[r])})};return e.watch(v.value,j,{deep:!0}),e.onBeforeUnmount(async()=>{T.value.forEach(r=>z.deleteEvent(r,3)),ee(),await e.nextTick()}),(r,$)=>(e.openBlock(),e.createElementBlock("div",e.mergeProps({class:["vuecal__cell",S.value],ref_key:"cellEl",ref:g},e.toHandlers(ae.value,!0)),[r.$slots.cell?e.renderSlot(r.$slots,"cell",{key:0,start:u.start,end:u.end,index:u.index,events:l.value}):e.createCommentVNode("",!0),K.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(K.value,(C,E)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vuecal__special-hours",C.class]),style:e.normalizeStyle(C.style),innerHTML:C.label||""},null,14,xe))),256)):e.createCommentVNode("",!0),!r.$slots.cell&&e.unref(k).schedules?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(e.unref(k).schedules,C=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vuecal__schedule vuecal__schedule--cell",C.class]),key:C.id,style:e.normalizeStyle(C.style||null),"data-schedule":C.id},[r.$slots["cell-events"]?e.renderSlot(r.$slots,"cell-events",{key:0,start:u.start,end:u.end,events:l.value}):e.createCommentVNode("",!0),b.value||r.$slots["cell-date"]?(e.openBlock(),e.createElementBlock("div",tt,[e.renderSlot(r.$slots,"cell-date",{start:u.start,end:u.end,events:l.value},()=>[e.createTextVNode(e.toDisplayString(b.value),1)])])):e.createCommentVNode("",!0),r.$slots["cell-content"]?(e.openBlock(),e.createElementBlock("div",at,[e.renderSlot(r.$slots,"cell-content",{start:u.start,end:u.end,events:l.value})])):e.createCommentVNode("",!0),r.$slots["cell-events"]&&l.value.length?(e.openBlock(),e.createElementBlock("div",nt,[e.renderSlot(r.$slots,"cell-events",{start:u.start,end:u.end,events:l.value})])):l.value.length||N.value?(e.openBlock(),e.createBlock(e.TransitionGroup,{key:4,class:"vuecal__cell-events",name:"vuecal-event-delete",onBeforeLeave:$[0]||($[0]=E=>N.value=!0),onAfterLeave:d,tag:"div"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.value[C.id],E=>(e.openBlock(),e.createBlock(De,{key:E._.id,event:E,onEventDeleted:W,style:e.normalizeStyle(V.value[E._.id])},e.createSlots({_:2},[r.$slots.event?{name:"event",fn:e.withCtx(F=>[e.renderSlot(r.$slots,"event",e.mergeProps({ref_for:!0},F))]),key:"0"}:void 0]),1032,["event","style"]))),128))]),_:2},1024)):e.createCommentVNode("",!0),D.value&&m.schedule===C.id?(e.openBlock(),e.createElementBlock("div",{key:5,class:"vuecal__event-placeholder",style:e.normalizeStyle(i.value.style)},e.toDisplayString(i.value.start)+" - "+e.toDisplayString(i.value.end),5)):e.createCommentVNode("",!0)],14,et))),128)):e.createCommentVNode("",!0),!r.$slots.cell&&!e.unref(k).schedules?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[r.$slots["cell-events"]?e.renderSlot(r.$slots,"cell-events",{key:0}):e.createCommentVNode("",!0),b.value||r.$slots["cell-date"]?(e.openBlock(),e.createElementBlock("div",st,[e.renderSlot(r.$slots,"cell-date",{start:u.start,end:u.end,events:l.value},()=>[e.createTextVNode(e.toDisplayString(b.value),1)])])):e.createCommentVNode("",!0),r.$slots["cell-content"]?(e.openBlock(),e.createElementBlock("div",lt,[e.renderSlot(r.$slots,"cell-content",{start:u.start,end:u.end,events:l.value})])):e.createCommentVNode("",!0),r.$slots["cell-events"]&&l.value.length?(e.openBlock(),e.createElementBlock("div",rt,[e.renderSlot(r.$slots,"cell-events",{start:u.start,end:u.end,events:l.value})])):(l.value.length||N.value)&&!(e.unref(p).isMonth&&!e.unref(k).eventsOnMonthView)?(e.openBlock(),e.createBlock(e.TransitionGroup,{key:4,class:"vuecal__cell-events",name:"vuecal-event-delete",onBeforeLeave:$[1]||($[1]=C=>N.value=!0),onAfterLeave:d,tag:"div"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,C=>(e.openBlock(),e.createBlock(De,{key:C._.id,event:C,onEventDeleted:W,style:e.normalizeStyle(V.value[C._.id])},e.createSlots({_:2},[r.$slots.event?{name:"event",fn:e.withCtx(E=>[e.renderSlot(r.$slots,"event",e.mergeProps({ref_for:!0},E))]),key:"0"}:void 0]),1032,["event","style"]))),128))]),_:3})):e.createCommentVNode("",!0),D.value?(e.openBlock(),e.createElementBlock("div",{key:5,class:"vuecal__event-placeholder",style:e.normalizeStyle(i.value.style)},e.toDisplayString(i.value.start)+" - "+e.toDisplayString(i.value.end),5)):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),r.$slots["event-count"]?e.renderSlot(r.$slots,"event-count",{key:4,events:v.value}):I.value?(e.openBlock(),e.createElementBlock("div",ot,e.toDisplayString(v.value.length),1)):e.createCommentVNode("",!0),se.show?(e.openBlock(),e.createElementBlock("div",{key:6,class:"vuecal__now-line",style:e.normalizeStyle(se.style),title:se.currentTime},[e.createElementVNode("span",null,e.toDisplayString(se.currentTime),1)],12,it)):e.createCommentVNode("",!0)],16))}},dt={__name:"body",setup(u){const n=e.inject("vuecal");let{view:o,config:p,dateUtils:k}=n;const _=e.ref(null),z=e.ref(null),h=e.computed(()=>({"--vuecal-grid-columns":o.cols,"--vuecal-grid-rows":o.rows})),B=e.computed(()=>{const T=k.formatTime(re(z.value,p));return{style:{top:z.value+"%"},time:T}}),c=T=>{var d;if(o.isMonth||o.isYear||o.isYears)return;const N=(((d=T.touches)==null?void 0:d[0])||T).clientY,{top:W}=_.value.getBoundingClientRect();z.value=fe(N-W,_.value)},g=()=>{z.value=null};return e.onMounted(()=>{_.value.addEventListener("mousemove",c),_.value.addEventListener("touchmove",c),_.value.addEventListener("mouseleave",g),_.value.addEventListener("touchend",g)}),e.onBeforeUnmount(()=>{_.value&&(_.value.removeEventListener("mousemove",c),_.value.removeEventListener("touchmove",c),_.value.removeEventListener("mouseleave",g),_.value.removeEventListener("touchend",g))}),(T,N)=>(e.openBlock(),e.createElementBlock("div",{class:"vuecal__body",ref_key:"bodyEl",ref:_,style:e.normalizeStyle(h.value)},[e.createVNode(e.Transition,{name:"vuecal-shrink"},{default:e.withCtx(()=>[e.unref(p).timeAtCursor&&z.value!==null?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vuecal__time-at-cursor",style:e.normalizeStyle(B.value.style)},[e.createElementVNode("label",null,e.toDisplayString(B.value.time),1)],4)):e.createCommentVNode("",!0)]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).cellDates,(W,d)=>(e.openBlock(),e.createBlock(ct,{key:d,start:W.start,end:W.end,index:d},e.createSlots({_:2},[T.$slots.cell?{name:"cell",fn:e.withCtx(m=>[e.renderSlot(T.$slots,"cell",e.mergeProps({ref_for:!0},m))]),key:"0"}:void 0,T.$slots["cell-date"]?{name:"cell-date",fn:e.withCtx(m=>[e.renderSlot(T.$slots,"cell-date",e.mergeProps({ref_for:!0},m))]),key:"1"}:void 0,T.$slots["cell-content"]?{name:"cell-content",fn:e.withCtx(m=>[e.renderSlot(T.$slots,"cell-content",e.mergeProps({ref_for:!0},m))]),key:"2"}:void 0,T.$slots["cell-events"]?{name:"cell-events",fn:e.withCtx(m=>[e.renderSlot(T.$slots,"cell-events",e.mergeProps({ref_for:!0},m))]),key:"3"}:T.$slots.event?{name:"event",fn:e.withCtx(m=>[e.renderSlot(T.$slots,"event",e.mergeProps({ref_for:!0},m))]),key:"4"}:T.$slots["event-count"]?{name:"event-count",fn:e.withCtx(m=>[e.renderSlot(T.$slots,"event-count",e.mergeProps({ref_for:!0},m))]),key:"5"}:void 0]),1032,["start","end","index"]))),128))],4))}},ut=["data-locale"],mt={class:"vuecal__scrollable-wrap"},ft={key:1,class:"vuecal__week-numbers"},gt={class:"vuecal__week-number"},ht={class:"vuecal__body-wrap"},yt={__name:"index",props:Be,emits:["ready","view-change","update:view","update:selectedDate","update:viewDate","update:events","event-delete","event-created","event-dropped","event-change"],setup(u,{expose:n,emit:o}){const p=u,k=o,_=e.useTemplateRef("vuecal-el"),z=Se({props:p,emit:k,attrs:e.useAttrs(),vuecalEl:_,uid:e.useId()}),{config:h,view:B,dateUtils:c,touch:g}=z,T=e.computed(()=>h.time&&(B.isDay||B.isDays||B.isWeek)),N=e.computed(()=>Array(B.rows).fill().map((t,i)=>c.getWeek(c.addDays(B.firstCellDate,7*i)))),W=e.computed(()=>{var t;return{"vuecal--ready":h.ready,[`vuecal--${h.theme}-theme`]:h.theme,[`vuecal--${h.size}`]:!0,"vuecal--date-picker":h.datePicker,"vuecal--dark":h.dark,"vuecal--light":!h.dark,[`vuecal--${B.id}-view`]:!0,"vuecal--view-has-time":T.value,"vuecal--timeless":!h.time,"vuecal--dragging-cell":g.isDraggingCell,"vuecal--dragging-event":g.isDraggingEvent,"vuecal--resizing-event":g.isResizingEvent,"vuecal--has-schedules":(t=h.schedules)==null?void 0:t.length}}),d=e.computed(()=>({"--vuecal-time-cell-height":h.timeCellHeight&&`${h.timeCellHeight}px`})),m=e.computed(()=>{var t,i;return{"vuecal__scrollable--row":T.value||h.weekNumbers&&B.isMonth,[`vuecal__scrollable--${B.id}-view`]:!0,"vuecal__scrollable--has-schedules":(t=h.schedules)==null?void 0:t.length,"vuecal__scrollable--no-schedules":!((i=h.schedules)!=null&&i.length)}});return e.onMounted(async()=>{await e.nextTick(),k("ready",{config:h,view:B})}),e.watch(()=>h.locale,t=>h.loadTexts(t)),e.provide("vuecal",z),n({view:z.view}),(t,i)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vuecal",W.value]),ref:"vuecal-el","data-locale":t.locale,style:e.normalizeStyle(d.value)},[t.$slots.diy?e.renderSlot(t.$slots,"diy",{key:0,vuecal:e.unref(z),view:e.unref(B),availableViews:e.unref(h).availableViews}):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(je,null,e.createSlots({_:2},[t.$slots.header?{name:"header",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"header",e.normalizeProps(e.guardReactiveProps(D)))]),key:"0"}:void 0,!t.$slots.header&&t.$slots["previous-button"]?{name:"previous-button",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"previous-button",e.normalizeProps(e.guardReactiveProps(D)))]),key:"1"}:void 0,!t.$slots.header&&t.$slots["next-button"]?{name:"next-button",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"next-button",e.normalizeProps(e.guardReactiveProps(D)))]),key:"2"}:void 0,!t.$slots.header&&t.$slots["today-button"]?{name:"today-button",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"today-button",e.normalizeProps(e.guardReactiveProps(D)))]),key:"3"}:void 0,!t.$slots.header&&t.$slots.title?{name:"title",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"title",e.normalizeProps(e.guardReactiveProps(D)))]),key:"4"}:void 0,!t.$slots.header&&t.$slots["schedule-heading"]?{name:"schedule-heading",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"schedule-heading",e.normalizeProps(e.guardReactiveProps(D)))]),key:"5"}:void 0]),1024),e.createElementVNode("div",mt,[e.createVNode(e.Transition,{name:`vuecal-slide-fade--${e.unref(B).transitionDirection}`},{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vuecal__scrollable",m.value]),key:e.unref(B).id+e.unref(B).start.getTime()},[T.value?(e.openBlock(),e.createBlock(qe,{key:0},e.createSlots({_:2},[t.$slots["time-cell"]?{name:"time-cell",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"time-cell",e.normalizeProps(e.guardReactiveProps(D)))]),key:"0"}:void 0]),1024)):e.createCommentVNode("",!0),e.unref(h).weekNumbers&&e.unref(B).isMonth?(e.openBlock(),e.createElementBlock("div",ft,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,D=>(e.openBlock(),e.createElementBlock("div",gt,[e.renderSlot(t.$slots,"week-number",{},()=>[e.createElementVNode("small",null,e.toDisplayString(D),1)])]))),256))])):e.createCommentVNode("",!0),e.createElementVNode("div",ht,[e.createVNode(Xe,null,e.createSlots({_:2},[t.$slots["weekday-heading"]?{name:"weekday-heading",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"weekday-heading",e.normalizeProps(e.guardReactiveProps(D)))]),key:"0"}:void 0,t.$slots["schedule-heading"]?{name:"schedule-heading",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"schedule-heading",e.normalizeProps(e.guardReactiveProps(D)))]),key:"1"}:void 0]),1024),e.createVNode(dt,null,e.createSlots({_:2},[t.$slots.cell?{name:"cell",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"cell",e.normalizeProps(e.guardReactiveProps(D)))]),key:"0"}:void 0,!t.$slots.cell&&t.$slots["cell-date"]?{name:"cell-date",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"cell-date",e.normalizeProps(e.guardReactiveProps(D)))]),key:"1"}:void 0,!t.$slots.cell&&t.$slots["cell-content"]?{name:"cell-content",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"cell-content",e.normalizeProps(e.guardReactiveProps(D)))]),key:"2"}:void 0,!t.$slots.cell&&t.$slots["cell-events"]?{name:"cell-events",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"cell-events",e.normalizeProps(e.guardReactiveProps(D)))]),key:"3"}:void 0,!t.$slots.cell&&t.$slots.event?{name:"event",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"event",e.normalizeProps(e.guardReactiveProps(D)))]),key:"4"}:void 0,!t.$slots.cell&&t.$slots["event-count"]?{name:"event-count",fn:e.withCtx(D=>[e.renderSlot(t.$slots,"event-count",e.normalizeProps(e.guardReactiveProps(D)))]),key:"5"}:void 0]),1024)])],2))]),_:3},8,["name"])])],64))],14,ut))}},pt=u=>{ie.texts={...Q.texts,...u},ie.dateUtils.updateTexts(ie.texts)},{addDatePrototypes:vt,removeDatePrototypes:Dt,updateTexts:kt,addDays:wt,subtractDays:_t,addHours:bt,subtractHours:Tt,addMinutes:Mt,subtractMinutes:$t,getWeek:Et,isToday:St,isSameDate:Ct,isInRange:Bt,isLeapYear:Vt,getPreviousFirstDayOfWeek:Yt,stringToDate:Pt,dateToMinutes:zt,countDays:Ot,datesInSameTimeStep:Nt,isValid:jt,formatDate:Ft,formatDateLite:Lt,formatTime:Ht,formatTimeLite:Wt,formatMinutes:Rt}=ie.dateUtils;H.VueCal=yt,H.addDatePrototypes=vt,H.addDays=wt,H.addHours=bt,H.addMinutes=Mt,H.countDays=Ot,H.dateToMinutes=zt,H.datesInSameTimeStep=Nt,H.formatDate=Ft,H.formatDateLite=Lt,H.formatMinutes=Rt,H.formatTime=Ht,H.formatTimeLite=Wt,H.getPreviousFirstDayOfWeek=Yt,H.getWeek=Et,H.isInRange=Bt,H.isLeapYear=Vt,H.isSameDate=Ct,H.isToday=St,H.isValidDate=jt,H.removeDatePrototypes=Dt,H.stringToDate=Pt,H.subtractDays=_t,H.subtractHours=Tt,H.subtractMinutes=$t,H.updateTexts=kt,H.useLocale=pt,Object.defineProperty(H,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,16 +1,15 @@
1
1
  {
2
2
  "name": "vue-cal",
3
- "version": "4.10.2",
3
+ "version": "5.0.1-rc.1",
4
4
  "description": "A Vue JS full calendar, no dependency, no BS. :metal:",
5
5
  "author": "Antoni Andre <antoniandre.web@gmail.com>",
6
- "homepage": "https://antoniandre.github.io/vue-cal-v4",
7
- "repository": "https://github.com/antoniandre/vue-cal-v4",
6
+ "homepage": "https://antoniandre.github.io/vue-cal",
7
+ "repository": "https://github.com/antoniandre/vue-cal",
8
8
  "license": "MIT",
9
9
  "funding": "https://github.com/sponsors/antoniandre",
10
10
  "main": "dist/vue-cal.cjs.js",
11
- "unpkg": "dist/vue-cal.iife.js",
12
- "jsdelivr": "dist/vue-cal.iife.js",
13
11
  "module": "dist/vue-cal.es.js",
12
+ "type": "module",
14
13
  "files": [
15
14
  "dist",
16
15
  "package.json",
@@ -22,8 +21,10 @@
22
21
  "import": "./dist/vue-cal.es.js",
23
22
  "require": "./dist/vue-cal.cjs.js"
24
23
  },
25
- "./package.json": "./package.json",
26
- "./dist/*": "./dist/*"
24
+ "./style": "./dist/vue-cal.css",
25
+ "./style.css": "./dist/vue-cal.css",
26
+ "./i18n/*": "./dist/i18n/*",
27
+ "./package.json": "./package.json"
27
28
  },
28
29
  "keywords": [
29
30
  "vuecal",
@@ -34,37 +35,36 @@
34
35
  "vue",
35
36
  "vuejs",
36
37
  "vue 3",
37
- "vue 2",
38
38
  "ui"
39
39
  ],
40
- "scripts": {
41
- "dev": "vite",
42
- "build": "vite build --base /vue-cal-v4/",
43
- "build-bundle": "BUNDLE=true vite build && mv ./dist/style.css ./dist/vuecal.css && rm ./dist/favicon.ico",
44
- "serve": "vite preview --outDir docs --base /vue-cal-v4/",
45
- "lint": "vite lint"
46
- },
47
40
  "devDependencies": {
48
- "@babel/core": "^7.26.0",
41
+ "@babel/core": "^7.26.7",
49
42
  "@babel/eslint-parser": "^7.26.5",
50
- "@fortawesome/fontawesome-free": "^5.15.4",
51
43
  "@mdi/font": "^7.4.47",
52
44
  "@vitejs/plugin-vue": "^5.2.1",
53
- "@vue/compiler-sfc": "^3.5.13",
54
45
  "autoprefixer": "^10.4.20",
55
46
  "eslint": "^8.57.1",
56
- "postcss": "^8.4.49",
47
+ "pinia": "^2.3.1",
48
+ "postcss": "^8.5.1",
57
49
  "pug": "^3.0.3",
58
- "rollup": "^4.30.1",
59
- "sass": "^1.83.1",
50
+ "rollup": "^4.34.0",
51
+ "sass": "^1.83.4",
60
52
  "simple-syntax-highlighter": "^3.1.1",
61
- "terser": "^5.37.0",
62
- "vite": "^5.4.11",
53
+ "vite": "^6.0.11",
54
+ "vite-plugin-static-copy": "^2.2.0",
63
55
  "vue": "^3.5.13",
64
56
  "vue-router": "^4.5.0",
65
57
  "wave-ui": "^3.18.0"
66
58
  },
67
59
  "peerDependencies": {
68
- "vue": "^3.2.0"
60
+ "vue": "^3.5.0"
61
+ },
62
+ "scripts": {
63
+ "dev": "vite",
64
+ "build": "vite build --base /vue-cal/",
65
+ "build-bundle": "BUNDLE=true vite build",
66
+ "preview": "vite preview --base /vue-cal/",
67
+ "lint": "vite lint",
68
+ "publish-doc": "npm run build && npm run build-bundle && git add . && git commit -m 'Publish documentation on Github.' && git push && git push --tag"
69
69
  }
70
- }
70
+ }
@@ -1,6 +0,0 @@
1
- var __defProp=Object.defineProperty,__defNormalProp=(e,t,l)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,__publicField=(e,t,l)=>__defNormalProp(e,"symbol"!=typeof t?t+"":t,l)
2
- /**
3
- * vue-cal v4.10.2
4
- * (c) 2025 Antoni Andre <antoniandre.web@gmail.com>
5
- * @license MIT
6
- */;define(["exports"],(function(e){"use strict";let t=null,l=null,i={id:null,date:null},a=!1,n=!0,r={el:null,cell:null,timeout:null};const u={_eid:null,fromVueCal:null,toVueCal:null};e.DragAndDrop=class{constructor(e){__publicField(this,"_vuecal"),this._vuecal=e}_getEventStart(e){const{timeStep:t,timeCellHeight:l,timeFrom:i,utils:a}=this._vuecal;let{y:n}=a.cell.getPosition(e);return n-=1*e.dataTransfer.getData("cursor-grab-at"),Math.round(n*t/parseInt(l)+i)}_updateEventStartEnd(e,t,l,i){const a=1*l.duration||t.endTimeMinutes-t.startTimeMinutes;let n=Math.max(this._getEventStart(e),0);if(this._vuecal.snapToTime){const e=n+this._vuecal.snapToTime/2;n=e-e%this._vuecal.snapToTime}t.startTimeMinutes=n,t.start=new Date(new Date(i).setMinutes(n)),t.endTimeMinutes=Math.min(n+a,1440),t.end=new Date(new Date(i).setMinutes(t.endTimeMinutes))}eventDragStart(e,t){if(3===e.target.nodeType)return e.preventDefault();e.dataTransfer.dropEffect="move",e.dataTransfer.setData("event",JSON.stringify(t)),e.dataTransfer.setData("cursor-grab-at",e.offsetY);const{clickHoldAnEvent:l}=this._vuecal.domEvents;setTimeout((()=>{l._eid=null,clearTimeout(l.timeoutId),t.deleting=!1}),0),this._vuecal.domEvents.dragAnEvent._eid=t._eid,u._eid=t._eid,u.fromVueCal=this._vuecal._.uid,t.dragging=!0,setTimeout((()=>t.draggingStatic=!0),0),a=!1,i={id:this._vuecal.view.id,date:this._vuecal.view.startDate},n=!0}eventDragEnd(e){this._vuecal.domEvents.dragAnEvent._eid=null,u._eid=null,e.dragging=!1,e.draggingStatic=!1;const{fromVueCal:t,toVueCal:l}=u;l&&t!==l&&this._vuecal.utils.event.deleteAnEvent(e),u.fromVueCal=null,u.toVueCal=null,a&&n&&i.id&&this._vuecal.switchView(i.id,i.date,!0)}cellDragEnter(e,t,l){const i=e.currentTarget;if(!e.currentTarget.contains(e.relatedTarget)){if(i===r.el||!i.className.includes("vuecal__cell-content"))return!1;r.el&&(r.cell.highlighted=!1),r={el:i,cell:t,timeout:clearTimeout(r.timeout)},t.highlighted=!0,["years","year","month"].includes(this._vuecal.view.id)&&(r.timeout=setTimeout((()=>this._vuecal.switchToNarrowerView(l)),2e3))}}cellDragOver(e,t,l,i){e.preventDefault(),t.highlighted=!0,(i||0===i)&&(t.highlightedSplit=i)}cellDragLeave(e,t){e.preventDefault(),e.currentTarget.contains(e.relatedTarget)||(t.highlightedSplit=!1,r.cell===t&&(clearTimeout(r.timeout),r={el:null,cell:null,timeout:null},t.highlighted=!1))}cellDragDrop(e,t,l,i){e.preventDefault(),clearTimeout(r.timeout),r={el:null,cell:null,timeout:null};const a=JSON.parse(e.dataTransfer.getData("event")||"{}");let s,c;if(u.fromVueCal!==this._vuecal._.uid){const{_eid:e,start:t,end:n,duration:r,...u}=a;s=this._vuecal.utils.event.createAnEvent(l,r,{...u,split:i})}else if(s=this._vuecal.view.events.find((e=>e._eid===u._eid)),s||(s=this._vuecal.mutableEvents.find((e=>e._eid===u._eid)),c=!!s),!s){const e=a.endTimeMinutes-a.startTimeMinutes,{start:t,end:n,...r}=a;s=this._vuecal.utils.event.createAnEvent(l,e,{...r,split:i})}const{start:o,split:d}=s;this._updateEventStartEnd(e,s,a,l),c&&this._vuecal.addEventsToView([s]),s.dragging=!1,(i||0===i)&&(s.split=i),t.highlighted=!1,t.highlightedSplit=null,n=!1,u.toVueCal=this._vuecal._.uid;const v={event:this._vuecal.cleanupEvent(s),oldDate:o,newDate:s.start,...(i||0===i)&&{oldSplit:d,newSplit:i},originalEvent:this._vuecal.cleanupEvent(a),external:!u.fromVueCal};this._vuecal.$emit("event-drop",v),this._vuecal.$emit("event-change",{event:v.event,originalEvent:v.originalEvent}),setTimeout((()=>{u._eid&&this.eventDragEnd(s)}),300)}viewSelectorDragEnter(e,i,n){e.currentTarget.contains(e.relatedTarget)||(n.highlightedControl=i,clearTimeout(t),t=setTimeout((()=>{if(["previous","next"].includes(i))this._vuecal[i](),clearInterval(l),l=setInterval(this._vuecal[i],800);else if("today"===i){let e;clearInterval(l),this._vuecal.view.id.includes("year")&&(e=this._vuecal.enabledViews.filter((e=>!e.includes("year")))[0]),this._vuecal.switchView(e||this._vuecal.view.id,new Date((new Date).setHours(0,0,0,0)),!0)}else this._vuecal.switchView(i,null,!0);a=!0}),800))}viewSelectorDragLeave(e,i,a){e.currentTarget.contains(e.relatedTarget)||a.highlightedControl===i&&(a.highlightedControl=null,t&&(t=clearTimeout(t)),l&&(l=clearInterval(l)))}},Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}));
@@ -1,6 +0,0 @@
1
- "use strict";var e=Object.defineProperty,t=(t,l,i)=>((t,l,i)=>l in t?e(t,l,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[l]=i)(t,"symbol"!=typeof l?l+"":l,i)
2
- /**
3
- * vue-cal v4.10.2
4
- * (c) 2025 Antoni Andre <antoniandre.web@gmail.com>
5
- * @license MIT
6
- */;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let l=null,i=null,a={id:null,date:null},n=!1,r=!0,u={el:null,cell:null,timeout:null};const s={_eid:null,fromVueCal:null,toVueCal:null};exports.DragAndDrop=class{constructor(e){t(this,"_vuecal"),this._vuecal=e}_getEventStart(e){const{timeStep:t,timeCellHeight:l,timeFrom:i,utils:a}=this._vuecal;let{y:n}=a.cell.getPosition(e);return n-=1*e.dataTransfer.getData("cursor-grab-at"),Math.round(n*t/parseInt(l)+i)}_updateEventStartEnd(e,t,l,i){const a=1*l.duration||t.endTimeMinutes-t.startTimeMinutes;let n=Math.max(this._getEventStart(e),0);if(this._vuecal.snapToTime){const e=n+this._vuecal.snapToTime/2;n=e-e%this._vuecal.snapToTime}t.startTimeMinutes=n,t.start=new Date(new Date(i).setMinutes(n)),t.endTimeMinutes=Math.min(n+a,1440),t.end=new Date(new Date(i).setMinutes(t.endTimeMinutes))}eventDragStart(e,t){if(3===e.target.nodeType)return e.preventDefault();e.dataTransfer.dropEffect="move",e.dataTransfer.setData("event",JSON.stringify(t)),e.dataTransfer.setData("cursor-grab-at",e.offsetY);const{clickHoldAnEvent:l}=this._vuecal.domEvents;setTimeout((()=>{l._eid=null,clearTimeout(l.timeoutId),t.deleting=!1}),0),this._vuecal.domEvents.dragAnEvent._eid=t._eid,s._eid=t._eid,s.fromVueCal=this._vuecal._.uid,t.dragging=!0,setTimeout((()=>t.draggingStatic=!0),0),n=!1,a={id:this._vuecal.view.id,date:this._vuecal.view.startDate},r=!0}eventDragEnd(e){this._vuecal.domEvents.dragAnEvent._eid=null,s._eid=null,e.dragging=!1,e.draggingStatic=!1;const{fromVueCal:t,toVueCal:l}=s;l&&t!==l&&this._vuecal.utils.event.deleteAnEvent(e),s.fromVueCal=null,s.toVueCal=null,n&&r&&a.id&&this._vuecal.switchView(a.id,a.date,!0)}cellDragEnter(e,t,l){const i=e.currentTarget;if(!e.currentTarget.contains(e.relatedTarget)){if(i===u.el||!i.className.includes("vuecal__cell-content"))return!1;u.el&&(u.cell.highlighted=!1),u={el:i,cell:t,timeout:clearTimeout(u.timeout)},t.highlighted=!0,["years","year","month"].includes(this._vuecal.view.id)&&(u.timeout=setTimeout((()=>this._vuecal.switchToNarrowerView(l)),2e3))}}cellDragOver(e,t,l,i){e.preventDefault(),t.highlighted=!0,(i||0===i)&&(t.highlightedSplit=i)}cellDragLeave(e,t){e.preventDefault(),e.currentTarget.contains(e.relatedTarget)||(t.highlightedSplit=!1,u.cell===t&&(clearTimeout(u.timeout),u={el:null,cell:null,timeout:null},t.highlighted=!1))}cellDragDrop(e,t,l,i){e.preventDefault(),clearTimeout(u.timeout),u={el:null,cell:null,timeout:null};const a=JSON.parse(e.dataTransfer.getData("event")||"{}");let n,c;if(s.fromVueCal!==this._vuecal._.uid){const{_eid:e,start:t,end:r,duration:u,...s}=a;n=this._vuecal.utils.event.createAnEvent(l,u,{...s,split:i})}else if(n=this._vuecal.view.events.find((e=>e._eid===s._eid)),n||(n=this._vuecal.mutableEvents.find((e=>e._eid===s._eid)),c=!!n),!n){const e=a.endTimeMinutes-a.startTimeMinutes,{start:t,end:r,...u}=a;n=this._vuecal.utils.event.createAnEvent(l,e,{...u,split:i})}const{start:o,split:d}=n;this._updateEventStartEnd(e,n,a,l),c&&this._vuecal.addEventsToView([n]),n.dragging=!1,(i||0===i)&&(n.split=i),t.highlighted=!1,t.highlightedSplit=null,r=!1,s.toVueCal=this._vuecal._.uid;const v={event:this._vuecal.cleanupEvent(n),oldDate:o,newDate:n.start,...(i||0===i)&&{oldSplit:d,newSplit:i},originalEvent:this._vuecal.cleanupEvent(a),external:!s.fromVueCal};this._vuecal.$emit("event-drop",v),this._vuecal.$emit("event-change",{event:v.event,originalEvent:v.originalEvent}),setTimeout((()=>{s._eid&&this.eventDragEnd(n)}),300)}viewSelectorDragEnter(e,t,a){e.currentTarget.contains(e.relatedTarget)||(a.highlightedControl=t,clearTimeout(l),l=setTimeout((()=>{if(["previous","next"].includes(t))this._vuecal[t](),clearInterval(i),i=setInterval(this._vuecal[t],800);else if("today"===t){let e;clearInterval(i),this._vuecal.view.id.includes("year")&&(e=this._vuecal.enabledViews.filter((e=>!e.includes("year")))[0]),this._vuecal.switchView(e||this._vuecal.view.id,new Date((new Date).setHours(0,0,0,0)),!0)}else this._vuecal.switchView(t,null,!0);n=!0}),800))}viewSelectorDragLeave(e,t,a){e.currentTarget.contains(e.relatedTarget)||a.highlightedControl===t&&(a.highlightedControl=null,l&&(l=clearTimeout(l)),i&&(i=clearInterval(i)))}};
@@ -1,259 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- /**
5
- * vue-cal v4.10.2
6
- * (c) 2025 Antoni Andre <antoniandre.web@gmail.com>
7
- * @license MIT
8
- */
9
- const holdOverTimeout = 800;
10
- let changeViewTimeout = null;
11
- let pressPrevOrNextInterval = null;
12
- let viewBeforeDrag = { id: null, date: null };
13
- let viewChanged = false;
14
- let cancelViewChange = true;
15
- let dragOverCell = { el: null, cell: null, timeout: null };
16
- const dragging = {
17
- _eid: null,
18
- fromVueCal: null,
19
- toVueCal: null
20
- };
21
- const DragAndDrop = class {
22
- constructor(vuecal) {
23
- __publicField(this, "_vuecal");
24
- this._vuecal = vuecal;
25
- }
26
- /**
27
- * When click and drag an event the cursor can be anywhere in the event,
28
- * when dropping the event, we need to subtract the cursor position in the event.
29
- *
30
- * @param {Object} e The associated DOM event.
31
- */
32
- _getEventStart(e) {
33
- const { timeStep, timeCellHeight, timeFrom, utils } = this._vuecal;
34
- let { y } = utils.cell.getPosition(e);
35
- y -= e.dataTransfer.getData("cursor-grab-at") * 1;
36
- return Math.round(y * timeStep / parseInt(timeCellHeight) + timeFrom);
37
- }
38
- /**
39
- * On drop, update the event start and end date directly into the event.
40
- *
41
- * @param {Object} e The associated DOM event.
42
- * @param {Object} event The event being dragged.
43
- * @param {Object} transferData The transfer data from the HTML5 dragging event.
44
- * @param {Date} cellDate The hovered cell starting date.
45
- */
46
- _updateEventStartEnd(e, event, transferData, cellDate) {
47
- const eventDuration = transferData.duration * 1 || event.endTimeMinutes - event.startTimeMinutes;
48
- let startTimeMinutes = Math.max(this._getEventStart(e), 0);
49
- if (this._vuecal.snapToTime) {
50
- const plusHalfSnapTime = startTimeMinutes + this._vuecal.snapToTime / 2;
51
- startTimeMinutes = plusHalfSnapTime - plusHalfSnapTime % this._vuecal.snapToTime;
52
- }
53
- event.startTimeMinutes = startTimeMinutes;
54
- event.start = new Date(new Date(cellDate).setMinutes(startTimeMinutes));
55
- event.endTimeMinutes = Math.min(startTimeMinutes + eventDuration, 24 * 60);
56
- event.end = new Date(new Date(cellDate).setMinutes(event.endTimeMinutes));
57
- }
58
- /**
59
- * On event drag start, only possible if editableEvent is true.
60
- * /!\ This is using the native HTML5 drag & drop, not supported on touch devices.
61
- *
62
- * @param {Object} e The associated DOM event.
63
- * @param {Object} event The event being dragged.
64
- */
65
- eventDragStart(e, event) {
66
- if (e.target.nodeType === 3) return e.preventDefault();
67
- e.dataTransfer.dropEffect = "move";
68
- e.dataTransfer.setData("event", JSON.stringify(event));
69
- e.dataTransfer.setData("cursor-grab-at", e.offsetY);
70
- const { clickHoldAnEvent } = this._vuecal.domEvents;
71
- setTimeout(() => {
72
- clickHoldAnEvent._eid = null;
73
- clearTimeout(clickHoldAnEvent.timeoutId);
74
- event.deleting = false;
75
- }, 0);
76
- this._vuecal.domEvents.dragAnEvent._eid = event._eid;
77
- dragging._eid = event._eid;
78
- dragging.fromVueCal = this._vuecal._.uid;
79
- event.dragging = true;
80
- setTimeout(() => event.draggingStatic = true, 0);
81
- viewChanged = false;
82
- viewBeforeDrag = { id: this._vuecal.view.id, date: this._vuecal.view.startDate };
83
- cancelViewChange = true;
84
- }
85
- /**
86
- * On event drag end, when releasing the event.
87
- *
88
- * @param {Object} event The event being dragged.
89
- */
90
- eventDragEnd(event) {
91
- this._vuecal.domEvents.dragAnEvent._eid = null;
92
- dragging._eid = null;
93
- event.dragging = false;
94
- event.draggingStatic = false;
95
- const { fromVueCal, toVueCal } = dragging;
96
- if (toVueCal && fromVueCal !== toVueCal) this._vuecal.utils.event.deleteAnEvent(event);
97
- dragging.fromVueCal = null;
98
- dragging.toVueCal = null;
99
- if (viewChanged && cancelViewChange && viewBeforeDrag.id) this._vuecal.switchView(viewBeforeDrag.id, viewBeforeDrag.date, true);
100
- }
101
- /**
102
- * On cell/split enter with a dragging event.
103
- * Highlight the cell, and if on `years`, `year`, `month` view,
104
- * set a timer to go deeper on drag hold over this cell.
105
- *
106
- * @param {Object} e The associated DOM event.
107
- * @param {Object} cell The cell component's $data.
108
- * @param {Date} cellDate The hovered cell starting date.
109
- */
110
- cellDragEnter(e, cell, cellDate) {
111
- const target = e.currentTarget;
112
- if (e.currentTarget.contains(e.relatedTarget)) return;
113
- if (target === dragOverCell.el || !target.className.includes("vuecal__cell-content")) return false;
114
- if (dragOverCell.el) dragOverCell.cell.highlighted = false;
115
- dragOverCell = { el: target, cell, timeout: clearTimeout(dragOverCell.timeout) };
116
- cell.highlighted = true;
117
- if (["years", "year", "month"].includes(this._vuecal.view.id)) {
118
- dragOverCell.timeout = setTimeout(() => this._vuecal.switchToNarrowerView(cellDate), 2e3);
119
- }
120
- }
121
- /**
122
- * On cell/split drag over, highlight the cell being hovered,
123
- * Useful when starting to drag event on the same cell/split it's in.
124
- * Warning: This is fired repeatedly as long as you stay over this cell/split.
125
- *
126
- * @param {Object} e The associated DOM event.
127
- * @param {Object} cell The cell component's $data.
128
- * @param {Date} cellDate The hovered cell starting date.
129
- * @param {Number|String} split The optional split being hovered if any.
130
- */
131
- cellDragOver(e, cell, cellDate, split) {
132
- e.preventDefault();
133
- cell.highlighted = true;
134
- if (split || split === 0) cell.highlightedSplit = split;
135
- }
136
- /**
137
- * When event drag leaves a cell/split.
138
- * Remove the cell/split highlighted state.
139
- * Warning: cell dragleave event happens AFTER another cell dragenter!
140
- *
141
- * @param {Object} e The associated DOM event.
142
- * @param {Object} cell The cell component's $data.
143
- */
144
- cellDragLeave(e, cell) {
145
- e.preventDefault();
146
- if (e.currentTarget.contains(e.relatedTarget)) return;
147
- cell.highlightedSplit = false;
148
- if (dragOverCell.cell === cell) {
149
- clearTimeout(dragOverCell.timeout);
150
- dragOverCell = { el: null, cell: null, timeout: null };
151
- cell.highlighted = false;
152
- }
153
- }
154
- /**
155
- * On successful event drop into a cell/split.
156
- * Change the event start and end time and remove the event dragging state
157
- * and cell/split highlighted state.
158
- *
159
- * @param {Object} e The associated DOM event.
160
- * @param {Object} cell The cell component's $data.
161
- * @param {Date} cellDate The hovered cell starting date.
162
- * @param {Number|String} split The optional split being dropped into, if any.
163
- */
164
- cellDragDrop(e, cell, cellDate, split) {
165
- e.preventDefault();
166
- clearTimeout(dragOverCell.timeout);
167
- dragOverCell = { el: null, cell: null, timeout: null };
168
- const transferData = JSON.parse(e.dataTransfer.getData("event") || "{}");
169
- let event, addToView;
170
- if (dragging.fromVueCal !== this._vuecal._.uid) {
171
- const { _eid, start, end, duration, ...cleanTransferData } = transferData;
172
- event = this._vuecal.utils.event.createAnEvent(cellDate, duration, { ...cleanTransferData, split });
173
- } else {
174
- event = this._vuecal.view.events.find((evt) => evt._eid === dragging._eid);
175
- if (!event) {
176
- event = this._vuecal.mutableEvents.find((evt) => evt._eid === dragging._eid);
177
- addToView = !!event;
178
- }
179
- if (!event) {
180
- const duration = transferData.endTimeMinutes - transferData.startTimeMinutes;
181
- const { start, end, ...cleanTransferData } = transferData;
182
- event = this._vuecal.utils.event.createAnEvent(cellDate, duration, { ...cleanTransferData, split });
183
- }
184
- }
185
- const { start: oldDate, split: oldSplit } = event;
186
- this._updateEventStartEnd(e, event, transferData, cellDate);
187
- if (addToView) this._vuecal.addEventsToView([event]);
188
- event.dragging = false;
189
- if (split || split === 0) event.split = split;
190
- cell.highlighted = false;
191
- cell.highlightedSplit = null;
192
- cancelViewChange = false;
193
- dragging.toVueCal = this._vuecal._.uid;
194
- const params = {
195
- event: this._vuecal.cleanupEvent(event),
196
- oldDate,
197
- newDate: event.start,
198
- ...(split || split === 0) && { oldSplit, newSplit: split },
199
- originalEvent: this._vuecal.cleanupEvent(transferData),
200
- external: !dragging.fromVueCal
201
- // If external event, not coming from any Vue Cal.
202
- };
203
- this._vuecal.$emit("event-drop", params);
204
- this._vuecal.$emit("event-change", { event: params.event, originalEvent: params.originalEvent });
205
- setTimeout(() => {
206
- if (dragging._eid) this.eventDragEnd(event);
207
- }, 300);
208
- }
209
- /**
210
- * On drag enter on a view button or on today, prev & next buttons.
211
- * Sets a highlighted state on the hovered button, and go to requested view.
212
- *
213
- * @param {Object} e The associated DOM event.
214
- * @param {String} id The id of the header element being hovered. One of:
215
- * previous, next, today, years, year, month, week, day.
216
- * @param {Object} headerData The header component's $data.
217
- */
218
- viewSelectorDragEnter(e, id, headerData) {
219
- if (e.currentTarget.contains(e.relatedTarget)) return;
220
- headerData.highlightedControl = id;
221
- clearTimeout(changeViewTimeout);
222
- changeViewTimeout = setTimeout(() => {
223
- if (["previous", "next"].includes(id)) {
224
- this._vuecal[id]();
225
- clearInterval(pressPrevOrNextInterval);
226
- pressPrevOrNextInterval = setInterval(this._vuecal[id], holdOverTimeout);
227
- } else if (id === "today") {
228
- clearInterval(pressPrevOrNextInterval);
229
- let viewId;
230
- if (this._vuecal.view.id.includes("year")) {
231
- viewId = this._vuecal.enabledViews.filter((view) => !view.includes("year"))[0];
232
- }
233
- this._vuecal.switchView(viewId || this._vuecal.view.id, new Date((/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0)), true);
234
- } else this._vuecal.switchView(id, null, true);
235
- viewChanged = true;
236
- }, holdOverTimeout);
237
- }
238
- /**
239
- * On drag leave on a view button or on today, prev & next buttons.
240
- * Removes the highlighted state on the hovered button, and cancel the timer to
241
- * go to the requested view.
242
- *
243
- * @param {Object} e The associated DOM event.
244
- * @param {String} id The id of the header element being hovered. One of:
245
- * previous, next, today, years, year, month, week, day.
246
- * @param {Object} headerData The header component's $data.
247
- */
248
- viewSelectorDragLeave(e, id, headerData) {
249
- if (e.currentTarget.contains(e.relatedTarget)) return;
250
- if (headerData.highlightedControl === id) {
251
- headerData.highlightedControl = null;
252
- if (changeViewTimeout) changeViewTimeout = clearTimeout(changeViewTimeout);
253
- if (pressPrevOrNextInterval) pressPrevOrNextInterval = clearInterval(pressPrevOrNextInterval);
254
- }
255
- }
256
- };
257
- export {
258
- DragAndDrop
259
- };
@@ -1,6 +0,0 @@
1
- /**
2
- * vue-cal v4.10.2
3
- * (c) 2025 Antoni Andre <antoniandre.web@gmail.com>
4
- * @license MIT
5
- */
6
- define(["exports"],(function(e){"use strict";const t=["الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"],a=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر"," ديسمبر"],n="سنوات",o="أسبوع",d="اليوم",y="لا حدث",r="طوال اليوم",l="إنشاء حدث",s="dddd D MMMM YYYY",m={weekDays:t,months:a,years:n,year:"سنة",month:"شهر",week:o,day:"يوم",today:d,noEvent:y,allDay:r,deleteEvent:"حذف",createEvent:l,dateFormat:s};e.allDay=r,e.createEvent=l,e.dateFormat=s,e.day="يوم",e.default=m,e.deleteEvent="حذف",e.month="شهر",e.months=a,e.noEvent=y,e.today=d,e.week=o,e.weekDays=t,e.year="سنة",e.years=n,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}));
@@ -1,6 +0,0 @@
1
- "use strict";
2
- /**
3
- * vue-cal v4.10.2
4
- * (c) 2025 Antoni Andre <antoniandre.web@gmail.com>
5
- * @license MIT
6
- */Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=["الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"],t=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر"," ديسمبر"],o="سنوات",r="أسبوع",s="اليوم",a="لا حدث",p="طوال اليوم",d="إنشاء حدث",n="dddd D MMMM YYYY",x={weekDays:e,months:t,years:o,year:"سنة",month:"شهر",week:r,day:"يوم",today:s,noEvent:a,allDay:p,deleteEvent:"حذف",createEvent:d,dateFormat:n};exports.allDay=p,exports.createEvent=d,exports.dateFormat=n,exports.day="يوم",exports.default=x,exports.deleteEvent="حذف",exports.month="شهر",exports.months=t,exports.noEvent=a,exports.today=s,exports.week=r,exports.weekDays=e,exports.year="سنة",exports.years=o;