@wssto2/vue-core 0.4.14 → 0.4.15

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 (87) hide show
  1. package/dist/{ActionRow.vue_vue_type_script_setup_true_lang-LlfIPWsJ.js → ActionRow.vue_vue_type_script_setup_true_lang-CkvS5W6K.js} +1 -1
  2. package/dist/{Activity-BdSvn0GP.js → Activity-4q26REYj.js} +6 -6
  3. package/dist/{Changes-BQO--N9F.js → Changes-CKIuGF8O.js} +5 -5
  4. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-DkpFEHUw.js → CollectionPage.vue_vue_type_script_setup_true_lang-B17cUOzj.js} +2 -2
  5. package/dist/{DateField.vue_vue_type_script_setup_true_lang-GVasv8ao.js → DateField.vue_vue_type_script_setup_true_lang-DehwWm78.js} +17 -16
  6. package/dist/{DeadLetters-OmeiADEi.js → DeadLetters-DPGcQOz1.js} +4 -4
  7. package/dist/FormErrors.vue_vue_type_script_setup_true_lang-DWcVKZM3.js +285 -0
  8. package/dist/{FormGroup.vue_vue_type_script_setup_true_lang-DG2zdG_a.js → FormGroup.vue_vue_type_script_setup_true_lang-noYI9QMk.js} +1 -1
  9. package/dist/{FormView.vue_vue_type_script_setup_true_lang-cr0xNDXP.js → FormView.vue_vue_type_script_setup_true_lang-BcIbTMHN.js} +2 -2
  10. package/dist/{General-CBwFLiKQ.js → General-CUA9b3ML.js} +10 -10
  11. package/dist/{NewRolePage-CblUW2gA.js → NewRolePage-DBfCvDWA.js} +3 -3
  12. package/dist/NumberField.vue_vue_type_script_setup_true_lang-Dm6FfJ2T.js +126 -0
  13. package/dist/{ProfilePage-BOoDDbmB.js → ProfilePage-On-eAiJ-.js} +41 -41
  14. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-BCE5yrwy.js → RoleEditor.vue_vue_type_script_setup_true_lang-fvAf3rQm.js} +44 -44
  15. package/dist/{RolePage-xDsFL_eC.js → RolePage-B8oul55j.js} +8 -8
  16. package/dist/{RolesPage-C39wsF6X.js → RolesPage-DsXVivdj.js} +5 -5
  17. package/dist/{SegmentedField.vue_vue_type_script_setup_true_lang-BMqWlpsL.js → SegmentedField.vue_vue_type_script_setup_true_lang-B2d55hrh.js} +7 -6
  18. package/dist/SelectField.vue_vue_type_script_setup_true_lang-DedKLLQK.js +443 -0
  19. package/dist/{SessionList.vue_vue_type_script_setup_true_lang-D4k5QeWS.js → SessionList.vue_vue_type_script_setup_true_lang-CirlMdHb.js} +2 -2
  20. package/dist/{Sessions-m_i4aTfw.js → Sessions-BTyXDEuY.js} +4 -4
  21. package/dist/{SettingsPage-ktKvQQnE.js → SettingsPage-DHTmMgif.js} +9 -9
  22. package/dist/{SignIn-CkoEixY4.js → SignIn-DU4DE2wj.js} +6 -6
  23. package/dist/{SignInPage-DVcpFz3G.js → SignInPage-BA22kyOp.js} +3 -3
  24. package/dist/{SignIns-BnVAtncZ.js → SignIns-C8QAZBaL.js} +3 -3
  25. package/dist/{SwitchField.vue_vue_type_script_setup_true_lang-CM8yp9JQ.js → SwitchField.vue_vue_type_script_setup_true_lang-B2Z2hy_h.js} +11 -10
  26. package/dist/{TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js → TextField.vue_vue_type_script_setup_true_lang-nqnGG7Zc.js} +27 -26
  27. package/dist/{TextareaField.vue_vue_type_script_setup_true_lang-CqAWfABZ.js → TextareaField.vue_vue_type_script_setup_true_lang-BgIQyYtf.js} +9 -8
  28. package/dist/{TimeField.vue_vue_type_script_setup_true_lang-DWfAUlnz.js → TimeField.vue_vue_type_script_setup_true_lang-Dr0h-V_8.js} +25 -24
  29. package/dist/{UserRecord-Cg69_mbU.js → UserRecord-D1BNmYp9.js} +10 -10
  30. package/dist/{UsersList-BFmBDGs7.js → UsersList-ltx3G23-.js} +8 -8
  31. package/dist/access/index.js +1 -1
  32. package/dist/app/application.d.ts +7 -1
  33. package/dist/app/index.js +93 -93
  34. package/dist/collection/index.js +1 -1
  35. package/dist/control-CX9BG2UB.js +320 -0
  36. package/dist/{describeError-CvGmajU0.js → describeError-B-NMa--w.js} +12 -7
  37. package/dist/fieldMessages-DV6sESpn.js +25 -0
  38. package/dist/form/DateField.vue.d.ts +1 -0
  39. package/dist/form/DateTimeField.vue.d.ts +1 -0
  40. package/dist/form/Field.vue.d.ts +1 -0
  41. package/dist/form/FileField.vue.d.ts +1 -0
  42. package/dist/form/FormErrors.vue.d.ts +1 -1
  43. package/dist/form/FormRow.vue.d.ts +3 -0
  44. package/dist/form/I18nField.vue.d.ts +1 -0
  45. package/dist/form/MoneyField.vue.d.ts +1 -0
  46. package/dist/form/MonthYearField.vue.d.ts +1 -0
  47. package/dist/form/NumberField.vue.d.ts +5 -0
  48. package/dist/form/PhotoField.vue.d.ts +1 -0
  49. package/dist/form/SelectField.vue.d.ts +5 -6
  50. package/dist/form/SwitchField.vue.d.ts +1 -0
  51. package/dist/form/TextField.vue.d.ts +1 -0
  52. package/dist/form/TextareaField.vue.d.ts +1 -0
  53. package/dist/form/TimeField.vue.d.ts +1 -0
  54. package/dist/form/field.d.ts +3 -0
  55. package/dist/form/index.d.ts +2 -0
  56. package/dist/form/index.js +469 -456
  57. package/dist/form/useForm.d.ts +2 -2
  58. package/dist/form/useHiddenFieldErrors.d.ts +23 -0
  59. package/dist/form/useSaveChrome.d.ts +8 -3
  60. package/dist/i18n/describeError.d.ts +8 -0
  61. package/dist/i18n/index.d.ts +2 -2
  62. package/dist/i18n/index.js +3 -2
  63. package/dist/identity/fieldMessages.d.ts +1 -1
  64. package/dist/identity/index.js +1 -1
  65. package/dist/{index-B416VXmR.js → index-BCw_Ki6z.js} +2 -2
  66. package/dist/{index-KcCoCfr-.js → index-Chh4z9xW.js} +10 -10
  67. package/dist/{index-RNF5-9uf.js → index-DwdVrW6q.js} +15 -15
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.js +1 -1
  70. package/dist/notifications/index.js +1 -1
  71. package/dist/phone/PhoneField.vue.d.ts +1 -0
  72. package/dist/phone/index.js +66 -65
  73. package/dist/resource/index.js +1 -1
  74. package/dist/{routeResource-BwEFXzIX.js → routeResource-DlTsGTg_.js} +1 -1
  75. package/dist/state/index.js +1 -1
  76. package/dist/{status-OZUHZpWl.js → status-cWCAMAmW.js} +1 -1
  77. package/dist/{useCommand-BkONMn3X.js → useCommand-B-N6HJOz.js} +1 -1
  78. package/dist/{useLoad-DuEsLECT.js → useLoad-M7V-AVwR.js} +1 -1
  79. package/dist/{useResourceForm-D1hIpwW5.js → useResourceForm-CP2lCwmD.js} +1 -1
  80. package/dist/useSaveChrome-7huA3FzR.js +26 -0
  81. package/package.json +1 -1
  82. package/dist/FormErrors.vue_vue_type_script_setup_true_lang-BQb7wLT0.js +0 -276
  83. package/dist/NumberField.vue_vue_type_script_setup_true_lang-C7N5nq0P.js +0 -113
  84. package/dist/SelectField.vue_vue_type_script_setup_true_lang-BJoAkBo2.js +0 -437
  85. package/dist/control-7EP4tjYy.js +0 -313
  86. package/dist/fieldMessages-D_dpSe19.js +0 -25
  87. package/dist/useSaveChrome-DuWm0Czf.js +0 -25
