@wssto2/vue-core 0.4.23 → 0.4.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/{Activity-Cu_mAn_m.js → Activity-CI-l_OFl.js} +1 -1
  3. package/dist/{Changes-DW_3-MwX.js → Changes-BdR0R20V.js} +1 -1
  4. package/dist/{DeadLetters-CpcMccCc.js → DeadLetters-CRTeoZS1.js} +1 -1
  5. package/dist/FormErrors.vue_vue_type_script_setup_true_lang-DGOSc-PS.js +295 -0
  6. package/dist/{FormView.vue_vue_type_script_setup_true_lang-CbvMRBOc.js → FormView.vue_vue_type_script_setup_true_lang-BUrYkjmF.js} +1 -1
  7. package/dist/{General-Dbc3qDRz.js → General-hdmVP72B.js} +3 -3
  8. package/dist/{NewRolePage-DPHFJ0I8.js → NewRolePage-BPeKasOp.js} +2 -2
  9. package/dist/PhotoViewer.vue_vue_type_script_setup_true_lang-CY5EZiyK.js +433 -0
  10. package/dist/{ProfilePage-Cc7eiyV2.js → ProfilePage-Dq9lcO5O.js} +3 -3
  11. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-2fpYYCXj.js → RoleEditor.vue_vue_type_script_setup_true_lang-B6g2760V.js} +3 -3
  12. package/dist/{RolePage-C0jmkQkO.js → RolePage-BYH-0fVI.js} +3 -3
  13. package/dist/{RolesPage-eb4gqxdW.js → RolesPage-BRm5xDw7.js} +1 -1
  14. package/dist/{Sessions-DSDcj8Yd.js → Sessions-B1eKG_I2.js} +1 -1
  15. package/dist/{SettingsPage-BF7MW1GH.js → SettingsPage-0P38Ty4w.js} +3 -3
  16. package/dist/{SignIn-BR8-RVIk.js → SignIn-Dp8Ji0_r.js} +1 -1
  17. package/dist/{SignInPage-Dcws582A.js → SignInPage-CiStJboK.js} +2 -2
  18. package/dist/{SignIns-3u7YgKqh.js → SignIns-Bo7R2Coi.js} +1 -1
  19. package/dist/{UserRecord-AtZIwCO9.js → UserRecord-DGq_PPy1.js} +3 -3
  20. package/dist/{UsersList-1IeQnvOL.js → UsersList-BulNu4aE.js} +3 -3
  21. package/dist/access/index.js +1 -1
  22. package/dist/form/CommandDialog.vue.d.ts +6 -0
  23. package/dist/form/index.js +9 -9
  24. package/dist/form/useForm.d.ts +5 -1
  25. package/dist/form/useRecordDialog.d.ts +2 -2
  26. package/dist/identity/index.js +1 -1
  27. package/dist/{index--CxZ33h0.js → index-BmowiT1y.js} +12 -12
  28. package/dist/{index-Du3Ti2Zp.js → index-Yy28omu6.js} +4 -4
  29. package/dist/{index-DBTK_iMB.js → index-tnSTp0cM.js} +2 -2
  30. package/dist/index.d.ts +1 -1
  31. package/dist/index.js +1 -1
  32. package/dist/notifications/index.js +1 -1
  33. package/dist/overlay/PhotoViewer.vue.d.ts +4 -3
  34. package/dist/overlay/PhotoViewerAction.vue.d.ts +22 -0
  35. package/dist/overlay/index.d.ts +1 -0
  36. package/dist/overlay/index.js +47 -23
  37. package/dist/{status-QOGPjIHu.js → status-Bh3-Cg7o.js} +1 -1
  38. package/dist/styles.css +1 -1
  39. package/dist/{useCommand-CT1RF_IB.js → useCommand-Cj-APj-P.js} +53 -50
  40. package/dist/{useResourceForm-CQuniKhd.js → useResourceForm-tGYTfKhH.js} +1 -1
  41. package/package.json +1 -1
  42. package/dist/FormErrors.vue_vue_type_script_setup_true_lang-4WQz-TYS.js +0 -286
  43. package/dist/PhotoViewer.vue_vue_type_script_setup_true_lang-QPCW3Xi6.js +0 -411
