@webx-ui/module-admin 0.15.0 → 0.16.1

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/index.js CHANGED
@@ -1,20 +1,20 @@
1
- import { inject as oe, reactive as pe, defineComponent as R, useModel as ue, ref as W, watch as ee, computed as x, openBlock as p, createElementBlock as T, createVNode as b, unref as n, withCtx as g, createElementVNode as O, toDisplayString as L, createBlock as $, createTextVNode as V, createCommentVNode as U, mergeModels as le, provide as vt, normalizeProps as ft, guardReactiveProps as pt, onMounted as Le, Fragment as H, renderList as Q, mergeProps as He, withModifiers as je, useSlots as ht, useTemplateRef as Ke, normalizeClass as ae, renderSlot as F, createSlots as Ae, resolveComponent as j, watchEffect as gt, onUnmounted as yt, isRef as qe, createApp as bt, h as de, nextTick as Ye, withKeys as Xe, onBeforeUnmount as Ge } from "vue";
2
- import { RouterLink as wt, useRouter as ge, useRoute as Je, createRouter as xt, createWebHistory as kt, onBeforeRouteLeave as _t } from "vue-router";
3
- import { WxSortableList as Qe, WxAction as se, WxBadge as ze, WxSelect as Ze, useLocales as et, WxInput as ye, WxAlert as be, WxSegmented as $t, WxAutocomplete as Be, WxText as G, WxCheckbox as Ie, WxActions as Tt, WxDropdownItem as St, useElementWidth as Ct, WxHeading as Wt, WxButton as Z, WxIcon as Ve, WxTabs as Lt, WxCard as Se, WxRichText as At, WxResult as zt, useResponsiveShell as Vt, shellLayoutFor as Et, WxToaster as Ut, WebxUI as Nt, dateLocaleKey as Rt, localesKey as Bt, useModal as It, WxDialog as tt, WxFormItem as Pt, WxSpace as Dt, createModal as Mt, WxSkeleton as re, WxEmpty as at, WxTooltip as nt, toast as D, confirm as he, localizedValue as Ft, WxBreadcrumb as Ot, WxBreadcrumbItem as Pe, WxActionBar as Ht, WxPopover as jt, WxAvatar as Kt, WxTextarea as De } from "@webx-ui/core";
4
- import { watchSystemTheme as qt, applyTheme as Yt, systemTheme as Xt } from "@webx-ui/tokens";
5
- import { WxScreenRenderer as Gt } from "@webx-ui/schema";
1
+ import { inject as ne, reactive as pe, defineComponent as R, useModel as de, ref as W, watch as ee, computed as x, openBlock as p, createElementBlock as T, createVNode as b, unref as n, withCtx as g, createElementVNode as O, toDisplayString as L, createBlock as $, createTextVNode as V, createCommentVNode as U, mergeModels as oe, onMounted as Le, Fragment as H, renderList as Q, mergeProps as Ke, withModifiers as qe, useSlots as gt, useTemplateRef as Ye, normalizeClass as ae, renderSlot as F, createSlots as Ae, provide as Xe, normalizeProps as yt, guardReactiveProps as bt, resolveComponent as j, watchEffect as wt, onUnmounted as xt, isRef as Ge, createApp as kt, h as re, nextTick as Je, withKeys as Qe, onBeforeUnmount as Ze } from "vue";
2
+ import { RouterLink as _t, useRouter as ge, useRoute as et, createRouter as $t, createWebHistory as Tt, onBeforeRouteLeave as St } from "vue-router";
3
+ import { WxSortableList as tt, WxAction as se, WxBadge as ze, WxSelect as at, WxSegmented as Ct, WxAutocomplete as Be, WxText as G, WxInput as ye, WxCheckbox as Ie, WxActions as Wt, WxDropdownItem as Lt, useElementWidth as At, WxHeading as zt, WxButton as Z, WxIcon as Ve, WxTabs as Vt, WxCard as Se, WxRichText as Et, useLocales as nt, WxAlert as be, WxResult as Ut, useResponsiveShell as Rt, shellLayoutFor as Nt, WxToaster as Bt, WebxUI as It, dateLocaleKey as Pt, localesKey as Dt, useModal as Mt, WxDialog as lt, WxFormItem as Ft, WxSpace as Ot, createModal as Ht, WxSkeleton as ue, WxEmpty as ot, WxTooltip as st, toast as D, confirm as he, localizedValue as jt, WxBreadcrumb as Kt, WxBreadcrumbItem as Pe, WxActionBar as qt, WxPopover as Yt, WxAvatar as Xt, WxTextarea as De } from "@webx-ui/core";
4
+ import { watchSystemTheme as Gt, applyTheme as Jt, systemTheme as Qt } from "@webx-ui/tokens";
5
+ import { WxScreenRenderer as Zt } from "@webx-ui/schema";
6
6
  const we = /* @__PURE__ */ Symbol("webx-i18n");
