@oneclick.dev/cms-core-modules 0.0.59 → 0.0.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/dist/{Components-D9yIIosM.mjs → Components-C83O-xlF.mjs} +1 -1
  2. package/dist/{ContentEditor-DCmt_y_R.js → ContentEditor-BAepN3Yd.js} +51 -34
  3. package/dist/{ContentEditor-CtGeIzC4.mjs → ContentEditor-BPjWW3d1.mjs} +12341 -10099
  4. package/dist/Create-Bh4g6QW4.js +1 -0
  5. package/dist/{Create-Bwf1RXdG.mjs → Create-Cf7pvh5G.mjs} +38 -39
  6. package/dist/DateFormatter-BPPBZp1j.js +1 -0
  7. package/dist/{CalendarDate-CRT2Viyt.mjs → DateFormatter-DsmlAuYV.mjs} +353 -256
  8. package/dist/{Detail-CpfOQChd.mjs → Detail-B4b_FLDa.mjs} +2 -2
  9. package/dist/{Detail-B-PnkcXD.mjs → Detail-BGD75ul4.mjs} +2 -2
  10. package/dist/{Detail-Dd_OkpcN.js → Detail-BayNaAg9.js} +1 -1
  11. package/dist/{Detail-C4E1T87K.mjs → Detail-Byk781b4.mjs} +3 -3
  12. package/dist/{Detail-Cd5CBVN0.js → Detail-CnK-qbhE.js} +1 -1
  13. package/dist/Detail-CtbWzq-R.js +1 -0
  14. package/dist/{Detail-CNfTDUE5.js → Detail-Cxd2VMOl.js} +1 -1
  15. package/dist/{Detail-BVlGSjOq.mjs → Detail-D10shmpK.mjs} +6 -7
  16. package/dist/{Detail-CwagT6gQ.mjs → Detail-U0mgLKt6.mjs} +2 -2
  17. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-CcysXzmW.mjs +75 -0
  18. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-Czu6Dcde.js +1 -0
  19. package/dist/{Entries-zyhycw1M.mjs → Entries-C6Di46My.mjs} +1 -1
  20. package/dist/{Find-BPR0uU-Z.mjs → Find-B4sAEx0B.mjs} +2 -2
  21. package/dist/{Find-BidEQJxT.js → Find-Ds6OvuH6.js} +1 -1
  22. package/dist/{GlobalStyling-BLQ_1W2y.mjs → GlobalStyling-C9VthHWK.mjs} +1 -1
  23. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-BJitmbPE.mjs +396 -0
  24. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-D50uTpZY.js +1 -0
  25. package/dist/Overview-B-8TLLjh.js +1 -0
  26. package/dist/{Overview-CDN88OSM.mjs → Overview-BCpJNiEB.mjs} +1 -1
  27. package/dist/Overview-B_99j5eA.js +1 -0
  28. package/dist/{Overview-BLsZMHNW.mjs → Overview-CIa1E-HH.mjs} +1 -1
  29. package/dist/{Overview-D1nJLBe1.mjs → Overview-CgViRnNc.mjs} +1 -1
  30. package/dist/Overview-DtWvKB3W.mjs +327 -0
  31. package/dist/Overview-HvlDEgqi.mjs +862 -0
  32. package/dist/{Overview-BH3NwvNX.mjs → Overview-Su8ZUbMs.mjs} +3 -3
  33. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-CI8YgHdU.js +345 -0
  34. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-P-MWwcVh.mjs +2093 -0
  35. package/dist/{TableView-CS13LLxk.mjs → TableView-B8iLWWcP.mjs} +48394 -36321
  36. package/dist/TableView-BxK6R8v3.js +312 -0
  37. package/dist/{TemplateList.vue_vue_type_script_setup_true_lang-BiLAkhIA.mjs → TemplateList.vue_vue_type_script_setup_true_lang-Cmovy7kk.mjs} +5 -5
  38. package/dist/{View-C7axVP9t.mjs → View-DDXN0tKD.mjs} +7 -7
  39. package/dist/View-DfzaVOzS.js +1 -0
  40. package/dist/agenda-D81m29_4.mjs +1135 -0
  41. package/dist/agenda-uzPPxgsW.js +1 -0
  42. package/dist/availability-B-tRp8hB.mjs +629 -0
  43. package/dist/availability-BiBbzEIM.js +1 -0
  44. package/dist/{exceptions-D3b18TiY.mjs → exceptions-BFchkR06.mjs} +70 -71
  45. package/dist/exceptions-C-DPRNQa.js +1 -0
  46. package/dist/index-4tjmIans.js +1 -0
  47. package/dist/index-AmUV8LZQ.mjs +176 -0
  48. package/dist/index-BDaVYdkD.mjs +7763 -0
  49. package/dist/{index-DT1wWnUk.mjs → index-BWDwEd8D.mjs} +1 -1
  50. package/dist/{index-CImCyE3L.mjs → index-BfBBm9uY.mjs} +1 -1
  51. package/dist/{index-DMoyoaks.mjs → index-Bkq58CeQ.mjs} +2 -2
  52. package/dist/{index-DI6mydpm.mjs → index-CABh6Qn6.mjs} +2 -2
  53. package/dist/{index-CQiY-oTN.mjs → index-CQkOH2_3.mjs} +1 -1
  54. package/dist/{index-Bwi1mtkq.mjs → index-CU-tbS5W.mjs} +1 -1
  55. package/dist/{index-BzuHN-r8.mjs → index-Cpnn_Pxd.mjs} +1 -1
  56. package/dist/index-CxETuRsG.js +1 -0
  57. package/dist/{index-DyCHxFp3.mjs → index-DRqJOqUR.mjs} +502 -449
  58. package/dist/index-DTago6vW-Bhr8E1Y6.js +88 -0
  59. package/dist/index-DTago6vW-CnomHQ_S.mjs +4123 -0
  60. package/dist/index-DfV8-6ON.js +245 -0
  61. package/dist/index-Dnn2SCSl.js +1 -0
  62. package/dist/{index-BEGU8Kme.mjs → index-Dpl9sU6a.mjs} +2 -2
  63. package/dist/index-Uf7TwBuW.mjs +110 -0
  64. package/dist/index-YMaY4uuk-BgpTtr73.js +1 -0
  65. package/dist/{index-CKPshlZ8-BQiiP6r_.mjs → index-YMaY4uuk-C_xV5K9Z.mjs} +399 -363
  66. package/dist/{index--jjEzba7.mjs → index-cOnxXTbF.mjs} +1 -1
  67. package/dist/index-hlylYYgy.mjs +24 -0
  68. package/dist/index.cjs.js +1 -1
  69. package/dist/index.mjs +98 -81
  70. package/dist/orders-Bh8w0ueq.mjs +346 -0
  71. package/dist/orders-Dt0zMz97.js +1 -0
  72. package/dist/payment-BQaAqQ5q.js +1 -0
  73. package/dist/payment-BbWByERf.mjs +1080 -0
  74. package/dist/regular-1LXNPviB.js +1 -0
  75. package/dist/regular-_05oq5Tx.mjs +1101 -0
  76. package/dist/regular-slots-Bs3WJB3U.js +1 -0
  77. package/dist/regular-slots-C2NYxLPn.mjs +222 -0
  78. package/dist/resources-DgPnEv76.mjs +811 -0
  79. package/dist/resources-eb0pivDL.js +1 -0
  80. package/dist/src/appointments/components/edit/EditLayout.vue.d.ts +2 -2
  81. package/dist/src/appointments/components/edit/EventDialog/BookingsList.vue.d.ts +92 -0
  82. package/dist/src/appointments/components/edit/EventDialog/CancelReservationDialog.vue.d.ts +8 -0
  83. package/dist/src/appointments/components/edit/EventDialog/EventDialog.vue.d.ts +10 -0
  84. package/dist/src/appointments/components/edit/{EventDialog.vue.d.ts → EventDialog/ResendConfirmationDialog.vue.d.ts} +1 -1
  85. package/dist/src/appointments/components/edit/EventDialog/ReservationDetailDialog.vue.d.ts +51 -0
  86. package/dist/src/appointments/components/edit/EventDialog/TimelineChart.vue.d.ts +24 -0
  87. package/dist/src/appointments/components/edit/EventDialog/TransferReservationDialog.vue.d.ts +4 -0
  88. package/dist/src/appointments/components/edit/EventTimeline.vue.d.ts +15 -7
  89. package/dist/src/appointments/components/edit/NewReservationDialog/NewReservationDialog.vue.d.ts +2 -0
  90. package/dist/src/appointments/components/edit/dashboard/BookingsList.vue.d.ts +68 -0
  91. package/dist/src/appointments/components/edit/dashboard/Timeline.vue.d.ts +15 -0
  92. package/dist/src/appointments/components/edit/dashboard/timeline/ResourceSelector.vue.d.ts +50 -0
  93. package/dist/src/appointments/config.d.ts +30 -0
  94. package/dist/src/appointments/index.d.ts +32 -5
  95. package/dist/src/appointments/pages/edit/agenda.vue.d.ts +1 -1
  96. package/dist/src/appointments/pages/edit/availability.vue.d.ts +1 -1
  97. package/dist/src/appointments/pages/edit/index.vue.d.ts +1 -1
  98. package/dist/src/appointments/pages/edit/orders.vue.d.ts +64 -0
  99. package/dist/src/appointments/pages/edit/payment.vue.d.ts +1 -1
  100. package/dist/src/appointments/pages/edit/regular-slots.vue.d.ts +1 -1
  101. package/dist/src/appointments/pages/edit/resources.vue.d.ts +1 -1
  102. package/dist/src/appointments/routes.d.ts +2 -5
  103. package/dist/src/appointments/types.d.ts +16 -0
  104. package/dist/src/appointments/utils/printReservation.d.ts +45 -0
  105. package/dist/src/content-manager/components/content-editor/ContentStructuredContentSections.vue.d.ts +4 -0
  106. package/dist/src/content-manager/components/content-editor/PageSettings.vue.d.ts +2 -0
  107. package/dist/src/content-manager/components/content-editor/SidebarSectionWrapper.vue.d.ts +11 -1
  108. package/dist/src/content-manager/types.d.ts +5 -0
  109. package/dist/{vee-validate-zod-BPQyEfpF.js → vee-validate-zod-ByykgYKJ.js} +1 -1
  110. package/dist/{vee-validate-zod-IXkfh-6Q.mjs → vee-validate-zod-CcOwoF6y.mjs} +4 -4
  111. package/package.json +4 -2
  112. package/dist/CalendarDate-CWtpXgpD.js +0 -1
  113. package/dist/Create-BP8TX6rj.js +0 -1
  114. package/dist/DateFormatter-BbcSwTs4.js +0 -1
  115. package/dist/DateFormatter-CbO0PVUK.mjs +0 -99
  116. package/dist/Detail-DUo6qKqO.js +0 -1
  117. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-BWuKVkvV.js +0 -1
  118. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-D0-EcU0_.mjs +0 -55
  119. package/dist/Overview-BNMZ9MUK.js +0 -1
  120. package/dist/Overview-CEPodGCn.mjs +0 -311
  121. package/dist/Overview-CvquDPhB.js +0 -1
  122. package/dist/Overview-D67UjG6n.mjs +0 -947
  123. package/dist/RegularSlotEditor.vue_vue_type_script_setup_true_lang-0xZSq0rx.js +0 -1
  124. package/dist/RegularSlotEditor.vue_vue_type_script_setup_true_lang-Bj_PVLLV.mjs +0 -392
  125. package/dist/TableView-Dv4YXBD1.js +0 -111
  126. package/dist/View-7qb_ohVo.js +0 -1
  127. package/dist/agenda-B49oKGeh.mjs +0 -706
  128. package/dist/agenda-DipQ5IWP.js +0 -1
  129. package/dist/availability-C7q9tq6l.js +0 -1
  130. package/dist/availability-DeCkqiu8.mjs +0 -613
  131. package/dist/exceptions-DJ9zWX3k.js +0 -1
  132. package/dist/index-CKPshlZ8-CIz1tDwX.js +0 -1
  133. package/dist/index-DUeFrD-B.js +0 -1
  134. package/dist/index-DsnoK4ia.mjs +0 -579
  135. package/dist/index-WL1P6d3j.js +0 -1
  136. package/dist/index-_mG-aU3Z.mjs +0 -87
  137. package/dist/index-_sQDF1pH.js +0 -1
  138. package/dist/index-klI238nT.mjs +0 -24
  139. package/dist/payment-kTjsV0Jj.js +0 -1
  140. package/dist/payment-zpCM0LD-.mjs +0 -981
  141. package/dist/regular-C4_3YXqx.mjs +0 -602
  142. package/dist/regular-DFwPEbZO.js +0 -1
  143. package/dist/regular-slots-4ooEpICB.mjs +0 -67
  144. package/dist/regular-slots-BAVGbomI.js +0 -1
  145. package/dist/resources-MpQkSstv.mjs +0 -563
  146. package/dist/resources-iM28T3dD.js +0 -1
  147. package/dist/src/appointments/components/edit/RegularSlotEditor.vue.d.ts +0 -16
