@oneclick.dev/cms-core-modules 0.0.66 → 0.0.68

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 (40) hide show
  1. package/dist/{ContentEditor-owdOIage.mjs → ContentEditor-B7IYLH91.mjs} +6914 -6399
  2. package/dist/ContentEditor-LOn09n7N.js +307 -0
  3. package/dist/{Create-Lnus48i-.mjs → Create-BDiyCtrp.mjs} +1 -1
  4. package/dist/{Create-Up0iauPG.js → Create-D8NBEkJU.js} +1 -1
  5. package/dist/DateFormatter-Bw-SCfUS.js +1 -0
  6. package/dist/{DateFormatter-CxPCk9KT.mjs → DateFormatter-DAZP9a6L.mjs} +16 -10
  7. package/dist/{Detail-Bz2rvLw7.mjs → Detail-CxUU6BpO.mjs} +1 -1
  8. package/dist/{Detail-BPSuxN2J.js → Detail-DTHaYmyl.js} +1 -1
  9. package/dist/Entries-BPkZ7Jg5.js +1 -0
  10. package/dist/Entries-D7MHylQE.mjs +728 -0
  11. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-DMnulmdl.js → NewReservationDialog.vue_vue_type_script_setup_true_lang-B-ZhMrMu.js} +1 -1
  12. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-CZmLnut_.mjs → NewReservationDialog.vue_vue_type_script_setup_true_lang-CJ7hh7ug.mjs} +1 -1
  13. package/dist/{TableView-ifyIKxNm.js → TableView-COZzD0d0.js} +394 -100
  14. package/dist/{TableView-DnQLQHx6.mjs → TableView-Caa3Siid.mjs} +23994 -21142
  15. package/dist/{agenda-By_hEZ4I.mjs → agenda-CTG6N_Lt.mjs} +2 -2
  16. package/dist/{agenda-D4jdNRbI.js → agenda-OSkAh0Oa.js} +1 -1
  17. package/dist/cms-core-modules.css +1 -1
  18. package/dist/{exceptions-DGnziH-3.js → exceptions-BvMTqtof.js} +1 -1
  19. package/dist/{exceptions-B0kOmB-_.mjs → exceptions-CEXIFw47.mjs} +1 -1
  20. package/dist/{index-DIg9ePkI.js → index-D4GKxWP-.js} +32 -32
  21. package/dist/index-DuEgvvLH-BMcm6MOv.js +88 -0
  22. package/dist/{index-CzoYAqKd-iAfM7ky8.mjs → index-DuEgvvLH-DYNxw0e-.mjs} +1461 -1341
  23. package/dist/{index--0-qy_7x.mjs → index-J5jtsMas.mjs} +2 -2
  24. package/dist/index.cjs.js +1 -1
  25. package/dist/index.mjs +8 -8
  26. package/dist/src/content-manager/components/content-editor/tiptap-extensions/{Columns.d.ts → Row.d.ts} +2 -2
  27. package/dist/src/content-manager/components/content-editor/tiptap-extensions/Stack.d.ts +14 -0
  28. package/dist/src/content-manager/components/content-editor/tiptap-extensions/Stack.vue.d.ts +115 -0
  29. package/dist/src/content-manager/components/content-editor/tiptap-extensions/helpers/TopMarginDragger.vue.d.ts +11 -1
  30. package/dist/src/content-manager/components/content-editor/tiptap-menus/element-editor-views/RowMenu.vue.d.ts +13 -0
  31. package/dist/src/content-manager/components/content-editor/tiptap-menus/element-editor-views/StackMenu.vue.d.ts +13 -0
  32. package/dist/src/content-manager/components/content-editor/tiptap-menus/element-editor-views/index.d.ts +30 -2
  33. package/package.json +2 -2
  34. package/dist/ContentEditor-DKFCmfOs.js +0 -307
  35. package/dist/DateFormatter-DKlDa1Jq.js +0 -1
  36. package/dist/Entries-C6Di46My.mjs +0 -713
  37. package/dist/Entries-DlFiZ8EU.js +0 -1
  38. package/dist/index-CzoYAqKd-rheC_QgC.js +0 -88
  39. /package/dist/src/content-manager/components/content-editor/tiptap-extensions/{Columns.vue.d.ts → Row.vue.d.ts} +0 -0
  40. /package/dist/src/content-manager/components/content-editor/tiptap-menus/element-editor-views/{ColumnsMenu.vue.d.ts → DividerMenu.vue.d.ts} +0 -0
