@wssto2/vue-core 0.4.5 → 0.4.6
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/{Activity-DukTfcmn.js → Activity-BVk8iG3X.js} +1 -1
- package/dist/{Changes-Dhi7EBe9.js → Changes-CaiZpcyW.js} +1 -1
- package/dist/CollectionPage.vue_vue_type_script_setup_true_lang-kBBHIJTB.js +1520 -0
- package/dist/{DeadLetters-CfKE1axC.js → DeadLetters-BOMgmmOg.js} +3 -3
- package/dist/{General-BwT5Y_TN.js → General-BaW63VQg.js} +1 -1
- package/dist/{ProfilePage-DIJEhiW-.js → ProfilePage-Bbv5KH3L.js} +1 -1
- package/dist/{Sessions-BZnBtu7h.js → Sessions-r9WHf0nU.js} +1 -1
- package/dist/{SettingsPage-BmRCB75J.js → SettingsPage-Dcib_TK0.js} +1 -1
- package/dist/{SignIn-D-n9cfMH.js → SignIn-DJ-ai_ap.js} +1 -1
- package/dist/{SignInPage-BzIP6sPa.js → SignInPage-CJAsxvc6.js} +1 -1
- package/dist/{SignIns-dFIzemgy.js → SignIns-NnIqezxn.js} +1 -1
- package/dist/{UserRecord-DoOu1hWB.js → UserRecord-JZFQ40hK.js} +3 -3
- package/dist/{UsersList-CYBGEOqE.js → UsersList-cfhb1GE7.js} +3 -3
- package/dist/collection/datePresets.d.ts +8 -4
- package/dist/collection/index.js +49 -49
- package/dist/collection/state.d.ts +10 -5
- package/dist/collection/useCollection.d.ts +20 -5
- package/dist/http-D_D9YbLH.js +194 -0
- package/dist/identity/index.js +1 -1
- package/dist/{index-BHt1dLX2.js → index-7QcMXQZq.js} +2 -2
- package/dist/{index-BVX0nmMv.js → index-By5B18A3.js} +10 -10
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{neighbors-DpaIMQAL.js → neighbors-BRf4Eh2R.js} +1 -1
- package/dist/notifications/index.js +1 -1
- package/dist/{status-D3cLPSCh.js → status-Ct8ixCoS.js} +2 -2
- package/package.json +1 -1
- package/dist/CollectionPage.vue_vue_type_script_setup_true_lang-BuAdhiy_.js +0 -1514
- package/dist/http-CNcDHSOj.js +0 -194
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { defineComponent as B, useTemplateRef as C, computed as y, ref as v, openBlock as D, createBlock as z, unref as r, withCtx as m, createVNode as F, createElementVNode as b, normalizeClass as $, toDisplayString as h } from "vue";
|
|
2
2
|
import { useI18n as q } from "vue-i18n";
|
|
3
3
|
import { a as k } from "./error-CD7x0Jrz.js";
|
|
4
|
-
import { u as V, _ as N } from "./CollectionPage.vue_vue_type_script_setup_true_lang-
|
|
4
|
+
import { u as V, _ as N } from "./CollectionPage.vue_vue_type_script_setup_true_lang-kBBHIJTB.js";
|
|
5
5
|
import { u as P } from "./describeError-Ctga6GcS.js";
|
|
6
6
|
import { u as I } from "./format-B8mJm946.js";
|
|
7
|
-
import { e as a, R as O } from "./index-
|
|
7
|
+
import { e as a, R as O } from "./index-7QcMXQZq.js";
|
|
8
8
|
import { _ as W } from "./AlertDialog.vue_vue_type_script_setup_true_lang-whA4WLdl.js";
|
|
9
9
|
import { t as i } from "./toast-CqSDTWRX.js";
|
|
10
10
|
import { u as Y } from "./useLoad-CYRVx6HW.js";
|
|
11
11
|
import { u as j } from "./platform-q3cjODLx.js";
|
|
12
|
-
import { a as G, r as H } from "./http-
|
|
12
|
+
import { a as G, r as H } from "./http-D_D9YbLH.js";
|
|
13
13
|
function J(u) {
|
|
14
14
|
return G({
|
|
15
15
|
id: "events.deadletters",
|
|
@@ -8,7 +8,7 @@ import { _ as F } from "./FormView.vue_vue_type_script_setup_true_lang-cr0xNDXP.
|
|
|
8
8
|
import { _ as L } from "./SelectField.vue_vue_type_script_setup_true_lang-BJoAkBo2.js";
|
|
9
9
|
import { _ as f } from "./TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js";
|
|
10
10
|
import { u as A } from "./useSaveChrome-DuWm0Czf.js";
|
|
11
|
-
import { P as D, b as G, i as I } from "./index-
|
|
11
|
+
import { P as D, b as G, i as I } from "./index-By5B18A3.js";
|
|
12
12
|
import { t as M } from "./toast-CqSDTWRX.js";
|
|
13
13
|
import { u as O } from "./platform-q3cjODLx.js";
|
|
14
14
|
import { b as U } from "./routeResource-DstM0hvf.js";
|
|
@@ -4,7 +4,7 @@ import { a as ge } from "./AdaptivePageShell.vue_vue_type_script_setup_true_lang
|
|
|
4
4
|
import { u as L } from "./platform-q3cjODLx.js";
|
|
5
5
|
import { _ as Q } from "./AsyncSection.vue_vue_type_script_setup_true_lang-Blj6KgCr.js";
|
|
6
6
|
import { u as Y } from "./useLoad-CYRVx6HW.js";
|
|
7
|
-
import { i as k, d as G } from "./index-
|
|
7
|
+
import { i as k, d as G } from "./index-By5B18A3.js";
|
|
8
8
|
import { u as Z } from "./FormErrors.vue_vue_type_script_setup_true_lang-BQb7wLT0.js";
|
|
9
9
|
import { _ as ee } from "./FormView.vue_vue_type_script_setup_true_lang-cr0xNDXP.js";
|
|
10
10
|
import { _ as U } from "./TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js";
|
|
@@ -2,7 +2,7 @@ import { defineComponent as x, useTemplateRef as v, computed as w, ref as $, ope
|
|
|
2
2
|
import { useI18n as N } from "vue-i18n";
|
|
3
3
|
import { _ as q } from "./Button.vue_vue_type_script_setup_true_lang-CL9Qh5yq.js";
|
|
4
4
|
import { u as A } from "./describeError-Ctga6GcS.js";
|
|
5
|
-
import { P as D, b as L, e as O, i as g, d as T } from "./index-
|
|
5
|
+
import { P as D, b as L, e as O, i as g, d as T } from "./index-By5B18A3.js";
|
|
6
6
|
import { _ as k } from "./AlertDialog.vue_vue_type_script_setup_true_lang-whA4WLdl.js";
|
|
7
7
|
import { t as b } from "./toast-CqSDTWRX.js";
|
|
8
8
|
import { u as V } from "./platform-q3cjODLx.js";
|
|
@@ -15,7 +15,7 @@ import { _ as W } from "./FormView.vue_vue_type_script_setup_true_lang-cr0xNDXP.
|
|
|
15
15
|
import { _ as E } from "./TimeField.vue_vue_type_script_setup_true_lang-DWfAUlnz.js";
|
|
16
16
|
import { a as k, n as X } from "./useTypedEntry-aTfPBAhw.js";
|
|
17
17
|
import { _ as Y } from "./PanelActions.vue_vue_type_script_setup_true_lang-E9VdIGkf.js";
|
|
18
|
-
import { n as q } from "./index-
|
|
18
|
+
import { n as q } from "./index-7QcMXQZq.js";
|
|
19
19
|
import { u as ee } from "./platform-q3cjODLx.js";
|
|
20
20
|
import { u as te } from "./useLoad-CYRVx6HW.js";
|
|
21
21
|
function ne() {
|
|
@@ -6,7 +6,7 @@ import { u as D } from "./format-B8mJm946.js";
|
|
|
6
6
|
import { _ as p } from "./FormGroup.vue_vue_type_script_setup_true_lang-DG2zdG_a.js";
|
|
7
7
|
import { e as b } from "./control-7EP4tjYy.js";
|
|
8
8
|
import { u as U } from "./describeError-Ctga6GcS.js";
|
|
9
|
-
import { c as q, P as z, b as F, _ as L, i as O, d as T } from "./index-
|
|
9
|
+
import { c as q, P as z, b as F, _ as L, i as O, d as T } from "./index-By5B18A3.js";
|
|
10
10
|
import { t as h } from "./toast-CqSDTWRX.js";
|
|
11
11
|
import { u as j, h as G } from "./platform-q3cjODLx.js";
|
|
12
12
|
import { b as H } from "./routeResource-DstM0hvf.js";
|
|
@@ -6,7 +6,7 @@ import { _ as N } from "./Panel.vue_vue_type_script_setup_true_lang-BA0u_DtS.js"
|
|
|
6
6
|
import { _ as S } from "./FormView.vue_vue_type_script_setup_true_lang-cr0xNDXP.js";
|
|
7
7
|
import { _ as a } from "./TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js";
|
|
8
8
|
import { r as $ } from "./guards-Dve61KjR.js";
|
|
9
|
-
import { u as C, a as E } from "./index-
|
|
9
|
+
import { u as C, a as E } from "./index-By5B18A3.js";
|
|
10
10
|
const V = { class: "flex flex-1 flex-col items-center justify-center gap-8" }, k = { class: "text-xl font-semibold text-content-strong" }, H = /* @__PURE__ */ d({
|
|
11
11
|
__name: "SignInPage",
|
|
12
12
|
setup(q) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent as g, ref as m, watch as p, openBlock as c, createElementBlock as v, createVNode as i, unref as e, withCtx as w, createBlock as x, createCommentVNode as y, createElementVNode as V, toDisplayString as $ } from "vue";
|
|
2
2
|
import { useI18n as N } from "vue-i18n";
|
|
3
|
-
import { P as S, i as b } from "./index-
|
|
3
|
+
import { P as S, i as b } from "./index-By5B18A3.js";
|
|
4
4
|
import { u as k } from "./platform-q3cjODLx.js";
|
|
5
5
|
import { b as I } from "./routeResource-DstM0hvf.js";
|
|
6
6
|
import { _ as R } from "./AsyncSection.vue_vue_type_script_setup_true_lang-Blj6KgCr.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { defineComponent as R, openBlock as q, createBlock as P, unref as e, withCtx as u, createVNode as t, mergeProps as L, provide as N, computed as g, useTemplateRef as $, createElementVNode as x, toDisplayString as C, createTextVNode as j } from "vue";
|
|
2
2
|
import { useI18n as A } from "vue-i18n";
|
|
3
|
-
import { u as F } from "./neighbors-
|
|
3
|
+
import { u as F } from "./neighbors-BRf4Eh2R.js";
|
|
4
4
|
import { _ as H } from "./Avatar.vue_vue_type_script_setup_true_lang-CFIheaSr.js";
|
|
5
5
|
import { u as J } from "./describeError-Ctga6GcS.js";
|
|
6
|
-
import { i as w, P as Q, p as W, f as X, M as Y, g as Z, d as ee } from "./index-
|
|
6
|
+
import { i as w, P as Q, p as W, f as X, M as Y, g as Z, d as ee } from "./index-By5B18A3.js";
|
|
7
7
|
import { _ as se } from "./AlertDialog.vue_vue_type_script_setup_true_lang-whA4WLdl.js";
|
|
8
8
|
import { t as k } from "./toast-CqSDTWRX.js";
|
|
9
9
|
import { _ as ae } from "./SectionNavigator.vue_vue_type_script_setup_true_lang-ROl9_pdO.js";
|
|
@@ -18,7 +18,7 @@ import { _ as T } from "./FormGroup.vue_vue_type_script_setup_true_lang-DG2zdG_a
|
|
|
18
18
|
import { e as B } from "./control-7EP4tjYy.js";
|
|
19
19
|
import { u as z, _ as K } from "./useCommand-BkONMn3X.js";
|
|
20
20
|
import { u as U } from "./fieldMessages-C3Rpbktw.js";
|
|
21
|
-
import { u as ce, s as le } from "./status-
|
|
21
|
+
import { u as ce, s as le } from "./status-Ct8ixCoS.js";
|
|
22
22
|
import { _ as M } from "./TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js";
|
|
23
23
|
const ue = /* @__PURE__ */ R({
|
|
24
24
|
__name: "DeactivateDialog",
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { defineComponent as U, openBlock as p, createBlock as C, unref as e, withCtx as c, createVNode as r, mergeProps as i, useTemplateRef as V, computed as q, createTextVNode as z, toDisplayString as $, createCommentVNode as A, createElementBlock as S, normalizeClass as N } from "vue";
|
|
2
2
|
import { useI18n as B } from "vue-i18n";
|
|
3
3
|
import { useRouter as M } from "vue-router";
|
|
4
|
-
import { u as P, _ as D } from "./CollectionPage.vue_vue_type_script_setup_true_lang-
|
|
4
|
+
import { u as P, _ as D } from "./CollectionPage.vue_vue_type_script_setup_true_lang-kBBHIJTB.js";
|
|
5
5
|
import { _ as I } from "./Avatar.vue_vue_type_script_setup_true_lang-CFIheaSr.js";
|
|
6
6
|
import { u as F } from "./format-B8mJm946.js";
|
|
7
7
|
import { u as L } from "./platform-q3cjODLx.js";
|
|
8
8
|
import { _ as G } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
|
|
9
|
-
import { i as K, f as E, M as W } from "./index-
|
|
10
|
-
import { U as j, u as H, s as J } from "./status-
|
|
9
|
+
import { i as K, f as E, M as W } from "./index-By5B18A3.js";
|
|
10
|
+
import { U as j, u as H, s as J } from "./status-Ct8ixCoS.js";
|
|
11
11
|
import { u as O } from "./environment-Dva-SG8D.js";
|
|
12
12
|
import { u as Q } from "./languages-BShG9LpE.js";
|
|
13
13
|
import { _ as X } from "./FormGroup.vue_vue_type_script_setup_true_lang-DG2zdG_a.js";
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter } from "vue";
|
|
1
2
|
import type { FilterDescriptor } from "./filters";
|
|
2
3
|
/** The presets go-core's date helper understands (`utils.DateRange`). */
|
|
3
4
|
export declare const DATE_PRESETS: readonly ["today", "yesterday", "this_week", "last_week", "this_month", "last_month", "this_year", "last_year"];
|
|
4
5
|
/**
|
|
5
6
|
* A filter over a date column with go-core's presets (today, this week, last month...), its labels
|
|
6
|
-
* translated. Call it while a component is set up
|
|
7
|
-
*
|
|
7
|
+
* translated. Call it once while a component is set up (it takes `t` from `useI18n`, which exists
|
|
8
|
+
* only then) and use the result in the `filters` computed: the descriptor's labels follow the locale,
|
|
9
|
+
* so changing the language while the list is open re-labels it. `label` may be a getter, which
|
|
10
|
+
* follows the locale too.
|
|
8
11
|
*
|
|
9
|
-
* const
|
|
12
|
+
* const created = useDatePresetFilter("created_at");
|
|
13
|
+
* const filters = computed(() => [created.value, …]);
|
|
10
14
|
*/
|
|
11
|
-
export declare function useDatePresetFilter<Filter extends string>(key: Filter, label?: string): FilterDescriptor<Filter
|
|
15
|
+
export declare function useDatePresetFilter<Filter extends string>(key: Filter, label?: MaybeRefOrGetter<string>): ComputedRef<FilterDescriptor<Filter>>;
|
package/dist/collection/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { D as
|
|
2
|
-
import { _ as
|
|
3
|
-
import { u as
|
|
4
|
-
import { a as
|
|
5
|
-
import { _ as
|
|
6
|
-
import { defineComponent as y, openBlock as c, createElementBlock as d, Fragment as h, renderList as v, createBlock as k, unref as
|
|
1
|
+
import { D as O, L as j, a as U, h as G, l as X, r as Z } from "../http-D_D9YbLH.js";
|
|
2
|
+
import { _ as H, a as J, u as K } from "../CollectionPage.vue_vue_type_script_setup_true_lang-kBBHIJTB.js";
|
|
3
|
+
import { u as W } from "../neighbors-BRf4Eh2R.js";
|
|
4
|
+
import { a as ee, b as te } from "../rowLayout-BkQWulan.js";
|
|
5
|
+
import { _ as oe } from "../DataTable.vue_vue_type_script_setup_true_lang-KPm5NrDE.js";
|
|
6
|
+
import { defineComponent as y, openBlock as c, createElementBlock as d, Fragment as h, renderList as v, createBlock as k, unref as f, withCtx as C, normalizeClass as m, createVNode as p, createCommentVNode as g, computed as w, toValue as E } from "vue";
|
|
7
7
|
import { _ } from "../Icon.vue_vue_type_script_lang-D7oC-d-S.js";
|
|
8
|
-
import { _ as
|
|
9
|
-
import { useI18n as
|
|
10
|
-
function
|
|
8
|
+
import { _ as S } from "../Tooltip.vue_vue_type_script_setup_true_lang-OOD_XNWx.js";
|
|
9
|
+
import { useI18n as T } from "vue-i18n";
|
|
10
|
+
function B(r = {}) {
|
|
11
11
|
const s = new Map(Object.entries(r).map(([t, e]) => [t, [...e]]));
|
|
12
|
-
let
|
|
12
|
+
let a = 1;
|
|
13
13
|
const o = (t) => {
|
|
14
14
|
let e = s.get(t);
|
|
15
15
|
return e || s.set(t, e = []), e;
|
|
@@ -19,29 +19,29 @@ function R(r = {}) {
|
|
|
19
19
|
return [...o(t)];
|
|
20
20
|
},
|
|
21
21
|
async save(t, e, i) {
|
|
22
|
-
const
|
|
23
|
-
return l === -1 ?
|
|
22
|
+
const n = o(t), l = n.findIndex((x) => x.name === e), u = { id: l === -1 ? `view-${a++}` : n[l].id, name: e, state: i };
|
|
23
|
+
return l === -1 ? n.push(u) : n[l] = u, u;
|
|
24
24
|
},
|
|
25
25
|
async remove(t, e) {
|
|
26
|
-
const i = o(t),
|
|
27
|
-
|
|
26
|
+
const i = o(t), n = i.findIndex((l) => l.id === e);
|
|
27
|
+
n !== -1 && i.splice(n, 1);
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
-
const
|
|
31
|
+
const A = {
|
|
32
32
|
key: 0,
|
|
33
33
|
class: "flex items-center justify-center gap-1",
|
|
34
34
|
"data-test": "row-actions"
|
|
35
|
-
},
|
|
35
|
+
}, P = ["href", "target", "rel", "aria-label", "data-action"], L = ["aria-label", "data-action", "disabled", "onClick"], b = "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus", N = /* @__PURE__ */ y({
|
|
36
36
|
__name: "RowActions",
|
|
37
37
|
props: {
|
|
38
38
|
actions: {},
|
|
39
39
|
disabled: { type: Boolean, default: !1 }
|
|
40
40
|
},
|
|
41
41
|
setup(r) {
|
|
42
|
-
const s = r,
|
|
43
|
-
return (o, t) => s.actions.length > 0 ? (c(), d("div",
|
|
44
|
-
(c(!0), d(h, null, v(s.actions, (e) => (c(), k(
|
|
42
|
+
const s = r, a = (o) => o.tone === "critical" ? "text-status-danger-content hover:bg-status-danger-surface" : "text-content-link hover:bg-tint-soft";
|
|
43
|
+
return (o, t) => s.actions.length > 0 ? (c(), d("div", A, [
|
|
44
|
+
(c(!0), d(h, null, v(s.actions, (e) => (c(), k(f(S), {
|
|
45
45
|
key: e.key,
|
|
46
46
|
text: e.label,
|
|
47
47
|
side: "left"
|
|
@@ -54,58 +54,58 @@ const S = {
|
|
|
54
54
|
rel: e.external ? "noopener" : void 0,
|
|
55
55
|
"aria-label": e.label,
|
|
56
56
|
"data-action": e.key,
|
|
57
|
-
class: m(["inline-flex rounded-md p-1.5 transition-colors", [
|
|
57
|
+
class: m(["inline-flex rounded-md p-1.5 transition-colors", [a(e), b]])
|
|
58
58
|
}, [
|
|
59
|
-
p(
|
|
59
|
+
p(f(_), {
|
|
60
60
|
name: e.icon,
|
|
61
61
|
size: 18
|
|
62
62
|
}, null, 8, ["name"])
|
|
63
|
-
], 10,
|
|
63
|
+
], 10, P)) : (c(), d("button", {
|
|
64
64
|
key: 1,
|
|
65
65
|
type: "button",
|
|
66
66
|
"aria-label": e.label,
|
|
67
67
|
"data-action": e.key,
|
|
68
68
|
disabled: s.disabled,
|
|
69
|
-
class: m(["inline-flex cursor-pointer rounded-md p-1.5 transition-colors disabled:pointer-events-none disabled:opacity-40", [
|
|
69
|
+
class: m(["inline-flex cursor-pointer rounded-md p-1.5 transition-colors disabled:pointer-events-none disabled:opacity-40", [a(e), b]]),
|
|
70
70
|
onClick: (i) => e.onSelect?.()
|
|
71
71
|
}, [
|
|
72
|
-
p(
|
|
72
|
+
p(f(_), {
|
|
73
73
|
name: e.icon,
|
|
74
74
|
size: 18
|
|
75
75
|
}, null, 8, ["name"])
|
|
76
|
-
], 10,
|
|
76
|
+
], 10, L))
|
|
77
77
|
]),
|
|
78
78
|
_: 2
|
|
79
79
|
}, 1032, ["text"]))), 128))
|
|
80
80
|
])) : g("", !0);
|
|
81
81
|
}
|
|
82
|
-
}),
|
|
83
|
-
function
|
|
84
|
-
const { t:
|
|
85
|
-
return {
|
|
82
|
+
}), D = ["today", "yesterday", "this_week", "last_week", "this_month", "last_month", "this_year", "last_year"];
|
|
83
|
+
function V(r, s) {
|
|
84
|
+
const { t: a } = T();
|
|
85
|
+
return w(() => ({
|
|
86
86
|
key: r,
|
|
87
87
|
icon: "calendarEventFill",
|
|
88
|
-
label: s ??
|
|
88
|
+
label: E(s) ?? a("core.collection.date_presets.label"),
|
|
89
89
|
type: "select",
|
|
90
|
-
options:
|
|
91
|
-
};
|
|
90
|
+
options: D.map((o) => ({ value: o, label: a(`core.collection.date_presets.options.${o}`) }))
|
|
91
|
+
}));
|
|
92
92
|
}
|
|
93
93
|
export {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
94
|
+
ee as CollectionCell,
|
|
95
|
+
H as CollectionPage,
|
|
96
|
+
J as CollectionTable,
|
|
97
|
+
D as DATE_PRESETS,
|
|
98
|
+
O as DEFAULT_PAGE_SIZES,
|
|
99
|
+
oe as DataTable,
|
|
100
|
+
j as LIST_CONTEXT_PARAM,
|
|
101
|
+
te as RecordIdentity,
|
|
102
|
+
N as RowActions,
|
|
103
|
+
B as createMemorySavedViews,
|
|
104
|
+
U as defineCollection,
|
|
105
|
+
G as httpList,
|
|
106
|
+
X as listParams,
|
|
107
|
+
Z as readListPage,
|
|
108
|
+
K as useCollection,
|
|
109
|
+
W as useCollectionNeighbors,
|
|
110
|
+
V as useDatePresetFilter
|
|
111
111
|
};
|
|
@@ -2,18 +2,23 @@ import type { CollectionDefinition } from "./definition";
|
|
|
2
2
|
import type { CollectionQuery } from "./types";
|
|
3
3
|
export type Json = Readonly<Record<string, unknown>>;
|
|
4
4
|
/** The query of `candidate` (untrusted, compact keys) made valid for `definition`: every bad field is its default. */
|
|
5
|
-
export declare function sanitizeState<Row, Sort extends string, Filter extends string, View extends string>(definition: CollectionDefinition<Row, Sort, Filter, View>, candidate: Json): CollectionQuery<Sort, Filter, View>;
|
|
6
|
-
/**
|
|
7
|
-
|
|
5
|
+
export declare function sanitizeState<Row, Sort extends string, Filter extends string, View extends string>(definition: CollectionDefinition<Row, Sort, Filter, View>, candidate: Json, start?: CollectionQuery<Sort, Filter, View>): CollectionQuery<Sort, Filter, View>;
|
|
6
|
+
/**
|
|
7
|
+
* The compact text of a query. Sensitive filters are left out. `start` is a list's own starting
|
|
8
|
+
* state (see `UseCollectionOptions.defaults`): the text stays readable without it (a record page's
|
|
9
|
+
* `from` is decoded against the bare definition), so whatever either side defaults is written out,
|
|
10
|
+
* even when empty: `f` as `{}`, `s` as `""`, `w` as `""`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function encodeState<Row, Sort extends string, Filter extends string, View extends string>(definition: CollectionDefinition<Row, Sort, Filter, View>, query: CollectionQuery<Sort, Filter, View>, start?: CollectionQuery<Sort, Filter, View>): string;
|
|
8
13
|
/**
|
|
9
14
|
* The query stored (compact keys, as a link or a saved view holds them) under `stored.v`, migrated if
|
|
10
15
|
* it is of another version: null when the definition cannot read it (the caller then keeps what it has).
|
|
11
16
|
*/
|
|
12
|
-
export declare function restoreState<Row, Sort extends string, Filter extends string, View extends string>(definition: CollectionDefinition<Row, Sort, Filter, View>, stored: Json): CollectionQuery<Sort, Filter, View> | null;
|
|
17
|
+
export declare function restoreState<Row, Sort extends string, Filter extends string, View extends string>(definition: CollectionDefinition<Row, Sort, Filter, View>, stored: Json, start?: CollectionQuery<Sort, Filter, View>): CollectionQuery<Sort, Filter, View> | null;
|
|
13
18
|
/**
|
|
14
19
|
* The query a stored text stands for: null when it is missing, corrupt or of a version the
|
|
15
20
|
* definition cannot migrate (the caller then uses the defaults), otherwise the validated query.
|
|
16
21
|
*/
|
|
17
|
-
export declare function decodeState<Row, Sort extends string, Filter extends string, View extends string>(definition: CollectionDefinition<Row, Sort, Filter, View>, raw: unknown): CollectionQuery<Sort, Filter, View> | null;
|
|
22
|
+
export declare function decodeState<Row, Sort extends string, Filter extends string, View extends string>(definition: CollectionDefinition<Row, Sort, Filter, View>, raw: unknown, start?: CollectionQuery<Sort, Filter, View>): CollectionQuery<Sort, Filter, View> | null;
|
|
18
23
|
/** A stable text of a query: the cache key of a page, and a cheap equality. */
|
|
19
24
|
export declare function queryKey(query: CollectionQuery): string;
|
|
@@ -2,7 +2,7 @@ import { type ComputedRef, type MaybeRefOrGetter, type Ref } from "vue";
|
|
|
2
2
|
import { type RouteLocationRaw } from "vue-router";
|
|
3
3
|
import type { AsyncState } from "../state";
|
|
4
4
|
import type { Column } from "./columns";
|
|
5
|
-
import type
|
|
5
|
+
import { type CollectionDefinition } from "./definition";
|
|
6
6
|
import { type FilterDescriptor, type ViewDescriptor } from "./filters";
|
|
7
7
|
import type { SavedView, SavedViewState, SavedViews } from "./savedViews";
|
|
8
8
|
import type { ListPage, CollectionQuery, CollectionStateSource, SortDirection } from "./types";
|
|
@@ -22,7 +22,7 @@ export interface LinkedQuery<Filter extends string> {
|
|
|
22
22
|
/** Parameters that only label a filter (`line_name` for `line`): dropped along with it. */
|
|
23
23
|
consume?: readonly string[];
|
|
24
24
|
}
|
|
25
|
-
export interface UseCollectionOptions<Row, Filter extends string, View extends string, Col extends Column<Row
|
|
25
|
+
export interface UseCollectionOptions<Row, Filter extends string, View extends string, Col extends Column<Row>, Sort extends string = string> {
|
|
26
26
|
/** Where the list keeps its state; two lists on one page need two URL keys. */
|
|
27
27
|
state: CollectionStateSource;
|
|
28
28
|
columns?: MaybeRefOrGetter<readonly Col[]>;
|
|
@@ -33,6 +33,21 @@ export interface UseCollectionOptions<Row, Filter extends string, View extends s
|
|
|
33
33
|
/** Offers "Saved views" on the list. */
|
|
34
34
|
savedViews?: SavedViews;
|
|
35
35
|
linked?: LinkedQuery<Filter>;
|
|
36
|
+
/**
|
|
37
|
+
* This use's starting state, over the definition's `defaults` (each field given replaces the
|
|
38
|
+
* definition's): where the list opens when the URL holds none, and what `reset()` returns to. A list
|
|
39
|
+
* that opens on the user's own location starts here. It is where the list starts, not a search the
|
|
40
|
+
* user ran: `isFiltered` (so `display`) counts a filter or the search only when it differs from it,
|
|
41
|
+
* so an empty result under the start is `"empty"`, not `"no-matches"`. Clearing the filter shows
|
|
42
|
+
* everything, and the start is still sent to the backend like any filter.
|
|
43
|
+
*/
|
|
44
|
+
defaults?: Readonly<{
|
|
45
|
+
filters?: Readonly<Partial<Record<NoInfer<Filter>, string>>>;
|
|
46
|
+
search?: string;
|
|
47
|
+
view?: NoInfer<View> | null;
|
|
48
|
+
sort?: NoInfer<Sort> | null;
|
|
49
|
+
direction?: SortDirection;
|
|
50
|
+
}>;
|
|
36
51
|
}
|
|
37
52
|
/** What the list shows, derived from its state: one branch to render per value. */
|
|
38
53
|
export type CollectionDisplay =
|
|
@@ -85,7 +100,7 @@ export interface Collection<Row, Sort extends string = string, Filter extends st
|
|
|
85
100
|
readonly rows: ComputedRef<readonly Row[]>;
|
|
86
101
|
readonly total: ComputedRef<number>;
|
|
87
102
|
readonly display: ComputedRef<CollectionDisplay>;
|
|
88
|
-
/** A search or a filter applies. */
|
|
103
|
+
/** A search or a filter applies; one that is the use's starting state (`defaults`) does not count. */
|
|
89
104
|
readonly isFiltered: ComputedRef<boolean>;
|
|
90
105
|
/** The failure of the last request (an `ApiError` for requests made through the client); null when it did not fail. */
|
|
91
106
|
readonly error: Readonly<Ref<unknown>>;
|
|
@@ -112,7 +127,7 @@ export interface Collection<Row, Sort extends string = string, Filter extends st
|
|
|
112
127
|
/** Clears every filter and the search. */
|
|
113
128
|
clearFilters(): void;
|
|
114
129
|
setView(view: View | null): void;
|
|
115
|
-
/** Back to the
|
|
130
|
+
/** Back to the starting state: the use's `defaults` over the definition's. */
|
|
116
131
|
reset(): void;
|
|
117
132
|
/** The link of a row's record, carrying the list's state; null without `recordRoute`. */
|
|
118
133
|
recordLocation(row: Row): RouteLocationRaw | null;
|
|
@@ -132,4 +147,4 @@ export interface Collection<Row, Sort extends string = string, Filter extends st
|
|
|
132
147
|
* request only, treats a cancelled request as nothing happened, and follows the URL when the
|
|
133
148
|
* user goes back or forward. It stops with the scope it was created in.
|
|
134
149
|
*/
|
|
135
|
-
export declare function useCollection<Row, Sort extends string, Filter extends string, View extends string, const Col extends Column<Row> = Column<Row>>(definition: CollectionDefinition<Row, Sort, Filter, View>, options: UseCollectionOptions<Row, Filter, View, Col>): Collection<Row, Sort, Filter, View, Col>;
|
|
150
|
+
export declare function useCollection<Row, Sort extends string, Filter extends string, View extends string, const Col extends Column<Row> = Column<Row>>(definition: CollectionDefinition<Row, Sort, Filter, View>, options: UseCollectionOptions<Row, Filter, View, Col, Sort>): Collection<Row, Sort, Filter, View, Col>;
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { hasInjectionContext as $, inject as _, watch as O } from "vue";
|
|
2
|
+
import { g as j } from "./platform-q3cjODLx.js";
|
|
3
|
+
const k = [5, 8, 10, 15, 25, 50, 100], A = 25;
|
|
4
|
+
function X(e) {
|
|
5
|
+
const t = `defineCollection("${e.id}")`;
|
|
6
|
+
if (typeof e.id != "string" || e.id.trim() === "") throw new Error("defineCollection: `id` must be a non-empty string.");
|
|
7
|
+
if (!Number.isInteger(e.stateVersion) || e.stateVersion < 1) throw new Error(`${t}: \`stateVersion\` must be a positive integer.`);
|
|
8
|
+
if (typeof e.load != "function") throw new Error(`${t}: \`load\` must be a function.`);
|
|
9
|
+
if (typeof e.key != "function") throw new Error(`${t}: \`key\` must be a function.`);
|
|
10
|
+
const s = {
|
|
11
|
+
sorts: e.query?.sorts ? [...e.query.sorts] : null,
|
|
12
|
+
filters: e.query?.filters ? [...e.query.filters] : null,
|
|
13
|
+
views: e.query?.views ? [...e.query.views] : null,
|
|
14
|
+
sensitive: [...e.query?.sensitive ?? []],
|
|
15
|
+
pageSizes: [...e.query?.pageSizes ?? k],
|
|
16
|
+
search: e.query?.search ?? !0
|
|
17
|
+
};
|
|
18
|
+
if (s.pageSizes.length === 0 || s.pageSizes.some((c) => !Number.isInteger(c) || c < 1))
|
|
19
|
+
throw new Error(`${t}: \`query.pageSizes\` must list positive integers.`);
|
|
20
|
+
for (const c of s.sensitive)
|
|
21
|
+
if (s.filters && !s.filters.includes(c)) throw new Error(`${t}: sensitive filter "${c}" is not in \`query.filters\`.`);
|
|
22
|
+
const r = e.defaults ?? {}, o = r.pageSize ?? (s.pageSizes.includes(A) ? A : s.pageSizes[0]);
|
|
23
|
+
if (!s.pageSizes.includes(o)) throw new Error(`${t}: default page size ${o} is not one of ${s.pageSizes.join(", ")}.`);
|
|
24
|
+
const n = r.sort ?? null;
|
|
25
|
+
if (n !== null && s.sorts && !s.sorts.includes(n)) throw new Error(`${t}: default sort "${n}" is not in \`query.sorts\`.`);
|
|
26
|
+
const i = r.view ?? null;
|
|
27
|
+
if (i !== null && s.views && !s.views.includes(i)) throw new Error(`${t}: default view "${i}" is not in \`query.views\`.`);
|
|
28
|
+
const a = Object.fromEntries(Object.entries(r.filters ?? {}).filter(([, c]) => c !== void 0 && c !== ""));
|
|
29
|
+
for (const c of Object.keys(a))
|
|
30
|
+
if (s.filters && !s.filters.includes(c)) throw new Error(`${t}: default filter "${c}" is not in \`query.filters\`.`);
|
|
31
|
+
const l = r.page ?? 1;
|
|
32
|
+
if (!Number.isInteger(l) || l < 1) throw new Error(`${t}: default page must be a positive integer.`);
|
|
33
|
+
const f = r.direction ?? "asc";
|
|
34
|
+
if (f !== "asc" && f !== "desc") throw new Error(`${t}: default direction must be "asc" or "desc".`);
|
|
35
|
+
return Object.freeze({
|
|
36
|
+
id: e.id,
|
|
37
|
+
stateVersion: e.stateVersion,
|
|
38
|
+
load: e.load,
|
|
39
|
+
key: e.key,
|
|
40
|
+
defaults: Object.freeze({
|
|
41
|
+
page: l,
|
|
42
|
+
pageSize: o,
|
|
43
|
+
sort: n,
|
|
44
|
+
direction: f,
|
|
45
|
+
search: r.search ?? "",
|
|
46
|
+
view: i,
|
|
47
|
+
filters: Object.freeze(a)
|
|
48
|
+
}),
|
|
49
|
+
contract: Object.freeze(s),
|
|
50
|
+
migrate: e.migrate
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
const F = "from";
|
|
54
|
+
function G(e, t) {
|
|
55
|
+
if (typeof e == "string") {
|
|
56
|
+
const s = new URLSearchParams(t).toString(), r = e.indexOf("#"), o = r === -1 ? e : e.slice(0, r);
|
|
57
|
+
return `${o}${o.includes("?") ? "&" : "?"}${s}${r === -1 ? "" : e.slice(r)}`;
|
|
58
|
+
}
|
|
59
|
+
return { ...e, query: { ...e.query, ...t } };
|
|
60
|
+
}
|
|
61
|
+
function J(e) {
|
|
62
|
+
if (!$()) return;
|
|
63
|
+
const t = _(j, null);
|
|
64
|
+
t && O(
|
|
65
|
+
() => {
|
|
66
|
+
const s = t.session.state.value;
|
|
67
|
+
return s.status === "authenticated" ? s.user.id : null;
|
|
68
|
+
},
|
|
69
|
+
e,
|
|
70
|
+
{ flush: "sync" }
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
const I = 4096, T = 200, N = 32, C = 1e6, S = /^[A-Za-z0-9_.-]{1,64}$/;
|
|
74
|
+
function M(e) {
|
|
75
|
+
let t = "";
|
|
76
|
+
for (const s of new TextEncoder().encode(e)) t += String.fromCharCode(s);
|
|
77
|
+
return btoa(t).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
78
|
+
}
|
|
79
|
+
function x(e) {
|
|
80
|
+
const t = e.replace(/-/g, "+").replace(/_/g, "/"), s = atob(t.padEnd(Math.ceil(t.length / 4) * 4, "="));
|
|
81
|
+
return new TextDecoder("utf-8", { fatal: !0 }).decode(Uint8Array.from(s, (r) => r.charCodeAt(0)));
|
|
82
|
+
}
|
|
83
|
+
const E = (e) => typeof e == "object" && e !== null && !Array.isArray(e);
|
|
84
|
+
function d(e, t = T) {
|
|
85
|
+
return typeof e == "string" && e.length <= t ? e : null;
|
|
86
|
+
}
|
|
87
|
+
function z(e, t, s) {
|
|
88
|
+
const { contract: r } = e, o = s ?? e.defaults, n = typeof t.p == "number" && Number.isInteger(t.p) && t.p >= 1 && t.p <= C ? t.p : o.page, i = typeof t.l == "number" && r.pageSizes.includes(t.l) ? t.l : o.pageSize;
|
|
89
|
+
let a = o.sort;
|
|
90
|
+
const l = d(t.c, 64);
|
|
91
|
+
l !== null && (r.sorts ? r.sorts.includes(l) : S.test(l)) && (a = l);
|
|
92
|
+
const f = t.d === "asc" || t.d === "desc" ? t.d : o.direction, c = d(t.s) ?? o.search;
|
|
93
|
+
let g = o.view;
|
|
94
|
+
const p = d(t.w, 64);
|
|
95
|
+
t.w === "" ? g = null : p !== null && (r.views ? r.views.includes(p) : S.test(p)) && (g = p);
|
|
96
|
+
const h = E(t.f) ? {} : { ...o.filters };
|
|
97
|
+
if (E(t.f)) {
|
|
98
|
+
let w = 0;
|
|
99
|
+
for (const [m, y] of Object.entries(t.f)) {
|
|
100
|
+
if (++w > N) break;
|
|
101
|
+
if (!(r.filters ? r.filters.includes(m) : S.test(m)) || r.sensitive.includes(m)) continue;
|
|
102
|
+
const v = typeof y == "number" || typeof y == "boolean" ? String(y) : d(y);
|
|
103
|
+
v !== null && v !== "" && (h[m] = v);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return { page: n, pageSize: i, sort: a, direction: f, search: c, view: g, filters: h };
|
|
107
|
+
}
|
|
108
|
+
function Z(e, t, s) {
|
|
109
|
+
const r = { v: e.stateVersion, p: t.page, l: t.pageSize };
|
|
110
|
+
t.sort && (r.c = t.sort), r.d = t.direction, (t.search || s && e.defaults.search !== s.search) && (r.s = t.search), (t.view || s && e.defaults.view !== s.view) && (r.w = t.view ?? "");
|
|
111
|
+
const o = Object.fromEntries(
|
|
112
|
+
Object.entries(t.filters).filter(([n, i]) => i !== void 0 && i !== "" && !e.contract.sensitive.includes(n))
|
|
113
|
+
);
|
|
114
|
+
return (Object.keys(o).length > 0 || Object.keys(e.defaults.filters).length > 0 || Object.keys(s?.filters ?? {}).length > 0) && (r.f = o), M(JSON.stringify(r));
|
|
115
|
+
}
|
|
116
|
+
function L(e, t, s) {
|
|
117
|
+
const r = t.v === void 0 ? e.stateVersion : t.v;
|
|
118
|
+
if (typeof r != "number" || !Number.isInteger(r)) return null;
|
|
119
|
+
if (r === e.stateVersion) return z(e, t, s);
|
|
120
|
+
const o = e.migrate?.(t, r);
|
|
121
|
+
return o ? z(e, o, s) : null;
|
|
122
|
+
}
|
|
123
|
+
function B(e, t, s) {
|
|
124
|
+
if (typeof t != "string" || t === "" || t.length > I) return null;
|
|
125
|
+
let r;
|
|
126
|
+
try {
|
|
127
|
+
r = JSON.parse(x(t));
|
|
128
|
+
} catch {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
return E(r) ? L(e, r, s) : null;
|
|
132
|
+
}
|
|
133
|
+
function K(e) {
|
|
134
|
+
return JSON.stringify([
|
|
135
|
+
e.page,
|
|
136
|
+
e.pageSize,
|
|
137
|
+
e.sort,
|
|
138
|
+
e.direction,
|
|
139
|
+
e.search,
|
|
140
|
+
e.view,
|
|
141
|
+
Object.entries(e.filters).sort(([t], [s]) => t.localeCompare(s))
|
|
142
|
+
]);
|
|
143
|
+
}
|
|
144
|
+
const b = (e) => typeof e == "object" && e !== null && !Array.isArray(e), u = (...e) => {
|
|
145
|
+
for (const t of e) if (typeof t == "number" && Number.isFinite(t)) return t;
|
|
146
|
+
return null;
|
|
147
|
+
};
|
|
148
|
+
function P(e) {
|
|
149
|
+
return {
|
|
150
|
+
// Filters first: the reserved names below always win, a filter called "page" cannot break paging.
|
|
151
|
+
...e.filters,
|
|
152
|
+
page: e.page,
|
|
153
|
+
per_page: e.pageSize,
|
|
154
|
+
order_col: e.sort,
|
|
155
|
+
order_dir: e.sort ? e.direction : null,
|
|
156
|
+
search: e.search,
|
|
157
|
+
view: e.view
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function V(e, t) {
|
|
161
|
+
const s = e.data, r = b(s) && Array.isArray(s.data), o = Array.isArray(s) ? s : r ? s.data : [], n = r ? s : {}, i = b(e.meta) ? e.meta : b(n.meta) ? n.meta : {}, a = u(n.per_page, i.per_page) ?? t.pageSize, l = u(n.total, i.total) ?? o.length, f = u(n.current_page, i.page, i.current_page) ?? t.page, c = u(n.last_page, i.last_page) ?? (l === 0 ? 0 : Math.ceil(l / Math.max(1, a))), g = u(n.from, i.from) ?? (o.length === 0 ? 0 : (f - 1) * a + 1), p = u(n.to, i.to) ?? (o.length === 0 ? 0 : g + o.length - 1), h = Array.isArray(i.views) ? i.views : Array.isArray(n.views) ? n.views : void 0;
|
|
162
|
+
return {
|
|
163
|
+
rows: o,
|
|
164
|
+
total: l,
|
|
165
|
+
page: f,
|
|
166
|
+
pageSize: a,
|
|
167
|
+
lastPage: c,
|
|
168
|
+
from: g,
|
|
169
|
+
to: p,
|
|
170
|
+
views: h?.filter(b).flatMap((w) => typeof w.key == "string" ? [{ key: w.key, count: u(w.count) ?? void 0 }] : []),
|
|
171
|
+
meta: i,
|
|
172
|
+
requestId: e.requestId
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function Q(e, t, s = {}) {
|
|
176
|
+
return async (r, { signal: o }) => {
|
|
177
|
+
const n = await e.get(t, { query: s.params ? s.params(r) : P(r), signal: o });
|
|
178
|
+
return V(n, r);
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
export {
|
|
182
|
+
k as D,
|
|
183
|
+
F as L,
|
|
184
|
+
X as a,
|
|
185
|
+
L as b,
|
|
186
|
+
B as d,
|
|
187
|
+
Z as e,
|
|
188
|
+
Q as h,
|
|
189
|
+
P as l,
|
|
190
|
+
J as o,
|
|
191
|
+
K as q,
|
|
192
|
+
V as r,
|
|
193
|
+
G as w
|
|
194
|
+
};
|
package/dist/identity/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as t, h as n, j as a, i, k as o, d as r, l as d, m as u, n as y, r as l, o as I, s as f, q as p, t as A, f as c } from "../index-
|
|
1
|
+
import { _ as t, h as n, j as a, i, k as o, d as r, l as d, m as u, n as y, r as l, o as I, s as f, q as p, t as A, f as c } from "../index-By5B18A3.js";
|
|
2
2
|
export {
|
|
3
3
|
t as SignInAsButton,
|
|
4
4
|
n as identityFeature,
|
|
@@ -31,9 +31,9 @@ const M = {
|
|
|
31
31
|
deadLettersRetryAll: y("POST", "/v1/events/dead-letters/retry", { permission: "events.deadletter:retry" }),
|
|
32
32
|
consumers: y("GET", "/v1/events/consumers", { permission: "events.deadletter:view" })
|
|
33
33
|
}, [ke, ee] = fe("vue-core.notifications"), we = "events.deadletter:view", bt = "events.deadletter:retry", J = Z({
|
|
34
|
-
index: { name: "events.deadletters", path: "/events/dead-letters", component: () => import("./DeadLetters-
|
|
34
|
+
index: { name: "events.deadletters", path: "/events/dead-letters", component: () => import("./DeadLetters-BOMgmmOg.js"), meta: { access: we, titleKey: "core.notifications.dead_letters.title" } }
|
|
35
35
|
}), j = Z({
|
|
36
|
-
index: { name: "notifications.settings", path: "/profile/notifications", component: () => import("./SettingsPage-
|
|
36
|
+
index: { name: "notifications.settings", path: "/profile/notifications", component: () => import("./SettingsPage-Dcib_TK0.js"), meta: { titleKey: "core.notifications.settings.title" } }
|
|
37
37
|
}), Te = /* @__PURE__ */ z({
|
|
38
38
|
__name: "SettingsMenuItem",
|
|
39
39
|
setup(o) {
|