@oneclick.dev/cms-core-modules 0.0.101 → 0.0.103

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 (117) hide show
  1. package/dist/Acquisition-Br1Pfny3.js +1 -0
  2. package/dist/{Acquisition-BJXNY4ko.mjs → Acquisition-CPlZzUBo.mjs} +40 -40
  3. package/dist/AgendaOpeningHoursCard-B7ROIPWw.js +1 -0
  4. package/dist/AgendaOpeningHoursCard-Cp4wxUeK.mjs +172 -0
  5. package/dist/AppointmentListTable-DZJNmTMb.mjs +177 -0
  6. package/dist/AppointmentListTable-Dieu9US_.js +1 -0
  7. package/dist/Audience-BfkrmBuQ.js +1 -0
  8. package/dist/{Audience-CIzVtUvV.mjs → Audience-DTblSAiL.mjs} +89 -89
  9. package/dist/Content-BHr_rPVY.js +1 -0
  10. package/dist/{Content-CWhjurn_.mjs → Content-CYOZKvWK.mjs} +56 -56
  11. package/dist/{ContentEditor-Cjqgb64R.mjs → ContentEditor-B1nfKG_5.mjs} +706 -677
  12. package/dist/{ContentEditor-YgOS3kxS.js → ContentEditor-DdFU8piH.js} +15 -16
  13. package/dist/{Create-6uT9HWar.mjs → Create-BRBh0xjM.mjs} +2 -2
  14. package/dist/{Create-DuZ5nZrX.js → Create-qPeQxkdl.js} +1 -1
  15. package/dist/{DateFormatter-2B0R-DY4.mjs → DateFormatter-Bw-87W31.mjs} +212 -227
  16. package/dist/DateFormatter-CYAD4GBN.js +1 -0
  17. package/dist/{Detail-BZ-iE9vf.js → Detail-C857g62L.js} +1 -1
  18. package/dist/{Detail-CJVMJDP7.mjs → Detail-CujdFApD.mjs} +2 -2
  19. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-DWMqQvHl.mjs +76 -0
  20. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-kpjbVSXg.js +1 -0
  21. package/dist/{Entries-DkRhOt95.js → Entries-BaS6H6ak.js} +1 -1
  22. package/dist/{Entries-dLlCrXXe.mjs → Entries-C8UJkrVC.mjs} +1 -1
  23. package/dist/{Find-Bd1uLqSa.mjs → Find-B24ZEhYM.mjs} +1 -1
  24. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-Bc946oSc.mjs → NewReservationDialog.vue_vue_type_script_setup_true_lang-9Q7TMm4u.mjs} +37 -37
  25. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-CqERfyYb.js → NewReservationDialog.vue_vue_type_script_setup_true_lang-DiNzGl-q.js} +1 -1
  26. package/dist/{Overview-DoOASlNz.mjs → Overview-3HWhsqaz.mjs} +2 -2
  27. package/dist/Overview-BrCwozey.js +1 -0
  28. package/dist/{Overview-37nilXzE.js → Overview-CpHhuiaV.js} +1 -1
  29. package/dist/{Overview-DeQQ0FY3.js → Overview-DAxCu9XC.js} +1 -1
  30. package/dist/{Overview-C--dq51X.mjs → Overview-D_T3K6aq.mjs} +1 -1
  31. package/dist/{Overview-CGo4jaaA.mjs → Overview-kaMhsIUq.mjs} +21 -21
  32. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-Cz_22Oce.mjs +2927 -0
  33. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-DPPNc-Z5.js +349 -0
  34. package/dist/SeoHealth-09sEOu3G.js +1 -0
  35. package/dist/{SeoHealth-DVFDz3em.mjs → SeoHealth-BzcWd_w7.mjs} +29 -29
  36. package/dist/TableView-CPAw3h8g.js +4 -0
  37. package/dist/TableView-DXmEF6pY.mjs +6143 -0
  38. package/dist/agenda-BNG05SAq.js +1 -0
  39. package/dist/agenda-D1RxMxBS.mjs +1152 -0
  40. package/dist/availability-CMrRa5y2.mjs +269 -0
  41. package/dist/availability-Cf2YfMwM.js +1 -0
  42. package/dist/booking-data-DgJd0BcM.mjs +889 -0
  43. package/dist/booking-data-Di5GmH_8.js +1 -0
  44. package/dist/cms-core-modules.css +1 -1
  45. package/dist/{exceptions-Bp5BSvxO.js → exceptions-CI0B4xVj.js} +1 -1
  46. package/dist/{exceptions-C97cNZYl.mjs → exceptions-vo8SA5SE.mjs} +68 -68
  47. package/dist/index-BtujSJeg.js +35 -0
  48. package/dist/{index-CrGjxSwa.mjs → index-CrgzoTyR.mjs} +1 -1
  49. package/dist/{index-D2a6wEPh.js → index-DPd3waTN.js} +1 -1
  50. package/dist/{index-CABh6Qn6.mjs → index-DrXxXB2F.mjs} +15 -15
  51. package/dist/{index-B-lVEpFX.mjs → index-MYWjg0zi.mjs} +3 -3
  52. package/dist/index-dOdMm1pV.mjs +1105 -0
  53. package/dist/index.cjs.js +1 -1
  54. package/dist/index.mjs +201 -148
  55. package/dist/interpolation-DEDSLETn.mjs +128 -0
  56. package/dist/interpolation-DERg6Lwt.js +1 -0
  57. package/dist/orders-CzzcFQha.mjs +559 -0
  58. package/dist/orders-ETtbA4aQ.js +1 -0
  59. package/dist/{payment-Bosr0m3u.mjs → payment-C3ohkehF.mjs} +1 -1
  60. package/dist/{payment-DDnC03jb.js → payment-Dfr-Ro-a.js} +1 -1
  61. package/dist/{resources-BtF5RUUq.js → resources-CxeFd57z.js} +1 -1
  62. package/dist/{resources-B7qDBC91.mjs → resources-WI_4SO6T.mjs} +2 -2
  63. package/dist/server-handlers.cjs.js +1 -1
  64. package/dist/server-handlers.mjs +457 -387
  65. package/dist/src/appointments/chat-components/AgendaOpeningHoursCard.vue.d.ts +15 -0
  66. package/dist/src/appointments/components/edit/CustomerInformationFieldEditorDialog.vue.d.ts +17 -5
  67. package/dist/src/appointments/components/edit/EventDialog/BookingsList.vue.d.ts +8 -3
  68. package/dist/src/appointments/components/edit/EventDialog/EventDialog.vue.d.ts +1 -0
  69. package/dist/src/appointments/components/edit/EventDialog/ReservationDetailDialog.vue.d.ts +6 -3
  70. package/dist/src/appointments/components/edit/EventTimeline.vue.d.ts +3 -0
  71. package/dist/src/appointments/components/edit/EventView.vue.d.ts +6 -1
  72. package/dist/src/appointments/components/edit/MetadataSchemaEditorDialog.vue.d.ts +12 -0
  73. package/dist/src/appointments/components/edit/OrderMetadataDisplay.vue.d.ts +21 -0
  74. package/dist/src/appointments/components/edit/dashboard/BookingsList.vue.d.ts +8 -3
  75. package/dist/src/appointments/index.d.ts +53 -0
  76. package/dist/src/appointments/pages/edit/agenda.vue.d.ts +3 -1
  77. package/dist/src/appointments/pages/edit/availability.vue.d.ts +1 -26
  78. package/dist/src/appointments/pages/edit/booking-data.vue.d.ts +65 -0
  79. package/dist/src/appointments/pages/edit/orders.vue.d.ts +7 -3
  80. package/dist/src/appointments/tools.d.ts +52 -0
  81. package/dist/src/appointments/types.d.ts +12 -0
  82. package/dist/src/table/config.d.ts +200 -0
  83. package/dist/src/table/get_data_flow-DEFAULT.json.d.ts +129 -0
  84. package/dist/src/table/index.d.ts +200 -0
  85. package/dist/utils-CanmrIWO.mjs +47 -0
  86. package/dist/utils-Yd6F5mea.js +3 -0
  87. package/package.json +2 -2
  88. package/src/appointments/tools.ts +38 -0
  89. package/dist/Acquisition-DPScJD4t.js +0 -1
  90. package/dist/AppointmentListTable-CQ0WIXtj.js +0 -1
  91. package/dist/AppointmentListTable-aV_UJd6j.mjs +0 -159
  92. package/dist/Audience-Csw1QLmw.js +0 -1
  93. package/dist/Content-dYr7kYT0.js +0 -1
  94. package/dist/DateFormatter-DbtOLV0L.js +0 -1
  95. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs +0 -74
  96. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-ozYrxb2g.js +0 -1
  97. package/dist/Overview-DBu86Ikb.js +0 -1
  98. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-COfCOMsz.js +0 -349
  99. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-CYXkhhdp.mjs +0 -2383
  100. package/dist/SeoHealth-DzftZW1m.js +0 -1
  101. package/dist/TableView-CIJs118q.mjs +0 -5929
  102. package/dist/TableView-DzZYf34i.js +0 -4
  103. package/dist/agenda-DMT75Qfo.mjs +0 -1133
  104. package/dist/agenda-DxD4RMsy.js +0 -1
  105. package/dist/availability-B1D4Fyzi.mjs +0 -629
  106. package/dist/availability-DxrUcYbW.js +0 -1
  107. package/dist/index-BbqRTXuU.js +0 -35
  108. package/dist/index-D4GsbUId.mjs +0 -1091
  109. package/dist/interpolation-BBwG_ON6.mjs +0 -65
  110. package/dist/interpolation-CsOrww73.js +0 -1
  111. package/dist/orders-BRfXlWgV.mjs +0 -397
  112. package/dist/orders-CrCz1WTR.js +0 -1
  113. package/dist/regular-slots-Cc1jmKuC.mjs +0 -222
  114. package/dist/regular-slots-DBs1XVeN.js +0 -1
  115. package/dist/src/appointments/pages/edit/regular-slots.vue.d.ts +0 -2
  116. package/dist/utils-BVKy9S2J.mjs +0 -29
  117. package/dist/utils-D6CaKJbp.js +0 -2