package/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.25 — 2026-10-12
4
+
5
+ The photo viewer's actions on a phone. From ARV cutover g (wave 1, the vehicle gallery). Two items, one commit each.
6
+
7
+ ### Requires
8
+ - go-core unchanged: **`v1.7.0`**; **`vue` 3.5.19 or later**.
9
+
10
+ ### Added
11
+ - **`PhotoViewerAction`** (`@wssto2/vue-core/overlay`): the content of `PhotoViewer`'s `#actions` slot. `label`, `tone?: "critical"` (the destructive one, in the danger colour), `disabled?` (stays focusable, `aria-disabled`, emits nothing); emits `select`. A 44 px text button made for the viewer's dark surface, contrast-tested. ARV: `VehiclePhotoGallery.vue` replaces its hand-styled `<button>`s ("Postavi kao naslovnu", "Obriši") and their `text-xs` with two `PhotoViewerAction`s, `data-test` kept.
12
+
13
+ ### Changes to existing behaviour
14
+ - **On a phone the `#actions` move to a bottom toolbar.** Where `useCompactPresentation()` is true the slot renders once, in a centred toolbar (`data-test="photo-toolbar"`, safe-area aware) between the photo and the thumbnail strip; the header keeps the counter, rotate, download and close. On a wide screen nothing changes (the actions stay in the header). No `#actions`, no toolbar. ARV: the vehicle gallery's viewer (390 px: the counter is no longer cut to "2." and the actions no longer shrink).
15
+ - **The counter is never cut.** In the header only the title truncates; the counter stays whole.
16
+ - **Pinned by tests that were updated:** none.
17
+
18
+ ## 0.4.24 — 2026-10-11
19
+
20
+ A refusal in the server's words, a dialog that only shows, a new record with a start. From ARV cutover e8a (both lanes). Three items, one commit each.
21
+
22
+ ### Requires
23
+ - go-core unchanged: **`v1.7.0`**; **`vue` 3.5.19 or later**.
24
+
25
+ ### Added
26
+ - **`CommandDialog` `editable` (default `true`).** `:editable="false"` is the same dialog for someone who may only look: the fields read as `FormGroup :editable="false"` shows them (the dialog provides the form's read mode, so every `FormGroup` and field inside inherits it), there is no primary action and no `#actions`, the dismiss button says "Close" (Zatvori) instead of "Cancel", and closing never asks about a discard. One component, one body. ARV: lane B `OrderModal.vue` / `RepairCostModal.vue` drop the second `Modal` and `OrderFormBody.vue` / `RepairCostFormBody.vue` copy; lane A `LocaleModal.vue` (Jezik aplikacije) uses `:editable="false"` instead of `confirm-disabled`.
27
+ - **`useRecordDialog().create(initial?: Partial<Values>)`.** The values are laid over the defaults and become the baseline, as `edit(row)` does with `toValues(row)`: the untouched dialog is not dirty and closes without asking. ARV: lane B Narudžba `create({ category })` instead of setting it after `create()`.
28
+
29
+ ### Changes to existing behaviour
30
+ - **A refused submit says the reason.** The default sentence of `form.failure.message` (every `useForm`, `useCommand`, `useRecordDialog`, `EditorPage`, step form) is no longer one generic sentence per kind. For a request failure (an `ApiError`) it is, in order:
31
+ - **the error has a reason code** (any kind): the client's text for the code (`errors.<code>`, `core.errors.<code>` with the error's params), then the server's already translated sentence; with neither, the per-kind sentence below;
32
+ - **`invalid`, the refusal names no field** (a business rule in a 422): the server's sentence, else the per-kind one; **`invalid` that names fields**: "Check the marked fields and try again." (as before); a validator refusal: the same (as before);
33
+ - **`failed` with a 4xx other than 401/403/409/422** (404, 429, 400…): the library's "not found" / "too many requests", else the server's sentence;
34
+ - **`forbidden`, `conflict`, `unauthorized`, `offline` without a reason code**, **a server fault (5xx, unreadable) and anything thrown that is not an `ApiError`**: the library's per-kind sentence, as before ("You do not have permission…", "The record changed while you were editing it.", "The changes could not be saved. Try again."…);
35
+ - **`refresh`**: "Your changes were saved, but the updated record could not be loaded…", as before.
36
+ The app's `describeError` (`createApplication({ describeError })`) is asked first, for any error (its older HTTP client's included), and wins when it has a sentence; `failureMessage` still overrides all of it, returning `undefined` for the default. ARV: `features/vehicles/composables/useFailureSentence.ts` and its nine callers can go: its `refresh` / `invalid`-with-fields / `invalid`-without-fields cases are the default now, and for `forbidden`, `conflict`, `offline` it said `describeError`'s sentence ("You are not authorized to perform this action.", "The record changed or already exists…") where the default says the form wording; a caller that must keep `describeError`'s words for those keeps an override. Lane A needs no workaround, and its refusal pins can be exact again.
37
+ - **Pinned by tests that were updated:** none; no test pinned an old default (existing tests that read "changed while you were editing" and "could not be saved" still hold).
38
+
3
39
  ## 0.4.23 — 2026-10-11
