@wssto2/vue-core 0.1.0 → 0.2.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.
Files changed (95) hide show
  1. package/README.md +20 -9
  2. package/dist/{AdaptivePageShell.vue_vue_type_script_setup_true_lang-CKghARkW.js → AdaptivePageShell.vue_vue_type_script_setup_true_lang-CeKK8_g5.js} +2 -2
  3. package/dist/{AlertDialog.vue_vue_type_script_setup_true_lang-BZb4qKXo.js → AlertDialog.vue_vue_type_script_setup_true_lang-e4hzkzg3.js} +1 -1
  4. package/dist/{AsyncSection.vue_vue_type_script_setup_true_lang-B82bl36A.js → AsyncSection.vue_vue_type_script_setup_true_lang-CWLB3xsR.js} +1 -1
  5. package/dist/Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js +51 -0
  6. package/dist/Button.vue_vue_type_script_setup_true_lang-B1eZgLae.js +182 -0
  7. package/dist/CountryFlag.vue_vue_type_script_setup_true_lang-Kry_vPPZ.js +299 -0
  8. package/dist/{DiscardChangesModal.vue_vue_type_script_setup_true_lang-Bx5O1RZJ.js → DiscardChangesModal.vue_vue_type_script_setup_true_lang-DyhYHRyz.js} +1 -1
  9. package/dist/{LeaveGuardRoot.vue_vue_type_script_setup_true_lang-DH6EB8br.js → LeaveGuardRoot.vue_vue_type_script_setup_true_lang-CvwoT1JF.js} +1 -1
  10. package/dist/{Menu.vue_vue_type_script_setup_true_lang-D44EHXQZ.js → Menu.vue_vue_type_script_setup_true_lang-CrMj6KPD.js} +1 -1
  11. package/dist/{Modal.vue_vue_type_script_setup_true_lang-DYQgaUtj.js → Modal.vue_vue_type_script_setup_true_lang-BQZM49gC.js} +138 -128
  12. package/dist/{PhotoViewer.vue_vue_type_script_setup_true_lang-DDVQXJRB.js → PhotoViewer.vue_vue_type_script_setup_true_lang-ElDizaW2.js} +1 -1
  13. package/dist/{SectionList.vue_vue_type_script_setup_true_lang-DGcKX_OJ.js → SectionList.vue_vue_type_script_setup_true_lang-L9ita_Kx.js} +2 -2
  14. package/dist/SelectField.vue_vue_type_script_setup_true_lang-DZTrU8NJ.js +661 -0
  15. package/dist/{Sheet.vue_vue_type_script_setup_true_lang-BLBD5ps8.js → Sheet.vue_vue_type_script_setup_true_lang-CtkJ-4e3.js} +1 -1
  16. package/dist/{Tooltip.vue_vue_type_script_setup_true_lang-BJWPVyfT.js → Tooltip.vue_vue_type_script_setup_true_lang-OOD_XNWx.js} +1 -1
  17. package/dist/app/application.d.ts +5 -0
  18. package/dist/app/environment.d.ts +2 -0
  19. package/dist/app/index.js +75 -72
  20. package/dist/button/index.d.ts +1 -1
  21. package/dist/button/index.js +5 -3
  22. package/dist/button/shortcut.d.ts +28 -2
  23. package/dist/collection/CollectionPage.vue.d.ts +1 -0
  24. package/dist/collection/CollectionRows.vue.d.ts +59 -0
  25. package/dist/collection/CollectionTable.vue.d.ts +1 -1
  26. package/dist/collection/DataTable.vue.d.ts +47 -0
  27. package/dist/collection/RowActions.vue.d.ts +19 -0
  28. package/dist/collection/columns.d.ts +2 -0
  29. package/dist/collection/index.d.ts +4 -2
  30. package/dist/collection/index.js +1752 -1610
  31. package/dist/collection/rowLayout.d.ts +10 -0
  32. package/dist/collection/slots.d.ts +6 -3
  33. package/dist/describeError-l5T9b8Uv.js +41 -0
  34. package/dist/dialogStack-DZZg55w0.js +31 -0
  35. package/dist/form/CommandDialog.vue.d.ts +12 -1
  36. package/dist/form/FormGroup.vue.d.ts +1 -1
  37. package/dist/form/MultiSelectField.vue.d.ts +4 -1
  38. package/dist/form/NumberField.vue.d.ts +6 -0
  39. package/dist/form/OptionList.vue.d.ts +6 -2
  40. package/dist/form/SelectField.vue.d.ts +4 -1
  41. package/dist/form/index.d.ts +2 -0
  42. package/dist/form/index.js +1940 -2008
  43. package/dist/form/suggestions.d.ts +11 -0
  44. package/dist/form/useOptions.d.ts +60 -0
  45. package/dist/i18n/describeError.d.ts +31 -0
  46. package/dist/i18n/index.d.ts +26 -0
  47. package/dist/i18n/index.js +22 -20
  48. package/dist/index.d.ts +1 -1
  49. package/dist/index.js +1 -1
  50. package/dist/internal/CountryFlag.vue.d.ts +10 -0
  51. package/dist/modal/Modal.vue.d.ts +4 -0
  52. package/dist/modal/ShortcutHelp.vue.d.ts +2 -0
  53. package/dist/modal/index.d.ts +2 -0
  54. package/dist/modal/index.js +64 -6
  55. package/dist/modal/placement.d.ts +22 -0
  56. package/dist/{options-CjSz2dQK.js → options-DAkBtYkI.js} +3 -3
  57. package/dist/overlay/Popover.vue.d.ts +3 -0
  58. package/dist/overlay/dialogStack.d.ts +9 -0
  59. package/dist/overlay/index.d.ts +1 -1
  60. package/dist/overlay/index.js +18 -17
  61. package/dist/page/index.js +4 -4
  62. package/dist/phone/index.js +247 -540
  63. package/dist/platform/AccessGate.vue.d.ts +50 -0
  64. package/dist/platform/index.d.ts +2 -0
  65. package/dist/platform/index.js +86 -66
  66. package/dist/resource/index.js +42 -42
  67. package/dist/shell/AccountMenuItem.vue.d.ts +3 -0
  68. package/dist/shell/NavigationList.vue.d.ts +1 -1
  69. package/dist/shell/index.js +406 -394
  70. package/dist/state/Badge.vue.d.ts +17 -10
  71. package/dist/state/hue.d.ts +8 -0
  72. package/dist/state/index.d.ts +2 -0
  73. package/dist/state/index.js +92 -56
  74. package/dist/state/useLoad.d.ts +41 -0
  75. package/dist/styles.css +1 -1
  76. package/dist/testing/app.d.ts +61 -0
  77. package/dist/testing/async.d.ts +12 -0
  78. package/dist/testing/collection.d.ts +18 -0
  79. package/dist/testing/format.d.ts +9 -0
  80. package/dist/testing/i18n.d.ts +16 -0
  81. package/dist/testing/index.d.ts +14 -0
  82. package/dist/testing/index.js +178 -0
  83. package/dist/testing/media.d.ts +23 -0
  84. package/dist/testing/platform.d.ts +40 -0
  85. package/dist/testing/transport.d.ts +40 -0
  86. package/dist/{toast-BTeX0r66.js → toast-DvrHQ6Ag.js} +45 -43
  87. package/dist/{useDialog-wmyNx2j_.js → useDialog-CXR3hN0G.js} +1 -1
  88. package/package.json +5 -1
  89. package/src/styles/theme.css +60 -0
  90. package/dist/Badge.vue_vue_type_script_setup_true_lang-DKc6ugmr.js +0 -31
  91. package/dist/Button.vue_vue_type_script_setup_true_lang-3f0emVNU.js +0 -141
  92. package/dist/SelectField.vue_vue_type_script_setup_true_lang-SyFWE33A.js +0 -422
  93. package/dist/dialogStack-DiTG1rZc.js +0 -26
  94. package/dist/phone/CountryFlag.vue.d.ts +0 -10
  95. /package/dist/{phone → internal}/flagLoaders.d.ts +0 -0
