@oneclick.dev/cms-core-modules 0.0.119 → 0.0.121
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.
- package/dist/{ContentEditor-BnOVpmsQ.js → ContentEditor-Dl41qaCh.js} +42 -41
- package/dist/{ContentEditor-Cm28u_14.mjs → ContentEditor-u3k-uTny.mjs} +4785 -4492
- package/dist/{Detail-C8wQiDcv.js → Detail-BCUUNWvp.js} +1 -1
- package/dist/{Detail-CtItxMX4.mjs → Detail-B_scnidb.mjs} +1 -1
- package/dist/Detail-Cn9Bk0u0.mjs +852 -0
- package/dist/Detail-DGg_xXZc.js +1 -0
- package/dist/Detail-Dk8E6_uF.mjs +3731 -0
- package/dist/Detail-Sc2qZdxj.js +1 -0
- package/dist/EditLayout.vue_vue_type_script_setup_true_lang-4_t0PPqM.mjs +78 -0
- package/dist/EditLayout.vue_vue_type_script_setup_true_lang-D1b9_iiN.js +1 -0
- package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-BdZbcubW.js +1 -0
- package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-bZidw6RT.mjs +1500 -0
- package/dist/Overview-CVgViW3c.mjs +852 -0
- package/dist/Overview-DEF-z7Yb.js +1 -0
- package/dist/Overview-Tf_ApkWh.js +1 -0
- package/dist/{Overview-CVQ1pkuD.mjs → Overview-usm5gPD1.mjs} +131 -131
- package/dist/{agenda-BtmnpFmi.js → agenda-B54F8cEr.js} +1 -1
- package/dist/{agenda-D0QBOJUy.mjs → agenda-BCKDYOeF.mjs} +7 -7
- package/dist/{availability-ClBGVgE9.js → availability-C4v46rha.js} +1 -1
- package/dist/{availability-D8JdA4rP.mjs → availability-DVT1Mdxq.mjs} +1 -1
- package/dist/{booking-data-aMS1p_3g.js → booking-data-A5JrLY4j.js} +1 -1
- package/dist/{booking-data-Px7XCIfU.mjs → booking-data-lZvSYna2.mjs} +1 -1
- package/dist/cms-core-modules.css +1 -1
- package/dist/{exceptions-Dgj54ULn.mjs → exceptions-DJHfvADv.mjs} +1 -1
- package/dist/{exceptions-DXqc0Nza.js → exceptions-DKc8fO1S.js} +1 -1
- package/dist/index-Bk3yLv_G.js +35 -0
- package/dist/{index-Dnn2SCSl.js → index-CZau1wR8.js} +1 -1
- package/dist/{index-DRqJOqUR.mjs → index-DE8rdSjd.mjs} +0 -22
- package/dist/index-DU3Ib10Z.mjs +1256 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.mjs +35 -33
- package/dist/orders-BMosTk6r.js +1 -0
- package/dist/{orders-C5NT99Fy.mjs → orders-CElKNc1v.mjs} +229 -234
- package/dist/{payment-D5j-68Ig.mjs → payment-DSQ_2FIT.mjs} +1 -1
- package/dist/{payment-BJHgpaeT.js → payment-DlgYuea2.js} +1 -1
- package/dist/{refunds-oVB2Opib.js → refunds-Cvw9N--u.js} +1 -1
- package/dist/{refunds-D9nTeD2d.mjs → refunds-xR936Ted.mjs} +1 -1
- package/dist/reports-BQT_GZzU.js +158 -0
- package/dist/reports-DksZCTOw.mjs +837 -0
- package/dist/{resources-CK0oWssj.mjs → resources-C-5BU9Ux.mjs} +1 -1
- package/dist/{resources-8WouFvJe.js → resources-D04yKKVN.js} +1 -1
- package/dist/src/appointments/components/edit/NewReservationDialog/QuickReservationAdder.vue.d.ts +2 -0
- package/dist/src/appointments/components/edit/NewReservationDialog/ReservationLines.vue.d.ts +1 -0
- package/dist/src/productCollections/components/detail/Subcollections.vue.d.ts +2 -0
- package/dist/src/productCollections/types.d.ts +1 -4
- package/dist/src/products/components/detail/variants/VariantList.vue.d.ts +48 -6
- package/dist/src/products/components/detail/variants/dialogs/VariantDialog.vue.d.ts +4 -0
- package/dist/{vee-validate-zod-CcOwoF6y.mjs → vee-validate-zod-SjDT8X35.mjs} +92 -90
- package/dist/{vee-validate-zod-ByykgYKJ.js → vee-validate-zod-VCmLnrtQ.js} +1 -1
- package/package.json +2 -2
- package/dist/Detail-C1Blq61w.mjs +0 -585
- package/dist/Detail-CPqug27l.js +0 -1
- package/dist/Detail-CjuhjPby.js +0 -1
- package/dist/Detail-Dnpnmy4-.mjs +0 -3477
- package/dist/EditLayout.vue_vue_type_script_setup_true_lang-gozJKXvM.js +0 -1
- package/dist/EditLayout.vue_vue_type_script_setup_true_lang-pDO9b4Pv.mjs +0 -77
- package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-CcMEKZzd.mjs +0 -1476
- package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-CkFsdcvP.js +0 -1
- package/dist/Overview-BWLxUksJ.mjs +0 -860
- package/dist/Overview-CBahJviK.js +0 -1
- package/dist/Overview-DAxCu9XC.js +0 -1
- package/dist/index-BnFWz40Q.mjs +0 -1261
- package/dist/index-DcGPR_vt.js +0 -35
- package/dist/orders-lO3dZ5un.js +0 -1
- /package/dist/src/{productCollections/components/detail/SEO.vue.d.ts → appointments/pages/edit/reports.vue.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),H=require("./DateFormatter-CSAbE3BC.js"),z=require("lucide-vue-next"),oe=require("./EditLayout.vue_vue_type_script_setup_true_lang-gozJKXvM.js"),F=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-CkFsdcvP.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 h=b,w=o=>{h("select",o)},B=()=>{h("clear")};return(o,i)=>{const c=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",re,[i[2]||(i[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:x=>w(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(c,{variant:"ghost",size:"icon",class:"h-6 w-6 p-0",onClick:B},{default:e.withCtx(()=>[e.createVNode(e.unref(z.X),{size:14})]),_:1}),e.createElementVNode("span",null,[i[0]||(i[0]=e.createTextVNode(" Showing ",-1)),e.createElementVNode("span",ve,e.toDisplayString(d.slotStats[d.selectedTimeSlot]?.bookings||0),1),i[1]||(i[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"},Re={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"},Oe=e.defineComponent({__name:"BookingsList",props:{agendaData:{},resources:{},orders:{},filteredOrders:{},isLoading:{type:Boolean},selectedTimeSlot:{},searchQuery:{}},emits:["update:searchQuery","refresh"],setup(d,{emit:b}){const h=d,{params:w}=F.useModuleRoute(),B=e.computed(()=>w.value?.id??w.id??h.agendaData?.id??""),{metadataSchema:o}=X.useAgendaMetadataSchema(B),i=e.computed(()=>{const m=Array.isArray(h.resources)?h.resources:[],u=Array.isArray(h.agendaData?.resources)?h.agendaData.resources:[],S=[...m,...u],r=new Set;return S.filter(t=>{const a=t?.id;return!a||r.has(String(a))?!1:(r.add(String(a)),!0)})}),c=b,{config:n}=F.useModule(),x=F.useFirebaseIntegration(n.project),f=e.ref(null),T=e.ref(null),V=m=>{c("update:searchQuery",m)},_=()=>{c("update:searchQuery","")},I=()=>{c("refresh")},C=(m,u)=>{const S=m.id||m.orderId||u.orderId||"",r=i.value.find(t=>String(t.id)===String(u.resourceId));return{customerInfo:m.customerInfo,amountDue:m.amountDue,amountPaid:m.amountPaid,status:m.status,reservationStatus:u.status,subtotal:m.subtotal,total:m.total,discount:m.discount,id:S,res_id:u.id,resourceId:u.resourceId,spots:u.spots,date:u.date,createdAt:m.createdAt,startTime:u.timeslot?.startTime,endTime:u.timeslot?.endTime,reservationPrice:u.totalPrice,reservationBasePrice:u.basePrice,reservationAddOnsPrice:u.addOnsPrice,orderReservationCount:Array.isArray(m.reservations)?m.reservations.length:void 0,adjustments:m.adjustments||[],reservationAdjustments:u.adjustments||[],pricingOptionId:u.pricingOptionId,pricingOption:u.pricingOption,resourceName:r?.name,resourceColor:r?.color,metadata:m.metadata||{},reservationMetadata:u.metadata||{},refundStatus:u.refundStatus,refundedAt:u.refundedAt,refundedAmount:u.refundedAmount,refunds:Array.isArray(u.refunds)?u.refunds:[]}},D=async()=>{await e.nextTick(),await new Promise(m=>{if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>m());return}m()})},M=async m=>{if(!m)return;const u=await x.get(n.reservationsCollection,m);if(!u)return;const S={...u,id:u.id||m},r=(S.reservations||[]).map(t=>C(S,t));r.length&&(await D(),T.value?.openDialog({id:S.id,customerInfo:S.customerInfo,status:S.status,createdAt:S.createdAt,metadata:S.metadata||{},reservations:r,adjustments:S.adjustments||[],totalPrice:typeof S.total=="number"?S.total:r.reduce((t,a)=>t+(a.reservationPrice||0),0),totalSpots:r.reduce((t,a)=>t+(a.spots||0),0)}))},q=async m=>{await D(),f.value?.openDialog(m)},R=m=>m.orderReservationCount===1&&typeof m.total=="number"?m.total:typeof m.reservationPrice=="number"?m.reservationPrice:null,U=m=>{const u=R(m);return u===null?null:`€${u.toFixed(2)}`};return(m,u)=>{const S=e.resolveComponent("Input"),r=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(z.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":V},null,8,["model-value"]),d.searchQuery?(e.openBlock(),e.createBlock(r,{key:0,variant:"ghost",size:"icon",class:"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7",onClick:_},{default:e.withCtx(()=>[e.createVNode(e.unref(z.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,t=>(e.openBlock(),e.createElementBlock("div",{key:t.res_id||t.id,class:"p-3 border rounded-lg hover:bg-muted/50 transition-colors",onClick:a=>f.value?.openDialog(t)},[e.createElementVNode("div",Se,[e.createElementVNode("div",Ve,[e.createElementVNode("div",Ce,e.toDisplayString(t.customerInfo.firstName+" "+t.customerInfo.lastName||"Unknown Customer"),1),e.createElementVNode("div",De,e.toDisplayString(t.customerInfo.email),1),e.createElementVNode("div",Be,e.toDisplayString(t.customerInfo.phone),1),e.createElementVNode("div",$e,[e.createElementVNode("div",Te,[e.createVNode(e.unref(z.Clock),{size:12}),e.createElementVNode("span",null,e.toDisplayString(t.startTime)+" - "+e.toDisplayString(t.endTime),1)]),e.createElementVNode("div",ze,[e.createVNode(e.unref(z.Users),{size:12}),e.createElementVNode("span",null,e.toDisplayString(t.spots),1)])]),e.createVNode(X._sfc_main,{metadata:{...t.metadata,...t.reservationMetadata},schema:e.unref(o),"display-filter":["highlight","badge"],compact:"",class:"mt-1"},null,8,["metadata","schema"])]),e.createElementVNode("div",Ie,[t.reservationStatus==="needs_approval"?(e.openBlock(),e.createElementBlock("span",Me,"Needs Approval")):t.reservationStatus==="approved"?(e.openBlock(),e.createElementBlock("span",Ae,"Approved")):t.reservationStatus==="rejected"?(e.openBlock(),e.createElementBlock("span",Le,"Rejected")):t.reservationStatus==="cancelled"?(e.openBlock(),e.createElementBlock("span",je,"Cancelled")):(e.openBlock(),e.createElementBlock("span",Re,"Pending")),U(t)?(e.openBlock(),e.createElementBlock("div",Pe,e.toDisplayString(U(t)),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:I,onConfirmed:I,onRejected:I,onTransferred:I,onOpenOrder:u[0]||(u[0]=t=>M(t))},null,8,["agenda-data","resources"]),e.createVNode(X._sfc_main$2,{ref_key:"orderDetailDialog",ref:T,"agenda-data":d.agendaData,resources:d.resources,onOpenReservation:u[1]||(u[1]=t=>q(t))},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 h=d,{config:w}=F.useModule(),{params:B}=F.useModuleRoute(),o=F.useFirebaseIntegration(w.project),i=e.ref(!1),c=e.ref(null),n=e.ref([]),x=e.ref(!1),f=e.ref(null),T=e.ref("");e.provide("event",c);const V=e.computed(()=>{if(!c.value)return[];const r=c.value.resource?.interval||60,t=[],[a,N]=c.value.startTime.split(":").map(Number),[j,L]=c.value.endTime.split(":").map(Number),y=a*60+N,k=j*60+L;for(let v=y;v<k;v+=r){const l=Math.floor(v/60),p=v%60,E=Math.min(v+r,k),g=Math.floor(E/60),$=E%60,A=`${l.toString().padStart(2,"0")}:${p.toString().padStart(2,"0")}`,s=`${g.toString().padStart(2,"0")}:${$.toString().padStart(2,"0")}`;t.push({startTime:A,endTime:s,label:A})}return t}),_=r=>{const t=r.getFullYear(),a=String(r.getMonth()+1).padStart(2,"0"),N=String(r.getDate()).padStart(2,"0");return`${t}-${a}-${N}`},I=e.computed(()=>{const r={};return V.value.forEach(t=>{r[t.startTime]={bookings:0,spots:0,orders:[]}}),n.value.forEach(t=>{V.value.forEach(a=>{t.startTime<a.endTime&&t.endTime>a.startTime&&(r[a.startTime].bookings++,r[a.startTime].spots+=t.spots||0,r[a.startTime].orders.push(t))})}),r}),C=e.computed(()=>Math.max(1,...Object.values(I.value).map(r=>r.spots))),D=e.computed(()=>{let r=n.value;return f.value&&(r=I.value[f.value]?.orders||[]),T.value.trim()&&(r=new X.Fuse(r,{keys:["customerInfo.firstName","customerInfo.lastName","customerInfo.email","customerInfo.phone"],threshold:.3,ignoreLocation:!0}).search(T.value).map(a=>a.item)),r}),M=e.computed(()=>({spots:n.value.reduce((r,t)=>r+(t.spots||0),0),bookings:n.value.length})),q=r=>{f.value===r?f.value=null:f.value=r},R=()=>{f.value=null},U=async r=>{i.value=!0,c.value=r,f.value=null,T.value="",await m()},m=async()=>{if(c.value){x.value=!0,n.value=[];try{const r=B.value.id,t=_(new Date(c.value.date)),a=c.value.resourceId||c.value.resource?.id,N=new Set;if(a?N.add(`${a}_${t}`):h.resources?.forEach(y=>{N.add(`${y.id}_${t}`)}),N.size===0){n.value=[];return}const j=await o.find(w.reservationsCollection,{filters:[{field:"agendaId",operator:"==",value:r},{field:"status",operator:"==",value:"confirmed"},{field:"flattenedReservationDates",operator:"array-contains-any",value:Array.from(N)}]});let L=[];j.forEach(y=>{(y.reservations?.filter(v=>v.date!==t?!1:a?v.resourceId===a:!0)||[]).forEach(v=>{const l=h.resources.find(E=>E.id===v.resourceId),p=y.id||y.orderId||v.orderId||"";(v.status==="approved"||v.status==="needs_approval")&&L.push({customerInfo:y.customerInfo,amountDue:y.amountDue,amountPaid:y.amountPaid,status:y.status,reservationStatus:v.status,subtotal:y.subtotal,total:y.total,discount:y.discount,id:p,res_id:v.id,resourceId:v.resourceId,spots:v.spots,date:t,createdAt:y.createdAt,startTime:v.timeslot?.startTime,endTime:v.timeslot?.endTime,reservationPrice:v.totalPrice,reservationBasePrice:v.basePrice,reservationAddOnsPrice:v.addOnsPrice,orderReservationCount:Array.isArray(y.reservations)?y.reservations.length:void 0,adjustments:y.adjustments||[],reservationAdjustments:v.adjustments||[],pricingOptionId:v.pricingOptionId,pricingOption:v.pricingOption,resourceName:l?.name,resourceColor:l?.color,metadata:y.metadata||{},reservationMetadata:v.metadata||{},refundStatus:v.refundStatus,refundedAt:v.refundedAt,refundedAmount:v.refundedAmount,refunds:Array.isArray(v.refunds)?v.refunds:[]})})}),n.value=L.sort((y,k)=>y.startTime?.localeCompare(k.startTime||"")||0)}catch(r){console.error("Error loading orders:",r),n.value=[]}finally{x.value=!1}}},u=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],S=["January","February","March","April","May","June","July","August","September","October","November","December"];return b({openDialog:U}),(r,t)=>{const a=e.resolveComponent("DialogTitle"),N=e.resolveComponent("DialogDescription"),j=e.resolveComponent("DialogHeader"),L=e.resolveComponent("Button"),y=e.resolveComponent("DialogFooter"),k=e.resolveComponent("DialogScrollContent"),v=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(v,{open:i.value,"onUpdate:open":t[2]||(t[2]=l=>i.value=l)},{default:e.withCtx(()=>[e.createVNode(k,{class:"sm:max-w-3xl"},{default:e.withCtx(()=>[e.createVNode(j,null,{default:e.withCtx(()=>[c.value?.date?(e.openBlock(),e.createBlock(a,{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u[new Date(c.value.date).getUTCDay()])+" "+e.toDisplayString(S[new Date(c.value.date).getUTCMonth()])+" "+e.toDisplayString(new Date(c.value.date).getUTCDate())+", "+e.toDisplayString(new Date(c.value.date).getUTCFullYear()),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(N,null,{default:e.withCtx(()=>[e.createElementVNode("div",Fe,[e.createElementVNode("div",Ue,[e.createVNode(e.unref(z.Clock),{size:14}),e.createElementVNode("span",null,e.toDisplayString(c.value?.startTime)+" – "+e.toDisplayString(c.value?.endTime),1)]),c.value?.resource?(e.openBlock(),e.createElementBlock("div",qe,[e.createElementVNode("div",{class:"w-4 h-4 rounded-full",style:e.normalizeStyle({backgroundColor:c.value.resource.color||"#6b7280"})},null,4),e.createElementVNode("span",null,e.toDisplayString(c.value.resource.name),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",He,[e.createVNode(e.unref(z.Users),{size:14}),e.createElementVNode("span",null,e.toDisplayString(M.value.spots)+" spots in "+e.toDisplayString(M.value.bookings)+" reservations",1)])])]),_:1})]),_:1}),e.createElementVNode("div",Qe,[V.value.length>1?(e.openBlock(),e.createBlock(he,{key:0,"time-slots":V.value,"slot-stats":I.value,"selected-time-slot":f.value,"max-spots":C.value,onSelect:q,onClear:R,tabindex:"0"},null,8,["time-slots","slot-stats","selected-time-slot","max-spots"])):e.createCommentVNode("",!0),e.createVNode(Oe,{"agenda-data":d.agendaData,resources:d.resources,orders:n.value,"filtered-orders":D.value,"is-loading":x.value,"selected-time-slot":f.value,"search-query":T.value,"onUpdate:searchQuery":t[0]||(t[0]=l=>T.value=l),onRefresh:m},null,8,["agenda-data","resources","orders","filtered-orders","is-loading","selected-time-slot","search-query"])]),e.createVNode(y,null,{default:e.withCtx(()=>[e.createVNode(L,{variant:"outline",onClick:t[1]||(t[1]=l=>i.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,h=e.ref(null),w=i=>{const[c,n]=i.split(":").map(Number);return c*60+n};e.computed(()=>!b.events||!b.resources?[]:b.resources.map(i=>{const n=b.events.filter(x=>x.resourceId===i.id).map(x=>{const f=w(x.startTime),V=w(x.endTime)-f,_=f/1440*100,I=V/1440*100,C=(x.bookings??0)>0,D=x.maxBookings?(x.bookings??0)/x.maxBookings*100:0;return{...x,top:`${_}%`,height:`${I}%`,color:x.resource?.color||"#3b82f6",hasBookings:C,fillPercentage:D,isSmall:V<60}});return{resource:i,events:n}}));const B=e.computed(()=>b.events?b.events.map(i=>{const c=w(i.startTime),x=w(i.endTime)-c,f=c/1440*100,T=x/1440*100,V=(i.bookings??0)>0,_=i.maxBookings?(i.bookings??0)/i.maxBookings*100:0;return{...i,top:`${f}%`,height:`${T}%`,color:i.resource?.color||"#3b82f6",hasBookings:V,fillPercentage:_,isSmall:x<60}}):[]),o=Array.from({length:24},(i,c)=>({hour:c,label:`${c.toString().padStart(2,"0")}:00`}));return(i,c)=>(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"},[...c[0]||(c[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(B.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:x=>h.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(z.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(z.Clock),{size:10}),e.createElementVNode("span",st,e.toDisplayString(n.startTime)+" – "+e.toDisplayString(n.endTime),1)],2)],2)],2),c[1]||(c[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:h},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},(h,w)=>({hour:w,label:`${w.toString().padStart(2,"0")}:00`}));return(h,w)=>(e.openBlock(),e.createElementBlock("div",rt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),B=>(e.openBlock(),e.createElementBlock("div",{key:B.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":B.hour!==0})},e.toDisplayString(B.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 h;e.onMounted(()=>{h=window.setInterval(()=>{b.value=Date.now()},1e3)}),e.onUnmounted(()=>{h&&clearInterval(h)});const w=e.computed(()=>{const o=new Date(b.value);return`${(o.getHours()*60+o.getMinutes()+o.getSeconds()/60)/1440*100}%`}),B=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,i)=>(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:w.value})},[i[0]||(i[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==B.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()))),h=e.inject("viewMode",e.ref(1)),w=e.inject("events",e.ref([])),B=e.inject("resources",e.ref([])),o=e.ref(null),i=e.ref(!1),c=e.ref(!1);e.computed(()=>B.value.length>1);const n=e.computed(()=>{const t=[],a=b.value;for(let N=0;N<h.value;N++)t.push(a.add({days:N}));return t}),x=(t,a)=>{const N=`${t.year}-${String(t.month).padStart(2,"0")}-${String(t.day).padStart(2,"0")}`;return w.value?.filter(j=>j.date===N)||[]},f=t=>{const a=H.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(H.$14e0f24ef4ac5c92$export$aa8b41735afcabd2());return t.year===a.year&&t.month===a.month&&t.day===a.day},T=t=>{b.value=t,h.value=1};let V=null,_=null;const I=()=>{o.value&&(D(),o.value.scrollBy({left:-300,behavior:"smooth"}),_=window.setTimeout(()=>{V=window.setInterval(()=>{o.value&&o.value.scrollBy({left:-20,behavior:"auto"})},50)},300))},C=()=>{o.value&&(D(),o.value.scrollBy({left:300,behavior:"smooth"}),_=window.setTimeout(()=>{V=window.setInterval(()=>{o.value&&o.value.scrollBy({left:20,behavior:"auto"})},50)},300))},D=()=>{_&&(clearTimeout(_),_=null),V&&(clearInterval(V),V=null)},M=()=>{if(!o.value)return;const{scrollLeft:t,scrollWidth:a,clientWidth:N}=o.value;i.value=t>10,c.value=t<a-N-10},q=t=>{o.value&&Math.abs(t.deltaY)>Math.abs(t.deltaX)&&(t.preventDefault(),o.value.scrollBy({left:t.deltaY,behavior:"auto"}))},R=e.ref(!1),U=e.ref(0),m=e.ref(0),u=t=>{!o.value||h.value===1||t.target.closest(".event-card")||(R.value=!0,U.value=t.pageX,m.value=o.value.scrollLeft,o.value.style.userSelect="none",t.preventDefault())},S=t=>{if(!R.value||!o.value)return;const a=t.pageX,N=(U.value-a)*1.2;o.value.scrollLeft=m.value+N},r=()=>{o.value&&(R.value=!1,o.value.style.userSelect="")};return e.onMounted(()=>{o.value&&(o.value.addEventListener("scroll",M),o.value.addEventListener("wheel",q,{passive:!1}),e.nextTick(()=>{M(),setTimeout(M,50),setTimeout(M,150),setTimeout(M,300),setTimeout(M,500)})),document.addEventListener("mousemove",S),document.addEventListener("mouseup",r)}),e.onBeforeUnmount(()=>{document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",r)}),e.watch(h,()=>{h.value>1?e.nextTick(()=>{setTimeout(()=>{if(!o.value)return;const{scrollWidth:t,clientWidth:a}=o.value;t>a&&(c.value=!0,i.value=!1)},100)}):o.value&&(o.value.style.cursor="")}),e.onUnmounted(()=>{D(),o.value&&(o.value.removeEventListener("scroll",M),o.value.removeEventListener("wheel",q))}),(t,a)=>{const N=e.resolveComponent("Button"),j=e.resolveComponent("TooltipTrigger"),L=e.resolveComponent("TooltipContent"),y=e.resolveComponent("Tooltip");return e.unref(h)===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:x(e.unref(b)),resources:e.unref(B)},null,8,["agenda-data","date","events","resources"])])):(e.openBlock(),e.createElementBlock("div",mt,[e.unref(h)===7?(e.openBlock(),e.createElementBlock("div",pt,[e.createVNode(e.unref(z.ChevronLeft),{size:12}),a[0]||(a[0]=e.createElementVNode("span",null,"Scroll to view all days",-1)),e.createVNode(e.unref(z.ChevronRight),{size:12})])):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createBlock(N,{key:1,variant:"outline",size:"icon",onMousedown:I,onMouseup:D,onMouseleave:D,onTouchstart:I,onTouchend:D,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(z.ChevronLeft),{size:20})]),_:1})):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createBlock(N,{key:2,variant:"outline",size:"icon",onMousedown:C,onMouseup:D,onMouseleave:D,onTouchstart:C,onTouchend:D,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(z.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",c.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:M,onMousedown:u},[e.createElementVNode("div",ft,[e.createVNode(K),a[5]||(a[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,v)=>(e.openBlock(),e.createElementBlock("div",{key:k.toString(),class:e.normalizeClass(["flex-shrink-0",{"min-w-[200px] w-[33.33%]":e.unref(h)===3,"min-w-[280px]":e.unref(h)===7}])},[e.createElementVNode("div",{onClick:l=>T(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,[...a[1]||(a[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),a[4]||(a[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(y,null,{default:e.withCtx(()=>[e.createVNode(j,{"as-child":""},{default:e.withCtx(()=>[x(k).filter(l=>l.isException).length>0?(e.openBlock(),e.createBlock(e.unref(z.Asterisk),{key:0,class:"absolute top-3 right-3 size-4 text-orange-500"})):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(L,null,{default:e.withCtx(()=>[...a[2]||(a[2]=[e.createElementVNode("p",null," This day has exceptions applied to it. ",-1)])]),_:1})]),_:2},1024),e.createVNode(y,null,{default:e.withCtx(()=>[e.createVNode(j,{"as-child":""},{default:e.withCtx(()=>[x(k).filter(l=>l.isException).length>0?(e.openBlock(),e.createElementBlock("div",xt)):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(L,null,{default:e.withCtx(()=>[...a[3]||(a[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:x(k),resources:e.unref(B)},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"},Rt={class:"min-w-0 flex-1"},Pt={class:"text-sm font-medium truncate text-muted-foreground"},Ot=e.defineComponent({__name:"agenda",setup(d){const{hasPermission:b}=F.useModulePermissions(),{params:h}=F.useModuleRoute(),{config:w}=F.useModule(),B=F.useFirebaseIntegration(w.project),o=e.ref(H.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(H.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())),i=e.ref(1),c=e.useTemplateRef("container"),{width:n}=se.useElementSize(c),x=e.computed(()=>n.value<640);e.watch(x,l=>{l&&i.value!==1&&(i.value=1)},{immediate:!0});const f=e.ref(null),T=e.ref(new Map),V=e.computed(()=>f.value?.resources||[]),_=e.computed(()=>V.value.filter(l=>l.isActive)),I=e.computed(()=>V.value.filter(l=>!l.isActive)),C=e.ref(null),D=e.ref(!1);e.watch(_,l=>{l.length>0&&!C.value&&(C.value=l[0].id)},{immediate:!0});const M=e.computed(()=>{if(!C.value)return _.value.length>0?[_.value[0]]:[];const l=_.value.find(p=>p.id===C.value);return l?[l]:_.value.length>0?[_.value[0]]:[]}),q=e.computed(()=>f.value?.pricingOptions?.find(p=>p.isDefault)?.duration||30),R=l=>{C.value=l};e.watch(o,()=>{k()});const U=e.computed(()=>{const l=o.value,p=new Date(l.year,l.month-1,l.day),E=p.toLocaleDateString("en-US",{weekday:"long"}).toUpperCase(),g=l.day,$=p.toLocaleDateString("en-US",{month:"short"}).toUpperCase();return{dayName:E,day:g,monthName:$,full:`${E} ${g} ${$}`}}),m=()=>{o.value=o.value.subtract({days:i.value})},u=()=>{o.value=o.value.add({days:i.value})},S=()=>{o.value=H.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(H.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())},r=l=>{const[p,E]=l.split(":").map(Number);return p*60+E},t=(l,p)=>(f.value?.exceptions||[]).find(g=>p>=g.startDate&&p<=g.endDate?g.resourceIds===null?!0:g.resourceIds?.includes(l):!1)||null,a=(l,p,E)=>{const g=t(l.id,E);if(g)return g.isClosed?[]:g.timeslots.map(s=>({startTime:s.startTime,endTime:s.endTime,isException:!0}));const $=p.getDay(),A=l.openingHours?.[$]||[];return A.length===0?[]:A.map(s=>({startTime:s.start,endTime:s.end,isException:!1}))},N=(l,p,E,g)=>{if(!f.value)return 0;const $=T.value.get(p);return $?$.filter(s=>s.resourceId===l).reduce((s,P)=>{const O=r(P.startTime),Q=r(P.endTime),W=r(E),Y=r(g);return O<Y&&Q>W?s+(P.reserved||0):s},0):0},j=e.computed(()=>{if(!f.value)return[];T.value.size;let l=[],p=[];for(let g=0;g<i.value;g++){const $=o.value.add({days:g});p.push($)}const E=M.value.length>0?M.value:[];return E.length===0?[]:(p.forEach(g=>{let $=new Date(g.year,g.month-1,g.day);const A=`${g.year}-${String(g.month).padStart(2,"0")}-${String(g.day).padStart(2,"0")}`;E.forEach(s=>{const P=a(s,$,A);l=l.concat(P.map((O,Q)=>{const W=N(s.id,A,O.startTime,O.endTime);return{id:`block-${A}-${s.id}-${Q}`,title:f.value.serviceName,date:A,startTime:O.startTime,endTime:O.endTime,theme:s.color||"#3b82f6",bookings:W,maxBookings:s.capacity,isException:O.isException||!1,resourceId:s.id,resource:s,interval:s.interval||30,serviceDuration:q.value}}))})}),l)});let L=null;const y=async()=>{L||(L=B.get(w.agendaCollection,h.value.id).then(l=>{f.value=l}).finally(()=>{L=null})),await L},k=async()=>{if(f.value||await y(),!f.value)return;const l=h.value.id,p=o.value;T.value.clear();const E=[];for(let g=0;g<i.value;g++){const $=p.add({days:g}),A=`${$.year}-${String($.month).padStart(2,"0")}-${String($.day).padStart(2,"0")}`,s=`${l}_${A}`;E.push(B.get(w.reservedSpotsCollection,s).then(P=>{if(P){const O=[];for(const Q of _.value){const W=P?.[Q.id]||{};Object.entries(W).forEach(([Y,Z])=>{const[ee,te]=Y.split("-");O.push({resourceId:Q.id,startTime:ee,endTime:te,reserved:Z})})}T.value.set(A,O)}}).catch(()=>{}))}await Promise.all(E)};return(async()=>(await y(),await k()))(),e.watch(i,()=>{k()}),e.provide("agendaData",f),e.provide("activeDate",o),e.provide("viewMode",i),e.provide("events",j),e.provide("resources",M),e.provide("allResources",_),(l,p)=>{const E=e.resolveComponent("Button"),g=e.resolveComponent("SegmentedControlButton"),$=e.resolveComponent("SegmentedControl"),A=e.resolveComponent("Calendar");return e.openBlock(),e.createBlock(oe._sfc_main,null,{default:e.withCtx(()=>[e.createElementVNode("div",{ref_key:"container",ref:c,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",(x.value,"")])},[e.createElementVNode("div",bt,[e.createElementVNode("div",_t,[e.createElementVNode("div",Nt,[e.createVNode(e.unref(z.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(E,{variant:"outline",size:"icon",class:"size-8 @sm:size-9",onClick:m},{default:e.withCtx(()=>[e.createVNode(e.unref(z.ChevronLeft),{size:16})]),_:1}),e.createVNode(E,{variant:"outline",size:"sm",class:"h-8 @sm:h-9 px-2 @sm:px-3 text-xs @sm:text-sm",onClick:S},{default:e.withCtx(()=>[...p[3]||(p[3]=[e.createTextVNode(" Today ",-1)])]),_:1}),e.createVNode(E,{variant:"outline",size:"icon",class:"size-8 @sm:size-9",onClick:u},{default:e.withCtx(()=>[e.createVNode(e.unref(z.ChevronRight),{size:16})]),_:1})]),x.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock($,{key:0,modelValue:i.value,"onUpdate:modelValue":p[0]||(p[0]=s=>i.value=s)},{default:e.withCtx(()=>[e.createVNode(g,{value:1},{default:e.withCtx(()=>[...p[4]||(p[4]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"1 Day",-1)])]),_:1}),e.createVNode(g,{value:3},{default:e.withCtx(()=>[...p[5]||(p[5]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"3 Days",-1)])]),_:1}),e.createVNode(g,{value:7},{default:e.withCtx(()=>[...p[6]||(p[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),x.value&&_.value.length>0?(e.openBlock(),e.createElementBlock("div",Ct,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value,s=>(e.openBlock(),e.createElementBlock("button",{key:s.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":C.value===s.id,"bg-background hover:bg-muted":C.value!==s.id}]),onClick:P=>R(s.id)},[e.createElementVNode("div",{class:"size-5 rounded-full flex items-center justify-center text-white text-[10px] font-medium",style:e.normalizeStyle({backgroundColor:C.value===s.id?"rgba(255,255,255,0.3)":s.color||"#6b7280"})},e.toDisplayString(s.avatarLabel||s.name.charAt(0).toUpperCase()),5),e.createElementVNode("span",null,e.toDisplayString(s.name),1)],10,Dt))),128))])):e.createCommentVNode("",!0),e.createElementVNode("div",Bt,[e.createElementVNode("div",$t,[e.createVNode(A,{modelValue:o.value,"onUpdate:modelValue":p[1]||(p[1]=s=>o.value=s),"weekday-format":"short",class:"rounded-md border"},null,8,["modelValue"]),V.value.length>0?(e.openBlock(),e.createElementBlock("div",Tt,[p[7]||(p[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(_.value,s=>(e.openBlock(),e.createElementBlock("div",{key:s.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":C.value===s.id,"opacity-50":C.value&&C.value!==s.id}]),onClick:P=>R(s.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:s.color||"#6b7280"})},e.toDisplayString(s.avatarLabel||s.name.charAt(0).toUpperCase()),5),e.createElementVNode("div",Mt,[e.createElementVNode("div",At,e.toDisplayString(s.name),1)]),e.createElementVNode("div",{class:e.normalizeClass(["size-2 rounded-full flex-shrink-0",C.value===s.id?"bg-primary":"bg-muted-foreground/30"])},null,2)],10,It))),128)),I.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:p[2]||(p[2]=s=>D.value=!D.value)},[e.createVNode(e.unref(z.ChevronRight),{size:14,class:e.normalizeClass(["transition-transform",{"rotate-90":D.value}])},null,8,["class"]),e.createElementVNode("span",null,"Inactive ("+e.toDisplayString(I.value.length)+")",1)]),D.value?(e.openBlock(),e.createElementBlock("div",jt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,s=>(e.openBlock(),e.createElementBlock("div",{key:s.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:s.color||"#6b7280"})},e.toDisplayString(s.avatarLabel||s.name.charAt(0).toUpperCase()),5),e.createElementVNode("div",Rt,[e.createElementVNode("div",Pt,e.toDisplayString(s.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=Ot;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),H=require("./DateFormatter-CSAbE3BC.js"),z=require("lucide-vue-next"),oe=require("./EditLayout.vue_vue_type_script_setup_true_lang-D1b9_iiN.js"),F=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-BdZbcubW.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 h=b,w=o=>{h("select",o)},B=()=>{h("clear")};return(o,i)=>{const c=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",re,[i[2]||(i[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:x=>w(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(c,{variant:"ghost",size:"icon",class:"h-6 w-6 p-0",onClick:B},{default:e.withCtx(()=>[e.createVNode(e.unref(z.X),{size:14})]),_:1}),e.createElementVNode("span",null,[i[0]||(i[0]=e.createTextVNode(" Showing ",-1)),e.createElementVNode("span",ve,e.toDisplayString(d.slotStats[d.selectedTimeSlot]?.bookings||0),1),i[1]||(i[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"},Re={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"},Oe=e.defineComponent({__name:"BookingsList",props:{agendaData:{},resources:{},orders:{},filteredOrders:{},isLoading:{type:Boolean},selectedTimeSlot:{},searchQuery:{}},emits:["update:searchQuery","refresh"],setup(d,{emit:b}){const h=d,{params:w}=F.useModuleRoute(),B=e.computed(()=>w.value?.id??w.id??h.agendaData?.id??""),{metadataSchema:o}=X.useAgendaMetadataSchema(B),i=e.computed(()=>{const m=Array.isArray(h.resources)?h.resources:[],u=Array.isArray(h.agendaData?.resources)?h.agendaData.resources:[],S=[...m,...u],r=new Set;return S.filter(t=>{const a=t?.id;return!a||r.has(String(a))?!1:(r.add(String(a)),!0)})}),c=b,{config:n}=F.useModule(),x=F.useFirebaseIntegration(n.project),f=e.ref(null),T=e.ref(null),V=m=>{c("update:searchQuery",m)},_=()=>{c("update:searchQuery","")},I=()=>{c("refresh")},C=(m,u)=>{const S=m.id||m.orderId||u.orderId||"",r=i.value.find(t=>String(t.id)===String(u.resourceId));return{customerInfo:m.customerInfo,amountDue:m.amountDue,amountPaid:m.amountPaid,status:m.status,reservationStatus:u.status,subtotal:m.subtotal,total:m.total,discount:m.discount,id:S,res_id:u.id,resourceId:u.resourceId,spots:u.spots,date:u.date,createdAt:m.createdAt,startTime:u.timeslot?.startTime,endTime:u.timeslot?.endTime,reservationPrice:u.totalPrice,reservationBasePrice:u.basePrice,reservationAddOnsPrice:u.addOnsPrice,orderReservationCount:Array.isArray(m.reservations)?m.reservations.length:void 0,adjustments:m.adjustments||[],reservationAdjustments:u.adjustments||[],pricingOptionId:u.pricingOptionId,pricingOption:u.pricingOption,resourceName:r?.name,resourceColor:r?.color,metadata:m.metadata||{},reservationMetadata:u.metadata||{},refundStatus:u.refundStatus,refundedAt:u.refundedAt,refundedAmount:u.refundedAmount,refunds:Array.isArray(u.refunds)?u.refunds:[]}},D=async()=>{await e.nextTick(),await new Promise(m=>{if(typeof requestAnimationFrame=="function"){requestAnimationFrame(()=>m());return}m()})},M=async m=>{if(!m)return;const u=await x.get(n.reservationsCollection,m);if(!u)return;const S={...u,id:u.id||m},r=(S.reservations||[]).map(t=>C(S,t));r.length&&(await D(),T.value?.openDialog({id:S.id,customerInfo:S.customerInfo,status:S.status,createdAt:S.createdAt,metadata:S.metadata||{},reservations:r,adjustments:S.adjustments||[],totalPrice:typeof S.total=="number"?S.total:r.reduce((t,a)=>t+(a.reservationPrice||0),0),totalSpots:r.reduce((t,a)=>t+(a.spots||0),0)}))},q=async m=>{await D(),f.value?.openDialog(m)},R=m=>m.orderReservationCount===1&&typeof m.total=="number"?m.total:typeof m.reservationPrice=="number"?m.reservationPrice:null,U=m=>{const u=R(m);return u===null?null:`€${u.toFixed(2)}`};return(m,u)=>{const S=e.resolveComponent("Input"),r=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(z.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":V},null,8,["model-value"]),d.searchQuery?(e.openBlock(),e.createBlock(r,{key:0,variant:"ghost",size:"icon",class:"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7",onClick:_},{default:e.withCtx(()=>[e.createVNode(e.unref(z.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,t=>(e.openBlock(),e.createElementBlock("div",{key:t.res_id||t.id,class:"p-3 border rounded-lg hover:bg-muted/50 transition-colors",onClick:a=>f.value?.openDialog(t)},[e.createElementVNode("div",Se,[e.createElementVNode("div",Ve,[e.createElementVNode("div",Ce,e.toDisplayString(t.customerInfo.firstName+" "+t.customerInfo.lastName||"Unknown Customer"),1),e.createElementVNode("div",De,e.toDisplayString(t.customerInfo.email),1),e.createElementVNode("div",Be,e.toDisplayString(t.customerInfo.phone),1),e.createElementVNode("div",$e,[e.createElementVNode("div",Te,[e.createVNode(e.unref(z.Clock),{size:12}),e.createElementVNode("span",null,e.toDisplayString(t.startTime)+" - "+e.toDisplayString(t.endTime),1)]),e.createElementVNode("div",ze,[e.createVNode(e.unref(z.Users),{size:12}),e.createElementVNode("span",null,e.toDisplayString(t.spots),1)])]),e.createVNode(X._sfc_main,{metadata:{...t.metadata,...t.reservationMetadata},schema:e.unref(o),"display-filter":["highlight","badge"],compact:"",class:"mt-1"},null,8,["metadata","schema"])]),e.createElementVNode("div",Ie,[t.reservationStatus==="needs_approval"?(e.openBlock(),e.createElementBlock("span",Me,"Needs Approval")):t.reservationStatus==="approved"?(e.openBlock(),e.createElementBlock("span",Ae,"Approved")):t.reservationStatus==="rejected"?(e.openBlock(),e.createElementBlock("span",Le,"Rejected")):t.reservationStatus==="cancelled"?(e.openBlock(),e.createElementBlock("span",je,"Cancelled")):(e.openBlock(),e.createElementBlock("span",Re,"Pending")),U(t)?(e.openBlock(),e.createElementBlock("div",Pe,e.toDisplayString(U(t)),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:I,onConfirmed:I,onRejected:I,onTransferred:I,onOpenOrder:u[0]||(u[0]=t=>M(t))},null,8,["agenda-data","resources"]),e.createVNode(X._sfc_main$2,{ref_key:"orderDetailDialog",ref:T,"agenda-data":d.agendaData,resources:d.resources,onOpenReservation:u[1]||(u[1]=t=>q(t))},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 h=d,{config:w}=F.useModule(),{params:B}=F.useModuleRoute(),o=F.useFirebaseIntegration(w.project),i=e.ref(!1),c=e.ref(null),n=e.ref([]),x=e.ref(!1),f=e.ref(null),T=e.ref("");e.provide("event",c);const V=e.computed(()=>{if(!c.value)return[];const r=c.value.resource?.interval||60,t=[],[a,N]=c.value.startTime.split(":").map(Number),[j,L]=c.value.endTime.split(":").map(Number),y=a*60+N,k=j*60+L;for(let v=y;v<k;v+=r){const l=Math.floor(v/60),p=v%60,E=Math.min(v+r,k),g=Math.floor(E/60),$=E%60,A=`${l.toString().padStart(2,"0")}:${p.toString().padStart(2,"0")}`,s=`${g.toString().padStart(2,"0")}:${$.toString().padStart(2,"0")}`;t.push({startTime:A,endTime:s,label:A})}return t}),_=r=>{const t=r.getFullYear(),a=String(r.getMonth()+1).padStart(2,"0"),N=String(r.getDate()).padStart(2,"0");return`${t}-${a}-${N}`},I=e.computed(()=>{const r={};return V.value.forEach(t=>{r[t.startTime]={bookings:0,spots:0,orders:[]}}),n.value.forEach(t=>{V.value.forEach(a=>{t.startTime<a.endTime&&t.endTime>a.startTime&&(r[a.startTime].bookings++,r[a.startTime].spots+=t.spots||0,r[a.startTime].orders.push(t))})}),r}),C=e.computed(()=>Math.max(1,...Object.values(I.value).map(r=>r.spots))),D=e.computed(()=>{let r=n.value;return f.value&&(r=I.value[f.value]?.orders||[]),T.value.trim()&&(r=new X.Fuse(r,{keys:["customerInfo.firstName","customerInfo.lastName","customerInfo.email","customerInfo.phone"],threshold:.3,ignoreLocation:!0}).search(T.value).map(a=>a.item)),r}),M=e.computed(()=>({spots:n.value.reduce((r,t)=>r+(t.spots||0),0),bookings:n.value.length})),q=r=>{f.value===r?f.value=null:f.value=r},R=()=>{f.value=null},U=async r=>{i.value=!0,c.value=r,f.value=null,T.value="",await m()},m=async()=>{if(c.value){x.value=!0,n.value=[];try{const r=B.value.id,t=_(new Date(c.value.date)),a=c.value.resourceId||c.value.resource?.id,N=new Set;if(a?N.add(`${a}_${t}`):h.resources?.forEach(y=>{N.add(`${y.id}_${t}`)}),N.size===0){n.value=[];return}const j=await o.find(w.reservationsCollection,{filters:[{field:"agendaId",operator:"==",value:r},{field:"status",operator:"==",value:"confirmed"},{field:"flattenedReservationDates",operator:"array-contains-any",value:Array.from(N)}]});let L=[];j.forEach(y=>{(y.reservations?.filter(v=>v.date!==t?!1:a?v.resourceId===a:!0)||[]).forEach(v=>{const l=h.resources.find(E=>E.id===v.resourceId),p=y.id||y.orderId||v.orderId||"";(v.status==="approved"||v.status==="needs_approval")&&L.push({customerInfo:y.customerInfo,amountDue:y.amountDue,amountPaid:y.amountPaid,status:y.status,reservationStatus:v.status,subtotal:y.subtotal,total:y.total,discount:y.discount,id:p,res_id:v.id,resourceId:v.resourceId,spots:v.spots,date:t,createdAt:y.createdAt,startTime:v.timeslot?.startTime,endTime:v.timeslot?.endTime,reservationPrice:v.totalPrice,reservationBasePrice:v.basePrice,reservationAddOnsPrice:v.addOnsPrice,orderReservationCount:Array.isArray(y.reservations)?y.reservations.length:void 0,adjustments:y.adjustments||[],reservationAdjustments:v.adjustments||[],pricingOptionId:v.pricingOptionId,pricingOption:v.pricingOption,resourceName:l?.name,resourceColor:l?.color,metadata:y.metadata||{},reservationMetadata:v.metadata||{},refundStatus:v.refundStatus,refundedAt:v.refundedAt,refundedAmount:v.refundedAmount,refunds:Array.isArray(v.refunds)?v.refunds:[]})})}),n.value=L.sort((y,k)=>y.startTime?.localeCompare(k.startTime||"")||0)}catch(r){console.error("Error loading orders:",r),n.value=[]}finally{x.value=!1}}},u=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],S=["January","February","March","April","May","June","July","August","September","October","November","December"];return b({openDialog:U}),(r,t)=>{const a=e.resolveComponent("DialogTitle"),N=e.resolveComponent("DialogDescription"),j=e.resolveComponent("DialogHeader"),L=e.resolveComponent("Button"),y=e.resolveComponent("DialogFooter"),k=e.resolveComponent("DialogScrollContent"),v=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(v,{open:i.value,"onUpdate:open":t[2]||(t[2]=l=>i.value=l)},{default:e.withCtx(()=>[e.createVNode(k,{class:"sm:max-w-3xl"},{default:e.withCtx(()=>[e.createVNode(j,null,{default:e.withCtx(()=>[c.value?.date?(e.openBlock(),e.createBlock(a,{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u[new Date(c.value.date).getUTCDay()])+" "+e.toDisplayString(S[new Date(c.value.date).getUTCMonth()])+" "+e.toDisplayString(new Date(c.value.date).getUTCDate())+", "+e.toDisplayString(new Date(c.value.date).getUTCFullYear()),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(N,null,{default:e.withCtx(()=>[e.createElementVNode("div",Fe,[e.createElementVNode("div",Ue,[e.createVNode(e.unref(z.Clock),{size:14}),e.createElementVNode("span",null,e.toDisplayString(c.value?.startTime)+" – "+e.toDisplayString(c.value?.endTime),1)]),c.value?.resource?(e.openBlock(),e.createElementBlock("div",qe,[e.createElementVNode("div",{class:"w-4 h-4 rounded-full",style:e.normalizeStyle({backgroundColor:c.value.resource.color||"#6b7280"})},null,4),e.createElementVNode("span",null,e.toDisplayString(c.value.resource.name),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",He,[e.createVNode(e.unref(z.Users),{size:14}),e.createElementVNode("span",null,e.toDisplayString(M.value.spots)+" spots in "+e.toDisplayString(M.value.bookings)+" reservations",1)])])]),_:1})]),_:1}),e.createElementVNode("div",Qe,[V.value.length>1?(e.openBlock(),e.createBlock(he,{key:0,"time-slots":V.value,"slot-stats":I.value,"selected-time-slot":f.value,"max-spots":C.value,onSelect:q,onClear:R,tabindex:"0"},null,8,["time-slots","slot-stats","selected-time-slot","max-spots"])):e.createCommentVNode("",!0),e.createVNode(Oe,{"agenda-data":d.agendaData,resources:d.resources,orders:n.value,"filtered-orders":D.value,"is-loading":x.value,"selected-time-slot":f.value,"search-query":T.value,"onUpdate:searchQuery":t[0]||(t[0]=l=>T.value=l),onRefresh:m},null,8,["agenda-data","resources","orders","filtered-orders","is-loading","selected-time-slot","search-query"])]),e.createVNode(y,null,{default:e.withCtx(()=>[e.createVNode(L,{variant:"outline",onClick:t[1]||(t[1]=l=>i.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,h=e.ref(null),w=i=>{const[c,n]=i.split(":").map(Number);return c*60+n};e.computed(()=>!b.events||!b.resources?[]:b.resources.map(i=>{const n=b.events.filter(x=>x.resourceId===i.id).map(x=>{const f=w(x.startTime),V=w(x.endTime)-f,_=f/1440*100,I=V/1440*100,C=(x.bookings??0)>0,D=x.maxBookings?(x.bookings??0)/x.maxBookings*100:0;return{...x,top:`${_}%`,height:`${I}%`,color:x.resource?.color||"#3b82f6",hasBookings:C,fillPercentage:D,isSmall:V<60}});return{resource:i,events:n}}));const B=e.computed(()=>b.events?b.events.map(i=>{const c=w(i.startTime),x=w(i.endTime)-c,f=c/1440*100,T=x/1440*100,V=(i.bookings??0)>0,_=i.maxBookings?(i.bookings??0)/i.maxBookings*100:0;return{...i,top:`${f}%`,height:`${T}%`,color:i.resource?.color||"#3b82f6",hasBookings:V,fillPercentage:_,isSmall:x<60}}):[]),o=Array.from({length:24},(i,c)=>({hour:c,label:`${c.toString().padStart(2,"0")}:00`}));return(i,c)=>(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"},[...c[0]||(c[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(B.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:x=>h.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(z.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(z.Clock),{size:10}),e.createElementVNode("span",st,e.toDisplayString(n.startTime)+" – "+e.toDisplayString(n.endTime),1)],2)],2)],2),c[1]||(c[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:h},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},(h,w)=>({hour:w,label:`${w.toString().padStart(2,"0")}:00`}));return(h,w)=>(e.openBlock(),e.createElementBlock("div",rt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),B=>(e.openBlock(),e.createElementBlock("div",{key:B.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":B.hour!==0})},e.toDisplayString(B.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 h;e.onMounted(()=>{h=window.setInterval(()=>{b.value=Date.now()},1e3)}),e.onUnmounted(()=>{h&&clearInterval(h)});const w=e.computed(()=>{const o=new Date(b.value);return`${(o.getHours()*60+o.getMinutes()+o.getSeconds()/60)/1440*100}%`}),B=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,i)=>(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:w.value})},[i[0]||(i[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==B.value?(e.openBlock(),e.createElementBlock("div",dt," Now ")):e.createCommentVNode("",!0)],4)]))}}),ut={key:0,class:"relative flex flex-1 min-w-0 bg-card"},mt={key:1,class:"flex-1 min-w-0 relative min-h-[1616px] @md:min-h-[1658px] bg-card"},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()))),h=e.inject("viewMode",e.ref(1)),w=e.inject("events",e.ref([])),B=e.inject("resources",e.ref([])),o=e.ref(null),i=e.ref(!1),c=e.ref(!1);e.computed(()=>B.value.length>1);const n=e.computed(()=>{const t=[],a=b.value;for(let N=0;N<h.value;N++)t.push(a.add({days:N}));return t}),x=(t,a)=>{const N=`${t.year}-${String(t.month).padStart(2,"0")}-${String(t.day).padStart(2,"0")}`;return w.value?.filter(j=>j.date===N)||[]},f=t=>{const a=H.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(H.$14e0f24ef4ac5c92$export$aa8b41735afcabd2());return t.year===a.year&&t.month===a.month&&t.day===a.day},T=t=>{b.value=t,h.value=1};let V=null,_=null;const I=()=>{o.value&&(D(),o.value.scrollBy({left:-300,behavior:"smooth"}),_=window.setTimeout(()=>{V=window.setInterval(()=>{o.value&&o.value.scrollBy({left:-20,behavior:"auto"})},50)},300))},C=()=>{o.value&&(D(),o.value.scrollBy({left:300,behavior:"smooth"}),_=window.setTimeout(()=>{V=window.setInterval(()=>{o.value&&o.value.scrollBy({left:20,behavior:"auto"})},50)},300))},D=()=>{_&&(clearTimeout(_),_=null),V&&(clearInterval(V),V=null)},M=()=>{if(!o.value)return;const{scrollLeft:t,scrollWidth:a,clientWidth:N}=o.value;i.value=t>10,c.value=t<a-N-10},q=t=>{o.value&&Math.abs(t.deltaY)>Math.abs(t.deltaX)&&(t.preventDefault(),o.value.scrollBy({left:t.deltaY,behavior:"auto"}))},R=e.ref(!1),U=e.ref(0),m=e.ref(0),u=t=>{!o.value||h.value===1||t.target.closest(".event-card")||(R.value=!0,U.value=t.pageX,m.value=o.value.scrollLeft,o.value.style.userSelect="none",t.preventDefault())},S=t=>{if(!R.value||!o.value)return;const a=t.pageX,N=(U.value-a)*1.2;o.value.scrollLeft=m.value+N},r=()=>{o.value&&(R.value=!1,o.value.style.userSelect="")};return e.onMounted(()=>{o.value&&(o.value.addEventListener("scroll",M),o.value.addEventListener("wheel",q,{passive:!1}),e.nextTick(()=>{M(),setTimeout(M,50),setTimeout(M,150),setTimeout(M,300),setTimeout(M,500)})),document.addEventListener("mousemove",S),document.addEventListener("mouseup",r)}),e.onBeforeUnmount(()=>{document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",r)}),e.watch(h,()=>{h.value>1?e.nextTick(()=>{setTimeout(()=>{if(!o.value)return;const{scrollWidth:t,clientWidth:a}=o.value;t>a&&(c.value=!0,i.value=!1)},100)}):o.value&&(o.value.style.cursor="")}),e.onUnmounted(()=>{D(),o.value&&(o.value.removeEventListener("scroll",M),o.value.removeEventListener("wheel",q))}),(t,a)=>{const N=e.resolveComponent("Button"),j=e.resolveComponent("TooltipTrigger"),L=e.resolveComponent("TooltipContent"),y=e.resolveComponent("Tooltip");return e.unref(h)===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:x(e.unref(b)),resources:e.unref(B)},null,8,["agenda-data","date","events","resources"])])):(e.openBlock(),e.createElementBlock("div",mt,[e.unref(h)===7?(e.openBlock(),e.createElementBlock("div",pt,[e.createVNode(e.unref(z.ChevronLeft),{size:12}),a[0]||(a[0]=e.createElementVNode("span",null,"Scroll to view all days",-1)),e.createVNode(e.unref(z.ChevronRight),{size:12})])):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createBlock(N,{key:1,variant:"outline",size:"icon",onMousedown:I,onMouseup:D,onMouseleave:D,onTouchstart:I,onTouchend:D,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(z.ChevronLeft),{size:20})]),_:1})):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createBlock(N,{key:2,variant:"outline",size:"icon",onMousedown:C,onMouseup:D,onMouseleave:D,onTouchstart:C,onTouchend:D,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(z.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",c.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:M,onMousedown:u},[e.createElementVNode("div",ft,[e.createVNode(K),a[5]||(a[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,v)=>(e.openBlock(),e.createElementBlock("div",{key:k.toString(),class:e.normalizeClass(["flex-shrink-0",{"min-w-[200px] w-[33.33%]":e.unref(h)===3,"min-w-[280px]":e.unref(h)===7}])},[e.createElementVNode("div",{onClick:l=>T(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,[...a[1]||(a[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),a[4]||(a[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(y,null,{default:e.withCtx(()=>[e.createVNode(j,{"as-child":""},{default:e.withCtx(()=>[x(k).filter(l=>l.isException).length>0?(e.openBlock(),e.createBlock(e.unref(z.Asterisk),{key:0,class:"absolute top-3 right-3 size-4 text-orange-500"})):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(L,null,{default:e.withCtx(()=>[...a[2]||(a[2]=[e.createElementVNode("p",null," This day has exceptions applied to it. ",-1)])]),_:1})]),_:2},1024),e.createVNode(y,null,{default:e.withCtx(()=>[e.createVNode(j,{"as-child":""},{default:e.withCtx(()=>[x(k).filter(l=>l.isException).length>0?(e.openBlock(),e.createElementBlock("div",xt)):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(L,null,{default:e.withCtx(()=>[...a[3]||(a[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:x(k),resources:e.unref(B)},null,8,["agenda-data","date","events","resources"])],2))),128))])],544)]))}}}),kt=ne._export_sfc(yt,[["__scopeId","data-v-a0b50ec2"]]),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 bg-card"},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"},Rt={class:"min-w-0 flex-1"},Pt={class:"text-sm font-medium truncate text-muted-foreground"},Ot=e.defineComponent({__name:"agenda",setup(d){const{hasPermission:b}=F.useModulePermissions(),{params:h}=F.useModuleRoute(),{config:w}=F.useModule(),B=F.useFirebaseIntegration(w.project),o=e.ref(H.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(H.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())),i=e.ref(1),c=e.useTemplateRef("container"),{width:n}=se.useElementSize(c),x=e.computed(()=>n.value<640);e.watch(x,l=>{l&&i.value!==1&&(i.value=1)},{immediate:!0});const f=e.ref(null),T=e.ref(new Map),V=e.computed(()=>f.value?.resources||[]),_=e.computed(()=>V.value.filter(l=>l.isActive)),I=e.computed(()=>V.value.filter(l=>!l.isActive)),C=e.ref(null),D=e.ref(!1);e.watch(_,l=>{l.length>0&&!C.value&&(C.value=l[0].id)},{immediate:!0});const M=e.computed(()=>{if(!C.value)return _.value.length>0?[_.value[0]]:[];const l=_.value.find(p=>p.id===C.value);return l?[l]:_.value.length>0?[_.value[0]]:[]}),q=e.computed(()=>f.value?.pricingOptions?.find(p=>p.isDefault)?.duration||30),R=l=>{C.value=l};e.watch(o,()=>{k()});const U=e.computed(()=>{const l=o.value,p=new Date(l.year,l.month-1,l.day),E=p.toLocaleDateString("en-US",{weekday:"long"}).toUpperCase(),g=l.day,$=p.toLocaleDateString("en-US",{month:"short"}).toUpperCase();return{dayName:E,day:g,monthName:$,full:`${E} ${g} ${$}`}}),m=()=>{o.value=o.value.subtract({days:i.value})},u=()=>{o.value=o.value.add({days:i.value})},S=()=>{o.value=H.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(H.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())},r=l=>{const[p,E]=l.split(":").map(Number);return p*60+E},t=(l,p)=>(f.value?.exceptions||[]).find(g=>p>=g.startDate&&p<=g.endDate?g.resourceIds===null?!0:g.resourceIds?.includes(l):!1)||null,a=(l,p,E)=>{const g=t(l.id,E);if(g)return g.isClosed?[]:g.timeslots.map(s=>({startTime:s.startTime,endTime:s.endTime,isException:!0}));const $=p.getDay(),A=l.openingHours?.[$]||[];return A.length===0?[]:A.map(s=>({startTime:s.start,endTime:s.end,isException:!1}))},N=(l,p,E,g)=>{if(!f.value)return 0;const $=T.value.get(p);return $?$.filter(s=>s.resourceId===l).reduce((s,P)=>{const O=r(P.startTime),Q=r(P.endTime),W=r(E),Y=r(g);return O<Y&&Q>W?s+(P.reserved||0):s},0):0},j=e.computed(()=>{if(!f.value)return[];T.value.size;let l=[],p=[];for(let g=0;g<i.value;g++){const $=o.value.add({days:g});p.push($)}const E=M.value.length>0?M.value:[];return E.length===0?[]:(p.forEach(g=>{let $=new Date(g.year,g.month-1,g.day);const A=`${g.year}-${String(g.month).padStart(2,"0")}-${String(g.day).padStart(2,"0")}`;E.forEach(s=>{const P=a(s,$,A);l=l.concat(P.map((O,Q)=>{const W=N(s.id,A,O.startTime,O.endTime);return{id:`block-${A}-${s.id}-${Q}`,title:f.value.serviceName,date:A,startTime:O.startTime,endTime:O.endTime,theme:s.color||"#3b82f6",bookings:W,maxBookings:s.capacity,isException:O.isException||!1,resourceId:s.id,resource:s,interval:s.interval||30,serviceDuration:q.value}}))})}),l)});let L=null;const y=async()=>{L||(L=B.get(w.agendaCollection,h.value.id).then(l=>{f.value=l}).finally(()=>{L=null})),await L},k=async()=>{if(f.value||await y(),!f.value)return;const l=h.value.id,p=o.value;T.value.clear();const E=[];for(let g=0;g<i.value;g++){const $=p.add({days:g}),A=`${$.year}-${String($.month).padStart(2,"0")}-${String($.day).padStart(2,"0")}`,s=`${l}_${A}`;E.push(B.get(w.reservedSpotsCollection,s).then(P=>{if(P){const O=[];for(const Q of _.value){const W=P?.[Q.id]||{};Object.entries(W).forEach(([Y,Z])=>{const[ee,te]=Y.split("-");O.push({resourceId:Q.id,startTime:ee,endTime:te,reserved:Z})})}T.value.set(A,O)}}).catch(()=>{}))}await Promise.all(E)};return(async()=>(await y(),await k()))(),e.watch(i,()=>{k()}),e.provide("agendaData",f),e.provide("activeDate",o),e.provide("viewMode",i),e.provide("events",j),e.provide("resources",M),e.provide("allResources",_),(l,p)=>{const E=e.resolveComponent("Button"),g=e.resolveComponent("SegmentedControlButton"),$=e.resolveComponent("SegmentedControl"),A=e.resolveComponent("Calendar");return e.openBlock(),e.createBlock(oe._sfc_main,null,{default:e.withCtx(()=>[e.createElementVNode("div",{ref_key:"container",ref:c,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",(x.value,"")])},[e.createElementVNode("div",bt,[e.createElementVNode("div",_t,[e.createElementVNode("div",Nt,[e.createVNode(e.unref(z.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(E,{variant:"outline",size:"icon",class:"size-8 @sm:size-9",onClick:m},{default:e.withCtx(()=>[e.createVNode(e.unref(z.ChevronLeft),{size:16})]),_:1}),e.createVNode(E,{variant:"outline",size:"sm",class:"h-8 @sm:h-9 px-2 @sm:px-3 text-xs @sm:text-sm",onClick:S},{default:e.withCtx(()=>[...p[3]||(p[3]=[e.createTextVNode(" Today ",-1)])]),_:1}),e.createVNode(E,{variant:"outline",size:"icon",class:"size-8 @sm:size-9",onClick:u},{default:e.withCtx(()=>[e.createVNode(e.unref(z.ChevronRight),{size:16})]),_:1})]),x.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock($,{key:0,modelValue:i.value,"onUpdate:modelValue":p[0]||(p[0]=s=>i.value=s)},{default:e.withCtx(()=>[e.createVNode(g,{value:1},{default:e.withCtx(()=>[...p[4]||(p[4]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"1 Day",-1)])]),_:1}),e.createVNode(g,{value:3},{default:e.withCtx(()=>[...p[5]||(p[5]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"3 Days",-1)])]),_:1}),e.createVNode(g,{value:7},{default:e.withCtx(()=>[...p[6]||(p[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),x.value&&_.value.length>0?(e.openBlock(),e.createElementBlock("div",Ct,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value,s=>(e.openBlock(),e.createElementBlock("button",{key:s.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":C.value===s.id,"bg-background hover:bg-muted":C.value!==s.id}]),onClick:P=>R(s.id)},[e.createElementVNode("div",{class:"size-5 rounded-full flex items-center justify-center text-white text-[10px] font-medium",style:e.normalizeStyle({backgroundColor:C.value===s.id?"rgba(255,255,255,0.3)":s.color||"#6b7280"})},e.toDisplayString(s.avatarLabel||s.name.charAt(0).toUpperCase()),5),e.createElementVNode("span",null,e.toDisplayString(s.name),1)],10,Dt))),128))])):e.createCommentVNode("",!0),e.createElementVNode("div",Bt,[e.createElementVNode("div",$t,[e.createVNode(A,{modelValue:o.value,"onUpdate:modelValue":p[1]||(p[1]=s=>o.value=s),"weekday-format":"short",class:"rounded-md border bg-card"},null,8,["modelValue"]),V.value.length>0?(e.openBlock(),e.createElementBlock("div",Tt,[p[7]||(p[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(_.value,s=>(e.openBlock(),e.createElementBlock("div",{key:s.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":C.value===s.id,"opacity-50":C.value&&C.value!==s.id}]),onClick:P=>R(s.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:s.color||"#6b7280"})},e.toDisplayString(s.avatarLabel||s.name.charAt(0).toUpperCase()),5),e.createElementVNode("div",Mt,[e.createElementVNode("div",At,e.toDisplayString(s.name),1)]),e.createElementVNode("div",{class:e.normalizeClass(["size-2 rounded-full flex-shrink-0",C.value===s.id?"bg-primary":"bg-muted-foreground/30"])},null,2)],10,It))),128)),I.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:p[2]||(p[2]=s=>D.value=!D.value)},[e.createVNode(e.unref(z.ChevronRight),{size:14,class:e.normalizeClass(["transition-transform",{"rotate-90":D.value}])},null,8,["class"]),e.createElementVNode("span",null,"Inactive ("+e.toDisplayString(I.value.length)+")",1)]),D.value?(e.openBlock(),e.createElementBlock("div",jt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,s=>(e.openBlock(),e.createElementBlock("div",{key:s.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:s.color||"#6b7280"})},e.toDisplayString(s.avatarLabel||s.name.charAt(0).toUpperCase()),5),e.createElementVNode("div",Rt,[e.createElementVNode("div",Pt,e.toDisplayString(s.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=Ot;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { defineComponent as ae, resolveComponent as F, openBlock as s, createElementBlock as d, createElementVNode as e, Fragment as G, renderList as te, toDisplayString as g, normalizeStyle as se, normalizeClass as Q, createVNode as u, withCtx as M, unref as w, createTextVNode as le, createCommentVNode as B, computed as R, ref as D, createBlock as Z, nextTick as ve, provide as ne, onMounted as $e, onUnmounted as Te, inject as de, onBeforeUnmount as Ae, watch as ue, useTemplateRef as ze } from "vue";
|
|
2
2
|
import { a as ce, b as me } from "./DateFormatter-BkKoSf_l.mjs";
|
|
3
3
|
import { X as De, Search as Ee, Clock as he, Users as xe, ChevronLeft as ge, ChevronRight as fe, Asterisk as Be, CalendarDays as Pe } from "lucide-vue-next";
|
|
4
|
-
import { _ as je } from "./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
4
|
+
import { _ as je } from "./EditLayout.vue_vue_type_script_setup_true_lang-4_t0PPqM.mjs";
|
|
5
5
|
import { useModuleRoute as ye, useModule as be, useFirebaseIntegration as _e, useModulePermissions as Oe } from "@oneclick.dev/cms-kit";
|
|
6
6
|
import { u as Re, _ as Le, a as Ue, b as Ne, F as Fe } from "./OrderDetailDialog.vue_vue_type_script_setup_true_lang-DwAUYR8p.mjs";
|
|
7
7
|
import { _ as Ve } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
|
|
8
|
-
import { _ as He } from "./NewReservationDialog.vue_vue_type_script_setup_true_lang-
|
|
8
|
+
import { _ as He } from "./NewReservationDialog.vue_vue_type_script_setup_true_lang-bZidw6RT.mjs";
|
|
9
9
|
import { a as Qe } from "./index-hMp4p5qA.mjs";
|
|
10
10
|
const We = { class: "mb-6" }, qe = { class: "flex items-end gap-px h-24 bg-muted/30 rounded-lg p-2 overflow-visible" }, Xe = ["onClick"], Ye = { 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" }, Je = { class: "font-medium" }, Ke = { class: "text-muted-foreground" }, Ge = { class: "w-full flex-1 flex items-end justify-center" }, Ze = {
|
|
11
11
|
key: 1,
|
|
@@ -698,10 +698,10 @@ const We = { class: "mb-6" }, qe = { class: "flex items-end gap-px h-24 bg-muted
|
|
|
698
698
|
}
|
|
699
699
|
}), Kt = {
|
|
700
700
|
key: 0,
|
|
701
|
-
class: "relative flex flex-1 min-w-0"
|
|
701
|
+
class: "relative flex flex-1 min-w-0 bg-card"
|
|
702
702
|
}, Gt = {
|
|
703
703
|
key: 1,
|
|
704
|
-
class: "flex-1 min-w-0 relative min-h-[1616px] @md:min-h-[1658px]"
|
|
704
|
+
class: "flex-1 min-w-0 relative min-h-[1616px] @md:min-h-[1658px] bg-card"
|
|
705
705
|
}, Zt = {
|
|
706
706
|
key: 0,
|
|
707
707
|
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"
|
|
@@ -926,12 +926,12 @@ const We = { class: "mb-6" }, qe = { class: "flex items-end gap-px h-24 bg-muted
|
|
|
926
926
|
]));
|
|
927
927
|
};
|
|
928
928
|
}
|
|
929
|
-
}), rs = /* @__PURE__ */ Ve(ns, [["__scopeId", "data-v-
|
|
929
|
+
}), rs = /* @__PURE__ */ Ve(ns, [["__scopeId", "data-v-a0b50ec2"]]), ls = { class: "flex items-center justify-between @sm:justify-start gap-4" }, is = { class: "flex flex-col" }, us = { class: "flex items-center gap-2" }, ds = { class: "text-lg @sm:text-2xl font-bold tracking-tight truncate" }, cs = { class: "text-xs @sm:text-sm text-muted-foreground ml-7 truncate" }, ms = { class: "flex @sm:items-center justify-between flex-col @sm:flex-row @5xl:justify-end gap-2" }, fs = { class: "flex items-center gap-1 @5xl:mr-2" }, ps = {
|
|
930
930
|
key: 0,
|
|
931
931
|
class: "flex items-center gap-2 px-1 overflow-x-auto pb-2 -mx-1 scrollbar-hide"
|
|
932
932
|
}, vs = ["onClick"], gs = { class: "flex gap-2 @md:gap-4" }, hs = { class: "hidden @md:flex flex-shrink-0 flex-col gap-4" }, xs = {
|
|
933
933
|
key: 0,
|
|
934
|
-
class: "rounded-md border p-3"
|
|
934
|
+
class: "rounded-md border p-3 bg-card"
|
|
935
935
|
}, ys = { class: "space-y-1" }, bs = ["onClick"], _s = { class: "min-w-0 flex-1" }, ks = { class: "text-sm font-medium truncate" }, ws = {
|
|
936
936
|
key: 0,
|
|
937
937
|
class: "pt-2 mt-2 border-t"
|
|
@@ -1189,7 +1189,7 @@ const We = { class: "mb-6" }, qe = { class: "flex items-end gap-px h-24 bg-muted
|
|
|
1189
1189
|
modelValue: o.value,
|
|
1190
1190
|
"onUpdate:modelValue": h[1] || (h[1] = (r) => o.value = r),
|
|
1191
1191
|
"weekday-format": "short",
|
|
1192
|
-
class: "rounded-md border"
|
|
1192
|
+
class: "rounded-md border bg-card"
|
|
1193
1193
|
}, null, 8, ["modelValue"]),
|
|
1194
1194
|
P.value.length > 0 ? (s(), d("div", xs, [
|
|
1195
1195
|
h[7] || (h[7] = e("div", { class: "flex items-center justify-between mb-3" }, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),_=require("./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),_=require("./EditLayout.vue_vue_type_script_setup_true_lang-D1b9_iiN.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;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
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-
|
|
2
|
+
import { _ as W } from "./EditLayout.vue_vue_type_script_setup_true_lang-4_t0PPqM.mjs";
|
|
3
3
|
import { useModuleRoute as q, useModulePermissions as z, useModule as F, useFirebaseIntegration as H } from "@oneclick.dev/cms-kit";
|
|
4
4
|
const O = { key: 0 }, Y = {
|
|
5
5
|
key: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),G=require("./EditLayout.vue_vue_type_script_setup_true_lang-gozJKXvM.js"),N=require("lucide-vue-next"),I=require("@oneclick.dev/cms-kit"),W={class:"space-y-6 py-4"},Y={class:"grid grid-cols-2 gap-6"},Z={class:"relative"},J={key:0,class:"text-xs text-red-600 mt-1"},Q={key:0},X={key:1},ee={class:"flex items-center gap-3"},te={key:2,class:"grid gap-2"},oe={class:"w-full flex justify-between items-center"},le={class:"flex items-center gap-2 ml-auto"},ae=e.defineComponent({__name:"CustomerInformationFieldEditorDialog",props:{keysInUse:{type:Array,default:()=>[]}},emits:["add-field","update-field","remove-field"],setup(z,{expose:h,emit:D}){const w=D,V=z,{confirm:k}=I.useConfirmation(),o=e.ref(!1),u=e.ref("add"),s=e.ref(null),d=e.reactive({id:"",fieldName:"",fieldDescription:"",fieldType:"text",required:!1,isNativeField:!1,visible:!0,options:[]}),T=e.computed(()=>{const i=new Set(V.keysInUse);return u.value==="edit"&&s.value&&i.delete(s.value),i}),b=[{value:"text",label:"Text Box"},{value:"checkbox",label:"Checkbox"},{value:"radio",label:"Radio Button"},{value:"select",label:"Select"},{value:"date",label:"Date Picker"}],_=i=>{u.value=i?"edit":"add",C.value=[],d.id=i?.id||"",s.value=i?.id||null,d.fieldName=i?.fieldName||"",d.fieldDescription=i?.fieldDescription||"",d.fieldType=i?.fieldType||"text",d.required=i?.required||!1,d.isNativeField=i?.isNativeField||!1,d.options=i?.options||[],d.visible=i?.visible!==void 0?i.visible:!0,f.value=u.value==="edit",o.value=!0},$=()=>{o.value=!1,C.value=[]},U=()=>{E()&&(w("add-field",{...d}),o.value=!1)},P=()=>{E()&&(w("update-field",s.value,{...d}),o.value=!1)},A=()=>{w("remove-field",s.value),o.value=!1},C=e.ref([]),E=()=>(C.value=[],d.fieldName=d.fieldName.trim(),d.fieldName?!0:(C.value.push("Field name is required."),!1)),f=e.ref(!1),F=async()=>{await k("Previous orders using this field won't update to reflect changes. Are you sure you want to change the key?")&&(f.value=!1)};return h({openDialog:_}),(i,t)=>{const L=e.resolveComponent("DialogTitle"),M=e.resolveComponent("DialogHeader"),y=e.resolveComponent("Label"),v=e.resolveComponent("Input"),g=e.resolveComponent("Button"),n=e.resolveComponent("SelectValue"),l=e.resolveComponent("SelectTrigger"),m=e.resolveComponent("SelectItem"),c=e.resolveComponent("SelectContent"),p=e.resolveComponent("Select"),r=e.resolveComponent("TagsInputItemText"),x=e.resolveComponent("TagsInputItemDelete"),S=e.resolveComponent("TagsInputItem"),O=e.resolveComponent("TagsInputInput"),B=e.resolveComponent("TagsInput"),R=e.resolveComponent("Checkbox"),q=e.resolveComponent("DialogFooter"),j=e.resolveComponent("DialogScrollContent"),H=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(H,{open:o.value,"onUpdate:open":t[6]||(t[6]=a=>o.value=a)},{default:e.withCtx(()=>[e.createVNode(j,{class:"sm:max-w-2xl"},{default:e.withCtx(()=>[e.createVNode(M,null,{default:e.withCtx(()=>[e.createVNode(L,null,{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Customer Information",-1)])]),_:1})]),_:1}),e.createElementVNode("div",W,[e.createElementVNode("div",Y,[e.createElementVNode("div",null,[e.createVNode(y,{class:"text-bsmase font-normal mb-1.5",for:"customer-info-field-dialog-fieldname"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("Field Name",-1)])]),_:1}),e.createVNode(v,{modelValue:d.fieldName,"onUpdate:modelValue":t[0]||(t[0]=a=>d.fieldName=a),id:"customer-info-field-dialog-fieldname"},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(y,{class:"text-bsmase font-normal mb-1.5",for:"customer-info-field-dialog-fieldname"},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode("Key",-1)])]),_:1}),e.createElementVNode("div",Z,[e.createVNode(v,{modelValue:d.id,"onUpdate:modelValue":t[1]||(t[1]=a=>d.id=a),id:"customer-info-field-dialog-fieldname",disabled:f.value},null,8,["modelValue","disabled"]),f.value?(e.openBlock(),e.createBlock(g,{key:0,variant:"ghost",size:"icon",class:"absolute group top-0 right-0",onClick:F},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Lock),{class:"size-4 block group-hover:hidden"}),e.createVNode(e.unref(N.LockOpen),{class:"size-4 hidden group-hover:block"})]),_:1})):e.createCommentVNode("",!0)]),e.unref(T).has(d.id)?(e.openBlock(),e.createElementBlock("p",J," Key already in use. ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",null,[e.createVNode(y,{class:"text-sm font-normal mb-1.5",for:"customer-info-field-dialog-field-description"},{default:e.withCtx(()=>[...t[10]||(t[10]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(v,{modelValue:d.fieldDescription,"onUpdate:modelValue":t[2]||(t[2]=a=>d.fieldDescription=a),id:"customer-info-field-dialog-field-description"},null,8,["modelValue"])]),d.isNativeField?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Q,[e.createVNode(y,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode("Field Type",-1)])]),_:1}),e.createVNode(p,{modelValue:d.fieldType,"onUpdate:modelValue":t[3]||(t[3]=a=>d.fieldType=a)},{default:e.withCtx(()=>[e.createVNode(l,null,{default:e.withCtx(()=>[e.createVNode(n,{placeholder:"Select field type"})]),_:1}),e.createVNode(c,null,{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(b,a=>e.createVNode(m,{key:a.value,value:a.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.label),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])])),d.fieldType==="select"||d.fieldType==="radio"?(e.openBlock(),e.createElementBlock("div",X,[e.createVNode(y,{class:"text-sm font-normal mb-1.5",for:"customer-info-field-dialog-field-new-option"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Options",-1)])]),_:1}),e.createVNode(B,{modelValue:d.options,"onUpdate:modelValue":t[4]||(t[4]=a=>d.options=a)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.options,a=>(e.openBlock(),e.createBlock(S,{key:a,value:a},{default:e.withCtx(()=>[e.createVNode(r),e.createVNode(x)]),_:1},8,["value"]))),128)),e.createVNode(O,{placeholder:"New option...",id:"customer-info-field-dialog-field-new-option"})]),_:1},8,["modelValue"])])):e.createCommentVNode("",!0),e.createElementVNode("div",ee,[e.createVNode(R,{id:"customer-info-field-dialog-field-required",modelValue:d.required,"onUpdate:modelValue":t[5]||(t[5]=a=>d.required=a)},null,8,["modelValue"]),e.createVNode(y,{for:"customer-info-field-dialog-field-required",class:"text-base font-normal cursor-pointer"},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode(" Is this field mandatory? ",-1)])]),_:1})]),C.value.length>0?(e.openBlock(),e.createElementBlock("p",te,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,(a,K)=>(e.openBlock(),e.createElementBlock("span",{key:K,class:"text-sm text-red-600 block"},e.toDisplayString(a),1))),128))])):e.createCommentVNode("",!0)]),e.createVNode(q,{class:"gap-2"},{default:e.withCtx(()=>[e.createElementVNode("div",oe,[u.value==="edit"&&!d.isNativeField?(e.openBlock(),e.createBlock(g,{key:0,variant:"destructive",onClick:A},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode(" Remove Field ",-1)])]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("div",le,[e.createVNode(g,{variant:"outline",onClick:$},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),u.value==="add"?(e.openBlock(),e.createBlock(g,{key:0,onClick:U},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode(" Add Field ",-1)])]),_:1})):(e.openBlock(),e.createBlock(g,{key:1,onClick:P},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode(" Update Field ",-1)])]),_:1}))])])]),_:1})]),_:1})]),_:1},8,["open"])}}}),ne={class:"space-y-6 py-4"},de={class:"text-xs text-muted-foreground"},ie={class:"flex items-center justify-between rounded-md border p-3"},re={class:"min-w-0"},se={class:"rounded-md border p-4 space-y-4"},ce={class:"flex items-center justify-between gap-4"},me={class:"flex items-center gap-3 min-w-0"},ue={class:"size-9 rounded-md bg-primary/10 flex items-center justify-center shrink-0"},pe={class:"min-w-0"},fe={key:0,class:"flex items-center justify-between gap-3 border-t pt-4"},ve={class:"grid grid-cols-2 gap-4"},Ve={key:0,class:"grid gap-2"},Ne={class:"w-full flex justify-between items-center"},xe={class:"flex items-center gap-2 ml-auto"},ge=e.defineComponent({__name:"MetadataSchemaEditorDialog",emits:["add-field","update-field","remove-field"],setup(z,{expose:h,emit:D}){const w=D,V=e.ref(!1),k=e.ref("add"),o=e.reactive({id:"",key:"",label:"",display:"field",scope:"order",includeInPdf:!1,icon:"",color:"",order:0,action:{type:"flow",flow:{}}}),u=e.ref(!1),s=[{value:"highlight",label:"Highlight",description:"Large prominent card — ideal for door codes, PINs"},{value:"badge",label:"Badge",description:"Colored pill in the order header — ideal for membership, VIP status"},{value:"field",label:"Field",description:"Standard label-value row in order details"},{value:"hidden",label:"Hidden",description:"Not shown in the UI — internal system fields"}],d=[{value:"order",label:"Order",description:"Attached to the whole order"},{value:"reservation",label:"Reservation",description:"Attached to each individual reservation"}],T=[{id:"value",name:"value",type:"string",value:"Example metadata value"}],b=e.computed(()=>Object.keys(o.action?.flow||{}).length>0),_=i=>{k.value=i?"edit":"add",f.value=[],o.id=i?.id||"",o.key=i?.key||"",o.label=i?.label||"",o.display=i?.display||"field",o.scope=i?.scope||"order",o.includeInPdf=i?.includeInPdf===!0,o.icon=i?.icon||"",o.color=i?.color||"",o.order=i?.order||0,o.action={type:"flow",flow:i?.action?.flow||{}},u.value=i?.action?.type==="flow"&&Object.keys(i?.action?.flow||{}).length>0,V.value=!0},$=()=>{V.value=!1,f.value=[]},U=()=>{F()&&(w("add-field",E()),V.value=!1)},P=()=>{F()&&(w("update-field",E()),V.value=!1)},A=()=>{w("remove-field",o.id),V.value=!1},C=()=>{o.action.flow={}},E=()=>{const i={id:o.id,key:o.key,label:o.label,display:o.display,scope:o.scope,includeInPdf:o.includeInPdf,icon:o.icon,color:o.color,order:o.order};return u.value&&b.value&&(i.action={type:"flow",flow:o.action.flow||{}}),i},f=e.ref([]),F=()=>(f.value=[],o.key=o.key.trim(),o.label=o.label.trim(),o.key||f.value.push("Metadata key is required."),o.label||f.value.push("Display label is required."),o.key&&!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o.key)&&f.value.push("Key must be alphanumeric (letters, numbers, underscores)."),u.value&&!b.value&&f.value.push("Build a metadata action flow or turn the action off."),f.value.length===0);return h({openDialog:_}),(i,t)=>{const L=e.resolveComponent("DialogTitle"),M=e.resolveComponent("DialogDescription"),y=e.resolveComponent("DialogHeader"),v=e.resolveComponent("Label"),g=e.resolveComponent("Input"),n=e.resolveComponent("RadioGroupItem"),l=e.resolveComponent("RadioGroup"),m=e.resolveComponent("SelectValue"),c=e.resolveComponent("SelectTrigger"),p=e.resolveComponent("SelectItem"),r=e.resolveComponent("SelectContent"),x=e.resolveComponent("Select"),S=e.resolveComponent("Switch"),O=e.resolveComponent("FlowBuilderSelect"),B=e.resolveComponent("Button"),R=e.resolveComponent("LucideIconPicker"),q=e.resolveComponent("DialogFooter"),j=e.resolveComponent("DialogScrollContent"),H=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(H,{open:V.value,"onUpdate:open":t[10]||(t[10]=a=>V.value=a)},{default:e.withCtx(()=>[e.createVNode(j,{class:"sm:max-w-2xl"},{default:e.withCtx(()=>[e.createVNode(y,null,{default:e.withCtx(()=>[e.createVNode(L,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(k.value==="add"?"Add Metadata Field":"Edit Metadata Field"),1)]),_:1}),e.createVNode(M,null,{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode(" Configure how an external metadata field is displayed on orders. ",-1)])]),_:1})]),_:1}),e.createElementVNode("div",ne,[e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5",for:"metadata-field-key"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Metadata Key",-1)])]),_:1}),e.createVNode(g,{modelValue:o.key,"onUpdate:modelValue":t[0]||(t[0]=a=>o.key=a),id:"metadata-field-key",placeholder:"e.g. doorCode, membershipTier",disabled:k.value==="edit"},null,8,["modelValue","disabled"]),t[13]||(t[13]=e.createElementVNode("p",{class:"text-xs text-muted-foreground mt-1"}," The key in the metadata object. Must match what your external system writes. ",-1))]),e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5",for:"metadata-field-label"},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode("Display Label",-1)])]),_:1}),e.createVNode(g,{modelValue:o.label,"onUpdate:modelValue":t[1]||(t[1]=a=>o.label=a),id:"metadata-field-label",placeholder:"e.g. Door Code, Membership"},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("Display Mode",-1)])]),_:1}),e.createVNode(l,{modelValue:o.display,"onUpdate:modelValue":t[2]||(t[2]=a=>o.display=a)},{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(s,a=>e.createElementVNode("div",{key:a.value,class:"flex items-start space-x-3 space-y-0 rounded-md border p-3 mb-2"},[e.createVNode(n,{value:a.value,id:`display-${a.value}`,class:"mt-0.5"},null,8,["value","id"]),e.createElementVNode("div",null,[e.createVNode(v,{for:`display-${a.value}`,class:"font-medium cursor-pointer"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.label),1)]),_:2},1032,["for"]),e.createElementVNode("p",de,e.toDisplayString(a.description),1)])])),64))]),_:1},8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("Scope",-1)])]),_:1}),e.createVNode(x,{modelValue:o.scope,"onUpdate:modelValue":t[3]||(t[3]=a=>o.scope=a)},{default:e.withCtx(()=>[e.createVNode(c,null,{default:e.withCtx(()=>[e.createVNode(m,{placeholder:"Select scope"})]),_:1}),e.createVNode(r,null,{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(d,a=>e.createVNode(p,{key:a.value,value:a.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.label)+" — "+e.toDisplayString(a.description),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])]),e.createElementVNode("div",ie,[e.createElementVNode("div",re,[e.createVNode(v,{for:"metadata-field-include-pdf",class:"font-medium cursor-pointer"},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode("Include in PDF",-1)])]),_:1})]),e.createVNode(S,{id:"metadata-field-include-pdf",modelValue:o.includeInPdf,"onUpdate:modelValue":t[4]||(t[4]=a=>o.includeInPdf=a)},null,8,["modelValue"])]),e.createElementVNode("div",se,[e.createElementVNode("div",ce,[e.createElementVNode("div",me,[e.createElementVNode("div",ue,[e.createVNode(e.unref(N.Workflow),{class:"size-4 text-primary"})]),e.createElementVNode("div",pe,[e.createVNode(v,{for:"metadata-field-action",class:"font-medium cursor-pointer"},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode("Action",-1)])]),_:1}),t[19]||(t[19]=e.createElementVNode("p",{class:"text-xs text-muted-foreground"},"Run a flow from this metadata value.",-1))])]),e.createVNode(S,{id:"metadata-field-action",modelValue:u.value,"onUpdate:modelValue":t[5]||(t[5]=a=>u.value=a)},null,8,["modelValue"])]),u.value?(e.openBlock(),e.createElementBlock("div",fe,[e.createVNode(O,{modelValue:o.action.flow,"onUpdate:modelValue":t[6]||(t[6]=a=>o.action.flow=a),variables:T,"button-variant":"outline"},null,8,["modelValue"]),e.createVNode(B,{variant:"outline",size:"sm",disabled:!b.value,onClick:C},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Trash2),{class:"size-4"}),t[20]||(t[20]=e.createTextVNode(" Remove Flow ",-1))]),_:1},8,["disabled"])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ve,[e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5",for:"metadata-field-icon"},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode("Icon (Optional)",-1)])]),_:1}),e.createVNode(R,{id:"metadata-field-icon",modelValue:o.icon,"onUpdate:modelValue":t[7]||(t[7]=a=>o.icon=a)},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5",for:"metadata-field-color"},{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createTextVNode("Color (Optional)",-1)])]),_:1}),e.createVNode(g,{modelValue:o.color,"onUpdate:modelValue":t[8]||(t[8]=a=>o.color=a),id:"metadata-field-color",placeholder:"e.g. #FFD700"},null,8,["modelValue"])])]),e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5",for:"metadata-field-order"},{default:e.withCtx(()=>[...t[23]||(t[23]=[e.createTextVNode("Sort Order (Optional)",-1)])]),_:1}),e.createVNode(g,{modelValue:o.order,"onUpdate:modelValue":t[9]||(t[9]=a=>o.order=a),modelModifiers:{number:!0},id:"metadata-field-order",type:"number",placeholder:"0",class:"max-w-24"},null,8,["modelValue"]),t[24]||(t[24]=e.createElementVNode("p",{class:"text-xs text-muted-foreground mt-1"},"Lower numbers appear first.",-1))]),f.value.length>0?(e.openBlock(),e.createElementBlock("p",Ve,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(a,K)=>(e.openBlock(),e.createElementBlock("span",{key:K,class:"text-sm text-red-600 block"},e.toDisplayString(a),1))),128))])):e.createCommentVNode("",!0)]),e.createVNode(q,{class:"gap-2"},{default:e.withCtx(()=>[e.createElementVNode("div",Ne,[k.value==="edit"?(e.openBlock(),e.createBlock(B,{key:0,variant:"destructive",onClick:A},{default:e.withCtx(()=>[...t[25]||(t[25]=[e.createTextVNode(" Remove Field ",-1)])]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("div",xe,[e.createVNode(B,{variant:"outline",onClick:$},{default:e.withCtx(()=>[...t[26]||(t[26]=[e.createTextVNode("Cancel",-1)])]),_:1}),k.value==="add"?(e.openBlock(),e.createBlock(B,{key:0,onClick:U},{default:e.withCtx(()=>[...t[27]||(t[27]=[e.createTextVNode("Add Field",-1)])]),_:1})):(e.openBlock(),e.createBlock(B,{key:1,onClick:P},{default:e.withCtx(()=>[...t[28]||(t[28]=[e.createTextVNode("Update Field",-1)])]),_:1}))])])]),_:1})]),_:1})]),_:1},8,["open"])}}}),ke={key:0},Ce={key:0,class:"max-w-2xl"},ye={class:"border rounded-md p-4 mb-4"},be={class:"font-medium text-sm"},we={class:"flex items-center justify-between gap-4 mt-4"},he={class:"border rounded-md p-4 mb-4"},_e={key:0,class:"text-sm text-muted-foreground py-4 text-center"},Ee={class:"flex items-center gap-3 min-w-0"},Fe={class:"min-w-0"},Be={class:"font-medium text-sm"},Ie={class:"text-xs text-muted-foreground"},Te={class:"bg-muted px-1 py-0.5 rounded text-xs"},Se={class:"inline-flex items-center gap-1"},De={class:"flex items-center gap-3 shrink-0"},$e={class:"flex items-center gap-2"},Ue={class:"flex justify-start mt-8"},Pe={key:1},Ae=e.defineComponent({__name:"booking-data",setup(z){const{params:h}=I.useModuleRoute(),{hasPermission:D}=I.useModulePermissions(),{confirm:w}=I.useConfirmation(),{config:V}=I.useModule(),k=I.useFirebaseIntegration(V.project),o=I.useModuleApi(),u=[{id:"firstName",fieldName:"First Name",fieldType:"text",required:!0,visible:!0,isNativeField:!0},{id:"lastName",fieldName:"Last Name",fieldType:"text",required:!0,visible:!0,isNativeField:!0},{id:"phone",fieldName:"Phone No",fieldType:"tel",required:!0,visible:!0,isNativeField:!0},{id:"email",fieldName:"Email",fieldType:"email",required:!0,visible:!0,isNativeField:!0},{id:"birthDate",fieldName:"Birth date",fieldType:"date",required:!0,visible:!0,isNativeField:!0}],s=e.reactive({customerInformationFields:[...u],metadataSchema:[]}),d=e.ref(!1),T=e.ref(!0),b=e.ref(null),_=e.ref(null),$=e.computed(()=>{if(s.customerInformationFields.length!==u.length)return!0;const n=m=>JSON.stringify({...m},Object.keys(m).sort()),l=new Set(s.customerInformationFields.map(n));return u.some(m=>!l.has(n(m)))}),U=()=>{s.customerInformationFields=[...u]},P=n=>{const{isNativeField:l,options:m,...c}=n;c.fieldType!=="radio"&&c.fieldType!=="select"?delete c.options:c.options=m;let p=c.id;if(!p||s.customerInformationFields.some(r=>r.id===p))for(p=Math.random().toString(36).substr(2,9);s.customerInformationFields.some(r=>r.id===p);)p=Math.random().toString(36).substr(2,9);s.customerInformationFields.push({...c,id:p})},A=(n,l)=>{const{isNativeField:m,options:c,...p}=l;m&&(p.isNativeField=!0),(p.fieldType==="radio"||p.fieldType==="select")&&(p.options=c);const r=s.customerInformationFields.findIndex(x=>x.id===n);r!==-1&&(s.customerInformationFields[r]={...p})},C=async n=>{s.customerInformationFields=s.customerInformationFields.filter(l=>l.id!==n)},E=n=>{let l=Math.random().toString(36).substr(2,9);for(;s.metadataSchema.find(m=>m.id===l);)l=Math.random().toString(36).substr(2,9);s.metadataSchema.push({...n,id:l})},f=n=>{const l=s.metadataSchema.findIndex(m=>m.id===n.id);l!==-1&&(s.metadataSchema[l]={...n})},F=n=>{s.metadataSchema=s.metadataSchema.filter(l=>l.id!==n)},i=(n,l)=>{const m=s.metadataSchema.find(c=>c.id===n);m&&(m.includeInPdf=l)},t=e.computed(()=>[...s.metadataSchema].sort((n,l)=>(n.order||0)-(l.order||0))),L=n=>{switch(n){case"highlight":return"Highlight";case"badge":return"Badge";case"field":return"Field";case"hidden":return"Hidden";default:return n}},M=n=>n==="order"?"Order":"Reservation",y=n=>Object.keys(n.action?.flow||{}).length>0,v=async()=>{d.value=!0;try{const n=h.value.id;if(!n)throw new Error("Missing agenda ID");await Promise.all([k.update(V.agendaCollection,n,{customerInformationFields:s.customerInformationFields??[]}),o.patch(`/agendas/${n}/metadata-schema`,{body:{metadataSchema:s.metadataSchema??[]}})])}catch(n){console.error("Error saving changes:",n)}finally{d.value=!1}};return(async()=>{try{const n=await k.get(V.agendaCollection,h.value.id);n&&(s.customerInformationFields=n.customerInformationFields||[...u])}catch(n){console.error("Error loading agenda data:",n)}try{const n=await o.get(`/agendas/${h.value.id}/metadata-schema`);s.metadataSchema=n?.metadataSchema||[]}catch(n){console.error("Error loading metadata schema:",n)}finally{T.value=!1}})(),(n,l)=>{const m=e.resolveComponent("Label"),c=e.resolveComponent("Button"),p=e.resolveComponent("Switch");return e.openBlock(),e.createBlock(G._sfc_main,null,{default:e.withCtx(()=>[e.unref(D)("manage-booking-data")?(e.openBlock(),e.createElementBlock("div",ke,[l[15]||(l[15]=e.createElementVNode("h1",{class:"text-lg font-medium mb-2"},"Booking Data",-1)),l[16]||(l[16]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mb-8"},"Customer form fields & order metadata",-1)),T.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Ce,[e.createElementVNode("div",null,[e.createVNode(m,{class:"text-base font-medium"},{default:e.withCtx(()=>[...l[2]||(l[2]=[e.createTextVNode(" Customer Information ",-1)])]),_:1}),l[5]||(l[5]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mb-2"}," Fields the customer fills in when booking. ",-1)),e.createElementVNode("div",ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.customerInformationFields,r=>(e.openBlock(),e.createElementBlock("div",{key:r.id,class:"flex items-center justify-between hover:bg-input/50 px-2 rounded"},[e.createElementVNode("div",null,[e.createElementVNode("p",be,e.toDisplayString(r.fieldName),1)]),e.createElementVNode("div",null,[e.createVNode(c,{variant:"ghost",size:"icon",onClick:x=>b.value.openDialog(r),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Pencil),{class:"size-4"})]),_:1},8,["onClick"]),e.createVNode(c,{variant:"ghost",size:"icon",onClick:x=>r.visible=!r.visible,class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[r.visible?(e.openBlock(),e.createBlock(e.unref(N.Eye),{key:0,class:"size-4"})):(e.openBlock(),e.createBlock(e.unref(N.EyeOff),{key:1,class:"size-4"}))]),_:2},1032,["onClick"]),e.createVNode(c,{variant:"ghost",size:"icon",disabled:r.isNativeField,onClick:x=>s.customerInformationFields=s.customerInformationFields.filter(S=>S.id!==r.id),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Trash2),{class:"size-4"})]),_:1},8,["disabled","onClick"])])]))),128)),e.createElementVNode("div",we,[e.createVNode(c,{size:"sm",onClick:l[0]||(l[0]=r=>b.value.openDialog())},{default:e.withCtx(()=>[e.createVNode(e.unref(N.PlusCircle),{class:"size-4"}),l[3]||(l[3]=e.createTextVNode(" Add New Field ",-1))]),_:1}),e.unref($)?(e.openBlock(),e.createBlock(c,{key:0,size:"sm",variant:"outline",onClick:U},{default:e.withCtx(()=>[...l[4]||(l[4]=[e.createTextVNode(" Reset to Default ",-1)])]),_:1})):e.createCommentVNode("",!0)])]),e.createVNode(ae,{ref_key:"customerInfoFieldDialog",ref:b,keysInUse:s.customerInformationFields.map(r=>r.id),onAddField:P,onUpdateField:A,onRemoveField:C},null,8,["keysInUse"])]),l[14]||(l[14]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",null,[e.createVNode(m,{class:"text-base font-medium"},{default:e.withCtx(()=>[...l[6]||(l[6]=[e.createTextVNode(" Order Metadata ",-1)])]),_:1}),l[13]||(l[13]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mb-2"}," Configure how externally-attached data is displayed on orders. Your external systems (Cloud Functions, webhooks, API) write metadata to orders — this controls how it appears in the dashboard. ",-1)),e.createElementVNode("div",he,[e.unref(t).length===0?(e.openBlock(),e.createElementBlock("div",_e," No metadata fields configured yet. ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(t),r=>(e.openBlock(),e.createElementBlock("div",{key:r.id,class:"flex items-center justify-between hover:bg-input/50 px-2 py-1 rounded"},[e.createElementVNode("div",Ee,[e.createElementVNode("div",Fe,[e.createElementVNode("p",Be,e.toDisplayString(r.label),1),e.createElementVNode("p",Ie,[e.createElementVNode("code",Te,e.toDisplayString(r.key),1),l[9]||(l[9]=e.createElementVNode("span",{class:"mx-1"},"·",-1)),e.createElementVNode("span",null,e.toDisplayString(L(r.display)),1),l[10]||(l[10]=e.createElementVNode("span",{class:"mx-1"},"·",-1)),e.createElementVNode("span",null,e.toDisplayString(M(r.scope)),1),y(r)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[l[8]||(l[8]=e.createElementVNode("span",{class:"mx-1"},"·",-1)),e.createElementVNode("span",Se,[e.createVNode(e.unref(N.Workflow),{class:"size-3"}),l[7]||(l[7]=e.createTextVNode(" Action ",-1))])],64)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",De,[e.createElementVNode("div",$e,[l[11]||(l[11]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"PDF",-1)),e.createVNode(p,{"model-value":r.includeInPdf===!0,"aria-label":`Include ${r.label} in PDF`,"onUpdate:modelValue":x=>i(r.id,!!x)},null,8,["model-value","aria-label","onUpdate:modelValue"])]),e.createVNode(c,{variant:"ghost",size:"icon",onClick:x=>_.value.openDialog(r),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Pencil),{class:"size-4"})]),_:1},8,["onClick"]),e.createVNode(c,{variant:"ghost",size:"icon",onClick:x=>F(r.id),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Trash2),{class:"size-4"})]),_:1},8,["onClick"])])]))),128)),e.createVNode(c,{size:"sm",class:"mt-4",onClick:l[1]||(l[1]=r=>_.value.openDialog())},{default:e.withCtx(()=>[e.createVNode(e.unref(N.PlusCircle),{class:"size-4"}),l[12]||(l[12]=e.createTextVNode(" Add Metadata Field ",-1))]),_:1})]),e.createVNode(ge,{ref_key:"metadataSchemaDialog",ref:_,onAddField:E,onUpdateField:f,onRemoveField:F},null,512)]),e.createElementVNode("div",Ue,[e.createVNode(c,{onClick:v,disabled:d.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value?"Saving...":"Save Changes"),1)]),_:1},8,["disabled"])])]))])):(e.openBlock(),e.createElementBlock("div",Pe,[...l[17]||(l[17]=[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 booking data.",-1)])]))]),_:1})}}});exports.default=Ae;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),G=require("./EditLayout.vue_vue_type_script_setup_true_lang-D1b9_iiN.js"),N=require("lucide-vue-next"),I=require("@oneclick.dev/cms-kit"),W={class:"space-y-6 py-4"},Y={class:"grid grid-cols-2 gap-6"},Z={class:"relative"},J={key:0,class:"text-xs text-red-600 mt-1"},Q={key:0},X={key:1},ee={class:"flex items-center gap-3"},te={key:2,class:"grid gap-2"},oe={class:"w-full flex justify-between items-center"},le={class:"flex items-center gap-2 ml-auto"},ae=e.defineComponent({__name:"CustomerInformationFieldEditorDialog",props:{keysInUse:{type:Array,default:()=>[]}},emits:["add-field","update-field","remove-field"],setup(z,{expose:h,emit:D}){const w=D,V=z,{confirm:k}=I.useConfirmation(),o=e.ref(!1),u=e.ref("add"),s=e.ref(null),d=e.reactive({id:"",fieldName:"",fieldDescription:"",fieldType:"text",required:!1,isNativeField:!1,visible:!0,options:[]}),T=e.computed(()=>{const i=new Set(V.keysInUse);return u.value==="edit"&&s.value&&i.delete(s.value),i}),b=[{value:"text",label:"Text Box"},{value:"checkbox",label:"Checkbox"},{value:"radio",label:"Radio Button"},{value:"select",label:"Select"},{value:"date",label:"Date Picker"}],_=i=>{u.value=i?"edit":"add",C.value=[],d.id=i?.id||"",s.value=i?.id||null,d.fieldName=i?.fieldName||"",d.fieldDescription=i?.fieldDescription||"",d.fieldType=i?.fieldType||"text",d.required=i?.required||!1,d.isNativeField=i?.isNativeField||!1,d.options=i?.options||[],d.visible=i?.visible!==void 0?i.visible:!0,f.value=u.value==="edit",o.value=!0},$=()=>{o.value=!1,C.value=[]},U=()=>{E()&&(w("add-field",{...d}),o.value=!1)},P=()=>{E()&&(w("update-field",s.value,{...d}),o.value=!1)},A=()=>{w("remove-field",s.value),o.value=!1},C=e.ref([]),E=()=>(C.value=[],d.fieldName=d.fieldName.trim(),d.fieldName?!0:(C.value.push("Field name is required."),!1)),f=e.ref(!1),F=async()=>{await k("Previous orders using this field won't update to reflect changes. Are you sure you want to change the key?")&&(f.value=!1)};return h({openDialog:_}),(i,t)=>{const L=e.resolveComponent("DialogTitle"),M=e.resolveComponent("DialogHeader"),y=e.resolveComponent("Label"),v=e.resolveComponent("Input"),g=e.resolveComponent("Button"),n=e.resolveComponent("SelectValue"),l=e.resolveComponent("SelectTrigger"),m=e.resolveComponent("SelectItem"),c=e.resolveComponent("SelectContent"),p=e.resolveComponent("Select"),r=e.resolveComponent("TagsInputItemText"),x=e.resolveComponent("TagsInputItemDelete"),S=e.resolveComponent("TagsInputItem"),O=e.resolveComponent("TagsInputInput"),B=e.resolveComponent("TagsInput"),R=e.resolveComponent("Checkbox"),q=e.resolveComponent("DialogFooter"),j=e.resolveComponent("DialogScrollContent"),H=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(H,{open:o.value,"onUpdate:open":t[6]||(t[6]=a=>o.value=a)},{default:e.withCtx(()=>[e.createVNode(j,{class:"sm:max-w-2xl"},{default:e.withCtx(()=>[e.createVNode(M,null,{default:e.withCtx(()=>[e.createVNode(L,null,{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Customer Information",-1)])]),_:1})]),_:1}),e.createElementVNode("div",W,[e.createElementVNode("div",Y,[e.createElementVNode("div",null,[e.createVNode(y,{class:"text-bsmase font-normal mb-1.5",for:"customer-info-field-dialog-fieldname"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("Field Name",-1)])]),_:1}),e.createVNode(v,{modelValue:d.fieldName,"onUpdate:modelValue":t[0]||(t[0]=a=>d.fieldName=a),id:"customer-info-field-dialog-fieldname"},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(y,{class:"text-bsmase font-normal mb-1.5",for:"customer-info-field-dialog-fieldname"},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode("Key",-1)])]),_:1}),e.createElementVNode("div",Z,[e.createVNode(v,{modelValue:d.id,"onUpdate:modelValue":t[1]||(t[1]=a=>d.id=a),id:"customer-info-field-dialog-fieldname",disabled:f.value},null,8,["modelValue","disabled"]),f.value?(e.openBlock(),e.createBlock(g,{key:0,variant:"ghost",size:"icon",class:"absolute group top-0 right-0",onClick:F},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Lock),{class:"size-4 block group-hover:hidden"}),e.createVNode(e.unref(N.LockOpen),{class:"size-4 hidden group-hover:block"})]),_:1})):e.createCommentVNode("",!0)]),e.unref(T).has(d.id)?(e.openBlock(),e.createElementBlock("p",J," Key already in use. ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",null,[e.createVNode(y,{class:"text-sm font-normal mb-1.5",for:"customer-info-field-dialog-field-description"},{default:e.withCtx(()=>[...t[10]||(t[10]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(v,{modelValue:d.fieldDescription,"onUpdate:modelValue":t[2]||(t[2]=a=>d.fieldDescription=a),id:"customer-info-field-dialog-field-description"},null,8,["modelValue"])]),d.isNativeField?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Q,[e.createVNode(y,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode("Field Type",-1)])]),_:1}),e.createVNode(p,{modelValue:d.fieldType,"onUpdate:modelValue":t[3]||(t[3]=a=>d.fieldType=a)},{default:e.withCtx(()=>[e.createVNode(l,null,{default:e.withCtx(()=>[e.createVNode(n,{placeholder:"Select field type"})]),_:1}),e.createVNode(c,null,{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(b,a=>e.createVNode(m,{key:a.value,value:a.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.label),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])])),d.fieldType==="select"||d.fieldType==="radio"?(e.openBlock(),e.createElementBlock("div",X,[e.createVNode(y,{class:"text-sm font-normal mb-1.5",for:"customer-info-field-dialog-field-new-option"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Options",-1)])]),_:1}),e.createVNode(B,{modelValue:d.options,"onUpdate:modelValue":t[4]||(t[4]=a=>d.options=a)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.options,a=>(e.openBlock(),e.createBlock(S,{key:a,value:a},{default:e.withCtx(()=>[e.createVNode(r),e.createVNode(x)]),_:1},8,["value"]))),128)),e.createVNode(O,{placeholder:"New option...",id:"customer-info-field-dialog-field-new-option"})]),_:1},8,["modelValue"])])):e.createCommentVNode("",!0),e.createElementVNode("div",ee,[e.createVNode(R,{id:"customer-info-field-dialog-field-required",modelValue:d.required,"onUpdate:modelValue":t[5]||(t[5]=a=>d.required=a)},null,8,["modelValue"]),e.createVNode(y,{for:"customer-info-field-dialog-field-required",class:"text-base font-normal cursor-pointer"},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode(" Is this field mandatory? ",-1)])]),_:1})]),C.value.length>0?(e.openBlock(),e.createElementBlock("p",te,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,(a,K)=>(e.openBlock(),e.createElementBlock("span",{key:K,class:"text-sm text-red-600 block"},e.toDisplayString(a),1))),128))])):e.createCommentVNode("",!0)]),e.createVNode(q,{class:"gap-2"},{default:e.withCtx(()=>[e.createElementVNode("div",oe,[u.value==="edit"&&!d.isNativeField?(e.openBlock(),e.createBlock(g,{key:0,variant:"destructive",onClick:A},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode(" Remove Field ",-1)])]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("div",le,[e.createVNode(g,{variant:"outline",onClick:$},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),u.value==="add"?(e.openBlock(),e.createBlock(g,{key:0,onClick:U},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode(" Add Field ",-1)])]),_:1})):(e.openBlock(),e.createBlock(g,{key:1,onClick:P},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode(" Update Field ",-1)])]),_:1}))])])]),_:1})]),_:1})]),_:1},8,["open"])}}}),ne={class:"space-y-6 py-4"},de={class:"text-xs text-muted-foreground"},ie={class:"flex items-center justify-between rounded-md border p-3"},re={class:"min-w-0"},se={class:"rounded-md border p-4 space-y-4"},ce={class:"flex items-center justify-between gap-4"},me={class:"flex items-center gap-3 min-w-0"},ue={class:"size-9 rounded-md bg-primary/10 flex items-center justify-center shrink-0"},pe={class:"min-w-0"},fe={key:0,class:"flex items-center justify-between gap-3 border-t pt-4"},ve={class:"grid grid-cols-2 gap-4"},Ve={key:0,class:"grid gap-2"},Ne={class:"w-full flex justify-between items-center"},xe={class:"flex items-center gap-2 ml-auto"},ge=e.defineComponent({__name:"MetadataSchemaEditorDialog",emits:["add-field","update-field","remove-field"],setup(z,{expose:h,emit:D}){const w=D,V=e.ref(!1),k=e.ref("add"),o=e.reactive({id:"",key:"",label:"",display:"field",scope:"order",includeInPdf:!1,icon:"",color:"",order:0,action:{type:"flow",flow:{}}}),u=e.ref(!1),s=[{value:"highlight",label:"Highlight",description:"Large prominent card — ideal for door codes, PINs"},{value:"badge",label:"Badge",description:"Colored pill in the order header — ideal for membership, VIP status"},{value:"field",label:"Field",description:"Standard label-value row in order details"},{value:"hidden",label:"Hidden",description:"Not shown in the UI — internal system fields"}],d=[{value:"order",label:"Order",description:"Attached to the whole order"},{value:"reservation",label:"Reservation",description:"Attached to each individual reservation"}],T=[{id:"value",name:"value",type:"string",value:"Example metadata value"}],b=e.computed(()=>Object.keys(o.action?.flow||{}).length>0),_=i=>{k.value=i?"edit":"add",f.value=[],o.id=i?.id||"",o.key=i?.key||"",o.label=i?.label||"",o.display=i?.display||"field",o.scope=i?.scope||"order",o.includeInPdf=i?.includeInPdf===!0,o.icon=i?.icon||"",o.color=i?.color||"",o.order=i?.order||0,o.action={type:"flow",flow:i?.action?.flow||{}},u.value=i?.action?.type==="flow"&&Object.keys(i?.action?.flow||{}).length>0,V.value=!0},$=()=>{V.value=!1,f.value=[]},U=()=>{F()&&(w("add-field",E()),V.value=!1)},P=()=>{F()&&(w("update-field",E()),V.value=!1)},A=()=>{w("remove-field",o.id),V.value=!1},C=()=>{o.action.flow={}},E=()=>{const i={id:o.id,key:o.key,label:o.label,display:o.display,scope:o.scope,includeInPdf:o.includeInPdf,icon:o.icon,color:o.color,order:o.order};return u.value&&b.value&&(i.action={type:"flow",flow:o.action.flow||{}}),i},f=e.ref([]),F=()=>(f.value=[],o.key=o.key.trim(),o.label=o.label.trim(),o.key||f.value.push("Metadata key is required."),o.label||f.value.push("Display label is required."),o.key&&!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o.key)&&f.value.push("Key must be alphanumeric (letters, numbers, underscores)."),u.value&&!b.value&&f.value.push("Build a metadata action flow or turn the action off."),f.value.length===0);return h({openDialog:_}),(i,t)=>{const L=e.resolveComponent("DialogTitle"),M=e.resolveComponent("DialogDescription"),y=e.resolveComponent("DialogHeader"),v=e.resolveComponent("Label"),g=e.resolveComponent("Input"),n=e.resolveComponent("RadioGroupItem"),l=e.resolveComponent("RadioGroup"),m=e.resolveComponent("SelectValue"),c=e.resolveComponent("SelectTrigger"),p=e.resolveComponent("SelectItem"),r=e.resolveComponent("SelectContent"),x=e.resolveComponent("Select"),S=e.resolveComponent("Switch"),O=e.resolveComponent("FlowBuilderSelect"),B=e.resolveComponent("Button"),R=e.resolveComponent("LucideIconPicker"),q=e.resolveComponent("DialogFooter"),j=e.resolveComponent("DialogScrollContent"),H=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(H,{open:V.value,"onUpdate:open":t[10]||(t[10]=a=>V.value=a)},{default:e.withCtx(()=>[e.createVNode(j,{class:"sm:max-w-2xl"},{default:e.withCtx(()=>[e.createVNode(y,null,{default:e.withCtx(()=>[e.createVNode(L,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(k.value==="add"?"Add Metadata Field":"Edit Metadata Field"),1)]),_:1}),e.createVNode(M,null,{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode(" Configure how an external metadata field is displayed on orders. ",-1)])]),_:1})]),_:1}),e.createElementVNode("div",ne,[e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5",for:"metadata-field-key"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Metadata Key",-1)])]),_:1}),e.createVNode(g,{modelValue:o.key,"onUpdate:modelValue":t[0]||(t[0]=a=>o.key=a),id:"metadata-field-key",placeholder:"e.g. doorCode, membershipTier",disabled:k.value==="edit"},null,8,["modelValue","disabled"]),t[13]||(t[13]=e.createElementVNode("p",{class:"text-xs text-muted-foreground mt-1"}," The key in the metadata object. Must match what your external system writes. ",-1))]),e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5",for:"metadata-field-label"},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode("Display Label",-1)])]),_:1}),e.createVNode(g,{modelValue:o.label,"onUpdate:modelValue":t[1]||(t[1]=a=>o.label=a),id:"metadata-field-label",placeholder:"e.g. Door Code, Membership"},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("Display Mode",-1)])]),_:1}),e.createVNode(l,{modelValue:o.display,"onUpdate:modelValue":t[2]||(t[2]=a=>o.display=a)},{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(s,a=>e.createElementVNode("div",{key:a.value,class:"flex items-start space-x-3 space-y-0 rounded-md border p-3 mb-2"},[e.createVNode(n,{value:a.value,id:`display-${a.value}`,class:"mt-0.5"},null,8,["value","id"]),e.createElementVNode("div",null,[e.createVNode(v,{for:`display-${a.value}`,class:"font-medium cursor-pointer"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.label),1)]),_:2},1032,["for"]),e.createElementVNode("p",de,e.toDisplayString(a.description),1)])])),64))]),_:1},8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("Scope",-1)])]),_:1}),e.createVNode(x,{modelValue:o.scope,"onUpdate:modelValue":t[3]||(t[3]=a=>o.scope=a)},{default:e.withCtx(()=>[e.createVNode(c,null,{default:e.withCtx(()=>[e.createVNode(m,{placeholder:"Select scope"})]),_:1}),e.createVNode(r,null,{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(d,a=>e.createVNode(p,{key:a.value,value:a.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.label)+" — "+e.toDisplayString(a.description),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])]),e.createElementVNode("div",ie,[e.createElementVNode("div",re,[e.createVNode(v,{for:"metadata-field-include-pdf",class:"font-medium cursor-pointer"},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode("Include in PDF",-1)])]),_:1})]),e.createVNode(S,{id:"metadata-field-include-pdf",modelValue:o.includeInPdf,"onUpdate:modelValue":t[4]||(t[4]=a=>o.includeInPdf=a)},null,8,["modelValue"])]),e.createElementVNode("div",se,[e.createElementVNode("div",ce,[e.createElementVNode("div",me,[e.createElementVNode("div",ue,[e.createVNode(e.unref(N.Workflow),{class:"size-4 text-primary"})]),e.createElementVNode("div",pe,[e.createVNode(v,{for:"metadata-field-action",class:"font-medium cursor-pointer"},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode("Action",-1)])]),_:1}),t[19]||(t[19]=e.createElementVNode("p",{class:"text-xs text-muted-foreground"},"Run a flow from this metadata value.",-1))])]),e.createVNode(S,{id:"metadata-field-action",modelValue:u.value,"onUpdate:modelValue":t[5]||(t[5]=a=>u.value=a)},null,8,["modelValue"])]),u.value?(e.openBlock(),e.createElementBlock("div",fe,[e.createVNode(O,{modelValue:o.action.flow,"onUpdate:modelValue":t[6]||(t[6]=a=>o.action.flow=a),variables:T,"button-variant":"outline"},null,8,["modelValue"]),e.createVNode(B,{variant:"outline",size:"sm",disabled:!b.value,onClick:C},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Trash2),{class:"size-4"}),t[20]||(t[20]=e.createTextVNode(" Remove Flow ",-1))]),_:1},8,["disabled"])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ve,[e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5",for:"metadata-field-icon"},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode("Icon (Optional)",-1)])]),_:1}),e.createVNode(R,{id:"metadata-field-icon",modelValue:o.icon,"onUpdate:modelValue":t[7]||(t[7]=a=>o.icon=a)},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5",for:"metadata-field-color"},{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createTextVNode("Color (Optional)",-1)])]),_:1}),e.createVNode(g,{modelValue:o.color,"onUpdate:modelValue":t[8]||(t[8]=a=>o.color=a),id:"metadata-field-color",placeholder:"e.g. #FFD700"},null,8,["modelValue"])])]),e.createElementVNode("div",null,[e.createVNode(v,{class:"text-sm font-normal mb-1.5",for:"metadata-field-order"},{default:e.withCtx(()=>[...t[23]||(t[23]=[e.createTextVNode("Sort Order (Optional)",-1)])]),_:1}),e.createVNode(g,{modelValue:o.order,"onUpdate:modelValue":t[9]||(t[9]=a=>o.order=a),modelModifiers:{number:!0},id:"metadata-field-order",type:"number",placeholder:"0",class:"max-w-24"},null,8,["modelValue"]),t[24]||(t[24]=e.createElementVNode("p",{class:"text-xs text-muted-foreground mt-1"},"Lower numbers appear first.",-1))]),f.value.length>0?(e.openBlock(),e.createElementBlock("p",Ve,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(a,K)=>(e.openBlock(),e.createElementBlock("span",{key:K,class:"text-sm text-red-600 block"},e.toDisplayString(a),1))),128))])):e.createCommentVNode("",!0)]),e.createVNode(q,{class:"gap-2"},{default:e.withCtx(()=>[e.createElementVNode("div",Ne,[k.value==="edit"?(e.openBlock(),e.createBlock(B,{key:0,variant:"destructive",onClick:A},{default:e.withCtx(()=>[...t[25]||(t[25]=[e.createTextVNode(" Remove Field ",-1)])]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("div",xe,[e.createVNode(B,{variant:"outline",onClick:$},{default:e.withCtx(()=>[...t[26]||(t[26]=[e.createTextVNode("Cancel",-1)])]),_:1}),k.value==="add"?(e.openBlock(),e.createBlock(B,{key:0,onClick:U},{default:e.withCtx(()=>[...t[27]||(t[27]=[e.createTextVNode("Add Field",-1)])]),_:1})):(e.openBlock(),e.createBlock(B,{key:1,onClick:P},{default:e.withCtx(()=>[...t[28]||(t[28]=[e.createTextVNode("Update Field",-1)])]),_:1}))])])]),_:1})]),_:1})]),_:1},8,["open"])}}}),ke={key:0},Ce={key:0,class:"max-w-2xl"},ye={class:"border rounded-md p-4 mb-4"},be={class:"font-medium text-sm"},we={class:"flex items-center justify-between gap-4 mt-4"},he={class:"border rounded-md p-4 mb-4"},_e={key:0,class:"text-sm text-muted-foreground py-4 text-center"},Ee={class:"flex items-center gap-3 min-w-0"},Fe={class:"min-w-0"},Be={class:"font-medium text-sm"},Ie={class:"text-xs text-muted-foreground"},Te={class:"bg-muted px-1 py-0.5 rounded text-xs"},Se={class:"inline-flex items-center gap-1"},De={class:"flex items-center gap-3 shrink-0"},$e={class:"flex items-center gap-2"},Ue={class:"flex justify-start mt-8"},Pe={key:1},Ae=e.defineComponent({__name:"booking-data",setup(z){const{params:h}=I.useModuleRoute(),{hasPermission:D}=I.useModulePermissions(),{confirm:w}=I.useConfirmation(),{config:V}=I.useModule(),k=I.useFirebaseIntegration(V.project),o=I.useModuleApi(),u=[{id:"firstName",fieldName:"First Name",fieldType:"text",required:!0,visible:!0,isNativeField:!0},{id:"lastName",fieldName:"Last Name",fieldType:"text",required:!0,visible:!0,isNativeField:!0},{id:"phone",fieldName:"Phone No",fieldType:"tel",required:!0,visible:!0,isNativeField:!0},{id:"email",fieldName:"Email",fieldType:"email",required:!0,visible:!0,isNativeField:!0},{id:"birthDate",fieldName:"Birth date",fieldType:"date",required:!0,visible:!0,isNativeField:!0}],s=e.reactive({customerInformationFields:[...u],metadataSchema:[]}),d=e.ref(!1),T=e.ref(!0),b=e.ref(null),_=e.ref(null),$=e.computed(()=>{if(s.customerInformationFields.length!==u.length)return!0;const n=m=>JSON.stringify({...m},Object.keys(m).sort()),l=new Set(s.customerInformationFields.map(n));return u.some(m=>!l.has(n(m)))}),U=()=>{s.customerInformationFields=[...u]},P=n=>{const{isNativeField:l,options:m,...c}=n;c.fieldType!=="radio"&&c.fieldType!=="select"?delete c.options:c.options=m;let p=c.id;if(!p||s.customerInformationFields.some(r=>r.id===p))for(p=Math.random().toString(36).substr(2,9);s.customerInformationFields.some(r=>r.id===p);)p=Math.random().toString(36).substr(2,9);s.customerInformationFields.push({...c,id:p})},A=(n,l)=>{const{isNativeField:m,options:c,...p}=l;m&&(p.isNativeField=!0),(p.fieldType==="radio"||p.fieldType==="select")&&(p.options=c);const r=s.customerInformationFields.findIndex(x=>x.id===n);r!==-1&&(s.customerInformationFields[r]={...p})},C=async n=>{s.customerInformationFields=s.customerInformationFields.filter(l=>l.id!==n)},E=n=>{let l=Math.random().toString(36).substr(2,9);for(;s.metadataSchema.find(m=>m.id===l);)l=Math.random().toString(36).substr(2,9);s.metadataSchema.push({...n,id:l})},f=n=>{const l=s.metadataSchema.findIndex(m=>m.id===n.id);l!==-1&&(s.metadataSchema[l]={...n})},F=n=>{s.metadataSchema=s.metadataSchema.filter(l=>l.id!==n)},i=(n,l)=>{const m=s.metadataSchema.find(c=>c.id===n);m&&(m.includeInPdf=l)},t=e.computed(()=>[...s.metadataSchema].sort((n,l)=>(n.order||0)-(l.order||0))),L=n=>{switch(n){case"highlight":return"Highlight";case"badge":return"Badge";case"field":return"Field";case"hidden":return"Hidden";default:return n}},M=n=>n==="order"?"Order":"Reservation",y=n=>Object.keys(n.action?.flow||{}).length>0,v=async()=>{d.value=!0;try{const n=h.value.id;if(!n)throw new Error("Missing agenda ID");await Promise.all([k.update(V.agendaCollection,n,{customerInformationFields:s.customerInformationFields??[]}),o.patch(`/agendas/${n}/metadata-schema`,{body:{metadataSchema:s.metadataSchema??[]}})])}catch(n){console.error("Error saving changes:",n)}finally{d.value=!1}};return(async()=>{try{const n=await k.get(V.agendaCollection,h.value.id);n&&(s.customerInformationFields=n.customerInformationFields||[...u])}catch(n){console.error("Error loading agenda data:",n)}try{const n=await o.get(`/agendas/${h.value.id}/metadata-schema`);s.metadataSchema=n?.metadataSchema||[]}catch(n){console.error("Error loading metadata schema:",n)}finally{T.value=!1}})(),(n,l)=>{const m=e.resolveComponent("Label"),c=e.resolveComponent("Button"),p=e.resolveComponent("Switch");return e.openBlock(),e.createBlock(G._sfc_main,null,{default:e.withCtx(()=>[e.unref(D)("manage-booking-data")?(e.openBlock(),e.createElementBlock("div",ke,[l[15]||(l[15]=e.createElementVNode("h1",{class:"text-lg font-medium mb-2"},"Booking Data",-1)),l[16]||(l[16]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mb-8"},"Customer form fields & order metadata",-1)),T.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Ce,[e.createElementVNode("div",null,[e.createVNode(m,{class:"text-base font-medium"},{default:e.withCtx(()=>[...l[2]||(l[2]=[e.createTextVNode(" Customer Information ",-1)])]),_:1}),l[5]||(l[5]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mb-2"}," Fields the customer fills in when booking. ",-1)),e.createElementVNode("div",ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.customerInformationFields,r=>(e.openBlock(),e.createElementBlock("div",{key:r.id,class:"flex items-center justify-between hover:bg-input/50 px-2 rounded"},[e.createElementVNode("div",null,[e.createElementVNode("p",be,e.toDisplayString(r.fieldName),1)]),e.createElementVNode("div",null,[e.createVNode(c,{variant:"ghost",size:"icon",onClick:x=>b.value.openDialog(r),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Pencil),{class:"size-4"})]),_:1},8,["onClick"]),e.createVNode(c,{variant:"ghost",size:"icon",onClick:x=>r.visible=!r.visible,class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[r.visible?(e.openBlock(),e.createBlock(e.unref(N.Eye),{key:0,class:"size-4"})):(e.openBlock(),e.createBlock(e.unref(N.EyeOff),{key:1,class:"size-4"}))]),_:2},1032,["onClick"]),e.createVNode(c,{variant:"ghost",size:"icon",disabled:r.isNativeField,onClick:x=>s.customerInformationFields=s.customerInformationFields.filter(S=>S.id!==r.id),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Trash2),{class:"size-4"})]),_:1},8,["disabled","onClick"])])]))),128)),e.createElementVNode("div",we,[e.createVNode(c,{size:"sm",onClick:l[0]||(l[0]=r=>b.value.openDialog())},{default:e.withCtx(()=>[e.createVNode(e.unref(N.PlusCircle),{class:"size-4"}),l[3]||(l[3]=e.createTextVNode(" Add New Field ",-1))]),_:1}),e.unref($)?(e.openBlock(),e.createBlock(c,{key:0,size:"sm",variant:"outline",onClick:U},{default:e.withCtx(()=>[...l[4]||(l[4]=[e.createTextVNode(" Reset to Default ",-1)])]),_:1})):e.createCommentVNode("",!0)])]),e.createVNode(ae,{ref_key:"customerInfoFieldDialog",ref:b,keysInUse:s.customerInformationFields.map(r=>r.id),onAddField:P,onUpdateField:A,onRemoveField:C},null,8,["keysInUse"])]),l[14]||(l[14]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",null,[e.createVNode(m,{class:"text-base font-medium"},{default:e.withCtx(()=>[...l[6]||(l[6]=[e.createTextVNode(" Order Metadata ",-1)])]),_:1}),l[13]||(l[13]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mb-2"}," Configure how externally-attached data is displayed on orders. Your external systems (Cloud Functions, webhooks, API) write metadata to orders — this controls how it appears in the dashboard. ",-1)),e.createElementVNode("div",he,[e.unref(t).length===0?(e.openBlock(),e.createElementBlock("div",_e," No metadata fields configured yet. ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(t),r=>(e.openBlock(),e.createElementBlock("div",{key:r.id,class:"flex items-center justify-between hover:bg-input/50 px-2 py-1 rounded"},[e.createElementVNode("div",Ee,[e.createElementVNode("div",Fe,[e.createElementVNode("p",Be,e.toDisplayString(r.label),1),e.createElementVNode("p",Ie,[e.createElementVNode("code",Te,e.toDisplayString(r.key),1),l[9]||(l[9]=e.createElementVNode("span",{class:"mx-1"},"·",-1)),e.createElementVNode("span",null,e.toDisplayString(L(r.display)),1),l[10]||(l[10]=e.createElementVNode("span",{class:"mx-1"},"·",-1)),e.createElementVNode("span",null,e.toDisplayString(M(r.scope)),1),y(r)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[l[8]||(l[8]=e.createElementVNode("span",{class:"mx-1"},"·",-1)),e.createElementVNode("span",Se,[e.createVNode(e.unref(N.Workflow),{class:"size-3"}),l[7]||(l[7]=e.createTextVNode(" Action ",-1))])],64)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",De,[e.createElementVNode("div",$e,[l[11]||(l[11]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"PDF",-1)),e.createVNode(p,{"model-value":r.includeInPdf===!0,"aria-label":`Include ${r.label} in PDF`,"onUpdate:modelValue":x=>i(r.id,!!x)},null,8,["model-value","aria-label","onUpdate:modelValue"])]),e.createVNode(c,{variant:"ghost",size:"icon",onClick:x=>_.value.openDialog(r),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Pencil),{class:"size-4"})]),_:1},8,["onClick"]),e.createVNode(c,{variant:"ghost",size:"icon",onClick:x=>F(r.id),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(N.Trash2),{class:"size-4"})]),_:1},8,["onClick"])])]))),128)),e.createVNode(c,{size:"sm",class:"mt-4",onClick:l[1]||(l[1]=r=>_.value.openDialog())},{default:e.withCtx(()=>[e.createVNode(e.unref(N.PlusCircle),{class:"size-4"}),l[12]||(l[12]=e.createTextVNode(" Add Metadata Field ",-1))]),_:1})]),e.createVNode(ge,{ref_key:"metadataSchemaDialog",ref:_,onAddField:E,onUpdateField:f,onRemoveField:F},null,512)]),e.createElementVNode("div",Ue,[e.createVNode(c,{onClick:v,disabled:d.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value?"Saving...":"Save Changes"),1)]),_:1},8,["disabled"])])]))])):(e.openBlock(),e.createElementBlock("div",Pe,[...l[17]||(l[17]=[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 booking data.",-1)])]))]),_:1})}}});exports.default=Ae;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent as ie, ref as C, reactive as se, computed as W, resolveComponent as d, openBlock as m, createBlock as I, withCtx as n, createVNode as t, createTextVNode as u, createElementVNode as l, unref as x, createCommentVNode as S, createElementBlock as g, Fragment as A, renderList as M, toDisplayString as w } from "vue";
|
|
2
|
-
import { _ as ce } from "./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { _ as ce } from "./EditLayout.vue_vue_type_script_setup_true_lang-4_t0PPqM.mjs";
|
|
3
3
|
import { Lock as fe, LockOpen as pe, Workflow as ue, Trash2 as ne, Pencil as de, Eye as ve, EyeOff as ge, PlusCircle as re } from "lucide-vue-next";
|
|
4
4
|
import { useConfirmation as me, useModuleRoute as ye, useModulePermissions as be, useModule as _e, useFirebaseIntegration as xe, useModuleApi as ke } from "@oneclick.dev/cms-kit";
|
|
5
5
|
const Fe = { class: "space-y-6 py-4" }, Ie = { class: "grid grid-cols-2 gap-6" }, we = { class: "relative" }, he = {
|