@oneclick.dev/cms-core-modules 0.0.90 → 0.0.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ContentEditor-BrhHT4t0.js → ContentEditor-ClYwiqvs.js} +40 -40
- package/dist/{ContentEditor-B-lB0fES.mjs → ContentEditor-fwvAAH_A.mjs} +4017 -3985
- package/dist/{EditLayout.vue_vue_type_script_setup_true_lang-CcysXzmW.mjs → EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs} +30 -31
- package/dist/EditLayout.vue_vue_type_script_setup_true_lang-ozYrxb2g.js +1 -0
- package/dist/{agenda-C5grvzSa.mjs → agenda-D9bpW3jv.mjs} +1 -1
- package/dist/{agenda-DXMwVWpN.js → agenda-H1NyBNr2.js} +1 -1
- package/dist/{availability-C1NqOFsQ.mjs → availability-B1D4Fyzi.mjs} +1 -1
- package/dist/{availability-D_wnfLsH.js → availability-DxrUcYbW.js} +1 -1
- package/dist/{exceptions-Cn7zooEu.js → exceptions-Bp5BSvxO.js} +1 -1
- package/dist/{exceptions-BIwMhYa4.mjs → exceptions-C97cNZYl.mjs} +1 -1
- package/dist/index-DOeXSG47.js +35 -0
- package/dist/{index-MwjeLHPP.mjs → index-DnH93MgM.mjs} +232 -231
- package/dist/index.cjs.js +1 -1
- package/dist/index.mjs +9 -9
- package/dist/{orders-V1pch_ih.js → orders-BAT2ciXx.js} +1 -1
- package/dist/{orders-DhQ2EFXS.mjs → orders-DDrZJHj2.mjs} +1 -1
- package/dist/{payment-BbWByERf.mjs → payment-Bosr0m3u.mjs} +1 -1
- package/dist/{payment-BQaAqQ5q.js → payment-DDnC03jb.js} +1 -1
- package/dist/{regular-slots-C2NYxLPn.mjs → regular-slots-Cc1jmKuC.mjs} +1 -1
- package/dist/{regular-slots-Bs3WJB3U.js → regular-slots-DBs1XVeN.js} +1 -1
- package/dist/{resources-CFR_s89Z.mjs → resources-B7qDBC91.mjs} +1 -1
- package/dist/{resources-eb0pivDL.js → resources-BtF5RUUq.js} +1 -1
- package/package.json +2 -2
- package/dist/EditLayout.vue_vue_type_script_setup_true_lang-Czu6Dcde.js +0 -1
- package/dist/index-C9pSS15N.js +0 -35
|
@@ -1,58 +1,57 @@
|
|
|
1
|
-
import { defineComponent as y, ref as w, resolveComponent as n, unref as o, openBlock as s, createBlock as N, withCtx as d, createTextVNode as $, createElementVNode as
|
|
2
|
-
import { useModuleRoute as V, useModulePermissions as P, useRoute as A, useModuleBreadcrumbs as B, useModule as
|
|
3
|
-
import { ClipboardClock as
|
|
4
|
-
const
|
|
1
|
+
import { defineComponent as y, ref as w, resolveComponent as n, unref as o, openBlock as s, createBlock as N, withCtx as d, createTextVNode as $, createElementVNode as c, createElementBlock as r, createVNode as a, createCommentVNode as v, renderSlot as M } from "vue";
|
|
2
|
+
import { useModuleRoute as V, useModulePermissions as P, useRoute as A, useModuleBreadcrumbs as B, useModule as E, useFirebaseIntegration as L } from "@oneclick.dev/cms-kit";
|
|
3
|
+
import { ClipboardClock as R, Calendar as S, Receipt as O, User as j, CalendarCog as D, Tickets as T, HandCoins as q } from "lucide-vue-next";
|
|
4
|
+
const F = {
|
|
5
5
|
key: 1,
|
|
6
6
|
class: "@container mt-4 w-full"
|
|
7
|
-
},
|
|
7
|
+
}, G = { class: "flex flex-col space-y-8 @5xl:flex-row @5xl:space-x-8 @5xl:space-y-0 w-full" }, H = {
|
|
8
8
|
key: 0,
|
|
9
9
|
class: "hidden @5xl:block @5xl:w-1/4 @7xl:w-1/5"
|
|
10
|
-
},
|
|
10
|
+
}, I = { class: "flex flex-col flex-1" }, U = {
|
|
11
11
|
key: 0,
|
|
12
12
|
class: "@5xl:hidden"
|
|
13
|
-
},
|
|
13
|
+
}, Q = /* @__PURE__ */ y({
|
|
14
14
|
__name: "EditLayout",
|
|
15
|
-
setup(
|
|
16
|
-
const { params: e, resolvePath: t } = V(), { hasPermission: i } = P(),
|
|
15
|
+
setup(W) {
|
|
16
|
+
const { params: e, resolvePath: t } = V(), { hasPermission: i } = P(), _ = A();
|
|
17
17
|
B(() => [
|
|
18
18
|
{ text: "Edit" }
|
|
19
19
|
]);
|
|
20
|
-
const { config: u } =
|
|
20
|
+
const { config: u } = E(), g = L(u.project), f = w(null);
|
|
21
21
|
(async () => {
|
|
22
|
-
let l = await
|
|
22
|
+
let l = await g.get(u.agendaCollection, e.value.id);
|
|
23
23
|
f.value = l;
|
|
24
24
|
})();
|
|
25
25
|
const m = [
|
|
26
|
-
{ to: t(`/edit/${e.value.id}/`), title: "Overview", icon:
|
|
27
|
-
{ to: t(`/edit/${e.value.id}/
|
|
28
|
-
{ to: t(`/edit/${e.value.id}/
|
|
29
|
-
{ to: t(`/edit/${e.value.id}/
|
|
30
|
-
{ to: t(`/edit/${e.value.id}/exceptions`), title: "Override Slots", icon:
|
|
26
|
+
{ to: t(`/edit/${e.value.id}/`), title: "Overview", icon: R, subtitle: "General info and quick details" },
|
|
27
|
+
{ to: t(`/edit/${e.value.id}/agenda`), title: "Agenda", icon: S, subtitle: "Manage scheduled events and sessions" },
|
|
28
|
+
{ to: t(`/edit/${e.value.id}/orders`), title: "Orders", icon: O, subtitle: "Manage orders and payments" },
|
|
29
|
+
{ to: t(`/edit/${e.value.id}/resources`), title: "Resource Management", icon: j, subtitle: "Manage resources" },
|
|
30
|
+
{ to: t(`/edit/${e.value.id}/exceptions`), title: "Override Slots", icon: D, subtitle: "Adjust or block times" },
|
|
31
31
|
{ to: t(`/edit/${e.value.id}/availability`), title: "Availability Settings", icon: T, subtitle: "Booking rules & limits" },
|
|
32
|
-
{ to: t(`/edit/${e.value.id}/payment`), title: "Payment Settings", icon: q, subtitle: "Payment options & policies" }
|
|
33
|
-
{ to: t(`/edit/${e.value.id}/orders`), title: "Orders", icon: F, subtitle: "Manage orders and payments" }
|
|
32
|
+
{ to: t(`/edit/${e.value.id}/payment`), title: "Payment Settings", icon: q, subtitle: "Payment options & policies" }
|
|
34
33
|
];
|
|
35
34
|
return (l, p) => {
|
|
36
|
-
const x = n("NuxtLink"),
|
|
37
|
-
return !o(i)("edit-agendas") && !o(
|
|
35
|
+
const x = n("NuxtLink"), k = n("VerticalNav"), C = n("DrawerNav"), b = n("CardContent"), h = n("Card");
|
|
36
|
+
return !o(i)("edit-agendas") && !o(_).fullPath.endsWith("/agenda") ? (s(), N(x, {
|
|
38
37
|
key: 0,
|
|
39
38
|
class: "group",
|
|
40
39
|
to: o(t)(`/edit/${o(e).id}/agenda`)
|
|
41
40
|
}, {
|
|
42
41
|
default: d(() => [...p[0] || (p[0] = [
|
|
43
42
|
$("You have no access to this page. ", -1),
|
|
44
|
-
|
|
43
|
+
c("span", { class: "group-hover:underline" }, "View agenda", -1)
|
|
45
44
|
])]),
|
|
46
45
|
_: 1
|
|
47
|
-
}, 8, ["to"])) : (s(),
|
|
48
|
-
|
|
49
|
-
o(i)("edit-agendas") ? (s(),
|
|
50
|
-
a(
|
|
51
|
-
])) :
|
|
52
|
-
|
|
53
|
-
o(i)("edit-agendas") ? (s(),
|
|
54
|
-
a(
|
|
55
|
-
])) :
|
|
46
|
+
}, 8, ["to"])) : (s(), r("div", F, [
|
|
47
|
+
c("div", G, [
|
|
48
|
+
o(i)("edit-agendas") ? (s(), r("div", H, [
|
|
49
|
+
a(k, { links: m })
|
|
50
|
+
])) : v("", !0),
|
|
51
|
+
c("div", I, [
|
|
52
|
+
o(i)("edit-agendas") ? (s(), r("div", U, [
|
|
53
|
+
a(C, { links: m })
|
|
54
|
+
])) : v("", !0),
|
|
56
55
|
a(h, { class: "flex-1 w-full" }, {
|
|
57
56
|
default: d(() => [
|
|
58
57
|
a(b, null, {
|
|
@@ -71,5 +70,5 @@ const G = {
|
|
|
71
70
|
}
|
|
72
71
|
});
|
|
73
72
|
export {
|
|
74
|
-
|
|
73
|
+
Q as _
|
|
75
74
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("vue"),s=require("@oneclick.dev/cms-kit"),n=require("lucide-vue-next"),x={key:1,class:"@container mt-4 w-full"},C={class:"flex flex-col space-y-8 @5xl:flex-row @5xl:space-x-8 @5xl:space-y-0 w-full"},k={key:0,class:"hidden @5xl:block @5xl:w-1/4 @7xl:w-1/5"},h={class:"flex flex-col flex-1"},N={key:0,class:"@5xl:hidden"},b=e.defineComponent({__name:"EditLayout",setup(w){const{params:t,resolvePath:o}=s.useModuleRoute(),{hasPermission:a}=s.useModulePermissions(),r=s.useRoute();s.useModuleBreadcrumbs(()=>[{text:"Edit"}]);const{config:i}=s.useModule(),u=s.useFirebaseIntegration(i.project),m=e.ref(null);(async()=>{let l=await u.get(i.agendaCollection,t.value.id);m.value=l})();const c=[{to:o(`/edit/${t.value.id}/`),title:"Overview",icon:n.ClipboardClock,subtitle:"General info and quick details"},{to:o(`/edit/${t.value.id}/agenda`),title:"Agenda",icon:n.Calendar,subtitle:"Manage scheduled events and sessions"},{to:o(`/edit/${t.value.id}/orders`),title:"Orders",icon:n.Receipt,subtitle:"Manage orders and payments"},{to:o(`/edit/${t.value.id}/resources`),title:"Resource Management",icon:n.User,subtitle:"Manage resources"},{to:o(`/edit/${t.value.id}/exceptions`),title:"Override Slots",icon:n.CalendarCog,subtitle:"Adjust or block times"},{to:o(`/edit/${t.value.id}/availability`),title:"Availability Settings",icon:n.Tickets,subtitle:"Booking rules & limits"},{to:o(`/edit/${t.value.id}/payment`),title:"Payment Settings",icon:n.HandCoins,subtitle:"Payment options & policies"}];return(l,d)=>{const p=e.resolveComponent("NuxtLink"),v=e.resolveComponent("VerticalNav"),_=e.resolveComponent("DrawerNav"),g=e.resolveComponent("CardContent"),f=e.resolveComponent("Card");return!e.unref(a)("edit-agendas")&&!e.unref(r).fullPath.endsWith("/agenda")?(e.openBlock(),e.createBlock(p,{key:0,class:"group",to:e.unref(o)(`/edit/${e.unref(t).id}/agenda`)},{default:e.withCtx(()=>[...d[0]||(d[0]=[e.createTextVNode("You have no access to this page. ",-1),e.createElementVNode("span",{class:"group-hover:underline"},"View agenda",-1)])]),_:1},8,["to"])):(e.openBlock(),e.createElementBlock("div",x,[e.createElementVNode("div",C,[e.unref(a)("edit-agendas")?(e.openBlock(),e.createElementBlock("div",k,[e.createVNode(v,{links:c})])):e.createCommentVNode("",!0),e.createElementVNode("div",h,[e.unref(a)("edit-agendas")?(e.openBlock(),e.createElementBlock("div",N,[e.createVNode(_,{links:c})])):e.createCommentVNode("",!0),e.createVNode(f,{class:"flex-1 w-full"},{default:e.withCtx(()=>[e.createVNode(g,null,{default:e.withCtx(()=>[e.renderSlot(l.$slots,"default")]),_:3})]),_:3})])])]))}}});exports._sfc_main=b;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent as K, resolveComponent as P, openBlock as o, createElementBlock as u, createElementVNode as e, Fragment as X, renderList as Y, toDisplayString as v, normalizeStyle as q, normalizeClass as R, createVNode as d, withCtx as $, unref as b, createTextVNode as ne, createCommentVNode as M, ref as S, createBlock as Q, provide as Z, computed as U, onMounted as pe, onUnmounted as fe, inject as ie, nextTick as xe, onBeforeUnmount as ze, watch as le } from "vue";
|
|
2
2
|
import { c as ue, b as de } from "./DateFormatter-2B0R-DY4.mjs";
|
|
3
3
|
import { X as we, Search as Ee, Clock as ge, Users as he, ChevronLeft as ve, ChevronRight as ce, Asterisk as Ie, CalendarDays as Be } from "lucide-vue-next";
|
|
4
|
-
import { _ as Le } from "./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
4
|
+
import { _ as Le } from "./EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs";
|
|
5
5
|
import { useModule as Se, useModuleRoute as $e, useFirebaseIntegration as Te, useModulePermissions as Ue } from "@oneclick.dev/cms-kit";
|
|
6
6
|
import { _ as je, F as Pe } from "./ReservationDetailDialog.vue_vue_type_script_setup_true_lang-Cohhnd5x.mjs";
|
|
7
7
|
import { _ as Re } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),R=require("./DateFormatter-DbtOLV0L.js"),C=require("lucide-vue-next"),te=require("./EditLayout.vue_vue_type_script_setup_true_lang-Czu6Dcde.js"),j=require("@oneclick.dev/cms-kit"),K=require("./ReservationDetailDialog.vue_vue_type_script_setup_true_lang-VWVIxIr6.js"),oe=require("./_plugin-vue_export-helper-BHFhmbuH.js"),Q=require("./NewReservationDialog.vue_vue_type_script_setup_true_lang-CqERfyYb.js"),ne={class:"mb-6"},re={class:"flex items-end gap-px h-24 bg-muted/30 rounded-lg p-2 overflow-visible"},se=["onClick"],ae={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"},le={class:"font-medium"},ie={class:"text-muted-foreground"},ce={class:"w-full flex-1 flex items-end justify-center"},de={key:1,class:"text-[10px] mt-1"},ue={key:0,class:"mt-2 text-sm text-muted-foreground flex items-center gap-2"},me={class:"font-medium text-foreground"},pe={class:"font-medium text-foreground"},fe=e.defineComponent({__name:"TimelineChart",props:{timeSlots:{},slotStats:{},selectedTimeSlot:{},maxSpots:{}},emits:["select","clear"],setup(u,{emit:h}){const v=h,y=r=>{v("select",r)},E=()=>{v("clear")};return(r,a)=>{const i=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",ne,[a[2]||(a[2]=e.createElementVNode("h3",{class:"font-semibold text-sm mb-2"},"Timeline",-1)),e.createElementVNode("div",re,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.timeSlots,o=>(e.openBlock(),e.createElementBlock("div",{key:o.startTime,class:"flex-1 min-w-0 flex flex-col items-center cursor-pointer group h-full relative",onClick:x=>y(o.startTime)},[e.createElementVNode("div",ae,[e.createElementVNode("div",le,e.toDisplayString(o.startTime),1),e.createElementVNode("div",ie,e.toDisplayString(u.slotStats[o.startTime]?.spots||0)+" spots",1)]),e.createElementVNode("div",ce,[e.createElementVNode("div",{class:e.normalizeClass(["w-full transition-all duration-200",[u.selectedTimeSlot===o.startTime?"bg-primary":u.slotStats[o.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:u.slotStats[o.startTime]?.spots>0?`${u.slotStats[o.startTime].spots/u.maxSpots*100}%`:"2px",minHeight:u.slotStats[o.startTime]?.spots>0?"4px":"2px"})},null,6)]),o.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":u.selectedTimeSlot===o.startTime}])},e.toDisplayString(o.label),3)):(e.openBlock(),e.createElementBlock("span",de," "))],8,se))),128))]),u.selectedTimeSlot?(e.openBlock(),e.createElementBlock("div",ue,[e.createVNode(i,{variant:"ghost",size:"icon",class:"h-6 w-6 p-0",onClick:E},{default:e.withCtx(()=>[e.createVNode(e.unref(C.X),{size:14})]),_:1}),e.createElementVNode("span",null,[a[0]||(a[0]=e.createTextVNode(" Showing ",-1)),e.createElementVNode("span",me,e.toDisplayString(u.slotStats[u.selectedTimeSlot]?.bookings||0),1),a[1]||(a[1]=e.createTextVNode(" bookings at ",-1)),e.createElementVNode("span",pe,e.toDisplayString(u.selectedTimeSlot),1)])])):e.createCommentVNode("",!0)])}}}),ve={class:"flex items-center justify-between mb-3"},ge={class:"font-semibold"},he={key:0,class:"text-muted-foreground font-normal"},xe={class:"relative mb-3"},ye={key:0,class:"flex items-center justify-center py-8"},ke={key:1,class:"text-center py-8 text-muted-foreground"},be={key:2,class:"space-y-2 max-h-80 overflow-y-auto"},_e=["onClick"],Ne={class:"flex items-start justify-between"},Ee={class:"flex-1"},we={class:"font-medium"},Ve={class:"text-sm text-muted-foreground"},Se={class:"text-sm text-muted-foreground"},Ce={class:"flex items-center gap-4"},Be={class:"flex items-center gap-2 mt-1 text-xs text-muted-foreground"},$e={class:"flex items-center gap-2 mt-1 text-xs text-muted-foreground"},De={class:"text-right"},Te={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"},ze={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"},Me={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"},Ie={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"},Le={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"},Re={key:5,class:"text-sm font-medium mt-1"},Ue=e.defineComponent({__name:"BookingsList",props:{orders:{},filteredOrders:{},isLoading:{type:Boolean},selectedTimeSlot:{},searchQuery:{}},emits:["update:searchQuery","refresh"],setup(u,{emit:h}){const v=h,y=e.ref(null),E=i=>{v("update:searchQuery",i)},r=()=>{v("update:searchQuery","")},a=()=>{v("refresh")};return(i,o)=>{const x=e.resolveComponent("Input"),g=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",ve,[e.createElementVNode("h3",ge,[o[0]||(o[0]=e.createTextVNode(" Bookings ",-1)),u.selectedTimeSlot||u.searchQuery?(e.openBlock(),e.createElementBlock("span",he," ("+e.toDisplayString(u.filteredOrders.length)+" of "+e.toDisplayString(u.orders.length)+") ",1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",xe,[e.createVNode(e.unref(C.Search),{size:16,class:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),e.createVNode(x,{"model-value":u.searchQuery,placeholder:"Search by name, email, or phone...",class:"pl-9 pr-9","onUpdate:modelValue":E},null,8,["model-value"]),u.searchQuery?(e.openBlock(),e.createBlock(g,{key:0,variant:"ghost",size:"icon",class:"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7",onClick:r},{default:e.withCtx(()=>[e.createVNode(e.unref(C.X),{size:14})]),_:1})):e.createCommentVNode("",!0)]),u.isLoading?(e.openBlock(),e.createElementBlock("div",ye,[...o[1]||(o[1]=[e.createElementVNode("div",{class:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"},null,-1)])])):u.filteredOrders.length===0?(e.openBlock(),e.createElementBlock("div",ke,e.toDisplayString(u.selectedTimeSlot?"No bookings for this time slot":"No bookings for this event"),1)):(e.openBlock(),e.createElementBlock("div",be,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.filteredOrders,p=>(e.openBlock(),e.createElementBlock("div",{key:p.res_id||p.id,class:"p-3 border rounded-lg hover:bg-muted/50 transition-colors",onClick:w=>e.unref(y).openDialog(p)},[e.createElementVNode("div",Ne,[e.createElementVNode("div",Ee,[e.createElementVNode("div",we,e.toDisplayString(p.customerInfo.firstName+" "+p.customerInfo.lastName||"Unknown Customer"),1),e.createElementVNode("div",Ve,e.toDisplayString(p.customerInfo.email),1),e.createElementVNode("div",Se,e.toDisplayString(p.customerInfo.phone),1),e.createElementVNode("div",Ce,[e.createElementVNode("div",Be,[e.createVNode(e.unref(C.Clock),{size:12}),e.createElementVNode("span",null,e.toDisplayString(p.startTime)+" - "+e.toDisplayString(p.endTime),1)]),e.createElementVNode("div",$e,[e.createVNode(e.unref(C.Users),{size:12}),e.createElementVNode("span",null,e.toDisplayString(p.spots),1)])])]),e.createElementVNode("div",De,[p.reservationStatus==="needs_approval"?(e.openBlock(),e.createElementBlock("span",Te,"Needs Approval")):p.reservationStatus==="approved"?(e.openBlock(),e.createElementBlock("span",ze,"Approved")):p.reservationStatus==="rejected"?(e.openBlock(),e.createElementBlock("span",Me,"Rejected")):p.reservationStatus==="cancelled"?(e.openBlock(),e.createElementBlock("span",Ie,"Cancelled")):(e.openBlock(),e.createElementBlock("span",Le,"Pending")),p.reservationPrice||p.reservationPrice===0?(e.openBlock(),e.createElementBlock("div",Re," €"+e.toDisplayString(p.reservationPrice.toFixed(2)),1)):e.createCommentVNode("",!0)])])],8,_e))),128))])),e.createVNode(K._sfc_main,{ref_key:"reservationDetailDialog",ref:y,onCancelled:a,onConfirmed:a,onRejected:a},null,512)])}}}),je={class:"flex items-center gap-4 mt-2 text-sm"},Fe={class:"flex items-center gap-1"},Pe={key:0,class:"flex items-center gap-1"},Oe={class:"flex items-center gap-1"},Ae={class:"py-4"},qe=e.defineComponent({__name:"EventDialog",props:{resources:{default:()=>[]}},setup(u,{expose:h}){const v=u,{config:y}=j.useModule(),{params:E}=j.useModuleRoute(),r=j.useFirebaseIntegration(y.project),a=e.ref(!1),i=e.ref(null),o=e.ref([]),x=e.ref(!1),g=e.ref(null),p=e.ref("");e.provide("event",i);const w=e.computed(()=>{if(!i.value)return[];const d=i.value.resource?.interval||60,n=[],[c,_]=i.value.startTime.split(":").map(Number),[T,b]=i.value.endTime.split(":").map(Number),$=c*60+_,t=T*60+b;for(let l=$;l<t;l+=d){const f=Math.floor(l/60),m=l%60,N=Math.min(l+d,t),D=Math.floor(N/60),s=N%60,z=`${f.toString().padStart(2,"0")}:${m.toString().padStart(2,"0")}`,I=`${D.toString().padStart(2,"0")}:${s.toString().padStart(2,"0")}`;n.push({startTime:z,endTime:I,label:z})}return n}),k=d=>{const n=d.getFullYear(),c=String(d.getMonth()+1).padStart(2,"0"),_=String(d.getDate()).padStart(2,"0");return`${n}-${c}-${_}`},M=e.computed(()=>{const d={};return w.value.forEach(n=>{d[n.startTime]={bookings:0,spots:0,orders:[]}}),o.value.forEach(n=>{w.value.forEach(c=>{n.startTime<c.endTime&&n.endTime>c.startTime&&(d[c.startTime].bookings++,d[c.startTime].spots+=n.spots||0,d[c.startTime].orders.push(n))})}),d}),V=e.computed(()=>Math.max(1,...Object.values(M.value).map(d=>d.spots))),S=e.computed(()=>{let d=o.value;return g.value&&(d=M.value[g.value]?.orders||[]),p.value.trim()&&(d=new K.Fuse(d,{keys:["customerInfo.firstName","customerInfo.lastName","customerInfo.email","customerInfo.phone"],threshold:.3,ignoreLocation:!0}).search(p.value).map(c=>c.item)),d}),B=e.computed(()=>({spots:o.value.reduce((d,n)=>d+(n.spots||0),0),bookings:o.value.length})),F=d=>{g.value===d?g.value=null:g.value=d},L=()=>{g.value=null},P=async d=>{a.value=!0,i.value=d,g.value=null,p.value="",await U()},U=async()=>{if(i.value){x.value=!0,o.value=[];try{const d=E.value.id,n=k(new Date(i.value.date)),c=new Set;v.resources?.forEach(b=>{const $=`${b.id}_${n}`;c.add($)});const _=await r.find(y.reservationsCollection,{filters:[{field:"agendaId",operator:"==",value:d},{field:"status",operator:"==",value:"confirmed"},{field:"flattenedReservationDates",operator:"array-contains-any",value:Array.from(c)}]});let T=[];_.forEach(b=>{(b.reservations?.filter(t=>t.date===n)||[]).forEach(t=>{const l=v.resources.find(f=>f.id===t.resourceId);(t.status==="approved"||t.status==="needs_approval")&&T.push({customerInfo:b.customerInfo,amountDue:b.amountDue,amountPaid:b.amountPaid,status:b.status,reservationStatus:t.status,subtotal:b.subtotal,total:b.total,discount:b.discount,id:b.id,res_id:t.id,resourceId:t.resourceId,spots:t.spots,date:n,startTime:t.timeslot?.startTime,endTime:t.timeslot?.endTime,reservationPrice:t.totalPrice,reservationBasePrice:t.basePrice,reservationAddOnsPrice:t.addOnsPrice,pricingOptionId:t.pricingOptionId,pricingOption:t.pricingOption,resourceName:l?.name||"Unknown",resourceColor:l?.color})})}),o.value=T.sort((b,$)=>b.startTime?.localeCompare($.startTime||"")||0)}catch(d){console.error("Error loading orders:",d),o.value=[]}finally{x.value=!1}}},q=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],O=["January","February","March","April","May","June","July","August","September","October","November","December"];return h({openDialog:P}),(d,n)=>{const c=e.resolveComponent("DialogTitle"),_=e.resolveComponent("DialogDescription"),T=e.resolveComponent("DialogHeader"),b=e.resolveComponent("Button"),$=e.resolveComponent("DialogFooter"),t=e.resolveComponent("DialogScrollContent"),l=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(l,{open:a.value,"onUpdate:open":n[2]||(n[2]=f=>a.value=f)},{default:e.withCtx(()=>[e.createVNode(t,{class:"sm:max-w-3xl"},{default:e.withCtx(()=>[e.createVNode(T,null,{default:e.withCtx(()=>[i.value?.date?(e.openBlock(),e.createBlock(c,{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(q[new Date(i.value.date).getUTCDay()])+" "+e.toDisplayString(O[new Date(i.value.date).getUTCMonth()])+" "+e.toDisplayString(new Date(i.value.date).getUTCDate())+", "+e.toDisplayString(new Date(i.value.date).getUTCFullYear()),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(_,null,{default:e.withCtx(()=>[e.createElementVNode("div",je,[e.createElementVNode("div",Fe,[e.createVNode(e.unref(C.Clock),{size:14}),e.createElementVNode("span",null,e.toDisplayString(i.value?.startTime)+" – "+e.toDisplayString(i.value?.endTime),1)]),i.value?.resource?(e.openBlock(),e.createElementBlock("div",Pe,[e.createElementVNode("div",{class:"w-4 h-4 rounded-full",style:e.normalizeStyle({backgroundColor:i.value.resource.color||"#6b7280"})},null,4),e.createElementVNode("span",null,e.toDisplayString(i.value.resource.name),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Oe,[e.createVNode(e.unref(C.Users),{size:14}),e.createElementVNode("span",null,e.toDisplayString(B.value.spots)+" spots in "+e.toDisplayString(B.value.bookings)+" reservations",1)])])]),_:1})]),_:1}),e.createElementVNode("div",Ae,[w.value.length>1?(e.openBlock(),e.createBlock(fe,{key:0,"time-slots":w.value,"slot-stats":M.value,"selected-time-slot":g.value,"max-spots":V.value,onSelect:F,onClear:L},null,8,["time-slots","slot-stats","selected-time-slot","max-spots"])):e.createCommentVNode("",!0),e.createVNode(Ue,{orders:o.value,"filtered-orders":S.value,"is-loading":x.value,"selected-time-slot":g.value,"search-query":p.value,"onUpdate:searchQuery":n[0]||(n[0]=f=>p.value=f),onRefresh:U},null,8,["orders","filtered-orders","is-loading","selected-time-slot","search-query"])]),e.createVNode($,null,{default:e.withCtx(()=>[e.createVNode(b,{variant:"outline",onClick:n[1]||(n[1]=f=>a.value=!1)},{default:e.withCtx(()=>[...n[3]||(n[3]=[e.createTextVNode("Close",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["open"])}}}),He={class:"flex-1 border-r shadow-sm overflow-hidden min-h-[1536px]"},We={class:"relative h-full min-h-[1536px]"},Qe={class:"divide-y divide-input/80 h-full flex flex-col min-h-[1536px] border-y border-input/80"},Xe={class:"absolute inset-0 pointer-events-none"},Ye={class:"relative mr-3 h-full ml-2"},Je=["onClick"],Ke={key:0,class:"absolute bottom-0 left-0 right-0 h-1 bg-black/20"},Ge={class:"flex items-start justify-between gap-2 mb-1"},Ze={class:"font-semibold text-sm leading-tight line-clamp-1 flex-1"},et={class:"flex items-center gap-1 shrink-0"},tt=["title"],ot={class:"font-medium"},X=e.defineComponent({__name:"EventTimeline",props:{date:{},events:{},firstDay:{type:Boolean,default:!1},resources:{default:()=>[]}},setup(u){const h=u,v=e.ref(null),y=a=>{const[i,o]=a.split(":").map(Number);return i*60+o};e.computed(()=>!h.events||!h.resources?[]:h.resources.map(a=>{const o=h.events.filter(x=>x.resourceId===a.id).map(x=>{const g=y(x.startTime),w=y(x.endTime)-g,k=g/1440*100,M=w/1440*100,V=(x.bookings??0)>0,S=x.maxBookings?(x.bookings??0)/x.maxBookings*100:0;return{...x,top:`${k}%`,height:`${M}%`,color:x.resource?.color||"#3b82f6",hasBookings:V,fillPercentage:S,isSmall:w<60}});return{resource:a,events:o}}));const E=e.computed(()=>h.events?h.events.map(a=>{const i=y(a.startTime),x=y(a.endTime)-i,g=i/1440*100,p=x/1440*100,w=(a.bookings??0)>0,k=a.maxBookings?(a.bookings??0)/a.maxBookings*100:0;return{...a,top:`${g}%`,height:`${p}%`,color:a.resource?.color||"#3b82f6",hasBookings:w,fillPercentage:k,isSmall:x<60}}):[]),r=Array.from({length:24},(a,i)=>({hour:i,label:`${i.toString().padStart(2,"0")}:00`}));return(a,i)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",He,[e.createElementVNode("div",We,[e.createElementVNode("div",Qe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),o=>(e.openBlock(),e.createElementBlock("div",{key:o.hour,class:"flex-1 flex transition-all duration-200"},[...i[0]||(i[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",Xe,[e.createElementVNode("div",Ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,style:e.normalizeStyle({top:o.top,height:o.height,opacity:o.hasBookings?"1":"0.5"}),class:"event-card absolute left-2 right-2 rounded-lg pointer-events-auto cursor-pointer group/event transition-all duration-200 hover:shadow-xl overflow-hidden",onClick:x=>v.value?.openDialog(o)},[e.createElementVNode("div",{style:e.normalizeStyle({backgroundColor:o.color}),class:"absolute inset-0 shadow-lg"},[o.maxBookings?(e.openBlock(),e.createElementBlock("div",Ke,[e.createElementVNode("div",{class:"h-full bg-white/40 transition-all duration-300",style:e.normalizeStyle({width:`${o.fillPercentage}%`})},null,4)])):e.createCommentVNode("",!0)],4),e.createElementVNode("div",{class:e.normalizeClass(["relative h-full p-3 flex flex-col",`${o.hasBookings?"text-white":"text-gray-600 dark:text-gray-100"}`])},[e.createElementVNode("div",Ge,[e.createElementVNode("h3",Ze,e.toDisplayString(o.title),1),e.createElementVNode("div",et,[o.resource?(e.openBlock(),e.createElementBlock("div",{key:0,class:"w-6 h-6 rounded-full flex items-center justify-center text-xs font-bold bg-white/30 backdrop-blur-sm text-white border border-white/40",title:o.resource.name},e.toDisplayString(o.resource.avatarLabel||o.resource.name.charAt(0).toUpperCase()),9,tt)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium",o.hasBookings?"bg-white text-black backdrop-blur-sm":"bg-black/10 backdrop-blur-sm"])},[e.createVNode(e.unref(C.Users),{size:12}),e.createElementVNode("span",null,e.toDisplayString(o.bookings),1)],2)])]),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-2 text-xs opacity-90 mt-auto",{"-translate-x-1 -translate-y-2 scale-80 origin-[0_0]":o.isSmall}])},[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-1 px-2 py-0.5 rounded backdrop-blur-sm",{"bg-black/10":!o.isSmall}])},[e.createVNode(e.unref(C.Clock),{size:10}),e.createElementVNode("span",ot,e.toDisplayString(o.startTime)+" – "+e.toDisplayString(o.endTime),1)],2)],2)],2),i[1]||(i[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,Je))),128))])])])]),e.createVNode(qe,{resources:u.resources,ref_key:"eventDialog",ref:v},null,8,["resources"])],64))}}),nt={class:"sticky left-0 mt-auto z-10 divide-y divide-border/50 h-full flex flex-col min-h-[1536px] bg-input"},rt={class:"flex-shrink-0 text-xs font-medium text-muted-foreground px-3 pb-3 border-r border-border/50 w-14"},st={class:"flex items-center gap-1.5"},Y=e.defineComponent({__name:"Event24hSidebar",setup(u){const h=Array.from({length:24},(v,y)=>({hour:y,label:`${y.toString().padStart(2,"0")}:00`}));return(v,y)=>(e.openBlock(),e.createElementBlock("div",nt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(h),E=>(e.openBlock(),e.createElementBlock("div",{key:E.hour,class:"flex-1 flex transition-all duration-200"},[e.createElementVNode("div",rt,[e.createElementVNode("div",st,[e.createElementVNode("span",{class:e.normalizeClass({"-translate-y-1/2":E.hour!==0})},e.toDisplayString(E.label),3)])])]))),128))]))}}),at={class:"absolute top-0 w-full pointer-events-none"},lt={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"},J=e.defineComponent({__name:"EventTimeIndicator",props:{currentDate:{type:Object,required:!1}},setup(u){const h=e.ref(Date.now());let v;e.onMounted(()=>{v=window.setInterval(()=>{h.value=Date.now()},1e3)}),e.onUnmounted(()=>{v&&clearInterval(v)});const y=e.computed(()=>{const r=new Date(h.value);return`${(r.getHours()*60+r.getMinutes()+r.getSeconds()/60)/1440*100}%`}),E=e.computed(()=>new Date(h.value).getFullYear()+"-"+(new Date(h.value).getMonth()+1).toString().padStart(2,"0")+"-"+new Date(h.value).getDate().toString().padStart(2,"0"));return(r,a)=>(e.openBlock(),e.createElementBlock("div",at,[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:y.value})},[a[0]||(a[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)),u.currentDate&&u.currentDate==E.value?(e.openBlock(),e.createElementBlock("div",lt," Now ")):e.createCommentVNode("",!0)],4)]))}}),it={key:0,class:"relative flex flex-1 min-w-0"},ct={key:1,class:"flex-1 min-w-0 relative"},dt={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"},ut={class:"flex pb-4 min-w-[200px]"},mt=["onClick"],pt={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"},ft={class:"text-xs text-muted-foreground font-medium group-hover:text-foreground/70 transition-colors"},vt={key:0,class:"absolute bottom-0 left-0 w-full h-1 bg-orange-500"},gt=e.defineComponent({__name:"EventView",setup(u){const h=e.inject("activeDate",e.ref(R.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(R.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()))),v=e.inject("viewMode",e.ref(1)),y=e.inject("events",e.ref([])),E=e.inject("resources",e.ref([])),r=e.ref(null),a=e.ref(!1),i=e.ref(!1);e.computed(()=>E.value.length>1);const o=e.computed(()=>{const n=[],c=h.value;for(let _=0;_<v.value;_++)n.push(c.add({days:_}));return n}),x=(n,c)=>{const _=`${n.year}-${String(n.month).padStart(2,"0")}-${String(n.day).padStart(2,"0")}`;return y.value?.filter(T=>T.date===_)||[]},g=n=>{const c=R.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(R.$14e0f24ef4ac5c92$export$aa8b41735afcabd2());return n.year===c.year&&n.month===c.month&&n.day===c.day},p=n=>{h.value=n,v.value=1};let w=null,k=null;const M=()=>{r.value&&(S(),r.value.scrollBy({left:-300,behavior:"smooth"}),k=window.setTimeout(()=>{w=window.setInterval(()=>{r.value&&r.value.scrollBy({left:-20,behavior:"auto"})},50)},300))},V=()=>{r.value&&(S(),r.value.scrollBy({left:300,behavior:"smooth"}),k=window.setTimeout(()=>{w=window.setInterval(()=>{r.value&&r.value.scrollBy({left:20,behavior:"auto"})},50)},300))},S=()=>{k&&(clearTimeout(k),k=null),w&&(clearInterval(w),w=null)},B=()=>{if(!r.value)return;const{scrollLeft:n,scrollWidth:c,clientWidth:_}=r.value;a.value=n>10,i.value=n<c-_-10},F=n=>{r.value&&Math.abs(n.deltaY)>Math.abs(n.deltaX)&&(n.preventDefault(),r.value.scrollBy({left:n.deltaY,behavior:"auto"}))},L=e.ref(!1),P=e.ref(0),U=e.ref(0),q=n=>{!r.value||v.value===1||n.target.closest(".event-card")||(L.value=!0,P.value=n.pageX,U.value=r.value.scrollLeft,r.value.style.userSelect="none",n.preventDefault())},O=n=>{if(!L.value||!r.value)return;const c=n.pageX,_=(P.value-c)*1.2;r.value.scrollLeft=U.value+_},d=()=>{r.value&&(L.value=!1,r.value.style.userSelect="")};return e.onMounted(()=>{r.value&&(r.value.addEventListener("scroll",B),r.value.addEventListener("wheel",F,{passive:!1}),e.nextTick(()=>{B(),setTimeout(B,50),setTimeout(B,150),setTimeout(B,300),setTimeout(B,500)})),document.addEventListener("mousemove",O),document.addEventListener("mouseup",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("mousemove",O),document.removeEventListener("mouseup",d)}),e.watch(v,()=>{v.value>1?e.nextTick(()=>{setTimeout(()=>{if(!r.value)return;const{scrollWidth:n,clientWidth:c}=r.value;n>c&&(i.value=!0,a.value=!1)},100)}):r.value&&(r.value.style.cursor="")}),e.onUnmounted(()=>{S(),r.value&&(r.value.removeEventListener("scroll",B),r.value.removeEventListener("wheel",F))}),(n,c)=>{const _=e.resolveComponent("Button"),T=e.resolveComponent("TooltipTrigger"),b=e.resolveComponent("TooltipContent"),$=e.resolveComponent("Tooltip");return e.unref(v)===1?(e.openBlock(),e.createElementBlock("div",it,[e.createVNode(Y),e.createVNode(J,{class:"h-full","current-date":e.unref(h)},null,8,["current-date"]),e.createVNode(X,{date:e.unref(h),events:x(e.unref(h)),resources:e.unref(E)},null,8,["date","events","resources"])])):(e.openBlock(),e.createElementBlock("div",ct,[e.unref(v)===7?(e.openBlock(),e.createElementBlock("div",dt,[e.createVNode(e.unref(C.ChevronLeft),{size:12}),c[0]||(c[0]=e.createElementVNode("span",null,"Scroll to view all days",-1)),e.createVNode(e.unref(C.ChevronRight),{size:12})])):e.createCommentVNode("",!0),a.value?(e.openBlock(),e.createBlock(_,{key:1,variant:"outline",size:"icon",onMousedown:M,onMouseup:S,onMouseleave:S,onTouchstart:M,onTouchend:S,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(C.ChevronLeft),{size:20})]),_:1})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createBlock(_,{key:2,variant:"outline",size:"icon",onMousedown:V,onMouseup:S,onMouseleave:S,onTouchstart:V,onTouchend:S,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(C.ChevronRight),{size:20})]),_:1})):e.createCommentVNode("",!0),e.createVNode(J,{class:"h-[calc(100%-164px)] 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",i.value?"opacity-100":"opacity-0"])},null,2),e.createElementVNode("div",{ref_key:"scrollContainer",ref:r,class:"absolute inset-0 overflow-x-auto overflow-y-visible",onScroll:B,onMousedown:q},[e.createElementVNode("div",ut,[e.createVNode(Y),c[5]||(c[5]=e.createElementVNode("div",{class:"absolute w-14 h-[125px] bg-input"},null,-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(t,l)=>(e.openBlock(),e.createElementBlock("div",{key:t.toString(),class:e.normalizeClass(["flex-shrink-0",{"min-w-[200px] w-[33.33%]":e.unref(v)===3,"min-w-[280px]":e.unref(v)===7}])},[e.createElementVNode("div",{onClick:f=>p(t),class:e.normalizeClass(["relative p-3 border cursor-pointer transition-all duration-200 group relative",g(t)?"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"])},[g(t)?(e.openBlock(),e.createElementBlock("div",pt,[...c[1]||(c[1]=[e.createElementVNode("div",{class:"w-1.5 h-1.5 bg-primary rounded-full animate-pulse"},null,-1),e.createElementVNode("span",{class:"text-[9px] font-bold text-primary uppercase tracking-wide"},"Today",-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["text-xs font-semibold uppercase tracking-wider transition-colors",g(t)?"text-primary group-hover:text-primary/80":"text-muted-foreground group-hover:text-foreground"])},e.toDisplayString(new Date(t.year,t.month-1,t.day).toLocaleDateString("en-US",{weekday:"short"})),3),e.createElementVNode("div",{class:e.normalizeClass(["text-2xl font-bold transition-colors",g(t)?"text-foreground":"text-foreground group-hover:text-primary"])},e.toDisplayString(t.day),3),e.createElementVNode("div",ft,e.toDisplayString(new Date(t.year,t.month-1,t.day).toLocaleDateString("en-US",{month:"long",year:"numeric"})),1),c[4]||(c[4]=e.createElementVNode("div",{class:"mt-2 pt-2 border-t border-border/0 group-hover:border-border/50 transition-all"},[e.createElementVNode("div",{class:"text-[10px] text-muted-foreground/0 group-hover:text-muted-foreground/100 uppercase tracking-wide transition-all"}," Click to view ")],-1)),e.createVNode($,null,{default:e.withCtx(()=>[e.createVNode(T,{"as-child":""},{default:e.withCtx(()=>[x(t).filter(f=>f.isException).length>0?(e.openBlock(),e.createBlock(e.unref(C.Asterisk),{key:0,class:"absolute top-3 right-3 size-4 text-orange-500"})):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(b,null,{default:e.withCtx(()=>[...c[2]||(c[2]=[e.createElementVNode("p",null," This day has exceptions applied to it. ",-1)])]),_:1})]),_:2},1024),e.createVNode($,null,{default:e.withCtx(()=>[e.createVNode(T,{"as-child":""},{default:e.withCtx(()=>[x(t).filter(f=>f.isException).length>0?(e.openBlock(),e.createElementBlock("div",vt)):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(b,null,{default:e.withCtx(()=>[...c[3]||(c[3]=[e.createElementVNode("p",null," This day has exceptions applied to it. ",-1)])]),_:1})]),_:2},1024)],10,mt),e.createVNode(X,{date:t,events:x(t),resources:e.unref(E)},null,8,["date","events","resources"])],2))),128))])],544)]))}}}),ht=oe._export_sfc(gt,[["__scopeId","data-v-99339cf2"]]),xt={class:"flex flex-col gap-2 md:gap-4 w-full h-full"},yt={class:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 px-1"},kt={class:"flex items-center justify-between sm:justify-start gap-4"},bt={class:"flex flex-col"},_t={class:"flex items-center gap-2"},Nt={class:"text-lg sm:text-2xl font-bold tracking-tight truncate"},Et={class:"text-xs sm:text-sm text-muted-foreground ml-7 truncate"},wt={class:"flex items-center justify-between sm:justify-end gap-2"},Vt={class:"flex items-center gap-1 sm:mr-2"},St={key:0,class:"flex items-center gap-2 px-1 overflow-x-auto pb-2 -mx-1 scrollbar-hide"},Ct=["onClick"],Bt={class:"flex gap-4 flex-1 min-h-0 md:min-h-[1700px]"},$t={class:"hidden md:flex flex-shrink-0 flex-col gap-4"},Dt={key:0,class:"rounded-md border p-3"},Tt={class:"space-y-1"},zt=["onClick"],Mt={class:"min-w-0 flex-1"},It={class:"text-sm font-medium truncate"},Lt={key:0,class:"pt-2 mt-2 border-t"},Rt={key:0,class:"mt-1 space-y-1"},Ut={class:"min-w-0 flex-1"},jt={class:"text-sm font-medium truncate text-muted-foreground"},Ft=e.defineComponent({__name:"agenda",setup(u){const{hasPermission:h}=j.useModulePermissions(),{params:v}=j.useModuleRoute(),{config:y}=j.useModule(),E=j.useFirebaseIntegration(y.project),r=e.ref(R.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(R.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())),a=e.ref(1),i=e.ref(typeof window<"u"?window.innerWidth:1024),o=e.computed(()=>i.value<768),x=()=>{i.value=window.innerWidth};e.onMounted(()=>{window.addEventListener("resize",x)}),e.onUnmounted(()=>{window.removeEventListener("resize",x)}),e.watch(o,t=>{t&&a.value!==1&&(a.value=1)},{immediate:!0});const g=e.ref(null),p=e.ref(new Map),w=e.computed(()=>g.value?.resources||[]),k=e.computed(()=>w.value.filter(t=>t.isActive)),M=e.computed(()=>w.value.filter(t=>!t.isActive)),V=e.ref(null),S=e.ref(!1);e.watch(k,t=>{t.length>0&&!V.value&&(V.value=t[0].id)},{immediate:!0});const B=e.computed(()=>{if(!V.value)return k.value.length>0?[k.value[0]]:[];const t=k.value.find(l=>l.id===V.value);return t?[t]:k.value.length>0?[k.value[0]]:[]}),F=e.computed(()=>g.value?.pricingOptions?.find(l=>l.isDefault)?.duration||30),L=t=>{V.value=t};e.watch(r,()=>{$()});const P=e.computed(()=>{const t=r.value,l=new Date(t.year,t.month-1,t.day),f=l.toLocaleDateString("en-US",{weekday:"long"}).toUpperCase(),m=t.day,N=l.toLocaleDateString("en-US",{month:"short"}).toUpperCase();return{dayName:f,day:m,monthName:N,full:`${f} ${m} ${N}`}}),U=()=>{r.value=r.value.subtract({days:a.value})},q=()=>{r.value=r.value.add({days:a.value})},O=()=>{r.value=R.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(R.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())},d=t=>{const[l,f]=t.split(":").map(Number);return l*60+f},n=(t,l)=>(g.value?.exceptions||[]).find(m=>l>=m.startDate&&l<=m.endDate?m.resourceIds===null?!0:m.resourceIds?.includes(t):!1)||null,c=(t,l,f)=>{const m=n(t.id,f);if(m)return m.isClosed?[]:m.timeslots.map(s=>({startTime:s.startTime,endTime:s.endTime,isException:!0}));const N=l.getDay(),D=t.openingHours?.[N]||[];return D.length===0?[]:D.map(s=>({startTime:s.start,endTime:s.end,isException:!1}))},_=(t,l,f,m)=>{if(!g.value)return 0;const N=p.value.get(l);return N?N.filter(s=>s.resourceId===t).reduce((s,z)=>{const I=d(z.startTime),A=d(z.endTime),H=d(f),W=d(m);return I<W&&A>H?s+(z.reserved||0):s},0):0},T=e.computed(()=>{if(!g.value)return[];p.value.size;let t=[],l=[];for(let m=0;m<a.value;m++){const N=r.value.add({days:m});l.push(N)}const f=B.value.length>0?B.value:[];return f.length===0?[]:(l.forEach(m=>{let N=new Date(m.year,m.month-1,m.day);const D=`${m.year}-${String(m.month).padStart(2,"0")}-${String(m.day).padStart(2,"0")}`;f.forEach(s=>{const z=c(s,N,D);t=t.concat(z.map((I,A)=>{const H=_(s.id,D,I.startTime,I.endTime);return{id:`block-${D}-${s.id}-${A}`,title:g.value.serviceName,date:D,startTime:I.startTime,endTime:I.endTime,theme:s.color||"#3b82f6",bookings:H,maxBookings:s.capacity,isException:I.isException||!1,resourceId:s.id,resource:s,interval:s.interval||30,serviceDuration:F.value}}))})}),t)}),b=async()=>{g.value=await E.get(y.agendaCollection,v.value.id)},$=async()=>{const t=v.value.id,l=r.value;p.value.clear();const f=[];for(let m=0;m<a.value;m++){const N=l.add({days:m}),D=`${N.year}-${String(N.month).padStart(2,"0")}-${String(N.day).padStart(2,"0")}`,s=`${t}_${D}`;f.push(E.get(y.reservedSpotsCollection,s).then(z=>{if(z){let I=[];for(const A of k.value){const H=z?.[A.id]||{};Object.entries(H).forEach(([W,G])=>{const[Z,ee]=W.split("-");I.push({resourceId:A.id,startTime:Z,endTime:ee,reserved:G})})}p.value.set(D,I)}}).catch(()=>{}))}await Promise.all(f)};return b(),$(),e.watch(a,()=>{$()}),e.provide("agendaData",g),e.provide("activeDate",r),e.provide("viewMode",a),e.provide("events",T),e.provide("resources",B),e.provide("allResources",k),(t,l)=>{const f=e.resolveComponent("Button"),m=e.resolveComponent("SegmentedControlButton"),N=e.resolveComponent("SegmentedControl"),D=e.resolveComponent("Calendar");return e.openBlock(),e.createBlock(te._sfc_main,null,{default:e.withCtx(()=>[e.createElementVNode("div",xt,[e.createElementVNode("div",yt,[e.createElementVNode("div",kt,[e.createElementVNode("div",bt,[e.createElementVNode("div",_t,[e.createVNode(e.unref(C.CalendarDays),{size:20,class:"text-primary flex-shrink-0"}),e.createElementVNode("h2",Nt,e.toDisplayString(P.value.full),1)]),e.createElementVNode("p",Et,e.toDisplayString(g.value?.serviceName),1)]),o.value&&e.unref(h)("manage-reservations")?(e.openBlock(),e.createBlock(Q._sfc_main,{key:0})):e.createCommentVNode("",!0)]),e.createElementVNode("div",wt,[e.createElementVNode("div",Vt,[e.createVNode(f,{variant:"outline",size:"icon",class:"size-8 sm:size-9",onClick:U},{default:e.withCtx(()=>[e.createVNode(e.unref(C.ChevronLeft),{size:16})]),_:1}),e.createVNode(f,{variant:"outline",size:"sm",class:"h-8 sm:h-9 px-2 sm:px-3 text-xs sm:text-sm",onClick:O},{default:e.withCtx(()=>[...l[3]||(l[3]=[e.createTextVNode(" Today ",-1)])]),_:1}),e.createVNode(f,{variant:"outline",size:"icon",class:"size-8 sm:size-9",onClick:q},{default:e.withCtx(()=>[e.createVNode(e.unref(C.ChevronRight),{size:16})]),_:1})]),o.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(N,{key:0,modelValue:a.value,"onUpdate:modelValue":l[0]||(l[0]=s=>a.value=s)},{default:e.withCtx(()=>[e.createVNode(m,{value:1},{default:e.withCtx(()=>[...l[4]||(l[4]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"1 Day",-1)])]),_:1}),e.createVNode(m,{value:3},{default:e.withCtx(()=>[...l[5]||(l[5]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"3 Days",-1)])]),_:1}),e.createVNode(m,{value:7},{default:e.withCtx(()=>[...l[6]||(l[6]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"7 Days",-1)])]),_:1})]),_:1},8,["modelValue"])),!o.value&&e.unref(h)("manage-reservations")?(e.openBlock(),e.createBlock(Q._sfc_main,{key:1})):e.createCommentVNode("",!0)])]),o.value&&k.value.length>0?(e.openBlock(),e.createElementBlock("div",St,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.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":V.value===s.id,"bg-background hover:bg-muted":V.value!==s.id}]),onClick:z=>L(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:V.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,Ct))),128))])):e.createCommentVNode("",!0),e.createElementVNode("div",Bt,[e.createElementVNode("div",$t,[e.createVNode(D,{modelValue:r.value,"onUpdate:modelValue":l[1]||(l[1]=s=>r.value=s),"weekday-format":"short",class:"rounded-md border"},null,8,["modelValue"]),w.value.length>0?(e.openBlock(),e.createElementBlock("div",Dt,[l[7]||(l[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",Tt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.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":V.value===s.id,"opacity-50":V.value&&V.value!==s.id}]),onClick:z=>L(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",It,e.toDisplayString(s.name),1)]),e.createElementVNode("div",{class:e.normalizeClass(["size-2 rounded-full flex-shrink-0",V.value===s.id?"bg-primary":"bg-muted-foreground/30"])},null,2)],10,zt))),128)),M.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:l[2]||(l[2]=s=>S.value=!S.value)},[e.createVNode(e.unref(C.ChevronRight),{size:14,class:e.normalizeClass(["transition-transform",{"rotate-90":S.value}])},null,8,["class"]),e.createElementVNode("span",null,"Inactive ("+e.toDisplayString(M.value.length)+")",1)]),S.value?(e.openBlock(),e.createElementBlock("div",Rt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.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",Ut,[e.createElementVNode("div",jt,e.toDisplayString(s.name),1)])]))),128))])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0)]),e.createVNode(ht)])])]),_:1})}}});exports.default=Ft;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),R=require("./DateFormatter-DbtOLV0L.js"),C=require("lucide-vue-next"),te=require("./EditLayout.vue_vue_type_script_setup_true_lang-ozYrxb2g.js"),j=require("@oneclick.dev/cms-kit"),K=require("./ReservationDetailDialog.vue_vue_type_script_setup_true_lang-VWVIxIr6.js"),oe=require("./_plugin-vue_export-helper-BHFhmbuH.js"),Q=require("./NewReservationDialog.vue_vue_type_script_setup_true_lang-CqERfyYb.js"),ne={class:"mb-6"},re={class:"flex items-end gap-px h-24 bg-muted/30 rounded-lg p-2 overflow-visible"},se=["onClick"],ae={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"},le={class:"font-medium"},ie={class:"text-muted-foreground"},ce={class:"w-full flex-1 flex items-end justify-center"},de={key:1,class:"text-[10px] mt-1"},ue={key:0,class:"mt-2 text-sm text-muted-foreground flex items-center gap-2"},me={class:"font-medium text-foreground"},pe={class:"font-medium text-foreground"},fe=e.defineComponent({__name:"TimelineChart",props:{timeSlots:{},slotStats:{},selectedTimeSlot:{},maxSpots:{}},emits:["select","clear"],setup(u,{emit:h}){const v=h,y=r=>{v("select",r)},E=()=>{v("clear")};return(r,a)=>{const i=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",ne,[a[2]||(a[2]=e.createElementVNode("h3",{class:"font-semibold text-sm mb-2"},"Timeline",-1)),e.createElementVNode("div",re,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.timeSlots,o=>(e.openBlock(),e.createElementBlock("div",{key:o.startTime,class:"flex-1 min-w-0 flex flex-col items-center cursor-pointer group h-full relative",onClick:x=>y(o.startTime)},[e.createElementVNode("div",ae,[e.createElementVNode("div",le,e.toDisplayString(o.startTime),1),e.createElementVNode("div",ie,e.toDisplayString(u.slotStats[o.startTime]?.spots||0)+" spots",1)]),e.createElementVNode("div",ce,[e.createElementVNode("div",{class:e.normalizeClass(["w-full transition-all duration-200",[u.selectedTimeSlot===o.startTime?"bg-primary":u.slotStats[o.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:u.slotStats[o.startTime]?.spots>0?`${u.slotStats[o.startTime].spots/u.maxSpots*100}%`:"2px",minHeight:u.slotStats[o.startTime]?.spots>0?"4px":"2px"})},null,6)]),o.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":u.selectedTimeSlot===o.startTime}])},e.toDisplayString(o.label),3)):(e.openBlock(),e.createElementBlock("span",de," "))],8,se))),128))]),u.selectedTimeSlot?(e.openBlock(),e.createElementBlock("div",ue,[e.createVNode(i,{variant:"ghost",size:"icon",class:"h-6 w-6 p-0",onClick:E},{default:e.withCtx(()=>[e.createVNode(e.unref(C.X),{size:14})]),_:1}),e.createElementVNode("span",null,[a[0]||(a[0]=e.createTextVNode(" Showing ",-1)),e.createElementVNode("span",me,e.toDisplayString(u.slotStats[u.selectedTimeSlot]?.bookings||0),1),a[1]||(a[1]=e.createTextVNode(" bookings at ",-1)),e.createElementVNode("span",pe,e.toDisplayString(u.selectedTimeSlot),1)])])):e.createCommentVNode("",!0)])}}}),ve={class:"flex items-center justify-between mb-3"},ge={class:"font-semibold"},he={key:0,class:"text-muted-foreground font-normal"},xe={class:"relative mb-3"},ye={key:0,class:"flex items-center justify-center py-8"},ke={key:1,class:"text-center py-8 text-muted-foreground"},be={key:2,class:"space-y-2 max-h-80 overflow-y-auto"},_e=["onClick"],Ne={class:"flex items-start justify-between"},Ee={class:"flex-1"},we={class:"font-medium"},Ve={class:"text-sm text-muted-foreground"},Se={class:"text-sm text-muted-foreground"},Ce={class:"flex items-center gap-4"},Be={class:"flex items-center gap-2 mt-1 text-xs text-muted-foreground"},$e={class:"flex items-center gap-2 mt-1 text-xs text-muted-foreground"},De={class:"text-right"},Te={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"},ze={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"},Me={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"},Ie={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"},Le={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"},Re={key:5,class:"text-sm font-medium mt-1"},Ue=e.defineComponent({__name:"BookingsList",props:{orders:{},filteredOrders:{},isLoading:{type:Boolean},selectedTimeSlot:{},searchQuery:{}},emits:["update:searchQuery","refresh"],setup(u,{emit:h}){const v=h,y=e.ref(null),E=i=>{v("update:searchQuery",i)},r=()=>{v("update:searchQuery","")},a=()=>{v("refresh")};return(i,o)=>{const x=e.resolveComponent("Input"),g=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",ve,[e.createElementVNode("h3",ge,[o[0]||(o[0]=e.createTextVNode(" Bookings ",-1)),u.selectedTimeSlot||u.searchQuery?(e.openBlock(),e.createElementBlock("span",he," ("+e.toDisplayString(u.filteredOrders.length)+" of "+e.toDisplayString(u.orders.length)+") ",1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",xe,[e.createVNode(e.unref(C.Search),{size:16,class:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),e.createVNode(x,{"model-value":u.searchQuery,placeholder:"Search by name, email, or phone...",class:"pl-9 pr-9","onUpdate:modelValue":E},null,8,["model-value"]),u.searchQuery?(e.openBlock(),e.createBlock(g,{key:0,variant:"ghost",size:"icon",class:"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7",onClick:r},{default:e.withCtx(()=>[e.createVNode(e.unref(C.X),{size:14})]),_:1})):e.createCommentVNode("",!0)]),u.isLoading?(e.openBlock(),e.createElementBlock("div",ye,[...o[1]||(o[1]=[e.createElementVNode("div",{class:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"},null,-1)])])):u.filteredOrders.length===0?(e.openBlock(),e.createElementBlock("div",ke,e.toDisplayString(u.selectedTimeSlot?"No bookings for this time slot":"No bookings for this event"),1)):(e.openBlock(),e.createElementBlock("div",be,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.filteredOrders,p=>(e.openBlock(),e.createElementBlock("div",{key:p.res_id||p.id,class:"p-3 border rounded-lg hover:bg-muted/50 transition-colors",onClick:w=>e.unref(y).openDialog(p)},[e.createElementVNode("div",Ne,[e.createElementVNode("div",Ee,[e.createElementVNode("div",we,e.toDisplayString(p.customerInfo.firstName+" "+p.customerInfo.lastName||"Unknown Customer"),1),e.createElementVNode("div",Ve,e.toDisplayString(p.customerInfo.email),1),e.createElementVNode("div",Se,e.toDisplayString(p.customerInfo.phone),1),e.createElementVNode("div",Ce,[e.createElementVNode("div",Be,[e.createVNode(e.unref(C.Clock),{size:12}),e.createElementVNode("span",null,e.toDisplayString(p.startTime)+" - "+e.toDisplayString(p.endTime),1)]),e.createElementVNode("div",$e,[e.createVNode(e.unref(C.Users),{size:12}),e.createElementVNode("span",null,e.toDisplayString(p.spots),1)])])]),e.createElementVNode("div",De,[p.reservationStatus==="needs_approval"?(e.openBlock(),e.createElementBlock("span",Te,"Needs Approval")):p.reservationStatus==="approved"?(e.openBlock(),e.createElementBlock("span",ze,"Approved")):p.reservationStatus==="rejected"?(e.openBlock(),e.createElementBlock("span",Me,"Rejected")):p.reservationStatus==="cancelled"?(e.openBlock(),e.createElementBlock("span",Ie,"Cancelled")):(e.openBlock(),e.createElementBlock("span",Le,"Pending")),p.reservationPrice||p.reservationPrice===0?(e.openBlock(),e.createElementBlock("div",Re," €"+e.toDisplayString(p.reservationPrice.toFixed(2)),1)):e.createCommentVNode("",!0)])])],8,_e))),128))])),e.createVNode(K._sfc_main,{ref_key:"reservationDetailDialog",ref:y,onCancelled:a,onConfirmed:a,onRejected:a},null,512)])}}}),je={class:"flex items-center gap-4 mt-2 text-sm"},Fe={class:"flex items-center gap-1"},Pe={key:0,class:"flex items-center gap-1"},Oe={class:"flex items-center gap-1"},Ae={class:"py-4"},qe=e.defineComponent({__name:"EventDialog",props:{resources:{default:()=>[]}},setup(u,{expose:h}){const v=u,{config:y}=j.useModule(),{params:E}=j.useModuleRoute(),r=j.useFirebaseIntegration(y.project),a=e.ref(!1),i=e.ref(null),o=e.ref([]),x=e.ref(!1),g=e.ref(null),p=e.ref("");e.provide("event",i);const w=e.computed(()=>{if(!i.value)return[];const d=i.value.resource?.interval||60,n=[],[c,_]=i.value.startTime.split(":").map(Number),[T,b]=i.value.endTime.split(":").map(Number),$=c*60+_,t=T*60+b;for(let l=$;l<t;l+=d){const f=Math.floor(l/60),m=l%60,N=Math.min(l+d,t),D=Math.floor(N/60),s=N%60,z=`${f.toString().padStart(2,"0")}:${m.toString().padStart(2,"0")}`,I=`${D.toString().padStart(2,"0")}:${s.toString().padStart(2,"0")}`;n.push({startTime:z,endTime:I,label:z})}return n}),k=d=>{const n=d.getFullYear(),c=String(d.getMonth()+1).padStart(2,"0"),_=String(d.getDate()).padStart(2,"0");return`${n}-${c}-${_}`},M=e.computed(()=>{const d={};return w.value.forEach(n=>{d[n.startTime]={bookings:0,spots:0,orders:[]}}),o.value.forEach(n=>{w.value.forEach(c=>{n.startTime<c.endTime&&n.endTime>c.startTime&&(d[c.startTime].bookings++,d[c.startTime].spots+=n.spots||0,d[c.startTime].orders.push(n))})}),d}),V=e.computed(()=>Math.max(1,...Object.values(M.value).map(d=>d.spots))),S=e.computed(()=>{let d=o.value;return g.value&&(d=M.value[g.value]?.orders||[]),p.value.trim()&&(d=new K.Fuse(d,{keys:["customerInfo.firstName","customerInfo.lastName","customerInfo.email","customerInfo.phone"],threshold:.3,ignoreLocation:!0}).search(p.value).map(c=>c.item)),d}),B=e.computed(()=>({spots:o.value.reduce((d,n)=>d+(n.spots||0),0),bookings:o.value.length})),F=d=>{g.value===d?g.value=null:g.value=d},L=()=>{g.value=null},P=async d=>{a.value=!0,i.value=d,g.value=null,p.value="",await U()},U=async()=>{if(i.value){x.value=!0,o.value=[];try{const d=E.value.id,n=k(new Date(i.value.date)),c=new Set;v.resources?.forEach(b=>{const $=`${b.id}_${n}`;c.add($)});const _=await r.find(y.reservationsCollection,{filters:[{field:"agendaId",operator:"==",value:d},{field:"status",operator:"==",value:"confirmed"},{field:"flattenedReservationDates",operator:"array-contains-any",value:Array.from(c)}]});let T=[];_.forEach(b=>{(b.reservations?.filter(t=>t.date===n)||[]).forEach(t=>{const l=v.resources.find(f=>f.id===t.resourceId);(t.status==="approved"||t.status==="needs_approval")&&T.push({customerInfo:b.customerInfo,amountDue:b.amountDue,amountPaid:b.amountPaid,status:b.status,reservationStatus:t.status,subtotal:b.subtotal,total:b.total,discount:b.discount,id:b.id,res_id:t.id,resourceId:t.resourceId,spots:t.spots,date:n,startTime:t.timeslot?.startTime,endTime:t.timeslot?.endTime,reservationPrice:t.totalPrice,reservationBasePrice:t.basePrice,reservationAddOnsPrice:t.addOnsPrice,pricingOptionId:t.pricingOptionId,pricingOption:t.pricingOption,resourceName:l?.name||"Unknown",resourceColor:l?.color})})}),o.value=T.sort((b,$)=>b.startTime?.localeCompare($.startTime||"")||0)}catch(d){console.error("Error loading orders:",d),o.value=[]}finally{x.value=!1}}},q=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],O=["January","February","March","April","May","June","July","August","September","October","November","December"];return h({openDialog:P}),(d,n)=>{const c=e.resolveComponent("DialogTitle"),_=e.resolveComponent("DialogDescription"),T=e.resolveComponent("DialogHeader"),b=e.resolveComponent("Button"),$=e.resolveComponent("DialogFooter"),t=e.resolveComponent("DialogScrollContent"),l=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(l,{open:a.value,"onUpdate:open":n[2]||(n[2]=f=>a.value=f)},{default:e.withCtx(()=>[e.createVNode(t,{class:"sm:max-w-3xl"},{default:e.withCtx(()=>[e.createVNode(T,null,{default:e.withCtx(()=>[i.value?.date?(e.openBlock(),e.createBlock(c,{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(q[new Date(i.value.date).getUTCDay()])+" "+e.toDisplayString(O[new Date(i.value.date).getUTCMonth()])+" "+e.toDisplayString(new Date(i.value.date).getUTCDate())+", "+e.toDisplayString(new Date(i.value.date).getUTCFullYear()),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(_,null,{default:e.withCtx(()=>[e.createElementVNode("div",je,[e.createElementVNode("div",Fe,[e.createVNode(e.unref(C.Clock),{size:14}),e.createElementVNode("span",null,e.toDisplayString(i.value?.startTime)+" – "+e.toDisplayString(i.value?.endTime),1)]),i.value?.resource?(e.openBlock(),e.createElementBlock("div",Pe,[e.createElementVNode("div",{class:"w-4 h-4 rounded-full",style:e.normalizeStyle({backgroundColor:i.value.resource.color||"#6b7280"})},null,4),e.createElementVNode("span",null,e.toDisplayString(i.value.resource.name),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Oe,[e.createVNode(e.unref(C.Users),{size:14}),e.createElementVNode("span",null,e.toDisplayString(B.value.spots)+" spots in "+e.toDisplayString(B.value.bookings)+" reservations",1)])])]),_:1})]),_:1}),e.createElementVNode("div",Ae,[w.value.length>1?(e.openBlock(),e.createBlock(fe,{key:0,"time-slots":w.value,"slot-stats":M.value,"selected-time-slot":g.value,"max-spots":V.value,onSelect:F,onClear:L},null,8,["time-slots","slot-stats","selected-time-slot","max-spots"])):e.createCommentVNode("",!0),e.createVNode(Ue,{orders:o.value,"filtered-orders":S.value,"is-loading":x.value,"selected-time-slot":g.value,"search-query":p.value,"onUpdate:searchQuery":n[0]||(n[0]=f=>p.value=f),onRefresh:U},null,8,["orders","filtered-orders","is-loading","selected-time-slot","search-query"])]),e.createVNode($,null,{default:e.withCtx(()=>[e.createVNode(b,{variant:"outline",onClick:n[1]||(n[1]=f=>a.value=!1)},{default:e.withCtx(()=>[...n[3]||(n[3]=[e.createTextVNode("Close",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["open"])}}}),He={class:"flex-1 border-r shadow-sm overflow-hidden min-h-[1536px]"},We={class:"relative h-full min-h-[1536px]"},Qe={class:"divide-y divide-input/80 h-full flex flex-col min-h-[1536px] border-y border-input/80"},Xe={class:"absolute inset-0 pointer-events-none"},Ye={class:"relative mr-3 h-full ml-2"},Je=["onClick"],Ke={key:0,class:"absolute bottom-0 left-0 right-0 h-1 bg-black/20"},Ge={class:"flex items-start justify-between gap-2 mb-1"},Ze={class:"font-semibold text-sm leading-tight line-clamp-1 flex-1"},et={class:"flex items-center gap-1 shrink-0"},tt=["title"],ot={class:"font-medium"},X=e.defineComponent({__name:"EventTimeline",props:{date:{},events:{},firstDay:{type:Boolean,default:!1},resources:{default:()=>[]}},setup(u){const h=u,v=e.ref(null),y=a=>{const[i,o]=a.split(":").map(Number);return i*60+o};e.computed(()=>!h.events||!h.resources?[]:h.resources.map(a=>{const o=h.events.filter(x=>x.resourceId===a.id).map(x=>{const g=y(x.startTime),w=y(x.endTime)-g,k=g/1440*100,M=w/1440*100,V=(x.bookings??0)>0,S=x.maxBookings?(x.bookings??0)/x.maxBookings*100:0;return{...x,top:`${k}%`,height:`${M}%`,color:x.resource?.color||"#3b82f6",hasBookings:V,fillPercentage:S,isSmall:w<60}});return{resource:a,events:o}}));const E=e.computed(()=>h.events?h.events.map(a=>{const i=y(a.startTime),x=y(a.endTime)-i,g=i/1440*100,p=x/1440*100,w=(a.bookings??0)>0,k=a.maxBookings?(a.bookings??0)/a.maxBookings*100:0;return{...a,top:`${g}%`,height:`${p}%`,color:a.resource?.color||"#3b82f6",hasBookings:w,fillPercentage:k,isSmall:x<60}}):[]),r=Array.from({length:24},(a,i)=>({hour:i,label:`${i.toString().padStart(2,"0")}:00`}));return(a,i)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",He,[e.createElementVNode("div",We,[e.createElementVNode("div",Qe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),o=>(e.openBlock(),e.createElementBlock("div",{key:o.hour,class:"flex-1 flex transition-all duration-200"},[...i[0]||(i[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",Xe,[e.createElementVNode("div",Ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,style:e.normalizeStyle({top:o.top,height:o.height,opacity:o.hasBookings?"1":"0.5"}),class:"event-card absolute left-2 right-2 rounded-lg pointer-events-auto cursor-pointer group/event transition-all duration-200 hover:shadow-xl overflow-hidden",onClick:x=>v.value?.openDialog(o)},[e.createElementVNode("div",{style:e.normalizeStyle({backgroundColor:o.color}),class:"absolute inset-0 shadow-lg"},[o.maxBookings?(e.openBlock(),e.createElementBlock("div",Ke,[e.createElementVNode("div",{class:"h-full bg-white/40 transition-all duration-300",style:e.normalizeStyle({width:`${o.fillPercentage}%`})},null,4)])):e.createCommentVNode("",!0)],4),e.createElementVNode("div",{class:e.normalizeClass(["relative h-full p-3 flex flex-col",`${o.hasBookings?"text-white":"text-gray-600 dark:text-gray-100"}`])},[e.createElementVNode("div",Ge,[e.createElementVNode("h3",Ze,e.toDisplayString(o.title),1),e.createElementVNode("div",et,[o.resource?(e.openBlock(),e.createElementBlock("div",{key:0,class:"w-6 h-6 rounded-full flex items-center justify-center text-xs font-bold bg-white/30 backdrop-blur-sm text-white border border-white/40",title:o.resource.name},e.toDisplayString(o.resource.avatarLabel||o.resource.name.charAt(0).toUpperCase()),9,tt)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium",o.hasBookings?"bg-white text-black backdrop-blur-sm":"bg-black/10 backdrop-blur-sm"])},[e.createVNode(e.unref(C.Users),{size:12}),e.createElementVNode("span",null,e.toDisplayString(o.bookings),1)],2)])]),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-2 text-xs opacity-90 mt-auto",{"-translate-x-1 -translate-y-2 scale-80 origin-[0_0]":o.isSmall}])},[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-1 px-2 py-0.5 rounded backdrop-blur-sm",{"bg-black/10":!o.isSmall}])},[e.createVNode(e.unref(C.Clock),{size:10}),e.createElementVNode("span",ot,e.toDisplayString(o.startTime)+" – "+e.toDisplayString(o.endTime),1)],2)],2)],2),i[1]||(i[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,Je))),128))])])])]),e.createVNode(qe,{resources:u.resources,ref_key:"eventDialog",ref:v},null,8,["resources"])],64))}}),nt={class:"sticky left-0 mt-auto z-10 divide-y divide-border/50 h-full flex flex-col min-h-[1536px] bg-input"},rt={class:"flex-shrink-0 text-xs font-medium text-muted-foreground px-3 pb-3 border-r border-border/50 w-14"},st={class:"flex items-center gap-1.5"},Y=e.defineComponent({__name:"Event24hSidebar",setup(u){const h=Array.from({length:24},(v,y)=>({hour:y,label:`${y.toString().padStart(2,"0")}:00`}));return(v,y)=>(e.openBlock(),e.createElementBlock("div",nt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(h),E=>(e.openBlock(),e.createElementBlock("div",{key:E.hour,class:"flex-1 flex transition-all duration-200"},[e.createElementVNode("div",rt,[e.createElementVNode("div",st,[e.createElementVNode("span",{class:e.normalizeClass({"-translate-y-1/2":E.hour!==0})},e.toDisplayString(E.label),3)])])]))),128))]))}}),at={class:"absolute top-0 w-full pointer-events-none"},lt={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"},J=e.defineComponent({__name:"EventTimeIndicator",props:{currentDate:{type:Object,required:!1}},setup(u){const h=e.ref(Date.now());let v;e.onMounted(()=>{v=window.setInterval(()=>{h.value=Date.now()},1e3)}),e.onUnmounted(()=>{v&&clearInterval(v)});const y=e.computed(()=>{const r=new Date(h.value);return`${(r.getHours()*60+r.getMinutes()+r.getSeconds()/60)/1440*100}%`}),E=e.computed(()=>new Date(h.value).getFullYear()+"-"+(new Date(h.value).getMonth()+1).toString().padStart(2,"0")+"-"+new Date(h.value).getDate().toString().padStart(2,"0"));return(r,a)=>(e.openBlock(),e.createElementBlock("div",at,[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:y.value})},[a[0]||(a[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)),u.currentDate&&u.currentDate==E.value?(e.openBlock(),e.createElementBlock("div",lt," Now ")):e.createCommentVNode("",!0)],4)]))}}),it={key:0,class:"relative flex flex-1 min-w-0"},ct={key:1,class:"flex-1 min-w-0 relative"},dt={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"},ut={class:"flex pb-4 min-w-[200px]"},mt=["onClick"],pt={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"},ft={class:"text-xs text-muted-foreground font-medium group-hover:text-foreground/70 transition-colors"},vt={key:0,class:"absolute bottom-0 left-0 w-full h-1 bg-orange-500"},gt=e.defineComponent({__name:"EventView",setup(u){const h=e.inject("activeDate",e.ref(R.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(R.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()))),v=e.inject("viewMode",e.ref(1)),y=e.inject("events",e.ref([])),E=e.inject("resources",e.ref([])),r=e.ref(null),a=e.ref(!1),i=e.ref(!1);e.computed(()=>E.value.length>1);const o=e.computed(()=>{const n=[],c=h.value;for(let _=0;_<v.value;_++)n.push(c.add({days:_}));return n}),x=(n,c)=>{const _=`${n.year}-${String(n.month).padStart(2,"0")}-${String(n.day).padStart(2,"0")}`;return y.value?.filter(T=>T.date===_)||[]},g=n=>{const c=R.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(R.$14e0f24ef4ac5c92$export$aa8b41735afcabd2());return n.year===c.year&&n.month===c.month&&n.day===c.day},p=n=>{h.value=n,v.value=1};let w=null,k=null;const M=()=>{r.value&&(S(),r.value.scrollBy({left:-300,behavior:"smooth"}),k=window.setTimeout(()=>{w=window.setInterval(()=>{r.value&&r.value.scrollBy({left:-20,behavior:"auto"})},50)},300))},V=()=>{r.value&&(S(),r.value.scrollBy({left:300,behavior:"smooth"}),k=window.setTimeout(()=>{w=window.setInterval(()=>{r.value&&r.value.scrollBy({left:20,behavior:"auto"})},50)},300))},S=()=>{k&&(clearTimeout(k),k=null),w&&(clearInterval(w),w=null)},B=()=>{if(!r.value)return;const{scrollLeft:n,scrollWidth:c,clientWidth:_}=r.value;a.value=n>10,i.value=n<c-_-10},F=n=>{r.value&&Math.abs(n.deltaY)>Math.abs(n.deltaX)&&(n.preventDefault(),r.value.scrollBy({left:n.deltaY,behavior:"auto"}))},L=e.ref(!1),P=e.ref(0),U=e.ref(0),q=n=>{!r.value||v.value===1||n.target.closest(".event-card")||(L.value=!0,P.value=n.pageX,U.value=r.value.scrollLeft,r.value.style.userSelect="none",n.preventDefault())},O=n=>{if(!L.value||!r.value)return;const c=n.pageX,_=(P.value-c)*1.2;r.value.scrollLeft=U.value+_},d=()=>{r.value&&(L.value=!1,r.value.style.userSelect="")};return e.onMounted(()=>{r.value&&(r.value.addEventListener("scroll",B),r.value.addEventListener("wheel",F,{passive:!1}),e.nextTick(()=>{B(),setTimeout(B,50),setTimeout(B,150),setTimeout(B,300),setTimeout(B,500)})),document.addEventListener("mousemove",O),document.addEventListener("mouseup",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("mousemove",O),document.removeEventListener("mouseup",d)}),e.watch(v,()=>{v.value>1?e.nextTick(()=>{setTimeout(()=>{if(!r.value)return;const{scrollWidth:n,clientWidth:c}=r.value;n>c&&(i.value=!0,a.value=!1)},100)}):r.value&&(r.value.style.cursor="")}),e.onUnmounted(()=>{S(),r.value&&(r.value.removeEventListener("scroll",B),r.value.removeEventListener("wheel",F))}),(n,c)=>{const _=e.resolveComponent("Button"),T=e.resolveComponent("TooltipTrigger"),b=e.resolveComponent("TooltipContent"),$=e.resolveComponent("Tooltip");return e.unref(v)===1?(e.openBlock(),e.createElementBlock("div",it,[e.createVNode(Y),e.createVNode(J,{class:"h-full","current-date":e.unref(h)},null,8,["current-date"]),e.createVNode(X,{date:e.unref(h),events:x(e.unref(h)),resources:e.unref(E)},null,8,["date","events","resources"])])):(e.openBlock(),e.createElementBlock("div",ct,[e.unref(v)===7?(e.openBlock(),e.createElementBlock("div",dt,[e.createVNode(e.unref(C.ChevronLeft),{size:12}),c[0]||(c[0]=e.createElementVNode("span",null,"Scroll to view all days",-1)),e.createVNode(e.unref(C.ChevronRight),{size:12})])):e.createCommentVNode("",!0),a.value?(e.openBlock(),e.createBlock(_,{key:1,variant:"outline",size:"icon",onMousedown:M,onMouseup:S,onMouseleave:S,onTouchstart:M,onTouchend:S,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(C.ChevronLeft),{size:20})]),_:1})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createBlock(_,{key:2,variant:"outline",size:"icon",onMousedown:V,onMouseup:S,onMouseleave:S,onTouchstart:V,onTouchend:S,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(C.ChevronRight),{size:20})]),_:1})):e.createCommentVNode("",!0),e.createVNode(J,{class:"h-[calc(100%-164px)] 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",i.value?"opacity-100":"opacity-0"])},null,2),e.createElementVNode("div",{ref_key:"scrollContainer",ref:r,class:"absolute inset-0 overflow-x-auto overflow-y-visible",onScroll:B,onMousedown:q},[e.createElementVNode("div",ut,[e.createVNode(Y),c[5]||(c[5]=e.createElementVNode("div",{class:"absolute w-14 h-[125px] bg-input"},null,-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(t,l)=>(e.openBlock(),e.createElementBlock("div",{key:t.toString(),class:e.normalizeClass(["flex-shrink-0",{"min-w-[200px] w-[33.33%]":e.unref(v)===3,"min-w-[280px]":e.unref(v)===7}])},[e.createElementVNode("div",{onClick:f=>p(t),class:e.normalizeClass(["relative p-3 border cursor-pointer transition-all duration-200 group relative",g(t)?"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"])},[g(t)?(e.openBlock(),e.createElementBlock("div",pt,[...c[1]||(c[1]=[e.createElementVNode("div",{class:"w-1.5 h-1.5 bg-primary rounded-full animate-pulse"},null,-1),e.createElementVNode("span",{class:"text-[9px] font-bold text-primary uppercase tracking-wide"},"Today",-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["text-xs font-semibold uppercase tracking-wider transition-colors",g(t)?"text-primary group-hover:text-primary/80":"text-muted-foreground group-hover:text-foreground"])},e.toDisplayString(new Date(t.year,t.month-1,t.day).toLocaleDateString("en-US",{weekday:"short"})),3),e.createElementVNode("div",{class:e.normalizeClass(["text-2xl font-bold transition-colors",g(t)?"text-foreground":"text-foreground group-hover:text-primary"])},e.toDisplayString(t.day),3),e.createElementVNode("div",ft,e.toDisplayString(new Date(t.year,t.month-1,t.day).toLocaleDateString("en-US",{month:"long",year:"numeric"})),1),c[4]||(c[4]=e.createElementVNode("div",{class:"mt-2 pt-2 border-t border-border/0 group-hover:border-border/50 transition-all"},[e.createElementVNode("div",{class:"text-[10px] text-muted-foreground/0 group-hover:text-muted-foreground/100 uppercase tracking-wide transition-all"}," Click to view ")],-1)),e.createVNode($,null,{default:e.withCtx(()=>[e.createVNode(T,{"as-child":""},{default:e.withCtx(()=>[x(t).filter(f=>f.isException).length>0?(e.openBlock(),e.createBlock(e.unref(C.Asterisk),{key:0,class:"absolute top-3 right-3 size-4 text-orange-500"})):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(b,null,{default:e.withCtx(()=>[...c[2]||(c[2]=[e.createElementVNode("p",null," This day has exceptions applied to it. ",-1)])]),_:1})]),_:2},1024),e.createVNode($,null,{default:e.withCtx(()=>[e.createVNode(T,{"as-child":""},{default:e.withCtx(()=>[x(t).filter(f=>f.isException).length>0?(e.openBlock(),e.createElementBlock("div",vt)):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(b,null,{default:e.withCtx(()=>[...c[3]||(c[3]=[e.createElementVNode("p",null," This day has exceptions applied to it. ",-1)])]),_:1})]),_:2},1024)],10,mt),e.createVNode(X,{date:t,events:x(t),resources:e.unref(E)},null,8,["date","events","resources"])],2))),128))])],544)]))}}}),ht=oe._export_sfc(gt,[["__scopeId","data-v-99339cf2"]]),xt={class:"flex flex-col gap-2 md:gap-4 w-full h-full"},yt={class:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 px-1"},kt={class:"flex items-center justify-between sm:justify-start gap-4"},bt={class:"flex flex-col"},_t={class:"flex items-center gap-2"},Nt={class:"text-lg sm:text-2xl font-bold tracking-tight truncate"},Et={class:"text-xs sm:text-sm text-muted-foreground ml-7 truncate"},wt={class:"flex items-center justify-between sm:justify-end gap-2"},Vt={class:"flex items-center gap-1 sm:mr-2"},St={key:0,class:"flex items-center gap-2 px-1 overflow-x-auto pb-2 -mx-1 scrollbar-hide"},Ct=["onClick"],Bt={class:"flex gap-4 flex-1 min-h-0 md:min-h-[1700px]"},$t={class:"hidden md:flex flex-shrink-0 flex-col gap-4"},Dt={key:0,class:"rounded-md border p-3"},Tt={class:"space-y-1"},zt=["onClick"],Mt={class:"min-w-0 flex-1"},It={class:"text-sm font-medium truncate"},Lt={key:0,class:"pt-2 mt-2 border-t"},Rt={key:0,class:"mt-1 space-y-1"},Ut={class:"min-w-0 flex-1"},jt={class:"text-sm font-medium truncate text-muted-foreground"},Ft=e.defineComponent({__name:"agenda",setup(u){const{hasPermission:h}=j.useModulePermissions(),{params:v}=j.useModuleRoute(),{config:y}=j.useModule(),E=j.useFirebaseIntegration(y.project),r=e.ref(R.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(R.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())),a=e.ref(1),i=e.ref(typeof window<"u"?window.innerWidth:1024),o=e.computed(()=>i.value<768),x=()=>{i.value=window.innerWidth};e.onMounted(()=>{window.addEventListener("resize",x)}),e.onUnmounted(()=>{window.removeEventListener("resize",x)}),e.watch(o,t=>{t&&a.value!==1&&(a.value=1)},{immediate:!0});const g=e.ref(null),p=e.ref(new Map),w=e.computed(()=>g.value?.resources||[]),k=e.computed(()=>w.value.filter(t=>t.isActive)),M=e.computed(()=>w.value.filter(t=>!t.isActive)),V=e.ref(null),S=e.ref(!1);e.watch(k,t=>{t.length>0&&!V.value&&(V.value=t[0].id)},{immediate:!0});const B=e.computed(()=>{if(!V.value)return k.value.length>0?[k.value[0]]:[];const t=k.value.find(l=>l.id===V.value);return t?[t]:k.value.length>0?[k.value[0]]:[]}),F=e.computed(()=>g.value?.pricingOptions?.find(l=>l.isDefault)?.duration||30),L=t=>{V.value=t};e.watch(r,()=>{$()});const P=e.computed(()=>{const t=r.value,l=new Date(t.year,t.month-1,t.day),f=l.toLocaleDateString("en-US",{weekday:"long"}).toUpperCase(),m=t.day,N=l.toLocaleDateString("en-US",{month:"short"}).toUpperCase();return{dayName:f,day:m,monthName:N,full:`${f} ${m} ${N}`}}),U=()=>{r.value=r.value.subtract({days:a.value})},q=()=>{r.value=r.value.add({days:a.value})},O=()=>{r.value=R.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(R.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())},d=t=>{const[l,f]=t.split(":").map(Number);return l*60+f},n=(t,l)=>(g.value?.exceptions||[]).find(m=>l>=m.startDate&&l<=m.endDate?m.resourceIds===null?!0:m.resourceIds?.includes(t):!1)||null,c=(t,l,f)=>{const m=n(t.id,f);if(m)return m.isClosed?[]:m.timeslots.map(s=>({startTime:s.startTime,endTime:s.endTime,isException:!0}));const N=l.getDay(),D=t.openingHours?.[N]||[];return D.length===0?[]:D.map(s=>({startTime:s.start,endTime:s.end,isException:!1}))},_=(t,l,f,m)=>{if(!g.value)return 0;const N=p.value.get(l);return N?N.filter(s=>s.resourceId===t).reduce((s,z)=>{const I=d(z.startTime),A=d(z.endTime),H=d(f),W=d(m);return I<W&&A>H?s+(z.reserved||0):s},0):0},T=e.computed(()=>{if(!g.value)return[];p.value.size;let t=[],l=[];for(let m=0;m<a.value;m++){const N=r.value.add({days:m});l.push(N)}const f=B.value.length>0?B.value:[];return f.length===0?[]:(l.forEach(m=>{let N=new Date(m.year,m.month-1,m.day);const D=`${m.year}-${String(m.month).padStart(2,"0")}-${String(m.day).padStart(2,"0")}`;f.forEach(s=>{const z=c(s,N,D);t=t.concat(z.map((I,A)=>{const H=_(s.id,D,I.startTime,I.endTime);return{id:`block-${D}-${s.id}-${A}`,title:g.value.serviceName,date:D,startTime:I.startTime,endTime:I.endTime,theme:s.color||"#3b82f6",bookings:H,maxBookings:s.capacity,isException:I.isException||!1,resourceId:s.id,resource:s,interval:s.interval||30,serviceDuration:F.value}}))})}),t)}),b=async()=>{g.value=await E.get(y.agendaCollection,v.value.id)},$=async()=>{const t=v.value.id,l=r.value;p.value.clear();const f=[];for(let m=0;m<a.value;m++){const N=l.add({days:m}),D=`${N.year}-${String(N.month).padStart(2,"0")}-${String(N.day).padStart(2,"0")}`,s=`${t}_${D}`;f.push(E.get(y.reservedSpotsCollection,s).then(z=>{if(z){let I=[];for(const A of k.value){const H=z?.[A.id]||{};Object.entries(H).forEach(([W,G])=>{const[Z,ee]=W.split("-");I.push({resourceId:A.id,startTime:Z,endTime:ee,reserved:G})})}p.value.set(D,I)}}).catch(()=>{}))}await Promise.all(f)};return b(),$(),e.watch(a,()=>{$()}),e.provide("agendaData",g),e.provide("activeDate",r),e.provide("viewMode",a),e.provide("events",T),e.provide("resources",B),e.provide("allResources",k),(t,l)=>{const f=e.resolveComponent("Button"),m=e.resolveComponent("SegmentedControlButton"),N=e.resolveComponent("SegmentedControl"),D=e.resolveComponent("Calendar");return e.openBlock(),e.createBlock(te._sfc_main,null,{default:e.withCtx(()=>[e.createElementVNode("div",xt,[e.createElementVNode("div",yt,[e.createElementVNode("div",kt,[e.createElementVNode("div",bt,[e.createElementVNode("div",_t,[e.createVNode(e.unref(C.CalendarDays),{size:20,class:"text-primary flex-shrink-0"}),e.createElementVNode("h2",Nt,e.toDisplayString(P.value.full),1)]),e.createElementVNode("p",Et,e.toDisplayString(g.value?.serviceName),1)]),o.value&&e.unref(h)("manage-reservations")?(e.openBlock(),e.createBlock(Q._sfc_main,{key:0})):e.createCommentVNode("",!0)]),e.createElementVNode("div",wt,[e.createElementVNode("div",Vt,[e.createVNode(f,{variant:"outline",size:"icon",class:"size-8 sm:size-9",onClick:U},{default:e.withCtx(()=>[e.createVNode(e.unref(C.ChevronLeft),{size:16})]),_:1}),e.createVNode(f,{variant:"outline",size:"sm",class:"h-8 sm:h-9 px-2 sm:px-3 text-xs sm:text-sm",onClick:O},{default:e.withCtx(()=>[...l[3]||(l[3]=[e.createTextVNode(" Today ",-1)])]),_:1}),e.createVNode(f,{variant:"outline",size:"icon",class:"size-8 sm:size-9",onClick:q},{default:e.withCtx(()=>[e.createVNode(e.unref(C.ChevronRight),{size:16})]),_:1})]),o.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(N,{key:0,modelValue:a.value,"onUpdate:modelValue":l[0]||(l[0]=s=>a.value=s)},{default:e.withCtx(()=>[e.createVNode(m,{value:1},{default:e.withCtx(()=>[...l[4]||(l[4]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"1 Day",-1)])]),_:1}),e.createVNode(m,{value:3},{default:e.withCtx(()=>[...l[5]||(l[5]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"3 Days",-1)])]),_:1}),e.createVNode(m,{value:7},{default:e.withCtx(()=>[...l[6]||(l[6]=[e.createElementVNode("span",{class:"whitespace-nowrap"},"7 Days",-1)])]),_:1})]),_:1},8,["modelValue"])),!o.value&&e.unref(h)("manage-reservations")?(e.openBlock(),e.createBlock(Q._sfc_main,{key:1})):e.createCommentVNode("",!0)])]),o.value&&k.value.length>0?(e.openBlock(),e.createElementBlock("div",St,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.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":V.value===s.id,"bg-background hover:bg-muted":V.value!==s.id}]),onClick:z=>L(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:V.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,Ct))),128))])):e.createCommentVNode("",!0),e.createElementVNode("div",Bt,[e.createElementVNode("div",$t,[e.createVNode(D,{modelValue:r.value,"onUpdate:modelValue":l[1]||(l[1]=s=>r.value=s),"weekday-format":"short",class:"rounded-md border"},null,8,["modelValue"]),w.value.length>0?(e.openBlock(),e.createElementBlock("div",Dt,[l[7]||(l[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",Tt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.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":V.value===s.id,"opacity-50":V.value&&V.value!==s.id}]),onClick:z=>L(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",It,e.toDisplayString(s.name),1)]),e.createElementVNode("div",{class:e.normalizeClass(["size-2 rounded-full flex-shrink-0",V.value===s.id?"bg-primary":"bg-muted-foreground/30"])},null,2)],10,zt))),128)),M.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:l[2]||(l[2]=s=>S.value=!S.value)},[e.createVNode(e.unref(C.ChevronRight),{size:14,class:e.normalizeClass(["transition-transform",{"rotate-90":S.value}])},null,8,["class"]),e.createElementVNode("span",null,"Inactive ("+e.toDisplayString(M.value.length)+")",1)]),S.value?(e.openBlock(),e.createElementBlock("div",Rt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.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",Ut,[e.createElementVNode("div",jt,e.toDisplayString(s.name),1)])]))),128))])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0)]),e.createVNode(ht)])])]),_:1})}}});exports.default=Ft;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent as K, ref as k, reactive as Q, resolveComponent as s, openBlock as u, createBlock as v, withCtx as i, createVNode as t, createTextVNode as d, createElementVNode as a, createElementBlock as f, Fragment as R, renderList as U, toDisplayString as w, createCommentVNode as N, unref as A } from "vue";
|
|
2
|
-
import { _ as ee } from "./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { _ as ee } from "./EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs";
|
|
3
3
|
import { Pencil as te, Eye as ie, EyeOff as oe, Trash2 as le, PlusCircle as ne } from "lucide-vue-next";
|
|
4
4
|
import { useModuleRoute as se, useModule as ae, useFirebaseIntegration as de } from "@oneclick.dev/cms-kit";
|
|
5
5
|
const re = { class: "space-y-6 py-4" }, ue = { key: 0 }, me = { key: 1 }, pe = { class: "flex items-center gap-3" }, fe = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),P=require("./EditLayout.vue_vue_type_script_setup_true_lang-Czu6Dcde.js"),g=require("lucide-vue-next"),M=require("@oneclick.dev/cms-kit"),z={class:"space-y-6 py-4"},G={key:0},j={key:1},O={class:"flex items-center gap-3"},H={key:2,class:"grid gap-2"},W={class:"w-full flex justify-between items-center"},K={class:"flex items-center gap-2 ml-auto"},J=e.defineComponent({__name:"CustomerInformationFieldEditorDialog",emits:["add-field","update-field","remove-field"],setup(q,{expose:y,emit:f}){const v=f,s=e.ref(!1),n=e.ref("add"),l=e.reactive({id:"",fieldName:"",fieldDescription:"",fieldType:"text",required:!1,isNativeField:!1,visible:!0,options:[]}),b=[{value:"text",label:"Text Box"},{value:"checkbox",label:"Checkbox"},{value:"radio",label:"Radio Button"},{value:"select",label:"Select"}],N=o=>{n.value=o?"edit":"add",d.value=[],l.id=o?.id||"",l.fieldName=o?.fieldName||"",l.fieldDescription=o?.fieldDescription||"",l.fieldType=o?.fieldType||"text",l.required=o?.required||!1,l.isNativeField=o?.isNativeField||!1,l.options=o?.options||[],l.visible=o?.visible!==void 0?o.visible:!0,s.value=!0},T=()=>{s.value=!1,d.value=[]},_=()=>{k()&&(v("add-field",{...l}),s.value=!1)},I=()=>{k()&&(v("update-field",{...l}),s.value=!1)},F=()=>{v("remove-field",l.id),s.value=!1},d=e.ref([]),k=()=>(d.value=[],l.fieldName=l.fieldName.trim(),l.fieldName?!0:(d.value.push("Field name is required."),!1));return y({openDialog:N}),(o,t)=>{const r=e.resolveComponent("DialogTitle"),V=e.resolveComponent("DialogHeader"),m=e.resolveComponent("Label"),u=e.resolveComponent("Input"),B=e.resolveComponent("SelectValue"),E=e.resolveComponent("SelectTrigger"),x=e.resolveComponent("SelectItem"),S=e.resolveComponent("SelectContent"),h=e.resolveComponent("Select"),A=e.resolveComponent("TagsInputItemText"),C=e.resolveComponent("TagsInputItemDelete"),w=e.resolveComponent("TagsInputItem"),D=e.resolveComponent("TagsInputInput"),c=e.resolveComponent("TagsInput"),i=e.resolveComponent("Checkbox"),p=e.resolveComponent("Button"),L=e.resolveComponent("DialogFooter"),R=e.resolveComponent("DialogScrollContent"),$=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock($,{open:s.value,"onUpdate:open":t[5]||(t[5]=a=>s.value=a)},{default:e.withCtx(()=>[e.createVNode(R,{class:"sm:max-w-2xl"},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(r,null,{default:e.withCtx(()=>[...t[6]||(t[6]=[e.createTextVNode("Customer Information",-1)])]),_:1})]),_:1}),e.createElementVNode("div",z,[e.createElementVNode("div",null,[e.createVNode(m,{class:"text-bsmase font-normal mb-1.5",for:"customer-info-field-dialog-fieldname"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Field Name",-1)])]),_:1}),e.createVNode(u,{modelValue:l.fieldName,"onUpdate:modelValue":t[0]||(t[0]=a=>l.fieldName=a),id:"customer-info-field-dialog-fieldname"},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(m,{class:"text-sm font-normal mb-1.5",for:"customer-info-field-dialog-field-description"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("Field Description",-1)])]),_:1}),e.createVNode(u,{modelValue:l.fieldDescription,"onUpdate:modelValue":t[1]||(t[1]=a=>l.fieldDescription=a),id:"customer-info-field-dialog-field-description"},null,8,["modelValue"])]),l.isNativeField?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",G,[e.createVNode(m,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode("Field Type",-1)])]),_:1}),e.createVNode(h,{modelValue:l.fieldType,"onUpdate:modelValue":t[2]||(t[2]=a=>l.fieldType=a)},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(B,{placeholder:"Select field type"})]),_:1}),e.createVNode(S,null,{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(b,a=>e.createVNode(x,{key:a.value,value:a.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.label),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])])),l.fieldType==="select"||l.fieldType==="radio"?(e.openBlock(),e.createElementBlock("div",j,[e.createVNode(m,{class:"text-sm font-normal mb-1.5",for:"customer-info-field-dialog-field-new-option"},{default:e.withCtx(()=>[...t[10]||(t[10]=[e.createTextVNode("Options",-1)])]),_:1}),e.createVNode(c,{modelValue:l.options,"onUpdate:modelValue":t[3]||(t[3]=a=>l.options=a)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.options,a=>(e.openBlock(),e.createBlock(w,{key:a,value:a},{default:e.withCtx(()=>[e.createVNode(A),e.createVNode(C)]),_:1},8,["value"]))),128)),e.createVNode(D,{placeholder:"New option...",id:"customer-info-field-dialog-field-new-option"})]),_:1},8,["modelValue"])])):e.createCommentVNode("",!0),e.createElementVNode("div",O,[e.createVNode(i,{id:"customer-info-field-dialog-field-required",modelValue:l.required,"onUpdate:modelValue":t[4]||(t[4]=a=>l.required=a)},null,8,["modelValue"]),e.createVNode(m,{for:"customer-info-field-dialog-field-required",class:"text-base font-normal cursor-pointer"},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode(" Is this field mandatory? ",-1)])]),_:1})]),d.value.length>0?(e.openBlock(),e.createElementBlock("p",H,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(a,U)=>(e.openBlock(),e.createElementBlock("span",{key:U,class:"text-sm text-red-600 block"},e.toDisplayString(a),1))),128))])):e.createCommentVNode("",!0)]),e.createVNode(L,{class:"gap-2"},{default:e.withCtx(()=>[e.createElementVNode("div",W,[n.value==="edit"&&!l.isNativeField?(e.openBlock(),e.createBlock(p,{key:0,variant:"destructive",onClick:F},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode(" Remove Field ",-1)])]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("div",K,[e.createVNode(p,{variant:"outline",onClick:T},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),n.value==="add"?(e.openBlock(),e.createBlock(p,{key:0,onClick:_},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode(" Add Field ",-1)])]),_:1})):(e.openBlock(),e.createBlock(p,{key:1,onClick:I},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode(" Update Field ",-1)])]),_:1}))])])]),_:1})]),_:1})]),_:1},8,["open"])}}}),Q={key:0,class:"max-w-2xl"},X={key:0,class:"text-sm text-orange-500 mt-2"},Y={class:"space-y-3"},Z={class:"flex items-center justify-between rounded-lg border p-4 bg-card"},ee={class:"space-y-2"},te={class:"border rounded-md p-4 mb-4"},oe={class:"font-medium text-sm"},ne={class:"flex justify-start mt-8"},le=e.defineComponent({__name:"availability",setup(q){const{params:y}=M.useModuleRoute(),{config:f}=M.useModule(),v=M.useFirebaseIntegration(f.project),s=[{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}],n=e.reactive({minimumAdvanceNotice:{value:0,unit:"minutes"},serviceVisibility:60,maxTicketsPerReservation:"",customerInformationFields:[...s],needsApproval:!1}),l=e.ref(!1),b=e.ref(!0),N=e.ref(null),T=async()=>{l.value=!0;try{const o=y.value.id;if(!o)throw new Error("Missing agenda ID");await v.update(f.agendaCollection,o,{minimumAdvanceNotice:{value:Number(n.minimumAdvanceNotice?.value)||0,unit:n.minimumAdvanceNotice?.unit??"minutes"},serviceVisibility:Math.max(Number(n.serviceVisibility)||1,1),maxTicketsPerReservation:Math.max(Number(n.maxTicketsPerReservation)||0,0),customerInformationFields:n.customerInformationFields??[],needsApproval:n.needsApproval||!1})}catch(o){console.error("Error saving changes:",o)}finally{l.value=!1}},_=async o=>{delete o.isNativeField,o.fieldType!=="radio"&&o.fieldType!=="select"&&delete o.options;let t=Math.random().toString(36).substr(2,9);for(;n.customerInformationFields.find(r=>r.id===t);)t=Math.random().toString(36).substr(2,9);n.customerInformationFields.push({...o,id:t})},I=async o=>{o.isNativeField||delete o.isNativeField,o.fieldType!=="radio"&&o.fieldType!=="select"&&delete o.options;const t=n.customerInformationFields.findIndex(r=>r.id===o.id);t!==-1&&(n.customerInformationFields[t]={...o})},F=async o=>{n.customerInformationFields=n.customerInformationFields.filter(t=>t.id!==o)},d=async()=>{try{const o=await v.get(f.agendaCollection,y.value.id);o&&(n.minimumAdvanceNotice=o.minimumAdvanceNotice||{value:0,unit:"minutes"},n.serviceVisibility=o.serviceVisibility||60,n.maxTicketsPerReservation=Number(o.maxTicketsPerReservation)&&o.maxTicketsPerReservation>0?parseInt(o.maxTicketsPerReservation):"",n.customerInformationFields=o.customerInformationFields||[...s],n.needsApproval=o.needsApproval||!1)}catch(o){console.error("Error loading agenda data:",o)}finally{b.value=!1}},k=()=>{let o=Math.abs(n.minimumAdvanceNotice.value),t=n.minimumAdvanceNotice.unit;return o===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 ${o} ${t} after the slot has started.`};return d(),(o,t)=>{const r=e.resolveComponent("Label"),V=e.resolveComponent("InputGroupInput"),m=e.resolveComponent("Search"),u=e.resolveComponent("InputGroupAddon"),B=e.resolveComponent("SelectValue"),E=e.resolveComponent("SelectTrigger"),x=e.resolveComponent("SelectItem"),S=e.resolveComponent("SelectGroup"),h=e.resolveComponent("SelectContent"),A=e.resolveComponent("Select"),C=e.resolveComponent("InputGroup"),w=e.resolveComponent("Badge"),D=e.resolveComponent("Switch"),c=e.resolveComponent("Button");return e.openBlock(),e.createBlock(P._sfc_main,null,{default:e.withCtx(()=>[t[31]||(t[31]=e.createElementVNode("h1",{class:"text-lg font-medium mb-8"},"Availability Settings",-1)),b.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Q,[e.createElementVNode("div",null,[e.createVNode(r,{for:"lead-time",class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode(" Minimum Advance Notice - Lead Time (Optional) ",-1)])]),_:1}),e.createVNode(C,{class:"max-w-md"},{default:e.withCtx(()=>[e.createVNode(V,{placeholder:"0",id:"lead-time",modelValue:n.minimumAdvanceNotice.value,"onUpdate:modelValue":t[0]||(t[0]=i=>n.minimumAdvanceNotice.value=i),modelModifiers:{value:!0},type:"number",class:"no-spinner"},null,8,["modelValue"]),e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(m)]),_:1}),e.createVNode(u,{align:"inline-end"},{default:e.withCtx(()=>[e.createVNode(A,{modelValue:n.minimumAdvanceNotice.unit,"onUpdate:modelValue":t[1]||(t[1]=i=>n.minimumAdvanceNotice.unit=i)},{default:e.withCtx(()=>[e.createVNode(E,{class:"w-[180px] border-0 bg-transparent -mr-1.5"},{default:e.withCtx(()=>[e.createVNode(B)]),_:1}),e.createVNode(h,null,{default:e.withCtx(()=>[e.createVNode(S,null,{default:e.withCtx(()=>[e.createVNode(x,{value:"minutes"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode(" Minutes ",-1)])]),_:1}),e.createVNode(x,{value:"hours"},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode(" Hours ",-1)])]),_:1}),e.createVNode(x,{value:"days"},{default:e.withCtx(()=>[...t[10]||(t[10]=[e.createTextVNode(" Days ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),t[11]||(t[11]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-2"}," Set how far in advance a customer must book your slot. ",-1)),n.minimumAdvanceNotice.value<0?(e.openBlock(),e.createElementBlock("p",X,e.toDisplayString(k()),1)):e.createCommentVNode("",!0)]),t[27]||(t[27]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",null,[e.createVNode(r,{for:"service-visibility",class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode(" Service Visibility ",-1)])]),_:1}),e.createVNode(C,{class:"max-w-md"},{default:e.withCtx(()=>[e.createVNode(V,{id:"service-visibility",modelValue:n.serviceVisibility,"onUpdate:modelValue":t[2]||(t[2]=i=>n.serviceVisibility=i),modelModifiers:{number:!0},placeholder:"1",type:"number",class:"no-spinner",min:"1",onBlur:t[3]||(t[3]=i=>n.serviceVisibility=Math.max(n.serviceVisibility,1))},null,8,["modelValue"]),e.createVNode(u,{align:"inline-end"},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode(" days ",-1)])]),_:1})]),_:1}),t[14]||(t[14]=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[28]||(t[28]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",null,[e.createVNode(r,{for:"max-capacity",class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode(" Maximum Tickets Per Booking ",-1)])]),_:1}),e.createVNode(C,{class:"max-w-md"},{default:e.withCtx(()=>[e.createVNode(V,{placeholder:"∞",type:"number",id:"max-capacity",class:"no-spinner",min:"1",modelValue:n.maxTicketsPerReservation,"onUpdate:modelValue":t[4]||(t[4]=i=>n.maxTicketsPerReservation=i),modelModifiers:{number:!0}},null,8,["modelValue"]),e.createVNode(u,{align:"inline-end"},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode(" spots ",-1)])]),_:1})]),_:1}),t[17]||(t[17]=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[29]||(t[29]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",Y,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode("Booking Approval",-1)])]),_:1}),t[19]||(t[19]=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",Z,[e.createElementVNode("div",ee,[e.createVNode(r,{class:"text-sm font-semibold"},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("Enable Manual Approval",-1)])]),_:1}),t[23]||(t[23]=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)),n.needsApproval?(e.openBlock(),e.createBlock(w,{key:0},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode("Status: Manual Review",-1)])]),_:1})):(e.openBlock(),e.createBlock(w,{key:1,variant:"secondary"},{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createTextVNode("Status: Auto-Confirm",-1)])]),_:1}))]),e.createVNode(D,{modelValue:n.needsApproval,"onUpdate:modelValue":t[5]||(t[5]=i=>n.needsApproval=i)},null,8,["modelValue"])])]),t[30]||(t[30]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",null,[e.createVNode(r,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[24]||(t[24]=[e.createTextVNode(" Customer Information (Optional) ",-1)])]),_:1}),t[26]||(t[26]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mb-2"}," Collect additional details about your customer. ",-1)),e.createElementVNode("div",te,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.customerInformationFields,i=>(e.openBlock(),e.createElementBlock("div",{key:i.id,class:"flex items-center justify-between hover:bg-input/50 px-2 rounded"},[e.createElementVNode("div",null,[e.createElementVNode("p",oe,e.toDisplayString(i.fieldName),1)]),e.createElementVNode("div",null,[e.createVNode(c,{variant:"ghost",size:"icon",onClick:p=>N.value.openDialog(i),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(g.Pencil),{class:"size-4"})]),_:1},8,["onClick"]),e.createVNode(c,{variant:"ghost",size:"icon",onClick:p=>i.visible=!i.visible,class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[i.visible?(e.openBlock(),e.createBlock(e.unref(g.Eye),{key:0,class:"size-4"})):(e.openBlock(),e.createBlock(e.unref(g.EyeOff),{key:1,class:"size-4"}))]),_:2},1032,["onClick"]),e.createVNode(c,{variant:"ghost",size:"icon",disabled:i.isNativeField,onClick:p=>n.customerInformationFields=n.customerInformationFields.filter(L=>L.id!==i.id),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(g.Trash2),{class:"size-4"})]),_:1},8,["disabled","onClick"])])]))),128)),e.createVNode(c,{variant:"outline",class:"mt-4",onClick:t[6]||(t[6]=i=>N.value.openDialog())},{default:e.withCtx(()=>[e.createVNode(e.unref(g.PlusCircle),{class:"size-4"}),t[25]||(t[25]=e.createTextVNode(" Add New Field ",-1))]),_:1})]),e.createVNode(J,{ref_key:"customerInfoFieldDialog",ref:N,onAddField:_,onUpdateField:I,onRemoveField:F},null,512)]),e.createElementVNode("div",ne,[e.createVNode(c,{onClick:T,disabled:l.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.value?"Saving...":"Save Changes"),1)]),_:1},8,["disabled"])])]))]),_:1})}}});exports.default=le;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),P=require("./EditLayout.vue_vue_type_script_setup_true_lang-ozYrxb2g.js"),g=require("lucide-vue-next"),M=require("@oneclick.dev/cms-kit"),z={class:"space-y-6 py-4"},G={key:0},j={key:1},O={class:"flex items-center gap-3"},H={key:2,class:"grid gap-2"},W={class:"w-full flex justify-between items-center"},K={class:"flex items-center gap-2 ml-auto"},J=e.defineComponent({__name:"CustomerInformationFieldEditorDialog",emits:["add-field","update-field","remove-field"],setup(q,{expose:y,emit:f}){const v=f,s=e.ref(!1),n=e.ref("add"),l=e.reactive({id:"",fieldName:"",fieldDescription:"",fieldType:"text",required:!1,isNativeField:!1,visible:!0,options:[]}),b=[{value:"text",label:"Text Box"},{value:"checkbox",label:"Checkbox"},{value:"radio",label:"Radio Button"},{value:"select",label:"Select"}],N=o=>{n.value=o?"edit":"add",d.value=[],l.id=o?.id||"",l.fieldName=o?.fieldName||"",l.fieldDescription=o?.fieldDescription||"",l.fieldType=o?.fieldType||"text",l.required=o?.required||!1,l.isNativeField=o?.isNativeField||!1,l.options=o?.options||[],l.visible=o?.visible!==void 0?o.visible:!0,s.value=!0},T=()=>{s.value=!1,d.value=[]},_=()=>{k()&&(v("add-field",{...l}),s.value=!1)},I=()=>{k()&&(v("update-field",{...l}),s.value=!1)},F=()=>{v("remove-field",l.id),s.value=!1},d=e.ref([]),k=()=>(d.value=[],l.fieldName=l.fieldName.trim(),l.fieldName?!0:(d.value.push("Field name is required."),!1));return y({openDialog:N}),(o,t)=>{const r=e.resolveComponent("DialogTitle"),V=e.resolveComponent("DialogHeader"),m=e.resolveComponent("Label"),u=e.resolveComponent("Input"),B=e.resolveComponent("SelectValue"),E=e.resolveComponent("SelectTrigger"),x=e.resolveComponent("SelectItem"),S=e.resolveComponent("SelectContent"),h=e.resolveComponent("Select"),A=e.resolveComponent("TagsInputItemText"),C=e.resolveComponent("TagsInputItemDelete"),w=e.resolveComponent("TagsInputItem"),D=e.resolveComponent("TagsInputInput"),c=e.resolveComponent("TagsInput"),i=e.resolveComponent("Checkbox"),p=e.resolveComponent("Button"),L=e.resolveComponent("DialogFooter"),R=e.resolveComponent("DialogScrollContent"),$=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock($,{open:s.value,"onUpdate:open":t[5]||(t[5]=a=>s.value=a)},{default:e.withCtx(()=>[e.createVNode(R,{class:"sm:max-w-2xl"},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(r,null,{default:e.withCtx(()=>[...t[6]||(t[6]=[e.createTextVNode("Customer Information",-1)])]),_:1})]),_:1}),e.createElementVNode("div",z,[e.createElementVNode("div",null,[e.createVNode(m,{class:"text-bsmase font-normal mb-1.5",for:"customer-info-field-dialog-fieldname"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Field Name",-1)])]),_:1}),e.createVNode(u,{modelValue:l.fieldName,"onUpdate:modelValue":t[0]||(t[0]=a=>l.fieldName=a),id:"customer-info-field-dialog-fieldname"},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(m,{class:"text-sm font-normal mb-1.5",for:"customer-info-field-dialog-field-description"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("Field Description",-1)])]),_:1}),e.createVNode(u,{modelValue:l.fieldDescription,"onUpdate:modelValue":t[1]||(t[1]=a=>l.fieldDescription=a),id:"customer-info-field-dialog-field-description"},null,8,["modelValue"])]),l.isNativeField?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",G,[e.createVNode(m,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode("Field Type",-1)])]),_:1}),e.createVNode(h,{modelValue:l.fieldType,"onUpdate:modelValue":t[2]||(t[2]=a=>l.fieldType=a)},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(B,{placeholder:"Select field type"})]),_:1}),e.createVNode(S,null,{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(b,a=>e.createVNode(x,{key:a.value,value:a.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.label),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1},8,["modelValue"])])),l.fieldType==="select"||l.fieldType==="radio"?(e.openBlock(),e.createElementBlock("div",j,[e.createVNode(m,{class:"text-sm font-normal mb-1.5",for:"customer-info-field-dialog-field-new-option"},{default:e.withCtx(()=>[...t[10]||(t[10]=[e.createTextVNode("Options",-1)])]),_:1}),e.createVNode(c,{modelValue:l.options,"onUpdate:modelValue":t[3]||(t[3]=a=>l.options=a)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.options,a=>(e.openBlock(),e.createBlock(w,{key:a,value:a},{default:e.withCtx(()=>[e.createVNode(A),e.createVNode(C)]),_:1},8,["value"]))),128)),e.createVNode(D,{placeholder:"New option...",id:"customer-info-field-dialog-field-new-option"})]),_:1},8,["modelValue"])])):e.createCommentVNode("",!0),e.createElementVNode("div",O,[e.createVNode(i,{id:"customer-info-field-dialog-field-required",modelValue:l.required,"onUpdate:modelValue":t[4]||(t[4]=a=>l.required=a)},null,8,["modelValue"]),e.createVNode(m,{for:"customer-info-field-dialog-field-required",class:"text-base font-normal cursor-pointer"},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode(" Is this field mandatory? ",-1)])]),_:1})]),d.value.length>0?(e.openBlock(),e.createElementBlock("p",H,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(a,U)=>(e.openBlock(),e.createElementBlock("span",{key:U,class:"text-sm text-red-600 block"},e.toDisplayString(a),1))),128))])):e.createCommentVNode("",!0)]),e.createVNode(L,{class:"gap-2"},{default:e.withCtx(()=>[e.createElementVNode("div",W,[n.value==="edit"&&!l.isNativeField?(e.openBlock(),e.createBlock(p,{key:0,variant:"destructive",onClick:F},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode(" Remove Field ",-1)])]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("div",K,[e.createVNode(p,{variant:"outline",onClick:T},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),n.value==="add"?(e.openBlock(),e.createBlock(p,{key:0,onClick:_},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode(" Add Field ",-1)])]),_:1})):(e.openBlock(),e.createBlock(p,{key:1,onClick:I},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode(" Update Field ",-1)])]),_:1}))])])]),_:1})]),_:1})]),_:1},8,["open"])}}}),Q={key:0,class:"max-w-2xl"},X={key:0,class:"text-sm text-orange-500 mt-2"},Y={class:"space-y-3"},Z={class:"flex items-center justify-between rounded-lg border p-4 bg-card"},ee={class:"space-y-2"},te={class:"border rounded-md p-4 mb-4"},oe={class:"font-medium text-sm"},ne={class:"flex justify-start mt-8"},le=e.defineComponent({__name:"availability",setup(q){const{params:y}=M.useModuleRoute(),{config:f}=M.useModule(),v=M.useFirebaseIntegration(f.project),s=[{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}],n=e.reactive({minimumAdvanceNotice:{value:0,unit:"minutes"},serviceVisibility:60,maxTicketsPerReservation:"",customerInformationFields:[...s],needsApproval:!1}),l=e.ref(!1),b=e.ref(!0),N=e.ref(null),T=async()=>{l.value=!0;try{const o=y.value.id;if(!o)throw new Error("Missing agenda ID");await v.update(f.agendaCollection,o,{minimumAdvanceNotice:{value:Number(n.minimumAdvanceNotice?.value)||0,unit:n.minimumAdvanceNotice?.unit??"minutes"},serviceVisibility:Math.max(Number(n.serviceVisibility)||1,1),maxTicketsPerReservation:Math.max(Number(n.maxTicketsPerReservation)||0,0),customerInformationFields:n.customerInformationFields??[],needsApproval:n.needsApproval||!1})}catch(o){console.error("Error saving changes:",o)}finally{l.value=!1}},_=async o=>{delete o.isNativeField,o.fieldType!=="radio"&&o.fieldType!=="select"&&delete o.options;let t=Math.random().toString(36).substr(2,9);for(;n.customerInformationFields.find(r=>r.id===t);)t=Math.random().toString(36).substr(2,9);n.customerInformationFields.push({...o,id:t})},I=async o=>{o.isNativeField||delete o.isNativeField,o.fieldType!=="radio"&&o.fieldType!=="select"&&delete o.options;const t=n.customerInformationFields.findIndex(r=>r.id===o.id);t!==-1&&(n.customerInformationFields[t]={...o})},F=async o=>{n.customerInformationFields=n.customerInformationFields.filter(t=>t.id!==o)},d=async()=>{try{const o=await v.get(f.agendaCollection,y.value.id);o&&(n.minimumAdvanceNotice=o.minimumAdvanceNotice||{value:0,unit:"minutes"},n.serviceVisibility=o.serviceVisibility||60,n.maxTicketsPerReservation=Number(o.maxTicketsPerReservation)&&o.maxTicketsPerReservation>0?parseInt(o.maxTicketsPerReservation):"",n.customerInformationFields=o.customerInformationFields||[...s],n.needsApproval=o.needsApproval||!1)}catch(o){console.error("Error loading agenda data:",o)}finally{b.value=!1}},k=()=>{let o=Math.abs(n.minimumAdvanceNotice.value),t=n.minimumAdvanceNotice.unit;return o===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 ${o} ${t} after the slot has started.`};return d(),(o,t)=>{const r=e.resolveComponent("Label"),V=e.resolveComponent("InputGroupInput"),m=e.resolveComponent("Search"),u=e.resolveComponent("InputGroupAddon"),B=e.resolveComponent("SelectValue"),E=e.resolveComponent("SelectTrigger"),x=e.resolveComponent("SelectItem"),S=e.resolveComponent("SelectGroup"),h=e.resolveComponent("SelectContent"),A=e.resolveComponent("Select"),C=e.resolveComponent("InputGroup"),w=e.resolveComponent("Badge"),D=e.resolveComponent("Switch"),c=e.resolveComponent("Button");return e.openBlock(),e.createBlock(P._sfc_main,null,{default:e.withCtx(()=>[t[31]||(t[31]=e.createElementVNode("h1",{class:"text-lg font-medium mb-8"},"Availability Settings",-1)),b.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Q,[e.createElementVNode("div",null,[e.createVNode(r,{for:"lead-time",class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode(" Minimum Advance Notice - Lead Time (Optional) ",-1)])]),_:1}),e.createVNode(C,{class:"max-w-md"},{default:e.withCtx(()=>[e.createVNode(V,{placeholder:"0",id:"lead-time",modelValue:n.minimumAdvanceNotice.value,"onUpdate:modelValue":t[0]||(t[0]=i=>n.minimumAdvanceNotice.value=i),modelModifiers:{value:!0},type:"number",class:"no-spinner"},null,8,["modelValue"]),e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(m)]),_:1}),e.createVNode(u,{align:"inline-end"},{default:e.withCtx(()=>[e.createVNode(A,{modelValue:n.minimumAdvanceNotice.unit,"onUpdate:modelValue":t[1]||(t[1]=i=>n.minimumAdvanceNotice.unit=i)},{default:e.withCtx(()=>[e.createVNode(E,{class:"w-[180px] border-0 bg-transparent -mr-1.5"},{default:e.withCtx(()=>[e.createVNode(B)]),_:1}),e.createVNode(h,null,{default:e.withCtx(()=>[e.createVNode(S,null,{default:e.withCtx(()=>[e.createVNode(x,{value:"minutes"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode(" Minutes ",-1)])]),_:1}),e.createVNode(x,{value:"hours"},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode(" Hours ",-1)])]),_:1}),e.createVNode(x,{value:"days"},{default:e.withCtx(()=>[...t[10]||(t[10]=[e.createTextVNode(" Days ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),t[11]||(t[11]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-2"}," Set how far in advance a customer must book your slot. ",-1)),n.minimumAdvanceNotice.value<0?(e.openBlock(),e.createElementBlock("p",X,e.toDisplayString(k()),1)):e.createCommentVNode("",!0)]),t[27]||(t[27]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",null,[e.createVNode(r,{for:"service-visibility",class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode(" Service Visibility ",-1)])]),_:1}),e.createVNode(C,{class:"max-w-md"},{default:e.withCtx(()=>[e.createVNode(V,{id:"service-visibility",modelValue:n.serviceVisibility,"onUpdate:modelValue":t[2]||(t[2]=i=>n.serviceVisibility=i),modelModifiers:{number:!0},placeholder:"1",type:"number",class:"no-spinner",min:"1",onBlur:t[3]||(t[3]=i=>n.serviceVisibility=Math.max(n.serviceVisibility,1))},null,8,["modelValue"]),e.createVNode(u,{align:"inline-end"},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode(" days ",-1)])]),_:1})]),_:1}),t[14]||(t[14]=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[28]||(t[28]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",null,[e.createVNode(r,{for:"max-capacity",class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode(" Maximum Tickets Per Booking ",-1)])]),_:1}),e.createVNode(C,{class:"max-w-md"},{default:e.withCtx(()=>[e.createVNode(V,{placeholder:"∞",type:"number",id:"max-capacity",class:"no-spinner",min:"1",modelValue:n.maxTicketsPerReservation,"onUpdate:modelValue":t[4]||(t[4]=i=>n.maxTicketsPerReservation=i),modelModifiers:{number:!0}},null,8,["modelValue"]),e.createVNode(u,{align:"inline-end"},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode(" spots ",-1)])]),_:1})]),_:1}),t[17]||(t[17]=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[29]||(t[29]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",Y,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode("Booking Approval",-1)])]),_:1}),t[19]||(t[19]=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",Z,[e.createElementVNode("div",ee,[e.createVNode(r,{class:"text-sm font-semibold"},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("Enable Manual Approval",-1)])]),_:1}),t[23]||(t[23]=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)),n.needsApproval?(e.openBlock(),e.createBlock(w,{key:0},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode("Status: Manual Review",-1)])]),_:1})):(e.openBlock(),e.createBlock(w,{key:1,variant:"secondary"},{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createTextVNode("Status: Auto-Confirm",-1)])]),_:1}))]),e.createVNode(D,{modelValue:n.needsApproval,"onUpdate:modelValue":t[5]||(t[5]=i=>n.needsApproval=i)},null,8,["modelValue"])])]),t[30]||(t[30]=e.createElementVNode("hr",{class:"my-8"},null,-1)),e.createElementVNode("div",null,[e.createVNode(r,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[24]||(t[24]=[e.createTextVNode(" Customer Information (Optional) ",-1)])]),_:1}),t[26]||(t[26]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mb-2"}," Collect additional details about your customer. ",-1)),e.createElementVNode("div",te,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.customerInformationFields,i=>(e.openBlock(),e.createElementBlock("div",{key:i.id,class:"flex items-center justify-between hover:bg-input/50 px-2 rounded"},[e.createElementVNode("div",null,[e.createElementVNode("p",oe,e.toDisplayString(i.fieldName),1)]),e.createElementVNode("div",null,[e.createVNode(c,{variant:"ghost",size:"icon",onClick:p=>N.value.openDialog(i),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(g.Pencil),{class:"size-4"})]),_:1},8,["onClick"]),e.createVNode(c,{variant:"ghost",size:"icon",onClick:p=>i.visible=!i.visible,class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[i.visible?(e.openBlock(),e.createBlock(e.unref(g.Eye),{key:0,class:"size-4"})):(e.openBlock(),e.createBlock(e.unref(g.EyeOff),{key:1,class:"size-4"}))]),_:2},1032,["onClick"]),e.createVNode(c,{variant:"ghost",size:"icon",disabled:i.isNativeField,onClick:p=>n.customerInformationFields=n.customerInformationFields.filter(L=>L.id!==i.id),class:"active:scale-90 transition-transform duration-150"},{default:e.withCtx(()=>[e.createVNode(e.unref(g.Trash2),{class:"size-4"})]),_:1},8,["disabled","onClick"])])]))),128)),e.createVNode(c,{variant:"outline",class:"mt-4",onClick:t[6]||(t[6]=i=>N.value.openDialog())},{default:e.withCtx(()=>[e.createVNode(e.unref(g.PlusCircle),{class:"size-4"}),t[25]||(t[25]=e.createTextVNode(" Add New Field ",-1))]),_:1})]),e.createVNode(J,{ref_key:"customerInfoFieldDialog",ref:N,onAddField:_,onUpdateField:I,onRemoveField:F},null,512)]),e.createElementVNode("div",ne,[e.createVNode(c,{onClick:T,disabled:l.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.value?"Saving...":"Save Changes"),1)]),_:1},8,["disabled"])])]))]),_:1})}}});exports.default=le;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),M=require("./EditLayout.vue_vue_type_script_setup_true_lang-Czu6Dcde.js"),a=require("./DateFormatter-DbtOLV0L.js"),m=require("lucide-vue-next"),j=require("@oneclick.dev/cms-kit"),H={class:"space-y-6 py-4"},O={key:0},q={class:"space-y-2"},J={class:"flex items-center justify-center w-8 h-8 rounded-full bg-muted"},Y={key:0,class:"w-full h-full rounded-full bg-white scale-50"},K={class:"flex items-center justify-center w-8 h-8 rounded-full bg-muted"},G={key:0,class:"w-full h-full rounded-full bg-white scale-50"},Q={key:0,class:"pl-4 pt-2 space-y-1"},W=["onClick"],X={class:"min-w-0 flex-1"},Z={class:"text-sm font-medium truncate"},ee={key:0,class:"w-3 h-3 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},te={key:0,class:"text-xs text-amber-600 mt-2"},oe={class:"space-y-3"},ne={class:"flex items-center justify-center w-10 h-10 rounded-full bg-destructive/10"},le={key:0,class:"w-full h-full rounded-full bg-white scale-50"},ae={class:"flex items-center justify-center w-10 h-10 rounded-full bg-primary/10"},se={key:0,class:"w-full h-full rounded-full bg-white scale-50"},re={key:1},de={key:0,class:"text-center py-6 text-muted-foreground text-sm"},ce={key:1,class:"space-y-2 mb-3"},ie={class:"w-full flex justify-between items-center"},ue={class:"flex items-center gap-2 ml-auto"},me=e.defineComponent({__name:"ExceptionDialog",props:{resources:{}},emits:["add-exception","update-exception","remove-exception"],setup(L,{expose:N,emit:_}){const x=new a.$fb18d541ea1ad717$export$ad991b66133851cf("en-US",{dateStyle:"medium"}),k=L,c=_,i=e.ref(!1),v=e.ref("add"),g=e.ref(!1),s=e.ref({start:a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()),end:a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())}),o=e.reactive({id:"",startDate:"",endDate:"",isClosed:!1,timeslots:[],resourceIds:null}),p=e.computed({get:()=>o.resourceIds===null,set:n=>{n?o.resourceIds=null:o.resourceIds=[]}}),T=n=>{if(o.resourceIds===null)o.resourceIds=[n];else{const t=o.resourceIds.indexOf(n);t===-1?o.resourceIds.push(n):o.resourceIds.splice(t,1)}},$=e.computed(()=>!(!s.value.start||o.resourceIds!==null&&o.resourceIds.length===0)),S=n=>{v.value=n?"edit":"add",n?(o.id=n.id,o.startDate=n.startDate,o.endDate=n.endDate,o.isClosed=n.isClosed,o.timeslots=JSON.parse(JSON.stringify(n.timeslots)),o.resourceIds=n.resourceIds?[...n.resourceIds]:null,s.value={start:a.$fae977aafc393c5c$export$6b862160d295c8e(n.startDate),end:a.$fae977aafc393c5c$export$6b862160d295c8e(n.endDate)}):(o.id="",o.startDate="",o.endDate="",o.isClosed=!1,o.timeslots=[],o.resourceIds=null,s.value={start:a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()),end:a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())}),i.value=!0},B=()=>{i.value=!1},h=()=>{o.timeslots.push({id:Date.now(),startTime:"",endTime:""})},I=n=>{o.timeslots=o.timeslots.filter(t=>t.id!==n)},y=()=>{if(!s.value.start)return;const n=s.value.start.toString(),t=s.value.end?.toString()||n,r={id:Date.now().toString(),startDate:n,endDate:t,isClosed:o.isClosed,timeslots:o.isClosed?[]:[...o.timeslots],resourceIds:o.resourceIds};c("add-exception",r),i.value=!1},E=()=>{const n=s.value.start.toString(),t=s.value.end?.toString()||n,r={id:o.id,startDate:n,endDate:t,isClosed:o.isClosed,timeslots:o.isClosed?[]:[...o.timeslots],resourceIds:o.resourceIds};c("update-exception",r),i.value=!1},w=()=>{c("remove-exception",o.id),i.value=!1};return N({openDialog:S}),(n,t)=>{const r=e.resolveComponent("DialogTitle"),C=e.resolveComponent("DialogHeader"),V=e.resolveComponent("Label"),f=e.resolveComponent("Button"),z=e.resolveComponent("PopoverTrigger"),A=e.resolveComponent("RangeCalendar"),F=e.resolveComponent("PopoverContent"),R=e.resolveComponent("Popover"),D=e.resolveComponent("Input"),U=e.resolveComponent("Card"),d=e.resolveComponent("DialogFooter"),u=e.resolveComponent("DialogScrollContent"),P=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(P,{open:i.value,"onUpdate:open":t[6]||(t[6]=l=>i.value=l)},{default:e.withCtx(()=>[e.createVNode(u,{class:"sm:max-w-2xl"},{default:e.withCtx(()=>[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(r,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(v.value==="add"?"Add Exception":"Edit Exception"),1)]),_:1})]),_:1}),e.createElementVNode("div",H,[e.createElementVNode("div",null,[e.createVNode(V,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Select Date or Date Range",-1)])]),_:1}),e.createVNode(R,{open:g.value,"onUpdate:open":t[1]||(t[1]=l=>g.value=l)},{default:e.withCtx(()=>[e.createVNode(z,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(f,{variant:"outline",class:"w-full justify-start text-left font-normal"},{default:e.withCtx(()=>[e.createVNode(e.unref(m.Calendar),{class:"mr-2 h-4 w-4"}),s.value.start?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[s.value.end&&s.value.start.toString()!==s.value.end.toString()?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(x).format(s.value.start.toDate(e.unref(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)())))+" - "+e.toDisplayString(e.unref(x).format(s.value.end.toDate(e.unref(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)()))),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(x).format(s.value.start.toDate(e.unref(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)()))),1)],64))],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Pick a date ")],64))]),_:1})]),_:1}),e.createVNode(F,{class:"w-auto p-0"},{default:e.withCtx(()=>[e.createVNode(A,{modelValue:s.value,"onUpdate:modelValue":t[0]||(t[0]=l=>s.value=l),"initial-focus":"","number-of-months":2,"min-value":e.unref(a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3)(e.unref(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)())},null,8,["modelValue","min-value"])]),_:1})]),_:1},8,["open"])]),k.resources&&k.resources.length>0?(e.openBlock(),e.createElementBlock("div",O,[e.createVNode(V,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("Apply To",-1)])]),_:1}),e.createElementVNode("div",q,[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-3 p-3 border rounded-lg cursor-pointer hover:bg-accent transition-colors",p.value?"bg-accent border-primary":""]),onClick:t[2]||(t[2]=l=>p.value=!0)},[e.createElementVNode("div",J,[e.createVNode(e.unref(m.Users),{class:"h-4 w-4 text-muted-foreground"})]),t[9]||(t[9]=e.createElementVNode("div",{class:"flex-1"},[e.createElementVNode("div",{class:"font-medium text-sm"},"All Resources"),e.createElementVNode("div",{class:"text-xs text-muted-foreground"},"Exception applies to all resources")],-1)),e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full border-2",p.value?"border-primary bg-primary":"border-muted-foreground"])},[p.value?(e.openBlock(),e.createElementBlock("div",Y)):e.createCommentVNode("",!0)],2)],2),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-3 p-3 border rounded-lg cursor-pointer hover:bg-accent transition-colors",p.value?"":"bg-accent border-primary"]),onClick:t[3]||(t[3]=l=>p.value=!1)},[e.createElementVNode("div",K,[e.createVNode(e.unref(m.Users),{class:"h-4 w-4 text-muted-foreground"})]),t[10]||(t[10]=e.createElementVNode("div",{class:"flex-1"},[e.createElementVNode("div",{class:"font-medium text-sm"},"Specific Resources"),e.createElementVNode("div",{class:"text-xs text-muted-foreground"},"Select which resources this exception applies to")],-1)),e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full border-2",p.value?"border-muted-foreground":"border-primary bg-primary"])},[p.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",G))],2)],2),p.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Q,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.resources,l=>(e.openBlock(),e.createElementBlock("div",{key:l.id,class:e.normalizeClass(["flex items-center gap-2 p-2 rounded-md hover:bg-muted cursor-pointer transition-colors",{"bg-muted":o.resourceIds?.includes(l.id),"opacity-50":o.resourceIds&&o.resourceIds.length>0&&!o.resourceIds.includes(l.id)}]),onClick:b=>T(l.id)},[e.createElementVNode("div",{class:"size-6 rounded-full flex items-center justify-center text-white text-xs font-medium flex-shrink-0",style:e.normalizeStyle({backgroundColor:l.color||"#6b7280"})},e.toDisplayString(l.avatarLabel||l.name.charAt(0).toUpperCase()),5),e.createElementVNode("div",X,[e.createElementVNode("div",Z,e.toDisplayString(l.name),1)]),e.createElementVNode("div",{class:e.normalizeClass(["size-4 rounded border-2 flex items-center justify-center flex-shrink-0",o.resourceIds?.includes(l.id)?"border-primary bg-primary":"border-muted-foreground"])},[o.resourceIds?.includes(l.id)?(e.openBlock(),e.createElementBlock("svg",ee,[...t[11]||(t[11]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"3",d:"M5 13l4 4L19 7"},null,-1)])])):e.createCommentVNode("",!0)],2)],10,W))),128)),o.resourceIds?.length===0?(e.openBlock(),e.createElementBlock("p",te," ⚠️ Please select at least one resource ")):e.createCommentVNode("",!0)]))])])):e.createCommentVNode("",!0),e.createElementVNode("div",null,[e.createVNode(V,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Exception Type",-1)])]),_:1}),e.createElementVNode("div",oe,[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-3 p-3 border rounded-lg cursor-pointer hover:bg-accent transition-colors",o.isClosed?"bg-accent border-primary":""]),onClick:t[4]||(t[4]=l=>o.isClosed=!0)},[e.createElementVNode("div",ne,[e.createVNode(e.unref(m.BanIcon),{class:"h-5 w-5 text-destructive"})]),t[13]||(t[13]=e.createElementVNode("div",{class:"flex-1"},[e.createElementVNode("div",{class:"font-medium"},"Closed"),e.createElementVNode("div",{class:"text-sm text-muted-foreground"},"No appointments available during this period")],-1)),e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full border-2",o.isClosed?"border-primary bg-primary":"border-muted-foreground"])},[o.isClosed?(e.openBlock(),e.createElementBlock("div",le)):e.createCommentVNode("",!0)],2)],2),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-3 p-3 border rounded-lg cursor-pointer hover:bg-accent transition-colors",o.isClosed?"":"bg-accent border-primary"]),onClick:t[5]||(t[5]=l=>o.isClosed=!1)},[e.createElementVNode("div",ae,[e.createVNode(e.unref(m.Calendar),{class:"h-5 w-5 text-primary"})]),t[14]||(t[14]=e.createElementVNode("div",{class:"flex-1"},[e.createElementVNode("div",{class:"font-medium"},"Custom Hours"),e.createElementVNode("div",{class:"text-sm text-muted-foreground"},"Set specific time slots for this period")],-1)),e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full border-2",o.isClosed?"border-muted-foreground":"border-primary bg-primary"])},[o.isClosed?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",se))],2)],2)])]),o.isClosed?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",re,[e.createVNode(V,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("Time Slots",-1)])]),_:1}),e.createVNode(U,{class:"p-4"},{default:e.withCtx(()=>[o.timeslots.length===0?(e.openBlock(),e.createElementBlock("div",de,' No time slots added. Click "Add Time Slot" to create one. ')):(e.openBlock(),e.createElementBlock("div",ce,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.timeslots,l=>(e.openBlock(),e.createElementBlock("div",{key:l.id,class:"flex items-center gap-2"},[e.createVNode(D,{class:"w-32",modelValue:l.startTime,"onUpdate:modelValue":b=>l.startTime=b,type:"time"},null,8,["modelValue","onUpdate:modelValue"]),t[16]||(t[16]=e.createElementVNode("span",{class:"text-muted-foreground"},"to",-1)),e.createVNode(D,{class:"w-32",modelValue:l.endTime,"onUpdate:modelValue":b=>l.endTime=b,type:"time"},null,8,["modelValue","onUpdate:modelValue"]),e.createVNode(f,{variant:"ghost",size:"icon",onClick:b=>I(l.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(m.Trash2),{class:"size-4"})]),_:1},8,["onClick"])]))),128))])),e.createVNode(f,{onClick:h,variant:"outline",size:"sm",class:"w-full"},{default:e.withCtx(()=>[e.createVNode(e.unref(m.Plus),{class:"size-4 mr-1"}),t[17]||(t[17]=e.createTextVNode(" Add Time Slot ",-1))]),_:1})]),_:1})]))]),e.createVNode(d,{class:"gap-2"},{default:e.withCtx(()=>[e.createElementVNode("div",ie,[v.value==="edit"?(e.openBlock(),e.createBlock(f,{key:0,variant:"destructive",onClick:w},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode(" Remove Exception ",-1)])]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("div",ue,[e.createVNode(f,{variant:"outline",onClick:B},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),v.value==="add"?(e.openBlock(),e.createBlock(f,{key:0,onClick:y,disabled:!$.value},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode(" Add Exception ",-1)])]),_:1},8,["disabled"])):(e.openBlock(),e.createBlock(f,{key:1,onClick:E,disabled:!$.value},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode(" Update Exception ",-1)])]),_:1},8,["disabled"]))])])]),_:1})]),_:1})]),_:1},8,["open"])}}}),pe={class:"max-w-4xl space-y-6"},fe={key:0,class:"flex"},ve={key:1},xe={class:"space-y-3"},Ce={class:"flex items-start justify-between"},ke={class:"flex-1"},ge={class:"flex items-center gap-2 mb-1"},Ve={class:"font-medium"},Ne={key:0,class:"flex items-center gap-1.5 ml-6 mb-2"},ye=["title"],Ee={class:"text-sm text-muted-foreground ml-6"},be={key:0,class:"text-amber-600"},_e={key:1,class:"space-y-1"},$e={class:"flex flex-wrap gap-2"},Be={class:"flex gap-1"},he={key:4,class:"flex justify-end pt-4 border-t"},we=e.defineComponent({__name:"exceptions",setup(L){const N=new a.$fb18d541ea1ad717$export$ad991b66133851cf("en-US",{dateStyle:"medium"}),{params:_}=j.useModuleRoute(),{config:x}=j.useModule(),k=j.useFirebaseIntegration(x.project),c=e.ref([]),i=e.ref([]),v=e.ref(!1),g=e.ref(!0),s=e.ref(),o=n=>!n.resourceIds||n.resourceIds.length===0?null:i.value.filter(t=>n.resourceIds?.includes(t.id)),p=async()=>{try{g.value=!0;const n=await k.get(x.agendaCollection,_.value.id);c.value=n.exceptions||[],i.value=(n.resources||[]).filter(t=>t.isActive)}catch(n){console.error("Error loading exceptions:",n)}finally{g.value=!1}},T=(n,t)=>{const r=a.$fae977aafc393c5c$export$6b862160d295c8e(n),C=a.$fae977aafc393c5c$export$6b862160d295c8e(t);return n===t?N.format(r.toDate(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())):`${N.format(r.toDate(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()))} - ${N.format(C.toDate(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()))}`},$=n=>{c.value.push(n),y()},S=n=>{const t=c.value.findIndex(r=>r.id===n.id);t!==-1&&(c.value[t]=n),y()},B=n=>{c.value=c.value.filter(t=>t.id!==n),y()},h=()=>{s.value?.openDialog()},I=n=>{s.value?.openDialog(n)},y=async()=>{v.value=!0,await k.update(x.agendaCollection,_.value.id,{exceptions:c.value}),v.value=!1},E=e.computed(()=>[...c.value].sort((n,t)=>n.startDate.localeCompare(t.startDate))),w=n=>{const t=a.$fae977aafc393c5c$export$6b862160d295c8e(n),r=a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2());return t.compare(r)<0};return p(),(n,t)=>{const r=e.resolveComponent("Button"),C=e.resolveComponent("Badge"),V=e.resolveComponent("Card"),f=e.resolveComponent("Spinner"),z=e.resolveComponent("EmptyMedia"),A=e.resolveComponent("EmptyTitle"),F=e.resolveComponent("EmptyDescription"),R=e.resolveComponent("EmptyHeader"),D=e.resolveComponent("EmptyContent"),U=e.resolveComponent("Empty");return e.openBlock(),e.createBlock(M._sfc_main,null,{default:e.withCtx(()=>[t[10]||(t[10]=e.createElementVNode("h1",{class:"text-lg font-medium mb-2"},"Exception Management",-1)),t[11]||(t[11]=e.createElementVNode("p",{class:"mb-6 text-muted-foreground text-sm"}," Create exceptions to override your regular schedule. You can close specific dates or set custom hours for special occasions. ",-1)),e.createElementVNode("div",pe,[E.value.length>0?(e.openBlock(),e.createElementBlock("div",fe,[e.createVNode(r,{onClick:h},{default:e.withCtx(()=>[e.createVNode(e.unref(m.Plus),{class:"size-4 mr-1"}),t[0]||(t[0]=e.createTextVNode(" Add Exception ",-1))]),_:1})])):e.createCommentVNode("",!0),E.value.length>0?(e.openBlock(),e.createElementBlock("div",ve,[t[5]||(t[5]=e.createElementVNode("h2",{class:"text-base font-medium mb-3"},"Active Exceptions",-1)),e.createElementVNode("div",xe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.value,d=>(e.openBlock(),e.createBlock(V,{key:d.id,class:e.normalizeClass(["p-4",w(d.endDate)?"opacity-60":""])},{default:e.withCtx(()=>[e.createElementVNode("div",Ce,[e.createElementVNode("div",ke,[e.createElementVNode("div",ge,[d.isClosed?(e.openBlock(),e.createBlock(e.unref(m.BanIcon),{key:0,class:"h-4 w-4 text-destructive"})):(e.openBlock(),e.createBlock(e.unref(m.Calendar),{key:1,class:"h-4 w-4 text-primary"})),e.createElementVNode("h3",Ve,e.toDisplayString(T(d.startDate,d.endDate)),1),w(d.endDate)?(e.openBlock(),e.createBlock(C,{key:2,variant:"secondary",class:"text-xs"},{default:e.withCtx(()=>[...t[1]||(t[1]=[e.createTextVNode(" Past ",-1)])]),_:1})):e.createCommentVNode("",!0)]),i.value.length>0?(e.openBlock(),e.createElementBlock("div",Ne,[o(d)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(o(d),u=>(e.openBlock(),e.createElementBlock("div",{key:u.id,class:"size-5 rounded-full flex items-center justify-center text-white text-[10px] font-medium",style:e.normalizeStyle({backgroundColor:u.color||"#6b7280"}),title:u.name},e.toDisplayString(u.avatarLabel||u.name.charAt(0).toUpperCase()),13,ye))),128)):(e.openBlock(),e.createBlock(C,{key:1,variant:"outline",class:"text-xs"},{default:e.withCtx(()=>[...t[2]||(t[2]=[e.createTextVNode(" All Resources ",-1)])]),_:1}))])):e.createCommentVNode("",!0),e.createElementVNode("div",Ee,[d.isClosed?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Closed - No appointments available ")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[d.timeslots.length===0?(e.openBlock(),e.createElementBlock("div",be," ⚠️ No time slots defined ")):(e.openBlock(),e.createElementBlock("div",_e,[t[3]||(t[3]=e.createElementVNode("div",{class:"font-medium text-foreground"},"Custom Hours:",-1)),e.createElementVNode("div",$e,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.timeslots,(u,P)=>(e.openBlock(),e.createBlock(C,{key:P,variant:"outline",class:"font-mono text-xs"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.startTime)+" - "+e.toDisplayString(u.endTime),1)]),_:2},1024))),128))])]))],64))])]),e.createElementVNode("div",Be,[e.createVNode(r,{variant:"ghost",onClick:u=>I(d)},{default:e.withCtx(()=>[...t[4]||(t[4]=[e.createTextVNode(" Edit ",-1)])]),_:1},8,["onClick"]),e.createVNode(r,{variant:"ghost",size:"icon",onClick:u=>B(d.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(m.Trash2),{class:"size-4 text-destructive"})]),_:1},8,["onClick"])])])]),_:2},1032,["class"]))),128))])])):g.value?(e.openBlock(),e.createBlock(f,{key:2,class:"my-8 size-8"})):(e.openBlock(),e.createBlock(U,{key:3,class:"border border-dashed"},{default:e.withCtx(()=>[e.createVNode(R,null,{default:e.withCtx(()=>[e.createVNode(z,{variant:"icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(m.CalendarPlus))]),_:1}),e.createVNode(A,null,{default:e.withCtx(()=>[...t[6]||(t[6]=[e.createTextVNode("No Exceptions Created",-1)])]),_:1}),e.createVNode(F,null,{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode(' Your agenda runs smoothly without any exceptions. Click "Add Exception" to create one. ',-1)])]),_:1})]),_:1}),e.createVNode(D,null,{default:e.withCtx(()=>[e.createVNode(r,{variant:"outline",size:"sm",onClick:h},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode(" Add Exception ",-1)])]),_:1})]),_:1})]),_:1})),v.value?(e.openBlock(),e.createElementBlock("div",he,[...t[9]||(t[9]=[e.createElementVNode("span",null,"Saving...",-1)])])):e.createCommentVNode("",!0)]),e.createVNode(me,{ref_key:"exceptionDialogRef",ref:s,resources:i.value,onAddException:$,onUpdateException:S,onRemoveException:B},null,8,["resources"])]),_:1})}}});exports.default=we;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),M=require("./EditLayout.vue_vue_type_script_setup_true_lang-ozYrxb2g.js"),a=require("./DateFormatter-DbtOLV0L.js"),m=require("lucide-vue-next"),j=require("@oneclick.dev/cms-kit"),H={class:"space-y-6 py-4"},O={key:0},q={class:"space-y-2"},J={class:"flex items-center justify-center w-8 h-8 rounded-full bg-muted"},Y={key:0,class:"w-full h-full rounded-full bg-white scale-50"},K={class:"flex items-center justify-center w-8 h-8 rounded-full bg-muted"},G={key:0,class:"w-full h-full rounded-full bg-white scale-50"},Q={key:0,class:"pl-4 pt-2 space-y-1"},W=["onClick"],X={class:"min-w-0 flex-1"},Z={class:"text-sm font-medium truncate"},ee={key:0,class:"w-3 h-3 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},te={key:0,class:"text-xs text-amber-600 mt-2"},oe={class:"space-y-3"},ne={class:"flex items-center justify-center w-10 h-10 rounded-full bg-destructive/10"},le={key:0,class:"w-full h-full rounded-full bg-white scale-50"},ae={class:"flex items-center justify-center w-10 h-10 rounded-full bg-primary/10"},se={key:0,class:"w-full h-full rounded-full bg-white scale-50"},re={key:1},de={key:0,class:"text-center py-6 text-muted-foreground text-sm"},ce={key:1,class:"space-y-2 mb-3"},ie={class:"w-full flex justify-between items-center"},ue={class:"flex items-center gap-2 ml-auto"},me=e.defineComponent({__name:"ExceptionDialog",props:{resources:{}},emits:["add-exception","update-exception","remove-exception"],setup(L,{expose:N,emit:_}){const x=new a.$fb18d541ea1ad717$export$ad991b66133851cf("en-US",{dateStyle:"medium"}),k=L,c=_,i=e.ref(!1),v=e.ref("add"),g=e.ref(!1),s=e.ref({start:a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()),end:a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())}),o=e.reactive({id:"",startDate:"",endDate:"",isClosed:!1,timeslots:[],resourceIds:null}),p=e.computed({get:()=>o.resourceIds===null,set:n=>{n?o.resourceIds=null:o.resourceIds=[]}}),T=n=>{if(o.resourceIds===null)o.resourceIds=[n];else{const t=o.resourceIds.indexOf(n);t===-1?o.resourceIds.push(n):o.resourceIds.splice(t,1)}},$=e.computed(()=>!(!s.value.start||o.resourceIds!==null&&o.resourceIds.length===0)),S=n=>{v.value=n?"edit":"add",n?(o.id=n.id,o.startDate=n.startDate,o.endDate=n.endDate,o.isClosed=n.isClosed,o.timeslots=JSON.parse(JSON.stringify(n.timeslots)),o.resourceIds=n.resourceIds?[...n.resourceIds]:null,s.value={start:a.$fae977aafc393c5c$export$6b862160d295c8e(n.startDate),end:a.$fae977aafc393c5c$export$6b862160d295c8e(n.endDate)}):(o.id="",o.startDate="",o.endDate="",o.isClosed=!1,o.timeslots=[],o.resourceIds=null,s.value={start:a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()),end:a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())}),i.value=!0},B=()=>{i.value=!1},h=()=>{o.timeslots.push({id:Date.now(),startTime:"",endTime:""})},I=n=>{o.timeslots=o.timeslots.filter(t=>t.id!==n)},y=()=>{if(!s.value.start)return;const n=s.value.start.toString(),t=s.value.end?.toString()||n,r={id:Date.now().toString(),startDate:n,endDate:t,isClosed:o.isClosed,timeslots:o.isClosed?[]:[...o.timeslots],resourceIds:o.resourceIds};c("add-exception",r),i.value=!1},E=()=>{const n=s.value.start.toString(),t=s.value.end?.toString()||n,r={id:o.id,startDate:n,endDate:t,isClosed:o.isClosed,timeslots:o.isClosed?[]:[...o.timeslots],resourceIds:o.resourceIds};c("update-exception",r),i.value=!1},w=()=>{c("remove-exception",o.id),i.value=!1};return N({openDialog:S}),(n,t)=>{const r=e.resolveComponent("DialogTitle"),C=e.resolveComponent("DialogHeader"),V=e.resolveComponent("Label"),f=e.resolveComponent("Button"),z=e.resolveComponent("PopoverTrigger"),A=e.resolveComponent("RangeCalendar"),F=e.resolveComponent("PopoverContent"),R=e.resolveComponent("Popover"),D=e.resolveComponent("Input"),U=e.resolveComponent("Card"),d=e.resolveComponent("DialogFooter"),u=e.resolveComponent("DialogScrollContent"),P=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(P,{open:i.value,"onUpdate:open":t[6]||(t[6]=l=>i.value=l)},{default:e.withCtx(()=>[e.createVNode(u,{class:"sm:max-w-2xl"},{default:e.withCtx(()=>[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(r,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(v.value==="add"?"Add Exception":"Edit Exception"),1)]),_:1})]),_:1}),e.createElementVNode("div",H,[e.createElementVNode("div",null,[e.createVNode(V,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Select Date or Date Range",-1)])]),_:1}),e.createVNode(R,{open:g.value,"onUpdate:open":t[1]||(t[1]=l=>g.value=l)},{default:e.withCtx(()=>[e.createVNode(z,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(f,{variant:"outline",class:"w-full justify-start text-left font-normal"},{default:e.withCtx(()=>[e.createVNode(e.unref(m.Calendar),{class:"mr-2 h-4 w-4"}),s.value.start?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[s.value.end&&s.value.start.toString()!==s.value.end.toString()?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(x).format(s.value.start.toDate(e.unref(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)())))+" - "+e.toDisplayString(e.unref(x).format(s.value.end.toDate(e.unref(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)()))),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(x).format(s.value.start.toDate(e.unref(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)()))),1)],64))],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Pick a date ")],64))]),_:1})]),_:1}),e.createVNode(F,{class:"w-auto p-0"},{default:e.withCtx(()=>[e.createVNode(A,{modelValue:s.value,"onUpdate:modelValue":t[0]||(t[0]=l=>s.value=l),"initial-focus":"","number-of-months":2,"min-value":e.unref(a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3)(e.unref(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)())},null,8,["modelValue","min-value"])]),_:1})]),_:1},8,["open"])]),k.resources&&k.resources.length>0?(e.openBlock(),e.createElementBlock("div",O,[e.createVNode(V,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("Apply To",-1)])]),_:1}),e.createElementVNode("div",q,[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-3 p-3 border rounded-lg cursor-pointer hover:bg-accent transition-colors",p.value?"bg-accent border-primary":""]),onClick:t[2]||(t[2]=l=>p.value=!0)},[e.createElementVNode("div",J,[e.createVNode(e.unref(m.Users),{class:"h-4 w-4 text-muted-foreground"})]),t[9]||(t[9]=e.createElementVNode("div",{class:"flex-1"},[e.createElementVNode("div",{class:"font-medium text-sm"},"All Resources"),e.createElementVNode("div",{class:"text-xs text-muted-foreground"},"Exception applies to all resources")],-1)),e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full border-2",p.value?"border-primary bg-primary":"border-muted-foreground"])},[p.value?(e.openBlock(),e.createElementBlock("div",Y)):e.createCommentVNode("",!0)],2)],2),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-3 p-3 border rounded-lg cursor-pointer hover:bg-accent transition-colors",p.value?"":"bg-accent border-primary"]),onClick:t[3]||(t[3]=l=>p.value=!1)},[e.createElementVNode("div",K,[e.createVNode(e.unref(m.Users),{class:"h-4 w-4 text-muted-foreground"})]),t[10]||(t[10]=e.createElementVNode("div",{class:"flex-1"},[e.createElementVNode("div",{class:"font-medium text-sm"},"Specific Resources"),e.createElementVNode("div",{class:"text-xs text-muted-foreground"},"Select which resources this exception applies to")],-1)),e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full border-2",p.value?"border-muted-foreground":"border-primary bg-primary"])},[p.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",G))],2)],2),p.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Q,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.resources,l=>(e.openBlock(),e.createElementBlock("div",{key:l.id,class:e.normalizeClass(["flex items-center gap-2 p-2 rounded-md hover:bg-muted cursor-pointer transition-colors",{"bg-muted":o.resourceIds?.includes(l.id),"opacity-50":o.resourceIds&&o.resourceIds.length>0&&!o.resourceIds.includes(l.id)}]),onClick:b=>T(l.id)},[e.createElementVNode("div",{class:"size-6 rounded-full flex items-center justify-center text-white text-xs font-medium flex-shrink-0",style:e.normalizeStyle({backgroundColor:l.color||"#6b7280"})},e.toDisplayString(l.avatarLabel||l.name.charAt(0).toUpperCase()),5),e.createElementVNode("div",X,[e.createElementVNode("div",Z,e.toDisplayString(l.name),1)]),e.createElementVNode("div",{class:e.normalizeClass(["size-4 rounded border-2 flex items-center justify-center flex-shrink-0",o.resourceIds?.includes(l.id)?"border-primary bg-primary":"border-muted-foreground"])},[o.resourceIds?.includes(l.id)?(e.openBlock(),e.createElementBlock("svg",ee,[...t[11]||(t[11]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"3",d:"M5 13l4 4L19 7"},null,-1)])])):e.createCommentVNode("",!0)],2)],10,W))),128)),o.resourceIds?.length===0?(e.openBlock(),e.createElementBlock("p",te," ⚠️ Please select at least one resource ")):e.createCommentVNode("",!0)]))])])):e.createCommentVNode("",!0),e.createElementVNode("div",null,[e.createVNode(V,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Exception Type",-1)])]),_:1}),e.createElementVNode("div",oe,[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-3 p-3 border rounded-lg cursor-pointer hover:bg-accent transition-colors",o.isClosed?"bg-accent border-primary":""]),onClick:t[4]||(t[4]=l=>o.isClosed=!0)},[e.createElementVNode("div",ne,[e.createVNode(e.unref(m.BanIcon),{class:"h-5 w-5 text-destructive"})]),t[13]||(t[13]=e.createElementVNode("div",{class:"flex-1"},[e.createElementVNode("div",{class:"font-medium"},"Closed"),e.createElementVNode("div",{class:"text-sm text-muted-foreground"},"No appointments available during this period")],-1)),e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full border-2",o.isClosed?"border-primary bg-primary":"border-muted-foreground"])},[o.isClosed?(e.openBlock(),e.createElementBlock("div",le)):e.createCommentVNode("",!0)],2)],2),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-3 p-3 border rounded-lg cursor-pointer hover:bg-accent transition-colors",o.isClosed?"":"bg-accent border-primary"]),onClick:t[5]||(t[5]=l=>o.isClosed=!1)},[e.createElementVNode("div",ae,[e.createVNode(e.unref(m.Calendar),{class:"h-5 w-5 text-primary"})]),t[14]||(t[14]=e.createElementVNode("div",{class:"flex-1"},[e.createElementVNode("div",{class:"font-medium"},"Custom Hours"),e.createElementVNode("div",{class:"text-sm text-muted-foreground"},"Set specific time slots for this period")],-1)),e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full border-2",o.isClosed?"border-muted-foreground":"border-primary bg-primary"])},[o.isClosed?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",se))],2)],2)])]),o.isClosed?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",re,[e.createVNode(V,{class:"text-sm font-normal mb-1.5"},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("Time Slots",-1)])]),_:1}),e.createVNode(U,{class:"p-4"},{default:e.withCtx(()=>[o.timeslots.length===0?(e.openBlock(),e.createElementBlock("div",de,' No time slots added. Click "Add Time Slot" to create one. ')):(e.openBlock(),e.createElementBlock("div",ce,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.timeslots,l=>(e.openBlock(),e.createElementBlock("div",{key:l.id,class:"flex items-center gap-2"},[e.createVNode(D,{class:"w-32",modelValue:l.startTime,"onUpdate:modelValue":b=>l.startTime=b,type:"time"},null,8,["modelValue","onUpdate:modelValue"]),t[16]||(t[16]=e.createElementVNode("span",{class:"text-muted-foreground"},"to",-1)),e.createVNode(D,{class:"w-32",modelValue:l.endTime,"onUpdate:modelValue":b=>l.endTime=b,type:"time"},null,8,["modelValue","onUpdate:modelValue"]),e.createVNode(f,{variant:"ghost",size:"icon",onClick:b=>I(l.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(m.Trash2),{class:"size-4"})]),_:1},8,["onClick"])]))),128))])),e.createVNode(f,{onClick:h,variant:"outline",size:"sm",class:"w-full"},{default:e.withCtx(()=>[e.createVNode(e.unref(m.Plus),{class:"size-4 mr-1"}),t[17]||(t[17]=e.createTextVNode(" Add Time Slot ",-1))]),_:1})]),_:1})]))]),e.createVNode(d,{class:"gap-2"},{default:e.withCtx(()=>[e.createElementVNode("div",ie,[v.value==="edit"?(e.openBlock(),e.createBlock(f,{key:0,variant:"destructive",onClick:w},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode(" Remove Exception ",-1)])]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("div",ue,[e.createVNode(f,{variant:"outline",onClick:B},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),v.value==="add"?(e.openBlock(),e.createBlock(f,{key:0,onClick:y,disabled:!$.value},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode(" Add Exception ",-1)])]),_:1},8,["disabled"])):(e.openBlock(),e.createBlock(f,{key:1,onClick:E,disabled:!$.value},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode(" Update Exception ",-1)])]),_:1},8,["disabled"]))])])]),_:1})]),_:1})]),_:1},8,["open"])}}}),pe={class:"max-w-4xl space-y-6"},fe={key:0,class:"flex"},ve={key:1},xe={class:"space-y-3"},Ce={class:"flex items-start justify-between"},ke={class:"flex-1"},ge={class:"flex items-center gap-2 mb-1"},Ve={class:"font-medium"},Ne={key:0,class:"flex items-center gap-1.5 ml-6 mb-2"},ye=["title"],Ee={class:"text-sm text-muted-foreground ml-6"},be={key:0,class:"text-amber-600"},_e={key:1,class:"space-y-1"},$e={class:"flex flex-wrap gap-2"},Be={class:"flex gap-1"},he={key:4,class:"flex justify-end pt-4 border-t"},we=e.defineComponent({__name:"exceptions",setup(L){const N=new a.$fb18d541ea1ad717$export$ad991b66133851cf("en-US",{dateStyle:"medium"}),{params:_}=j.useModuleRoute(),{config:x}=j.useModule(),k=j.useFirebaseIntegration(x.project),c=e.ref([]),i=e.ref([]),v=e.ref(!1),g=e.ref(!0),s=e.ref(),o=n=>!n.resourceIds||n.resourceIds.length===0?null:i.value.filter(t=>n.resourceIds?.includes(t.id)),p=async()=>{try{g.value=!0;const n=await k.get(x.agendaCollection,_.value.id);c.value=n.exceptions||[],i.value=(n.resources||[]).filter(t=>t.isActive)}catch(n){console.error("Error loading exceptions:",n)}finally{g.value=!1}},T=(n,t)=>{const r=a.$fae977aafc393c5c$export$6b862160d295c8e(n),C=a.$fae977aafc393c5c$export$6b862160d295c8e(t);return n===t?N.format(r.toDate(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2())):`${N.format(r.toDate(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()))} - ${N.format(C.toDate(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()))}`},$=n=>{c.value.push(n),y()},S=n=>{const t=c.value.findIndex(r=>r.id===n.id);t!==-1&&(c.value[t]=n),y()},B=n=>{c.value=c.value.filter(t=>t.id!==n),y()},h=()=>{s.value?.openDialog()},I=n=>{s.value?.openDialog(n)},y=async()=>{v.value=!0,await k.update(x.agendaCollection,_.value.id,{exceptions:c.value}),v.value=!1},E=e.computed(()=>[...c.value].sort((n,t)=>n.startDate.localeCompare(t.startDate))),w=n=>{const t=a.$fae977aafc393c5c$export$6b862160d295c8e(n),r=a.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(a.$14e0f24ef4ac5c92$export$aa8b41735afcabd2());return t.compare(r)<0};return p(),(n,t)=>{const r=e.resolveComponent("Button"),C=e.resolveComponent("Badge"),V=e.resolveComponent("Card"),f=e.resolveComponent("Spinner"),z=e.resolveComponent("EmptyMedia"),A=e.resolveComponent("EmptyTitle"),F=e.resolveComponent("EmptyDescription"),R=e.resolveComponent("EmptyHeader"),D=e.resolveComponent("EmptyContent"),U=e.resolveComponent("Empty");return e.openBlock(),e.createBlock(M._sfc_main,null,{default:e.withCtx(()=>[t[10]||(t[10]=e.createElementVNode("h1",{class:"text-lg font-medium mb-2"},"Exception Management",-1)),t[11]||(t[11]=e.createElementVNode("p",{class:"mb-6 text-muted-foreground text-sm"}," Create exceptions to override your regular schedule. You can close specific dates or set custom hours for special occasions. ",-1)),e.createElementVNode("div",pe,[E.value.length>0?(e.openBlock(),e.createElementBlock("div",fe,[e.createVNode(r,{onClick:h},{default:e.withCtx(()=>[e.createVNode(e.unref(m.Plus),{class:"size-4 mr-1"}),t[0]||(t[0]=e.createTextVNode(" Add Exception ",-1))]),_:1})])):e.createCommentVNode("",!0),E.value.length>0?(e.openBlock(),e.createElementBlock("div",ve,[t[5]||(t[5]=e.createElementVNode("h2",{class:"text-base font-medium mb-3"},"Active Exceptions",-1)),e.createElementVNode("div",xe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.value,d=>(e.openBlock(),e.createBlock(V,{key:d.id,class:e.normalizeClass(["p-4",w(d.endDate)?"opacity-60":""])},{default:e.withCtx(()=>[e.createElementVNode("div",Ce,[e.createElementVNode("div",ke,[e.createElementVNode("div",ge,[d.isClosed?(e.openBlock(),e.createBlock(e.unref(m.BanIcon),{key:0,class:"h-4 w-4 text-destructive"})):(e.openBlock(),e.createBlock(e.unref(m.Calendar),{key:1,class:"h-4 w-4 text-primary"})),e.createElementVNode("h3",Ve,e.toDisplayString(T(d.startDate,d.endDate)),1),w(d.endDate)?(e.openBlock(),e.createBlock(C,{key:2,variant:"secondary",class:"text-xs"},{default:e.withCtx(()=>[...t[1]||(t[1]=[e.createTextVNode(" Past ",-1)])]),_:1})):e.createCommentVNode("",!0)]),i.value.length>0?(e.openBlock(),e.createElementBlock("div",Ne,[o(d)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(o(d),u=>(e.openBlock(),e.createElementBlock("div",{key:u.id,class:"size-5 rounded-full flex items-center justify-center text-white text-[10px] font-medium",style:e.normalizeStyle({backgroundColor:u.color||"#6b7280"}),title:u.name},e.toDisplayString(u.avatarLabel||u.name.charAt(0).toUpperCase()),13,ye))),128)):(e.openBlock(),e.createBlock(C,{key:1,variant:"outline",class:"text-xs"},{default:e.withCtx(()=>[...t[2]||(t[2]=[e.createTextVNode(" All Resources ",-1)])]),_:1}))])):e.createCommentVNode("",!0),e.createElementVNode("div",Ee,[d.isClosed?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Closed - No appointments available ")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[d.timeslots.length===0?(e.openBlock(),e.createElementBlock("div",be," ⚠️ No time slots defined ")):(e.openBlock(),e.createElementBlock("div",_e,[t[3]||(t[3]=e.createElementVNode("div",{class:"font-medium text-foreground"},"Custom Hours:",-1)),e.createElementVNode("div",$e,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.timeslots,(u,P)=>(e.openBlock(),e.createBlock(C,{key:P,variant:"outline",class:"font-mono text-xs"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.startTime)+" - "+e.toDisplayString(u.endTime),1)]),_:2},1024))),128))])]))],64))])]),e.createElementVNode("div",Be,[e.createVNode(r,{variant:"ghost",onClick:u=>I(d)},{default:e.withCtx(()=>[...t[4]||(t[4]=[e.createTextVNode(" Edit ",-1)])]),_:1},8,["onClick"]),e.createVNode(r,{variant:"ghost",size:"icon",onClick:u=>B(d.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(m.Trash2),{class:"size-4 text-destructive"})]),_:1},8,["onClick"])])])]),_:2},1032,["class"]))),128))])])):g.value?(e.openBlock(),e.createBlock(f,{key:2,class:"my-8 size-8"})):(e.openBlock(),e.createBlock(U,{key:3,class:"border border-dashed"},{default:e.withCtx(()=>[e.createVNode(R,null,{default:e.withCtx(()=>[e.createVNode(z,{variant:"icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(m.CalendarPlus))]),_:1}),e.createVNode(A,null,{default:e.withCtx(()=>[...t[6]||(t[6]=[e.createTextVNode("No Exceptions Created",-1)])]),_:1}),e.createVNode(F,null,{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode(' Your agenda runs smoothly without any exceptions. Click "Add Exception" to create one. ',-1)])]),_:1})]),_:1}),e.createVNode(D,null,{default:e.withCtx(()=>[e.createVNode(r,{variant:"outline",size:"sm",onClick:h},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode(" Add Exception ",-1)])]),_:1})]),_:1})]),_:1})),v.value?(e.openBlock(),e.createElementBlock("div",he,[...t[9]||(t[9]=[e.createElementVNode("span",null,"Saving...",-1)])])):e.createCommentVNode("",!0)]),e.createVNode(me,{ref_key:"exceptionDialogRef",ref:s,resources:i.value,onAddException:$,onUpdateException:S,onRemoveException:B},null,8,["resources"])]),_:1})}}});exports.default=we;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent as ne, ref as E, reactive as ce, computed as te, resolveComponent as i, openBlock as l, createBlock as g, withCtx as a, createVNode as n, createTextVNode as u, toDisplayString as h, createElementVNode as o, unref as m, createElementBlock as r, Fragment as D, normalizeClass as k, createCommentVNode as v, renderList as B, normalizeStyle as ae } from "vue";
|
|
2
|
-
import { _ as me } from "./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { _ as me } from "./EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs";
|
|
3
3
|
import { $ as re, c as U, b, e as N } from "./DateFormatter-2B0R-DY4.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, useModule as ve, useFirebaseIntegration as ge } from "@oneclick.dev/cms-kit";
|