@@ -0,0 +1,661 @@
1
+ import { defineComponent as P, useModel as K, useTemplateRef as W, computed as $, ref as V, watch as R, openBlock as h, createBlock as T, mergeProps as U, unref as i, withCtx as B, createElementVNode as x, normalizeClass as S, createElementBlock as D, toDisplayString as L, createCommentVNode as A, mergeModels as J, mergeDefaults as Q, useId as re, nextTick as ie, createVNode as M, withDirectives as ue, vModelText as ce, Fragment as j, renderList as G, inject as de, shallowRef as X, onBeforeUnmount as fe, onScopeDispose as pe, createSlots as me, createTextVNode as ve } from "vue";
2
+ import { b as ge } from "./controlSurface-t7OEFESJ.js";
3
+ import { u as be } from "./format-B8mJm946.js";
4
+ import { u as Y, a as Z, _ as ee, b as te, c as le, g as he, m as ye, f as E } from "./options-DAkBtYkI.js";
5
+ import { useI18n as oe } from "vue-i18n";
6
+ import { _ as xe } from "./Button.vue_vue_type_script_setup_true_lang-B1eZgLae.js";
7
+ import { _ as N } from "./Icon.vue_vue_type_script_lang-DtC4_mkz.js";
8
+ import { u as ke } from "./mediaQuery-CygcXmFW.js";
9
+ import { _ as we } from "./Sheet.vue_vue_type_script_setup_true_lang-CtkJ-4e3.js";
10
+ import { _ as _e } from "./toast-DvrHQ6Ag.js";
11
+ import { a as $e } from "./error-Bb_dr_Ay.js";
12
+ function Ce(l) {
13
+ const t = l.number(1234.5, { minimumFractionDigits: 1, maximumFractionDigits: 1, useGrouping: !0 }), e = /^\d(\D)\d/.exec(t)?.[1] ?? "";
14
+ return { decimal: t.charAt(t.length - 2) || ".", group: e === "." || e === "," ? e : "" };
15
+ }
16
+ function De(l, t) {
17
+ const e = l.trim().startsWith("-"), o = l.replace(/[^\d.,]/g, "");
18
+ if (o === "") return e ? void 0 : null;
19
+ const r = [...o].filter((c) => c === "." || c === ",");
20
+ let u = o, s = "";
21
+ if (t.decimals > 0 && r.length > 0) {
22
+ const c = Math.max(o.lastIndexOf("."), o.lastIndexOf(",")), _ = o.charAt(c), q = o.slice(c + 1), k = o.includes(".") && o.includes(","), v = r.filter((y) => y === _).length > 1, b = !k && _ === t.group && q.length === 3;
23
+ (k || !v && !b) && (u = o.slice(0, c), s = q);
24
+ }
25
+ const f = (c) => c.replace(/\D/g, ""), n = +`${f(u) || "0"}.${f(s) || "0"}`;
26
+ if (!Number.isFinite(n)) return;
27
+ const m = Number(n.toFixed(t.decimals));
28
+ return e ? -m || 0 : m;
29
+ }
30
+ const Se = {
31
+ key: 0,
32
+ class: "shrink-0 text-footnote text-content-muted"
33
+ }, Ae = ["id", "value", "name", "placeholder", "disabled", "required", "aria-required", "aria-invalid", "aria-describedby"], Le = {
34
+ key: 1,
35
+ class: "shrink-0 text-footnote text-content-muted"
36
+ }, mt = /* @__PURE__ */ P({
37
+ __name: "NumberField",
38
+ props: /* @__PURE__ */ J(/* @__PURE__ */ Q({
39
+ label: {},
40
+ hint: {},
41
+ error: {},
42
+ required: { type: Boolean },
43
+ editable: { type: Boolean },
44
+ disabled: { type: Boolean },
45
+ lockedReason: {},
46
+ presentation: {},
47
+ name: {},
48
+ decimals: {},
49
+ negative: { type: Boolean },
50
+ grouping: { type: Boolean },
51
+ placeholder: {},
52
+ prefix: {},
53
+ suffix: {},
54
+ width: {}
55
+ }, { ...le, decimals: 0, negative: !1, grouping: !0, placeholder: void 0, prefix: void 0, suffix: void 0, width: "sm" }), {
56
+ modelValue: { default: null },
57
+ modelModifiers: {}
58
+ }),
59
+ emits: ["update:modelValue"],
60
+ setup(l, { expose: t }) {
61
+ const e = l, o = K(l, "modelValue"), r = be(), u = W("input"), s = !!Y(), f = Z("text", () => e.error ? "error" : e.disabled ? "locked" : "rest"), n = $(() => s ? ge(e.width) : "w-full"), m = $(() => Ce(r)), c = (a) => a === null ? "" : r.number(a, { minimumFractionDigits: e.decimals, maximumFractionDigits: e.decimals, useGrouping: e.grouping }), _ = (a) => a === null ? "" : String(a).replace(".", m.value.decimal), q = (a) => De(a, { decimals: e.decimals, group: e.grouping ? m.value.group : "" }), k = V(!1), v = V(c(o.value));
62
+ R(o, (a) => {
63
+ k.value ? q(v.value) !== a && (v.value = _(a)) : v.value = c(a);
64
+ }), R(() => [e.decimals, e.grouping, m.value.decimal], () => {
65
+ k.value || (v.value = c(o.value));
66
+ });
67
+ function b(a) {
68
+ const g = a.target;
69
+ let p = g.value.replace(/[^\d.,\-\s]/g, "");
70
+ e.negative ? p = p.replace(/(?!^)-/g, "") : p = p.replace(/-/g, ""), p !== g.value && (g.value = p), v.value = p;
71
+ const O = q(p);
72
+ O !== void 0 ? o.value = O : o.value = null;
73
+ }
74
+ function y() {
75
+ k.value = !0, v.value = _(o.value);
76
+ }
77
+ function C() {
78
+ k.value = !1, v.value = c(o.value);
79
+ }
80
+ return t({ focus: () => u.value?.focus() }), (a, g) => (h(), T(ee, U(i(te)(e), {
81
+ value: o.value === null ? null : c(o.value),
82
+ prefix: e.prefix,
83
+ suffix: e.suffix,
84
+ "value-style": "numeric"
85
+ }), {
86
+ default: B(({ id: p, describedby: O, invalid: I }) => [
87
+ x("div", {
88
+ class: S(["flex items-center gap-1.5", [i(f), n.value]])
89
+ }, [
90
+ e.prefix ? (h(), D("span", Se, L(e.prefix), 1)) : A("", !0),
91
+ x("input", {
92
+ id: p,
93
+ ref_key: "input",
94
+ ref: u,
95
+ value: v.value,
96
+ type: "text",
97
+ inputmode: "decimal",
98
+ autocomplete: "off",
99
+ name: e.name,
100
+ placeholder: e.placeholder,
101
+ disabled: e.disabled,
102
+ required: e.required,
103
+ "aria-required": e.required || void 0,
104
+ "aria-invalid": I || void 0,
105
+ "aria-describedby": O,
106
+ class: "block w-full min-w-0 border-0 bg-transparent px-0 py-1 text-right text-body tabular-nums text-content-strong placeholder:text-content-disabled focus:outline-none focus:ring-0 disabled:cursor-not-allowed",
107
+ onInput: b,
108
+ onFocus: y,
109
+ onBlur: C
110
+ }, null, 40, Ae),
111
+ e.suffix ? (h(), D("span", Le, L(e.suffix), 1)) : A("", !0)
112
+ ], 2)
113
+ ]),
114
+ _: 1
115
+ }, 16, ["value", "prefix", "suffix"]));
116
+ }
117
+ }), qe = { class: "flex min-h-9 items-center gap-1.5 rounded-control bg-fill px-2.5 text-content-muted focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-border-focus" }, Fe = ["aria-label", "placeholder"], Oe = ["aria-multiselectable", "aria-busy"], Ve = {
118
+ key: 0,
119
+ role: "presentation"
120
+ }, Be = ["aria-selected"], Me = { class: "flex-1 py-2" }, Ne = {
121
+ key: 1,
122
+ role: "presentation",
123
+ class: "flex items-center gap-2.5 px-row-inset py-4 text-subheadline text-content-muted",
124
+ "data-test": "options-loading"
125
+ }, Te = { role: "status" }, ze = {
126
+ key: 2,
127
+ role: "presentation",
128
+ class: "flex flex-col items-start gap-1 px-row-inset py-3",
129
+ "data-test": "options-failed"
130
+ }, Ee = {
131
+ role: "alert",
132
+ class: "text-subheadline text-content-destructive"
133
+ }, Re = ["id"], Ie = ["aria-labelledby"], Ue = ["aria-selected"], Pe = ["disabled", "onClick"], We = {
134
+ key: 0,
135
+ "aria-hidden": "true",
136
+ class: "flex shrink-0 items-center"
137
+ }, je = { class: "min-w-0 flex-1 text-content-strong" }, Ge = {
138
+ key: 0,
139
+ class: "shrink-0 text-footnote text-content-muted"
140
+ }, He = {
141
+ key: 3,
142
+ class: "px-4 py-6 text-center text-subheadline text-content-muted"
143
+ }, H = /* @__PURE__ */ P({
144
+ __name: "OptionList",
145
+ props: {
146
+ options: {},
147
+ modelValue: { default: null },
148
+ multiple: { type: Boolean, default: !1 },
149
+ searchFrom: { default: 9 },
150
+ noneLabel: { default: void 0 },
151
+ presentation: { default: "grouped" },
152
+ status: { default: "loaded" }
153
+ },
154
+ emits: ["select", "retry"],
155
+ setup(l, { emit: t }) {
156
+ const e = l, o = t, { t: r } = oe(), u = V(""), s = re(), f = W("root"), n = $(() => e.options.length >= e.searchFrom), m = $(() => he(ye(e.options, u.value))), c = (y) => e.multiple ? Array.isArray(e.modelValue) && e.modelValue.includes(y.value) : e.modelValue === y.value, _ = $(() => e.multiple ? !1 : e.modelValue === null);
157
+ function q(y) {
158
+ if (!["ArrowDown", "ArrowUp", "Home", "End"].includes(y.key)) return;
159
+ const a = [...f.value?.querySelectorAll("[data-option]:not([disabled])") ?? []];
160
+ if (a.length === 0) return;
161
+ const g = a.indexOf(document.activeElement), p = y.key === "Home" ? 0 : y.key === "End" ? a.length - 1 : y.key === "ArrowDown" ? Math.min(g + 1, a.length - 1) : Math.max(g - 1, 0);
162
+ y.key === "ArrowUp" && g <= 0 ? f.value?.querySelector("[data-option-search]")?.focus() : a[g === -1 && y.key === "ArrowDown" ? 0 : p]?.focus(), y.preventDefault();
163
+ }
164
+ const k = $(() => e.presentation === "grouped"), v = $(() => e.status === "loading"), b = $(() => e.status === "failed");
165
+ return R(() => e.status, (y, C) => {
166
+ C !== "loading" || y === "loading" || ie(() => {
167
+ const a = document.activeElement;
168
+ (!a || a === document.body || a.getAttribute("role") === "dialog" && !!f.value && a.contains(f.value)) && f.value?.querySelector("[data-option-search], [data-option]:not([disabled])")?.focus({ preventScroll: !0 });
169
+ });
170
+ }), (y, C) => (h(), D("div", {
171
+ ref_key: "root",
172
+ ref: f,
173
+ "data-test": "option-list",
174
+ onKeydown: q
175
+ }, [
176
+ n.value ? (h(), D("div", {
177
+ key: 0,
178
+ class: S(["sticky top-0 z-10 pb-2", k.value ? "bg-surface-page pt-1" : "bg-surface-cell"])
179
+ }, [
180
+ x("label", qe, [
181
+ M(i(N), {
182
+ name: "search",
183
+ size: 16,
184
+ class: "shrink-0"
185
+ }),
186
+ ue(x("input", {
187
+ "onUpdate:modelValue": C[0] || (C[0] = (a) => u.value = a),
188
+ "data-option-search": "",
189
+ type: "search",
190
+ enterkeyhint: "search",
191
+ autocomplete: "off",
192
+ autocapitalize: "off",
193
+ spellcheck: "false",
194
+ "aria-label": i(r)("core.form.select.search"),
195
+ placeholder: i(r)("core.form.select.search"),
196
+ class: "min-w-0 flex-1 border-0 bg-transparent p-0 text-body text-content-strong outline-none placeholder:text-content-disabled focus:ring-0"
197
+ }, null, 8, Fe), [
198
+ [ce, u.value]
199
+ ])
200
+ ])
201
+ ], 2)) : A("", !0),
202
+ x("ul", {
203
+ class: S(["flex flex-col", k.value ? "gap-group-gap" : "gap-2"]),
204
+ role: "listbox",
205
+ "aria-multiselectable": e.multiple || void 0,
206
+ "aria-busy": v.value || void 0
207
+ }, [
208
+ e.noneLabel && u.value === "" ? (h(), D("li", Ve, [
209
+ x("ul", {
210
+ role: "group",
211
+ class: S(k.value ? "rounded-group bg-surface-cell shadow-group" : "")
212
+ }, [
213
+ x("li", {
214
+ role: "option",
215
+ "aria-selected": _.value
216
+ }, [
217
+ x("button", {
218
+ type: "button",
219
+ "data-option": "",
220
+ class: S(["flex min-h-row w-full cursor-pointer items-center gap-3 px-row-inset text-left text-body hover:bg-fill focus-visible:bg-fill focus-visible:outline-none active:bg-fill", [_.value ? "text-content-strong" : "text-content-muted", k.value ? "rounded-group" : "rounded-control"]]),
221
+ onClick: C[1] || (C[1] = (a) => o("select", null))
222
+ }, [
223
+ x("span", Me, L(e.noneLabel), 1),
224
+ _.value ? (h(), T(i(N), {
225
+ key: 0,
226
+ name: "checkCustom",
227
+ size: 18,
228
+ class: "shrink-0 text-content-link"
229
+ })) : A("", !0)
230
+ ], 2)
231
+ ], 8, Be)
232
+ ], 2)
233
+ ])) : A("", !0),
234
+ v.value ? (h(), D("li", Ne, [
235
+ M(i(N), {
236
+ name: "loader4Line",
237
+ size: 16,
238
+ class: "shrink-0 animate-spin text-content-link"
239
+ }),
240
+ x("span", Te, L(i(r)("core.form.select.loading")), 1)
241
+ ])) : b.value ? (h(), D("li", ze, [
242
+ x("span", Ee, L(i(r)("core.form.select.load_failed")), 1),
243
+ x("button", {
244
+ type: "button",
245
+ "data-option": "",
246
+ "data-test": "options-retry",
247
+ class: "-ml-2 cursor-pointer rounded-control px-2 py-1 text-subheadline font-medium text-content-link hover:bg-fill focus-visible:bg-fill focus-visible:outline-none",
248
+ onClick: C[2] || (C[2] = (a) => o("retry"))
249
+ }, L(i(r)("core.actions.retry")), 1)
250
+ ])) : A("", !0),
251
+ (h(!0), D(j, null, G(m.value, (a, g) => (h(), D("li", {
252
+ key: a.title ?? g,
253
+ role: "presentation"
254
+ }, [
255
+ a.title ? (h(), D("p", {
256
+ key: 0,
257
+ id: `${i(s)}-${g}`,
258
+ class: "px-row-inset pb-1.5 text-footnote uppercase tracking-wide text-content-muted"
259
+ }, L(a.title), 9, Re)) : A("", !0),
260
+ x("ul", {
261
+ role: "group",
262
+ "aria-labelledby": a.title ? `${i(s)}-${g}` : void 0,
263
+ class: S(k.value ? "rounded-group bg-surface-cell shadow-group" : "")
264
+ }, [
265
+ (h(!0), D(j, null, G(a.options, (p) => (h(), D("li", {
266
+ key: String(p.value),
267
+ role: "option",
268
+ "aria-selected": c(p),
269
+ class: "group/option"
270
+ }, [
271
+ x("button", {
272
+ type: "button",
273
+ "data-option": "",
274
+ "data-test": "option",
275
+ disabled: p.disabled,
276
+ class: S(["flex w-full cursor-pointer items-stretch gap-3 pl-row-inset text-left text-body hover:bg-fill focus-visible:bg-fill focus-visible:outline-none active:bg-fill disabled:cursor-not-allowed disabled:opacity-45", k.value ? "group-first/option:rounded-t-group group-last/option:rounded-b-group" : "rounded-control"]),
277
+ onClick: (O) => o("select", p.value)
278
+ }, [
279
+ e.multiple ? (h(), D("span", We, [
280
+ x("span", {
281
+ class: S(["flex size-5.5 items-center justify-center rounded-full border", c(p) ? "border-control-on bg-control-on text-white" : "border-border-control"])
282
+ }, [
283
+ c(p) ? (h(), T(i(N), {
284
+ key: 0,
285
+ name: "checkCustom",
286
+ size: 12
287
+ })) : A("", !0)
288
+ ], 2)
289
+ ])) : A("", !0),
290
+ x("span", {
291
+ class: S(["flex min-h-row min-w-0 flex-1 items-center gap-3 py-2 pr-row-inset", k.value ? "border-t border-border-separator group-first/option:border-t-0" : ""])
292
+ }, [
293
+ x("span", je, L(p.label), 1),
294
+ p.description ? (h(), D("span", Ge, L(p.description), 1)) : A("", !0),
295
+ !e.multiple && c(p) ? (h(), T(i(N), {
296
+ key: 1,
297
+ name: "checkCustom",
298
+ size: 18,
299
+ class: "shrink-0 text-content-link"
300
+ })) : A("", !0)
301
+ ], 2)
302
+ ], 10, Pe)
303
+ ], 8, Ue))), 128))
304
+ ], 10, Ie)
305
+ ]))), 128)),
306
+ m.value.length === 0 && !v.value && !b.value ? (h(), D("li", He, L(i(r)("core.form.select.no_matches")), 1)) : A("", !0)
307
+ ], 10, Oe)
308
+ ], 544));
309
+ }
310
+ }), Ke = Symbol("vue-core.recentChoices"), ne = 5, Je = (l) => {
311
+ if (typeof l != "object" || l === null) return !1;
312
+ const t = l;
313
+ return (typeof t.value == "string" || typeof t.value == "number") && typeof t.label == "string";
314
+ }, Qe = {
315
+ read(l) {
316
+ try {
317
+ const t = JSON.parse(localStorage.getItem(`vue-core.recent.${l}`) ?? "[]");
318
+ return Array.isArray(t) ? t.filter(Je).slice(0, ne) : [];
319
+ } catch {
320
+ return [];
321
+ }
322
+ },
323
+ write(l, t) {
324
+ try {
325
+ localStorage.setItem(`vue-core.recent.${l}`, JSON.stringify(t));
326
+ } catch {
327
+ }
328
+ }
329
+ };
330
+ function vt(l, t) {
331
+ const e = E(t.trim());
332
+ if (e === "") return { before: "", match: "", after: l };
333
+ let o = "";
334
+ const r = [];
335
+ let u = 0;
336
+ for (const m of l) {
337
+ const c = E(m);
338
+ for (let _ = 0; _ < c.length; _++) r.push(u);
339
+ o += c, u += m.length;
340
+ }
341
+ const s = o.indexOf(e);
342
+ if (s < 0) return { before: "", match: "", after: l };
343
+ const f = r[s] ?? 0, n = r[s + e.length] ?? l.length;
344
+ return { before: l.slice(0, f), match: l.slice(f, n), after: l.slice(n) };
345
+ }
346
+ function gt(l, t) {
347
+ return l === "" || t.length <= l.length ? "" : t.toLocaleLowerCase().startsWith(l.toLocaleLowerCase()) ? t.slice(l.length) : "";
348
+ }
349
+ function Xe(l, t) {
350
+ const e = E(t.trim());
351
+ if (e === "") return [...l];
352
+ const o = [], r = [];
353
+ for (const u of l) {
354
+ const s = E(u.label);
355
+ s.startsWith(e) ? o.push(u) : (s.includes(e) || u.description !== void 0 && E(u.description).includes(e)) && r.push(u);
356
+ }
357
+ return [...o, ...r];
358
+ }
359
+ function bt(l, t, e, o) {
360
+ return l && (t > 0 || e === "loading" || e === "failed" || e === "loaded" && o);
361
+ }
362
+ function ae() {
363
+ const l = X([]), t = V("idle");
364
+ let e = 0, o = null;
365
+ function r() {
366
+ e++, o?.abort(), o = null;
367
+ }
368
+ async function u(s, f = (n) => n) {
369
+ r();
370
+ const n = e;
371
+ o = new AbortController(), t.value = "loading";
372
+ try {
373
+ const m = await s(o.signal);
374
+ if (n !== e) return;
375
+ l.value = f(m), t.value = "loaded";
376
+ } catch (m) {
377
+ if (n !== e || $e(m)) return;
378
+ l.value = [], t.value = "failed";
379
+ }
380
+ }
381
+ return { items: l, status: t, run: u, cancel: r };
382
+ }
383
+ function ht(l) {
384
+ const t = de(Ke, Qe), e = ae(), { items: o, status: r } = e, u = X([]), s = V(!1), f = V(0), n = V(!1);
385
+ let m = "", c = null;
386
+ const _ = $(() => r.value === "idle" ? u.value : o.value), q = $(() => r.value === "idle" && u.value.length > 0), k = $(() => _.value[f.value]);
387
+ function v() {
388
+ e.cancel(), c && clearTimeout(c), c = null;
389
+ }
390
+ fe(v);
391
+ function b(d) {
392
+ return f.value = 0, n.value = !1, d.slice(0, l.limit());
393
+ }
394
+ const y = (d, w) => e.run((F) => w(d, { signal: F }), b);
395
+ function C(d) {
396
+ m = d, v(), s.value = !0;
397
+ const w = l.source(), F = d.trim() === "";
398
+ if (!w || F && !l.listAllWhenEmpty || typeof w == "function" && d.trim().length < l.minLength()) {
399
+ r.value = "idle", o.value = [], f.value = 0, n.value = !1;
400
+ return;
401
+ }
402
+ typeof w == "function" ? c = setTimeout(() => void y(d, w), l.debounce()) : (o.value = b(Xe(w, d)), r.value = "loaded");
403
+ }
404
+ function a(d) {
405
+ const w = l.recents();
406
+ u.value = w ? t.read(w) : [], C(d), s.value = _.value.length > 0;
407
+ }
408
+ function g() {
409
+ v(), s.value = !1, r.value === "loading" && (r.value = "idle");
410
+ }
411
+ function p(d) {
412
+ const w = l.recents();
413
+ if (!w) return;
414
+ const F = t.read(w).filter((se) => se.value !== d.value);
415
+ t.write(w, [{ value: d.value, label: d.label, ...d.description !== void 0 ? { description: d.description } : {} }, ...F].slice(0, ne));
416
+ }
417
+ function O(d, w = !0) {
418
+ f.value = d, w && (n.value = !0);
419
+ }
420
+ function I(d, w) {
421
+ if (d.key === "Escape" && s.value)
422
+ d.stopPropagation(), d.preventDefault(), g();
423
+ else if (d.key === "ArrowDown" || d.key === "ArrowUp") {
424
+ if (d.preventDefault(), !s.value) {
425
+ a(m), s.value = !0;
426
+ return;
427
+ }
428
+ const F = _.value.length - 1;
429
+ O(d.key === "ArrowDown" ? Math.min(f.value + 1, F) : Math.max(f.value - 1, 0));
430
+ } else if (d.key === "Enter" && s.value) {
431
+ const F = k.value;
432
+ F && !F.disabled && (n.value || !w.enterNeedsMove) && (d.preventDefault(), w.pick(F));
433
+ } else d.key === "Tab" && !d.shiftKey && s.value && w.complete?.() && d.preventDefault();
434
+ }
435
+ return { items: _, showingRecent: q, status: r, open: s, highlighted: f, moved: n, current: k, ask: C, show: a, close: g, cancel: v, remember: p, highlight: O, keydown: I };
436
+ }
437
+ function yt(l) {
438
+ const t = ae(), e = l.for !== void 0;
439
+ let o = 0;
440
+ function r() {
441
+ const u = l.for?.();
442
+ if (e && u == null) {
443
+ t.cancel(), t.items.value = [], t.status.value = "idle";
444
+ return;
445
+ }
446
+ t.run(
447
+ (s) => e ? l.load(u, { signal: s }) : l.load({ signal: s })
448
+ );
449
+ }
450
+ return R(
451
+ () => l.for?.(),
452
+ (u, s) => {
453
+ s != null && o++, r();
454
+ },
455
+ { immediate: !0 }
456
+ ), pe(t.cancel), {
457
+ get status() {
458
+ return t.status.value;
459
+ },
460
+ get options() {
461
+ return t.items.value;
462
+ },
463
+ get generation() {
464
+ return o;
465
+ },
466
+ reload: r
467
+ };
468
+ }
469
+ const z = (l) => Array.isArray(l), Ye = [];
470
+ function Ze(l, t) {
471
+ const e = $(() => {
472
+ const n = l();
473
+ return z(n) ? n : n.options;
474
+ }), o = $(() => {
475
+ const n = l();
476
+ return z(n) ? "loaded" : n.status;
477
+ }), r = $(() => o.value === "loading" || o.value === "failed" ? Ye : e.value), u = $(() => o.value === "loading"), s = l();
478
+ let f = z(s) ? 0 : s.generation;
479
+ return R(
480
+ () => {
481
+ const n = l();
482
+ return z(n) ? null : n.status === "loaded" || n.status === "idle" ? n.options : null;
483
+ },
484
+ (n) => {
485
+ const m = l();
486
+ n === null || z(m) || m.generation === f || (f = m.generation, t(n));
487
+ }
488
+ ), { known: e, rows: r, status: o, loading: u, reload: () => {
489
+ const n = l();
490
+ z(n) || n.reload();
491
+ } };
492
+ }
493
+ const et = ["id", "disabled", "aria-expanded", "aria-required", "aria-invalid", "aria-describedby", "aria-busy"], tt = ["id", "disabled", "aria-required", "aria-invalid", "aria-describedby", "aria-busy", "onClick"], lt = { class: "max-h-72 overflow-y-auto" }, xt = /* @__PURE__ */ P({
494
+ __name: "SelectField",
495
+ props: /* @__PURE__ */ J(/* @__PURE__ */ Q({
496
+ label: {},
497
+ hint: {},
498
+ error: {},
499
+ required: { type: Boolean },
500
+ editable: { type: Boolean },
501
+ disabled: { type: Boolean },
502
+ lockedReason: {},
503
+ presentation: {},
504
+ name: {},
505
+ options: {},
506
+ selected: {},
507
+ placeholder: {},
508
+ clearable: { type: Boolean },
509
+ searchFrom: {}
510
+ }, { ...le, selected: null, placeholder: void 0, clearable: !1, searchFrom: 9 }), {
511
+ modelValue: { default: null },
512
+ modelModifiers: {}
513
+ }),
514
+ emits: ["update:modelValue"],
515
+ setup(l) {
516
+ const t = l, e = K(l, "modelValue"), { t: o } = oe(), r = ke(), u = !!Y(), s = W("sheet"), f = V(!1), n = Ze(() => t.options, (v) => {
517
+ e.value !== null && !v.some((b) => b.value === e.value) && (e.value = null);
518
+ }), m = $(() => n.known.value.find((v) => v.value === e.value) ?? (t.selected?.value === e.value ? t.selected : null)), c = $(() => t.placeholder ?? o("core.form.select.choose")), _ = Z("popup", () => t.error ? "error" : t.disabled ? "locked" : "rest");
519
+ function q(v) {
520
+ e.value = v, s.value?.dismiss();
521
+ }
522
+ const k = $(() => [
523
+ "flex max-w-full min-w-0 items-center gap-1.5 py-1 pl-2.5 pr-2 text-body focus-visible:outline-none",
524
+ u ? "compact:pl-0 compact:pr-0" : "",
525
+ t.disabled ? "cursor-not-allowed" : "cursor-pointer"
526
+ ]);
527
+ return (v, b) => (h(), T(ee, U(i(te)(t), {
528
+ value: m.value?.label ?? null
529
+ }), {
530
+ default: B(({ id: y, describedby: C, invalid: a }) => [
531
+ x("div", {
532
+ class: S(["inline-flex max-w-full min-w-0", i(_)])
533
+ }, [
534
+ i(r) ? (h(), D("button", {
535
+ key: 0,
536
+ id: y,
537
+ type: "button",
538
+ disabled: t.disabled,
539
+ "aria-haspopup": "dialog",
540
+ "aria-expanded": f.value,
541
+ "aria-required": t.required || void 0,
542
+ "aria-invalid": a || void 0,
543
+ "aria-describedby": C,
544
+ "aria-busy": i(n).loading.value || void 0,
545
+ class: S(k.value),
546
+ onClick: b[0] || (b[0] = (g) => s.value?.present())
547
+ }, [
548
+ x("span", {
549
+ class: S(["min-w-0 truncate", m.value ? u ? "text-content-strong compact:text-content-muted" : "text-content-strong" : "text-content-disabled"])
550
+ }, L(m.value?.label ?? c.value), 3),
551
+ M(i(N), {
552
+ name: i(n).loading.value ? "loader4Line" : "expandUpDownLine",
553
+ size: 14,
554
+ class: S(["shrink-0 text-content-muted", i(n).loading.value ? "animate-spin" : ""])
555
+ }, null, 8, ["name", "class"])
556
+ ], 10, et)) : (h(), T(_e, {
557
+ key: 1,
558
+ label: t.label ?? c.value,
559
+ width: "md",
560
+ "match-trigger-width": "",
561
+ placement: "bottom-start",
562
+ arrow: !1
563
+ }, {
564
+ trigger: B(({ toggle: g, attrs: p }) => [
565
+ x("button", U({
566
+ id: y,
567
+ type: "button"
568
+ }, p, {
569
+ "aria-haspopup": "listbox",
570
+ disabled: t.disabled,
571
+ "aria-required": t.required || void 0,
572
+ "aria-invalid": a || void 0,
573
+ "aria-describedby": C,
574
+ "aria-busy": i(n).loading.value || void 0,
575
+ class: k.value,
576
+ onClick: g
577
+ }), [
578
+ x("span", {
579
+ class: S(["min-w-0 truncate", m.value ? "text-content-strong" : "text-content-disabled"])
580
+ }, L(m.value?.label ?? c.value), 3),
581
+ M(i(N), {
582
+ name: i(n).loading.value ? "loader4Line" : "expandUpDownLine",
583
+ size: 14,
584
+ class: S(["shrink-0 text-content-muted", i(n).loading.value ? "animate-spin" : ""])
585
+ }, null, 8, ["name", "class"])
586
+ ], 16, tt)
587
+ ]),
588
+ default: B(({ dismiss: g }) => [
589
+ x("div", lt, [
590
+ M(H, {
591
+ options: i(n).rows.value,
592
+ status: i(n).status.value,
593
+ "model-value": e.value,
594
+ "search-from": t.searchFrom,
595
+ "none-label": t.clearable ? i(o)("core.form.select.clear") : void 0,
596
+ presentation: "plain",
597
+ onSelect: (p) => {
598
+ e.value = p, g();
599
+ },
600
+ onRetry: b[1] || (b[1] = (p) => i(n).reload())
601
+ }, null, 8, ["options", "status", "model-value", "search-from", "none-label", "onSelect"])
602
+ ])
603
+ ]),
604
+ _: 2
605
+ }, 1032, ["label"]))
606
+ ], 2),
607
+ i(r) ? (h(), T(we, {
608
+ key: 0,
609
+ ref_key: "sheet",
610
+ ref: s,
611
+ title: t.label ?? c.value,
612
+ grouped: "",
613
+ onPresented: b[4] || (b[4] = (g) => f.value = !0),
614
+ onDismissed: b[5] || (b[5] = (g) => f.value = !1)
615
+ }, me({
616
+ default: B(() => [
617
+ M(H, {
618
+ options: i(n).rows.value,
619
+ status: i(n).status.value,
620
+ "model-value": e.value,
621
+ "search-from": t.searchFrom,
622
+ "none-label": t.clearable ? i(o)("core.form.select.clear") : void 0,
623
+ onSelect: q,
624
+ onRetry: b[2] || (b[2] = (g) => i(n).reload())
625
+ }, null, 8, ["options", "status", "model-value", "search-from", "none-label"])
626
+ ]),
627
+ _: 2
628
+ }, [
629
+ t.clearable && e.value !== null ? {
630
+ name: "footer",
631
+ fn: B(() => [
632
+ M(xe, {
633
+ prominence: "plain",
634
+ onClick: b[3] || (b[3] = (g) => q(null))
635
+ }, {
636
+ default: B(() => [
637
+ ve(L(i(o)("core.form.select.clear")), 1)
638
+ ]),
639
+ _: 1
640
+ })
641
+ ]),
642
+ key: "0"
643
+ } : void 0
644
+ ]), 1032, ["title"])) : A("", !0)
645
+ ]),
646
+ _: 1
647
+ }, 16, ["value"]));
648
+ }
649
+ });
650
+ export {
651
+ mt as _,
652
+ xt as a,
653
+ Ze as b,
654
+ H as c,
655
+ gt as d,
656
+ yt as e,
657
+ bt as l,
658
+ vt as m,
659
+ Ke as r,
660
+ ht as u
661
+ };
@@ -2,7 +2,7 @@ import { ref as _, computed as P, defineComponent as V, useId as Y, watch as j,
2
2
  import { useI18n as W } from "vue-i18n";
3
3
  import { _ as K } from "./Icon.vue_vue_type_script_lang-DtC4_mkz.js";
4
4
  import { a as Q } from "./mediaQuery-CygcXmFW.js";
5
- import { u as q } from "./useDialog-wmyNx2j_.js";
5
+ import { u as q } from "./useDialog-CXR3hN0G.js";
6
6
  const G = 120, J = 0.5, R = 40;
7
7
  function U({ enabled: g, panel: w, body: I, onDismiss: p }) {
8
8
  const o = _(0), l = _(!1);
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as S, useId as $, ref as a, watch as _, onUnmounted as z, openBlock as f, createElementBlock as k, Fragment as I, createElementVNode as b, renderSlot as x, createBlock as N, Teleport as P, mergeProps as B, unref as e, createTextVNode as C, toDisplayString as F, normalizeStyle as L, normalizeClass as V, createCommentVNode as A } from "vue";
2
- import { I as K } from "./dialogStack-DiTG1rZc.js";
2
+ import { I as K } from "./dialogStack-DZZg55w0.js";
3
3
  import { u as M, a as i } from "./anchored-Cj4--8dT.js";
4
4
  const j = /* @__PURE__ */ S({
5
5
  __name: "Tooltip",