4
40
 
5
41
  Test and tooling only; no change to the library's code or behaviour. Two items, one commit each.
@@ -6,7 +6,7 @@ import { u as O } from "./format-D8X4zsx6.js";
6
6
  import { _ as U } from "./DateField.vue_vue_type_script_setup_true_lang-CpuH0WTl.js";
7
7
  import { _ as T } from "./FormGroup.vue_vue_type_script_setup_true_lang-DSwSRsA5.js";
8
8
  import { e as z } from "./control-B4SdblL6.js";
9
- import { P as G, c as H, i as J } from "./index--CxZ33h0.js";
9
+ import { P as G, c as H, i as J } from "./index-BmowiT1y.js";
10
10
  import { u as K } from "./platform-q3cjODLx.js";
11
11
  import { b as M } from "./routeResource-DlTsGTg_.js";
12
12
  import { _ as Q } from "./AsyncSection.vue_vue_type_script_setup_true_lang-Blj6KgCr.js";
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as k, computed as N, openBlock as n, createBlock as u, unref as a, withCtx as g, createElementBlock as p, Fragment as _, renderList as $, createElementVNode as i, toDisplayString as h, createCommentVNode as C, ref as x, watch as b, createVNode as y } from "vue";
2
2
  import { useI18n as E } from "vue-i18n";
3
- import { P as V, i as R } from "./index--CxZ33h0.js";
3
+ import { P as V, i as R } from "./index-BmowiT1y.js";
4
4
  import { u as S } from "./platform-q3cjODLx.js";
5
5
  import { b as B } from "./routeResource-DlTsGTg_.js";
6
6
  import { _ as F } from "./AsyncSection.vue_vue_type_script_setup_true_lang-Blj6KgCr.js";
@@ -4,7 +4,7 @@ import { a as k } from "./error-CD7x0Jrz.js";
4
4
  import { u as V, _ as N } from "./CollectionPage.vue_vue_type_script_setup_true_lang-BNM_cbXa.js";
5
5
  import { u as P } from "./describeError-B-NMa--w.js";
6
6
  import { u as I } from "./format-D8X4zsx6.js";