@@ -0,0 +1,1101 @@
1
+ import { defineComponent as H, computed as W, resolveComponent as o, openBlock as c, createBlock as V, withCtx as s, createVNode as n, createElementBlock as k, Fragment as I, renderList as M, createCommentVNode as F, normalizeClass as J, unref as u, createElementVNode as t, createTextVNode as a, toDisplayString as g, inject as A, ref as O, normalizeStyle as q, reactive as ae, provide as E } from "vue";
2
+ import { useModuleRoute as K, useModule as ie, useFirebaseIntegration as ue, useModuleBreadcrumbs as re } from "@oneclick.dev/cms-kit";
3
+ import { Circle as de, Check as me, Dot as pe, Pencil as ce, Trash2 as Y, Users as fe, Plus as ve, Clock as ge, ArrowLeft as xe } from "lucide-vue-next";
4
+ const _e = { class: "flex flex-col gap-1" }, be = /* @__PURE__ */ H({
5
+ __name: "StepNavigation",
6
+ props: {
7
+ modelValue: {
8
+ type: Number,
9
+ required: !0
10
+ },
11
+ steps: {
12
+ type: Array,
13
+ required: !0
14
+ }
15
+ },
16
+ emits: ["update:modelValue"],
17
+ setup(R, { emit: r }) {
18
+ const N = R, $ = r, f = W({
19
+ get: () => N.modelValue,
20
+ set: (e) => {
21
+ $("update:modelValue", e);
22
+ }
23
+ }), _ = W(() => N.steps.filter((e) => e.completed).length);
24
+ return (e, i) => {
25
+ const y = o("StepperSeparator"), x = o("Button"), d = o("StepperTrigger"), C = o("StepperTitle"), b = o("StepperItem"), w = o("Stepper"), D = o("CardContent"), S = o("Card");
26
+ return c(), V(S, null, {
27
+ default: s(() => [
28
+ n(D, null, {
29
+ default: s(() => [
30
+ n(w, {
31
+ orientation: "vertical",
32
+ class: "mx-auto flex w-full max-w-md flex-col justify-start gap-10",
33
+ modelValue: f.value,
34
+ "onUpdate:modelValue": i[0] || (i[0] = (m) => f.value = m),
35
+ linear: !1
36
+ }, {
37
+ default: s(() => [
38
+ (c(!0), k(I, null, M(R.steps, (m, l) => (c(), V(b, {
39
+ key: m.step,
40
+ class: "relative flex w-full items-start gap-6",
41
+ step: m.step,
42
+ completed: m.completed,
43
+ disabled: m.step > _.value + 1,
44
+ onClick: (v) => f.value = m.step
45
+ }, {
46
+ default: s(({ state: v }) => [
47
+ m.step !== R.steps[R.steps.length - 1].step ? (c(), V(y, {
48
+ key: 0,
49
+ class: "absolute left-[18px] top-[38px] block h-[105%] w-0.5 shrink-0 rounded-full bg-muted group-data-[state=completed]:bg-primary"
50
+ })) : F("", !0),
51
+ n(d, { "as-child": "" }, {
52
+ default: s(() => [
53
+ n(x, {
54
+ variant: v === "completed" || v === "active" ? "default" : "outline",
55
+ size: "icon",
56
+ class: J(["z-10 rounded-full shrink-0", [f.value === m.step && "ring-2 ring-ring ring-offset-2 ring-offset-background"]])
57
+ }, {
58
+ default: s(() => [
59
+ f.value === m.step ? (c(), V(u(de), { key: 0 })) : v === "completed" ? (c(), V(u(me), {
60
+ key: 1,
61
+ class: "size-5"
62
+ })) : v === "inactive" ? (c(), V(u(pe), { key: 2 })) : F("", !0)
63
+ ]),
64
+ _: 2
65
+ }, 1032, ["variant", "class"])
66
+ ]),
67
+ _: 2
68
+ }, 1024),
69
+ t("div", _e, [
70
+ n(C, {
71
+ class: J([[f.value === m.step && "text-primary", m.step > _.value + 1 && "text-muted-foreground"], "text-sm font-semibold transition lg:text-base mt-1.5"])
72
+ }, {
73
+ default: s(() => [
74
+ a(g(m.title), 1)
75
+ ]),
76
+ _: 2
77
+ }, 1032, ["class"])
78
+ ])
79
+ ]),
80
+ _: 2
81
+ }, 1032, ["step", "completed", "disabled", "onClick"]))), 128))
82
+ ]),
83
+ _: 1
84
+ }, 8, ["modelValue"])
85
+ ]),
86
+ _: 1
87
+ })
88
+ ]),
89
+ _: 1
90
+ });
91
+ };
92
+ }
93
+ }), Se = { class: "space-y-6" }, ye = { class: "flex justify-end mt-8" }, ke = /* @__PURE__ */ H({
94
+ __name: "Step1",
95
+ setup(R) {
96
+ const r = A("form"), N = A("steps"), $ = A("activeStep", O(1)), f = () => {
97
+ if (r.serviceName = r.serviceName.trim(), r.pricingOptions[0].name = r.pricingOptions[0].name.trim() || "Standard Service", !r.serviceName) {
98
+ alert("Please enter a service name.");
99
+ return;
100
+ }
101
+ if (!r.pricingOptions[0].duration || r.pricingOptions[0].duration <= 0) {
102
+ alert("Please set a valid service duration.");
103
+ return;
104
+ }
105
+ N.value[0].completed = !0, $.value = 2;
106
+ };
107
+ return (_, e) => {
108
+ const i = o("Label"), y = o("Input"), x = o("Separator"), d = o("SelectValue"), C = o("SelectTrigger"), b = o("SelectItem"), w = o("SelectContent"), D = o("Select"), S = o("Button"), m = o("Card");
109
+ return c(), V(m, { class: "p-8" }, {
110
+ default: s(() => [
111
+ t("div", Se, [
112
+ t("div", null, [
113
+ n(i, {
114
+ for: "service-name",
115
+ class: "text-base font-medium mb-2"
116
+ }, {
117
+ default: s(() => [...e[5] || (e[5] = [
118
+ a(" Service Name ", -1),
119
+ t("span", { class: "text-destructive" }, "*", -1)
120
+ ])]),
121
+ _: 1
122
+ }),
123
+ n(y, {
124
+ id: "service-name",
125
+ modelValue: u(r).serviceName,
126
+ "onUpdate:modelValue": e[0] || (e[0] = (l) => u(r).serviceName = l),
127
+ placeholder: "e.g., Haircut, Massage, Consultation",
128
+ class: "mt-2"
129
+ }, null, 8, ["modelValue"]),
130
+ e[6] || (e[6] = t("p", { class: "text-sm text-muted-foreground mt-2" }, " The name of your bookable service ", -1))
131
+ ]),
132
+ n(x),
133
+ t("div", null, [
134
+ n(i, {
135
+ for: "pricing-name",
136
+ class: "text-base font-medium mb-2"
137
+ }, {
138
+ default: s(() => [...e[7] || (e[7] = [
139
+ a(" Service Variation Name ", -1)
140
+ ])]),
141
+ _: 1
142
+ }),
143
+ n(y, {
144
+ id: "pricing-name",
145
+ modelValue: u(r).pricingOptions[0].name,
146
+ "onUpdate:modelValue": e[1] || (e[1] = (l) => u(r).pricingOptions[0].name = l),
147
+ placeholder: "e.g., Standard, Premium, Basic",
148
+ class: "mt-2"
149
+ }, null, 8, ["modelValue"]),
150
+ e[8] || (e[8] = t("p", { class: "text-sm text-muted-foreground mt-2" }, " Optional: Name for this service variation (you can add more later) ", -1))
151
+ ]),
152
+ t("div", null, [
153
+ n(i, {
154
+ for: "duration",
155
+ class: "text-base font-medium mb-2"
156
+ }, {
157
+ default: s(() => [...e[9] || (e[9] = [
158
+ a(" Service Duration ", -1),
159
+ t("span", { class: "text-destructive" }, "*", -1)
160
+ ])]),
161
+ _: 1
162
+ }),
163
+ n(D, {
164
+ modelValue: u(r).pricingOptions[0].duration,
165
+ "onUpdate:modelValue": e[2] || (e[2] = (l) => u(r).pricingOptions[0].duration = l),
166
+ modelModifiers: { number: !0 },
167
+ id: "duration"
168
+ }, {
169
+ default: s(() => [
170
+ n(C, { class: "mt-2" }, {
171
+ default: s(() => [
172
+ n(d, { placeholder: "Select duration" })
173
+ ]),
174
+ _: 1
175
+ }),
176
+ n(w, null, {
177
+ default: s(() => [
178
+ n(b, { value: 15 }, {
179
+ default: s(() => [...e[10] || (e[10] = [
180
+ a("15 minutes", -1)
181
+ ])]),
182
+ _: 1
183
+ }),
184
+ n(b, { value: 30 }, {
185
+ default: s(() => [...e[11] || (e[11] = [
186
+ a("30 minutes", -1)
187
+ ])]),
188
+ _: 1
189
+ }),
190
+ n(b, { value: 45 }, {
191
+ default: s(() => [...e[12] || (e[12] = [
192
+ a("45 minutes", -1)
193
+ ])]),
194
+ _: 1
195
+ }),
196
+ n(b, { value: 60 }, {
197
+ default: s(() => [...e[13] || (e[13] = [
198
+ a("1 hour", -1)
199
+ ])]),
200
+ _: 1
201
+ }),
202
+ n(b, { value: 90 }, {
203
+ default: s(() => [...e[14] || (e[14] = [
204
+ a("1.5 hours", -1)
205
+ ])]),
206
+ _: 1
207
+ }),
208
+ n(b, { value: 120 }, {
209
+ default: s(() => [...e[15] || (e[15] = [
210
+ a("2 hours", -1)
211
+ ])]),
212
+ _: 1
213
+ }),
214
+ n(b, { value: 180 }, {
215
+ default: s(() => [...e[16] || (e[16] = [
216
+ a("3 hours", -1)
217
+ ])]),
218
+ _: 1
219
+ }),
220
+ n(b, { value: 240 }, {
221
+ default: s(() => [...e[17] || (e[17] = [
222
+ a("4 hours", -1)
223
+ ])]),
224
+ _: 1
225
+ })
226
+ ]),
227
+ _: 1
228
+ })
229
+ ]),
230
+ _: 1
231
+ }, 8, ["modelValue"]),
232
+ e[18] || (e[18] = t("p", { class: "text-sm text-muted-foreground mt-2" }, " How long does this service take? ", -1))
233
+ ]),
234
+ t("div", null, [
235
+ n(i, {
236
+ for: "price",
237
+ class: "text-base font-medium mb-2"
238
+ }, {
239
+ default: s(() => [...e[19] || (e[19] = [
240
+ a(" Price ", -1)
241
+ ])]),
242
+ _: 1
243
+ }),
244
+ n(y, {
245
+ id: "price",
246
+ modelValue: u(r).pricingOptions[0].price,
247
+ "onUpdate:modelValue": e[3] || (e[3] = (l) => u(r).pricingOptions[0].price = l),
248
+ modelModifiers: { number: !0 },
249
+ type: "number",
250
+ min: "0",
251
+ step: "0.01",
252
+ placeholder: "0.00",
253
+ class: "mt-2"
254
+ }, null, 8, ["modelValue"]),
255
+ e[20] || (e[20] = t("p", { class: "text-sm text-muted-foreground mt-2" }, " Base price for this service (you can configure payment settings later) ", -1))
256
+ ])
257
+ ]),
258
+ t("div", ye, [
259
+ n(S, {
260
+ onClick: e[4] || (e[4] = (l) => f())
261
+ }, {
262
+ default: s(() => [...e[21] || (e[21] = [
263
+ a(" Continue ", -1)
264
+ ])]),
265
+ _: 1
266
+ })
267
+ ])
268
+ ]),
269
+ _: 1
270
+ });
271
+ };
272
+ }
273
+ }), Ce = {
274
+ key: 0,
275
+ class: "space-y-3 mb-6"
276
+ }, Ve = { class: "flex items-start gap-4" }, Ne = { class: "flex-1 min-w-0" }, $e = { class: "font-medium" }, we = { class: "mt-2 grid grid-cols-3 gap-3 text-sm text-muted-foreground" }, Te = { class: "ml-1 font-medium text-foreground" }, Ae = { class: "ml-1 font-medium text-foreground" }, Oe = { class: "ml-1 font-medium text-foreground" }, Re = { class: "flex items-center gap-2" }, De = { class: "flex flex-col items-center gap-3" }, Be = { class: "size-12 rounded-full bg-muted flex items-center justify-center" }, Ie = { class: "flex justify-end gap-4" }, Ue = { class: "space-y-5 py-4" }, Me = { class: "flex flex-wrap gap-2 mt-2" }, He = ["onClick"], Le = { class: "grid grid-cols-2 gap-4" }, Pe = { class: "space-y-2 rounded-lg border p-3 max-h-64 overflow-y-auto" }, ze = { class: "flex items-center justify-between" }, Fe = { class: "text-sm font-medium w-24" }, je = { class: "flex-1 flex flex-col gap-1" }, Ee = {
277
+ key: 0,
278
+ class: "text-sm text-muted-foreground italic"
279
+ }, Je = /* @__PURE__ */ H({
280
+ __name: "Step2",
281
+ setup(R) {
282
+ const r = A("form"), N = A("steps"), $ = A("activeStep", O(1)), f = ["#ef4444", "#f97316", "#f59e0b", "#eab308", "#84cc16", "#22c55e", "#10b981", "#14b8a6", "#06b6d4", "#0ea5e9", "#3b82f6", "#6366f1", "#8b5cf6", "#a855f7", "#d946ef", "#ec4899", "#f43f5e"], _ = O(!1), e = O(null), i = O({
283
+ id: "",
284
+ name: "",
285
+ publicLabel: "",
286
+ avatarLabel: "",
287
+ description: "",
288
+ capacity: 1,
289
+ interval: 30,
290
+ openingHours: {
291
+ 0: [],
292
+ 1: [{ start: "09:00", end: "17:00" }],
293
+ 2: [{ start: "09:00", end: "17:00" }],
294
+ 3: [{ start: "09:00", end: "17:00" }],
295
+ 4: [{ start: "09:00", end: "17:00" }],
296
+ 5: [{ start: "09:00", end: "17:00" }],
297
+ 6: []
298
+ },
299
+ color: "#3b82f6",
300
+ isActive: !0
301
+ }), y = (m) => {
302
+ m ? (e.value = m, i.value = JSON.parse(JSON.stringify(m))) : (e.value = null, i.value = {
303
+ id: Math.random().toString(36).substr(2, 9),
304
+ name: "",
305
+ publicLabel: "",
306
+ avatarLabel: "",
307
+ description: "",
308
+ capacity: 1,
309
+ interval: 30,
310
+ openingHours: {
311
+ 0: [],
312
+ 1: [{ start: "09:00", end: "17:00" }],
313
+ 2: [{ start: "09:00", end: "17:00" }],
314
+ 3: [{ start: "09:00", end: "17:00" }],
315
+ 4: [{ start: "09:00", end: "17:00" }],
316
+ 5: [{ start: "09:00", end: "17:00" }],
317
+ 6: []
318
+ },
319
+ color: f[Math.floor(Math.random() * f.length)],
320
+ isActive: !0
321
+ }), _.value = !0;
322
+ }, x = () => {
323
+ if (!i.value.name.trim()) {
324
+ alert("Please enter a resource name");
325
+ return;
326
+ }
327
+ if (e.value) {
328
+ const m = r.resources.findIndex((l) => l.id === e.value.id);
329
+ m !== -1 && (r.resources[m] = JSON.parse(JSON.stringify(i.value)));
330
+ } else
331
+ r.resources.push(JSON.parse(JSON.stringify(i.value)));
332
+ _.value = !1;
333
+ }, d = (m) => {
334
+ r.resources = r.resources.filter((l) => l.id !== m);
335
+ }, C = (m) => {
336
+ const v = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].filter((U, T) => m.openingHours?.[T]?.length > 0);
337
+ return v.length === 0 ? "No hours set" : v.length === 7 ? "Open all week" : v.join(", ");
338
+ }, b = (m) => {
339
+ i.value.openingHours[m] || (i.value.openingHours[m] = []), i.value.openingHours[m].push({ start: "09:00", end: "17:00" });
340
+ }, w = (m, l) => {
341
+ i.value.openingHours[m].splice(l, 1);
342
+ }, D = [
343
+ { value: 1, label: "Monday" },
344
+ { value: 2, label: "Tuesday" },
345
+ { value: 3, label: "Wednesday" },
346
+ { value: 4, label: "Thursday" },
347
+ { value: 5, label: "Friday" },
348
+ { value: 6, label: "Saturday" },
349
+ { value: 0, label: "Sunday" }
350
+ ], S = () => {
351
+ if (r.resources.length === 0) {
352
+ alert("Please add at least one resource");
353
+ return;
354
+ }
355
+ N.value[1].completed = !0, $.value = 3;
356
+ };
357
+ return (m, l) => {
358
+ const v = o("Button"), U = o("Card"), T = o("Separator"), Q = o("DialogTitle"), X = o("DialogDescription"), Z = o("DialogHeader"), L = o("Label"), P = o("Input"), h = o("SelectValue"), ee = o("SelectTrigger"), j = o("SelectItem"), te = o("SelectContent"), ne = o("Select"), le = o("DialogFooter"), se = o("DialogScrollContent"), oe = o("Dialog");
359
+ return c(), k(I, null, [
360
+ n(U, { class: "p-8" }, {
361
+ default: s(() => [
362
+ l[15] || (l[15] = t("div", { class: "mb-6" }, [
363
+ t("h3", { class: "font-medium text-lg mb-2" }, " Configure Resources "),
364
+ t("p", { class: "text-sm text-muted-foreground" }, " Resources are the bookable entities (staff, rooms, equipment). Each resource has its own schedule, capacity, and booking interval. ")
365
+ ], -1)),
366
+ u(r).resources.length > 0 ? (c(), k("div", Ce, [
367
+ (c(!0), k(I, null, M(u(r).resources, (p) => (c(), V(U, {
368
+ key: p.id,
369
+ class: "p-4 hover:shadow-sm transition-shadow"
370
+ }, {
371
+ default: s(() => [
372
+ t("div", Ve, [
373
+ t("div", {
374
+ class: "size-10 rounded-full flex items-center justify-center text-white text-sm font-medium flex-shrink-0",
375
+ style: q({ backgroundColor: p.color })
376
+ }, g(p.avatarLabel || p.name.charAt(0).toUpperCase()), 5),
377
+ t("div", Ne, [
378
+ t("h4", $e, g(p.name), 1),
379
+ t("div", we, [
380
+ t("div", null, [
381
+ l[8] || (l[8] = t("span", { class: "text-xs" }, "Capacity:", -1)),
382
+ t("span", Te, g(p.capacity), 1)
383
+ ]),
384
+ t("div", null, [
385
+ l[9] || (l[9] = t("span", { class: "text-xs" }, "Interval:", -1)),
386
+ t("span", Ae, g(p.interval) + " min", 1)
387
+ ]),
388
+ t("div", null, [
389
+ l[10] || (l[10] = t("span", { class: "text-xs" }, "Schedule:", -1)),
390
+ t("span", Oe, g(C(p)), 1)
391
+ ])
392
+ ])
393
+ ]),
394
+ t("div", Re, [
395
+ n(v, {
396
+ size: "sm",
397
+ variant: "ghost",
398
+ onClick: (B) => y(p)
399
+ }, {
400
+ default: s(() => [
401
+ n(u(ce), { class: "w-4 h-4" })
402
+ ]),
403
+ _: 1
404
+ }, 8, ["onClick"]),
405
+ n(v, {
406
+ size: "sm",
407
+ variant: "ghost",
408
+ onClick: (B) => d(p.id)
409
+ }, {
410
+ default: s(() => [
411
+ n(u(Y), { class: "w-4 h-4 text-destructive" })
412
+ ]),
413
+ _: 1
414
+ }, 8, ["onClick"])
415
+ ])
416
+ ])
417
+ ]),
418
+ _: 2
419
+ }, 1024))), 128))
420
+ ])) : (c(), V(U, {
421
+ key: 1,
422
+ class: "p-8 text-center mb-6 bg-muted/30"
423
+ }, {
424
+ default: s(() => [
425
+ t("div", De, [
426
+ t("div", Be, [
427
+ n(u(fe), { class: "w-6 h-6 text-muted-foreground" })
428
+ ]),
429
+ l[11] || (l[11] = t("div", null, [
430
+ t("p", { class: "font-medium" }, "No resources yet"),
431
+ t("p", { class: "text-sm text-muted-foreground" }, "Add your first resource to get started")
432
+ ], -1))
433
+ ])
434
+ ]),
435
+ _: 1
436
+ })),
437
+ n(v, {
438
+ onClick: l[0] || (l[0] = (p) => y()),
439
+ variant: "outline",
440
+ class: "w-full mb-6"
441
+ }, {
442
+ default: s(() => [
443
+ n(u(ve), { class: "w-4 h-4 mr-2" }),
444
+ l[12] || (l[12] = a(" Add Resource ", -1))
445
+ ]),
446
+ _: 1
447
+ }),
448
+ n(T, { class: "my-6" }),
449
+ t("div", Ie, [
450
+ n(v, {
451
+ variant: "outline",
452
+ onClick: l[1] || (l[1] = (p) => $.value = 1)
453
+ }, {
454
+ default: s(() => [...l[13] || (l[13] = [
455
+ a(" Back ", -1)
456
+ ])]),
457
+ _: 1
458
+ }),
459
+ n(v, {
460
+ onClick: l[2] || (l[2] = (p) => S())
461
+ }, {
462
+ default: s(() => [...l[14] || (l[14] = [
463
+ a(" Continue ", -1)
464
+ ])]),
465
+ _: 1
466
+ })
467
+ ])
468
+ ]),
469
+ _: 1
470
+ }),
471
+ n(oe, {
472
+ open: _.value,
473
+ "onUpdate:open": l[7] || (l[7] = (p) => _.value = p)
474
+ }, {
475
+ default: s(() => [
476
+ n(se, { class: "sm:max-w-2xl max-h-[90vh]" }, {
477
+ default: s(() => [
478
+ n(Z, null, {
479
+ default: s(() => [
480
+ n(Q, null, {
481
+ default: s(() => [
482
+ a(g(e.value ? "Edit Resource" : "Add Resource"), 1)
483
+ ]),
484
+ _: 1
485
+ }),
486
+ n(X, null, {
487
+ default: s(() => [...l[16] || (l[16] = [
488
+ a(" Define a bookable resource with its operating hours and capacity. ", -1)
489
+ ])]),
490
+ _: 1
491
+ })
492
+ ]),
493
+ _: 1
494
+ }),
495
+ t("div", Ue, [
496
+ t("div", null, [
497
+ n(L, { class: "text-sm font-normal mb-1.5" }, {
498
+ default: s(() => [...l[17] || (l[17] = [
499
+ a("Resource Name ", -1),
500
+ t("span", { class: "text-destructive" }, "*", -1)
501
+ ])]),
502
+ _: 1
503
+ }),
504
+ n(P, {
505
+ modelValue: i.value.name,
506
+ "onUpdate:modelValue": l[3] || (l[3] = (p) => i.value.name = p),
507
+ placeholder: "e.g., James, Room 1, Equipment A"
508
+ }, null, 8, ["modelValue"])
509
+ ]),
510
+ t("div", null, [
511
+ n(L, { class: "text-sm font-normal mb-1.5" }, {
512
+ default: s(() => [...l[18] || (l[18] = [
513
+ a("Color", -1)
514
+ ])]),
515
+ _: 1
516
+ }),
517
+ t("div", Me, [
518
+ (c(), k(I, null, M(f, (p) => t("button", {
519
+ key: p,
520
+ type: "button",
521
+ class: J(["size-7 rounded-full transition-all", i.value.color === p ? "ring-2 ring-ring ring-offset-2" : "hover:scale-110"]),
522
+ style: q({ background: p }),
523
+ onClick: (B) => i.value.color = p
524
+ }, null, 14, He)), 64))
525
+ ])
526
+ ]),
527
+ t("div", Le, [
528
+ t("div", null, [
529
+ n(L, { class: "text-sm font-normal mb-1.5" }, {
530
+ default: s(() => [...l[19] || (l[19] = [
531
+ a("Capacity", -1)
532
+ ])]),
533
+ _: 1
534
+ }),
535
+ n(P, {
536
+ modelValue: i.value.capacity,
537
+ "onUpdate:modelValue": l[4] || (l[4] = (p) => i.value.capacity = p),
538
+ modelModifiers: { number: !0 },
539
+ type: "number",
540
+ min: "1"
541
+ }, null, 8, ["modelValue"]),
542
+ l[20] || (l[20] = t("p", { class: "text-xs text-muted-foreground mt-1" }, "Max simultaneous bookings", -1))
543
+ ]),
544
+ t("div", null, [
545
+ n(L, { class: "text-sm font-normal mb-1.5" }, {
546
+ default: s(() => [...l[21] || (l[21] = [
547
+ a("Booking Interval", -1)
548
+ ])]),
549
+ _: 1
550
+ }),
551
+ n(ne, {
552
+ modelValue: i.value.interval,
553
+ "onUpdate:modelValue": l[5] || (l[5] = (p) => i.value.interval = p),
554
+ modelModifiers: { number: !0 }
555
+ }, {
556
+ default: s(() => [
557
+ n(ee, null, {
558
+ default: s(() => [
559
+ n(h)
560
+ ]),
561
+ _: 1
562
+ }),
563
+ n(te, null, {
564
+ default: s(() => [
565
+ n(j, { value: 15 }, {
566
+ default: s(() => [...l[22] || (l[22] = [
567
+ a("15 min", -1)
568
+ ])]),
569
+ _: 1
570
+ }),
571
+ n(j, { value: 30 }, {
572
+ default: s(() => [...l[23] || (l[23] = [
573
+ a("30 min", -1)
574
+ ])]),
575
+ _: 1
576
+ }),
577
+ n(j, { value: 60 }, {
578
+ default: s(() => [...l[24] || (l[24] = [
579
+ a("1 hour", -1)
580
+ ])]),
581
+ _: 1
582
+ })
583
+ ]),
584
+ _: 1
585
+ })
586
+ ]),
587
+ _: 1
588
+ }, 8, ["modelValue"])
589
+ ])
590
+ ]),
591
+ t("div", null, [
592
+ n(L, { class: "text-sm font-normal mb-2 flex items-center gap-2" }, {
593
+ default: s(() => [
594
+ n(u(ge), { class: "w-4 h-4" }),
595
+ l[25] || (l[25] = a(" Operating Hours ", -1))
596
+ ]),
597
+ _: 1
598
+ }),
599
+ t("div", Pe, [
600
+ (c(), k(I, null, M(D, (p) => t("div", {
601
+ key: p.value,
602
+ class: "space-y-1"
603
+ }, [
604
+ t("div", ze, [
605
+ t("span", Fe, g(p.label), 1),
606
+ t("div", je, [
607
+ i.value.openingHours[p.value]?.length === 0 ? (c(), k("div", Ee, " Closed ")) : F("", !0),
608
+ (c(!0), k(I, null, M(i.value.openingHours[p.value], (B, G) => (c(), k("div", {
609
+ key: G,
610
+ class: "flex items-center gap-2"
611
+ }, [
612
+ n(P, {
613
+ modelValue: B.start,
614
+ "onUpdate:modelValue": (z) => B.start = z,
615
+ type: "time",
616
+ class: "flex-1"
617
+ }, null, 8, ["modelValue", "onUpdate:modelValue"]),
618
+ l[26] || (l[26] = t("span", { class: "text-xs text-muted-foreground" }, "to", -1)),
619
+ n(P, {
620
+ modelValue: B.end,
621
+ "onUpdate:modelValue": (z) => B.end = z,
622
+ type: "time",
623
+ class: "flex-1"
624
+ }, null, 8, ["modelValue", "onUpdate:modelValue"]),
625
+ n(v, {
626
+ variant: "ghost",
627
+ size: "icon",
628
+ class: "size-8",
629
+ onClick: (z) => w(p.value, G)
630
+ }, {
631
+ default: s(() => [
632
+ n(u(Y), { class: "w-3 h-3" })
633
+ ]),
634
+ _: 1
635
+ }, 8, ["onClick"])
636
+ ]))), 128))
637
+ ]),
638
+ n(v, {
639
+ variant: "outline",
640
+ size: "sm",
641
+ class: "h-7 px-2 text-xs ml-2",
642
+ onClick: (B) => b(p.value)
643
+ }, {
644
+ default: s(() => [...l[27] || (l[27] = [
645
+ a(" Add ", -1)
646
+ ])]),
647
+ _: 1
648
+ }, 8, ["onClick"])
649
+ ])
650
+ ])), 64))
651
+ ])
652
+ ])
653
+ ]),
654
+ n(le, null, {
655
+ default: s(() => [
656
+ n(v, {
657
+ variant: "outline",
658
+ onClick: l[6] || (l[6] = (p) => _.value = !1)
659
+ }, {
660
+ default: s(() => [...l[28] || (l[28] = [
661
+ a("Cancel", -1)
662
+ ])]),
663
+ _: 1
664
+ }),
665
+ n(v, { onClick: x }, {
666
+ default: s(() => [
667
+ a(g(e.value ? "Save Changes" : "Add Resource"), 1)
668
+ ]),
669
+ _: 1
670
+ })
671
+ ]),
672
+ _: 1
673
+ })
674
+ ]),
675
+ _: 1
676
+ })
677
+ ]),
678
+ _: 1
679
+ }, 8, ["open"])
680
+ ], 64);
681
+ };
682
+ }
683
+ }), qe = { class: "mb-8" }, Ge = { class: "flex justify-end gap-4 mt-8" }, We = /* @__PURE__ */ H({
684
+ __name: "Step3",
685
+ setup(R) {
686
+ const r = A("form"), N = A("steps"), $ = A("activeStep", O(1)), f = () => {
687
+ N.value[2].completed = !0, $.value = 4;
688
+ };
689
+ return (_, e) => {
690
+ const i = o("Label"), y = o("InputGroupInput"), x = o("Search"), d = o("InputGroupAddon"), C = o("SelectValue"), b = o("SelectTrigger"), w = o("SelectItem"), D = o("SelectGroup"), S = o("SelectContent"), m = o("Select"), l = o("InputGroup"), v = o("Button"), U = o("Card");
691
+ return c(), V(U, { class: "p-8" }, {
692
+ default: s(() => [
693
+ t("div", qe, [
694
+ n(i, {
695
+ for: "lead-time",
696
+ class: "text-base font-medium mb-2"
697
+ }, {
698
+ default: s(() => [...e[6] || (e[6] = [
699
+ a(" Minimum Advance Notice - Lead Time ", -1)
700
+ ])]),
701
+ _: 1
702
+ }),
703
+ n(l, { class: "max-w-md" }, {
704
+ default: s(() => [
705
+ n(y, {
706
+ placeholder: "0",
707
+ id: "lead-time",
708
+ modelValue: u(r).minimumAdvanceNotice.value,
709
+ "onUpdate:modelValue": e[0] || (e[0] = (T) => u(r).minimumAdvanceNotice.value = T)
710
+ }, null, 8, ["modelValue"]),
711
+ n(d, null, {
712
+ default: s(() => [
713
+ n(x)
714
+ ]),
715
+ _: 1
716
+ }),
717
+ n(d, { align: "inline-end" }, {
718
+ default: s(() => [
719
+ n(m, {
720
+ modelValue: u(r).minimumAdvanceNotice.unit,
721
+ "onUpdate:modelValue": e[1] || (e[1] = (T) => u(r).minimumAdvanceNotice.unit = T)
722
+ }, {
723
+ default: s(() => [
724
+ n(b, { class: "w-[180px] border-0 bg-transparent -mr-1.5" }, {
725
+ default: s(() => [
726
+ n(C)
727
+ ]),
728
+ _: 1
729
+ }),
730
+ n(S, null, {
731
+ default: s(() => [
732
+ n(D, null, {
733
+ default: s(() => [
734
+ n(w, { value: "minutes" }, {
735
+ default: s(() => [...e[7] || (e[7] = [
736
+ a(" Minutes ", -1)
737
+ ])]),
738
+ _: 1
739
+ }),
740
+ n(w, { value: "hours" }, {
741
+ default: s(() => [...e[8] || (e[8] = [
742
+ a(" Hours ", -1)
743
+ ])]),
744
+ _: 1
745
+ }),
746
+ n(w, { value: "days" }, {
747
+ default: s(() => [...e[9] || (e[9] = [
748
+ a(" Days ", -1)
749
+ ])]),
750
+ _: 1
751
+ })
752
+ ]),
753
+ _: 1
754
+ })
755
+ ]),
756
+ _: 1
757
+ })
758
+ ]),
759
+ _: 1
760
+ }, 8, ["modelValue"])
761
+ ]),
762
+ _: 1
763
+ })
764
+ ]),
765
+ _: 1
766
+ }),
767
+ e[10] || (e[10] = t("p", { class: "text-sm text-muted-foreground mt-2" }, " Set how far in advance a customer must book your slot. ", -1))
768
+ ]),
769
+ e[19] || (e[19] = t("hr", null, null, -1)),
770
+ t("div", null, [
771
+ n(i, {
772
+ for: "capacity",
773
+ class: "text-base font-medium mb-2"
774
+ }, {
775
+ default: s(() => [...e[11] || (e[11] = [
776
+ a(" Service Visibility ", -1)
777
+ ])]),
778
+ _: 1
779
+ }),
780
+ n(l, { class: "max-w-md" }, {
781
+ default: s(() => [
782
+ n(y, {
783
+ placeholder: "1",
784
+ id: "capacity",
785
+ modelValue: u(r).serviceVisibility,
786
+ "onUpdate:modelValue": e[2] || (e[2] = (T) => u(r).serviceVisibility = T)
787
+ }, null, 8, ["modelValue"]),
788
+ n(d, null, {
789
+ default: s(() => [
790
+ n(x)
791
+ ]),
792
+ _: 1
793
+ }),
794
+ n(d, { align: "inline-end" }, {
795
+ default: s(() => [...e[12] || (e[12] = [
796
+ a(" days ", -1)
797
+ ])]),
798
+ _: 1
799
+ })
800
+ ]),
801
+ _: 1
802
+ }),
803
+ e[13] || (e[13] = t("p", { class: "text-sm text-muted-foreground mt-2" }, " Set how many days in advance the service is visible to customers. ", -1))
804
+ ]),
805
+ e[20] || (e[20] = t("hr", null, null, -1)),
806
+ t("div", null, [
807
+ n(i, {
808
+ for: "max-tickets",
809
+ class: "text-base font-medium mb-2"
810
+ }, {
811
+ default: s(() => [...e[14] || (e[14] = [
812
+ a(" Max Tickets Per Reservation ", -1)
813
+ ])]),
814
+ _: 1
815
+ }),
816
+ n(l, { class: "max-w-md" }, {
817
+ default: s(() => [
818
+ n(y, {
819
+ placeholder: "10",
820
+ type: "number",
821
+ id: "max-tickets",
822
+ class: "no-spinner",
823
+ min: "1",
824
+ modelValue: u(r).maxTicketsPerReservation,
825
+ "onUpdate:modelValue": e[3] || (e[3] = (T) => u(r).maxTicketsPerReservation = T)
826
+ }, null, 8, ["modelValue"]),
827
+ n(d, { align: "inline-end" }, {
828
+ default: s(() => [...e[15] || (e[15] = [
829
+ a(" tickets ", -1)
830
+ ])]),
831
+ _: 1
832
+ })
833
+ ]),
834
+ _: 1
835
+ }),
836
+ e[16] || (e[16] = t("p", { class: "text-sm text-muted-foreground mt-2" }, " Maximum number of spots one customer can book at once. ", -1))
837
+ ]),
838
+ t("div", Ge, [
839
+ n(v, {
840
+ variant: "outline",
841
+ onClick: e[4] || (e[4] = (T) => $.value = 2)
842
+ }, {
843
+ default: s(() => [...e[17] || (e[17] = [
844
+ a(" Back ", -1)
845
+ ])]),
846
+ _: 1
847
+ }),
848
+ n(v, {
849
+ onClick: e[5] || (e[5] = (T) => f())
850
+ }, {
851
+ default: s(() => [...e[18] || (e[18] = [
852
+ a(" Continue ", -1)
853
+ ])]),
854
+ _: 1
855
+ })
856
+ ])
857
+ ]),
858
+ _: 1
859
+ });
860
+ };
861
+ }
862
+ }), Ye = { class: "space-y-6" }, Ke = { class: "text-lg font-medium" }, Qe = { class: "flex gap-6" }, Xe = { class: "ml-2 font-medium" }, Ze = { class: "ml-2 font-medium" }, he = { class: "text-xs text-muted-foreground mb-2" }, et = { class: "space-y-2" }, tt = { class: "flex-1" }, nt = { class: "font-medium text-sm" }, lt = { class: "flex gap-4 mt-1 text-xs text-muted-foreground" }, st = { class: "space-y-2 text-sm" }, ot = {
863
+ key: 0,
864
+ class: "ml-2 font-medium"
865
+ }, at = {
866
+ key: 1,
867
+ class: "ml-2 font-medium"
868
+ }, it = { class: "ml-2 font-medium" }, ut = { class: "ml-2 font-medium" }, rt = { class: "flex gap-4 justify-end mt-8" }, dt = {
869
+ key: 0,
870
+ class: "flex gap-2"
871
+ }, mt = { key: 1 }, pt = /* @__PURE__ */ H({
872
+ __name: "Step4",
873
+ setup(R) {
874
+ const { navigateTo: r } = K(), { config: N } = ie(), $ = ue(N.project), f = A("form"), _ = A("activeStep", O(1)), e = O(!1), i = (x) => {
875
+ const C = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].filter((b, w) => x.openingHours?.[w]?.length > 0);
876
+ return C.length === 0 ? "No hours set" : C.length === 7 ? "Open all week" : C.join(", ");
877
+ }, y = async () => {
878
+ try {
879
+ e.value = !0;
880
+ let x = JSON.parse(JSON.stringify(f));
881
+ x.type = "regular", x.currency = "USD", x.paymentType = "full", await $.add(N.agendaCollection, x), r("/");
882
+ } catch (x) {
883
+ console.error("Error creating agenda:", x), alert("Error creating agenda");
884
+ } finally {
885
+ e.value = !1;
886
+ }
887
+ };
888
+ return (x, d) => {
889
+ const C = o("Separator"), b = o("Button"), w = o("Spinner"), D = o("Card");
890
+ return c(), V(D, { class: "p-8" }, {
891
+ default: s(() => [
892
+ t("div", Ye, [
893
+ t("div", null, [
894
+ d[2] || (d[2] = t("p", { class: "text-xs text-muted-foreground mb-1" }, "Service name", -1)),
895
+ t("p", Ke, g(u(f).serviceName), 1)
896
+ ]),
897
+ n(C),
898
+ t("div", null, [
899
+ d[5] || (d[5] = t("p", { class: "text-xs text-muted-foreground mb-2" }, "Service details", -1)),
900
+ t("div", Qe, [
901
+ t("div", null, [
902
+ d[3] || (d[3] = t("span", { class: "text-sm text-muted-foreground" }, "Duration:", -1)),
903
+ t("span", Xe, g(u(f).pricingOptions[0].duration) + " min", 1)
904
+ ]),
905
+ t("div", null, [
906
+ d[4] || (d[4] = t("span", { class: "text-sm text-muted-foreground" }, "Price:", -1)),
907
+ t("span", Ze, "$" + g(u(f).pricingOptions[0].price), 1)
908
+ ])
909
+ ])
910
+ ]),
911
+ n(C),
912
+ t("div", null, [
913
+ t("p", he, "Resources (" + g(u(f).resources.length) + ")", 1),
914
+ t("div", et, [
915
+ (c(!0), k(I, null, M(u(f).resources, (S) => (c(), k("div", {
916
+ key: S.id,
917
+ class: "p-3 border rounded-lg flex items-start gap-3"
918
+ }, [
919
+ t("div", {
920
+ class: "size-8 rounded-full flex items-center justify-center text-white text-xs font-medium flex-shrink-0",
921
+ style: q({ backgroundColor: S.color })
922
+ }, g(S.avatarLabel || S.name.charAt(0).toUpperCase()), 5),
923
+ t("div", tt, [
924
+ t("p", nt, g(S.name), 1),
925
+ t("div", lt, [
926
+ t("span", null, "Capacity: " + g(S.capacity), 1),
927
+ t("span", null, "Interval: " + g(S.interval) + "min", 1),
928
+ t("span", null, g(i(S)), 1)
929
+ ])
930
+ ])
931
+ ]))), 128))
932
+ ])
933
+ ]),
934
+ n(C),
935
+ t("div", null, [
936
+ d[9] || (d[9] = t("p", { class: "text-xs text-muted-foreground mb-2" }, "Availability settings", -1)),
937
+ t("div", st, [
938
+ t("div", null, [
939
+ d[6] || (d[6] = t("span", { class: "text-muted-foreground" }, "Minimum Advance Notice:", -1)),
940
+ u(f).minimumAdvanceNotice.value !== 0 ? (c(), k("span", ot, g(u(f).minimumAdvanceNotice.value) + " " + g(u(f).minimumAdvanceNotice.unit), 1)) : (c(), k("span", at, "None"))
941
+ ]),
942
+ t("div", null, [
943
+ d[7] || (d[7] = t("span", { class: "text-muted-foreground" }, "Booking Window:", -1)),
944
+ t("span", it, g(u(f).serviceVisibility) + " days", 1)
945
+ ]),
946
+ t("div", null, [
947
+ d[8] || (d[8] = t("span", { class: "text-muted-foreground" }, "Max Tickets Per Reservation:", -1)),
948
+ t("span", ut, g(u(f).maxTicketsPerReservation), 1)
949
+ ])
950
+ ])
951
+ ])
952
+ ]),
953
+ t("div", rt, [
954
+ n(b, {
955
+ variant: "outline",
956
+ onClick: d[0] || (d[0] = (S) => _.value = 3)
957
+ }, {
958
+ default: s(() => [...d[10] || (d[10] = [
959
+ a(" Back ", -1)
960
+ ])]),
961
+ _: 1
962
+ }),
963
+ n(b, {
964
+ onClick: d[1] || (d[1] = (S) => y()),
965
+ disabled: e.value
966
+ }, {
967
+ default: s(() => [
968
+ e.value ? (c(), k("span", dt, [
969
+ n(w),
970
+ d[11] || (d[11] = a(" Creating... ", -1))
971
+ ])) : (c(), k("span", mt, "Create Agenda"))
972
+ ]),
973
+ _: 1
974
+ }, 8, ["disabled"])
975
+ ])
976
+ ]),
977
+ _: 1
978
+ });
979
+ };
980
+ }
981
+ }), ct = { class: "container mx-auto p-8" }, ft = { class: "max-w-7xl mx-auto" }, vt = { class: "flex items-center gap-3 mb-8" }, gt = { class: "flex gap-6" }, xt = { class: "w-80" }, _t = { class: "flex-1" }, kt = /* @__PURE__ */ H({
982
+ __name: "regular",
983
+ emits: ["back"],
984
+ setup(R, { emit: r }) {
985
+ const { navigateTo: N } = K();
986
+ re(() => [
987
+ { text: "Create", href: "/create" },
988
+ { text: "Regular Booking" }
989
+ ]);
990
+ const $ = ae({
991
+ serviceName: "",
992
+ resources: [],
993
+ pricingOptions: [
994
+ {
995
+ id: "1",
996
+ name: "Standard Service",
997
+ price: 0,
998
+ duration: 30,
999
+ isDefault: !0
1000
+ }
1001
+ ],
1002
+ minimumAdvanceNotice: {
1003
+ value: 0,
1004
+ unit: "minutes"
1005
+ },
1006
+ serviceVisibility: 60,
1007
+ maxTicketsPerReservation: 10,
1008
+ customerInformationFields: [
1009
+ {
1010
+ id: "firstName",
1011
+ fieldName: "First Name",
1012
+ fieldType: "text",
1013
+ required: !0,
1014
+ visible: !0,
1015
+ isNativeField: !0
1016
+ },
1017
+ {
1018
+ id: "lastName",
1019
+ fieldName: "Last Name",
1020
+ fieldType: "text",
1021
+ required: !0,
1022
+ visible: !0,
1023
+ isNativeField: !0
1024
+ },
1025
+ {
1026
+ id: "phone",
1027
+ fieldName: "Phone No",
1028
+ fieldType: "tel",
1029
+ required: !0,
1030
+ visible: !0,
1031
+ isNativeField: !0
1032
+ },
1033
+ {
1034
+ id: "email",
1035
+ fieldName: "Email",
1036
+ fieldType: "email",
1037
+ required: !0,
1038
+ visible: !0,
1039
+ isNativeField: !0
1040
+ }
1041
+ ]
1042
+ }), f = O([
1043
+ {
1044
+ step: 1,
1045
+ title: "Service Details",
1046
+ completed: !1
1047
+ },
1048
+ {
1049
+ step: 2,
1050
+ title: "Resource Setup",
1051
+ completed: !1
1052
+ },
1053
+ {
1054
+ step: 3,
1055
+ title: "Availability Settings",
1056
+ completed: !1
1057
+ },
1058
+ {
1059
+ step: 4,
1060
+ title: "Review & Publish",
1061
+ completed: !1
1062
+ }
1063
+ ]), _ = O(1);
1064
+ return E("form", $), E("steps", f), E("activeStep", _), (e, i) => {
1065
+ const y = o("Button");
1066
+ return c(), k("div", ct, [
1067
+ t("div", ft, [
1068
+ t("div", vt, [
1069
+ n(y, {
1070
+ variant: "ghost",
1071
+ size: "icon",
1072
+ class: "rounded-lg",
1073
+ onClick: i[0] || (i[0] = (x) => u(N)("/create"))
1074
+ }, {
1075
+ default: s(() => [
1076
+ n(u(xe), { class: "w-5 h-5" })
1077
+ ]),
1078
+ _: 1
1079
+ }),
1080
+ i[2] || (i[2] = t("h2", { class: "text-2xl font-semibold" }, "Agenda Selection", -1))
1081
+ ]),
1082
+ t("div", gt, [
1083
+ t("div", xt, [
1084
+ n(be, {
1085
+ steps: f.value,
1086
+ modelValue: _.value,
1087
+ "onUpdate:modelValue": i[1] || (i[1] = (x) => _.value = x)
1088
+ }, null, 8, ["steps", "modelValue"])
1089
+ ]),
1090
+ t("div", _t, [
1091
+ _.value === 1 ? (c(), V(ke, { key: 0 })) : _.value === 2 ? (c(), V(Je, { key: 1 })) : _.value === 3 ? (c(), V(We, { key: 2 })) : _.value === 4 ? (c(), V(pt, { key: 3 })) : F("", !0)
1092
+ ])
1093
+ ])
1094
+ ])
1095
+ ]);
1096
+ };
1097
+ }
1098
+ });
1099
+ export {
1100
+ kt as default
1101
+ };