7
- function Jt() {
8
- const e = oe(we, null);
7
+ function ea() {
8
+ const e = ne(we, null);
9
9
  if (e === null)
10
10
  throw new Error("useI18n() was called outside a panel created by createAdmin().");
11
11
  return e;
12
12
  }
13
13
  function P(e) {
14
- const t = oe(we, null);
14
+ const t = ne(we, null);
15
15
  return t === null ? Ee().scope(e) : t.scope(e);
16
16
  }
17
- function Qt(e, t) {
17
+ function ta(e, t) {
18
18
  e.provide(we, t);
19
19
  }
20
20
  function Ee(e = {}) {
@@ -37,7 +37,7 @@ function Ee(e = {}) {
37
37
  const [h, m] = u.includes("::") ? u.split("::", 2) : [r, u], v = m.split("."), d = s(i.value, h, v) ?? s(l, h, v) ?? // Not an empty string: a key on screen is ugly, but it says which key, and a blank
38
38
  // label says nothing to anybody trying to fix it.
39
39
  u;
40
- return c === void 0 ? d : Zt(d, c);
40
+ return c === void 0 ? d : aa(d, c);
41
41
  }
42
42
  return {
43
43
  state: a,
@@ -53,7 +53,7 @@ function Ee(e = {}) {
53
53
  t: (r, u) => o("", r, u)
54
54
  };
55
55
  }
56
- function Zt(e, t) {
56
+ function aa(e, t) {
57
57
  let a = e;
58
58
  for (const [l, i] of Object.entries(t))
59
59
  a = a.replaceAll(`:${l}`, String(i));
@@ -76,15 +76,15 @@ function xe(e, t) {
76
76
  })
77
77
  };
78
78
  }
79
- function ea(e, t, a, l = null) {
79
+ function na(e, t, a, l = null) {
80
80
  const i = `${e.apiPath}/${t.replace(/^\/+|\/+$/g, "")}`;
81
81
  return e.http.post(`${i}/reorder`, l === null ? { ids: a } : { ids: a, category: l }).then(() => {
82
82
  });
83
83
  }
84
- const ta = { class: "wx-categories-field" }, aa = { class: "wx-categories-field__name" }, na = /* @__PURE__ */ R({
84
+ const la = { class: "wx-categories-field" }, oa = { class: "wx-categories-field__name" }, sa = /* @__PURE__ */ R({
85
85
  name: "WxCategoriesField",
86
86
  __name: "CategoriesField",
87
- props: /* @__PURE__ */ le({
87
+ props: /* @__PURE__ */ oe({
88
88
  source: {},
89
89
  main: { type: Boolean, default: !0 },
90
90
  disabled: { type: Boolean, default: !1 },
@@ -99,7 +99,7 @@ const ta = { class: "wx-categories-field" }, aa = { class: "wx-categories-field_
99
99
  }),
100
100
  emits: ["update:modelValue"],
101
101
  setup(e) {
102
- const t = e, a = ue(e, "modelValue"), l = X(), i = P("webx-admin"), s = W([]);
102
+ const t = e, a = de(e, "modelValue"), l = X(), i = P("webx-admin"), s = W([]);
103
103
  ee(
104
104
  () => t.source,
105
105
  async (v) => {
@@ -126,8 +126,8 @@ const ta = { class: "wx-categories-field" }, aa = { class: "wx-categories-field_
126
126
  function m(v) {
127
127
  a.value = o.value.filter((d) => d !== v);
128
128
  }
129
- return (v, d) => (p(), T("div", ta, [
130
- b(n(Qe), {
129
+ return (v, d) => (p(), T("div", la, [
130
+ b(n(tt), {
131
131
  modelValue: u.value,
132
132
  "onUpdate:modelValue": d[0] || (d[0] = (w) => u.value = w),
133
133
  plain: "",
@@ -138,7 +138,7 @@ const ta = { class: "wx-categories-field" }, aa = { class: "wx-categories-field_
138
138
  "empty-text": t.emptyText ?? n(i)("categories.field-empty")
139
139
  }, {
140
140
  default: g(({ item: w, index: f }) => [
141
- O("span", aa, L(w.name), 1),
141
+ O("span", oa, L(w.name), 1),
142
142
  t.main && f === 0 ? (p(), $(n(ze), {
143
143
  key: 0,
144
144
  type: "primary"
@@ -160,7 +160,7 @@ const ta = { class: "wx-categories-field" }, aa = { class: "wx-categories-field_
160
160
  ]),
161
161
  _: 1
162
162
  }, 8, ["modelValue", "disabled", "empty-text"]),
163
- b(n(Ze), {
163
+ b(n(at), {
164
164
  "model-value": null,
165
165
  options: c.value,
166
166
  placeholder: t.addText ?? n(i)("categories.field-add"),
@@ -178,45 +178,8 @@ const ta = { class: "wx-categories-field" }, aa = { class: "wx-categories-field_
178
178
  for (const [l, i] of t)
179
179
  a[l] = i;
180
180
  return a;
181
- }, la = /* @__PURE__ */ Y(na, [["__scopeId", "data-v-640cd836"]]), lt = /* @__PURE__ */ Symbol("wx-category-editor");
182
- function oa(e) {
183
- vt(lt, e);
184
- }
185
- function sa() {
186
- return oe(lt, null);
187
- }
188
- const ia = { class: "wx-category-slug" }, ra = { class: "wx-category-slug__prefix" }, ua = /* @__PURE__ */ R({
189
- name: "WxCategorySlug",
190
- inheritAttrs: !1,
191
- __name: "CategorySlug",
192
- setup(e) {
193
- const t = sa(), a = et(), l = x(() => {
194
- const o = t?.prefix.value ?? "";
195
- return o === "" ? "/" : `/${o}/`;
196
- }), i = x(() => {
197
- const o = t?.values.value.slug;
198
- return typeof o == "string" ? o : o?.[a.active.value] ?? "";
199
- }), s = x(() => {
200
- const o = t?.category.value?.path;
201
- return typeof o == "string" && i.value !== "" && `${l.value}${i.value}` != `/${o}`;
202
- });
203
- return (o, r) => (p(), T("div", ia, [
204
- b(n(ye), ft(pt(o.$attrs)), {
205
- prefix: g(() => [
206
- O("span", ra, L(l.value), 1)
207
- ]),
208
- _: 1
209
- }, 16),
210
- s.value && n(t) ? (p(), $(n(be), {
211
- key: 0,
212
- type: "info",
213
- variant: "soft",
214
- description: n(t).moving()
215
- }, null, 8, ["description"])) : U("", !0)
216
- ]));
217
- }
218
- }), da = /* @__PURE__ */ Y(ua, [["__scopeId", "data-v-0d22193a"]]);
219
- function ca() {
181
+ }, ia = /* @__PURE__ */ Y(sa, [["__scopeId", "data-v-640cd836"]]);
182
+ function ra() {
220
183
  return {
221
184
  target: "entity",
222
185
  entity_type: null,
@@ -227,7 +190,7 @@ function ca() {
227
190
  rel: []
228
191
  };
229
192
  }
230
- function ma(e) {
193
+ function ua(e) {
231
194
  const t = `${e.apiPath}/links`, a = (l) => l.data;
232
195
  return {
233
196
  sources: () => e.http.get(`${t}/sources`).then(a),
@@ -236,22 +199,22 @@ function ma(e) {
236
199
  routes: () => e.http.get(`${t}/routes`).then(a)
237
200
  };
238
201
  }
239
- const va = { class: "wx-link-picker" }, fa = {
202
+ const da = { class: "wx-link-picker" }, ca = {
240
203
  key: 0,
241
204
  class: "wx-link-picker__entity"
242
- }, pa = {
205
+ }, ma = {
243
206
  key: 1,
244
207
  class: "wx-link-picker__url"
245
- }, ha = {
208
+ }, va = {
246
209
  key: 2,
247
210
  class: "wx-link-picker__hash"
248
- }, ga = {
211
+ }, fa = {
249
212
  key: 3,
250
213
  class: "wx-link-picker__attributes"
251
- }, ya = { class: "wx-link-picker__rel" }, ba = /* @__PURE__ */ R({
214
+ }, pa = { class: "wx-link-picker__rel" }, ha = /* @__PURE__ */ R({
252
215
  name: "WxLinkPicker",
253
216
  __name: "LinkPicker",
254
- props: /* @__PURE__ */ le({
217
+ props: /* @__PURE__ */ oe({
255
218
  allowNone: { type: Boolean, default: !0 },
256
219
  attributes: { type: Boolean, default: !0 },
257
220
  disabled: { type: Boolean, default: !1 }
@@ -261,9 +224,9 @@ const va = { class: "wx-link-picker" }, fa = {
261
224
  }),
262
225
  emits: ["update:modelValue"],
263
226
  setup(e) {
264
- const t = e, a = ue(e, "modelValue"), l = X(), i = Jt(), s = ma(l), o = P("webx-admin"), r = W([]), u = W([]), c = W([]), h = W(!1), m = W(null), v = W(""), d = W(null);
227
+ const t = e, a = de(e, "modelValue"), l = X(), i = ea(), s = ua(l), o = P("webx-admin"), r = W([]), u = W([]), c = W([]), h = W(!1), m = W(null), v = W(""), d = W(null);
265
228
  let w = null;
266
- const f = x(() => a.value ?? ca()), y = x(() => {
229
+ const f = x(() => a.value ?? ra()), y = x(() => {
267
230
  const _ = [
268
231
  { value: "entity", label: o("links.target-entity") },
269
232
  { value: "url", label: o("links.target-url") }
@@ -326,7 +289,7 @@ const va = { class: "wx-link-picker" }, fa = {
326
289
  const N = u.value.find((I) => I.id === _.id);
327
290
  N === void 0 || m.value === null || (d.value = N, v.value = N.title, a.value = { ...f.value, entity_type: m.value, entity_id: N.id });
328
291
  }
329
- function ne() {
292
+ function le() {
330
293
  d.value = null, v.value = "", u.value = [], a.value = { ...f.value, entity_type: null, entity_id: null };
331
294
  }
332
295
  function ie(_) {
@@ -350,16 +313,16 @@ const va = { class: "wx-link-picker" }, fa = {
350
313
  return _.available || N.push(o("links.unavailable")), N.join(" · ");
351
314
  }
352
315
  const q = ["nofollow", "sponsored", "ugc"];
353
- return (_, N) => (p(), T("div", va, [
354
- b(n($t), {
316
+ return (_, N) => (p(), T("div", da, [
317
+ b(n(Ct), {
355
318
  options: y.value,
356
319
  "model-value": f.value.target,
357
320
  disabled: t.disabled,
358
321
  "aria-label": n(o)("links.target-entity"),
359
322
  "onUpdate:modelValue": A
360
323
  }, null, 8, ["options", "model-value", "disabled", "aria-label"]),
361
- f.value.target === "entity" ? (p(), T("div", fa, [
362
- k.value.length > 1 ? (p(), $(n(Ze), {
324
+ f.value.target === "entity" ? (p(), T("div", ca, [
325
+ k.value.length > 1 ? (p(), $(n(at), {
363
326
  key: 0,
364
327
  class: "wx-link-picker__section",
365
328
  options: k.value,
@@ -383,9 +346,9 @@ const va = { class: "wx-link-picker" }, fa = {
383
346
  "onUpdate:modelValue": N[0] || (N[0] = (I) => v.value = I),
384
347
  onSearch: C,
385
348
  onSelect: K,
386
- onClear: ne
349
+ onClear: le
387
350
  }, null, 8, ["model-value", "options", "loading", "loading-text", "empty-text", "placeholder", "aria-label", "disabled"])
388
- ])) : f.value.target === "url" ? (p(), T("div", pa, [
351
+ ])) : f.value.target === "url" ? (p(), T("div", ma, [
389
352
  b(n(Be), {
390
353
  "model-value": f.value.url ?? "",
391
354
  options: J.value,
@@ -398,7 +361,7 @@ const va = { class: "wx-link-picker" }, fa = {
398
361
  "onUpdate:modelValue": ie
399
362
  }, null, 8, ["model-value", "options", "empty-text", "placeholder", "aria-label", "disabled"])
400
363
  ])) : U("", !0),
401
- f.value.target !== "none" ? (p(), T("label", ha, [
364
+ f.value.target !== "none" ? (p(), T("label", va, [
402
365
  b(n(G), {
403
366
  size: "sm",
404
367
  tone: "muted"
@@ -421,7 +384,7 @@ const va = { class: "wx-link-picker" }, fa = {
421
384
  "onUpdate:modelValue": te
422
385
  }, null, 8, ["model-value", "placeholder", "aria-label", "disabled"])
423
386
  ])) : U("", !0),
424
- t.attributes && f.value.target !== "none" ? (p(), T("div", ga, [
387
+ t.attributes && f.value.target !== "none" ? (p(), T("div", fa, [
425
388
  b(n(Ie), {
426
389
  "model-value": f.value.new_tab,
427
390
  disabled: t.disabled,
@@ -432,7 +395,7 @@ const va = { class: "wx-link-picker" }, fa = {
432
395
  ]),
433
396
  _: 1
434
397
  }, 8, ["model-value", "disabled"]),
435
- O("div", ya, [
398
+ O("div", pa, [
436
399
  b(n(G), {
437
400
  size: "sm",
438
401
  tone: "muted"
@@ -457,11 +420,11 @@ const va = { class: "wx-link-picker" }, fa = {
457
420
  ])) : U("", !0)
458
421
  ]));
459
422
  }
460
- }), wa = /* @__PURE__ */ Y(ba, [["__scopeId", "data-v-e54022e5"]]), xa = /* @__PURE__ */ R({
423
+ }), ga = /* @__PURE__ */ Y(ha, [["__scopeId", "data-v-e54022e5"]]), ya = /* @__PURE__ */ R({
461
424
  name: "WxLinkField",
462
425
  inheritAttrs: !1,
463
426
  __name: "LinkField",
464
- props: /* @__PURE__ */ le({
427
+ props: /* @__PURE__ */ oe({
465
428
  allowNone: { type: Boolean, default: !0 },
466
429
  attributes: { type: Boolean, default: !0 },
467
430
  disabled: { type: Boolean, default: !1 }
@@ -471,8 +434,8 @@ const va = { class: "wx-link-picker" }, fa = {
471
434
  }),
472
435
  emits: ["update:modelValue"],
473
436
  setup(e) {
474
- const t = e, a = ue(e, "modelValue");
475
- return (l, i) => (p(), $(wa, He({
437
+ const t = e, a = de(e, "modelValue");
438
+ return (l, i) => (p(), $(ga, Ke({
476
439
  modelValue: a.value,
477
440
  "onUpdate:modelValue": i[0] || (i[0] = (s) => a.value = s)
478
441
  }, l.$attrs, {
@@ -481,7 +444,7 @@ const va = { class: "wx-link-picker" }, fa = {
481
444
  disabled: t.disabled
482
445
  }), null, 16, ["modelValue", "allow-none", "attributes", "disabled"]));
483
446
  }
484
- }), ka = /* @__PURE__ */ R({
447
+ }), ba = /* @__PURE__ */ R({
485
448
  __name: "BackButton",
486
449
  props: {
487
450
  to: {},
@@ -493,17 +456,17 @@ const va = { class: "wx-link-picker" }, fa = {
493
456
  return (i, s) => (p(), $(n(se), {
494
457
  icon: "arrow-left",
495
458
  class: "wx-back-button",
496
- as: n(wt),
459
+ as: n(_t),
497
460
  to: e.to,
498
461
  title: l.value,
499
462
  size: e.size,
500
463
  "tooltip-side": "bottom"
501
464
  }, null, 8, ["as", "to", "title", "size"]));
502
465
  }
503
- }), _a = {
466
+ }), wa = {
504
467
  key: 0,
505
468
  class: "wx-dropdown__divider"
506
- }, $a = /* @__PURE__ */ R({
469
+ }, xa = /* @__PURE__ */ R({
507
470
  __name: "RowMenu",
508
471
  props: {
509
472
  actions: {},
@@ -518,14 +481,14 @@ const va = { class: "wx-link-picker" }, fa = {
518
481
  const s = l.value.find((o) => o.danger);
519
482
  return s && l.value[0] !== s ? s.key : null;
520
483
  });
521
- return (s, o) => l.value.length > 0 ? (p(), $(n(Tt), {
484
+ return (s, o) => l.value.length > 0 ? (p(), $(n(Wt), {
522
485
  key: 0,
523
486
  class: "wx-row-menu",
524
487
  collapse: "always",
525
488
  align: "end",
526
489
  size: e.size,
527
490
  "aria-label": e.label,
528
- onClick: o[0] || (o[0] = je(() => {
491
+ onClick: o[0] || (o[0] = qe(() => {
529
492
  }, ["stop"]))
530
493
  }, {
531
494
  trigger: g(() => [
@@ -539,8 +502,8 @@ const va = { class: "wx-link-picker" }, fa = {
539
502
  (p(!0), T(H, null, Q(l.value, (r) => (p(), T(H, {
540
503
  key: r.key
541
504
  }, [
542
- r.key === i.value ? (p(), T("hr", _a)) : U("", !0),
543
- b(n(St), {
505
+ r.key === i.value ? (p(), T("hr", wa)) : U("", !0),
506
+ b(n(Lt), {
544
507
  icon: r.icon,
545
508
  tone: r.danger ? "danger" : "default",
546
509
  href: r.href,
@@ -558,13 +521,13 @@ const va = { class: "wx-link-picker" }, fa = {
558
521
  _: 1
559
522
  }, 8, ["size", "aria-label"])) : U("", !0);
560
523
  }
561
- }), Ue = /* @__PURE__ */ Y($a, [["__scopeId", "data-v-cab01f7f"]]), Ta = ["data-level"], Sa = {
524
+ }), Ue = /* @__PURE__ */ Y(xa, [["__scopeId", "data-v-cab01f7f"]]), ka = ["data-level"], _a = {
562
525
  key: 0,
563
526
  class: "wx-screen-head__trail"
564
- }, Ca = { class: "wx-screen-head__name" }, Wa = {
527
+ }, $a = { class: "wx-screen-head__name" }, Ta = {
565
528
  key: 4,
566
529
  class: "wx-screen-head__actions"
567
- }, La = /* @__PURE__ */ R({
530
+ }, Sa = /* @__PURE__ */ R({
568
531
  __name: "ScreenHead",
569
532
  props: {
570
533
  title: { default: void 0 },
@@ -578,7 +541,7 @@ const va = { class: "wx-link-picker" }, fa = {
578
541
  },
579
542
  emits: ["back"],
580
543
  setup(e, { emit: t }) {
581
- const a = e, l = t, i = P("webx-admin"), s = ht(), o = Ke("root"), r = Ct(o), u = x(() => r.value > 0 && r.value < a.collapseBelow), c = x(() => a.actions ?? []), h = x(
544
+ const a = e, l = t, i = P("webx-admin"), s = gt(), o = Ye("root"), r = At(o), u = x(() => r.value > 0 && r.value < a.collapseBelow), c = x(() => a.actions ?? []), h = x(
582
545
  () => c.value.find((f) => f.primary) ?? null
583
546
  ), m = x(() => u.value ? h.value ? [h.value] : [] : c.value.filter((f) => !f.menu && !f.danger)), v = x(() => u.value ? c.value.filter((f) => f !== h.value) : c.value.filter((f) => f.menu || f.danger)), d = x(
584
547
  () => a.back && a.back !== !0 ? a.back : null
@@ -596,10 +559,10 @@ const va = { class: "wx-link-picker" }, fa = {
596
559
  }]),
597
560
  "data-level": e.level
598
561
  }, [
599
- f.$slots.trail ? (p(), T("div", Sa, [
562
+ f.$slots.trail ? (p(), T("div", _a, [
600
563
  F(f.$slots, "trail", {}, void 0, !0)
601
564
  ])) : U("", !0),
602
- d.value ? (p(), $(ka, {
565
+ d.value ? (p(), $(ba, {
603
566
  key: 1,
604
567
  class: "wx-screen-head__back",
605
568
  to: d.value,
@@ -614,8 +577,8 @@ const va = { class: "wx-link-picker" }, fa = {
614
577
  title: e.backLabel ?? n(i)("editor.back"),
615
578
  onClick: y[0] || (y[0] = (k) => l("back"))
616
579
  }, null, 8, ["title"])) : U("", !0),
617
- O("div", Ca, [
618
- e.title ? (p(), $(n(Wt), {
580
+ O("div", $a, [
581
+ e.title ? (p(), $(n(zt), {
619
582
  key: 0,
620
583
  level: e.level,
621
584
  truncate: "",
@@ -642,7 +605,7 @@ const va = { class: "wx-link-picker" }, fa = {
642
605
  ]),
643
606
  _: 3
644
607
  })) : U("", !0),
645
- w.value ? (p(), T("div", Wa, [
608
+ w.value ? (p(), T("div", Ta, [
646
609
  F(f.$slots, "extra", {}, void 0, !0),
647
610
  (p(!0), T(H, null, Q(m.value, (k) => (p(), $(n(Z), {
648
611
  key: k.key,
@@ -678,11 +641,11 @@ const va = { class: "wx-link-picker" }, fa = {
678
641
  label: e.title ?? n(i)("editor.more")
679
642
  }, null, 8, ["actions", "label"])) : U("", !0)
680
643
  ])) : U("", !0)
681
- ], 10, Ta));
644
+ ], 10, ka));
682
645
  }
683
- }), ot = /* @__PURE__ */ Y(La, [["__scopeId", "data-v-e27d184e"]]), Aa = ["data-wx-fill"], za = /* @__PURE__ */ R({
646
+ }), it = /* @__PURE__ */ Y(Sa, [["__scopeId", "data-v-e27d184e"]]), Ca = ["data-wx-fill"], Wa = /* @__PURE__ */ R({
684
647
  __name: "ListScreen",
685
- props: /* @__PURE__ */ le({
648
+ props: /* @__PURE__ */ oe({
686
649
  title: { default: void 0 },
687
650
  subtitle: { default: void 0 },
688
651
  back: { default: void 0 },
@@ -699,12 +662,12 @@ const va = { class: "wx-link-picker" }, fa = {
699
662
  }),
700
663
  emits: ["update:view"],
701
664
  setup(e) {
702
- const t = ue(e, "view");
665
+ const t = de(e, "view");
703
666
  return (a, l) => (p(), T("div", {
704
667
  class: ae(["wx-list-screen", { "is-fill": e.fill }]),
705
668
  "data-wx-fill": e.fill ? "" : void 0
706
669
  }, [
707
- e.title || e.actions || a.$slots.actions ? (p(), $(ot, {
670
+ e.title || e.actions || a.$slots.actions ? (p(), $(it, {
708
671
  key: 0,
709
672
  class: "wx-list-screen__head",
710
673
  title: e.title,
@@ -722,7 +685,7 @@ const va = { class: "wx-link-picker" }, fa = {
722
685
  key: "0"
723
686
  } : void 0
724
687
  ]), 1032, ["title", "subtitle", "back", "back-label", "actions"])) : U("", !0),
725
- e.views && e.views.length > 0 ? (p(), $(n(Lt), {
688
+ e.views && e.views.length > 0 ? (p(), $(n(Vt), {
726
689
  key: 1,
727
690
  modelValue: t.value,
728
691
  "onUpdate:modelValue": l[0] || (l[0] = (i) => t.value = i),
@@ -756,9 +719,9 @@ const va = { class: "wx-link-picker" }, fa = {
756
719
  _: 3
757
720
  }, 8, ["padding"])) : F(a.$slots, "default", {}, void 0, !0, 1)
758
721
  ], 64))
759
- ], 10, Aa));
722
+ ], 10, Ca));
760
723
  }
761
- }), st = /* @__PURE__ */ Y(za, [["__scopeId", "data-v-8c7e5ad1"]]), Va = /* @__PURE__ */ R({
724
+ }), rt = /* @__PURE__ */ Y(Wa, [["__scopeId", "data-v-8c7e5ad1"]]), La = /* @__PURE__ */ R({
762
725
  name: "WxRichTextField",
763
726
  inheritAttrs: !1,
764
727
  __name: "RichTextField",
@@ -796,29 +759,67 @@ const va = { class: "wx-link-picker" }, fa = {
796
759
  cancel: a("rich-text.cancel"),
797
760
  uploading: a("rich-text.uploading")
798
761
  }));
799
- return (s, o) => (p(), $(n(At), He(s.$attrs, {
762
+ return (s, o) => (p(), $(n(Et), Ke(s.$attrs, {
800
763
  labels: i.value,
801
764
  "pick-image": l.value
802
765
  }), null, 16, ["labels", "pick-image"]));
803
766
  }
804
- }), Ea = {
805
- "wx-list": { component: st, kind: "layout", labelProp: "title" },
767
+ }), ut = /* @__PURE__ */ Symbol("wx-record-address");
768
+ function Aa(e) {
769
+ Xe(ut, e);
770
+ }
771
+ function za() {
772
+ return ne(ut, null);
773
+ }
774
+ const Va = { class: "wx-slug" }, Ea = { class: "wx-slug__prefix" }, Ua = /* @__PURE__ */ R({
775
+ name: "WxSlugField",
776
+ inheritAttrs: !1,
777
+ __name: "SlugField",
778
+ setup(e) {
779
+ const t = za(), a = nt(), l = x(() => {
780
+ const o = t?.prefix.value ?? "";
781
+ return o === "" ? "/" : `/${o}/`;
782
+ }), i = x(() => {
783
+ const o = t?.values.value.slug;
784
+ return typeof o == "string" ? o : o?.[a.active.value] ?? "";
785
+ }), s = x(() => {
786
+ const o = t?.path.value;
787
+ return typeof o == "string" && i.value !== "" && `${l.value}${i.value}` != `/${o}`;
788
+ });
789
+ return (o, r) => (p(), T("div", Va, [
790
+ b(n(ye), yt(bt(o.$attrs)), {
791
+ prefix: g(() => [
792
+ O("span", Ea, L(l.value), 1)
793
+ ]),
794
+ _: 1
795
+ }, 16),
796
+ s.value && n(t) ? (p(), $(n(be), {
797
+ key: 0,
798
+ type: "info",
799
+ variant: "soft",
800
+ description: n(t).moving()
801
+ }, null, 8, ["description"])) : U("", !0)
802
+ ]));
803
+ }
804
+ }), Me = /* @__PURE__ */ Y(Ua, [["__scopeId", "data-v-5921c0dd"]]), Ra = {
805
+ "wx-list": { component: rt, kind: "layout", labelProp: "title" },
806
806
  // Full width: an editor shares a row with nothing, and a form of two columns would give it
807
807
  // half a line to write a page of text in.
808
- "wx-rich-text": { component: Va, kind: "field", wide: !0 },
808
+ "wx-rich-text": { component: La, kind: "field", wide: !0 },
809
809
  // Wide as well: a row of the picker is a segmented switch, a section and a search box, and half
810
810
  // a form's width leaves the search box too narrow to read a page title in.
811
- "wx-link": { component: xa, kind: "field", wide: !0 },
812
- "wx-categories": { component: la, kind: "field" },
813
- "wx-category-slug": { component: da, kind: "field" }
814
- }, it = /* @__PURE__ */ Symbol("webx-admin");
811
+ "wx-link": { component: ya, kind: "field", wide: !0 },
812
+ "wx-categories": { component: ia, kind: "field" },
813
+ "wx-slug": { component: Me, kind: "field" },
814
+ "wx-category-slug": { component: Me, kind: "field" }
815
+ }, dt = /* @__PURE__ */ Symbol("webx-admin");
815
816
  function X() {
816
- const e = oe(it, null);
817
+ const e = ne(dt, null);
817
818
  if (e === null)
818
819
  throw new Error("useAdmin() was called outside a panel created by createAdmin().");
819
820
  return e;
820
821
  }
821
- function Ua(e) {
822
+ function Na(e) {
822
823
  const t = pe({
823
824
  status: "loading",
824
825
  manifest: null,
@@ -860,7 +861,7 @@ function Ua(e) {
860
861
  entries: f.get(y.id) ?? []
861
862
  }))
862
863
  };
863
- }), i = { ...Ea };
864
+ }), i = { ...Ra };
864
865
  for (const d of e.modules)
865
866
  Object.assign(i, d.types);
866
867
  Object.assign(i, e.types);
@@ -883,7 +884,7 @@ function Ua(e) {
883
884
  const d = await e.loadManifest();
884
885
  t.manifest = d, e.i18n.state.contentLocales = d.locales ?? [], e.i18n.state.panelLocales = d.panelLocales ?? e.i18n.state.panelLocales, d.locale !== void 0 && d.locale !== e.i18n.state.locale && await v(d.locale), t.status = "ready";
885
886
  } catch (d) {
886
- if (Ra(d)) {
887
+ if (Ia(d)) {
887
888
  t.manifest = null, t.user = null, t.status = "unauthenticated";
888
889
  return;
889
890
  }
@@ -937,13 +938,13 @@ function Ua(e) {
937
938
  }
938
939
  };
939
940
  }
940
- function Na(e, t) {
941
- e.provide(it, t);
941
+ function Ba(e, t) {
942
+ e.provide(dt, t);
942
943
  }
943
- function Ra(e) {
944
+ function Ia(e) {
944
945
  return typeof e == "object" && e !== null && "status" in e && e.status === 401;
945
946
  }
946
- const Ba = /* @__PURE__ */ R({
947
+ const Pa = /* @__PURE__ */ R({
947
948
  __name: "AdminLanding",
948
949
  props: {
949
950
  landing: { default: null }
@@ -959,22 +960,27 @@ const Ba = /* @__PURE__ */ R({
959
960
  o !== null && l.replace(o);
960
961
  },
961
962
  { immediate: !0 }
962
- ), (o, r) => s.value === null && n(a).state.status === "ready" ? (p(), $(n(zt), {
963
+ ), (o, r) => s.value === null && n(a).state.status === "ready" ? (p(), $(n(Ut), {
963
964
  key: 0,
964
965
  status: "info",
965
966
  title: n(i)("shell.empty-title"),
966
967
  description: n(i)("shell.empty-description")
967
968
  }, null, 8, ["title", "description"])) : U("", !0);
968
969
  }
969
- }), Ia = /* @__PURE__ */ R({
970
+ }), Da = /* @__PURE__ */ R({
970
971
  __name: "AdminNav",
971
972
  props: {
972
973
  collapsed: { type: Boolean }
973
974
  },
974
975
  emits: ["select"],
975
976
  setup(e, { emit: t }) {
976
- const a = t, l = X(), i = P("webx-admin"), s = ge(), o = Je(), r = x({
977
- get: () => l.nav.value.find((c) => o.path.startsWith(c.path))?.id ?? "",
977
+ const a = t, l = X(), i = P("webx-admin"), s = ge(), o = et(), r = x({
978
+ /*
979
+ * The longest path that contains this one, on a segment boundary: a section may live inside
980
+ * another's path (`/services/categories` under `/services`), and the first match in the order
981
+ * of the menu would light up the outer one.
982
+ */
983
+ get: () => l.nav.value.filter((c) => o.path === c.path || o.path.startsWith(`${c.path}/`)).sort((c, h) => h.path.length - c.path.length)[0]?.id ?? "",
978
984
  set: (u) => {
979
985
  const c = l.nav.value.find((h) => h.id === u);
980
986
  c !== void 0 && s.push(c.path);
@@ -1017,37 +1023,37 @@ const Ba = /* @__PURE__ */ R({
1017
1023
  }, 8, ["modelValue", "collapsed", "label"]);
1018
1024
  };
1019
1025
  }
1020
- }), Pa = {
1026
+ }), Ma = {
1021
1027
  key: 0,
1022
1028
  class: "wx-root wx-admin-plain"
1023
- }, Da = {
1029
+ }, Fa = {
1024
1030
  key: 1,
1025
1031
  class: "wx-root wx-admin-plain"
1026
- }, Ma = {
1032
+ }, Oa = {
1027
1033
  key: 2,
1028
1034
  class: "wx-root wx-admin-plain"
1029
- }, Fa = ["src", "alt", "width", "height"], Oa = ["src", "alt", "width", "height"], Ha = ["src", "alt"], ja = { class: "wx-admin__user" }, Ka = { class: "wx-admin__user wx-admin__user--drawer" }, qa = /* @__PURE__ */ R({
1035
+ }, Ha = ["src", "alt", "width", "height"], ja = ["src", "alt", "width", "height"], Ka = ["src", "alt"], qa = { class: "wx-admin__user" }, Ya = { class: "wx-admin__user wx-admin__user--drawer" }, Xa = /* @__PURE__ */ R({
1030
1036
  __name: "AdminShell",
1031
1037
  setup(e) {
1032
- const t = X(), a = P("webx-admin"), l = W(null), { width: i, layout: s, collapsed: o, showAside: r, drawerOpen: u, toggle: c, close: h } = Vt(
1038
+ const t = X(), a = P("webx-admin"), l = W(null), { width: i, layout: s, collapsed: o, showAside: r, drawerOpen: u, toggle: c, close: h } = Rt(
1033
1039
  l,
1034
1040
  { persist: "webx-admin-shell" }
1035
- ), m = x(() => t.state.manifest?.title ?? ""), v = x(() => t.state.manifest?.branding?.logo ?? null), d = x(() => t.state.manifest?.branding?.mark ?? null), w = x(() => Et(i.value, null));
1036
- return gt(() => {
1041
+ ), m = x(() => t.state.manifest?.title ?? ""), v = x(() => t.state.manifest?.branding?.logo ?? null), d = x(() => t.state.manifest?.branding?.mark ?? null), w = x(() => Nt(i.value, null));
1042
+ return wt(() => {
1037
1043
  typeof document > "u" || (document.documentElement.dataset.wxShell = w.value);
1038
- }), yt(() => {
1044
+ }), xt(() => {
1039
1045
  typeof document < "u" && delete document.documentElement.dataset.wxShell;
1040
1046
  }), (f, y) => {
1041
- const k = j("router-view"), M = j("wx-loading"), J = j("wx-button"), S = j("wx-result"), B = j("wx-action"), C = j("wx-text"), A = j("wx-header"), E = j("wx-aside"), K = j("wx-main"), ne = j("wx-container"), ie = j("wx-drawer");
1047
+ const k = j("router-view"), M = j("wx-loading"), J = j("wx-button"), S = j("wx-result"), B = j("wx-action"), C = j("wx-text"), A = j("wx-header"), E = j("wx-aside"), K = j("wx-main"), le = j("wx-container"), ie = j("wx-drawer");
1042
1048
  return p(), T(H, null, [
1043
- b(n(Ut)),
1044
- n(t).state.status === "unauthenticated" ? (p(), T("div", Pa, [
1049
+ b(n(Bt), { placement: "bottom-center" }),
1050
+ n(t).state.status === "unauthenticated" ? (p(), T("div", Ma, [
1045
1051
  b(k)
1046
- ])) : n(t).state.status === "loading" ? (p(), T("div", Da, [
1052
+ ])) : n(t).state.status === "loading" ? (p(), T("div", Fa, [
1047
1053
  b(M, {
1048
1054
  label: n(a)("shell.loading")
1049
1055
  }, null, 8, ["label"])
1050
- ])) : n(t).state.status === "error" ? (p(), T("div", Ma, [
1056
+ ])) : n(t).state.status === "error" ? (p(), T("div", Oa, [
1051
1057
  b(S, {
1052
1058
  status: "error",
1053
1059
  title: n(a)("shell.error-title"),
@@ -1072,7 +1078,7 @@ const Ba = /* @__PURE__ */ R({
1072
1078
  ref: l,
1073
1079
  class: ae(["wx-root wx-admin", `wx-admin--${w.value}`])
1074
1080
  }, [
1075
- b(ne, {
1081
+ b(le, {
1076
1082
  direction: n(s) === "drawer" ? "vertical" : "horizontal",
1077
1083
  "full-height": "",
1078
1084
  class: "wx-admin__frame"
@@ -1104,7 +1110,7 @@ const Ba = /* @__PURE__ */ R({
1104
1110
  alt: m.value,
1105
1111
  width: v.value.width ?? void 0,
1106
1112
  height: v.value.height ?? void 0
1107
- }, null, 8, Fa)) : (p(), $(C, {
1113
+ }, null, 8, Ha)) : (p(), $(C, {
1108
1114
  key: 1,
1109
1115
  weight: "semibold",
1110
1116
  truncate: ""
@@ -1138,7 +1144,7 @@ const Ba = /* @__PURE__ */ R({
1138
1144
  class: "wx-admin__mark",
1139
1145
  src: d.value.url,
1140
1146
  alt: m.value
1141
- }, null, 8, Ha)) : U("", !0) : F(f.$slots, "brand", {}, () => [
1147
+ }, null, 8, Ka)) : U("", !0) : F(f.$slots, "brand", {}, () => [
1142
1148
  v.value ? (p(), T("img", {
1143
1149
  key: 0,
1144
1150
  class: "wx-admin__logo",
@@ -1146,7 +1152,7 @@ const Ba = /* @__PURE__ */ R({
1146
1152
  alt: m.value,
1147
1153
  width: v.value.width ?? void 0,
1148
1154
  height: v.value.height ?? void 0
1149
- }, null, 8, Oa)) : (p(), $(C, {
1155
+ }, null, 8, ja)) : (p(), $(C, {
1150
1156
  key: 1,
1151
1157
  weight: "semibold",
1152
1158
  truncate: "",
@@ -1166,7 +1172,7 @@ const Ba = /* @__PURE__ */ R({
1166
1172
  ], 2)
1167
1173
  ]),
1168
1174
  bottom: g(() => [
1169
- O("div", ja, [
1175
+ O("div", qa, [
1170
1176
  F(f.$slots, "user", {
1171
1177
  expanded: !n(o)
1172
1178
  }, void 0, !0)
@@ -1191,7 +1197,7 @@ const Ba = /* @__PURE__ */ R({
1191
1197
  }, 8, ["direction"]),
1192
1198
  b(ie, {
1193
1199
  open: n(u),
1194
- "onUpdate:open": y[1] || (y[1] = (te) => qe(u) ? u.value = te : null),
1200
+ "onUpdate:open": y[1] || (y[1] = (te) => Ge(u) ? u.value = te : null),
1195
1201
  class: "wx-admin__drawer",
1196
1202
  title: m.value === "" ? n(a)("nav.menu") : m.value,
1197
1203
  side: "left",
@@ -1200,7 +1206,7 @@ const Ba = /* @__PURE__ */ R({
1200
1206
  closable: ""
1201
1207
  }, {
1202
1208
  footer: g(() => [
1203
- O("div", Ka, [
1209
+ O("div", Ya, [
1204
1210
  F(f.$slots, "user", { expanded: !0 }, void 0, !0)
1205
1211
  ])
1206
1212
  ]),
@@ -1216,7 +1222,7 @@ const Ba = /* @__PURE__ */ R({
1216
1222
  ], 64);
1217
1223
  };
1218
1224
  }
1219
- }), Ya = /* @__PURE__ */ Y(qa, [["__scopeId", "data-v-309fdb9d"]]);
1225
+ }), Ga = /* @__PURE__ */ Y(Xa, [["__scopeId", "data-v-819885ab"]]);
1220
1226
  class Ce extends Error {
1221
1227
  constructor(t, a, l = {}, i = null, s = null) {
1222
1228
  super(t), this.status = a, this.errors = l, this.retryAfter = i, this.body = s, this.name = "HttpError";
@@ -1236,15 +1242,15 @@ class Ce extends Error {
1236
1242
  return this.status === 429;
1237
1243
  }
1238
1244
  }
1239
- const Xa = /* @__PURE__ */ new Set(["POST", "PUT", "PATCH", "DELETE"]);
1240
- function Ga(e = {}) {
1245
+ const Ja = /* @__PURE__ */ new Set(["POST", "PUT", "PATCH", "DELETE"]);
1246
+ function Qa(e = {}) {
1241
1247
  const t = (e.baseUrl ?? "").replace(/\/$/, ""), a = e.csrfUrl ?? "/api/cms/auth/csrf-cookie", l = e.fetch ?? globalThis.fetch.bind(globalThis), i = e.onUnauthenticated, s = e.headers;
1242
1248
  let o = !1;
1243
1249
  async function r(c = !1) {
1244
- o && !c && Me("XSRF-TOKEN") !== null || (await l(a, { credentials: "same-origin" }), o = !0);
1250
+ o && !c && Fe("XSRF-TOKEN") !== null || (await l(a, { credentials: "same-origin" }), o = !0);
1245
1251
  }
1246
1252
  async function u(c, h, m, v = {}, d = !1) {
1247
- const w = Xa.has(c);
1253
+ const w = Ja.has(c);
1248
1254
  w && await r();
1249
1255
  const f = {
1250
1256
  Accept: "application/json",
@@ -1254,11 +1260,11 @@ function Ga(e = {}) {
1254
1260
  ...v.headers
1255
1261
  };
1256
1262
  if (w) {
1257
- const k = Me("XSRF-TOKEN");
1263
+ const k = Fe("XSRF-TOKEN");
1258
1264
  k !== null && (f["X-XSRF-TOKEN"] = k);
1259
1265
  }
1260
1266
  m !== void 0 && (f["Content-Type"] = "application/json");
1261
- const y = await l(Qa(t, h, v.query), {
1267
+ const y = await l(en(t, h, v.query), {
1262
1268
  method: c,
1263
1269
  credentials: "same-origin",
1264
1270
  headers: f,
@@ -1268,7 +1274,7 @@ function Ga(e = {}) {
1268
1274
  if (y.status === 419 && w && !d)
1269
1275
  return await r(!0), u(c, h, m, v, !0);
1270
1276
  if (y.status === 401 && i?.(), !y.ok)
1271
- throw await Ja(y);
1277
+ throw await Za(y);
1272
1278
  if (y.status !== 204)
1273
1279
  return await y.json();
1274
1280
  }
@@ -1280,7 +1286,7 @@ function Ga(e = {}) {
1280
1286
  delete: (c, h) => u("DELETE", c, void 0, h)
1281
1287
  };
1282
1288
  }
1283
- async function Ja(e) {
1289
+ async function Za(e) {
1284
1290
  let t = null;
1285
1291
  try {
1286
1292
  t = await e.json();
@@ -1295,7 +1301,7 @@ async function Ja(e) {
1295
1301
  t
1296
1302
  );
1297
1303
  }
1298
- function Qa(e, t, a) {
1304
+ function en(e, t, a) {
1299
1305
  const i = /^https?:\/\//i.test(t) ? t : `${e}/${t.replace(/^\//, "")}`;
1300
1306
  if (a === void 0)
1301
1307
  return i;
@@ -1305,7 +1311,7 @@ function Qa(e, t, a) {
1305
1311
  const o = s.toString();
1306
1312
  return o === "" ? i : `${i}${i.includes("?") ? "&" : "?"}${o}`;
1307
1313
  }
1308
- function Me(e) {
1314
+ function Fe(e) {
1309
1315
  if (typeof document > "u")
1310
1316
  return null;
1311
1317
  for (const t of document.cookie.split(";")) {
@@ -1315,47 +1321,47 @@ function Me(e) {
1315
1321
  }
1316
1322
  return null;
1317
1323
  }
1318
- const Za = "webx.theme", rt = /* @__PURE__ */ Symbol("webx-theme");
1319
- function Yn() {
1320
- const e = oe(rt, null);
1324
+ const tn = "webx.theme", ct = /* @__PURE__ */ Symbol("webx-theme");
1325
+ function Jn() {
1326
+ const e = ne(ct, null);
1321
1327
  if (e === null)
1322
1328
  throw new Error("useTheme() was called outside a panel created by createAdmin().");
1323
1329
  return e;
1324
1330
  }
1325
- function en(e, t) {
1326
- e.provide(rt, t);
1331
+ function an(e, t) {
1332
+ e.provide(ct, t);
1327
1333
  }
1328
- function tn(e = {}) {
1329
- const t = e.storageKey === void 0 ? Za : e.storageKey, a = pe({
1330
- preference: an(t) ?? "system",
1334
+ function nn(e = {}) {
1335
+ const t = e.storageKey === void 0 ? tn : e.storageKey, a = pe({
1336
+ preference: ln(t) ?? "system",
1331
1337
  resolved: "light"
1332
1338
  });
1333
1339
  function l() {
1334
- Yt(a.preference), a.resolved = a.preference === "system" ? Xt() : a.preference;
1340
+ Jt(a.preference), a.resolved = a.preference === "system" ? Qt() : a.preference;
1335
1341
  }
1336
- return l(), qt((i) => {
1342
+ return l(), Gt((i) => {
1337
1343
  a.preference === "system" && (a.resolved = i);
1338
1344
  }), {
1339
1345
  state: a,
1340
1346
  set(i) {
1341
- a.preference = i, l(), Fe(t, i);
1347
+ a.preference = i, l(), Oe(t, i);
1342
1348
  },
1343
1349
  adopt(i) {
1344
1350
  if (i === void 0)
1345
1351
  return;
1346
1352
  const s = i ?? "system";
1347
- s !== a.preference && (a.preference = s, l(), Fe(t, s));
1353
+ s !== a.preference && (a.preference = s, l(), Oe(t, s));
1348
1354
  }
1349
1355
  };
1350
1356
  }
1351
- function Fe(e, t) {
1357
+ function Oe(e, t) {
1352
1358
  if (e !== null)
1353
1359
  try {
1354
1360
  localStorage.setItem(e, t);
1355
1361
  } catch {
1356
1362
  }
1357
1363
  }
1358
- function an(e) {
1364
+ function ln(e) {
1359
1365
  if (e === null)
1360
1366
  return null;
1361
1367
  try {
@@ -1365,7 +1371,7 @@ function an(e) {
1365
1371
  return null;
1366
1372
  }
1367
1373
  }
1368
- const ut = {
1374
+ const mt = {
1369
1375
  shell: {
1370
1376
  loading: "Loading the panel…",
1371
1377
  "error-title": "The panel could not start",
@@ -1580,9 +1586,9 @@ const ut = {
1580
1586
  "order-locked": "Clear the search and the filters to change the order — only a whole list, or one category, can be dragged.",
1581
1587
  unknown: "One of the chosen categories is not there any more."
1582
1588
  }
1583
- }, dt = "webx.locale";
1584
- function Xn(e = {}) {
1585
- const t = e.manifestUrl ?? un() ?? "/api/cms/manifest", a = e.apiPath ?? t.replace(/\/manifest\/?$/, ""), l = e.basePath ?? "/cms", i = e.modules ?? [], s = [...e.routes ?? []];
1589
+ }, vt = "webx.locale";
1590
+ function Qn(e = {}) {
1591
+ const t = e.manifestUrl ?? cn() ?? "/api/cms/manifest", a = e.apiPath ?? t.replace(/\/manifest\/?$/, ""), l = e.basePath ?? "/cms", i = e.modules ?? [], s = [...e.routes ?? []];
1586
1592
  for (const y of i)
1587
1593
  s.push(...y.routes ?? []);
1588
1594
  if (!s.some((y) => y.path === "/")) {
@@ -1590,14 +1596,14 @@ function Xn(e = {}) {
1590
1596
  s.push({
1591
1597
  path: "/",
1592
1598
  name: "webx.home",
1593
- component: Ba,
1599
+ component: Pa,
1594
1600
  props: { landing: y?.path ?? y?.routes?.[0]?.path ?? null }
1595
1601
  });
1596
1602
  }
1597
- const o = xt({
1598
- history: kt(l),
1603
+ const o = $t({
1604
+ history: Tt(l),
1599
1605
  routes: s
1600
- }), r = Ee({ locale: e.locale ?? ln() }), u = tn(), c = e.http ?? Ga({
1606
+ }), r = Ee({ locale: e.locale ?? sn() }), u = nn(), c = e.http ?? Qa({
1601
1607
  baseUrl: "",
1602
1608
  csrfUrl: `${a}/auth/csrf-cookie`,
1603
1609
  onUnauthenticated: () => {
@@ -1609,12 +1615,12 @@ function Xn(e = {}) {
1609
1615
  // signing in on a Russian sign-in screen lands in an English panel.
1610
1616
  headers: () => ({ "X-Webx-Locale": r.state.locale })
1611
1617
  });
1612
- r.defaults("webx-admin", ut);
1618
+ r.defaults("webx-admin", mt);
1613
1619
  async function h(y) {
1614
1620
  const k = await c.get(`${a}/translations/${y}`);
1615
- r.load(k.data.namespaces, k.data.locale, k.data.fallback), on(k.data.locale), rn(k.data.locale, r.state.panelLocales);
1621
+ r.load(k.data.namespaces, k.data.locale, k.data.fallback), rn(k.data.locale), dn(k.data.locale, r.state.panelLocales);
1616
1622
  }
1617
- const m = Ua({
1623
+ const m = Na({
1618
1624
  http: c,
1619
1625
  theme: u,
1620
1626
  basePath: l,
@@ -1625,13 +1631,13 @@ function Xn(e = {}) {
1625
1631
  types: e.types,
1626
1632
  screens: e.screens,
1627
1633
  loadManifest: async () => (await c.get(t)).data
1628
- }), v = bt(nn(e));
1629
- v.use(Nt), Na(v, m), Qt(v, r), en(v, u);
1634
+ }), v = kt(on(e));
1635
+ v.use(It), Ba(v, m), ta(v, r), an(v, u);
1630
1636
  const d = W("");
1631
1637
  v.provide(
1632
- Rt,
1638
+ Pt,
1633
1639
  x(() => r.state.locale)
1634
- ), v.provide(Bt, {
1640
+ ), v.provide(Dt, {
1635
1641
  list: x(
1636
1642
  () => r.state.contentLocales.map((y) => ({
1637
1643
  code: y.code,
@@ -1664,40 +1670,40 @@ function Xn(e = {}) {
1664
1670
  y.install(w);
1665
1671
  return v.use(o), w;
1666
1672
  }
1667
- function nn(e) {
1673
+ function on(e) {
1668
1674
  const t = {
1669
1675
  // The menu is the panel's own: it is the manifest, drawn.
1670
1676
  // The shell hands in what a choice means where it drew the menu — in the drawer it is what
1671
1677
  // closes it, and a drawer that stays open over the section it just opened is a drawer the
1672
1678
  // reader has to dismiss by hand.
1673
- nav: (a) => de(Ia, { collapsed: a.collapsed === !0, onSelect: a.select })
1679
+ nav: (a) => re(Da, { collapsed: a.collapsed === !0, onSelect: a.select })
1674
1680
  };
1675
- return e.brand !== void 0 && (t.brand = () => de(e.brand)), e.userMenu !== void 0 && (t.user = (a) => de(e.userMenu, { expanded: a.expanded === !0 })), { render: () => de(Ya, null, t) };
1681
+ return e.brand !== void 0 && (t.brand = () => re(e.brand)), e.userMenu !== void 0 && (t.user = (a) => re(e.userMenu, { expanded: a.expanded === !0 })), { render: () => re(Ga, null, t) };
1676
1682
  }
1677
- function ln() {
1678
- const e = sn(dt);
1683
+ function sn() {
1684
+ const e = un(vt);
1679
1685
  return e !== null ? e : typeof document < "u" && document.documentElement.lang !== "" ? document.documentElement.lang : typeof navigator > "u" ? "en" : navigator.language;
1680
1686
  }
1681
- function on(e) {
1687
+ function rn(e) {
1682
1688
  try {
1683
- localStorage.setItem(dt, e);
1689
+ localStorage.setItem(vt, e);
1684
1690
  } catch {
1685
1691
  }
1686
1692
  }
1687
- function sn(e) {
1693
+ function un(e) {
1688
1694
  try {
1689
1695
  return localStorage.getItem(e);
1690
1696
  } catch {
1691
1697
  return null;
1692
1698
  }
1693
1699
  }
1694
- function rn(e, t) {
1700
+ function dn(e, t) {
1695
1701
  typeof document > "u" || (document.documentElement.lang = e, document.documentElement.dir = t.find((a) => a.code === e)?.direction ?? "ltr");
1696
1702
  }
1697
- function un() {
1703
+ function cn() {
1698
1704
  return typeof document > "u" ? null : document.querySelector('meta[name="webx-manifest"]')?.getAttribute("content") ?? null;
1699
1705
  }
1700
- function dn(e) {
1706
+ function mn(e) {
1701
1707
  const t = e.replace(/\r\n?/g, `
1702
1708
  `).split(`
1703
1709
  `), a = [];
@@ -1762,7 +1768,7 @@ function Te(e) {
1762
1768
  function We(e) {
1763
1769
  return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
1764
1770
  }
1765
- function cn(e) {
1771
+ function vn(e) {
1766
1772
  const t = e.scope("webx-admin"), a = /* @__PURE__ */ new Map();
1767
1773
  function l(s, o, r) {
1768
1774
  const u = e.state.locale, c = `${u}:${s}`;
@@ -1775,7 +1781,7 @@ function cn(e) {
1775
1781
  const o = fe(s);
1776
1782
  if (o === null)
1777
1783
  return t("dates.never");
1778
- const r = /* @__PURE__ */ new Date(), u = Oe(o, r);
1784
+ const r = /* @__PURE__ */ new Date(), u = He(o, r);
1779
1785
  return u === 0 ? t("dates.today", { time: i(o) }) : u === -1 ? t("dates.yesterday", { time: i(o) }) : o.getFullYear() === r.getFullYear() ? l(
1780
1786
  "this-year",
1781
1787
  {
@@ -1793,7 +1799,7 @@ function cn(e) {
1793
1799
  if (o === null)
1794
1800
  return t("dates.never");
1795
1801
  const r = /* @__PURE__ */ new Date();
1796
- return Oe(o, r) === 0 ? i(o) : o.getFullYear() === r.getFullYear() ? l("compact", { day: "numeric", month: "short" }, o) : l("compact-earlier", { dateStyle: "short" }, o);
1802
+ return He(o, r) === 0 ? i(o) : o.getFullYear() === r.getFullYear() ? l("compact", { day: "numeric", month: "short" }, o) : l("compact-earlier", { dateStyle: "short" }, o);
1797
1803
  },
1798
1804
  exact(s) {
1799
1805
  const o = fe(s);
@@ -1805,13 +1811,13 @@ function cn(e) {
1805
1811
  }
1806
1812
  };
1807
1813
  }
1808
- function ct() {
1809
- const e = oe(we, null);
1810
- return cn(e ?? mn());
1814
+ function ft() {
1815
+ const e = ne(we, null);
1816
+ return vn(e ?? fn());
1811
1817
  }
1812
1818
  let ve = null;
1813
- function mn() {
1814
- return ve === null && (ve = Ee(), ve.defaults("webx-admin", ut)), ve;
1819
+ function fn() {
1820
+ return ve === null && (ve = Ee(), ve.defaults("webx-admin", mt)), ve;
1815
1821
  }
1816
1822
  function fe(e) {
1817
1823
  if (e == null || e === "")
@@ -1819,14 +1825,14 @@ function fe(e) {
1819
1825
  const t = e instanceof Date ? e : new Date(e);
1820
1826
  return Number.isNaN(t.getTime()) ? null : t;
1821
1827
  }
1822
- function Oe(e, t) {
1828
+ function He(e, t) {
1823
1829
  const a = (l) => Date.UTC(l.getFullYear(), l.getMonth(), l.getDate());
1824
1830
  return Math.round((a(e) - a(t)) / 864e5);
1825
1831
  }
1826
- function vn(e, t, a) {
1827
- const l = e instanceof Ce ? e.status : fn(e);
1832
+ function pn(e, t, a) {
1833
+ const l = e instanceof Ce ? e.status : hn(e);
1828
1834
  if (l === 422)
1829
- return pn(e) ?? a ?? t("errors.unknown");
1835
+ return gn(e) ?? a ?? t("errors.unknown");
1830
1836
  if (l === 401) return t("errors.signed-out");
1831
1837
  if (l === 403) return t("errors.forbidden");
1832
1838
  if (l === 404) return t("errors.gone");
@@ -1837,19 +1843,19 @@ function vn(e, t, a) {
1837
1843
  }
1838
1844
  return l !== null && l >= 500 ? t("errors.server") : l === null ? t("errors.offline") : a ?? t("errors.unknown");
1839
1845
  }
1840
- function Ne() {
1846
+ function Re() {
1841
1847
  const e = P("webx-admin");
1842
- return (t, a) => vn(t, e, a);
1848
+ return (t, a) => pn(t, e, a);
1843
1849
  }
1844
- function fn(e) {
1850
+ function hn(e) {
1845
1851
  const t = e?.status;
1846
1852
  return typeof t == "number" ? t : null;
1847
1853
  }
1848
- function pn(e) {
1854
+ function gn(e) {
1849
1855
  const a = e?.body?.message;
1850
1856
  return typeof a == "string" && a !== "" ? a : null;
1851
1857
  }
1852
- function hn(e, t, a) {
1858
+ function yn(e, t, a) {
1853
1859
  const l = `${e.apiPath}/entities/${t}/${a}/notes`, i = (o) => `${e.apiPath}/notes/${o}`, s = (o) => o.data;
1854
1860
  return {
1855
1861
  list: () => e.http.get(l).then(s),
@@ -1859,32 +1865,39 @@ function hn(e, t, a) {
1859
1865
  })
1860
1866
  };
1861
1867
  }
1862
- function gn(e) {
1868
+ const pt = /* @__PURE__ */ Symbol("wx-category-editor");
1869
+ function bn(e) {
1870
+ Xe(pt, e);
1871
+ }
1872
+ function Zn() {
1873
+ return ne(pt, null);
1874
+ }
1875
+ function wn(e) {
1863
1876
  return (e.q ?? "").trim() !== "" || e.filtered ? "locked" : e.category == null ? "all" : "category";
1864
1877
  }
1865
- function Gn(e, t) {
1866
- const a = X(), l = P("webx-admin"), i = x(() => gn(t()));
1878
+ function el(e, t) {
1879
+ const a = X(), l = P("webx-admin"), i = x(() => wn(t()));
1867
1880
  return {
1868
1881
  mode: i,
1869
1882
  sortable: x(() => i.value !== "locked"),
1870
1883
  hint: x(() => l(`categories.order-${i.value}`)),
1871
- move: (s) => ea(a, e, s, i.value === "category" ? t().category ?? null : null)
1884
+ move: (s) => na(a, e, s, i.value === "category" ? t().category ?? null : null)
1872
1885
  };
1873
1886
  }
1874
- function Re(e = {}) {
1887
+ function Ne(e = {}) {
1875
1888
  const t = P("webx-admin");
1876
1889
  return (a, l) => t(e[a] ?? `webx-admin::categories.${a}`, l);
1877
1890
  }
1878
- const yn = /* @__PURE__ */ R({
1891
+ const xn = /* @__PURE__ */ R({
1879
1892
  name: "WxCategoryCreateDialog",
1880
1893
  __name: "CategoryCreateDialog",
1881
1894
  props: {
1882
1895
  options: {}
1883
1896
  },
1884
1897
  setup(e) {
1885
- const t = e, { open: a, resolve: l, dismiss: i } = It(), s = xe(X(), t.options.api), o = Re(t.options.words), r = W(""), u = W(!1), c = W({}), h = Ke("field");
1898
+ const t = e, { open: a, resolve: l, dismiss: i } = Mt(), s = xe(X(), t.options.api), o = Ne(t.options.words), r = W(""), u = W(!1), c = W({}), h = Ye("field");
1886
1899
  Le(async () => {
1887
- await Ye(), h.value?.querySelector("input")?.focus();
1900
+ await Je(), h.value?.querySelector("input")?.focus();
1888
1901
  });
1889
1902
  function m(d) {
1890
1903
  const w = Object.keys(c.value).find((f) => f === d || f.startsWith(`${d}.`));
@@ -1902,14 +1915,14 @@ const yn = /* @__PURE__ */ R({
1902
1915
  }
1903
1916
  }
1904
1917
  }
1905
- return (d, w) => (p(), $(n(tt), {
1918
+ return (d, w) => (p(), $(n(lt), {
1906
1919
  open: n(a),
1907
- "onUpdate:open": w[2] || (w[2] = (f) => qe(a) ? a.value = f : null),
1920
+ "onUpdate:open": w[2] || (w[2] = (f) => Ge(a) ? a.value = f : null),
1908
1921
  title: n(o)("new"),
1909
1922
  width: 440
1910
1923
  }, {
1911
1924
  footer: g(() => [
1912
- b(n(Dt), { size: "sm" }, {
1925
+ b(n(Ot), { size: "sm" }, {
1913
1926
  default: g(() => [
1914
1927
  b(n(Z), {
1915
1928
  variant: "outline",
@@ -1936,7 +1949,7 @@ const yn = /* @__PURE__ */ R({
1936
1949
  })
1937
1950
  ]),
1938
1951
  default: g(() => [
1939
- b(n(Pt), {
1952
+ b(n(Ft), {
1940
1953
  label: n(o)("field-title"),
1941
1954
  error: m("title") ?? m("slug"),
1942
1955
  required: ""
@@ -1950,7 +1963,7 @@ const yn = /* @__PURE__ */ R({
1950
1963
  modelValue: r.value,
1951
1964
  "onUpdate:modelValue": w[0] || (w[0] = (f) => r.value = f),
1952
1965
  "aria-label": n(o)("field-title"),
1953
- onKeyup: Xe(v, ["enter"])
1966
+ onKeyup: Qe(v, ["enter"])
1954
1967
  }, null, 8, ["modelValue", "aria-label"])
1955
1968
  ], 512)
1956
1969
  ]),
@@ -1960,16 +1973,16 @@ const yn = /* @__PURE__ */ R({
1960
1973
  _: 1
1961
1974
  }, 8, ["open", "title"]));
1962
1975
  }
1963
- }), bn = { class: "wx-category-row__name" }, wn = /* @__PURE__ */ R({
1976
+ }), kn = { class: "wx-category-row__name" }, _n = /* @__PURE__ */ R({
1964
1977
  name: "WxCategoriesPage",
1965
1978
  __name: "CategoriesPage",
1966
1979
  props: {
1967
1980
  options: {}
1968
1981
  },
1969
1982
  setup(e) {
1970
- const t = e, a = X(), l = xe(a, t.options.api), i = ge(), s = Re(t.options.words), o = Ne(), r = W([]), u = W(!0), c = x(() => a.can(t.options.manage)), h = x(
1983
+ const t = e, a = X(), l = xe(a, t.options.api), i = ge(), s = Ne(t.options.words), o = Re(), r = W([]), u = W(!0), c = x(() => a.can(t.options.manage)), h = x(
1971
1984
  () => a.state.manifest?.modules.find((S) => S.id === t.options.module)?.title ?? ""
1972
- ), m = Mt(yn), v = x(
1985
+ ), m = Ht(xn), v = x(
1973
1986
  () => c.value ? [{ key: "new", label: s("new"), icon: "plus", primary: !0, run: () => {
1974
1987
  y();
1975
1988
  } }] : []
@@ -2041,23 +2054,23 @@ const yn = /* @__PURE__ */ R({
2041
2054
  }
2042
2055
  return (S, B) => {
2043
2056
  const C = j("router-link");
2044
- return p(), $(st, {
2057
+ return p(), $(rt, {
2045
2058
  class: "wx-categories",
2046
2059
  title: h.value,
2047
2060
  actions: v.value,
2048
2061
  padding: "sm"
2049
2062
  }, {
2050
2063
  default: g(() => [
2051
- u.value ? (p(), $(n(re), {
2064
+ u.value ? (p(), $(n(ue), {
2052
2065
  key: 0,
2053
2066
  class: "wx-categories__loading",
2054
2067
  rows: 5
2055
- })) : r.value.length === 0 ? (p(), $(n(at), {
2068
+ })) : r.value.length === 0 ? (p(), $(n(ot), {
2056
2069
  key: 1,
2057
2070
  title: n(s)("empty"),
2058
2071
  description: n(s)("empty-help")
2059
2072
  }, null, 8, ["title", "description"])) : (p(), T(H, { key: 2 }, [
2060
- b(n(Qe), {
2073
+ b(n(tt), {
2061
2074
  modelValue: r.value,
2062
2075
  "onUpdate:modelValue": B[0] || (B[0] = (A) => r.value = A),
2063
2076
  class: "wx-categories__list",
@@ -2073,7 +2086,7 @@ const yn = /* @__PURE__ */ R({
2073
2086
  to: `${t.options.path}/${A.id}`
2074
2087
  }, {
2075
2088
  default: g(() => [
2076
- O("span", bn, [
2089
+ O("span", kn, [
2077
2090
  b(n(G), {
2078
2091
  truncate: "",
2079
2092
  weight: "medium"
@@ -2083,7 +2096,7 @@ const yn = /* @__PURE__ */ R({
2083
2096
  ]),
2084
2097
  _: 2
2085
2098
  }, 1024),
2086
- A.is_visible ? U("", !0) : (p(), $(n(nt), {
2099
+ A.is_visible ? U("", !0) : (p(), $(n(st), {
2087
2100
  key: 0,
2088
2101
  content: n(s)("hidden")
2089
2102
  }, {
@@ -2139,11 +2152,11 @@ const yn = /* @__PURE__ */ R({
2139
2152
  }, 8, ["title", "actions"]);
2140
2153
  };
2141
2154
  }
2142
- }), xn = {
2155
+ }), $n = {
2143
2156
  class: "wx-save-state",
2144
2157
  role: "status",
2145
2158
  "aria-live": "polite"
2146
- }, kn = /* @__PURE__ */ R({
2159
+ }, Tn = /* @__PURE__ */ R({
2147
2160
  __name: "SaveState",
2148
2161
  props: {
2149
2162
  state: {},
@@ -2163,9 +2176,9 @@ const yn = /* @__PURE__ */ R({
2163
2176
  const s = x(
2164
2177
  () => t.state === "saving" ? "saving" : l.value ? "saved" : null
2165
2178
  );
2166
- return Ge(() => {
2179
+ return Ze(() => {
2167
2180
  i !== null && clearTimeout(i);
2168
- }), (o, r) => (p(), T("span", xn, [
2181
+ }), (o, r) => (p(), T("span", $n, [
2169
2182
  s.value ? (p(), $(n(Ve), {
2170
2183
  key: 0,
2171
2184
  class: ae(["wx-save-state__mark", { "is-saved": s.value === "saved" }]),
@@ -2175,9 +2188,9 @@ const yn = /* @__PURE__ */ R({
2175
2188
  }, null, 8, ["class", "name", "spin", "label"])) : U("", !0)
2176
2189
  ]));
2177
2190
  }
2178
- }), _n = /* @__PURE__ */ Y(kn, [["__scopeId", "data-v-216e5e44"]]), $n = { class: "wx-screen-host" }, Tn = /* @__PURE__ */ R({
2191
+ }), Sn = /* @__PURE__ */ Y(Tn, [["__scopeId", "data-v-216e5e44"]]), Cn = { class: "wx-screen-host" }, Wn = /* @__PURE__ */ R({
2179
2192
  __name: "Screen",
2180
- props: /* @__PURE__ */ le({
2193
+ props: /* @__PURE__ */ oe({
2181
2194
  name: {},
2182
2195
  errors: { default: void 0 },
2183
2196
  disabled: { type: Boolean, default: !1 },
@@ -2188,9 +2201,9 @@ const yn = /* @__PURE__ */ R({
2188
2201
  modelValue: { default: () => ({}) },
2189
2202
  modelModifiers: {}
2190
2203
  }),
2191
- emits: /* @__PURE__ */ le(["loaded"], ["update:modelValue"]),
2204
+ emits: /* @__PURE__ */ oe(["loaded"], ["update:modelValue"]),
2192
2205
  setup(e, { expose: t, emit: a }) {
2193
- const l = e, i = a, s = ue(e, "modelValue"), o = X(), r = P("webx-admin"), u = W(null), c = W(null);
2206
+ const l = e, i = a, s = de(e, "modelValue"), o = X(), r = P("webx-admin"), u = W(null), c = W(null);
2194
2207
  async function h() {
2195
2208
  u.value = null, c.value = null;
2196
2209
  try {
@@ -2202,16 +2215,16 @@ const yn = /* @__PURE__ */ R({
2202
2215
  }
2203
2216
  return ee([() => l.name, () => o.i18n.state.locale], () => {
2204
2217
  h();
2205
- }, { immediate: !0 }), t({ reload: h }), (m, v) => (p(), T("div", $n, [
2218
+ }, { immediate: !0 }), t({ reload: h }), (m, v) => (p(), T("div", Cn, [
2206
2219
  c.value ? (p(), $(n(be), {
2207
2220
  key: 0,
2208
2221
  type: "danger",
2209
2222
  title: n(r)("shell.error-title"),
2210
2223
  description: c.value
2211
- }, null, 8, ["title", "description"])) : u.value === null ? (p(), $(n(re), {
2224
+ }, null, 8, ["title", "description"])) : u.value === null ? (p(), $(n(ue), {
2212
2225
  key: 1,
2213
2226
  rows: 4
2214
- })) : (p(), $(n(Gt), {
2227
+ })) : (p(), $(n(Zt), {
2215
2228
  key: 2,
2216
2229
  modelValue: s.value,
2217
2230
  "onUpdate:modelValue": v[0] || (v[0] = (d) => s.value = d),
@@ -2228,20 +2241,25 @@ const yn = /* @__PURE__ */ R({
2228
2241
  }, null, 8, ["modelValue", "root", "patch", "types", "errors", "translate", "can", "disabled", "label-position", "label-width", "size"]))
2229
2242
  ]));
2230
2243
  }
2231
- }), Sn = /* @__PURE__ */ R({
2244
+ }), Ln = /* @__PURE__ */ R({
2232
2245
  name: "WxCategoryEditorPage",
2233
2246
  __name: "CategoryEditorPage",
2234
2247
  props: {
2235
2248
  options: {}
2236
2249
  },
2237
2250
  setup(e) {
2238
- const t = e, a = X(), l = xe(a, t.options.api), i = Je(), s = ge(), o = et(), r = Re(t.options.words), u = Ne(), c = x(() => Number(i.params.id)), h = x(() => t.options.path), m = W(null), v = W({}), d = W(null), w = W(""), f = W(!0), y = W(!1), k = W({}), M = x(() => a.can(t.options.manage)), J = x(() => JSON.stringify(v.value)), S = x(() => w.value !== "" && J.value !== w.value), B = x(() => y.value ? "saving" : S.value ? "unsaved" : "saved"), C = x(
2251
+ const t = e, a = X(), l = xe(a, t.options.api), i = et(), s = ge(), o = nt(), r = Ne(t.options.words), u = Re(), c = x(() => Number(i.params.id)), h = x(() => t.options.path), m = W(null), v = W({}), d = W(null), w = W(""), f = W(!0), y = W(!1), k = W({}), M = x(() => a.can(t.options.manage)), J = x(() => JSON.stringify(v.value)), S = x(() => w.value !== "" && J.value !== w.value), B = x(() => y.value ? "saving" : S.value ? "unsaved" : "saved"), C = x(
2239
2252
  () => a.state.manifest?.modules.find((z) => z.id === t.options.module)?.title ?? ""
2240
2253
  ), A = x(() => {
2241
2254
  const z = v.value.title;
2242
- return Ft(z, o.active.value, m.value?.name ?? "") || r("untitled");
2255
+ return jt(z, o.active.value, m.value?.name ?? "") || r("untitled");
2256
+ });
2257
+ bn({ category: m, values: v, prefix: d, moving: () => r("address-moving") }), Aa({
2258
+ values: v,
2259
+ prefix: d,
2260
+ path: x(() => m.value?.path),
2261
+ moving: () => r("address-moving")
2243
2262
  });
2244
- oa({ category: m, values: v, prefix: d, moving: () => r("address-moving") });
2245
2263
  function E(z) {
2246
2264
  m.value = z.category, v.value = z.values, d.value = z.prefix, w.value = JSON.stringify(z.values);
2247
2265
  }
@@ -2255,7 +2273,7 @@ const yn = /* @__PURE__ */ R({
2255
2273
  f.value = !1;
2256
2274
  }
2257
2275
  }
2258
- async function ne() {
2276
+ async function le() {
2259
2277
  if (!(!m.value || y.value || !M.value)) {
2260
2278
  y.value = !0, k.value = {};
2261
2279
  try {
@@ -2287,15 +2305,15 @@ const yn = /* @__PURE__ */ R({
2287
2305
  S.value && z.preventDefault();
2288
2306
  }
2289
2307
  function ke(z) {
2290
- (z.ctrlKey || z.metaKey) && z.key.toLowerCase() === "s" && (z.preventDefault(), S.value && ne());
2308
+ (z.ctrlKey || z.metaKey) && z.key.toLowerCase() === "s" && (z.preventDefault(), S.value && le());
2291
2309
  }
2292
2310
  ee(c, () => {
2293
2311
  K();
2294
2312
  }), Le(() => {
2295
2313
  K(), window.addEventListener("beforeunload", te);
2296
- }), Ge(() => {
2314
+ }), Ze(() => {
2297
2315
  window.removeEventListener("beforeunload", te);
2298
- }), _t(async () => !S.value || !M.value ? !0 : await he({
2316
+ }), St(async () => !S.value || !M.value ? !0 : await he({
2299
2317
  title: r("leave-title"),
2300
2318
  message: r("leave-text"),
2301
2319
  confirmText: r("leave"),
@@ -2320,19 +2338,19 @@ const yn = /* @__PURE__ */ R({
2320
2338
  onKeydown: ke
2321
2339
  }, [
2322
2340
  f.value || !m.value ? (p(), T(H, { key: 0 }, [
2323
- b(n(re), {
2341
+ b(n(ue), {
2324
2342
  class: "wx-category-editor__ghost",
2325
2343
  title: "",
2326
2344
  rows: 1
2327
2345
  }),
2328
2346
  b(n(Se), null, {
2329
2347
  default: g(() => [
2330
- b(n(re), { rows: 6 })
2348
+ b(n(ue), { rows: 6 })
2331
2349
  ]),
2332
2350
  _: 1
2333
2351
  })
2334
2352
  ], 64)) : (p(), T(H, { key: 1 }, [
2335
- b(ot, {
2353
+ b(it, {
2336
2354
  divider: "",
2337
2355
  back: h.value,
2338
2356
  "back-label": C.value,
@@ -2341,7 +2359,7 @@ const yn = /* @__PURE__ */ R({
2341
2359
  actions: _e.value
2342
2360
  }, Ae({
2343
2361
  trail: g(() => [
2344
- b(n(Ot), {
2362
+ b(n(Kt), {
2345
2363
  size: "sm",
2346
2364
  label: n(r)("trail")
2347
2365
  }, {
@@ -2380,23 +2398,23 @@ const yn = /* @__PURE__ */ R({
2380
2398
  key: "0"
2381
2399
  }
2382
2400
  ]), 1032, ["back", "back-label", "title", "subtitle", "actions"]),
2383
- b(Tn, {
2401
+ b(Wn, {
2384
2402
  modelValue: v.value,
2385
2403
  "onUpdate:modelValue": q[0] || (q[0] = (_) => v.value = _),
2386
2404
  name: t.options.screen,
2387
2405
  errors: k.value,
2388
2406
  disabled: !M.value || y.value
2389
2407
  }, null, 8, ["modelValue", "name", "errors", "disabled"]),
2390
- M.value ? (p(), $(n(Ht), { key: 0 }, {
2408
+ M.value ? (p(), $(n(qt), { key: 0 }, {
2391
2409
  state: g(() => [
2392
- b(_n, { state: B.value }, null, 8, ["state"])
2410
+ b(Sn, { state: B.value }, null, 8, ["state"])
2393
2411
  ]),
2394
2412
  default: g(() => [
2395
2413
  b(n(Z), {
2396
2414
  type: "primary",
2397
2415
  loading: y.value,
2398
2416
  disabled: !S.value,
2399
- onClick: ne
2417
+ onClick: le
2400
2418
  }, {
2401
2419
  default: g(() => [
2402
2420
  V(L(n(r)("save")), 1)
@@ -2409,19 +2427,24 @@ const yn = /* @__PURE__ */ R({
2409
2427
  ], 64))
2410
2428
  ], 32));
2411
2429
  }
2412
- }), Cn = /* @__PURE__ */ Y(Sn, [["__scopeId", "data-v-9a461226"]]);
2413
- function Jn(e) {
2430
+ }), An = /* @__PURE__ */ Y(Ln, [["__scopeId", "data-v-86d85f8c"]]);
2431
+ function je(e, t) {
2432
+ return R({
2433
+ name: "WxCategoriesView",
2434
+ setup: () => () => re(e, { options: t })
2435
+ });
2436
+ }
2437
+ function tl(e) {
2414
2438
  return [
2415
- { path: e.path, name: e.name, component: wn, props: { options: e } },
2439
+ { path: e.path, name: e.name, component: je(_n, e) },
2416
2440
  {
2417
2441
  path: `${e.path}/:id(\\d+)`,
2418
2442
  name: `${e.name}.edit`,
2419
- component: Cn,
2420
- props: { options: e }
2443
+ component: je(An, e)
2421
2444
  }
2422
2445
  ];
2423
2446
  }
2424
- const Qn = 76, Zn = /* @__PURE__ */ R({
2447
+ const al = 76, nl = /* @__PURE__ */ R({
2425
2448
  __name: "FilterChips",
2426
2449
  props: {
2427
2450
  filters: {}
@@ -2441,7 +2464,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2441
2464
  _: 2
2442
2465
  }, 1032, ["onClose"]))), 128));
2443
2466
  }
2444
- }), Wn = { class: "wx-rename__footer" }, Ln = /* @__PURE__ */ R({
2467
+ }), zn = { class: "wx-rename__footer" }, Vn = /* @__PURE__ */ R({
2445
2468
  __name: "RenameButton",
2446
2469
  props: {
2447
2470
  name: { default: "" },
@@ -2454,7 +2477,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2454
2477
  setup(e, { emit: t }) {
2455
2478
  const a = e, l = t, i = P("webx-admin"), s = W(!1), o = W(a.name), r = W(null), u = x(() => a.label ?? i("editor.rename"));
2456
2479
  ee(s, async (h) => {
2457
- h && (o.value = a.name, await Ye(), r.value?.focus(), r.value?.select());
2480
+ h && (o.value = a.name, await Je(), r.value?.focus(), r.value?.select());
2458
2481
  });
2459
2482
  function c() {
2460
2483
  const h = o.value.trim();
@@ -2464,7 +2487,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2464
2487
  }
2465
2488
  l("rename", h), s.value = !1;
2466
2489
  }
2467
- return (h, m) => (p(), $(n(jt), {
2490
+ return (h, m) => (p(), $(n(Yt), {
2468
2491
  open: s.value,
2469
2492
  "onUpdate:open": m[2] || (m[2] = (v) => s.value = v),
2470
2493
  title: u.value,
@@ -2484,7 +2507,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2484
2507
  default: g(() => [
2485
2508
  O("form", {
2486
2509
  class: "wx-rename",
2487
- onSubmit: je(c, ["prevent"])
2510
+ onSubmit: qe(c, ["prevent"])
2488
2511
  }, [
2489
2512
  b(n(ye), {
2490
2513
  ref_key: "field",
@@ -2493,9 +2516,9 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2493
2516
  "onUpdate:modelValue": m[0] || (m[0] = (v) => o.value = v),
2494
2517
  "aria-label": u.value,
2495
2518
  placeholder: e.placeholder,
2496
- onKeydown: m[1] || (m[1] = Xe((v) => s.value = !1, ["esc"]))
2519
+ onKeydown: m[1] || (m[1] = Qe((v) => s.value = !1, ["esc"]))
2497
2520
  }, null, 8, ["modelValue", "aria-label", "placeholder"]),
2498
- O("div", Wn, [
2521
+ O("div", zn, [
2499
2522
  b(n(Z), {
2500
2523
  type: "primary",
2501
2524
  size: "sm",
@@ -2512,7 +2535,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2512
2535
  _: 1
2513
2536
  }, 8, ["open", "title"]));
2514
2537
  }
2515
- }), el = /* @__PURE__ */ Y(Ln, [["__scopeId", "data-v-d879e8d3"]]), An = ["innerHTML"], zn = /* @__PURE__ */ R({
2538
+ }), ll = /* @__PURE__ */ Y(Vn, [["__scopeId", "data-v-d879e8d3"]]), En = ["innerHTML"], Un = /* @__PURE__ */ R({
2516
2539
  __name: "HelpButton",
2517
2540
  props: {
2518
2541
  body: {},
@@ -2522,7 +2545,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2522
2545
  width: { default: 720 }
2523
2546
  },
2524
2547
  setup(e) {
2525
- const t = e, a = P("webx-admin"), l = W(!1), i = x(() => t.title ?? a("help.title")), s = x(() => dn(t.body));
2548
+ const t = e, a = P("webx-admin"), l = W(!1), i = x(() => t.title ?? a("help.title")), s = x(() => mn(t.body));
2526
2549
  return (o, r) => (p(), T(H, null, [
2527
2550
  b(n(se), {
2528
2551
  type: "details",
@@ -2532,7 +2555,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2532
2555
  title: e.label ?? i.value,
2533
2556
  onClick: r[0] || (r[0] = (u) => l.value = !0)
2534
2557
  }, null, 8, ["size", "title"]),
2535
- b(n(tt), {
2558
+ b(n(lt), {
2536
2559
  open: l.value,
2537
2560
  "onUpdate:open": r[1] || (r[1] = (u) => l.value = u),
2538
2561
  title: i.value,
@@ -2542,13 +2565,13 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2542
2565
  O("div", {
2543
2566
  class: "wx-help",
2544
2567
  innerHTML: s.value
2545
- }, null, 8, An)
2568
+ }, null, 8, En)
2546
2569
  ]),
2547
2570
  _: 1
2548
2571
  }, 8, ["open", "title", "width"])
2549
2572
  ], 64));
2550
2573
  }
2551
- }), tl = /* @__PURE__ */ Y(zn, [["__scopeId", "data-v-6c280d42"]]), mt = /* @__PURE__ */ R({
2574
+ }), ol = /* @__PURE__ */ Y(Un, [["__scopeId", "data-v-6c280d42"]]), ht = /* @__PURE__ */ R({
2552
2575
  name: "WxDate",
2553
2576
  __name: "DateText",
2554
2577
  props: {
@@ -2558,8 +2581,8 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2558
2581
  tone: { default: "muted" }
2559
2582
  },
2560
2583
  setup(e) {
2561
- const t = e, a = ct(), l = x(() => t.compact ? a.compact(t.value) : a.short(t.value)), i = x(() => a.exact(t.value)), s = x(() => a.iso(t.value));
2562
- return (o, r) => i.value ? (p(), $(n(nt), {
2584
+ const t = e, a = ft(), l = x(() => t.compact ? a.compact(t.value) : a.short(t.value)), i = x(() => a.exact(t.value)), s = x(() => a.iso(t.value));
2585
+ return (o, r) => i.value ? (p(), $(n(st), {
2563
2586
  key: 0,
2564
2587
  content: i.value
2565
2588
  }, {
@@ -2588,16 +2611,16 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2588
2611
  _: 1
2589
2612
  }, 8, ["size", "tone"]));
2590
2613
  }
2591
- }), Vn = { class: "wx-notes" }, En = {
2614
+ }), Rn = { class: "wx-notes" }, Nn = {
2592
2615
  key: 3,
2593
2616
  class: "wx-notes__list"
2594
- }, Un = { class: "wx-note__body" }, Nn = { class: "wx-note__head" }, Rn = { class: "wx-note__buttons" }, Bn = {
2617
+ }, Bn = { class: "wx-note__body" }, In = { class: "wx-note__head" }, Pn = { class: "wx-note__buttons" }, Dn = {
2595
2618
  key: 1,
2596
2619
  class: "wx-note__text"
2597
- }, In = {
2620
+ }, Mn = {
2598
2621
  key: 4,
2599
2622
  class: "wx-notes__new"
2600
- }, Pn = /* @__PURE__ */ R({
2623
+ }, Fn = /* @__PURE__ */ R({
2601
2624
  name: "WxNotes",
2602
2625
  __name: "NotesFeed",
2603
2626
  props: {
@@ -2608,7 +2631,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2608
2631
  },
2609
2632
  emits: ["change"],
2610
2633
  setup(e, { emit: t }) {
2611
- const a = e, l = t, i = X(), s = P("webx-admin"), o = Ne(), r = W([]), u = W(!0), c = W(""), h = W(!1), m = W(null), v = W(""), d = x(() => hn(i, a.type, a.id)), w = x(() => a.title ?? s("notes.title"));
2634
+ const a = e, l = t, i = X(), s = P("webx-admin"), o = Re(), r = W([]), u = W(!0), c = W(""), h = W(!1), m = W(null), v = W(""), d = x(() => yn(i, a.type, a.id)), w = x(() => a.title ?? s("notes.title"));
2612
2635
  async function f() {
2613
2636
  u.value = !0;
2614
2637
  try {
@@ -2683,7 +2706,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2683
2706
  function B(C) {
2684
2707
  return C.author?.name ?? s("notes.unknown-author");
2685
2708
  }
2686
- return (C, A) => (p(), T("section", Vn, [
2709
+ return (C, A) => (p(), T("section", Rn, [
2687
2710
  w.value ? (p(), $(n(G), {
2688
2711
  key: 0,
2689
2712
  weight: "medium",
@@ -2694,25 +2717,25 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2694
2717
  ]),
2695
2718
  _: 1
2696
2719
  })) : U("", !0),
2697
- u.value ? (p(), $(n(re), {
2720
+ u.value ? (p(), $(n(ue), {
2698
2721
  key: 1,
2699
2722
  rows: 2
2700
- })) : r.value.length === 0 ? (p(), $(n(at), {
2723
+ })) : r.value.length === 0 ? (p(), $(n(ot), {
2701
2724
  key: 2,
2702
2725
  size: "sm",
2703
2726
  description: n(s)("notes.empty")
2704
- }, null, 8, ["description"])) : (p(), T("ul", En, [
2727
+ }, null, 8, ["description"])) : (p(), T("ul", Nn, [
2705
2728
  (p(!0), T(H, null, Q(r.value, (E) => (p(), T("li", {
2706
2729
  key: E.id,
2707
2730
  class: "wx-note"
2708
2731
  }, [
2709
- b(n(Kt), {
2732
+ b(n(Xt), {
2710
2733
  name: B(E),
2711
2734
  size: "sm",
2712
2735
  tone: "auto"
2713
2736
  }, null, 8, ["name"]),
2714
- O("div", Un, [
2715
- O("div", Nn, [
2737
+ O("div", Bn, [
2738
+ O("div", In, [
2716
2739
  b(n(G), {
2717
2740
  size: "sm",
2718
2741
  weight: "medium",
@@ -2723,7 +2746,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2723
2746
  ]),
2724
2747
  _: 2
2725
2748
  }, 1024),
2726
- b(mt, {
2749
+ b(ht, {
2727
2750
  value: E.created_at
2728
2751
  }, null, 8, ["value"]),
2729
2752
  b(Ue, {
@@ -2737,7 +2760,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2737
2760
  "onUpdate:modelValue": A[0] || (A[0] = (K) => v.value = K),
2738
2761
  autosize: { minRows: 2, maxRows: 10 }
2739
2762
  }, null, 8, ["modelValue"]),
2740
- O("div", Rn, [
2763
+ O("div", Pn, [
2741
2764
  b(n(Z), {
2742
2765
  size: "sm",
2743
2766
  type: "primary",
@@ -2759,11 +2782,11 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2759
2782
  _: 1
2760
2783
  })
2761
2784
  ])
2762
- ], 64)) : (p(), T("p", Bn, L(E.body), 1))
2785
+ ], 64)) : (p(), T("p", Dn, L(E.body), 1))
2763
2786
  ])
2764
2787
  ]))), 128))
2765
2788
  ])),
2766
- e.can ? (p(), T("div", In, [
2789
+ e.can ? (p(), T("div", Mn, [
2767
2790
  b(n(De), {
2768
2791
  modelValue: c.value,
2769
2792
  "onUpdate:modelValue": A[2] || (A[2] = (E) => c.value = E),
@@ -2785,18 +2808,18 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2785
2808
  ])) : U("", !0)
2786
2809
  ]));
2787
2810
  }
2788
- }), al = /* @__PURE__ */ Y(Pn, [["__scopeId", "data-v-71004c1a"]]), Dn = {
2811
+ }), sl = /* @__PURE__ */ Y(Fn, [["__scopeId", "data-v-71004c1a"]]), On = {
2789
2812
  key: 1,
2790
2813
  class: "wx-backup-note"
2791
- }, Mn = 48, Fn = /* @__PURE__ */ R({
2814
+ }, Hn = 48, jn = /* @__PURE__ */ R({
2792
2815
  name: "WxBackupNote",
2793
2816
  __name: "BackupNote",
2794
2817
  setup(e) {
2795
- const t = X(), a = ct(), l = P("webx-admin"), i = x(() => t.state.manifest?.backup ?? null), s = x(() => i.value !== null && t.can("settings.view")), o = x(() => {
2818
+ const t = X(), a = ft(), l = P("webx-admin"), i = x(() => t.state.manifest?.backup ?? null), s = x(() => i.value !== null && t.can("settings.view")), o = x(() => {
2796
2819
  const c = i.value?.at;
2797
2820
  if (c == null) return !0;
2798
2821
  const h = new Date(c).getTime();
2799
- return Number.isNaN(h) || Date.now() - h > Mn * 36e5;
2822
+ return Number.isNaN(h) || Date.now() - h > Hn * 36e5;
2800
2823
  }), r = x(() => {
2801
2824
  const c = i.value?.bytes;
2802
2825
  if (c == null) return "";
@@ -2818,7 +2841,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2818
2841
  type: "warning",
2819
2842
  variant: "soft",
2820
2843
  description: u.value
2821
- }, null, 8, ["description"])) : s.value ? (p(), T("p", Dn, [
2844
+ }, null, 8, ["description"])) : s.value ? (p(), T("p", On, [
2822
2845
  b(n(G), {
2823
2846
  size: "sm",
2824
2847
  tone: "muted"
@@ -2828,7 +2851,7 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2828
2851
  ]),
2829
2852
  _: 1
2830
2853
  }),
2831
- b(mt, {
2854
+ b(ht, {
2832
2855
  value: i.value?.at
2833
2856
  }, null, 8, ["value"]),
2834
2857
  r.value ? (p(), $(n(G), {
@@ -2843,65 +2866,69 @@ const Qn = 76, Zn = /* @__PURE__ */ R({
2843
2866
  })) : U("", !0)
2844
2867
  ])) : U("", !0);
2845
2868
  }
2846
- }), nl = /* @__PURE__ */ Y(Fn, [["__scopeId", "data-v-beeee67e"]]);
2869
+ }), il = /* @__PURE__ */ Y(jn, [["__scopeId", "data-v-beeee67e"]]);
2847
2870
  export {
2848
- Ba as AdminLanding,
2849
- Ia as AdminNav,
2850
- Ya as AdminShell,
2871
+ Pa as AdminLanding,
2872
+ Da as AdminNav,
2873
+ Ga as AdminShell,
2851
2874
  Ce as HttpError,
2852
- ka as WxBackButton,
2853
- nl as WxBackupNote,
2854
- la as WxCategoriesField,
2855
- wn as WxCategoriesPage,
2856
- yn as WxCategoryCreateDialog,
2857
- Cn as WxCategoryEditorPage,
2858
- da as WxCategorySlug,
2859
- mt as WxDate,
2860
- Zn as WxFilterChips,
2861
- tl as WxHelpButton,
2862
- xa as WxLinkField,
2863
- wa as WxLinkPicker,
2864
- st as WxListScreen,
2865
- al as WxNotes,
2866
- el as WxRenameButton,
2867
- Va as WxRichTextField,
2875
+ ba as WxBackButton,
2876
+ il as WxBackupNote,
2877
+ ia as WxCategoriesField,
2878
+ _n as WxCategoriesPage,
2879
+ xn as WxCategoryCreateDialog,
2880
+ An as WxCategoryEditorPage,
2881
+ Me as WxCategorySlug,
2882
+ ht as WxDate,
2883
+ nl as WxFilterChips,
2884
+ ol as WxHelpButton,
2885
+ ya as WxLinkField,
2886
+ ga as WxLinkPicker,
2887
+ rt as WxListScreen,
2888
+ sl as WxNotes,
2889
+ ll as WxRenameButton,
2890
+ La as WxRichTextField,
2868
2891
  Ue as WxRowMenu,
2869
- _n as WxSaveState,
2870
- Tn as WxScreen,
2871
- ot as WxScreenHead,
2872
- it as adminKey,
2873
- ut as adminMessages,
2874
- Ea as adminTypes,
2875
- Jn as categoryRoutes,
2876
- Xn as createAdmin,
2877
- Ua as createAdminContext,
2892
+ Sn as WxSaveState,
2893
+ Wn as WxScreen,
2894
+ it as WxScreenHead,
2895
+ Me as WxSlugField,
2896
+ dt as adminKey,
2897
+ mt as adminMessages,
2898
+ Ra as adminTypes,
2899
+ tl as categoryRoutes,
2900
+ Qn as createAdmin,
2901
+ Na as createAdminContext,
2878
2902
  xe as createCategoriesApi,
2879
- cn as createDates,
2880
- Ga as createHttp,
2903
+ vn as createDates,
2904
+ Qa as createHttp,
2881
2905
  Ee as createI18n,
2882
- ma as createLinksApi,
2883
- hn as createNotesApi,
2884
- tn as createTheme,
2885
- ca as emptyLink,
2886
- vn as errorText,
2906
+ ua as createLinksApi,
2907
+ yn as createNotesApi,
2908
+ nn as createTheme,
2909
+ ra as emptyLink,
2910
+ pn as errorText,
2887
2911
  we as i18nKey,
2888
- gn as itemOrderMode,
2889
- Na as provideAdmin,
2890
- Qt as provideI18n,
2891
- en as provideTheme,
2892
- Me as readCookie,
2893
- dn as renderMarkdown,
2894
- ea as reorderItems,
2895
- Qn as rowMenuWidth,
2896
- rt as themeKey,
2912
+ wn as itemOrderMode,
2913
+ Ba as provideAdmin,
2914
+ ta as provideI18n,
2915
+ Aa as provideRecordAddress,
2916
+ an as provideTheme,
2917
+ Fe as readCookie,
2918
+ ut as recordAddressKey,
2919
+ mn as renderMarkdown,
2920
+ na as reorderItems,
2921
+ al as rowMenuWidth,
2922
+ ct as themeKey,
2897
2923
  X as useAdmin,
2898
- sa as useCategoryEditor,
2899
- Re as useCategoryWords,
2900
- ct as useDates,
2901
- Ne as useErrorText,
2902
- Jt as useI18n,
2903
- Gn as useItemOrder,
2904
- Yn as useTheme,
2924
+ Zn as useCategoryEditor,
2925
+ Ne as useCategoryWords,
2926
+ ft as useDates,
2927
+ Re as useErrorText,
2928
+ ea as useI18n,
2929
+ el as useItemOrder,
2930
+ za as useRecordAddress,
2931
+ Jn as useTheme,
2905
2932
  P as useTranslate
2906
2933
  };
2907
2934
  //# sourceMappingURL=index.js.map