@oneclick.dev/cms-core-modules 0.0.119 → 0.0.121

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/{ContentEditor-BnOVpmsQ.js → ContentEditor-Dl41qaCh.js} +42 -41
  2. package/dist/{ContentEditor-Cm28u_14.mjs → ContentEditor-u3k-uTny.mjs} +4785 -4492
  3. package/dist/{Detail-C8wQiDcv.js → Detail-BCUUNWvp.js} +1 -1
  4. package/dist/{Detail-CtItxMX4.mjs → Detail-B_scnidb.mjs} +1 -1
  5. package/dist/Detail-Cn9Bk0u0.mjs +852 -0
  6. package/dist/Detail-DGg_xXZc.js +1 -0
  7. package/dist/Detail-Dk8E6_uF.mjs +3731 -0
  8. package/dist/Detail-Sc2qZdxj.js +1 -0
  9. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-4_t0PPqM.mjs +78 -0
  10. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-D1b9_iiN.js +1 -0
  11. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-BdZbcubW.js +1 -0
  12. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-bZidw6RT.mjs +1500 -0
  13. package/dist/Overview-CVgViW3c.mjs +852 -0
  14. package/dist/Overview-DEF-z7Yb.js +1 -0
  15. package/dist/Overview-Tf_ApkWh.js +1 -0
  16. package/dist/{Overview-CVQ1pkuD.mjs → Overview-usm5gPD1.mjs} +131 -131
  17. package/dist/{agenda-BtmnpFmi.js → agenda-B54F8cEr.js} +1 -1
  18. package/dist/{agenda-D0QBOJUy.mjs → agenda-BCKDYOeF.mjs} +7 -7
  19. package/dist/{availability-ClBGVgE9.js → availability-C4v46rha.js} +1 -1
  20. package/dist/{availability-D8JdA4rP.mjs → availability-DVT1Mdxq.mjs} +1 -1
  21. package/dist/{booking-data-aMS1p_3g.js → booking-data-A5JrLY4j.js} +1 -1
  22. package/dist/{booking-data-Px7XCIfU.mjs → booking-data-lZvSYna2.mjs} +1 -1
  23. package/dist/cms-core-modules.css +1 -1
  24. package/dist/{exceptions-Dgj54ULn.mjs → exceptions-DJHfvADv.mjs} +1 -1
  25. package/dist/{exceptions-DXqc0Nza.js → exceptions-DKc8fO1S.js} +1 -1
  26. package/dist/index-Bk3yLv_G.js +35 -0
  27. package/dist/{index-Dnn2SCSl.js → index-CZau1wR8.js} +1 -1
  28. package/dist/{index-DRqJOqUR.mjs → index-DE8rdSjd.mjs} +0 -22
  29. package/dist/index-DU3Ib10Z.mjs +1256 -0
  30. package/dist/index.cjs.js +1 -1
  31. package/dist/index.mjs +35 -33
  32. package/dist/orders-BMosTk6r.js +1 -0
  33. package/dist/{orders-C5NT99Fy.mjs → orders-CElKNc1v.mjs} +229 -234
  34. package/dist/{payment-D5j-68Ig.mjs → payment-DSQ_2FIT.mjs} +1 -1
  35. package/dist/{payment-BJHgpaeT.js → payment-DlgYuea2.js} +1 -1
  36. package/dist/{refunds-oVB2Opib.js → refunds-Cvw9N--u.js} +1 -1
  37. package/dist/{refunds-D9nTeD2d.mjs → refunds-xR936Ted.mjs} +1 -1
  38. package/dist/reports-BQT_GZzU.js +158 -0
  39. package/dist/reports-DksZCTOw.mjs +837 -0
  40. package/dist/{resources-CK0oWssj.mjs → resources-C-5BU9Ux.mjs} +1 -1
  41. package/dist/{resources-8WouFvJe.js → resources-D04yKKVN.js} +1 -1
  42. package/dist/src/appointments/components/edit/NewReservationDialog/QuickReservationAdder.vue.d.ts +2 -0
  43. package/dist/src/appointments/components/edit/NewReservationDialog/ReservationLines.vue.d.ts +1 -0
  44. package/dist/src/productCollections/components/detail/Subcollections.vue.d.ts +2 -0
  45. package/dist/src/productCollections/types.d.ts +1 -4
  46. package/dist/src/products/components/detail/variants/VariantList.vue.d.ts +48 -6
  47. package/dist/src/products/components/detail/variants/dialogs/VariantDialog.vue.d.ts +4 -0
  48. package/dist/{vee-validate-zod-CcOwoF6y.mjs → vee-validate-zod-SjDT8X35.mjs} +92 -90
  49. package/dist/{vee-validate-zod-ByykgYKJ.js → vee-validate-zod-VCmLnrtQ.js} +1 -1
  50. package/package.json +2 -2
  51. package/dist/Detail-C1Blq61w.mjs +0 -585
  52. package/dist/Detail-CPqug27l.js +0 -1
  53. package/dist/Detail-CjuhjPby.js +0 -1
  54. package/dist/Detail-Dnpnmy4-.mjs +0 -3477
  55. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-gozJKXvM.js +0 -1
  56. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-pDO9b4Pv.mjs +0 -77
  57. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-CcMEKZzd.mjs +0 -1476
  58. package/dist/NewReservationDialog.vue_vue_type_script_setup_true_lang-CkFsdcvP.js +0 -1
  59. package/dist/Overview-BWLxUksJ.mjs +0 -860
  60. package/dist/Overview-CBahJviK.js +0 -1
  61. package/dist/Overview-DAxCu9XC.js +0 -1
  62. package/dist/index-BnFWz40Q.mjs +0 -1261
  63. package/dist/index-DcGPR_vt.js +0 -35
  64. package/dist/orders-lO3dZ5un.js +0 -1
  65. /package/dist/src/{productCollections/components/detail/SEO.vue.d.ts → appointments/pages/edit/reports.vue.d.ts} +0 -0