@@ -0,0 +1,728 @@
1
+ import { defineComponent as Q, inject as H, computed as O, resolveComponent as i, openBlock as d, createBlock as x, withCtx as n, createVNode as t, unref as s, createCommentVNode as E, createTextVNode as m, toDisplayString as w, createElementBlock as S, Fragment as G, renderList as le, withModifiers as X, createElementVNode as u, ref as N, renderSlot as de, watch as ce, onMounted as pe, onUnmounted as fe, provide as W, withKeys as me } from "vue";
2
+ import { Globe as ge, Pencil as ve, Filter as _e, RotateCcw as be, ExternalLink as ye, ChevronLeft as Ce, Search as xe, Plus as we } from "lucide-vue-next";
3
+ import { useModule as he, useModuleRoute as Y, useModulePermissions as Z, useFirebaseIntegration as J, useConfirmation as ke, useModuleBreadcrumbs as Pe } from "@oneclick.dev/cms-kit";
4
+ import { i as Ee } from "./interpolation-BHSqsh8Q.mjs";
5
+ import { t as L } from "./index-RLz1QPrf.mjs";
6
+ const $e = { class: "flex items-center gap-2" }, Se = {
7
+ key: 0,
8
+ class: "bg-green-500 text-green-950 px-2 py-1 rounded-lg text-xs"
9
+ }, Me = { key: 0 }, Ve = { key: 1 }, Te = {
10
+ key: 1,
11
+ class: "bg-blue-500 text-blue-950 px-2 py-1 rounded-lg text-xs"
12
+ }, Le = {
13
+ key: 2,
14
+ class: "bg-gray-500 text-gray-950 px-2 py-1 rounded-lg text-xs"
15
+ }, ze = ["href"], Ae = ["href"], De = /* @__PURE__ */ Q({
16
+ __name: "ListView",
17
+ props: {
18
+ entries: {
19
+ type: Array,
20
+ required: !0
21
+ }
22
+ },
23
+ setup(K) {
24
+ const r = H("selection"), h = H("collection"), D = K, { config: g } = he(), { navigateTo: c, params: B } = Y(), { hasPermission: M } = Z(), p = (a, e) => {
25
+ a ? r.value.push(e) : r.value = r.value.filter((f) => f !== e);
26
+ }, k = (a) => {
27
+ if (!h.value) return "about:blank";
28
+ let e = g.domain?.trim(), f = h.value.defaultLanguageRoutePattern?.trim();
29
+ if (console.log("waza", { domain: e, pattern: f, entry: a }), !e || !f) return "about:blank";
30
+ e.endsWith("/") && (e = e.slice(0, -1)), f.startsWith("/") || (f = "/" + f);
31
+ const y = a.liveByLocale.find((_) => _.locale === g.defaultLanguage)?.slug;
32
+ return Ee(e + f, [{ name: "slug", value: y }, { name: "id", value: a.id }, { name: "lang", value: g.defaultLanguage || "en" }]);
33
+ }, A = (a) => `${(window.location.origin + window.location.pathname).replace(/\/$/, "")}/${a.id}`, $ = O(() => D.entries?.map((a) => ({
34
+ ...a,
35
+ status: a.archived ? "archived" : a.liveByLocale && a.liveByLocale.length > 0 ? "published" : "draft",
36
+ publishProgress: { completed: a.liveByLocale.length, total: g.supportedLanguages?.length || 1 }
37
+ })) || []);
38
+ return (a, e) => {
39
+ const f = i("TableHead"), y = i("TableRow"), _ = i("TableHeader"), P = i("Checkbox"), V = i("TableCell"), U = i("Button"), T = i("TableBody"), j = i("Table"), R = i("Card");
40
+ return d(), x(R, { class: "w-full py-4 px-4" }, {
41
+ default: n(() => [
42
+ t(j, { class: "rounded overflow-hidden" }, {
43
+ default: n(() => [
44
+ t(_, null, {
45
+ default: n(() => [
46
+ t(y, null, {
47
+ default: n(() => [
48
+ s(r)?.length > 0 ? (d(), x(f, { key: 0 })) : E("", !0),
49
+ t(f, { class: "capitalize" }, {
50
+ default: n(() => [
51
+ m(w(s(h)?.contentEntryName || "entry"), 1)
52
+ ]),
53
+ _: 1
54
+ }),
55
+ t(f, null, {
56
+ default: n(() => [...e[3] || (e[3] = [
57
+ m("Last updated at", -1)
58
+ ])]),
59
+ _: 1
60
+ }),
61
+ t(f, null, {
62
+ default: n(() => [...e[4] || (e[4] = [
63
+ m("Status", -1)
64
+ ])]),
65
+ _: 1
66
+ }),
67
+ t(f, { class: "text-right" }, {
68
+ default: n(() => [...e[5] || (e[5] = [
69
+ m("Edit", -1)
70
+ ])]),
71
+ _: 1
72
+ })
73
+ ]),
74
+ _: 1
75
+ })
76
+ ]),
77
+ _: 1
78
+ }),
79
+ t(T, null, {
80
+ default: n(() => [
81
+ (d(!0), S(G, null, le($.value, (v) => (d(), x(y, {
82
+ key: v.id,
83
+ onClick: (C) => s(c)("collections/" + s(B).collectionId + "/" + v.id),
84
+ class: "cursor-pointer"
85
+ }, {
86
+ default: n(() => [
87
+ s(r)?.length > 0 ? (d(), x(V, { key: 0 }, {
88
+ default: n(() => [
89
+ t(P, {
90
+ "model-value": s(r)?.includes(v.id),
91
+ "onUpdate:modelValue": (C) => p(C, v.id),
92
+ onClick: e[0] || (e[0] = X(() => {
93
+ }, ["prevent", "stop"]))
94
+ }, null, 8, ["model-value", "onUpdate:modelValue"])
95
+ ]),
96
+ _: 2
97
+ }, 1024)) : E("", !0),
98
+ t(V, { class: "font-medium" }, {
99
+ default: n(() => [
100
+ u("div", $e, [
101
+ u("span", null, w(v.title), 1)
102
+ ])
103
+ ]),
104
+ _: 2
105
+ }, 1024),
106
+ t(V, null, {
107
+ default: n(() => [
108
+ m(w(v.updated?.at ? new Date(v.updated.at).toLocaleString() : "N/A"), 1)
109
+ ]),
110
+ _: 2
111
+ }, 1024),
112
+ t(V, null, {
113
+ default: n(() => [
114
+ v.status === "published" ? (d(), S("span", Se, [
115
+ v.publishProgress.completed === v.publishProgress.total ? (d(), S("span", Me, "Published")) : (d(), S("span", Ve, "Partly Published (" + w(v.publishProgress.completed) + "/" + w(v.publishProgress.total) + ")", 1))
116
+ ])) : v.status === "draft" ? (d(), S("span", Te, "Draft")) : v.status === "archived" ? (d(), S("span", Le, "Archived")) : E("", !0)
117
+ ]),
118
+ _: 2
119
+ }, 1024),
120
+ t(V, { class: "text-right" }, {
121
+ default: n(() => [
122
+ v.status === "published" ? (d(), S("a", {
123
+ key: 0,
124
+ href: k(v),
125
+ target: "_blank",
126
+ rel: "noreferrer",
127
+ onClick: e[1] || (e[1] = X(() => {
128
+ }, ["stop"]))
129
+ }, [
130
+ t(U, {
131
+ variant: "ghost",
132
+ size: "icon"
133
+ }, {
134
+ default: n(() => [
135
+ t(s(ge), { class: "size-4" })
136
+ ]),
137
+ _: 1
138
+ })
139
+ ], 8, ze)) : E("", !0),
140
+ u("a", {
141
+ href: A(v),
142
+ rel: "noreferrer",
143
+ onClick: e[2] || (e[2] = X(() => {
144
+ }, ["stop"]))
145
+ }, [
146
+ t(U, {
147
+ variant: "ghost",
148
+ size: "icon"
149
+ }, {
150
+ default: n(() => [
151
+ t(s(ve), { class: "size-4" })
152
+ ]),
153
+ _: 1
154
+ })
155
+ ], 8, Ae)
156
+ ]),
157
+ _: 2
158
+ }, 1024)
159
+ ]),
160
+ _: 2
161
+ }, 1032, ["onClick"]))), 128))
162
+ ]),
163
+ _: 1
164
+ })
165
+ ]),
166
+ _: 1
167
+ })
168
+ ]),
169
+ _: 1
170
+ });
171
+ };
172
+ }
173
+ }), Be = { class: "flex items-center space-x-2 mb-4" }, Ie = {
174
+ for: "chk_published_entries",
175
+ class: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
176
+ }, Ne = { class: "flex items-center space-x-2 mb-4" }, Ue = {
177
+ for: "chk_draft_entries",
178
+ class: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
179
+ }, Fe = { class: "flex items-center space-x-2 mb-4" }, je = {
180
+ for: "chk_archived_entries",
181
+ class: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
182
+ }, Re = /* @__PURE__ */ Q({
183
+ __name: "FilterPopover",
184
+ setup(K) {
185
+ const r = H("filter"), h = N(""), D = () => {
186
+ r.value = {
187
+ published: !0,
188
+ draft: !0,
189
+ archived: !1
190
+ };
191
+ };
192
+ return (g, c) => {
193
+ const B = i("Button"), M = i("PopoverTrigger"), p = i("Checkbox"), k = i("PopoverContent"), A = i("Popover");
194
+ return d(), x(A, null, {
195
+ default: n(() => [
196
+ t(M, { asChild: "" }, {
197
+ default: n(() => [
198
+ t(B, { variant: "outline" }, {
199
+ default: n(() => [
200
+ t(s(_e), { class: "size-4" }),
201
+ c[3] || (c[3] = m(" Filter ", -1))
202
+ ]),
203
+ _: 1
204
+ })
205
+ ]),
206
+ _: 1
207
+ }),
208
+ t(k, { class: "w-64" }, {
209
+ default: n(() => [
210
+ c[5] || (c[5] = u("p", { class: "text-sm font-medium text-muted-foreground mb-4" }, " Filter by Status ", -1)),
211
+ u("div", Be, [
212
+ t(p, {
213
+ id: "chk_published_entries",
214
+ modelValue: s(r).published,
215
+ "onUpdate:modelValue": c[0] || (c[0] = ($) => s(r).published = $)
216
+ }, null, 8, ["modelValue"]),
217
+ u("label", Ie, " Show published " + w(h.value || "entries"), 1)
218
+ ]),
219
+ u("div", Ne, [
220
+ t(p, {
221
+ id: "chk_draft_entries",
222
+ modelValue: s(r).draft,
223
+ "onUpdate:modelValue": c[1] || (c[1] = ($) => s(r).draft = $)
224
+ }, null, 8, ["modelValue"]),
225
+ u("label", Ue, " Show draft " + w(h.value || "entries"), 1)
226
+ ]),
227
+ u("div", Fe, [
228
+ t(p, {
229
+ id: "chk_archived_entries",
230
+ modelValue: s(r).archived,
231
+ "onUpdate:modelValue": c[2] || (c[2] = ($) => s(r).archived = $)
232
+ }, null, 8, ["modelValue"]),
233
+ u("label", je, " Show archived " + w(h.value || "entries"), 1)
234
+ ]),
235
+ !s(r).published || !s(r).draft || s(r).archived ? (d(), x(B, {
236
+ key: 0,
237
+ variant: "secondary",
238
+ class: "ml-auto my-2",
239
+ size: "sm",
240
+ onClick: D
241
+ }, {
242
+ default: n(() => [
243
+ t(s(be), { class: "size-3" }),
244
+ c[4] || (c[4] = u("span", { class: "ml-0.5 text-xs" }, "Reset filters", -1))
245
+ ]),
246
+ _: 1
247
+ })) : E("", !0)
248
+ ]),
249
+ _: 1
250
+ })
251
+ ]),
252
+ _: 1
253
+ });
254
+ };
255
+ }
256
+ }), He = /* @__PURE__ */ Q({
257
+ __name: "ContentEntryContextMenu",
258
+ emits: ["selectAll", "duplicateEntry", "deleteEntry", "deleteSelection"],
259
+ setup(K, { emit: r }) {
260
+ const h = r, D = H("entries"), g = H("selection"), c = H("config"), { hasPermission: B } = Z(), { navigateTo: M } = Y(), p = O(() => g.value?.length !== 1 ? null : D.value?.find((a) => a.id === g.value[0])), k = (a) => {
261
+ let e = c.previewUrl;
262
+ e = e.replace("{{ id", "{{id"), e = e.replace("id }}", "id}}"), e = e.replace("{{id}}", a.id), e = e.replace("{{ slug", "{{slug"), e = e.replace("slug }}", "slug}}"), e = e.replace("{{slug}}", a.slug), window.open(e, "_blank");
263
+ }, A = async (a, e) => {
264
+ try {
265
+ if (!["draft", "published", "archived"].includes(e)) return;
266
+ await J(c.project).update(c.contentCollection, a.id, { status: e }), a.status = e, L.success("Entry status changed");
267
+ } catch {
268
+ L.error("Failed to change entry status");
269
+ }
270
+ }, $ = async (a) => {
271
+ try {
272
+ if (!["draft", "published", "archived"].includes(a)) return;
273
+ const e = J(c.project), f = [];
274
+ g.value.forEach(async (y) => {
275
+ f.push(e.update(c.contentCollection, y, { status: a }));
276
+ }), L.promise(Promise.all(f), {
277
+ loading: `Changing status of ${g.value.length} entries...`,
278
+ success: () => {
279
+ const y = g.value.length;
280
+ return g.value.forEach((_) => {
281
+ D.value.find((P) => P.id == _).status = a;
282
+ }), g.value = [], `Entry status changed for ${y} entries`;
283
+ },
284
+ error: (y) => "Failed to change entry status"
285
+ });
286
+ } catch {
287
+ L.error("Failed to change entry status");
288
+ }
289
+ };
290
+ return (a, e) => {
291
+ const f = i("ContextMenuTrigger"), y = i("ContextMenuShortcut"), _ = i("ContextMenuItem"), P = i("ContextMenuContent"), V = i("ContextMenuSeparator"), U = i("ContextMenuSubTrigger"), T = i("ContextMenuCheckboxItem"), j = i("ContextMenuSubContent"), R = i("ContextMenuSub"), v = i("ContextMenu");
292
+ return d(), x(v, null, {
293
+ default: n(() => [
294
+ t(f, { class: "flex flex-1" }, {
295
+ default: n(() => [
296
+ de(a.$slots, "default")
297
+ ]),
298
+ _: 3
299
+ }),
300
+ s(g).length === 0 ? (d(), x(P, {
301
+ key: 0,
302
+ class: "w-64"
303
+ }, {
304
+ default: n(() => [
305
+ t(_, {
306
+ inset: "",
307
+ onClick: e[0] || (e[0] = (C) => h("selectAll"))
308
+ }, {
309
+ default: n(() => [
310
+ e[13] || (e[13] = m(" Select all ", -1)),
311
+ t(y, null, {
312
+ default: n(() => [...e[12] || (e[12] = [
313
+ m("⌘ + A", -1)
314
+ ])]),
315
+ _: 1
316
+ })
317
+ ]),
318
+ _: 1
319
+ })
320
+ ]),
321
+ _: 1
322
+ })) : E("", !0),
323
+ s(g).length === 1 && p.value ? (d(), x(P, {
324
+ key: 1,
325
+ class: "w-64"
326
+ }, {
327
+ default: n(() => [
328
+ t(_, {
329
+ inset: "",
330
+ onClick: e[1] || (e[1] = (C) => s(M)(p.value.id))
331
+ }, {
332
+ default: n(() => [...e[14] || (e[14] = [
333
+ m(" Edit entry ", -1)
334
+ ])]),
335
+ _: 1
336
+ }),
337
+ t(V),
338
+ s(c).previewUrl ? (d(), S(G, { key: 0 }, [
339
+ t(_, {
340
+ inset: "",
341
+ onClick: e[2] || (e[2] = (C) => k(p.value))
342
+ }, {
343
+ default: n(() => [
344
+ e[15] || (e[15] = m(" Preview entry ", -1)),
345
+ t(y, null, {
346
+ default: n(() => [
347
+ t(s(ye), { class: "size-4" })
348
+ ]),
349
+ _: 1
350
+ })
351
+ ]),
352
+ _: 1
353
+ }),
354
+ t(V)
355
+ ], 64)) : E("", !0),
356
+ t(_, {
357
+ inset: "",
358
+ onClick: e[3] || (e[3] = (C) => h("duplicateEntry", p.value))
359
+ }, {
360
+ default: n(() => [...e[16] || (e[16] = [
361
+ m(" Duplicate entry ", -1)
362
+ ])]),
363
+ _: 1
364
+ }),
365
+ t(R, null, {
366
+ default: n(() => [
367
+ t(U, { inset: "" }, {
368
+ default: n(() => [...e[17] || (e[17] = [
369
+ m(" Change status ", -1)
370
+ ])]),
371
+ _: 1
372
+ }),
373
+ t(j, { class: "w-48" }, {
374
+ default: n(() => [
375
+ t(T, {
376
+ onClick: e[4] || (e[4] = (C) => A(p.value, "draft")),
377
+ modelValue: p.value.status === "draft"
378
+ }, {
379
+ default: n(() => [...e[18] || (e[18] = [
380
+ u("span", { class: "size-2 rounded-full bg-blue-500" }, null, -1),
381
+ m(" Draft ", -1)
382
+ ])]),
383
+ _: 1
384
+ }, 8, ["modelValue"]),
385
+ t(T, {
386
+ onClick: e[5] || (e[5] = (C) => A(p.value, "published")),
387
+ modelValue: p.value.status === "published"
388
+ }, {
389
+ default: n(() => [...e[19] || (e[19] = [
390
+ u("span", { class: "size-2 rounded-full bg-green-500" }, null, -1),
391
+ m(" Published ", -1)
392
+ ])]),
393
+ _: 1
394
+ }, 8, ["modelValue"]),
395
+ t(T, {
396
+ onClick: e[6] || (e[6] = (C) => A(p.value, "archived")),
397
+ modelValue: p.value.status === "archived"
398
+ }, {
399
+ default: n(() => [...e[20] || (e[20] = [
400
+ u("span", { class: "size-2 rounded-full bg-gray-300" }, null, -1),
401
+ m(" Archived ", -1)
402
+ ])]),
403
+ _: 1
404
+ }, 8, ["modelValue"])
405
+ ]),
406
+ _: 1
407
+ })
408
+ ]),
409
+ _: 1
410
+ }),
411
+ t(_, {
412
+ inset: "",
413
+ variant: "destructive",
414
+ onClick: e[7] || (e[7] = (C) => h("deleteEntry", p.value))
415
+ }, {
416
+ default: n(() => [...e[21] || (e[21] = [
417
+ m(" Delete entry ", -1)
418
+ ])]),
419
+ _: 1
420
+ })
421
+ ]),
422
+ _: 1
423
+ })) : E("", !0),
424
+ s(g).length > 1 ? (d(), x(P, {
425
+ key: 2,
426
+ class: "w-64"
427
+ }, {
428
+ default: n(() => [
429
+ t(R, null, {
430
+ default: n(() => [
431
+ t(U, { inset: "" }, {
432
+ default: n(() => [
433
+ m(" Change status (" + w(s(g).length) + ") ", 1)
434
+ ]),
435
+ _: 1
436
+ }),
437
+ t(j, { class: "w-48" }, {
438
+ default: n(() => [
439
+ t(T, {
440
+ onClick: e[8] || (e[8] = (C) => $("draft"))
441
+ }, {
442
+ default: n(() => [...e[22] || (e[22] = [
443
+ u("span", { class: "size-2 rounded-full bg-blue-500" }, null, -1),
444
+ m(" Draft ", -1)
445
+ ])]),
446
+ _: 1
447
+ }),
448
+ t(T, {
449
+ onClick: e[9] || (e[9] = (C) => $("published"))
450
+ }, {
451
+ default: n(() => [...e[23] || (e[23] = [
452
+ u("span", { class: "size-2 rounded-full bg-green-500" }, null, -1),
453
+ m(" Published ", -1)
454
+ ])]),
455
+ _: 1
456
+ }),
457
+ t(T, {
458
+ onClick: e[10] || (e[10] = (C) => $("archived"))
459
+ }, {
460
+ default: n(() => [...e[24] || (e[24] = [
461
+ u("span", { class: "size-2 rounded-full bg-gray-300" }, null, -1),
462
+ m(" Archived ", -1)
463
+ ])]),
464
+ _: 1
465
+ })
466
+ ]),
467
+ _: 1
468
+ })
469
+ ]),
470
+ _: 1
471
+ }),
472
+ t(_, {
473
+ inset: "",
474
+ variant: "destructive",
475
+ onClick: e[11] || (e[11] = (C) => h("deleteSelection"))
476
+ }, {
477
+ default: n(() => [
478
+ m(" Delete entries (" + w(s(g).length) + ") ", 1)
479
+ ]),
480
+ _: 1
481
+ })
482
+ ]),
483
+ _: 1
484
+ })) : E("", !0)
485
+ ]),
486
+ _: 3
487
+ });
488
+ };
489
+ }
490
+ }), Ke = {
491
+ key: 0,
492
+ class: "relative flex flex-col flex-1"
493
+ }, qe = { class: "flex items-center justify-between gap-4 w-full my-4" }, We = {
494
+ ref: "container",
495
+ class: "flex items-center justify-between gap-4 w-full mb-8"
496
+ }, Ge = { class: "flex items-center gap-4" }, Oe = { class: "text-lg whitespace-nowrap" }, Qe = { class: "relative w-full max-w-sm items-center" }, Xe = { class: "absolute start-0 inset-y-0 flex items-center justify-center px-2" }, Je = { class: "flex items-center gap-4" }, Ye = { class: "capitalize" }, Ze = { class: "flex mb-4" }, st = /* @__PURE__ */ Q({
497
+ __name: "Entries",
498
+ props: {
499
+ config: {
500
+ type: Object,
501
+ required: !0
502
+ }
503
+ },
504
+ setup(K) {
505
+ const r = K, { hasPermission: h, isAdmin: D } = Z(), { params: g, navigateTo: c } = Y(), { confirm: B } = ke(), M = J(r.config.project), p = N(null), k = N([]);
506
+ Pe(() => [
507
+ { text: p.value?.name ?? "" }
508
+ ]);
509
+ const A = async () => {
510
+ const o = await M.get(r.config.collectionsCollection, g.value.collectionId);
511
+ o ? p.value = o : (c("/"), L.error("Collection not found"));
512
+ }, $ = async () => {
513
+ const o = await M.find(r.config.contentCollection, {
514
+ filters: [
515
+ {
516
+ field: "collectionId",
517
+ operator: "==",
518
+ value: g.value.collectionId
519
+ }
520
+ ]
521
+ });
522
+ k.value = o || [];
523
+ }, a = N(1), e = N([]), f = N(""), y = N(10), _ = (o) => {
524
+ if (!o) return 0;
525
+ if (typeof o?.toDate == "function")
526
+ return o.toDate().getTime();
527
+ const l = o instanceof Date ? o : new Date(o);
528
+ return Number.isNaN(l.getTime()) ? 0 : l.getTime();
529
+ }, P = O(() => {
530
+ const o = f.value.trim().toLowerCase();
531
+ return [...o ? k.value.filter((b) => {
532
+ const z = String(b?.title ?? "").toLowerCase(), F = String(b?.slug ?? "").toLowerCase();
533
+ return z.includes(o) || F.includes(o) || b?.id === o;
534
+ }) : k.value].sort((b, z) => {
535
+ const F = _(b?.updated?.at) || _(b?.updatedAt) || _(b?.createdAt);
536
+ return (_(z?.updated?.at) || _(z?.updatedAt) || _(z?.createdAt)) - F;
537
+ });
538
+ }), V = O(() => {
539
+ if (P.value.length <= y.value)
540
+ return P.value;
541
+ const o = (a.value - 1) * y.value, l = o + y.value;
542
+ return P.value.slice(o, l);
543
+ });
544
+ async function U(o) {
545
+ return (await M.find(r.config.contentCollection, {
546
+ filters: [
547
+ {
548
+ field: "slug",
549
+ operator: "==",
550
+ value: o
551
+ }
552
+ ]
553
+ })).length > 0;
554
+ }
555
+ const T = () => {
556
+ e.value = V.value.map((o) => o.id);
557
+ }, j = async (o) => {
558
+ try {
559
+ let l = { ...o }, b = l.slug + "-copy", z = 2;
560
+ for (; await U(b); )
561
+ b = l.slug + "-copy-" + z, z++;
562
+ l.id = void 0, l.createdAt = /* @__PURE__ */ new Date(), l.updatedAt = /* @__PURE__ */ new Date(), l.slug = b, l.status = "draft", l.title = l.title + " (copy)";
563
+ const F = await M.add(r.config.contentCollection, l);
564
+ c(F.id), L.success("Entry duplicated");
565
+ } catch {
566
+ L.error("Failed to duplicate entry");
567
+ }
568
+ }, R = async (o) => {
569
+ if (await B(`Are you sure you want to delete "${o.title}"?`))
570
+ try {
571
+ await M.remove(r.config.contentCollection, o.id), k.value = k.value.filter((b) => b.id !== o.id), e.value = [], L.success("Entry deleted");
572
+ } catch {
573
+ L.error("Failed to delete entry");
574
+ }
575
+ }, v = async () => {
576
+ if (await B(`Are you sure you want to delete all selected ${p?.contentEntryNamePlural || "entries"} (${e.value.length})?`))
577
+ try {
578
+ e.value.forEach(async (l) => {
579
+ await M.remove(r.config.contentCollection, l);
580
+ }), k.value = k.value.filter((l) => !e.value.includes(l.id)), e.value = [], L.success("Entries deleted");
581
+ } catch {
582
+ L.error("Failed to delete entries");
583
+ }
584
+ }, C = N({
585
+ published: !0,
586
+ draft: !0,
587
+ archived: !1
588
+ });
589
+ ce(C, () => {
590
+ a.value = 1;
591
+ });
592
+ const ee = (o) => {
593
+ o.target?.matches("input, textarea") || o.target?.isContentEditable || (o.key === "Escape" && (e.value = []), (o.metaKey || o.ctrlKey) && o.key.toLowerCase() === "a" && (o.preventDefault(), T()));
594
+ };
595
+ return pe(() => {
596
+ A(), $(), window.addEventListener("keydown", ee);
597
+ }), fe(() => {
598
+ window.removeEventListener("keydown", ee);
599
+ }), W("config", r.config), W("filter", C), W("entries", k), W("selection", e), W("collection", p), (o, l) => {
600
+ const b = i("Button"), z = i("Input"), F = i("PaginationFirst"), te = i("PaginationPrev"), oe = i("PaginationListItem"), se = i("PaginationEllipsis"), ae = i("PaginationNext"), ie = i("PaginationLast"), re = i("PaginationList"), ue = i("Pagination");
601
+ return p.value ? (d(), S("div", Ke, [
602
+ u("div", qe, [
603
+ t(b, {
604
+ onClick: l[0] || (l[0] = (I) => s(c)("/")),
605
+ variant: "link",
606
+ class: "!pl-0"
607
+ }, {
608
+ default: n(() => [
609
+ t(s(Ce), { class: "size-4" }),
610
+ l[5] || (l[5] = m(" Collections ", -1))
611
+ ]),
612
+ _: 1
613
+ })
614
+ ]),
615
+ u("div", We, [
616
+ u("div", Ge, [
617
+ u("p", Oe, w(P.value?.length) + " " + w(p.value?.contentEntryNamePlural || "entries"), 1),
618
+ u("div", Qe, [
619
+ t(z, {
620
+ id: "search",
621
+ type: "text",
622
+ placeholder: "Search...",
623
+ class: "pl-8",
624
+ onKeydown: l[1] || (l[1] = me((I) => f.value = "", ["escape"])),
625
+ modelValue: f.value,
626
+ "onUpdate:modelValue": l[2] || (l[2] = (I) => f.value = I)
627
+ }, null, 8, ["modelValue"]),
628
+ u("span", Xe, [
629
+ t(s(xe), { class: "size-4 text-muted-foreground" })
630
+ ])
631
+ ])
632
+ ]),
633
+ u("div", Je, [
634
+ e.value.length > 0 ? (d(), x(b, {
635
+ key: 0,
636
+ variant: "destructive",
637
+ onClick: v
638
+ }, {
639
+ default: n(() => [
640
+ m(" Delete Selection (" + w(e.value.length) + ") ", 1)
641
+ ]),
642
+ _: 1
643
+ })) : E("", !0),
644
+ s(D)() || s(h)("create-entry") && p.value?.allowUserEntryManagement ? (d(), S(G, { key: 1 }, [
645
+ s(g)?.collectionId ? (d(), x(b, {
646
+ key: 0,
647
+ variant: "outline",
648
+ onClick: l[3] || (l[3] = (I) => s(c)(`collections/${s(g).collectionId}/new`))
649
+ }, {
650
+ default: n(() => [
651
+ t(s(we), { class: "size-4" }),
652
+ u("span", null, [
653
+ l[6] || (l[6] = m(" New ", -1)),
654
+ u("span", Ye, w(p.value?.contentEntryName || "entry"), 1)
655
+ ])
656
+ ]),
657
+ _: 1
658
+ })) : E("", !0),
659
+ l[7] || (l[7] = u("div", { class: "w-[1px] h-8 bg-border" }, null, -1))
660
+ ], 64)) : E("", !0),
661
+ t(Re)
662
+ ])
663
+ ], 512),
664
+ u("div", Ze, [
665
+ t(He, {
666
+ onSelectAll: T,
667
+ onDuplicateEntry: j,
668
+ onDeleteEntry: R,
669
+ onDeleteSelection: v
670
+ }, {
671
+ default: n(() => [
672
+ t(De, { entries: V.value }, null, 8, ["entries"])
673
+ ]),
674
+ _: 1
675
+ })
676
+ ]),
677
+ P.value?.length > y.value ? (d(), x(ue, {
678
+ key: 0,
679
+ page: a.value,
680
+ "onUpdate:page": l[4] || (l[4] = (I) => a.value = I),
681
+ "items-per-page": y.value,
682
+ total: P.value?.length,
683
+ "sibling-count": 1,
684
+ "show-edges": ""
685
+ }, {
686
+ default: n(() => [
687
+ t(re, { class: "flex items-center gap-1" }, {
688
+ default: n(({ items: I }) => [
689
+ t(F),
690
+ t(te),
691
+ (d(!0), S(G, null, le(I, (q, ne) => (d(), S(G, null, [
692
+ q.type === "page" ? (d(), x(oe, {
693
+ key: ne,
694
+ value: q.value,
695
+ "as-child": ""
696
+ }, {
697
+ default: n(() => [
698
+ t(b, {
699
+ class: "size-10 p-0",
700
+ variant: q.value === a.value ? "default" : "outline"
701
+ }, {
702
+ default: n(() => [
703
+ m(w(q.value), 1)
704
+ ]),
705
+ _: 2
706
+ }, 1032, ["variant"])
707
+ ]),
708
+ _: 2
709
+ }, 1032, ["value"])) : (d(), x(se, {
710
+ key: q.type,
711
+ index: ne
712
+ }, null, 8, ["index"]))
713
+ ], 64))), 256)),
714
+ t(ae),
715
+ t(ie)
716
+ ]),
717
+ _: 1
718
+ })
719
+ ]),
720
+ _: 1
721
+ }, 8, ["page", "items-per-page", "total"])) : E("", !0)
722
+ ])) : E("", !0);
723
+ };
724
+ }
725
+ });
726
+ export {
727
+ st as default
728
+ };