@@ -1,10 +1,11 @@
1
- import { defineComponent as p, useModel as b, computed as w, openBlock as v, createBlock as g, mergeProps as y, unref as a, withCtx as _, createElementVNode as t, renderSlot as k, normalizeClass as l, normalizeStyle as z, toDisplayString as B, mergeModels as S, mergeDefaults as x } from "vue";
1
+ import { defineComponent as p, useModel as b, computed as w, openBlock as v, createBlock as y, mergeProps as g, unref as a, withCtx as _, createElementVNode as t, renderSlot as k, normalizeClass as i, normalizeStyle as B, toDisplayString as z, mergeModels as S, mergeDefaults as x } from "vue";
2
2
  import { useI18n as C } from "vue-i18n";
3
- import { u as M, _ as V, f as D, b as E } from "./control-7EP4tjYy.js";
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__ */ p({
3
+ import { u as M, _ as V, f as D, b as E } from "./control-CX9BG2UB.js";
4
+ const F = { class: "flex items-center gap-2" }, I = ["id", "aria-checked", "aria-label", "aria-describedby", "aria-invalid", "disabled"], P = { class: "sr-only" }, R = /* @__PURE__ */ p({
5
5
  __name: "SwitchField",
6
6
  props: /* @__PURE__ */ S(/* @__PURE__ */ x({
7
7
  label: {},
8
+ labelHidden: { type: Boolean },
8
9
  hint: {},
9
10
  error: {},
10
11
  required: { type: Boolean },
@@ -20,7 +21,7 @@ const F = { class: "flex items-center gap-2" }, I = ["id", "aria-checked", "aria
20
21
  }),
21
22
  emits: ["update:modelValue"],
22
23
  setup(s) {
23
- const o = s, e = b(s, "modelValue"), { t: i } = C(), { editable: r } = M(o), n = {
24
+ const o = s, e = b(s, "modelValue"), { t: l } = C(), { editable: r } = M(o), n = {
24
25
  sm: { "--switch-w": "1.75rem", "--switch-h": "1rem" },
25
26
  md: { "--switch-w": "var(--app-switch-width)", "--switch-h": "var(--app-switch-height)" },
26
27
  lg: { "--switch-w": "3.1875rem", "--switch-h": "1.9375rem" }
@@ -28,7 +29,7 @@ const F = { class: "flex items-center gap-2" }, I = ["id", "aria-checked", "aria
28
29
  function c() {
29
30
  !o.disabled && r.value && (e.value = !e.value);
30
31
  }
31
- return (u, $) => (v(), g(V, y(a(D)(o), {
32
+ return (u, $) => (v(), y(V, g(a(D)(o), {
32
33
  value: e.value,
33
34
  "row-layout": "setting"
34
35
  }), {
@@ -44,14 +45,14 @@ const F = { class: "flex items-center gap-2" }, I = ["id", "aria-checked", "aria
44
45
  "aria-describedby": h,
45
46
  "aria-invalid": f || void 0,
46
47
  disabled: o.disabled,
47
- style: z(d.value),
48
- class: l(["hit-target relative inline-flex h-(--switch-h) w-(--switch-w) shrink-0 cursor-pointer rounded-full transition-colors duration-motion-fast ease-motion-standard focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus disabled:cursor-not-allowed disabled:opacity-45", e.value ? "bg-control-on" : "bg-fill-strong"]),
48
+ style: B(d.value),
49
+ class: i(["hit-target relative inline-flex h-(--switch-h) w-(--switch-w) shrink-0 cursor-pointer rounded-full transition-colors duration-motion-fast ease-motion-standard focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus disabled:cursor-not-allowed disabled:opacity-45", e.value ? "bg-control-on" : "bg-fill-strong"]),
49
50
  onClick: c
50
51
  }, [
51
52
  t("span", {
52
- class: l(["pointer-events-none absolute left-0.5 top-0.5 size-[calc(var(--switch-h)-0.25rem)] rounded-full bg-white shadow-knob transition-transform duration-motion-normal ease-motion-standard", e.value ? "translate-x-[calc(var(--switch-w)-var(--switch-h))]" : ""])
53
+ class: i(["pointer-events-none absolute left-0.5 top-0.5 size-[calc(var(--switch-h)-0.25rem)] rounded-full bg-white shadow-knob transition-transform duration-motion-normal ease-motion-standard", e.value ? "translate-x-[calc(var(--switch-w)-var(--switch-h))]" : ""])
53
54
  }, null, 2),
54
- t("span", P, B(e.value ? a(i)("core.form.yes") : a(i)("core.form.no")), 1)
55
+ t("span", P, z(e.value ? a(l)("core.form.yes") : a(l)("core.form.no")), 1)
55
56
  ], 14, I)
56
57
  ])
57
58
  ]),
@@ -60,5 +61,5 @@ const F = { class: "flex items-center gap-2" }, I = ["id", "aria-checked", "aria
60
61
  }
61
62
  });
62
63
  export {
63
- Z as _
64
+ R as _
64
65
  };
@@ -1,18 +1,18 @@
1
- import { defineComponent as H, useTemplateRef as P, computed as x, watch as Y, nextTick as Z, openBlock as n, createElementBlock as i, withModifiers as ee, normalizeStyle as te, unref as s, createElementVNode as m, toDisplayString as r, createCommentVNode as d, Fragment as E, renderList as oe, normalizeClass as q, createBlock as z, createTextVNode as F, useModel as se, ref as ne, mergeProps as ae, withCtx as ie, withDirectives as le, vModelDynamic as re, mergeModels as I, mergeDefaults as ce } from "vue";
1
+ import { defineComponent as I, useTemplateRef as P, computed as y, watch as Y, nextTick as Z, openBlock as n, createElementBlock as i, withModifiers as ee, normalizeStyle as te, unref as s, createElementVNode as m, toDisplayString as r, createCommentVNode as d, Fragment as E, renderList as oe, normalizeClass as q, createBlock as z, createTextVNode as F, useModel as se, ref as ne, mergeProps as ae, withCtx as ie, withDirectives as le, vModelDynamic as re, mergeModels as H, mergeDefaults as ce } from "vue";
2
2
  import { useI18n as K } from "vue-i18n";
3
3
  import { b as ue } from "./controlSurface-t7OEFESJ.js";
4
- import { a as de, c as pe, _ as me, f as fe, b as he } from "./control-7EP4tjYy.js";
4
+ import { a as de, c as pe, _ as me, f as fe, b as he } from "./control-CX9BG2UB.js";
5
5
  import { _ as ve } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
6
6
  import { u as ge } from "./anchored-Cj4--8dT.js";
7
- import { l as O, m as xe, u as ye, c as be } from "./suggestions-BxMm6MQA.js";
7
+ import { l as O, m as ye, u as xe, c as be } from "./suggestions-BxMm6MQA.js";
8
8
  const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-1.5" }, we = {
9
9
  key: 0,
10
10
  class: "px-2.5 pb-1 pt-1.5 text-caption font-semibold uppercase text-content-disabled",
11
11
  role: "presentation"
12
- }, $e = ["id", "aria-selected", "aria-disabled", "onMouseenter", "onClick"], Me = { class: "min-w-0 flex-1" }, qe = { class: "block truncate text-body text-content-strong" }, Le = {
12
+ }, $e = ["id", "aria-selected", "aria-disabled", "onMouseenter", "onClick"], Me = { class: "min-w-0 flex-1" }, qe = { class: "block truncate text-body text-content-strong" }, Be = {
13
13
  key: 0,
14
14
  class: "font-semibold"
15
- }, Be = {
15
+ }, Le = {
16
16
  key: 0,
17
17
  class: "block truncate text-footnote text-content-muted"
18
18
  }, Ce = {
@@ -30,7 +30,7 @@ const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-
30
30
  key: 0,
31
31
  class: "mx-1.5 mb-1.5 mt-0.5 border-t border-border-separator px-2.5 pb-0.5 pt-2 text-caption text-content-muted compact:hidden",
32
32
  "aria-hidden": "true"
33
- }, Ee = /* @__PURE__ */ H({
33
+ }, Ee = /* @__PURE__ */ I({
34
34
  __name: "SuggestionList",
35
35
  props: {
36
36
  id: {},
@@ -45,8 +45,8 @@ const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-
45
45
  hint: {}
46
46
  },
47
47
  emits: ["pick", "hover"],
48
- setup(w, { emit: L }) {
49
- const o = w, t = L, { t: c } = K(), b = P("panel"), _ = x(() => O(o.open, o.items.length, o.status, o.emptyMessage)), k = x(() => o.status === "loading"), f = (h) => xe(h.label, o.query), { style: B } = ge(b, {
48
+ setup(w, { emit: B }) {
49
+ const o = w, t = B, { t: c } = K(), b = P("panel"), _ = y(() => O(o.open, o.items.length, o.status, o.emptyMessage)), k = y(() => o.status === "loading"), f = (h) => ye(h.label, o.query), { style: L } = ge(b, {
50
50
  reference: () => o.anchor,
51
51
  placement: () => "bottom-start",
52
52
  offset: 4,
@@ -62,7 +62,7 @@ const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-
62
62
  ref: b,
63
63
  role: "listbox",
64
64
  "aria-busy": k.value || void 0,
65
- style: te(s(B)),
65
+ style: te(s(L)),
66
66
  "data-test": "suggestion-list",
67
67
  class: "z-1000 flex flex-col overflow-hidden rounded-menu bg-surface-overlay shadow-float",
68
68
  onMousedown: v[0] || (v[0] = ee(() => {
@@ -93,11 +93,11 @@ const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-
93
93
  F(r(a.label), 1)
94
94
  ], 64)) : (n(), i(E, { key: 1 }, [
95
95
  F(r(f(a).before), 1),
96
- f(a).match ? (n(), i("strong", Le, r(f(a).match), 1)) : d("", !0),
96
+ f(a).match ? (n(), i("strong", Be, r(f(a).match), 1)) : d("", !0),
97
97
  F(r(f(a).after), 1)
98
98
  ], 64))
99
99
  ]),
100
- a.description ? (n(), i("span", Be, r(a.description), 1)) : d("", !0)
100
+ a.description ? (n(), i("span", Le, r(a.description), 1)) : d("", !0)
101
101
  ])
102
102
  ], 42, $e))), 128)) : o.status === "loading" ? (n(), i("p", Ce, r(s(c)("core.form.select.loading")), 1)) : o.status === "failed" ? (n(), i("p", Se, r(s(c)("core.form.select.failed")), 1)) : (n(), i("p", De, r(s(c)("core.form.select.no_matches")), 1))
103
103
  ]),
@@ -110,10 +110,11 @@ const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-
110
110
  }, Pe = { class: "relative min-w-0 flex-1" }, ze = ["id", "type", "name", "placeholder", "maxlength", "autocomplete", "disabled", "required", "aria-required", "aria-invalid", "aria-describedby", "role", "aria-autocomplete", "aria-expanded", "aria-controls", "aria-activedescendant"], Ae = { class: "invisible" }, Ne = { class: "text-content-disabled" }, Re = {
111
111
  key: 1,
112
112
  class: "shrink-0 text-footnote text-content-muted"
113
- }, Ue = /* @__PURE__ */ H({
113
+ }, Ue = /* @__PURE__ */ I({
114
114
  __name: "TextField",
115
- props: /* @__PURE__ */ I(/* @__PURE__ */ ce({
115
+ props: /* @__PURE__ */ H(/* @__PURE__ */ ce({
116
116
  label: {},
117
+ labelHidden: { type: Boolean },
117
118
  hint: {},
118
119
  error: {},
119
120
  required: { type: Boolean },
@@ -154,13 +155,13 @@ const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-
154
155
  modelValue: { default: "" },
155
156
  modelModifiers: {}
156
157
  }),
157
- emits: /* @__PURE__ */ I(["picked"], ["update:modelValue"]),
158
- setup(w, { expose: L, emit: o }) {
159
- const t = w, c = se(w, "modelValue"), b = o, _ = P("input"), k = P("anchor"), f = !!de(), B = pe("text", () => t.error ? "error" : t.disabled ? "locked" : "rest"), h = x(() => f ? ue(t.width) : "w-full"), { t: v } = K(), a = (e) => typeof e == "string" ? { value: e, label: e } : { value: e.text, label: e.text, ...e.detail !== void 0 ? { description: e.detail } : {} }, g = x(() => {
158
+ emits: /* @__PURE__ */ H(["picked"], ["update:modelValue"]),
159
+ setup(w, { expose: B, emit: o }) {
160
+ const t = w, c = se(w, "modelValue"), b = o, _ = P("input"), k = P("anchor"), f = !!de(), L = pe("text", () => t.error ? "error" : t.disabled ? "locked" : "rest"), h = y(() => f ? ue(t.width) : "w-full"), { t: v } = K(), a = (e) => typeof e == "string" ? { value: e, label: e } : { value: e.text, label: e.text, ...e.detail !== void 0 ? { description: e.detail } : {} }, g = y(() => {
160
161
  const e = t.suggestions;
161
162
  if (e)
162
- return typeof e == "function" ? async (p, y) => (await e(p, y)).map(a) : e.map(a);
163
- }), l = x(() => g.value !== void 0), u = ye({
163
+ return typeof e == "function" ? async (p, x) => (await e(p, x)).map(a) : e.map(a);
164
+ }), l = y(() => g.value !== void 0), u = xe({
164
165
  source: () => g.value,
165
166
  minLength: () => t.suggestionsMinLength,
166
167
  debounce: () => t.suggestionsDebounce,
@@ -170,7 +171,7 @@ const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-
170
171
  }), { items: C, open: S, status: A, highlighted: N, showingRecent: R } = u, T = ne(!0), D = () => {
171
172
  const e = _.value;
172
173
  T.value = !e || e.selectionStart === e.value.length && e.selectionEnd === e.value.length;
173
- }, $ = x(() => l.value && S.value && !R.value && T.value && u.current.value ? be(c.value, u.current.value.label) : ""), W = x(() => O(S.value, C.value.length, A.value, !1));
174
+ }, $ = y(() => l.value && S.value && !R.value && T.value && u.current.value ? be(c.value, u.current.value.label) : ""), W = y(() => O(S.value, C.value.length, A.value, !1));
174
175
  function G(e) {
175
176
  D(), l.value && u.ask(e.target.value);
176
177
  }
@@ -187,22 +188,22 @@ const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-
187
188
  const J = (e) => {
188
189
  l.value && u.keydown(e, { pick: V, enterNeedsMove: !0, complete: j });
189
190
  };
190
- return L({ focus: () => _.value?.focus() }), (e, p) => (n(), z(me, ae(s(fe)(t), {
191
+ return B({ focus: () => _.value?.focus() }), (e, p) => (n(), z(me, ae(s(fe)(t), {
191
192
  value: c.value,
192
193
  prefix: t.prefix,
193
194
  suffix: t.suffix,
194
195
  "value-style": t.mono ? "mono" : void 0
195
196
  }), {
196
- default: ie(({ id: y, describedby: Q, invalid: X }) => [
197
+ default: ie(({ id: x, describedby: Q, invalid: X }) => [
197
198
  m("div", {
198
199
  ref_key: "anchor",
199
200
  ref: k,
200
- class: q(["flex items-center gap-1.5", [s(B), h.value]])
201
+ class: q(["flex items-center gap-1.5", [s(L), h.value]])
201
202
  }, [
202
203
  t.prefix ? (n(), i("span", Fe, r(t.prefix), 1)) : d("", !0),
203
204
  m("div", Pe, [
204
205
  le(m("input", {
205
- id: y,
206
+ id: x,
206
207
  ref_key: "input",
207
208
  ref: _,
208
209
  "onUpdate:modelValue": p[0] || (p[0] = (M) => c.value = M),
@@ -219,8 +220,8 @@ const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-
219
220
  role: l.value ? "combobox" : void 0,
220
221
  "aria-autocomplete": l.value ? "both" : void 0,
221
222
  "aria-expanded": l.value ? W.value : void 0,
222
- "aria-controls": l.value ? `${y}-list` : void 0,
223
- "aria-activedescendant": l.value && W.value && s(C).length > 0 ? `${y}-option-${s(N)}` : void 0,
223
+ "aria-controls": l.value ? `${x}-list` : void 0,
224
+ "aria-activedescendant": l.value && W.value && s(C).length > 0 ? `${x}-option-${s(N)}` : void 0,
224
225
  class: q(["block w-full min-w-0 border-0 bg-transparent px-0 py-1 text-body text-content-strong placeholder:text-content-disabled focus:outline-none focus:ring-0 disabled:cursor-not-allowed", [t.mono ? "font-mono" : "", f && !l.value ? "compact:text-right" : ""]]),
225
226
  onInput: G,
226
227
  onKeyup: D,
@@ -245,7 +246,7 @@ const _e = ["id", "aria-busy"], ke = { class: "min-h-0 flex-1 overflow-y-auto p-
245
246
  ], 2),
246
247
  l.value ? (n(), z(Ee, {
247
248
  key: 0,
248
- id: y,
249
+ id: x,
249
250
  anchor: k.value,
250
251
  open: s(S),
251
252
  items: s(C),
@@ -1,13 +1,14 @@
1
1
  import { defineComponent as k, useModel as _, useTemplateRef as B, computed as l, openBlock as d, createBlock as q, mergeProps as C, unref as i, withCtx as V, createElementVNode as u, normalizeClass as c, withDirectives as L, vModelText as M, createElementBlock as D, toDisplayString as z, createCommentVNode as E, mergeModels as F, mergeDefaults as P } from "vue";
2
2
  import { u as R } from "./mediaQuery-CygcXmFW.js";
3
- import { a as T, u as $, c as N, _ as S, f as j, b as G } from "./control-7EP4tjYy.js";
4
- const U = ["id", "name", "rows", "placeholder", "maxlength", "autocomplete", "disabled", "required", "aria-required", "aria-invalid", "aria-describedby"], A = {
3
+ import { a as T, u as $, c as N, _ as S, f as j, b as G } from "./control-CX9BG2UB.js";
4
+ const H = ["id", "name", "rows", "placeholder", "maxlength", "autocomplete", "disabled", "required", "aria-required", "aria-invalid", "aria-describedby"], U = {
5
5
  key: 0,
6
6
  class: "mt-1 self-end text-footnote tabular-nums text-content-muted"
7
7
  }, O = /* @__PURE__ */ k({
8
8
  __name: "TextareaField",
9
9
  props: /* @__PURE__ */ F(/* @__PURE__ */ P({
10
10
  label: {},
11
+ labelHidden: { type: Boolean },
11
12
  hint: {},
12
13
  error: {},
13
14
  required: { type: Boolean },
@@ -28,12 +29,12 @@ const U = ["id", "name", "rows", "placeholder", "maxlength", "autocomplete", "di
28
29
  emits: ["update:modelValue"],
29
30
  setup(r, { expose: m }) {
30
31
  const e = r, a = _(r, "modelValue"), s = B("area"), p = !!T(), f = R(), { editable: v } = $(e), t = l(() => p && !e.stacked && !f.value && v.value && !!e.label), o = l(() => e.maxLength ? `${a.value.length} / ${e.maxLength}` : void 0), b = l(() => t.value && o.value ? [e.hint, o.value].filter(Boolean).join(" · ") : e.hint), h = N("area", () => e.error ? "error" : e.disabled ? "locked" : "rest");
31
- return m({ focus: () => s.value?.focus() }), (H, n) => (d(), q(S, C({ ...i(j)(e), hint: b.value }, {
32
+ return m({ focus: () => s.value?.focus() }), (A, n) => (d(), q(S, C({ ...i(j)(e), hint: b.value }, {
32
33
  value: a.value,
33
34
  "row-layout": t.value ? "entry" : "stacked",
34
35
  "row-label-align": "top"
35
36
  }), {
36
- default: V(({ id: x, describedby: g, invalid: y }) => [
37
+ default: V(({ id: x, describedby: y, invalid: g }) => [
37
38
  u("div", {
38
39
  class: c(["w-full", i(h)])
39
40
  }, [
@@ -50,14 +51,14 @@ const U = ["id", "name", "rows", "placeholder", "maxlength", "autocomplete", "di
50
51
  disabled: e.disabled,
51
52
  required: e.required,
52
53
  "aria-required": e.required || void 0,
53
- "aria-invalid": y || void 0,
54
- "aria-describedby": g,
54
+ "aria-invalid": g || void 0,
55
+ "aria-describedby": y,
55
56
  class: c(["block w-full border-0 bg-transparent px-0 py-1 text-body text-content-strong placeholder:text-content-disabled focus:outline-none focus:ring-0 disabled:cursor-not-allowed", e.disabled ? "resize-none" : "resize-y"])
56
- }, null, 10, U), [
57
+ }, null, 10, H), [
57
58
  [M, a.value]
58
59
  ])
59
60
  ], 2),
60
- !t.value && o.value ? (d(), D("p", A, z(o.value), 1)) : E("", !0)
61
+ !t.value && o.value ? (d(), D("p", U, z(o.value), 1)) : E("", !0)
61
62
  ]),
62
63
  _: 1
63
64
  }, 16, ["value", "row-layout"]));
@@ -1,11 +1,11 @@
1
- import { computed as u, defineComponent as K, useModel as W, useTemplateRef as v, openBlock as m, createBlock as E, mergeProps as w, unref as t, withCtx as b, createElementBlock as x, Fragment as N, createVNode as d, createTextVNode as j, toDisplayString as G, createCommentVNode as P, createElementVNode as h, normalizeClass as H, mergeModels as J, mergeDefaults as O, nextTick as U } from "vue";
1
+ import { computed as u, defineComponent as H, useModel as K, useTemplateRef as v, openBlock as m, createBlock as E, mergeProps as w, unref as t, withCtx as b, createElementBlock as x, Fragment as N, createVNode as d, createTextVNode as W, toDisplayString as j, createCommentVNode as P, createElementVNode as h, normalizeClass as G, mergeModels as J, mergeDefaults as O, nextTick as U } from "vue";
2
2
  import { useI18n as L } from "vue-i18n";
3
3
  import { _ as X } from "./DateButton.vue_vue_type_script_setup_true_lang-EcqrfWKz.js";
4
4
  import { u as Y } from "./format-B8mJm946.js";
5
5
  import { _ as Z } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
6
6
  import { u as ee } from "./mediaQuery-CygcXmFW.js";
7
7
  import { _ as te } from "./Popover.vue_vue_type_script_setup_true_lang-Dx-tDhNE.js";
8
- import { c as oe, _ as re, f as ae, b as le } from "./control-7EP4tjYy.js";
8
+ import { c as oe, _ as ae, f as re, b as le } from "./control-CX9BG2UB.js";
9
9
  import { d as se, r as ie, t as z, p as ne, u as ue, a as me, i as F, _ as de, b as ce, c as pe } from "./useTypedEntry-aTfPBAhw.js";
10
10
  function fe(i) {
11
11
  const { t: n } = L(), e = u(() => [n("core.form.time.words.now").toLowerCase(), "now"]);
@@ -13,16 +13,17 @@ function fe(i) {
13
13
  placeholder: u(() => n("core.form.time.placeholder")),
14
14
  parse(o) {
15
15
  if (e.value.includes(o.trim().toLowerCase())) return { value: z(i()) };
16
- const a = ne(o, i());
17
- return "time" in a ? { value: a.time } : { error: a.error === "step" ? n("core.form.time.step", { step: i() }) : n("core.form.time.invalid") };
16
+ const r = ne(o, i());
17
+ return "time" in r ? { value: r.time } : { error: r.error === "step" ? n("core.form.time.step", { step: i() }) : n("core.form.time.invalid") };
18
18
  },
19
- shortcuts: (o) => (o ?? se).map((a) => ie(a, n("core.form.time.now"), z(i())))
19
+ shortcuts: (o) => (o ?? se).map((r) => ie(r, n("core.form.time.now"), z(i())))
20
20
  };
21
21
  }
22
- const ve = ["id", "name", "value", "placeholder", "disabled", "required", "aria-required", "aria-invalid", "aria-describedby"], be = ["aria-label", "onClick"], Ce = /* @__PURE__ */ K({
22
+ const ve = ["id", "name", "value", "placeholder", "disabled", "required", "aria-required", "aria-invalid", "aria-describedby"], be = ["aria-label", "onClick"], Ce = /* @__PURE__ */ H({
23
23
  __name: "TimeField",
24
24
  props: /* @__PURE__ */ J(/* @__PURE__ */ O({
25
25
  label: {},
26
+ labelHidden: { type: Boolean },
26
27
  hint: {},
27
28
  error: {},
28
29
  required: { type: Boolean },
@@ -39,31 +40,31 @@ const ve = ["id", "name", "value", "placeholder", "disabled", "required", "aria-
39
40
  }),
40
41
  emits: ["update:modelValue"],
41
42
  setup(i, { expose: n }) {
42
- const e = i, o = W(i, "modelValue"), { t: a } = L(), M = Y(), I = ee(), T = v("input"), c = v("popover"), g = v("panel"), q = v("sheet"), k = fe(() => e.minuteStep), l = ue({ model: o, display: (r) => r, parse: k.parse }), C = u(() => k.shortcuts(e.quickTimes)), V = u(() => e.error || l.message.value), Q = oe("date", () => V.value ? "error" : e.disabled ? "locked" : "rest"), R = u(() => {
43
- const r = me(o.value);
44
- return r ? M.time(new Date(2e3, 0, 1, r.hour, r.minute)) : null;
43
+ const e = i, o = K(i, "modelValue"), { t: r } = L(), M = Y(), I = ee(), T = v("input"), c = v("popover"), g = v("panel"), q = v("sheet"), k = fe(() => e.minuteStep), l = ue({ model: o, display: (a) => a, parse: k.parse }), C = u(() => k.shortcuts(e.quickTimes)), V = u(() => e.error || l.message.value), Q = oe("date", () => V.value ? "error" : e.disabled ? "locked" : "rest"), R = u(() => {
44
+ const a = me(o.value);
45
+ return a ? M.time(new Date(2e3, 0, 1, a.hour, a.minute)) : null;
45
46
  }), $ = u(() => F(l.typed.value) ? l.typed.value : F(o.value) ? o.value : null);
46
- async function y(r) {
47
- e.disabled || (c.value?.present(), r && (await U(), await U(), g.value?.querySelector("[role=listbox]")?.focus()));
47
+ async function y(a) {
48
+ e.disabled || (c.value?.present(), a && (await U(), await U(), g.value?.querySelector("[role=listbox]")?.focus()));
48
49
  }
49
- function A(r) {
50
- r.key === "Enter" ? (l.commit(), c.value?.dismiss()) : r.key === "ArrowDown" && (r.preventDefault(), y(!0));
50
+ function A(a) {
51
+ a.key === "Enter" ? (l.commit(), c.value?.dismiss()) : a.key === "ArrowDown" && (a.preventDefault(), y(!0));
51
52
  }
52
- return n({ focus: () => T.value?.focus() }), (r, s) => (m(), E(re, w({ ...t(ae)(e), error: V.value }, {
53
+ return n({ focus: () => T.value?.focus() }), (a, s) => (m(), E(ae, w({ ...t(re)(e), error: V.value }, {
53
54
  value: R.value,
54
55
  "value-style": "numeric"
55
56
  }), {
56
- default: b(({ id: S, describedby: B, invalid: D }) => [
57
+ default: b(({ id: B, describedby: S, invalid: D }) => [
57
58
  t(I) ? (m(), x(N, { key: 0 }, [
58
- d(X, w({ id: S, "aria-describedby": B }, {
59
+ d(X, w({ id: B, "aria-describedby": S }, {
59
60
  disabled: e.disabled,
60
61
  invalid: D,
61
- placeholder: t(a)("core.form.select.choose"),
62
+ placeholder: t(r)("core.form.select.choose"),
62
63
  onClick: s[0] || (s[0] = (p) => q.value?.present())
63
64
  }), {
64
65
  default: b(() => [
65
66
  o.value ? (m(), x(N, { key: 0 }, [
66
- j(G(o.value), 1)
67
+ W(j(o.value), 1)
67
68
  ], 64)) : P("", !0)
68
69
  ]),
69
70
  _: 1
@@ -71,7 +72,7 @@ const ve = ["id", "name", "value", "placeholder", "disabled", "required", "aria-
71
72
  d(de, {
72
73
  ref_key: "sheet",
73
74
  ref: q,
74
- title: e.label ?? t(a)("core.form.time.label"),
75
+ title: e.label ?? t(r)("core.form.time.label"),
75
76
  mode: "time",
76
77
  "model-value": o.value,
77
78
  shortcuts: C.value,
@@ -83,7 +84,7 @@ const ve = ["id", "name", "value", "placeholder", "disabled", "required", "aria-
83
84
  key: 1,
84
85
  ref_key: "popover",
85
86
  ref: c,
86
- label: e.label ?? t(a)("core.form.time.label"),
87
+ label: e.label ?? t(r)("core.form.time.label"),
87
88
  width: "sm",
88
89
  placement: "bottom-start",
89
90
  arrow: !1,
@@ -91,10 +92,10 @@ const ve = ["id", "name", "value", "placeholder", "disabled", "required", "aria-
91
92
  }, {
92
93
  trigger: b(({ attrs: p, presented: _ }) => [
93
94
  h("div", {
94
- class: H(["inline-flex max-w-full items-center gap-2", t(Q)])
95
+ class: G(["inline-flex max-w-full items-center gap-2", t(Q)])
95
96
  }, [
96
97
  h("input", w({
97
- id: S,
98
+ id: B,
98
99
  ref_key: "input",
99
100
  ref: T
100
101
  }, p, {
@@ -109,7 +110,7 @@ const ve = ["id", "name", "value", "placeholder", "disabled", "required", "aria-
109
110
  required: e.required,
110
111
  "aria-required": e.required || void 0,
111
112
  "aria-invalid": D || void 0,
112
- "aria-describedby": B,
113
+ "aria-describedby": S,
113
114
  class: "block min-h-7 min-w-0 border-0 bg-transparent py-1 pl-2.5 text-body tabular-nums text-content-strong placeholder:text-content-disabled focus:outline-none focus:ring-0 disabled:cursor-not-allowed",
114
115
  onInput: s[1] || (s[1] = (f) => t(l).input(f.target.value)),
115
116
  onBlur: s[2] || (s[2] = (f) => t(l).commit()),
@@ -120,7 +121,7 @@ const ve = ["id", "name", "value", "placeholder", "disabled", "required", "aria-
120
121
  key: 0,
121
122
  type: "button",
122
123
  tabindex: "-1",
123
- "aria-label": t(a)("core.form.time.open"),
124
+ "aria-label": t(r)("core.form.time.open"),
124
125
  class: "mr-2 flex shrink-0 cursor-pointer items-center text-content-link",
125
126
  onClick: (f) => _ ? c.value?.dismiss() : y(!0)
126
127
  }, [
@@ -2,24 +2,24 @@ import { defineComponent as R, openBlock as q, createBlock as P, unref as e, wit
2
2
  import { useI18n as A } from "vue-i18n";
3
3
  import { a as F } from "./neighbors-DVN_cADL.js";
4
4
  import { _ as H } from "./Avatar.vue_vue_type_script_setup_true_lang-CFIheaSr.js";
5
- import { u as J } from "./describeError-CvGmajU0.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-RNF5-9uf.js";
5
+ import { u as J } from "./describeError-B-NMa--w.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-DwdVrW6q.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-D5Cnb4_O.js";
10
10
  import { u as E } from "./platform-q3cjODLx.js";
11
- import { a as te } from "./routeResource-BwEFXzIX.js";
11
+ import { a as te } from "./routeResource-DlTsGTg_.js";
12
12
  import { a as oe } from "./ResourcePage.vue_vue_type_script_setup_true_lang-Da0M-hen.js";
13
13
  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
- import { u as ie } from "./useLoad-DuEsLECT.js";
15
+ import { u as ie } from "./useLoad-M7V-AVwR.js";
16
16
  import { _ as V } from "./IconTile.vue_vue_type_script_setup_true_lang-_FXvaj93.js";
17
- import { _ as T } from "./FormGroup.vue_vue_type_script_setup_true_lang-DG2zdG_a.js";
18
- import { e as B } from "./control-7EP4tjYy.js";
19
- import { u as z, _ as K } from "./useCommand-BkONMn3X.js";
20
- import { u as U } from "./fieldMessages-D_dpSe19.js";
21
- import { u as ce, s as le } from "./status-OZUHZpWl.js";
22
- import { _ as M } from "./TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js";
17
+ import { _ as T } from "./FormGroup.vue_vue_type_script_setup_true_lang-noYI9QMk.js";
18
+ import { e as B } from "./control-CX9BG2UB.js";
19
+ import { u as z, _ as K } from "./useCommand-B-N6HJOz.js";
20
+ import { u as U } from "./fieldMessages-DV6sESpn.js";
21
+ import { u as ce, s as le } from "./status-cWCAMAmW.js";
22
+ import { _ as M } from "./TextField.vue_vue_type_script_setup_true_lang-nqnGG7Zc.js";
23
23
  const ue = /* @__PURE__ */ R({
24
24
  __name: "DeactivateDialog",
25
25
  props: {
@@ -1,21 +1,21 @@
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-DkpFEHUw.js";
4
+ import { u as P, _ as D } from "./CollectionPage.vue_vue_type_script_setup_true_lang-B17cUOzj.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-RNF5-9uf.js";
10
- import { U as j, u as H, s as J } from "./status-OZUHZpWl.js";
9
+ import { i as K, f as E, M as W } from "./index-DwdVrW6q.js";
10
+ import { U as j, u as H, s as J } from "./status-cWCAMAmW.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-DG2zdG_a.js";
14
- import { _ as Y } from "./SelectField.vue_vue_type_script_setup_true_lang-BJoAkBo2.js";
15
- import { _ as d } from "./TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js";
16
- import { u as Z, _ as ee } from "./useCommand-BkONMn3X.js";
13
+ import { _ as X } from "./FormGroup.vue_vue_type_script_setup_true_lang-noYI9QMk.js";
14
+ import { _ as Y } from "./SelectField.vue_vue_type_script_setup_true_lang-DedKLLQK.js";
15
+ import { _ as d } from "./TextField.vue_vue_type_script_setup_true_lang-nqnGG7Zc.js";
16
+ import { u as Z, _ as ee } from "./useCommand-B-N6HJOz.js";
17
17
  import { t as se } from "./toast-CqSDTWRX.js";
18
- import { u as te } from "./fieldMessages-D_dpSe19.js";
18
+ import { u as te } from "./fieldMessages-DV6sESpn.js";
19
19
  const oe = /* @__PURE__ */ U({
20
20
  __name: "NewUserDialog",
21
21
  emits: ["created"],
@@ -1,4 +1,4 @@
1
- import { _ as a, i as c, j as o, c as r, b as n, k as i, l as u, p as l, m as p, n as t, u as d, f as m } from "../index-KcCoCfr-.js";
1
+ import { _ as a, i as c, j as o, c as r, b as n, k as i, l as u, p as l, m as p, n as t, u as d, f as m } from "../index-Chh4z9xW.js";
2
2
  export {
3
3
  a as BindingRow,
4
4
  c as PersonAccess,
@@ -7,7 +7,7 @@ import { type IconSet } from "../icon";
7
7
  import { type Platform, type SessionSnapshot } from "../platform";
8
8
  import type { NavigationCatalogue } from "../router/navigation";
9
9
  import { type ApplicationEnvironment } from "./environment";
10
- import { type AppErrorDescriber } from "../i18n/describeError";
10
+ import { type AppErrorDescriber, type AppFieldErrorDescriber } from "../i18n/describeError";
11
11
  import type { Feature, ShellSlot } from "./feature";
12
12
  /** A shell that says which slots it renders, so a contribution to a slot it lacks fails at startup instead of vanishing. */
13
13
  export interface ShellDefinition {
@@ -100,6 +100,12 @@ export interface ApplicationOptions {
100
100
  * client's. Return `undefined` to leave an error to the library.
101
101
  */
102
102
  describeError?: AppErrorDescriber;
103
+ /**
104
+ * The application's one sentence for a field message the server sent (often a code or a translation key), for every form
105
+ * (`useForm`, `useResourceForm`, `useCommand`) that has no `describeFieldError` of its own; a form's own wins. Without either,
106
+ * messages show as sent.
107
+ */
108
+ describeFieldError?: AppFieldErrorDescriber;
103
109
  /** Called with every error the application catches (component errors, unhandled rejections, failed effects and loads). Default: `console.error`. */
104
110
  onError?: (report: ApplicationErrorReport) => void;
105
111
  }