7
- import { e as a, R as O } from "./index-DBTK_iMB.js";
7
+ import { e as a, R as O } from "./index-tnSTp0cM.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-M7V-AVwR.js";
@@ -0,0 +1,295 @@
1
+ var K = Object.defineProperty;
2
+ var ee = (n, e, r) => e in n ? K(n, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : n[e] = r;
3
+ var M = (n, e, r) => ee(n, typeof e != "symbol" ? e + "" : e, r);
4
+ import { shallowRef as S, computed as A, toRaw as te, reactive as re, ref as G, watch as se, nextTick as ne, toValue as ae, defineComponent as le, unref as w, openBlock as y, createBlock as ie, withCtx as ue, createElementBlock as k, toDisplayString as _, createCommentVNode as E, Fragment as U, createElementVNode as H, normalizeClass as oe, renderList as ce, createTextVNode as q } from "vue";
5
+ import { useI18n as J } from "vue-i18n";
6
+ import { i as fe, a as F } from "./error-CD7x0Jrz.js";
7
+ import { d as de, u as me, a as ve } from "./describeError-B-NMa--w.js";
8
+ import { _ as he } from "./Banner.vue_vue_type_script_setup_true_lang-DSStj_5z.js";
9
+ class ge {
10
+ constructor() {
11
+ M(this, "messages", S({}));
12
+ /** How many fields have a message. */
13
+ M(this, "count", A(() => Object.keys(this.messages.value).length));
14
+ }
15
+ /** Replaces everything. Empty lists are dropped. */
16
+ set(e) {
17
+ this.messages.value = Object.fromEntries(Object.entries(e).filter(([, r]) => r.length > 0).map(([r, a]) => [r, [...a]]));
18
+ }
19
+ add(e, r) {
20
+ this.messages.value = { ...this.messages.value, [e]: [...this.messages.value[e] ?? [], r] };
21
+ }
22
+ /** Clears one field (and its nested paths), or everything. */
23
+ clear(e) {
24
+ if (e === void 0) {
25
+ this.count.value > 0 && (this.messages.value = {});
26
+ return;
27
+ }
28
+ const r = Object.fromEntries(Object.entries(this.messages.value).filter(([a]) => a !== e && !a.startsWith(`${e}.`)));
29
+ Object.keys(r).length !== this.count.value && (this.messages.value = r);
30
+ }
31
+ /** Whether the field, or a value inside it (`items.0.quantity` for `items`), has a message. */
32
+ has(e) {
33
+ return this.first(e) !== void 0 || Object.keys(this.messages.value).some((r) => r.startsWith(`${e}.`));
34
+ }
35
+ first(e) {
36
+ return this.messages.value[e]?.[0];
37
+ }
38
+ all() {
39
+ return this.messages.value;
40
+ }
41
+ }
42
+ function d(n) {
43
+ const e = te(n);
44
+ return e === null || typeof e != "object" ? e : e instanceof Date ? new Date(e.getTime()) : typeof Blob < "u" && e instanceof Blob ? e : Array.isArray(e) ? e.map(d) : Object.fromEntries(Object.entries(e).map(([r, a]) => [r, d(a)]));
45
+ }
46
+ function T(n, e) {
47
+ const r = n, a = e;
48
+ if (Object.is(r, a)) return !0;
49
+ if (r === null || a === null || typeof r != "object" || typeof a != "object") return !1;
50
+ if (r instanceof Date || a instanceof Date) return r instanceof Date && a instanceof Date && r.getTime() === a.getTime();
51
+ if (Array.isArray(r) || Array.isArray(a))
52
+ return Array.isArray(r) && Array.isArray(a) && r.length === a.length && r.every((l, c) => T(l, a[c]));
53
+ if (typeof Blob < "u" && (r instanceof Blob || a instanceof Blob)) return !1;
54
+ const f = (l) => Object.keys(l).filter((c) => l[c] !== void 0), g = f(r);
55
+ return g.length === f(a).length && g.every((l) => T(r[l], a[l]));
56
+ }
57
+ function L(n) {
58
+ const e = {};
59
+ for (const r of n) {
60
+ const a = r.path.map(String).join(".");
61
+ (e[a] ?? (e[a] = [])).push(r.message);
62
+ }
63
+ return e;
64
+ }
65
+ const be = (n) => n.split(".")[0] ?? n, Y = () => typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `${Date.now()}-${Math.random().toString(36).slice(2)}`;
66
+ function Fe(n) {
67
+ const { t: e } = J(), r = n.describeFieldError ?? de(), a = me(), f = ve(), l = re(d(typeof n.defaults == "function" ? n.defaults() : n.defaults)), c = S(d(l)), o = new ge(), j = G(!1), b = S(null), Q = A(() => !T(l, c.value));
68
+ let D = null, C = Y();
69
+ function x(t) {
70
+ const s = l;
71
+ for (const i of Object.keys(s)) i in t || delete s[i];
72
+ Object.assign(s, d(t));
73
+ }
74
+ function z() {
75
+ o.clear(), b.value = null;
76
+ }
77
+ function X(t, s) {
78
+ const i = e(`core.form.failure.${t}`);
79
+ if (t === "refresh") return i;
80
+ const u = f?.(s);
81
+ if (u !== void 0) return u;
82
+ if (!F(s) || t === "invalid" && Object.keys(s.fields).length > 0) return i;
83
+ const p = t === "invalid" || t === "failed" && s.status !== null && s.status < 500;
84
+ return s.code ? a(s, { fallback: i }) : p && s.message ? a(s) : i;
85
+ }
86
+ function B(t, s) {
87
+ const i = F(s) ? s.requestId : null, u = n.failureMessage?.(t, s) ?? X(t, s);
88
+ return b.value = { kind: t, message: u, requestId: i, error: s };
89
+ }
90
+ function V(t, s = !1) {
91
+ const { serverField: i } = n, u = r, p = s && i ? Object.entries(t).map(([m, v]) => [i(m), v]) : Object.entries(t);
92
+ o.set(Object.fromEntries(u ? p.map(([m, v]) => [m, v.map(($) => u($, m))]) : p));
93
+ }
94
+ function N() {
95
+ if (o.clear(), !n.validator)
96
+ return b.value = null, d(l);
97
+ const t = n.validator.safeParse(d(l));
98
+ return t.success ? (b.value = null, t.data) : (V(L(t.error.issues)), null);
99
+ }
100
+ function P(t) {
101
+ if (o.clear(), !n.validator) return !0;
102
+ const s = n.validator.safeParse(d(l));
103
+ if (s.success) return !0;
104
+ const i = Object.fromEntries(Object.entries(L(s.error.issues)).filter(([u]) => t.includes(be(u))));
105
+ return V(i), Object.keys(i).length === 0;
106
+ }
107
+ function Z(t) {
108
+ if (!F(t)) return "failed";
109
+ switch (t.kind) {
110
+ case "validation":
111
+ return "invalid";
112
+ case "conflict":
113
+ return "conflict";
114
+ case "forbidden":
115
+ return "forbidden";
116
+ case "unauthorized":
117
+ return "unauthorized";
118
+ case "network":
119
+ return "offline";
120
+ default:
121
+ return "failed";
122
+ }
123
+ }
124
+ async function R(t, s, i, u) {
125
+ if (D) return D;
126
+ const m = (async () => {
127
+ b.value = null;
128
+ const v = t();
129
+ if (v === null) return { status: "failed", failure: B("invalid", null) };
130
+ const $ = d(l);
131
+ let O;
132
+ j.value = !0;
133
+ try {
134
+ O = await s(v, { idempotencyKey: C });
135
+ } catch (h) {
136
+ if (j.value = !1, fe(h)) return { status: "aborted" };
137
+ const W = Z(h);
138
+ return W === "invalid" && F(h) && V(h.fields, !0), { status: "failed", failure: B(W, h) };
139
+ }
140
+ const I = u?.hydrateFrom?.(O) ?? null;
141
+ I ? (x(I), c.value = d(I), o.clear()) : i(O, $);
142
+ try {
143
+ await u?.refresh?.(O);
144
+ } catch (h) {
145
+ return B("refresh", h), { status: "saved-refresh-failed", value: O, error: h };
146
+ } finally {
147
+ j.value = !1;
148
+ }
149
+ return { status: "saved", value: O };
150
+ })().finally(() => {
151
+ D = null, C = Y();
152
+ });
153
+ return D = m, m;
154
+ }
155
+ return {
156
+ values: l,
157
+ errors: o,
158
+ dirty: Q,
159
+ submitting: j,
160
+ failure: b,
161
+ bind(t) {
162
+ return {
163
+ get modelValue() {
164
+ return l[t];
165
+ },
166
+ "onUpdate:modelValue"(s) {
167
+ l[t] = s, o.clear(t);
168
+ },
169
+ get error() {
170
+ return o.first(t);
171
+ },
172
+ "data-field-key": t
173
+ };
174
+ },
175
+ bindMonthYear(t, s) {
176
+ const i = l;
177
+ return {
178
+ get month() {
179
+ return i[t] ?? null;
180
+ },
181
+ get year() {
182
+ return i[s] ?? null;
183
+ },
184
+ "onUpdate:month"(u) {
185
+ i[t] = u, o.clear(t);
186
+ },
187
+ "onUpdate:year"(u) {
188
+ i[s] = u, o.clear(s);
189
+ },
190
+ get error() {
191
+ return o.first(t) ?? o.first(s);
192
+ },
193
+ "data-field-key": `${t} ${s}`
194
+ };
195
+ },
196
+ hydrate(t) {
197
+ x(t), c.value = d(t), z();
198
+ },
199
+ reset() {
200
+ x(c.value), z();
201
+ },
202
+ markClean() {
203
+ c.value = d(l);
204
+ },
205
+ validate: N,
206
+ check: P,
207
+ submit: (t, s) => R(N, t, (i, u) => c.value = u, s),
208
+ submitFields: (t, s, i) => R(
209
+ () => P(t) ? Object.fromEntries(t.map((u) => [u, d(l[u])])) : null,
210
+ s,
211
+ (u, p) => {
212
+ const m = d(c.value);
213
+ for (const v of t) m[v] = d(p[v]);
214
+ c.value = m;
215
+ },
216
+ i
217
+ ),
218
+ dismissFailure() {
219
+ b.value = null;
220
+ }
221
+ };
222
+ }
223
+ function pe(n) {
224
+ const e = G([]);
225
+ return se(
226
+ () => n.form.errors.all(),
227
+ async (r) => {
228
+ await ne();
229
+ const a = ae(n.root) ?? document, f = new Set([...a.querySelectorAll("[data-field-key]")].flatMap((l) => (l.getAttribute("data-field-key") ?? "").split(/\s+/))), g = (l) => l.split(".").some((c, o, j) => f.has(j.slice(0, o + 1).join(".")));
230
+ e.value = Object.entries(r).flatMap(([l, c]) => c[0] && !g(l) ? [{ field: l, message: c[0] }] : []);
231
+ },
232
+ { immediate: !0 }
233
+ ), A(() => e.value);
234
+ }
235
+ const ye = {
236
+ key: 0,
237
+ class: "text-footnote font-medium"
238
+ }, je = {
239
+ class: "mt-1 list-inside list-disc text-footnote",
240
+ "data-test": "form-errors-hidden"
241
+ }, Oe = {
242
+ key: 2,
243
+ class: "mt-1 text-caption text-content-muted"
244
+ }, xe = /* @__PURE__ */ le({
245
+ __name: "FormErrors",
246
+ props: {
247
+ form: {},
248
+ label: { type: Function, default: (n) => n },
249
+ scope: { default: null }
250
+ },
251
+ setup(n) {
252
+ const e = n, { t: r } = J(), a = pe({
253
+ get form() {
254
+ return e.form;
255
+ },
256
+ root: () => e.scope
257
+ }), f = A(() => e.form.failure.value), g = A(() => f.value?.kind === "conflict" || f.value?.kind === "refresh" ? "warning" : "critical");
258
+ return (l, c) => f.value || w(a).length ? (y(), ie(he, {
259
+ key: 0,
260
+ tone: f.value ? g.value : "warning",
261
+ "data-test": "form-errors"
262
+ }, {
263
+ default: ue(() => [
264
+ f.value ? (y(), k("p", ye, _(f.value.message), 1)) : E("", !0),
265
+ w(a).length ? (y(), k(U, { key: 1 }, [
266
+ H("p", {
267
+ class: oe(["text-footnote", f.value ? "mt-1" : "font-medium"])
268
+ }, _(w(r)("core.form.errors.hidden_title")), 3),
269
+ H("ul", je, [
270
+ (y(!0), k(U, null, ce(w(a), (o) => (y(), k("li", {
271
+ key: o.field
272
+ }, [
273
+ q(_(o.field ? e.label(o.field) : ""), 1),
274
+ o.field ? (y(), k(U, { key: 0 }, [
275
+ q(": ")
276
+ ], 64)) : E("", !0),
277
+ q(_(o.message), 1)
278
+ ]))), 128))
279
+ ])
280
+ ], 64)) : E("", !0),
281
+ f.value?.requestId ? (y(), k("p", Oe, _(w(r)("core.form.errors.request", { id: f.value.requestId })), 1)) : E("", !0)
282
+ ]),
283
+ _: 1
284
+ }, 8, ["tone"])) : E("", !0);
285
+ }
286
+ });
287
+ export {
288
+ ge as E,
289
+ xe as _,
290
+ pe as a,
291
+ d as c,
292
+ be as f,
293
+ T as s,
294
+ Fe as u
295
+ };
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as n, provide as f, computed as s, useTemplateRef as u, openBlock as t, createElementBlock as p, withModifiers as c, createBlock as d, createCommentVNode as b, renderSlot as _ } from "vue";
2
2
  import { d as v } from "./control-B4SdblL6.js";
