@oneclick.dev/cms-core-modules 0.0.120 → 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.
Files changed (52) hide show
  1. package/dist/{ContentEditor-YFnqVZrX.js → ContentEditor-Dl41qaCh.js} +38 -38
  2. package/dist/{ContentEditor-W4YrQyBW.mjs → ContentEditor-u3k-uTny.mjs} +3260 -3229
  3. package/dist/{Detail-C8wQiDcv.js → Detail-BCUUNWvp.js} +1 -1
  4. package/dist/{Detail-CtItxMX4.mjs → Detail-B_scnidb.mjs} +1 -1
  5. package/dist/Detail-Cn9Bk0u0.mjs +852 -0
  6. package/dist/Detail-DGg_xXZc.js +1 -0
  7. package/dist/Detail-Dk8E6_uF.mjs +3731 -0
  8. package/dist/Detail-Sc2qZdxj.js +1 -0
  9. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-4_t0PPqM.mjs +78 -0
  10. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-D1b9_iiN.js +1 -0
  11. package/dist/Overview-CVgViW3c.mjs +852 -0
  12. package/dist/Overview-DEF-z7Yb.js +1 -0
  13. package/dist/{agenda-BusN9-XG.js → agenda-B54F8cEr.js} +1 -1
  14. package/dist/{agenda-CJXKaIo0.mjs → agenda-BCKDYOeF.mjs} +1 -1
  15. package/dist/{availability-UUKdgidr.js → availability-C4v46rha.js} +1 -1
  16. package/dist/{availability-BP6GACqo.mjs → availability-DVT1Mdxq.mjs} +1 -1
  17. package/dist/{booking-data-BHfLyOlu.js → booking-data-A5JrLY4j.js} +1 -1
  18. package/dist/{booking-data-WCBcpOOo.mjs → booking-data-lZvSYna2.mjs} +1 -1
  19. package/dist/{exceptions-B8r2psu2.mjs → exceptions-DJHfvADv.mjs} +1 -1
  20. package/dist/{exceptions-BazAiy2s.js → exceptions-DKc8fO1S.js} +1 -1
  21. package/dist/{index-BiKWKrEs.js → index-Bk3yLv_G.js} +1 -1
  22. package/dist/{index-Dnn2SCSl.js → index-CZau1wR8.js} +1 -1
  23. package/dist/{index-DRqJOqUR.mjs → index-DE8rdSjd.mjs} +0 -22
  24. package/dist/{index-DJxex3Dt.mjs → index-DU3Ib10Z.mjs} +1 -1
  25. package/dist/index.cjs.js +1 -1
  26. package/dist/index.mjs +34 -32
  27. package/dist/{orders-CAAuDhkQ.js → orders-BMosTk6r.js} +1 -1
  28. package/dist/{orders-B8C6u4iF.mjs → orders-CElKNc1v.mjs} +1 -1
  29. package/dist/{payment-BOOJ1O6M.mjs → payment-DSQ_2FIT.mjs} +1 -1
  30. package/dist/{payment-IxA9qiCV.js → payment-DlgYuea2.js} +1 -1
  31. package/dist/{refunds-CqGKm1NG.js → refunds-Cvw9N--u.js} +1 -1
  32. package/dist/{refunds-CI0qpJC0.mjs → refunds-xR936Ted.mjs} +1 -1
  33. package/dist/reports-BQT_GZzU.js +158 -0
  34. package/dist/reports-DksZCTOw.mjs +837 -0
  35. package/dist/{resources-dIZDh4Sz.mjs → resources-C-5BU9Ux.mjs} +1 -1
  36. package/dist/{resources-B75nXreU.js → resources-D04yKKVN.js} +1 -1
  37. package/dist/src/productCollections/components/detail/Subcollections.vue.d.ts +2 -0
  38. package/dist/src/productCollections/types.d.ts +1 -4
  39. package/dist/src/products/components/detail/variants/VariantList.vue.d.ts +48 -6
  40. package/dist/src/products/components/detail/variants/dialogs/VariantDialog.vue.d.ts +4 -0
  41. package/dist/{vee-validate-zod-CcOwoF6y.mjs → vee-validate-zod-SjDT8X35.mjs} +92 -90
  42. package/dist/{vee-validate-zod-ByykgYKJ.js → vee-validate-zod-VCmLnrtQ.js} +1 -1
  43. package/package.json +2 -2
  44. package/dist/Detail-C1Blq61w.mjs +0 -585
  45. package/dist/Detail-CPqug27l.js +0 -1
  46. package/dist/Detail-CjuhjPby.js +0 -1
  47. package/dist/Detail-Dnpnmy4-.mjs +0 -3477
  48. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-BXVf9gZW.mjs +0 -77
  49. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-CFFZ6r8i.js +0 -1
  50. package/dist/Overview-BWLxUksJ.mjs +0 -860
  51. package/dist/Overview-DAxCu9XC.js +0 -1
  52. /package/dist/src/{productCollections/components/detail/SEO.vue.d.ts → appointments/pages/edit/reports.vue.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),y=require("lucide-vue-next"),k=require("@oneclick.dev/cms-kit"),W=require("./index-CxETuRsG.js"),X=require("./utils-Yd6F5mea.js"),h=require("./index-ijdf0d9-.js"),J={class:"grid @md:grid-cols-2 @2xl:grid-cols-3 @3xl:grid-cols-4 @4xl:grid-cols-5 @5xl:grid-cols-6 gap-6"},Y=["onClick","onContextmenu"],Z=["src"],ee={class:"font-semibold"},te={class:"text-sm text-muted-foreground flex items-center gap-2"},oe={class:"flex items-center gap-2"},ne={key:0},le=e.defineComponent({__name:"GridView",props:{products:{type:Array,required:!0}},setup(S){const n=e.inject("selection"),{navigateTo:b}=k.useModuleRoute(),{hasPermission:g}=k.useModulePermissions(),a=(l,o)=>{const i=o.ctrlKey||o.metaKey;if(!o.shiftKey)if(i||n.value.length>0){const C=n.value.indexOf(l.id);C>-1?n.value.splice(C,1):n.value.push(l.id)}else n.value=[],b(l.id)},f=l=>{l.target.closest(".GRID_ITEM")||(n.value=[])},p=(l,o)=>{o.ctrlKey||o.metaKey?n.value.includes(l.id)?n.value.splice(n.value.indexOf(l.id),1):n.value.push(l.id):n.value.includes(l.id)||(n.value=[l.id])};return(l,o)=>(e.openBlock(),e.createElementBlock("div",{class:"@container mb-4 flex-1 select-none",onClick:o[0]||(o[0]=i=>n.value=[]),onContextmenu:f},[e.createElementVNode("div",J,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.products,i=>(e.openBlock(),e.createElementBlock("div",{key:i.id,onClick:e.withModifiers(v=>a(i,v),["stop"]),onContextmenu:v=>p(i,v),class:"GRID_ITEM cursor-pointer"},[e.createElementVNode("div",{class:e.normalizeClass(["aspect-square bg-muted rounded-xl overflow-hidden mb-2 transition-all duration-200",{"outline outline-4 outline-primary/50":e.unref(n).includes(i.id)}])},[i.featuredMedia?(e.openBlock(),e.createElementBlock("img",{key:0,src:i.featuredMedia,class:"w-full h-full object-cover pointer-events-none",draggable:"false"},null,8,Z)):e.createCommentVNode("",!0)],2),e.createElementVNode("div",null,[e.createElementVNode("p",ee,e.toDisplayString(i.title),1),e.createElementVNode("p",te,[e.createElementVNode("span",oe,[i.status==="published"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[o[1]||(o[1]=e.createElementVNode("span",{class:"block shrink-0 size-3 rounded-full bg-green-500"},null,-1)),o[2]||(o[2]=e.createTextVNode(" Published ",-1))],64)):i.status==="draft"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[o[3]||(o[3]=e.createElementVNode("span",{class:"block shrink-0 size-3 rounded-full bg-blue-500"},null,-1)),o[4]||(o[4]=e.createTextVNode(" Draft ",-1))],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[o[5]||(o[5]=e.createElementVNode("span",{class:"block shrink-0 size-3 rounded-full bg-gray-300"},null,-1)),o[6]||(o[6]=e.createTextVNode(" Archived ",-1))],64))]),i.variantsTotal>1?(e.openBlock(),e.createElementBlock("span",ne,"| "+e.toDisplayString(i.variantsTotal)+" variants",1)):e.createCommentVNode("",!0)])])],40,Y))),128))])],32))}}),re={class:"flex items-center gap-2"},se={key:0,class:"bg-green-500 text-green-950 px-2 py-1 rounded-lg text-xs"},ae={key:1,class:"bg-blue-500 text-blue-950 px-2 py-1 rounded-lg text-xs"},ie={key:2,class:"bg-gray-500 text-gray-950 px-2 py-1 rounded-lg text-xs"},ue=e.defineComponent({__name:"ListView",props:{products:{type:Array,required:!0}},setup(S){const n=e.inject("selection"),{navigateTo:b}=k.useModuleRoute(),{hasPermission:g}=k.useModulePermissions(),a=(f,p)=>{f?n.value.push(p):n.value=n.value.filter(l=>l!==p)};return(f,p)=>{const l=e.resolveComponent("TableHead"),o=e.resolveComponent("TableRow"),i=e.resolveComponent("TableHeader"),v=e.resolveComponent("Checkbox"),C=e.resolveComponent("TableCell"),d=e.resolveComponent("AvatarImage"),t=e.resolveComponent("AvatarFallback"),m=e.resolveComponent("Avatar"),x=e.resolveComponent("TableBody"),V=e.resolveComponent("Table"),N=e.resolveComponent("Card");return e.openBlock(),e.createBlock(N,{class:"w-full py-4 px-4"},{default:e.withCtx(()=>[e.createVNode(V,{class:"rounded overflow-hidden"},{default:e.withCtx(()=>[e.createVNode(i,null,{default:e.withCtx(()=>[e.createVNode(o,null,{default:e.withCtx(()=>[e.unref(n)?.length>0?(e.openBlock(),e.createBlock(l,{key:0})):e.createCommentVNode("",!0),e.createVNode(l,null,{default:e.withCtx(()=>[...p[1]||(p[1]=[e.createTextVNode("Title",-1)])]),_:1}),e.createVNode(l,null,{default:e.withCtx(()=>[...p[2]||(p[2]=[e.createTextVNode("Status",-1)])]),_:1}),e.createVNode(l,null,{default:e.withCtx(()=>[...p[3]||(p[3]=[e.createTextVNode(" Variants",-1)])]),_:1}),e.createVNode(l,null,{default:e.withCtx(()=>[...p[4]||(p[4]=[e.createTextVNode("Price",-1)])]),_:1})]),_:1})]),_:1}),e.createVNode(x,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.products,c=>(e.openBlock(),e.createBlock(o,{key:c.id,onClick:_=>e.unref(b)(c.id),class:"cursor-pointer"},{default:e.withCtx(()=>[e.unref(n)?.length>0?(e.openBlock(),e.createBlock(C,{key:0},{default:e.withCtx(()=>[e.createVNode(v,{"model-value":e.unref(n)?.includes(c.id),"onUpdate:modelValue":_=>a(_,c.id),onClick:p[0]||(p[0]=e.withModifiers(()=>{},["prevent","stop"]))},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024)):e.createCommentVNode("",!0),e.createVNode(C,{class:"font-medium"},{default:e.withCtx(()=>[e.createElementVNode("div",re,[e.createVNode(m,{class:"size-12 rounded-xl"},{default:e.withCtx(()=>[e.createVNode(d,{src:c.media?.[0],class:"object-cover"},null,8,["src"]),e.createVNode(t,{class:"rounded-xl"})]),_:2},1024),e.createElementVNode("span",null,e.toDisplayString(c.title),1)])]),_:2},1024),e.createVNode(C,null,{default:e.withCtx(()=>[c.status==="published"?(e.openBlock(),e.createElementBlock("span",se,"Published")):c.status==="draft"?(e.openBlock(),e.createElementBlock("span",ae,"Draft")):c.status==="archived"?(e.openBlock(),e.createElementBlock("span",ie,"Archived")):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(C,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.variantsTotal),1)]),_:2},1024),e.createVNode(C,{class:"text-right"},{default:e.withCtx(()=>[e.createTextVNode(" € "+e.toDisplayString(c.price||0),1)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1})]),_:1})}}}),ce={class:"truncate"},de={key:0},pe={key:1},me={key:2},fe={key:3},ve={class:"relative w-full max-w-sm items-center"},Ce={class:"truncate"},xe={class:"flex items-center space-x-2 mb-4"},ge={class:"flex items-center space-x-2 mb-4"},Ve={class:"flex items-center space-x-2 mb-4"},Ne=e.defineComponent({__name:"FilterPopover",setup(S){const n=e.inject("filter"),b=e.inject("collections"),g=e.computed(()=>(e.unref(b)||[]).flatMap(l=>{const o=l.status||"draft",i=[{id:l.id,title:l.title,status:o,isSubcollection:!1}];return Array.isArray(l.subcollections)&&i.push(...l.subcollections.map(v=>({id:v.id,title:v.title,status:o==="published"&&v.status||o,isSubcollection:!0,parentTitle:l.title}))),i})),a=e.computed(()=>Array.isArray(n.value.collections)?n.value.collections.map(l=>g.value.find(o=>o.id===l)).filter(Boolean):[]),f=l=>l.isSubcollection?`${l.parentTitle} / ${l.title}`:l.title,p=()=>{n.value={collections:[],published:!0,draft:!0,archived:!1}};return(l,o)=>{const i=e.resolveComponent("Button"),v=e.resolveComponent("PopoverTrigger"),C=e.resolveComponent("ComboboxTrigger"),d=e.resolveComponent("ComboboxAnchor"),t=e.resolveComponent("ComboboxInput"),m=e.resolveComponent("ComboboxEmpty"),x=e.resolveComponent("ComboboxItemIndicator"),V=e.resolveComponent("ComboboxItem"),N=e.resolveComponent("ScrollArea"),c=e.resolveComponent("ComboboxGroup"),_=e.resolveComponent("ComboboxList"),w=e.resolveComponent("Combobox"),E=e.resolveComponent("Checkbox"),T=e.resolveComponent("PopoverContent"),D=e.resolveComponent("Popover");return e.openBlock(),e.createBlock(D,null,{default:e.withCtx(()=>[e.createVNode(v,{asChild:""},{default:e.withCtx(()=>[e.createVNode(i,{variant:"outline"},{default:e.withCtx(()=>[e.createVNode(e.unref(y.Filter),{class:"size-4"}),o[4]||(o[4]=e.createTextVNode(" Filter ",-1))]),_:1})]),_:1}),e.createVNode(T,{class:"w-64"},{default:e.withCtx(()=>[o[10]||(o[10]=e.createElementVNode("p",{class:"text-sm font-medium text-muted-foreground mb-4"}," Filter by Collection ",-1)),e.createVNode(w,{modelValue:e.unref(n).collections,"onUpdate:modelValue":o[0]||(o[0]=u=>e.unref(n).collections=u),by:"id",multiple:!0,class:"mb-6"},{default:e.withCtx(()=>[e.createVNode(d,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(C,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(i,{variant:"outline",class:"justify-between w-full"},{default:e.withCtx(()=>[e.createElementVNode("span",ce,[a.value.length===1?(e.openBlock(),e.createElementBlock("span",de,e.toDisplayString(f(a.value[0])),1)):a.value.length===2?(e.openBlock(),e.createElementBlock("span",pe,e.toDisplayString(f(a.value[0]))+", "+e.toDisplayString(f(a.value[1])),1)):a.value.length>2?(e.openBlock(),e.createElementBlock("span",me,e.toDisplayString(f(a.value[0]))+", "+e.toDisplayString(f(a.value[1]))+" + "+e.toDisplayString(a.value.length-2),1)):(e.openBlock(),e.createElementBlock("span",fe,"Select collection"))]),e.createVNode(e.unref(y.ChevronsUpDown),{class:"ml-2 size-4 shrink-0 opacity-50"})]),_:1})]),_:1})]),_:1}),e.createVNode(_,null,{default:e.withCtx(()=>[e.createElementVNode("div",ve,[e.createVNode(t,{placeholder:"Select collection..."})]),e.createVNode(m,null,{default:e.withCtx(()=>[...o[5]||(o[5]=[e.createTextVNode(" No collection found. ",-1)])]),_:1}),e.createVNode(c,null,{default:e.withCtx(()=>[e.createVNode(N,{class:"max-h-[200px] overflow-y-auto"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,u=>(e.openBlock(),e.createBlock(V,{key:u.id,value:u.id},{default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass(["flex min-w-0 items-center gap-2",{"pl-4":u.isSubcollection}])},[u.isSubcollection?(e.openBlock(),e.createBlock(e.unref(y.CornerDownRight),{key:0,class:"size-4 shrink-0 text-muted-foreground"})):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["size-2 rounded-full shrink-0",u.status==="published"?"bg-green-500":"bg-blue-500"])},null,2),e.createElementVNode("span",Ce,e.toDisplayString(u.title),1)],2),e.createVNode(x,null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Check),{class:e.normalizeClass(e.unref(X.classNames)("ml-auto size-4"))},null,8,["class"])]),_:1})]),_:2},1032,["value"]))),128))]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),o[11]||(o[11]=e.createElementVNode("p",{class:"text-sm font-medium text-muted-foreground mb-4"}," Filter by Status ",-1)),e.createElementVNode("div",xe,[e.createVNode(E,{id:"chk_published_products",modelValue:e.unref(n).published,"onUpdate:modelValue":o[1]||(o[1]=u=>e.unref(n).published=u)},null,8,["modelValue"]),o[6]||(o[6]=e.createElementVNode("label",{for:"chk_published_products",class:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"}," Show published products ",-1))]),e.createElementVNode("div",ge,[e.createVNode(E,{id:"chk_draft_products",modelValue:e.unref(n).draft,"onUpdate:modelValue":o[2]||(o[2]=u=>e.unref(n).draft=u)},null,8,["modelValue"]),o[7]||(o[7]=e.createElementVNode("label",{for:"chk_draft_products",class:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"}," Show draft products ",-1))]),e.createElementVNode("div",Ve,[e.createVNode(E,{id:"chk_archived_products",modelValue:e.unref(n).archived,"onUpdate:modelValue":o[3]||(o[3]=u=>e.unref(n).archived=u)},null,8,["modelValue"]),o[8]||(o[8]=e.createElementVNode("label",{for:"chk_archived_products",class:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"}," Show archived products ",-1))]),e.unref(n).collections.length>0||!e.unref(n).published||!e.unref(n).draft||e.unref(n).archived?(e.openBlock(),e.createBlock(i,{key:0,variant:"secondary",class:"ml-auto my-2",size:"sm",onClick:p},{default:e.withCtx(()=>[e.createVNode(e.unref(y.RotateCcw),{class:"size-3"}),o[9]||(o[9]=e.createElementVNode("span",{class:"ml-0.5 text-xs"},"Reset filters",-1))]),_:1})):e.createCommentVNode("",!0)]),_:1})]),_:1})}}}),be=e.defineComponent({__name:"ProductContextMenu",emits:["selectAll","duplicateProduct","deleteProduct","deleteSelection"],setup(S,{emit:n}){const b=n,g=e.inject("products"),a=e.inject("selection"),f=e.inject("config"),{hasPermission:p}=k.useModulePermissions(),{navigateTo:l}=k.useModuleRoute(),o=e.computed(()=>a.value?.length!==1?null:g.value?.find(d=>d.id===a.value[0])),i=d=>{let t=f.previewUrl;t=t.replace("{{ id","{{id"),t=t.replace("id }}","id}}"),t=t.replace("{{id}}",d.id),t=t.replace("{{ slug","{{slug"),t=t.replace("slug }}","slug}}"),t=t.replace("{{slug}}",d.slug),window.open(t,"_blank")},v=async(d,t)=>{try{if(!["draft","published","archived"].includes(t))return;await k.useFirebaseIntegration(f.project).update(f.productCollection,d.id,{status:t}),d.status=t,h.toast.success("Product status changed")}catch{h.toast.error("Failed to change product status")}},C=async d=>{try{if(!["draft","published","archived"].includes(d))return;const t=k.useFirebaseIntegration(f.project),m=[];a.value.forEach(async x=>{m.push(t.update(f.productCollection,x,{status:d}))}),h.toast.promise(Promise.all(m),{loading:`Changing status of ${a.value.length} products...`,success:()=>{const x=a.value.length;return a.value.forEach(V=>{g.value.find(N=>N.id==V).status=d}),a.value=[],`Product status changed for ${x} products`},error:x=>"Failed to change product status"})}catch{h.toast.error("Failed to change product status")}};return(d,t)=>{const m=e.resolveComponent("ContextMenuTrigger"),x=e.resolveComponent("ContextMenuShortcut"),V=e.resolveComponent("ContextMenuItem"),N=e.resolveComponent("ContextMenuContent"),c=e.resolveComponent("ContextMenuSeparator"),_=e.resolveComponent("ContextMenuSubTrigger"),w=e.resolveComponent("ContextMenuCheckboxItem"),E=e.resolveComponent("ContextMenuSubContent"),T=e.resolveComponent("ContextMenuSub"),D=e.resolveComponent("ContextMenu");return e.openBlock(),e.createBlock(D,null,{default:e.withCtx(()=>[e.createVNode(m,{class:"flex flex-1"},{default:e.withCtx(()=>[e.renderSlot(d.$slots,"default")]),_:3}),e.unref(a).length===0?(e.openBlock(),e.createBlock(N,{key:0,class:"w-64"},{default:e.withCtx(()=>[e.createVNode(V,{inset:"",onClick:t[0]||(t[0]=u=>b("selectAll"))},{default:e.withCtx(()=>[t[13]||(t[13]=e.createTextVNode(" Select all ",-1)),e.createVNode(x,null,{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("⌘ + A",-1)])]),_:1})]),_:1})]),_:1})):e.createCommentVNode("",!0),e.unref(a).length===1&&o.value?(e.openBlock(),e.createBlock(N,{key:1,class:"w-64"},{default:e.withCtx(()=>[e.createVNode(V,{inset:"",onClick:t[1]||(t[1]=u=>e.unref(l)(o.value.id))},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode(" Edit product ",-1)])]),_:1}),e.createVNode(c),e.unref(f).previewUrl?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(V,{inset:"",onClick:t[2]||(t[2]=u=>i(o.value))},{default:e.withCtx(()=>[t[15]||(t[15]=e.createTextVNode(" Preview product ",-1)),e.createVNode(x,null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.ExternalLink),{class:"size-4"})]),_:1})]),_:1}),e.createVNode(c)],64)):e.createCommentVNode("",!0),e.createVNode(V,{inset:"",onClick:t[3]||(t[3]=u=>b("duplicateProduct",o.value))},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode(" Duplicate product ",-1)])]),_:1}),e.createVNode(T,null,{default:e.withCtx(()=>[e.createVNode(_,{inset:""},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode(" Change status ",-1)])]),_:1}),e.createVNode(E,{class:"w-48"},{default:e.withCtx(()=>[e.createVNode(w,{onClick:t[4]||(t[4]=u=>v(o.value,"draft")),modelValue:o.value.status==="draft"},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createElementVNode("span",{class:"size-2 rounded-full bg-blue-500"},null,-1),e.createTextVNode(" Draft ",-1)])]),_:1},8,["modelValue"]),e.createVNode(w,{onClick:t[5]||(t[5]=u=>v(o.value,"published")),modelValue:o.value.status==="published"},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createElementVNode("span",{class:"size-2 rounded-full bg-green-500"},null,-1),e.createTextVNode(" Published ",-1)])]),_:1},8,["modelValue"]),e.createVNode(w,{onClick:t[6]||(t[6]=u=>v(o.value,"archived")),modelValue:o.value.status==="archived"},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createElementVNode("span",{class:"size-2 rounded-full bg-gray-300"},null,-1),e.createTextVNode(" Archived ",-1)])]),_:1},8,["modelValue"])]),_:1})]),_:1}),e.createVNode(V,{inset:"",variant:"destructive",onClick:t[7]||(t[7]=u=>b("deleteProduct",o.value))},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode(" Delete product ",-1)])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.unref(a).length>1?(e.openBlock(),e.createBlock(N,{key:2,class:"w-64"},{default:e.withCtx(()=>[e.createVNode(T,null,{default:e.withCtx(()=>[e.createVNode(_,{inset:""},{default:e.withCtx(()=>[e.createTextVNode(" Change status ("+e.toDisplayString(e.unref(a).length)+") ",1)]),_:1}),e.createVNode(E,{class:"w-48"},{default:e.withCtx(()=>[e.createVNode(w,{onClick:t[8]||(t[8]=u=>C("draft"))},{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createElementVNode("span",{class:"size-2 rounded-full bg-blue-500"},null,-1),e.createTextVNode(" Draft ",-1)])]),_:1}),e.createVNode(w,{onClick:t[9]||(t[9]=u=>C("published"))},{default:e.withCtx(()=>[...t[23]||(t[23]=[e.createElementVNode("span",{class:"size-2 rounded-full bg-green-500"},null,-1),e.createTextVNode(" Published ",-1)])]),_:1}),e.createVNode(w,{onClick:t[10]||(t[10]=u=>C("archived"))},{default:e.withCtx(()=>[...t[24]||(t[24]=[e.createElementVNode("span",{class:"size-2 rounded-full bg-gray-300"},null,-1),e.createTextVNode(" Archived ",-1)])]),_:1})]),_:1})]),_:1}),e.createVNode(V,{inset:"",variant:"destructive",onClick:t[11]||(t[11]=u=>b("deleteSelection"))},{default:e.withCtx(()=>[e.createTextVNode(" Delete products ("+e.toDisplayString(e.unref(a).length)+") ",1)]),_:1})]),_:1})):e.createCommentVNode("",!0)]),_:3})}}}),ke={class:"relative flex flex-col flex-1"},_e={ref:"container",class:"flex items-center justify-between gap-4 w-full mt-12 mb-8"},we={class:"flex items-center gap-4"},he={class:"text-lg whitespace-nowrap"},ye={class:"relative w-full max-w-sm items-center"},Be={class:"absolute start-0 inset-y-0 flex items-center justify-center px-2"},Ee={class:"flex items-center gap-4"},Pe={class:"flex flex-1"},Se=e.defineComponent({__name:"Overview",props:{config:{type:Object,required:!0}},async setup(S){let n,b;const g=S,{hasPermission:a}=k.useModulePermissions(),{navigateTo:f}=k.useModuleRoute(),{confirm:p}=k.useConfirmation();k.useModuleBreadcrumbs(()=>[]);const l=k.useFirebaseIntegration(g.config.project),o=e.ref([]),i=async()=>{const s=await l.find(g.config.productCollection);o.value=s||[]},v=e.useTemplateRef("container"),{width:C}=W.useElementSize(v),d=e.ref("grid"),t=e.ref(1),m=e.ref([]),x=e.ref(""),V=e.ref([]);V.value=([n,b]=e.withAsyncContext(()=>w()),n=await n,b(),n);const N=e.computed(()=>d.value==="grid"?C.value<768?6:C.value<896?8:C.value<1024?10:12:10),c=e.computed(()=>o.value.filter(s=>!($.value.collections.length>0&&!s.collections?.some(r=>$.value.collections.includes(r))||!$.value.published&&s.status==="published"||!$.value.draft&&s.status==="draft"||!$.value.archived&&s.status==="archived")).filter(s=>s.title.toLowerCase().includes(x.value.toLowerCase())||s.slug.toLowerCase().includes(x.value.toLowerCase())||s.id.toLowerCase().includes(x.value.toLowerCase()))),_=e.computed(()=>{if(c.value.length<=N.value)return c.value;const s=(t.value-1)*N.value,r=s+N.value;return c.value.slice(s,r)});async function w(){if(!g.config.collectionsCollection)return[];const s=g.config.collectionsCollection.split(":");return s.length!==2?[]:(await l.get(s[0]))?.[s[1]]||[]}async function E(s){return(await l.find(g.config.productCollection,{filters:[{field:"slug",operator:"==",value:s}]})).length>0}const T=()=>{m.value=_.value.map(s=>s.id)},D=async s=>{try{let r={...s},P=r.slug+"-copy",M=2;for(;await E(P);)P=r.slug+"-copy-"+M,M++;r.id=void 0,r.createdAt=new Date,r.updatedAt=new Date,r.slug=P,r.status="draft",r.title=r.title+" (copy)";const z=await l.add(g.config.productCollection,r);f(z.id),h.toast.success("Product duplicated")}catch{h.toast.error("Failed to duplicate product")}},u=async s=>{if(await p(`Are you sure you want to delete "${s.title}"?`))try{await l.remove(g.config.productCollection,s.id),o.value=o.value.filter(P=>P.id!==s.id),m.value=[],h.toast.success("Product deleted")}catch{h.toast.error("Failed to delete product")}},F=async()=>{if(await p(`Are you sure you want to delete all selected products (${m.value.length})?`))try{m.value.forEach(async r=>{await l.remove(g.config.productCollection,r)}),o.value=o.value.filter(r=>!m.value.includes(r.id)),m.value=[],h.toast.success("Products deleted")}catch{h.toast.error("Failed to delete products")}},$=e.ref({collections:[],published:!0,draft:!0,archived:!1});e.watch($,()=>{t.value=1});const I=s=>{s.target?.matches("input, textarea")||s.target?.isContentEditable||(s.key==="Escape"&&(m.value=[]),(s.metaKey||s.ctrlKey)&&s.key.toLowerCase()==="a"&&(s.preventDefault(),T()))};return e.onMounted(()=>{i(),window.addEventListener("keydown",I)}),e.onUnmounted(()=>{window.removeEventListener("keydown",I)}),e.provide("config",g.config),e.provide("filter",$),e.provide("products",o),e.provide("collections",V),e.provide("selection",m),(s,r)=>{const P=e.resolveComponent("Input"),M=e.resolveComponent("Button"),z=e.resolveComponent("SegmentedControlButton"),j=e.resolveComponent("SegmentedControl"),R=e.resolveComponent("PaginationFirst"),U=e.resolveComponent("PaginationPrev"),K=e.resolveComponent("PaginationListItem"),q=e.resolveComponent("PaginationEllipsis"),O=e.resolveComponent("PaginationNext"),G=e.resolveComponent("PaginationLast"),H=e.resolveComponent("PaginationList"),Q=e.resolveComponent("Pagination");return e.openBlock(),e.createElementBlock("div",ke,[e.createElementVNode("div",_e,[e.createElementVNode("div",we,[e.createElementVNode("p",he,e.toDisplayString(c.value?.length)+" products",1),e.createElementVNode("div",ye,[e.createVNode(P,{id:"search",type:"text",placeholder:"Search...",class:"pl-8",onKeydown:r[0]||(r[0]=e.withKeys(B=>x.value="",["escape"])),modelValue:x.value,"onUpdate:modelValue":r[1]||(r[1]=B=>x.value=B)},null,8,["modelValue"]),e.createElementVNode("span",Be,[e.createVNode(e.unref(y.Search),{class:"size-4 text-muted-foreground"})])])]),e.createElementVNode("div",Ee,[m.value.length>0?(e.openBlock(),e.createBlock(M,{key:0,variant:"destructive",onClick:F},{default:e.withCtx(()=>[e.createTextVNode(" Delete Selection ("+e.toDisplayString(m.value.length)+") ",1)]),_:1})):e.createCommentVNode("",!0),e.unref(a)("create-product")?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(M,{variant:"outline",onClick:r[2]||(r[2]=B=>e.unref(f)("new"))},{default:e.withCtx(()=>[e.createVNode(e.unref(y.Plus),{class:"size-4"}),r[5]||(r[5]=e.createTextVNode(" New Product ",-1))]),_:1}),r[6]||(r[6]=e.createElementVNode("div",{class:"w-[1px] h-8 bg-border"},null,-1))],64)):e.createCommentVNode("",!0),e.createVNode(Ne),r[7]||(r[7]=e.createElementVNode("div",{class:"w-[1px] h-8 bg-border"},null,-1)),e.createElementVNode("div",null,[e.createVNode(j,{modelValue:d.value,"onUpdate:modelValue":r[3]||(r[3]=B=>d.value=B),"aria-label":"View mode"},{default:e.withCtx(()=>[e.createVNode(z,{value:"grid"},{default:e.withCtx(()=>[e.createVNode(e.unref(y.LayoutGrid),{class:"size-4"})]),_:1}),e.createVNode(z,{value:"list"},{default:e.withCtx(()=>[e.createVNode(e.unref(y.List),{class:"size-4"})]),_:1})]),_:1},8,["modelValue"])])])],512),e.createElementVNode("div",Pe,[e.createVNode(be,{onSelectAll:T,onDuplicateProduct:D,onDeleteProduct:u,onDeleteSelection:F},{default:e.withCtx(()=>[d.value==="grid"?(e.openBlock(),e.createBlock(le,{key:0,products:_.value},null,8,["products"])):(e.openBlock(),e.createBlock(ue,{key:1,products:_.value},null,8,["products"]))]),_:1})]),c.value?.length>N.value?(e.openBlock(),e.createBlock(Q,{key:0,page:t.value,"onUpdate:page":r[4]||(r[4]=B=>t.value=B),"items-per-page":N.value,total:c.value?.length,"sibling-count":1,"show-edges":""},{default:e.withCtx(()=>[e.createVNode(H,{class:"flex items-center gap-1"},{default:e.withCtx(({items:B})=>[e.createVNode(R),e.createVNode(U),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B,(A,L)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[A.type==="page"?(e.openBlock(),e.createBlock(K,{key:L,value:A.value,"as-child":""},{default:e.withCtx(()=>[e.createVNode(M,{class:"size-10 p-0",variant:A.value===t.value?"default":"outline"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(A.value),1)]),_:2},1032,["variant"])]),_:2},1032,["value"])):(e.openBlock(),e.createBlock(q,{key:A.type,index:L},null,8,["index"]))],64))),256)),e.createVNode(O),e.createVNode(G)]),_:1})]),_:1},8,["page","items-per-page","total"])):e.createCommentVNode("",!0)])}}});exports.default=Se;
@@ -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-CFFZ6r8i.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
+ "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,7 +1,7 @@
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-BXVf9gZW.mjs";
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";
@@ -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-CFFZ6r8i.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
+ "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-BXVf9gZW.mjs";
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-CFFZ6r8i.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-BXVf9gZW.mjs";
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 = {
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as ne, ref as I, reactive as ce, computed as te, resolveComponent as u, openBlock as l, createBlock as y, withCtx as r, createVNode as n, createTextVNode as c, toDisplayString as w, createElementVNode as s, unref as p, createElementBlock as a, Fragment as h, normalizeClass as k, createCommentVNode as g, renderList as B, normalizeStyle as re } from "vue";
2
- import { _ as me } from "./EditLayout.vue_vue_type_script_setup_true_lang-BXVf9gZW.mjs";
2
+ import { _ as me } from "./EditLayout.vue_vue_type_script_setup_true_lang-4_t0PPqM.mjs";
3
3
  import { $ as ae, a as R, b as C, e as N } from "./DateFormatter-BkKoSf_l.mjs";
4
4
  import { Calendar as se, Users as le, BanIcon as de, Trash2 as ie, Plus as ue, CalendarPlus as pe } from "lucide-vue-next";
5
5
  import { useModuleRoute as fe, useModulePermissions as ve, useModule as ge, useFirebaseIntegration as xe } from "@oneclick.dev/cms-kit";