obm-upload-form-ui 0.1.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 (59) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +153 -0
  3. package/dist/_plugin-vue_export-helper-DQLEQ__A.js +44 -0
  4. package/dist/_plugin-vue_export-helper-DQLEQ__A.js.map +1 -0
  5. package/dist/core/client/auth.d.ts +37 -0
  6. package/dist/core/client/errors.d.ts +31 -0
  7. package/dist/core/client/formApi.d.ts +23 -0
  8. package/dist/core/client/http.d.ts +10 -0
  9. package/dist/core/config.d.ts +25 -0
  10. package/dist/core/geo/wkt.d.ts +7 -0
  11. package/dist/core/i18n/messages.d.ts +13 -0
  12. package/dist/core/index.d.ts +16 -0
  13. package/dist/core/schema/guards.d.ts +12 -0
  14. package/dist/core/schema/normalize.d.ts +10 -0
  15. package/dist/core/schema/types.d.ts +119 -0
  16. package/dist/core/submit/linked.d.ts +58 -0
  17. package/dist/core/submit/metadata.d.ts +37 -0
  18. package/dist/core/submit/submitClient.d.ts +40 -0
  19. package/dist/core/validation/engine.d.ts +18 -0
  20. package/dist/core/validation/rules.d.ts +29 -0
  21. package/dist/core/validation/types.d.ts +48 -0
  22. package/dist/core.js +377 -0
  23. package/dist/core.js.map +1 -0
  24. package/dist/custom-elements/obm-upload-form-ui.css +1 -0
  25. package/dist/custom-elements/obm-upload-form.iife.js +21 -0
  26. package/dist/custom-elements/obm-upload-form.iife.js.map +1 -0
  27. package/dist/custom-elements/obm-upload-form.js +16889 -0
  28. package/dist/custom-elements/obm-upload-form.js.map +1 -0
  29. package/dist/engine-7r1HChwT.js +174 -0
  30. package/dist/engine-7r1HChwT.js.map +1 -0
  31. package/dist/obm-upload-form-ui.css +1 -0
  32. package/dist/vue/FieldWrapper.vue.d.ts +30 -0
  33. package/dist/vue/UploadForm.vue.d.ts +58 -0
  34. package/dist/vue/ValidationSummary.vue.d.ts +13 -0
  35. package/dist/vue/fieldRegistry.d.ts +5 -0
  36. package/dist/vue/fields/ArrayField.vue.d.ts +14 -0
  37. package/dist/vue/fields/AutocompleteField.vue.d.ts +15 -0
  38. package/dist/vue/fields/BooleanField.vue.d.ts +14 -0
  39. package/dist/vue/fields/NumericField.vue.d.ts +14 -0
  40. package/dist/vue/fields/SelectField.vue.d.ts +15 -0
  41. package/dist/vue/fields/TemporalField.vue.d.ts +14 -0
  42. package/dist/vue/fields/TextAreaField.vue.d.ts +14 -0
  43. package/dist/vue/fields/TextField.vue.d.ts +14 -0
  44. package/dist/vue/fields/TimeIntervalField.vue.d.ts +14 -0
  45. package/dist/vue/fields/UnsupportedField.vue.d.ts +8 -0
  46. package/dist/vue/fields/WktTextField.vue.d.ts +14 -0
  47. package/dist/vue/index.d.ts +19 -0
  48. package/dist/vue/types.d.ts +22 -0
  49. package/dist/vue/uiText.d.ts +3 -0
  50. package/dist/vue/useFormState.d.ts +13 -0
  51. package/dist/vue-leaflet/GeometryField.vue.d.ts +14 -0
  52. package/dist/vue-leaflet/index.d.ts +9 -0
  53. package/dist/vue-leaflet.js +117 -0
  54. package/dist/vue-leaflet.js.map +1 -0
  55. package/dist/vue.js +813 -0
  56. package/dist/vue.js.map +1 -0
  57. package/dist/wkt-C0dkXG1x.js +359 -0
  58. package/dist/wkt-C0dkXG1x.js.map +1 -0
  59. package/package.json +113 -0
