@oneclick.dev/cms-core-modules 0.0.114 → 0.0.116

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 (87) hide show
  1. package/dist/{ContentEditor-MctMvN7D.js → ContentEditor-CsbOFg3a.js} +52 -52
  2. package/dist/{ContentEditor-C5yNNLeV.mjs → ContentEditor-Df5uWpVC.mjs} +10337 -8677
  3. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-gozJKXvM.js +1 -0
  4. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-pDO9b4Pv.mjs +77 -0
  5. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-BHeMJ6nr.mjs +1476 -0
  6. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-C2zwt5UF.js +1 -0
  7. package/dist/OrderDetailDialog.vue_vue_type_script_setup_true_lang-BYSeUW_V.js +925 -0
  8. package/dist/OrderDetailDialog.vue_vue_type_script_setup_true_lang-DwAUYR8p.mjs +5021 -0
  9. package/dist/Overview-CBahJviK.js +1 -0
  10. package/dist/Overview-CVQ1pkuD.mjs +527 -0
  11. package/dist/TableView-Csv5Lycy.mjs +6234 -0
  12. package/dist/TableView-Cwal0BPW.js +4 -0
  13. package/dist/agenda-BSdlrfxv.mjs +1253 -0
  14. package/dist/agenda-Bev1mO7E.js +1 -0
  15. package/dist/availability-ClBGVgE9.js +1 -0
  16. package/dist/availability-D8JdA4rP.mjs +274 -0
  17. package/dist/booking-data-Px7XCIfU.mjs +1024 -0
  18. package/dist/booking-data-aMS1p_3g.js +1 -0
  19. package/dist/cms-core-modules.css +1 -1
  20. package/dist/exceptions-CqityDo9.mjs +651 -0
  21. package/dist/exceptions-DXqc0Nza.js +1 -0
  22. package/dist/index-CM4eaK5T.mjs +1245 -0
  23. package/dist/index-DliTZzwI.js +35 -0
  24. package/dist/index.cjs.js +1 -1
  25. package/dist/index.mjs +12 -11
  26. package/dist/orders-1swJVKw2.js +1 -0
  27. package/dist/orders-D41GbzIa.mjs +624 -0
  28. package/dist/payment-BJHgpaeT.js +1 -0
  29. package/dist/payment-D5j-68Ig.mjs +1278 -0
  30. package/dist/refunds-D9nTeD2d.mjs +436 -0
  31. package/dist/refunds-oVB2Opib.js +1 -0
  32. package/dist/resources-8WouFvJe.js +1 -0
  33. package/dist/resources-B-D5MUhV.mjs +975 -0
  34. package/dist/server-handlers.cjs.js +1 -1
  35. package/dist/server-handlers.mjs +626 -515
  36. package/dist/src/appointments/components/edit/EventDialog/BookingsList.vue.d.ts +146 -5
  37. package/dist/src/appointments/components/edit/EventDialog/CancelRefundReservationDialog.vue.d.ts +33 -0
  38. package/dist/src/appointments/components/edit/EventDialog/OrderDetailDialog.vue.d.ts +26 -8
  39. package/dist/src/appointments/components/edit/EventDialog/RefundDetailsDisplay.vue.d.ts +8 -0
  40. package/dist/src/appointments/components/edit/EventDialog/ReservationDetailDialog.vue.d.ts +91 -5
  41. package/dist/src/appointments/components/edit/EventDialog/TransferReservationDialog.vue.d.ts +20 -3
  42. package/dist/src/appointments/components/edit/NewReservationDialog/ReservationLines.vue.d.ts +5 -0
  43. package/dist/src/appointments/components/edit/OrderMetadataDisplay.vue.d.ts +20 -2
  44. package/dist/src/appointments/components/edit/dashboard/BookingsList.vue.d.ts +240 -0
  45. package/dist/src/appointments/composables/useAgendaMetadataSchema.d.ts +37 -0
  46. package/dist/src/appointments/pages/edit/orders.vue.d.ts +225 -0
  47. package/dist/src/appointments/pages/edit/refunds.vue.d.ts +2 -0
  48. package/dist/src/appointments/server.d.ts +2 -0
  49. package/dist/src/appointments/types.d.ts +6 -0
  50. package/dist/src/appointments/utils/printReservation.d.ts +65 -3
  51. package/dist/src/contentManager/components/content-editor/tiptap-extensions/table/Table.d.ts +36 -0
  52. package/dist/src/contentManager/components/content-editor/tiptap-extensions/table/Table.vue.d.ts +95 -0
  53. package/dist/src/contentManager/components/content-editor/tiptap-extensions/table/TableCell.d.ts +13 -0
  54. package/dist/src/contentManager/components/content-editor/tiptap-extensions/table/TableHeader.d.ts +6 -0
  55. package/dist/src/contentManager/components/content-editor/tiptap-extensions/table/TableRow.d.ts +6 -0
  56. package/dist/src/contentManager/components/content-editor/tiptap-extensions/table/index.d.ts +4 -0
  57. package/dist/src/contentManager/components/content-editor/tiptap-menus/element-editor-views/TableMenu.vue.d.ts +13 -0
  58. package/dist/src/contentManager/components/content-editor/tiptap-menus/element-editor-views/index.d.ts +14 -0
  59. package/package.json +2 -2
  60. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-DWMqQvHl.mjs +0 -76
  61. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-kpjbVSXg.js +0 -1
  62. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-Baqy-rTT.js +0 -1
  63. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-Dx4Bpa2m.mjs +0 -1263
  64. package/dist/OrderDetailDialog.vue_vue_type_script_setup_true_lang-COrK1j0S.js +0 -1
  65. package/dist/OrderDetailDialog.vue_vue_type_script_setup_true_lang-Vb3q8EVv.mjs +0 -330
  66. package/dist/Overview-98nkJUWN.mjs +0 -481
  67. package/dist/Overview-Dl8cMlsr.js +0 -1
  68. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-CuwREvXD.js +0 -349
  69. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-GYNZ_yhD.mjs +0 -3077
  70. package/dist/TableView-CVfkyj1k.js +0 -4
  71. package/dist/TableView-zDx0IegJ.mjs +0 -6096
  72. package/dist/agenda-BaJu3-1c.js +0 -1
  73. package/dist/agenda-BwVY_8oM.mjs +0 -1165
  74. package/dist/availability-CMrRa5y2.mjs +0 -269
  75. package/dist/availability-Cf2YfMwM.js +0 -1
  76. package/dist/booking-data-DgJd0BcM.mjs +0 -889
  77. package/dist/booking-data-Di5GmH_8.js +0 -1
  78. package/dist/exceptions-B6P9UiCj.js +0 -1
  79. package/dist/exceptions-De9-FvdP.mjs +0 -646
  80. package/dist/index-DL6orwdK.js +0 -35
  81. package/dist/index-hH3e-IYz.mjs +0 -1187
  82. package/dist/orders-C65SlpJy.mjs +0 -618
  83. package/dist/orders-XVzWAgG1.js +0 -1
  84. package/dist/payment-C3ohkehF.mjs +0 -1080
  85. package/dist/payment-Dfr-Ro-a.js +0 -1
  86. package/dist/resources-CxeFd57z.js +0 -1
  87. package/dist/resources-DwYxn2Vi.mjs +0 -811
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),H=require("./DateFormatter-CSAbE3BC.js"),M=require("lucide-vue-next"),oe=require("./EditLayout.vue_vue_type_script_setup_true_lang-gozJKXvM.js"),U=require("@oneclick.dev/cms-kit"),X=require("./OrderDetailDialog.vue_vue_type_script_setup_true_lang-BYSeUW_V.js"),ne=require("./_plugin-vue_export-helper-BHFhmbuH.js"),ae=require("./NewReservationDialog.vue_vue_type_script_setup_true_lang-C2zwt5UF.js"),se=require("./index-CxETuRsG.js"),re={class:"mb-6"},le={class:"flex items-end gap-px h-24 bg-muted/30 rounded-lg p-2 overflow-visible"},ie=["onClick"],ce={class:"absolute -top-8 left-1/2 -translate-x-1/2 bg-popover border shadow-md rounded px-2 py-1 text-xs whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none z-10"},de={class:"font-medium"},ue={class:"text-muted-foreground"},me={class:"w-full flex-1 flex items-end justify-center"},pe={key:1,class:"text-[10px] mt-1"},fe={key:0,class:"mt-2 text-sm text-muted-foreground flex items-center gap-2"},ve={class:"font-medium text-foreground"},ge={class:"font-medium text-foreground"},he=e.defineComponent({__name:"TimelineChart",props:{timeSlots:{},slotStats:{},selectedTimeSlot:{},maxSpots:{}},emits:["select","clear"],setup(d,{emit:b}){const x=b,E=o=>{x("select",o)},$=()=>{x("clear")};return(o,r)=>{const l=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",re,[r[2]||(r[2]=e.createElementVNode("h3",{class:"font-semibold text-sm mb-2"},"Timeline",-1)),e.createElementVNode("div",le,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.timeSlots,n=>(e.openBlock(),e.createElementBlock("div",{key:n.startTime,class:"flex-1 min-w-0 flex flex-col items-center cursor-pointer group h-full relative",onClick:y=>E(n.startTime)},[e.createElementVNode("div",ce,[e.createElementVNode("div",de,e.toDisplayString(n.startTime),1),e.createElementVNode("div",ue,e.toDisplayString(d.slotStats[n.startTime]?.spots||0)+" spots",1)]),e.createElementVNode("div",me,[e.createElementVNode("div",{class:e.normalizeClass(["w-full transition-all duration-200",[d.selectedTimeSlot===n.startTime?"bg-primary":d.slotStats[n.startTime]?.spots>0?"bg-primary/60 group-hover:bg-primary/80":"bg-muted-foreground/20 group-hover:bg-muted-foreground/30"]]),style:e.normalizeStyle({height:d.slotStats[n.startTime]?.spots>0?`${d.slotStats[n.startTime].spots/d.maxSpots*100}%`:"2px",minHeight:d.slotStats[n.startTime]?.spots>0?"4px":"2px"})},null,6)]),n.startTime.endsWith(":00")?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["text-[10px] text-muted-foreground mt-1 transition-colors truncate",{"text-primary font-medium":d.selectedTimeSlot===n.startTime}])},e.toDisplayString(n.label),3)):(e.openBlock(),e.createElementBlock("span",pe," "))],8,ie))),128))]),d.selectedTimeSlot?(e.openBlock(),e.createElementBlock("div",fe,[e.createVNode(l,{variant:"ghost",size:"icon",class:"h-6 w-6 p-0",onClick:$},{default:e.withCtx(()=>[e.createVNode(e.unref(M.X),{size:14})]),_:1}),e.createElementVNode("span",null,[r[0]||(r[0]=e.createTextVNode(" Showing ",-1)),e.createElementVNode("span",ve,e.toDisplayString(d.slotStats[d.selectedTimeSlot]?.bookings||0),1),r[1]||(r[1]=e.createTextVNode(" bookings at ",-1)),e.createElementVNode("span",ge,e.toDisplayString(d.selectedTimeSlot),1)])])):e.createCommentVNode("",!0)])}}}),xe={class:"flex items-center justify-between mb-3"},ye={class:"font-semibold"},ke={key:0,class:"text-muted-foreground font-normal"},be={class:"relative mb-3"},_e={key:0,class:"flex items-center justify-center py-8"},Ne={key:1,class:"text-center py-8 text-muted-foreground"},we={key:2,class:"space-y-2 max-h-80 overflow-y-auto"},Ee=["onClick"],Se={class:"flex items-start justify-between"},Ve={class:"flex-1"},Ce={class:"font-medium"},De={class:"text-sm text-muted-foreground"},Be={class:"text-sm text-muted-foreground"},$e={class:"flex items-center gap-4"},Te={class:"flex items-center gap-2 mt-1 text-xs text-muted-foreground"},ze={class:"flex items-center gap-2 mt-1 text-xs text-muted-foreground"},Ie={class:"text-right"},Me={key:0,class:"inline-block px-2 py-1 text-xs rounded-full bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},Ae={key:1,class:"inline-block px-2 py-1 text-xs rounded-full bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400"},Le={key:2,class:"inline-block px-2 py-1 text-xs rounded-full bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400"},je={key:3,class:"inline-block px-2 py-1 text-xs rounded-full bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400"},Oe={key:4,class:"inline-block px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400"},Pe={key:5,class:"text-sm font-medium mt-1"},Re=e.defineComponent({__name:"BookingsList",props:{agendaData:{},resources:{},orders:{},filteredOrders:{},isLoading:{type:Boolean},selectedTimeSlot:{},searchQuery:{}},emits:["update:searchQuery","refresh"],setup(d,{emit:b}){const x=d,{params:E}=U.useModuleRoute(),$=e.computed(()=>E.value?.id??E.id??x.agendaData?.id??""),{metadataSchema:o}=X.useAgendaMetadataSchema($),r=e.computed(()=>{const v=Array.isArray(x.resources)?x.resources:[],u=Array.isArray(x.agendaData?.resources)?x.agendaData.resources:[],S=[...v,...u],I=new Set;return S.filter(p=>{const i=p?.id;return!i||I.has(String(i))?!1:(I.add(String(i)),!0)})}),l=b,{config:n}=U.useModule(),y=U.useFirebaseIntegration(n.project),f=e.ref(null),z=e.ref(null),C=v=>{l("update:searchQuery",v)},N=()=>{l("update:searchQuery","")},A=()=>{l("refresh")},D=(v,u)=>{const S=v.id||v.orderId||u.orderId||"",I=r.value.find(p=>String(p.id)===String(u.resourceId));return{customerInfo:v.customerInfo,amountDue:v.amountDue,amountPaid:v.amountPaid,status:v.status,reservationStatus:u.status,subtotal:v.subtotal,total:v.total,discount:v.discount,id:S,res_id:u.id,resourceId:u.resourceId,spots:u.spots,date:u.date,createdAt:v.createdAt,startTime:u.timeslot?.startTime,endTime:u.timeslot?.endTime,reservationPrice:u.totalPrice,reservationBasePrice:u.basePrice,reservationAddOnsPrice:u.addOnsPrice,adjustments:v.adjustments||[],reservationAdjustments:u.adjustments||[],pricingOptionId:u.pricingOptionId,pricingOption:u.pricingOption,resourceName:I?.name,resourceColor:I?.color,metadata:v.metadata||{},reservationMetadata:u.metadata||{},refundStatus:u.refundStatus,refundedAt:u.refundedAt,refundedAmount:u.refundedAmount,refunds:Array.isArray(u.refunds)?u.refunds:[]}},B=async()=>{await e.nextTick(),await new Promise(v=>{if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>v());return}v()})},L=async v=>{if(!v)return;const u=await y.get(n.reservationsCollection,v);if(!u)return;const S={...u,id:u.id||v},I=(S.reservations||[]).map(p=>D(S,p));I.length&&(await B(),z.value?.openDialog({id:S.id,customerInfo:S.customerInfo,status:S.status,createdAt:S.createdAt,metadata:S.metadata||{},reservations:I,adjustments:S.adjustments||[],totalPrice:typeof S.total=="number"?S.total:I.reduce((p,i)=>p+(i.reservationPrice||0),0),totalSpots:I.reduce((p,i)=>p+(i.spots||0),0)}))},q=async v=>{await B(),f.value?.openDialog(v)};return(v,u)=>{const S=e.resolveComponent("Input"),I=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",xe,[e.createElementVNode("h3",ye,[u[2]||(u[2]=e.createTextVNode(" Bookings ",-1)),d.selectedTimeSlot||d.searchQuery?(e.openBlock(),e.createElementBlock("span",ke," ("+e.toDisplayString(d.filteredOrders.length)+" of "+e.toDisplayString(d.orders.length)+") ",1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",be,[e.createVNode(e.unref(M.Search),{size:16,class:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),e.createVNode(S,{"model-value":d.searchQuery,placeholder:"Search by name, email, or phone...",class:"pl-9 pr-9","onUpdate:modelValue":C},null,8,["model-value"]),d.searchQuery?(e.openBlock(),e.createBlock(I,{key:0,variant:"ghost",size:"icon",class:"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7",onClick:N},{default:e.withCtx(()=>[e.createVNode(e.unref(M.X),{size:14})]),_:1})):e.createCommentVNode("",!0)]),d.isLoading?(e.openBlock(),e.createElementBlock("div",_e,[...u[3]||(u[3]=[e.createElementVNode("div",{class:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"},null,-1)])])):d.filteredOrders.length===0?(e.openBlock(),e.createElementBlock("div",Ne,e.toDisplayString(d.selectedTimeSlot?"No bookings for this time slot":"No bookings for this event"),1)):(e.openBlock(),e.createElementBlock("div",we,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.filteredOrders,p=>(e.openBlock(),e.createElementBlock("div",{key:p.res_id||p.id,class:"p-3 border rounded-lg hover:bg-muted/50 transition-colors",onClick:i=>f.value?.openDialog(p)},[e.createElementVNode("div",Se,[e.createElementVNode("div",Ve,[e.createElementVNode("div",Ce,e.toDisplayString(p.customerInfo.firstName+" "+p.customerInfo.lastName||"Unknown Customer"),1),e.createElementVNode("div",De,e.toDisplayString(p.customerInfo.email),1),e.createElementVNode("div",Be,e.toDisplayString(p.customerInfo.phone),1),e.createElementVNode("div",$e,[e.createElementVNode("div",Te,[e.createVNode(e.unref(M.Clock),{size:12}),e.createElementVNode("span",null,e.toDisplayString(p.startTime)+" - "+e.toDisplayString(p.endTime),1)]),e.createElementVNode("div",ze,[e.createVNode(e.unref(M.Users),{size:12}),e.createElementVNode("span",null,e.toDisplayString(p.spots),1)])]),e.createVNode(X._sfc_main,{metadata:{...p.metadata,...p.reservationMetadata},schema:e.unref(o),"display-filter":["highlight","badge"],compact:"",class:"mt-1"},null,8,["metadata","schema"])]),e.createElementVNode("div",Ie,[p.reservationStatus==="needs_approval"?(e.openBlock(),e.createElementBlock("span",Me,"Needs Approval")):p.reservationStatus==="approved"?(e.openBlock(),e.createElementBlock("span",Ae,"Approved")):p.reservationStatus==="rejected"?(e.openBlock(),e.createElementBlock("span",Le,"Rejected")):p.reservationStatus==="cancelled"?(e.openBlock(),e.createElementBlock("span",je,"Cancelled")):(e.openBlock(),e.createElementBlock("span",Oe,"Pending")),p.reservationPrice||p.reservationPrice===0?(e.openBlock(),e.createElementBlock("div",Pe," €"+e.toDisplayString(p.reservationPrice.toFixed(2)),1)):e.createCommentVNode("",!0)])])],8,Ee))),128))])),e.createVNode(X._sfc_main$1,{ref_key:"reservationDetailDialog",ref:f,"agenda-data":d.agendaData,resources:d.resources,"show-order-link":"",onCancelled:A,onConfirmed:A,onRejected:A,onTransferred:A,onOpenOrder:u[0]||(u[0]=p=>L(p))},null,8,["agenda-data","resources"]),e.createVNode(X._sfc_main$2,{ref_key:"orderDetailDialog",ref:z,"agenda-data":d.agendaData,resources:d.resources,onOpenReservation:u[1]||(u[1]=p=>q(p))},null,8,["agenda-data","resources"])])}}}),Fe={class:"flex items-center gap-4 mt-2 text-sm"},Ue={class:"flex items-center gap-1"},qe={key:0,class:"flex items-center gap-1"},He={class:"flex items-center gap-1"},Qe={class:"py-4"},We=e.defineComponent({__name:"EventDialog",props:{agendaData:{},resources:{default:()=>[]}},setup(d,{expose:b}){const x=d,{config:E}=U.useModule(),{params:$}=U.useModuleRoute(),o=U.useFirebaseIntegration(E.project),r=e.ref(!1),l=e.ref(null),n=e.ref([]),y=e.ref(!1),f=e.ref(null),z=e.ref("");e.provide("event",l);const C=e.computed(()=>{if(!l.value)return[];const i=l.value.resource?.interval||60,t=[],[c,w]=l.value.startTime.split(":").map(Number),[P,O]=l.value.endTime.split(":").map(Number),_=c*60+w,k=P*60+O;for(let g=_;g<k;g+=i){const s=Math.floor(g/60),m=g%60,V=Math.min(g+i,k),h=Math.floor(V/60),T=V%60,j=`${s.toString().padStart(2,"0")}:${m.toString().padStart(2,"0")}`,a=`${h.toString().padStart(2,"0")}:${T.toString().padStart(2,"0")}`;t.push({startTime:j,endTime:a,label:j})}return t}),N=i=>{const t=i.getFullYear(),c=String(i.getMonth()+1).padStart(2,"0"),w=String(i.getDate()).padStart(2,"0");return`${t}-${c}-${w}`},A=e.computed(()=>{const i={};return C.value.forEach(t=>{i[t.startTime]={bookings:0,spots:0,orders:[]}}),n.value.forEach(t=>{C.value.forEach(c=>{t.startTime<c.endTime&&t.endTime>c.startTime&&(i[c.startTime].bookings++,i[c.startTime].spots+=t.spots||0,i[c.startTime].orders.push(t))})}),i}),D=e.computed(()=>Math.max(1,...Object.values(A.value).map(i=>i.spots))),B=e.computed(()=>{let i=n.value;return f.value&&(i=A.value[f.value]?.orders||[]),z.value.trim()&&(i=new X.Fuse(i,{keys:["customerInfo.firstName","customerInfo.lastName","customerInfo.email","customerInfo.phone"],threshold:.3,ignoreLocation:!0}).search(z.value).map(c=>c.item)),i}),L=e.computed(()=>({spots:n.value.reduce((i,t)=>i+(t.spots||0),0),bookings:n.value.length})),q=i=>{f.value===i?f.value=null:f.value=i},v=()=>{f.value=null},u=async i=>{r.value=!0,l.value=i,f.value=null,z.value="",await S()},S=async()=>{if(l.value){y.value=!0,n.value=[];try{const i=$.value.id,t=N(new Date(l.value.date)),c=l.value.resourceId||l.value.resource?.id,w=new Set;if(c?w.add(`${c}_${t}`):x.resources?.forEach(_=>{w.add(`${_.id}_${t}`)}),w.size===0){n.value=[];return}const P=await o.find(E.reservationsCollection,{filters:[{field:"agendaId",operator:"==",value:i},{field:"status",operator:"==",value:"confirmed"},{field:"flattenedReservationDates",operator:"array-contains-any",value:Array.from(w)}]});let O=[];P.forEach(_=>{(_.reservations?.filter(g=>g.date!==t?!1:c?g.resourceId===c:!0)||[]).forEach(g=>{const s=x.resources.find(V=>V.id===g.resourceId),m=_.id||_.orderId||g.orderId||"";(g.status==="approved"||g.status==="needs_approval")&&O.push({customerInfo:_.customerInfo,amountDue:_.amountDue,amountPaid:_.amountPaid,status:_.status,reservationStatus:g.status,subtotal:_.subtotal,total:_.total,discount:_.discount,id:m,res_id:g.id,resourceId:g.resourceId,spots:g.spots,date:t,createdAt:_.createdAt,startTime:g.timeslot?.startTime,endTime:g.timeslot?.endTime,reservationPrice:g.totalPrice,reservationBasePrice:g.basePrice,reservationAddOnsPrice:g.addOnsPrice,adjustments:_.adjustments||[],reservationAdjustments:g.adjustments||[],pricingOptionId:g.pricingOptionId,pricingOption:g.pricingOption,resourceName:s?.name,resourceColor:s?.color,metadata:_.metadata||{},reservationMetadata:g.metadata||{},refundStatus:g.refundStatus,refundedAt:g.refundedAt,refundedAmount:g.refundedAmount,refunds:Array.isArray(g.refunds)?g.refunds:[]})})}),n.value=O.sort((_,k)=>_.startTime?.localeCompare(k.startTime||"")||0)}catch(i){console.error("Error loading orders:",i),n.value=[]}finally{y.value=!1}}},I=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],p=["January","February","March","April","May","June","July","August","September","October","November","December"];return b({openDialog:u}),(i,t)=>{const c=e.resolveComponent("DialogTitle"),w=e.resolveComponent("DialogDescription"),P=e.resolveComponent("DialogHeader"),O=e.resolveComponent("Button"),_=e.resolveComponent("DialogFooter"),k=e.resolveComponent("DialogScrollContent"),g=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(g,{open:r.value,"onUpdate:open":t[2]||(t[2]=s=>r.value=s)},{default:e.withCtx(()=>[e.createVNode(k,{class:"sm:max-w-3xl"},{default:e.withCtx(()=>[e.createVNode(P,null,{default:e.withCtx(()=>[l.value?.date?(e.openBlock(),e.createBlock(c,{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(I[new Date(l.value.date).getUTCDay()])+" "+e.toDisplayString(p[new Date(l.value.date).getUTCMonth()])+" "+e.toDisplayString(new Date(l.value.date).getUTCDate())+", "+e.toDisplayString(new Date(l.value.date).getUTCFullYear()),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(w,null,{default:e.withCtx(()=>[e.createElementVNode("div",Fe,[e.createElementVNode("div",Ue,[e.createVNode(e.unref(M.Clock),{size:14}),e.createElementVNode("span",null,e.toDisplayString(l.value?.startTime)+" – "+e.toDisplayString(l.value?.endTime),1)]),l.value?.resource?(e.openBlock(),e.createElementBlock("div",qe,[e.createElementVNode("div",{class:"w-4 h-4 rounded-full",style:e.normalizeStyle({backgroundColor:l.value.resource.color||"#6b7280"})},null,4),e.createElementVNode("span",null,e.toDisplayString(l.value.resource.name),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",He,[e.createVNode(e.unref(M.Users),{size:14}),e.createElementVNode("span",null,e.toDisplayString(L.value.spots)+" spots in "+e.toDisplayString(L.value.bookings)+" reservations",1)])])]),_:1})]),_:1}),e.createElementVNode("div",Qe,[C.value.length>1?(e.openBlock(),e.createBlock(he,{key:0,"time-slots":C.value,"slot-stats":A.value,"selected-time-slot":f.value,"max-spots":D.value,onSelect:q,onClear:v,tabindex:"0"},null,8,["time-slots","slot-stats","selected-time-slot","max-spots"])):e.createCommentVNode("",!0),e.createVNode(Re,{"agenda-data":d.agendaData,resources:d.resources,orders:n.value,"filtered-orders":B.value,"is-loading":y.value,"selected-time-slot":f.value,"search-query":z.value,"onUpdate:searchQuery":t[0]||(t[0]=s=>z.value=s),onRefresh:S},null,8,["agenda-data","resources","orders","filtered-orders","is-loading","selected-time-slot","search-query"])]),e.createVNode(_,null,{default:e.withCtx(()=>[e.createVNode(O,{variant:"outline",onClick:t[1]||(t[1]=s=>r.value=!1)},{default:e.withCtx(()=>[...t[3]||(t[3]=[e.createTextVNode("Close",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["open"])}}}),Xe={class:"flex-1 border-r shadow-sm overflow-hidden min-h-[1536px]"},Ye={class:"relative h-full min-h-[1536px]"},Je={class:"divide-y divide-input/80 h-full flex flex-col min-h-[1536px] border-y border-input/80"},Ke={class:"absolute inset-0 pointer-events-none"},Ge={class:"relative mr-1 @md:mr-3 h-full ml-0.5 @md:ml-2"},Ze=["onClick"],et={key:0,class:"absolute bottom-0 left-0 right-0 h-1 bg-black/20"},tt={class:"flex items-start justify-between gap-2 mb-1"},ot={class:"font-semibold text-xs @md:text-sm leading-tight line-clamp-1 flex-1"},nt={class:"flex items-center gap-1 shrink-0"},at=["title"],st={class:"font-medium"},J=e.defineComponent({__name:"EventTimeline",props:{agendaData:{},date:{},events:{},firstDay:{type:Boolean,default:!1},resources:{default:()=>[]}},setup(d){const b=d,x=e.ref(null),E=r=>{const[l,n]=r.split(":").map(Number);return l*60+n};e.computed(()=>!b.events||!b.resources?[]:b.resources.map(r=>{const n=b.events.filter(y=>y.resourceId===r.id).map(y=>{const f=E(y.startTime),C=E(y.endTime)-f,N=f/1440*100,A=C/1440*100,D=(y.bookings??0)>0,B=y.maxBookings?(y.bookings??0)/y.maxBookings*100:0;return{...y,top:`${N}%`,height:`${A}%`,color:y.resource?.color||"#3b82f6",hasBookings:D,fillPercentage:B,isSmall:C<60}});return{resource:r,events:n}}));const $=e.computed(()=>b.events?b.events.map(r=>{const l=E(r.startTime),y=E(r.endTime)-l,f=l/1440*100,z=y/1440*100,C=(r.bookings??0)>0,N=r.maxBookings?(r.bookings??0)/r.maxBookings*100:0;return{...r,top:`${f}%`,height:`${z}%`,color:r.resource?.color||"#3b82f6",hasBookings:C,fillPercentage:N,isSmall:y<60}}):[]),o=Array.from({length:24},(r,l)=>({hour:l,label:`${l.toString().padStart(2,"0")}:00`}));return(r,l)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",Xe,[e.createElementVNode("div",Ye,[e.createElementVNode("div",Je,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o),n=>(e.openBlock(),e.createElementBlock("div",{key:n.hour,class:"flex-1 flex transition-all duration-200"},[...l[0]||(l[0]=[e.createElementVNode("div",{class:"flex-1 relative"},[e.createElementVNode("div",{class:"absolute top-1/2 left-0 right-0 border-t border-dashed border-input/50"})],-1)])]))),128))]),e.createElementVNode("div",Ke,[e.createElementVNode("div",Ge,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,n=>(e.openBlock(),e.createElementBlock("div",{key:n.id,style:e.normalizeStyle({top:n.top,height:n.height,opacity:n.hasBookings?"1":"0.5"}),class:"event-card absolute left-0.5 right-0.5 @md:left-2 @md:right-2 rounded-lg pointer-events-auto cursor-pointer group/event transition-all duration-200 hover:shadow-xl overflow-hidden",onClick:y=>x.value?.openDialog(n)},[e.createElementVNode("div",{style:e.normalizeStyle({backgroundColor:n.color}),class:"absolute inset-0 shadow-lg"},[n.maxBookings?(e.openBlock(),e.createElementBlock("div",et,[e.createElementVNode("div",{class:"h-full bg-white/40 transition-all duration-300",style:e.normalizeStyle({width:`${n.fillPercentage}%`})},null,4)])):e.createCommentVNode("",!0)],4),e.createElementVNode("div",{class:e.normalizeClass(["relative h-full p-1.5 @md:p-3 flex flex-col",`${n.hasBookings?"text-white":"text-gray-600 dark:text-gray-100"}`])},[e.createElementVNode("div",tt,[e.createElementVNode("h3",ot,e.toDisplayString(n.title),1),e.createElementVNode("div",nt,[n.resource?(e.openBlock(),e.createElementBlock("div",{key:0,class:"w-5 h-5 @md:w-6 @md:h-6 rounded-full flex items-center justify-center text-[10px] @md:text-xs font-bold bg-white/30 backdrop-blur-sm text-white border border-white/40",title:n.resource.name},e.toDisplayString(n.resource.avatarLabel||n.resource.name.charAt(0).toUpperCase()),9,at)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-0.5 @md:gap-1 px-1.5 @md:px-2 py-0.5 rounded-full text-[10px] @md:text-xs font-medium",n.hasBookings?"bg-white text-black backdrop-blur-sm":"bg-black/10 backdrop-blur-sm"])},[e.createVNode(e.unref(M.Users),{size:12}),e.createElementVNode("span",null,e.toDisplayString(n.bookings),1)],2)])]),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-1 @md:gap-2 text-[10px] @md:text-xs opacity-90 mt-auto",{"-translate-x-1 -translate-y-2 scale-80 origin-[0_0]":n.isSmall}])},[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-1 px-1 @md:px-2 py-0.5 rounded backdrop-blur-sm",{"bg-black/10":!n.isSmall}])},[e.createVNode(e.unref(M.Clock),{size:10}),e.createElementVNode("span",st,e.toDisplayString(n.startTime)+" – "+e.toDisplayString(n.endTime),1)],2)],2)],2),l[1]||(l[1]=e.createElementVNode("div",{class:"absolute inset-0 border-2 border-white/0 group-hover/event:border-white/30 rounded-lg transition-colors duration-200 pointer-events-none"},null,-1))],12,Ze))),128))])])])]),e.createVNode(We,{"agenda-data":d.agendaData,resources:d.resources,ref_key:"eventDialog",ref:x},null,8,["agenda-data","resources"])],64))}}),rt={class:"sticky left-0 mt-auto z-10 divide-y divide-border/50 h-full flex flex-col min-h-[1536px] bg-input"},lt={class:"flex-shrink-0 text-[10px] @md:text-xs font-medium text-muted-foreground px-1.5 @md:px-3 pb-3 border-r border-border/50 w-10 @md:w-14"},it={class:"flex items-center gap-1.5"},K=e.defineComponent({__name:"Event24hSidebar",setup(d){const b=Array.from({length:24},(x,E)=>({hour:E,label:`${E.toString().padStart(2,"0")}:00`}));return(x,E)=>(e.openBlock(),e.createElementBlock("div",rt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),$=>(e.openBlock(),e.createElementBlock("div",{key:$.hour,class:"flex-1 flex transition-all duration-200"},[e.createElementVNode("div",lt,[e.createElementVNode("div",it,[e.createElementVNode("span",{class:e.normalizeClass({"-translate-y-1/2":$.hour!==0})},e.toDisplayString($.label),3)])])]))),128))]))}}),ct={class:"absolute top-0 w-full pointer-events-none"},dt={key:0,class:"absolute -right-2 -top-0.5 px-2 py-0.5 bg-red-500 text-white text-xs font-medium rounded shadow-lg"},G=e.defineComponent({__name:"EventTimeIndicator",props:{currentDate:{type:Object,required:!1}},setup(d){const b=e.ref(Date.now());let x;e.onMounted(()=>{x=window.setInterval(()=>{b.value=Date.now()},1e3)}),e.onUnmounted(()=>{x&&clearInterval(x)});const E=e.computed(()=>{const o=new Date(b.value);return`${(o.getHours()*60+o.getMinutes()+o.getSeconds()/60)/1440*100}%`}),$=e.computed(()=>new Date(b.value).getFullYear()+"-"+(new Date(b.value).getMonth()+1).toString().padStart(2,"0")+"-"+new Date(b.value).getDate().toString().padStart(2,"0"));return(o,r)=>(e.openBlock(),e.createElementBlock("div",ct,[e.createElementVNode("div",{class:"absolute left-0 right-0 h-0.5 bg-red-500 z-30 pointer-events-none transition-[top] duration-300 ease-linear",style:e.normalizeStyle({top:E.value})},[r[0]||(r[0]=e.createElementVNode("div",{class:"absolute -left-2 -top-1.5 w-3 h-3 bg-red-500 rounded-full shadow-lg shadow-red-500/50"},null,-1)),d.currentDate&&d.currentDate==$.value?(e.openBlock(),e.createElementBlock("div",dt," Now ")):e.createCommentVNode("",!0)],4)]))}}),ut={key:0,class:"relative flex flex-1 min-w-0"},mt={key:1,class:"flex-1 min-w-0 relative min-h-[1616px] @md:min-h-[1658px]"},pt={key:0,class:"absolute top-0 right-0 z-10 px-3 py-1.5 bg-primary/90 text-primary-foreground text-xs font-medium rounded-bl-lg shadow-lg backdrop-blur-sm flex items-center gap-1.5 animate-pulse-subtle"},ft={class:"flex pb-4 min-w-[200px]"},vt=["onClick"],gt={key:0,class:"absolute top-2 right-2 flex items-center gap-1 px-2 py-0.5 bg-primary/20 backdrop-blur-sm rounded-full border border-primary/30"},ht={class:"text-xs text-muted-foreground font-medium group-hover:text-foreground/70 transition-colors"},xt={key:0,class:"absolute bottom-0 left-0 w-full h-1 bg-orange-500"},yt=e.defineComponent({__name:"EventView",props:{agendaData:{default:()=>({})}},setup(d){const b=e.inject("activeDate",e.ref(H.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(H.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()))),x=e.inject("viewMode",e.ref(1)),E=e.inject("events",e.ref([])),$=e.inject("resources",e.ref([])),o=e.ref(null),r=e.ref(!1),l=e.ref(!1);e.computed(()=>$.value.length>1);const n=e.computed(()=>{const t=[],c=b.value;for(let w=0;w<x.value;w++)t.push(c.add({days:w}));return t}),y=(t,c)=>{const w=`${t.year}-${String(t.month).padStart(2,"0")}-${String(t.day).padStart(2,"0")}`;return E.value?.filter(P=>P.date===w)||[]},f=t=>{const c=H.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(H.$14e0f24ef4ac5c92$export$aa8b41735afcabd2());return t.year===c.year&&t.month===c.month&&t.day===c.day},z=t=>{b.value=t,x.value=1};let C=null,N=null;const A=()=>{o.value&&(B(),o.value.scrollBy({left:-300,behavior:"smooth"}),N=window.setTimeout(()=>{C=window.setInterval(()=>{o.value&&o.value.scrollBy({left:-20,behavior:"auto"})},50)},300))},D=()=>{o.value&&(B(),o.value.scrollBy({left:300,behavior:"smooth"}),N=window.setTimeout(()=>{C=window.setInterval(()=>{o.value&&o.value.scrollBy({left:20,behavior:"auto"})},50)},300))},B=()=>{N&&(clearTimeout(N),N=null),C&&(clearInterval(C),C=null)},L=()=>{if(!o.value)return;const{scrollLeft:t,scrollWidth:c,clientWidth:w}=o.value;r.value=t>10,l.value=t<c-w-10},q=t=>{o.value&&Math.abs(t.deltaY)>Math.abs(t.deltaX)&&(t.preventDefault(),o.value.scrollBy({left:t.deltaY,behavior:"auto"}))},v=e.ref(!1),u=e.ref(0),S=e.ref(0),I=t=>{!o.value||x.value===1||t.target.closest(".event-card")||(v.value=!0,u.value=t.pageX,S.value=o.value.scrollLeft,o.value.style.userSelect="none",t.preventDefault())},p=t=>{if(!v.value||!o.value)return;const c=t.pageX,w=(u.value-c)*1.2;o.value.scrollLeft=S.value+w},i=()=>{o.value&&(v.value=!1,o.value.style.userSelect="")};return e.onMounted(()=>{o.value&&(o.value.addEventListener("scroll",L),o.value.addEventListener("wheel",q,{passive:!1}),e.nextTick(()=>{L(),setTimeout(L,50),setTimeout(L,150),setTimeout(L,300),setTimeout(L,500)})),document.addEventListener("mousemove",p),document.addEventListener("mouseup",i)}),e.onBeforeUnmount(()=>{document.removeEventListener("mousemove",p),document.removeEventListener("mouseup",i)}),e.watch(x,()=>{x.value>1?e.nextTick(()=>{setTimeout(()=>{if(!o.value)return;const{scrollWidth:t,clientWidth:c}=o.value;t>c&&(l.value=!0,r.value=!1)},100)}):o.value&&(o.value.style.cursor="")}),e.onUnmounted(()=>{B(),o.value&&(o.value.removeEventListener("scroll",L),o.value.removeEventListener("wheel",q))}),(t,c)=>{const w=e.resolveComponent("Button"),P=e.resolveComponent("TooltipTrigger"),O=e.resolveComponent("TooltipContent"),_=e.resolveComponent("Tooltip");return e.unref(x)===1?(e.openBlock(),e.createElementBlock("div",ut,[e.createVNode(K),e.createVNode(G,{class:"h-full","current-date":e.unref(b)},null,8,["current-date"]),e.createVNode(J,{"agenda-data":d.agendaData,date:e.unref(b),events:y(e.unref(b)),resources:e.unref($)},null,8,["agenda-data","date","events","resources"])])):(e.openBlock(),e.createElementBlock("div",mt,[e.unref(x)===7?(e.openBlock(),e.createElementBlock("div",pt,[e.createVNode(e.unref(M.ChevronLeft),{size:12}),c[0]||(c[0]=e.createElementVNode("span",null,"Scroll to view all days",-1)),e.createVNode(e.unref(M.ChevronRight),{size:12})])):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createBlock(w,{key:1,variant:"outline",size:"icon",onMousedown:A,onMouseup:B,onMouseleave:B,onTouchstart:A,onTouchend:B,class:"sticky top-1/2 left-2 -translate-y-1/2 z-40 h-10 w-10 rounded-full shadow-lg bg-background/95 backdrop-blur-sm hover:bg-background border-2"},{default:e.withCtx(()=>[e.createVNode(e.unref(M.ChevronLeft),{size:20})]),_:1})):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createBlock(w,{key:2,variant:"outline",size:"icon",onMousedown:D,onMouseup:B,onMouseleave:B,onTouchstart:D,onTouchend:B,class:"sticky top-1/2 right-2 -translate-y-1/2 z-40 h-10 w-10 rounded-full shadow-lg bg-background/95 backdrop-blur-sm hover:bg-background border-2 float-right"},{default:e.withCtx(()=>[e.createVNode(e.unref(M.ChevronRight),{size:20})]),_:1})):e.createCommentVNode("",!0),e.createVNode(G,{class:"h-[calc(100%-122px)] mt-[80px] @md:h-[calc(100%-164px)] @md:mt-[122px]"}),e.createElementVNode("div",{class:e.normalizeClass(["absolute right-0 top-0 bottom-0 w-8 bg-gradient-to-l from-background to-transparent z-10 pointer-events-none transition-opacity duration-300",l.value?"opacity-100":"opacity-0"])},null,2),e.createElementVNode("div",{ref_key:"scrollContainer",ref:o,class:"absolute inset-0 overflow-x-auto overflow-y-hidden",onScroll:L,onMousedown:I},[e.createElementVNode("div",ft,[e.createVNode(K),c[5]||(c[5]=e.createElementVNode("div",{class:"absolute w-10 @md:w-14 h-[125px] bg-input"},null,-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value,(k,g)=>(e.openBlock(),e.createElementBlock("div",{key:k.toString(),class:e.normalizeClass(["flex-shrink-0",{"min-w-[200px] w-[33.33%]":e.unref(x)===3,"min-w-[280px]":e.unref(x)===7}])},[e.createElementVNode("div",{onClick:s=>z(k),class:e.normalizeClass(["relative p-3 border cursor-pointer transition-all duration-200 group relative",f(k)?"bg-gradient-to-br from-primary/10 to-primary/5 border-primary/30 hover:from-primary/20 hover:to-primary/10 hover:border-primary/50 hover:shadow-md":"bg-gradient-to-br from-muted/50 to-muted/30 border-border hover:from-accent/50 hover:to-accent/30 hover:border-accent-foreground/20 hover:shadow-md"])},[f(k)?(e.openBlock(),e.createElementBlock("div",gt,[...c[1]||(c[1]=[e.createElementVNode("div",{class:"w-1.5 h-1.5 bg-primary rounded-full animate-pulse"},null,-1),e.createElementVNode("span",{class:"text-[9px] font-bold text-primary uppercase tracking-wide"},"Today",-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["text-xs font-semibold uppercase tracking-wider transition-colors",f(k)?"text-primary group-hover:text-primary/80":"text-muted-foreground group-hover:text-foreground"])},e.toDisplayString(new Date(k.year,k.month-1,k.day).toLocaleDateString("en-US",{weekday:"short"})),3),e.createElementVNode("div",{class:e.normalizeClass(["text-2xl font-bold transition-colors",f(k)?"text-foreground":"text-foreground group-hover:text-primary"])},e.toDisplayString(k.day),3),e.createElementVNode("div",ht,e.toDisplayString(new Date(k.year,k.month-1,k.day).toLocaleDateString("en-US",{month:"long",year:"numeric"})),1),c[4]||(c[4]=e.createElementVNode("div",{class:"mt-2 pt-2 border-t border-border/0 group-hover:border-border/50 transition-all"},[e.createElementVNode("div",{class:"text-[10px] text-muted-foreground/0 group-hover:text-muted-foreground/100 uppercase tracking-wide transition-all"}," Click to view ")],-1)),e.createVNode(_,null,{default:e.withCtx(()=>[e.createVNode(P,{"as-child":""},{default:e.withCtx(()=>[y(k).filter(s=>s.isException).length>0?(e.openBlock(),e.createBlock(e.unref(M.Asterisk),{key:0,class:"absolute top-3 right-3 size-4 text-orange-500"})):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(O,null,{default:e.withCtx(()=>[...c[2]||(c[2]=[e.createElementVNode("p",null," This day has exceptions applied to it. ",-1)])]),_:1})]),_:2},1024),e.createVNode(_,null,{default:e.withCtx(()=>[e.createVNode(P,{"as-child":""},{default:e.withCtx(()=>[y(k).filter(s=>s.isException).length>0?(e.openBlock(),e.createElementBlock("div",xt)):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(O,null,{default:e.withCtx(()=>[...c[3]||(c[3]=[e.createElementVNode("p",null," This day has exceptions applied to it. ",-1)])]),_:1})]),_:2},1024)],10,vt),e.createVNode(J,{"agenda-data":d.agendaData,date:k,events:y(k),resources:e.unref($)},null,8,["agenda-data","date","events","resources"])],2))),128))])],544)]))}}}),kt=ne._export_sfc(yt,[["__scopeId","data-v-f5d39ef7"]]),bt={class:"flex items-center justify-between @sm:justify-start gap-4"},_t={class:"flex flex-col"},Nt={class:"flex items-center gap-2"},wt={class:"text-lg @sm:text-2xl font-bold tracking-tight truncate"},Et={class:"text-xs @sm:text-sm text-muted-foreground ml-7 truncate"},St={class:"flex @sm:items-center justify-between flex-col @sm:flex-row @5xl:justify-end gap-2"},Vt={class:"flex items-center gap-1 @5xl:mr-2"},Ct={key:0,class:"flex items-center gap-2 px-1 overflow-x-auto pb-2 -mx-1 scrollbar-hide"},Dt=["onClick"],Bt={class:"flex gap-2 @md:gap-4"},$t={class:"hidden @md:flex flex-shrink-0 flex-col gap-4"},Tt={key:0,class:"rounded-md border p-3"},zt={class:"space-y-1"},It=["onClick"],Mt={class:"min-w-0 flex-1"},At={class:"text-sm font-medium truncate"},Lt={key:0,class:"pt-2 mt-2 border-t"},jt={key:0,class:"mt-1 space-y-1"},Ot={class:"min-w-0 flex-1"},Pt={class:"text-sm font-medium truncate text-muted-foreground"},Rt=e.defineComponent({__name:"agenda",setup(d){const{hasPermission:b}=U.useModulePermissions(),{params:x}=U.useModuleRoute(),{config:E}=U.useModule(),$=U.useFirebaseIntegration(E.project),o=e.ref(H.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(H.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())),r=e.ref(1),l=e.useTemplateRef("container"),{width:n}=se.useElementSize(l),y=e.computed(()=>n.value<640);e.watch(y,s=>{s&&r.value!==1&&(r.value=1)},{immediate:!0});const f=e.ref(null),z=e.ref(new Map),C=e.computed(()=>f.value?.resources||[]),N=e.computed(()=>C.value.filter(s=>s.isActive)),A=e.computed(()=>C.value.filter(s=>!s.isActive)),D=e.ref(null),B=e.ref(!1);e.watch(N,s=>{s.length>0&&!D.value&&(D.value=s[0].id)},{immediate:!0});const L=e.computed(()=>{if(!D.value)return N.value.length>0?[N.value[0]]:[];const s=N.value.find(m=>m.id===D.value);return s?[s]:N.value.length>0?[N.value[0]]:[]}),q=e.computed(()=>f.value?.pricingOptions?.find(m=>m.isDefault)?.duration||30),v=s=>{D.value=s};e.watch(o,()=>{k()});const u=e.computed(()=>{const s=o.value,m=new Date(s.year,s.month-1,s.day),V=m.toLocaleDateString("en-US",{weekday:"long"}).toUpperCase(),h=s.day,T=m.toLocaleDateString("en-US",{month:"short"}).toUpperCase();return{dayName:V,day:h,monthName:T,full:`${V} ${h} ${T}`}}),S=()=>{o.value=o.value.subtract({days:r.value})},I=()=>{o.value=o.value.add({days:r.value})},p=()=>{o.value=H.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(H.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())},i=s=>{const[m,V]=s.split(":").map(Number);return m*60+V},t=(s,m)=>(f.value?.exceptions||[]).find(h=>m>=h.startDate&&m<=h.endDate?h.resourceIds===null?!0:h.resourceIds?.includes(s):!1)||null,c=(s,m,V)=>{const h=t(s.id,V);if(h)return h.isClosed?[]:h.timeslots.map(a=>({startTime:a.startTime,endTime:a.endTime,isException:!0}));const T=m.getDay(),j=s.openingHours?.[T]||[];return j.length===0?[]:j.map(a=>({startTime:a.start,endTime:a.end,isException:!1}))},w=(s,m,V,h)=>{if(!f.value)return 0;const T=z.value.get(m);return T?T.filter(a=>a.resourceId===s).reduce((a,R)=>{const F=i(R.startTime),Q=i(R.endTime),W=i(V),Y=i(h);return F<Y&&Q>W?a+(R.reserved||0):a},0):0},P=e.computed(()=>{if(!f.value)return[];z.value.size;let s=[],m=[];for(let h=0;h<r.value;h++){const T=o.value.add({days:h});m.push(T)}const V=L.value.length>0?L.value:[];return V.length===0?[]:(m.forEach(h=>{let T=new Date(h.year,h.month-1,h.day);const j=`${h.year}-${String(h.month).padStart(2,"0")}-${String(h.day).padStart(2,"0")}`;V.forEach(a=>{const R=c(a,T,j);s=s.concat(R.map((F,Q)=>{const W=w(a.id,j,F.startTime,F.endTime);return{id:`block-${j}-${a.id}-${Q}`,title:f.value.serviceName,date:j,startTime:F.startTime,endTime:F.endTime,theme:a.color||"#3b82f6",bookings:W,maxBookings:a.capacity,isException:F.isException||!1,resourceId:a.id,resource:a,interval:a.interval||30,serviceDuration:q.value}}))})}),s)});let O=null;const _=async()=>{O||(O=$.get(E.agendaCollection,x.value.id).then(s=>{f.value=s}).finally(()=>{O=null})),await O},k=async()=>{if(f.value||await _(),!f.value)return;const s=x.value.id,m=o.value;z.value.clear();const V=[];for(let h=0;h<r.value;h++){const T=m.add({days:h}),j=`${T.year}-${String(T.month).padStart(2,"0")}-${String(T.day).padStart(2,"0")}`,a=`${s}_${j}`;V.push($.get(E.reservedSpotsCollection,a).then(R=>{if(R){const F=[];for(const Q of N.value){const W=R?.[Q.id]||{};Object.entries(W).forEach(([Y,Z])=>{const[ee,te]=Y.split("-");F.push({resourceId:Q.id,startTime:ee,endTime:te,reserved:Z})})}z.value.set(j,F)}}).catch(()=>{}))}await Promise.all(V)};return(async()=>(await _(),await k()))(),e.watch(r,()=>{k()}),e.provide("agendaData",f),e.provide("activeDate",o),e.provide("viewMode",r),e.provide("events",P),e.provide("resources",L),e.provide("allResources",N),(s,m)=>{const V=e.resolveComponent("Button"),h=e.resolveComponent("SegmentedControlButton"),T=e.resolveComponent("SegmentedControl"),j=e.resolveComponent("Calendar");return e.openBlock(),e.createBlock(oe._sfc_main,null,{default:e.withCtx(()=>[e.createElementVNode("div",{ref_key:"container",ref:l,class:"flex flex-col gap-2 @md:gap-4 w-full"},[e.createElementVNode("div",{class:e.normalizeClass(["flex flex-col @5xl:flex-row @5xl:items-center @5xl:justify-between gap-3 px-1",(y.value,"")])},[e.createElementVNode("div",bt,[e.createElementVNode("div",_t,[e.createElementVNode("div",Nt,[e.createVNode(e.unref(M.CalendarDays),{size:20,class:"text-primary flex-shrink-0"}),e.createElementVNode("h2",wt,e.toDisplayString(u.value.full),1)]),e.createElementVNode("p",Et,e.toDisplayString(f.value?.serviceName),1)])]),e.createElementVNode("div",St,[e.createElementVNode("div",Vt,[e.createVNode(V,{variant:"outline",size:"icon",class:"size-8 @sm:size-9",onClick:S},{default:e.withCtx(()=>[e.createVNode(e.unref(M.ChevronLeft),{size:16})]),_:1}),e.createVNode(V,{variant:"outline",size:"sm",class:"h-8 @sm:h-9 px-2 @sm:px-3 text-xs @sm:text-sm",onClick:p},{default:e.withCtx(()=>[...m[3]||(m[3]=[e.createTextVNode(" Today ",-1)])]),_:1}),e.createVNode(V,{variant:"outline",size:"icon",class:"size-8 @sm:size-9",onClick:I},{default:e.withCtx(()=>[e.createVNode(e.unref(M.ChevronRight),{size:16})]),_:1})]),y.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(T,{key:0,modelValue:r.value,"onUpdate:modelValue":m[0]||(m[0]=a=>r.value=a)},{default:e.withCtx(()=>[e.createVNode(h,{value:1},{default:e.withCtx(()=>[...m[4]||(m[4]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"1 Day",-1)])]),_:1}),e.createVNode(h,{value:3},{default:e.withCtx(()=>[...m[5]||(m[5]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"3 Days",-1)])]),_:1}),e.createVNode(h,{value:7},{default:e.withCtx(()=>[...m[6]||(m[6]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"7 Days",-1)])]),_:1})]),_:1},8,["modelValue"])),e.unref(b)("manage-reservations")?(e.openBlock(),e.createBlock(ae._sfc_main,{key:1,"agenda-data":f.value},null,8,["agenda-data"])):e.createCommentVNode("",!0)])],2),y.value&&N.value.length>0?(e.openBlock(),e.createElementBlock("div",Ct,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,a=>(e.openBlock(),e.createElementBlock("button",{key:a.id,class:e.normalizeClass(["flex items-center gap-2 px-3 py-1.5 rounded-full border text-sm whitespace-nowrap transition-colors flex-shrink-0",{"bg-primary text-primary-foreground border-primary":D.value===a.id,"bg-background hover:bg-muted":D.value!==a.id}]),onClick:R=>v(a.id)},[e.createElementVNode("div",{class:"size-5 rounded-full flex items-center justify-center text-white text-[10px] font-medium",style:e.normalizeStyle({backgroundColor:D.value===a.id?"rgba(255,255,255,0.3)":a.color||"#6b7280"})},e.toDisplayString(a.avatarLabel||a.name.charAt(0).toUpperCase()),5),e.createElementVNode("span",null,e.toDisplayString(a.name),1)],10,Dt))),128))])):e.createCommentVNode("",!0),e.createElementVNode("div",Bt,[e.createElementVNode("div",$t,[e.createVNode(j,{modelValue:o.value,"onUpdate:modelValue":m[1]||(m[1]=a=>o.value=a),"weekday-format":"short",class:"rounded-md border"},null,8,["modelValue"]),C.value.length>0?(e.openBlock(),e.createElementBlock("div",Tt,[m[7]||(m[7]=e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[e.createElementVNode("span",{class:"text-sm font-medium"},"Resources")],-1)),e.createElementVNode("div",zt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,a=>(e.openBlock(),e.createElementBlock("div",{key:a.id,class:e.normalizeClass(["flex items-center gap-2 p-2 rounded-md hover:bg-muted cursor-pointer transition-colors",{"bg-muted ring-2 ring-primary/20":D.value===a.id,"opacity-50":D.value&&D.value!==a.id}]),onClick:R=>v(a.id)},[e.createElementVNode("div",{class:"size-7 rounded-full flex items-center justify-center text-white text-xs font-medium flex-shrink-0",style:e.normalizeStyle({backgroundColor:a.color||"#6b7280"})},e.toDisplayString(a.avatarLabel||a.name.charAt(0).toUpperCase()),5),e.createElementVNode("div",Mt,[e.createElementVNode("div",At,e.toDisplayString(a.name),1)]),e.createElementVNode("div",{class:e.normalizeClass(["size-2 rounded-full flex-shrink-0",D.value===a.id?"bg-primary":"bg-muted-foreground/30"])},null,2)],10,It))),128)),A.value.length>0?(e.openBlock(),e.createElementBlock("div",Lt,[e.createElementVNode("button",{class:"flex items-center gap-2 text-xs text-muted-foreground hover:text-foreground w-full py-1 transition-colors",onClick:m[2]||(m[2]=a=>B.value=!B.value)},[e.createVNode(e.unref(M.ChevronRight),{size:14,class:e.normalizeClass(["transition-transform",{"rotate-90":B.value}])},null,8,["class"]),e.createElementVNode("span",null,"Inactive ("+e.toDisplayString(A.value.length)+")",1)]),B.value?(e.openBlock(),e.createElementBlock("div",jt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,a=>(e.openBlock(),e.createElementBlock("div",{key:a.id,class:"flex items-center gap-2 p-2 rounded-md opacity-50"},[e.createElementVNode("div",{class:"size-7 rounded-full flex items-center justify-center text-white text-xs font-medium flex-shrink-0 grayscale",style:e.normalizeStyle({backgroundColor:a.color||"#6b7280"})},e.toDisplayString(a.avatarLabel||a.name.charAt(0).toUpperCase()),5),e.createElementVNode("div",Ot,[e.createElementVNode("div",Pt,e.toDisplayString(a.name),1)])]))),128))])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0)]),e.createVNode(kt,{"agenda-data":f.value},null,8,["agenda-data"])])],512)]),_:1})}}});exports.default=Rt;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),_=require("./EditLayout.vue_vue_type_script_setup_true_lang-gozJKXvM.js"),r=require("@oneclick.dev/cms-kit"),B={key:0},h={key:0,class:"max-w-2xl"},M={key:0,class:"text-sm text-orange-500 mt-2"},I={class:"space-y-3"},P={class:"flex items-center justify-between rounded-lg border p-4 bg-card"},R={class:"space-y-2"},L={class:"flex justify-start mt-8"},G={key:1},D=e.defineComponent({__name:"availability",setup(U){const{params:p}=r.useModuleRoute(),{hasPermission:N}=r.useModulePermissions(),{config:d}=r.useModule(),v=r.useFirebaseIntegration(d.project),o=e.reactive({minimumAdvanceNotice:{value:0,unit:"minutes"},serviceVisibility:60,maxTicketsPerReservation:"",needsApproval:!1}),l=e.ref(!1),V=e.ref(!0),f=async()=>{l.value=!0;try{const n=p.value.id;if(!n)throw new Error("Missing agenda ID");await v.update(d.agendaCollection,n,{minimumAdvanceNotice:{value:Number(o.minimumAdvanceNotice?.value)||0,unit:o.minimumAdvanceNotice?.unit??"minutes"},serviceVisibility:Math.max(Number(o.serviceVisibility)||1,1),maxTicketsPerReservation:Math.max(Number(o.maxTicketsPerReservation)||0,0),needsApproval:o.needsApproval||!1})}catch(n){console.error("Error saving changes:",n)}finally{l.value=!1}},y=async()=>{try{const n=await v.get(d.agendaCollection,p.value.id);n&&(o.minimumAdvanceNotice=n.minimumAdvanceNotice||{value:0,unit:"minutes"},o.serviceVisibility=n.serviceVisibility||60,o.maxTicketsPerReservation=Number(n.maxTicketsPerReservation)&&n.maxTicketsPerReservation>0?parseInt(n.maxTicketsPerReservation):"",o.needsApproval=n.needsApproval||!1)}catch(n){console.error("Error loading agenda data:",n)}finally{V.value=!1}},b=()=>{let n=Math.abs(o.minimumAdvanceNotice.value),t=o.minimumAdvanceNotice.unit;return n===1?(t.endsWith("s")&&(t=t.slice(0,-1)),`Lead time is negative. Bookings remain open for 1 ${t} after the slot has started.`):`Lead time is negative. Bookings remain open for ${n} ${t} after the slot has started.`};return y(),(n,t)=>{const a=e.resolveComponent("Label"),m=e.resolveComponent("InputGroupInput"),g=e.resolveComponent("Search"),s=e.resolveComponent("InputGroupAddon"),C=e.resolveComponent("SelectValue"),w=e.resolveComponent("SelectTrigger"),u=e.resolveComponent("SelectItem"),k=e.resolveComponent("SelectGroup"),A=e.resolveComponent("SelectContent"),S=e.resolveComponent("Select"),c=e.resolveComponent("InputGroup"),x=e.resolveComponent("Badge"),E=e.resolveComponent("Switch"),T=e.resolveComponent("Button");return e.openBlock(),e.createBlock(_._sfc_main,null,{default:e.withCtx(()=>[e.unref(N)("manage-availability")?(e.openBlock(),e.createElementBlock("div",B,[t[26]||(t[26]=e.createElementVNode("h1",{class:"text-lg font-medium mb-8"},"Availability Settings",-1)),V.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",h,[e.createElementVNode("div",null,[e.createVNode(a,{for:"lead-time",class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[6]||(t[6]=[e.createTextVNode(" Minimum Advance Notice - Lead Time (Optional) ",-1)])]),_:1}),e.createVNode(c,{class:"max-w-md"},{default:e.withCtx(()=>[e.createVNode(m,{placeholder:"0",id:"lead-time",modelValue:o.minimumAdvanceNotice.value,"onUpdate:modelValue":t[0]||(t[0]=i=>o.minimumAdvanceNotice.value=i),modelModifiers:{value:!0},type:"number",class:"no-spinner"},null,8,["modelValue"]),e.createVNode(s,null,{default:e.withCtx(()=>[e.createVNode(g)]),_:1}),e.createVNode(s,{align:"inline-end"},{default:e.withCtx(()=>[e.createVNode(S,{modelValue:o.minimumAdvanceNotice.unit,"onUpdate:modelValue":t[1]||(t[1]=i=>o.minimumAdvanceNotice.unit=i)},{default:e.withCtx(()=>[e.createVNode(w,{class:"w-[180px] border-0 bg-transparent -mr-1.5"},{default:e.withCtx(()=>[e.createVNode(C)]),_:1}),e.createVNode(A,null,{default:e.withCtx(()=>[e.createVNode(k,null,{default:e.withCtx(()=>[e.createVNode(u,{value:"minutes"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode(" Minutes ",-1)])]),_:1}),e.createVNode(u,{value:"hours"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode(" Hours ",-1)])]),_:1}),e.createVNode(u,{value:"days"},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode(" Days ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),t[10]||(t[10]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-2"}," Set how far in advance a customer must book your slot. ",-1)),o.minimumAdvanceNotice.value<0?(e.openBlock(),e.createElementBlock("p",M,e.toDisplayString(b()),1)):e.createCommentVNode("",!0)]),t[23]||(t[23]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",null,[e.createVNode(a,{for:"service-visibility",class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode(" Service Visibility ",-1)])]),_:1}),e.createVNode(c,{class:"max-w-md"},{default:e.withCtx(()=>[e.createVNode(m,{id:"service-visibility",modelValue:o.serviceVisibility,"onUpdate:modelValue":t[2]||(t[2]=i=>o.serviceVisibility=i),modelModifiers:{number:!0},placeholder:"1",type:"number",class:"no-spinner",min:"1",onBlur:t[3]||(t[3]=i=>o.serviceVisibility=Math.max(o.serviceVisibility,1))},null,8,["modelValue"]),e.createVNode(s,{align:"inline-end"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode(" days ",-1)])]),_:1})]),_:1}),t[13]||(t[13]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-2"}," Set how many days in advance the service is visible to customers. ",-1))]),t[24]||(t[24]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",null,[e.createVNode(a,{for:"max-capacity",class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode(" Maximum Tickets Per Booking ",-1)])]),_:1}),e.createVNode(c,{class:"max-w-md"},{default:e.withCtx(()=>[e.createVNode(m,{placeholder:"∞",type:"number",id:"max-capacity",class:"no-spinner",min:"1",modelValue:o.maxTicketsPerReservation,"onUpdate:modelValue":t[4]||(t[4]=i=>o.maxTicketsPerReservation=i),modelModifiers:{number:!0}},null,8,["modelValue"]),e.createVNode(s,{align:"inline-end"},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode(" spots ",-1)])]),_:1})]),_:1}),t[16]||(t[16]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-2"}," Limit how many spots a customer can book in a single reservation. ",-1))]),t[25]||(t[25]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",I,[e.createElementVNode("div",null,[e.createVNode(a,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode("Booking Approval",-1)])]),_:1}),t[18]||(t[18]=e.createElementVNode("p",{class:"text-sm text-muted-foreground"}," Choose whether you want to confirm booking requests manually or accept them automatically. ",-1))]),e.createElementVNode("div",P,[e.createElementVNode("div",R,[e.createVNode(a,{class:"text-sm font-semibold"},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode("Enable Manual Approval",-1)])]),_:1}),t[22]||(t[22]=e.createElementVNode("p",{class:"text-xs text-muted-foreground max-w-[300px]"}," When enabled, you must approve bookings within your dashboard before they are finalized. ",-1)),o.needsApproval?(e.openBlock(),e.createBlock(x,{key:0},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("Status: Manual Review",-1)])]),_:1})):(e.openBlock(),e.createBlock(x,{key:1,variant:"secondary"},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode("Status: Auto-Confirm",-1)])]),_:1}))]),e.createVNode(E,{modelValue:o.needsApproval,"onUpdate:modelValue":t[5]||(t[5]=i=>o.needsApproval=i)},null,8,["modelValue"])])]),e.createElementVNode("div",L,[e.createVNode(T,{onClick:f,disabled:l.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.value?"Saving...":"Save Changes"),1)]),_:1},8,["disabled"])])]))])):(e.openBlock(),e.createElementBlock("div",G,[...t[27]||(t[27]=[e.createElementVNode("h1",{class:"text-lg font-medium mb-2"},"Access Denied",-1),e.createElementVNode("p",{class:"text-sm text-muted-foreground"},"You do not have permission to view or edit availability settings.",-1)])]))]),_:1})}}});exports.default=D;
@@ -0,0 +1,274 @@
1
+ import { defineComponent as U, reactive as $, ref as S, resolveComponent as a, openBlock as m, createBlock as g, withCtx as i, unref as j, createElementBlock as p, createElementVNode as o, createVNode as t, createTextVNode as l, toDisplayString as N, createCommentVNode as w } from "vue";
2
+ import { _ as W } from "./EditLayout.vue_vue_type_script_setup_true_lang-pDO9b4Pv.mjs";
3
+ import { useModuleRoute as q, useModulePermissions as z, useModule as F, useFirebaseIntegration as H } from "@oneclick.dev/cms-kit";
4
+ const O = { key: 0 }, Y = {
5
+ key: 0,
6
+ class: "max-w-2xl"
7
+ }, J = {
8
+ key: 0,
9
+ class: "text-sm text-orange-500 mt-2"
10
+ }, K = { class: "space-y-3" }, Q = { class: "flex items-center justify-between rounded-lg border p-4 bg-card" }, X = { class: "space-y-2" }, Z = { class: "flex justify-start mt-8" }, h = { key: 1 }, oe = /* @__PURE__ */ U({
11
+ __name: "availability",
12
+ setup(ee) {
13
+ const { params: x } = q(), { hasPermission: _ } = z(), { config: c } = F(), V = H(c.project), n = $({
14
+ minimumAdvanceNotice: {
15
+ value: 0,
16
+ unit: "minutes"
17
+ },
18
+ serviceVisibility: 60,
19
+ maxTicketsPerReservation: "",
20
+ needsApproval: !1
21
+ }), d = S(!1), A = S(!0), M = async () => {
22
+ d.value = !0;
23
+ try {
24
+ const s = x.value.id;
25
+ if (!s) throw new Error("Missing agenda ID");
26
+ await V.update(c.agendaCollection, s, {
27
+ minimumAdvanceNotice: {
28
+ value: Number(n.minimumAdvanceNotice?.value) || 0,
29
+ unit: n.minimumAdvanceNotice?.unit ?? "minutes"
30
+ },
31
+ serviceVisibility: Math.max(Number(n.serviceVisibility) || 1, 1),
32
+ maxTicketsPerReservation: Math.max(Number(n.maxTicketsPerReservation) || 0, 0),
33
+ needsApproval: n.needsApproval || !1
34
+ });
35
+ } catch (s) {
36
+ console.error("Error saving changes:", s);
37
+ } finally {
38
+ d.value = !1;
39
+ }
40
+ }, T = async () => {
41
+ try {
42
+ const s = await V.get(c.agendaCollection, x.value.id);
43
+ s && (n.minimumAdvanceNotice = s.minimumAdvanceNotice || { value: 0, unit: "minutes" }, n.serviceVisibility = s.serviceVisibility || 60, n.maxTicketsPerReservation = Number(s.maxTicketsPerReservation) && s.maxTicketsPerReservation > 0 ? parseInt(s.maxTicketsPerReservation) : "", n.needsApproval = s.needsApproval || !1);
44
+ } catch (s) {
45
+ console.error("Error loading agenda data:", s);
46
+ } finally {
47
+ A.value = !1;
48
+ }
49
+ }, C = () => {
50
+ let s = Math.abs(n.minimumAdvanceNotice.value), e = n.minimumAdvanceNotice.unit;
51
+ return s === 1 ? (e.endsWith("s") && (e = e.slice(0, -1)), `Lead time is negative. Bookings remain open for 1 ${e} after the slot has started.`) : `Lead time is negative. Bookings remain open for ${s} ${e} after the slot has started.`;
52
+ };
53
+ return T(), (s, e) => {
54
+ const u = a("Label"), f = a("InputGroupInput"), I = a("Search"), v = a("InputGroupAddon"), B = a("SelectValue"), P = a("SelectTrigger"), b = a("SelectItem"), R = a("SelectGroup"), G = a("SelectContent"), L = a("Select"), y = a("InputGroup"), k = a("Badge"), E = a("Switch"), D = a("Button");
55
+ return m(), g(W, null, {
56
+ default: i(() => [
57
+ j(_)("manage-availability") ? (m(), p("div", O, [
58
+ e[26] || (e[26] = o("h1", { class: "text-lg font-medium mb-8" }, "Availability Settings", -1)),
59
+ A.value ? w("", !0) : (m(), p("div", Y, [
60
+ o("div", null, [
61
+ t(u, {
62
+ for: "lead-time",
63
+ class: "text-base font-medium mb-2"
64
+ }, {
65
+ default: i(() => [...e[6] || (e[6] = [
66
+ l(" Minimum Advance Notice - Lead Time (Optional) ", -1)
67
+ ])]),
68
+ _: 1
69
+ }),
70
+ t(y, { class: "max-w-md" }, {
71
+ default: i(() => [
72
+ t(f, {
73
+ placeholder: "0",
74
+ id: "lead-time",
75
+ modelValue: n.minimumAdvanceNotice.value,
76
+ "onUpdate:modelValue": e[0] || (e[0] = (r) => n.minimumAdvanceNotice.value = r),
77
+ modelModifiers: { value: !0 },
78
+ type: "number",
79
+ class: "no-spinner"
80
+ }, null, 8, ["modelValue"]),
81
+ t(v, null, {
82
+ default: i(() => [
83
+ t(I)
84
+ ]),
85
+ _: 1
86
+ }),
87
+ t(v, { align: "inline-end" }, {
88
+ default: i(() => [
89
+ t(L, {
90
+ modelValue: n.minimumAdvanceNotice.unit,
91
+ "onUpdate:modelValue": e[1] || (e[1] = (r) => n.minimumAdvanceNotice.unit = r)
92
+ }, {
93
+ default: i(() => [
94
+ t(P, { class: "w-[180px] border-0 bg-transparent -mr-1.5" }, {
95
+ default: i(() => [
96
+ t(B)
97
+ ]),
98
+ _: 1
99
+ }),
100
+ t(G, null, {
101
+ default: i(() => [
102
+ t(R, null, {
103
+ default: i(() => [
104
+ t(b, { value: "minutes" }, {
105
+ default: i(() => [...e[7] || (e[7] = [
106
+ l(" Minutes ", -1)
107
+ ])]),
108
+ _: 1
109
+ }),
110
+ t(b, { value: "hours" }, {
111
+ default: i(() => [...e[8] || (e[8] = [
112
+ l(" Hours ", -1)
113
+ ])]),
114
+ _: 1
115
+ }),
116
+ t(b, { value: "days" }, {
117
+ default: i(() => [...e[9] || (e[9] = [
118
+ l(" Days ", -1)
119
+ ])]),
120
+ _: 1
121
+ })
122
+ ]),
123
+ _: 1
124
+ })
125
+ ]),
126
+ _: 1
127
+ })
128
+ ]),
129
+ _: 1
130
+ }, 8, ["modelValue"])
131
+ ]),
132
+ _: 1
133
+ })
134
+ ]),
135
+ _: 1
136
+ }),
137
+ e[10] || (e[10] = o("p", { class: "text-sm text-muted-foreground mt-2" }, " Set how far in advance a customer must book your slot. ", -1)),
138
+ n.minimumAdvanceNotice.value < 0 ? (m(), p("p", J, N(C()), 1)) : w("", !0)
139
+ ]),
140
+ e[23] || (e[23] = o("hr", { class: "my-8" }, null, -1)),
141
+ o("div", null, [
142
+ t(u, {
143
+ for: "service-visibility",
144
+ class: "text-base font-medium mb-2"
145
+ }, {
146
+ default: i(() => [...e[11] || (e[11] = [
147
+ l(" Service Visibility ", -1)
148
+ ])]),
149
+ _: 1
150
+ }),
151
+ t(y, { class: "max-w-md" }, {
152
+ default: i(() => [
153
+ t(f, {
154
+ id: "service-visibility",
155
+ modelValue: n.serviceVisibility,
156
+ "onUpdate:modelValue": e[2] || (e[2] = (r) => n.serviceVisibility = r),
157
+ modelModifiers: { number: !0 },
158
+ placeholder: "1",
159
+ type: "number",
160
+ class: "no-spinner",
161
+ min: "1",
162
+ onBlur: e[3] || (e[3] = (r) => n.serviceVisibility = Math.max(n.serviceVisibility, 1))
163
+ }, null, 8, ["modelValue"]),
164
+ t(v, { align: "inline-end" }, {
165
+ default: i(() => [...e[12] || (e[12] = [
166
+ l(" days ", -1)
167
+ ])]),
168
+ _: 1
169
+ })
170
+ ]),
171
+ _: 1
172
+ }),
173
+ e[13] || (e[13] = o("p", { class: "text-sm text-muted-foreground mt-2" }, " Set how many days in advance the service is visible to customers. ", -1))
174
+ ]),
175
+ e[24] || (e[24] = o("hr", { class: "my-8" }, null, -1)),
176
+ o("div", null, [
177
+ t(u, {
178
+ for: "max-capacity",
179
+ class: "text-base font-medium mb-2"
180
+ }, {
181
+ default: i(() => [...e[14] || (e[14] = [
182
+ l(" Maximum Tickets Per Booking ", -1)
183
+ ])]),
184
+ _: 1
185
+ }),
186
+ t(y, { class: "max-w-md" }, {
187
+ default: i(() => [
188
+ t(f, {
189
+ placeholder: "∞",
190
+ type: "number",
191
+ id: "max-capacity",
192
+ class: "no-spinner",
193
+ min: "1",
194
+ modelValue: n.maxTicketsPerReservation,
195
+ "onUpdate:modelValue": e[4] || (e[4] = (r) => n.maxTicketsPerReservation = r),
196
+ modelModifiers: { number: !0 }
197
+ }, null, 8, ["modelValue"]),
198
+ t(v, { align: "inline-end" }, {
199
+ default: i(() => [...e[15] || (e[15] = [
200
+ l(" spots ", -1)
201
+ ])]),
202
+ _: 1
203
+ })
204
+ ]),
205
+ _: 1
206
+ }),
207
+ e[16] || (e[16] = o("p", { class: "text-sm text-muted-foreground mt-2" }, " Limit how many spots a customer can book in a single reservation. ", -1))
208
+ ]),
209
+ e[25] || (e[25] = o("hr", { class: "my-8" }, null, -1)),
210
+ o("div", K, [
211
+ o("div", null, [
212
+ t(u, { class: "text-base font-medium" }, {
213
+ default: i(() => [...e[17] || (e[17] = [
214
+ l("Booking Approval", -1)
215
+ ])]),
216
+ _: 1
217
+ }),
218
+ e[18] || (e[18] = o("p", { class: "text-sm text-muted-foreground" }, " Choose whether you want to confirm booking requests manually or accept them automatically. ", -1))
219
+ ]),
220
+ o("div", Q, [
221
+ o("div", X, [
222
+ t(u, { class: "text-sm font-semibold" }, {
223
+ default: i(() => [...e[19] || (e[19] = [
224
+ l("Enable Manual Approval", -1)
225
+ ])]),
226
+ _: 1
227
+ }),
228
+ e[22] || (e[22] = o("p", { class: "text-xs text-muted-foreground max-w-[300px]" }, " When enabled, you must approve bookings within your dashboard before they are finalized. ", -1)),
229
+ n.needsApproval ? (m(), g(k, { key: 0 }, {
230
+ default: i(() => [...e[20] || (e[20] = [
231
+ l("Status: Manual Review", -1)
232
+ ])]),
233
+ _: 1
234
+ })) : (m(), g(k, {
235
+ key: 1,
236
+ variant: "secondary"
237
+ }, {
238
+ default: i(() => [...e[21] || (e[21] = [
239
+ l("Status: Auto-Confirm", -1)
240
+ ])]),
241
+ _: 1
242
+ }))
243
+ ]),
244
+ t(E, {
245
+ modelValue: n.needsApproval,
246
+ "onUpdate:modelValue": e[5] || (e[5] = (r) => n.needsApproval = r)
247
+ }, null, 8, ["modelValue"])
248
+ ])
249
+ ]),
250
+ o("div", Z, [
251
+ t(D, {
252
+ onClick: M,
253
+ disabled: d.value
254
+ }, {
255
+ default: i(() => [
256
+ l(N(d.value ? "Saving..." : "Save Changes"), 1)
257
+ ]),
258
+ _: 1
259
+ }, 8, ["disabled"])
260
+ ])
261
+ ]))
262
+ ])) : (m(), p("div", h, [...e[27] || (e[27] = [
263
+ o("h1", { class: "text-lg font-medium mb-2" }, "Access Denied", -1),
264
+ o("p", { class: "text-sm text-muted-foreground" }, "You do not have permission to view or edit availability settings.", -1)
265
+ ])]))
266
+ ]),
267
+ _: 1
268
+ });
269
+ };
270
+ }
271
+ });
272
+ export {
273
+ oe as default
274
+ };