3
- import { _ as k } from "./FormErrors.vue_vue_type_script_setup_true_lang-4WQz-TYS.js";
3
+ import { _ as k } from "./FormErrors.vue_vue_type_script_setup_true_lang-DGOSc-PS.js";
4
4
  const x = /* @__PURE__ */ n({
5
5
  __name: "FormView",
6
6
  props: {
@@ -2,13 +2,13 @@ import { defineComponent as R, computed as N, openBlock as i, createElementBlock
2
2
  import { useI18n as V } from "vue-i18n";
3
3
  import { RouterLink as B } from "vue-router";
4
4
  import { u as E } from "./format-D8X4zsx6.js";
5
- import { u as T } from "./useResourceForm-CQuniKhd.js";
5
+ import { u as T } from "./useResourceForm-tGYTfKhH.js";
6
6
  import { _ as h } from "./FormGroup.vue_vue_type_script_setup_true_lang-DSwSRsA5.js";
7
- import { _ as F } from "./FormView.vue_vue_type_script_setup_true_lang-CbvMRBOc.js";
7
+ import { _ as F } from "./FormView.vue_vue_type_script_setup_true_lang-BUrYkjmF.js";
8
8
  import { _ as L } from "./SelectField.vue_vue_type_script_setup_true_lang-C3FbRQW7.js";
9
9
  import { _ as f } from "./TextField.vue_vue_type_script_setup_true_lang-CP2WeU36.js";
10
10
  import { u as A } from "./useSaveChrome-7huA3FzR.js";
11
- import { P as D, b as G, i as I } from "./index--CxZ33h0.js";
11
+ import { P as D, b as G, i as I } from "./index-BmowiT1y.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-DlTsGTg_.js";
@@ -4,8 +4,8 @@ import { useRoute as k, useRouter as R } from "vue-router";
4
4
  import { a as $ } from "./AdaptivePageShell.vue_vue_type_script_setup_true_lang-CxU9aNRQ.js";
5
5
  import { _ as b } from "./AsyncSection.vue_vue_type_script_setup_true_lang-Blj6KgCr.js";
6
6
  import { u as g } from "./useLoad-M7V-AVwR.js";
7
- import { a as x, c as u } from "./index-Du3Ti2Zp.js";
8
- import { _ as P } from "./RoleEditor.vue_vue_type_script_setup_true_lang-2fpYYCXj.js";
7
+ import { a as x, c as u } from "./index-Yy28omu6.js";
8
+ import { _ as P } from "./RoleEditor.vue_vue_type_script_setup_true_lang-B6g2760V.js";
9
9
  const V = /* @__PURE__ */ _({
10
10
  __name: "NewRolePage",
11
11
  setup(h) {