package/dist/vue.js ADDED
@@ -0,0 +1,813 @@
1
+ import { p as te, U as J, v as Y } from "./engine-7r1HChwT.js";
2
+ import { defineComponent as C, useId as N, ref as E, computed as d, openBlock as u, createElementBlock as s, Fragment as S, renderList as M, createTextVNode as O, toDisplayString as g, createElementVNode as h, unref as b, createCommentVNode as T, withDirectives as le, withKeys as ae, withModifiers as Q, vModelText as oe, normalizeClass as R, mergeProps as ne, createBlock as z, reactive as ue, renderSlot as se, watch as ie, createVNode as de, withCtx as re, resolveDynamicComponent as ce, nextTick as me } from "vue";
3
+ import { u as A, _ as B } from "./_plugin-vue_export-helper-DQLEQ__A.js";
4
+ import { VueDatePicker as X } from "@vuepic/vue-datepicker";
5
+ import { hu as Z, enUS as ee } from "date-fns/locale";
6
+ import { i as pe } from "./wkt-C0dkXG1x.js";
7
+ const ve = { class: "obm-array" }, fe = {
8
+ key: 0,
9
+ class: "obm-array__items"
10
+ }, _e = ["disabled", "aria-label", "onClick"], be = { class: "obm-array__editor" }, ye = ["id", "disabled", "onKeydown"], ge = ["disabled"], he = /* @__PURE__ */ C({
11
+ __name: "ArrayField",
12
+ props: {
13
+ column: {},
14
+ modelValue: {},
15
+ issues: { default: () => [] },
16
+ disabled: { type: Boolean, default: !1 },
17
+ options: { default: void 0 },
18
+ language: { default: "en" }
19
+ },
20
+ emits: ["update:modelValue"],
21
+ setup(t, { expose: m, emit: c }) {
22
+ const e = t, r = c, i = N(), l = E(""), o = d(
23
+ () => Array.isArray(e.modelValue) ? e.modelValue.map(String) : []
24
+ ), a = d(() => e.disabled || e.column.api_params.readonly);
25
+ function n() {
26
+ const y = l.value.trim();
27
+ y === "" || a.value || (r("update:modelValue", [...o.value, y]), l.value = "");
28
+ }
29
+ function v(y) {
30
+ if (a.value) return;
31
+ const V = o.value.filter(($, _) => _ !== y);
32
+ r("update:modelValue", V.length > 0 ? V : null);
33
+ }
34
+ return m({ inputId: i }), (y, V) => (u(), s("div", ve, [
35
+ o.value.length > 0 ? (u(), s("ul", fe, [
36
+ (u(!0), s(S, null, M(o.value, ($, _) => (u(), s("li", {
37
+ key: `${$}-${_}`,
38
+ class: "obm-array__item"
39
+ }, [
40
+ O(g($) + " ", 1),
41
+ h("button", {
42
+ type: "button",
43
+ class: "obm-array__remove",
44
+ disabled: a.value,
45
+ "aria-label": b(A)("removeItem", t.language),
46
+ onClick: (F) => v(_)
47
+ }, " × ", 8, _e)
48
+ ]))), 128))
49
+ ])) : T("", !0),
50
+ h("div", be, [
51
+ le(h("input", {
52
+ id: b(i),
53
+ "onUpdate:modelValue": V[0] || (V[0] = ($) => l.value = $),
54
+ class: "obm-input",
55
+ type: "text",
56
+ disabled: a.value,
57
+ onKeydown: ae(Q(n, ["prevent"]), ["enter"])
58
+ }, null, 40, ye), [
59
+ [oe, l.value]
60
+ ]),
61
+ h("button", {
62
+ type: "button",
63
+ class: "obm-array__add",
64
+ disabled: a.value,
65
+ onClick: n
66
+ }, g(b(A)("addItem", t.language)), 9, ge)
67
+ ])
68
+ ]));
69
+ }
70
+ }), Ve = /* @__PURE__ */ B(he, [["__scopeId", "data-v-f3bd5905"]]), ke = { class: "obm-autocomplete" }, xe = {
71
+ key: 0,
72
+ class: "obm-autocomplete__tags"
73
+ }, $e = ["disabled", "aria-label", "onClick"], Fe = ["id", "aria-expanded", "value", "disabled"], Ie = {
74
+ key: 1,
75
+ class: "obm-autocomplete__list",
76
+ role: "listbox"
77
+ }, we = ["aria-selected", "onMousedown"], Se = /* @__PURE__ */ C({
78
+ __name: "AutocompleteField",
79
+ props: {
80
+ column: {},
81
+ modelValue: {},
82
+ issues: { default: () => [] },
83
+ disabled: { type: Boolean, default: !1 },
84
+ options: { default: void 0 },
85
+ language: { default: "en" }
86
+ },
87
+ emits: ["update:modelValue"],
88
+ setup(t, { expose: m, emit: c }) {
89
+ const e = t, r = c, i = N(), l = E(""), o = E(!1), a = E(0), n = d(
90
+ () => e.options ?? e.column.generated_list_elements
91
+ ), v = d(
92
+ () => {
93
+ var p;
94
+ return e.column.type === "autocompletelist" || ((p = e.column.list_definition) == null ? void 0 : p.multiselect) === !0;
95
+ }
96
+ ), y = d(() => {
97
+ var p;
98
+ return ((p = e.column.list_definition) == null ? void 0 : p.extendable) === !0;
99
+ }), V = d(() => e.disabled || e.column.api_params.readonly), $ = d(() => e.modelValue === null || e.modelValue === void 0 || e.modelValue === "" ? [] : Array.isArray(e.modelValue) ? e.modelValue.map(String) : [String(e.modelValue)]), _ = d(() => {
100
+ const p = l.value.trim().toLowerCase(), U = n.value.filter((w) => !$.value.includes(w.value));
101
+ return p === "" ? U.slice(0, 20) : U.filter(
102
+ (w) => w.label.toLowerCase().includes(p) || w.value.toLowerCase().includes(p)
103
+ ).slice(0, 20);
104
+ });
105
+ function F(p) {
106
+ var U;
107
+ return ((U = n.value.find((w) => w.value === p)) == null ? void 0 : U.label) ?? p;
108
+ }
109
+ function x(p) {
110
+ v.value ? r("update:modelValue", p.length > 0 ? p : null) : r("update:modelValue", p.length > 0 ? p[p.length - 1] : null);
111
+ }
112
+ function f(p) {
113
+ x(v.value ? [...$.value, p.value] : [p.value]), l.value = v.value ? "" : p.label, o.value = !1;
114
+ }
115
+ function k(p) {
116
+ V.value || x($.value.filter((U) => U !== p));
117
+ }
118
+ function D(p) {
119
+ l.value = p.target.value, o.value = !0, a.value = 0, !v.value && y.value && r("update:modelValue", l.value === "" ? null : l.value), !v.value && l.value === "" && r("update:modelValue", null);
120
+ }
121
+ function I(p) {
122
+ p.key === "ArrowDown" ? (o.value = !0, a.value = Math.min(a.value + 1, _.value.length - 1), p.preventDefault()) : p.key === "ArrowUp" ? (a.value = Math.max(a.value - 1, 0), p.preventDefault()) : p.key === "Enter" ? o.value && _.value[a.value] ? (f(_.value[a.value]), p.preventDefault()) : y.value && v.value && l.value.trim() !== "" && (x([...$.value, l.value.trim()]), l.value = "", p.preventDefault()) : p.key === "Escape" && (o.value = !1);
123
+ }
124
+ function H() {
125
+ setTimeout(() => {
126
+ o.value = !1;
127
+ }, 150);
128
+ }
129
+ return m({ inputId: i }), (p, U) => (u(), s("div", ke, [
130
+ v.value && $.value.length > 0 ? (u(), s("ul", xe, [
131
+ (u(!0), s(S, null, M($.value, (w) => (u(), s("li", {
132
+ key: w,
133
+ class: "obm-autocomplete__tag"
134
+ }, [
135
+ O(g(F(w)) + " ", 1),
136
+ h("button", {
137
+ type: "button",
138
+ class: "obm-autocomplete__remove",
139
+ disabled: V.value,
140
+ "aria-label": b(A)("removeItem", t.language),
141
+ onClick: (L) => k(w)
142
+ }, " × ", 8, $e)
143
+ ]))), 128))
144
+ ])) : T("", !0),
145
+ h("input", {
146
+ id: b(i),
147
+ class: "obm-input",
148
+ type: "text",
149
+ role: "combobox",
150
+ "aria-expanded": o.value,
151
+ autocomplete: "off",
152
+ value: l.value,
153
+ disabled: V.value,
154
+ onInput: D,
155
+ onKeydown: I,
156
+ onFocus: U[0] || (U[0] = (w) => o.value = !0),
157
+ onBlur: H
158
+ }, null, 40, Fe),
159
+ o.value && _.value.length > 0 ? (u(), s("ul", Ie, [
160
+ (u(!0), s(S, null, M(_.value, (w, L) => (u(), s("li", {
161
+ key: w.value,
162
+ class: R(["obm-autocomplete__option", { "obm-autocomplete__option--active": L === a.value }]),
163
+ role: "option",
164
+ "aria-selected": L === a.value,
165
+ onMousedown: Q((St) => f(w), ["prevent"])
166
+ }, g(w.label), 43, we))), 128))
167
+ ])) : T("", !0)
168
+ ]));
169
+ }
170
+ }), j = /* @__PURE__ */ B(Se, [["__scopeId", "data-v-f1029942"]]), Te = ["id", "value", "disabled"], Ce = ["id", "checked", "disabled"], Be = /* @__PURE__ */ C({
171
+ __name: "BooleanField",
172
+ props: {
173
+ column: {},
174
+ modelValue: {},
175
+ issues: { default: () => [] },
176
+ disabled: { type: Boolean, default: !1 },
177
+ options: { default: void 0 },
178
+ language: { default: "en" }
179
+ },
180
+ emits: ["update:modelValue"],
181
+ setup(t, { expose: m, emit: c }) {
182
+ const e = t, r = c, i = N(), l = d(() => e.column.has_empty_line), o = d(() => e.modelValue === !0 || e.modelValue === "true"), a = d(() => e.modelValue === !0 || e.modelValue === "true" ? "true" : e.modelValue === !1 || e.modelValue === "false" ? "false" : "");
183
+ function n(y) {
184
+ r("update:modelValue", y.target.checked);
185
+ }
186
+ function v(y) {
187
+ const V = y.target.value;
188
+ r("update:modelValue", V === "" ? null : V === "true");
189
+ }
190
+ return m({ inputId: i }), (y, V) => l.value ? (u(), s("select", {
191
+ key: 0,
192
+ id: b(i),
193
+ class: "obm-select",
194
+ value: a.value,
195
+ disabled: t.disabled || t.column.api_params.readonly,
196
+ onChange: v
197
+ }, [...V[0] || (V[0] = [
198
+ h("option", { value: "" }, null, -1),
199
+ h("option", { value: "true" }, "✓", -1),
200
+ h("option", { value: "false" }, "✗", -1)
201
+ ])], 40, Te)) : (u(), s("input", {
202
+ key: 1,
203
+ id: b(i),
204
+ class: "obm-checkbox",
205
+ type: "checkbox",
206
+ checked: o.value,
207
+ disabled: t.disabled || t.column.api_params.readonly,
208
+ onChange: n
209
+ }, null, 40, Ce));
210
+ }
211
+ }), Ae = /* @__PURE__ */ B(Be, [["__scopeId", "data-v-dcc3af9e"]]), Me = ["id", "min", "max", "value", "disabled", "readonly"], De = /* @__PURE__ */ C({
212
+ __name: "NumericField",
213
+ props: {
214
+ column: {},
215
+ modelValue: {},
216
+ issues: { default: () => [] },
217
+ disabled: { type: Boolean, default: !1 },
218
+ options: { default: void 0 },
219
+ language: { default: "en" }
220
+ },
221
+ emits: ["update:modelValue"],
222
+ setup(t, { expose: m, emit: c }) {
223
+ const e = t, r = c, i = N(), l = d(() => e.column.validate.type !== "minmax" || !e.column.validate.value ? null : te(e.column.validate.value)), o = d(() => e.modelValue == null ? "" : String(e.modelValue));
224
+ function a(n) {
225
+ const v = n.target.value;
226
+ if (v === "") {
227
+ r("update:modelValue", null);
228
+ return;
229
+ }
230
+ const y = Number(v);
231
+ r("update:modelValue", Number.isFinite(y) ? y : v);
232
+ }
233
+ return m({ inputId: i }), (n, v) => {
234
+ var y, V;
235
+ return u(), s("input", {
236
+ id: b(i),
237
+ class: "obm-input obm-input--numeric",
238
+ type: "number",
239
+ inputmode: "decimal",
240
+ step: "any",
241
+ min: ((y = l.value) == null ? void 0 : y.min) ?? void 0,
242
+ max: ((V = l.value) == null ? void 0 : V.max) ?? void 0,
243
+ value: o.value,
244
+ disabled: t.disabled || t.column.api_params.readonly,
245
+ readonly: t.column.api_params.readonly,
246
+ onInput: a
247
+ }, null, 40, Me);
248
+ };
249
+ }
250
+ }), Ue = /* @__PURE__ */ B(De, [["__scopeId", "data-v-7e3304c5"]]), Ne = {
251
+ key: 0,
252
+ class: "obm-buttons",
253
+ role: "group"
254
+ }, He = ["disabled", "onClick"], Ee = {
255
+ key: 0,
256
+ class: "obm-buttons__empty"
257
+ }, Oe = ["id", "multiple", "disabled"], We = {
258
+ key: 0,
259
+ value: ""
260
+ }, ze = ["value", "selected"], Le = /* @__PURE__ */ C({
261
+ __name: "SelectField",
262
+ props: {
263
+ column: {},
264
+ modelValue: {},
265
+ issues: { default: () => [] },
266
+ disabled: { type: Boolean, default: !1 },
267
+ options: { default: void 0 },
268
+ language: { default: "en" }
269
+ },
270
+ emits: ["update:modelValue"],
271
+ setup(t, { expose: m, emit: c }) {
272
+ const e = t, r = c, i = N(), l = d(
273
+ () => e.options ?? e.column.generated_list_elements
274
+ ), o = d(() => {
275
+ var _;
276
+ return ((_ = e.column.list_definition) == null ? void 0 : _.multiselect) === !0;
277
+ }), a = d(() => e.column.api_params.list_elements_as_buttons), n = d(() => e.disabled || e.column.api_params.readonly), v = d(() => e.modelValue === null || e.modelValue === void 0 || e.modelValue === "" ? [] : Array.isArray(e.modelValue) ? e.modelValue.map(String) : [String(e.modelValue)]);
278
+ function y(_) {
279
+ r("update:modelValue", _ === "" ? null : _);
280
+ }
281
+ function V(_) {
282
+ const F = _.target;
283
+ if (o.value) {
284
+ const x = Array.from(F.selectedOptions).map((f) => f.value);
285
+ r("update:modelValue", x.length > 0 ? x : null);
286
+ } else
287
+ y(F.value);
288
+ }
289
+ function $(_) {
290
+ if (!n.value)
291
+ if (o.value) {
292
+ const F = new Set(v.value);
293
+ F.has(_) ? F.delete(_) : F.add(_), r("update:modelValue", F.size > 0 ? [...F] : null);
294
+ } else
295
+ y(v.value.includes(_) ? "" : _);
296
+ }
297
+ return m({ inputId: i }), (_, F) => a.value ? (u(), s("div", Ne, [
298
+ (u(!0), s(S, null, M(l.value, (x) => (u(), s("button", {
299
+ key: x.value,
300
+ type: "button",
301
+ class: R(["obm-buttons__item", { "obm-buttons__item--active": v.value.includes(x.value) }]),
302
+ disabled: n.value,
303
+ onClick: (f) => $(x.value)
304
+ }, g(x.label), 11, He))), 128)),
305
+ l.value.length === 0 ? (u(), s("span", Ee, g(b(A)("noOptions", t.language)), 1)) : T("", !0)
306
+ ])) : (u(), s("select", ne({
307
+ key: 1,
308
+ id: b(i),
309
+ class: "obm-select",
310
+ multiple: o.value
311
+ }, o.value ? {} : { value: v.value[0] ?? "" }, {
312
+ disabled: n.value,
313
+ onChange: V
314
+ }), [
315
+ t.column.has_empty_line && !o.value ? (u(), s("option", We)) : T("", !0),
316
+ (u(!0), s(S, null, M(l.value, (x) => (u(), s("option", {
317
+ key: x.value,
318
+ value: x.value,
319
+ selected: v.value.includes(x.value)
320
+ }, g(x.label), 9, ze))), 128))
321
+ ], 16, Oe));
322
+ }
323
+ }), G = /* @__PURE__ */ B(Le, [["__scopeId", "data-v-956359eb"]]), Pe = /* @__PURE__ */ C({
324
+ __name: "TemporalField",
325
+ props: {
326
+ column: {},
327
+ modelValue: {},
328
+ issues: { default: () => [] },
329
+ disabled: { type: Boolean, default: !1 },
330
+ options: { default: void 0 },
331
+ language: { default: "en" }
332
+ },
333
+ emits: ["update:modelValue"],
334
+ setup(t, { expose: m, emit: c }) {
335
+ const e = t, r = c, i = N(), l = {
336
+ date: "yyyy-MM-dd",
337
+ datetime: "yyyy-MM-dd'T'HH:mm",
338
+ time: "HH:mm"
339
+ }, o = {
340
+ date: "yyyy-MM-dd",
341
+ datetime: "yyyy-MM-dd HH:mm",
342
+ time: "HH:mm"
343
+ }, a = d(() => l[e.column.type] ?? l.date), n = d(() => o[e.column.type] ?? o.date), v = d(() => e.column.type === "time"), y = d(() => ({ enableTimePicker: e.column.type !== "date" })), V = d(() => e.language === "hu" ? Z : ee), $ = d(() => e.modelValue == null ? null : String(e.modelValue));
344
+ function _(F) {
345
+ r("update:modelValue", F ?? null);
346
+ }
347
+ return m({ inputId: i }), (F, x) => (u(), z(b(X), {
348
+ class: "obm-input obm-input--temporal",
349
+ "model-value": $.value,
350
+ "model-type": a.value,
351
+ format: n.value,
352
+ formats: { input: n.value },
353
+ "text-input": { format: n.value },
354
+ "time-picker": v.value,
355
+ "time-config": y.value,
356
+ locale: V.value,
357
+ "input-attrs": { id: b(i) },
358
+ disabled: t.disabled || t.column.api_params.readonly,
359
+ readonly: t.column.api_params.readonly,
360
+ "auto-apply": !0,
361
+ "onUpdate:modelValue": _
362
+ }, null, 8, ["model-value", "model-type", "format", "formats", "text-input", "time-picker", "time-config", "locale", "input-attrs", "disabled", "readonly"]));
363
+ }
364
+ }), P = /* @__PURE__ */ B(Pe, [["__scopeId", "data-v-4d74b753"]]), qe = ["id", "value", "disabled", "readonly"], Ke = /* @__PURE__ */ C({
365
+ __name: "TextAreaField",
366
+ props: {
367
+ column: {},
368
+ modelValue: {},
369
+ issues: { default: () => [] },
370
+ disabled: { type: Boolean, default: !1 },
371
+ options: { default: void 0 },
372
+ language: { default: "en" }
373
+ },
374
+ emits: ["update:modelValue"],
375
+ setup(t, { expose: m, emit: c }) {
376
+ const e = t, r = c, i = N(), l = d(() => e.modelValue == null ? "" : String(e.modelValue));
377
+ function o(a) {
378
+ const n = a.target.value;
379
+ r("update:modelValue", n === "" ? null : n);
380
+ }
381
+ return m({ inputId: i }), (a, n) => (u(), s("textarea", {
382
+ id: b(i),
383
+ class: "obm-textarea",
384
+ rows: "4",
385
+ value: l.value,
386
+ disabled: t.disabled || t.column.api_params.readonly,
387
+ readonly: t.column.api_params.readonly,
388
+ onInput: o
389
+ }, null, 40, qe));
390
+ }
391
+ }), Re = /* @__PURE__ */ B(Ke, [["__scopeId", "data-v-89317b83"]]), Ye = ["id", "value", "disabled", "readonly"], je = /* @__PURE__ */ C({
392
+ __name: "TextField",
393
+ props: {
394
+ column: {},
395
+ modelValue: {},
396
+ issues: { default: () => [] },
397
+ disabled: { type: Boolean, default: !1 },
398
+ options: { default: void 0 },
399
+ language: { default: "en" }
400
+ },
401
+ emits: ["update:modelValue"],
402
+ setup(t, { expose: m, emit: c }) {
403
+ const e = t, r = c, i = N(), l = d(() => e.modelValue == null ? "" : String(e.modelValue));
404
+ function o(a) {
405
+ const n = a.target.value;
406
+ r("update:modelValue", n === "" ? null : n);
407
+ }
408
+ return m({ inputId: i }), (a, n) => (u(), s("input", {
409
+ id: b(i),
410
+ class: "obm-input",
411
+ type: "text",
412
+ value: l.value,
413
+ disabled: t.disabled || t.column.api_params.readonly,
414
+ readonly: t.column.api_params.readonly,
415
+ onInput: o
416
+ }, null, 40, Ye));
417
+ }
418
+ }), q = /* @__PURE__ */ B(je, [["__scopeId", "data-v-17beed28"]]), Ge = /* @__PURE__ */ C({
419
+ __name: "TimeIntervalField",
420
+ props: {
421
+ column: {},
422
+ modelValue: {},
423
+ issues: { default: () => [] },
424
+ disabled: { type: Boolean, default: !1 },
425
+ options: { default: void 0 },
426
+ language: { default: "en" }
427
+ },
428
+ emits: ["update:modelValue"],
429
+ setup(t, { expose: m, emit: c }) {
430
+ const e = t, r = c, i = N(), l = d(() => e.language === "hu" ? Z : ee), o = d(() => {
431
+ if (e.modelValue == null) return null;
432
+ const [n = "", v = ""] = String(e.modelValue).split("-");
433
+ return [n, v];
434
+ });
435
+ function a(n) {
436
+ r("update:modelValue", n == null ? null : `${n[0]}-${n[1]}`);
437
+ }
438
+ return m({ inputId: i }), (n, v) => (u(), z(b(X), {
439
+ class: "obm-input",
440
+ "model-value": o.value,
441
+ "model-type": "HH:mm",
442
+ formats: { input: "HH:mm" },
443
+ "text-input": { format: "HH:mm" },
444
+ "time-picker": "",
445
+ range: "",
446
+ locale: l.value,
447
+ "input-attrs": { id: b(i) },
448
+ disabled: t.disabled || t.column.api_params.readonly,
449
+ readonly: t.column.api_params.readonly,
450
+ "auto-apply": !0,
451
+ "onUpdate:modelValue": a
452
+ }, null, 8, ["model-value", "locale", "input-attrs", "disabled", "readonly"]));
453
+ }
454
+ }), Je = /* @__PURE__ */ B(Ge, [["__scopeId", "data-v-47ce4a6f"]]), Qe = { class: "obm-unsupported" }, Xe = { class: "obm-unsupported__message" }, Ze = { class: "obm-unsupported__type" }, et = /* @__PURE__ */ C({
455
+ __name: "UnsupportedField",
456
+ props: {
457
+ column: {},
458
+ modelValue: {},
459
+ issues: { default: () => [] },
460
+ disabled: { type: Boolean, default: !1 },
461
+ options: { default: void 0 },
462
+ language: { default: "en" }
463
+ },
464
+ setup(t) {
465
+ const m = t, c = d(
466
+ () => m.column.type === J ? m.column.raw_type : m.column.type
467
+ );
468
+ return (e, r) => (u(), s("div", Qe, [
469
+ h("p", Xe, g(b(A)("unsupportedField", t.language)), 1),
470
+ h("p", Ze, g(b(A)("unsupportedFieldType", t.language, { type: c.value })), 1)
471
+ ]));
472
+ }
473
+ }), K = /* @__PURE__ */ B(et, [["__scopeId", "data-v-bf4d6902"]]), tt = { class: "obm-wkt" }, lt = ["id", "value", "disabled", "readonly"], at = {
474
+ key: 0,
475
+ class: "obm-wkt__hint"
476
+ }, ot = /* @__PURE__ */ C({
477
+ __name: "WktTextField",
478
+ props: {
479
+ column: {},
480
+ modelValue: {},
481
+ issues: { default: () => [] },
482
+ disabled: { type: Boolean, default: !1 },
483
+ options: { default: void 0 },
484
+ language: { default: "en" }
485
+ },
486
+ emits: ["update:modelValue"],
487
+ setup(t, { expose: m, emit: c }) {
488
+ const e = t, r = c, i = N(), l = d(() => e.modelValue == null ? "" : String(e.modelValue)), o = d(() => l.value.trim() !== "" && !pe(l.value));
489
+ function a(n) {
490
+ const v = n.target.value;
491
+ r("update:modelValue", v === "" ? null : v);
492
+ }
493
+ return m({ inputId: i }), (n, v) => (u(), s("div", tt, [
494
+ h("textarea", {
495
+ id: b(i),
496
+ class: "obm-textarea",
497
+ rows: "3",
498
+ placeholder: "POINT(19.05 47.5)",
499
+ value: l.value,
500
+ disabled: t.disabled || t.column.api_params.readonly,
501
+ readonly: t.column.api_params.readonly,
502
+ onInput: a
503
+ }, null, 40, lt),
504
+ o.value ? (u(), s("p", at, g(b(A)("invalidWkt", t.language)), 1)) : T("", !0)
505
+ ]));
506
+ }
507
+ }), W = /* @__PURE__ */ B(ot, [["__scopeId", "data-v-ddeb8617"]]);
508
+ function nt(t = {}) {
509
+ return {
510
+ text: q,
511
+ // crings / timetominutes render as plain text in v0 (validated only).
512
+ crings: q,
513
+ timetominutes: q,
514
+ textarea: Re,
515
+ numeric: Ue,
516
+ boolean: Ae,
517
+ date: P,
518
+ datetime: P,
519
+ time: P,
520
+ time_interval: Je,
521
+ list: G,
522
+ custom_list: G,
523
+ autocomplete: j,
524
+ autocompletelist: j,
525
+ array: Ve,
526
+ // Geometry columns fall back to WKT text editing; register the
527
+ // Leaflet-based widget from obm-upload-form-ui/vue-leaflet to upgrade.
528
+ point: W,
529
+ line: W,
530
+ polygon: W,
531
+ wkt: W,
532
+ // Attachments are out of scope for v0.
533
+ file_id: K,
534
+ photo_id: K,
535
+ [J]: K,
536
+ ...t
537
+ };
538
+ }
539
+ function ut(t, m) {
540
+ const c = ue({});
541
+ function e(o) {
542
+ for (const a of t.columns) {
543
+ const n = o == null ? void 0 : o[a.column];
544
+ c[a.column] = n !== void 0 ? n : a.default_value ?? null;
545
+ }
546
+ for (const [a, n] of Object.entries(o ?? {}))
547
+ a in c || (c[a] = n);
548
+ }
549
+ function r(o, a) {
550
+ c[o] = a;
551
+ }
552
+ function i() {
553
+ return { ...c };
554
+ }
555
+ function l() {
556
+ for (const o of t.columns)
557
+ o.api_params.sticky || o.api_params.once_field || (c[o.column] = o.default_value ?? null);
558
+ }
559
+ return e(m), { values: c, initialize: e, setValue: r, dataForSubmit: i, resetForNextEntry: l };
560
+ }
561
+ const st = ["data-column"], it = ["for"], dt = ["title"], rt = {
562
+ key: 0,
563
+ class: "obm-field__description"
564
+ }, ct = { class: "obm-field__control" }, mt = {
565
+ key: 1,
566
+ class: "obm-field__issues"
567
+ }, pt = /* @__PURE__ */ C({
568
+ __name: "FieldWrapper",
569
+ props: {
570
+ column: {},
571
+ issues: { default: () => [] },
572
+ language: { default: "en" },
573
+ inputId: { default: void 0 }
574
+ },
575
+ setup(t) {
576
+ const m = t, c = d(() => m.issues.filter((l) => l.severity === "error")), e = d(() => m.issues.filter((l) => l.severity === "warning")), r = d(() => m.issues.filter((l) => l.severity === "unsupported")), i = d(() => c.value.length > 0);
577
+ return (l, o) => (u(), s("div", {
578
+ class: R(["obm-field", {
579
+ "obm-field--invalid": i.value,
580
+ "obm-field--warning": !i.value && e.value.length > 0
581
+ }]),
582
+ "data-column": t.column.column
583
+ }, [
584
+ h("label", {
585
+ class: "obm-field__label",
586
+ for: t.inputId
587
+ }, [
588
+ O(g(t.column.short_name) + " ", 1),
589
+ t.column.validate.required ? (u(), s("span", {
590
+ key: 0,
591
+ class: "obm-field__required",
592
+ title: b(A)("required", t.language)
593
+ }, "*", 8, dt)) : T("", !0)
594
+ ], 8, it),
595
+ t.column.description ? (u(), s("p", rt, g(t.column.description), 1)) : T("", !0),
596
+ h("div", ct, [
597
+ se(l.$slots, "default", {}, void 0, !0)
598
+ ]),
599
+ t.issues.length > 0 ? (u(), s("ul", mt, [
600
+ (u(!0), s(S, null, M(c.value, (a, n) => (u(), s("li", {
601
+ key: `e-${n}`,
602
+ class: "obm-field__issue obm-field__issue--error"
603
+ }, g(a.message), 1))), 128)),
604
+ (u(!0), s(S, null, M(e.value, (a, n) => (u(), s("li", {
605
+ key: `w-${n}`,
606
+ class: "obm-field__issue obm-field__issue--warning"
607
+ }, g(a.message), 1))), 128)),
608
+ (u(!0), s(S, null, M(r.value, (a, n) => (u(), s("li", {
609
+ key: `n-${n}`,
610
+ class: "obm-field__issue obm-field__issue--notice"
611
+ }, g(a.message), 1))), 128))
612
+ ])) : T("", !0)
613
+ ], 10, st));
614
+ }
615
+ }), vt = /* @__PURE__ */ B(pt, [["__scopeId", "data-v-6bb9fbe4"]]), ft = {
616
+ key: 0,
617
+ class: "obm-summary",
618
+ role: "alert"
619
+ }, _t = { class: "obm-summary__title obm-summary__title--error" }, bt = { class: "obm-summary__list" }, yt = { class: "obm-summary__title obm-summary__title--warning" }, gt = { class: "obm-summary__list" }, ht = { class: "obm-summary__title obm-summary__title--notice" }, Vt = { class: "obm-summary__list" }, kt = /* @__PURE__ */ C({
620
+ __name: "ValidationSummary",
621
+ props: {
622
+ issues: {},
623
+ columns: { default: () => [] },
624
+ language: { default: "en" }
625
+ },
626
+ setup(t) {
627
+ const m = t;
628
+ function c(l) {
629
+ var o;
630
+ return ((o = m.columns.find((a) => a.column === l)) == null ? void 0 : o.short_name) ?? l;
631
+ }
632
+ const e = d(() => m.issues.filter((l) => l.severity === "error")), r = d(() => m.issues.filter((l) => l.severity === "warning")), i = d(() => m.issues.filter((l) => l.severity === "unsupported"));
633
+ return (l, o) => t.issues.length > 0 ? (u(), s("div", ft, [
634
+ e.value.length > 0 ? (u(), s(S, { key: 0 }, [
635
+ h("p", _t, g(b(A)("validationSummaryTitle", t.language)), 1),
636
+ h("ul", bt, [
637
+ (u(!0), s(S, null, M(e.value, (a, n) => (u(), s("li", {
638
+ key: `e-${n}`
639
+ }, [
640
+ h("strong", null, g(c(a.column)) + ":", 1),
641
+ O(" " + g(a.message), 1)
642
+ ]))), 128))
643
+ ])
644
+ ], 64)) : T("", !0),
645
+ r.value.length > 0 ? (u(), s(S, { key: 1 }, [
646
+ h("p", yt, g(b(A)("warningsTitle", t.language)), 1),
647
+ h("ul", gt, [
648
+ (u(!0), s(S, null, M(r.value, (a, n) => (u(), s("li", {
649
+ key: `w-${n}`
650
+ }, [
651
+ h("strong", null, g(c(a.column)) + ":", 1),
652
+ O(" " + g(a.message), 1)
653
+ ]))), 128))
654
+ ])
655
+ ], 64)) : T("", !0),
656
+ i.value.length > 0 ? (u(), s(S, { key: 2 }, [
657
+ h("p", ht, g(b(A)("noticesTitle", t.language)), 1),
658
+ h("ul", Vt, [
659
+ (u(!0), s(S, null, M(i.value, (a, n) => (u(), s("li", {
660
+ key: `n-${n}`
661
+ }, [
662
+ h("strong", null, g(c(a.column)) + ":", 1),
663
+ O(" " + g(a.message), 1)
664
+ ]))), 128))
665
+ ])
666
+ ], 64)) : T("", !0)
667
+ ])) : T("", !0);
668
+ }
669
+ }), xt = /* @__PURE__ */ B(kt, [["__scopeId", "data-v-3ea41b02"]]), $t = { class: "obm-form__actions" }, Ft = ["disabled"], It = ["disabled"], wt = /* @__PURE__ */ C({
670
+ __name: "UploadForm",
671
+ props: {
672
+ schema: {},
673
+ modelValue: { default: void 0 },
674
+ validation: { default: void 0 },
675
+ registry: { default: void 0 },
676
+ language: { default: "en" },
677
+ disabled: { type: Boolean, default: !1 },
678
+ showDraftButton: { type: Boolean, default: !0 },
679
+ labels: { default: () => ({}) }
680
+ },
681
+ emits: ["update:modelValue", "submit", "refused"],
682
+ setup(t, { expose: m, emit: c }) {
683
+ const e = t, r = c, i = E(null), l = ut(e.schema, e.modelValue), o = E(null);
684
+ ie(
685
+ () => e.modelValue,
686
+ (f) => {
687
+ f !== void 0 && l.initialize(f);
688
+ }
689
+ );
690
+ const a = d(() => nt(e.registry)), n = d(() => {
691
+ var f;
692
+ return {
693
+ ...e.validation,
694
+ language: ((f = e.validation) == null ? void 0 : f.language) ?? e.language
695
+ };
696
+ }), v = d(
697
+ () => e.schema.columns.filter((f) => !f.api_params.hidden)
698
+ );
699
+ function y(f) {
700
+ return a.value[f.type];
701
+ }
702
+ function V(f) {
703
+ if (!f.filterable_list_elements) return;
704
+ const k = e.schema.columns.find(
705
+ (I) => {
706
+ var H;
707
+ return (H = I.list_definition) == null ? void 0 : H.trigger_target_column.includes(f.column);
708
+ }
709
+ );
710
+ if (!k) return;
711
+ const D = l.values[k.column];
712
+ return D == null || D === "" ? [] : f.filterable_list_elements[String(D)] ?? [];
713
+ }
714
+ function $(f) {
715
+ var k;
716
+ return ((k = o.value) == null ? void 0 : k.issues.filter((D) => D.column === f.column)) ?? [];
717
+ }
718
+ function _(f, k) {
719
+ l.setValue(f.column, k), r("update:modelValue", l.dataForSubmit());
720
+ }
721
+ async function F() {
722
+ var k;
723
+ await me();
724
+ const f = (k = i.value) == null ? void 0 : k.querySelector(".obm-field--invalid");
725
+ f && typeof f.scrollIntoView == "function" && f.scrollIntoView({ behavior: "smooth", block: "center" });
726
+ }
727
+ function x(f) {
728
+ const k = Y(
729
+ e.schema,
730
+ l.dataForSubmit(),
731
+ f,
732
+ n.value
733
+ );
734
+ if (o.value = k, k.blocking) {
735
+ r("refused", k), F();
736
+ return;
737
+ }
738
+ r("submit", { data: l.dataForSubmit(), state: f, validation: k });
739
+ }
740
+ return m({
741
+ /** Sticky/once_field-aware reset for "save and add another" flows. */
742
+ resetForNextEntry: l.resetForNextEntry,
743
+ validate: (f) => Y(e.schema, l.dataForSubmit(), f, n.value)
744
+ }), (f, k) => {
745
+ var D;
746
+ return u(), s("div", {
747
+ ref_key: "rootElement",
748
+ ref: i,
749
+ class: "obm-form"
750
+ }, [
751
+ de(xt, {
752
+ issues: ((D = o.value) == null ? void 0 : D.issues) ?? [],
753
+ columns: t.schema.columns,
754
+ language: t.language
755
+ }, null, 8, ["issues", "columns", "language"]),
756
+ (u(!0), s(S, null, M(v.value, (I) => (u(), z(vt, {
757
+ key: I.column,
758
+ column: I,
759
+ issues: $(I),
760
+ language: t.language
761
+ }, {
762
+ default: re(() => [
763
+ (u(), z(ce(y(I)), {
764
+ column: I,
765
+ "model-value": b(l).values[I.column],
766
+ issues: $(I),
767
+ disabled: t.disabled,
768
+ options: V(I),
769
+ language: t.language,
770
+ "onUpdate:modelValue": (H) => _(I, H)
771
+ }, null, 8, ["column", "model-value", "issues", "disabled", "options", "language", "onUpdate:modelValue"]))
772
+ ]),
773
+ _: 2
774
+ }, 1032, ["column", "issues", "language"]))), 128)),
775
+ h("div", $t, [
776
+ t.showDraftButton ? (u(), s("button", {
777
+ key: 0,
778
+ type: "button",
779
+ class: "obm-form__button obm-form__button--draft",
780
+ disabled: t.disabled,
781
+ onClick: k[0] || (k[0] = (I) => x("draft"))
782
+ }, g(t.labels.saveDraft ?? b(A)("saveDraft", t.language)), 9, Ft)) : T("", !0),
783
+ h("button", {
784
+ type: "button",
785
+ class: "obm-form__button obm-form__button--finalize",
786
+ disabled: t.disabled,
787
+ onClick: k[1] || (k[1] = (I) => x("final"))
788
+ }, g(t.labels.finalize ?? b(A)("finalize", t.language)), 9, It)
789
+ ])
790
+ ], 512);
791
+ };
792
+ }
793
+ }), Ut = /* @__PURE__ */ B(wt, [["__scopeId", "data-v-28c84992"]]);
794
+ export {
795
+ Ve as ArrayField,
796
+ j as AutocompleteField,
797
+ Ae as BooleanField,
798
+ vt as FieldWrapper,
799
+ Ue as NumericField,
800
+ G as SelectField,
801
+ P as TemporalField,
802
+ Re as TextAreaField,
803
+ q as TextField,
804
+ Je as TimeIntervalField,
805
+ K as UnsupportedField,
806
+ Ut as UploadForm,
807
+ xt as ValidationSummary,
808
+ W as WktTextField,
809
+ nt as createFieldRegistry,
810
+ A as uiText,
811
+ ut as useFormState
812
+ };
813
+ //# sourceMappingURL=vue.js.map