@@ -1,629 +0,0 @@
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-DXa-Xxue.mjs";
3
- import { Pencil as te, Eye as ie, EyeOff as oe, Trash2 as le, PlusCircle as ne } from "lucide-vue-next";
4
- import { useModuleRoute as se, useModule as ae, useFirebaseIntegration as de } from "@oneclick.dev/cms-kit";
5
- const re = { class: "space-y-6 py-4" }, ue = { key: 0 }, me = { key: 1 }, pe = { class: "flex items-center gap-3" }, fe = {
6
- key: 2,
7
- class: "grid gap-2"
8
- }, ce = { class: "w-full flex justify-between items-center" }, ve = { class: "flex items-center gap-2 ml-auto" }, ge = /* @__PURE__ */ K({
9
- __name: "CustomerInformationFieldEditorDialog",
10
- emits: ["add-field", "update-field", "remove-field"],
11
- setup(X, { expose: D, emit: F }) {
12
- const I = F, c = k(!1), l = k("add"), n = Q({
13
- id: "",
14
- fieldName: "",
15
- fieldDescription: "",
16
- fieldType: "text",
17
- required: !1,
18
- isNativeField: !1,
19
- visible: !0,
20
- options: []
21
- }), M = [
22
- { value: "text", label: "Text Box" },
23
- { value: "checkbox", label: "Checkbox" },
24
- { value: "radio", label: "Radio Button" },
25
- { value: "select", label: "Select" }
26
- ], T = (o) => {
27
- l.value = o ? "edit" : "add", g.value = [], n.id = o?.id || "", n.fieldName = o?.fieldName || "", n.fieldDescription = o?.fieldDescription || "", n.fieldType = o?.fieldType || "text", n.required = o?.required || !1, n.isNativeField = o?.isNativeField || !1, n.options = o?.options || [], n.visible = o?.visible !== void 0 ? o.visible : !0, c.value = !0;
28
- }, L = () => {
29
- c.value = !1, g.value = [];
30
- }, q = () => {
31
- $() && (I("add-field", { ...n }), c.value = !1);
32
- }, E = () => {
33
- $() && (I("update-field", { ...n }), c.value = !1);
34
- }, P = () => {
35
- I("remove-field", n.id), c.value = !1;
36
- }, g = k([]), $ = () => (g.value = [], n.fieldName = n.fieldName.trim(), n.fieldName ? !0 : (g.value.push("Field name is required."), !1));
37
- return D({
38
- openDialog: T
39
- }), (o, e) => {
40
- const p = s("DialogTitle"), V = s("DialogHeader"), b = s("Label"), y = s("Input"), z = s("SelectValue"), G = s("SelectTrigger"), S = s("SelectItem"), j = s("SelectContent"), O = s("Select"), H = s("TagsInputItemText"), C = s("TagsInputItemDelete"), B = s("TagsInputItem"), W = s("TagsInputInput"), x = s("TagsInput"), r = s("Checkbox"), _ = s("Button"), J = s("DialogFooter"), Y = s("DialogScrollContent"), Z = s("Dialog");
41
- return u(), v(Z, {
42
- open: c.value,
43
- "onUpdate:open": e[5] || (e[5] = (m) => c.value = m)
44
- }, {
45
- default: i(() => [
46
- t(Y, { class: "sm:max-w-2xl" }, {
47
- default: i(() => [
48
- t(V, null, {
49
- default: i(() => [
50
- t(p, null, {
51
- default: i(() => [...e[6] || (e[6] = [
52
- d("Customer Information", -1)
53
- ])]),
54
- _: 1
55
- })
56
- ]),
57
- _: 1
58
- }),
59
- a("div", re, [
60
- a("div", null, [
61
- t(b, {
62
- class: "text-bsmase font-normal mb-1.5",
63
- for: "customer-info-field-dialog-fieldname"
64
- }, {
65
- default: i(() => [...e[7] || (e[7] = [
66
- d("Field Name", -1)
67
- ])]),
68
- _: 1
69
- }),
70
- t(y, {
71
- modelValue: n.fieldName,
72
- "onUpdate:modelValue": e[0] || (e[0] = (m) => n.fieldName = m),
73
- id: "customer-info-field-dialog-fieldname"
74
- }, null, 8, ["modelValue"])
75
- ]),
76
- a("div", null, [
77
- t(b, {
78
- class: "text-sm font-normal mb-1.5",
79
- for: "customer-info-field-dialog-field-description"
80
- }, {
81
- default: i(() => [...e[8] || (e[8] = [
82
- d("Field Description", -1)
83
- ])]),
84
- _: 1
85
- }),
86
- t(y, {
87
- modelValue: n.fieldDescription,
88
- "onUpdate:modelValue": e[1] || (e[1] = (m) => n.fieldDescription = m),
89
- id: "customer-info-field-dialog-field-description"
90
- }, null, 8, ["modelValue"])
91
- ]),
92
- n.isNativeField ? N("", !0) : (u(), f("div", ue, [
93
- t(b, { class: "text-sm font-normal mb-1.5" }, {
94
- default: i(() => [...e[9] || (e[9] = [
95
- d("Field Type", -1)
96
- ])]),
97
- _: 1
98
- }),
99
- t(O, {
100
- modelValue: n.fieldType,
101
- "onUpdate:modelValue": e[2] || (e[2] = (m) => n.fieldType = m)
102
- }, {
103
- default: i(() => [
104
- t(G, null, {
105
- default: i(() => [
106
- t(z, { placeholder: "Select field type" })
107
- ]),
108
- _: 1
109
- }),
110
- t(j, null, {
111
- default: i(() => [
112
- (u(), f(R, null, U(M, (m) => t(S, {
113
- key: m.value,
114
- value: m.value
115
- }, {
116
- default: i(() => [
117
- d(w(m.label), 1)
118
- ]),
119
- _: 2
120
- }, 1032, ["value"])), 64))
121
- ]),
122
- _: 1
123
- })
124
- ]),
125
- _: 1
126
- }, 8, ["modelValue"])
127
- ])),
128
- n.fieldType === "select" || n.fieldType === "radio" ? (u(), f("div", me, [
129
- t(b, {
130
- class: "text-sm font-normal mb-1.5",
131
- for: "customer-info-field-dialog-field-new-option"
132
- }, {
133
- default: i(() => [...e[10] || (e[10] = [
134
- d("Options", -1)
135
- ])]),
136
- _: 1
137
- }),
138
- t(x, {
139
- modelValue: n.options,
140
- "onUpdate:modelValue": e[3] || (e[3] = (m) => n.options = m)
141
- }, {
142
- default: i(() => [
143
- (u(!0), f(R, null, U(n.options, (m) => (u(), v(B, {
144
- key: m,
145
- value: m
146
- }, {
147
- default: i(() => [
148
- t(H),
149
- t(C)
150
- ]),
151
- _: 1
152
- }, 8, ["value"]))), 128)),
153
- t(W, {
154
- placeholder: "New option...",
155
- id: "customer-info-field-dialog-field-new-option"
156
- })
157
- ]),
158
- _: 1
159
- }, 8, ["modelValue"])
160
- ])) : N("", !0),
161
- a("div", pe, [
162
- t(r, {
163
- id: "customer-info-field-dialog-field-required",
164
- modelValue: n.required,
165
- "onUpdate:modelValue": e[4] || (e[4] = (m) => n.required = m)
166
- }, null, 8, ["modelValue"]),
167
- t(b, {
168
- for: "customer-info-field-dialog-field-required",
169
- class: "text-base font-normal cursor-pointer"
170
- }, {
171
- default: i(() => [...e[11] || (e[11] = [
172
- d(" Is this field mandatory? ", -1)
173
- ])]),
174
- _: 1
175
- })
176
- ]),
177
- g.value.length > 0 ? (u(), f("p", fe, [
178
- (u(!0), f(R, null, U(g.value, (m, h) => (u(), f("span", {
179
- key: h,
180
- class: "text-sm text-red-600 block"
181
- }, w(m), 1))), 128))
182
- ])) : N("", !0)
183
- ]),
184
- t(J, { class: "gap-2" }, {
185
- default: i(() => [
186
- a("div", ce, [
187
- l.value === "edit" && !n.isNativeField ? (u(), v(_, {
188
- key: 0,
189
- variant: "destructive",
190
- onClick: P
191
- }, {
192
- default: i(() => [...e[12] || (e[12] = [
193
- d(" Remove Field ", -1)
194
- ])]),
195
- _: 1
196
- })) : N("", !0),
197
- a("div", ve, [
198
- t(_, {
199
- variant: "outline",
200
- onClick: L
201
- }, {
202
- default: i(() => [...e[13] || (e[13] = [
203
- d(" Cancel ", -1)
204
- ])]),
205
- _: 1
206
- }),
207
- l.value === "add" ? (u(), v(_, {
208
- key: 0,
209
- onClick: q
210
- }, {
211
- default: i(() => [...e[14] || (e[14] = [
212
- d(" Add Field ", -1)
213
- ])]),
214
- _: 1
215
- })) : (u(), v(_, {
216
- key: 1,
217
- onClick: E
218
- }, {
219
- default: i(() => [...e[15] || (e[15] = [
220
- d(" Update Field ", -1)
221
- ])]),
222
- _: 1
223
- }))
224
- ])
225
- ])
226
- ]),
227
- _: 1
228
- })
229
- ]),
230
- _: 1
231
- })
232
- ]),
233
- _: 1
234
- }, 8, ["open"]);
235
- };
236
- }
237
- }), be = {
238
- key: 0,
239
- class: "max-w-2xl"
240
- }, ye = {
241
- key: 0,
242
- class: "text-sm text-orange-500 mt-2"
243
- }, xe = { class: "space-y-3" }, _e = { class: "flex items-center justify-between rounded-lg border p-4 bg-card" }, Ie = { class: "space-y-2" }, Ne = { class: "border rounded-md p-4 mb-4" }, ke = { class: "font-medium text-sm" }, Fe = { class: "flex justify-start mt-8" }, Ae = /* @__PURE__ */ K({
244
- __name: "availability",
245
- setup(X) {
246
- const { params: D } = se(), { config: F } = ae(), I = de(F.project), c = [
247
- {
248
- id: "firstName",
249
- fieldName: "First Name",
250
- fieldType: "text",
251
- required: !0,
252
- visible: !0,
253
- isNativeField: !0
254
- },
255
- {
256
- id: "lastName",
257
- fieldName: "Last Name",
258
- fieldType: "text",
259
- required: !0,
260
- visible: !0,
261
- isNativeField: !0
262
- },
263
- {
264
- id: "phone",
265
- fieldName: "Phone No",
266
- fieldType: "tel",
267
- required: !0,
268
- visible: !0,
269
- isNativeField: !0
270
- },
271
- {
272
- id: "email",
273
- fieldName: "Email",
274
- fieldType: "email",
275
- required: !0,
276
- visible: !0,
277
- isNativeField: !0
278
- }
279
- ], l = Q({
280
- minimumAdvanceNotice: {
281
- value: 0,
282
- unit: "minutes"
283
- },
284
- serviceVisibility: 60,
285
- maxTicketsPerReservation: "",
286
- customerInformationFields: [...c],
287
- needsApproval: !1
288
- }), n = k(!1), M = k(!0), T = k(null), L = async () => {
289
- n.value = !0;
290
- try {
291
- const o = D.value.id;
292
- if (!o) throw new Error("Missing agenda ID");
293
- await I.update(F.agendaCollection, o, {
294
- minimumAdvanceNotice: {
295
- value: Number(l.minimumAdvanceNotice?.value) || 0,
296
- unit: l.minimumAdvanceNotice?.unit ?? "minutes"
297
- },
298
- serviceVisibility: Math.max(Number(l.serviceVisibility) || 1, 1),
299
- maxTicketsPerReservation: Math.max(Number(l.maxTicketsPerReservation) || 0, 0),
300
- customerInformationFields: l.customerInformationFields ?? [],
301
- needsApproval: l.needsApproval || !1
302
- });
303
- } catch (o) {
304
- console.error("Error saving changes:", o);
305
- } finally {
306
- n.value = !1;
307
- }
308
- }, q = async (o) => {
309
- delete o.isNativeField, o.fieldType !== "radio" && o.fieldType !== "select" && delete o.options;
310
- let e = Math.random().toString(36).substr(2, 9);
311
- for (; l.customerInformationFields.find((p) => p.id === e); )
312
- e = Math.random().toString(36).substr(2, 9);
313
- l.customerInformationFields.push({ ...o, id: e });
314
- }, E = async (o) => {
315
- o.isNativeField || delete o.isNativeField, o.fieldType !== "radio" && o.fieldType !== "select" && delete o.options;
316
- const e = l.customerInformationFields.findIndex((p) => p.id === o.id);
317
- e !== -1 && (l.customerInformationFields[e] = { ...o });
318
- }, P = async (o) => {
319
- l.customerInformationFields = l.customerInformationFields.filter((e) => e.id !== o);
320
- }, g = async () => {
321
- try {
322
- const o = await I.get(F.agendaCollection, D.value.id);
323
- o && (l.minimumAdvanceNotice = o.minimumAdvanceNotice || { value: 0, unit: "minutes" }, l.serviceVisibility = o.serviceVisibility || 60, l.maxTicketsPerReservation = Number(o.maxTicketsPerReservation) && o.maxTicketsPerReservation > 0 ? parseInt(o.maxTicketsPerReservation) : "", l.customerInformationFields = o.customerInformationFields || [...c], l.needsApproval = o.needsApproval || !1);
324
- } catch (o) {
325
- console.error("Error loading agenda data:", o);
326
- } finally {
327
- M.value = !1;
328
- }
329
- }, $ = () => {
330
- let o = Math.abs(l.minimumAdvanceNotice.value), e = l.minimumAdvanceNotice.unit;
331
- return o === 1 ? (e.endsWith("s") && (e = e.slice(0, -1)), `Lead time is negative. Bookings remain open for 1 ${e} after the slot has started.`) : `Lead time is negative. Bookings remain open for ${o} ${e} after the slot has started.`;
332
- };
333
- return g(), (o, e) => {
334
- const p = s("Label"), V = s("InputGroupInput"), b = s("Search"), y = s("InputGroupAddon"), z = s("SelectValue"), G = s("SelectTrigger"), S = s("SelectItem"), j = s("SelectGroup"), O = s("SelectContent"), H = s("Select"), C = s("InputGroup"), B = s("Badge"), W = s("Switch"), x = s("Button");
335
- return u(), v(ee, null, {
336
- default: i(() => [
337
- e[31] || (e[31] = a("h1", { class: "text-lg font-medium mb-8" }, "Availability Settings", -1)),
338
- M.value ? N("", !0) : (u(), f("div", be, [
339
- a("div", null, [
340
- t(p, {
341
- for: "lead-time",
342
- class: "text-base font-medium mb-2"
343
- }, {
344
- default: i(() => [...e[7] || (e[7] = [
345
- d(" Minimum Advance Notice - Lead Time (Optional) ", -1)
346
- ])]),
347
- _: 1
348
- }),
349
- t(C, { class: "max-w-md" }, {
350
- default: i(() => [
351
- t(V, {
352
- placeholder: "0",
353
- id: "lead-time",
354
- modelValue: l.minimumAdvanceNotice.value,
355
- "onUpdate:modelValue": e[0] || (e[0] = (r) => l.minimumAdvanceNotice.value = r),
356
- modelModifiers: { value: !0 },
357
- type: "number",
358
- class: "no-spinner"
359
- }, null, 8, ["modelValue"]),
360
- t(y, null, {
361
- default: i(() => [
362
- t(b)
363
- ]),
364
- _: 1
365
- }),
366
- t(y, { align: "inline-end" }, {
367
- default: i(() => [
368
- t(H, {
369
- modelValue: l.minimumAdvanceNotice.unit,
370
- "onUpdate:modelValue": e[1] || (e[1] = (r) => l.minimumAdvanceNotice.unit = r)
371
- }, {
372
- default: i(() => [
373
- t(G, { class: "w-[180px] border-0 bg-transparent -mr-1.5" }, {
374
- default: i(() => [
375
- t(z)
376
- ]),
377
- _: 1
378
- }),
379
- t(O, null, {
380
- default: i(() => [
381
- t(j, null, {
382
- default: i(() => [
383
- t(S, { value: "minutes" }, {
384
- default: i(() => [...e[8] || (e[8] = [
385
- d(" Minutes ", -1)
386
- ])]),
387
- _: 1
388
- }),
389
- t(S, { value: "hours" }, {
390
- default: i(() => [...e[9] || (e[9] = [
391
- d(" Hours ", -1)
392
- ])]),
393
- _: 1
394
- }),
395
- t(S, { value: "days" }, {
396
- default: i(() => [...e[10] || (e[10] = [
397
- d(" Days ", -1)
398
- ])]),
399
- _: 1
400
- })
401
- ]),
402
- _: 1
403
- })
404
- ]),
405
- _: 1
406
- })
407
- ]),
408
- _: 1
409
- }, 8, ["modelValue"])
410
- ]),
411
- _: 1
412
- })
413
- ]),
414
- _: 1
415
- }),
416
- e[11] || (e[11] = a("p", { class: "text-sm text-muted-foreground mt-2" }, " Set how far in advance a customer must book your slot. ", -1)),
417
- l.minimumAdvanceNotice.value < 0 ? (u(), f("p", ye, w($()), 1)) : N("", !0)
418
- ]),
419
- e[27] || (e[27] = a("hr", { class: "my-8" }, null, -1)),
420
- a("div", null, [
421
- t(p, {
422
- for: "service-visibility",
423
- class: "text-base font-medium mb-2"
424
- }, {
425
- default: i(() => [...e[12] || (e[12] = [
426
- d(" Service Visibility ", -1)
427
- ])]),
428
- _: 1
429
- }),
430
- t(C, { class: "max-w-md" }, {
431
- default: i(() => [
432
- t(V, {
433
- id: "service-visibility",
434
- modelValue: l.serviceVisibility,
435
- "onUpdate:modelValue": e[2] || (e[2] = (r) => l.serviceVisibility = r),
436
- modelModifiers: { number: !0 },
437
- placeholder: "1",
438
- type: "number",
439
- class: "no-spinner",
440
- min: "1",
441
- onBlur: e[3] || (e[3] = (r) => l.serviceVisibility = Math.max(l.serviceVisibility, 1))
442
- }, null, 8, ["modelValue"]),
443
- t(y, { align: "inline-end" }, {
444
- default: i(() => [...e[13] || (e[13] = [
445
- d(" days ", -1)
446
- ])]),
447
- _: 1
448
- })
449
- ]),
450
- _: 1
451
- }),
452
- e[14] || (e[14] = a("p", { class: "text-sm text-muted-foreground mt-2" }, " Set how many days in advance the service is visible to customers. ", -1))
453
- ]),
454
- e[28] || (e[28] = a("hr", { class: "my-8" }, null, -1)),
455
- a("div", null, [
456
- t(p, {
457
- for: "max-capacity",
458
- class: "text-base font-medium mb-2"
459
- }, {
460
- default: i(() => [...e[15] || (e[15] = [
461
- d(" Maximum Tickets Per Booking ", -1)
462
- ])]),
463
- _: 1
464
- }),
465
- t(C, { class: "max-w-md" }, {
466
- default: i(() => [
467
- t(V, {
468
- placeholder: "∞",
469
- type: "number",
470
- id: "max-capacity",
471
- class: "no-spinner",
472
- min: "1",
473
- modelValue: l.maxTicketsPerReservation,
474
- "onUpdate:modelValue": e[4] || (e[4] = (r) => l.maxTicketsPerReservation = r),
475
- modelModifiers: { number: !0 }
476
- }, null, 8, ["modelValue"]),
477
- t(y, { align: "inline-end" }, {
478
- default: i(() => [...e[16] || (e[16] = [
479
- d(" spots ", -1)
480
- ])]),
481
- _: 1
482
- })
483
- ]),
484
- _: 1
485
- }),
486
- e[17] || (e[17] = a("p", { class: "text-sm text-muted-foreground mt-2" }, " Limit how many spots a customer can book in a single reservation. ", -1))
487
- ]),
488
- e[29] || (e[29] = a("hr", { class: "my-8" }, null, -1)),
489
- a("div", xe, [
490
- a("div", null, [
491
- t(p, { class: "text-base font-medium" }, {
492
- default: i(() => [...e[18] || (e[18] = [
493
- d("Booking Approval", -1)
494
- ])]),
495
- _: 1
496
- }),
497
- e[19] || (e[19] = a("p", { class: "text-sm text-muted-foreground" }, " Choose whether you want to confirm booking requests manually or accept them automatically. ", -1))
498
- ]),
499
- a("div", _e, [
500
- a("div", Ie, [
501
- t(p, { class: "text-sm font-semibold" }, {
502
- default: i(() => [...e[20] || (e[20] = [
503
- d("Enable Manual Approval", -1)
504
- ])]),
505
- _: 1
506
- }),
507
- e[23] || (e[23] = a("p", { class: "text-xs text-muted-foreground max-w-[300px]" }, " When enabled, you must approve bookings within your dashboard before they are finalized. ", -1)),
508
- l.needsApproval ? (u(), v(B, { key: 0 }, {
509
- default: i(() => [...e[21] || (e[21] = [
510
- d("Status: Manual Review", -1)
511
- ])]),
512
- _: 1
513
- })) : (u(), v(B, {
514
- key: 1,
515
- variant: "secondary"
516
- }, {
517
- default: i(() => [...e[22] || (e[22] = [
518
- d("Status: Auto-Confirm", -1)
519
- ])]),
520
- _: 1
521
- }))
522
- ]),
523
- t(W, {
524
- modelValue: l.needsApproval,
525
- "onUpdate:modelValue": e[5] || (e[5] = (r) => l.needsApproval = r)
526
- }, null, 8, ["modelValue"])
527
- ])
528
- ]),
529
- e[30] || (e[30] = a("hr", { class: "my-8" }, null, -1)),
530
- a("div", null, [
531
- t(p, { class: "text-base font-medium" }, {
532
- default: i(() => [...e[24] || (e[24] = [
533
- d(" Customer Information (Optional) ", -1)
534
- ])]),
535
- _: 1
536
- }),
537
- e[26] || (e[26] = a("p", { class: "text-sm text-muted-foreground mb-2" }, " Collect additional details about your customer. ", -1)),
538
- a("div", Ne, [
539
- (u(!0), f(R, null, U(l.customerInformationFields, (r) => (u(), f("div", {
540
- key: r.id,
541
- class: "flex items-center justify-between hover:bg-input/50 px-2 rounded"
542
- }, [
543
- a("div", null, [
544
- a("p", ke, w(r.fieldName), 1)
545
- ]),
546
- a("div", null, [
547
- t(x, {
548
- variant: "ghost",
549
- size: "icon",
550
- onClick: (_) => T.value.openDialog(r),
551
- class: "active:scale-90 transition-transform duration-150"
552
- }, {
553
- default: i(() => [
554
- t(A(te), { class: "size-4" })
555
- ]),
556
- _: 1
557
- }, 8, ["onClick"]),
558
- t(x, {
559
- variant: "ghost",
560
- size: "icon",
561
- onClick: (_) => r.visible = !r.visible,
562
- class: "active:scale-90 transition-transform duration-150"
563
- }, {
564
- default: i(() => [
565
- r.visible ? (u(), v(A(ie), {
566
- key: 0,
567
- class: "size-4"
568
- })) : (u(), v(A(oe), {
569
- key: 1,
570
- class: "size-4"
571
- }))
572
- ]),
573
- _: 2
574
- }, 1032, ["onClick"]),
575
- t(x, {
576
- variant: "ghost",
577
- size: "icon",
578
- disabled: r.isNativeField,
579
- onClick: (_) => l.customerInformationFields = l.customerInformationFields.filter((J) => J.id !== r.id),
580
- class: "active:scale-90 transition-transform duration-150"
581
- }, {
582
- default: i(() => [
583
- t(A(le), { class: "size-4" })
584
- ]),
585
- _: 1
586
- }, 8, ["disabled", "onClick"])
587
- ])
588
- ]))), 128)),
589
- t(x, {
590
- variant: "outline",
591
- class: "mt-4",
592
- onClick: e[6] || (e[6] = (r) => T.value.openDialog())
593
- }, {
594
- default: i(() => [
595
- t(A(ne), { class: "size-4" }),
596
- e[25] || (e[25] = d(" Add New Field ", -1))
597
- ]),
598
- _: 1
599
- })
600
- ]),
601
- t(ge, {
602
- ref_key: "customerInfoFieldDialog",
603
- ref: T,
604
- onAddField: q,
605
- onUpdateField: E,
606
- onRemoveField: P
607
- }, null, 512)
608
- ]),
609
- a("div", Fe, [
610
- t(x, {
611
- onClick: L,
612
- disabled: n.value
613
- }, {
614
- default: i(() => [
615
- d(w(n.value ? "Saving..." : "Save Changes"), 1)
616
- ]),
617
- _: 1
618
- }, 8, ["disabled"])
619
- ])
620
- ]))
621
- ]),
622
- _: 1
623
- });
624
- };
625
- }
626
- });
627
- export {
628
- Ae as default
629
- };
@@ -1 +0,0 @@
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;