@webx-ui/module-admin 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdminLanding.d.ts +21 -0
- package/dist/NotesFeed.d.ts +30 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +760 -495
- package/dist/index.js.map +1 -1
- package/dist/notes.d.ts +34 -0
- package/dist/style.css +1 -1
- package/dist/types.d.ts +9 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useRouter as
|
|
3
|
-
import { WxHeading as Ee, WxTabs as
|
|
4
|
-
import { WxScreenRenderer as
|
|
5
|
-
const
|
|
1
|
+
import { defineComponent as U, useModel as he, openBlock as f, createElementBlock as b, normalizeClass as le, createBlock as x, unref as d, withCtx as w, createTextVNode as L, toDisplayString as A, createCommentVNode as E, renderSlot as W, Fragment as R, mergeModels as se, inject as G, reactive as oe, computed as S, watch as J, resolveComponent as z, renderList as I, ref as C, createVNode as y, createElementVNode as M, isRef as $e, createApp as Se, h as O, withModifiers as pe, nextTick as Te, withKeys as ze } from "vue";
|
|
2
|
+
import { useRouter as ge, useRoute as Ae, createRouter as Ce, createWebHistory as Le, RouterLink as We } from "vue-router";
|
|
3
|
+
import { WxHeading as Ee, WxTabs as Ue, WxCard as me, WxResult as Re, useResponsiveShell as Me, shellLayoutFor as Ne, WxToaster as Pe, WebxUI as Ve, localesKey as De, WxAlert as Be, WxSkeleton as we, WxActions as Ie, WxDropdownItem as je, WxAction as ue, WxPopover as He, WxInput as Oe, WxButton as X, WxDialog as Fe, WxTooltip as Ke, WxText as Y, WxEmpty as qe, WxAvatar as Xe, WxTextarea as fe, toast as B, confirm as Ye } from "@webx-ui/core";
|
|
4
|
+
import { WxScreenRenderer as Ge } from "@webx-ui/schema";
|
|
5
|
+
const Je = ["data-wx-fill"], Qe = {
|
|
6
6
|
key: 0,
|
|
7
7
|
class: "wx-list-screen__head"
|
|
8
|
-
},
|
|
8
|
+
}, Ze = {
|
|
9
9
|
key: 1,
|
|
10
10
|
class: "wx-list-screen__actions"
|
|
11
|
-
},
|
|
11
|
+
}, et = /* @__PURE__ */ U({
|
|
12
12
|
__name: "ListScreen",
|
|
13
|
-
props: /* @__PURE__ */
|
|
13
|
+
props: /* @__PURE__ */ se({
|
|
14
14
|
title: { default: void 0 },
|
|
15
15
|
views: { default: void 0 },
|
|
16
16
|
card: { type: Boolean, default: !0 },
|
|
@@ -23,160 +23,160 @@ const Fe = ["data-wx-fill"], Ke = {
|
|
|
23
23
|
}),
|
|
24
24
|
emits: ["update:view"],
|
|
25
25
|
setup(e) {
|
|
26
|
-
const t =
|
|
27
|
-
return (n, a) => (
|
|
28
|
-
class:
|
|
26
|
+
const t = he(e, "view");
|
|
27
|
+
return (n, a) => (f(), b("div", {
|
|
28
|
+
class: le(["wx-list-screen", { "is-fill": e.fill }]),
|
|
29
29
|
"data-wx-fill": e.fill ? "" : void 0
|
|
30
30
|
}, [
|
|
31
|
-
e.title || n.$slots.actions ? (
|
|
32
|
-
e.title ? (
|
|
31
|
+
e.title || n.$slots.actions ? (f(), b("div", Qe, [
|
|
32
|
+
e.title ? (f(), x(d(Ee), {
|
|
33
33
|
key: 0,
|
|
34
34
|
level: 2,
|
|
35
35
|
class: "wx-list-screen__title"
|
|
36
36
|
}, {
|
|
37
37
|
default: w(() => [
|
|
38
|
-
L(
|
|
38
|
+
L(A(e.title), 1)
|
|
39
39
|
]),
|
|
40
40
|
_: 1
|
|
41
|
-
})) :
|
|
42
|
-
n.$slots.actions ? (
|
|
43
|
-
|
|
44
|
-
])) :
|
|
45
|
-
])) :
|
|
46
|
-
e.views && e.views.length > 0 ? (
|
|
41
|
+
})) : E("", !0),
|
|
42
|
+
n.$slots.actions ? (f(), b("div", Ze, [
|
|
43
|
+
W(n.$slots, "actions", {}, void 0, !0)
|
|
44
|
+
])) : E("", !0)
|
|
45
|
+
])) : E("", !0),
|
|
46
|
+
e.views && e.views.length > 0 ? (f(), x(d(Ue), {
|
|
47
47
|
key: 1,
|
|
48
48
|
modelValue: t.value,
|
|
49
|
-
"onUpdate:modelValue": a[0] || (a[0] = (
|
|
49
|
+
"onUpdate:modelValue": a[0] || (a[0] = (r) => t.value = r),
|
|
50
50
|
class: "wx-list-screen__views",
|
|
51
51
|
items: e.views,
|
|
52
52
|
"collapse-below": e.collapseBelow,
|
|
53
53
|
"aria-label": e.title
|
|
54
54
|
}, {
|
|
55
55
|
default: w(() => [
|
|
56
|
-
e.card ? (
|
|
56
|
+
e.card ? (f(), x(d(me), {
|
|
57
57
|
key: 0,
|
|
58
58
|
class: "wx-list-screen__card",
|
|
59
59
|
padding: e.padding
|
|
60
60
|
}, {
|
|
61
61
|
default: w(() => [
|
|
62
|
-
|
|
62
|
+
W(n.$slots, "default", {}, void 0, !0)
|
|
63
63
|
]),
|
|
64
64
|
_: 3
|
|
65
|
-
}, 8, ["padding"])) :
|
|
65
|
+
}, 8, ["padding"])) : W(n.$slots, "default", {}, void 0, !0, 1)
|
|
66
66
|
]),
|
|
67
67
|
_: 3
|
|
68
|
-
}, 8, ["modelValue", "items", "collapse-below", "aria-label"])) : (
|
|
69
|
-
e.card ? (
|
|
68
|
+
}, 8, ["modelValue", "items", "collapse-below", "aria-label"])) : (f(), b(R, { key: 2 }, [
|
|
69
|
+
e.card ? (f(), x(d(me), {
|
|
70
70
|
key: 0,
|
|
71
71
|
class: "wx-list-screen__card",
|
|
72
72
|
padding: e.padding
|
|
73
73
|
}, {
|
|
74
74
|
default: w(() => [
|
|
75
|
-
|
|
75
|
+
W(n.$slots, "default", {}, void 0, !0)
|
|
76
76
|
]),
|
|
77
77
|
_: 3
|
|
78
|
-
}, 8, ["padding"])) :
|
|
78
|
+
}, 8, ["padding"])) : W(n.$slots, "default", {}, void 0, !0, 1)
|
|
79
79
|
], 64))
|
|
80
|
-
], 10,
|
|
80
|
+
], 10, Je));
|
|
81
81
|
}
|
|
82
|
-
}),
|
|
82
|
+
}), j = (e, t) => {
|
|
83
83
|
const n = e.__vccOpts || e;
|
|
84
|
-
for (const [a,
|
|
85
|
-
n[a] =
|
|
84
|
+
for (const [a, r] of t)
|
|
85
|
+
n[a] = r;
|
|
86
86
|
return n;
|
|
87
|
-
},
|
|
88
|
-
"wx-list": { component:
|
|
89
|
-
},
|
|
90
|
-
function
|
|
91
|
-
const e =
|
|
87
|
+
}, tt = /* @__PURE__ */ j(et, [["__scopeId", "data-v-7586ed04"]]), nt = {
|
|
88
|
+
"wx-list": { component: tt, kind: "layout", labelProp: "title" }
|
|
89
|
+
}, ye = /* @__PURE__ */ Symbol("webx-admin");
|
|
90
|
+
function H() {
|
|
91
|
+
const e = G(ye, null);
|
|
92
92
|
if (e === null)
|
|
93
93
|
throw new Error("useAdmin() was called outside a panel created by createAdmin().");
|
|
94
94
|
return e;
|
|
95
95
|
}
|
|
96
|
-
function
|
|
97
|
-
const t =
|
|
96
|
+
function at(e) {
|
|
97
|
+
const t = oe({
|
|
98
98
|
status: "loading",
|
|
99
99
|
manifest: null,
|
|
100
100
|
user: null,
|
|
101
101
|
error: null
|
|
102
|
-
}), n =
|
|
102
|
+
}), n = S(() => {
|
|
103
103
|
const l = t.manifest;
|
|
104
104
|
if (l === null)
|
|
105
105
|
return [];
|
|
106
|
-
const
|
|
106
|
+
const v = [];
|
|
107
107
|
for (const h of l.modules) {
|
|
108
|
-
const g = e.modules.find((
|
|
108
|
+
const g = e.modules.find((_) => _.id === h.id);
|
|
109
109
|
if (g === void 0)
|
|
110
110
|
continue;
|
|
111
|
-
const
|
|
112
|
-
|
|
111
|
+
const p = g.path ?? g.routes?.[0]?.path;
|
|
112
|
+
p !== void 0 && v.push({
|
|
113
113
|
id: h.id,
|
|
114
114
|
title: h.title,
|
|
115
115
|
icon: h.icon,
|
|
116
|
-
path:
|
|
116
|
+
path: p,
|
|
117
117
|
group: h.group ?? null
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
|
-
return
|
|
121
|
-
}), a =
|
|
122
|
-
const l = t.manifest?.groups ?? [],
|
|
120
|
+
return v;
|
|
121
|
+
}), a = S(() => {
|
|
122
|
+
const l = t.manifest?.groups ?? [], v = [], h = /* @__PURE__ */ new Map();
|
|
123
123
|
for (const g of n.value)
|
|
124
|
-
if (g.group !== null && l.some((
|
|
125
|
-
const
|
|
126
|
-
|
|
124
|
+
if (g.group !== null && l.some((p) => p.id === g.group)) {
|
|
125
|
+
const p = h.get(g.group) ?? [];
|
|
126
|
+
p.push(g), h.set(g.group, p);
|
|
127
127
|
} else
|
|
128
|
-
|
|
128
|
+
v.push(g);
|
|
129
129
|
return {
|
|
130
|
-
top:
|
|
130
|
+
top: v,
|
|
131
131
|
groups: l.filter((g) => h.has(g.id)).map((g) => ({
|
|
132
132
|
id: g.id,
|
|
133
133
|
title: g.title,
|
|
134
134
|
entries: h.get(g.id) ?? []
|
|
135
135
|
}))
|
|
136
136
|
};
|
|
137
|
-
}),
|
|
137
|
+
}), r = { ...nt };
|
|
138
138
|
for (const l of e.modules)
|
|
139
|
-
Object.assign(
|
|
140
|
-
Object.assign(
|
|
141
|
-
const
|
|
142
|
-
async function
|
|
143
|
-
const
|
|
144
|
-
let h =
|
|
139
|
+
Object.assign(r, l.types);
|
|
140
|
+
Object.assign(r, e.types);
|
|
141
|
+
const o = /* @__PURE__ */ new Map();
|
|
142
|
+
async function s(l) {
|
|
143
|
+
const v = `${e.i18n.state.locale}:${l}`;
|
|
144
|
+
let h = o.get(v);
|
|
145
145
|
return h === void 0 && (h = e.http.get(`${e.apiPath}/screens/${l}`).then((g) => g.data.root).catch((g) => {
|
|
146
|
-
throw
|
|
147
|
-
}),
|
|
146
|
+
throw o.delete(v), g;
|
|
147
|
+
}), o.set(v, h)), h;
|
|
148
148
|
}
|
|
149
|
-
let
|
|
150
|
-
async function
|
|
149
|
+
let u = null;
|
|
150
|
+
async function i() {
|
|
151
151
|
t.status = "loading", t.error = null;
|
|
152
152
|
try {
|
|
153
|
-
if (
|
|
153
|
+
if (u !== null && (t.user = await u(), t.user === null)) {
|
|
154
154
|
t.manifest = null, t.status = "unauthenticated";
|
|
155
155
|
return;
|
|
156
156
|
}
|
|
157
157
|
const l = await e.loadManifest();
|
|
158
|
-
t.manifest = l, e.i18n.state.contentLocales = l.locales ?? [], e.i18n.state.panelLocales = l.panelLocales ?? e.i18n.state.panelLocales, l.locale !== void 0 && l.locale !== e.i18n.state.locale && await
|
|
158
|
+
t.manifest = l, e.i18n.state.contentLocales = l.locales ?? [], e.i18n.state.panelLocales = l.panelLocales ?? e.i18n.state.panelLocales, l.locale !== void 0 && l.locale !== e.i18n.state.locale && await m(l.locale), t.status = "ready";
|
|
159
159
|
} catch (l) {
|
|
160
|
-
if (
|
|
160
|
+
if (st(l)) {
|
|
161
161
|
t.manifest = null, t.user = null, t.status = "unauthenticated";
|
|
162
162
|
return;
|
|
163
163
|
}
|
|
164
164
|
t.error = l instanceof Error ? l.message : String(l), t.status = "error";
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
-
async function
|
|
167
|
+
async function c() {
|
|
168
168
|
if (t.manifest !== null)
|
|
169
169
|
try {
|
|
170
170
|
t.manifest = await e.loadManifest();
|
|
171
171
|
} catch {
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
|
-
async function
|
|
174
|
+
async function m(l) {
|
|
175
175
|
if (e.loadDictionary === void 0) {
|
|
176
176
|
e.i18n.state.locale = l;
|
|
177
177
|
return;
|
|
178
178
|
}
|
|
179
|
-
await e.loadDictionary(l), await
|
|
179
|
+
await e.loadDictionary(l), await c();
|
|
180
180
|
}
|
|
181
181
|
return {
|
|
182
182
|
http: e.http,
|
|
@@ -187,126 +187,149 @@ function Je(e) {
|
|
|
187
187
|
modules: e.modules,
|
|
188
188
|
nav: n,
|
|
189
189
|
groups: a,
|
|
190
|
-
types:
|
|
191
|
-
reload:
|
|
192
|
-
refreshManifest:
|
|
193
|
-
setLocale:
|
|
190
|
+
types: r,
|
|
191
|
+
reload: i,
|
|
192
|
+
refreshManifest: c,
|
|
193
|
+
setLocale: m,
|
|
194
194
|
setUser(l) {
|
|
195
195
|
t.user = l;
|
|
196
196
|
},
|
|
197
197
|
useSessionLoader(l) {
|
|
198
|
-
|
|
198
|
+
u = l;
|
|
199
199
|
},
|
|
200
200
|
can(l) {
|
|
201
|
-
const
|
|
202
|
-
return
|
|
201
|
+
const v = t.user;
|
|
202
|
+
return v === null ? !1 : v.isSuper || v.permissions.includes(l);
|
|
203
203
|
},
|
|
204
|
-
loadScreen:
|
|
204
|
+
loadScreen: s,
|
|
205
205
|
screenPatch(l) {
|
|
206
206
|
return e.screens?.[l] ?? [];
|
|
207
207
|
}
|
|
208
208
|
};
|
|
209
209
|
}
|
|
210
|
-
function
|
|
211
|
-
e.provide(
|
|
210
|
+
function lt(e, t) {
|
|
211
|
+
e.provide(ye, t);
|
|
212
212
|
}
|
|
213
|
-
function
|
|
213
|
+
function st(e) {
|
|
214
214
|
return typeof e == "object" && e !== null && "status" in e && e.status === 401;
|
|
215
215
|
}
|
|
216
|
-
const
|
|
217
|
-
function
|
|
218
|
-
const e =
|
|
216
|
+
const Q = /* @__PURE__ */ Symbol("webx-i18n");
|
|
217
|
+
function on() {
|
|
218
|
+
const e = G(Q, null);
|
|
219
219
|
if (e === null)
|
|
220
220
|
throw new Error("useI18n() was called outside a panel created by createAdmin().");
|
|
221
221
|
return e;
|
|
222
222
|
}
|
|
223
|
-
function
|
|
224
|
-
const t =
|
|
225
|
-
return t === null ?
|
|
223
|
+
function N(e) {
|
|
224
|
+
const t = G(Q, null);
|
|
225
|
+
return t === null ? de().scope(e) : t.scope(e);
|
|
226
226
|
}
|
|
227
|
-
function
|
|
228
|
-
e.provide(
|
|
227
|
+
function ot(e, t) {
|
|
228
|
+
e.provide(Q, t);
|
|
229
229
|
}
|
|
230
|
-
function
|
|
231
|
-
const t = e.fallback ?? "en", n =
|
|
230
|
+
function de(e = {}) {
|
|
231
|
+
const t = e.fallback ?? "en", n = oe({
|
|
232
232
|
locale: e.locale ?? t,
|
|
233
233
|
fallback: t,
|
|
234
234
|
panelLocales: [],
|
|
235
235
|
contentLocales: []
|
|
236
|
-
}), a = {},
|
|
237
|
-
function
|
|
238
|
-
let
|
|
239
|
-
for (const l of
|
|
240
|
-
if (typeof
|
|
236
|
+
}), a = {}, r = oe({ value: {} });
|
|
237
|
+
function o(u, i, c) {
|
|
238
|
+
let m = u[i]?.[c[0] ?? ""];
|
|
239
|
+
for (const l of c.slice(1)) {
|
|
240
|
+
if (typeof m != "object" || m === null)
|
|
241
241
|
return null;
|
|
242
|
-
|
|
242
|
+
m = m[l];
|
|
243
243
|
}
|
|
244
|
-
return typeof
|
|
244
|
+
return typeof m == "string" ? m : null;
|
|
245
245
|
}
|
|
246
|
-
function
|
|
247
|
-
const [
|
|
246
|
+
function s(u, i, c) {
|
|
247
|
+
const [m, l] = i.includes("::") ? i.split("::", 2) : [u, i], v = l.split("."), h = o(r.value, m, v) ?? o(a, m, v) ?? // Not an empty string: a key on screen is ugly, but it says which key, and a blank
|
|
248
248
|
// label says nothing to anybody trying to fix it.
|
|
249
|
-
|
|
250
|
-
return
|
|
249
|
+
i;
|
|
250
|
+
return c === void 0 ? h : it(h, c);
|
|
251
251
|
}
|
|
252
252
|
return {
|
|
253
253
|
state: n,
|
|
254
|
-
defaults(
|
|
255
|
-
a[
|
|
254
|
+
defaults(u, i) {
|
|
255
|
+
a[u] = { ...a[u], ...i };
|
|
256
256
|
},
|
|
257
|
-
load(
|
|
258
|
-
|
|
257
|
+
load(u, i, c) {
|
|
258
|
+
r.value = u ?? {}, n.locale = i ?? n.locale, c !== void 0 && (n.fallback = c);
|
|
259
259
|
},
|
|
260
|
-
scope(
|
|
261
|
-
return (
|
|
260
|
+
scope(u) {
|
|
261
|
+
return (i, c) => s(u, i, c);
|
|
262
262
|
},
|
|
263
|
-
t: (
|
|
263
|
+
t: (u, i) => s("", u, i)
|
|
264
264
|
};
|
|
265
265
|
}
|
|
266
|
-
function
|
|
266
|
+
function it(e, t) {
|
|
267
267
|
let n = e;
|
|
268
|
-
for (const [a,
|
|
269
|
-
n = n.replaceAll(`:${a}`, String(
|
|
268
|
+
for (const [a, r] of Object.entries(t))
|
|
269
|
+
n = n.replaceAll(`:${a}`, String(r));
|
|
270
270
|
return n;
|
|
271
271
|
}
|
|
272
|
-
const
|
|
272
|
+
const rt = /* @__PURE__ */ U({
|
|
273
|
+
__name: "AdminLanding",
|
|
274
|
+
props: {
|
|
275
|
+
landing: { default: null }
|
|
276
|
+
},
|
|
277
|
+
setup(e) {
|
|
278
|
+
const t = e, n = H(), a = ge(), r = N("webx-admin"), o = S(() => {
|
|
279
|
+
const s = n.nav.value;
|
|
280
|
+
return s.length === 0 ? null : ((t.landing === null ? void 0 : s.find((i) => i.path === t.landing)) ?? s[0])?.path ?? null;
|
|
281
|
+
});
|
|
282
|
+
return J(
|
|
283
|
+
o,
|
|
284
|
+
(s) => {
|
|
285
|
+
s !== null && a.replace(s);
|
|
286
|
+
},
|
|
287
|
+
{ immediate: !0 }
|
|
288
|
+
), (s, u) => o.value === null && d(n).state.status === "ready" ? (f(), x(d(Re), {
|
|
289
|
+
key: 0,
|
|
290
|
+
status: "info",
|
|
291
|
+
title: d(r)("shell.empty-title"),
|
|
292
|
+
description: d(r)("shell.empty-description")
|
|
293
|
+
}, null, 8, ["title", "description"])) : E("", !0);
|
|
294
|
+
}
|
|
295
|
+
}), ut = /* @__PURE__ */ U({
|
|
273
296
|
__name: "AdminNav",
|
|
274
297
|
props: {
|
|
275
298
|
collapsed: { type: Boolean }
|
|
276
299
|
},
|
|
277
300
|
emits: ["select"],
|
|
278
301
|
setup(e, { emit: t }) {
|
|
279
|
-
const n = t, a =
|
|
280
|
-
get: () => a.nav.value.find((
|
|
281
|
-
set: (
|
|
282
|
-
const
|
|
283
|
-
|
|
302
|
+
const n = t, a = H(), r = N("webx-admin"), o = ge(), s = Ae(), u = S({
|
|
303
|
+
get: () => a.nav.value.find((c) => s.path.startsWith(c.path))?.id ?? "",
|
|
304
|
+
set: (i) => {
|
|
305
|
+
const c = a.nav.value.find((m) => m.id === i);
|
|
306
|
+
c !== void 0 && o.push(c.path);
|
|
284
307
|
}
|
|
285
308
|
});
|
|
286
|
-
return (
|
|
287
|
-
const
|
|
288
|
-
return
|
|
289
|
-
modelValue:
|
|
290
|
-
"onUpdate:modelValue":
|
|
309
|
+
return (i, c) => {
|
|
310
|
+
const m = z("wx-menu-item"), l = z("wx-submenu"), v = z("wx-menu");
|
|
311
|
+
return f(), x(v, {
|
|
312
|
+
modelValue: u.value,
|
|
313
|
+
"onUpdate:modelValue": c[0] || (c[0] = (h) => u.value = h),
|
|
291
314
|
collapsed: e.collapsed,
|
|
292
|
-
label:
|
|
293
|
-
onSelect:
|
|
315
|
+
label: d(r)("nav.sections"),
|
|
316
|
+
onSelect: c[1] || (c[1] = (h) => n("select"))
|
|
294
317
|
}, {
|
|
295
318
|
default: w(() => [
|
|
296
|
-
(
|
|
319
|
+
(f(!0), b(R, null, I(d(a).groups.value.top, (h) => (f(), x(m, {
|
|
297
320
|
key: h.id,
|
|
298
321
|
value: h.id,
|
|
299
322
|
icon: h.icon ?? void 0,
|
|
300
323
|
label: h.title
|
|
301
324
|
}, null, 8, ["value", "icon", "label"]))), 128)),
|
|
302
|
-
(
|
|
325
|
+
(f(!0), b(R, null, I(d(a).groups.value.groups, (h) => (f(), x(l, {
|
|
303
326
|
key: h.id,
|
|
304
327
|
value: `group:${h.id}`,
|
|
305
328
|
title: h.title,
|
|
306
329
|
icon: "gear"
|
|
307
330
|
}, {
|
|
308
331
|
default: w(() => [
|
|
309
|
-
(
|
|
332
|
+
(f(!0), b(R, null, I(h.entries, (g) => (f(), x(m, {
|
|
310
333
|
key: g.id,
|
|
311
334
|
value: g.id,
|
|
312
335
|
icon: g.icon ?? void 0,
|
|
@@ -320,64 +343,64 @@ const nt = /* @__PURE__ */ T({
|
|
|
320
343
|
}, 8, ["modelValue", "collapsed", "label"]);
|
|
321
344
|
};
|
|
322
345
|
}
|
|
323
|
-
}),
|
|
346
|
+
}), dt = {
|
|
324
347
|
key: 0,
|
|
325
348
|
class: "wx-root wx-admin-plain"
|
|
326
|
-
},
|
|
349
|
+
}, ct = {
|
|
327
350
|
key: 1,
|
|
328
351
|
class: "wx-root wx-admin-plain"
|
|
329
|
-
},
|
|
352
|
+
}, mt = {
|
|
330
353
|
key: 2,
|
|
331
354
|
class: "wx-root wx-admin-plain"
|
|
332
|
-
},
|
|
355
|
+
}, ft = ["src", "alt", "width", "height"], vt = ["src", "alt", "width", "height"], ht = ["src", "alt"], pt = { class: "wx-admin__user" }, gt = { class: "wx-admin__user wx-admin__user--drawer" }, wt = /* @__PURE__ */ U({
|
|
333
356
|
__name: "AdminShell",
|
|
334
357
|
setup(e) {
|
|
335
|
-
const t =
|
|
358
|
+
const t = H(), n = N("webx-admin"), a = C(null), { width: r, layout: o, collapsed: s, showAside: u, drawerOpen: i, toggle: c, close: m } = Me(
|
|
336
359
|
a,
|
|
337
360
|
{ persist: "webx-admin-shell" }
|
|
338
|
-
), l =
|
|
339
|
-
return (
|
|
340
|
-
const
|
|
341
|
-
return
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
])) :
|
|
346
|
-
|
|
347
|
-
label:
|
|
361
|
+
), l = S(() => t.state.manifest?.title ?? ""), v = S(() => t.state.manifest?.branding?.logo ?? null), h = S(() => t.state.manifest?.branding?.mark ?? null), g = S(() => Ne(r.value, null));
|
|
362
|
+
return (p, _) => {
|
|
363
|
+
const V = z("router-view"), Z = z("wx-loading"), ee = z("wx-button"), te = z("wx-result"), D = z("wx-action"), k = z("wx-text"), T = z("wx-header"), $ = z("wx-aside"), P = z("wx-main"), _e = z("wx-container"), ke = z("wx-drawer");
|
|
364
|
+
return f(), b(R, null, [
|
|
365
|
+
y(d(Pe)),
|
|
366
|
+
d(t).state.status === "unauthenticated" ? (f(), b("div", dt, [
|
|
367
|
+
y(V)
|
|
368
|
+
])) : d(t).state.status === "loading" ? (f(), b("div", ct, [
|
|
369
|
+
y(Z, {
|
|
370
|
+
label: d(n)("shell.loading")
|
|
348
371
|
}, null, 8, ["label"])
|
|
349
|
-
])) :
|
|
350
|
-
|
|
372
|
+
])) : d(t).state.status === "error" ? (f(), b("div", mt, [
|
|
373
|
+
y(te, {
|
|
351
374
|
status: "error",
|
|
352
|
-
title:
|
|
353
|
-
description:
|
|
375
|
+
title: d(n)("shell.error-title"),
|
|
376
|
+
description: d(t).state.error
|
|
354
377
|
}, {
|
|
355
378
|
default: w(() => [
|
|
356
|
-
|
|
379
|
+
y(ee, {
|
|
357
380
|
type: "primary",
|
|
358
|
-
onClick:
|
|
381
|
+
onClick: _[0] || (_[0] = (ce) => d(t).reload())
|
|
359
382
|
}, {
|
|
360
383
|
default: w(() => [
|
|
361
|
-
L(
|
|
384
|
+
L(A(d(n)("shell.retry")), 1)
|
|
362
385
|
]),
|
|
363
386
|
_: 1
|
|
364
387
|
})
|
|
365
388
|
]),
|
|
366
389
|
_: 1
|
|
367
390
|
}, 8, ["title", "description"])
|
|
368
|
-
])) : (
|
|
391
|
+
])) : (f(), b("div", {
|
|
369
392
|
key: 3,
|
|
370
393
|
ref_key: "shellEl",
|
|
371
394
|
ref: a,
|
|
372
|
-
class:
|
|
395
|
+
class: le(["wx-root wx-admin", `wx-admin--${g.value}`])
|
|
373
396
|
}, [
|
|
374
|
-
|
|
375
|
-
direction:
|
|
397
|
+
y(_e, {
|
|
398
|
+
direction: d(o) === "drawer" ? "vertical" : "horizontal",
|
|
376
399
|
"full-height": "",
|
|
377
400
|
class: "wx-admin__frame"
|
|
378
401
|
}, {
|
|
379
402
|
default: w(() => [
|
|
380
|
-
|
|
403
|
+
d(o) === "drawer" ? (f(), x(T, {
|
|
381
404
|
key: 0,
|
|
382
405
|
class: "wx-admin__header",
|
|
383
406
|
floating: "",
|
|
@@ -387,125 +410,125 @@ const nt = /* @__PURE__ */ T({
|
|
|
387
410
|
height: "var(--wx-admin-header-height)"
|
|
388
411
|
}, {
|
|
389
412
|
end: w(() => [
|
|
390
|
-
|
|
413
|
+
W(p.$slots, "user", { expanded: !1 }, void 0, !0)
|
|
391
414
|
]),
|
|
392
415
|
default: w(() => [
|
|
393
|
-
|
|
416
|
+
y(D, {
|
|
394
417
|
icon: "menu",
|
|
395
|
-
title:
|
|
396
|
-
onClick:
|
|
418
|
+
title: d(n)("nav.menu"),
|
|
419
|
+
onClick: d(c)
|
|
397
420
|
}, null, 8, ["title", "onClick"]),
|
|
398
|
-
|
|
399
|
-
|
|
421
|
+
W(p.$slots, "brand", {}, () => [
|
|
422
|
+
v.value ? (f(), b("img", {
|
|
400
423
|
key: 0,
|
|
401
424
|
class: "wx-admin__logo",
|
|
402
|
-
src:
|
|
425
|
+
src: v.value.url,
|
|
403
426
|
alt: l.value,
|
|
404
|
-
width:
|
|
405
|
-
height:
|
|
406
|
-
}, null, 8,
|
|
427
|
+
width: v.value.width ?? void 0,
|
|
428
|
+
height: v.value.height ?? void 0
|
|
429
|
+
}, null, 8, ft)) : (f(), x(k, {
|
|
407
430
|
key: 1,
|
|
408
431
|
weight: "semibold",
|
|
409
432
|
truncate: ""
|
|
410
433
|
}, {
|
|
411
434
|
default: w(() => [
|
|
412
|
-
L(
|
|
435
|
+
L(A(l.value), 1)
|
|
413
436
|
]),
|
|
414
437
|
_: 1
|
|
415
438
|
}))
|
|
416
439
|
], !0)
|
|
417
440
|
]),
|
|
418
441
|
_: 3
|
|
419
|
-
})) :
|
|
420
|
-
|
|
442
|
+
})) : E("", !0),
|
|
443
|
+
d(u) ? (f(), x($, {
|
|
421
444
|
key: 1,
|
|
422
445
|
class: "wx-admin__aside",
|
|
423
446
|
sticky: "",
|
|
424
447
|
floating: "",
|
|
425
448
|
scroll: "",
|
|
426
449
|
bordered: !1,
|
|
427
|
-
collapsed:
|
|
450
|
+
collapsed: d(s),
|
|
428
451
|
width: 220,
|
|
429
452
|
"collapsed-width": 56
|
|
430
453
|
}, {
|
|
431
454
|
top: w(() => [
|
|
432
|
-
|
|
433
|
-
class:
|
|
455
|
+
M("div", {
|
|
456
|
+
class: le(["wx-admin__brand", { "wx-admin__brand--stacked": d(s) && h.value }])
|
|
434
457
|
}, [
|
|
435
|
-
|
|
458
|
+
d(s) ? h.value ? (f(), b("img", {
|
|
436
459
|
key: 1,
|
|
437
460
|
class: "wx-admin__mark",
|
|
438
461
|
src: h.value.url,
|
|
439
462
|
alt: l.value
|
|
440
|
-
}, null, 8,
|
|
441
|
-
|
|
463
|
+
}, null, 8, ht)) : E("", !0) : W(p.$slots, "brand", {}, () => [
|
|
464
|
+
v.value ? (f(), b("img", {
|
|
442
465
|
key: 0,
|
|
443
466
|
class: "wx-admin__logo",
|
|
444
|
-
src:
|
|
467
|
+
src: v.value.url,
|
|
445
468
|
alt: l.value,
|
|
446
|
-
width:
|
|
447
|
-
height:
|
|
448
|
-
}, null, 8,
|
|
469
|
+
width: v.value.width ?? void 0,
|
|
470
|
+
height: v.value.height ?? void 0
|
|
471
|
+
}, null, 8, vt)) : (f(), x(k, {
|
|
449
472
|
key: 1,
|
|
450
473
|
weight: "semibold",
|
|
451
474
|
truncate: "",
|
|
452
475
|
class: "wx-admin__title"
|
|
453
476
|
}, {
|
|
454
477
|
default: w(() => [
|
|
455
|
-
L(
|
|
478
|
+
L(A(l.value), 1)
|
|
456
479
|
]),
|
|
457
480
|
_: 1
|
|
458
481
|
}))
|
|
459
482
|
], !0, 0),
|
|
460
|
-
|
|
483
|
+
y(D, {
|
|
461
484
|
icon: "sidebar",
|
|
462
|
-
title:
|
|
463
|
-
onClick:
|
|
485
|
+
title: d(s) ? d(n)("nav.expand") : d(n)("nav.collapse"),
|
|
486
|
+
onClick: d(c)
|
|
464
487
|
}, null, 8, ["title", "onClick"])
|
|
465
488
|
], 2)
|
|
466
489
|
]),
|
|
467
490
|
bottom: w(() => [
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
expanded: !
|
|
491
|
+
M("div", pt, [
|
|
492
|
+
W(p.$slots, "user", {
|
|
493
|
+
expanded: !d(s)
|
|
471
494
|
}, void 0, !0)
|
|
472
495
|
])
|
|
473
496
|
]),
|
|
474
497
|
default: w(() => [
|
|
475
|
-
|
|
498
|
+
W(p.$slots, "nav", { collapsed: d(s) }, void 0, !0)
|
|
476
499
|
]),
|
|
477
500
|
_: 3
|
|
478
|
-
}, 8, ["collapsed"])) :
|
|
479
|
-
|
|
501
|
+
}, 8, ["collapsed"])) : E("", !0),
|
|
502
|
+
y(P, {
|
|
480
503
|
padding: "none",
|
|
481
504
|
class: "wx-admin__screen"
|
|
482
505
|
}, {
|
|
483
506
|
default: w(() => [
|
|
484
|
-
|
|
507
|
+
y(V)
|
|
485
508
|
]),
|
|
486
509
|
_: 1
|
|
487
510
|
})
|
|
488
511
|
]),
|
|
489
512
|
_: 3
|
|
490
513
|
}, 8, ["direction"]),
|
|
491
|
-
|
|
492
|
-
open:
|
|
493
|
-
"onUpdate:open":
|
|
494
|
-
title: l.value === "" ?
|
|
514
|
+
y(ke, {
|
|
515
|
+
open: d(i),
|
|
516
|
+
"onUpdate:open": _[1] || (_[1] = (ce) => $e(i) ? i.value = ce : null),
|
|
517
|
+
title: l.value === "" ? d(n)("nav.menu") : l.value,
|
|
495
518
|
side: "left",
|
|
496
519
|
size: 260,
|
|
497
520
|
"full-screen": !1,
|
|
498
521
|
closable: ""
|
|
499
522
|
}, {
|
|
500
523
|
footer: w(() => [
|
|
501
|
-
|
|
502
|
-
|
|
524
|
+
M("div", gt, [
|
|
525
|
+
W(p.$slots, "user", { expanded: !0 }, void 0, !0)
|
|
503
526
|
])
|
|
504
527
|
]),
|
|
505
528
|
default: w(() => [
|
|
506
|
-
|
|
529
|
+
W(p.$slots, "nav", {
|
|
507
530
|
collapsed: !1,
|
|
508
|
-
select:
|
|
531
|
+
select: d(m)
|
|
509
532
|
}, void 0, !0)
|
|
510
533
|
]),
|
|
511
534
|
_: 3
|
|
@@ -514,10 +537,10 @@ const nt = /* @__PURE__ */ T({
|
|
|
514
537
|
], 64);
|
|
515
538
|
};
|
|
516
539
|
}
|
|
517
|
-
}),
|
|
518
|
-
class
|
|
519
|
-
constructor(t, n, a = {},
|
|
520
|
-
super(t), this.status = n, this.errors = a, this.retryAfter =
|
|
540
|
+
}), yt = /* @__PURE__ */ j(wt, [["__scopeId", "data-v-ebc6adf3"]]);
|
|
541
|
+
class ie extends Error {
|
|
542
|
+
constructor(t, n, a = {}, r = null, o = null) {
|
|
543
|
+
super(t), this.status = n, this.errors = a, this.retryAfter = r, this.body = o, this.name = "HttpError";
|
|
521
544
|
}
|
|
522
545
|
status;
|
|
523
546
|
errors;
|
|
@@ -534,76 +557,76 @@ class X extends Error {
|
|
|
534
557
|
return this.status === 429;
|
|
535
558
|
}
|
|
536
559
|
}
|
|
537
|
-
const
|
|
538
|
-
function
|
|
539
|
-
const t = (e.baseUrl ?? "").replace(/\/$/, ""), n = e.csrfUrl ?? "/sanctum/csrf-cookie", a = e.fetch ?? globalThis.fetch.bind(globalThis),
|
|
540
|
-
let
|
|
541
|
-
async function
|
|
542
|
-
|
|
560
|
+
const bt = /* @__PURE__ */ new Set(["POST", "PUT", "PATCH", "DELETE"]);
|
|
561
|
+
function xt(e = {}) {
|
|
562
|
+
const t = (e.baseUrl ?? "").replace(/\/$/, ""), n = e.csrfUrl ?? "/sanctum/csrf-cookie", a = e.fetch ?? globalThis.fetch.bind(globalThis), r = e.onUnauthenticated, o = e.headers;
|
|
563
|
+
let s = !1;
|
|
564
|
+
async function u(c = !1) {
|
|
565
|
+
s && !c && ve("XSRF-TOKEN") !== null || (await a(n, { credentials: "same-origin" }), s = !0);
|
|
543
566
|
}
|
|
544
|
-
async function
|
|
545
|
-
const g =
|
|
546
|
-
g && await
|
|
547
|
-
const
|
|
567
|
+
async function i(c, m, l, v = {}, h = !1) {
|
|
568
|
+
const g = bt.has(c);
|
|
569
|
+
g && await u();
|
|
570
|
+
const p = {
|
|
548
571
|
Accept: "application/json",
|
|
549
572
|
"X-Requested-With": "XMLHttpRequest",
|
|
550
573
|
// Standing headers first, so a caller can still override one for a single request.
|
|
551
|
-
...
|
|
552
|
-
...
|
|
574
|
+
...o?.(),
|
|
575
|
+
...v.headers
|
|
553
576
|
};
|
|
554
577
|
if (g) {
|
|
555
|
-
const
|
|
556
|
-
|
|
578
|
+
const V = ve("XSRF-TOKEN");
|
|
579
|
+
V !== null && (p["X-XSRF-TOKEN"] = V);
|
|
557
580
|
}
|
|
558
|
-
l !== void 0 && (
|
|
559
|
-
const
|
|
560
|
-
method:
|
|
581
|
+
l !== void 0 && (p["Content-Type"] = "application/json");
|
|
582
|
+
const _ = await a(kt(t, m, v.query), {
|
|
583
|
+
method: c,
|
|
561
584
|
credentials: "same-origin",
|
|
562
|
-
headers:
|
|
563
|
-
signal:
|
|
585
|
+
headers: p,
|
|
586
|
+
signal: v.signal,
|
|
564
587
|
body: l === void 0 ? void 0 : JSON.stringify(l)
|
|
565
588
|
});
|
|
566
|
-
if (
|
|
567
|
-
return await
|
|
568
|
-
if (
|
|
569
|
-
throw await
|
|
570
|
-
if (
|
|
571
|
-
return await
|
|
589
|
+
if (_.status === 419 && g && !h)
|
|
590
|
+
return await u(!0), i(c, m, l, v, !0);
|
|
591
|
+
if (_.status === 401 && r?.(), !_.ok)
|
|
592
|
+
throw await _t(_);
|
|
593
|
+
if (_.status !== 204)
|
|
594
|
+
return await _.json();
|
|
572
595
|
}
|
|
573
596
|
return {
|
|
574
|
-
get: (
|
|
575
|
-
post: (
|
|
576
|
-
put: (
|
|
577
|
-
patch: (
|
|
578
|
-
delete: (
|
|
597
|
+
get: (c, m) => i("GET", c, void 0, m),
|
|
598
|
+
post: (c, m, l) => i("POST", c, m, l),
|
|
599
|
+
put: (c, m, l) => i("PUT", c, m, l),
|
|
600
|
+
patch: (c, m, l) => i("PATCH", c, m, l),
|
|
601
|
+
delete: (c, m) => i("DELETE", c, void 0, m)
|
|
579
602
|
};
|
|
580
603
|
}
|
|
581
|
-
async function
|
|
604
|
+
async function _t(e) {
|
|
582
605
|
let t = null;
|
|
583
606
|
try {
|
|
584
607
|
t = await e.json();
|
|
585
608
|
} catch {
|
|
586
609
|
}
|
|
587
|
-
const n = t ?? {}, a = typeof n.message == "string" && n.message !== "" ? n.message : e.statusText || `Request failed with ${e.status}`,
|
|
588
|
-
return new
|
|
610
|
+
const n = t ?? {}, a = typeof n.message == "string" && n.message !== "" ? n.message : e.statusText || `Request failed with ${e.status}`, r = n.errors !== null && typeof n.errors == "object" ? n.errors : {}, o = e.headers.get("Retry-After"), s = o === null ? null : Number.parseInt(o, 10);
|
|
611
|
+
return new ie(
|
|
589
612
|
a,
|
|
590
613
|
e.status,
|
|
591
|
-
|
|
592
|
-
Number.isFinite(
|
|
614
|
+
r,
|
|
615
|
+
Number.isFinite(s) ? s : null,
|
|
593
616
|
t
|
|
594
617
|
);
|
|
595
618
|
}
|
|
596
|
-
function
|
|
597
|
-
const
|
|
619
|
+
function kt(e, t, n) {
|
|
620
|
+
const r = /^https?:\/\//i.test(t) ? t : `${e}/${t.replace(/^\//, "")}`;
|
|
598
621
|
if (n === void 0)
|
|
599
|
-
return
|
|
600
|
-
const
|
|
601
|
-
for (const [
|
|
602
|
-
|
|
603
|
-
const
|
|
604
|
-
return
|
|
622
|
+
return r;
|
|
623
|
+
const o = new URLSearchParams();
|
|
624
|
+
for (const [u, i] of Object.entries(n))
|
|
625
|
+
i != null && o.set(u, String(i));
|
|
626
|
+
const s = o.toString();
|
|
627
|
+
return s === "" ? r : `${r}${r.includes("?") ? "&" : "?"}${s}`;
|
|
605
628
|
}
|
|
606
|
-
function
|
|
629
|
+
function ve(e) {
|
|
607
630
|
if (typeof document > "u")
|
|
608
631
|
return null;
|
|
609
632
|
for (const t of document.cookie.split(";")) {
|
|
@@ -613,7 +636,7 @@ function le(e) {
|
|
|
613
636
|
}
|
|
614
637
|
return null;
|
|
615
638
|
}
|
|
616
|
-
const
|
|
639
|
+
const be = {
|
|
617
640
|
shell: {
|
|
618
641
|
loading: "Loading the panel…",
|
|
619
642
|
"error-title": "The panel could not start",
|
|
@@ -663,189 +686,221 @@ const ue = {
|
|
|
663
686
|
server: "The server could not do that. Try again in a moment.",
|
|
664
687
|
offline: "The server did not answer. Check the connection and try again.",
|
|
665
688
|
unknown: "That did not work."
|
|
689
|
+
},
|
|
690
|
+
// What one administrator writes on a record for the next one. Not the property of any
|
|
691
|
+
// section: the same feed hangs off a submission, an order and a client, so the words are
|
|
692
|
+
// the panel's own.
|
|
693
|
+
notes: {
|
|
694
|
+
title: "Notes",
|
|
695
|
+
placeholder: "A note for whoever picks this up next…",
|
|
696
|
+
add: "Add a note",
|
|
697
|
+
empty: "No notes yet.",
|
|
698
|
+
edit: "Edit",
|
|
699
|
+
delete: "Delete",
|
|
700
|
+
save: "Save",
|
|
701
|
+
cancel: "Cancel",
|
|
702
|
+
saved: "Saved.",
|
|
703
|
+
deleted: "Deleted.",
|
|
704
|
+
"delete-title": "Delete this note?",
|
|
705
|
+
"delete-text": "It goes for everybody. This cannot be undone.",
|
|
706
|
+
"unknown-author": "A deleted account",
|
|
707
|
+
// The three the server says and the browser only ever repeats.
|
|
708
|
+
"no-type": "That kind of record does not carry notes.",
|
|
709
|
+
missing: "That record no longer exists.",
|
|
710
|
+
forbidden: "You may not read the notes of this record.",
|
|
711
|
+
"not-yours": "A note is edited by whoever wrote it."
|
|
666
712
|
}
|
|
667
|
-
},
|
|
668
|
-
function
|
|
669
|
-
const t = e.manifestUrl ??
|
|
670
|
-
for (const
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
713
|
+
}, xe = "webx.locale";
|
|
714
|
+
function rn(e = {}) {
|
|
715
|
+
const t = e.manifestUrl ?? Ct() ?? "/api/cms/manifest", n = e.apiPath ?? t.replace(/\/manifest\/?$/, ""), a = e.basePath ?? "/cms", r = e.modules ?? [], o = [...e.routes ?? []];
|
|
716
|
+
for (const p of r)
|
|
717
|
+
o.push(...p.routes ?? []);
|
|
718
|
+
if (!o.some((p) => p.path === "/")) {
|
|
719
|
+
const p = r.find((_) => _.landing === !0);
|
|
720
|
+
o.push({
|
|
721
|
+
path: "/",
|
|
722
|
+
name: "webx.home",
|
|
723
|
+
component: rt,
|
|
724
|
+
props: { landing: p?.path ?? p?.routes?.[0]?.path ?? null }
|
|
725
|
+
});
|
|
726
|
+
}
|
|
727
|
+
const s = Ce({
|
|
728
|
+
history: Le(a),
|
|
729
|
+
routes: o
|
|
730
|
+
}), u = de({ locale: e.locale ?? St() }), i = e.http ?? xt({
|
|
676
731
|
baseUrl: "",
|
|
677
732
|
onUnauthenticated: () => {
|
|
678
|
-
|
|
733
|
+
m.setUser(null), m.state.status = "unauthenticated";
|
|
679
734
|
},
|
|
680
735
|
// Every request says which language the panel is currently showing. It decides what
|
|
681
736
|
// the server writes its own messages in — a 422 under a field — for anybody who has
|
|
682
737
|
// not stored a preference yet, which is everybody until they choose one. Without it,
|
|
683
738
|
// signing in on a Russian sign-in screen lands in an English panel.
|
|
684
|
-
headers: () => ({ "X-Webx-Locale":
|
|
739
|
+
headers: () => ({ "X-Webx-Locale": u.state.locale })
|
|
685
740
|
});
|
|
686
|
-
|
|
687
|
-
async function
|
|
688
|
-
const
|
|
689
|
-
|
|
741
|
+
u.defaults("webx-admin", be);
|
|
742
|
+
async function c(p) {
|
|
743
|
+
const _ = await i.get(`${n}/translations/${p}`);
|
|
744
|
+
u.load(_.data.namespaces, _.data.locale, _.data.fallback), Tt(_.data.locale), At(_.data.locale, u.state.panelLocales);
|
|
690
745
|
}
|
|
691
|
-
const
|
|
692
|
-
http:
|
|
746
|
+
const m = at({
|
|
747
|
+
http: i,
|
|
693
748
|
basePath: a,
|
|
694
749
|
apiPath: n,
|
|
695
|
-
modules:
|
|
696
|
-
i18n:
|
|
697
|
-
loadDictionary:
|
|
750
|
+
modules: r,
|
|
751
|
+
i18n: u,
|
|
752
|
+
loadDictionary: c,
|
|
698
753
|
types: e.types,
|
|
699
754
|
screens: e.screens,
|
|
700
|
-
loadManifest: async () => (await
|
|
701
|
-
}), l =
|
|
702
|
-
l.use(
|
|
703
|
-
const
|
|
704
|
-
l.provide(
|
|
705
|
-
list:
|
|
706
|
-
() =>
|
|
707
|
-
code:
|
|
708
|
-
label:
|
|
755
|
+
loadManifest: async () => (await i.get(t)).data
|
|
756
|
+
}), l = Se($t(e));
|
|
757
|
+
l.use(Ve), lt(l, m), ot(l, u);
|
|
758
|
+
const v = C("");
|
|
759
|
+
l.provide(De, {
|
|
760
|
+
list: S(
|
|
761
|
+
() => u.state.contentLocales.map((p) => ({
|
|
762
|
+
code: p.code,
|
|
763
|
+
label: p.code.toUpperCase()
|
|
709
764
|
}))
|
|
710
765
|
),
|
|
711
|
-
active:
|
|
712
|
-
get: () =>
|
|
713
|
-
set: (
|
|
714
|
-
|
|
766
|
+
active: S({
|
|
767
|
+
get: () => v.value || (u.state.contentLocales[0]?.code ?? ""),
|
|
768
|
+
set: (p) => {
|
|
769
|
+
v.value = p;
|
|
715
770
|
}
|
|
716
771
|
})
|
|
717
772
|
});
|
|
718
773
|
const h = {
|
|
719
774
|
app: l,
|
|
720
|
-
router:
|
|
721
|
-
context:
|
|
722
|
-
i18n:
|
|
775
|
+
router: s,
|
|
776
|
+
context: m,
|
|
777
|
+
i18n: u,
|
|
723
778
|
async mount() {
|
|
724
|
-
await Promise.all([g(), u
|
|
725
|
-
}), l.mount(e.el ?? "#webx-app"), await
|
|
779
|
+
await Promise.all([g(), c(u.state.locale)]).catch(() => {
|
|
780
|
+
}), l.mount(e.el ?? "#webx-app"), await m.reload();
|
|
726
781
|
}
|
|
727
782
|
};
|
|
728
783
|
async function g() {
|
|
729
|
-
const
|
|
730
|
-
|
|
784
|
+
const p = await i.get(`${n}/locales`);
|
|
785
|
+
u.state.panelLocales = p.data.panel, u.state.contentLocales = p.data.content;
|
|
731
786
|
}
|
|
732
|
-
for (const
|
|
733
|
-
|
|
734
|
-
return l.use(
|
|
787
|
+
for (const p of e.plugins ?? [])
|
|
788
|
+
p.install(h);
|
|
789
|
+
return l.use(s), h;
|
|
735
790
|
}
|
|
736
|
-
function
|
|
791
|
+
function $t(e) {
|
|
737
792
|
const t = {
|
|
738
793
|
// The menu is the panel's own: it is the manifest, drawn.
|
|
739
794
|
// The shell hands in what a choice means where it drew the menu — in the drawer it is what
|
|
740
795
|
// closes it, and a drawer that stays open over the section it just opened is a drawer the
|
|
741
796
|
// reader has to dismiss by hand.
|
|
742
|
-
nav: (n) =>
|
|
797
|
+
nav: (n) => O(ut, { collapsed: n.collapsed === !0, onSelect: n.select })
|
|
743
798
|
};
|
|
744
|
-
return e.brand !== void 0 && (t.brand = () =>
|
|
799
|
+
return e.brand !== void 0 && (t.brand = () => O(e.brand)), e.userMenu !== void 0 && (t.user = (n) => O(e.userMenu, { expanded: n.expanded === !0 })), { render: () => O(yt, null, t) };
|
|
745
800
|
}
|
|
746
|
-
function
|
|
747
|
-
const e =
|
|
801
|
+
function St() {
|
|
802
|
+
const e = zt(xe);
|
|
748
803
|
return e !== null ? e : typeof document < "u" && document.documentElement.lang !== "" ? document.documentElement.lang : typeof navigator > "u" ? "en" : navigator.language;
|
|
749
804
|
}
|
|
750
|
-
function
|
|
805
|
+
function Tt(e) {
|
|
751
806
|
try {
|
|
752
|
-
localStorage.setItem(
|
|
807
|
+
localStorage.setItem(xe, e);
|
|
753
808
|
} catch {
|
|
754
809
|
}
|
|
755
810
|
}
|
|
756
|
-
function
|
|
811
|
+
function zt(e) {
|
|
757
812
|
try {
|
|
758
813
|
return localStorage.getItem(e);
|
|
759
814
|
} catch {
|
|
760
815
|
return null;
|
|
761
816
|
}
|
|
762
817
|
}
|
|
763
|
-
function
|
|
818
|
+
function At(e, t) {
|
|
764
819
|
typeof document > "u" || (document.documentElement.lang = e, document.documentElement.dir = t.find((n) => n.code === e)?.direction ?? "ltr");
|
|
765
820
|
}
|
|
766
|
-
function
|
|
821
|
+
function Ct() {
|
|
767
822
|
return typeof document > "u" ? null : document.querySelector('meta[name="webx-manifest"]')?.getAttribute("content") ?? null;
|
|
768
823
|
}
|
|
769
|
-
function
|
|
824
|
+
function Lt(e) {
|
|
770
825
|
const t = e.replace(/\r\n?/g, `
|
|
771
826
|
`).split(`
|
|
772
827
|
`), n = [];
|
|
773
828
|
let a = 0;
|
|
774
829
|
for (; a < t.length; ) {
|
|
775
|
-
const
|
|
776
|
-
if (
|
|
830
|
+
const r = t[a] ?? "";
|
|
831
|
+
if (r.trim() === "") {
|
|
777
832
|
a += 1;
|
|
778
833
|
continue;
|
|
779
834
|
}
|
|
780
|
-
if (/^```([\w-]*)\s*$/.exec(
|
|
781
|
-
const
|
|
835
|
+
if (/^```([\w-]*)\s*$/.exec(r)) {
|
|
836
|
+
const i = [];
|
|
782
837
|
for (a += 1; a < t.length && !/^```\s*$/.test(t[a] ?? ""); )
|
|
783
|
-
|
|
784
|
-
a += 1, n.push(`<pre><code>${
|
|
838
|
+
i.push(t[a] ?? ""), a += 1;
|
|
839
|
+
a += 1, n.push(`<pre><code>${re(i.join(`
|
|
785
840
|
`))}</code></pre>`);
|
|
786
841
|
continue;
|
|
787
842
|
}
|
|
788
|
-
const
|
|
789
|
-
if (
|
|
790
|
-
const
|
|
791
|
-
n.push(`<h${
|
|
843
|
+
const s = /^(#{1,4})\s+(.*)$/.exec(r);
|
|
844
|
+
if (s) {
|
|
845
|
+
const i = Math.min(s[1].length + 1, 5);
|
|
846
|
+
n.push(`<h${i}>${ne(s[2] ?? "")}</h${i}>`), a += 1;
|
|
792
847
|
continue;
|
|
793
848
|
}
|
|
794
|
-
if (
|
|
795
|
-
const
|
|
796
|
-
for (; a < t.length &&
|
|
797
|
-
for (
|
|
849
|
+
if (K(r)) {
|
|
850
|
+
const i = /^\s*\d+[.)]\s+/.test(r), c = [];
|
|
851
|
+
for (; a < t.length && K(t[a] ?? ""); )
|
|
852
|
+
for (c.push((t[a] ?? "").replace(/^\s*(?:[-*+]|\d+[.)])\s+/, "")), a += 1; a < t.length; ) {
|
|
798
853
|
const l = t[a] ?? "";
|
|
799
|
-
if (l.trim() === "" ||
|
|
854
|
+
if (l.trim() === "" || K(l) || /^(#{1,4})\s/.test(l) || /^```/.test(l))
|
|
800
855
|
break;
|
|
801
|
-
|
|
856
|
+
c[c.length - 1] += ` ${l.trim()}`, a += 1;
|
|
802
857
|
}
|
|
803
|
-
const
|
|
804
|
-
n.push(`<${
|
|
858
|
+
const m = i ? "ol" : "ul";
|
|
859
|
+
n.push(`<${m}>${c.map((l) => `<li>${ne(l)}</li>`).join("")}</${m}>`);
|
|
805
860
|
continue;
|
|
806
861
|
}
|
|
807
|
-
const
|
|
862
|
+
const u = [];
|
|
808
863
|
for (; a < t.length; ) {
|
|
809
|
-
const
|
|
810
|
-
if (
|
|
811
|
-
|
|
864
|
+
const i = t[a] ?? "";
|
|
865
|
+
if (i.trim() === "" || K(i) || /^(#{1,4})\s/.test(i) || /^```/.test(i)) break;
|
|
866
|
+
u.push(i.trim()), a += 1;
|
|
812
867
|
}
|
|
813
|
-
n.push(`<p>${
|
|
868
|
+
n.push(`<p>${ne(u.join(" "))}</p>`);
|
|
814
869
|
}
|
|
815
870
|
return n.join("");
|
|
816
871
|
}
|
|
817
|
-
const
|
|
818
|
-
function
|
|
872
|
+
const F = "\0";
|
|
873
|
+
function K(e) {
|
|
819
874
|
return /^\s*(?:[-*+]|\d+[.)])\s+/.test(e);
|
|
820
875
|
}
|
|
821
|
-
function
|
|
822
|
-
const t = [], n = e.replace(/`([^`]+)`/g, (
|
|
823
|
-
return
|
|
876
|
+
function ne(e) {
|
|
877
|
+
const t = [], n = e.replace(/`([^`]+)`/g, (r, o) => (t.push(`<code>${re(o)}</code>`), `${F}${t.length - 1}${F}`));
|
|
878
|
+
return re(n).replace(
|
|
824
879
|
/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/g,
|
|
825
880
|
'<a href="$2" target="_blank" rel="noopener">$1</a>'
|
|
826
881
|
).replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>").replace(
|
|
827
|
-
new RegExp(`${
|
|
828
|
-
(
|
|
882
|
+
new RegExp(`${F}(\\d+)${F}`, "g"),
|
|
883
|
+
(r, o) => t[Number(o)] ?? ""
|
|
829
884
|
);
|
|
830
885
|
}
|
|
831
|
-
function
|
|
886
|
+
function re(e) {
|
|
832
887
|
return e.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
833
888
|
}
|
|
834
|
-
function
|
|
889
|
+
function Wt(e) {
|
|
835
890
|
const t = e.scope("webx-admin"), n = /* @__PURE__ */ new Map();
|
|
836
|
-
function a(
|
|
837
|
-
const
|
|
838
|
-
let
|
|
839
|
-
return
|
|
891
|
+
function a(o, s, u) {
|
|
892
|
+
const i = e.state.locale, c = `${i}:${o}`;
|
|
893
|
+
let m = n.get(c);
|
|
894
|
+
return m === void 0 && (m = new Intl.DateTimeFormat(i, s), n.set(c, m)), m.format(u);
|
|
840
895
|
}
|
|
841
|
-
const
|
|
896
|
+
const r = (o) => a("time", { hour: "2-digit", minute: "2-digit", hourCycle: "h23" }, o);
|
|
842
897
|
return {
|
|
843
|
-
short(
|
|
844
|
-
const
|
|
845
|
-
if (
|
|
898
|
+
short(o) {
|
|
899
|
+
const s = ae(o);
|
|
900
|
+
if (s === null)
|
|
846
901
|
return t("dates.never");
|
|
847
|
-
const
|
|
848
|
-
return
|
|
902
|
+
const u = /* @__PURE__ */ new Date(), i = Rt(s, u);
|
|
903
|
+
return i === 0 ? t("dates.today", { time: r(s) }) : i === -1 ? t("dates.yesterday", { time: r(s) }) : s.getFullYear() === u.getFullYear() ? a(
|
|
849
904
|
"this-year",
|
|
850
905
|
{
|
|
851
906
|
day: "numeric",
|
|
@@ -854,66 +909,76 @@ function $t(e) {
|
|
|
854
909
|
minute: "2-digit",
|
|
855
910
|
hourCycle: "h23"
|
|
856
911
|
},
|
|
857
|
-
|
|
858
|
-
) : a("earlier", { day: "numeric", month: "long", year: "numeric" },
|
|
912
|
+
s
|
|
913
|
+
) : a("earlier", { day: "numeric", month: "long", year: "numeric" }, s);
|
|
859
914
|
},
|
|
860
|
-
exact(
|
|
861
|
-
const
|
|
862
|
-
return
|
|
915
|
+
exact(o) {
|
|
916
|
+
const s = ae(o);
|
|
917
|
+
return s === null ? "" : a("exact", { dateStyle: "long", timeStyle: "medium", hourCycle: "h23" }, s);
|
|
863
918
|
},
|
|
864
|
-
iso(
|
|
865
|
-
const
|
|
866
|
-
return
|
|
919
|
+
iso(o) {
|
|
920
|
+
const s = ae(o);
|
|
921
|
+
return s === null ? "" : s.toISOString();
|
|
867
922
|
}
|
|
868
923
|
};
|
|
869
924
|
}
|
|
870
|
-
function
|
|
871
|
-
const e =
|
|
872
|
-
return
|
|
925
|
+
function Et() {
|
|
926
|
+
const e = G(Q, null);
|
|
927
|
+
return Wt(e ?? Ut());
|
|
873
928
|
}
|
|
874
|
-
let
|
|
875
|
-
function
|
|
876
|
-
return
|
|
929
|
+
let q = null;
|
|
930
|
+
function Ut() {
|
|
931
|
+
return q === null && (q = de(), q.defaults("webx-admin", be)), q;
|
|
877
932
|
}
|
|
878
|
-
function
|
|
933
|
+
function ae(e) {
|
|
879
934
|
if (e == null || e === "")
|
|
880
935
|
return null;
|
|
881
936
|
const t = e instanceof Date ? e : new Date(e);
|
|
882
937
|
return Number.isNaN(t.getTime()) ? null : t;
|
|
883
938
|
}
|
|
884
|
-
function
|
|
939
|
+
function Rt(e, t) {
|
|
885
940
|
const n = (a) => Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
|
|
886
941
|
return Math.round((n(e) - n(t)) / 864e5);
|
|
887
942
|
}
|
|
888
|
-
function
|
|
889
|
-
const a = e instanceof
|
|
943
|
+
function Mt(e, t, n) {
|
|
944
|
+
const a = e instanceof ie ? e.status : Pt(e);
|
|
890
945
|
if (a === 422)
|
|
891
|
-
return
|
|
946
|
+
return Vt(e) ?? n ?? t("errors.unknown");
|
|
892
947
|
if (a === 401) return t("errors.signed-out");
|
|
893
948
|
if (a === 403) return t("errors.forbidden");
|
|
894
949
|
if (a === 404) return t("errors.gone");
|
|
895
950
|
if (a === 409) return t("errors.conflict");
|
|
896
951
|
if (a === 429) {
|
|
897
|
-
const
|
|
898
|
-
return
|
|
952
|
+
const r = e instanceof ie ? e.retryAfter : null;
|
|
953
|
+
return r === null ? t("errors.throttled") : t("errors.throttled-in", { seconds: r });
|
|
899
954
|
}
|
|
900
955
|
return a !== null && a >= 500 ? t("errors.server") : a === null ? t("errors.offline") : n ?? t("errors.unknown");
|
|
901
956
|
}
|
|
902
|
-
function
|
|
903
|
-
const e =
|
|
904
|
-
return (t, n) =>
|
|
957
|
+
function Nt() {
|
|
958
|
+
const e = N("webx-admin");
|
|
959
|
+
return (t, n) => Mt(t, e, n);
|
|
905
960
|
}
|
|
906
|
-
function
|
|
961
|
+
function Pt(e) {
|
|
907
962
|
const t = e?.status;
|
|
908
963
|
return typeof t == "number" ? t : null;
|
|
909
964
|
}
|
|
910
|
-
function
|
|
965
|
+
function Vt(e) {
|
|
911
966
|
const n = e?.body?.message;
|
|
912
967
|
return typeof n == "string" && n !== "" ? n : null;
|
|
913
968
|
}
|
|
914
|
-
|
|
969
|
+
function Dt(e, t, n) {
|
|
970
|
+
const a = `${e.apiPath}/entities/${t}/${n}/notes`, r = (s) => `${e.apiPath}/notes/${s}`, o = (s) => s.data;
|
|
971
|
+
return {
|
|
972
|
+
list: () => e.http.get(a).then(o),
|
|
973
|
+
add: (s) => e.http.post(a, { body: s }).then(o),
|
|
974
|
+
save: (s, u) => e.http.put(r(s), { body: u }).then(o),
|
|
975
|
+
remove: (s) => e.http.delete(r(s)).then(() => {
|
|
976
|
+
})
|
|
977
|
+
};
|
|
978
|
+
}
|
|
979
|
+
const Bt = { class: "wx-screen-host" }, un = /* @__PURE__ */ U({
|
|
915
980
|
__name: "Screen",
|
|
916
|
-
props: /* @__PURE__ */
|
|
981
|
+
props: /* @__PURE__ */ se({
|
|
917
982
|
name: {},
|
|
918
983
|
errors: { default: void 0 },
|
|
919
984
|
disabled: { type: Boolean, default: !1 },
|
|
@@ -924,39 +989,39 @@ const Wt = { class: "wx-screen-host" }, Ot = /* @__PURE__ */ T({
|
|
|
924
989
|
modelValue: { default: () => ({}) },
|
|
925
990
|
modelModifiers: {}
|
|
926
991
|
}),
|
|
927
|
-
emits: /* @__PURE__ */
|
|
992
|
+
emits: /* @__PURE__ */ se(["loaded"], ["update:modelValue"]),
|
|
928
993
|
setup(e, { expose: t, emit: n }) {
|
|
929
|
-
const a = e,
|
|
930
|
-
async function
|
|
931
|
-
|
|
994
|
+
const a = e, r = n, o = he(e, "modelValue"), s = H(), u = N("webx-admin"), i = C(null), c = C(null);
|
|
995
|
+
async function m() {
|
|
996
|
+
i.value = null, c.value = null;
|
|
932
997
|
try {
|
|
933
|
-
const l = await
|
|
934
|
-
|
|
998
|
+
const l = await s.loadScreen(a.name);
|
|
999
|
+
i.value = l, r("loaded", l);
|
|
935
1000
|
} catch (l) {
|
|
936
|
-
|
|
1001
|
+
c.value = l instanceof Error ? l.message : String(l);
|
|
937
1002
|
}
|
|
938
1003
|
}
|
|
939
|
-
return
|
|
940
|
-
|
|
941
|
-
}, { immediate: !0 }), t({ reload:
|
|
942
|
-
|
|
1004
|
+
return J([() => a.name, () => s.i18n.state.locale], () => {
|
|
1005
|
+
m();
|
|
1006
|
+
}, { immediate: !0 }), t({ reload: m }), (l, v) => (f(), b("div", Bt, [
|
|
1007
|
+
c.value ? (f(), x(d(Be), {
|
|
943
1008
|
key: 0,
|
|
944
1009
|
type: "danger",
|
|
945
|
-
title:
|
|
946
|
-
description:
|
|
947
|
-
}, null, 8, ["title", "description"])) :
|
|
1010
|
+
title: d(u)("shell.error-title"),
|
|
1011
|
+
description: c.value
|
|
1012
|
+
}, null, 8, ["title", "description"])) : i.value === null ? (f(), x(d(we), {
|
|
948
1013
|
key: 1,
|
|
949
1014
|
rows: 4
|
|
950
|
-
})) : (
|
|
1015
|
+
})) : (f(), x(d(Ge), {
|
|
951
1016
|
key: 2,
|
|
952
|
-
modelValue:
|
|
953
|
-
"onUpdate:modelValue":
|
|
954
|
-
root:
|
|
955
|
-
patch:
|
|
956
|
-
types:
|
|
1017
|
+
modelValue: o.value,
|
|
1018
|
+
"onUpdate:modelValue": v[0] || (v[0] = (h) => o.value = h),
|
|
1019
|
+
root: i.value,
|
|
1020
|
+
patch: d(s).screenPatch(e.name),
|
|
1021
|
+
types: d(s).types,
|
|
957
1022
|
errors: e.errors,
|
|
958
|
-
translate:
|
|
959
|
-
can:
|
|
1023
|
+
translate: d(s).i18n.t,
|
|
1024
|
+
can: d(s).can,
|
|
960
1025
|
disabled: e.disabled,
|
|
961
1026
|
"label-position": e.labelPosition,
|
|
962
1027
|
"label-width": e.labelWidth,
|
|
@@ -964,10 +1029,10 @@ const Wt = { class: "wx-screen-host" }, Ot = /* @__PURE__ */ T({
|
|
|
964
1029
|
}, null, 8, ["modelValue", "root", "patch", "types", "errors", "translate", "can", "disabled", "label-position", "label-width", "size"]))
|
|
965
1030
|
]));
|
|
966
1031
|
}
|
|
967
|
-
}),
|
|
1032
|
+
}), It = {
|
|
968
1033
|
key: 0,
|
|
969
1034
|
class: "wx-dropdown__divider"
|
|
970
|
-
},
|
|
1035
|
+
}, jt = /* @__PURE__ */ U({
|
|
971
1036
|
__name: "RowMenu",
|
|
972
1037
|
props: {
|
|
973
1038
|
actions: {},
|
|
@@ -975,46 +1040,46 @@ const Wt = { class: "wx-screen-host" }, Ot = /* @__PURE__ */ T({
|
|
|
975
1040
|
size: { default: "sm" }
|
|
976
1041
|
},
|
|
977
1042
|
setup(e) {
|
|
978
|
-
const t = e, n =
|
|
979
|
-
...t.actions.filter((
|
|
980
|
-
...t.actions.filter((
|
|
981
|
-
]), a =
|
|
982
|
-
const
|
|
983
|
-
return
|
|
1043
|
+
const t = e, n = S(() => [
|
|
1044
|
+
...t.actions.filter((r) => !r.danger),
|
|
1045
|
+
...t.actions.filter((r) => r.danger)
|
|
1046
|
+
]), a = S(() => {
|
|
1047
|
+
const r = n.value.find((o) => o.danger);
|
|
1048
|
+
return r && n.value[0] !== r ? r.key : null;
|
|
984
1049
|
});
|
|
985
|
-
return (
|
|
1050
|
+
return (r, o) => n.value.length > 0 ? (f(), x(d(Ie), {
|
|
986
1051
|
key: 0,
|
|
987
1052
|
collapse: "always",
|
|
988
1053
|
align: "end",
|
|
989
1054
|
size: e.size,
|
|
990
1055
|
"aria-label": e.label,
|
|
991
|
-
onClick:
|
|
1056
|
+
onClick: o[0] || (o[0] = pe(() => {
|
|
992
1057
|
}, ["stop"]))
|
|
993
1058
|
}, {
|
|
994
1059
|
collapsed: w(() => [
|
|
995
|
-
(
|
|
996
|
-
key:
|
|
1060
|
+
(f(!0), b(R, null, I(n.value, (s) => (f(), b(R, {
|
|
1061
|
+
key: s.key
|
|
997
1062
|
}, [
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
icon:
|
|
1001
|
-
tone:
|
|
1002
|
-
href:
|
|
1003
|
-
target:
|
|
1004
|
-
disabled:
|
|
1005
|
-
onClick: (
|
|
1063
|
+
s.key === a.value ? (f(), b("hr", It)) : E("", !0),
|
|
1064
|
+
y(d(je), {
|
|
1065
|
+
icon: s.icon,
|
|
1066
|
+
tone: s.danger ? "danger" : "default",
|
|
1067
|
+
href: s.href,
|
|
1068
|
+
target: s.href ? s.target ?? "_blank" : void 0,
|
|
1069
|
+
disabled: s.disabled,
|
|
1070
|
+
onClick: (u) => s.run?.()
|
|
1006
1071
|
}, {
|
|
1007
1072
|
default: w(() => [
|
|
1008
|
-
L(
|
|
1073
|
+
L(A(s.label), 1)
|
|
1009
1074
|
]),
|
|
1010
1075
|
_: 2
|
|
1011
1076
|
}, 1032, ["icon", "tone", "href", "target", "disabled", "onClick"])
|
|
1012
1077
|
], 64))), 128))
|
|
1013
1078
|
]),
|
|
1014
1079
|
_: 1
|
|
1015
|
-
}, 8, ["size", "aria-label"])) :
|
|
1080
|
+
}, 8, ["size", "aria-label"])) : E("", !0);
|
|
1016
1081
|
}
|
|
1017
|
-
}),
|
|
1082
|
+
}), dn = /* @__PURE__ */ U({
|
|
1018
1083
|
__name: "BackButton",
|
|
1019
1084
|
props: {
|
|
1020
1085
|
to: {},
|
|
@@ -1022,18 +1087,18 @@ const Wt = { class: "wx-screen-host" }, Ot = /* @__PURE__ */ T({
|
|
|
1022
1087
|
size: { default: "sm" }
|
|
1023
1088
|
},
|
|
1024
1089
|
setup(e) {
|
|
1025
|
-
const t = e, n =
|
|
1026
|
-
return (
|
|
1090
|
+
const t = e, n = N("webx-admin"), a = S(() => t.label ?? n("editor.back"));
|
|
1091
|
+
return (r, o) => (f(), x(d(ue), {
|
|
1027
1092
|
icon: "arrow-left",
|
|
1028
1093
|
class: "wx-back-button",
|
|
1029
|
-
as:
|
|
1094
|
+
as: d(We),
|
|
1030
1095
|
to: e.to,
|
|
1031
1096
|
title: a.value,
|
|
1032
1097
|
size: e.size,
|
|
1033
1098
|
"tooltip-side": "bottom"
|
|
1034
1099
|
}, null, 8, ["as", "to", "title", "size"]));
|
|
1035
1100
|
}
|
|
1036
|
-
}),
|
|
1101
|
+
}), Ht = { class: "wx-rename__footer" }, Ot = /* @__PURE__ */ U({
|
|
1037
1102
|
__name: "RenameButton",
|
|
1038
1103
|
props: {
|
|
1039
1104
|
name: { default: "" },
|
|
@@ -1044,57 +1109,57 @@ const Wt = { class: "wx-screen-host" }, Ot = /* @__PURE__ */ T({
|
|
|
1044
1109
|
},
|
|
1045
1110
|
emits: ["rename"],
|
|
1046
1111
|
setup(e, { emit: t }) {
|
|
1047
|
-
const n = e, a = t,
|
|
1048
|
-
|
|
1049
|
-
|
|
1112
|
+
const n = e, a = t, r = N("webx-admin"), o = C(!1), s = C(n.name), u = C(null), i = S(() => n.label ?? r("editor.rename"));
|
|
1113
|
+
J(o, async (m) => {
|
|
1114
|
+
m && (s.value = n.name, await Te(), u.value?.focus(), u.value?.select());
|
|
1050
1115
|
});
|
|
1051
|
-
function
|
|
1052
|
-
const
|
|
1053
|
-
if (
|
|
1054
|
-
|
|
1116
|
+
function c() {
|
|
1117
|
+
const m = s.value.trim();
|
|
1118
|
+
if (m === "" || m === n.name) {
|
|
1119
|
+
o.value = !1;
|
|
1055
1120
|
return;
|
|
1056
1121
|
}
|
|
1057
|
-
a("rename",
|
|
1122
|
+
a("rename", m), o.value = !1;
|
|
1058
1123
|
}
|
|
1059
|
-
return (
|
|
1060
|
-
open:
|
|
1061
|
-
"onUpdate:open": l[2] || (l[2] = (
|
|
1062
|
-
title:
|
|
1124
|
+
return (m, l) => (f(), x(d(He), {
|
|
1125
|
+
open: o.value,
|
|
1126
|
+
"onUpdate:open": l[2] || (l[2] = (v) => o.value = v),
|
|
1127
|
+
title: i.value,
|
|
1063
1128
|
width: 320,
|
|
1064
1129
|
side: "bottom",
|
|
1065
1130
|
align: "start",
|
|
1066
1131
|
teleport: ""
|
|
1067
1132
|
}, {
|
|
1068
1133
|
trigger: w(() => [
|
|
1069
|
-
|
|
1134
|
+
y(d(ue), {
|
|
1070
1135
|
type: "edit",
|
|
1071
|
-
title:
|
|
1136
|
+
title: i.value,
|
|
1072
1137
|
size: e.size,
|
|
1073
1138
|
disabled: e.disabled
|
|
1074
1139
|
}, null, 8, ["title", "size", "disabled"])
|
|
1075
1140
|
]),
|
|
1076
1141
|
default: w(() => [
|
|
1077
|
-
|
|
1142
|
+
M("form", {
|
|
1078
1143
|
class: "wx-rename",
|
|
1079
|
-
onSubmit:
|
|
1144
|
+
onSubmit: pe(c, ["prevent"])
|
|
1080
1145
|
}, [
|
|
1081
|
-
|
|
1146
|
+
y(d(Oe), {
|
|
1082
1147
|
ref_key: "field",
|
|
1083
|
-
ref:
|
|
1084
|
-
modelValue:
|
|
1085
|
-
"onUpdate:modelValue": l[0] || (l[0] = (
|
|
1086
|
-
"aria-label":
|
|
1148
|
+
ref: u,
|
|
1149
|
+
modelValue: s.value,
|
|
1150
|
+
"onUpdate:modelValue": l[0] || (l[0] = (v) => s.value = v),
|
|
1151
|
+
"aria-label": i.value,
|
|
1087
1152
|
placeholder: e.placeholder,
|
|
1088
|
-
onKeydown: l[1] || (l[1] =
|
|
1153
|
+
onKeydown: l[1] || (l[1] = ze((v) => o.value = !1, ["esc"]))
|
|
1089
1154
|
}, null, 8, ["modelValue", "aria-label", "placeholder"]),
|
|
1090
|
-
|
|
1091
|
-
|
|
1155
|
+
M("div", Ht, [
|
|
1156
|
+
y(d(X), {
|
|
1092
1157
|
type: "primary",
|
|
1093
1158
|
size: "sm",
|
|
1094
1159
|
"native-type": "submit"
|
|
1095
1160
|
}, {
|
|
1096
1161
|
default: w(() => [
|
|
1097
|
-
L(
|
|
1162
|
+
L(A(d(r)("editor.save")), 1)
|
|
1098
1163
|
]),
|
|
1099
1164
|
_: 1
|
|
1100
1165
|
})
|
|
@@ -1104,7 +1169,7 @@ const Wt = { class: "wx-screen-host" }, Ot = /* @__PURE__ */ T({
|
|
|
1104
1169
|
_: 1
|
|
1105
1170
|
}, 8, ["open", "title"]));
|
|
1106
1171
|
}
|
|
1107
|
-
}),
|
|
1172
|
+
}), cn = /* @__PURE__ */ j(Ot, [["__scopeId", "data-v-d879e8d3"]]), Ft = ["innerHTML"], Kt = /* @__PURE__ */ U({
|
|
1108
1173
|
__name: "HelpButton",
|
|
1109
1174
|
props: {
|
|
1110
1175
|
body: {},
|
|
@@ -1114,33 +1179,33 @@ const Wt = { class: "wx-screen-host" }, Ot = /* @__PURE__ */ T({
|
|
|
1114
1179
|
width: { default: 720 }
|
|
1115
1180
|
},
|
|
1116
1181
|
setup(e) {
|
|
1117
|
-
const t = e, n =
|
|
1118
|
-
return (
|
|
1119
|
-
|
|
1182
|
+
const t = e, n = N("webx-admin"), a = C(!1), r = S(() => t.title ?? n("help.title")), o = S(() => Lt(t.body));
|
|
1183
|
+
return (s, u) => (f(), b(R, null, [
|
|
1184
|
+
y(d(ue), {
|
|
1120
1185
|
type: "details",
|
|
1121
1186
|
icon: "question",
|
|
1122
1187
|
tone: "neutral",
|
|
1123
1188
|
size: e.size,
|
|
1124
|
-
title: e.label ??
|
|
1125
|
-
onClick:
|
|
1189
|
+
title: e.label ?? r.value,
|
|
1190
|
+
onClick: u[0] || (u[0] = (i) => a.value = !0)
|
|
1126
1191
|
}, null, 8, ["size", "title"]),
|
|
1127
|
-
|
|
1192
|
+
y(d(Fe), {
|
|
1128
1193
|
open: a.value,
|
|
1129
|
-
"onUpdate:open":
|
|
1130
|
-
title:
|
|
1194
|
+
"onUpdate:open": u[1] || (u[1] = (i) => a.value = i),
|
|
1195
|
+
title: r.value,
|
|
1131
1196
|
width: e.width
|
|
1132
1197
|
}, {
|
|
1133
1198
|
default: w(() => [
|
|
1134
|
-
|
|
1199
|
+
M("div", {
|
|
1135
1200
|
class: "wx-help",
|
|
1136
|
-
innerHTML:
|
|
1137
|
-
}, null, 8,
|
|
1201
|
+
innerHTML: o.value
|
|
1202
|
+
}, null, 8, Ft)
|
|
1138
1203
|
]),
|
|
1139
1204
|
_: 1
|
|
1140
1205
|
}, 8, ["open", "title", "width"])
|
|
1141
1206
|
], 64));
|
|
1142
1207
|
}
|
|
1143
|
-
}),
|
|
1208
|
+
}), mn = /* @__PURE__ */ j(Kt, [["__scopeId", "data-v-6c280d42"]]), qt = /* @__PURE__ */ U({
|
|
1144
1209
|
name: "WxDate",
|
|
1145
1210
|
__name: "DateText",
|
|
1146
1211
|
props: {
|
|
@@ -1149,66 +1214,266 @@ const Wt = { class: "wx-screen-host" }, Ot = /* @__PURE__ */ T({
|
|
|
1149
1214
|
tone: { default: "muted" }
|
|
1150
1215
|
},
|
|
1151
1216
|
setup(e) {
|
|
1152
|
-
const t = e, n =
|
|
1153
|
-
return (
|
|
1217
|
+
const t = e, n = Et(), a = S(() => n.short(t.value)), r = S(() => n.exact(t.value)), o = S(() => n.iso(t.value));
|
|
1218
|
+
return (s, u) => r.value ? (f(), x(d(Ke), {
|
|
1154
1219
|
key: 0,
|
|
1155
|
-
content:
|
|
1220
|
+
content: r.value
|
|
1156
1221
|
}, {
|
|
1157
1222
|
default: w(() => [
|
|
1158
|
-
|
|
1223
|
+
y(d(Y), {
|
|
1159
1224
|
as: "time",
|
|
1160
|
-
datetime:
|
|
1225
|
+
datetime: o.value,
|
|
1161
1226
|
size: e.size,
|
|
1162
1227
|
tone: e.tone
|
|
1163
1228
|
}, {
|
|
1164
1229
|
default: w(() => [
|
|
1165
|
-
L(
|
|
1230
|
+
L(A(a.value), 1)
|
|
1166
1231
|
]),
|
|
1167
1232
|
_: 1
|
|
1168
1233
|
}, 8, ["datetime", "size", "tone"])
|
|
1169
1234
|
]),
|
|
1170
1235
|
_: 1
|
|
1171
|
-
}, 8, ["content"])) : (
|
|
1236
|
+
}, 8, ["content"])) : (f(), x(d(Y), {
|
|
1172
1237
|
key: 1,
|
|
1173
1238
|
size: e.size,
|
|
1174
1239
|
tone: e.tone
|
|
1175
1240
|
}, {
|
|
1176
1241
|
default: w(() => [
|
|
1177
|
-
L(
|
|
1242
|
+
L(A(a.value), 1)
|
|
1178
1243
|
]),
|
|
1179
1244
|
_: 1
|
|
1180
1245
|
}, 8, ["size", "tone"]));
|
|
1181
1246
|
}
|
|
1182
|
-
})
|
|
1247
|
+
}), Xt = { class: "wx-notes" }, Yt = {
|
|
1248
|
+
key: 3,
|
|
1249
|
+
class: "wx-notes__list"
|
|
1250
|
+
}, Gt = { class: "wx-note__body" }, Jt = { class: "wx-note__head" }, Qt = { class: "wx-note__buttons" }, Zt = {
|
|
1251
|
+
key: 1,
|
|
1252
|
+
class: "wx-note__text"
|
|
1253
|
+
}, en = {
|
|
1254
|
+
key: 4,
|
|
1255
|
+
class: "wx-notes__new"
|
|
1256
|
+
}, tn = /* @__PURE__ */ U({
|
|
1257
|
+
name: "WxNotes",
|
|
1258
|
+
__name: "NotesFeed",
|
|
1259
|
+
props: {
|
|
1260
|
+
type: {},
|
|
1261
|
+
id: {},
|
|
1262
|
+
can: { type: Boolean, default: !0 },
|
|
1263
|
+
title: { default: void 0 }
|
|
1264
|
+
},
|
|
1265
|
+
emits: ["change"],
|
|
1266
|
+
setup(e, { emit: t }) {
|
|
1267
|
+
const n = e, a = t, r = H(), o = N("webx-admin"), s = Nt(), u = C([]), i = C(!0), c = C(""), m = C(!1), l = C(null), v = C(""), h = S(() => Dt(r, n.type, n.id)), g = S(() => n.title ?? o("notes.title"));
|
|
1268
|
+
async function p() {
|
|
1269
|
+
i.value = !0;
|
|
1270
|
+
try {
|
|
1271
|
+
u.value = await h.value.list();
|
|
1272
|
+
} catch (k) {
|
|
1273
|
+
B.danger(s(k));
|
|
1274
|
+
} finally {
|
|
1275
|
+
i.value = !1;
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
J(
|
|
1279
|
+
() => [n.type, n.id],
|
|
1280
|
+
() => {
|
|
1281
|
+
l.value = null, c.value = "", p();
|
|
1282
|
+
},
|
|
1283
|
+
{ immediate: !0 }
|
|
1284
|
+
);
|
|
1285
|
+
async function _() {
|
|
1286
|
+
const k = c.value.trim();
|
|
1287
|
+
if (!(k === "" || m.value)) {
|
|
1288
|
+
m.value = !0;
|
|
1289
|
+
try {
|
|
1290
|
+
u.value = [...u.value, await h.value.add(k)], c.value = "", a("change");
|
|
1291
|
+
} catch (T) {
|
|
1292
|
+
B.danger(s(T));
|
|
1293
|
+
} finally {
|
|
1294
|
+
m.value = !1;
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1298
|
+
function V(k) {
|
|
1299
|
+
l.value = k.id, v.value = k.body;
|
|
1300
|
+
}
|
|
1301
|
+
async function Z(k) {
|
|
1302
|
+
const T = v.value.trim();
|
|
1303
|
+
if (T !== "")
|
|
1304
|
+
try {
|
|
1305
|
+
const $ = await h.value.save(k.id, T);
|
|
1306
|
+
u.value = u.value.map((P) => P.id === $.id ? $ : P), l.value = null, B.success(o("notes.saved")), a("change");
|
|
1307
|
+
} catch ($) {
|
|
1308
|
+
B.danger(s($));
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
async function ee(k) {
|
|
1312
|
+
if (await Ye({
|
|
1313
|
+
title: o("notes.delete-title"),
|
|
1314
|
+
message: o("notes.delete-text"),
|
|
1315
|
+
confirmText: o("notes.delete"),
|
|
1316
|
+
cancelText: o("notes.cancel"),
|
|
1317
|
+
tone: "danger"
|
|
1318
|
+
}))
|
|
1319
|
+
try {
|
|
1320
|
+
await h.value.remove(k.id), u.value = u.value.filter(($) => $.id !== k.id), B.success(o("notes.deleted")), a("change");
|
|
1321
|
+
} catch ($) {
|
|
1322
|
+
B.danger(s($));
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
function te(k) {
|
|
1326
|
+
return !n.can || !k.is_mine ? [] : [
|
|
1327
|
+
{ key: "edit", icon: "edit", label: o("notes.edit"), run: () => V(k) },
|
|
1328
|
+
{
|
|
1329
|
+
key: "delete",
|
|
1330
|
+
icon: "trash",
|
|
1331
|
+
label: o("notes.delete"),
|
|
1332
|
+
danger: !0,
|
|
1333
|
+
run: () => {
|
|
1334
|
+
ee(k);
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
];
|
|
1338
|
+
}
|
|
1339
|
+
function D(k) {
|
|
1340
|
+
return k.author?.name ?? o("notes.unknown-author");
|
|
1341
|
+
}
|
|
1342
|
+
return (k, T) => (f(), b("section", Xt, [
|
|
1343
|
+
g.value ? (f(), x(d(Y), {
|
|
1344
|
+
key: 0,
|
|
1345
|
+
weight: "medium",
|
|
1346
|
+
class: "wx-notes__title"
|
|
1347
|
+
}, {
|
|
1348
|
+
default: w(() => [
|
|
1349
|
+
L(A(g.value), 1)
|
|
1350
|
+
]),
|
|
1351
|
+
_: 1
|
|
1352
|
+
})) : E("", !0),
|
|
1353
|
+
i.value ? (f(), x(d(we), {
|
|
1354
|
+
key: 1,
|
|
1355
|
+
rows: 2
|
|
1356
|
+
})) : u.value.length === 0 ? (f(), x(d(qe), {
|
|
1357
|
+
key: 2,
|
|
1358
|
+
size: "sm",
|
|
1359
|
+
description: d(o)("notes.empty")
|
|
1360
|
+
}, null, 8, ["description"])) : (f(), b("ul", Yt, [
|
|
1361
|
+
(f(!0), b(R, null, I(u.value, ($) => (f(), b("li", {
|
|
1362
|
+
key: $.id,
|
|
1363
|
+
class: "wx-note"
|
|
1364
|
+
}, [
|
|
1365
|
+
y(d(Xe), {
|
|
1366
|
+
name: D($),
|
|
1367
|
+
size: "sm",
|
|
1368
|
+
tone: "auto"
|
|
1369
|
+
}, null, 8, ["name"]),
|
|
1370
|
+
M("div", Gt, [
|
|
1371
|
+
M("div", Jt, [
|
|
1372
|
+
y(d(Y), {
|
|
1373
|
+
size: "sm",
|
|
1374
|
+
weight: "medium",
|
|
1375
|
+
truncate: ""
|
|
1376
|
+
}, {
|
|
1377
|
+
default: w(() => [
|
|
1378
|
+
L(A(D($)), 1)
|
|
1379
|
+
]),
|
|
1380
|
+
_: 2
|
|
1381
|
+
}, 1024),
|
|
1382
|
+
y(qt, {
|
|
1383
|
+
value: $.created_at
|
|
1384
|
+
}, null, 8, ["value"]),
|
|
1385
|
+
y(jt, {
|
|
1386
|
+
actions: te($),
|
|
1387
|
+
label: D($)
|
|
1388
|
+
}, null, 8, ["actions", "label"])
|
|
1389
|
+
]),
|
|
1390
|
+
l.value === $.id ? (f(), b(R, { key: 0 }, [
|
|
1391
|
+
y(d(fe), {
|
|
1392
|
+
modelValue: v.value,
|
|
1393
|
+
"onUpdate:modelValue": T[0] || (T[0] = (P) => v.value = P),
|
|
1394
|
+
autosize: { minRows: 2, maxRows: 10 }
|
|
1395
|
+
}, null, 8, ["modelValue"]),
|
|
1396
|
+
M("div", Qt, [
|
|
1397
|
+
y(d(X), {
|
|
1398
|
+
size: "sm",
|
|
1399
|
+
type: "primary",
|
|
1400
|
+
onClick: (P) => Z($)
|
|
1401
|
+
}, {
|
|
1402
|
+
default: w(() => [
|
|
1403
|
+
L(A(d(o)("notes.save")), 1)
|
|
1404
|
+
]),
|
|
1405
|
+
_: 1
|
|
1406
|
+
}, 8, ["onClick"]),
|
|
1407
|
+
y(d(X), {
|
|
1408
|
+
size: "sm",
|
|
1409
|
+
variant: "text",
|
|
1410
|
+
onClick: T[1] || (T[1] = (P) => l.value = null)
|
|
1411
|
+
}, {
|
|
1412
|
+
default: w(() => [
|
|
1413
|
+
L(A(d(o)("notes.cancel")), 1)
|
|
1414
|
+
]),
|
|
1415
|
+
_: 1
|
|
1416
|
+
})
|
|
1417
|
+
])
|
|
1418
|
+
], 64)) : (f(), b("p", Zt, A($.body), 1))
|
|
1419
|
+
])
|
|
1420
|
+
]))), 128))
|
|
1421
|
+
])),
|
|
1422
|
+
e.can ? (f(), b("div", en, [
|
|
1423
|
+
y(d(fe), {
|
|
1424
|
+
modelValue: c.value,
|
|
1425
|
+
"onUpdate:modelValue": T[2] || (T[2] = ($) => c.value = $),
|
|
1426
|
+
placeholder: d(o)("notes.placeholder"),
|
|
1427
|
+
autosize: { minRows: 2, maxRows: 8 }
|
|
1428
|
+
}, null, 8, ["modelValue", "placeholder"]),
|
|
1429
|
+
y(d(X), {
|
|
1430
|
+
size: "sm",
|
|
1431
|
+
type: "primary",
|
|
1432
|
+
disabled: c.value.trim() === "",
|
|
1433
|
+
loading: m.value,
|
|
1434
|
+
onClick: _
|
|
1435
|
+
}, {
|
|
1436
|
+
default: w(() => [
|
|
1437
|
+
L(A(d(o)("notes.add")), 1)
|
|
1438
|
+
]),
|
|
1439
|
+
_: 1
|
|
1440
|
+
}, 8, ["disabled", "loading"])
|
|
1441
|
+
])) : E("", !0)
|
|
1442
|
+
]));
|
|
1443
|
+
}
|
|
1444
|
+
}), fn = /* @__PURE__ */ j(tn, [["__scopeId", "data-v-4ce005b1"]]);
|
|
1183
1445
|
export {
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1446
|
+
rt as AdminLanding,
|
|
1447
|
+
ut as AdminNav,
|
|
1448
|
+
yt as AdminShell,
|
|
1449
|
+
ie as HttpError,
|
|
1450
|
+
dn as WxBackButton,
|
|
1451
|
+
qt as WxDate,
|
|
1452
|
+
mn as WxHelpButton,
|
|
1453
|
+
tt as WxListScreen,
|
|
1454
|
+
fn as WxNotes,
|
|
1455
|
+
cn as WxRenameButton,
|
|
1456
|
+
jt as WxRowMenu,
|
|
1457
|
+
un as WxScreen,
|
|
1458
|
+
ye as adminKey,
|
|
1459
|
+
be as adminMessages,
|
|
1460
|
+
nt as adminTypes,
|
|
1461
|
+
rn as createAdmin,
|
|
1462
|
+
at as createAdminContext,
|
|
1463
|
+
Wt as createDates,
|
|
1464
|
+
xt as createHttp,
|
|
1465
|
+
de as createI18n,
|
|
1466
|
+
Dt as createNotesApi,
|
|
1467
|
+
Mt as errorText,
|
|
1468
|
+
Q as i18nKey,
|
|
1469
|
+
lt as provideAdmin,
|
|
1470
|
+
ot as provideI18n,
|
|
1471
|
+
ve as readCookie,
|
|
1472
|
+
Lt as renderMarkdown,
|
|
1473
|
+
H as useAdmin,
|
|
1474
|
+
Et as useDates,
|
|
1475
|
+
Nt as useErrorText,
|
|
1476
|
+
on as useI18n,
|
|
1477
|
+
N as useTranslate
|
|
1213
1478
|
};
|
|
1214
1479
|
//# sourceMappingURL=index.js.map
|