@@ -1,860 +0,0 @@
1
- import { defineComponent as Q, inject as K, openBlock as r, createElementBlock as g, createElementVNode as i, Fragment as I, renderList as q, withModifiers as ue, normalizeClass as ee, unref as o, createCommentVNode as T, toDisplayString as P, createTextVNode as m, resolveComponent as s, createBlock as $, withCtx as l, createVNode as t, computed as X, renderSlot as _e, ref as j, useTemplateRef as be, withAsyncContext as xe, watch as Ce, onMounted as ye, onUnmounted as we, provide as O, withKeys as ke } from "vue";
2
- import { Filter as he, ChevronsUpDown as Pe, Check as se, RotateCcw as $e, ExternalLink as Se, Search as Me, Plus as Ve, LayoutGrid as Te, List as Ae } from "lucide-vue-next";
3
- import { useModuleRoute as J, useModulePermissions as Y, useFirebaseIntegration as te, useConfirmation as ze, useModuleBreadcrumbs as Ie } from "@oneclick.dev/cms-kit";
4
- import { a as Le } from "./index-hMp4p5qA.mjs";
5
- import { c as ae } from "./utils-CanmrIWO.mjs";
6
- import { t as D } from "./index-RLz1QPrf.mjs";
7
- const Ee = { class: "grid @md:grid-cols-2 @2xl:grid-cols-3 @3xl:grid-cols-4 @4xl:grid-cols-5 @5xl:grid-cols-6 gap-6" }, De = ["onClick", "onContextmenu"], Fe = ["src"], Be = { class: "font-semibold" }, Ue = { class: "text-sm text-muted-foreground flex items-center gap-2" }, Re = { class: "flex items-center gap-2" }, je = { key: 0 }, Ke = /* @__PURE__ */ Q({
8
- __name: "GridView",
9
- props: {
10
- products: {
11
- type: Array,
12
- required: !0
13
- }
14
- },
15
- setup(U) {
16
- const n = K("selection"), { navigateTo: y } = J(), { hasPermission: S } = Y(), w = (f, u) => {
17
- const b = u.ctrlKey || u.metaKey;
18
- if (!u.shiftKey) if (b || n.value.length > 0) {
19
- const h = n.value.indexOf(f.id);
20
- h > -1 ? n.value.splice(h, 1) : n.value.push(f.id);
21
- } else
22
- n.value = [], y(f.id);
23
- }, a = (f) => {
24
- f.target.closest(".GRID_ITEM") || (n.value = []);
25
- }, _ = (f, u) => {
26
- u.ctrlKey || u.metaKey ? n.value.includes(f.id) ? n.value.splice(n.value.indexOf(f.id), 1) : n.value.push(f.id) : n.value.includes(f.id) || (n.value = [f.id]);
27
- };
28
- return (f, u) => (r(), g("div", {
29
- class: "@container mb-4 flex-1 select-none",
30
- onClick: u[0] || (u[0] = (b) => n.value = []),
31
- onContextmenu: a
32
- }, [
33
- i("div", Ee, [
34
- (r(!0), g(I, null, q(U.products, (b) => (r(), g("div", {
35
- key: b.id,
36
- onClick: ue((A) => w(b, A), ["stop"]),
37
- onContextmenu: (A) => _(b, A),
38
- class: "GRID_ITEM cursor-pointer"
39
- }, [
40
- i("div", {
41
- class: ee(["aspect-square bg-muted rounded-xl overflow-hidden mb-2 transition-all duration-200", { "outline outline-4 outline-primary/50": o(n).includes(b.id) }])
42
- }, [
43
- b.featuredMedia ? (r(), g("img", {
44
- key: 0,
45
- src: b.featuredMedia,
46
- class: "w-full h-full object-cover pointer-events-none",
47
- draggable: "false"
48
- }, null, 8, Fe)) : T("", !0)
49
- ], 2),
50
- i("div", null, [
51
- i("p", Be, P(b.title), 1),
52
- i("p", Ue, [
53
- i("span", Re, [
54
- b.status === "published" ? (r(), g(I, { key: 0 }, [
55
- u[1] || (u[1] = i("span", { class: "block shrink-0 size-3 rounded-full bg-green-500" }, null, -1)),
56
- u[2] || (u[2] = m(" Published ", -1))
57
- ], 64)) : b.status === "draft" ? (r(), g(I, { key: 1 }, [
58
- u[3] || (u[3] = i("span", { class: "block shrink-0 size-3 rounded-full bg-blue-500" }, null, -1)),
59
- u[4] || (u[4] = m(" Draft ", -1))
60
- ], 64)) : (r(), g(I, { key: 2 }, [
61
- u[5] || (u[5] = i("span", { class: "block shrink-0 size-3 rounded-full bg-gray-300" }, null, -1)),
62
- u[6] || (u[6] = m(" Archived ", -1))
63
- ], 64))
64
- ]),
65
- b.variantsTotal > 1 ? (r(), g("span", je, "| " + P(b.variantsTotal) + " variants", 1)) : T("", !0)
66
- ])
67
- ])
68
- ], 40, De))), 128))
69
- ])
70
- ], 32));
71
- }
72
- }), Ne = { class: "flex items-center gap-2" }, Ge = {
73
- key: 0,
74
- class: "bg-green-500 text-green-950 px-2 py-1 rounded-lg text-xs"
75
- }, He = {
76
- key: 1,
77
- class: "bg-blue-500 text-blue-950 px-2 py-1 rounded-lg text-xs"
78
- }, Oe = {
79
- key: 2,
80
- class: "bg-gray-500 text-gray-950 px-2 py-1 rounded-lg text-xs"
81
- }, qe = /* @__PURE__ */ Q({
82
- __name: "ListView",
83
- props: {
84
- products: {
85
- type: Array,
86
- required: !0
87
- }
88
- },
89
- setup(U) {
90
- const n = K("selection"), { navigateTo: y } = J(), { hasPermission: S } = Y(), w = (a, _) => {
91
- a ? n.value.push(_) : n.value = n.value.filter((f) => f !== _);
92
- };
93
- return (a, _) => {
94
- const f = s("TableHead"), u = s("TableRow"), b = s("TableHeader"), A = s("Checkbox"), h = s("TableCell"), x = s("AvatarImage"), e = s("AvatarFallback"), C = s("Avatar"), k = s("TableBody"), M = s("Table"), V = s("Card");
95
- return r(), $(V, { class: "w-full py-4 px-4" }, {
96
- default: l(() => [
97
- t(M, { class: "rounded overflow-hidden" }, {
98
- default: l(() => [
99
- t(b, null, {
100
- default: l(() => [
101
- t(u, null, {
102
- default: l(() => [
103
- o(n)?.length > 0 ? (r(), $(f, { key: 0 })) : T("", !0),
104
- t(f, null, {
105
- default: l(() => [..._[1] || (_[1] = [
106
- m("Title", -1)
107
- ])]),
108
- _: 1
109
- }),
110
- t(f, null, {
111
- default: l(() => [..._[2] || (_[2] = [
112
- m("Status", -1)
113
- ])]),
114
- _: 1
115
- }),
116
- t(f, null, {
117
- default: l(() => [..._[3] || (_[3] = [
118
- m(" Variants", -1)
119
- ])]),
120
- _: 1
121
- }),
122
- t(f, null, {
123
- default: l(() => [..._[4] || (_[4] = [
124
- m("Price", -1)
125
- ])]),
126
- _: 1
127
- })
128
- ]),
129
- _: 1
130
- })
131
- ]),
132
- _: 1
133
- }),
134
- t(k, null, {
135
- default: l(() => [
136
- (r(!0), g(I, null, q(U.products, (v) => (r(), $(u, {
137
- key: v.id,
138
- onClick: (L) => o(y)(v.id),
139
- class: "cursor-pointer"
140
- }, {
141
- default: l(() => [
142
- o(n)?.length > 0 ? (r(), $(h, { key: 0 }, {
143
- default: l(() => [
144
- t(A, {
145
- "model-value": o(n)?.includes(v.id),
146
- "onUpdate:modelValue": (L) => w(L, v.id),
147
- onClick: _[0] || (_[0] = ue(() => {
148
- }, ["prevent", "stop"]))
149
- }, null, 8, ["model-value", "onUpdate:modelValue"])
150
- ]),
151
- _: 2
152
- }, 1024)) : T("", !0),
153
- t(h, { class: "font-medium" }, {
154
- default: l(() => [
155
- i("div", Ne, [
156
- t(C, { class: "size-12 rounded-xl" }, {
157
- default: l(() => [
158
- t(x, {
159
- src: v.media?.[0],
160
- class: "object-cover"
161
- }, null, 8, ["src"]),
162
- t(e, { class: "rounded-xl" })
163
- ]),
164
- _: 2
165
- }, 1024),
166
- i("span", null, P(v.title), 1)
167
- ])
168
- ]),
169
- _: 2
170
- }, 1024),
171
- t(h, null, {
172
- default: l(() => [
173
- v.status === "published" ? (r(), g("span", Ge, "Published")) : v.status === "draft" ? (r(), g("span", He, "Draft")) : v.status === "archived" ? (r(), g("span", Oe, "Archived")) : T("", !0)
174
- ]),
175
- _: 2
176
- }, 1024),
177
- t(h, null, {
178
- default: l(() => [
179
- m(P(v.variantsTotal), 1)
180
- ]),
181
- _: 2
182
- }, 1024),
183
- t(h, { class: "text-right" }, {
184
- default: l(() => [
185
- m(" € " + P(v.price || 0), 1)
186
- ]),
187
- _: 2
188
- }, 1024)
189
- ]),
190
- _: 2
191
- }, 1032, ["onClick"]))), 128))
192
- ]),
193
- _: 1
194
- })
195
- ]),
196
- _: 1
197
- })
198
- ]),
199
- _: 1
200
- });
201
- };
202
- }
203
- }), Qe = { class: "truncate" }, We = { key: 0 }, Xe = { key: 1 }, Je = { key: 2 }, Ye = { key: 3 }, Ze = { class: "relative w-full max-w-sm items-center" }, et = { class: "truncate" }, tt = { class: "truncate" }, lt = { class: "flex items-center space-x-2 mb-4" }, ot = { class: "flex items-center space-x-2 mb-4" }, nt = { class: "flex items-center space-x-2 mb-4" }, st = /* @__PURE__ */ Q({
204
- __name: "FilterPopover",
205
- setup(U) {
206
- const n = K("filter"), y = K("collections"), S = () => {
207
- n.value = {
208
- collections: [],
209
- published: !0,
210
- draft: !0,
211
- archived: !1
212
- };
213
- };
214
- return (w, a) => {
215
- const _ = s("Button"), f = s("PopoverTrigger"), u = s("ComboboxTrigger"), b = s("ComboboxAnchor"), A = s("ComboboxInput"), h = s("ComboboxEmpty"), x = s("ComboboxItemIndicator"), e = s("ComboboxItem"), C = s("ScrollArea"), k = s("ComboboxGroup"), M = s("ComboboxList"), V = s("Combobox"), v = s("Checkbox"), L = s("PopoverContent"), E = s("Popover");
216
- return r(), $(E, null, {
217
- default: l(() => [
218
- t(f, { asChild: "" }, {
219
- default: l(() => [
220
- t(_, { variant: "outline" }, {
221
- default: l(() => [
222
- t(o(he), { class: "size-4" }),
223
- a[4] || (a[4] = m(" Filter ", -1))
224
- ]),
225
- _: 1
226
- })
227
- ]),
228
- _: 1
229
- }),
230
- t(L, { class: "w-64" }, {
231
- default: l(() => [
232
- a[14] || (a[14] = i("p", { class: "text-sm font-medium text-muted-foreground mb-4" }, " Filter by Collection ", -1)),
233
- t(V, {
234
- modelValue: o(n).collections,
235
- "onUpdate:modelValue": a[0] || (a[0] = (c) => o(n).collections = c),
236
- by: "id",
237
- multiple: !0,
238
- class: "mb-6"
239
- }, {
240
- default: l(() => [
241
- t(b, { "as-child": "" }, {
242
- default: l(() => [
243
- t(u, { "as-child": "" }, {
244
- default: l(() => [
245
- t(_, {
246
- variant: "outline",
247
- class: "justify-between w-full"
248
- }, {
249
- default: l(() => [
250
- i("span", Qe, [
251
- o(n).collections.length === 1 ? (r(), g("span", We, P(o(y).find((c) => c.id === o(n).collections[0])?.title), 1)) : o(n).collections.length === 2 ? (r(), g("span", Xe, P(o(y).find((c) => c.id === o(n).collections[0])?.title) + ", " + P(o(y).find((c) => c.id === o(n).collections[1])?.title), 1)) : o(n).collections.length > 2 ? (r(), g("span", Je, P(o(y).find((c) => c.id === o(n).collections[0])?.title) + ", " + P(o(y).find((c) => c.id === o(n).collections[1])?.title) + " + " + P(o(n).collections.length - 2), 1)) : (r(), g("span", Ye, "Select collection"))
252
- ]),
253
- t(o(Pe), { class: "ml-2 size-4 shrink-0 opacity-50" })
254
- ]),
255
- _: 1
256
- })
257
- ]),
258
- _: 1
259
- })
260
- ]),
261
- _: 1
262
- }),
263
- t(M, null, {
264
- default: l(() => [
265
- i("div", Ze, [
266
- t(A, { placeholder: "Select category..." })
267
- ]),
268
- t(h, null, {
269
- default: l(() => [...a[5] || (a[5] = [
270
- m(" No category found. ", -1)
271
- ])]),
272
- _: 1
273
- }),
274
- o(y)?.filter((c) => c.status === "published")?.length > 0 ? (r(), g(I, { key: 0 }, [
275
- a[7] || (a[7] = i("p", { class: "px-2 py-1.5 text-sm font-medium mt-2" }, "Published", -1)),
276
- t(k, null, {
277
- default: l(() => [
278
- t(C, { class: "max-h-[200px] overflow-y-auto" }, {
279
- default: l(() => [
280
- (r(!0), g(I, null, q(o(y).filter((c) => c.status === "published"), (c) => (r(), $(e, {
281
- key: c.id,
282
- value: c.id
283
- }, {
284
- default: l(() => [
285
- a[6] || (a[6] = i("span", { class: "size-2 rounded-full bg-green-500" }, null, -1)),
286
- i("span", et, P(c.title), 1),
287
- t(x, null, {
288
- default: l(() => [
289
- t(o(se), {
290
- class: ee(o(ae)("ml-auto size-4"))
291
- }, null, 8, ["class"])
292
- ]),
293
- _: 1
294
- })
295
- ]),
296
- _: 2
297
- }, 1032, ["value"]))), 128))
298
- ]),
299
- _: 1
300
- })
301
- ]),
302
- _: 1
303
- })
304
- ], 64)) : T("", !0),
305
- o(y)?.filter((c) => c.status === "draft")?.length > 0 ? (r(), g(I, { key: 1 }, [
306
- a[9] || (a[9] = i("p", { class: "px-2 py-1.5 text-sm font-medium" }, "Drafts", -1)),
307
- t(k, null, {
308
- default: l(() => [
309
- t(C, { class: "max-h-[200px] overflow-y-auto" }, {
310
- default: l(() => [
311
- (r(!0), g(I, null, q(o(y).filter((c) => c.status === "draft"), (c) => (r(), $(e, {
312
- key: c.id,
313
- value: c.id
314
- }, {
315
- default: l(() => [
316
- a[8] || (a[8] = i("span", { class: "size-2 rounded-full bg-blue-500" }, null, -1)),
317
- i("span", tt, P(c.title), 1),
318
- t(x, null, {
319
- default: l(() => [
320
- t(o(se), {
321
- class: ee(o(ae)("ml-auto size-4"))
322
- }, null, 8, ["class"])
323
- ]),
324
- _: 1
325
- })
326
- ]),
327
- _: 2
328
- }, 1032, ["value"]))), 128))
329
- ]),
330
- _: 1
331
- })
332
- ]),
333
- _: 1
334
- })
335
- ], 64)) : T("", !0)
336
- ]),
337
- _: 1
338
- })
339
- ]),
340
- _: 1
341
- }, 8, ["modelValue"]),
342
- a[15] || (a[15] = i("p", { class: "text-sm font-medium text-muted-foreground mb-4" }, " Filter by Status ", -1)),
343
- i("div", lt, [
344
- t(v, {
345
- id: "chk_published_products",
346
- modelValue: o(n).published,
347
- "onUpdate:modelValue": a[1] || (a[1] = (c) => o(n).published = c)
348
- }, null, 8, ["modelValue"]),
349
- a[10] || (a[10] = i("label", {
350
- for: "chk_published_products",
351
- class: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
352
- }, " Show published products ", -1))
353
- ]),
354
- i("div", ot, [
355
- t(v, {
356
- id: "chk_draft_products",
357
- modelValue: o(n).draft,
358
- "onUpdate:modelValue": a[2] || (a[2] = (c) => o(n).draft = c)
359
- }, null, 8, ["modelValue"]),
360
- a[11] || (a[11] = i("label", {
361
- for: "chk_draft_products",
362
- class: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
363
- }, " Show draft products ", -1))
364
- ]),
365
- i("div", nt, [
366
- t(v, {
367
- id: "chk_archived_products",
368
- modelValue: o(n).archived,
369
- "onUpdate:modelValue": a[3] || (a[3] = (c) => o(n).archived = c)
370
- }, null, 8, ["modelValue"]),
371
- a[12] || (a[12] = i("label", {
372
- for: "chk_archived_products",
373
- class: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
374
- }, " Show archived products ", -1))
375
- ]),
376
- o(n).collections.length > 0 || !o(n).published || !o(n).draft || o(n).archived ? (r(), $(_, {
377
- key: 0,
378
- variant: "secondary",
379
- class: "ml-auto my-2",
380
- size: "sm",
381
- onClick: S
382
- }, {
383
- default: l(() => [
384
- t(o($e), { class: "size-3" }),
385
- a[13] || (a[13] = i("span", { class: "ml-0.5 text-xs" }, "Reset filters", -1))
386
- ]),
387
- _: 1
388
- })) : T("", !0)
389
- ]),
390
- _: 1
391
- })
392
- ]),
393
- _: 1
394
- });
395
- };
396
- }
397
- }), at = /* @__PURE__ */ Q({
398
- __name: "ProductContextMenu",
399
- emits: ["selectAll", "duplicateProduct", "deleteProduct", "deleteSelection"],
400
- setup(U, { emit: n }) {
401
- const y = n, S = K("products"), w = K("selection"), a = K("config"), { hasPermission: _ } = Y(), { navigateTo: f } = J(), u = X(() => w.value?.length !== 1 ? null : S.value?.find((x) => x.id === w.value[0])), b = (x) => {
402
- let e = a.previewUrl;
403
- e = e.replace("{{ id", "{{id"), e = e.replace("id }}", "id}}"), e = e.replace("{{id}}", x.id), e = e.replace("{{ slug", "{{slug"), e = e.replace("slug }}", "slug}}"), e = e.replace("{{slug}}", x.slug), window.open(e, "_blank");
404
- }, A = async (x, e) => {
405
- try {
406
- if (!["draft", "published", "archived"].includes(e)) return;
407
- await te(a.project).update(a.productCollection, x.id, { status: e }), x.status = e, D.success("Product status changed");
408
- } catch {
409
- D.error("Failed to change product status");
410
- }
411
- }, h = async (x) => {
412
- try {
413
- if (!["draft", "published", "archived"].includes(x)) return;
414
- const e = te(a.project), C = [];
415
- w.value.forEach(async (k) => {
416
- C.push(e.update(a.productCollection, k, { status: x }));
417
- }), D.promise(Promise.all(C), {
418
- loading: `Changing status of ${w.value.length} products...`,
419
- success: () => {
420
- const k = w.value.length;
421
- return w.value.forEach((M) => {
422
- S.value.find((V) => V.id == M).status = x;
423
- }), w.value = [], `Product status changed for ${k} products`;
424
- },
425
- error: (k) => "Failed to change product status"
426
- });
427
- } catch {
428
- D.error("Failed to change product status");
429
- }
430
- };
431
- return (x, e) => {
432
- const C = s("ContextMenuTrigger"), k = s("ContextMenuShortcut"), M = s("ContextMenuItem"), V = s("ContextMenuContent"), v = s("ContextMenuSeparator"), L = s("ContextMenuSubTrigger"), E = s("ContextMenuCheckboxItem"), c = s("ContextMenuSubContent"), G = s("ContextMenuSub"), Z = s("ContextMenu");
433
- return r(), $(Z, null, {
434
- default: l(() => [
435
- t(C, { class: "flex flex-1" }, {
436
- default: l(() => [
437
- _e(x.$slots, "default")
438
- ]),
439
- _: 3
440
- }),
441
- o(w).length === 0 ? (r(), $(V, {
442
- key: 0,
443
- class: "w-64"
444
- }, {
445
- default: l(() => [
446
- t(M, {
447
- inset: "",
448
- onClick: e[0] || (e[0] = (z) => y("selectAll"))
449
- }, {
450
- default: l(() => [
451
- e[13] || (e[13] = m(" Select all ", -1)),
452
- t(k, null, {
453
- default: l(() => [...e[12] || (e[12] = [
454
- m("⌘ + A", -1)
455
- ])]),
456
- _: 1
457
- })
458
- ]),
459
- _: 1
460
- })
461
- ]),
462
- _: 1
463
- })) : T("", !0),
464
- o(w).length === 1 && u.value ? (r(), $(V, {
465
- key: 1,
466
- class: "w-64"
467
- }, {
468
- default: l(() => [
469
- t(M, {
470
- inset: "",
471
- onClick: e[1] || (e[1] = (z) => o(f)(u.value.id))
472
- }, {
473
- default: l(() => [...e[14] || (e[14] = [
474
- m(" Edit product ", -1)
475
- ])]),
476
- _: 1
477
- }),
478
- t(v),
479
- o(a).previewUrl ? (r(), g(I, { key: 0 }, [
480
- t(M, {
481
- inset: "",
482
- onClick: e[2] || (e[2] = (z) => b(u.value))
483
- }, {
484
- default: l(() => [
485
- e[15] || (e[15] = m(" Preview product ", -1)),
486
- t(k, null, {
487
- default: l(() => [
488
- t(o(Se), { class: "size-4" })
489
- ]),
490
- _: 1
491
- })
492
- ]),
493
- _: 1
494
- }),
495
- t(v)
496
- ], 64)) : T("", !0),
497
- t(M, {
498
- inset: "",
499
- onClick: e[3] || (e[3] = (z) => y("duplicateProduct", u.value))
500
- }, {
501
- default: l(() => [...e[16] || (e[16] = [
502
- m(" Duplicate product ", -1)
503
- ])]),
504
- _: 1
505
- }),
506
- t(G, null, {
507
- default: l(() => [
508
- t(L, { inset: "" }, {
509
- default: l(() => [...e[17] || (e[17] = [
510
- m(" Change status ", -1)
511
- ])]),
512
- _: 1
513
- }),
514
- t(c, { class: "w-48" }, {
515
- default: l(() => [
516
- t(E, {
517
- onClick: e[4] || (e[4] = (z) => A(u.value, "draft")),
518
- modelValue: u.value.status === "draft"
519
- }, {
520
- default: l(() => [...e[18] || (e[18] = [
521
- i("span", { class: "size-2 rounded-full bg-blue-500" }, null, -1),
522
- m(" Draft ", -1)
523
- ])]),
524
- _: 1
525
- }, 8, ["modelValue"]),
526
- t(E, {
527
- onClick: e[5] || (e[5] = (z) => A(u.value, "published")),
528
- modelValue: u.value.status === "published"
529
- }, {
530
- default: l(() => [...e[19] || (e[19] = [
531
- i("span", { class: "size-2 rounded-full bg-green-500" }, null, -1),
532
- m(" Published ", -1)
533
- ])]),
534
- _: 1
535
- }, 8, ["modelValue"]),
536
- t(E, {
537
- onClick: e[6] || (e[6] = (z) => A(u.value, "archived")),
538
- modelValue: u.value.status === "archived"
539
- }, {
540
- default: l(() => [...e[20] || (e[20] = [
541
- i("span", { class: "size-2 rounded-full bg-gray-300" }, null, -1),
542
- m(" Archived ", -1)
543
- ])]),
544
- _: 1
545
- }, 8, ["modelValue"])
546
- ]),
547
- _: 1
548
- })
549
- ]),
550
- _: 1
551
- }),
552
- t(M, {
553
- inset: "",
554
- variant: "destructive",
555
- onClick: e[7] || (e[7] = (z) => y("deleteProduct", u.value))
556
- }, {
557
- default: l(() => [...e[21] || (e[21] = [
558
- m(" Delete product ", -1)
559
- ])]),
560
- _: 1
561
- })
562
- ]),
563
- _: 1
564
- })) : T("", !0),
565
- o(w).length > 1 ? (r(), $(V, {
566
- key: 2,
567
- class: "w-64"
568
- }, {
569
- default: l(() => [
570
- t(G, null, {
571
- default: l(() => [
572
- t(L, { inset: "" }, {
573
- default: l(() => [
574
- m(" Change status (" + P(o(w).length) + ") ", 1)
575
- ]),
576
- _: 1
577
- }),
578
- t(c, { class: "w-48" }, {
579
- default: l(() => [
580
- t(E, {
581
- onClick: e[8] || (e[8] = (z) => h("draft"))
582
- }, {
583
- default: l(() => [...e[22] || (e[22] = [
584
- i("span", { class: "size-2 rounded-full bg-blue-500" }, null, -1),
585
- m(" Draft ", -1)
586
- ])]),
587
- _: 1
588
- }),
589
- t(E, {
590
- onClick: e[9] || (e[9] = (z) => h("published"))
591
- }, {
592
- default: l(() => [...e[23] || (e[23] = [
593
- i("span", { class: "size-2 rounded-full bg-green-500" }, null, -1),
594
- m(" Published ", -1)
595
- ])]),
596
- _: 1
597
- }),
598
- t(E, {
599
- onClick: e[10] || (e[10] = (z) => h("archived"))
600
- }, {
601
- default: l(() => [...e[24] || (e[24] = [
602
- i("span", { class: "size-2 rounded-full bg-gray-300" }, null, -1),
603
- m(" Archived ", -1)
604
- ])]),
605
- _: 1
606
- })
607
- ]),
608
- _: 1
609
- })
610
- ]),
611
- _: 1
612
- }),
613
- t(M, {
614
- inset: "",
615
- variant: "destructive",
616
- onClick: e[11] || (e[11] = (z) => y("deleteSelection"))
617
- }, {
618
- default: l(() => [
619
- m(" Delete products (" + P(o(w).length) + ") ", 1)
620
- ]),
621
- _: 1
622
- })
623
- ]),
624
- _: 1
625
- })) : T("", !0)
626
- ]),
627
- _: 3
628
- });
629
- };
630
- }
631
- }), ut = { class: "relative flex flex-col flex-1" }, it = {
632
- ref: "container",
633
- class: "flex items-center justify-between gap-4 w-full mt-12 mb-8"
634
- }, rt = { class: "flex items-center gap-4" }, dt = { class: "text-lg whitespace-nowrap" }, ct = { class: "relative w-full max-w-sm items-center" }, pt = { class: "absolute start-0 inset-y-0 flex items-center justify-center px-2" }, ft = { class: "flex items-center gap-4" }, mt = { class: "flex flex-1" }, yt = /* @__PURE__ */ Q({
635
- __name: "Overview",
636
- props: {
637
- config: {
638
- type: Object,
639
- required: !0
640
- }
641
- },
642
- async setup(U) {
643
- let n, y;
644
- const S = U, { hasPermission: w } = Y(), { navigateTo: a } = J(), { confirm: _ } = ze();
645
- Ie(() => []);
646
- const f = te(S.config.project), u = j([]), b = async () => {
647
- const p = await f.find(S.config.productCollection);
648
- u.value = p || [];
649
- }, A = be("container"), { width: h } = Le(A), x = j("grid"), e = j(1), C = j([]), k = j(""), M = j([]);
650
- M.value = ([n, y] = xe(() => E()), n = await n, y(), n);
651
- const V = X(() => x.value === "grid" ? h.value < 768 ? 6 : h.value < 896 ? 8 : h.value < 1024 ? 10 : 12 : 10), v = X(() => u.value.filter((p) => !(R.value.collections.length > 0 && !p.collections?.some((d) => R.value.collections.includes(d)) || !R.value.published && p.status === "published" || !R.value.draft && p.status === "draft" || !R.value.archived && p.status === "archived")).filter((p) => p.title.toLowerCase().includes(k.value.toLowerCase()) || p.slug.toLowerCase().includes(k.value.toLowerCase()) || p.id.toLowerCase().includes(k.value.toLowerCase()))), L = X(() => {
652
- if (v.value.length <= V.value)
653
- return v.value;
654
- const p = (e.value - 1) * V.value, d = p + V.value;
655
- return v.value.slice(p, d);
656
- });
657
- async function E() {
658
- if (!S.config.collectionsCollection) return [];
659
- const p = S.config.collectionsCollection.split(":");
660
- return p.length !== 2 ? [] : (await f.get(p[0]))?.[p[1]] || [];
661
- }
662
- async function c(p) {
663
- return (await f.find(S.config.productCollection, {
664
- filters: [
665
- {
666
- field: "slug",
667
- operator: "==",
668
- value: p
669
- }
670
- ]
671
- })).length > 0;
672
- }
673
- const G = () => {
674
- C.value = L.value.map((p) => p.id);
675
- }, Z = async (p) => {
676
- try {
677
- let d = { ...p }, B = d.slug + "-copy", N = 2;
678
- for (; await c(B); )
679
- B = d.slug + "-copy-" + N, N++;
680
- d.id = void 0, d.createdAt = /* @__PURE__ */ new Date(), d.updatedAt = /* @__PURE__ */ new Date(), d.slug = B, d.status = "draft", d.title = d.title + " (copy)";
681
- const W = await f.add(S.config.productCollection, d);
682
- a(W.id), D.success("Product duplicated");
683
- } catch {
684
- D.error("Failed to duplicate product");
685
- }
686
- }, z = async (p) => {
687
- if (await _(`Are you sure you want to delete "${p.title}"?`))
688
- try {
689
- await f.remove(S.config.productCollection, p.id), u.value = u.value.filter((B) => B.id !== p.id), C.value = [], D.success("Product deleted");
690
- } catch {
691
- D.error("Failed to delete product");
692
- }
693
- }, le = async () => {
694
- if (await _(`Are you sure you want to delete all selected products (${C.value.length})?`))
695
- try {
696
- C.value.forEach(async (d) => {
697
- await f.remove(S.config.productCollection, d);
698
- }), u.value = u.value.filter((d) => !C.value.includes(d.id)), C.value = [], D.success("Products deleted");
699
- } catch {
700
- D.error("Failed to delete products");
701
- }
702
- }, R = j({
703
- collections: [],
704
- published: !0,
705
- draft: !0,
706
- archived: !1
707
- });
708
- Ce(R, () => {
709
- e.value = 1;
710
- });
711
- const oe = (p) => {
712
- p.target?.matches("input, textarea") || p.target?.isContentEditable || (p.key === "Escape" && (C.value = []), (p.metaKey || p.ctrlKey) && p.key.toLowerCase() === "a" && (p.preventDefault(), G()));
713
- };
714
- return ye(() => {
715
- b(), window.addEventListener("keydown", oe);
716
- }), we(() => {
717
- window.removeEventListener("keydown", oe);
718
- }), O("config", S.config), O("filter", R), O("products", u), O("collections", M), O("selection", C), (p, d) => {
719
- const B = s("Input"), N = s("Button"), W = s("SegmentedControlButton"), ie = s("SegmentedControl"), re = s("PaginationFirst"), de = s("PaginationPrev"), ce = s("PaginationListItem"), pe = s("PaginationEllipsis"), fe = s("PaginationNext"), me = s("PaginationLast"), ve = s("PaginationList"), ge = s("Pagination");
720
- return r(), g("div", ut, [
721
- i("div", it, [
722
- i("div", rt, [
723
- i("p", dt, P(v.value?.length) + " products", 1),
724
- i("div", ct, [
725
- t(B, {
726
- id: "search",
727
- type: "text",
728
- placeholder: "Search...",
729
- class: "pl-8",
730
- onKeydown: d[0] || (d[0] = ke((F) => k.value = "", ["escape"])),
731
- modelValue: k.value,
732
- "onUpdate:modelValue": d[1] || (d[1] = (F) => k.value = F)
733
- }, null, 8, ["modelValue"]),
734
- i("span", pt, [
735
- t(o(Me), { class: "size-4 text-muted-foreground" })
736
- ])
737
- ])
738
- ]),
739
- i("div", ft, [
740
- C.value.length > 0 ? (r(), $(N, {
741
- key: 0,
742
- variant: "destructive",
743
- onClick: le
744
- }, {
745
- default: l(() => [
746
- m(" Delete Selection (" + P(C.value.length) + ") ", 1)
747
- ]),
748
- _: 1
749
- })) : T("", !0),
750
- o(w)("create-product") ? (r(), g(I, { key: 1 }, [
751
- t(N, {
752
- variant: "outline",
753
- onClick: d[2] || (d[2] = (F) => o(a)("new"))
754
- }, {
755
- default: l(() => [
756
- t(o(Ve), { class: "size-4" }),
757
- d[5] || (d[5] = m(" New Product ", -1))
758
- ]),
759
- _: 1
760
- }),
761
- d[6] || (d[6] = i("div", { class: "w-[1px] h-8 bg-border" }, null, -1))
762
- ], 64)) : T("", !0),
763
- t(st),
764
- d[7] || (d[7] = i("div", { class: "w-[1px] h-8 bg-border" }, null, -1)),
765
- i("div", null, [
766
- t(ie, {
767
- modelValue: x.value,
768
- "onUpdate:modelValue": d[3] || (d[3] = (F) => x.value = F),
769
- "aria-label": "View mode"
770
- }, {
771
- default: l(() => [
772
- t(W, { value: "grid" }, {
773
- default: l(() => [
774
- t(o(Te), { class: "size-4" })
775
- ]),
776
- _: 1
777
- }),
778
- t(W, { value: "list" }, {
779
- default: l(() => [
780
- t(o(Ae), { class: "size-4" })
781
- ]),
782
- _: 1
783
- })
784
- ]),
785
- _: 1
786
- }, 8, ["modelValue"])
787
- ])
788
- ])
789
- ], 512),
790
- i("div", mt, [
791
- t(at, {
792
- onSelectAll: G,
793
- onDuplicateProduct: Z,
794
- onDeleteProduct: z,
795
- onDeleteSelection: le
796
- }, {
797
- default: l(() => [
798
- x.value === "grid" ? (r(), $(Ke, {
799
- key: 0,
800
- products: L.value
801
- }, null, 8, ["products"])) : (r(), $(qe, {
802
- key: 1,
803
- products: L.value
804
- }, null, 8, ["products"]))
805
- ]),
806
- _: 1
807
- })
808
- ]),
809
- v.value?.length > V.value ? (r(), $(ge, {
810
- key: 0,
811
- page: e.value,
812
- "onUpdate:page": d[4] || (d[4] = (F) => e.value = F),
813
- "items-per-page": V.value,
814
- total: v.value?.length,
815
- "sibling-count": 1,
816
- "show-edges": ""
817
- }, {
818
- default: l(() => [
819
- t(ve, { class: "flex items-center gap-1" }, {
820
- default: l(({ items: F }) => [
821
- t(re),
822
- t(de),
823
- (r(!0), g(I, null, q(F, (H, ne) => (r(), g(I, null, [
824
- H.type === "page" ? (r(), $(ce, {
825
- key: ne,
826
- value: H.value,
827
- "as-child": ""
828
- }, {
829
- default: l(() => [
830
- t(N, {
831
- class: "size-10 p-0",
832
- variant: H.value === e.value ? "default" : "outline"
833
- }, {
834
- default: l(() => [
835
- m(P(H.value), 1)
836
- ]),
837
- _: 2
838
- }, 1032, ["variant"])
839
- ]),
840
- _: 2
841
- }, 1032, ["value"])) : (r(), $(pe, {
842
- key: H.type,
843
- index: ne
844
- }, null, 8, ["index"]))
845
- ], 64))), 256)),
846
- t(fe),
847
- t(me)
848
- ]),
849
- _: 1
850
- })
851
- ]),
852
- _: 1
853
- }, 8, ["page", "items-per-page", "total"])) : T("", !0)
854
- ]);
855
- };
856
- }
857
- });
858
- export {
859
- yt as default
860
- };