@wssto2/vue-core 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +3 -1
- package/dist/{ActionRow.vue_vue_type_script_setup_true_lang-Bv-APkGf.js → ActionRow.vue_vue_type_script_setup_true_lang-D8NCXX4p.js} +1 -1
- package/dist/{Activity-DUjDaPfP.js → Activity-DGodh6BU.js} +4 -4
- package/dist/{Changes-B0tZO6BZ.js → Changes-38u4xY6e.js} +3 -3
- package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-o_Pj-JcD.js → CollectionPage.vue_vue_type_script_setup_true_lang-DPcCnrjr.js} +3 -3
- package/dist/{DateField.vue_vue_type_script_setup_true_lang-CDg31ZU7.js → DateField.vue_vue_type_script_setup_true_lang-BxUuUypB.js} +1 -1
- package/dist/{DeadLetters-IgVHao84.js → DeadLetters-CeHfhFHP.js} +6 -5
- package/dist/{FormGroup.vue_vue_type_script_setup_true_lang-CSgT4ITL.js → FormGroup.vue_vue_type_script_setup_true_lang-CNb2CK01.js} +1 -1
- package/dist/{FormView.vue_vue_type_script_setup_true_lang-D31Hk3pJ.js → FormView.vue_vue_type_script_setup_true_lang-nyz8EkzM.js} +1 -1
- package/dist/{General-C40HxupS.js → General-BNTjPvat.js} +6 -6
- package/dist/{NewRolePage-Bhy8KJO1.js → NewRolePage-Btg7gzzH.js} +7 -6
- package/dist/{NumberField.vue_vue_type_script_setup_true_lang-BdS7BxuS.js → NumberField.vue_vue_type_script_setup_true_lang-C8um4ARi.js} +1 -1
- package/dist/PersonAccess.vue_vue_type_script_setup_true_lang-ClmawvYm.js +600 -0
- package/dist/{ProfilePage-Bf7dFzGd.js → ProfilePage-CoZyG11N.js} +9 -9
- package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-C6oloGIh.js → RoleEditor.vue_vue_type_script_setup_true_lang-Bs9bo0Zb.js} +30 -29
- package/dist/{RolePage-BjbvciTg.js → RolePage-CPlwZA6X.js} +37 -35
- package/dist/{RolesPage-DzVOgF4z.js → RolesPage-CdYdIHR4.js} +29 -27
- package/dist/{SegmentedField.vue_vue_type_script_setup_true_lang-DXe_iOS8.js → SegmentedField.vue_vue_type_script_setup_true_lang-B_hBL5f4.js} +1 -1
- package/dist/{SelectField.vue_vue_type_script_setup_true_lang-BN4vzvV9.js → SelectField.vue_vue_type_script_setup_true_lang-CBZhGNpm.js} +4 -4
- package/dist/ServiceAccountDialog.vue_vue_type_script_setup_true_lang-DuvSSBbX.js +126 -0
- package/dist/ServiceAccountRecord-BtaUZuWU.js +511 -0
- package/dist/ServiceAccountsList-CcRJvNaf.js +137 -0
- package/dist/{SessionList.vue_vue_type_script_setup_true_lang-PuWIK-Wa.js → SessionList.vue_vue_type_script_setup_true_lang-VvBB2EZz.js} +2 -2
- package/dist/{Sessions-CRUObe5G.js → Sessions-DkGNO1FO.js} +2 -2
- package/dist/{SettingsPage-C0qEC0uI.js → SettingsPage-D4G1HGbG.js} +8 -8
- package/dist/{SignIn-Uy0Jujzz.js → SignIn-DS1YymqD.js} +4 -4
- package/dist/{SignInPage-CpVZfrLZ.js → SignInPage-BrmL0PUw.js} +3 -3
- package/dist/{SignIns-Cp5Gx2dk.js → SignIns-C7l7IPHQ.js} +1 -1
- package/dist/{SwitchField.vue_vue_type_script_setup_true_lang-Dj5Aq8QT.js → SwitchField.vue_vue_type_script_setup_true_lang-DXZK89A3.js} +1 -1
- package/dist/{TextField.vue_vue_type_script_setup_true_lang-BwfNNQEz.js → TextField.vue_vue_type_script_setup_true_lang-CX3LdZLK.js} +2 -2
- package/dist/{TextareaField.vue_vue_type_script_setup_true_lang-aT1P8Xqr.js → TextareaField.vue_vue_type_script_setup_true_lang-BOtn_1GT.js} +1 -1
- package/dist/{TimeField.vue_vue_type_script_setup_true_lang-jPKPE1hc.js → TimeField.vue_vue_type_script_setup_true_lang-CbflIrq6.js} +1 -1
- package/dist/{UserRecord-DbSMnTbj.js → UserRecord-Du8M_kuk.js} +25 -25
- package/dist/{UsersList-9MicE2pG.js → UsersList-D3ydQice.js} +13 -13
- package/dist/access/api.d.ts +7 -8
- package/dist/access/context.d.ts +2 -7
- package/dist/access/feature.d.ts +0 -8
- package/dist/access/index.js +47 -15
- package/dist/client/client.d.ts +2 -2
- package/dist/client/index.d.ts +1 -1
- package/dist/client/route.d.ts +22 -3
- package/dist/collection/http.d.ts +3 -2
- package/dist/collection/index.js +17 -16
- package/dist/form/index.js +586 -611
- package/dist/http-nz92KjdS.js +42 -0
- package/dist/i18n/index.js +32 -32
- package/dist/identity/index.d.ts +7 -0
- package/dist/identity/index.js +19 -15
- package/dist/identity/serviceaccounts/ApiKeysPanel.vue.d.ts +17 -0
- package/dist/identity/serviceaccounts/CreatedApiKeyDialog.vue.d.ts +53 -0
- package/dist/identity/serviceaccounts/NewApiKeyDialog.vue.d.ts +24 -0
- package/dist/identity/serviceaccounts/ServiceAccountDialog.vue.d.ts +22 -0
- package/dist/identity/serviceaccounts/ServiceAccountRecord.vue.d.ts +2 -0
- package/dist/identity/serviceaccounts/ServiceAccountsList.vue.d.ts +2 -0
- package/dist/identity/serviceaccounts/access.d.ts +4 -0
- package/dist/identity/serviceaccounts/api.d.ts +27 -0
- package/dist/identity/serviceaccounts/context.d.ts +14 -0
- package/dist/identity/serviceaccounts/feature.d.ts +23 -0
- package/dist/identity/serviceaccounts/form.d.ts +4 -0
- package/dist/identity/serviceaccounts/messages.d.ts +11 -0
- package/dist/identity/serviceaccounts/routes.d.ts +22 -0
- package/dist/{index-Ok29ucE3.js → index-Cmj9iZmT.js} +191 -168
- package/dist/{index-C-oM_Mnf.js → index-DH0MoFqg.js} +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/copyText.d.ts +5 -0
- package/dist/modules/access/routes.d.ts +13 -13
- package/dist/modules/events/routes.d.ts +4 -4
- package/dist/modules/identity/routes.d.ts +31 -31
- package/dist/modules/notification/routes.d.ts +16 -16
- package/dist/modules/serviceaccount/entities.d.ts +127 -0
- package/dist/modules/serviceaccount/routes.d.ts +58 -0
- package/dist/modules/serviceaccount/schemas.d.ts +49 -0
- package/dist/{neighbors-Bv6vnWlW.js → neighbors-DNZuGlQH.js} +1 -1
- package/dist/notifications/index.js +1 -1
- package/dist/{options-Bu0XbEpN.js → options-e_CAfvDQ.js} +3 -3
- package/dist/phone/index.js +1 -1
- package/dist/refusals-COPr15XZ.js +135 -0
- package/dist/routes-CVckt7Pj.js +19 -0
- package/dist/state-BC1Fc6U2.js +154 -0
- package/dist/{status-C78NpXyB.js → status-C8XtnK6m.js} +7 -6
- package/dist/styles.css +1 -1
- package/dist/{suggestions-ClyLexMO.js → suggestions-cPjs5gQz.js} +1 -1
- package/dist/{useCommand-DyuPTosF.js → useCommand-CfG727e8.js} +1 -1
- package/dist/{useGroupSheet-C2NyqWRp.js → useGroupSheet-BVcNDWbP.js} +2 -2
- package/dist/useRecordDialog-D65FF85F.js +30 -0
- package/package.json +2 -2
- package/dist/http-CdQowFlW.js +0 -194
- package/dist/index-BdGnA1Jh.js +0 -765
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { defineComponent as F, useTemplateRef as M, ref as w, computed as n, openBlock as c, createBlock as d, unref as t, withCtx as r, createElementVNode as p, createVNode as l, createElementBlock as _, toDisplayString as b, createCommentVNode as x, Fragment as O, renderList as j, createTextVNode as q } from "vue";
|
|
2
|
+
import { useI18n as z } from "vue-i18n";
|
|
3
|
+
import { useRouter as D } from "vue-router";
|
|
4
|
+
import { u as G } from "./refusals-COPr15XZ.js";
|
|
5
|
+
import { _ as I } from "./IconTile.vue_vue_type_script_setup_true_lang-_FXvaj93.js";
|
|
6
|
+
import { _ as K } from "./Tabs.vue_vue_type_script_setup_true_lang-CcMcE38r.js";
|
|
7
|
+
import { _ as P } from "./FormGroup.vue_vue_type_script_setup_true_lang-CNb2CK01.js";
|
|
8
|
+
import { g as H } from "./options-e_CAfvDQ.js";
|
|
9
|
+
import { _ as J } from "./TextField.vue_vue_type_script_setup_true_lang-CX3LdZLK.js";
|
|
10
|
+
import { u as Q } from "./format-D8X4zsx6.js";
|
|
11
|
+
import { a as W } from "./AdaptivePageShell.vue_vue_type_script_setup_true_lang-GUTIXuNd.js";
|
|
12
|
+
import { u as X } from "./platform-Dx6STiwY.js";
|
|
13
|
+
import { _ as Y } from "./AsyncSection.vue_vue_type_script_setup_true_lang-B0NfvG3B.js";
|
|
14
|
+
import { _ as Z } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
|
|
15
|
+
import { u as ee } from "./useLoad-W4tfxmm5.js";
|
|
16
|
+
import { f as te, M as $, s as A } from "./index-Cmj9iZmT.js";
|
|
17
|
+
import { u as ae, _ as se } from "./ServiceAccountDialog.vue_vue_type_script_setup_true_lang-DuvSSBbX.js";
|
|
18
|
+
const oe = {
|
|
19
|
+
class: "flex min-w-0 flex-col gap-group-gap",
|
|
20
|
+
"data-test": "service-segment"
|
|
21
|
+
}, ce = { class: "flex flex-wrap items-center gap-3" }, re = { "data-test": "service-accounts" }, ne = {
|
|
22
|
+
key: 0,
|
|
23
|
+
class: "px-row-inset py-6 text-center text-body text-content-muted",
|
|
24
|
+
"data-test": "service-accounts-empty"
|
|
25
|
+
}, le = {
|
|
26
|
+
key: 1,
|
|
27
|
+
class: "min-w-[4.5rem] text-right text-footnote tabular-nums text-content-muted",
|
|
28
|
+
"data-test": "account-keys"
|
|
29
|
+
}, Ve = /* @__PURE__ */ F({
|
|
30
|
+
__name: "ServiceAccountsList",
|
|
31
|
+
setup(ie) {
|
|
32
|
+
const { t: a } = z(), L = D(), { access: y } = X(), V = Q(), C = G(), N = ae(), { tenants: S } = te(), g = M("dialog"), v = ee(({ signal: e }) => N.list({ signal: e })), i = w("active"), f = w(""), h = n(() => v.data.value ?? []), u = (e) => e.deactivated_at === null, B = (e) => e.tenant?.name ?? C.levelLabel("organization"), m = n(() => {
|
|
33
|
+
const e = f.value.trim().toLowerCase();
|
|
34
|
+
return h.value.filter((o) => e === "" || `${o.name} ${o.description} ${o.owner.name}`.toLowerCase().includes(e));
|
|
35
|
+
}), k = n(() => m.value.filter((e) => i.value === "all" || i.value === "active" === u(e))), R = n(() => [
|
|
36
|
+
{ value: "active", label: a("core.serviceaccounts.views.active"), badge: m.value.filter(u).length },
|
|
37
|
+
{ value: "inactive", label: a("core.serviceaccounts.views.inactive"), badge: m.value.filter((e) => !u(e)).length },
|
|
38
|
+
{ value: "all", label: a("core.serviceaccounts.views.all"), badge: m.value.length }
|
|
39
|
+
]), T = n(
|
|
40
|
+
() => y.can($) ? [{ id: "create", label: a("core.serviceaccounts.create"), icon: "addLine", placement: "primary", compact: "icon", keyboardShortcut: { key: "N", ctrlKey: !0 }, onClick: () => g.value?.show() }] : []
|
|
41
|
+
);
|
|
42
|
+
function E(e) {
|
|
43
|
+
return [
|
|
44
|
+
e.description,
|
|
45
|
+
...S ? [B(e)] : [],
|
|
46
|
+
e.owner.name,
|
|
47
|
+
e.last_used_at ? a("core.serviceaccounts.last_call", { at: V.dateTime(e.last_used_at) }) : a("core.serviceaccounts.never_used")
|
|
48
|
+
].filter(Boolean).join(" · ");
|
|
49
|
+
}
|
|
50
|
+
const U = (e) => void L.push({ ...A.record({ id: e.id }), query: { tab: "access" } });
|
|
51
|
+
return (e, o) => (c(), d(t(W), {
|
|
52
|
+
title: t(a)("core.serviceaccounts.title_plural"),
|
|
53
|
+
description: t(a)("core.serviceaccounts.description"),
|
|
54
|
+
icon: "key2Line",
|
|
55
|
+
count: h.value.length || null,
|
|
56
|
+
actions: T.value
|
|
57
|
+
}, {
|
|
58
|
+
default: r(() => [
|
|
59
|
+
p("div", oe, [
|
|
60
|
+
p("div", ce, [
|
|
61
|
+
l(t(K), {
|
|
62
|
+
modelValue: i.value,
|
|
63
|
+
"onUpdate:modelValue": o[0] || (o[0] = (s) => i.value = s),
|
|
64
|
+
tabs: R.value,
|
|
65
|
+
presentation: "scope"
|
|
66
|
+
}, null, 8, ["modelValue", "tabs"]),
|
|
67
|
+
l(t(J), {
|
|
68
|
+
modelValue: f.value,
|
|
69
|
+
"onUpdate:modelValue": o[1] || (o[1] = (s) => f.value = s),
|
|
70
|
+
class: "min-w-[14rem] flex-1",
|
|
71
|
+
label: t(a)("core.serviceaccounts.search"),
|
|
72
|
+
"label-hidden": "",
|
|
73
|
+
placeholder: t(a)("core.serviceaccounts.search")
|
|
74
|
+
}, null, 8, ["modelValue", "label", "placeholder"])
|
|
75
|
+
]),
|
|
76
|
+
l(t(Y), {
|
|
77
|
+
state: t(v).state.value,
|
|
78
|
+
"skeleton-rows": 4,
|
|
79
|
+
"is-empty": () => !1,
|
|
80
|
+
onRetry: o[2] || (o[2] = (s) => t(v).reload())
|
|
81
|
+
}, {
|
|
82
|
+
default: r(() => [
|
|
83
|
+
p("div", re, [
|
|
84
|
+
l(t(P), {
|
|
85
|
+
footer: t(a)("core.serviceaccounts.no_password")
|
|
86
|
+
}, {
|
|
87
|
+
default: r(() => [
|
|
88
|
+
k.value.length === 0 ? (c(), _("p", ne, b(t(a)("core.serviceaccounts.empty")), 1)) : x("", !0),
|
|
89
|
+
(c(!0), _(O, null, j(k.value, (s) => (c(), d(t(H), {
|
|
90
|
+
key: s.id,
|
|
91
|
+
layout: "setting",
|
|
92
|
+
label: s.name,
|
|
93
|
+
sub: E(s),
|
|
94
|
+
to: t(A).record({ id: s.id }),
|
|
95
|
+
"data-service-account": s.id
|
|
96
|
+
}, {
|
|
97
|
+
leading: r(() => [
|
|
98
|
+
l(t(I), {
|
|
99
|
+
tone: "anchor",
|
|
100
|
+
icon: "key2Line"
|
|
101
|
+
})
|
|
102
|
+
]),
|
|
103
|
+
default: r(() => [
|
|
104
|
+
u(s) ? (c(), _("span", le, b(t(a)("core.serviceaccounts.active_keys", { count: s.active_keys })), 1)) : (c(), d(t(Z), {
|
|
105
|
+
key: 0,
|
|
106
|
+
tone: "neutral"
|
|
107
|
+
}, {
|
|
108
|
+
default: r(() => [
|
|
109
|
+
q(b(t(a)("core.serviceaccounts.deactivated")), 1)
|
|
110
|
+
]),
|
|
111
|
+
_: 1
|
|
112
|
+
}))
|
|
113
|
+
]),
|
|
114
|
+
_: 2
|
|
115
|
+
}, 1032, ["label", "sub", "to", "data-service-account"]))), 128))
|
|
116
|
+
]),
|
|
117
|
+
_: 1
|
|
118
|
+
}, 8, ["footer"])
|
|
119
|
+
])
|
|
120
|
+
]),
|
|
121
|
+
_: 1
|
|
122
|
+
}, 8, ["state"])
|
|
123
|
+
]),
|
|
124
|
+
t(y).can(t($)) ? (c(), d(se, {
|
|
125
|
+
key: 0,
|
|
126
|
+
ref_key: "dialog",
|
|
127
|
+
ref: g,
|
|
128
|
+
onSaved: U
|
|
129
|
+
}, null, 512)) : x("", !0)
|
|
130
|
+
]),
|
|
131
|
+
_: 1
|
|
132
|
+
}, 8, ["title", "description", "count", "actions"]));
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
export {
|
|
136
|
+
Ve as default
|
|
137
|
+
};
|
|
@@ -3,8 +3,8 @@ import { useI18n as E } from "vue-i18n";
|
|
|
3
3
|
import { _ as y } from "./Button.vue_vue_type_script_setup_true_lang-CL9Qh5yq.js";
|
|
4
4
|
import { _ as B } from "./IconTile.vue_vue_type_script_setup_true_lang-_FXvaj93.js";
|
|
5
5
|
import { u as N } from "./format-D8X4zsx6.js";
|
|
6
|
-
import { _ as V } from "./FormGroup.vue_vue_type_script_setup_true_lang-
|
|
7
|
-
import { g as h } from "./options-
|
|
6
|
+
import { _ as V } from "./FormGroup.vue_vue_type_script_setup_true_lang-CNb2CK01.js";
|
|
7
|
+
import { g as h } from "./options-e_CAfvDQ.js";
|
|
8
8
|
import { _ as k } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
|
|
9
9
|
const L = {
|
|
10
10
|
class: "flex flex-col gap-y-0.5 md:flex-row md:flex-wrap md:items-center md:gap-x-1.5",
|
|
@@ -2,14 +2,14 @@ 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-BqGAUZgX.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-Cmj9iZmT.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-Dx6STiwY.js";
|
|
9
9
|
import { b as I } from "./routeResource-CcYA75T2.js";
|
|
10
10
|
import { _ as j } from "./AsyncSection.vue_vue_type_script_setup_true_lang-B0NfvG3B.js";
|
|
11
11
|
import { _ as z } from "./SectionIntro.vue_vue_type_script_setup_true_lang-CZtPrmXD.js";
|
|
12
|
-
import { _ as F } from "./SessionList.vue_vue_type_script_setup_true_lang-
|
|
12
|
+
import { _ as F } from "./SessionList.vue_vue_type_script_setup_true_lang-VvBB2EZz.js";
|
|
13
13
|
const G = {
|
|
14
14
|
class: "flex min-w-0 flex-col gap-group-gap",
|
|
15
15
|
"data-person-sessions": ""
|
|
@@ -5,26 +5,26 @@ import { a as oe } from "./AdaptivePageShell.vue_vue_type_script_setup_true_lang
|
|
|
5
5
|
import { t as C } from "./toast-CqSDTWRX.js";
|
|
6
6
|
import { u as U } from "./fieldMessages-DTXpWnBd.js";
|
|
7
7
|
import { _ as W } from "./AsyncSection.vue_vue_type_script_setup_true_lang-B0NfvG3B.js";
|
|
8
|
-
import { n as T, u as le, a as re } from "./index-
|
|
8
|
+
import { n as T, u as le, a as re } from "./index-DH0MoFqg.js";
|
|
9
9
|
import { _ as H } from "./SectionIntro.vue_vue_type_script_setup_true_lang-CZtPrmXD.js";
|
|
10
10
|
import { _ as j } from "./Button.vue_vue_type_script_setup_true_lang-CL9Qh5yq.js";
|
|
11
11
|
import { _ as ce } from "./IconTile.vue_vue_type_script_setup_true_lang-_FXvaj93.js";
|
|
12
12
|
import { u as ue } from "./format-D8X4zsx6.js";
|
|
13
|
-
import { _ as R } from "./FormGroup.vue_vue_type_script_setup_true_lang-
|
|
14
|
-
import { g as x } from "./options-
|
|
15
|
-
import { _ as de } from "./TextField.vue_vue_type_script_setup_true_lang-
|
|
13
|
+
import { _ as R } from "./FormGroup.vue_vue_type_script_setup_true_lang-CNb2CK01.js";
|
|
14
|
+
import { g as x } from "./options-e_CAfvDQ.js";
|
|
15
|
+
import { _ as de } from "./TextField.vue_vue_type_script_setup_true_lang-CX3LdZLK.js";
|
|
16
16
|
import { _ as fe } from "./AlertDialog.vue_vue_type_script_setup_true_lang-whA4WLdl.js";
|
|
17
17
|
import { _ as me } from "./Menu.vue_vue_type_script_setup_true_lang-DsFOeCVe.js";
|
|
18
18
|
import { _ as pe } from "./MenuButton.vue_vue_type_script_setup_true_lang-AGbN9r5q.js";
|
|
19
19
|
import { _ as E } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
|
|
20
|
-
import { _ as I } from "./ActionRow.vue_vue_type_script_setup_true_lang-
|
|
20
|
+
import { _ as I } from "./ActionRow.vue_vue_type_script_setup_true_lang-D8NCXX4p.js";
|
|
21
21
|
import { u as X } from "./platform-Dx6STiwY.js";
|
|
22
22
|
import { u as Y } from "./useLoad-W4tfxmm5.js";
|
|
23
|
-
import { _ as ee } from "./SwitchField.vue_vue_type_script_setup_true_lang-
|
|
23
|
+
import { _ as ee } from "./SwitchField.vue_vue_type_script_setup_true_lang-DXZK89A3.js";
|
|
24
24
|
import { _ as _e } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
|
|
25
25
|
import { u as ve } from "./FormErrors.vue_vue_type_script_setup_true_lang-D7edzNTL.js";
|
|
26
|
-
import { _ as ge } from "./FormView.vue_vue_type_script_setup_true_lang-
|
|
27
|
-
import { _ as A } from "./TimeField.vue_vue_type_script_setup_true_lang-
|
|
26
|
+
import { _ as ge } from "./FormView.vue_vue_type_script_setup_true_lang-nyz8EkzM.js";
|
|
27
|
+
import { _ as A } from "./TimeField.vue_vue_type_script_setup_true_lang-CbflIrq6.js";
|
|
28
28
|
import { a as K, n as be } from "./useTypedEntry-C7k7Dyl-.js";
|
|
29
29
|
const he = {
|
|
30
30
|
class: "flex min-w-0 flex-col gap-group-gap",
|
|
@@ -3,15 +3,15 @@ import { useI18n as A } from "vue-i18n";
|
|
|
3
3
|
import { _ as B } from "./Button.vue_vue_type_script_setup_true_lang-CL9Qh5yq.js";
|
|
4
4
|
import { _ as V } from "./IconTile.vue_vue_type_script_setup_true_lang-_FXvaj93.js";
|
|
5
5
|
import { u as D } from "./format-D8X4zsx6.js";
|
|
6
|
-
import { _ as p } from "./FormGroup.vue_vue_type_script_setup_true_lang-
|
|
7
|
-
import { g as b } from "./options-
|
|
6
|
+
import { _ as p } from "./FormGroup.vue_vue_type_script_setup_true_lang-CNb2CK01.js";
|
|
7
|
+
import { g as b } from "./options-e_CAfvDQ.js";
|
|
8
8
|
import { u as U } from "./describeError-BqGAUZgX.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-Cmj9iZmT.js";
|
|
10
10
|
import { t as h } from "./toast-CqSDTWRX.js";
|
|
11
11
|
import { u as j, h as G } from "./platform-Dx6STiwY.js";
|
|
12
12
|
import { b as H } from "./routeResource-CcYA75T2.js";
|
|
13
13
|
import { _ as J } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
|
|
14
|
-
import { _ as K } from "./ActionRow.vue_vue_type_script_setup_true_lang-
|
|
14
|
+
import { _ as K } from "./ActionRow.vue_vue_type_script_setup_true_lang-D8NCXX4p.js";
|
|
15
15
|
import { _ as M } from "./SectionIntro.vue_vue_type_script_setup_true_lang-CZtPrmXD.js";
|
|
16
16
|
const Q = {
|
|
17
17
|
key: 0,
|
|
@@ -3,10 +3,10 @@ import { useI18n as x } from "vue-i18n";
|
|
|
3
3
|
import { useRoute as y, useRouter as h } from "vue-router";
|
|
4
4
|
import { _ as I } from "./Button.vue_vue_type_script_setup_true_lang-CL9Qh5yq.js";
|
|
5
5
|
import { _ as N } from "./Panel.vue_vue_type_script_setup_true_lang-BA0u_DtS.js";
|
|
6
|
-
import { _ as S } from "./FormView.vue_vue_type_script_setup_true_lang-
|
|
7
|
-
import { _ as a } from "./TextField.vue_vue_type_script_setup_true_lang-
|
|
6
|
+
import { _ as S } from "./FormView.vue_vue_type_script_setup_true_lang-nyz8EkzM.js";
|
|
7
|
+
import { _ as a } from "./TextField.vue_vue_type_script_setup_true_lang-CX3LdZLK.js";
|
|
8
8
|
import { r as $ } from "./guards-D4mXf_2X.js";
|
|
9
|
-
import { u as C, a as E } from "./index-
|
|
9
|
+
import { u as C, a as E } from "./index-Cmj9iZmT.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 y, computed as k, openBlock as _, createElementBlock as b, createVNode as r, unref as t, withCtx as l, createElementVNode as u, toDisplayString as d, createTextVNode as $, ref as v, watch as w, createBlock as I, createCommentVNode as S } from "vue";
|
|
2
2
|
import { useI18n as h } from "vue-i18n";
|
|
3
|
-
import { P as V, i as N } from "./index-
|
|
3
|
+
import { P as V, i as N } from "./index-Cmj9iZmT.js";
|
|
4
4
|
import { u as B } from "./platform-Dx6STiwY.js";
|
|
5
5
|
import { b as E } from "./routeResource-CcYA75T2.js";
|
|
6
6
|
import { _ as R } from "./AsyncSection.vue_vue_type_script_setup_true_lang-B0NfvG3B.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent as v, useModel as w, computed as y, openBlock as g, createBlock as k, mergeProps as _, unref as t, createSlots as $, withCtx as l, createElementVNode as s, renderSlot as i, normalizeClass as d, normalizeStyle as B, toDisplayString as S, mergeModels as z, mergeDefaults as C } from "vue";
|
|
2
2
|
import { useI18n as M } from "vue-i18n";
|
|
3
|
-
import { u as V, _ as D, f as T, b as E } from "./options-
|
|
3
|
+
import { u as V, _ as D, f as T, b as E } from "./options-e_CAfvDQ.js";
|
|
4
4
|
const F = { class: "flex items-center gap-2" }, I = ["id", "aria-checked", "aria-label", "aria-describedby", "aria-invalid", "disabled"], P = { class: "sr-only" }, Z = /* @__PURE__ */ v({
|
|
5
5
|
__name: "SwitchField",
|
|
6
6
|
props: /* @__PURE__ */ z(/* @__PURE__ */ C({
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { defineComponent as K, useTemplateRef as N, computed as v, watch as te, nextTick as oe, openBlock as n, createElementBlock as l, withModifiers as se, normalizeStyle as ne, unref as i, createElementVNode as m, toDisplayString as r, createCommentVNode as p, Fragment as R, renderList as ae, normalizeClass as B, createBlock as P, renderSlot as b, createTextVNode as E, useModel as ie, ref as le, mergeProps as re, createSlots as ce, withCtx as w, withDirectives as de, vModelDynamic as ue, mergeModels as H, mergeDefaults as pe } from "vue";
|
|
2
2
|
import { useI18n as G } from "vue-i18n";
|
|
3
3
|
import { b as me } from "./controlSurface-t7OEFESJ.js";
|
|
4
|
-
import { a as fe,
|
|
4
|
+
import { a as fe, e as he, _ as ve, f as ge, b as ye } from "./options-e_CAfvDQ.js";
|
|
5
5
|
import { _ as xe } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
|
|
6
6
|
import { u as be, N as ke } from "./anchored-DpuUwf-9.js";
|
|
7
|
-
import { l as U, m as _e, u as we, c as $e } from "./suggestions-
|
|
7
|
+
import { l as U, m as _e, u as we, c as $e } from "./suggestions-cPjs5gQz.js";
|
|
8
8
|
const Me = ["id", "aria-busy"], qe = { class: "min-h-0 flex-1 overflow-y-auto p-1.5" }, Be = {
|
|
9
9
|
key: 0,
|
|
10
10
|
class: "px-2.5 pb-1 pt-1.5 text-caption font-semibold uppercase text-content-disabled",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent as V, useModel as L, useTemplateRef as M, computed as i, openBlock as p, createBlock as D, mergeProps as F, unref as f, createSlots as S, withCtx as n, createElementVNode as v, normalizeClass as b, withDirectives as z, vModelText as E, createElementBlock as P, toDisplayString as R, createCommentVNode as N, renderSlot as d, mergeModels as y, mergeDefaults as _ } from "vue";
|
|
2
2
|
import { u as j } from "./mediaQuery-CygcXmFW.js";
|
|
3
|
-
import { a as G, u as H,
|
|
3
|
+
import { a as G, u as H, e as U, _ as A, f as I, b as J } from "./options-e_CAfvDQ.js";
|
|
4
4
|
const K = ["id", "name", "rows", "placeholder", "maxlength", "autocomplete", "disabled", "required", "aria-required", "aria-invalid", "aria-describedby"], O = {
|
|
5
5
|
key: 0,
|
|
6
6
|
class: "mt-1 self-end text-footnote tabular-nums text-content-muted"
|
|
@@ -5,7 +5,7 @@ import { u as oe } from "./format-D8X4zsx6.js";
|
|
|
5
5
|
import { _ as le } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
|
|
6
6
|
import { u as ae } from "./mediaQuery-CygcXmFW.js";
|
|
7
7
|
import { _ as re } from "./Popover.vue_vue_type_script_setup_true_lang-C70GrCP7.js";
|
|
8
|
-
import {
|
|
8
|
+
import { e as se, _ as ie, f as ne, b as ue } from "./options-e_CAfvDQ.js";
|
|
9
9
|
import { d as me, r as de, t as I, p as ce, u as pe, a as fe, i as Q, _ as ve, b as be, c as ye } from "./useTypedEntry-C7k7Dyl-.js";
|
|
10
10
|
function ke(s) {
|
|
11
11
|
const { t: i } = R(), y = m(() => [i("core.form.time.words.now").toLowerCase(), "now"]);
|
|
@@ -1,9 +1,9 @@
|
|
|
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
|
|
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 O } from "vue";
|
|
2
2
|
import { useI18n as A } from "vue-i18n";
|
|
3
|
-
import { a as F } from "./neighbors-
|
|
3
|
+
import { a as F } from "./neighbors-DNZuGlQH.js";
|
|
4
4
|
import { _ as H } from "./Avatar.vue_vue_type_script_setup_true_lang-BPj_fkJR.js";
|
|
5
5
|
import { u as J } from "./describeError-BqGAUZgX.js";
|
|
6
|
-
import { i as w, P as Q, p as W,
|
|
6
|
+
import { i as w, P as Q, p as W, g as X, h as Y, j as Z, d as ee } from "./index-Cmj9iZmT.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-Ci04hApd.js";
|
|
@@ -14,12 +14,12 @@ import { A as re } from "./access-DmAceEo5.js";
|
|
|
14
14
|
import { _ as ne } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
|
|
15
15
|
import { u as ie } from "./useLoad-W4tfxmm5.js";
|
|
16
16
|
import { _ as V } from "./IconTile.vue_vue_type_script_setup_true_lang-_FXvaj93.js";
|
|
17
|
-
import { _ as
|
|
18
|
-
import { g as B } from "./options-
|
|
19
|
-
import { u as
|
|
17
|
+
import { _ as z } from "./FormGroup.vue_vue_type_script_setup_true_lang-CNb2CK01.js";
|
|
18
|
+
import { g as B } from "./options-e_CAfvDQ.js";
|
|
19
|
+
import { u as K, _ as M } from "./useCommand-CfG727e8.js";
|
|
20
20
|
import { u as U } from "./fieldMessages-DTXpWnBd.js";
|
|
21
|
-
import { u as ce, s as le } from "./status-
|
|
22
|
-
import { _ as
|
|
21
|
+
import { u as ce, s as le } from "./status-C8XtnK6m.js";
|
|
22
|
+
import { _ as T } from "./TextField.vue_vue_type_script_setup_true_lang-CX3LdZLK.js";
|
|
23
23
|
const ue = /* @__PURE__ */ R({
|
|
24
24
|
__name: "DeactivateDialog",
|
|
25
25
|
props: {
|
|
@@ -29,7 +29,7 @@ const ue = /* @__PURE__ */ R({
|
|
|
29
29
|
},
|
|
30
30
|
emits: ["done"],
|
|
31
31
|
setup(h, { expose: a, emit: d }) {
|
|
32
|
-
const c = h, v = d, { t: s } = A(), { http: n } = E(), l =
|
|
32
|
+
const c = h, v = d, { t: s } = A(), { http: n } = E(), l = K({
|
|
33
33
|
...U(),
|
|
34
34
|
defaults: () => ({}),
|
|
35
35
|
run: () => n.request(w.usersDeactivate, { id: c.id }),
|
|
@@ -37,7 +37,7 @@ const ue = /* @__PURE__ */ R({
|
|
|
37
37
|
k.success(s("core.users.deactivate.done", { name: c.name })), v("done");
|
|
38
38
|
}
|
|
39
39
|
});
|
|
40
|
-
return a({ open: () => l.present() }), (f, o) => (q(), P(e(
|
|
40
|
+
return a({ open: () => l.present() }), (f, o) => (q(), P(e(M), {
|
|
41
41
|
command: e(l),
|
|
42
42
|
title: e(s)("core.users.deactivate.title"),
|
|
43
43
|
subtitle: c.name,
|
|
@@ -47,7 +47,7 @@ const ue = /* @__PURE__ */ R({
|
|
|
47
47
|
size: "md"
|
|
48
48
|
}, {
|
|
49
49
|
default: u(() => [
|
|
50
|
-
t(e(
|
|
50
|
+
t(e(z), { "data-deactivate-dialog": "" }, {
|
|
51
51
|
default: u(() => [
|
|
52
52
|
t(e(B), {
|
|
53
53
|
layout: "setting",
|
|
@@ -98,7 +98,7 @@ const ue = /* @__PURE__ */ R({
|
|
|
98
98
|
];
|
|
99
99
|
return b.length > 0 ? { success: !1, error: { issues: b } } : { success: !0, data: { password: m } };
|
|
100
100
|
}
|
|
101
|
-
}, f =
|
|
101
|
+
}, f = K({
|
|
102
102
|
...U(),
|
|
103
103
|
defaults: () => ({ password: "", repeat: "" }),
|
|
104
104
|
validator: l,
|
|
@@ -107,25 +107,25 @@ const ue = /* @__PURE__ */ R({
|
|
|
107
107
|
k.success(s("core.users.password.done", { name: c.name })), v("saved");
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
|
-
return a({ open: () => f.present() }), (o, m) => (q(), P(e(
|
|
110
|
+
return a({ open: () => f.present() }), (o, m) => (q(), P(e(M), {
|
|
111
111
|
command: e(f),
|
|
112
112
|
title: e(s)("core.users.password.title"),
|
|
113
113
|
subtitle: c.name,
|
|
114
114
|
"confirm-label": e(s)("core.users.password.action")
|
|
115
115
|
}, {
|
|
116
116
|
default: u(() => [
|
|
117
|
-
t(e(
|
|
117
|
+
t(e(z), {
|
|
118
118
|
footer: e(s)("core.users.password.footer"),
|
|
119
119
|
"data-set-password-dialog": ""
|
|
120
120
|
}, {
|
|
121
121
|
default: u(() => [
|
|
122
|
-
t(e(
|
|
122
|
+
t(e(T), L(e(f).form.bind("password"), {
|
|
123
123
|
label: e(s)("core.users.fields.password"),
|
|
124
124
|
type: "password",
|
|
125
125
|
required: "",
|
|
126
126
|
autocomplete: "new-password"
|
|
127
127
|
}), null, 16, ["label"]),
|
|
128
|
-
t(e(
|
|
128
|
+
t(e(T), L(e(f).form.bind("repeat"), {
|
|
129
129
|
label: e(s)("core.users.fields.password_repeat"),
|
|
130
130
|
type: "password",
|
|
131
131
|
required: "",
|
|
@@ -141,7 +141,7 @@ const ue = /* @__PURE__ */ R({
|
|
|
141
141
|
}), me = {
|
|
142
142
|
class: "flex items-center gap-3 px-1.5",
|
|
143
143
|
"data-person-identity": ""
|
|
144
|
-
}, pe = { class: "flex min-w-0 flex-col items-start gap-0.5" }, fe = { class: "max-w-full truncate text-headline font-semibold text-content-strong" }, ve = { class: "max-w-full truncate text-footnote text-content-muted" },
|
|
144
|
+
}, pe = { class: "flex min-w-0 flex-col items-start gap-0.5" }, fe = { class: "max-w-full truncate text-headline font-semibold text-content-strong" }, ve = { class: "max-w-full truncate text-footnote text-content-muted" }, ze = /* @__PURE__ */ R({
|
|
145
145
|
__name: "UserRecord",
|
|
146
146
|
setup(h) {
|
|
147
147
|
const { t: a } = A(), { http: d, access: c, session: v } = E(), s = J(), n = te({
|
|
@@ -160,7 +160,7 @@ const ue = /* @__PURE__ */ R({
|
|
|
160
160
|
async function y() {
|
|
161
161
|
await Promise.all([n.reload(), l.reload()]);
|
|
162
162
|
}
|
|
163
|
-
async function
|
|
163
|
+
async function j() {
|
|
164
164
|
const r = n.id.value;
|
|
165
165
|
if (r !== null) {
|
|
166
166
|
try {
|
|
@@ -184,10 +184,10 @@ const ue = /* @__PURE__ */ R({
|
|
|
184
184
|
setPassword: () => b.value?.open(),
|
|
185
185
|
refresh: y
|
|
186
186
|
});
|
|
187
|
-
const
|
|
187
|
+
const G = g(() => [
|
|
188
188
|
...S.value.deactivate ? [{ id: "deactivate", label: a("core.users.actions.deactivate"), icon: "lockLine", placement: "overflow", tone: "critical", onClick: () => _.value?.open() }] : [],
|
|
189
189
|
...S.value.activate ? [{ id: "activate", label: a("core.users.actions.activate"), icon: "checkCircle", placement: "overflow", onClick: () => D.value?.present() }] : []
|
|
190
|
-
]),
|
|
190
|
+
]), I = g(() => ({
|
|
191
191
|
...l.data.value ? { "users.record.sessions": l.data.value.sessions.length } : {},
|
|
192
192
|
...o.value?.status === "locked" ? { "users.record.signin": a("core.users.status.locked") } : {}
|
|
193
193
|
}));
|
|
@@ -195,7 +195,7 @@ const ue = /* @__PURE__ */ R({
|
|
|
195
195
|
resource: e(n),
|
|
196
196
|
title: o.value?.name ?? e(a)("core.users.record"),
|
|
197
197
|
list: e(f).context,
|
|
198
|
-
actions:
|
|
198
|
+
actions: G.value
|
|
199
199
|
}, {
|
|
200
200
|
default: u(({ record: i }) => [
|
|
201
201
|
t(e(ae), {
|
|
@@ -203,7 +203,7 @@ const ue = /* @__PURE__ */ R({
|
|
|
203
203
|
desktop: "sidebar",
|
|
204
204
|
compact: "rows",
|
|
205
205
|
"back-label": i.name,
|
|
206
|
-
counts:
|
|
206
|
+
counts: I.value
|
|
207
207
|
}, {
|
|
208
208
|
summary: u(() => [
|
|
209
209
|
x("div", me, [
|
|
@@ -221,7 +221,7 @@ const ue = /* @__PURE__ */ R({
|
|
|
221
221
|
"data-person-status": ""
|
|
222
222
|
}, {
|
|
223
223
|
default: u(() => [
|
|
224
|
-
|
|
224
|
+
O(C(e(a)(`core.users.status.${i.status}`)), 1)
|
|
225
225
|
]),
|
|
226
226
|
_: 2
|
|
227
227
|
}, 1032, ["tone"])
|
|
@@ -255,7 +255,7 @@ const ue = /* @__PURE__ */ R({
|
|
|
255
255
|
title: e(a)("core.users.activate.title"),
|
|
256
256
|
message: e(a)("core.users.activate.body", { name: i.name }),
|
|
257
257
|
"confirm-label": e(a)("core.users.actions.activate"),
|
|
258
|
-
action:
|
|
258
|
+
action: j
|
|
259
259
|
}, null, 8, ["title", "message", "confirm-label"])
|
|
260
260
|
]),
|
|
261
261
|
_: 1
|
|
@@ -263,5 +263,5 @@ const ue = /* @__PURE__ */ R({
|
|
|
263
263
|
}
|
|
264
264
|
});
|
|
265
265
|
export {
|
|
266
|
-
|
|
266
|
+
ze as default
|
|
267
267
|
};
|
|
@@ -1,19 +1,19 @@
|
|
|
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
|
-
import { useRouter as
|
|
4
|
-
import { u as
|
|
5
|
-
import { _ as
|
|
3
|
+
import { useRouter as P } from "vue-router";
|
|
4
|
+
import { u as D, _ as I } from "./CollectionPage.vue_vue_type_script_setup_true_lang-DPcCnrjr.js";
|
|
5
|
+
import { _ as M } from "./Avatar.vue_vue_type_script_setup_true_lang-BPj_fkJR.js";
|
|
6
6
|
import { u as F } from "./format-D8X4zsx6.js";
|
|
7
7
|
import { u as L } from "./platform-Dx6STiwY.js";
|
|
8
8
|
import { _ as G } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
|
|
9
|
-
import { i as K,
|
|
10
|
-
import { U as j, u as H, s as J } from "./status-
|
|
9
|
+
import { i as K, g as E, h as W } from "./index-Cmj9iZmT.js";
|
|
10
|
+
import { U as j, u as H, s as J } from "./status-C8XtnK6m.js";
|
|
11
11
|
import { u as O } from "./environment-Dva-SG8D.js";
|
|
12
12
|
import { u as Q } from "./languages-BShG9LpE.js";
|
|
13
|
-
import { _ as X } from "./FormGroup.vue_vue_type_script_setup_true_lang-
|
|
14
|
-
import { _ as Y } from "./SelectField.vue_vue_type_script_setup_true_lang-
|
|
15
|
-
import { _ as d } from "./TextField.vue_vue_type_script_setup_true_lang-
|
|
16
|
-
import { u as Z, _ as ee } from "./useCommand-
|
|
13
|
+
import { _ as X } from "./FormGroup.vue_vue_type_script_setup_true_lang-CNb2CK01.js";
|
|
14
|
+
import { _ as Y } from "./SelectField.vue_vue_type_script_setup_true_lang-CBZhGNpm.js";
|
|
15
|
+
import { _ as d } from "./TextField.vue_vue_type_script_setup_true_lang-CX3LdZLK.js";
|
|
16
|
+
import { u as Z, _ as ee } from "./useCommand-CfG727e8.js";
|
|
17
17
|
import { t as se } from "./toast-CqSDTWRX.js";
|
|
18
18
|
import { u as te } from "./fieldMessages-DTXpWnBd.js";
|
|
19
19
|
const oe = /* @__PURE__ */ U({
|
|
@@ -93,15 +93,15 @@ const oe = /* @__PURE__ */ U({
|
|
|
93
93
|
}), ae = ["datetime"], xe = /* @__PURE__ */ U({
|
|
94
94
|
__name: "UsersList",
|
|
95
95
|
setup(T) {
|
|
96
|
-
const { t: o } = B(), { http: b, access: t } = L(), g = F(), h =
|
|
96
|
+
const { t: o } = B(), { http: b, access: t } = L(), g = F(), h = P(), f = V("dialog"), w = q(() => [
|
|
97
97
|
{ key: "name", label: o("core.users.columns.person"), kind: "identity", subtitle: (l) => l.email, sort: "name", mobile: "primary" },
|
|
98
98
|
{ key: "login", label: o("core.users.columns.login"), sort: "login", hideBelow: "md", width: 180, mobile: "hidden" },
|
|
99
99
|
{ key: "last_sign_in", label: o("core.users.columns.last_sign_in"), width: 170, mobile: "meta" },
|
|
100
100
|
{ key: "status", label: o("core.users.columns.status"), width: 130, mobile: "accessory" }
|
|
101
|
-
]), y = q(() => j.map((l) => ({ key: l, label: o(`core.users.views.${l}`) }))), m =
|
|
101
|
+
]), y = q(() => j.map((l) => ({ key: l, label: o(`core.users.views.${l}`) }))), m = D(H(b), { columns: w, views: y, state: { kind: "url", key: "query" }, recordRoute: (l) => E.record({ id: l.id }) }), k = q(
|
|
102
102
|
() => t.can(W) ? [{ id: "create", label: o("core.users.create.title"), icon: "addLine", placement: "primary", compact: "icon", keyboardShortcut: { key: "N", ctrlKey: !0 }, onClick: () => f.value?.create() }] : []
|
|
103
103
|
);
|
|
104
|
-
return (l, a) => (p(), C(e(
|
|
104
|
+
return (l, a) => (p(), C(e(I), {
|
|
105
105
|
collection: e(m),
|
|
106
106
|
title: e(o)("core.users.title"),
|
|
107
107
|
description: e(o)("core.users.description"),
|
|
@@ -111,7 +111,7 @@ const oe = /* @__PURE__ */ U({
|
|
|
111
111
|
"views-presentation": "scope"
|
|
112
112
|
}, {
|
|
113
113
|
leading: c(({ item: s }) => [
|
|
114
|
-
r(e(
|
|
114
|
+
r(e(M), {
|
|
115
115
|
name: s.name,
|
|
116
116
|
size: "md",
|
|
117
117
|
tone: "anchor"
|
package/dist/access/api.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { HttpClient } from "../client";
|
|
2
2
|
import type { BindInput, CreateRoleInput, UpdateRoleInput } from "../modules/access/schemas";
|
|
3
|
-
import type {
|
|
4
|
-
import type { AccessSubjects } from "./context";
|
|
3
|
+
import type { SubjectRef } from "../modules/access/entities";
|
|
5
4
|
type Options = {
|
|
6
5
|
readonly signal?: AbortSignal;
|
|
7
6
|
};
|
|
8
|
-
/** go-core's access routes as calls; `data` of each answer already read. A subject of
|
|
9
|
-
export declare function createAccessApi(http: HttpClient
|
|
7
|
+
/** go-core's access routes as calls; `data` of each answer already read. A subject of kind `service` goes to the service accounts' routes. */
|
|
8
|
+
export declare function createAccessApi(http: HttpClient): {
|
|
10
9
|
roles: (options?: Options) => Promise<import(".").RoleSummary[]>;
|
|
11
10
|
role: (ref: string, options?: Options) => Promise<import(".").Role>;
|
|
12
11
|
holders: (ref: string, options?: Options) => Promise<import(".").RoleHolder[]>;
|
|
@@ -15,10 +14,10 @@ export declare function createAccessApi(http: HttpClient, subjects?: AccessSubje
|
|
|
15
14
|
update: (input: UpdateRoleInput) => Promise<import(".").Role>;
|
|
16
15
|
remove: (ref: string) => Promise<undefined>;
|
|
17
16
|
replace: (ref: string, other: string) => Promise<number>;
|
|
18
|
-
access: (subject: SubjectRef, options?: Options) => Promise<SubjectAccess>;
|
|
19
|
-
scopes: (subject: SubjectRef, options?: Options) => Promise<ScopeOptions>;
|
|
20
|
-
bindable: (subject: SubjectRef, level: string, scopeId: number | null, options?: Options) => Promise<import("
|
|
21
|
-
bind: (subject: SubjectRef, input: Omit<BindInput, "id">) => Promise<Binding>;
|
|
17
|
+
access: (subject: SubjectRef, options?: Options) => Promise<import("../modules/serviceaccount/entities").SubjectAccess>;
|
|
18
|
+
scopes: (subject: SubjectRef, options?: Options) => Promise<import("../modules/serviceaccount/entities").ScopeOptions>;
|
|
19
|
+
bindable: (subject: SubjectRef, level: string, scopeId: number | null, options?: Options) => Promise<import("../modules/serviceaccount/entities").Role[]>;
|
|
20
|
+
bind: (subject: SubjectRef, input: Omit<BindInput, "id">) => Promise<import("../modules/serviceaccount/entities").Binding>;
|
|
22
21
|
unbind: (subject: SubjectRef, bindingId: number) => Promise<undefined>;
|
|
23
22
|
};
|
|
24
23
|
export type AccessApi = ReturnType<typeof createAccessApi>;
|
package/dist/access/context.d.ts
CHANGED
|
@@ -2,12 +2,6 @@ import type { RouteLocationRaw } from "vue-router";
|
|
|
2
2
|
import type { ScopeOptions, SubjectRef } from "../modules/access/entities";
|
|
3
3
|
import type { PermissionCatalogue } from "./catalogue";
|
|
4
4
|
import type { RoleConstraint } from "./constraints";
|
|
5
|
-
/** Where an application serves the access routes of a subject kind other than `user`: `${base}/:id/{access,scopes,bindings,bindings/:binding_id}`, and the roles it may be given. */
|
|
6
|
-
export interface SubjectRoutes {
|
|
7
|
-
readonly base: string;
|
|
8
|
-
readonly bindable: string;
|
|
9
|
-
}
|
|
10
|
-
export type AccessSubjects = Readonly<Partial<Record<Exclude<SubjectRef["kind"], "user">, SubjectRoutes>>>;
|
|
11
5
|
/** What the access screens need from the feature that installed them. */
|
|
12
6
|
export interface AccessContext {
|
|
13
7
|
readonly catalogue: PermissionCatalogue;
|
|
@@ -18,7 +12,6 @@ export interface AccessContext {
|
|
|
18
12
|
readonly constraints: readonly RoleConstraint[];
|
|
19
13
|
/** The i18n key of the sentence for each of the application's own role-problem codes (`authz.invalid`). */
|
|
20
14
|
readonly problems: Readonly<Record<string, string>>;
|
|
21
|
-
readonly subjects: AccessSubjects;
|
|
22
15
|
readonly scopes: ((subject: SubjectRef, signal: AbortSignal) => Promise<ScopeOptions>) | null;
|
|
23
16
|
}
|
|
24
17
|
export declare const accessContextKey: import("vue").InjectionKey<AccessContext>, useAccessContext: () => AccessContext;
|
|
@@ -29,4 +22,6 @@ export declare const accessPermissions: {
|
|
|
29
22
|
readonly deleteRoles: "iam.role:delete";
|
|
30
23
|
readonly viewAccess: "iam.user:view";
|
|
31
24
|
readonly manageBindings: "iam.user:manage";
|
|
25
|
+
/** The same for the roles of a service account (`kind: "service"`). */
|
|
26
|
+
readonly manageServiceBindings: "iam.serviceaccount:manage";
|
|
32
27
|
};
|
package/dist/access/feature.d.ts
CHANGED
|
@@ -4,7 +4,6 @@ import type { ScopeOptions, SubjectRef } from "../modules/access/entities";
|
|
|
4
4
|
import type { Destination } from "../router";
|
|
5
5
|
import type { PermissionCatalogue } from "./catalogue";
|
|
6
6
|
import type { RoleConstraint } from "./constraints";
|
|
7
|
-
import { type AccessSubjects } from "./context";
|
|
8
7
|
export interface AccessFeatureOptions {
|
|
9
8
|
/**
|
|
10
9
|
* The application's permissions: the `permissions` object go-core's `authzts` writes (`frontend/generated/permissions.ts`).
|
|
@@ -31,13 +30,6 @@ export interface AccessFeatureOptions {
|
|
|
31
30
|
* accessFeature({ catalogue, problems: { vehicle_kind_conflict: "roles.problems.vehicle_kind_conflict" } })
|
|
32
31
|
*/
|
|
33
32
|
problems?: Readonly<Record<string, string>>;
|
|
34
|
-
/**
|
|
35
|
-
* Where the routes of a subject kind other than `user` are (go-core leaves them to the application); the paths answer in go-core's own wire.
|
|
36
|
-
* `PersonAccess` and the add dialog with such a subject read and write there. Without an entry the subject is refused, never sent to the user routes.
|
|
37
|
-
*
|
|
38
|
-
* accessFeature({ catalogue, subjects: { service: { base: "/v1/iam/service-accounts", bindable: "/v1/iam/service-accounts/bindable-roles" } } })
|
|
39
|
-
*/
|
|
40
|
-
subjects?: AccessSubjects;
|
|
41
33
|
/** The backend's navigation destination that opens the roles list. Without it the application links to `accessPages.roles` itself. */
|
|
42
34
|
destination?: Destination;
|
|
43
35
|
}
|